isr.c

来自「触摸屏驱动芯片AD7843的DSP驱动程序」· C语言 代码 · 共 55 行

C
55
字号
#include "44b.h"
#include "isr.h"
#include "def.h"

void (*InterruptHandlers[MAXHNDLRS])(void);
void (*ExInt4567Handlers[4])(void);

void ExInt4567()	//外部中断4567的共享函数
{
	int i,exinpnd=rEXTINPND,tmp=1;//temp bit
	for(i=0;i<4;i++){
		if(exinpnd&tmp){
			rEXTINPND=tmp;	//clear Extint bit
			rI_ISPC=(1<<4);	//clear i_ispc
			(*ExInt4567Handlers[i])();
			break;
		}
		tmp<<=1;
	}
}

int GetISROffsetClr()
{
	//计算中断的偏移地址,高位优先
	int i,ispr=rI_ISPR,tmp=1<<(MAXHNDLRS-1);//temp bit
	for(i=MAXHNDLRS;i>0;i--){
		if(ispr&tmp){
			rI_ISPC=tmp;
			return i-1;
		}
		tmp>>=1;
	}
	return -1;
}

void SetISR_Interrupt(int vector, void (*handler)(), int ExInt)
{
	if(vector==EINT4567_OFFSET){
		InterruptHandlers[vector] = ExInt4567;
		ExInt4567Handlers[ExInt] = handler;
	}
	else	{
		InterruptHandlers[vector] = handler;
	}
}

void ISR_IrqHandler()
{
	int IntOffset=GetISROffsetClr();	//得到中断向量的偏移地址
	//OSIntEnter();
	(*InterruptHandlers[IntOffset])(); // Call interrupt service routine
	//OSIntExit();
}

⌨️ 快捷键说明

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