嵌入式Linux下S3C2410的調色板彩色顯示
1.3 調色板顏色的選擇
調色板中顏色的選擇可以由用戶(hù)任意定義,但為了編程方便,顏色的選取應遵循一定的規律。例如在Windows編程中,系統保留了20種顏色。另外,在Web編程中,也定義了216種Web安全色,這些顏色可以盡量保留。2S3C2410調色板在嵌入式Linux系統下的使用ARM實(shí)現圖像顯示時(shí),由LCD控制器將存儲系統中的視頻緩沖內容以及各種控制信號傳送到外部LCD驅動(dòng)器,然后由LCD驅動(dòng)器實(shí)現圖像數據的顯示。實(shí)際應用中,常通過(guò)驅動(dòng)程序由操作系統對寄存器、調色板進(jìn)行配置。以Linux 2.4內核為例,對調色板的配置是在驅動(dòng)程序S3C2410fb.c中完成的。
在一些公司Linux源碼包的S3C2410fb.c文件中,并沒(méi)有對調色板進(jìn)行配置,因此在8位以下的顯示設置下。LCD不能正常工作。若需要使用調色板,必須對此文件進(jìn)行修改。
2.1 驅動(dòng)程序的修改
查S3C2410數據手冊,調色板的物理起始地址為0x4d000400,應先將調色板的物理地址映射到內核中的虛擬地址,然后對其進(jìn)行賦值。具體步驟如下:
(1)在S3C2410.h文件中添加:
#define MYPAL(Nb)__REG(Ox4d000400+(Nb)*4)
其作用是實(shí)現物理地址到虛擬地址的映射。
(2)在S3C24lOfb.h文件,通過(guò)下列語(yǔ)句定義256種顏色。
static const u_short my_color[256]={0x0000,0x8000,…}:
數組中的每個(gè)16位二進(jìn)制數表示一種顏色,RGB分量采用的是5:6:5格式。
(3)在S3C2410fb.c文件的S3C2410fb-activate_var(…)函數中,通過(guò)下列語(yǔ)句對這256個(gè)調色板進(jìn)行賦值。

(4)另外,注意改變LCD控制寄存器LCDCON1的BPPMODE值,設定為需要的顏色深度。
(5)重新編譯內核,燒寫(xiě)內核。
2.2 應用程序的編寫(xiě)
當S3C2410用于嵌入式Linux操作系統時(shí),其圖形功能一般是依靠幀緩存(Frame buffer)實(shí)現的。屏幕上的每個(gè)點(diǎn)都被映射成一段線(xiàn)性?xún)却婵臻g,通過(guò)應用程序改變這段內存的值,就可以改變屏幕的顏色。當色深在16位以上時(shí),用戶(hù)直接指定顏色的RGB分量;當色深在8位以下時(shí),用戶(hù)應當指定顏色在調色板中的索引值。
當使用MiniGUI等嵌入式圖形系統時(shí),只需要將界面元素的顏色值設為所需顏色的索引值即可。例如:
WinElementColors[i]=142;
就是將WinElementColors[i]的顏色設置為索引號為142的調色板顏色。
3 結語(yǔ)
在筆者開(kāi)發(fā)的某型指揮車(chē)仿真終端中,其顯示分辨率設置為640×480。如果色深設置為16 b/p,在系統使用時(shí),畫(huà)面將會(huì )出現明顯的抖動(dòng)、不連貫,這是由于芯片的運算負荷過(guò)重造成的。如果按本文中提到的方法對顯示驅動(dòng)加以修改,采用8位色深顯示,顏色的選取可以滿(mǎn)足需要,畫(huà)面的顯示將明顯穩定。這說(shuō)明,在顯示分辨率較高,色彩種類(lèi)要求比較簡(jiǎn)單的嵌入式應用中,調色板技術(shù)是一個(gè)非常值得重視的選擇。本文引用地址:http://dyxdggzs.com/article/151827.htm linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論