⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr.c

📁 博创科技arm3000开发板(arm7 44b0) 大量实验源代码 bootloader实验 ucos的移植 ucos的开发柜架 音频实验 电机控制 绘图的API函数 UDP通讯实
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -