新闻中心

EEPW首页>嵌入式系统>设计应用> ARM7内核的中断屏蔽方法

ARM7内核的中断屏蔽方法

作者: 时间:2011-06-27 来源:网络 收藏

当前程序状态寄存器的控制位中包含2个禁止位——I和F位:当I位置位时,禁止IRQ,清零时允许IRQ;当F位置位时,禁止FIQ中断,清零时允许FIQ中断。
系列的处理器中,只有“MRS”和“MSR”两条指令可以直接读取和设置当前程序状态寄存器(CPSR)或保存程序状态寄存器SPSR)。在ARM公司提供的C编译器中并没用提供特殊的语法格式,用于指定生成这两条指令,所以如要想将IRQ中断和FIQ中断都,就必须使用汇编语言来编写函数。对于IRQ中断,ARM还有另外一种管理模式,即通过向量中断控制器(VIC)负责管理芯片的中断源,如果是只或打开向量中断IRQ,也可以使用C语言来设计这两个函数。
3.1 C语言程序实现
本例选用的CPtJ是NXP公司的LPC2290,TDMI-S。在其向量中断控制器VIC中有两个寄存器控制向量中断使能或禁止:中断使能寄存器(VICIntEnable)和中断使能清零寄存器(VICIntEnClear)。中断使能寄存器相应位置“1”,则允许相应的中断;置“0”则不允许中断。
程序如下:
c.JPG
函数Disable首先将中断使能寄存器的当前值备份到全局变量(IntEnBak)中,然后通过给中断使能清零寄存器置“1”,来清零中断使能寄存器,从而IRQ中断。函数Enable首先将中断使能寄存器清零,然后将全局变量(IntEnBak)备份的数据赋值给中断使能寄存器,从而恢复允许中断。

本文引用地址://m.amcfsurvey.com/article/150568.htm

设计软件需要注意的一点是,中断使能寄存器虽然是读/写寄存器,但只能向其写入“1”,不能写“0”,写“0”无效,只能通过向中断使能清零寄存器中相应的位写“1”,来清除中断使能寄存器中相应的位。所以写软件时,如想将中断使能寄存器的第4位清零,应注意不能使用下面语句:
VICIntEnable&=~(10x04);
该语句的语法没有错误,编译也能通过,本意是将中断使能寄存器的第4位清零,但实际上此功能是无法完成的,语句执行后中断使能寄存器的值没有任何变化。要实现上述功能可用下面语句来代替:
VICIntEnClear|=10x04;
中断使能清零寄存器中为“1”的位清零中断使能寄存器的相应位,为“0”的位则不影响中断使能寄存器中的相应位。



评论


相关推荐

技术专区

关闭