Timer和counter
什么是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的更多相关文章
- 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 ...
- 关于js单线程(转载)
进程和线程都是操作系统的概念.进程是应用程序的执行实例,每一个进程都是由私有的虚拟地址空间.代码.数据和其它系统资源所组成:进程在运行过程中能够申请创建和使用系统资源(如独立的内存区域等),这些资源也 ...
- MINIX3 内核时钟分析
MINIX3 内核时钟分析 4.1 内核时钟概要 先想想为什么 OS 需要时钟?时钟是异步的一个非常重要的标志,设想一下,如 果我们的应用程序需要在多少秒后将触发某个程序或者进程,我们该怎么做到? ...
- 细说JavaScript单线程的一些事
标签: JavaScript 单线程 首发地址:码农网<细说JavaScript单线程的一些事> 最近被同学问道 JavaScript 单线程的一些事,我竟回答不上.好吧,感觉自己的 Ja ...
- Linux时间子系统之(二):软件架构
专题文档汇总目录 Notes:从框架上讲解了时间子系统,从底向上包括CPU Local TImer.Global Counter.Clock Souce/Clock Events模块管理.Tick D ...
- 2. 2A03简介
2A03简介 1.CPU 1.1 内部寄存器 1.累加寄存器A(Accumulator):8位寄存器,用于同算术逻辑单元(ALU)共同完成各种算术逻辑运算,它既为ALU提供原始操作数又担任存放ALU运 ...
- Singer 学习十 同步模式
sync 模式是属于tap 的操作,同步模式下,tap 需要提交 schema. record .state message, singer 指南对于每种 类型有详细的说明 streams 每个str ...
- javascript单线程那些事
首先,说下为什么 JavaScript 是单线程? 总所周知,JavaScript是以单线程的方式运行的.说到线程就自然联想到进程.那它们有什么联系呢? 进程和线程都是操作系统的概念.进程是应用程序的 ...
- STM32定时器级联 -- AN2592
Master configuration When a timer is selected as a master timer, the corresponding trigger output si ...
随机推荐
- Java EJX
EJX http://www.docin.com/p-121548732.html
- 一步步学习NHibernate(3)——NHibernate增删改查
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们配置了以下NHibernate的运行环境, 并介绍了NHibernate的中两个非常中重要的接口"I ...
- 一步步学习NHibernate(1)——NHibernate介绍
请注明转载地址:http://www.cnblogs.com/arhat 第十五章 从本章开始,老魏将给大家一起学习NHibernate这个流行的ORM框架,本来老魏想要和大家一起探讨微软的EF框架的 ...
- makefile懒人版(单个文件编译)
.PHONY:clean all CC=gcc CFLAGS=-Wall -g ###replace your bin BIN=1 2 3 4 all:$(BIN) %.o:%.c $(CC) $(C ...
- Spring 数据源配置二:多数据源
通过上一节 Spring 数据源配置一: 单一数据源 我们了解单一数据源的配置, 这里我们继续多个数据源的配置 如下(applicationContent.xml 内容) 一: Spring ...
- tortoisesvn的安装与使用
1.下载安装文件,我用的是1.6.同时可以下载一个中文的安装包. 2.我在F盘建立了一个文件夹tortoisesvn,专门用来放置版本目录文件.然后右键这个文件夹,选择tortoisesvn-> ...
- vs2012+opencv2.4.7 实现单张人脸识别
参考:http://blog.sina.com.cn/s/blog_593c85f20100ncnj.html OpenCV的库中带有检测正面人脸的 Haar迭代算法Haar Cascade Face ...
- 汇编语言第二版 程序在dos中执行情况.P86-87
假设程序要被dos系统加载到sa:0000的内存中,在这个地址的内存开始会有256个字节的PSP程序,用于加载程序和dos系统的通信.ds中的地址为sa. 真正的程序会在这256个字节之后.所以真正程 ...
- 安装edX DevStack
概述 edX Developer Stack 就是通常我们所说的Devstack,是为本地开发所设计的一个Vagrant实例. Devstack: 和产品(edx Product Stack)对系统的 ...
- [topcoder]BusinessTasks
水题,不值一提.http://community.topcoder.com/stat?c=problem_statement&pm=1585&rd=6535 import java.u ...