| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Прекъсвания при LPC ARM7 http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4700 |
Страница 1 от 1 |
| Автор: | Quadro [ Нед Авг 26, 2007 5:06 pm ] | ||||||||||||||||||
| Заглавие: | Прекъсвания при LPC ARM7 | ||||||||||||||||||
Тормозя се тук от известно време с прекъсванията при LPC2148 ( olimex dev board ). Използвам Eclipse + GNU tools, засега всичко е от flash-a. Кода :
После функцията за interrupt :
При така написаният код не тръгват нещата...няма значение дали натискам бутона, "зададен" за EINT2 входа или не,няма никаква реакция от арм-а. От къде може да е проблема - нямам идея...четох pdf-на за прекъсванията,процедурата там е същата с изключение на EXTxxx дефинирането - май така или иначе при инициализация по default за falling edge,edge sensitive. Ако някои може да помогне... |
|||||||||||||||||||
| Автор: | Zdrav [ Нед Авг 26, 2007 8:25 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: Прекъсвания при LPC ARM7 | |||||||||||||||||||||||||||
Ето тук конфигурираш VIC да предизвиква FIQ.
Така че не очаквай да се изпълни обработчика на IRQ. Който си конфигурирал иначе правилно. Махни горния ред и нещата ще тръгнат. Аз лично обаче бих направил конфигурирането така:
Разбира се очаква се да имаш на адрес 0х00000018 ето това:
И във startup в обработчика на ресет вектора да си конфигурирал правилно стековия указател за IRQ режима. И да е свален бит 7 в CPSR, с което разрешаваш глобално IRQ сигнала към ядрото, преди извикване на main. Ако пък целта ти е да предизвикаш FIQ там вече е друга история. [EDIT] Оправена моя грешка в сетването на PINSEL0. |
||||||||||||||||||||||||||||
| Автор: | Quadro [ Нед Авг 26, 2007 11:42 pm ] | |||||||||||
| Заглавие: | ||||||||||||
пробвах с моят код,но променен - няма успех. Пробвах с посоченият от Zdrav - отново без успех. В crt.s относно коментарите на Zdrav имам :
Което би трябвало да отговаря на изискванията. Прикачам целият crt.s под формата на тхт,ако някои има желание да го прегледа за евентуални грешки. Четох из yahoo групите,би трябвало с тези стойности да се активират прекъсванията. Но не мога да разбера аз ли бъркам някъде или...
|
||||||||||||
| Автор: | Zdrav [ Пон Авг 27, 2007 12:11 am ] | |||||||||||||||||||||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||||||||||||||||||||
Първо да посоча че бях допуснал грешка в кода който постнах. Надявам се да си направил copy-paste след като я оправих. Второ в startup файла който ползваш се извиква main с вдигнат I bit в CPSR. Т.е. прекъсванията ти са забранени глобално. Освен ако в main някъде в началото не го сваляш. Махни редовете:
И добави непосредствено преди "b main" това:
Твоят startup те оставя в user mode. Като за начало ползвай supervisor mode. .set IRQ_STACK_SIZE, 0X00000080 Може да се окаже малко в един момент. И нещо което е препоръчително - добави си обработчик на Default вектора. Преди "b main" Добавяш:
И някъде след "b main" самия обработчик:
разбира се в началото на crt.s трябва да имаш и:
|
||||||||||||||||||||||||||||||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|