JZ2440 裸機驅動 第13章 LCD控制器(1)

来源:http://www.cnblogs.com/sz189981/archive/2017/10/24/7721948.html
-Advertisement-
Play Games

瞭解LCD顯示器的介面及時序; 掌握S3C2410/S3C2440 LCD控制器的使用方法; 瞭解幀緩衝區的概念,掌握如何設置幀緩衝區來顯示圖像; ...


本章目標  瞭解LCD顯示器的介面及時序; 掌握S3C2410/S3C2440 LCD控制器的使用方法; 瞭解幀緩衝區的概念,掌握如何設置幀緩衝區來顯示圖像; 13.1 LCD和LCD控制器 13.1.1 LCD顯示器 1.LCD的種類 2.LCD的介面     CPU或顯卡發出的圖像數據是TTL信號(0~5V、0~3.3V、0~2.5V或0~1.8V),LCD
本身接收的也是TTL信號。由於TTL信號在高速的長距離傳輸時性能不佳,抗干擾能力 比較差,後來又剔除多種介面,比如LVDS、TDMS、GVIF、P&D、DVI和DFP等。它 們實際上只是將TTL信號編碼成各種信號以便傳輸,在LCD那邊將接收到的信號進行解 碼得到TTL信號。     由於數字介面標準尚未統一,所以使用LCD時需要根據其數據手冊瞭解其介面的定 義。也是基於數字介面標準未統一的原因,市場上大多LCD都採用模擬信號介面,LCD 需要先通過ADC將模擬信號轉換為數字信號才能顯示。     但是不管採用何種數字介面,本質上TTL信號是一樣的。 (1)對於STN LCD     STN LCD的數據傳輸方式有3種:4行單掃、4行雙掃、8行單掃。所謂“單掃”是指
對於一整屏的數據,從上到下、從左到右,一個一個地發送出來;“雙掃”是指將一整 屏的數據分為上下兩部分,同時從上到下、從左到右,一個一個地發出來。“4位”、 “8位”是指發送數據時使用多少個數據線。     註意:4位雙掃方式也用到8根數據線,其中4根用於上半屏,4根用於下半屏數據。     出數據信息外,還有其他控制信號,所有TTL信號如表13.1所示。  (2)對於TFT LCD。     TFT LCD的TTL信號與STN類似(如表13.2所示),只是其數據線多大24根,對應像素值 中的每一位。      13.1.2 S3C2410/S3C2440 LCD控制器介紹  1.S3C2410/S3C2440 LCD控制器的特性與結構     S3C2410/S3C2440 LCD控制器被用來向LCD傳輸圖像數據,並提供必要的控制信號,
比如VFRAME、VLINE、VCLK、VM等。可以支持STN LCD和TFT LCD,其特性如下: (BPP表示bit per pixel,即每個像素使用多少位來表示其顏色)。 (1)STN LCD。 ·支持3種掃描方式:4位單掃、4位雙掃和8位單掃。 ·支持單色(1BPP)、4級灰度(2BPP)和16級灰度(4BPP)屏。 ·支持256色(8BPP)和4096色(12BPP)彩色STN屏(CSTN)。 ·支持解析度位640x480、320x240、160x160以及其他規格的多種LCD。 ·虛擬屏幕最大可達4MB。 ·對於256色,解析度有4096x1024、2048x2048、1024x4096等 (2)TFT LCD。 ·支持單色(1BPP)、4級灰度(2BPP)、16級灰度(4BPP)、256色(8BPP)的調色板顯示模式。 ·支持64K(16BPP)和16M(24BPP)色非調色板顯示模式。 ·支持解析度位640x480、320x240及其他多種規格的LCD。 ·虛擬屏幕最大可達4MB。 ·對於64K色,解析度有2048x1024等多種。     S3C2410/S3C2440 LCD控制器提供了驅動STN LCD、TFT LCD所需要的所有信號(如表 13.1、表13.2所示),另外,還特別提供額外的信號以支持SEC公司生產的TFT LCD。這3類 信號中很大部分是復用的。     S3C2410/S3C2440 LCD控制器的內部結構如圖13.1所示。      REGBANK是LCD控制器的寄存器組,含17個寄存器及一塊256x16的調色板記憶體, 用於設置各項參數。而LCDCDMA則是LCD控制器專用的DMA通道,可以自動地從 系統匯流排上獲取圖像數據,這使得顯示圖像時不需要CPU干擾。VIDPRCS將 LCDCDMA中的數據組合成特性格式(比如4位單掃、4位雙掃和8位單掃等),然後從 VD[23:0]發送給LCD屏。同時TIMEGEN和LPC3600負責產生LCD屏所需要的控制時 序,例如VSYNC、HSYNC、VCLK、VDEN,然後從VIDEO MUX送給LCD屏。其 中LPC3600專用於SEC TFTLCD。     LCDCDMA中有兩個FIFO:         FIFOH的容量為16(1個字為4位元組)個字,         FIFOL的容量為12個字。         當使用雙掃方式時,FIFOH、FIFOL分別用於傳輸上半屏、下半屏數據;         當使用單掃方式時,只用到FIFOH。
        當FIFO為空或者其中的數據已經減少到設定的閾值時,LCDCDMA自動發起DMA 傳輸從記憶體中獲得圖像數據。   2.顯示器上數據的組織格式     對於屏幕上的一整幅圖像,它的數據時如何組織的?無論時CRT還是LCD顯示器, 它們都有相同的概念。     一幅圖像被稱為一幀,每幀由多行組成,每行由多個像素組成,每個像素顏色由若幹 位的數據表示。對於單色顯示器,每個像素使用1位來表示,稱為1BPP;對於256色顯 示器,每個像素使用8位來表示,稱為8BPP。     顯示器從屏幕的左上方開始,一行一行第取得每個像素的數據並顯示出來,     當顯示到一行的最右邊時,跳到下一行的最左邊開始顯示下一行;     當顯示完所有行後,跳到左上方開始下一幀。
    顯示器沿著“Z”字行的路線進行掃描,使用HSYNC、VSYNC信號來控制掃描路線的 跳轉,HSYNC表示“是跳到最左邊的時候了”,VSYNC表示“是跳到最上邊的時候了”。     在工作中的顯示器上,可以在四周看到黑色的邊框。     上方的黑框是因為當發出VSYNC信號時,需要經過若幹行之後第一行數據才有效;     下方的黑框是因為顯示完所有行的數據時,顯示器還沒有掃描到最下邊(VSYNC信 號還沒有發出),這時數據已經無效;     左邊的黑框是因為當發出HSYNC信號時,需要經過若幹像素之後第一列數據才有效;     右邊的黑框是因為顯示完一行的數據時,顯示器還沒有掃描到最右邊(HSYNC信號還 沒有發出),這時數據已經無效;     顯示器只會根據VSYNC、HSYNC信號取得、顯示數據,並不理會該數據是否有效, 何時發出有效數據由顯卡決定。        VSYNC信號出現的頻率表示一秒鐘內能顯示多少幀圖像,稱為垂直頻率或場頻率,這 就是平時常說的“顯示器的頻率”;HSYNC信號出現的頻率稱為水平頻率。     顯示器上,一幀數據的存放位置與VSYNC、HSYNC信號的關係如圖13.2所示。      “有效數據”的行數、列數,即解析度,它與VSYNC、HSYNC信號之間的“距離”等, 都是可以設置的,這由顯卡完成,這些設置在下一節對TFT LCD的操作中都可以看到。   3.TFT LCD的操作     目前市場上主流的LCD為TFT LCD,本章基於TFT LCD來介紹LCD控制器的使用。 對於STN LCD,它所涉及的操作是類似的。     先瞭解TFT LCD的時序,這使得我們在設置各個寄存器時有個形象的概念。每個 VSYNC信號表示一幀數據的開始;每個HSYNC信號表示一行數據的開始,無論這 些數據是否有效;每個VCLK信號表示正在傳輸一個像素的數據,無論它是否有效。 數據是否有效只是對CPU的LCD控制器來說的,LCD根據VSYNC、HSYNC、VCLK 不停地讀取匯流排數據、顯示。     下麵講解時序圖,請參考圖13.3。 (1)VSYNC信號有效時,表示一幀數據的開始; (2)VSPW表示VSYNC信號的脈衝寬度(VSPW+1)個HSYNC信號周期,即 (VSPW+1)行,這(VSPW+1)行的數據無效; (3)VSYNC信號脈衝之後,還要經過(VBPD+1)個HSYNC信號周期,有效的行數據 才出現。所以,在VSYNC信號有效之後,總共還要經過(VSPW+1+VBPD+1)個無效的 行,它對應圖13.2上方的邊框,第一個有效的行才出現。 (4)隨後即連續發出(LINEVAL+1)行的有效數據。 (5)最後是(VFPD+1)個無效的行,它對應圖13.2下方的邊框,完整的一幀結束,緊 接著時下一幀的數據了(即下一個VSYNC信號)。     現在深入到一行中像素數據的傳輸過程,它與上面行數據的傳輸過程相似。 (1)HSYNC信號有效時,表示一行數據的開始; (2)HSPW表示HSYNC信號的脈衝寬度為(HSPW+1)個VCLK信號周期,即(HSPW+1) 個像素,這(HSPW+1)個像素的數據無效。 (3)HSYNC信號脈衝之後,還要經過(HBPD+1)個VCLK信號周期,有效的像素數據 才會出現。所以,在HSYNC信號有效之後,總共還要經過(HSPW+1+HBPD+1)個無效的 像素,它的頻率可以如下計算:     VCLK (Hz) = HCLK/[(CLKVAL+1x2)]     VSYNC信號的頻率又稱為幀頻率、垂直頻率、場頻率、顯示器的頻率,它可以如下 計算:         Fram Rate = 1 / [ { (VSPW+1) + (VBPD+1) + (LIINEVAL+1) + (VFPD+1) } x                                         { (HSPW+1) + (HBPD+1) + (HFPD+1) + (HOZVAL+1)} x                                        { 2 x (CLKVAL+1) / (HCLK) } ]     將VSYNC、HSYNC、VCLK等信號的時間參數設置好後,並將幀記憶體(frame memory) 的地址告訴LCD控制器,它即可自動地發起DMA傳輸從幀記憶體中得到圖像數據,最終在上 述信號的控制下出現在數據匯流排VD[23:0]上。用戶只需要把要顯示的圖像數據寫入幀記憶體 中,在這之前,先瞭解一下各種格式的圖像數據在記憶體中如何存儲。     顯示器上每個像素的顏色由3部分組成:紅、綠、藍。它們被稱為三原色,這三者的混合 幾乎可以表示人眼能識別的所有顏色。     LCD控制器可以支持單色(1BPP)、4級灰度(2BPP)、16級灰度(4BPP)、256色(8BPP) 的調色板顯示模式,支持64k(16BPP)和16M(24BPP)非調色板顯示模式。下麵只介紹256 色(8BPP)、64K(16BPP)、16M(24BPP)色顯示模式下,圖像數據的存儲格式。 (1)16M(24BPP)色。     16M(24BPP)色的顯示模式就是使用24位的數據來表示一個像素的顏色,每種原色使用 8位。LCD控制器從記憶體中獲得某個像素的24位顏色值後,直接通過VD[23:0]數據線發送 給LCD。為了方便DMA傳輸,在記憶體中使用4個位元組(32)來表示一個像素,其中3位元組從高 到低分別表示紅、綠、藍,剩餘一個位元組數據無效。是最低位元組還是最高位元組無效,這時 可選擇的,如圖13.4所示。    (2)64K(16BPP)色。     64K(16BPP)色的顯示模式就是使用16位的數據來表示一個像素的顏色。這16位數據 的格式又分為兩種:5(紅):6(綠):5(藍)、5(紅):5(綠):5(藍):1(透明度)。5:5:5:1格式也被稱 為RGBA格式(A:Alpha,表示透明度)。     一個4位元組可以表示兩個16BPP的像素,使用高2位元組還是低2位元組表示第一個像素,這 也是可以選擇的。     顯示模式位16BPP時,記憶體數據與像素位置的關係如圖13.5所示。在5:5:5:1格式下, VD[18]、VD[10]、VD[2]數據線上的值是一樣的,都表示透明度,圖13.5中的“NC”表示 沒有連接(not connect)。  (3)256色(8BPP)。     256色(8BPP)的顯示模式就是使用8位的數據來表示一個像素的顏色,但是對三種原 色平均下來,每個原色只能使用不到3位的數據表示,即每個原色最多不過8個級別,這不 足以表示更豐富的顏色。     為瞭解決8BPP模式顯示能力不足的問題,需要使用調色板(Paette)。每個像素對應 的8位數據不再用來表示RGB三種顏色,而是表示它在調色板中的索引值。     要顯示這個像素時,使用這個索引值從調色板中去其RGB顏色值。所謂調色板就是一 塊記憶體,可以對每個索引值設置顏色,可以使用24BPP或16BPP。S3C2410/S3C2440中,調色 板是一塊256x16的記憶體,使用16BPP的格式來表示256色(8BPP)顯示模式下的各個索引值的顏 色。這樣,即使使用256色(8BPP)的顯示模式,最終出現在LCD數據匯流排上的仍是16BPP的數據。     一個4位元組可以表示4個8BPP的像素,位元組與像素的對應順序是可以選擇的,如圖 13.6所示。     調色板中數據存放的格式與上面所描述的16BPP顯示模式相似,也分兩種格式:5:6:5、 5:5:5:1.調色板中數據的格式及與LCD數據線VD[23:0]的對應關係,如表13.3和表13.4所示。  註意:① 0x4d00 0400是調色板的起始地址;      ② 5:5:5:1格式下,VD18、VD10和VD2三個數據線中都是亮度值1,即最低位的值。      ③ 當LCDCON5寄存器中的VSTATUS、HSTATUS有效時,不能讀寫調色板;     各種模式下用來傳輸紅、綠、藍三種原色的顏色值的VD數據線如表13.5所示。 
    沒有用到的數據線其電平為0,從這個觀點來看,無論是24BPP還是16、8BPP模式, 24根數據線VD[23:0]都被用到了。事實上,一個TFT LCD能處理的像素位寬是固定的,即 它數據線的數目是固定的,紅、藍、綠3類信號線總是連接到各位元組中的高位;軟體設置 24、16、8BPP以及調色板等,只會影響到色值的精度。 4.使用TFT LCD時LCD 控制器的寄存器設置     LCD控制器中REGBANK的17個寄存器可以分為6種,如表13.6所示。     對於TFT LCD,一般情況下只需要設置前兩種寄存器;在8BPP模式下,如果想快速地 輸出一幀單色圖像,可以藉助TPAL寄存器。下麵分別介紹。 (1) LCD控制寄存器LCDCON1。     用於選擇LCD類型、設置像素時鐘、使能LCD信號的輸出等,格式如表13.7所示。 (2)LCD 控制寄存器LCDCON2。     用於設置垂直方向個信號的時間參數,格式如表13.8所示,請參考圖13.3TFT LCD時序圖。 (3)LCD 控制寄存器LCDCON3.     用於設置水平方向各信號的時間參數,格式如下表所示,請參考13.3TFT LCD時序圖。 (4)LCD控制寄存器LCDCON4。     對於TFT LCD,這個寄存器只用來設置HSYNC信號的脈衝寬度,位[7:0]的數值稱為 HSPW,表示脈衝寬度位(HSPW+1)個VCLK周期。 (5)LCD控制寄存器LCDCON5。     用於設置各個控制信號的極性,並可從中讀出一些狀態信息,格式列表如表13.10 所示。

