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。

  • 相关阅读:
    ATPCS规则
    ARM硬件问题
    ATPCS规则2
    12、深入理解计算机系统笔记:程序链接(1)
    11、深入理解计算机系统笔记:存储器层次结构,利用局部性
    15、深入理解计算机系统笔记:进程控制
    16、深入理解计算机系统笔记:信号
    9、深入理解计算机系统笔记:存储器层次结构,高速缓存存储器(1)
    *13、深入理解计算机系统笔记:程序链接(2)
    7、深入理解计算机系统笔记:存储器层次结构,存储技术(2)
  • 原文地址:https://www.cnblogs.com/tinyfeather/p/3259806.html
Copyright © 2011-2022 走看看