多功能嵌入式車輛行駛監(jiān)控終端設(shè)計
②CAN總線發(fā)送數(shù)據(jù):int CAN_SendData(int can-num,uint32 volatile frameinfo,uint32 volatile senddatal,uint32 volatile senddata2,uint32 volatile canmode)。
函數(shù)入口參數(shù):cannum同上;frameinfo為幀信息,用于設(shè)置幀信息寄存器;senddata1和senddata2分別為要發(fā)送的數(shù)據(jù),用于設(shè)置數(shù)據(jù)寄存器A和B;canmode用于設(shè)置CAN工作模式。
函數(shù)出口參數(shù):數(shù)據(jù)發(fā)送成功返回0,失敗則返回1。
函數(shù)功能:CAN總線進(jìn)行數(shù)據(jù)發(fā)送。
③CAN總線接收數(shù)據(jù):int CAN_RcvData(int can-num。uint32 volatile *pdatal,uint32 volatile *pdata2)。函數(shù)入口參數(shù):cannum同上;pdata1和pdata2為接收數(shù)據(jù)指針。
函數(shù)功能:CAN總線接收數(shù)據(jù),并從數(shù)據(jù)寄存器CANRDA和CANRDB中將數(shù)據(jù)讀進(jìn)對應(yīng)的指針中。
2.4 LIN總線接口電路設(shè)計
LIN是低成本網(wǎng)絡(luò)中的汽車通信協(xié)議標(biāo)準(zhǔn),可以提高通信質(zhì)量、降低成本,將是在汽車中使用汽車分級網(wǎng)絡(luò)的重要因素。LIN總線是一種簡單的單總線系統(tǒng),其軟件協(xié)議棧比較簡單。一個LIN網(wǎng)絡(luò)由一個主機節(jié)點和一個以上的從機節(jié)點組成,所有的節(jié)點都包括有從機服務(wù)程序,用來發(fā)送和接收數(shù)據(jù),僅有一個節(jié)點包含有主機服務(wù)程序。主機程序主要用于發(fā)送同步間隔、同步場和ID場(或命令),以控制和協(xié)調(diào)各個節(jié)點的有序通信。
LPC2292微控制器集成有實現(xiàn)LIN總線節(jié)點的必要硬件,包括UART、捕獲輸入和足夠的定時器,特別是其捕獲輸入功能,為LIN的幀頭識別、幀同步 波特率測量提供了極大的便利。LIN總線接口電路如圖5所示,主要由LIN物理層接口芯片TJA1020構(gòu)成,與LPC2292串口2相連,其主要完成MCU通信信號與LIN物理總線信號之間的相互轉(zhuǎn)換,為MCU提供一個與LIN物理總線的接口。本文引用地址:http://m.butianyuan.cn/article/197872.htm
2.5 紅外通用接口模塊
出于用戶統(tǒng)一采集數(shù)據(jù)需求考慮,本系統(tǒng)設(shè)計了通用的紅外接口。它能夠支持紅外遙控和數(shù)據(jù)通信,支持IrDA協(xié)議,能夠方便地與各種符合協(xié)議標(biāo)準(zhǔn)的設(shè)備進(jìn)行通信。該模塊由HSDL7001編解碼芯片和HSDL3600紅外收發(fā)芯片組成。 HSDL7001與MCU串口相連,原理框圖如圖6所示。
HSDL7001可驅(qū)動IrDA兼容的收發(fā)器,最高傳輸速率達(dá)11 502 kbps,其內(nèi)部有1個SIR編碼器和1個SIR解碼器,支持內(nèi)部(外接3.684 MHz晶振)和外部16XCLK輸入兩種模式。當(dāng)使用內(nèi)部時鐘時,波特率可通過A0、A1和A2進(jìn)行調(diào)整。
3 終端軟件設(shè)計
嵌入式μClinux具有結(jié)構(gòu)小巧、實時性強、穩(wěn)定性高、可定制性強的特點。在網(wǎng)絡(luò)通信方面,嵌入式操作系統(tǒng)支持TCP/IP及其他協(xié)議并提供通信協(xié)議動態(tài)掛接技術(shù),以及操作系統(tǒng)內(nèi)部的進(jìn)程通信應(yīng)用接口技術(shù)。本設(shè)計采用穩(wěn)定的2.4版本的內(nèi)核,并對它進(jìn)行合理的裁減和加載,作為操作平臺。μClinux己對本系統(tǒng)采用的主控器有了很好的支持,但在編譯本系統(tǒng)的內(nèi)核前,需要修改 uclinux/linux-2.4.x/arch/armnommu/config.in文件中關(guān)于外部存儲空間的定義,以滿足本系統(tǒng)關(guān)于外部 Flash、CH375B和LCD液晶屏等器件的存儲空間的劃分。
3.1 進(jìn)程管理
μClinux的進(jìn)程調(diào)度沿用了Linux的傳統(tǒng),系統(tǒng)每隔一定時間掛起進(jìn)程,同時系統(tǒng)產(chǎn)生快速和周期性的時鐘計時中斷,并通過調(diào)度函數(shù)(定時器處理函數(shù))決定進(jìn)程何時擁有相應(yīng)的時間片,然后進(jìn)行相關(guān)進(jìn)程切換,這通過父進(jìn)程調(diào)用:fork函數(shù)生成子進(jìn)程來實現(xiàn)。
本系統(tǒng)中,為每個任務(wù)建立數(shù)據(jù)處理子進(jìn)程,包括:車速、轉(zhuǎn)速等信號采集處理任務(wù)、串口定時通信任務(wù)、USB數(shù)據(jù)傳輸任務(wù)、GPRS數(shù)據(jù)傳輸任務(wù)、LCD數(shù)據(jù)顯示更新任務(wù)等。子進(jìn)程采用由μClinux內(nèi)核中的cron組件觸發(fā)任務(wù)機制。系統(tǒng)中的crontab文件記錄了終端的定時數(shù)據(jù)處理任務(wù)信息(可由系統(tǒng)前臺設(shè)定任務(wù)執(zhí)行周期),時間一到即可被cron觸發(fā)其相應(yīng)的子進(jìn)程。由于采用多進(jìn)程處理,終端可方便地實現(xiàn)多種信號的實時采集以及數(shù)據(jù)的及時處理、存儲和上送。
3.2 設(shè)備驅(qū)動程序編寫
設(shè)備驅(qū)動程序是內(nèi)核與硬件之間的唯一接口,也是內(nèi)核代碼的一部分。當(dāng)硬件設(shè)備要與內(nèi)核進(jìn)行交互時,就會產(chǎn)生一個中斷信號,通過驅(qū)動程序預(yù)定義的入口點進(jìn)入內(nèi)核,入口點將此信號保存在棧中并保存被中斷任務(wù)的寄存器的值。內(nèi)核提取保存在棧中的中斷信號,再由內(nèi)核調(diào)用相應(yīng)的中斷處理程序。應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進(jìn)行操作。
本系統(tǒng)用到LPC22292的4路A/D采樣接口對水溫、剎車氣壓以及發(fā)動機電壓狀態(tài)等參數(shù)進(jìn)行采集。下面以A/D采樣驅(qū)動程序為例進(jìn)行分析:
評論