CC2530簡介課件_第1頁
CC2530簡介課件_第2頁
CC2530簡介課件_第3頁
CC2530簡介課件_第4頁
CC2530簡介課件_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、CC2530簡介1CC2530芯片CC2530是基于2.4GHz IEEE802.15.4、ZigBee和RF4CE上的一個片上系統(tǒng)解決方案。其特點是以極低的總材料成本建立較為強(qiáng)大的網(wǎng)絡(luò)節(jié)點。CC2530 芯片結(jié)合了RF 收發(fā)器,增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)可編程閃存,8KB SRAM 和許多其他模塊的強(qiáng)大的功能。CC2530 主要有四種不同的閃存版本:CC2530F32/64/128/256(32/64/128/256KB閃存)其具有多種運行模式,使得它能滿足超低功耗系統(tǒng)的要求。同時CC2530運行模式之間的轉(zhuǎn)換時間很短,使其進(jìn)一步降低能源消耗。2CC2530片內(nèi)結(jié)構(gòu)方框圖數(shù)字模擬混合輸入

2、/輸出控制器XOSC_Q2 RESET_N XSOC_Q1 P2_4 P2_3 P2_2 P2_1 P2_0 P1_4 P1_3 P1_2 P1_1 P1_0 RF_PP1_7 P1_6 P1_5 P1_4 P1_3 P1_2 P1_1 P1_0 P1_7 P1_6 P1_5 復(fù)位看門狗片上穩(wěn)壓器32MHz晶振高速RC-OSC上電/復(fù)位/掉電32.768KHz晶振32.768KHzRC-OSC睡眠定時器調(diào)試接口多路時鐘校準(zhǔn)睡眠模式控制器DMA8051CPU內(nèi)核存儲器仲 裁32/64/128/256KB FLASH8KB SRAMADC音頻/直流8通道AES加密和解密IRQ控制FLASH寫射頻寄

3、存器CSMA/CA選通處理器USART1USART2射步數(shù)據(jù)接口定時器1(16位)定時器2IEEE 802.15.4 MAC定時器定時器3(8位)定時器4(8位)調(diào)制器解調(diào)器自動增益控制頻率合成器接收鏈RF_N先進(jìn)選出和幀控制發(fā)送鏈VDD(2.03.6V)DCOUPL3CC2530引腳描述(1)4CC2530引腳描述(2)5CC2530封裝6CC2530需要極少的外部連接元件,同時有很多典型電路,其模塊大致可以分為三類: 1、CPU和內(nèi)存相關(guān)模塊 2、外設(shè),時鐘和電源管理相關(guān)模塊 3、無線信號收發(fā)相關(guān)模塊CC2530芯片內(nèi)部結(jié)構(gòu)7強(qiáng)大的5通道DMAIEEE 802.15.4 MAC定時器,通用

4、定時器(一個16位定時器,一個8位定時器)IR發(fā)生電路(IR 中斷)具有捕獲功能的32-kHz睡眠定時器硬件支持CSMA/CA(載波偵聽多路訪問沖突避免) 支持精確的數(shù)字化RSSI/LQI(鏈路質(zhì)量指示 )電池監(jiān)視器和溫度傳感器21個通用I/O引腳看門狗定時CC2530的外設(shè)(1)8兩個8位定時器:定時器3,4為8位定時器,有一個可編程分頻器,一個8位的周期值,一個計數(shù)器通道。MAC定時器:專為MAC或其他協(xié)議而設(shè)的定時器,可以跟蹤已過周期,同時可以記錄收發(fā)某一的幀精確時間和傳輸結(jié)束時間,以便產(chǎn)生不同的選通命令到無線模塊ADC:支持7到12位的分辨率,帶寬范圍為7-30kHz,在DC與音頻轉(zhuǎn)換

5、時,能夠使用8個輸入通道。AES加密/解密內(nèi)核:CC2530用128位的AES算法進(jìn)行加密或解密數(shù)據(jù),從而保證了ZigBee網(wǎng)絡(luò)層和應(yīng)用層的安全要求。USART0和USART1分別被配置為一個主從或一個UART,其功能是為RX和TX提供雙緩沖,以及硬件流控制。調(diào)試接口:用于內(nèi)部電路調(diào)試,具有兩線串形接口I/O控制器:負(fù)責(zé)所有的通用的I/O引腳CC2530的外設(shè)(2)9 CC2530具備一個IEEE802.15.4兼容無線收發(fā)器,其中的RF內(nèi)核控制模擬無線模塊,另外它還提供了一個連接外部設(shè)備的端口,從而可以發(fā)出命令和讀取狀態(tài),操縱各執(zhí)行電路的事件順序。同時無線設(shè)備還包括數(shù)據(jù)包過慮模塊和地址識別模

6、塊。無線設(shè)備10CC2530最小系統(tǒng)11CC2530的典型應(yīng)用12輸入輸出匹配:當(dāng)使用單極子的一個不平衡天線,需要用一個巴倫(平衡非平衡轉(zhuǎn)換器 )來對性能進(jìn)行優(yōu)化,可以采用低成本分立電感或電容來實現(xiàn),這里主要運用C262,L261,C252,L252.如果使用了諸如折疊偶極子這樣的平衡天線,巴倫可以忽略。1.8V片上穩(wěn)壓器:用以提供1.8V的數(shù)字邏輯電壓,采用這一個穩(wěn)壓器要求用一個去耦電容C401來獲得穩(wěn)定運行效果。電源去耦和過濾必須使用合適的電源去耦以獲得最佳的性能。在一個應(yīng)用中去耦電容和電源過濾的位置和尺寸對獲得最佳性能是非常重要的。TI 提供了一個緊湊的參考設(shè)計,應(yīng)該很好地遵循。晶振 3

