<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于μC/OS―III的CC1120驅動(dòng)程序設計

基于μC/OS―III的CC1120驅動(dòng)程序設計

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:本文根據實(shí)際需要,在實(shí)現無(wú)線(xiàn)數據傳輸系統基本功能的前提下,選用功耗較低的芯片作為無(wú)線(xiàn)收發(fā)單元。在分析功能特性并介紹μC/OS—III的基礎上,闡述如何實(shí)現基于平臺的驅動(dòng)程序。
關(guān)鍵詞:CC1120;;;

引言
隨著(zhù)頻率資源的日趨緊張,短距離無(wú)線(xiàn)通信按窄帶化趨勢發(fā)展。無(wú)線(xiàn)數傳模塊一般由微處理器和收發(fā)芯片組成,本文所設計的窄帶數傳模塊的微處理器采用了芯片,收發(fā)芯片選用了TI公司新推出的CC1120,CC1120通過(guò)SPI串行總線(xiàn)協(xié)議與MCU相連接。同時(shí),采用了可移植、可植入ROM、可裁剪、搶占式的實(shí)時(shí)多任務(wù)操作系統μC/OS—III作為軟件平臺。

1 系統硬件電路
1.1 CC1120的內部結構
CC1120是TI公司專(zhuān)為經(jīng)濟高效的無(wú)線(xiàn)系統在低功耗和低電壓操作下,實(shí)現數據傳輸而設計的一款完全集成的單芯片無(wú)線(xiàn)收發(fā)器。該芯片主要應用于ISM(工業(yè)、科學(xué)和醫療)以及SRD(短程設備)頻帶。CC1120的主要特性有:體積小,超低功耗,可配置數據速率(1.2~200kbps),可編程控制輸出功率(步長(cháng)為0.5 dB,最高功率16 dBm),接收機靈敏度高(1.2 kbps數據速率下為123 dBm),還支持2FSK、2GFSK、4FSK、4GFSK、MSK、ASK、OOK及模擬FM多種調制方式等。

本文引用地址:http://dyxdggzs.com/article/201610/305969.htm

a.JPG


CC1120的內部結構框圖如圖1所示。CC1120具有一個(gè)低功耗IF接收機,低噪聲放大器(LNA)將接收到的RF、信號放大,并在求積分(I和Q)過(guò)程中被降壓轉換至中頻(IF)。在IF下,I/Q信號被ADC數字化。自動(dòng)增益控制(AGC)、精確信道濾波和調制解調位/數據包同步均以數字方式完成。CC1120的發(fā)射器部分基于RF頻率直接合成,頻率合成器包括一個(gè)完全片上LC VCO和一個(gè)90°相位轉換器,用來(lái)在接收模式下向降壓轉換混頻器生成I和Q本振信號。一個(gè)4線(xiàn)SPI串行接口用于配置數據和緩沖區存取。數字基帶包括了對信道配置、數據包處理以及數據緩沖的支持。
1.2 CC1120的配置特性
配置寄存器的讀、寫(xiě)操作時(shí)序如圖2所示。通過(guò)一個(gè)4線(xiàn)串行SPI兼容接口(SI、SO、SCLK和CSn)可對CC1120進(jìn)行配置,該接口還可用于讀取和寫(xiě)入緩沖數據。SPI接口上的所有數據傳輸均以最高位開(kāi)始。

b.JPG


SPI接口上的所有事務(wù)均以一個(gè)報頭字節作為開(kāi)始,該字節包含一個(gè)R/W位、一個(gè)突發(fā)存取位(B)以及一個(gè)6位地址(A5~A0),報頭字節幀格式如圖3所示。在SPI總線(xiàn)上傳輸數據期間,CSn引腳必須保持低電平,否則傳輸就會(huì )被取消。拉低CSn電平時(shí),在開(kāi)始傳輸該報頭字節以前,MCU必須等待,直到SO引腳變?yōu)榈碗娖綖橹?。這表明,芯片正在運行。除非芯片處在SLEEP或XOFF狀態(tài),否則SO引腳總會(huì )在CSn變?yōu)榈碗娖揭院罅⒓醋優(yōu)榈碗娖健?/p>

d.JPG


