33 定时器/计数器(TC)
33.1 描述
定时器/计数器(TC)包含三个相同的16位定时器/计数器通道。
可独立编程每个通道来执行很多功能,包括频率测量,事件计数,间隔测量,脉冲产生,延迟时间和脉宽调制。
每个通道有三个外部时钟输入,五个内部时钟输入和及两个可由用户配置的多功能输入/输出信号。每个通道驱动一个内部可配置中断信号,此信号用
来发生处理器中断。
定时器/计数器部件有两个作用于这三个TC通道的全局寄存器。
块控制寄存器允许用同样的指令同时启动这三个通道。
块模式寄存器为每个通道定义了外部时钟输入,允许将它们链接。
表33-1给出了设备定时器/计数器部件输入共同赋值给定时器计数器0到2
表33-1 定时器计数器部件赋值
名称定义
TIMER_CLOCK1MCK/2
TIMER_CLOCK2MCK/8
TIMER_CLOCK3MCK/32
TIMER_CLOCK4MCK/128
TIMER_CLOCK5SLCK
33.2 框图
图33-1 定时器/计数器框图
表33-2 信号名称描述
部件/通道信号名称描述
通道信号
XC0, XC1, XC2外部时钟输入
TIOA捕获模式:定时器/计数器输入定时器
波形模式:定时器/计数器输出
TIOB捕获模式:定时器/计数器输入定时器
波形模式:定时器/计数器输入/输出
INT中断信号输出
SYNC同步输入信号
33.3 引脚名称列表
表33-3 TC引脚列表
引脚名称描述类型
TCLK0-TCLK2外部时钟输入输入
TIOA0-TIOA2I/O口线A输入/输出
TIOB0-TIOB2I/O口线B输入/输出
33.4 附属产品
33.4.1 I/O口线
连接外设的引脚可与PIO口线复用。
编程者必须首先编程PIO控制器来给TC引脚指定外设功能。
33.4.2 电源管理
TC通过电源管理控制器(PMC)定时,因此编程者必须首先配置PMC
来使能定时器/计数器
33.4.3 中断
TC有一个连接于高级中断控制器(AIC)的中断口线。处理TC中断需
要在配置TC前编程AIC
33.5 功能描述
33.5.1 TC描述
定时器/计数器的三个通道相互独立,而操作相同。通道寄存器编程见501页表33-5列表
33.5.2 16位计数器
每个通道有一个16位计数器。计数器值在所选时钟的每个正边沿递增。
当计数器达到0xFFFF值并且变为0x0000时,发生溢出并且TC_SR(状态寄存
器)中的COVFS位置位。
计数器的当前值可通过读取计数器值寄存器TC_CV实时访问。计数器由触发器复位。此时,计数器值在所选时钟的下一个有效边沿上变为0.
33.5.3 时钟选择
在TC块级上,每个通道的输入时钟信号通过编程TC_BMR(块模式)可以与外部时钟TCLK0, TCLK1或TCLK2连接,或与内部I/O信号TIOA0, TIOA1或
TIOA2连接。见489页的图33-2
每个通道可独立的为其计数器选择一个内部或外部时钟源:
z内部时钟信号:TIMER_CLOCK1, TIMER_CLOCK2, TIMER_CLOCK3, TIMER_CLOCK4, TIMER_CLOCK5
z外部时钟信号:XC0, XC1 or XC2
可通过TC通道模式寄存器的TCCLKS位完成选择。
可用TC_CMR中的CLKI位反转所选时钟。这就允许在时钟的相反边沿计数。
脉冲功能允许当外部信号为高时时钟有效。模式寄存器中的BURST参数定义此
信号(无,XC0, XC1, XC2)。见489页图33-3
注意:此时,若使用外部时钟,TC块每个电平的持续时间必须比主控时钟周
期长。外部时钟频率必须至少比主控时钟低2.5倍。
图33-2 时钟选择
图33-3 时钟选择
33.5.4 时钟控制
可用两个不同的方法控制每个计数器的时钟:可以使能/禁用和启动/停止。见图33-4
z用户可用控制寄存器中的CLKEN和CLKDIS命令使能或禁用时钟。
在捕获模式若TC_CMR中的LDBDIS置1则可由RB载入事件禁用时钟。在波
形模式,若TC_CMR中的CPCDIS置1则由RC比较事件禁用时钟。当禁用时,
启动或停止命令无效:只有控制寄存器中的CLKEN命令可重新使能时钟。当时
钟使能后,状态寄存器中的CLKSTA置位。
z时钟也可启动或停止:触发器(软件,同步,外部或比较)通常用来启动时钟。在捕获模式(TC_CMR中LDBSTOP = 1)由RB载入事件或在波形模式
(TC_CMR中CPCSTOP = 1)由RC比较事件停止时钟。启动和停止命令仅在时钟
使能的时候有效。
图33-4 时钟控制
33.5.5 TC运行模式
每个通道可以工作在两种不同的模式下:
z捕获模式提供信号测量
z波形模式提供波形发生
用TC通道模式寄存器中的WA VE位编程TC运行模式
在捕获模式,TIOA和TIOB被配置为输入。
在波形模式,TIOA通常被配置为输出,而若TIOB未被选作外部触发时也为输
出。
33.5.6 触发器
触发器复位计数器并启动计数器时钟。两种模式下有三种通用触发器,第四种外部触发器适用于每种模式。
以下触发器适用于两种模式:
z软件触发器:每个通道有一个软件触发器,通过设置TC_CCR中的SWTRG有效。
z SYNC:每个通道有一个同步信号SYNC。当有效时,此信号和软件触发器有同样的效果。通过用SYNC置位写TC_BCR(块控制)同时激活所有通道
的SYNC信号
z比较RC触发器:RC在每个通道中执行,并且若TC_CMR中的CPCTRG 置位,当计数器值和RC值相等则产生一个触发
通道也可以配置为有一个外部触发器。在捕获模式,外部触发器信号可在TIOA
和TIOB间选择。在波形模式,可在以下信号上编程外部事件:TIOB, XC0, XC1
或 XC2。接着,可通过写TC_CMR中的ENETRG,可实现外部事件执行触发
若使用外部触发器,脉冲持续时间必须比主控周期长,以便对其检测。
不管是否使用触发器,依然要考虑后续所选时钟的有效边沿。这就意味着计数
器值在触发即不为0值,特别是当选择低频率信号作为时钟的时候。
33.5.7 捕捉工作模式
通过清零TC_CMR(通道模式寄存器)中的WAVE参数进入此模式。
捕获模式允许TC通道对输入的TIOA和TIOB信号上的脉冲时间,频率,周期,占空比和相位进行测量。
图33-5展示了当编程为捕获模式时TC通道的配置。
33.5.8 捕捉寄存器A和B
寄存器A和B(RA和RB)作为捕捉寄存器使用。这就是说当在TIOA信号上产生一个可编程事件时可用计数器值装载RA和RB。TC_CMR中的LDTA参数
定义装载寄存器A的TIOA边沿,LDTB参数定义装载寄存器B的TIOA边沿。
只有在最近触发后还未装载或RB以载入时才装载RA。
只有在最近触发后已装载RA或最后装载RB后才装载RB。
在读取最近装载值前装载RA或RB将设置TC_SR(状态寄存器)中的溢出错误标志位(LOVRS)。此时,将覆盖旧值。
33.5.9 触发条件
除了SYNC信号,软件触发器和RC比较触发器,还可定义外部触发。
TC_CMR中的ABETRG位选择TIOA或TIOB输入信号作为外部触发。ETRGEDG 参数定义产生外部触发的检测边沿。若ETRGEDG = 0(无),则禁用外部触发。
图33-5 捕获模式
33.5.10 波形工作模式
通过设置TC_CMR(通道模式寄存器)中的WAVE参数进入波形工作模式。
波形工作模式下,TC通道产生1个或2个相同频率和独立可编程占空比的PWM信号,或产生不同类型的单发射或重复脉冲
在此模式下,TIOA被配置为输出而若TIOB未被用作外部事件(TC_CMR 中的EEVT参数)时则定义TIOB为输出。
图33-6展示了当在波形工作模式下编程的TC通道配置。
33.5.11波形选择
TC_CV的动作随TC_CMR(通道模式寄存器)中的WA VSEL参数而变
不管如何选择,RA, RB 和 RC都可被用作比较寄存器。
RA比较器被用于控制TIOA输出,RB比较器被用于控制TIOB输出(若正确配置)而RC比较器被用于控制TIOA和/或TIOB输出
图33-6 波形模式
33.5.11.1 WA VSEL=00
当WA VSEL=00,TC_CV值从0递增到0xFFFF。一旦达到0xFFFF,则TC_CV 值复位。TC_CV重新开始递增并且继续循环。见图33-7
一个外部事件触发或软件触发可复位TC_CV值。要注意随时可能产生触发,这点很重要。见图33-8
这样的配置下不能编程RC比较器来产生触发。同时,RC比较器可以停止计数器时钟(TC_CMR中的CPCSTOP = 1)与/或禁用计数器时钟(TC_CMR中的
CPCDIS = 1)。
图33-7 无触发 WAVSEL= 00
图33-8 有触发WAVSEL= 00
33.5.11.2 WAVSEL = 10
当WAVSEL = 10,TC_CV值从0递增到RC值,接着自动复位为RC比较器值。
一旦TC_CV值已复位,接着继续递增。见图33-9
注意TC_CV在任何时候可被外部事件或软件触发复位(若两者都正确编程),这点很重要。见图33-10
另外,RC比较器可停止计数器时钟(TC_CMR中的CPCSTOP = 1)并且/或禁用计数器时钟(TC_CMR中的CPCDIS = 1)
图33-9 无触发 WAVSEL = 10
33.5.11.3 WAVSEL = 01
当WAVSEL = 01,TC_CV值从0递增到0xFFFF。一旦达到0xFFFF,TC_CV 值递减到0,接着重新递增到0xFFFF,一直继续下去。见图33-11
像外部事件或软件触发这样的触发可在任何时间修改TC_CV。若当TC_CV 正在递增时产生触发,则TC_CV接下来递减。若当TC_CV正在递减时接收到触
发,则TC_CV接着递增。见图33-12
在此配置下不能编程RC比较器来产生触发。
同时,RC比较器可以停止计数器时钟(CPCSTOP = 1)并且/或禁用计数器时钟(CPCDIS = 1).
图33-11 无触发 WAVSEL = 01
33.5.11.44 WAVSEL = 11
当WAVSEL = 11,TC_CV值从0递增到RC值。一旦达到RC值,则TC_CV 值递减到0,接着重新递增到RC,这样继续下去。见图33-13
像外部事件或软件触发这样的触发可在任何时间修改TC_CV值。当TC_CV 正在递增时产生触发,则TC_CV接下来递减。若当TC_CV正在递减时接收到触
发,则TC_CV接下来递增。见图33-14
RC比较起可停止计数器时钟(CPCSTOP = 1)并且/或禁用计数器时钟(CPCDIS= 1)
图33-13 无触发 WAVSEL = 11
图33-14 有触发WAVSEL = 11
33.5.12 外部事件/触发条件
可编程外部事件来检测时钟源(XC0, XC1,XC2)或TIOB。然后所选外部事件可用作触发。
TC_CMR中的EEVT参数选择外部触发器。EEVTEDG参数定义每个可能的外部触发(上升,下降或两者都)的触发边沿。若EEVTEDG清零,则未定义外部
事件。
若定义TIOB为外部事件信号(EEVT = 0),则TIOB不再用作输出并且比较寄存器B不再用于产生波形,且无IRQ。此时TC通道仅能产生TIOA波形 当定义了外部事件,则可通过设置TC_CMR中的ENETRG位将外部事件用作触发。还可根据WAVSEL参数将RC比较器用作触发。
33.5.13 输出控制器
输出控制器定义事件后,TIOA和TIOB上的输出电平变化。
只有在TIOB被定义为输出(不是外部事件)时使用TIOB控制
下列事件控制TIOA和TIOB:软件触发,外部事件和RC比较器。
RA比较控制TIOA,RB比较控制TIOB。根据TC_CMR中相应参数的定义每个时间可编程设置,清零或切换输出。
33.6 定时器/计数器(TC)用户接口
表33-4 TC全局存储器映射
偏移量 通道/寄存器 名称 访问类型 复位值
见表33-5
0x00 TC Channel 0
0x40 TC Channel 1
0x80 TC Channel 2
0xC0 TC块控制寄存器 TC_BCR只写 -
0xC4 TC块模式寄存器 TC_BMR读写 0
TC_BCR(块控制寄存器)和TC_BMR(块模式寄存器)控制整个TC块。TC 通道由表333-5所列寄存器控制。表33-5中每个通道寄存器的偏移量和表
33-5中提到相应通道的偏移量相关。
表33-5 TC通道存储映射
偏移量 寄存器 名称 访问类型 复位值 0x00 通道控制寄存器TC_CCR只写 -
0x04 通道模式寄存器TC_CMR读/写 0
0x08 保留 -
0x0C 保留 -
0x10 计数器值 TC_CV只读 0
0x14 寄存器A TC_RA读/写(1) 0
0x18 寄存器B TC_RB读/写(1) 0
0x1C 寄存器C TC_RC读/写 0
0x20 状态寄存器 TC_SR只读 0
0x24 中断使能寄存器TC_IER只写 -
0x28 中断禁用寄存器TC_IDR只写 -
0x2C 中断屏蔽寄存器TC_IMR只读 0
0xFC 保留 - - -
33.6.1 TC块控制寄存器
寄存器名称:TC_BCR
访问类型:只写
注意:1.若WA VE=0则只读
z SYNC:同步命令
0=无效
1=出现SYNC信号,此信号给每个通道同时产生一个软件触发。
33.6.2 TC块模式寄存器
寄存器名称:TC_BMR
访问类型:读/写
z TC0XC0S:外部时钟信号0选择
TC0XC0S 连接到XC0的信号
0 0 TCLK0
0 1 无
1 0 TIOA1
1 1 TIOA2
z TC1XC1S:外部时钟信号1选择
TC1XC1S 连接到XC1的信号
0 0 TCLK1
0 1 无
1 0 TIOA0 1 1 TIOA
2 z TC2XC2S:外部时钟信号2选择
TC2XC2S 连接到XC2的信号
0 0 TCLK2
0 1 无
1 0 TIOA0 1 1 TIOA1
33.6.3 TC通道控制寄存器
寄存器名称:TC_CCR
访问类型:只写
z CLKEN:计数器时钟使能命令
0=无效
1=若CLKDIS不为1则使能时钟
z CLKDIS:计数器时钟禁用命令
0=无效
1=禁用时钟
z SWTRG:软件触发命令
0=无效
1=软件触发的执行:计数器复位并且启动时钟
33.6.4 TC通道模式寄存器:捕获模式
寄存器名称:TC_CMR
访问类型:读/写
z TCCLKS:时钟选择
TCCLKS 所选时钟
0 0 0 TIMER_CLOCK1 0 0 1 TIMER_CLOCK2 0 1 0 TIMER_CLOCK3
0 1 1 TIMER_CLOCK4
1 0 0 TIMER_CLOCK5 1 0 1 XC0
1 1 0 XC1
1 1 1 XC2
z CLKI:时钟反转
0=在时钟上升沿计数器递增
1=在时钟下降沿计数器递增
z BURST:突发信号选择
BURST 0 0 时钟不是由外部信号选通
0 1 XC0和所选时钟相与
1 0 XC1和所选时钟相与
1 1 XC2和所选时钟相与
z LDBSTOP:当装入RB,计数器时钟停止
0=当发生RB装载时不停止计数器时钟
1=当发生RB装载时停止计数器时钟
z LDBDIS:当RB装载时计数器时钟禁用
0=当发生RB装载时不禁用计数器时钟
1=当发生RB装载时禁用计数器时钟
z ETRGEDG:外部触发边沿选择
ETRGEDG 边沿
0 0 无
0 1 上升边沿
1 0 下降边沿
1 1 每个边沿
z ABETRG:TIOA或TIOB外部触发选择
0=TIOB被用作外部触发
1=TIOA被用作外部触发
z CPCTRG:RC比较触发使能
0=RC比较对计数器和其时钟无效
1=RC比较复位计数器并且启动计数器时钟
z WA VE
0=捕获模式使能
1=捕获模式禁用(波形模式使能)
z LDRA:RA装载选择
LDRA 边沿
0 0 无
0 1 TIOA的上升沿
1 0 TIOA的下降沿1 1 TIOA的每个沿z LDRB:RB装载选择
LDRB 边沿
0 0 无
0 1 TIOB的上升沿
1 0 TIOB的下降沿1 1 TIOB的每个沿