APP下载

基于ZigBee的CC2530定时器T3的分析与研究

2016-05-11章万静杨丽波

现代计算机 2016年9期

章万静,朱 迅,杨丽波

(淮安信息职业技术学院计算机与通信工程学院,淮安 223003)



基于ZigBee的CC2530定时器T3的分析与研究

章万静,朱迅,杨丽波

(淮安信息职业技术学院计算机与通信工程学院,淮安223003)

摘要:CC2530内部集成了一个单周期的8051兼容内核,为真正的片上系统SoC提供一个强大而完整的ZigBee解决方案。介绍CC2530定时器T3的四种操作模式,并重点分析定时器T3在正计数/倒计数模式下中断服务程序的设计。

关键词:ZigBee;CC2530;SoC;定时器T3;操作模式;中断服务

0 引言

ZigBee技术是一种近距离、低复杂度、低功耗、低数据速率、低成本的无线通信技术,其采用IEEE802.15.4标准,利用全球公用的公共频率2.4GHz,广泛用于物联网、自动控制、楼宇自动化、照明系统和工业监视等诸多领域。

1 ZigBee芯片CC2530

ZigBee芯片CC2530是德州仪器TI公司推出的用来实现ZigBee协议的片上系统SoC解决方案[1],能够以非常低的成本构建功能强大而性能稳定的网络节点,并具有强大的抗干扰性能和极高的接收灵敏度等优势。CC2530在单个芯片上集成了一个单周期8051CPU兼容内核,具有8KB的超低功耗数据存储器SRAM和32/64/128/256KB可编程、非易失性程序存储器,包含1个8路输入8~14位ADC、1个提供不同晶振和供电模式的时钟与电源管理模块、4个通用的16/8位定时器、1个看门狗电路、2个波特率可变的异步/同步串口、1个高级加密标准AES协同处理器以及21个可编程I/O引脚,并提供了一个IEEE802.15.4兼容具有RF内核的无线收发器。

2 CC2530定时器T3

ZigBee芯片CC2530的定时器有16位和8位之分,共4个,可以分别实现不同的功能。其中,定时器T3和定时器T4都是8位的定时器,其用法差不多一样,只是相应寄存器的配置有些不同。现以8位的定时器T3为例,来分析、研究并实现其定时中断功能。定时器T3主要由1个8位的特殊功能寄存器T3CNT组成,存放其内的值可在每个时间周期边沿自动递增1或递减1,基于该8位计数器T3CNT中值的变化,ZigBee芯片CC2530的定时器T3可以实现所有的定时/计数功能。时间周期可以由用户通过配置时钟控制状态寄存器的位CLKCONSTA.TICKSPD[2:0]和时钟控制命令寄存器的位CLKCONCMD.TICKSPD[2:0]来选择系统时钟源,并可以由定时器T3的控制寄存器的位T3CTL.DIV[2:0]设置的分频器值进一步划分。定时器T3有4种操作模式:自由运行模式、倒计数模式、模计数模式和正计数/倒计数模式[2],不同的模式由定时器T3的控制寄存器的位T3CTL.MODE[1:0]的值进行选择。定时器3有两个独立的比较通道,每个通道上使用一个I/O引脚。

2.1 T3的自由运行模式

定时器T3的自由运行模式主要用于产生独立的时间间隔和输出信号频率。

在自由运行模式下,定时器T3的8位计数器T3CNT的值总是从初始值0x00开始启动计数,在每个时间周期边沿都会自动递增1,当计数器T3CNT的值达到最大值0xFF溢出时,计数器T3CNT又会自动重新载入初始值0x00,然后再次按此规律递增它的值,如图1所示。

图1 T3的自由运行模式

需要注意的是:当定时器T3的8位计数器T3CNT从初始值0x00开始计数达到最大计数值0xFF时,CC2530芯片将会由硬件自动将TIMIF定时器中断标志寄存器中的T3OVFIF溢出中断标志位设置为1。此时用户如果设置了定时器T3的T3CTL控制寄存器中的OVFIM中断屏蔽位,就会产生一次请求中断服务。

