新聞中心

EEPW首頁 > 模擬技術 > 設計應用 > LPC900系列單片機在射頻數(shù)傳模塊中的應用與研究

LPC900系列單片機在射頻數(shù)傳模塊中的應用與研究

——
作者:季剛,劉大茂 時間:2007-01-26 來源:《現(xiàn)代電子技術》 收藏

當前許多應用領域都采用無線方式進行數(shù)據(jù)傳輸,在無線抄表、工業(yè)數(shù)據(jù)采集、天線遙控、計算機遙測遙控,醫(yī)療衛(wèi)生自動化、家庭自動化、安防、汽車儀表數(shù)據(jù)讀取等各方面無線射頻數(shù)傳都有廣泛的應用。

本文引用地址:http://m.butianyuan.cn/article/20953.htm

1 射頻數(shù)傳開發(fā)平臺的構建

建立軟硬件開發(fā)平臺是開發(fā)的首要任務,比較了幾種射頻數(shù)傳模塊方案,最后決定采用由lpc900系列flash單片機和cc1000射頻傳輸芯片為主芯片的開發(fā)方案。

1.1 主芯片簡介

lpc2900 flash單片機是philips公司推出的一款高性能、微功耗(完全掉電模式功耗低于1μa)、高速率(6倍于普通51單片機)、小封裝的5l內(nèi)核單片機,主要集成了字節(jié)方式的i2c總線、spi總線、增強型uart接口、比較器、實時時鐘、e2prom,ad/da轉(zhuǎn)換器、isp/iap在線編程和應用中編程等一系列有特色的功能部件,可滿足各種對成本、線路板空間有限制而又要求高性能、高可靠性的應用。根據(jù)性能、成本等各方面因素我們選擇了該系列的lpc922。

cc1000是基于chipcon公司的smart rf技術制造的可編程、半雙工超高頻單片收發(fā)器芯片,電路工作在ism頻段(300~1 000 mhz)。通過串行接口編程,其主要的工作參數(shù)能夠根據(jù)不同應用場合需要靈活方便地設定。同時其靈敏度可達-109 dbm,可編程輸出功率-20~10 dbm,fsk調(diào)制數(shù)據(jù)率最高可達76.8 kbaud,可在2.7~3.3 v低電源工作。非常適合應用于ism(工業(yè)、科學及醫(yī)療)方面以及srd(短距離通信)。

1.2 開發(fā)平臺構建

lpc900系列單片機提供了較為完善的軟硬件開發(fā)工具,在系統(tǒng)開發(fā)中采用tks932仿真器,用于系統(tǒng)的仿真、調(diào)試。該仿真器支持目前流行的keilc公司的μvisionⅱ集成開發(fā)環(huán)境。

通過自行設計的射頻模塊開發(fā)板以及附加一些輔助電路,配合tks932仿真器及軟件開發(fā)工具μvisionⅱ,構成的射頻數(shù)傳模塊開發(fā)平臺的框圖如圖1所示。

pc機的com1口與tks932仿真器進行通信,對模塊軟件進行軟、硬件仿真。com2口則與lpc922進行通訊,一方面可以把軟件調(diào)試信息更加直觀地反映出來,配合軟件調(diào)試;另一方面可以通過該串口接收或者發(fā)送數(shù)據(jù)到射頻模塊。

2 軟件開發(fā)及調(diào)試

2.1 數(shù)傳模塊軟件基本結(jié)構說明

射頻傳輸芯片ccl000具有3種狀態(tài):idel(空閑),rx(接收數(shù)據(jù)),tx(發(fā)送數(shù)據(jù))。整體上看,這是個具有3種狀態(tài)的狀態(tài)機模型,狀態(tài)之間的相互轉(zhuǎn)換見圖2。模塊主程序除了完成基本的芯片初始化工作外,程序的運行主要是根據(jù)在cc1000的dclk管腳產(chǎn)生的中斷,由中斷管理程序進行狀態(tài)檢測及切換,并執(zhí)行相應的中斷操作。



2.2 軟件調(diào)試開發(fā)中遇到的問題分析

