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

 
 
> Вектор прерывания RESET, Зависание контроллера при смене адреса перехода
-=MISHA=-
сообщение Nov 14 2012, 14:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 5-07-06
Пользователь №: 18 607



Здравствуйте! Пишу код для MSP430F449.

Есть два разных проекта: основная программа и загрузчик для обновления программы по uart.
В xcl файле описал расположение кодов независимо друг от друга.

xcl-файл основной программы:
Код
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=1200-EFFF

-Z(CODE)ISR_CODE,CODE_ID=1200-EFFF
-Z(CODE)CSTART=2000-20FF
-P(CODE)CODE=1200-EFFF

-Z(CODE)INTVEC=FFE0-FFFF
-Z(CODE)RESET=FFFE-FFFF


xcl-файл загрузчика:
Код
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=F000-FDFF

-Z(CODE)ISR_CODE,CODE_ID=F000-FDFF
-Z(CODE)CSTART=F800-F8FF
-P(CODE)CODE=F000-FDFF

-Z(CODE)RESET=FFFE-FFFF


В загрузчике прерывания не использую.

Выполняю следующие действия в загрузчике:
1. Очищаю все сектора флеш-памяти по адресам основной программы
и сектор векторов прерываний.
2. Постранично (по 256 слов) прописываю код основной программы во флеш-память.
3. Когда записываю адрес перехода при сбросе по адресу 0xFFFE-0xFFFF, контроллер зависает.
4. Помогает аппаратный сброс программатором.
5. После этого нормально работает загрузчик и основная программа.

Что я делаю не так, подскажите пожалуйста.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KARLSON
сообщение Nov 15 2012, 03:57
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Я делал такую вещь. 2 программы, загрущик и основная. В загрущике в секторе векторов только адрес начала программы (то же не использую прерывания)
@FFFE
00 F6
В прошивке основной программы меняю адрес начала программы по тому же адресу на начало загрущика.
Заливаю основную программу через свой загрущик. В конце загрущик считает контрольную суммму всей флеш памяти и сохраняет её в информационной памяти.
Затем считываю через программатор всю флеш память и этот текстовый файл передаю в производство, что бы не заливали основную программу сами, т.к. это долго.
Кстати, загрущик у меня стирает память по сегментно, не всё сразу.
При старте загрущик считает контрольную сумму всей памяти и сверяет с сохранённым значением. Если правильно, переходим на адрес основной прошивки.
Вот и всё.

Сообщение отредактировал KARLSON - Nov 15 2012, 03:59


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
-=MISHA=-
сообщение Nov 15 2012, 05:59
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 5-07-06
Пользователь №: 18 607



Цитата(KARLSON @ Nov 15 2012, 07:57) *
Я делал такую вещь. 2 программы, загрущик и основная. В загрущике в секторе векторов только адрес начала программы (то же не использую прерывания)
@FFFE
00 F6
В прошивке основной программы меняю адрес начала программы по тому же адресу на начало загрущика.
Заливаю основную программу через свой загрущик. В конце загрущик считает контрольную суммму всей флеш памяти и сохраняет её в информационной памяти.
Затем считываю через программатор всю флеш память и этот текстовый файл передаю в производство, что бы не заливали основную программу сами, т.к. это долго.
Кстати, загрущик у меня стирает память по сегментно, не всё сразу.
При старте загрущик считает контрольную сумму всей памяти и сверяет с сохранённым значением. Если правильно, переходим на адрес основной прошивки.
Вот и всё.

Я делаю точно также.
Наконец нашел причину перезагрузки контроллера после записи векторов прерываний.
Я писал с адреса 0xFFE0 256 слов вместо 16 и перетирал флеш с адреса 0x0000. Невнимательность.

Всем спасибо за помощь!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 20:30
Рейтинг@Mail.ru


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