7、2MHz 晶振使用了一個外部32-MHz 振蕩器XTAL1 和兩個負(fù)載電容(C221 和C231)。晶振 XTAL2 是一個可選的32.768 kHz 晶振,有兩個負(fù)載電容(C321 和C331)用于32.768-kHz晶振。32.768 kHz 晶振用于要求非常低的睡眠電流消耗和精確喚醒時間的應(yīng)用。元件說明13CC2530模塊傳感器板14步進(jìn)電機(jī)結(jié)點15CC Debug仿真器16CC2530使用的8051CPU是一個單周期的兼容內(nèi)核,它有三種不同的訪問總線。其中包括中斷控制器,內(nèi)存仲裁器,8KB SRAM,32/64/128/256KB閃存塊。增強(qiáng)型8051 內(nèi)核使用標(biāo)準(zhǔn)的8051 指令集。

8、因為以下原因指令執(zhí)行比標(biāo)準(zhǔn)的8051更快:每個指令周期是一個時鐘,而標(biāo)準(zhǔn)的8051 每個指令周期是12個時鐘消除了總線狀態(tài)的浪費。因為一個指令周期與可能的內(nèi)存存取是一致的,大多數(shù)單字節(jié)指令在一個時鐘周期內(nèi)執(zhí)行。除了速度提高之外,增強(qiáng)型8051 內(nèi)核還包括結(jié)構(gòu)上的改善。第二個數(shù)據(jù)指針一個擴(kuò)展的18源中斷單元8051 內(nèi)核的對象代碼兼容業(yè)界標(biāo)準(zhǔn)的8051 微控制器。即對象代碼使用8051 內(nèi)核上執(zhí)行的業(yè)界標(biāo)準(zhǔn)的8051編譯器或匯編器編譯,在功能上是等同的。CC2530的CPU17CC2530的CPU中斷控制器:其為18個中斷源提供服務(wù),它們中的每個中斷都被賦予4 個中斷優(yōu)先級中的某一個。內(nèi)存仲裁器

9、:位于系統(tǒng)中心,它負(fù)責(zé)執(zhí)行仲裁,即決定同時訪問系統(tǒng)物理存儲器時的順序,便于系統(tǒng)效率的提高。8 KB SRAM:為超低功耗的SRAM,使數(shù)字部分即使掉電也能保存其中內(nèi)容,是芯片低功耗原因所在。閃存塊:用于保存電腦傳輸進(jìn)入的程序代碼以及常量數(shù)據(jù),節(jié)約了搜尋時間。18CC2530的存儲器CC2530里的四種存儲空間:CODE程序存儲器:用處存放程序代碼和一些常量,尋址范圍 0000HFFFFH 共64KB。DATA:內(nèi)部數(shù)據(jù)存儲空間,可以直接或間接被一個單周期CPU指令訪問。這一存儲空間是256B。其中較低的128B可以直接或間接尋址,較高的128B只能間接尋址。XDATA:外部數(shù)據(jù)存儲空間,通常需

10、要4-5個CPU指令周期來訪問。這一存儲空間是64KB。訪問XDATA 存儲器慢于訪問DATA,因為CODE 和XDATA 存儲空間共享CPU 內(nèi)核上的一個通用總線。SFR:寄存器存儲空間,可以直接被一個CPU指令訪問。這一存儲空間含有128字節(jié)。對于地址是被8 整除的SFR 寄存器,每一位還可以單獨尋址。 這四個存儲空間在8051 結(jié)構(gòu)中是分開的,但是在設(shè)備中有部分是重疊的,以減輕DMA 傳輸和硬件調(diào)試操作的負(fù)擔(dān)。19CC2530的XDATA存儲器映射為使DMA 訪問全部物理存儲空間,并由此使得DMA 在不同8051存儲空間之間進(jìn)行傳輸,CODE和SFR部分存儲空間映射到XDATA存儲空間。

11、XDATA較高的32KB是一個只讀區(qū)域(XBANK),任何可用的32KB閃存區(qū)均可以映射到這里。這使得軟件可以訪問整個閃存存儲器。這一區(qū)域主要用作存儲另外的常量數(shù)據(jù)。20CC2530的CODE存儲器映射機(jī)制一 機(jī)制一是標(biāo)準(zhǔn)的8051映射,只有程序存儲器(即閃存)映射到CODE 存儲空間, 這是復(fù)位后默認(rèn)映射方式。RootBankFMAP.MAP2:0確定過來的Bank21CC2530的CODE存儲器映射機(jī)制二22CPU 存儲空間SRAM 映射到的地址范圍是0 x0000 到(SRAM_SIZE 1)。XREG 區(qū)域映射到1KB 地址區(qū)域(0 x60000 x63FF)。這些寄存器是另外的寄存器

