irq.c
来自「AT91RM9200-UC/OS-II,clock,irq,usart,pio等」· C语言 代码 · 共 94 行
C
94 行
#include "includes.h"
#include "irq.h"
#include "interrupt.h"
IRQ IRQ_Table[IRQ_CNT] =
{
{AT91C_ID_IRQ0,AT91C_BASE_PIOB,AT91C_PB29_IRQ0,'A',NULL},
{AT91C_ID_IRQ1,AT91C_BASE_PIOA,AT91C_PA26_IRQ1,'B',NULL},
{AT91C_ID_IRQ2,AT91C_BASE_PIOA,AT91C_PA25_IRQ2,'B',NULL},
{AT91C_ID_IRQ3,AT91C_BASE_PIOA,AT91C_PA23_IRQ3,'B',NULL},
{AT91C_ID_IRQ4,AT91C_BASE_PIOA,AT91C_PA2_IRQ4, 'B',NULL},
{AT91C_ID_IRQ5,AT91C_BASE_PIOA,AT91C_PA3_IRQ5, 'B',NULL},
{AT91C_ID_IRQ6,AT91C_BASE_PIOA,AT91C_PA16_IRQ6,'B',NULL}
};
/*******************************************************************************
* 名称:IRQ_Iint()
* 功能:IRQ的初始化函数
* 入口参数:irq IRQ的属性参数
* ID--//该设备的ID,目前用该外设的中断号
* AB--//IRQ对应的PIO的功能
* IRQ_handling--//对设备的中断处理程序
* 出口参数:无
* 说明:设置PIO的IRQ功能,同时把设备加入中断处理程序列表,打开中断控制器的对应中
* 断使能位
*******************************************************************************/
void IRQ_Init(IRQ irq)
{
#if OS_CRITICAL_METHOD == 3
int cpu_sr;
#endif
IRQ *pIrq;
int idx;
OS_ENTER_CRITICAL();
//根据中断号从同类设备的索引表中找出对应的序号
idx = Index_table[irq.Id];
//从外部中断列表中找出相应的IRQ
pIrq = IRQ_Table + idx;
//设置专门的中断处理函数
pIrq->IRQ_handling = irq.IRQ_handling;
//设置PIO的IRQ功能
if(pIrq->AB == 'A')
{
AT91F_PIO_CfgPeriph(pIrq->pIRQ,pIrq->shift,0);
}
else
if(pIrq->AB == 'B')
{
AT91F_PIO_CfgPeriph(pIrq->pIRQ,0,pIrq->shift);
}
else
return;
//填充中断处理函数列表,供OS_CPU_IRQ_ISR_Handler查询使用
intConnect(pIrq->Id,(AT91_REG)pIrq->pIRQ,IRQ_Handling);
//设置该外设对应的中断控制器使能位
intEnable(pIrq->Id);
OS_EXIT_CRITICAL();
}
/*******************************************************************************
* 名称:IRQ_Handling()
* 功能:IRQ中断处理函数
* 入口参数:irq_base 对应IRQ的基地址
* irq_vector 对应的外设中断号
* 出口参数:无
* 说明:该函数是所有IRQ中断函数入口(与OS_CPU_IRQ_ISR_Handler的接口),在
* 该函数中判断具体的外设中断处理函数并执行
*******************************************************************************/
void IRQ_Handling(int irq_base,int irq_vector)
{
int idx;
IRQ *pIrq;
//根据中断号从同类设备的索引表中找出对应的序号
idx = Index_table[irq_vector];
//从外部中断列表中找出相应的IRQ
pIrq = IRQ_Table + idx;
if(pIrq->IRQ_handling)
{
UartPrintf(1,"2");
//pIrq->IRQ_handling();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?