int.c

来自「lxRTOS一个用于嵌入系统的操作系统」· C语言 代码 · 共 71 行

C
71
字号
/*
* file:
*       int.c
* description:
*       interrupt controller code.
*/

void int_ctrl_init(void)
{
    int       i;
    AT91_REG* svr = AT91C_AIC_SVR;

    *AT91C_AIC_IDCR  = 0xffffffff;
    *AT91C_AIC_FFDR  = 0xffffffff;
    *AT91C_AIC_ICCR  = 0xffffffff;
    *AT91C_AIC_EOICR = *AT91C_AIC_EOICR;

    for(i=0; i<32; i++)
        svr[i] = 0xffffffff;
    *AT91C_AIC_SPU = 0x00;
}


void int_ctrl_set_mode(int irq, int mode)
{
    if(mode)
        *AT91C_AIC_FFER = (0x01<<irq);
    else
        *AT91C_AIC_FFDR = (0x01<<irq);
}


int int_ctrl_get_mode(int irq)
{
    return (*AT91C_AIC_FFSR & (0x1<<irq)) ? 1 : 0;
}


void int_ctrl_enable_irq(int irq, int enable)
{
    if(enable)
    {
        *AT91C_AIC_ICCR = (0x01<<irq);
        *AT91C_AIC_IECR = (0x01<<irq);
    }
    else
    {
        *AT91C_AIC_IDCR = (0x01<<irq);
        *AT91C_AIC_ICCR = (0x01<<irq);
    }
}


void int_ctrl_clear_status(int irq)
{
    unsigned int status;

    if(irq == AT91C_ID_TC0)
        status = *AT91C_TC0_SR;
}


void int_ctrl_clear_irq(int irq)
{
    *AT91C_AIC_ICCR  = (0x01<<irq);
    *AT91C_AIC_EOICR = *AT91C_AIC_EOICR;
}


/* end of file */

⌨️ 快捷键说明

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