BOOL MC9328MXL_AITC_Driver::ActivateInterrupt( UINT32 Irq_Index, BOOL Fast, HAL_CALLBACK_FPN ISR, void* ISR_Param, UINT8 Priority ) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return FALSE; { GLOBAL_LOCK(irq); MC9328MXL_AITC& AITC = MC9328MXL::AITC(); // disable this interrupt while we change it AITC.INTDISNUM = IsrVector->Index; // set the correct type AITC.SetType( IsrVector->Index, Fast ); // set the correct priority AITC.SetPriority( IsrVector->Index, Priority ); // set the vector IsrVector->Handler.Initialize( ISR, ISR_Param ); // enable the interrupt if we have a vector AITC.INTENNUM = IsrVector->Index; } return TRUE; }
BOOL LPC24XX_VIC_Driver::ActivateInterrupt( UINT32 Irq_Index, BOOL Fast, HAL_CALLBACK_FPN ISR, void* ISR_Param ) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return FALSE; { GLOBAL_LOCK(irq); LPC24XX_VIC& VIC = LPC24XX::VIC(); // disable this interrupt while we change it VIC.INTENCLR = 1 << IsrVector->Index; // set the vector IsrVector->Handler.Initialize( ISR, ISR_Param ); // Use Vector Address register to identify the source of interrupt VIC.VECTADDR[Irq_Index] = Irq_Index; // enable the interrupt if we have a vector VIC.INTENABLE = 1 << IsrVector->Index; } return TRUE; }
BOOL AT91_AIC_Driver::ActivateInterrupt(UINT32 Irq_Index, BOOL Fast, HAL_CALLBACK_FPN ISR, void* ISR_Param) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return FALSE; AT91_AIC &aic = AT91::AIC(); GLOBAL_LOCK(irq); // disable this interrupt while we change it aic.AIC_IDCR= (0x01 << Irq_Index); // Clear the interrupt on the interrupt controller aic.AIC_ICCR = (0x01 << Irq_Index); // set the vector IsrVector->Handler.Initialize( ISR, ISR_Param ); // enable the interrupt if we have a vector aic.AIC_IECR= 0x01<<Irq_Index; return TRUE; }
BOOL MC9328MXL_AITC_Driver::InterruptDisable( UINT32 Irq_Index ) { IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return 0; MC9328MXL_AITC& AITC = MC9328MXL::AITC(); GLOBAL_LOCK(irq); BOOL WasEnabled = AITC.IsInterruptEnabled( Irq_Index ); AITC.INTDISNUM = IsrVector->Index; return WasEnabled; }
BOOL LPC24XX_VIC_Driver::InterruptDisable( UINT32 Irq_Index ) { IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return 0; LPC24XX_VIC& VIC = LPC24XX::VIC(); GLOBAL_LOCK(irq); BOOL WasEnabled = VIC.IsInterruptEnabled( Irq_Index ); VIC.INTENCLR = 1 << IsrVector->Index; return WasEnabled; }
BOOL MC9328MXL_AITC_Driver::DeactivateInterrupt( UINT32 Irq_Index ) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return FALSE; { GLOBAL_LOCK(irq); MC9328MXL_AITC& AITC = MC9328MXL::AITC(); // disable this interrupt while we change it AITC.INTDISNUM = IsrVector->Index; IsrVector->Handler.Initialize( STUB_ISRVector, (void*)(size_t)IsrVector->Index ); } return TRUE; }
BOOL LPC24XX_VIC_Driver::DeactivateInterrupt( UINT32 Irq_Index ) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return FALSE; { GLOBAL_LOCK(irq); LPC24XX_VIC& VIC = LPC24XX::VIC(); // disable this interrupt while we change it VIC.INTENCLR = 1 << IsrVector->Index; IsrVector->Handler.Initialize( STUB_ISRVector, (void*)(size_t)IsrVector->Index ); } return TRUE; }
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; }
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; }
BOOL AT91_AIC_Driver::DeactivateInterrupt( UINT32 Irq_Index ) { // figure out the interrupt IRQ_VECTORING* IsrVector = IRQToIRQVector( Irq_Index ); if(!IsrVector) return FALSE; GLOBAL_LOCK(irq); AT91_AIC &aic = AT91::AIC(); // Clear the interrupt on the Interrupt Controller ( if one is pending ) aic.AIC_ICCR = (1 << Irq_Index); // Disable the interrupt on the interrupt controller aic.AIC_IDCR = (1 << 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; }