章萬靜,朱 迅,楊麗波
(淮安信息職業技術學院計算機與通信工程學院,淮安 223003)
?
基于ZigBee的CC2530定時器T3的分析與研究
章萬靜,朱迅,楊麗波
(淮安信息職業技術學院計算機與通信工程學院,淮安223003)
摘要:CC2530內部集成了一個單周期的8051兼容內核,為真正的片上系統SoC提供一個強大而完整的ZigBee解決方案。介紹CC2530定時器T3的四種操作模式,并重點分析定時器T3在正計數/倒計數模式下中斷服務程序的設計。
關鍵詞:ZigBee;CC2530;SoC;定時器T3;操作模式;中斷服務
ZigBee技術是一種近距離、低復雜度、低功耗、低數據速率、低成本的無線通信技術,其采用IEEE802.15.4標準,利用全球公用的公共頻率2.4GHz,廣泛用于物聯網、自動控制、樓宇自動化、照明系統和工業監視等諸多領域。
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內核的無線收發器。
ZigBee芯片CC2530的定時器有16位和8位之分,共4個,可以分別實現不同的功能。其中,定時器T3和定時器T4都是8位的定時器,其用法差不多一樣,只是相應寄存器的配置有些不同?,F以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中斷屏蔽位,就會產生一次請求中斷服務
為了能及時看到定時器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"http://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燈閃爍
}
}
上面程序代碼中沒有對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