lcd上每乙個點是乙個畫素。
電子槍一邊移動,一邊發出顏色。
電子槍如何移動?
clk時鐘線與lcd相連,每來1個clk,移動1個畫素
如何發出顏色?
r、g、b三組訊號線連線lcd確定顏色
電子槍移動一行後,怎麼知道要換行了?
lcd接有hsync (水平同步訊號 ),當接收到hsyn脈衝就跳行。
電子槍移動到最後一行的最後乙個點後,怎麼知道要移動到原點?
lcd接有vsync(垂直同步訊號 ),當接收到vsyn脈衝就移動到原點。
前面的訊號由誰發給lcd?
由s3c2440裡面的lcd控制器來控制發出訊號。
rgb線上的資料從何而來?
記憶體裡面劃分一塊視訊記憶體(framebuffer),裡面存放了要顯示的資料,lcd控制器從裡面將資料讀出來,通過rgb三組線傳給電子槍,電子槍再依次打到顯示屏上。
從原理圖上驗證下上面的知識:
從lcd晶元手冊看lcd引腳功能圖更直觀:2.1. tft lcd panel driving section
vclk是時鐘訊號,每來乙個clk,電子槍就移動乙個畫素;
r0-r7、g0-g7、b0-b7是用來傳輸顏色資料;
vframe是垂直方向同步訊號,frame(幀);
vline是水平方向同步訊號,line(行)。
每個畫素再framebuffer中,佔據多少位bpp(bits per pixels)?
從lcd引腳功能圖里,r0-r7、g0-g7、b0-b7,每個畫素是佔據3*8=24位的,即硬體上lcd的bpp是確定的。
雖然lcd上的引腳是固定的,但我們使用的時候,可以根據實際情況進行取捨,比如我們的jz2440使用的是16bpp,因此lcd只需要r1-r5、g0-g5、b1-b5與soc相連,5+6+6=16bpp,其他引腳接地。每個畫素就只佔據16位資料。
那麼lcd怎麼配合這些訊號呢,參考jz2440_4.3寸lcd手冊_at043tn24的時序如下:
從最小的畫素開始分析,電子槍每次在clk下降沿(本開發板是下降沿)從資料線dn0-dn7上得到資料,發射到顯示屏上,然後移動到下乙個位置。dn0-dn7上的資料**就是前面介紹的framebuffer。就這樣從一行的最左邊,一直移動到一行的最右邊,完成了一行的顯示,假設為x。
當打完一行的最後乙個資料後,就會收到hsync行同步訊號,根據時序圖,乙個hsync週期可以大致分為五部分組成:thp、thb、1/tc、thd、thf。thp稱為脈衝寬度,這個時間不能太短,太短電子槍可能識別不到。電子槍正確識別到thp後,會從最右端移動最左端,這個移動的時間就是thb,稱之為移動時間。thf表示顯示完最右畫素,再過多久hsync才來。
同理,當電子槍一行一行的從上面移動到最下面時,vsync垂直同步訊號就讓電子槍移動回最上邊。vsync中的tvp是脈衝寬度,tvb是移動時間,tvf表示顯示完最下一行畫素,再過多久vsync才來。
假設一共有y行,則lcd的解析度就是x*y。
關於顯示原理,可以參考這篇博
裡面有乙個lcd顯示配置示意圖如下:
當發出乙個hsync訊號後,電子槍就會從最右邊花費hbp時長移動到最左邊,等到了最右邊後,等待hfp時長hsync訊號才回來。因此,hbp和hfp分別決定了左邊和右邊的黑框。
同理,當發出乙個vsync訊號後,電子槍就會從最下邊花費vbp時長移動到最上邊,等到了最下邊後,等待vfp時長vsync訊號才回來。因此,vbp和vfp分別決定了上邊和下邊的黑框。
中間灰色區域才是有效顯示區域。
檢視lcd晶元手冊,檢視相關的時間引數、解析度、引腳極性;
根據以上資訊設定lcd控制器暫存器,讓其發出正確訊號;
在記憶體裡面分配乙個framebuffer,在裡面用若干位表示乙個畫素,再把首位址告訴lcd控制器;
之後lcd控制器就能周而復始取出framebuffer裡面的畫素資料,配合其它控制訊號,傳送給電子槍,電子槍再讓在lcd上顯示出來。以後我們想顯示影象,只需要編寫程式向framebuffer填入相應資料即可,硬體會自動的完成顯示操作。
JAVA第十七課
一 序列化與反序列化 序列化是將物件的狀態寫入特定的流中的過程 反序列化則是從特定的流中獲取資料重新構建物件的過程 二 實現序列化的步奏 1 實現serilizable介面。2 建立物件輸出流 3 呼叫writeobject 方法將物件寫入檔案 4 關閉物件輸出流 三 常見異常 notseriali...
Linux第十七課
一 squid 八爪魚單純的 不加密 埠號為3128 支援http ftp ssl等多種協議的資料快取,可以基於訪問控制列表 acl 和訪問許可權列表 arl 執行內容過濾與許可權管理功能。正向 模式 一般用於企業區域網之中,讓企業使用者統一地通過squid服務訪問網際網路資源,可以在一定程度上減少...
第十七課 C指標(概述)
第十七課 c指標 概述 17.1 什麼是記憶體 通過指標,可以簡化一些 c 程式設計任務的執行,還有一些任務,如 動態記憶體分配 沒有指標是無法執行的。所以,想要成為一名優秀的 c 程式設計師,學習指標是很有必要的。每乙個變數都有乙個記憶體位置,每乙個記憶體位置都定義了可使用連字型大小 運算子訪問的...