irq.c

来自「一个很好的c程序 再hitool for arm 下开发」· C语言 代码 · 共 58 行

C
58
字号
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 + =
减小字号Ctrl + -
显示快捷键?