CC1120的寄存器空間主要作為CC1120的頻率、數據速率、中頻等大部分參數的配置。而擴展寄存器大部分為芯片配置輔助測試寄存器(只讀),少部分為配置寄存器(可讀寫(xiě))。指令選通用于芯片狀態(tài)切換和沖刷RX/TXFIFO。128字節TX FIFO和128字節RX FIFO均通過(guò)0x3F地址進(jìn)行存取。當R/W位為0時(shí),則TX FIFO被存??;當R/W位為1時(shí),則RX FIFO被存取。其中,TXFIFO為只寫(xiě),而RX FIFO為只讀。寄存器地址映射如圖4所示。

d.JPG


1.3 硬件連接關(guān)系
窄帶無(wú)線(xiàn)數據傳輸系統的STM32F103ZE與無(wú)線(xiàn)收發(fā)芯片的硬件連接關(guān)系如圖5所示。左側為STM32F103ZE,它是一個(gè)32位、基于A(yíng)RM Cort ex—M3內核的無(wú)線(xiàn)收發(fā)芯片。除了正常工作模式外,還支持睡眠、待機、停機工作模式,當所有外設都處于工作模式時(shí)消耗36 mA,待機時(shí)下降到2μA。CC1120內部集成的SPI接口的傳輸速率最高可達到18 Mbps。

e.JPG


右側為無(wú)線(xiàn)收發(fā)芯片CC1120。CC1120的外部控制引腳主要有復位接口、SPI串行接口以及4個(gè)通用輸出引腳GPIO0~GPIO3。其中,4個(gè)通用輸出引腳在實(shí)際應用中,可以通過(guò)配置寄存器使它們?yōu)樯蠈訉?shí)時(shí)提供同步字或數據包收發(fā)狀態(tài)等應用。在硬件平臺上,CC1120的SPI串行接口(CSn、SCLK、SI、SO)分別連接到STM32F103ZE相應的4個(gè)SPI串行通信弓I腳(即SPI2_NSS、SPI2_SCLK、SPI2_MOSI、SPI2_ISO上)。通過(guò)這4根線(xiàn),TM32F103ZE可以對CC1120進(jìn)行參數配置、芯片狀態(tài)切換以及RX/TX FIFO的讀寫(xiě)。由于CC1120只有SPI從模式,因此TM32F103ZE采用SPI主模式。另外,本方案還采用了1個(gè)通用數字輸出引腳GPIO0,用來(lái)實(shí)現數據包分組發(fā)送指示。同時(shí),TM32F103ZE可以通過(guò)控制RESET引腳,復位無(wú)線(xiàn)收發(fā)芯片。
通信方式為SPI串行通信時(shí),時(shí)鐘源由STM32F103ZE提供,通過(guò)配置處理器寄存器,SPI的SCLK時(shí)鐘頻率為4.5 MHz。通過(guò)TM32F103ZE內部的8位移位寄存器,實(shí)現CC1120與STM32F103ZE的串行數據交換。CSn引腳主要用來(lái)控制數據通信的同步性,通信期間要始終保證CSn引腳的電平為低。但是,需要注意的是CC1120的CSn引腳的時(shí)序并未完全遵照SPI時(shí)序規范,因此,STM32F103ZE的SPI2_NSS引腳需要設置成普通GPIO接口模式,并采用軟件控制方式。

2 軟件平臺
μC/OS—III實(shí)現了一個(gè)基于優(yōu)先級調度的搶占式內核,并在這個(gè)內核之上提供了最基本的系統服務(wù),例如信號量、郵箱、消息隊列、內存管理、中斷管理等,但它并不提供設備管理和文件系統管理。

f.JPG


信號量用于控制共享資源的訪(fǎng)問(wèn),可用于中斷服務(wù)子程序與任務(wù)間、任務(wù)與任務(wù)間的同步。本設計中采用信號量機制來(lái)管理兩個(gè)共享資源,發(fā)送緩沖區和接收緩沖區。讀任務(wù)、中斷服務(wù)子程序和接收環(huán)形緩沖區之間的關(guān)系如圖6所示。圖中的共享資源為接收環(huán)形緩沖區,IN和OUT分別為入隊和出隊指針。當IN等于OUT時(shí),則接收環(huán)形緩沖區為空,調用OSSemPend()阻塞讀任務(wù);當IN不等于OUT時(shí),如果讀任務(wù)被阻塞,則在中斷服務(wù)子程序中調用OSSemPost()喚醒讀任務(wù)。

