zoukankan      html  css  js  c++  java
  • [smart210] 定时器与PWM

    平台:smart210

    CPU:s5pv210

    目标:学习如何配置定时器timer,实现PWM输出功能以及利用定时器产生中断

    知识储备:s5pv210有5个定时器,其中定时器0,1,2,3具有PWM输出功能,均有专门的引脚作为输出。而定时器4是内部定时器,不具备输出引脚。

    该CPU的定时器,所需要配置的寄存器并不多,主要有TCON(Timer Control),TCFG0(Timer Configuration 0),TCFG1(Timer Configuration 1),TCNTBn(Timer n Counter Buffer),TCMPB(Timer n Compare Buffer),TCNTOn(Timer n Counter Observation)。其中n代表定时器编号,有0~3共4个PWM定时器

    image

    我们可以先通过TCFG0和TCFG1来配置定时器的输入时钟。

    image

    image

    由此可知,每个定时器都能通过两个关键的分频因子prescaler和divider来配置输入时钟的频率,而原始输入时钟是PCLK_PSYS,这样一来根据公式:TCLKn=PCLK_PSYS/(prescaler+1)/(divider mux n)就能得到具体需要的时钟频率了。

    接下来就是定时器控制寄存器TCON的设置了。

    image

    可见,每个定时器都有  开始/停止  、手动刷新 、输出同相/反相  、单次载入/自动重载  的功能。

    以定时器0为例,我们能够通过TCMPB0和TCNTB0来初始化比较值和起始值(起始值>比较值),通过TCON做定时器控制,在定时器开始工作前,设置TCON中的Timer 0 Manual Update的值为1,就能“手动”把TCMPB0和TCNTB0这两个缓冲寄存器的值预先放入内部寄存器TCMP0和TCNT0中,然后Start Timer 0(把这个称作状态0),TCNT0按照时钟频率做减一计数,当TCNT0=TCMP0时(这个称作状态1),定时器0的输出管脚TOUT0反转,TCNT0继续减一计数直到为0的时候(这时称作状态2),输出管脚再次反转,触发定时器0的中断(如果之前有使能该中断源),如果设置了Timer 0 Auto Reload = 1,则TCMPB0与TCNTB0的值就会自动重新载入TCMP0与TCNT0,开启新一轮计数,回到状态0。已知TOUT0引脚默认初始是高电平

    简化上面的流程,我们能发现TOUT0的变化过程,状态0时是高电平,状态1时是低电平,状态2时回到高电平,自动重载后又回到状态0。从状态0到状态2称作一个小周期,那么,此时的【占空比】=【状态0到状态1的持续时间】/【状态0到状态2的持续时间】。假设我们得到的TCLK0=10Mhz(100ns),假设设置的TCNTB0=100,TCMPB0=20,则状态0到状态1(高电平持续时间)=(TCNTB0-TCMPB0)*100ns=8us,状态1到状态2(低电平持续时间)=TCMPB0*100ns=2us,整个TOUT0的周期为10us,占空比=80%

    由上可知,在当TOUT0默认高电平时,先设置好TCNTB0的值,固定好TOUT0输出脉冲的周期,通过不断设置TCMPB0值,就能不断调制输出脉冲的脉宽,这就是PWM脉宽调制技术的原理,输出周期为TCNTB0*TCLK0,输出占空比=(TCNTB0-TCMPB0)/TCNTB0 。

    如果我们设置了Timer 0 Output Inverter on/off=1,则TOUT输出会反相,输出占空比=TCMPB0/TCNTB0,输出周期仍为TCNTB0*TCLK0。

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/tinyfeather/p/3259806.html
Copyright © 2011-2022 走看看