ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

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

[复制链接]
2173|5
 楼主 | 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。
请各位大虾评判!
 楼主 | 2011-7-20 15:33 | 显示全部楼层
顶一下,香主帮忙解释一下啊
 楼主 | 2011-7-20 17:46 | 显示全部楼层
又仔细看了一下,发现这些函数内部功能是完全一样的,使用结果也一样。
难道仅是为了符合统一的编程风格,所有的模块都有这两个函数???
| 2013-9-28 20:28 | 显示全部楼层
哎  遇到同样的问题
操作同样的寄存器啊
| 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函数。
| 2017-7-17 22:52 | 显示全部楼层
没研究过这个,顶。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表