ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
查看: 2151|回复: 5
收起左侧

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

[复制链接]

17

主题

109

帖子

327

积分

资深技术员

 楼主| 发表于 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。
请各位大虾评判!

17

主题

109

帖子

327

积分

资深技术员

 楼主| 发表于 2011-7-20 15:33 | 显示全部楼层 |返回版面
顶一下,香主帮忙解释一下啊

17

主题

109

帖子

327

积分

资深技术员

 楼主| 发表于 2011-7-20 17:46 | 显示全部楼层 |返回版面
又仔细看了一下,发现这些函数内部功能是完全一样的,使用结果也一样。
难道仅是为了符合统一的编程风格,所有的模块都有这两个函数???

0

主题

5

帖子

15

积分

实习生

发表于 2013-9-28 20:28 | 显示全部楼层 |返回版面
哎  遇到同样的问题
操作同样的寄存器啊
     

0

主题

1

帖子

3

积分

实习生

发表于 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函数。

62

主题

1667

帖子

4999

积分

中级工程师

发表于 2017-7-17 22:52 | 显示全部楼层 |返回版面
没研究过这个,顶。
*滑动验证:
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

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