《4.2.2-定时计数器解析》由会员分享,可在线阅读,更多相关《4.2.2-定时计数器解析(27页珍藏版)》请在金锄头文库上搜索。
1、 4.2.2 定时计数器,一、定时计数器概述 定时计数器是一个应用十分广泛的器件。定时:如钟表,计数如生产线上的产品计数。 定时和计数是一个统一的概念。对固定周期的脉冲计数则可实现定时。 AVR单片机内部集成了3个定时计数器:T0,T1,T2,其中T0和T2是8位的,而T2是16位的。另外需要注意的是,T1可以完全替代T0和T2;T2可以完全替代T0;反之则不然。,二、16位定时/ 计数器1(定时( 事件管理)、波形产生和信号测量) 1、特点: 真正的16 位设计( 即允许16 位的PWM) 2 个独立的输出比较单元 双缓冲的输出比较寄存器 一个输入捕捉单元 输入捕捉噪声抑制器 比较匹配发生时
2、清除寄存器( 自动重载) 无干扰脉冲,相位正确的PWM 可变的PWM 周期 频率发生器 外部事件计数器 4 个独立的中断源(TOV1、 OCF1A、OCF1B 与ICF1),2、C/T主要功能介绍 (1)T/C 时钟源:可以来自内部,也可来自外部,由位于T/C控制寄存器B(TCCR1B) 的时钟选择位(CS12:0) 决定。 (2)计数器单元:16 位T/C 的主要部分是可编程的16 位双向计数器单元。 (3)输入捕捉单元:可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。时间标记可用来计算频率、占空比及信号
3、的其它特征,以及为事件创建日志。,(4)输入捕捉触发源:输入捕捉单元的主要触发源是ICP1。T/C1 还可用模拟比较输出作为输入捕捉单元的触发源。用户必须通过设置模拟比较控制与状态寄存器ACSR 的模拟比较输入捕捉位ACIC 来做到这一点。要注意的是,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果。 (5)噪声抑制器:通过一个简单的数字滤波方案提高系统抗噪性。它对输入触发信号进行4 次采样。只有当4 次采样值相等时其输出才会送入边沿检测器。,(6)输出比较单元:16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器
4、立即产生一个匹配信号。然后OCF1x 在下一个定时器时钟置位。如果此时OCIE1x = 1, OCF1x 置位将引发输出比较中断。中断执行时OCF1x 标志自动清零,或者通过软件在其相应的I/O位置写入逻辑1” 也可以清零。根据WGM13:0 与COM1x1:0 的不同设置,波形发生器用匹配信号生成不同的波形。波形发生器利用TOP 和BOTTOM 信号处理在某些模式下对极值的操作。 输出比较单元A 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。此外, TOP 值还用来定义通过波形发生器产生的波形的周期。,(7)强制输出比较:工作于非PWM 模式时,可以通过对强制输出比较位FOC1
5、x 写”1” 的方式来产生比较匹配。强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器,但是OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零,还是交替变化)。 (8)写TCNT1 操作阻止比较匹配:CPU对TCNT1寄存器的写操作会阻止比较匹配的发生。这个特性可以用来将OCR1x初始化为与TCNT1 相同的数值而不触发中断。,(9)比较匹配输出单元:比较匹配模式控制位COM1x1:0 具有双重功能。波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较OC1x 状态; COM1x1:0 还控制OC1x 引脚输出的来源。
6、(10)比较输出模式和波形产生:波形发生器利用COM1x1:0 的方法在普通模式、CTC 模式和PWM 模式下有所区别。对于所有的模式,设置COM1x1:0 = 0 表明比较匹配发生时波形发生器不会操作OC1x 寄存器。,(11)工作模式工作模式:T/C 和输出比较引脚的行为, 由波形发生模式(WGM13:0) 及比较输出模式(COM1x1:0) 的控制位决定。比较输出模式对计数序列没有影响,而波形产生模式对计数序列则有影响。COM1x1:0 控制PWM 输出是否为反极性。非PWM 模式时COM1x1:0控制输出是否应该在比较匹配发生时置位、清零,或是电平取反。,(12)普通模式:为最简单的工
7、作模式。在此模式下计数器不停地累加。计到最大值后(TOP = 0 xFFFF) 由于数值溢出计数器简单地返回到最小值0 x0000 重新开始。在TCNT1为零的同一个定时器时钟里T/C溢出标志TOV1置位。此时TOV1有点象第17位,只是只能置位,不会清零。但由于定时器中断服务程序能够自动清零TOV1,因此可以通过软件提高定时器的分辨率。在普通模式下没有什么需要特殊考虑的,用户可以随时写入新的计数器数值。,(13)CTC( 比较匹配时清零定时器)模式:在CTC 模式里OCR1A 或ICR1 寄存器用于调节计数器的分辨率。当计数器的数值TCNT1 等于OCR1A(WGM13:0 = 4) 或等于
8、ICR1 (WGM13:0 = 12) 时计数器清零。OCR1A 或ICR1 定义了计数器的TOP 值,亦即计数器的分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。,(14)快速PWM 模式:可用来产生高频的PWM 波形。快速PWM模式与其他PWM模式的不同之处是其单边斜坡工作方式。计数器从BOTTOM计到TOP,然后立即回到BOTTOM 重新开始。对于普通的比较输出模式,输出比较引脚OC1x在TCNT1 与OCR1x 匹配时置位,在TOP 时清零;对于反向比较输出模式,OCR1x 的动作正好相反。由于使用了单边斜坡模式,快速PWM 模式的工作频率比使用
9、双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速PWM 模式十分适合于功率调节,整流和DAC应用。高频可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。,(15)输出的PWM 频率可以通过如下公式计算得到:变量N 代表分频因子 (1、 8、 64、256 或1024)。,3.定时器/ 计数器1寄存器的说明 (1)控制寄存器A TCCR1A Bit 7:6 COM1A1:0: 通道A 的比较输出模式 Bit 5:4 COM1B1:0: 通道B 的比较输出模式 COM1A1:0与COM1B1:0分别控制OC1A 与OC1B状态。如果COM1A1:0(COM1B1:0)的一
10、位或两位被写入1”,OC1A(OC1B) 输出功能将取代I/O 端口功能。此时OC1A(OC1B)相应的输出引脚数据方向控制必须置位以使能输出驱动器。OC1A(OC1B) 与物理引脚相连时,COM1x1:0 的功能由WGM13:0 的设置决定。,Bit 3 FOC1A: 通道A 强制输出比较 Bit 2 FOC1B: 通道B 强制输出比较 FOC1A/FOC1B只有当WGM13:0指定为非PWM模式时被激活。为与未来器件兼容,工作在PWM 模式下对TCCR1A 写入时,这两位必须清零。当FOC1A/FOC1B 位置1 ,立即强制波形产生单元进行比较匹配。COM1x1:0 的设置改变 OC1A/
11、OC1B 的输出。注意FOC1A/FOC1B 位作为选通信号。COM1x1:0 位的值决定强制比较的效果。在CTC 模式下使用OCR1A 作为TOP 值, FOC1A/FOC1B 选通即不会产生中断也不好清除定时器。FOC1A/FOC1B 位总是读为0。 Bit 1:0 WGM11:0: 波形发生模式 这两位与位于TCCR1B 寄存器的WGM13:2 相结合,用于控制计数器的计数序列计数器计数的上限值和确定波形发生器的工作模式( 见Table 47)。T/C 支持的工作模式有:普通模式( 计数器),比较匹配时清零定时器(CTC) 模式,及三种脉宽调制(PWM) 模式。,控制寄存器TCCR1B:
12、 Bit 7 ICNC1: 入捕捉噪声抑制器。置位将使能输入捕捉噪声抑制功能。此时外部引脚ICP1 的输入被滤波。其作用是从ICP1 引脚连续进行4 次采样。如果4 个采样值都相等,那么信号送入边沿检测器。因此使能该功能使得输入捕捉被延迟了4 个时钟周期。 Bit 6 ICES1: 输入捕捉触发沿选择。该位选择使用ICP1 上的哪个边沿触发捕获事件。ICES 为0” 选择的是下降沿触发输入捕捉; ICES1 为1” 选择的是逻辑电平的上升沿触发输入捕捉。按照ICES1 的设置捕获到一个事件后,计数器的数值被复制到ICR1 寄存器。捕获事件还会置为ICF1。如果此时中断使能,输入捕捉事件即被触发
13、。 当ICR1 用作TOP 值( 见TCCR1A 与TCCR1B 寄存器中WGM13:0 位的描述) 时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。,Bit 5 保留位。为保证与将来器件的兼容性,写TCCR1B 时,该位必须写入0”。 Bit 4:3 WGM13:2: 波形发生模式。 Bit 2:0 CS12:0: T/C 的时钟源选择。,TCNT1H 与TCNT1L:TCNT1H与TCNT1L组成了T/C1的数据寄存器TCNT1。通过它们可以直接对定时器/计数器单元的16 位计数器进行读写访问。,输出比较寄存器1A OCR1AH与 OCR1AL 输出比较寄存器1B OCR1BH与O
14、CR1BL 该寄存器中的16 位数据与TCNT1 寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OC1x 的输出逻辑电平。,输入捕捉寄存器1 ICR1H 与ICR1L: 当外部引脚ICP1(或T/C1的模拟比较器)有输入捕捉触发信号产生时,计数器TCNT1中的值写入ICR1 中。ICR1 的设定值可作为计数器的TOP 值。 注意: TCNT1、OCR1A/B与ICR1是AVR CPU 通过8位数据总线可以访问的16位寄存器。读写16位寄存器需要两次操作。 写16 位寄存器时,应先写入该寄存器的高位字节;而读16 位寄存器时应先读取该寄存器的低位字节。,中断屏蔽寄存
15、器 TIMSK: Bit 5 TICIE1: T/C1 输入捕捉中断使能。当该位被设为1”,且状态寄存器中的I 位被设为1” 时, T/C1 的输入捕捉中断使能。一旦TIFR 的ICF1 置位,CPU 即开始执行T/C1 输入捕捉中断服务程序。 Bit 4 OCIE1A: 输出比较 A 匹配中断使能。当该位被设为1”,且状态寄存器中的I 位被设为1” 时, T/C1 的输出比较A 匹配中断使能。一旦TIFR 上的OCF1A 置位,CPU 即开始执行T/C1 输出比较A 匹配中断服务程序。,Bit 3 OCIE1B: T/C1 输出比较 B 匹配中断使能。 当该位被设为1”,且状态寄存器中的I
16、位被设为1” 时,使能T/C1 的输出比较B 匹配中断使能。一旦TIFR 上的OCF1B 置位,CPU 即开始执行T/C1 输出比较B 匹配中断服务程序。 Bit 2 TOIE1: T/C1 溢出中断使能。当该位被设为1”,且状态寄存器中的I 位被设为”1” 时,T/C1 的溢出中断使能。一旦TIFR 上的TOV1 置位, CPU 即开始执行T/C1 溢出中断服务程序。,中断标志寄存器 TIFR: Bit 5 ICF1: T/C1 输入捕捉标志位。外部引脚ICP1 出现捕捉事件时ICF1 置位。此外,当ICR1 作为计数器的TOP 值时,一旦计数器值达到TOP, ICF1 也置位。执行输入捕捉中断服务程序时ICF1 自动清零。也可以对其写入逻辑1” 来清除该标志位。 Bit 4 OCF1A: T/C1 输出比较 A 匹配标志位。当TCNT1 与OCR1A 匹配成功时,该位被设为1”。强制输出比较(FOC1A) 不会置位OCF1A。执行强制输出比较匹配A 中断服务程序时OCF1A 自动清零。也可以对其写入逻辑1” 来清除该标志位。,Bit 3 OCF1B: T/C1 输出比较 B 匹配标