📄 irq.c
字号:
typedef void(*voidfun)();
void ClrIntStatus(void)
{
INTMASK_REG=0X1FFFFF; //DISABLE
INTPND_REG=0X1FFFFF; //CLEAR
}
void enable_IRQ(void)
{
asm volatile ("MRS r0,CPSR\n");
asm volatile ("BIC r0, r0,#0x80\n");
asm volatile ("MSR CPSR_c,r0\n");
}
void disable_IRQ(void)
{
asm volatile ("MRS r0,CPSR\n");
asm volatile ("ORR r0, r0,#0x80\n");
asm volatile ("MSR CPSR_c,r0\n");
}
//初始化中断向量表
void creatIntHandlerTable(void)
{
int i;
for(i=0;i<IRQ_INT_NO;i++)
{
IntHandlerTable(i)=NULL;}
}
//设定中断向量表
void setIRQHandler(int i,voidfun isr)
{
if ((i>=0) && (i < IRQ_INT_NO))
{
IntHandlerTable(i)=isr;}
}
//中断服务程序执行进入点
void ISR_IRQ(void)
{
int currentIRQnimber;
currentIRQnimber =INTOFFSET_IRQ_REG >>2;
if((currentIRQnimber>=0) && (currentIRQnimber< IRQ_INT_NO))
{
if(IntHandlerTable[currentIRQnimber] !=NULL)
{
Clear_PendingBit(currentIRQnimber);
IntHandlerTable[currentIRQnimber]();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -