小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

基于ARM S3C2410的LCD開發(fā)過程

 cici5177 2010-11-04
TFT LCD系統基本上由三部分構成:TFT主控制器、LCD驅動電路和單片LCD。其中TFT控制器產生符合TFT接口格式的控制信號。但是,市面上的LCD 種類太多,而且各自的時序都不一樣,所以我們一般需要一個LCD驅動電路將TFT接口的信號轉化到符合目標LCD的特定的LCD接口信號。這就是我們所看到了LCD背后總會有一塊PCB板的原因之一。LCD驅動電路除了充當時序轉換的角色外,還負責提供LCD正常工作所需要的各種電壓,包括:
背光電壓:分為兩種,LED型(21.6V左右);CCFL型(360~500V交流)
Gate電壓:一般為正負15V
Commom電壓:一般為2V左右的交流電壓
Analog Vcc:一般為5V
Digital Vcc:一般為3.3V
Gray level reference Voltage:我最近在好幾塊屏上都發(fā)現需要這個電壓。這是一組電壓,一般有V0~V10,每個電壓的值都在0~5V之間,而且是交流電壓,要求隨行同步信號一起變化。這個我不知道怎么驅動,明白的朋友煩請告訴我一聲!
二. TFT接口時序說明
很多朋友對得S3C2410 TFT液晶接口的時序比較煩,其實解剖開來非常簡單。先來看TFT接口的信號線,我們以16bit為例,信號線共5組20根:
¢ VD[23:19]、VD[15:10]、VD[7:3]:分別對應R、G、B分色信息,一個16bit的組合代表了一個象素的信息。
¢ VCLK:數據傳輸時鐘,在數據有效的情況下(VM),每個周期傳輸一個象素的信息。
¢ HSYNC:行同步信號,持續(xù)若干個時鐘周期,表示新的一行傳輸即將開始。
¢ VSYNC:幀同步信號,持續(xù)若干個行周期,表示新的一幀傳輸將開始。
¢ VDEN:數據有效指示,該信號有效下的數據長度剛好為1行。
另外,S3C2410還提供了LEND信號表示一行結束,該信號大可不必理會。
現在我們來討論時序,有一點我們明白:那就是一個VCLK周期傳輸一組VD信號,從而給一個pixel著了色。

這里開始展開,以240X320的屏為例,現在要點亮一行,那么肯定要有240個VCLK周期將240個pixel的VD值輸出,而且這240個周期內
VDEN應該一直是有效的?,F在我們的思路從點擴展到了行,理想情況下,兩行之間不需要間隔,也就是說這一行結束馬上傳輸下一行的第一個pixel的
VD。但是這樣做并不好,因為一個點的偏差會造成滿盤皆輸。因此我們引入了行同步HSYNC信號,也就是說在傳輸完一行的數據后,先歇一會兒,等待若干個
時鐘(我們稱之為后插入等待周期);然后我們送一個行同步信號,當然這個信號的有效周期數我們也能控制(我們稱之為同步周期);之后呢,我們在等一會,讓
LCD驅動電路準備好接收,我們在把一行的數據發(fā)下去(這個等待時間我們稱之為前插入等待周期)。好了,有了這個說明后我們可以把行顯示的時序給出來了:
(S3C2410 datasheet, Figure 15-6)
從圖中我們可以看到:HSPW+1、HBPD+1、HFPD+1就是我們分別定義了同步周期、前插入等待周期、后插入等待周期。而HOZVAL+1則是一行的有效象素數目。這些都可以在寄存器里面進行設置。
說完行與行之間的顯示,我們就可以擴展到幀與幀之間的顯示。我們很容易想到,在幀的領域里面也應該是類似于行的結構,同樣包含了同步周期、前插入等待周期、后插入等待周期,給出時序圖:S3C2410 datasheet, Figure 15-6
需要注意的是:在幀的領域里,我們所說的周期單位是一行;而在行的時候,我們所說的周期單位是VCLK時鐘周期。
經過上述的分析,我們可以把TFT
LCD的接口歸納到8個參數上:HSPW、HBPD、HFPD、HOZVAL、VSPW、VBPD、VFPD、LINEVAL。另外,通過上述分析,我們
可以看到,顯示一幀圖像總共需要的VCLK周期為:(HSPW+HBPD+HFPD+HOZVAL+4)X(VSPW+VBPD+VFPD+
LINEVAL+4),VCLK是可調的,因此通過選擇適當的分頻比保證幀率在60Hz左右就可保證液晶的正常工作了。
三. 數據buffer和Scrolling實現說明
很多人可能都會問驅動LCD的數據應該放在什么地方,是怎么被搬運過去的。其實很簡單,S3C2410的LCD控制模塊自帶了DMA控制器,我們只要在SDRAM里面開一塊空間,然后設定要DMA的起始地址(LCDSADDR1寄存器)和結束地址(LCDSADDR2)
就OK了。

