请高手指点ARM定时器<br />各位大虾,小弟刚学ARM,现在做简单的程序,在定时器上遇到问题,使用芯片是S3C2410,在用他做单个定时器作PWM输出时,可以进行脉宽调制,当占空比改变时改变相应TCMPB寄存器就可以调节脉宽,但当同时使用两个定时器作PWM输出时,没有波形,具体设置如何,请高手指点,谢谢!<br />下面是我的程序,请高手看看.<br /><br />void PWM_Init0(uint16 cycle, uint16 duty)<br />{ <br /> <br /> if(duty>cycle) duty = cycle; <br /> // 设置定时器0,即PWM周期和占空比<br /> // Fclk=200MHz,时钟分频配置为1:2:4,即Pclk=50MHz。<br />rTCFG0 = 97; // 预分频器0设置为98,取得510204Hz<br />rTCFG1 = 0; // TIMER0再取1/2分频,取得255102Hz<br />rTCMPB0 = duty; // 设置PWM占空比<br />rTCNTB0 = cycle; // 定时值(PWM周期)<br />if(rTCON&0x04) rTCON = rTCON|(1<<1); // 更新定时器数据 (取反输出inverter位)<br /> else rTCON = rTCON| (1<<2)|(1<<1); <br /><br />rSRCPND = rSRCPND|(1<<10); // 清除中断标志 <br /> rINTPND = rINTPND; //|(1<<10);<br /> <br />rTCON = rTCON|(1<<0)|(1<<3); // 启动定时器 <br />} <br /><br />void PWM_Init1(uint16 cycle, uint16 duty)<br />{ <br /> <br /> if(duty>cycle) duty = cycle; <br />rTCMPB1 = duty; // 设置PWM占空比<br />rTCNTB1 = cycle; // 定时值(PWM周期)<br />if(rTCON&0x0400) rTCON = rTCON|(1<<9); // 更新定时器数据 (取反输出inverter位)<br /> else rTCON = rTCON|(1<<10)|(1<<9); <br /><br />rSRCPND = rSRCPND|(1<<11);<br /> rINTPND = rINTPND; //|(1<<11);<br /> <br />rTCON = rTCON|(1<<8)|(1<<11); // 启动定时器 <br />} <br /> <br />int main(void)<br />{ <br /> uint16 pwm_dac; <br /> <br /> // 独立按键KEY1控制口设置<br /> rGPFCON = (rGPFCON & (~(0x03<<8))); // rGPFCON[9:8] = 00b,设置GPF4为GPIO输入模式 <br /> <br /> // TOUT0口设置<br /> rGPBCON = (rGPBCON & (~(0x0F<<0))) | (0x0A<<0); // rGPBCON[1:0] = 10b,[3,2]=10b,设置TOUT0,TOUT1功能 <br /> rGPBUP = rGPBUP | 0x0003; // 禁止TOUT0,1口的上拉电阻 <br /> <br /> <br /> rPRIORITY = 0x00000000; // 使用默认的固定的优先级<br />rINTMOD = 0x00000000; // 所有中断均为IRQ中断<br />rINTMSK = ~(3<<10); // 打开TIMER0中断允许<br /><br /> // 初始化PWM输出。设PWM周期控制值为255 (即DAC分辨率为8位)<br /> pwm_dac = 40; // 初始化占空比为0,即输出0V电压<br /> PWM_Init0(255, pwm_dac); <br /> PWM_Init1(255, 255-pwm_dac); <br /> <br /> // 等待按键KEY1,改变占空比 <br />while(1)<br />{ <br /> WaitKey();<br /> <br /> // 由于PWM周期控制值为255,所以0.5V对应的PWM占空比的值为:0.5/3.3 * 256 = 39<br /> pwm_dac = pwm_dac + 39; // 改变D/A输出的电压值<br /> if(pwm_dac>255) <br /> { <br /> pwm_dac = 40; <br /> }<br /> rTCMPB0 = pwm_dac;<br /> rTCMPB1 = 255-pwm_dac; <br /> } <br /> <br /> return(0);<br />}<br /><br />我看到周立工的指导书上单个定时器PWM时不设置中断优先级,中断类型等,不知道十么原因,谢谢!<br /> |
|