打印
[Zigbee]

CC2530查询方式使用定时器T3

[复制链接]
919|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gwsan|  楼主 | 2019-7-31 11:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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 的所有寄存器的类型及其具体内容。



图 1 CC2530 的 Timer3、Timer4 功能图



使用特权

评论回复
评论
dirtwillfly 2019-8-3 20:46 回复TA
感谢分享 

相关帖子

沙发
gwsan|  楼主 | 2019-7-31 11:34 | 只看该作者
2 实验详解
2.1实验目的
1)、了解 CC2530 定时器 3;
2)、初步掌握定时器 3 的应用

2.2实验设备
硬件:PC 机一台 ZB2530(底板、核心板、仿真器、USB 线) 一套
软件:win7 系统,IAR 8.20 集成开发环境

使用特权

评论回复
板凳
gwsan|  楼主 | 2019-7-31 11:35 | 只看该作者
2.3实验相关电路图

图2 LED电路图

使用特权

评论回复
地板
gwsan|  楼主 | 2019-7-31 11:35 | 只看该作者
2.4 实验相关寄存器
(1) 首先,CC2530 的 Timer3 用于查询方式时,需要配置的寄存器有:T3CTL,。

(2) 然后,由于 CC2530 在没有配置工作时钟时默认是 2 分频,即系统将工作时钟为 16MHz。所以我们希望 Timer3 配置为:128 分频;启动定时器,中断使能(无影响),从 0x00 到 0xFF 反复计数。

相关寄存器如下:

表1 T3CTL控制


表2 中断标志


(3) 跟 Timer3 有关的寄存器还有 IRCON。我们在查询是否有溢出中断时就是查看它有没有置位的,在上个实验中,我们直接查询 IRCON,这是可以的,但是如果有几个定时器申请中断时,直接查询 IRCON 会有冲突,所以,本实验给出另一个更为严谨的做法,就是查询 T3IF。

按照表格寄存器的内容,对Led1 和T1 进行配置。
Led1 配置如下:
P1DIR |= 0x01; //配置P1.0 为输出

T3 配置如下:
T3CTL = 0xF8; //128分频;自由运行,从0x00到0xFF反复计数


使用特权

评论回复
5
gwsan|  楼主 | 2019-7-31 11:35 | 只看该作者
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反复计数
}

使用特权

评论回复
6
gwsan|  楼主 | 2019-7-31 11:36 | 只看该作者
2.6实验现象
编译下载程序到开发板上,可看到LED 灯每隔一定时间切换一次亮灭状态。

使用特权

评论回复
7
gwsan|  楼主 | 2019-7-31 11:36 | 只看该作者
2.7 实验总结
通过本实验,大家需要掌握以下 3 点:

        CC2530 定时器的使用需要配置相关寄存器;
        CC2530 定时器的寄存器类型以及每个类型如何配置。
        定时器 3/4 的特性如下:

(1) 两个捕获/比较通道
(2) 设置、清除或切换输出比较
(3) 时钟分频器,可以被 1,2,4,8,16,32,64,128 整除
(4) 在每次捕获/比较和最终计数事件发生时产生中断请求
(5) DMA 触发功能

使用特权

评论回复
8
gwsan|  楼主 | 2019-7-31 11:36 | 只看该作者
附:管理 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 中断屏蔽/标志

使用特权

评论回复
9
conjunction| | 2019-7-31 14:05 | 只看该作者
感谢楼主分享!很不错的经验

使用特权

评论回复
10
gwsan|  楼主 | 2019-8-2 12:54 | 只看该作者
非常感谢支持

使用特权

评论回复
11
manufact| | 2019-8-6 14:47 | 只看该作者
非常感谢楼主的分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

3426

帖子

1

粉丝