過S3C2410的寄存器提供了一種滾動的顯示模式,這個主要是靠LCDSADDR3寄存器實現的。理解起來可能有些麻煩,我們可以這樣想象:滾動顯示的
含義就好比是我們拿著一個放大鏡在大地圖上移動,而放大鏡下方的圖像就是我們應該顯示的東西。假設LCD的大小還是240X320的,我們在SDRAM
中開了一個480X640個象素的緩沖區(qū),相當于四倍圖像的大小。那么如果我們要截取一塊240X320方形畫面,就要在取完一行的數據
(PAGEWIDTH=240)以后跳過OFFSIZE(此處240)個象素(對于16bit)再取數據,得到的才是大畫面里對應的下一行數據??偠?br>之,滾動顯示是一種用空間來換取軟件效率的方法。需要注意的是,OFFSIZE和PAGEWIDTH的值必須和LCD的大小已經緩沖區(qū)的實際尺寸對應上,
不然屏幕就亂閃了;另外,LCDSADDR2指向的是整個大緩沖區(qū)之后的第一個地址。
四. 調試經過
這兩天新板子還沒有到,所以有點悶??吹嚼习迥抢镉幸粔K液晶,就拿過來先玩起來。該LCD是華恒S3C2410的配套產品,型號為sharp的LQ035Q7DB02,3.5寸,240X320,16bit TFT,帶觸摸屏。
由于接口不兼容的,所以只好把一端的插槽剪掉,一根根線直接往我的板子焊,這種臟活干多了也沒什么感覺了。弄好之后就開始跑2410test軟件了,因為原先看過TFT接
口了,知道有幾個參數是肯定要改的,也就是我前面說的。但是奇怪的是無論我怎么改,屏幕的中間總是有一條黑帶無法顯示。我嘗試著全屏顯示一種顏色
(0xf800),但是還是有好幾個區(qū)域是黑色的。這個問題一直從昨天下午開始糾纏到晚上,很郁悶。對于弄慣硬件的我來說,忍不住想看看2410
輸出的時序是不是正確的。行好板子上有FPGA,因此我就借助quarters的SignalTap抓TFT的
幾個輸出信號。不看不知道,一看嚇一跳,信號完全不對,HSYNC和VSYNC的輸出極性是反的,而且前后的插入周期也和我配置的大不相同。奇怪的是不管
我怎么改,輸出基本上都是那個樣子, HSYNC和VSYNC的輸出極性始終是反的。我開始懷疑這塊S3C2410出了問題。
一個晚
上也在郁悶中過去了,帶了一本S3C2410的Datasheet爬上床,想在睡覺前在把LCD控制模塊好好讀讀。翻了幾頁,我又看到
LPC3600這個東西,前幾次也看到過,但是不知道是什么東西,網上搜了一下網友們也大多說不明白,所以就沒深究。但是直覺告訴我,肯定和它有關。我細
細看了一下,終于明白這個家伙是干什么的了。實際上是三星在3C2410里面直接包含了一個LCD控制器,就相當于我們前面說的LCD驅動電路的時序轉換
部分,該控制器LPC3600就是面向他們自己的LCD
LTS350Q1-PD1/2的。三星這么做應該說出于兩個目的:1,節(jié)省自身的系統開發(fā)成本,他們用2410做產品的時候就不用外加芯片完成時序轉換功
能了;2,推銷自己的LCD產品。但是對我們使用其它公司的LCD產品時,這個模塊顯然是沒有用的。而我在讀2410test代碼的時候,記得是將它使能
的??梢哉f,我的直覺越來越強烈,可惜要睡覺了,只能把結
果留到第二天。
今天一大早就起來了,我隱約記得這一個念頭甚至在夢里都出現了。我的想法立刻得到了驗證,圖像已經能全屏顯示了,除了頂底一兩行的不正常之外,別的都OK了,時序一抓也正常。
總結得到兩點:1,當外接其它顯示屏的時候,LPCSEL寄存器一定要清零。
2,調試不能蠻干,一時的靈感勝過一天的苦力。
接下來的事情就簡單了,我開始調整參數以確保全屏的正常顯示。要指出的是,垂直方向的問題并不一定是V類的參數出了問題,也可能是H方向上的參數沒有調整對產生的。
接下來,要在WINCE和Linux上進行LCD參數的設置,煩請wince下做過LCD驅動的朋友告訴我該如何做修改,不甚感激!

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多