12、,有效地擴(kuò)展SFR 寄存器空間。一些外設(shè)寄存器和大多數(shù)無線電控制和數(shù)據(jù)寄存器映射到這里。SFR 寄存器映射到地址區(qū)域(0 x70800 x70FF)。閃存信息頁面(2 KB)映射到地址區(qū)域(0 x78000 x7FFF)。這是一個只讀區(qū)域,包含有關(guān)設(shè)備的各種信息。XDATA 存儲空間(0 x80000 xFFFF) 的較高32KB 是一個只讀的閃存代碼區(qū)( XBANK),可以使用MEMCTR.XBANK2:0位映射到任何一個可用的閃存區(qū)。閃存存儲器SRAM 和寄存器到XDATA 的映射允許DMA 控制器和CPU 訪問在一個統(tǒng)一的地址空間內(nèi)的所有物理存儲器。寫入存儲映射中未執(zhí)行的區(qū)域(圖中的陰影

13、部分)沒有影響。從為執(zhí)行的區(qū)域讀出返回0 x00。寫只讀區(qū)域比如閃存區(qū)域?qū)⒈缓雎浴?3物理存儲器閃存存儲器:片上閃存存儲器主要是為了保存程序代碼和常量數(shù)據(jù)。閃存存儲器有以下功能:頁面大小:2 KB閃存頁面擦除時間:20ms閃存芯片(批量)擦除時間:20ms閃存寫時間(4 字節(jié)):20s數(shù)據(jù)保留(室溫下):100 年編程/擦除次數(shù):20,000 次信息頁面是一個2 KB 的只讀區(qū)域,存儲設(shè)備信息。其他信息中它包括來自TI 地址范圍的一個唯一的IEEE地址。它以最低位優(yōu)先的形式存儲在XDATA 地址0 x780C。將出版一個單獨的設(shè)計說明,詳細(xì)介紹信息頁面的內(nèi)容。SFR寄存器:特殊功能寄存器(SF

14、R)控制8051CPU內(nèi)核和/或外設(shè)的一些功能。許多8051CPU內(nèi)核的SFR和標(biāo)準(zhǔn)的8051SFR 相同。但是有一些控制功能的另外的SFR,是標(biāo)準(zhǔn)8051 中所沒有的。另外的SFR 用于和外設(shè)單元以及RF 收發(fā)器接口。24與端口有關(guān)的寄存器寄存器名稱地址描 述端口P00 x80端口0??蓮腦DATA(0 x7080)只讀。P10 x90端口1??蓮腦DATA(0 x7090)只讀。P20 xA0端口2??蓮腦DATA(0 x70A0)只讀。寄存器名稱地址描 述端口控制寄存器P0SEL0 xF3端口0功能選擇(0-通用I/O,1-外圍功能)P1SEL0 xF4端口1功能選擇(0-通用I/O,1

15、-外圍功能)P2SEL0 xF5端口2功能選擇(0-通用I/O,1-外圍功能)P0INP0 x8F端口0 輸入模式(0-三態(tài),1-上拉)P1INP0 xF6端口1輸入模式(0-三態(tài),1-上拉)P2INP0 xF7端口2輸入模式(0-三態(tài),1-上拉)P0DIR0 xFD端口0方向選擇(0-輸入,1-輸出)P1DIR0 xFE端口1方向選擇(0-輸入,1-輸出)P2DIR0 xFF端口2方向選擇(0-輸入,1-輸出)25以下代碼使P1_0引腳電平每隔一定時間反向一次:#include #define BLED P1_0 / 定義LED為P1_0口控制void main() unsigned int

16、 d; P1SEL &= 0 x01; / 選擇P1_0為通用I/O引腳 P1DIR |= 0 x01; / I/O方向選擇為輸出 while(1) for(d=0; d30000; d+); / 延時 BLED = BLED; / 電平反向,LED閃爍 26將P1_2設(shè)為三態(tài)輸入,讀取按鍵狀態(tài)#define key P0_1 P0SEL &= 0X02; / P0_1作為通用I/O口P0DIR &= 0X02; / P0_1輸入P0INP |= 0 x02; / P0_1上拉uchar key_scan(void)if(key = 0) / 低電平有效 delay(100); / 延時消抖動

17、 if(key = 0) / 處理按鍵事件 while(!key); / 直到松開按鍵 27定時器T1(1)16 位遞增或遞減計數(shù)器由CLKCON.TICKSPD定義活動時鐘邊沿周期,它設(shè)置從0.25MHz到32MHz的不同的時鐘標(biāo)簽頻率(可以使用32 MHz XOSC 作為時鐘源)。由T1CTL.DIV設(shè)置分頻器值可以從1、8、32 或128。 因此當(dāng)32 MHz 晶振用作系統(tǒng)時鐘源時,定時器1 可以使用的最低時鐘頻率是1953.125Hz,最高是32 MHz。28可以通過兩個8 位的SFR讀取16位的計數(shù)器值:T1CNTH 和T1CNTL,分別包含在高位字節(jié)和低位字節(jié)中。當(dāng)讀取T1CNTL

18、 時,計數(shù)器的高位字節(jié)在那時被緩沖到T1CNTH,以便高位字節(jié)可以從T1CNTH 中讀出。因此T1CNTL 必須總是在讀取T1CNTH 之前首先讀取。對T1CNTL 寄存器的所有寫入訪問將復(fù)位16 位計數(shù)器。當(dāng)達(dá)到最終計數(shù)值(溢出)時,計數(shù)器產(chǎn)生一個中斷請求??梢杂肨1CTL 控制寄存器設(shè)置啟動并停止該計數(shù)器。當(dāng)一個不是00 值的寫入到T1CTL.MODE 時,計數(shù)器開始運行。如果00 寫入到T1CTL.MODE,計數(shù)器停止在它現(xiàn)在的值上。一般來說控制寄存器T1CTL 用于控制定時器操作。狀態(tài)寄存器T1STAT 保存中斷標(biāo)志。定時器T1(2)29與定時器1有關(guān)的寄存器寄存器名稱地址描 述T1C

19、C0L0 xDA通道0捕獲/比較值低字節(jié)T1CC0H0 xDB通道0捕獲/比較值高字節(jié)T1CC1L0 xDC通道1捕獲/比較值低字節(jié)T1CC1H0 xDD通道1捕獲/比較值高字節(jié)T1CC2L0 xDE通道2捕獲/比較值低字節(jié)T1CC2H0 xDF通道2捕獲/比較值高字節(jié)T1CNTL0 xE2計數(shù)器低字節(jié)T1CNTH0 xE3計數(shù)器高字節(jié)T1CTL0 xE4控制T1CCTL00 xE5通道0捕獲/比較控制T1CCTL10 xE6通道1捕獲/比較控制T1CCTL20 xE7通道2捕獲/比較控制T1STAT0 xAF狀態(tài)常用30T1CTL 定時器1 的控制和狀態(tài)位名稱復(fù)位R/W描 述7:4-0000

