реклама на сайте
подробности

 
 
> Selfprogramming & IAR
_Артём_
сообщение Jul 24 2012, 12:25
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Есть ли в IAR библиотеки для поддержки самопрограммирования, навроде тех что идут с AVRGCC?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mempfis_
сообщение Jul 24 2012, 14:04
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(_Артём_ @ Jul 24 2012, 15:25) *
Есть ли в IAR библиотеки для поддержки самопрограммирования, навроде тех что идут с AVRGCC?

Спасибо.


Всё находится в intrinsics.h
Пример использования
CODE
//---------------------------------------------
//разблокировка секции RWWW для возможности считывания данных
void unlock_rww(void){ __DataToR0ByteToSPMCR_SPM( 0x00, 0x11 );}
//---------------------------------------------------------------------

//---------------------------------------------------------------------
//ожидание выполнения операции
inline void spm_busy_wait(void){while(SPMCSR&(1<<SPMEN));}
//---------------------------------------------------------------------


//---------------------------------------------------------------------
//функция заполнения временного буффера, размер данных в словах
//данные в байтах объединяются в слова и записываются во временный буффер
void FillTempBuf(unsigned int page)
{
//ожидаем выполнения операции

for(unsigned int i=0; i<PAGE_SIZE; i++)
{
_SPM_FILLTEMP(i<<1,BOOT.buff[i]); //адрес сдвигается на 1 т.к. младший бит игнорируется
}
}
//---------------------------------------------------------------------


//---------------------------------------------------------------------
inline void ENABLE_SPM_INT(void){SPMCSR |= (1<<SPMIE);}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
inline void DISABLE_SPM_INT(void){SPMCSR &= ~(1<<SPMIE);}
//---------------------------------------------------------------------


//---------------------------------------------------------------------
//комманда на стирание страницы
void ErasePage(unsigned int page_addr)
{

#ifdef boot_m324_h
_SPM_ERASE(page_addr<<7);//команда стирания
#else
#ifdef boot_m644_h
_SPM_ERASE(page_addr<<8);//команда стирания
#endif
#endif

spm_busy_wait();
//ENABLE_SPM_INT(); //разрешаем прерывание
}
//---------------------------------------------------------------------

//---------------------------------------------------------------------
//записываем страницу
void PageWrite(unsigned int page)
{
#ifdef boot_m324_h
_SPM_PAGEWRITE(page<<7); //программируем страницу
#else
#ifdef boot_m644_h
_SPM_PAGEWRITE(page<<8); //программируем страницу
#endif
#endif

spm_busy_wait();
//ENABLE_SPM_INT(); //разрешаем прерывание
}
//---------------------------------------------------------------------



Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 02:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01336 секунд с 7
ELECTRONIX ©2004-2016