hal_ic.c
来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 87 行
C
87 行
//-----------------------------------------------------------------------------
// HAL_IC
//-----------------------------------------------------------------------------
#include "hal_ic.h"
#include "hal_it.h"
//-----------------------------------------------------------------------------
t_fcn irq_handler_array[ARRAY_SIZE] = {MAC_Handler, USB_Handler, IEE1284_Handler, I2C_Handler, UART_Handler, RTC_Handler,
TIMER1_Handler, TIMER2_Handler, nXIRQ0_Handler, nXIRQ1_Handler, DMA_Handler};
//-----------------------------------------------------------------------------
__irq __arm void irq_handler(void)
{
u8 i;
for (i=0;i<ARRAY_SIZE;i++)
{
if (ValBit(IC->ENABLE,i) && ValBit(IC->IRQ_STATUS,i))
{
irq_handler_array[i]();
SetBit(IC->PENDING,i);
}
}
}
//-----------------------------------------------------------------------------
__fiq __arm void fiq_handler(void)
{
}
//-----------------------------------------------------------------------------
void IC_Clear (void)
{
IC->CONTROL = 0;
IC->ENABLE = 0;
IC->CONFIG_1 = 0;
IC->CONFIG_2 = 0;
IC->PENDING = 0xFFFFFFFF; //1 clears bit
IC->SOFT_INTERRUPT = 0;
}
//-----------------------------------------------------------------------------
void IC_Global_OnOff (IC_CONTROL what, functionalstate Condition)
{
if (Condition == ENABLE)
IC->CONTROL |= (u32)what;
else
IC->CONTROL &= ~(u32)what;
}
//-----------------------------------------------------------------------------
void IC_Int_OnOff (IC_INT_NUM which, functionalstate Condition)
{
if (Condition == ENABLE)
SetBit (IC->ENABLE,(u8)which);
else
ClrBit (IC->ENABLE,(u8)which);
}
//-----------------------------------------------------------------------------
void IC_Int_Config (IC_INT_NUM which, IC_INT_SENSITIVE sensitive)
{
if (which <= 7)
{
IC->CONFIG_1 &= ((u32)0x0F << (4*which)) ^ 0xFFFFFFFF;
IC->CONFIG_1 |= (u32)sensitive << (4*which);
} else {
IC->CONFIG_2 &= ((u32)0x0F << (4*(which-8))) ^ 0xFFFFFFFF;
IC->CONFIG_2 |= (u32)sensitive << (4*(which-8));
}
}
//-----------------------------------------------------------------------------
void IC_SoftInt (IC_INT_NUM which)
{
SetBit (IC->SOFT_INTERRUPT,(u8)which);
}
//-----------------------------------------------------------------------------
void IC_Register_IrqFcn (int Irq, t_fcn IrqFcn)
{
irq_handler_array[Irq] = IrqFcn;
}
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?