第二部分 基础篇-第4章 定时器-CC2530查询方式使用定时器T3
1 理论分析
1.1 CC2530 的 Timer3 介绍
定时器 3 和 4 是两个 8 位的定时器。每个定时器有两个独立的比较通道,每个通道上使用一个 I/O 引脚。
定时器 3/4 的特性如下:
两个捕获/比较通道
设置、清除或切换输出比较
时钟分频器,可以被 1,2,4,8,16,32,64,128 整除
在每次捕获/比较和最终计数事件发生时产生中断请求
DMA 触发功能
图1是 CC2530 的 Timer3、Timer4 的所有功能图,在 CC2530 的 Timer3、Timer4的所有功能中,我们用得最多的就是:
8 位定时器计数器
定时器 3 和定时器 4 操作(查询方式)
定时器 3 和定时器 4 中断
其中, 8 位定时器计数器我们将不会讲解, 我们只讲解 Timer1 的 16 位计数器操作;定时器 3 和定时器 4 操作(查询方式)就在本实验里讲解;定时器 3 和定时器 4 中断将会在 Timer3+LED(中断方式)里讲解。
最后说明一下,就是 CC2530 的 Timer3、Timer4 的使用,都是要通过配置相应的寄存器来实现相应功能的,故在附录里我们给出操作 Timer3、Timer4 的所有寄存器的类型及其具体内容。
2 实验详解
2.1实验目的
1)、了解 CC2530 定时器 3;
2)、初步掌握定时器 3 的应用
2.2实验设备
硬件:PC 机一台 ZB2530(底板、核心板、仿真器、USB 线) 一套
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境
2.3实验相关电路图
2.4 实验相关寄存器
(1) 首先,CC2530 的 Timer3 用于查询方式时,需要配置的寄存器有:T3CTL,。
(2) 然后,由于 CC2530 在没有配置工作时钟时默认是 2 分频,即系统将工作时钟为 16MHz。所以我们希望 Timer3 配置为:128 分频;启动定时器,中断使能(无影响),从 0x00 到 0xFF 反复计数。
相关寄存器如下:
(3) 跟 Timer3 有关的寄存器还有 IRCON。我们在查询是否有溢出中断时就是查看它有没有置位的,在上个实验中,我们直接查询 IRCON,这是可以的,但是如果有几个定时器申请中断时,直接查询 IRCON 会有冲突,所以,本实验给出另一个更为严谨的做法,就是查询 T3IF。
按照表格寄存器的内容,对Led1 和T1 进行配置。
Led1 配置如下:
P1DIR |= 0x01; //配置P1.0 为输出
T3 配置如下:
T3CTL = 0xF8; //128分频;*运行,从0x00到0xFF反复计数
2.5 参考代码
/**Includes*********************************************************************/
#include <ioCC2530.h>
/**宏定义***********************************************************************/
//定义数据类型
#define uint unsigned int
#define uchar unsigned char
//定义控制LED1灯的端口
#define LED1 P1_0 //LED1为P1_0端口控制
/**函数声明*********************************************************************/
void InitLed(void); //初始化LED端口
void InitT3(void); //初始化定时器T3
/**
* @brief 主函数
* @param None
* @retval None
*/
void main(void)
{
uchar count=0;
InitLed(); //LED_IO初始化
InitT3(); //Timer3初始化
while(1)
{
if(T3IF>0) //查询溢出标志
{
T3IF=0;
if((++count)==254) //溢出一次约为0.5s
{
count=0;
LED1 = ~LED1; //LED1取反
}
}
}
}
/**
* @brief LED_IO初始化函数
* @param None
* @retval None
*/
void InitLed(void)
{
P1DIR |= 0x01; //P1端口定义为输出
LED1 = 1; //LED灯初始化熄灭
}
/**
* @brief Timer3初始化函数
* @param None
* @retval None
*/
void InitT3(void)
{
T3CTL = 0xF8; //128分频;*运行,从0x00到0xFF反复计数
}
2.6实验现象
编译下载程序到开发板上,可看到LED 灯每隔一定时间切换一次亮灭状态。
2.7 实验总结
通过本实验,大家需要掌握以下 3 点:
CC2530 定时器的使用需要配置相关寄存器;
CC2530 定时器的寄存器类型以及每个类型如何配置。
定时器 3/4 的特性如下:
(1) 两个捕获/比较通道
(2) 设置、清除或切换输出比较
(3) 时钟分频器,可以被 1,2,4,8,16,32,64,128 整除
(4) 在每次捕获/比较和最终计数事件发生时产生中断请求
(5) DMA 触发功能
附:管理 Timer3、Timer4 的寄存器类型
●T3CNT (0xCA)–定时器 3 计数器
●T3CTL (0xCB)–定时器 3 控制
●T3CCTL0 (0xCC)–定时器 3 通道 0 捕获/比较控制
●T3CC0 (0xCD)–定时器 3 通道 0 捕获/比较值
●T3CCTL1 (0xCE)–定时 3 通道 1 捕获/比较控制
●T3CC1 (0xCF)–定时器 3 通道 1 捕获/比较值
●T4CNT (0xEA) –定时器 4 计数器
●T4CTL (0xEB)–定时器 4 控制
●T4CCTL0 (0xEC)–定时器 4 通道 0 捕获/比较控制
●T4CC0 (0xED) –定时器 4 通道 0 捕获/比较值
●T4CCTL1 (0xEE)–定时 4 通道 1 捕获/比较控制
●T4CC1 (0xEF) –定时器 4 通道 1 捕获/比较值
●TIMIF (0xD8)–定时器 1/3/4 中断屏蔽/标志