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;
}
Ejemplo n.º 3
0
//------------------------------------------------------------------------------
/// 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;
}