20、RO保留3:2DIV1:000R/W分頻器劃分值。產(chǎn)生主動的時鐘邊緣用來更新計數(shù)器,如下:00:標(biāo)記頻率/101:標(biāo)記頻率/810:標(biāo)記頻率/3211:標(biāo)記頻率/1281:0MODE1:000R/W選擇定時器1模式。定時器操作模式通過下列方式選擇:00:暫停運行。01:自由運行,從0 x0000到0 xFFFF反復(fù)計數(shù)10:從0 x0000到T1CC0反復(fù)計數(shù)。11:正計數(shù)/倒計數(shù),從0 x0000到T1CC0反復(fù) 計數(shù)并且從T1CC0倒計數(shù)到0 x000031T1STAT定時器1狀態(tài)寄存器位名稱復(fù)位R/W描 述7:6-0R0保留5OVFIF0R/W0定時器1計數(shù)器溢出中斷標(biāo)志。當(dāng)計數(shù)器在自由

21、運行或模模式下達(dá)到最終計數(shù)值時設(shè)置,當(dāng)在正/倒計數(shù)模式下達(dá)到零時倒計數(shù)。寫1沒有影響。4CH4IF0R/W0定時器1通道4中斷標(biāo)志。當(dāng)通道4中斷條件發(fā)生時設(shè)置。寫1沒有影響。3CH3IF0R/W0定時器1通道3中斷標(biāo)志。當(dāng)通道3中斷條件發(fā)生時設(shè)置。寫1沒有影響。2CH2IF0R/W0定時器1通道2中斷標(biāo)志。當(dāng)通道2中斷條件發(fā)生時設(shè)置。寫1沒有影響。1CH1IF0R/W0定時器1通道1中斷標(biāo)志。當(dāng)通道1中斷條件發(fā)生時設(shè)置。寫1沒有影響。0CH0IF0R/W0定時器0通道0中斷標(biāo)志。當(dāng)通道0中斷條件發(fā)生時設(shè)置。寫1沒有影響。32利用定時器中斷實現(xiàn)指示燈的閃爍#include #define uin

22、t unsigned int#define uchar unsigned char#define RLED P1_0/ 定義LED1為P10口控制#define YLED P1_1/ 定義LED2為P11口控制uint counter=0;/ 統(tǒng)計溢出次數(shù)uint LEDFlag;/ 標(biāo)志是否要閃爍void InitialT1test(void) / T1初始化程序P1DIR = 0 x03; / 初始化LED控制端口P1 ,P10 P11為輸出RLED = 0;YLED = 0;T1CTL = 0 x05; / 初始化計數(shù)器1 T1STAT= 0 x21; / 通道0,中斷有效,8分頻 /

23、自動重裝模式(0 x0000-0 xffff) 33利用定時器中斷實現(xiàn)指示燈的閃爍void main() /主函數(shù)InitialT1test(); / 調(diào)用初始化函數(shù) while(1) / 查詢溢出 if(IRCON 0) /中斷標(biāo)志寄存器,其中bit1為T1IF IRCON = 0; / 清溢出標(biāo)志 counter+; if(counter=15) / 中斷計數(shù),約0.25s counter = 0; LEDFlag = !LEDFlag; if(LEDFlag) YLED = RLED; RLED = !RLED; / 每 1s LED燈閃爍一下 LEDFlag = !LEDFlag; /

24、 閃爍標(biāo)志變量置0 34串口0使用(初始化)void initUARTSEND(void) CLKCONCMD &= 0 x40; / 設(shè)置系統(tǒng)時鐘源為32MHZ晶振 while(CLKCONSTA & 0 x40); / 等待晶振穩(wěn)定 CLKCONCMD &= 0 x47; / 設(shè)置系統(tǒng)主時鐘頻率為32MHZ PERCFG = 0 x00; / 位置1 P0口 P0SEL = 0 x3c; / P0_2, P0_3, P0_4, P0_5用作串口 P2DIR &= 0XC0; / P0優(yōu)先作為UART0 U0CSR |= 0 x80; / UART方式 U0GCR |= 9; U0BAUD

25、|= 59; / 波特率設(shè)為19200 UTX0IF = 0; / UART0 TX中斷標(biāo)志初始置位0函數(shù)功能: 將系統(tǒng)時鐘設(shè)為高速晶振,將 P0口設(shè)置為串 口0功能引腳,串口0使用UART模式,波特率設(shè)為19200,允許接收。該函數(shù)在使用串口之前調(diào)用。CLKCONCMDCLKCONSTAPERCFGU0CSRU0GCRU0BAUDUTX0IF35串口0使用(發(fā)送字符串)void UartTX_Send_String(char *Data,int len) int j; for(j=0;jlen;j+) U0DBUF = *Data+; while(UTX0IF = 0); UTX0IF =

26、0; 函數(shù)功能:串口發(fā)送數(shù)據(jù), *data 為發(fā)送緩沖的指針,len 為發(fā)送數(shù)據(jù)的長度該函數(shù)在初始化串口后才可以正常調(diào)用。36#include #include #define RLED P1_0 / 定義控制燈的端口#define GLED P1_1char Txdata25=XWWK Test Data!;void main(void)uchar i; P1DIR = 0 x03; / P1_0, P1_1輸出,控制LED RLED = 1; / RLED滅 GLED = 0; / GLED亮 initUARTSEND(); UartTX_Send_String(Txdata,25); f

