找回密码
 立即注册
查看: 112|回复: 6

PWM中断标志清零该如何写,说说我的观点

[复制链接]
已绑定手机

7

主题

411

回帖

6596

积分

论坛元老

积分
6596
发表于 2026-8-19 09:47:14 | 显示全部楼层 |阅读模式
近日收到两位坛友关于PWM疑似丢失中断的问题:
https://www.stcaimcu.com/thread-25324-1-1.html
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=22231
今早抽空尝试了下,发现了解决之道:
程序中对PWMA_SR1置位操作无效,不会引发中断;(如PWMA_SR1=0xFF)
因此程序中对PWMA_SR1清零操作,可以只清除某一位;(如PWMA_SR1 = ~0x01;//只清除bit0)
建议这样写(已经本人验证,手册中有部分例程有类似写法):
  1.         if(PWMA_SR1 & 0x01)
  2.         {
  3.                 PWMA_SR1 = ~0x01;//只清除bit0
  4.         }
  5.         if(PWMA_SR1 & 0x02)
  6.         {
  7.                 PWMA_SR1 = ~0x02;//只清除bit1
  8.         }
复制代码
考虑到效率,另一种写法:
  1. uchar sr;
  2. sr = PWM1_SR1;
  3. PWM1_SR1 = ~sr;//只清除读到为1的状态位
  4. if(sr & 1)//bit0
  5. {
  6. }
  7. if(sr & 2) //bit1
  8. {
  9. }
复制代码

建议官方在MCU手册中在PWMA_SR1的说明中写清楚。
MCU手册中部分例程存在BUG,正如坛友遇到的那样:
(如果这两句之间PWMA_SR1有新的标志出现,就会遭到“误杀”)
  1. sr=PWMA_SR1;        
  2. PWMA_SR1 =0;
复制代码
另一种写法也可能存在BUG(未经验证,暂时是猜测),
如例程中PWMA_SR1&=~0x02;这一句在编译后的汇编代码中是分为读、改、写三步操作的,(写入值可能多个位为0)
同上,若读与写之间有新标志置位,则可能被“误杀”。
建议官方研究一下,看是不是要改一下例程。
傲游截图20260819094509.jpg
傲游截图20260819095818.jpg









回复

使用道具 举报 送花

已绑定手机

9

主题

409

回帖

1114

积分

金牌会员

积分
1114
发表于 2026-8-19 10:56:44 | 显示全部楼层
感谢分享,学习了。
回复

使用道具 举报 送花

28

主题

1327

回帖

4995

积分

超级版主

积分
4995
发表于 2026-8-19 11:39:40 | 显示全部楼层
楼主的方法是正解

使用读-修改-写指令修改SR1和SR2寄存器,确实存在丢中断的风险
SR1和SR2寄存器写0清标志,写1无效,可以使用楼主的方法规避风险
回复

使用道具 举报 送花

11

主题

144

回帖

1375

积分

金牌会员

积分
1375
发表于 2026-8-19 11:41:54 | 显示全部楼层
把操作SR寄存器的中断调整为同级中断,应该可以避免丢中断
微信qsssuv
回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6596

积分

论坛元老

积分
6596
 楼主| 发表于 2026-8-19 11:47:53 | 显示全部楼层
zh*** 发表于 2026-8-19 11:39
楼主的方法是正解

使用读-修改-写指令修改SR1和SR2寄存器,确实存在丢中断的风险

确实可行,我已在坛友帖子的18楼做了验证。
https://www.stcaimcu.com/forum.p ... page%3D1&page=2
回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6596

积分

论坛元老

积分
6596
 楼主| 发表于 2026-8-19 11:49:21 | 显示全部楼层
青穗*** 发表于 2026-8-19 11:41
把操作SR寄存器的中断调整为同级中断,应该可以避免丢中断

不,你没理解,不存在优先级问题。
回复

使用道具 举报 送花

已绑定手机

7

主题

411

回帖

6596

积分

论坛元老

积分
6596
 楼主| 发表于 2026-8-25 11:03:37 | 显示全部楼层
“STC8H / STC32G12K128 / AI8051U 数据手册中的例程已更新”
傲游截图20260825110222.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-9-22 10:30 , Processed in 0.074022 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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