PWM设置为8位,CPU频率16MHZ,2分频,所以一个PWM周期是32us,需要在一个PWM周期(32us)结束后,重新加载的PWM5L和PWM5H的值都不同(音频采集来的信号)。
目前使用的方法是设置一个定时器中断15us(PWM周期32us的一半还少一点),每次进入定时器中断去判断LOAD是否为0,如果为0,那么说明前一次的PWM5被加载到当前将要输出的PWM内部BUF中了,我就重新修改PWM5的值,如果LOAD还是为1,那么我就退出中断。但是发现很多时候,同一个PWM5的值会被输出2次。。。。。
中断里的程序如下:
if(!LOAD){
set_SFRPAGE; //PWM4 and PWM5 duty seting is in SFP page 1
PWM5H = 0x00;
PWM5L =新数据;
clr_SFRPAGE;
set_LOAD;
}
后来翻阅资料,发现是否可以这样做?我对PWM5进行中心对齐模式,然后使用“中心点中断方式”,在中断的时候,正好是中心点,一个PWM周期执行到一半,此时进入中断,重新对PWM5进行赋值,是否可以?(只是发现理论上一个PWM的周期会变长一倍,从32us变成64us?)这种方式还没有去验证,要周一才能确定,先在论坛上请教一下各位大侠。
|