27、or(i=0;i30;i+) Txdatai = ; strcpy(Txdata,HELLO ); / 將UART0 TX test賦給Txdata;while(1) UartTX_Send_String(Txdata, sizeof(HELLO); / 串口發(fā)送數(shù)據(jù) Delay(50000); / 延時 GLED = !GLED; / GLED閃爍 Delay(50000); Delay(50000);串口0使用(主函數(shù))37通過內(nèi)置溫度傳感器實現(xiàn)溫度采集(初始化)/*溫度傳感器初始化函數(shù)*/void initTempSensor(void) DISABLE_ALL_INTERRUPTS()

28、; / 關(guān)閉所有中斷 InitClock(); / 設(shè)置系統(tǒng)主時鐘為32M *(BYTE _xdata*) 0 x624B) = 0 x01; / 開啟溫度傳感器 *(BYTE _xdata*) 0 x61BD) = 0 x01; / 將溫度傳感器與 / ADC連接起來void InitClock(void) CLKCONCMD = 0 x28; /設(shè)定計數(shù)器時鐘為1M Hz, 系統(tǒng)時鐘為32 MHz while(CLKCONSTA & 0 x40); /等晶振穩(wěn)定#define DISABLE_ALL_INTERRUPTS() (IEN0 = IEN1 = IEN2 = 0 x00)38IN

29、T8 getTemperature(void) UINT8 i; UINT16 AdcValue; UINT16 value; AdcValue = 0; for( i = 0; i 2; / ADCL寄存器低2位無效 value |= (UINT16)ADCH) 2; / 累加除以4,得到平均值 return ADC14_TO_CELSIUS(value); / 根據(jù)AD值,計算出實際的溫度通過內(nèi)置溫度傳感器實現(xiàn)溫度采集(讀AD值)#define ADC_SINGLE_CONVERSION(settings) do ADCCON3 = (settings); while(0)#define

30、ADC_SAMPLE_SINGLE() do ADC_STOP(); ADCCON1 |= 0 x40; while (0)00HHHHHHADCHLLLLLLXXADCL0000HHHH00LLLLLLHH0000000000HHHHHHLLLLLL#define ADC14_TO_CELSIUS(ADC_VALUE) ( (ADC_VALUE) 4) - 335)#define ADC_SAMPLE_READY() (ADCCON1 & 0 x80)39void main(void)char i; char TempValue10; InitUART0(); / 初始化串口initTemp

31、Sensor(); / 初始化ADC while(1) AvgTemp = 0; for(i = 0 ; i = 1; / 每次累加后除2. sprintf(TempValue, (char *)%dC , (INT8)AvgTemp); UartTX_Send_String(TempValue, 4); Delay(50000); 通過內(nèi)置溫度傳感器實現(xiàn)溫度采集(主函數(shù))40CC2530 Basic RF(簡單無線點對點傳輸協(xié)議)Basic RF 由TI 公司提供,它包含了IEEE 802.15.4 標(biāo)準(zhǔn)的數(shù)據(jù)包的收發(fā)。這個協(xié)議只是用來演示無線設(shè)備是如何進(jìn)行數(shù)據(jù)傳輸?shù)模话暾δ艿膮f(xié)議。

32、但是它采用了與802.15.4 MAC兼容的數(shù)據(jù)包結(jié)構(gòu)及ACK 包結(jié)構(gòu),其功能限制如下:不提供“多跳”、“設(shè)備掃描”及Beacon(信標(biāo) )。不提供不同種的網(wǎng)絡(luò)設(shè)備,如協(xié)調(diào)器、路由器等,所有節(jié)點同級,只實現(xiàn)點對點傳輸。傳輸時會等待信道空閑,但不按802.15.4 CSMA-CA 要求進(jìn)行兩次CCA 檢測。不重傳數(shù)據(jù)。簡言之,Basic RF 不適合直接用于產(chǎn)品的開發(fā),但可用來進(jìn)行無線設(shè)備數(shù)據(jù)傳輸?shù)娜腴T學(xué)習(xí)。41Basic RF 工作原理(2)啟動創(chuàng)建一個basicRfCfg_t 的數(shù)據(jù)結(jié)構(gòu),并初始化其中的成員。調(diào)用basicRfInit()函數(shù)進(jìn)行協(xié)議的初始化。數(shù)據(jù)發(fā)送1. 創(chuàng)建一個buffe

33、r,把payload放入其中。2. 調(diào)用basicRfSendPacket()函數(shù)發(fā)送。數(shù)據(jù)接收上層通過basicRfPacketIsReady()函數(shù)來檢查是否收到一個新的數(shù)據(jù)包,調(diào)用basicRfReceive()函數(shù),把收到的數(shù)據(jù)復(fù)制到buffer 中。42基于Basic RF的無線燈光控制實驗程序功能是一個基本的點對點通信實驗,實現(xiàn)了一個節(jié)點板上的開關(guān)控制另一個節(jié)點板上的LED的功能。每一個節(jié)點是用來做開關(guān)還是用來做燈的控制器,可以通過源程序的不同定義進(jìn)行選擇??勺鳛橐粋€無線通信的入門級程序。TI例程工程名:cc2530_sw_examples.eww43baseRF通信基本流程1.

34、初始化網(wǎng)絡(luò)地址,打開接收機(jī)。2. 初始化basicRfConfig,確定網(wǎng)絡(luò)ID、信道。3. 初始化外圍設(shè)備,如時鐘、各個I/O口等。4. 事件的處理,如發(fā)送報文或接受報文后的數(shù)據(jù)處理等。44初始化網(wǎng)絡(luò)(1)void main(void)/ 射頻配置 basicRfConfig.panId = PAN_ID; basicRfConfig.channel = RF_CHANNEL; basicRfConfig.ackRequest = TRUE; / 要求接受方應(yīng)答 / IO初始化 halBoardInit(); / 初始化指示燈和按鈕 initUART0(); / 初始化串口 / RF初始化

