ARM11嵌入式系統實(shí)時(shí)網(wǎng)絡(luò )通信和LCD顯示的實(shí)現
摘要:通過(guò)對ARM11嵌入式系統Linux下的實(shí)時(shí)網(wǎng)絡(luò )通信和LCD顯示進(jìn)行研究,分析了網(wǎng)絡(luò )通信協(xié)議和LCD驅動(dòng)方式。在ARM11嵌入式系統下設計了直接讀寫(xiě)GPIO的LCD顯示程序,并實(shí)現網(wǎng)絡(luò )終端服務(wù)器和客戶(hù)端雙線(xiàn)程的工作模式,解決了網(wǎng)絡(luò )通信實(shí)時(shí)性和可靠性的問(wèn)題。實(shí)際應用表明:該方法LCD顯示速度快、網(wǎng)絡(luò )通信實(shí)時(shí)性強可靠性好、ARM11和計算機的資源利用率高。
關(guān)鍵詞:ARM11;實(shí)時(shí)網(wǎng)絡(luò )通信;LCD;Linux
0 引言
ARM11主頻為533 MHz,最高可達667 MHz,較ARM7主頻提高了10倍,且擁有更豐富的片上資源,處理速度更快,功能更強?;谏鲜鎏攸c(diǎn),ARM11可完全適應實(shí)時(shí)性較強的網(wǎng)絡(luò )終端的設計。
在以ARM11為核心的網(wǎng)絡(luò )終端設計中,需要LCD在終端實(shí)時(shí)顯示網(wǎng)絡(luò )通信的各項參數和設備工作狀態(tài),LCD的顯示內容依靠網(wǎng)絡(luò )傳輸數據中的指令來(lái)控制,而網(wǎng)絡(luò )終端的操作數據也要通過(guò)網(wǎng)絡(luò )傳輸到計算機,因此網(wǎng)絡(luò )通信和LCD顯示需要很強的實(shí)時(shí)性才能合理使用計算機和ARM11的資源,從而提高系統的運行效率。
該文以ARM11處理器S3C6410為平臺,基于Linux操作系統設計了一種在A(yíng)RM11內核直接控制LCD顯示的方法,并采用TCP/IP協(xié)議設計了一種同時(shí)作客戶(hù)端和服務(wù)器的終端工作模式。
1 ARM11網(wǎng)絡(luò )終端實(shí)時(shí)通信特性分析
1.1 數據流分析
在計算機與ARM11通信的系統中,計算機的處理速度比ARM11快很多,如將數據處理等工作量大的任務(wù)分配給計算機去處理,則可大大減少ARM11的資源消耗,ARM11就可以更快地去響應其他操作,因此為了減少ARM11顯示任務(wù)的時(shí)間,可以將ARM11要顯示圖片的數據處理交給計算機,計算機按照ARM11顯示的數據要求處理好數據后再通過(guò)網(wǎng)絡(luò )傳到ARM11再完成LCD的顯示。此外,ARM11網(wǎng)絡(luò )終端還要向計算機傳輸設備工作狀態(tài)信息,計算機則還要向網(wǎng)絡(luò )終端傳輸一些控制命令。
1.2 通信協(xié)議分析
網(wǎng)絡(luò )通信必然涉及到通信協(xié)議的問(wèn)題,目前普遍采用的網(wǎng)絡(luò )協(xié)議有UDP協(xié)議和TCP/IP協(xié)議。在實(shí)時(shí)性要求較高的網(wǎng)絡(luò )通信中希望能做到想發(fā)就發(fā),有數據就收。兩個(gè)協(xié)議中UDP比較符合這個(gè)要求,但是它不能保證數據傳輸的有效性,當數據較多時(shí)很可能會(huì )發(fā)生嚴重的丟包現象,尤其是像LCD顯示的圖片數據這類(lèi)數據較大而且傳輸頻繁的數據,可能會(huì )嚴重影響液晶顯示這是不能被接受的。相比之下TCP/IP協(xié)議能夠保證數據傳輸的有效性。
在TCP/IP協(xié)議ARM11網(wǎng)絡(luò )終端作為服務(wù)器或者客戶(hù)端是不能做到隨時(shí)想發(fā)就發(fā),有數據就收的,比如作為服務(wù)器接收完來(lái)自計算機的數據后,如果計算機斷開(kāi)了連接,那么網(wǎng)絡(luò )終端再想向計算機發(fā)送數據,就必須等到計算機再次作為客戶(hù)端向終端發(fā)起連接才行。為了解決TCP/IP協(xié)議的這種問(wèn)題,本文設計了網(wǎng)絡(luò )終端和計算機既作客戶(hù)端又作服務(wù)器的雙線(xiàn)程工作模式,在這種工作模式下終端和計算機隨時(shí)能發(fā)起和斷開(kāi)連接,從而做到隨時(shí)想發(fā)就發(fā),有數據就收。
2 LCD顯示的軟件設計
2.1 LCD的顯示方法分析
(1)基于Framebuffer驅動(dòng)方式。在Linux下有完善的Framebuffer驅動(dòng)程序,所以可以利用ARM11集成的LCD控制器采用Framebuffer控制LCD,Framebuffer是顯示設備抽象為幀緩沖區,用戶(hù)通過(guò)內存映射將其映射到進(jìn)程地址空間之后,就可以直接進(jìn)行讀寫(xiě)操作,而操作可以直接反應到屏幕上。該方法反應速度快、執行效率高,應用程序簡(jiǎn)單,但是底層硬件驅動(dòng)復雜,硬件變更后編寫(xiě)難度大,不易實(shí)現。不帶控制器的LCD通常采用這種方法。
(2)直接讀寫(xiě)GPIO驅動(dòng)方式。目前有很多類(lèi)型的液晶屏自帶LCD控制器,ARM向控制器寫(xiě)控制指令和數據就可以完成對LCD的初始化和內容的顯示。這種顯示方法軟件設計相對簡(jiǎn)單,占用的代碼空間小,可以通過(guò)簡(jiǎn)單的控制芯片進(jìn)行驅動(dòng)。針對自帶控制器的LCD,本文設計了直接讀寫(xiě)GPIO驅動(dòng)LCD的方法。該方法在底層驅動(dòng)向LCD控制器和LCD的應用程序提供接口,LCD控制器的讀寫(xiě)時(shí)序全部在底層驅動(dòng)中完成,底層驅動(dòng)向應用程序提供初始化接口和顯示數據接口。該方法應用程序和內核的交互少,程序執行效率高。
2.2 LCD顯示的實(shí)現
通過(guò)上述分析,本文設計直接讀寫(xiě)GPIO驅動(dòng)帶LCD控制器的液晶屏,該方法的程序結構如圖1所示。
在底層驅動(dòng)中主要包括以下幾個(gè)函數:
(1)初始化函數s3c6410_inti。該函數包括2部分的初始化:一是對ARM11用于同LCD控制器相連GPIO口控制寄存器的初始化,核心語(yǔ)句是writel(tmp,S3C64XX_GPICON),其中writel是驅動(dòng)層的寫(xiě)函數,tmp是寫(xiě)入控制寄存器的數據,S3C64XX_GPICON是S3C6410中第I組GPIO口的控制寄存器,如果采用別的GPIO口就改用別的控制寄存器宏定義;二是對LCD控制器初始化。
(2)寫(xiě)數據函數s3c6410_WRData和寫(xiě)命令函數s3c6410_WRCommand。這2個(gè)函數按照具體LCD控制寄存器的寫(xiě)數據時(shí)序和寫(xiě)命令時(shí)序,完成對LCD控制器的寫(xiě)數據和寫(xiě)命令,向GPIO寫(xiě)數據的函數是writel(tmp,S3C64XX_GPIDAT),writel和tmp與上述相同,S3C64XX_GPIDAT是S3C64 10中第I組GPIO口的數據寄存器。
(3)顯示函數s3c6410_LCDdisplay。該函數通過(guò)調用寫(xiě)命令函數和寫(xiě)數據函數到達在液晶屏上具體位置顯示具體圖片或文字的效果。
(4)系統調用接口函數s3c64xx_ioctl(structfile*file,int cmd,long int data)。該函數定義s3c6410_inti和s3c6410_LCDdisplay2個(gè)函數接口通過(guò)系統調用iotcl(fd,1,xx)和iotcl(fd,2,xx),以供應用程序調用,應用程序使用iotcl(fd,1,xx)就可初始化結晶屏,只需要向s3c6410_LCDdisplay的接口iotcl(fd,2,xx)中寫(xiě)數據就實(shí)現了數據的LCD顯示。
評論