请问CH552的PWM缓冲机制是什么?

CH552手册里的PWM部分非常简略,FIFO这个词提了一次,也没有具体解释。


有人问他的代码出现了PWM异常的问题。

https://github.com/DeqingSun/ch55xduino/issues/135


然后我测试了一下,似乎是如果我在PWM下降沿时钟周期内写入一个较低值,整个PWM周期就保持为高了。


代码很简单,PWM周期预设为约1ms

P3_3 = 1;

PWM_DATA1 = 2;

delay(1);

P3_3 = 0;

PWM_DATA1 = 1;

delay(1);


Screen Shot 2023-05-04 at 5.04.29 AM.png

请问这是操作不当,还是可以认为芯片的bug?



您好,

我这边做个同样的测试试试看。

或者您可以直接将测试代码发送至邮箱dxy@wch.cn

或者留下您的邮箱,我将测试正常的代码发给您。


as far as i understand that, PWM_DATA1 write should be synced with bPWM_IF_END.


maybe its a good idea to do that in an interrupt function and write PWM_DATA1 only when

bPWM_IF_END is signalled.




完整测试代码和逻辑分析仪截图


icon_rar.gifch552_pwm_glitch.zip


Screenshot 2023-05-05 090348.png


您好

改变占空比应该与上一个PWM周期中断保持同步,使用中断方式,PWM周期完成中断中去改变PWM占空比。

若不使用中断,可以使用查询中断标志方式,查询到该中断发送再去修改PWM占空比,以下仅供参考

image.png


当我把写入值改成0的时候,问题又出现了,再次印证了我的猜想:在PWM下降沿时钟周期内写入一个较低值,整个PWM周期就保持为高了。


Screen Shot 2023-05-07 at 2.32.31 AM.png


可以使用提前置寄存器data值方式解决:

image.png


请问 “提前置寄存器data值” 在图上哪里?不好意思我没看出来


图片已更新


好的谢谢,我有逻辑分析仪时候再试一下。

绕这么大一圈。可以认为这算是PWM模块的bug吧。如果是的话还请在数据手册里勘误一下,以防后人掉坑。


就是说PWM的寄存器没有缓存吧?

保险起见,要停止PWM后再改写PWM的寄存器。


只有登录才能回复,可以选择微信账号登录