35、if(halRfInit()=FAILED) HAL_ASSERT(FALSE); 45初始化網(wǎng)絡(luò)(2)uint8 halRfInit(void) / 上電設(shè)置默認(rèn)參數(shù) FRMCTRL0 |= (AUTO_ACK | AUTO_CRC); / 推薦的RX設(shè)置 TXFILTCFG = 0 x09;/TX過濾器配置寄存器 AGCCTRL1 = 0 x15; / AGC控制寄存器 FSCAL1 = 0 x00; / 調(diào)整頻率校準(zhǔn) halRfEnableRxInterrupt(); / 使能RX中斷 return SUCCESS;void halRfEnableRxInterrupt(void) /

36、enable RXPKTDONE interrupt RFIRQM0 |= 1 0) if(pRxData0 = LIGHT_TOGGLE_CMD) UartTX_Send_String(UartData,17); / 向串口發(fā)送測試數(shù)據(jù) halLedToggle(LED_RED); / 改變狀態(tài) Wait(3); halLedToggle(LED_RED); / 改變狀態(tài) 接收函數(shù)(點亮LED)49發(fā)送數(shù)據(jù)包函數(shù)(1)uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length) uint8 mpduLength

37、; uint8 status; if(!txState.receiveOn) / 如果沒有打開接收機(jī) halRfReceiveOn(); length = min(length, BASIC_RF_MAX_PAYLOAD_SIZE); / 包長度 halRfWaitTransceiverReady(); / 等到收發(fā)空閑 halRfDisableRxInterrupt(); /關(guān)閉接收幀完成中斷避免對SPI接口的干擾 mpduLength = basicRfBuildMpdu(destAddr, pPayload, length); halRfWriteTxBuf(txMpdu, mpduLe

38、ngth); halRfEnableRxInterrupt(); /打開接收幀ACK接收完成中斷 if(halRfTransmit() != SUCCESS) /如果發(fā)送幀不成功,返回失敗 status = FAILED; 50發(fā)送數(shù)據(jù)包函數(shù)(2)if (pConfig-ackRequest) /等待確認(rèn)被接受 ; /自動進(jìn)入接收 halMcuWaitUs(12 * BASIC_RF_SYMBOL_DURATION) + (BASIC_RF_ACK_DURATION) + (2 * BASIC_RF_SYMBOL_DURATION) + 10); status = txState.ackRec

39、eived ? SUCCESS : FAILED; else status = SUCCESS; if (!txState.receiveOn) halRfReceiveOff(); /關(guān)掉接收機(jī) if(status = SUCCESS) txState.txSeqNumber+; return status;51Z-Stack協(xié)議棧軟件層次(1)APP 用戶應(yīng)用程序目錄HAL 硬件接口層目錄MAC、NWK 底層封裝目錄(無源碼)MT 串口操作工具目錄OSAL 操作系統(tǒng)抽象層目錄ZMAIN 協(xié)議棧入口目錄ZDO 設(shè)備對象層管理代碼目錄TOOL 工程配置文件目錄(信道、PANID)52 整個Z-

40、Stack采用分層的軟件結(jié)構(gòu),硬件抽象層(HAL)提供各種硬件模塊的驅(qū)動,包括定時器Timer,通用I/O口GPIO,通用異步收發(fā)傳輸器UART,模數(shù)轉(zhuǎn)換ADC的應(yīng)用程序接口API,提供各種服務(wù)的擴(kuò)展集。 操作系統(tǒng)抽象層OSAL實現(xiàn)了一個易用的操作系統(tǒng)平臺,通過時間片輪轉(zhuǎn)函數(shù)實現(xiàn)任務(wù)調(diào)度,提供多任務(wù)處理機(jī)制。用戶可以調(diào)用OSAL提供的相關(guān)API進(jìn)行多任務(wù)編程,將自己的應(yīng)用程序作為一個獨立的任務(wù)來實現(xiàn)。Z-Stack協(xié)議棧軟件層次(2)53工程的選擇設(shè)備類型協(xié)調(diào)器路由器節(jié)點設(shè)備開發(fā)板類型EB54工程的配置(1)預(yù)編譯宏 Z-Stack協(xié)議棧的代碼采用了大量的預(yù)編譯宏定義來模塊化代碼,以此來節(jié)省硬

41、件代碼空間。用戶可以根據(jù)具體應(yīng)用環(huán)境適當(dāng)添加或刪除宏定義。 具體編譯宏由協(xié)議棧相關(guān)文檔詳細(xì)解釋。Project-Options-C/C+Compiler-Preprocessor中查看55配置文件 在f8wConfig.cfg等配置文件中定義了工程相關(guān)的網(wǎng)絡(luò)通訊設(shè)置。其中比較重要的是和ZigBee通信相關(guān)的信道通道的設(shè)置,和PAN ID的設(shè)置,用戶可以通過更改該文件中的相關(guān)宏定義,來控制ZigBee網(wǎng)絡(luò)的通道和PAN ID。Project- Options-C/C+Compiler-Preprocessor中查看工程的配置(2)56如何使用ZStack網(wǎng)絡(luò)配置(1)1.PAN ID 和Chan

42、nel(在Toolsf8wConfig.cfg中) ZigBee協(xié)議使用一個14位的個域網(wǎng)標(biāo)志符(PAN ID)來標(biāo)識一個網(wǎng)絡(luò)。ZStack允許用兩種方式配置PAN ID,當(dāng)ZDAPP_CONFIG_PAN_ID值不設(shè)置為0 xFFFF時,那么設(shè)備建立或加入網(wǎng)絡(luò)的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果設(shè)置ZDAPP_CONFIG_PAN_ID為0 xFFFF,那么設(shè)備就將建立或加入一個“最優(yōu)”的網(wǎng)絡(luò)。 -DZDAPP_CONFIG_PAN_ID=0 xFFFF/-DZDAPP_CONFIG_PAN_ID=0 x2FFF IEEE 802.15.4/ZIGBEE規(guī)范在2.

