回复第 10 楼 于2013-09-30 15:17:03发表:
你好,问题问的很好。首先我要和你说文档中有个错误,在133页,This value represents 1Hz PWM
frequency in center-aligned PWM mode and ~4MHz clock from fast IRC.
这句话中,1HZ是错误的,其实是1khz,也就是一个PWM的周期其实是1ms。
下面来说你的问题,一个整的正弦,或者锯齿,方波,包含了64个PWM。而每个PWM的占空比是2个byte,所以,DMA的长度设的是128个字节,由DMA_DCRn[SMOD]设置,装PWM占空比的SRAM的起始地址作为DMA的起始地址,然后设置每次request地址偏移2个字节,注意,request不是只是地址的偏移,不产生DMA中断,因为你的BCR还没有降到0.DMA中断只有BCR降到0,DONE置1产生。下面再来说说为什么设置BCR为64000,我觉得是这样的,你要产生一个正弦波,总不会只产生一个周期对不对,肯定多产生几个周期,这个就由你自己去控制,它不是由DMA的长度来控制的。所以,当一个DMA长度跑完,而BCR没有为0,这时候不会DMA中断,而是DMA的地址自动转移到起始地址,再继续循环的跑,直到你BCR的字节跑完为止。希望我的回答能够帮到你。