我使用的ST72LITE39MCU,封装SO-20。 在配置PWM的时钟时,我想使用FCPU时钟以达到尽可能高的频率。但在调试过程中,出现了一些无法理解的问题,如下: 1. 在设置ATCSR=0X10;无效输出的情况下。我改用LITE定时器基准时间作为PWM时钟(ATCSR=0X08),此时可以观察到PWM0有波形出来,精度不高,不过可认为是正确的。 2. 但是其他一切不变,令ATCSR=0X10就没有输出了。 3. 后来我打开溢出中断,令ATCSR=0x0a, 使用的是LITE定时器时钟,有PWM输出,并且有溢出中断。但是,令ATCSR=0x12时,使用FCPU时钟,还是一样PWM没有输出,但此时亦有溢出中断。(注意:起先使用的一片MCU是没有中断的,后来换了片MCU就可以中断了)
请高手,或有实际经验的,指教指教啊。 附:怎样控制PWM的打开和关闭才会快。我怎么发现从配置PWM完成到PWM输出会很慢啊? ------------------------------------ // 主程序 main.c Pwm_Init(); Pwm_Output(0,1000000,50); // set PWM0=1MHZ, DUTYCYCLE=50% Pwm_Open(0); // .... // pwm.c void Pwm_Init(void) { unsigned char Temp; Temp=ATCSR; ATCSR=0x00; Temp=ATCSR; ATCSR|=0x12; // choose the cpu clock Temp=PWM0CSR; PWM0CSR&=(unsigned char)~0x02; // clr op0 } /**************************************************************** fpwm=fcount/(4096-ATR). if fcpu=8M then fpwm-max=4MHZ(ATR=4094,DCR=4095),fpwm-min=2kHZ(ATR=0);
duty_cycle=(DCR-ATR)/(0FFF-ATR),(when OP=0); duty_cycle=0%,DCR=ATR; duty_cycle=100%,DCR=0FFF. *****************************************************************/ void Pwm_Output(unsigned char channel,unsigned long int freq,unsigned char duty_cycle) { unsigned int temp; temp=(unsigned int)((4096-Fcounter/freq)&0x0fff); ATR1=temp; if(channel == 0) DCR0=((0xfff - temp)*duty_cycle)/100+1+ temp; } void Pwm_Open(unsigned char channel) { if(channel == 0) PWMCR|=(unsigned char)0x01; // enable PWM0 } |