|
楼主 |
发表于 2008-7-9 09:40:31
|
显示全部楼层
谢谢马老师的回复。
我在使能OCR引脚前,已用SBI指令设置了初始电平为高,甚至试过了引脚初始为低的情况。总是在我设好ICR和OCR的值后,一调用如下 Enable_TC1_PWM 宏时引脚电平即维持一个定时周期的低电平。
.macro Enable_TC1_PWM
sbi Signal_Out_Port,Signal_CHA_OutBit
ldi r16,(1<<WGM13)|(1<<WGM12)
out TCCR1B,r16
ldi r16,(1<<COM1A1)|(1<<COM1B1)|(1<<COM1C1)|(1<<WGM11)
out TCCR1A,r16
.endmacro
.macro Disable_TC1_PWM
ldi r16,0x00
out TCCR1A,r16
ldi r16,0x00
out TCCR1B,r16
sbi Signal_Out_Port,Signal_CHA_OutBit
.endmacro
这种现象在其他厂家的MCU上似乎也存在。按我的理解:在MCU允许PWM模块时,此时TC是停止的,引脚瞬间拉低(或高)是可以理解的,但启动TC运行后,引脚电平应该立刻如实的符合COMnAx的指定才对,这在逻辑上实现似乎并不难啊。(通过跟踪,发现使能前除了ICF1标识位置位外其余标识位均清零,在AVRStudio中手工清除ICF1,再继续执行调用Enable_TC1_PWM,情况依旧)。
我觉得Atmel的官方资料上回避了对这个问题的说明。请问马老师是否注意到这个问题?如实在无法解决,我只有将信号反转再改动硬件了。 |
|