Timer
一、简介
可编程定时器对于驱动定时器输入管脚的外部事件进行计数或计时。
前置知识
trigger是触发的意思
本单片机提供了8个定时器
有定时器/计数器/RTC…模式
定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是说当每来一个脉冲,计数器就会自动加1,如果当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出就会发出中断请求。
以下内容来自机翻
定时器API提供了一组用于使用定时器模块的函数。这些函数能配置和控制定时器,修改定时器/计数器的值,并管理定时器的中断处理。
定时器模块可以是两个半宽度的定时器/计数器独立运行或者作为全宽的计时器/Real Time Clock (RTC)运行。
有些定时器提供了16位半宽定时器和32位全宽定时器,而其他定时器则提供了32位半宽定时器和64位全宽定时器。
在此API中,提供两个半宽定时器的定时器模块称为TimerA和TimerB,而提供全宽定时器的定时器模块被称为TimerA。
当配置为全宽或半宽定时器时,可以将定时器设置为单次运行模式。如果配置为单次计时模式,则它在向下计数到零 或者向上计数到 load value 时停止。
如果配置为连续计数模式下,定时器计数到零(向下计数)或 load value(向上计数),然后重新加载和
继续计数。
当配置为全宽定时器时,定时器也可配置为RTC运行。在这种模式下,定时器希望由32.768KHz外部时钟驱动。
被分割成1秒的时钟刻度。
在半宽模式下,定时器也可以配置为事件捕获或为PWM generator。当配置为事件捕获时,定时器作为一个计数器。当配置为事件捕获时,定时器作为计数器。
可以配置为计算事件之间的时间或事件本身。事件的类型被计数的事件可以配置为正边、负边或两个边。
当定时器被配置为PWM发生器,用于捕捉事件的输入信号就变成了一个输出信号,而定时器则在该信号上驱动一个边缘对齐的脉冲。
定时器模块还提供了控制函数参数的能力,比如输出反转,输出触发,计时器行为等。
反转、输出触发器和停顿期间的定时器行为。
还提供了对中断源和事件的控制。中断可以生成以指示事件表示已被捕获,或表示一定数量的事件已被捕获。当计数器下数到零或者上数到特定值时也会产生中断。
在某些部件上,来自多个定时器的counter是可以被同步的。同步了的计数器在PWM和边缘时间捕获模式下非常有用。在PWM模式下,来自多个定时器可以通过具有相同的负载值和同步计数器来实现锁步。(意味着计数器的值总是相同的)。同样,通过使用相同的负载值和同步了的计数器在边缘捕捉模式下,两个输入边缘之间的绝对时间可以很容易地测量。
这个驱动包含在driverlib/timer.c中,driverlib/timer.h中包含了API。
The timer API is broken into three groups of functions: those that deal with timer configuration and control, those that deal with timer contents, and those that deal with interrupt handling.
Timer configuration is handled by TimerConfigure(), which performs the high level setup of the timer module; that is, it is used to set up full- or half-width modes, and to select between PWM, capture, and timer operations. Timer control is performed by TimerEnable(), TimerDisable(), TimerCon- trolLevel(), TimerControlTrigger(), TimerControlEvent(), TimerControlStall(), TimerRTCEnable(), and imerRTCDisable().
Timer content is managed with TimerLoadSet(), TimerLoadGet(), TimerLoadSet64(), TimerLoad- Get64(),
TimerPrescaleSet(), TimerPrescaleGet(), TimerMatchSet(), TimerMatchGet(), Timer- MatchSet64(), TimerMatchGet64(), TimerPrescaleMatchSet(), TimerPrescaleMatchGet(), Timer- ValueGet(), TimerValueGet64(), and TimerSynchronize().
The interrupt handler for the Timer interrupt is managed with TimerIntRegister() and TimerIntUnreg-
ister(). The individual interrupt sources within the timer module are managed with
TimerIntEnable(), TimerIntDisable(), TimerIntStatus(), and TimerIntClear().
即这些函数
TI怎样配置计时器?
1 | TimerConfigure(TIMER0_BASE, TIMER_CFG_ONE_SHOT);//单次计数模式 |
其他资料
总结如下
第一部分
这是前两个函数,与ADC(模拟信号转数字信号)功能有关(坑)
第二部分
第一个 能用来获取Timer的时钟源
第二个 能设置Timer的时钟源
第三个 能设置Timer模式
现在介绍一下参数长啥样
全宽模式为TIMERCFG*
半宽模式为TIMERCFG_A and TIMERCFG_B
后面的参数有哪些?
1.SHOT 单次计数
2.SHOT_UP 向上单次计数(看来上一个就是向下计数了。。)
3.PERIODIC 周期计数
4.PERIDIC_UP 向上周期计数
5.RTC 实时时钟模式
还有一些只有在全宽模式才有的参数:SPILT_PAIR 两个半宽计时器?
还有一些只有在半宽模式才有的参数:
1.CAP_COUNT 计数捕捉
2.CAP_COUNT_UP 向上计数捕捉
3.CAP_TIME 沿计数捕捉
4.CAP_TIME_UP 向上计数捕捉
5.PWM PWM输出
还有一些其他action可以引起计数不管了。。
第四个 能控制事件类型(下面是参数)
第五个 控制输出水平??好像是针对PWM的。
第六个 控制stall handling??
第七个 使能或着使不能ADC触发输出
第八个 控制等待触发句柄
最后一个 使不能Timer
第三部分
第一个 第二个 DMA事件的设置和获取
第三个 使能Timer
第四个 清除Timer中断源
第五个 第六个 使能/使不能Timer中断
有很多种中断源呢,比如说DMA event match(匹配) timeout(溢出) rtc(实时时钟)等等
第七个 注册Timer中断
第八个 获取当前的中断状态 这个状态就是在使能Timer中断时设置的状态
第九个 解除注册Timer中断
倒数第四个 倒数第三个 获取Timer的load value
最后两个 设置Timer的load value
第四部分
第一个 第二个 获取Timer的匹配值
第三个第四个 设置Timer的匹配值
第五个 获得prescale的值 (获取预分频的值)
分频就是把系统工作频率分频后当做定时器的工作频率!!例如系统时钟为12MHz,12分频后定时器的工作时钟为1MHz
第六个 设置prescale的值
第七个 第八个 使能/使不能RTC
第九个 定时器同步(再问问?)
在一些计数器种同步他们的counter
第十个 定时器更新模式
第十一个 第十二个 获取定时器当前的值
这里必须要有这份文档做参考%20(1).pdf)
定时器模式
看如下代码
1 | //控制灯的亮灭 |