3 CC1120驅動(dòng)實(shí)現
本文參考了國內研究者提出的μC/OS下通用驅動(dòng)框架模型,將CC1120驅動(dòng)架構模型劃分成上層訪(fǎng)問(wèn)抽象接口層、硬件設備驅動(dòng)模塊層和硬件設備接口操作層。其中,上層訪(fǎng)問(wèn)抽象接口層通過(guò)對硬件平臺的抽象,可以在系統開(kāi)發(fā)中向上層應用屏蔽硬件特征,從而實(shí)現軟/硬件的分離;硬件設備驅動(dòng)模塊層是整個(gè)驅動(dòng)框架的中間封裝層,通過(guò)該層的封裝,對上一層屏蔽了SPI硬件接口;而硬件設備接口操作層是實(shí)現對底層硬件SPI串行接口的功能操作,通過(guò)調用該層接口,可以實(shí)現CC1120提供的全部功能。
3.1 驅動(dòng)體系結構
CC1120的驅動(dòng)體系結構如圖7所示。上層訪(fǎng)問(wèn)抽象接口層是驅動(dòng)體系中的最高層,該模塊主要實(shí)現了數據包發(fā)送與接收功能,并對無(wú)線(xiàn)收發(fā)芯片的狀態(tài)進(jìn)行控制和獲取RSSI值。其中,perCC1120Init()接口主要完成CC1120的初始化、啟動(dòng)并配置芯片等功能;perCC1120Read()實(shí)現數據包的接收,以及對讀緩沖區的管理;perCC1120Wrire()實(shí)現數據包的發(fā)送,以及對寫(xiě)緩沖區的管理;perCC1120Ioctl()實(shí)現了CC11 20的各個(gè)工作狀態(tài)的切換(包括休眠和喚醒)和獲取RSSI值。

g.JPG


硬件設備驅動(dòng)模塊層實(shí)現對上層訪(fǎng)問(wèn)抽象接口層操作,屏蔽了硬件SPI接口,提供了對CC1120的寄存器和FIFO的讀寫(xiě)操作。其中,CC1120 SpiWriteReg()和CC1120SpiReadReg()分別提供了寄存器的寫(xiě)和讀操作功能,屏蔽了8位和16位寄存器的區別;CC1120SpiWriteTxFifo()和CC1 120SpiReadRxFifo()提供了FIFO的連續寫(xiě)和讀操作功能。
硬件設備接口操作層是對CC1120的硬件SPI接口的直接操作和軟件表達,該層為整個(gè)驅動(dòng)模塊提供了SPI同步串行通信機制。其中,trx8 BitRegAccess()實(shí)現了8位寄存器的存取功能;trx16BitRegAccess()實(shí)現了16位寄存器的存取功能;trxSpiCmdStrobe()實(shí)現了芯片的指令選通功能,用于芯片工作狀態(tài)切換。
本文結合CC1120驅動(dòng)體系結構,簡(jiǎn)要介紹其主要功能,即數據包的收發(fā)。
應用層發(fā)送數據包之前,先調用perCC1120Ioctl()獲取信道的RSSI值,當RSSI值低于信道忙碌的門(mén)限值時(shí),則調用perCC1120Write()將需要發(fā)送的數據發(fā)送出去。perCC1120Write()的工作流程圖如圖8所示。本文使用了CC1120的通用GPIO0引腳,通過(guò)適當配置,該引腳電平會(huì )在發(fā)送或者接收完一個(gè)數據包時(shí)產(chǎn)生一個(gè)下降沿跳變。當上一包數據包發(fā)送完畢之后,GPIO0觸發(fā)中斷,STM32F103ZE進(jìn)入中斷處理程序,將會(huì )發(fā)送寫(xiě)緩沖區中的下一包數據包,直至發(fā)送緩沖區為空,再把CC1120置于空閑或休眠狀態(tài)。

h.JPG