該開發(fā)平臺采用的軟件開發(fā)環(huán)境為μvisionⅱ。該環(huán)境內(nèi)嵌多種符合當前工業(yè)標準的開發(fā)工具,可以完成從工程建立和管理、編譯、連接、目標代碼的生成,軟件仿真,硬件仿真等完整的開發(fā)流程。尤其c編譯工具在產(chǎn)生代碼的準確性和效率方面達到了較高的水平,而且可以附加靈活的控制選項,在開發(fā)大型項目時非常理想。即使不使用c語言而僅用匯編語言編程,其方便的集成環(huán)境、強大的軟件仿真調(diào)試工具也會令開發(fā)進度大大加快。但是其開發(fā)環(huán)境又有其自身的特色,需要對其中一些特殊的問題加以考慮。下面是對軟件開發(fā)中遇到的幾個典型問題的具體討論和研究。

2.2.1 程序中的關鍵字

在進行程序設計時不能使用c51編譯器的關鍵字來定義變量名或者函數(shù)名。c51是區(qū)別大、小字母的,而關鍵字都是小寫字母。

例如:void writetocc1000register(char addr,char data)。該函數(shù)定義從字面上看沒有問題,但在編譯時均指示錯誤,查看c51關鍵字有關目錄,查出原因在于變量參數(shù)data為其關鍵字,造成了編譯時的錯誤。

下面列出了一些常用的關鍵字,在程序設計時定義變量或函數(shù)名時應特別注意避免使用:

_at_,alien,bdata,bit,code,data,idata,large,pdata,sbit,sfr,sfrl6,smal,task,using,xdata,priority。

2.2.2 bit和sbit的區(qū)別和全局變量、局部變量的使用

在程序中有關位操作時必然要涉及到2種數(shù)據(jù)類型,bit和sbit。這2種數(shù)據(jù)類型的使用應注意區(qū)別。

bit主要用位變量操作。sbit雖然也是用于位變量的操作,但其使用范圍較bit更廣泛。sbit不僅可以用于定義可位尋址寄存器的各個位,使我們可以對寄存器進行位操作,sbit的另一個重要作用在于構建類似于共用體數(shù)據(jù)類型,這種數(shù)據(jù)類型在lpc922與cc1000的串行/并行數(shù)據(jù)相互轉(zhuǎn)換中起著重要的作用。例如:

unsigned char bdata mydatas2;//定義一個可位尋址的全局變量
//定義變量的各個位
sbit cdatas0=mydatas2^o;
sbit cdatasl=mydatas2^l;
sbit cdatas2=mydatas2^2;
sbit cdatas3=mydatas2^3;
sbit edatas4=mydatas2^4;
sbit edatas5=mydatas2^5;
sbit cdatas6=mydatas2^6;
sbit cdatas7=mydatas2^7;

在這里mydatas2既可以作為一個8位的變量使用,同時各個位也可以單獨使用,這在串/并數(shù)據(jù)轉(zhuǎn)換的場合是很有用的。特別需要注意的是,mydatas2這個可位尋址變量必須以全局變量的形式予以定義,如果定義為局部變量,編譯器也將產(chǎn)生錯誤。

2.2.3 uart通訊和函數(shù)調(diào)用

在進行硬件仿真時,需要進行l(wèi)pc922與pc機之間的uart串行通信,這樣可以把有關調(diào)試信息直觀地顯示在超級終端上。初期一直存在無法通信問題,為此調(diào)試了有關串口讀寫的底層代碼,對出現(xiàn)的問題進行了修正。

原來的單片機與pc機串口通訊寫程序如下:

