学习ARM中断,有以下一个程序什么意思?求解!
__inlinevoidClearPending(intbit){registeri;rSRCPND=bit;rINTPND=bit;i=rINTPND;}...
__inline void ClearPending(int bit)
{
register i;
rSRCPND = bit;
rINTPND = bit;
i = rINTPND;
} 展开
{
register i;
rSRCPND = bit;
rINTPND = bit;
i = rINTPND;
} 展开
展开全部
以下是单片机实践团为您解答:
1、__inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 (详细请参考:http://baike.baidu.com/view/1365655.htm)
2、ClearPending 故名思意,就是清除挂起(也就是所谓的中断标志位)。
3、内部参数解释:
SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理,于是我们可以有一个总结:SRCPND说明了有什么中断被触发了,INTPND说明了CPU即将或已经在对某一个中断进行处理,特别注意:每当某一个中断被处理完之后,我们必须手动地把SRCPND/SUBSRCPND,INTPND三个寄存器中与该中断相应的位由1设置为0,刚才说INTPND的操作很特别,它的特别之处就在于对当我们要把该寄存器中某个值为1的位设置为0时,我们不是往该位置0,而是往该位置1, 假设SRCPND=0x00000003,INTPND=0x00000001,该值说明当前0号中断和1号中断被触发,但当前正在被处理的是0号中断, 处理完毕后我们应该这样设置INTPND和SRCPND:
SRCPND=0x00000002 //位0被置为0
INTPND=0x00000001 //位0被置为0(方法是往该位写入1)
4、数据手册内部的解释:
the service routine must clear the pending condition by writing a 1 to the corresponding bit in the SRCPND register first and then clear the pending condition in the INTPND registers by using the same method.
上面是官方手册中的一句话,可见两个都是写1清0的。
原文:
You can clear a specific bit of the SRCPND register by writing a data to this register. It clears only the bit positions of the SRCPND corresponding to those set to one in the data. The bit positions corresponding to those that are set to 0 in the data remains as they are.
5、常在线,不明白hi我。
1、__inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 (详细请参考:http://baike.baidu.com/view/1365655.htm)
2、ClearPending 故名思意,就是清除挂起(也就是所谓的中断标志位)。
3、内部参数解释:
SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理,于是我们可以有一个总结:SRCPND说明了有什么中断被触发了,INTPND说明了CPU即将或已经在对某一个中断进行处理,特别注意:每当某一个中断被处理完之后,我们必须手动地把SRCPND/SUBSRCPND,INTPND三个寄存器中与该中断相应的位由1设置为0,刚才说INTPND的操作很特别,它的特别之处就在于对当我们要把该寄存器中某个值为1的位设置为0时,我们不是往该位置0,而是往该位置1, 假设SRCPND=0x00000003,INTPND=0x00000001,该值说明当前0号中断和1号中断被触发,但当前正在被处理的是0号中断, 处理完毕后我们应该这样设置INTPND和SRCPND:
SRCPND=0x00000002 //位0被置为0
INTPND=0x00000001 //位0被置为0(方法是往该位写入1)
4、数据手册内部的解释:
the service routine must clear the pending condition by writing a 1 to the corresponding bit in the SRCPND register first and then clear the pending condition in the INTPND registers by using the same method.
上面是官方手册中的一句话,可见两个都是写1清0的。
原文:
You can clear a specific bit of the SRCPND register by writing a data to this register. It clears only the bit positions of the SRCPND corresponding to those set to one in the data. The bit positions corresponding to those that are set to 0 in the data remains as they are.
5、常在线,不明白hi我。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询