2.2 T3的倒计数模式

定时器T3的倒计数模式可以用于需要事件超时间隔的应用程序。

在倒计数模式下,定时器T3启动后,8位计数器T3CNT自动载入T3CC0的值开始倒计时,在每个时间周期边沿会自动递减1,直到达到最小值0x00,然后计数器T3CNT再次自动载入T3CC0的值后倒计数,如此循环反复,如图2所示。(T3CC0中保存的值是在主程序开始初始化时将数据写入特殊寄存器T3CC0中。)

图2 T3的倒计数模式

需要注意的是:当定时器T3的8位计数器T3CNT 从T3CC0开始倒计数达到最小计数值0x00时,CC2530芯片由硬件自动将TIMIF定时器中断标志寄存器中的T3OVFIF溢出中断标志位设置为1。此时用户如果设置了定时器T3的T3CTL控制寄存器中的OVFIM中断屏蔽位,就会产生一次请求中断服务。

2.3 T3的模计数模式

定时器T3的模计数模式一般用于周期不是0xFF的应用程序。

在模计数模式下,定时器T3的8位计数器T3CNT的值就会从初始值0x00开始启动计数,在每个时间周期边沿都会自动递增1,一直达到T3CC0中预先存放的值时,计数器T3CNT会重新自动复位到最小值0x00,然后按此规律再次继续递增它的值,如图3所示。(T3CC0中保存的值是在主程序开始初始化时将数据写入特殊寄存器T3CC0中。)

图3 T3的模计数模式

需要注意的是:当定时器T3的8位计数器T3CNT从一个比T3CC0中预先存放值大的值开始计数,达到最大值0xFF溢出时,计数器T3CNT会自动重新载入0x00,同时CC2530芯片自动由硬件将TIMIF定时器中断标志寄存器中的T3OVFIF溢出中断标志位设置为1。此时用户如果设置了定时器T3的T3CTL控制寄存器中的OVFIM中断屏蔽位,就会产生一次请求中断服务

2.4 T3的正计数/倒计数模式

定时器T3的正计数/倒计数模式经常用在需要对称输出正脉冲,并且周期不是0xFF的应用程序。

在正计数/倒计数模式下,定时器T3的8位计数器T3CNT的值从初始值0x00启动计数,在每个时钟周期边沿会自动递增1,直到“正计数”达到T3CC0中保存的值,然后计数器T3CNT在每个时钟周期边沿会自动递减1,“倒计数”直到0x00,再次按此规律又从0x00开始递增,如此反复,如图4所示。(T3CC0中保存的值是在主程序开始初始化时将数据写入特殊寄存器T3CC0中。)

图4 T3的正计数/倒计数模式

需要注意的是:当定时器T3的8位计数器T3CNT从初始值0x00开始正计数达到T3CC0,再从T3CC0开始倒计数达到0x00时,CC2530芯片自动由硬件将TIMIF定时器中断标志寄存器中的T3OVFIF溢出中断标志位设置为1。此时用户如果设置了定时器T3的T3CTL控制寄存器中的OVFIM中断屏蔽位,就会产生一次请求中断服务

3 CC2530定时器T3应用分析

为了能及时看到定时器T3的实际定时效果,现将CC2530定时器T3的定时时间用来控制几个LED灯闪烁,其原理图如图5所示。

图5 LED灯定时闪烁实验原理图

四个LED灯的负极分别串联一个分压限流电阻R后由CC2530芯片的P1端口的4个引脚P1.4、P1.5、P1.6、P1.7控制,LED灯的正极全部连接到3.3V电源,此时CC2530芯片的4个引脚P1.4、P1.5、P1.6、P1.7必须全部配置成通用I/O端口,并都选择使用其输出功能。电阻R应选择一个合适的阻值,以保证LED灯正常发光。此时,当某个引脚输出为高电平1时,对应的LED灯灭;当某个引脚输出为低电平0时,对应的LED灯亮。主程序代码如下所示:

#include "ioCC2530.h"//CC2530芯片寄存器、引脚及中断向量的定义

unsigned char counter=0;//该变量用来辅助定时器T3定时