43、4G頻段上規(guī)定了16各頻道,用戶可以通過選擇DEFAULT_CHANLIST不同的值選擇不同的頻道,協(xié)議默認(rèn)頻道為0 xB即0 x00000800。 /-DDEFAULT_CHANLIST=0 x04000000 / 26 - 0 x1A/-DDEFAULT_CHANLIST=0 x02000000 / 25 - 0 x19-DDEFAULT_CHANLIST=0 x01000000 / 24 - 0 x18/-DDEFAULT_CHANLIST=0 x00800000 / 23 - 0 x17/-DDEFAULT_CHANLIST=0 x00400000 / 22 - 0 x16/-DDEF

44、AULT_CHANLIST=0 x00200000 / 21 - 0 x15/-DDEFAULT_CHANLIST=0 x00100000 / 20 - 0 x14/-DDEFAULT_CHANLIST=0 x00080000 / 19 - 0 x13/-DDEFAULT_CHANLIST=0 x00040000 / 18 - 0 x12/-DDEFAULT_CHANLIST=0 x00020000 / 17 - 0 x11/-DDEFAULT_CHANLIST=0 x00010000 / 16 - 0 x10/-DDEFAULT_CHANLIST=0 x00008000 / 15 - 0 x

45、0F/-DDEFAULT_CHANLIST=0 x00004000 / 14 - 0 x0E/-DDEFAULT_CHANLIST=0 x00002000 / 13 - 0 x0D/-DDEFAULT_CHANLIST=0 x00001000 / 12 - 0 x0C/-DDEFAULT_CHANLIST=0 x00000800 / 11 - 0 x0B572.網(wǎng)絡(luò)結(jié)構(gòu)(nwk_globals.h,nwk_globals.c) STACK_PROFILE_ID定義為NETWORK_SPECIFIC、 HOME_CONTROLS、BUILDING_AUTOMATION、GENERIC_STAR、

46、GENERIC_TREE中的一個,默認(rèn)為HOME_CONTROLS,并據(jù)此設(shè)置MAX_NODE_DEPTH、NWK_MODE等,具體如下: #define STACK_PROFILE_ID HOME_CONTROLS #if ( STACK_PROFILE_ID = HOME_CONTROLS ) #define MAX_NODE_DEPTH 5 #define NWK_MODE NWK_MODE_MESH #define SECURITY_MODE SECURITY_RESIDENTIAL#if ( SECURE != 0 ) #define USE_NWK_SECURITY 1 / tru

47、e or false #define SECURITY_LEVEL 5#else #define USE_NWK_SECURITY 0 / true or false #define SECURITY_LEVEL 0#endif 網(wǎng)絡(luò)最大設(shè)備數(shù)設(shè)定: #if !defined( NWK_MAX_DEVICE_LIST ) #define NWK_MAX_DEVICE_LIST 20 / Maximum number of devices in the Assoc/Device list. #endif如何使用ZStack網(wǎng)絡(luò)配置(2)58路由器和終端設(shè)備數(shù)設(shè)定:#if defined ( RT

48、R_NWK ) / change this if using a different stack profile. / Cskip array uint16 *Cskip; #if ( STACK_PROFILE_ID = HOME_CONTROLS ) byte CskipRtrsMAX_NODE_DEPTH+1 = 6,6,6,6,6,0; byte CskipChldrnMAX_NODE_DEPTH+1 = 20,20,20,20,20,0; #elif ( STACK_PROFILE_ID = GENERIC_STAR ) byte CskipRtrsMAX_NODE_DEPTH+1

49、= 5,5,5,5,5,0; byte CskipChldrnMAX_NODE_DEPTH+1 = 5,5,5,5,5,0; #elif ( STACK_PROFILE_ID = NETWORK_SPECIFIC ) byte CskipRtrsMAX_NODE_DEPTH+1 = 5,5,5,5,5,0; byte CskipChldrnMAX_NODE_DEPTH+1 = 5,5,5,5,5,0; #endif / STACK_PROFILE_ID#endif / RTR_NWK其中CskipRtrs和CskipChldrn分別為每一級的最大路由器數(shù)和最大節(jié)點數(shù),前者是后者的子集。如何使用

50、ZStack網(wǎng)絡(luò)配置(3)59PAN IDZigBee協(xié)議使用一個16位的個域網(wǎng)標(biāo)志符(PAN ID)來標(biāo)識一個網(wǎng)絡(luò)。ZStack允許用兩種方式配置PAN ID,當(dāng)ZDAPP_CONFIG_PAN_ID值不設(shè)置為0 xFFFF時,那么設(shè)備建立或加入網(wǎng)絡(luò)的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果設(shè)置ZDAPP_CONFIG_PAN_ID為0 xFFFF,那么設(shè)備就將建立或加入一個“最優(yōu)”的網(wǎng)絡(luò)。PANID的出現(xiàn)一般是伴隨在,確定信道以后的。PANID其全稱是Personal Area Network ID,網(wǎng)絡(luò)的ID(即網(wǎng)絡(luò)標(biāo)識符),是針對一個或多個應(yīng)用的網(wǎng)絡(luò),用于區(qū)分不同

51、的ZigBee網(wǎng)絡(luò),一般是mesh或者cluster tree兩種拓?fù)浣Y(jié)構(gòu)之一。所有節(jié)點的panID唯一,一個網(wǎng)絡(luò)只有一個PANID,它是由pan協(xié)調(diào)器生成的,PANID是可選配置項,用來控制 ZigBee路由器和終端節(jié)點要加入那個網(wǎng)絡(luò)。文件f8wConfg.cfg中的 ZDO_CONFIG_PAN_ID 參數(shù)可以設(shè)置為一個 00 x3FFF 之間的一個值。協(xié)調(diào)器使用這個值,作為它要啟動的網(wǎng)絡(luò)的 PAN ID。而對于路由器節(jié)點和終端節(jié)點來說只要加入一個已經(jīng)用這個參數(shù)配置了PAN ID的網(wǎng)絡(luò)。如果要關(guān)閉這個功能,只要將這個參數(shù)設(shè)置為0 xFFFF。 要更進(jìn)一步控制加入過程,需要修改 ZDApp.

