|
Ликбез, вопрос к "отцам" |
|
|
|
Nov 16 2006, 10:02
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
Только начинаю работать с микроконтроллерами, объясните, пожалуйста, как зашить написанную прогу в камень, что бы получить нормально работающий прошитый проц. Писал в IAR, проц - philips lps2138.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Nov 16 2006, 10:26
|
Знающий
   
Группа: Свой
Сообщений: 851
Регистрация: 28-08-04
Пользователь №: 559

|
Цитата Принципиально доступны два пути программирования кристалла: первый - через JTAG; второй - через UART0 средствами встроенного загрузчика.
О заливке через JTAG. Через JTAG программу можно залить в ОЗУ (для отладочных целей). Это могут делать любые отладчики без специальных ухищрений. Нужно лишь при линковке прописать размещение кода программы в ОЗУ. Записать программу во Flash через JTAG пока можно только одним способом - написав промежуточный код загрузчика который исполняется в ОЗУ и пишет вашу программу во флешь. Так поступает, например, IAR EWARM версий 4.хх.
О заливке через бутлоадер При поставке кристалл прошит загрузчиком (bootloader), который получает управление при аппаратном сбросе и по определенным признакам принимает решение - отдать управление программе пользователя или не стоит. Этих признаков два - состояние ноги P0.14 в момент сброса и корректная CRC программы пользователя. Загрузчик работает через порт UART0 и имеет автодетект скорости. Исчерпывающее описание протокола загрузчика и его работы приведено в LPC2100 Manual.
Филипс бесплатно распространяет программу под Windows, которая именуется ISP. Она умеет загружать программу во Flash и запускать ее на исполнение.
Загрузчик не умеет грузить программу в ОЗУ, однако, при смене версии bootloader'а, код загружается именно в ОЗУ и ему передается управление. Он (загрузчик) , как утверждается Филипсом, не имеет также никаких функций мониторинга или отладки.
Бутлоадер сидит во Flash и вполне доступен для стирания ))). Если в результате отладки Вы его затерли, то единственный способ вернуть контроль над кристаллом - через JTAG. http://www.caxapa.ru/faq/lpc2000.htmlНе помешает заглянуть сюда - FAQ, по АРМам
|
|
|
|
|
Nov 16 2006, 10:47
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
2 COMA спасибо.
2 IV_K все есть, плата - lpc2148 EB v 1.1
|
|
|
|
|
Nov 16 2006, 11:09
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
Цитата в иаре по умолчанию через j-link default loader работает нормально т.е если я выставляю j-link/j-trace то во вкладке download ничего выставлять не надо
|
|
|
|
|
Nov 16 2006, 11:15
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
Цитата в иаре по умолчанию через j-link default loader работает нормально т.е если я выставляю j-link/j-trace то во вкладке download ничего выставлять не надо если я заливаю прогу через j-tag нужно ли ее преобразовывать в hex файл
|
|
|
|
|
Nov 16 2006, 12:25
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
т.е. "симпл код" означает, что произойдет генерация hex файла
|
|
|
|
|
Nov 17 2006, 12:07
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
для чего нужен CSTACK
|
|
|
|
|
Nov 22 2006, 18:11
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
Tакой вопрос, если я размещаю код во флэше, значит ли это, что в регистре MEMMAP нужно выставить режим User Flash Mode. Как в IAR объявить isr если прерывание произошло из-за ошибки выборки команды или из-за неверного обращения к памяти, я нашел только __fiq, __irq, __swi. Хотя в кейле существуют extended keywords для подобных случаев.
|
|
|
|
|
Nov 23 2006, 12:38
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087

|
у меня например сделано так.. MEMMAP = 2; /* Remap 64 bytes of int. RAM to 0x00 */
по прерываниям.. кусок из cstartup.s79 __program_start ; ldr pc,[pc,#24] ; Absolute jump can reach 4 GByte b ?cstartup ; Relative branch allows remap, limited to 32 MByte ; Vectors can be enabled by removing the comments below or by ; using #pragma vector from C code. org 0x04 b undef_handler ; ldr pc,[pc,#24] ; Branch to undef_handler org 0x08 b swi_handler ; ldr pc,[pc,#24] ; Branch to swi_handler org 0x0c b prefetch_handler ; ldr pc,[pc,#24] ; Branch to prefetch_handler org 0x10 b data_handler ; ldr pc,[pc,#24] ; Branch to data_handler org 0x18 b OS_CPU_IRQ_ISR ; ldr pc,[pc,#24] ; Branch to irq_handler org 0x1c b OS_CPU_FIQ_ISR ; ldr pc,[pc,#24] ; Branch to fiq_handler
кусок из сишного файла обработчика.
#pragma location="ICODE" __interwork void undef_handler(void){ __disable_interrupt(); // error("undefined instr"); while (1) {} } #pragma location="ICODE" __interwork void swi_handler(void){ __disable_interrupt(); // error("swi"); while (1) {} } #pragma location="ICODE" __interwork void prefetch_handler(void){ __disable_interrupt(); // error("prefetch abort"); while (1) {} } #pragma location="ICODE" __interwork void data_handler(void){ __disable_interrupt(); // error("data abort"); while (1) {} }
вроде все работает..
|
|
|
|
|
Nov 28 2006, 12:42
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 13-11-06
Пользователь №: 22 246

|
при попытке проошить возникают проблемы
в log окне IAR'а пишется следующее:
Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000181 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000182 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000001DC Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000001E8 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000001F8 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000200 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000210 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000212 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000236 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000242 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000248 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x0000024C Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000250 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000255 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000256 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000038 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x0000003C Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000050 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000000D4 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000102 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000128 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x0000026C Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000270 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000276 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000002D4 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000284 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000294 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000002B0 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x00000170 Tue Nov 28 12:36:31 2006: Warning: Target inconsistency detected at Memory address 0x000002C8 Tue Nov 28 12:36:31 2006: There were warnings during download, see Log Window Tue Nov 28 12:36:33 2006: Loaded debugee: C:\Projects\new\Debug\Exe\new.d79 Tue Nov 28 12:36:33 2006: Target reset Tue Nov 28 12:36:34 2006: The stack 'CSTACK' is filled to 100% (1280 bytes used out of 1280). The warning threshold is set to 90%. Tue Nov 28 12:36:34 2006: The stack pointer for stack 'CSTACK' (currently 0x40001294) is outside the stack range (0x40000000 to 0x40000500) Tue Nov 28 12:36:34 2006: The stack pointer for stack 'SVC_STACK' (currently 0x400032A0) is outside the stack range (0x40000900 to 0x40000B00) Tue Nov 28 12:36:34 2006: The stack pointer for stack 'IRQ_STACK' (currently 0x400022A0) is outside the stack range (0x40000500 to 0x40000700) Tue Nov 28 12:36:34 2006: The stack pointer for stack 'UND_STACK' (currently 0x400032A0) is outside the stack range (0x40000D00 to 0x40000F00) Tue Nov 28 12:36:34 2006: The stack pointer for stack 'ABT_STACK' (currently 0x400032A0) is outside the stack range (0x40000B00 to 0x40000D00)
как с этим справиться??
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|