[嵌入式]定时器

定时器

7.1  通用定时器概述

    定时器或计数器的逻辑电路本质上是相同的,它们之间的区别主要在用途上。它们都是主要由带有保存当前值的寄存器和当前寄存器值加1或减1逻辑组成,其内部工作原理图是以一个N位的加1或减1计数器为核心,计数器的初始值由初始化编程设置,计数脉冲的来源有两类:系统时钟和外部事件脉冲。

 

定时工作方式

    若编程设置定时/计数器为定时工作方式时,则N位计数器的计数脉冲来源于内部系统时钟,并经过M分频。每个计数脉冲使计数器加1或减1,当N位计数器里的数加到0或减到0时,则会产生一个“回0信号”,该信号有效时表示N位计数器里的当前值是0。因为系统时钟的频率是固定的,其M分频后所得到的计数脉冲频率也就是固定的,因此通过对该频率脉冲的计数就转换为定时,实现了定时功能。

计数工作方式

    若编程设置定时/计数器为计数方式时,则N位计数器的计数脉冲来源于外部事件产生的脉冲信号。有一个外部事件脉冲,计数器加1或减1,直到N位计数器中的值为0,产生“回0信号”。

N位计数器里初始值的计算,在不同的定时部件中其具体的计算公式是不同的。  

7.2S5PV210的脉宽调制定时器

    S5PV210有五个32位脉冲宽度调制定时器。这些定时器为ARM分系统产生内部中断。此外,定时器0、1、2、3包含一个PWM功能模块,用于驱动外部I/O信号。定时器0中的PWM可选择的死区发生器,能够支持一个大电流设备。定时器4是没有外部引脚的内部定时器。


    定时器将APB—PCLK作为时钟源。定时器0和1共用一个可编程8比特分频器,该分频器为PCLK提供第一层分频。定时器2、3、4共用一个不同的8比特分频器。每个定时器有自己的专用时钟分频器,用于提供第二层的时钟分频器(分频器分为2、4、8、16分频)。

    每一个定时器有自己的由定时器时钟分频得到的32比特减法计数器。减法计数器最初从定时器计数缓冲寄存器(TCNTBn)中得到初值,然后在定时器时钟控制下进行减法操作。在自动重载工作状态,如果减法计数器降到了0,TCNTBn相应的值会重载到减法计数器来启动下一个循环。

    PWM功能要用到TCMPBn比较缓冲寄存器的值。如果在定时器控制逻辑下,减法计数器的值与比较寄存器的值相匹配,定时器逻辑会改变输出电平。因此,比较缓冲寄存器决定了PWM输出的开启和关闭时间。

    TCNTBn和TCMPBn寄存器都是都是双缓存配置,能够使定时器参数在循环的中间得到更新。新的数值直到当前时钟循环完成后才会起作用。

定时器组成:

   减法计数器、初值寄存器、比较寄存器、观察寄存器、控制逻辑等5部分构成。

 

输入时钟频率的公式:

Timer input clock Frequency =

 PCLK / {prescaler value+1} / {clock divider }


{prescaler value} = 0~255
{ clock divider } = 2, 4, 8, 16

PWM定时器的寄存器

寄存器声明:

// define Timer register
#define rTCFG0       (*(volatile unsigned int *)0xEA000000)
#define rTCFG1       (*(volatile unsigned int *)0xEA000004)
#define rTCON        (*(volatile unsigned int *)0xEA000008)
#define rTCNTB0   (*(volatile unsigned int *)0xEA00000C)
#define rTCMPB0   (*(volatile unsigned int *)0xEA000010)
#define rTCNTO0   (*(volatile unsigned int *)0xEA000014)

    ……


   前两个是定时器配置寄存器,主要用来设置预分频值和分割器值。第三个是控制寄存器,主要用来设置各定时器功能,第四个是计数缓冲寄存器,第五个是比较缓冲寄存器,第六个是计数观察寄存器。

定时器配置寄存器0(TCFG0)

用来配置2个预分频器和死区的的长度的寄存器。其中:

定时器输入时钟频率=PCLK/({预分频器值+1})/{分割器的值};

{预分频器值}=1~255;

{分割器的值}=1,2,4,8,16,TCLK;

死区长度=0~254。

 

定时器配置寄存器1(TCFG1)

配置每个定时器独有分割器的值。

 

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值