PWM定时器

一. 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)


猜你喜欢

转载自blog.csdn.net/weixin_42048417/article/details/80700610