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

 
 
 
Reply to this topicStart new topic
> команда GO загрузчика LPC111x/LPC11Cxx
Almaz1988
сообщение Oct 9 2012, 06:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Использую мк lpc11C24. Пишу программу прошивки мк используя его аппаратный загрузчик.
Последовательность следующая:
1)Перевожу устройство в режим аппаратного загрузчика
2)Заливаю прошивку
3)Произвожу перезапуск устройства

Зарылся на третьем шаге)
Как я понял для перезапуска устройства используется команда GO.
Вот что написано об этом в мануале LPC111x/LPC11Cxx User manual:
Цитата
Input parameter - Address: Flash or RAM address from which the code execution is to be started.
This address should be on a word boundary.
This command is used to execute a program residing in RAM or flash memory. It
may not be possible to return to the ISP command handler once this command is
successfully executed. This command is blocked when code read protection is
enabled.


Два вопроса:
1) В качестве адреса для перехода использовать адрес обработчика Reset_handler?
2) Как быть, если адрес нечетный?
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 9 2012, 09:20
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Almaz1988 @ Oct 9 2012, 10:21) *
Два вопроса:
1) В качестве адреса для перехода использовать адрес обработчика Reset_handler?
2) Как быть, если адрес нечетный?

Нечетный адрес быть не может! (он используется только для флага в командах, например BX)
Бутлоадер сам ставит этот флаг ему нужен обычный адрес!
Вообще команда GO лучше не использовать для запуска полноценного приложения! Лучше дернуть ресет, а если он не выведен загрузить в ОЗУ программу и ресетнуть контроллер при помощи вотчдога.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 9 2012, 11:06
Сообщение #3


Гуру
******

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



QUOTE (KRS @ Oct 9 2012, 12:20) *
загрузить в ОЗУ программу и ресетнуть контроллер при помощи вотчдога.
Т.е. выполнить команду GO для второй загруженной программы sm.gif


Almaz1988, младший бит адреса у ядер ARM не используется как собственно адрес - он служит признаком thumb-кода.


--------------------
На любой вопрос даю любой ответ
"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
Almaz1988
сообщение Oct 10 2012, 07:01
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Цитата(KRS @ Oct 9 2012, 12:20) *
Нечетный адрес быть не может! (он используется только для флага в командах, например BX)
Бутлоадер сам ставит этот флаг ему нужен обычный адрес!
Вообще команда GO лучше не использовать для запуска полноценного приложения! Лучше дернуть ресет, а если он не выведен загрузить в ОЗУ программу и ресетнуть контроллер при помощи вотчдога.


Располагаю функцию во флеше по адресу 0х2000. Гляжу в МАР-файл - она там расположена по адресу 0х2001.


В общем решил отказаться от использования аппаратного загрузчика (только из-за того, что команда GO не работает). Начал писать полностью софтовый загрузчик.

С использованием IAP-команд
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 10 2012, 08:09
Сообщение #5


Гуру
******

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



QUOTE (Almaz1988 @ Oct 10 2012, 10:01) *
Располагаю функцию во флеше по адресу 0х2000. Гляжу в МАР-файл - она там расположена по адресу 0х2001.
Читайте доки. Адрес 0x2000. Младший бит не является частью адреса.
UM10398, LPC111x/LPC11Cxx User manual:
QUOTE
23.3.1.3.4 Program Counter
The Program Counter(PC) is register R15. It contains the current program address. On
reset, the processor loads the PC with the value of the reset vector, which is at address
0x00000004. Bit[0] of the value is loaded into the EPSR T-bit at reset and must be 1

QUOTE
23.3.1.3.5 Program Status Register
...
Execution Program Status Register: The EPSR contains the Thumb state bit
The following can clear the T bit to 0:
• instructions BLX, BXand POP{ PC}
• restoration from the stacked xPSR value on an exception return
• bit[0] of the vector value on an exception entry.
Attempting to execute instructions when the T bit is 0 results in a HardFault or lockup. See
Section 23–23.3.4.1for more information.


--------------------
На любой вопрос даю любой ответ
"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
Almaz1988
сообщение Oct 16 2012, 08:10
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 100
Регистрация: 19-09-12
Пользователь №: 73 602



Написал полностью самодельный загрузчик на IAP-командах))
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 17 2012, 21:16
Сообщение #7


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Almaz1988 @ Oct 10 2012, 11:01) *
В общем решил отказаться от использования аппаратного загрузчика (только из-за того, что команда GO не работает).


как не работает?
у меня все первичные тесты ее используют (программа в ОЗУ грузиться и выдает результаты в тот же уарт) на всех LPC работает! Только для тумбы там адрес все равно надо четный ставить и приписывать букву T
Go to the top of the page
 
+Quote Post

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

 


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


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