static __inline__ void __exi_setinterrupts(s32 nChn,exibus_priv *exi) { exibus_priv *pexi = &eximap[EXI_CHANNEL_2]; if(nChn==EXI_CHANNEL_0) { __MaskIrq((IRQMASK(IRQ_EXI0_EXI)|IRQMASK(IRQ_EXI2_EXI))); if(!(exi->flags&EXI_FLAG_LOCKED) && (exi->CallbackEXI || pexi->CallbackEXI)) __UnmaskIrq((IRQMASK(IRQ_EXI0_EXI)|IRQMASK(IRQ_EXI2_EXI))); } else if(nChn==EXI_CHANNEL_1) { __MaskIrq(IRQMASK(IRQ_EXI1_EXI)); if(!(exi->flags&EXI_FLAG_LOCKED) && exi->CallbackEXI) __UnmaskIrq(IRQMASK(IRQ_EXI1_EXI)); } else if(nChn==EXI_CHANNEL_2) { //explicitly use of channel 2 only if debugger is attached. __MaskIrq(IRQMASK(IRQ_EXI0_EXI)); if(!(exi->flags&EXI_FLAG_LOCKED) && IRQ_GetHandler(IRQ_PI_DEBUG)) __UnmaskIrq(IRQMASK(IRQ_EXI2_EXI)); } }
__irq #elif defined ( __ICCARM__ ) __irq __arm #else #error "Unsupported compiler!" #endif void IRQ_Handler(void) { const IRQn_ID_t irqn = IRQ_GetActiveIRQ(); IRQHandler_t const handler = IRQ_GetHandler(irqn); if (handler != NULL) { __enable_irq(); handler(); __disable_irq(); } IRQ_EndOfInterrupt(irqn); }
uint32_t NVIC_GetVector(IRQn_Type IRQn) { uint32_t vectors = (uint32_t)IRQ_GetHandler(IRQn); return vectors; }