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

 
 
> Ликбез, вопрос к "отцам"
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 - 20)
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
hoggar
сообщение Nov 28 2006, 14:22
Сообщение #16


Участник
*

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



после установки MEMMAP = 1 или MEMMAP = 2 картина изменилась:

Tue Nov 28 14:18:08 2006: J-Link firmware: V1.20 (J-Trace ARM Rev.1 compiled Feb 8 2006 19:01:36)
Tue Nov 28 14:18:08 2006: JTAG speed is initially set to: 32 kHz
Tue Nov 28 14:18:08 2006: Halting CPU core
Tue Nov 28 14:18:08 2006: Software reset was performed
Tue Nov 28 14:18:08 2006: Initial reset was performed
Tue Nov 28 14:18:08 2006: J-Link found 1 JTAG device. ARM core Id: 4F1F0F0F(ARM7)
Tue Nov 28 14:18:08 2006: Device at TAP0 selected
Tue Nov 28 14:18:08 2006: Auto JTAG speed: 1600 kHz
Tue Nov 28 14:18:08 2006: Auto JTAG speed: 1600 kHz
Tue Nov 28 14:18:09 2006: 736 bytes downloaded and verified (1.07 Kbytes/sec)
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000181
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000182
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000001E8
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000001F8
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000208
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000210
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000220
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000222
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000246
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000252
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000258
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x0000025C
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000261
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000264
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000266
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000050
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000000D4
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000102
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000128
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000280
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000284
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x0000028B
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000002E8
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000299
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000002A8
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000002C4
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x00000170
Tue Nov 28 14:18:09 2006: Warning: Target inconsistency detected at Memory address 0x000002DC
Tue Nov 28 14:18:09 2006: There were warnings during download, see Log Window
Tue Nov 28 14:18:10 2006: Loaded debugee: C:\Projects\new\Debug\Exe\new.d79
Tue Nov 28 14:18:10 2006: Target reset
Tue Nov 28 14:18:10 2006: Profiler: No cycle counter could be found. Profiler will only count function calls.
Tue Nov 28 14:18:10 2006: Failed to set breakpoint at 0x00000220 (out of hardware breakpoints)
Tue Nov 28 14:18:10 2006: Profiler: Could not set enough breakpoints.
Go to the top of the page
 
+Quote Post
hoggar
сообщение Dec 1 2006, 17:13
Сообщение #17


Участник
*

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



ниче не понимаю, никак не могу войти в прерывание.

1. Это кусок из стартапа:

MODULE ?RESET
COMMON INTVEC:CODE:NOROOT(2)
PUBLIC __program_start
EXTERN ?cstartup
EXTERN undef_handler, swi_handler, prefetch_handler
EXTERN data_handler, my_irq_handler, fiq_handler
CODE32 ; Always ARM mode after reset

~часть текста не показана~

org 0x18
__irq_handler
ldr pc,[pc,#24] ; Branch to irq_handler

org 0x1c
__fiq_handler
ldr pc,[pc,#24] ; Branch to fiq_handler

; Constant table entries (for ldr pc) will be placed at 0x20
; Exception vectors can be specified in C code by #pragma vector or by filling
; in the vectors below. The vector address is the ARM vector number + 0x20.

~часть текста не показана~

org 0x38
dc32 my_irq_handler
org 0x3c
dc32 fiq_handler
LTORG
; ENDMOD __program_start
ENDMOD

2. Разрешил прерывание каждую секунду (от RTC)
CIIR_bit.IMSEC = 1;

3. Инициализация прерывания
VICIntEnable = (1 << 13);
VICVectCntl0 = 0xd ;
VICVectCntl0 = VICVectCntl0 | 0x20;
VICVectAddr0 = (unsigned)RTC_isr_handler;

4. Обработчик.

__irq void my_irq_handler (void)
{
ISR_pntr isr_pntr;

isr_pntr = (ISR_pntr)VICVectAddr;
while (isr_pntr != 0)
{
VICVectAddr = 0;
(*isr_pntr)();
isr_pntr = (ISR_pntr)VICVectAddr;
}
}
Go to the top of the page
 
+Quote Post
IV_K
сообщение Dec 2 2006, 13:48
Сообщение #18


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

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



__enable_interrupt() в функции main есть? =)
Go to the top of the page
 
+Quote Post
hoggar
сообщение Dec 4 2006, 13:15
Сообщение #19


Участник
*

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



Цитата(IV_K @ Dec 2 2006, 13:48) *
__enable_interrupt() в функции main есть? =)


Как раз ее-то и не хватало. Спасибо. smile.gif
Go to the top of the page
 
+Quote Post
hoggar
сообщение Dec 7 2006, 16:35
Сообщение #20


Участник
*

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



прочитал, что в одном из слотов векторов прерываний должно храниться какое-то значение, чтобы чексумма векторов с этим значением давала 0, в связи с этим вопрос: это значение как то надо вычислять или оно само определяется??
Go to the top of the page
 
+Quote Post
Alexey Bishletov
сообщение Dec 8 2006, 09:37
Сообщение #21


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

Группа: Новичок
Сообщений: 121
Регистрация: 15-08-06
Пользователь №: 19 557



Цитата(hoggar @ Dec 7 2006, 16:35) *
прочитал, что в одном из слотов векторов прерываний должно храниться какое-то значение, чтобы чексумма векторов с этим значением давала 0, в связи с этим вопрос: это значение как то надо вычислять или оно само определяется??

Обычно его определяет программатор.
Go to the top of the page
 
+Quote Post

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

 


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


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