什么是Timer,什么是Counter

几乎每个嵌入式板都会有counter和timer,重要性比肩gpio.本质上来看timer和counter几乎是一样的东西,底层都是一个硬件counter,如果是按照规律的时间跳表,就是timer,如果是按照不规律的事件讯号跳表就是counter.一般timer/counter统一称作timer.

Timer.

一个典型的Timer包含以下元件:

  • prescaler -- 除频器,分频器
  • N-bit的counter register
  • 一个或者多个capture register
  • 一个或者多个compare register

timer底层实际是counter,counter会计算输入脉冲的数量,如果输入脉冲式每隔固定时间发出一次,就是timer.至于这个计数器的大小其实和处理器架构一点关系没有,8bit的处理器也可以有16bit size的counter.32bit的处理器也可以有16bit的counter。

prescaler(除频器)

prescaler是一个硬件元件,可以把用于驱动timer的clock(可能是cpu的clock,或是bus上的clock),以频率已特定的倍数下降。一般来说可以除以2^n,或是除以1~2^P, P是prescaler存放除频参数的bit数。

为什么需要使用prescaler

因为你必须把timer的触发clock调整到你想要的频率。因为counter的size是有限的,你使用的clock频率越高,你的时间精密度就越高,但是相对的,你的timer最高能记得时间就会减少。例如你想要1us的精确度,但是你只有16bit-timer,那你就只能数到约65ms,counter就要重新数了。如果你想要让counter一次可以数完一秒,那你就要每次16us才跳表。这就要透过除频器来做取舍。不过改进的方法就是另外加一个repetition register,用于设定一个重复的次数,可以让你的counter重新数完n次之后,在发出数完了的中断讯号。

假如每1us跳一次counter,16bit可以跳65546次,就只能数到65ms.

如果timer当计数器使用,通常会搭配另外一个time-based的timer,这样你就可以衡量一个时间周期内,该事件发生几次。

Timer Register

Timer Register其实就是一个N-bit的counter,可以向上数,也可以向下,甚至可以向上数完再向下。你可以读取,写入,停止,归零这个counter.当然,决定这个counter什么时候会计数跳表,取决于触发该counter的来源.

Capture Register

capture register是一种如果被触发,就会把目前counter的值存起来的register。触发的条件通常是输入pin教改变了状态。也就是说,Capture Register是一种当时间发生时,截取timer snapshot的register。capture register也可以设定产生一个interrupt,让handler去保存刚刚街渠道的timer状态。因为这是硬件触发的,所以不会像软件计数会有latency.所以capture register最简单的用途就是计算两个脉冲之间的时间间隔,把第一个和第二个讯号的snapshot counter相减,乘上每次counter+1的时间间隔,就代表两次讯号的时间差。

Compare Register

也有人称match register。他的用途和capture register正好相反。compare register会保存一个值。这个值会一直和timer目前的值做比较。如果当两个值一样时,就会发出一个讯号。因此这个是用于output讯号的register.如果你的timer是当成timer(计时)使用,那么compare register就可以用作每隔固定时间发出讯号。如果你的timer是当做计数器,那么compare register就变成一种当某个事件发生固定次数后,就会发出讯号的装置。

因此这就可以当作称PWM的功能。在timer=0是把output讯号设成high,然后设定compare register的值作为脉冲的宽度(pulse width),然后当比较相等的事件发生时,把output拉成low,再用另外一个compare register设定一个更大的时间,当时间到了之后把timer归0,你就做出了PWM了。

参考:

https://embedded-note.hackpad.com/ep/pad/static/aUAsaFTHTUf

