// Headers\r
//------------------------------------------------------------------------------\r
\r
-#define __ASSEMBLY__\r
\r
//------------------------------------------------------------------------------\r
// Definitions\r
SECTION .vectors:CODE:NOROOT(2)\r
\r
PUBLIC resetVector\r
- PUBLIC IRQ_Handler\r
EXTERN FreeRTOS_IRQ_Handler\r
EXTERN Undefined_C_Handler\r
EXTERN FreeRTOS_SWI_Handler\r
SWI_Addr: DCD FreeRTOS_SWI_Handler\r
Abort_Addr: DCD Abort_C_Handler\r
Prefetch_Addr: DCD Prefetch_C_Handler\r
-;IRQ_Addr: DCD IRQ_Handler\r
FIQ_Addr: DCD FIQ_Handler\r
-/*\r
- Handles incoming interrupt requests by branching to the corresponding\r
- handler, as defined in the AIC. Supports interrupt nesting.\r
- */\r
-IRQ_Handler:\r
- /* Save interrupt context on the stack to allow nesting */\r
- SUB lr, lr, #4\r
- STMFD sp!, {lr}\r
- MRS lr, SPSR\r
- STMFD sp!, {r0, lr}\r
-\r
- /* Write in the IVR to support Protect Mode */\r
- LDR lr, =AIC\r
- LDR r0, [r14, #AIC_IVR]\r
- STR lr, [r14, #AIC_IVR]\r
-\r
- /* Branch to interrupt handler in Supervisor mode */\r
- MSR CPSR_c, #ARM_MODE_SVC\r
- STMFD sp!, {r1-r3, r4, r12, lr}\r
-\r
- /* Check for 8-byte alignment and save lr plus a */\r
- /* word to indicate the stack adjustment used (0 or 4) */\r
- AND r1, sp, #4\r
- SUB sp, sp, r1\r
- STMFD sp!, {r1, lr}\r
-\r
- BLX r0\r
-\r
- LDMIA sp!, {r1, lr}\r
- ADD sp, sp, r1\r
-\r
- LDMIA sp!, {r1-r3, r4, r12, lr}\r
- MSR CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT\r
-\r
- /* Acknowledge interrupt */\r
- LDR lr, =AIC\r
- STR lr, [r14, #AIC_EOICR]\r
-\r
- /* Restore interrupt context and branch back to calling code */\r
- LDMIA sp!, {r0, lr}\r
- MSR SPSR_cxsf, lr\r
- LDMIA sp!, {pc}^\r
\r
\r
/*\r