void main(void)

{

P1SEL &= 0x0f;//配置P1.4,P1.5,P1.6,P1.7为通用IO 口

P1DIR |= 0xf0;//配置P1.4,P1.5,P1.6,P1.7为通用IO口中的输出口

P1_4 = 0;//LED1灯亮

P1_5 = 0;//LED2灯亮

P1_6 = 0;//LED3灯亮

P1_7 = 0;//LED4灯亮

T3CC0 = 0xfa;//T3CCO中的数据设置为250

EA = 1;//中断总开关使能打开

T3IE = 1;//T3中断使能打开

T3CTL = 0xff;

/*T3分频器进行128分频,配置为正计数/倒计数运行模式

T3定时溢出使能打开,T3CNT复位到0x00并启动T3定时开始*/

while(1)

{

;

}

}

CC2530芯片定时器T3配置为正计数/倒计数模式,实现128分频后,T3CC0中的值预先设置为250 (0xfa),并打开中断使能总开关EA及定时器T3的中断使能子开关T3IE。定时器T3的中断服务程序如下所示:

#pragma vector = T3_VECTOR //定时器T3的中断入口地址

__interrupt void T3_ISR(void) //定时器T3中断函数的定义

{

//IRCON = 0x00; //调用中断时,IRCON.T3IF可硬件清楚

if(counter<=100)

counter++; //T3定时时间未到,辅助计数器自加1

else

{

counter = 0; //T3定时时间到,辅助计数器清0

P1_4 = ! P1_4;

P1_6 = ! P1_6;//LED1灯,LED3灯闪烁

}

}

4 结语

上面程序代码中没有对CC2530芯片的时钟控制状态寄存器CLKCONSTA和时钟控制命令寄存器CLKCONCMD的数据进行配置,即使用其默认值,通过分析得知:系统的时钟选择fosc=16MHz晶振(实验板上的晶振),定时器T3标记输出也为ftickspd=16MHz[3]。而定时器T3运行在128分频的正计数/倒计数模式下,计数器T3CNT就会从初始值0x00开始正计数一直到0xFA (250),又从0xFA倒计数再次达到0x00时就会产生一次中断请求,这样定时器T3每次产生中断的定时时间为250×2×1/(ftickspd/128)=0.04s,变量Counter辅助计数达到100次的定时时间达到4秒时就会改变LED灯的状态,即LED1灯和LED3灯每隔4秒就闪烁一次。

参考文献:

[1]青岛东合信息技术有限公司编著. ZigBee开发技术及实践[M].西安:西安电子科技大学出版社,2014.1

[2]Texas Instruments. Datasheet CC2530[EB/OL]. http://www.ti.com/lit/ds/symlink/cc2530.pdf. 2013.

[3]阚宝朋,章万静,赵陇.基于ZigBee技术的CC2530定时器的应用与实现[J].福建电脑,2015,6:115-116

章万静(1976-),男,湖北随州人,硕士研究生,讲师,研究方向为单片机、总线技术和嵌入式系统的应用

朱迅(1980-),男,江苏淮安人,讲师,硕士,研究方向为软件及网络

杨丽波(1977-),女,黑龙江牡丹江人,讲师,硕士,研究方向为软件

Analysis and Research on the CC2530's Timer 3 Based on ZigBee

ZHANG Wan-jing,ZHU Xun,YANG Li-bo
(Department of Computer and Communications Engineering,Huai'an College of Information Technology,Huai'an 223003)

Abstract:CC2530 based on ZigBee provides a powerful and complete solution for a true SoC, which contains an 8-bit microcontroller core based on a single cycle of 8051 compatible kernel. Introduces four operation modes of the CC2530’s timer T3, and analyzes the design of interrupt service program in emphasis in the up-and-down mode.

Keywords:ZigBee; CC2530; SoC; Timer 3; Operation Mode; Interrupt Service

收稿日期:2015-12-29修稿日期:2016-03-02

作者简介:

文章编号:1007-1423(2016)09-0076-04

DOI:10.3969/j.issn.1007-1423.2016.09.019