打印

求解:中断标志清除与中断挂起标志清除的疑问

[复制链接]
3564|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaolipingyy|  楼主 | 2011-7-20 02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32库里面对于中断标志位的清除有以下两种函数:
PPP_ClearFlag
PPP_RTC_ClearITPendingBit
他们有什么区别?所清除的是什么标志位?什么时候会用到?
我的理解如下,不知对否:
1、中断事件会导致中断,但由于各种原因,中断不能执行,被挂起,所以有PendingBit。
如果中断被响应,则硬件自动清除PendingBit,PPP_RTC_ClearITPendingBit函数无用。
如果人为的不想响应这个中断,也可以在这个中断响应前使用函数PPP_RTC_ClearITPendingBit清除这个标志位
2、若中断可以被响应,则PendingBit硬件复位,Flag硬件置位,中断函数结束后,要使用函数PPP_ClearFlag函数清除FLAG。
请各位大虾评判!
沙发
zhaolipingyy|  楼主 | 2011-7-20 15:33 | 只看该作者
顶一下,香主帮忙解释一下啊

使用特权

评论回复
板凳
zhaolipingyy|  楼主 | 2011-7-20 17:46 | 只看该作者
又仔细看了一下,发现这些函数内部功能是完全一样的,使用结果也一样。
难道仅是为了符合统一的编程风格,所有的模块都有这两个函数???

使用特权

评论回复
地板
qqq159599| | 2013-9-28 20:28 | 只看该作者
哎  遇到同样的问题
操作同样的寄存器啊

使用特权

评论回复
5
鱼小黑| | 2017-7-17 16:15 | 只看该作者
qqq159599 发表于 2013-9-28 20:28
哎  遇到同样的问题
操作同样的寄存器啊

实质上,他们检查、清除的都是SR寄存器的标志,只是在检查中断标志的时候,中断标志检查函数PPP_GetITStatus 还会检查对应事件的中断屏蔽位是否开启,如果事件中断被屏蔽(即事件发生时不触发中断),那么在事件A发生的时候,用PPP_GetFlag()函数检查事件A发生的返回结果,用PPP_GetITStatus()函数检查的结果是事件A有没有触发中断!

简而言之就是 ”事件A返回的结果” 和 “事件A返回有没有触发中断” ?

所以,清除标志位时,同样的道理,PPP_ClearFlag,PPP_RTC_ClearITPendingBit两个函数都是对PPP_SR寄存器进行清除的,在使用的时候,尽量在中断中使用 PPP_RTC_ClearITPendingBit函数,非中断时采用PPP_ClearFlag函数。

使用特权

评论回复
6
天灵灵地灵灵| | 2017-7-17 22:52 | 只看该作者
没研究过这个,顶。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

108

帖子

0

粉丝