博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

6、定时器1

Posted on 2020-02-18 00:36  兰智杰  阅读(1004)  评论(0编辑  收藏  举报

1、定时器1概述

  定时器1 是一个支持典型的定时/计数功能的独立16 位定时器,支持输入捕获,输出比较和PWM等功能;定时器有五个独立的捕获/比较通道,每个通道定时器要使用一个I/O 引脚,定时器用于范围广泛的控制和测量应用,可用的五个通道的正计数/倒计数模式将允许诸如电机控制应用的实现

  定时器1 的功能如下:

    五个捕获/比较通道
    上升沿、下降沿或任何边沿的输入捕获
    设置、清除或切换输出比较
    自由运行、模或正计数/倒计数操作
    可被1,8,32 或128 整除的时钟分频器
    在每个捕获/比较和最终计数上生成中断请求
    DMA 触发功能

2、16 位计数器

  【关于分频,时钟】定时器包括一个16 位计数器,在每个活动时钟边沿递增或递减,活动时钟边沿周期由寄存器位CLKCON.TICKSPD定义,它设置全球系统时钟的划分,提供了从0.25MHz 到32MHz 的不同的时钟标签频率(可以使用32 MHz XOSC 作为时钟源);这在定时器1 中由T1CTL.DIV设置的分频器值进一步划分,这个分频器值可以从1、8、32 或128,因此当32 MHz 晶振用作系统时钟源时,定时器1 可以使用的最低时钟频率是1953.125Hz,最高是32 MHz,当16MHz RC 振荡器用作系统时钟源时,定时器1 可以使用的最高时钟频率是16MHz

  【读取定时器当前值】计数器可以作为一个自由运行计数器,一个模计数器或一个正计数/倒计数器运行,用于中心对齐的PWM,可以通过两个8 位的SFR 读取16 位的计数器值:T1CNTH T1CNTL,分别包含在高位字节和低位字节中,当读取T1CNTL 时,计数器的高位字节在那时被缓冲到T1CNTH,以便高位字节可以从T1CNTH 中读出,因此T1CNTL 必须总是在读取T1CNTH 之前首先读取,对T1CNTL 寄存器的所有写入访问将复位16 位计数器,当达到最终计数值(溢出)时,计数器产生一个中断请求

  【控制定时器】可以用T1CTL 控制寄存器设置启动并停止该计数器,当一个不是00 值的写入到T1CTL.MODE 时,计数器开始运行,如果00 写入到T1CTL.MODE,计数器停止在它现在的值上

3、定时器1 操作

  一般来说控制寄存器T1CTL 用于控制定时器操作,状态寄存器T1STAT 保存中断标志

4、自由运行模式

  在自由运行操作模式下,计数器从0x0000 开始,每个活动时钟边沿增加1,当计数器达到0xFFFF(溢出),计数器载入0x0000,继续递增它的值,如图所示;当达到最终计数值0xFFFF,设置标志IRCON.T1IF T1STAT.OVFIF,如果设置了相应的中断屏蔽位TIMIF.OVFIM 以及IEN1.T1EN,将产生一个中断请求,自由运行模式可以用于产生独立的时间间隔,输出信号频率(0xFFFF型)

  

5、模模式

  当定时器运行在模模式,16 位计数器从0x0000 开始,每个活动时钟边沿增加1,当计数器达到T1CC0(溢出),寄存器T1CC0H:T1CC0L 保存的最终计数值,计数器将复位到0x0000,并继续递增,如果定时器开始于T1CC0 以上的一个值,当达到最终计数值(0xFFFF)时,设置标志IRCON.T1IF T1CTL.OVFIF,如果设置了相应的中断屏蔽位TIMIF.OVFIM 以及IEN1.T1EN,将产生一个中断请求,模模式可以用于周期不是0xFFFF的应用程序(自定义上限型)

  

6、正计数/倒计数模式

  在正计数/倒计数模式,计数器反复从0x0000 开始,正计数直到达到T1CC0H:T1CC0L 保存的值,然后计数器将倒计数直到0x0000,如图所示,这个定时器用于周期必须是对称输出脉冲而不是0xFFFF 的应用程序,因此允许中心对齐的PWM 输出应用的实现,在正计数/倒计数模式,当达到最终计数值时,设置标志IRCON.T1IFT1CTL.OVFIF,如果设置了相应的中断屏蔽位TIMIF.OVFIM 以及IEN1.T1EN,将产生一个中断请求(增减交替型)

  

7、通道模式控制

  通道模式随着每个通道的控制和状态寄存器T1CCTLn 设置,设置包括输入捕获和输出比较模式

8、 输入捕获模式

  当一个通道配置为输入捕获通道,和该通道相关的I/O 引脚必须被配置为输入,(什么是输入捕获模式,运作机制)在启动定时器之后,输入引脚的一个上升沿、下降沿或任何边沿都将触发一个捕获,即把16 位计数器内容捕获到相关的捕获寄存器中,因此定时器可以捕获一个外部事件发生的时间(捕获外部事件发生时间)

   注意:在定时器可以使用一个输入/输出引脚之前,所需的I/O 引脚必须配置为定时器1 的外设引脚,通道输入引脚和内部系统时钟是同步的,因此输入引脚上的脉冲的最低持续时间必须大于系统时钟周期

  16 位捕获寄存器的内容从寄存器T1CCnH:T1CCnL 中读出,当捕获发生时,要设置IRCON.T1IF 标志和该通道的中断标志T1STAT.CHnIF(n 是通道号码),如果分别设置了相应的中断屏蔽位T1CCTLn.IM,以及IEN1.T1EN,将产生一个中断请求

9、输出比较模式

  最难理解的一个,下面的边沿对齐和中心对齐其实是基于输出比较的运作核心,用上面讲的几种简单的模式实现PWM,中心对齐是利用模模模式实现的

  在输出比较模式中,与通道相关的IO要设置为输出模式,(什么是输出比较模式,运作机制)在定时器启动后,计数器的内容会和通道比较寄存器中的内容T1CCnH:T1CCnL做比较,如果这两个内容(值)相等,输出引脚根据比较输出模式T1CCTLn.CMP的设置进行设置、复位或切换(核心就是将T1CC0的值和每个通道寄存器中的值比较,相等了则产生中断等)

  注意:输出引脚运行在一个给定输出比较模式下时,它上面的所有边沿都是无故障运行的

  写入比较寄存器T1CCnL 将被缓冲,这样写入到T1CCnL 的值不起作用,直到相应的高位寄存器T1CCnH 被写入,写入比较寄存器T1CCnH:T1CCnL 对于输出比较值不起作用,直到定时器达到0x00

  注意:通道0 的输出比较模式较少,因为T1CC0H:T1CC0L 在模式6 和7 有一个特殊功能,这意味着这些模式对于通道0 是不能使用的

  当发生一个比较时,设置IRCON.T1IF 标志和该通道的中断标志T1STAT.CHnIF(n 是通道号码),如果分别设置了相应的中断屏蔽位T1CCTLn.IM,以及IEN1.T1EN,将产生一个中断请求

  不同定时器模式下输出比较模式的例子给定在以下图中

  边沿对齐:PWM 输出信号可以使用定时器在自由运行模式下,通道1 和2 在输出比较模式6 或7(第6和第7条线)下生成(由T1CCTLn.CMP 位定义,其中n 是1 或2),如图所示,PWM 信号的周期通过设置T1CC0 确定,通道输出的占空比由T1CCn 确定,其中n 是PWM 通道1 或2,也可以使用定时器自由运行模式,在这种情况下,T1CTL.DIV 位中的CLKCON.TICKSPD 和分频器值设置PWM 信号的周期,PWM 信号的极性由使用的是输出比较模式6 还是7 确定,PWM 输出信号还可以使用如图所示的输出比较模式4 和5,或通过使用如图所示的模模式生成,对于简单的PWM,最好使用使用输出比较模式4 和5 来生成

  

    输出比较模式,定时器自由运行模式,图中0、1、2...6是7种模式,左边的波形对应每种模式)

  

    (输出比较模式,定时器模模式)

  中心对齐:PWM 输出可以通过选择定时器正计数/倒计数模式生成,根据PWM 信号所需的极性选择通道输出比较模式4 或5(由T1CCTLn.CMP 位定义,其中n 是1 或2),PWM 信号的周期由T1CC0 确定,通道输出的占空比由T1CCn 确定,其中n 是PWM 通道1 或2,某些类型的电机驱动应用程序会需要中心对齐的PWM 模式,一般地这比边沿对齐的PWM 模式产生的噪音更少,因为I/O 引脚传输不集中在同一个时钟边沿上

  

    (输出比较模式,定时器正计数/倒计数模式)