當上層不處于發(fā)送狀態(tài)時(shí),CC1120都將置于接收狀態(tài)或增強型無(wú)線(xiàn)電喚醒狀態(tài),當接收到一個(gè)數據包時(shí),GPIO0引腳產(chǎn)生一個(gè)下降沿中斷,STM32F103ZE進(jìn)入中斷處理程序,調用CC1120SpiReadRxFifo(),從接收緩沖RXFIFO中讀取數據包,并將其放入接收環(huán)形緩沖區中。如果接收環(huán)形緩沖區滿(mǎn)時(shí),將放棄當前接收到的數據包。上層通過(guò)調用perCC1120Read()接口讀取接收到的數據包,當接收緩沖區為空時(shí),將阻塞上層的讀取進(jìn)程。perCC1120Read()的工作流程圖如圖9所示。

i.JPG


3.2 CC1120的配置要點(diǎn)
(1)寄存器配置軟件
針對CC1120的寄存器配置,TI公司提供了SmartRFStudio 7軟件。通過(guò)這個(gè)軟件可以對CC1120進(jìn)行配置,以獲得最佳寄存器設置以及性能和功能評估。配置軟件根據用戶(hù)輸入的發(fā)射頻率、晶振頻率、符號速率等參數,生成相應的寄存器配置信息。
(2)數據包處理的硬件支持
CC1120內部支持的數據包處理方式有前導碼、同步字、地址過(guò)濾、CRC、數據白化、狀態(tài)字節、字節倒置等,同時(shí),數據包長(cháng)度類(lèi)型支持固定長(cháng)、可變長(cháng)、無(wú)限長(cháng)3種模式,可以通過(guò)手動(dòng)配置PKT_CFG0~PKT_CFG2來(lái)實(shí)現。
(3)增強型無(wú)線(xiàn)電喚醒
在程序的實(shí)現過(guò)程中,當CC1120長(cháng)時(shí)間沒(méi)有接收到數據時(shí),則開(kāi)啟增強型無(wú)線(xiàn)電喚醒功能(寄存器WOR_CFG0.RC_PD=0),并發(fā)送SWOR指令選通命令,將芯片工作狀態(tài)切換到睡眠狀態(tài)。CC1120將在MCU不干涉的前提下,周期性地從睡眠狀態(tài)中喚醒并監聽(tīng)數據包的到來(lái),從而降低系統的整體功耗。
(4)接收的信號強度指示
CC1120在接收狀態(tài)下,能連續地從RSSI狀態(tài)寄存器(RSSI0、RSSI1)中讀取到RSSI值,直到檢測到一個(gè)有效的同步字,其后RSSI讀取值將被凍結。通過(guò)設置寄存器AGC_CFG1.AGC_SYNC_BEHAVIOR,可以解除RSSI值被凍結的狀態(tài)。
(5)通用數字輸出引腳(GPIO0~GPIO3)
在實(shí)際應用中,可以通過(guò)寄存器(IOCFG0~IOCFG3)配置,為上層實(shí)時(shí)提供信道或數據包狀態(tài)等信息。本設計將寄存器IOCFG0的值設置為0x06,即利用了GPIO0引腳的電平跳變特點(diǎn)。當CC1120發(fā)送完或接收到一包數據包,觸發(fā)MCU端口產(chǎn)生中斷,并在中斷服務(wù)程序中進(jìn)行寫(xiě)入或讀取緩沖區TX/RX FIFO等操作,使STM32F103ZE有更多時(shí)間處理其他事務(wù)或處于休眠狀態(tài),達到降低整個(gè)系統功耗的目的。

結語(yǔ)
基于μC/OS—III和CC1120的短距離窄帶無(wú)線(xiàn)數傳系統方案,可以實(shí)現低功耗、近距離、可靠的無(wú)線(xiàn)數據傳輸,具有成本低、可擴展性強、操作靈活簡(jiǎn)單的特點(diǎn)。通過(guò)對CC1120和STM32F103ZE進(jìn)行適當的配置,硬件能在無(wú)數據收發(fā)的狀態(tài)下,自動(dòng)進(jìn)入低功耗的睡眠或待機狀態(tài),可以大大降低硬件系統的整體功耗。大量測試結果表明,該窄帶無(wú)線(xiàn)數據傳輸系統數據收發(fā)正常,整個(gè)系統運行穩定,具備RSSI檢測、休眠喚醒等相關(guān)功能。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>