BOOL CPU_INTC_InterruptDisable(UINT32 Irq_Index) { BOOL WasEnabled; if (Irq_Index >= ID_PERIPH_COUNT) return FALSE; GLOBAL_LOCK(irq); WasEnabled = ((AIC->AIC_IMR & AIC_IMR_INTM) != 0) ? TRUE : FALSE; IRQ_DisableIT(Irq_Index); return WasEnabled; }
BOOL CPU_INTC_DeactivateInterrupt(UINT32 Irq_Index) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector(Irq_Index); if (!IsrVector) return FALSE; GLOBAL_LOCK(irq); IRQ_ClearIT(Irq_Index); IRQ_DisableIT(Irq_Index); // as it is stub, just put the Priority to the ISR parameter IsrVector->Handler.Initialize(STUB_ISRVector, (void*)(size_t)IsrVector->Priority); return TRUE; }
//------------------------------------------------------------------------------ /// Configures the PIT to generate 1ms ticks. //------------------------------------------------------------------------------ static void ConfigurePit(void) { // Initialize and enable the PIT PIT_Init(PIT_PERIOD, BOARD_MCK / 1000000); // Disable the interrupt on the interrupt controller IRQ_DisableIT(AT91C_ID_SYS); // Configure the AIC for PIT interrupts IRQ_ConfigureIT(AT91C_ID_SYS, 0, ISR_Pit); // Enable the interrupt on the interrupt controller IRQ_EnableIT(AT91C_ID_SYS); // Enable the interrupt on the pit PIT_EnableIT(); // Enable the pit PIT_Enable(); }
BOOL CPU_INTC_ActivateInterrupt(UINT32 Irq_Index, HAL_CALLBACK_FPN ISR, void* ISR_Param) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector(Irq_Index); if (!IsrVector) return FALSE; GLOBAL_LOCK(irq); IRQ_DisableIT(Irq_Index); IRQ_ClearIT(Irq_Index); // set the vector IsrVector->Handler.Initialize(ISR, ISR_Param); IRQ_EnableIT(Irq_Index); return TRUE; }