modbus 发表于 2023-8-22 12:07:15

STC32G的参考手册和库函数中PWM中断标记清除程序有BUG

不能使用类似PWMA_SR1 &= ~0x02;这种方式清除中断标记

chenchaoting 发表于 2023-8-22 12:26:48

为啥不能,看上去没毛病

国学芯用 发表于 2023-8-22 13:50:05

哪里有问题没看出来

modbus 发表于 2023-8-22 15:21:51

执行PWMA_SR1 &= ~0x02;这条程序分3步:
第1步,把PWMA_SR1读到寄存器中;
第2步,寄存器逻辑与0xFD;
第3步,寄存器写到PWMA_SR1
假设执行第1步前PWMA_SR1的值为0x02,执行第1步后到第3步之间正好某个中断事件产生了中断,比如位4中断把PWMA_SR1的值变为0x12,而与常数0xFD相与的寄存器值还是0x02,写入PWMA_SR1时将会清除位4所产生的中断标记,这样位4会丢失1次中断

国学芯用 发表于 2023-8-22 16:19:37

modbus 发表于 2023-8-22 15:21
执行PWMA_SR1 &= ~0x02;这条程序分3步:
第1步,把PWMA_SR1读到寄存器中;
第2步,寄存器逻辑与0xFD;
(引用自4楼)

如果位4中断把PWMA_SR1的值变为0x12,而与常数0xFD相与的寄存器值是0x10,写入PWMA_SR1时将会清除位1所产生的中断标记,位4中断标志不会丢失。

modbus 发表于 2023-8-22 17:17:06

国学芯用 发表于 2023-8-22 16:19
如果位4中断把PWMA_SR1的值变为0x12,而与常数0xFD相与的寄存器值是0x10,写入PWMA_SR1时将会清除位1所产 ...
(引用自5楼)

位4中断要是在寄存器读PWMA_SR1之后变为0x12呢

国学芯用 发表于 2023-8-22 17:20:40

modbus 发表于 2023-8-22 17:17
位4中断要是在寄存器读PWMA_SR1之后变为0x12呢
(引用自6楼)

去www.stcaimcu.com和STC研发交流讨论

modbus 发表于 2023-8-23 11:55:37

应该使用类似PWMA_SR1 = ~0x02;这种方式清除PWM中断标记,实测PWMA_SR1和PWMB_SR1寄存器写0的位清除标记,写1的位忽略不写入
页: [1]
查看完整版本: STC32G的参考手册和库函数中PWM中断标记清除程序有BUG