對LPC900系列單片機在射頻數傳模塊中的研究
在這里myDatas2既可以作為一個8位的變量使用,同時各個位也可以單獨使用,這在串/并數據轉換的場合是很有用的。特別需要注意的是,myDatas2這個可位尋址變量必須以全局變量的形式予以定義,如果定義為局部變量,編譯器也將產生錯誤。
2.2.3 UART通訊和函數調用
在進行硬件仿真時,需要進行LPC922與PC機之間的UART串行通信,這樣可以把有關調試信息直觀地顯示在超級終端上。初期一直存在無法通信問題,為此調試了有關串口讀寫的底層代碼。
原來的單片機與PC機串口通訊寫程序如下:
原來的UART寫字符串函數writeln是通過調用putchar函數來進行的,但在硬件仿真時一直出錯,當把這部分程序單獨分離出來進行仿真時,卻未出現問題。后來分析考慮推想可能原因是:C51由于內部堆棧空間的限制,在函數調用時,提供的是一種壓縮棧,每個過程被給定一個空間用于存放局部變量,過程中的每個變量都存放在這個空間的固定位置,當多重調用或者遞歸調用這個過程時,會導致變量被覆蓋而出錯。此時應把該函數定義為可重入函數,但是再入函數因為要做一些特殊的處理,一般運行起來都比較慢。在這個程序中寫UART操作對函數putchar調用時,程序的其他部分也在調用該函數,覆蓋了傳遞給putchar函數的參數,導致程序運行出錯。于是對程序做了修改如下:
修改過的程序與原來程序差別在于不再進行putchar函數調用,而直接進行有關操作。修改后再進行硬件仿真,問題得到了很好的解決。由此可以看到,LPC900單片機由于內部堆棧資源有限,在程序設計時當發現程序運行異常時,應特別注意函數調用帶來的問題。當然出現這個問題還可能會有其他方面的原因。
2.2.4 看門狗
當系統處于一些比較惡劣環境(工控、底層采集等),如果系統的抗干擾沒有做好,則容易出現死機現象,這時硬件電路并沒有損壞,只是內部程序運行出現錯誤,必須復位才能恢復,這時可用看門狗來解決問題。看門狗定時器子系統可通過復位使系統從錯誤的操作中恢復。但是任何事情都有其兩面性,當軟件沒能在定時器溢出之前將其清零或者重新賦值,看門狗定時器就會導致系統產生一次復位,從而產生錯誤。
仿真開發板上采用的是LPC922,因此對其復位時的有關看門狗的寄存器進行了具體分析,最后發現問題是由于沒有在一定的時間內及時對看門狗進行重新的配置參數造成的。通過對WDCON,WDL,WFEED1,WFEED2這4個與看門狗有關的寄存器進行合理配置,很好地解決了程序復位問題。
2.2.5 LPC900讀操作和CC1000寄存器讀寫
LPC900系列單片機通常也具有51單片機的一些特點,在使用時也應注意。當其I/O口作為輸入口使用時,有2種工作方式,即讀端口和讀引腳。讀端口實際上并不從外部讀入數據,而只是把端口鎖存器的內容讀到內部總線,經過某種運算或者變換后,再寫回到端口鎖存器。
讀引腳時才真正地把外部的數據讀入到內部總線。這時要先通過指令,把端口鎖存器置1,然后再進行讀引腳操作,否則就可能讀錯。在LPC922讀寫CC1000寄存器過程中涉及到有關讀引腳操作問題,應區別這2種工作方式。
3 結語
在本文介紹的開發平臺上利用LPC900系列單片機實現了根據不同的應用需要對射頻模塊上CC1000寄存器進行有效的參數讀寫配置控制,初步達到了設計要求。對軟件開發中所遇到問題的分析討論,在LPC900系列單片機的應用開發中也具有較廣泛的實際意義。
評論