ниче не понимаю, никак не могу войти в прерывание.
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; } }
|