hal_ic.c

来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 81 行

C
81
字号
//-----------------------------------------------------------------------------
// 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);
}

//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?