|
irq_handler, Правильно обрабатывать во FreeRTOS |
|
|
|
Feb 28 2009, 23:40
|

Участник

Группа: Участник
Сообщений: 42
Регистрация: 9-01-09
Пользователь №: 43 058

|
Добрый день. В стартуп файле сделал: Код irq_handler_address: .word 0x40000018 /* cpu_irq_isr */ fiq_handler_address: .word 0x4000001C /* cpu_fiq_isr */ В мейне сделал так: Код #define IRQ_RAM_ADDR 0x40000018 #define FIQ_RAM_ADDR 0x4000001C #define IRQ_RAM_FUNC_ADDR 0x40000038 #define FIQ_RAM_FUNC_ADDR 0x4000003C
MEMMAP = 0x01;//Interrupt vectors are not re-mapped and reside in Flash. unsigned int * ptr; //---- Set interrupts vectors ptr = (unsigned int *)IRQ_RAM_ADDR; *ptr = 0xE59FF018; //-- ldr pc, [pc, #24] ptr = (unsigned int *)FIQ_RAM_ADDR; *ptr = 0xE59FF018; //-- ldr pc, [pc, #24] //--- Put IRQ & FIQ vectors in RAM ptr = (unsigned int *)IRQ_RAM_FUNC_ADDR; *ptr = (unsigned int)&cpu_irq_handler; ptr = (unsigned int *)FIQ_RAM_FUNC_ADDR; //*ptr = (unsigned int)&cpu_fiq_handler; И определил: Код //---------------------------------------------------------------------------- void cpu_irq_handler(void) { int_func ifunc; ifunc = (int_func)VICAddress; if(ifunc != 0) (*ifunc)(); } При прерывании заходим в cpu_irq_handler(void) и прыгаем непосредственно в обработчик прерывания. При выходе из обработчика прерывания мы прыгаем в dabort_handler. Что не правильно в cpu_irq_handler()?
|
|
|
|
|
 |
Ответов
|
Mar 1 2009, 00:08
|

Участник

Группа: Участник
Сообщений: 42
Регистрация: 9-01-09
Пользователь №: 43 058

|
Цитата(aaarrr @ Mar 1 2009, 04:04)  Написать и дизассемблировать, например (e51ffff0). Понял. Спасибо. Цитата(aaarrr @ Mar 1 2009, 04:04)  Только зачем? Чтобы сразу вписать значение и всё. А как ещё в нужную ячейку рам вписать нужную команду?
Сообщение отредактировал Kesha - Mar 1 2009, 00:20
|
|
|
|
|
Mar 1 2009, 00:31
|

Участник

Группа: Участник
Сообщений: 42
Регистрация: 9-01-09
Пользователь №: 43 058

|
Цитата(aaarrr @ Mar 1 2009, 04:20)  А что Вы делали в мейне? Сейчас сделал так: Код //---- Set interrupts vectors ptr = (unsigned int *)IRQ_RAM_ADDR; *ptr = 0xE51FFFF0; //-- ldr pc, [pc, #-0xff0] Вместо обработчика прыгаю в pabort. Что опять я неправильно сделал?
|
|
|
|
|
Mar 1 2009, 02:15
|

Участник

Группа: Участник
Сообщений: 42
Регистрация: 9-01-09
Пользователь №: 43 058

|
Цитата(aaarrr @ Mar 1 2009, 04:49)  У Вас VIC PL192, а не PL190, так что... Спасибо! ...#-0x120... Пишу так: Код ptr = (unsigned int *)IRQ_RAM_ADDR; *ptr = 0xE51FF120; //E51FF120 ldr pc, [pc, #-0x120] Происходит следующее: Инициализируем все и после запускаем прерывание. Далее прыгаю в 0x40000018 (там команда ldr pc, [pc, #-0x120]). Но при попытке выполнить эту команду, тут же оказываюсь на векторе reset_handler. Что за х? На всякий случай из стартапа: Код .section .vectors, "ax" .code 32 .align 0 .global _vectors .global reset_handler /***************************************************************************** * Exception Vectors * *****************************************************************************/ _vectors: ldr pc, reset_handler_address ldr pc, undef_handler_address ldr pc, swi_handler_address ldr pc, pabort_handler_address ldr pc, dabort_handler_address .word 0xB8A06F58 /* 0 - (sum of other vectors instructions) */ ldr pc, irq_handler_address ldr pc, fiq_handler_address
reset_handler_address: .word reset_handler undef_handler_address: .word undef_handler swi_handler_address: .word swi_handler pabort_handler_address: .word pabort_handler dabort_handler_address: .word dabort_handler .word 0x00 irq_handler_address: .word 0x40000018 /* cpu_irq_isr */ fiq_handler_address: .word 0x4000001C /* cpu_fiq_isr */ .section .init, "ax" .code 32 .align 0 /****************************************************************************** * * * Default exception handlers * * * ******************************************************************************/ reset_handler:...
Сообщение отредактировал Kesha - Mar 1 2009, 02:32
|
|
|
|
Сообщений в этой теме
Kesha irq_handler Feb 28 2009, 23:40 aaarrr Цитата(Kesha @ Mar 1 2009, 02:40) Что не ... Feb 28 2009, 23:45 Kesha Цитата(aaarrr @ Mar 1 2009, 03:45) То, чт... Feb 28 2009, 23:52 aaarrr Одну команду, а не функцию. Feb 28 2009, 23:58 Kesha Цитата(aaarrr @ Mar 1 2009, 03:58) Одну к... Mar 1 2009, 00:00       Kesha Цитата(aaarrr @ Mar 1 2009, 06:47) Как пр... Mar 1 2009, 02:56        aaarrr Цитата(Kesha @ Mar 1 2009, 05:56) В случа... Mar 1 2009, 09:37         Kesha Цитата(aaarrr @ Mar 1 2009, 13:37) Причем... Mar 2 2009, 08:27 Kesha Добрый день.
Подскажите пожалуйста литературу по а... Mar 2 2009, 10:08 KRS Цитата(Kesha @ Mar 2 2009, 13:08)
ARM Ar... Mar 2 2009, 10:29 Kesha Добрый день.
Возник такой вопрос:
какую команду мо... Mar 2 2009, 10:22 KRS Цитата(Kesha @ Mar 2 2009, 13:22) Добрый ... Mar 2 2009, 10:34 zltigo Цитата(Kesha @ Mar 2 2009, 13:22) какую к... Mar 2 2009, 10:34  Kesha Цитата(zltigo @ Mar 2 2009, 13:34) Одну? ... Mar 2 2009, 11:15 aaarrr Цитата(Kesha @ Mar 2 2009, 13:22) Возник ... Mar 2 2009, 13:12 scifi Присоединяюсь к KRS: надо ремапить RAM. В указанно... Mar 2 2009, 10:55 KRS Цитата(scifi @ Mar 2 2009, 13:55) Присоед... Mar 2 2009, 11:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|