52、c 文件中的ZDO_NetworkDiscoveryConfirmCB 函數(shù)。當(dāng)然,如果ZDAPP_CONFIG_PAN_ID被定義為0 xFFFF,那么協(xié)調(diào)器將根據(jù)自身的IEEE地址建立一個隨機(jī)的PANID(00 x3FFF)。60Z-Stack協(xié)議棧工作流程Z-Stack采用操作系統(tǒng)的思想來構(gòu)建,采用事件輪循機(jī)制,當(dāng)各層初始化之后,系統(tǒng)進(jìn)入低功耗模式,當(dāng)事件發(fā)生時,喚醒系統(tǒng),開始進(jìn)入中斷處理事件,結(jié)束后繼續(xù)進(jìn)入低功耗模式。如果同時有幾個事件發(fā)生,判斷優(yōu)先級,逐次處理事件。整個Z-stack的主要工作流程,大致分為系統(tǒng)啟動,驅(qū)動初始化,OSAL初始化和啟動,進(jìn)入任務(wù)輪循幾個階段。61Z-St

53、ack系統(tǒng)運行流程圖62主函數(shù)例子(即啟動程序)ZSEG int main( void ) osal_int_disable( INTS_ALL ); / 關(guān)閉中斷 HAL_BOARD_INIT(); / 初始化HAL zmain_vdd_check() ; /電壓檢測 zmain_ram_init(); / 初始化stack存儲區(qū) InitBoard( OB_COLD ); /初始化板載IO HalDriverInit(); /初始化HAL驅(qū)動 osal_nv_init( NULL ); /初始化NV系統(tǒng) zmain_ext_addr(); /確定MAC地址 zgInit(); /初始化基本

54、NV條目 ZMacInit(); /初始化MAC afInit(); /初始化AF osal_init_system(); /初始化操作系統(tǒng) osal_int_enable( INTS_ALL ); / 允許中斷 InitBoard( OB_READY ); /初始化開發(fā)板 zmain_dev_info(); /顯示設(shè)備信息 zmain_lcd_init(); /液晶初始化 osal_start_system(); /啟動操作系統(tǒng) 63應(yīng)用程序任務(wù)Z-stack的任何一個子系統(tǒng)都作為OSAL的一個任務(wù),因此在開發(fā)應(yīng)用層的時候,必須通過創(chuàng)建OSAL任務(wù)來運行應(yīng)用程序。通過osalInitTask

55、s( )函數(shù)創(chuàng)建OSAL任務(wù) 任何OSAL任務(wù)必須分為兩步:一是進(jìn)行任務(wù)初始化;二是處理任務(wù)事件。64OSAL的任務(wù)處理 主循環(huán)中的兩個關(guān)鍵數(shù)組*tasksEvents與*tasksArr。tasksEvents存放從序號為0到tasksCnt每個任務(wù)在本次循環(huán)中是否要被運行, 需要運行的任務(wù)其值非0,否則為0。tasksArr數(shù)組則存放了對應(yīng)每個任務(wù)的入口地址,只有在tasksEvents中記錄的需要運行的任務(wù),在本次循環(huán)中才會被調(diào)用到。 65Sensor發(fā)送數(shù)據(jù)的函數(shù)static void sendReport(void) uint8 pDataSENSOR_REPORT_LENGTH;

56、/ 存放數(shù)據(jù)的數(shù)組 static uint8 reportNr = 0; uint8 txOptions; pDataSENSOR_TEMP_OFFSET = readTemp(); / Read and report temperature value pDataSENSOR_VOLTAGE_OFFSET = readVoltage(); / Read and report voltage value pDataSENSOR_PARENT_OFFSET = HI_UINT16(parentShortAddr); pDataSENSOR_PARENT_OFFSET + 1 = LO_UINT1

57、6(parentShortAddr); / Set ACK request on each ACK_INTERVAL report / If a report failed, set ACK request on next report if ( +reportNrACK_REQ_INTERVAL & reportFailureNr = 0 ) txOptions = AF_TX_OPTIONS_NONE; else txOptions = AF_MSG_ACK_REQUEST; reportNr = 0; / Destination address 0 xFFFE: Destination

58、address is sent to previously / established binding for the commandId. zb_SendDataRequest( 0 xFFFE, SENSOR_REPORT_CMD_ID, SENSOR_REPORT_LENGTH, pData, 0, txOptions, 0 );66Sensor讀溫度的函數(shù)static int8 readTemp(void) static uint16 voltageAtTemp22; static uint8 bCalibrate=TRUE; / Calibrate the first time th

59、e temp sensor is read uint16 value; int8 temp; ATEST = 0 x01; TR0 |= 0 x01; ADCIF = 0; /* Clear ADC interrupt flag */ ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_512 | HAL_ADC_CHN_TEMP); while ( !ADCIF ); /* Wait for the conversion to finish */ value = ADCL; /* Get the result */ value |= (uint16) ADCH

60、) = 4; / Use the 12 MSB of adcValue/* /* Assume ADC = 1480 at 25C and ADC = 4/C */ #define VOLTAGE_AT_TEMP_25 1480 #define TEMP_COEFFICIENT 4 temp = 22 + ( (value - voltageAtTemp22) / TEMP_COEFFICIENT ); if( temp = 100) / Set 0C as minimum temperature, and 100C as max return 100; else if (temp = 0)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論