您的位置:首页 > 其它

由一次对arm7的中断选择寄存器(VICIntSelect)赋值而引发的思考

2015-06-20 21:04 387 查看
芯片型号为lpc2138,编译环境为keil4,采用j-link下载

由于程序中运用到了多个向量IRQ中断,于是为了方便便采用了如下写法

VICIntSelect = VICIntSelect&((~(1<<14))|(~(1<<17)));
//EINT0,3中断分配为向量IRQ中断




观察赋值结果,发现原本想要赋值为0的位全部变成了1,

由于一开始并没有发现什么异常,于是继续往下写,往下需要加入一个RTC秒增量中断,由于RTC对应的通道号为13,于是进行如下赋值:

VICIntSelect |= (~(1<<13));


编译运行后,发现,程序莫名其妙的进入了FIQ服务子程序,但是我却没有对相关的寄存器进行操作,这个FIQ的服务子程序是老师给的ucos 2源代码中有的,只在startup.s中有相关的汇编代码,由于本人不懂汇编,所以只能猜测是由于对VICIntSelect 的赋值导致莫一位赋值为1,选择了FIQ中断,

于是我把上面两句全删了,直接来了个简单粗暴的方法,

VICIntSelect==0x0;


没想到,程序却能正常的进入RTC秒增量中断,

于是上网试着百度了下VICIntSelect的写法,没找到相关关于这个赋值写法问题的讨论,

(可能是我的搜索的关键字不对)于是斗胆在此猜测是由于以上赋值引起的,

关于这种多个中断该如何赋值的问题,若有大神有好的见解,忘不吝赐教!

先写在这里,待以后弄明白再来修改!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: