基于ARM微控制LPC2138的分布式系統設計
無極性連接設計
實現無極性連接有利于工程施工,方便系統擴容。如果采用差分曼徹斯特編碼的方法雖然可靠性高,但需要增加編解碼器,提高了硬件復雜性。本系統采用了異或門和軟件編程的方法實現。即在信息輸入輸出部分增加異或門進行控制,當連接錯誤的時候控制引腳輸出高電平對信息取反,連接正確引腳輸出低電平信息不變。通過程序實現系統的自動信息監測和自動控制,由主機發送系統自檢信息,包括一個正向數據信息和反向的數據信息,在信息中包含正反信息碼,當從機接收到這些信息的時候就可以自動調整自己的控制端進行相應的控制操作。使用這種方式只需增加少許的軟硬件開銷就實現了無極性的控制。
在應用編程(1AP)實現
許多場合(例如地下燈光控制、土壤檢測)在系統布好后就不易進行系統重新配置和程序的更新,所以采用IAP技術不僅使系統的適應能力增強,工作壽命增長而且維護比較方便。
LPC2138的IAP程序位于BootBlock中,占用12KB存儲空間,位于地址0x0007D000-0x0007FFFF的Flash中,同時它的最低64字節也出現在從地址0x00000000開始的Flash存儲器區域,所以復位后中斷向量被激活,跳轉到Boot Block裝載程序的入口。Boot裝載程序控制復位后的初始化操作,并提供實現Flash編程的方法。 IAP程序是Thumb代碼,位于地址0x7FFFFFFO(重映射后地址)處。IAP的功能可用下面的C代碼來調用。
(1)定義IAP程序的入口地址(由于IAP地址的第0位是1,因此,當程序計數器轉移到該地址時會引起Thumb指令集的變化)
#define IAP_LOCATIONOx7FFFFFFl
(2)定義數據結構或指針
unsigned long command[5];
unsigned long result[2];
(3)定義函數類型指針
Typedef void(*IAP)(unsignedint[],unsigned int[]);
IAP iap_entry;
(4)設置函數指針
iaP_entrY = (I A P)lAP_LOCATl0N;
(5)調用IAP
iap_entry(command,result);
程序開發采用ARM公司的集成開發工具ADS1.2,把終端程序分為主程序和更新程序兩部分:
主程序用來實現終端的功能,是需要進行更新的部分,更新程序僅負責主程序的更新。編譯鏈接時主程序占據0~14扇區,更新程序占據22~26扇區,15~21扇區用來存儲待更新主程序。更新程序用到的數據定義到片內R A M中0x40007800~0x40007FFF區域。另外為了實現主程序和更新程序的精確定位,設置ARMLinker中Linktype用Scattered方式,它能根據格式文件中指定的地址映射生成ELF格式的映像文件。
更新過程可大體分為程序更新準備和程序更新兩個階段:
準備階段分三步完成,首先主站通過RS485總線將編譯過的新終端主程序(不包含更新模塊)分成小的數據單元下傳給終端,終端將收到的經校驗正確的數據存儲到片內F1ash存儲器中,然后主站查詢終端代碼的接收情況,并對傳輸錯誤的部分重新下傳進行更正,最后主站發送啟動更新指令,終端檢驗程序數據正確性并置上更新標志,停止刷新看門狗,從而使終端復位。
程序更新分兩步完成,首先終端重啟時檢測到更新標志有效即可調用更新程序進行程序更新,程序更新完成后再次使終端自復位,即可運行更新后的程序代碼,完成程序更新全過程。
另外,由于IAP服務代碼是Thumb指令,用c程序直接調用時須在設置編譯參數ATPCS時選中Arm/ThumbInte2rworking項。由于執行IAP命令使用片內RAM頂端的32個字節空間,因此用戶程序不應該使用該空間。調用IAP功能前,要關閉PLL、MAM(存儲器加速模塊)部件及所有中斷以及正確設置系統時鐘。
結語
基于ARM微處理器的分布式控制系統不僅提高了系統集成度,增強了系統功能和系統穩定性,而且通過其強大的處理能力和IAP技術也使得系統智能化程度提高,符合分布式控制系統的發展方向。
參考文獻:
[1].RS485datasheethttp://www.dzsc.com/datasheet/RS485_585289.html.
[2].LPC2138datasheethttp://www.dzsc.com/datasheet/LPC2138_454528.html.
[3].ARM7TDMI-Sdatasheethttp://www.dzsc.com/datasheet/ARM7TDMI-
評論