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

 
 
 
Reply to this topicStart new topic
> 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
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
_Артём_
сообщение Jul 24 2012, 14:42
Сообщение #3


Гуру
******

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



Попробовал через instrictic.h:
записывал страницу 0, в результате flash записалась по адресу начиная с 0x8000.
RAMPZ почемуто не учитывается. Или его самому ставить надо?
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jul 24 2012, 15:13
Сообщение #4


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

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



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


Это для atmega128? RAMPZ устанавливаете сами.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 24 2012, 15:21
Сообщение #5


Гуру
******

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



Цитата(mempfis_ @ Jul 24 2012, 18:13) *
Это для atmega128?

Для atmega1284P.

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

Да, вроде получается.
Плохо что каждый раз придётся помнить про RAMPZ.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 24 2012, 15:59
Сообщение #6


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



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


можно идти от противного. устанавливать его один раз. А исключения отрабатывать по полному...
т.е. сохранить статус блокировки, блокировка асинхронности, сохранить рампз, выставить рампз, сделать своё черное дело, восстановить рампз, восстановить блокировку.

Сообщение отредактировал kolobok0 - Jul 24 2012, 16:00
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 24 2012, 16:27
Сообщение #7


Гуру
******

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



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

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

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

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

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

Восстанавливать рампз? Зачем?
И что за блокировку вы имеете в виду?
Go to the top of the page
 
+Quote Post

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

 


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


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