每个GPTM的主要元件为2个自由运行的递增/递减计数器(称作Timer A和Timer B)、2个匹配寄存器、2个预分频器匹配寄存器、2个影子寄存器、2个加载/初始化寄存器及其相关的控制功能。
定时器模块提供两个半宽的定时器/计数器,可配置成独立运行的定时器或事件计数器,或者配置成全宽定时器或实时时钟(RTC)。一些定时器提供了16位的半宽定时器和一个32位的全宽定时器,而其他定时器提供了32位半宽定时器和一个64位的全宽定时器。API在一个定时器模块里提供两个半宽的定时器分别称为Timer A和Timer B,而全宽定时器称为Timer A。
当配置为全宽或半宽定时器时,定时器可以设置为单次触发定时器或一个连续的计时器。如果配置为单次模式,当定时器向下计数到0或者计数到装载值时,定时器就停止计数。如果配置为连续模式,定时器计数到0(向下计数)或装载值(向上计数)时,定时器将重新装载初值并继续计数。当配置为一个全宽的定时器时,该定时器也可以被配置成RTC。在这种模式下,定时器希望由一个32.768kHz的外部时钟来驱动,该时钟被分频用于产生1s的时钟节拍。
当在半宽模式下,定时器也可以配置为事件捕获或者作为脉冲宽度调制(PWM)发生器。当配置为事件捕获时,定时器作为计数器。它可配置成计数两个事件之间的时间或计数事件本身。被计数的事件可被配置成上升沿、下降沿或者双边沿。当定时器被配置为PWM发生器时,用于捕获事件的输入信号变为输出信号,定时器可用于驱动一个边沿对齐的脉冲到该信号上。
定时器模块还提供了能够控制其他功能的参数,如输出反转、输出触发、中止期间定时器的行为。
此外,定时器模块还提供了中断源和事件的控制。用生成的中断指示一个事件已捕获或者一定数量的事件已捕获。当定时器已向下计数到0或定时器匹配一个特定的值时也可产生中断。
TM4C1233H6PM还可以从多个定时器模块进行计数器同步。同步计数器对于PWM和边沿定时捕获模式较有帮助。在PWM模式下,PWM从多个定时器输出,可被具有相同的加载值锁步使其可同步计数。类似地,在边沿定时捕获模式下,使用相同的加载值和同步计数器,使两个输入边沿之间的绝对时间可很容易地测量。
表11-2列出各GPTM可用的模式。
表11-2 通用定时器功能
①仅在独立使用定时器时可使用预分频器。
注:
1.在单次或周期模式下的递减计数时,预分频器用作真预分频器且包含计数的最低位。
2.在单次或周期模式下的递增计数时,预分频器用作定时器扩展且包含计数的最高位。
3.在输入沿计数、输入沿定时与PWM模式时,预分频器用作定时器扩展,而无需关心计数方向。
1.定时器模式
本小节将简介几种常用定时器模式的运行机制。
(1)单次触发/周期定时器模式
单次触发/周期定时器包括以下模式:
①增/减计数模式。
②等待触发模式。
③单次触发模式。当定时器满足条件后将停止计数并清除标志位。
④周期模式。计数器从0开始递增计数到装载值,重新自动装载初值,并从0开始重新计数;计数器从预装载值开始递减计数并重新装载预装载值。
⑤μDMA触发模式。
选择单次触发/周期模式可依据写入到模式寄存器(GPTMTnMR)中TnMR字段的值来确定,而定时器是递增计数还是递减计数由GPTMTnMR寄存器中的TnCDIR位来确定。
在软件将GPTM控制寄存器(GPTMCTL)中的TnEN位置位时,定时器将从0x0开始递增计数或从预装载的值开始递减计数。此外,若GPTMTnMR寄存器中的TnWOT位被置位,在TnEN位置位时,定时器将会等待一个触发来启动计数。在使能定时器时将要装载到定时器寄存器的值见表11-3。
表11-3 使能定时器时寄存器的值。
当定时器做递减计数并到达超时事件(0x0)时,定时器将在下一个时钟周期从GPTMTnILR与GPTMTnPR寄存器中重新装载初值。当定时器做递增计数并达到超时事件(GPTMTnILR和可选GPTMTnPR寄存器中的数值)时,定时器将会重新装载0x0。若将定时器配置为单次触发模式,则定时器将停止计数,并将GPTMCTL寄存器中的TnEN位清零;如果将定时器配置为周期模式,则定时器将在下一个时钟周期重新开始计数。
在周期、快照模式(即GPTMTnMR寄存器中的TnMR字段为0x2,TnSNAPS位=1)发生超时事件时,定时器的值将被加载到GPTMTnR寄存器,而预分频器的值会被加载到GPT-MTnPS寄存器中。自由运行计数器的值将显示在GPTMTnV寄存器中,自由运行预分频器的值会显示在GPTMTnPV寄存器中。通过此方式,软件可校验快照值和自由运行定时器的当前值,使之可确定从中断发生到进入中断处理程序之间所花费的时间。注意,当定时器配置为单次触发模式时,快照模式不可用。
除重载初值外,在定时器达到超时事件时将会被触发并产生超时中断;当GPTMT-nMR寄存器中的TnMIE位置位时,在定时器的值与加载到匹配寄存器(GPTMT-nMATCHR)和预分频匹配值寄存器(GPTMTnPMR)的值相等时,也将产生中断条件。通过将GPTMCTL中的TnOTE位置位可启动ADC触发,当ADC触发器使能时,仅单次触发或周期超时事件使ADC触发器有效。可通过配置并使能相应的μDMA通道来开启μDMA触发器。
若软件在计数器递减计数时更新了GPTMTnILR或GPTMTnPR寄存器,计数器将在下一个时钟周期装载新值;若GPTMTnMR寄存器中的TnILD位被清零,则计数器将从新值开始继续计数;如果TnILD位被置位,计数器将在下一个超时事件后加载新值;如果软件在计数器递增计数时更新了GPTMTnILR或GPTMTnPR寄存器,超时事件会在下一个时钟周期变更为新值;如果软件在计数器递增或递减计数时更新了GPTMTimern值寄存器(GPTMTnV)的值,计数器将会在下个时钟周期载入这个新值并从该值开始递增或递减计数;若软件更新了GPTMTnMATCHR或GPTMTnPMR寄存器,新值会在下一个时钟周期反映出来;如果TnMRSU位被置位,新值将在下一个超时事件后才会生效。
(2)实时时钟模式
实时时钟模式仅支持递增计数模式,复位后计数器的值为0x01,见表11-4。
表11-4 在RTC模式下的计数器值
图11-2 读RTC值的流程图
在RTC模式中,要求CCP0引脚的输入时钟为32.768kHz。然后将其分频为1Hz。在软件写GPTMCTL寄存器中的TAEN位时,计数器将从预装载值0x1开始递增计数。当计数器值与GPT-MTAMATCHR寄存器中预装载值匹配时,GPTM将使GPTMRIS寄存器中的RTCRIS位生效,并开始继续计数,直到发生硬件复位或被软件禁止(通过清零TAEN位)。当定时器的值达到最终计数值时,定时器将会返回到0x0继续递增计数。如果在GPT-MIMR寄存器中使能RTC中断,则GPTM还将置位GPTMMIS寄存器中的RTCMIS位并产生控制器中断。通过写GPTMICR寄存器中的RTCCINT位可将状态标志清除。
为了确保RTC值的一致性,其软件流程如图11-2所示。
(3)输入边沿计数模式(www.xing528.com)
在该模式中,最大输入频率为1/4系统频率,定时器配置为24位或48位增/减计数器,包括带有存储在通用定时器n中的预分频寄存器(GPTMTnPR)中的高计数值和GPTMTnR寄存器中低位的可选预分频器。在该模式下,定时器可捕捉到三种事件类型:上升沿、下降沿或双沿。为了把定时器设置为边沿计数模式,GPTMTnMR寄存器中的TnCMR位必须清零。定时器计数时所采用的边沿类型由GPTMCTL寄存器中的TnEVENT字段决定。在递减计数模式的初始化期间,需配置GPTMTnMATCHR和GPTMTnPMR寄存器,使GPTMTnILR和GPTMTnPR寄存器与GPTMTnMATCHR和GPTMTnPMR寄存器之间的差值等于待计算的边沿事件的个数。在递增计数模式中,定时器从0x0开始计数直到GPTMT-nMATCHR和GPTMTnPMR寄存器中的值见表11-5。
表11-5 当定时器使能时输入边沿计数模式的计数器值
在软件写GPTM控制寄存器(GPTMCTL)的TnEN位时,使能定时器以捕获事件。CCP引脚每输入一个事件,计数器的值就递减1,直到事件计数的值与GPTMTnMATCHR和GPTMTnPMR的值匹配。这时GPTM将让GPTMRIS寄存器确认CnMRIS位(若中断未被屏蔽,可同时确认CnMMIS位)。
此外,它还可以产生ADC和/或μDMA触发。在达到匹配值后,计数器将使用GPTMT-nILR和GPTMTnPR寄存器中的值来执行重新装载操作,并由GPTM自动将GPTMCTL寄存器中的TnEN位清零,停止计数器计数。一旦事件计数值满足要求,随后的所有事件都将被忽略,直到通过软件重新将TnEN位使能。
例如,计数器配置为检测输入信号的双边沿,定时器的初值为GPTMTnILR=0x000A,匹配值为GPTMTnMATCHR=0x0006。此时,仅需计数四个边沿事件,如图11-3所示。
图11-3 输入边沿计数模式示例
(4)输入边沿定时模式
在边沿定时模式中,最大输入频率为系统频率的1/4,定时器配置为24位或48位递增/递减计数模式。对于该模式,在递减计数时需初始化装载值到GPTMTnILR寄存器中。定时器可捕获三种事件类型:上升沿、下降沿、或双沿。通过置位GPTMTnMR寄存器的TnCMR位可将定时器配置为边沿定时模式,而定时器捕获时采用的事件类型可由GPTMCTL寄存器的TnEVENT字段来决定。表11-6列出了输入事件计数模式的计数器值。
表11-6 当定时器使能时输入事件计数模式的计数器值
在软件写GPTMCTL寄存器中的TnEN位时,可使能定时器来捕获事件。在检测到所选输入事件时,从GPTMTnR和GPTMTnPS寄存器中捕获定时器计数器的当前值,且该值可通过微控制器来读取。然后GPTM将确认CnERIS位(若中断未被屏蔽,可同时确认CnEMIS位)。GPTMTnV包含定时器的自由运行值,读取该值可以确定从中断发生到进入中断处理程序之间所花费的时间。
此外,它还可产生ADC或μDMA触发。在捕获到事件之后,定时器不会停止计数,而是继续计数,直到TnEN位被清零为止。当定时器达到超时值时,在递增模式中将重新装载0x0,而在递减模式下需重新装载来自GPTMTnILR寄存器中的初值。
输入边沿定时模式的工作原理如图11-4所示。假设定时器的初值为默认值0xFFFF,定时器配置为捕获上升沿事件。每当检测到上升沿事件时,当前计数值便加载到GPTMTnR寄存器中,该值将一直保持到在寄存器中检测到下一个上升沿(在此上升沿处,新的计数值被加载到GPTMTnR寄存器中)。
图11-4 输入边沿定时模式的工作原理
(5)PWM模式
GPTM支持简单的PWM生成模式。在PWM模式中,将定时器配置为24位或48位递减计数器,初值由GPTMTnILR寄存器确定。在此模式中,PWM频率和周期为同步事件,以保障无毛刺现象。使GPTMTnMR寄存器中的TnAMS位=1、TnCMR位=0、TnMR字段=2即可使能PWM模式。表11-7列出了PWM模式的计数器值。
表11-7 当定时器使能时在PWM模式的计数器值
在软件写GPTMCTL寄存器的TnEN位时,计数器开始递减计数,直到计数值到达0x0为止。如果GPTMTnMR寄存器中的TnWOT位置位,在TnEN位置位时,定时器将等待一个触发来启动计数。在周期模式的下一个计数循环中,计数器会将其初值重新装载到GPTMT-nILR和GPTMTnPR寄存器中,并继续计数,直到用户通过软件将GPTMCTL寄存器中的TnEN位清零禁止计数。定时器可根据上升沿、下降沿或双沿这三种事件来产生中断。事件可通过GPTMCTL寄存器中的TnEVENT字段来配置,而中断可通过设置GPTMTnMR寄存器中的TnPWMIE位来使能。在发生该事件时,将使GPTM原始中断状态寄存器(GPTMRIS)中的CnERIS位置位,并保持该值直到在GPTM中断清除寄存器(GPTMICR)中执行写操作使之清零为止。若在GPTM中断屏蔽寄存器(GPTMIMR)中使能捕获事件中断,GPTM还会将GPTM屏蔽的中断状态寄存器(GPTMMIS)中的CnEMIS位置位。注意,这里中断状态位不会被更新,除非TnPWMIE位被置位。
当计数器的值与GPTMTnILR和GPTMTnPR寄存器的值(计数器的初始状态)相等时,输出PWM信号有效,当计数器的值与GPTMTnMATCHR和GPTMTnPMR寄存器的值相等时,输出PWM信号无效。在TnPWML位=1的条件下,可软件实现将输出PWM信号反相的功能。
例如,假设初值为GPTMTnILR=0xC350,匹配值为GPTMTnMATCHR=0x411A,如图11-5所示。
说明:从图11-5中可以看到当递减计数器的计数值为0时,将重新装载初值(GPTMT-nILR=0xC350),同时输出的PWM信号将翻转一次;当计数器的值等于设定的匹配值(GPTMTnMATCHR=0x411A)时也将翻转一次。通过合理的设置初值和匹配值的大小可获得不同占空比的PWM信号。
2.等待触发模式
等待触发模式允许使用菊花链式的定时器模块。若进行恰当的配置,一个单独的定时器可使用定时器触发来初始化多路时钟事件。将GPTMTnMR寄存器中的TnWOT位置位来使能等待触发模式。在TnWOT位置位时,Timer N+1只有等到菊花链中它的上一个(Timer N)达到超时事件时,才会开始计数。菊花链一般地配置形式为GPTM1→GPTM0、GPTM2→GPTM1等。如果Timer A在32位模式中,将触发下一个定时器模块的Timer A。若Timer A在16位模式下,则将触发同一个定时器模块的Timer B,而在下一个模块中,Timer B将会触发Timer A。注意:GPTM0的TAWOT位永远不会置位。GPTMCFG位如何影响菊花链如图11-6所示。
图11-5 PWM模式示例
图11-6 定时器菊花链
3.同步通用定时器模块
GPTM同步控制寄存器(GPTMSYNC)中的GPTM0模块可用于所选定时器的同步计数。设置GPTMSYNC寄存器中的位使相关的定时器用于处理超时事件的动作。而对于用于级联模式的计时器,只有定时器A中的位须在GPTMSYNC寄存器进行设置。在同步计数时,对定时器的超时操作,见表11-8。
表11-8 GPTM模块的超时操作
(续)
注:只有所有定时器使用相同的时钟源,才能使其正常工作。
4.DMA操作
每个定时器都有一个专用的μDMA通道,并且还可为μDMA控制器提供一个突发型的请求信号,它在定时器原始中断条件出现时就会产生,μDMA传输的仲裁个数应和每次定时器事件出现时需传输的数据单元个数相同,这些都无需要其他特殊的设置就可使能定时器用于μDMA操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。