中易网

关于ARM在中断中的一个语句或者宏定义的意义

答案:2  悬赏:0  
解决时间 2021-01-18 14:53
  • 提问者网友:孤凫
  • 2021-01-18 00:38
关于ARM在中断中的一个语句或者宏定义的意义
最佳答案
  • 二级知识专家网友:街头电车
  • 2021-01-18 02:09
这个程序的意思是先查看定时器1是否有中断请求,如果有请求就打开定时器1的中断。
分析如下:
INTPND是中断挂起寄存器,它的每一位都对应着一个中断,如果某一位写1,就表示这个中断提出请求,0表示无情求。由于不知道你这个是arm7还是arm9,分别说一下吧,arm7中定时器1在INTPND寄存器中对应的位置是第12位,所以BIT_TIMER1的值是(1<<12),即第12位为1,剩下的为0.在arm9中BIT_TIMER1的值是(1<<11),即第11位为1,剩下的为0.
if(rINTPND&BIT_TIMER1)的意思就是查看定时器1是否发出请求。如果有请求,就将SRCPND的对应的位置置1.
rINTMSK&=~(BIT_TIMER1);
INTMSK是中断屏蔽寄存器,也是每一位都对应一个中断,如果某一位是1,表示屏蔽这个中断,如果是0表示允许中断,也就是你说的开中断。所以这句代码就是将定时器1对应的位置0.开这一位的中断。有什么地方不明白继续叫我~~~呵呵
追问:懂了 ! 那同样的道理,假如我的中断源不是定时器1 而是外部中断3.(打个比方)
那么EINT3对应的INTPND是第三位 则我想开中断就直接写:
rINTMSK&=~(BIT_EINT3);就行了是吧?意思相当于: rINTMSK&=~0x80 .
换句话说所有的INTPNDSRCPND INTMSK的响应位 都能用 BIT_***来代替呢?需要在哪里定义呢?
追答:这个啊你要想开中断可不是一句话就完了 中断寄存器十多个呢要是就用一个那剩下的不就废了吗,首先要进行中断寄存器的初始化,比如清除掉寄存器残留的中断,设置中断模式之类的
我随便写一下 大概就这个意思你再好好查查书就行
rI_ISPC=0x3FFFFFFF;//清楚中断请求
rEXTINTPND=0XF;//清楚外中断请求寄存器
rINTMOD=0X0; //IRQ中断模式
rINTCON=0x5; //设置为非向量模式
rINTMSK=用你写的那个开中断就行
pISR_EINT3=(int )function//这是你上边说的中断函数指针跳转函数,在funtion中编写自己的中断程序
你如果不写上面那些初始化其实也勉强可以用,只是如果不清楚寄存器中的残留信息会影响到下次中断的设置和跳转。
至于你说的BIT_EINT3在你这个程序的头文件中一定会有的,定义如下:
#defineBIT_EINT30xfffffff4之类的当然值不一定对我是看你说的在第三位置1
全部回答
  • 1楼网友:怀裏藏嬌
  • 2021-01-18 02:19
一定是在关联文件或头文件中有定义
可以用右键 选择 找到定义处
你试试
追问:我是在树上看到的。我怎么查看头文件的代码?
比如2410LIB.h 2410ADDR.h这些。
要是想在网上看,应该怎么搜索关键字? 非常感谢
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息