章萬靜,朱 迅,楊麗波
(淮安信息職業(yè)技術(shù)學(xué)院計(jì)算機(jī)與通信工程學(xué)院,淮安 223003)
?
基于ZigBee的CC2530定時(shí)器T3的分析與研究
章萬靜,朱迅,楊麗波
(淮安信息職業(yè)技術(shù)學(xué)院計(jì)算機(jī)與通信工程學(xué)院,淮安223003)
摘要:CC2530內(nèi)部集成了一個(gè)單周期的8051兼容內(nèi)核,為真正的片上系統(tǒng)SoC提供一個(gè)強(qiáng)大而完整的ZigBee解決方案。介紹CC2530定時(shí)器T3的四種操作模式,并重點(diǎn)分析定時(shí)器T3在正計(jì)數(shù)/倒計(jì)數(shù)模式下中斷服務(wù)程序的設(shè)計(jì)。
關(guān)鍵詞:ZigBee;CC2530;SoC;定時(shí)器T3;操作模式;中斷服務(wù)
ZigBee技術(shù)是一種近距離、低復(fù)雜度、低功耗、低數(shù)據(jù)速率、低成本的無線通信技術(shù),其采用IEEE802.15.4標(biāo)準(zhǔn),利用全球公用的公共頻率2.4GHz,廣泛用于物聯(lián)網(wǎng)、自動(dòng)控制、樓宇自動(dòng)化、照明系統(tǒng)和工業(yè)監(jiān)視等諸多領(lǐng)域。
ZigBee芯片CC2530是德州儀器TI公司推出的用來實(shí)現(xiàn)ZigBee協(xié)議的片上系統(tǒng)SoC解決方案[1],能夠以非常低的成本構(gòu)建功能強(qiáng)大而性能穩(wěn)定的網(wǎng)絡(luò)節(jié)點(diǎn),并具有強(qiáng)大的抗干擾性能和極高的接收靈敏度等優(yōu)勢。CC2530在單個(gè)芯片上集成了一個(gè)單周期8051CPU兼容內(nèi)核,具有8KB的超低功耗數(shù)據(jù)存儲(chǔ)器SRAM和32/64/128/256KB可編程、非易失性程序存儲(chǔ)器,包含1個(gè)8路輸入8~14位ADC、1個(gè)提供不同晶振和供電模式的時(shí)鐘與電源管理模塊、4個(gè)通用的16/8位定時(shí)器、1個(gè)看門狗電路、2個(gè)波特率可變的異步/同步串口、1個(gè)高級加密標(biāo)準(zhǔn)AES協(xié)同處理器以及21個(gè)可編程I/O引腳,并提供了一個(gè)IEEE802.15.4兼容具有RF內(nèi)核的無線收發(fā)器。
ZigBee芯片CC2530的定時(shí)器有16位和8位之分,共4個(gè),可以分別實(shí)現(xiàn)不同的功能。其中,定時(shí)器T3和定時(shí)器T4都是8位的定時(shí)器,其用法差不多一樣,只是相應(yīng)寄存器的配置有些不同。現(xiàn)以8位的定時(shí)器T3為例,來分析、研究并實(shí)現(xiàn)其定時(shí)中斷功能。定時(shí)器T3主要由1個(gè)8位的特殊功能寄存器T3CNT組成,存放其內(nèi)的值可在每個(gè)時(shí)間周期邊沿自動(dòng)遞增1或遞減1,基于該8位計(jì)數(shù)器T3CNT中值的變化,ZigBee芯片CC2530的定時(shí)器T3可以實(shí)現(xiàn)所有的定時(shí)/計(jì)數(shù)功能。時(shí)間周期可以由用戶通過配置時(shí)鐘控制狀態(tài)寄存器的位CLKCONSTA.TICKSPD[2:0]和時(shí)鐘控制命令寄存器的位CLKCONCMD.TICKSPD[2:0]來選擇系統(tǒng)時(shí)鐘源,并可以由定時(shí)器T3的控制寄存器的位T3CTL.DIV[2:0]設(shè)置的分頻器值進(jìn)一步劃分。定時(shí)器T3有4種操作模式:自由運(yùn)行模式、倒計(jì)數(shù)模式、模計(jì)數(shù)模式和正計(jì)數(shù)/倒計(jì)數(shù)模式[2],不同的模式由定時(shí)器T3的控制寄存器的位T3CTL.MODE[1:0]的值進(jìn)行選擇。定時(shí)器3有兩個(gè)獨(dú)立的比較通道,每個(gè)通道上使用一個(gè)I/O引腳。
2.1 T3的自由運(yùn)行模式
定時(shí)器T3的自由運(yùn)行模式主要用于產(chǎn)生獨(dú)立的時(shí)間間隔和輸出信號(hào)頻率。
在自由運(yùn)行模式下,定時(shí)器T3的8位計(jì)數(shù)器T3CNT的值總是從初始值0x00開始啟動(dòng)計(jì)數(shù),在每個(gè)時(shí)間周期邊沿都會(huì)自動(dòng)遞增1,當(dāng)計(jì)數(shù)器T3CNT的值達(dá)到最大值0xFF溢出時(shí),計(jì)數(shù)器T3CNT又會(huì)自動(dòng)重新載入初始值0x00,然后再次按此規(guī)律遞增它的值,如圖1所示。
圖1 T3的自由運(yùn)行模式
需要注意的是:當(dāng)定時(shí)器T3的8位計(jì)數(shù)器T3CNT從初始值0x00開始計(jì)數(shù)達(dá)到最大計(jì)數(shù)值0xFF時(shí),CC2530芯片將會(huì)由硬件自動(dòng)將TIMIF定時(shí)器中斷標(biāo)志寄存器中的T3OVFIF溢出中斷標(biāo)志位設(shè)置為1。此時(shí)用戶如果設(shè)置了定時(shí)器T3的T3CTL控制寄存器中的OVFIM中斷屏蔽位,就會(huì)產(chǎn)生一次請求中斷服務(wù)。
2.2 T3的倒計(jì)數(shù)模式
定時(shí)器T3的倒計(jì)數(shù)模式可以用于需要事件超時(shí)間隔的應(yīng)用程序。
在倒計(jì)數(shù)模式下,定時(shí)器T3啟動(dòng)后,8位計(jì)數(shù)器T3CNT自動(dòng)載入T3CC0的值開始倒計(jì)時(shí),在每個(gè)時(shí)間周期邊沿會(huì)自動(dòng)遞減1,直到達(dá)到最小值0x00,然后計(jì)數(shù)器T3CNT再次自動(dòng)載入T3CC0的值后倒計(jì)數(shù),如此循環(huán)反復(fù),如圖2所示。(T3CC0中保存的值是在主程序開始初始化時(shí)將數(shù)據(jù)寫入特殊寄存器T3CC0中。)
圖2 T3的倒計(jì)數(shù)模式
需要注意的是:當(dāng)定時(shí)器T3的8位計(jì)數(shù)器T3CNT 從T3CC0開始倒計(jì)數(shù)達(dá)到最小計(jì)數(shù)值0x00時(shí),CC2530芯片由硬件自動(dòng)將TIMIF定時(shí)器中斷標(biāo)志寄存器中的T3OVFIF溢出中斷標(biāo)志位設(shè)置為1。此時(shí)用戶如果設(shè)置了定時(shí)器T3的T3CTL控制寄存器中的OVFIM中斷屏蔽位,就會(huì)產(chǎn)生一次請求中斷服務(wù)。
2.3 T3的模計(jì)數(shù)模式
定時(shí)器T3的模計(jì)數(shù)模式一般用于周期不是0xFF的應(yīng)用程序。
在模計(jì)數(shù)模式下,定時(shí)器T3的8位計(jì)數(shù)器T3CNT的值就會(huì)從初始值0x00開始啟動(dòng)計(jì)數(shù),在每個(gè)時(shí)間周期邊沿都會(huì)自動(dòng)遞增1,一直達(dá)到T3CC0中預(yù)先存放的值時(shí),計(jì)數(shù)器T3CNT會(huì)重新自動(dòng)復(fù)位到最小值0x00,然后按此規(guī)律再次繼續(xù)遞增它的值,如圖3所示。(T3CC0中保存的值是在主程序開始初始化時(shí)將數(shù)據(jù)寫入特殊寄存器T3CC0中。)
圖3 T3的模計(jì)數(shù)模式
需要注意的是:當(dāng)定時(shí)器T3的8位計(jì)數(shù)器T3CNT從一個(gè)比T3CC0中預(yù)先存放值大的值開始計(jì)數(shù),達(dá)到最大值0xFF溢出時(shí),計(jì)數(shù)器T3CNT會(huì)自動(dòng)重新載入0x00,同時(shí)CC2530芯片自動(dòng)由硬件將TIMIF定時(shí)器中斷標(biāo)志寄存器中的T3OVFIF溢出中斷標(biāo)志位設(shè)置為1。此時(shí)用戶如果設(shè)置了定時(shí)器T3的T3CTL控制寄存器中的OVFIM中斷屏蔽位,就會(huì)產(chǎn)生一次請求中斷服務(wù)
2.4 T3的正計(jì)數(shù)/倒計(jì)數(shù)模式
定時(shí)器T3的正計(jì)數(shù)/倒計(jì)數(shù)模式經(jīng)常用在需要對稱輸出正脈沖,并且周期不是0xFF的應(yīng)用程序。
在正計(jì)數(shù)/倒計(jì)數(shù)模式下,定時(shí)器T3的8位計(jì)數(shù)器T3CNT的值從初始值0x00啟動(dòng)計(jì)數(shù),在每個(gè)時(shí)鐘周期邊沿會(huì)自動(dòng)遞增1,直到“正計(jì)數(shù)”達(dá)到T3CC0中保存的值,然后計(jì)數(shù)器T3CNT在每個(gè)時(shí)鐘周期邊沿會(huì)自動(dòng)遞減1,“倒計(jì)數(shù)”直到0x00,再次按此規(guī)律又從0x00開始遞增,如此反復(fù),如圖4所示。(T3CC0中保存的值是在主程序開始初始化時(shí)將數(shù)據(jù)寫入特殊寄存器T3CC0中。)
圖4 T3的正計(jì)數(shù)/倒計(jì)數(shù)模式
需要注意的是:當(dāng)定時(shí)器T3的8位計(jì)數(shù)器T3CNT從初始值0x00開始正計(jì)數(shù)達(dá)到T3CC0,再從T3CC0開始倒計(jì)數(shù)達(dá)到0x00時(shí),CC2530芯片自動(dòng)由硬件將TIMIF定時(shí)器中斷標(biāo)志寄存器中的T3OVFIF溢出中斷標(biāo)志位設(shè)置為1。此時(shí)用戶如果設(shè)置了定時(shí)器T3的T3CTL控制寄存器中的OVFIM中斷屏蔽位,就會(huì)產(chǎn)生一次請求中斷服務(wù)
為了能及時(shí)看到定時(shí)器T3的實(shí)際定時(shí)效果,現(xiàn)將CC2530定時(shí)器T3的定時(shí)時(shí)間用來控制幾個(gè)LED燈閃爍,其原理圖如圖5所示。
圖5 LED燈定時(shí)閃爍實(shí)驗(yàn)原理圖
四個(gè)LED燈的負(fù)極分別串聯(lián)一個(gè)分壓限流電阻R后由CC2530芯片的P1端口的4個(gè)引腳P1.4、P1.5、P1.6、P1.7控制,LED燈的正極全部連接到3.3V電源,此時(shí)CC2530芯片的4個(gè)引腳P1.4、P1.5、P1.6、P1.7必須全部配置成通用I/O端口,并都選擇使用其輸出功能。電阻R應(yīng)選擇一個(gè)合適的阻值,以保證LED燈正常發(fā)光。此時(shí),當(dāng)某個(gè)引腳輸出為高電平1時(shí),對應(yīng)的LED燈滅;當(dāng)某個(gè)引腳輸出為低電平0時(shí),對應(yīng)的LED燈亮。主程序代碼如下所示:
#include "ioCC2530.h"http://CC2530芯片寄存器、引腳及中斷向量的定義
unsigned char counter=0;//該變量用來輔助定時(shí)器T3定時(shí)
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中的數(shù)據(jù)設(shè)置為250
EA = 1;//中斷總開關(guān)使能打開
T3IE = 1;//T3中斷使能打開
T3CTL = 0xff;
/*T3分頻器進(jìn)行128分頻,配置為正計(jì)數(shù)/倒計(jì)數(shù)運(yùn)行模式
T3定時(shí)溢出使能打開,T3CNT復(fù)位到0x00并啟動(dòng)T3定時(shí)開始*/
while(1)
{
;
}
}
CC2530芯片定時(shí)器T3配置為正計(jì)數(shù)/倒計(jì)數(shù)模式,實(shí)現(xiàn)128分頻后,T3CC0中的值預(yù)先設(shè)置為250 (0xfa),并打開中斷使能總開關(guān)EA及定時(shí)器T3的中斷使能子開關(guān)T3IE。定時(shí)器T3的中斷服務(wù)程序如下所示:
#pragma vector = T3_VECTOR //定時(shí)器T3的中斷入口地址
__interrupt void T3_ISR(void) //定時(shí)器T3中斷函數(shù)的定義
{
//IRCON = 0x00; //調(diào)用中斷時(shí),IRCON.T3IF可硬件清楚
if(counter<=100)
counter++; //T3定時(shí)時(shí)間未到,輔助計(jì)數(shù)器自加1
else
{
counter = 0; //T3定時(shí)時(shí)間到,輔助計(jì)數(shù)器清0
P1_4 = ! P1_4;
P1_6 = ! P1_6;//LED1燈,LED3燈閃爍
}
}
上面程序代碼中沒有對CC2530芯片的時(shí)鐘控制狀態(tài)寄存器CLKCONSTA和時(shí)鐘控制命令寄存器CLKCONCMD的數(shù)據(jù)進(jìn)行配置,即使用其默認(rèn)值,通過分析得知:系統(tǒng)的時(shí)鐘選擇fosc=16MHz晶振(實(shí)驗(yàn)板上的晶振),定時(shí)器T3標(biāo)記輸出也為ftickspd=16MHz[3]。而定時(shí)器T3運(yùn)行在128分頻的正計(jì)數(shù)/倒計(jì)數(shù)模式下,計(jì)數(shù)器T3CNT就會(huì)從初始值0x00開始正計(jì)數(shù)一直到0xFA (250),又從0xFA倒計(jì)數(shù)再次達(dá)到0x00時(shí)就會(huì)產(chǎn)生一次中斷請求,這樣定時(shí)器T3每次產(chǎn)生中斷的定時(shí)時(shí)間為250×2×1/(ftickspd/128)=0.04s,變量Counter輔助計(jì)數(shù)達(dá)到100次的定時(shí)時(shí)間達(dá)到4秒時(shí)就會(huì)改變LED燈的狀態(tài),即LED1燈和LED3燈每隔4秒就閃爍一次。
參考文獻(xiàn):
[1]青島東合信息技術(shù)有限公司編著. ZigBee開發(fā)技術(shù)及實(shí)踐[M].西安:西安電子科技大學(xué)出版社,2014.1
[2]Texas Instruments. Datasheet CC2530[EB/OL]. http://www.ti.com/lit/ds/symlink/cc2530.pdf. 2013.
[3]闞寶朋,章萬靜,趙隴.基于ZigBee技術(shù)的CC2530定時(shí)器的應(yīng)用與實(shí)現(xiàn)[J].福建電腦,2015,6:115-116
章萬靜(1976-),男,湖北隨州人,碩士研究生,講師,研究方向?yàn)閱纹瑱C(jī)、總線技術(shù)和嵌入式系統(tǒng)的應(yīng)用
朱迅(1980-),男,江蘇淮安人,講師,碩士,研究方向?yàn)檐浖熬W(wǎng)絡(luò)
楊麗波(1977-),女,黑龍江牡丹江人,講師,碩士,研究方向?yàn)檐浖?/p>
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
作者簡介:
文章編號(hào):1007-1423(2016)09-0076-04
DOI:10.3969/j.issn.1007-1423.2016.09.019