当同时使用Timer0中断和PWM时。时间不正确。
void timer_init(void)
{
set_tmr_enable(clk_per_reg_tmr_enabled);
set_tmr_div(clk_per_reg_tmr_div_8);
timer0_init(tim0_clk_fast,pwm_mode_one,tim0_clk_no_div);
timer0_register_callback(timer0_irq_handle);
timer0_set(1500,900,100);
timer0_enable_irq();
timer0_start();
}
timer0_set(1500,900,100);
PWM的高度和低电平是正确的,900 = 450US,100 = 50us。
中断时间不正确,1500 = 750us,实际时间为1000us。
设备:
嗨,威廉,
在DA14580中,ON计数器中断依赖于PWM的高值和低值,因为寄存器操作重新加载到这种情况下的套件值(在这种情况下为1500),直到定时器寄存器低值达到零。假设当计时器PWM0处于低计数的中间时,在计数器达到0时,ON计数器停留在0,直到PWM0在低计数上达到0,然后产生中断。为了保持一致,建议配置高低值,使得高低和低的总和始终等于值。希望这可以帮助。请参阅下面的文档片段。
最好的,
lc_dialog.
你好!LC。
您可以上传整个文件或告诉我们您引用的文件的参考编号吗?
非常感谢!
嗨班莫呼,
此信息来自DA14580 SoC的完整规范,它不可能提供它。
谢谢,PM_DIALOG.
感谢你的回复。
嗨班莫呼,
添加到PM_DIALOG的注释,您可以在DA14585数据表中找到此信息。DA14580上的该模块类似于DA14585上的模块。因此,您可能会使用该Docuemnt以供参考。
请注意,并非所有其他模块都可能类似。
最好的,
lc_dialog.
非常感谢LC。
它真的很有用!