2440 裸機 之lcd驅動 編寫出現問題及感悟

2021-06-07 18:06:16 字數 2423 閱讀 8796

無論對ttl介面液晶面板,還是對lvds介面面板,

畫素時鐘訊號都有以下兩個方面的作用:   

(1)指揮rgb訊號按順序傳輸。畫素時鐘訊號就像指揮員指揮隊伍時發出的口令「一、二,一、二……」,數字rgb訊號在畫素時鐘訊號的作用下,按照一定的順序,由驅動板傳輸到液晶面板中,使各電路按照一定的節拍協調地工作。   

(2)確保資料傳輸的正確性。無論是驅動板電路,還是液晶面板電路,在讀取數字rgb訊號時,都是在畫素時鐘的作用與控制下進行的,各電路只有在畫素時鐘的下降沿(或上公升沿)到來時才對數字rgb資料進行讀取,以確保讀取資料的正確性。圖所示為畫素時鐘與數字rgb訊號之間的對應關係示意圖(1024×768液晶面板 )。  

人機互動是嵌入式系統必須具有的功能。比較簡單的人機互動有按鍵、led、蜂鳴器,稍微複雜的有7段數碼管和點陣。但如今這些都不能滿足人們的需求了,所以又出現了lcd和觸控螢幕技術。s3c2440具有lcd和觸控螢幕介面,可以很好的連線lcd和觸控螢幕。這篇文章主要介紹tft型lcd的用法。

要想正確使用lcd,必須注意兩點:1、時序;2、顯示快取區。

1、時序

lcd一般需要三個時序訊號:vsync、hsync和vclk。vsync是垂直同步訊號,在每進行乙個幀(即乙個屏)的掃瞄之前,該訊號就有效一次,由該訊號可以確定lcd的場頻,即每秒螢幕重新整理的次數(單位hz)。hsync是水平同步訊號,在每進行一行的掃瞄之前,該訊號就有效一次,由該訊號可以確定lcd的行頻,即每秒螢幕從左到右掃瞄一行的次數(單位hz)。vclk是畫素時鐘訊號。

s3c2440處理lcd的時鐘源是hclk,通過暫存器lcdcon1中的clkval可以調整vclk頻率大小,它的公式為:

vclk=hclk÷[(clkval+1)×2]

例如,hclk的頻率為100mhz,要想驅動畫素時鐘訊號為6.4mhz的lcd屏,則通過上式計算clkval值,結果clkval為6.8,取整後(值為6)放入暫存器lcdcon1中相應的位置即可。由於clkval進行了取整,因此我們把取整後的值代入上式,重新計算vclk,得到vclk=7.1mhz。

例如,我們所要顯示的lcd屏大小為320×240,因此hozval=320-1,lineval=240-1。水平同步訊號的脈寬、前肩和後肩分別為30、20和38,則hspw=30-1,hfpd=20-1,hbpd=38-1;垂直同步訊號的脈寬、前肩和後肩分別為3、12和15,則vspw=3-1,vfpd=12-1,vbpd=15-1。

下面我們就具體計算一下行頻(hsf)和場頻(vsf):

hsf=vclk÷[(hspw+1)+(hspd+1)+(hfpd+1)+(hozval+1)]

=7.1÷408=17.5khz

vsf=hsf÷[(vspw+1)+(vbpd+1)+(vfpd+1)+(lineval+1)]

=17.5÷270=64.8hz

在有些情況下,s3c2440的lcd時鐘訊號的預設極性與所控制的lcd時鐘訊號的極性相反,這時可以通過暫存器lcdcon5的相關位來改變某些時鐘訊號的極性。

2、顯示快取區

只要把所要顯示的資料放入顯示快取區內,就可以在螢幕上呈現內容。該快取區是我們自己程式設計時開闢的一段記憶體區。一般我們是通過定義乙個與螢幕尺寸大小相同的二維陣列來開闢該空間的,這樣控制螢幕內容會方便一些,如當螢幕的尺寸為320×240時,可以定義該快取區為lcd_buffer[240][320]。由於s3c2440支援16位和24位的非調色盤真彩色的tft型lcd模式,而24位顏色模式是用32位資料來表示的,所以前面定義的那個二維資料的資料型別應該是半字整型或全字整型的。例如,在24位顏色模式下,我們想要在尺寸大小為320×240螢幕的中心處設定為白色畫素,則:lcd_buffer[120][160]=0xffffffff。

在s3c2440中,暫存器lcdsaddr1和lcdsaddr2用於設定顯示快取區,即把我們定義的那個二維陣列告訴s3c2440。其中lcdbank的9位資料指定lcd的bank,即顯示快取區的第30位到第22位位址;lcdbaseu的21位資料指定了lcd的基址,即顯示快取區開始位址的第21位到第1位;lcdbasel的21位資料指定了lcd的尾址,即顯示快取區結束位址的第21位到第1位。例如,我們想要在尺寸為320×240的螢幕上顯示24位顏色,定義的顯示快取區陣列為lcd_buffer[240][320],則lcdbank等於lcd_buffer的第30位到第22位資料值(因為lcd_buffer表示的就是陣列的首位址),lcdbaseu等於lcd_buffer的第21位到第1位資料值,由於是用32位資料表示24為顏色,因此每個畫素值是4個位元組,所以lcdbasel等於(lcd_buffer+(240×320×4))結果的第21位到第1位的資料值。另外暫存器lcdsaddr3有兩個內容:offsize和pagewidth。offsize用於虛擬螢幕的偏移長度,如果我們不使用虛擬螢幕,就把它置為0;pagewidth定義了視口的寬,單位是半字,如在上面的例子中,pagewidth應該為320×32÷16。

下面我們給出一段具體的tft型lcd顯示的例項,其中,螢幕的大小為320×240,所設定的顏色為24位真彩色模式。

s3c2440 LCD驅動編寫

struct lcd regs static struct fb ops s3c lcdfb ops static volatile unsigned long gpbcon static volatile unsigned long gpbdat static volatile unsigned ...

tq2440 的dma裸機驅動

dma是一種提高cpu效率的工具。如果讓cpu去負責搬運資料,效率是十分低下的,因為在這個過程中,cpu就只能做這麼一件事。因此dma就應運而生。只要告訴dma,要搬運的資料源位址,以及要搬運到 去的位址,何種方式,使能它,dma就會獲取匯流排控制權,自動地搬運資料,從而解放cpu,提高效率。tq2...

mini2440按鍵裸機程式編寫執行

1.開發環境 作業系統 linux 開發板 mini2440 2.原理圖 gpgcon控制暫存器功能說明 3.操作流程 只需要操作gpgcon暫存器即可操作k1按鍵 a 設定控制暫存器gpgcon為輸入功能 00 即 可讀取gpgdat暫存器的值 html view plain copy 按鍵 un...