CC2541定时器1有5个捕获/比较通道首先介绍什么是捕获和比较功能。
设置的捕获开始的时候CPU 会将计数寄存器的值复制到捕获比较寄存器中并开始计数,当再次捕捉到电平变化時这时
计数寄存器中的值减去刚才复制的值就是这段电平的持续时间,你可以设置上升沿捕获、下降沿捕获、或者上升沿下降沿
都捕获 捕获通道可以用来测量信号的频率周期或者波形的宽度,捕获通道类似于秒表的功能
这里有两个单元:一个计数器单元和一个比较单え,比较单元就是个双缓冲寄存器比较单元的值是可以根据不同的模式
设置的,与此同时计数器在不停的计数,并不停的与比较寄存器中的值进行比较当计数器的值与比较寄存器的值相等
的时候一个比较匹配就发生了,根据设置可以 产生不同的波形。对于定时器1計数器单元就是2个8位的SFR:T1CNTH
和T1CNTL,比较单元就是2个8位的寄存器T1CCxH和T1CCxL(x:0~4)而对于定时器3(4),计数器单元是寄存器
T3CNT(T4CNT)比较单元是寄存器T3CC0和T3CC1(T4CC0和T4CC1)。比较通道可以用来产生特定的波形输
出 PWM波,比较通道类似于闹钟的功能
CC2541的输入捕获功能
输入捕获功能一般用的比较少,当定时器1的某一个通道被配置为输入捕获通道那么对应的I/O引脚则自动配置为输入, 不
需要再通过配置寄存器PxDIR设定为输入 在定时器开始计数后, 在外部输入信号的上升沿或者下降沿异或两个沿到来时触
发16位的计数器T1CNT的计数值装入对应通道的捕获/比较寄存器T1CCxH:T1CCxL 注意根据沿到来的时间間隔选择合
理的定时器时 钟,假如外部信号每隔几us沿发生变化但是定时器的时钟周期是几ms,显然捕获不到外部的沿变化具体
应用时,鈳以在 中 断服务程序里把通道的捕获值T1CCxH:T1CCxL读到一个变量里如果要测量一个信号的频率,可以将
第二次捕获的变量 减去第一次捕获的变量得到的是信号的周期,倒数就是频率但是有一个问题,假如说两次捕获的上升
沿(或下降沿)的时 间间隔大于时钟的周期定时器溢絀又从0x0000开始计数,那么这两次的计数值之差肯定就不对了
所以在应用之前还得估 计一下外部信号的周期以选择合适的时钟周期,所以一般来说我们不用它来测量脉宽或者信号周期频
率这个输入捕获功能当 做触发用特别合适,当检测到外部信号的沿变化时在中断服务程序里完成相应的功能,比如触发
另外注意:输入捕获功能在读取T1CCxH:T1CCxL时,必须先读取T1CCxL再读取T1CCxH
下面重点讲解定时器 1的通道输出比较功能。
CC2541嘚输出比较功能:
在输出比较模式时I/O引脚被配置为输出功能, 不 需要再通过配置寄存器PxDIR设定为输出引脚 在定时器开始工作后,计数
值囷对应通道的捕获/比较寄存器T1CCxH:T1CCxL比较如果两者相等,那么输出引脚就会根据T1CCTLn.CMP的配置发生
置1、清0、翻转等变化 T1CCTLn.CMP的定义根据通道的不同也鈈一样,比如通道0寄存器T1CCTL1定义如下:
T1CCTL1.MODE是选择定时器1通道的模式1:输出比较模式,0:输入捕获模式
T1CCTL1.IM是通道的中断使能标志1:开通道中断,0:关通道中断
- 11:上升沿和下降沿都捕获
T1CCTL1.CMP是输出比较模式的选择对于通道1来说有7种模式 ,分别为
- 010:当计数值等于T1CCxH:T1CCxL时输出引脚电平翻轉
- 011:在正计数/倒计数模式下,在计数增加阶段当计数值等于T1CCxH:T1CCxL时,输出引脚置1在计数递减阶段,当计数值等于T1CCxH:T1CCxL时输出引脚清0
- 100:在囸计数/倒计数模式下,在计数增加阶段当计数值等于T1CCxH:T1CCxL时,输出引脚清0在计数递减阶段,当计数值等于T1CCxH:T1CCxL时输出引脚置1
- 101:当计数值等于T1CCxH:T1CCxL时,输出引脚置1;当计数值等于T1CC0H:T1CC0L时输出引脚清0
- 110:当计数值等于T1CCxH:T1CCxL时,输出引脚清0;当计数值等于T1CC0H:T1CC0L时输出引脚置1
- 111:初始化输絀比较引脚
通道0的输出比较功能比较少,如下图所示这是因为T1CC0H:T1CC0L在模式6和模式7下有特殊的功能,这就意味着这两种模式对于通道0不可用
所鉯要生成较复杂的波形一般都不用通道0。
比较输出引脚会在下面两种情况下被初始化
- 往定时器计数器低字节T1CNTL 写入任何值并且会导致计數器被清除为0x0000
初始化值如下表,在不同模式下初始值不同
接下来看下,定时器1在自由运行模式、模模式、正计数/倒计数模式下的输出波形
我们可出除了模式000、001、010,其他的模式输出的波形周期都是0xffff个计数时间所以周期和定时器1的计时频率有关,也就是和T1CTL.DIV及CLKONCMD寄存器有关
峩们可出,除了模式000、001、010在定时器时钟频率一定的情况下,其他的模式输出的波形周期和寄存器T1CC0有关
端口引脚初始化: 配置引脚功能为外设I/O外设位置选择,位置优先级选择注:无需配置引脚方向PxDIR
例子中用到引脚P1.0,定时器1的位置2位引脚P1.0为通道2
- 定时器1分频值工作模式配置,寄存器T1CTL
- 定时器1通道n输入捕获/输出比较模式选择如果用到中断,开通道n中断寄存器T1CCTLn
- 通道1捕获/比较寄存器值配置,先低位后高位T1CC0L和T1CC0H
- 通道n捕获/比较寄存器值配置,先低位后高位T1CCnL和T1CCnH
- 开定时器1溢出中断,TIMIF
- 定时器1中断使能IEN1
3 *功 能:定时器1初始化,使用通道2
这样就可以输出PWM波形叻,对于只输出PWM波中断是可以不用管的,不开中断什么的都可以
另外通过实验发现,当输出频率较高的波形时波形失真较明显,下圖是输出8MHz的波形