Цитата(_Артём_ @ 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(); //разрешаем прерывание
}
//---------------------------------------------------------------------