Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Selfprogramming & IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
_Артём_
Есть ли в IAR библиотеки для поддержки самопрограммирования, навроде тех что идут с AVRGCC?

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



_Артём_
Попробовал через instrictic.h:
записывал страницу 0, в результате flash записалась по адресу начиная с 0x8000.
RAMPZ почемуто не учитывается. Или его самому ставить надо?
mempfis_
Цитата(_Артём_ @ Jul 24 2012, 17:42) *
Попробовал через instrictic.h:
записывал страницу 0, в результате flash записалась по адресу начиная с 0x8000.
RAMPZ почемуто не учитывается. Или его самому ставить надо?


Это для atmega128? RAMPZ устанавливаете сами.
_Артём_
Цитата(mempfis_ @ Jul 24 2012, 18:13) *
Это для atmega128?

Для atmega1284P.

Цитата(mempfis_ @ Jul 24 2012, 18:13) *
RAMPZ устанавливаете сами.

Да, вроде получается.
Плохо что каждый раз придётся помнить про RAMPZ.
kolobok0
Цитата(_Артём_ @ Jul 24 2012, 19:21) *
...Плохо что каждый раз придётся помнить про RAMPZ.


можно идти от противного. устанавливать его один раз. А исключения отрабатывать по полному...
т.е. сохранить статус блокировки, блокировка асинхронности, сохранить рампз, выставить рампз, сделать своё черное дело, восстановить рампз, восстановить блокировку.
_Артём_
Не совсем вас понял.
Цитата(kolobok0 @ Jul 24 2012, 18:59) *
устанавливать его один раз.

Перед стиранием-записью в зависимости от номера страницы?

Цитата(kolobok0 @ Jul 24 2012, 18:59) *
А исключения отрабатывать по полному...

Какие исключения?

Цитата(kolobok0 @ Jul 24 2012, 18:59) *
можно идти от противного. устанавливать его один раз. А исключения отрабатывать по полному...
восстановить рампз, восстановить блокировку.

Восстанавливать рампз? Зачем?
И что за блокировку вы имеете в виду?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.