Timer和counter的更多相关文章

  1. Timer.4 - Using a member function as a handler

    In this tutorial we will see how to use a class member function as a callback handler. The program s ...

  2. 关于js单线程(转载)

    进程和线程都是操作系统的概念.进程是应用程序的执行实例,每一个进程都是由私有的虚拟地址空间.代码.数据和其它系统资源所组成:进程在运行过程中能够申请创建和使用系统资源(如独立的内存区域等),这些资源也 ...

  3. MINIX3 内核时钟分析

    MINIX3 内核时钟分析  4.1 内核时钟概要  先想想为什么 OS 需要时钟?时钟是异步的一个非常重要的标志,设想一下,如 果我们的应用程序需要在多少秒后将触发某个程序或者进程,我们该怎么做到? ...

  4. 细说JavaScript单线程的一些事

    标签: JavaScript 单线程 首发地址:码农网<细说JavaScript单线程的一些事> 最近被同学问道 JavaScript 单线程的一些事,我竟回答不上.好吧,感觉自己的 Ja ...

  5. Linux时间子系统之(二):软件架构

    专题文档汇总目录 Notes:从框架上讲解了时间子系统,从底向上包括CPU Local TImer.Global Counter.Clock Souce/Clock Events模块管理.Tick D ...

  6. 2. 2A03简介

    2A03简介 1.CPU 1.1 内部寄存器 1.累加寄存器A(Accumulator):8位寄存器,用于同算术逻辑单元(ALU)共同完成各种算术逻辑运算,它既为ALU提供原始操作数又担任存放ALU运 ...

  7. Singer 学习十 同步模式

    sync 模式是属于tap 的操作,同步模式下,tap 需要提交 schema. record .state message, singer 指南对于每种 类型有详细的说明 streams 每个str ...

  8. javascript单线程那些事

    首先,说下为什么 JavaScript 是单线程? 总所周知,JavaScript是以单线程的方式运行的.说到线程就自然联想到进程.那它们有什么联系呢? 进程和线程都是操作系统的概念.进程是应用程序的 ...

  9. STM32定时器级联 -- AN2592

    Master configuration When a timer is selected as a master timer, the corresponding trigger output si ...

随机推荐

  1. TCP UDP 协议的选择

    行业应用中TCP/IP传输协议和UDP协议的选择! 中国移动.中国联通推行的GPRS网络.CDMA网络已覆盖大量的区域,通过无线网络实现数据传输成为可 能.无线Modem采用GPRS.CDMA模块通过 ...

  2. RAC,客户端连接失败ORA-12514

    今天上午,某项目运维组的同事过来求助:"某系统的应用有问题了,WEB页面打开以后出现ORACLE的ORA-12514错误,貌似监听有问题了!" 该系统的数据是采用RAC部署的模式, ...

  3. textarea中的文字自动换行问题

    在textarea中设置输入内容的自动换行,也是在CSS中设置word-wrap:break-word; 属性.需要额外注意的是textarea元素本身有一个warp属性,其取值含义如下: off:不 ...

  4. BZOJ 4004 [JLOI 2015] 装备购买 解题报告

    哎这个题 WA 了无数遍...果然人太弱... 首先我们把这些装备按照花费从小到大排序,然后依次考虑是否能买这个装备. 至于这样为什么是对的,好像有一个叫拟阵的东西可以证明,然而我不会.TATQAQ ...

  5. Ural1387 Vasya's Dad

    Description Vasya's dad is good in maths. Lately his favorite objects have been "beautiful" ...

  6. Android 多渠道打包原理和使用

    每次中午吃饭总会和技术同学聊天.当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难. 这个时候做安卓开发的同学最激动说安卓开发要自己画界面.机型复杂 ...

  7. HDOJ多校联合第五场

    1001 Inversion 题意:求逆序对,然后交换k次相邻的两个数,使得剩下的逆序对最少. 分析:题目用到的结论是:数组中存在一对逆序对,那么可以通过交换相邻两个数使得逆序对减少1,交换k次,可以 ...

  8. Altium自定义的快捷键设置

    我想要在AD09里面设置自定义的快捷键,例如将布线设置成键盘上的字母E键,如何设置求大神指点!感激不尽!!! 为什么快捷键都要发一篇文章呢?主要是AD换层的快捷键是*号,与其他快捷键离的很远,一个AD ...

  9. Ember.js demo5

    <!DOCTYPE html> <html> <head> <meta name="description" content=" ...

  10. Wzplayer C++ 版本,WzplayerPro

    WzplayerPro 是Wzplayer的C++版本,新版本支持插件解码器加载等等功能,以上是预览界面. 将会与Wzplayer一样,支持更多的平台,而且WzPlayer在初始化方面将会更快. 联系 ...