(6)幀記憶體地址寄存器LCDSADDR1~LCDSADDR3。     幀記憶體可以很大,而真正要顯示的區域被稱為視口(view point),它處於幀記憶體之內。 這3個寄存器用於確定幀記憶體的起始地址,定位視口在幀記憶體中的位置。     圖13.7給出了幀記憶體和視口的位置關係:

    各寄存器格式如表13.11、13.14和13.13所示。         註:可以修改LCDBASEU、LCDBASEL的值來實現圖像的移動,不過不能在一幀圖像的 結束階段(LCDCON1寄存器的LINECNT為0時)進行修改,因為此時LCD控制器會優先取得下一 幀的數據,之後才改變這些值。這樣的話,這些數據與新的幀緩衝區就不一致。     註:OFFSIZE、PAGEWIDTH的值只能在ENVID(LCDCON1寄存器的信號輸出使能位)為0時修改。 (7)臨時調色板寄存器TPAL。     如果要輸出一幀單色的圖像,可以在TPAL寄存器中設定這個顏色值,然後使能TPAL寄存器, 這種方法可以避免修改整個調色板或幀緩衝區。     TPAL寄存器格式如表13.14所示。     註:臨時調色板寄存器TPAL可以在任何顯示模式下,並非只能用在8BPP模式下。  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • mysql上百萬數據讀取和插入更新一般沒什麼問題,但上千萬後速度會很慢,如何調整配置,提高效率。如下: 1.儘量將數據一次性寫入DataFile和減少資料庫的checkpoint操作,調整如下參數: (1)將innodb_flush_log_at_trx_commit 配置為0;按過往經驗設定為0, ...
  • 環境: Windows server 2008 r2 Standard +SqlServer2008R2 內網環境需要升級為SQL server 2012 升級安裝時提示版本不支持 網上查詢相關問題, 必須是SQL server2008 r2 sp1以上及需要安裝Sp2補丁包才能升級為SQL ser ...
  • 今天遇到了一個問題 就是要批量更新資料庫中 某個欄位的值,需要首先需要找到都哪些表裡包含了這個欄位 ,整理了下麵這個語句 方便查詢 SELECT DISTINCT t.table_name, c.COLUMN_NAMEFROM information_schema.TABLES tINNER JOI ...
  • 一、前言 我們在登錄mysql的時候經常會看到一句警告: Warning: Using a password on the command line interface can be insecure. 這讓人看著很不舒服,並且當在寫腳本的時候這個警告輸出到屏幕上更讓人感覺難受。 二、解決辦法 這個 ...
  • SQL Server日常維護常用的一些腳本整理。 1.sql server開啟clr許可權: 2.查詢資料庫大小 3.資料庫日誌壓縮 4.查看資料庫連接用戶 5.查看當前占用 cpu 資源最高的會話和其中執行的語句(及時CPU) 6.查看緩存中重用次數少,占用記憶體大的查詢語句(當前緩存中未釋放的)-- ...
  • 直接上語句 查所有資料庫占用空間大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(truncate(sum(index_length)/1024/1024... ...
  • 查詢速度慢的原因 1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是程式設計的缺陷) 2、I/O 吞吐量小,形成了瓶頸效應。 3、沒有創建計算列導致查詢不優化。 4、記憶體不足 5、網路速度慢 6、查詢出的數據量過大(可採用多次查詢,其他的方法降低數據量) 7、鎖或者死鎖(這是查詢慢最常見的問題 ...
  • 13.2 TFT LCD顯示實例 13.2.1 程式設計 本實例的目的是從串口輸出一個菜單,從中選擇各種方法進行測試,比如畫線、 畫圓、顯示單色、使用調色板等。 13.2.2代碼詳解 本實例源碼在/work/hardware/lcd目錄下,與LCD相關的代碼有3個文件:lcddrv.c、 frame ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...