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

 
 
> IAR -> ATMEGA128 бутлоадер
D!m@
сообщение Dec 20 2009, 17:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Пишу бутлоадер для Atmega128 в IAR.
Не получается стереть страницу!
Макрос
Код
#define _PAGE_ERASE(addr) __AddrToZByteToSPMCR_SPM( (void __flash *) (addr), 0x03 )
не работает smile3046.gif
Прога работает только флеш не стирается.

Код
_flash const unsigned char  mas[256]@0x3000={0,1,2,3,4,5,6,7,8,9};
void main()
{
    
#pragma diag_suppress=Pe1053 // Suppress warning for conversion from long-type address to flash ptr.
  _WAIT_FOR_SPM();        
  _PAGE_ERASE( 0х3000 );
#pragma diag_default=Pe1053 // Back to default.
_WAIT_FOR_SPM();    

printf("%02X",SPMCSR);
for(int i=0x3000;i<0x3025;i++)
  printf("%02X",_LOAD_PROGRAM_MEMORY(i));



Результат:
Код
00 00 01 02 03 04 ....

фюзы разрешают полный доступ
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Dec 22 2009, 05:29
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(D!m@ @ Dec 21 2009, 16:52) *
код асм вроде правильн.
Если смотреть на картинку с ассемблерным кодом, то видно что адреса указаны в байтах (инкремент адреса между инструкциями >1).
Ошибка типичная: в datasheet'е адрес начала секции загрузчика указан в словах, а не байтах, чего вы не учли. Код должен располагаться с адреса (в случае BOOTSZ = 00, как у вас) 0xF000 * 2 = 0x1E000 в байтах.
Код всё ещё вне секци загрузчика, потому и не может что-либо сделать.
Go to the top of the page
 
+Quote Post
МП41
сообщение Dec 22 2009, 20:16
Сообщение #3


4 синих кубика
****

Группа: Участник
Сообщений: 526
Регистрация: 19-09-08
Из: полупроводника, металла и стекла
Пользователь №: 40 326



Цитата(SysRq @ Dec 22 2009, 07:29) *
...
Ошибка типичная: в datasheet'е адрес начала секции загрузчика указан в словах, а не байтах, чего вы не учли. Код должен располагаться с адреса (в случае BOOTSZ = 00, как у вас) 0xF000 * 2 = 0x1E000 в байтах.
Код всё ещё вне секци загрузчика, потому и не может что-либо сделать.

Спасибо, у меня всё заработало! Теперь об этом буду помнить.


--------------------
p-n-p-p-n-p-n-n-p-n-p структура однако очень эффективна
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 31st August 2025 - 05:55
Рейтинг@Mail.ru


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