一、简介
本篇以定时器timer3为例,讲述如何配置寄存器才能输出一个20us的方波。
二、实验平台
协议栈版本:BLE-CC254x-1.4.0
编译软件:IAR 8.20.2
硬件平台:Smart RF开发板
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.net/feilusia
联系方式:[email protected]
技术交流QQ群:127442605
四、简介timer3和timer4
1、位数
timer3和timer4都是8位的定时器。
2、通道
各自都有两个独立的捕获/比较通道,而每个通道都有自己对应的IO口。
3、分频
支持1、2、4、8、16、32、64、128分频
4、控制模式:
1)Free-Running Mode
计数器从0x00开始,在每个有效的时钟周期边沿触发加1,加到0xFF即会触发定时器中断(如果已使能了定时器中断)、数值回0重计、对应IO口通道电平变化。
2)Down Mode
计数器从TxCC0开始,在每个有效的时钟周期边沿触发减1,减到0x00即会触发定时器中断(如果已使能了定时器中断)、对应IO口通道电平变化。
注意,这个模式下从TxCC0减到0,就不再重复减的操作了。
3)Modulo Mode
计数器从0x00开始,在每个有效的时钟周期边沿触发加1,加到TxCC0即会触发定时器中断(如果已使能了定时器中断)、数值回0重计、对应IO口通道电平变化。
4)Up/Down Mode
计数器从0x00开始,在每个有效的时钟周期边沿触发加1,加到TxCC0后,在每个有效的时钟周期边沿触发减1。
最终减到0时即会触发定时器中断(如果已使能了定时器中断)、对应IO口通道电平变化。
5)Channel Mode Control(没用过,不解释……)
6)Input Capture Mode(没用过,不解释……)
7)Output Compare Mode(没用过,不解释……)
五、10us方波的实现原理
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口。
六、参考代码
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脚的波形