s3c2440开发板的按键中断过程中遇到的问题,求解释阿!

shaoxiaojing5193 2012-07-13 08:38:31
我的程序是这样的,我在进入中断处理函数的时候把这个中断的ID 入队列,然后中断退出,然后在 main 函数这边循环处理队列中的每个中断,先进先出的规则,然后现在的问题是,当我把当前中断的 ID 入队列之后我马上把当前中断的掩码关了,也就是 EINTMASK,INTMSK 这两个中断掩码寄存器的相关位置 1,目的是不想让它退出中断的时候又进入这个中断,无限进入中断,我是想在 main 函数这边把这个中断处理完了再把这个中断的掩码开启。。。可是达不到我要的效果阿,我把掩码关了,中断一退出进入 main 函数的时候就又马上进入中断了。。。我不是已经把掩码关了吗,为什么还会这样阿。。。然后我就尝试着把掩码关了的同时还把未决寄存器也清 0了,也就是 EINTPEND,INTPND 这些寄存器的相关位清 0 ,这样就不会进入中断。。。为啥只关了掩码寄存器的时候会无限进入中断。。。。不懂阿。。。。麻烦前辈指教!!!!小弟在线等啊!!!!
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyttiao 2012-08-06
  • 打赏
  • 举报
回复
楼上说的对,在退出之前,先把相应的中断标志位清空.可以在手册上写的很清楚...
bjtea 2012-07-13
  • 打赏
  • 举报
回复
你没用操作系统,采用裸机运行程序?
2440发生中断后,首先在EINTPEND,或SRCPND、SUBSRCPND上悬挂中断请求标志,如果EINTMASK或INTMSK相应位没有屏蔽掉,则会响应中断,并将INTPND相应位置位。
可见,你置位INTMSK,仅仅是屏蔽中断,而没有清除掉已有的中断请求,所以,你一旦打开INTMSK,原来悬挂的中断标志就重复请求了。
正确的做法是,在退出中断时,清除EINTPEND,INTPND。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