у меня например сделано так.. 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) {} }
вроде все работает..
|