irq.c

来自「用hitool开发的8段数码管的显示程序 c语言的程序 嵌入一点汇编」· C语言 代码 · 共 66 行

C
66
字号
#include "irq.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
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 + -
显示快捷键?