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

 
 
> Ликбез, вопрос к "отцам"
hoggar
сообщение Nov 16 2006, 10:02
Сообщение #1


Участник
*

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



Только начинаю работать с микроконтроллерами, объясните, пожалуйста, как зашить написанную прогу в камень, что бы получить нормально работающий прошитый проц.
Писал в IAR, проц - philips lps2138.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
COMA
сообщение Nov 16 2006, 10:26
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 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, по АРМам
Go to the top of the page
 
+Quote Post
IV_K
сообщение Nov 16 2006, 10:26
Сообщение #3


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

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



jtag эмулятор есть? плата какая?
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 16 2006, 10:47
Сообщение #4


Участник
*

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



2 COMA спасибо.

2 IV_K все есть, плата - lpc2148 EB v 1.1
Go to the top of the page
 
+Quote Post
IV_K
сообщение Nov 16 2006, 10:54
Сообщение #5


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

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



для заливки программы во флеш через jtag надо либо взять готовую конфигурацию из примеров, либо настроить ручками в свойствах проекта linker и debugger. линкеру надо указать xcl файл с размещением сегментов кода во флеши, дебагеру - драйвер и на вкладке download - используемый flash loader, в иаре по умолчанию через j-link default loader работает нормально
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 16 2006, 11:09
Сообщение #6


Участник
*

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



Цитата
в иаре по умолчанию через j-link default loader работает нормально


т.е если я выставляю j-link/j-trace то во вкладке download ничего выставлять не надо
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 16 2006, 11:15
Сообщение #7


Участник
*

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



Цитата
в иаре по умолчанию через j-link default loader работает нормально


т.е если я выставляю j-link/j-trace то во вкладке download ничего выставлять не надо

если я заливаю прогу через j-tag нужно ли ее преобразовывать в hex файл
Go to the top of the page
 
+Quote Post
IV_K
сообщение Nov 16 2006, 11:57
Сообщение #8


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

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



надо, иар сперва грузит в озу загрузчик, а потом загрузчик шьет флеш. линкеру надо указать allow c-spy generate extra output, во вкладке extra output поставить формат файла simple code
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 16 2006, 12:25
Сообщение #9


Участник
*

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



т.е. "симпл код" означает, что произойдет генерация hex файла
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 16 2006, 15:26
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(hoggar @ Nov 16 2006, 14:25) *
т.е. "симпл код" означает, что произойдет генерация hex файла

Нет, не hex, а поддерживаемый IAR (или порождённый) simple формат, который ближе к бинарному.
Применяется внутренним загрузчиком.
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 17 2006, 12:07
Сообщение #11


Участник
*

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



для чего нужен CSTACK
Go to the top of the page
 
+Quote Post
IV_K
сообщение Nov 17 2006, 13:28
Сообщение #12


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

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



для хранения переменных и адресов возврата
void func(void){
char var;
.......
}
при входе в функцию - переменная var создается в CSTACK
указатель стека SP увеличивается(уменьшается) в зависимости от организации стека. это зависит от компилятора/процессора
при выходе с указателем происходит обратное действие
также надо хранить где-то адрес, куда вернуться из функции..
это тож хранится в стеке


и еще.. в арме для каждого режима СВОЙ стек..
надо инициализировать CSTACK(SVC_STACK) - если работаете в SVC режиме.
IRQ_STACK, FIQ_STACK, если используются прерывания.. и т.д.
в мануале на арм7 все написано.. www.arm.com
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 22 2006, 18:11
Сообщение #13


Участник
*

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



Tакой вопрос, если я размещаю код во флэше, значит ли это, что в регистре MEMMAP нужно выставить режим User Flash Mode.
Как в IAR объявить isr если прерывание произошло из-за ошибки выборки команды или из-за неверного обращения к памяти, я нашел только __fiq, __irq, __swi. Хотя в кейле существуют extended keywords для подобных случаев.
Go to the top of the page
 
+Quote Post
IV_K
сообщение Nov 23 2006, 12:38
Сообщение #14


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

Группа: Свой
Сообщений: 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) {}
}

вроде все работает..
Go to the top of the page
 
+Quote Post
hoggar
сообщение Nov 28 2006, 12:42
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 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)

как с этим справиться??
Go to the top of the page
 
+Quote Post

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

 


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


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