原來的uart寫字符串函數(shù)writeln是通過調(diào)用putchar函數(shù)來進行的,但在硬件仿真時一直出錯,當把這部分程序單獨分離出來進行仿真時,卻未出現(xiàn)問題。后來分析考慮推想可能原因是:c51由于內(nèi)部堆棧空間的限制,在函數(shù)調(diào)用時,提供的是一種壓縮棧,每個過程被給定一個空間用于存放局部變量,過程中的每個變量都存放在這個空間的固定位置,當多重調(diào)用或者遞歸調(diào)用這個過程時,會導致變量被覆蓋而出錯。此時應把該函數(shù)定義為可重入函數(shù),但是再入函數(shù)因為要做一些特殊的處理,一般運行起來都比較慢。在這個程序中寫uart操作對函數(shù)putchar調(diào)用時,程序的其他部分也在調(diào)用該函數(shù),覆蓋了傳遞給putchar函數(shù)的參數(shù),導致程序運行出錯。于是對程序做了修改如下:

修改過的程序與原來程序差別在于不再進行putchar函數(shù)調(diào)用,而直接進行有關操作。修改后再進行硬件仿真,問題得到了很好的解決。在讀寫cc1000寄存器的操作中,也遇到了類似的問題,通過修改函數(shù)的調(diào)用,問題都得到了解決。由此可以看到,lpc900單片機由于內(nèi)部堆棧資源有限,在程序設計時當發(fā)現(xiàn)程序運行異常時,應特別注意函數(shù)調(diào)用帶來的問題。當然出現(xiàn)這個問題還可能會有其他方面的原因,需要進一步的進行分析研究。

2.2.4 看門狗

在進行軟件仿真時,一直出現(xiàn)程序復位跳轉(zhuǎn)現(xiàn)象,根據(jù)斷點追蹤,分析了該問題與程序運行的時間因素有關。查看有關lpc900芯片資料,著重對其看門狗部分進行了研究。

當系統(tǒng)處于一些比較惡劣環(huán)境(工控、底層采集等),如果系統(tǒng)的抗干擾沒有做好,則容易出現(xiàn)"死機"現(xiàn)象,這時硬件電路并沒有損壞,只是內(nèi)部程序運行出現(xiàn)錯誤,必須復位才能恢復,這時可用"看門狗"來解決問題??撮T狗定時器子系統(tǒng)可通過復位使系統(tǒng)從錯誤的操作中恢復。但是任何事情都有其兩面性,當軟件沒能在定時器溢出之前將其清零或者重新賦值,看門狗定時器就會導致系統(tǒng)產(chǎn)生一次復位,從而產(chǎn)生錯誤。

仿真開發(fā)板上采用的是lpc922,因此對其復位時的有關看門狗的寄存器進行了具體分析,最后發(fā)現(xiàn)問題是由于沒有在一定的時間內(nèi)及時對看門狗進行重新的配置參數(shù)造成的。通過對wdcon,wdl,wfeed1,wfeed2這4個與看門狗有關的寄存器進行合理配置,很好地解決
了程序復位問題。

2.2.5 lpc900讀操作和cc1000寄存器讀寫

lpc900系列單片機通常也具有51單片機的一些特點,在使用時也應注意。當其i/o口作為輸入口使用時,有2種工作方式,即讀端口和讀引腳。讀端口實際上并不從外部讀入數(shù)據(jù),而只是把端口鎖存器的內(nèi)容讀到內(nèi)部總線,經(jīng)過某種運算或者變換后,再寫回到端口鎖存器。

讀引腳時才真正地把外部的數(shù)據(jù)讀入到內(nèi)部總線。這時要先通過指令,把端口鎖存器置1,然后再進行讀引腳操作,否則就可能讀錯。在lpc922讀寫cc1000寄存器過程中涉及到有關讀引腳操作問題,應區(qū)別這2種工作方式,避免錯誤。 3 結(jié)語

在本文介紹的開發(fā)平臺上利用lpc900系列單片機實現(xiàn)了根據(jù)不同的應用需要對射頻模塊上cc1000寄存器進行有效的參數(shù)讀寫配置控制,初步達到了設計要求。該模塊經(jīng)過進一步改進可以用于無線數(shù)據(jù)傳輸?shù)戎T多領域。對軟件開發(fā)中所遇到問題的分析討論,在lpc900系列單片機的應用開發(fā)中也具有較廣泛的實際意義。



關鍵詞: 模塊

評論


相關推薦

技術專區(qū)

關閉