当前位置:  技术问答>linux和unix

清除中断问题

    来源: 互联网  发布时间:2017-02-19

    本文导语:  __inline void ClearPending(int bit) { register i; rSRCPND = bit; rINTPND = bit; i = rINTPND;  //为何要定义i,rINTPND赋给i有什么作用? } __inline void ClearSubPending(int bit) {  register i;  rSUBSRCPND = bit;   i = rINTPND;     //为...

__inline void ClearPending(int bit)
{
register i;
rSRCPND = bit;
rINTPND = bit;
i = rINTPND;  //为何要定义i,rINTPND赋给i有什么作用?

}


__inline void ClearSubPending(int bit)
{
 register i;
 rSUBSRCPND = bit; 
 i = rINTPND;     //为何要定义i,rINTPND赋给i有什么作用?
}  

清除子中断时,为什么不清除SRCPND 与INTPND呢??? i = rINTPND;是什么意思??


还有一个问题:在中断子程序中为什么不先屏蔽所有中断呢?
              rINTMSK =0xffffffff;

一个最重要的问题:在进入中断子程序之前为什么先要清除中断标志呢??
                  SRCPND  SUBSRCPND 默认就是0x0000000

什么情况下,不需要手动清除中断呢,系统会自动清除呢???
                  





|
务必把代码沾全 如果你把代码已经沾全的话

i = rINTPND; 相当于读取了一次rINTPND 寄存器

清中断操作并不具有通用性,每一个IC都有自己的清中断的方法,你得看具体的芯片手册再对照代码看
只从代码看,你这个芯片是写1清零,同时还要读一次保证清中断操作同步到了硬件

清中断操作并不具有通用性,有的ic能自动清,有的ic必须手动清,看具体的芯片手册

还有一个问题:在中断子程序中为什么不先屏蔽所有中断呢?
------------
你的代码看起来不是linux 无法回答

|
清除子中断时,为什么不清除SRCPND 与INTPND呢??? 
  是清中断子悬挂寄存器,SRCPND和INTPND也要同时清,但是可以同时调用ClearPending(int bit)。

在中断子程序中为什么不先屏蔽所有中断呢?
   ARM9中,进入中断后,CPSR中的I比特(或F比特)自动置1,已经禁止其他中断进入(快速中断抢占除外),所以,不需要另外再屏蔽。

在进入中断子程序之前为什么先要清除中断标志呢??
   进入中断后,相应的中断标志已经置位。不清除该位,退出中断后,将再重复产生中断,所以必须给对应比特写1清除。


|
这个不是linux kernel的代码吧。


|
不如先说说你的cpu和os

|
习惯上,启动时为了避免随机的悬挂中断而清零(上电过程中,防止某些部件不稳定造成的)。
还有一种可能,仿真调试阶段的重新运行时也清零(此时并不一定会复位)。  
不光是ARM,51系统也会这样做。

|
呵呵,你说的就是和x86里面的cli 类似啦,要清中断要清cli (内部),还得清ISR位(外部)(普通中断),外部中断清掉,有几个办法,读PORT,或者直接ISR CLEAR。。。。

我没仔细看你的代码,但是大概猜到你的问题是什么了.......

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 clear():清除状态标志
  • php压缩html(清除换行符,清除制表符,去掉注释标记)
  • C++ I/O 成员 unsetf():清除格式标志
  • android开发教程之清除android数据缓存示例(清除本地数据缓存)
  • 不同版本MSSQL清除日志方法介绍
  • 如何清除Linux命令的历史记录(清除不该保留的命令)
  • linux僵尸(zombie)进程介绍及清除
  • 文件清除工具 Eraser
  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • 如何清除history和last命令中显示的东东?
  • wtmp清除工具 wtmpclean
  • 如何用按钮触发事件以清除session中的变量?
  • 我的IE输入form中保存了我以前输入的历史记录,我怎么清除?
  • Ubuntu回收站自动清除工具 Autotrash
  • 如何清除刚刚被绑定的端口???
  • rootkit清除工具 GMER
  • 请教各位:javabean被使用后需要清除吗?
  • 清除CMOS密码
  • 关于sybase的master的日志清除问题 iis7站长之家
  • 如何手动清除一个对象
  • 如何清除消息队列????


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3