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

 
 
 
Reply to this topicStart new topic
> Проблема с контрольной суммой!, Не считается контрольная сумма.
Sergio66
сообщение Nov 18 2009, 12:19
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Добрый день!

Вот такая проблема...
М32. Bootloader из атмеловского Appnote.
Прикладная программа грузится нормально. Но... если сразу после программирования прикладной секции начать вычисление контрольной суммы (код вычисления КС находится в бут секции), то по всем адресам прикладной секции программа считывает и суммирует 0xff. Если перед вычислением КС микросхему сбросить и принудительно (в AVRStudio) установить программный счетчик на ф-ю вычисления КС, то все нормально считается и суммируется. КС в этом случае совпадает. (Все BLB в 0).
Т.о. у меня получается, что я не могу считать реальное значение апп секции не сделав сброс микросхемы... Без отладчика программа также не хочет вычислять правильно. Постоянно циклится (если КС не совпала, то повторяю программирование). Хотя, если провести аппаратный сброс, то загруженная прикладная программа выполняется правильно. Т.е. она записана БЕЗ ошибок.
Кто нибудь сталкивался с такой проблемой?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 18 2009, 12:58
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Sergio66 @ Nov 18 2009, 14:19) *
Кто нибудь сталкивался с такой проблемой?
Читайте про rww и nrww секции. После записи нужно включить rww секцию битом RWWSRE (это по даташиту на мегу 16, у 32 может быть другое название).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Nov 18 2009, 14:38
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(Сергей Борщ @ Nov 18 2009, 15:58) *
Читайте про rww и nrww секции. После записи нужно включить rww секцию битом RWWSRE (это по даташиту на мегу 16, у 32 может быть другое название).

Делаю так:
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & SPMEN);
SPMCR |= (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");

и ничего не получается....
В отладчике вижу постоянно установленным в "1" бит RWWSE.

Цитата(Sergio66 @ Nov 18 2009, 17:09) *
Делаю так:
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & SPMEN);
SPMCR |= (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");

и ничего не получается....
В отладчике вижу постоянно установленным в "1" бит RWWSE.

ТОчнее происходит так...
Если в отладчике поставить точку останова на строке asm("CLI");, потом продолжить выполнени, то все нормально. Доступ к секции разрешен, и все считается...
Но, если точку останова поставить после кода разрешения, то ничего не работает.
Без отладчика - также не идет...

Цитата(Sergio66 @ Nov 18 2009, 17:27) *
Делаю так:
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & SPMEN);
SPMCR |= (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");

и ничего не получается....
В отладчике вижу постоянно установленным в "1" бит RWWSE.


ТОчнее происходит так...
Если в отладчике поставить точку останова на строке asm("CLI");, потом продолжить выполнени, то все нормально. Доступ к секции разрешен, и все считается...
Но, если точку останова поставить после кода разрешения, то ничего не работает.
Без отладчика - также не идет...


Разобрался...
вот такой код работает...
Код
//reenable the APP SECTION
asm("CLI");
while(SPMCR & RWWSB);
while(SPMCR & SPMEN);
SPMCR = (1<<RWWSRE) | (1<<SPMEN);
asm("spm");
asm("SEI");


вот этой строки не хватало...
while(SPMCR & RWWSB);
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:03
Рейтинг@Mail.ru


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