田志強(qiáng) 劉軍卿 周聞云 沈?yàn)I 董自衛(wèi)
【摘要】 通過(guò)對(duì)ARM11嵌入式系統(tǒng)Linux下程序設(shè)計(jì)的研究,分析了ARM11嵌入式系統(tǒng)Linux下控制液晶顯示的驅(qū)動(dòng)程序和應(yīng)用程序的實(shí)現(xiàn)方法。并以液晶屏NS320240A為例,采用直接讀寫(xiě)GPIO的驅(qū)動(dòng)方式,實(shí)現(xiàn)了對(duì)該液晶屏的顯示控制,實(shí)際應(yīng)用表明:用該方法控制液晶顯示驅(qū)動(dòng)程序簡(jiǎn)單、移植性強(qiáng)、程序調(diào)試方便,對(duì)在Linux下實(shí)現(xiàn)其它液晶屏的控制以及驅(qū)動(dòng)程序的編寫(xiě)具有指導(dǎo)意義。
【關(guān)鍵詞】 ARM11 Linux 液晶顯示 驅(qū)動(dòng)程序 應(yīng)用程序
隨著信息化、智能化和網(wǎng)絡(luò)化的發(fā)展,嵌入式系統(tǒng)近年來(lái)得到了飛速的發(fā)展,被廣泛的應(yīng)用于狀態(tài)監(jiān)測(cè)、遙測(cè)控制、自動(dòng)化數(shù)據(jù)采集和無(wú)線監(jiān)控等諸多領(lǐng)域。
S3C6410是三星公司生產(chǎn)的基于ARM1176JZF-S 核的嵌入式ARM11處理器,主頻為533MHz,最高可達(dá)667MHz,較ARM7主頻提高了十倍,且擁有更豐富的片上資源,處理速度更快,功能更強(qiáng)。
一、Linux下液晶顯示的驅(qū)動(dòng)程序設(shè)計(jì)
1.1液晶顯示驅(qū)動(dòng)方式分析
Linux操作系統(tǒng)由Linux內(nèi)核、Linux Shell和文件結(jié)構(gòu)3部分組成。Linux系統(tǒng)應(yīng)用程序通過(guò)系統(tǒng)調(diào)用,如ioctl、open、close等來(lái)調(diào)用內(nèi)核提供的各種服務(wù),而內(nèi)核通過(guò)相應(yīng)的設(shè)備驅(qū)動(dòng)來(lái)調(diào)用和管理各類硬件設(shè)備,因此要實(shí)現(xiàn)液晶顯示的控制首先要編寫(xiě)相應(yīng)的驅(qū)動(dòng)程序。
液晶屏選擇NS320240A集成了SED1330液晶顯示控制器,因此可以選用直接讀寫(xiě)GPIO寄存器的方法實(shí)現(xiàn)LCD驅(qū)動(dòng)。
為了提供驅(qū)動(dòng)程序的可移植性和程序調(diào)試的方便,本文采用控制時(shí)序在應(yīng)用層的直接讀寫(xiě)GPIO的驅(qū)動(dòng)方式。
1.2液晶屏NS320240A顯示驅(qū)動(dòng)程序的實(shí)現(xiàn)
NS320240A的驅(qū)動(dòng)程序主要包括以下幾個(gè)函數(shù):
(1)寫(xiě)GPIO控制寄存器函數(shù)
函數(shù)定義為S3C6410_Set_Com(long int data),該函數(shù)是用于設(shè)置與LCD控制器相連GPIO的控制寄存器,核心語(yǔ)句是writel(com, S3C64XX_GPICON)。
writel(com, S3C64XX_GPICON)中,writel是驅(qū)動(dòng)層的寫(xiě)函數(shù),com是寫(xiě)入控制寄存器的數(shù)據(jù),通過(guò)此數(shù)據(jù)可以對(duì)GPIO口進(jìn)行輸入、輸出和高阻三態(tài)設(shè)置, S3C64XX_GPICON是S3C6410中第I組GPIO口的控制寄存器。
(2)讀寫(xiě)GPIO數(shù)據(jù)寄存器函數(shù)
函數(shù)定義為S3C6410_Set_dat(unsigned int data),該函數(shù)是讀寫(xiě)與LCD控制器相連GPIO的數(shù)據(jù)寄存器,與寫(xiě)控制寄存器一樣,寫(xiě)數(shù)據(jù)的語(yǔ)句也是writel(data, S3C64XX_GPIDATA)。
writel(data, S3C64XX_GPIDATA)中,data是寫(xiě)入數(shù)據(jù)寄存器的數(shù)據(jù),該數(shù)據(jù)是通過(guò)系統(tǒng)調(diào)用接口從應(yīng)用層讀進(jìn)來(lái)的, S3C64XX_GPIDATA是S3C6410中第I組GPIO口的數(shù)據(jù)寄存器。讀指令為readl(data, S3C64XX_GPIDATA),從GPIO口讀回的數(shù)據(jù)就放在data中。
完成上述驅(qū)動(dòng)程序后,應(yīng)用程序通過(guò)系統(tǒng)調(diào)用iotcl(fd,1,xx)和iotcl(fd,2,xx)就可以實(shí)現(xiàn)對(duì)GPIO口控制器和數(shù)據(jù)寄存器的讀寫(xiě),按照NS320240A的控制器SED1330的讀寫(xiě)時(shí)序進(jìn)行讀寫(xiě)操作就可以實(shí)現(xiàn)NS320240A的顯示控制。
三、結(jié)束語(yǔ)
該文分析了ARM11嵌入式Linux程序設(shè)計(jì)的方法,在分析總結(jié)兩種LCD驅(qū)動(dòng)思想的、優(yōu)缺點(diǎn)的基礎(chǔ)上,采用控制時(shí)序在應(yīng)用程序中直接讀寫(xiě)GPIO的驅(qū)動(dòng)方式完成了驅(qū)動(dòng)程序設(shè)計(jì),并根據(jù)NS320240A液晶屏控制其SED1330的讀寫(xiě)時(shí)序完成了應(yīng)用程序,最終實(shí)現(xiàn)了ARM11嵌入式系統(tǒng)Linux下的液晶顯示控制。
實(shí)際測(cè)試表明該方式使得控制LCD的顯示液晶顯示驅(qū)動(dòng)程序簡(jiǎn)單、移植性強(qiáng)、程序調(diào)試方便,開(kāi)發(fā)較為靈活,對(duì)于嵌入式系統(tǒng)開(kāi)發(fā)中,在Linux操作系統(tǒng)下驅(qū)動(dòng)程序和應(yīng)用程序的設(shè)計(jì)具有很大的借鑒意義。