莊衍豎 李立軍 沈東凱
華南理工大學(xué),廣東 廣州 510640
當(dāng)今手機(jī)等移動(dòng)終端發(fā)展迅速,其功耗也越來越受到人們的重視。對(duì)于這些移動(dòng)終端系統(tǒng),其顯示子系統(tǒng)的功耗就占了整機(jī)功耗的很大一部分。因此,降低顯示子系統(tǒng)的功耗是實(shí)現(xiàn)移動(dòng)終端低功耗的關(guān)鍵。目前TFT-LCD廣泛用于這些移動(dòng)終端系統(tǒng)。對(duì)于TFT-LCD顯示系統(tǒng)的低功耗,主要是通過降低背光,同時(shí)對(duì)圖像數(shù)據(jù)處理以補(bǔ)償背光強(qiáng)度的降低的算法來實(shí)現(xiàn)[1]。這種算法可以在應(yīng)用程序?qū)崿F(xiàn),也可以用FGPA等以硬件形式實(shí)現(xiàn),但這些實(shí)現(xiàn)方法通用性不強(qiáng)。為此,為提高算法的通用性和易移植性。同時(shí),由于android手機(jī)等大部分的移動(dòng)終端采用的是以Linux內(nèi)核為基礎(chǔ)的操作系統(tǒng),因此本文提出在嵌入式Linux驅(qū)動(dòng)中實(shí)現(xiàn)顯示子系統(tǒng)低功耗的基本架構(gòu)。
本文在嵌入式Linux驅(qū)動(dòng)層中實(shí)現(xiàn)低功耗算法,在嵌入式Linux系統(tǒng)中TFT-LCD顯示子系統(tǒng)的正常顯示依賴于Linux系統(tǒng)中的幀緩沖顯示驅(qū)動(dòng)程序,圖像數(shù)據(jù)傳遞到實(shí)際幀緩沖區(qū)后由TFT-LCD讀取顯示到屏幕上[2]。幀緩沖區(qū)驅(qū)動(dòng)作為應(yīng)用程序和底層硬件之間的橋梁,保證了圖像數(shù)據(jù)從應(yīng)用層到底層硬件的正確傳遞。本文將低功耗算法實(shí)現(xiàn)于實(shí)際幀緩沖驅(qū)動(dòng)程序中[3],可以做到對(duì)應(yīng)用程序完全透明,使得用戶不易察覺到該算法模塊的存在,具有很好的移植性和通用性。本文主要是提出在以Linux內(nèi)核為基礎(chǔ)的操作系統(tǒng)下低功耗的驅(qū)動(dòng)層實(shí)現(xiàn)架構(gòu),其顯示子系統(tǒng)的基本架構(gòu)如圖1所示。
在整個(gè)顯示子系統(tǒng)框架中,主要涉及3大部分:上層是應(yīng)用程序部分,中間層是驅(qū)動(dòng)程序部分、底層是硬件邏輯部分。本文主要是提出驅(qū)動(dòng)程序部分中低功耗的基本架構(gòu)。本文提出的驅(qū)動(dòng)程序架構(gòu)是在Linux內(nèi)核中實(shí)現(xiàn),主要有內(nèi)存分配及映射,用于暫時(shí)存儲(chǔ)應(yīng)用層傳遞下來的圖像數(shù)據(jù);PWM背光調(diào)節(jié)部分,通過改變占空比來調(diào)節(jié)背光;圖像像素處理部分,根據(jù)原始圖像數(shù)據(jù)調(diào)整圖像像素值;動(dòng)態(tài)定時(shí)器部分,保證以上三部分算法的實(shí)時(shí)執(zhí)行。
圖1 顯示子系統(tǒng)的基本架構(gòu)
在嵌入式Linux顯示子系統(tǒng)中,需要對(duì)圖像進(jìn)行處理后才寫入到幀緩沖區(qū)進(jìn)行顯示。因此,在Linux內(nèi)核中需要分配內(nèi)存在存儲(chǔ)應(yīng)用程序傳遞下來的圖像數(shù)據(jù)。Linux內(nèi)核中的物理地址內(nèi)存是通過分頁的機(jī)制是實(shí)現(xiàn)的,將整個(gè)內(nèi)存劃分為無數(shù)的4K大小頁,而且是采用了伙伴關(guān)系分配算法來進(jìn)行分配的,可采用內(nèi)核中的__get_free_pages()函數(shù)來分配內(nèi)存空間。
在嵌入式Linux系統(tǒng)中,應(yīng)用程序所要顯示的圖像數(shù)據(jù)需要傳遞到內(nèi)核空間,然而應(yīng)用程序是不能直接訪問到內(nèi)核空間的,因此需要將內(nèi)存存儲(chǔ)空間映射到用戶空間,方便應(yīng)用程序直接讀寫數(shù)據(jù)。在顯示子系統(tǒng)驅(qū)動(dòng)程序中需要一個(gè)映射函數(shù)mmap()來實(shí)現(xiàn)內(nèi)存空間到用戶空間的映射。
嵌入式Linux系統(tǒng)上的背光驅(qū)動(dòng)程序控制著TFT-LCD的顯示亮度,在背光驅(qū)動(dòng)程序中,采用PWM信號(hào)控制背光的強(qiáng)度,通過改變PWM信號(hào)的占空比大小可以自由的控制背光強(qiáng)度的大小。
圖像像素處理主要是根據(jù)圖像數(shù)據(jù)內(nèi)容來決定,可采用標(biāo)準(zhǔn)亮度補(bǔ)償?shù)然镜膱D像增強(qiáng)算法。本文主要是提出驅(qū)動(dòng)低功耗的架構(gòu),對(duì)于圖像處理的具體算法不做深入研究。
每次應(yīng)用程序把圖像數(shù)據(jù)發(fā)送到內(nèi)存存儲(chǔ)空間之后,都需要對(duì)圖像進(jìn)行處理和調(diào)整背光亮度。然而,對(duì)于Linux顯示設(shè)備驅(qū)動(dòng)程序來說,循環(huán)重復(fù)的執(zhí)行圖像處理程序和背光調(diào)節(jié)程序需要在驅(qū)動(dòng)程序中創(chuàng)建一個(gè)動(dòng)態(tài)定時(shí)器。這樣,就能保證圖像處理算法和背光亮度算法的準(zhǔn)確執(zhí)行,并把調(diào)整后的像素值送到實(shí)際的幀緩沖里。
在Linux內(nèi)核提供了一組與定時(shí)器相關(guān)的用來簡化管理定時(shí)器的操作,這些接口是在文件kernel/timer.c中實(shí)現(xiàn)的。只需要在顯示驅(qū)動(dòng)初始化的時(shí)候創(chuàng)建并初始化一個(gè)動(dòng)態(tài)定時(shí)器,然后激活這個(gè)定時(shí)器,在定時(shí)器處理函數(shù)中重新調(diào)度注冊(cè)該定時(shí)器,就能實(shí)現(xiàn)定時(shí)器的周期運(yùn)行。
A.應(yīng)用程序?qū)D像數(shù)據(jù)傳遞到內(nèi)存存儲(chǔ)空間;
B.圖像像素處理部分處理內(nèi)存存儲(chǔ)空間的數(shù)據(jù)并給出亮度調(diào)整系數(shù),然后將處理后的數(shù)據(jù)傳送到實(shí)際幀緩沖區(qū);
C.PWM背光調(diào)節(jié)部分根據(jù)亮度調(diào)整系數(shù)調(diào)整占空比,從而改變背光強(qiáng)度
D.動(dòng)態(tài)定時(shí)器保證B、C步驟的實(shí)時(shí)周期運(yùn)行。
本文提出了在Linux系統(tǒng)下移動(dòng)終端設(shè)備顯示子系統(tǒng)低功耗設(shè)計(jì)的基本架構(gòu),并給了低功耗算法的基本執(zhí)行流程,為顯示子系統(tǒng)的低功耗算法在Linux內(nèi)核驅(qū)動(dòng)層的實(shí)現(xiàn)和移植提供了基礎(chǔ)。
[1]盧春鵬. 背光調(diào)節(jié)在降低液晶顯示器功耗中的作用[J]. 電子設(shè)計(jì)應(yīng)用, 2009, 4: 55-59.
[2]劉增水, 胡力剛. 基于 ARM 芯片的 TFT-LCD 顯示系統(tǒng)設(shè)計(jì)[J]. 儀表技術(shù), 2009, 5: 43-45.
[3]石曉娟, 張哲. 基于亮度補(bǔ)償算法的顯示子系統(tǒng)低功耗的設(shè)計(jì)[J]. 電子技術(shù), 2009, 11: 013.