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