【BLE】CC2541之timer3

来源:互联网 发布:知乎 高品位礼品 编辑:程序博客网 时间:2024/05/17 01:58

本篇博文最后修改时间:2016年11月11日,09:31。


一、简介

本文以定时器timer3为例,讲述如何配置寄存器才能输出一个20us的方波。


二、实验平台

协议栈版本:BLE-CC254x-1.4.0

编译软件:IAR 8.20.2

硬件平台:Smart RF开发板(主芯片CC2541)


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
暂无

2、在进行本文步骤前,请先实现以下博文:
暂无


五、基础知识

1、简介timer3和timer4

1)位数

timer3和timer4都是8位的定时器。

2)通道

各自都有两个独立的捕获/比较通道,而每个通道都有自己对应的IO口。


3)分频

支持1、2、4、8、16、32、64、128分频

4)控制模式:

①Free-Running Mode

计数器从0x00开始,在每个有效的时钟周期边沿触发加1,加到0xFF即会触发定时器中断(如果已使能了定时器中断)、数值回0重计、对应IO口通道电平变化。

②Down Mode

计数器从TxCC0开始,在每个有效的时钟周期边沿触发减1,减到0x00即会触发定时器中断(如果已使能了定时器中断)、对应IO口通道电平变化。

注意,这个模式下从TxCC0减到0,就不再重复减的操作了。

③Modulo Mode

计数器从0x00开始,在每个有效的时钟周期边沿触发加1,加到TxCC0即会触发定时器中断(如果已使能了定时器中断)、数值回0重计、对应IO口通道电平变化。

④Up/Down Mode

计数器从0x00开始,在每个有效的时钟周期边沿触发加1,加到TxCC0后,在每个有效的时钟周期边沿触发减1。 

最终减到0时即会触发定时器中断(如果已使能了定时器中断)、对应IO口通道电平变化。

⑤Channel Mode Control(没用过,不解释……)

⑥Input Capture Mode(没用过,不解释……)

⑦Output Compare Mode(没用过,不解释……)


2、20us方波的实现原理是怎样的?

答:

1)配置成32分频

32M外部晶振,timer3使用经过32分频的1M晶振。

所以定时器的时钟周期=1/1M=1us。

也就是每1us,定时器就会计数加、减1。

2)配置成Up/Down Mode、T3CC0=10

这样定时器会从0计数到5、再从10计数到0,一共计数20次。

3)配置输出为定时器到时即翻转IO口


以上3点,即可实现20us翻转一次io口。当然,使用PWM产生方波更合适。


六、实验步骤

1、参考代码

void Gua_Init(void)  {      PERCFG |= 0x20;             // Timer 3 Alternate location 2      P1DIR |= 0x40;              // P1_6 = output      P1SEL |= 0x40;              // Peripheral function on P1_6        T3CTL &= ~0x10;             // Stop timer 3 (if it was running)      T3CTL |= 0x04;              // Clear timer 3      T3CTL &= ~0x08;             // Disable Timer 3 overflow interrupts      T3CTL |= 0x03;              // Timer 3 mode = 3 - Up/Down      T3CTL |= 0xA0;              // 32分频        T3CCTL0 &= ~0x40;           // Disable channel 0 interrupts      T3CCTL0 |= 0x04;            // Compare mode      T3CCTL0 |= 0x10;            // Ch0 output compare mode = toggle on compare      T3CC0 = 10;                  //上限值设置为10        T3CTL |= 0x10;             // start timer 3  }  

七、注意事项

暂无


八、实验结果


ps:示波器抓p1.6脚的波形


4 0