一. PWM概述
PWM(脉冲宽度调制)是利用处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
二. Exynos4412-PWM定时器
1. 配置管脚输出PWM
2. 设置pwm时钟源
3. pwm控制寄存器
4. pwm 占空比配置寄存器
TCMPB0 比较缓冲寄存器 -----》 比较计数器
TCNTB0 计数缓冲寄存器 -----》 down-counter 递减计数器
工作流程:
1 把TCMPB0 、TCNTB0下载到 内部的 比较计数器和down-counter。
2down-counter 每隔一个周期就减1
减到和比较计数器 相同的时候 就翻转,
继续减,再减到0 的时候 再翻转一次
3 一个周期执行完毕之后,如果我们设置 auto-reload模式,就重复1 2 步骤,没有设置的话就停止工作
三、PWM示例代码
void PWM_init(void)
{
PWM.TCFG0 =(PWM.TCFG0 & ~(0xFF)) |0x63; //Prescaler 0 value for timer 0; 99 + 1 = 100
PWM.TCFG1 =(PWM.TCFG1 & ~(0xF)) | 0x3; // 1/8 input for PWM timer 0
PWM.TCNTB0 =200;
PWM.TCMPB0 =100;
/*先手动更新TCNTB0和TCMPB0寄存器的值*/
PWM.TCON =PWM.TCON | (0x1<<1);
/*启动自动重装载,禁止手动更新、启动PW0*/
PWM.TCON =(PWM.TCON & ~(0xF)) | (0X9<<0);
}
Int main(void)
{
/*设置GPD0_0为PWM0输出*/
GPD0.CON =(GPD0.CON & ~(0xf)) | 0x2;// GPD0_0 : TOUT_0
while(1);
}
测试:使用示波器测量GPD0_0管脚,测量到pwm波,占空比为50%,周期为PCLK/(99+1)/(8)