1、LCD控制器
打開S3C2440數據手冊可以看到LCD控制器硬件組成框圖如下
2、LCD時序圖
對此圖做簡單描述:LCD控制器主要由REGBANK,LCDCDMA,VIDPRCS,TIMEGEN等寄存器組成,如果不是用的三星的LCD,LPC3600和LCC3600就不用管它,它們專門為三星的LCD設計的。
REGBANK由17個可編程的寄存器和一個256X16調色板內存組成,他們用來配置LCD控制器
LCDCDMA是一個專用的DMA,它能自動將幀內存中的數據傳送到LCD驅動器,通過這個DMA通道,數據不需要CPU干涉就能傳送到LCD上顯示。
VIDPRCS接收來自LCDCDMA的數據,并轉換成合適的數據格式再送到LCD驅動器中。
TIMEGEN由可編程的邏輯組成,生成LCD驅動器的控制信號。
我們在LCD上顯示的一幅圖像稱為一幀圖像。在LCD上顯示一幀圖像的原理:從第一行的最左邊開始掃描,一行結束后跳到下一行繼續掃描。當顯示完一幅圖像后,從新
第一行接著掃描。掃描的時候就像一個“Z”字形。掃描圖像必須在控制信號下進行,下面講解一下控制信號。在mini2440開發板上用的是W35的TFT屏。TFT屏工作時序如下圖所示
對上面對參數解釋一下
VSYNC:垂直同步信號
VSPW:表示垂直同步脈沖的寬度,用行數計算
VBPD:表示新一幀圖像的開始,垂直同步信號以后無效的行數
VFPD:表示新一幀圖像結束后,垂直同步信號以前的無效的行數
HSYNC:水平同步信號,表示新的一行的開始,即跳到最左邊開始行的一行數據的掃描。
HSPW:表示水平同步信號的寬度,用VCLK計算
HBPD:表示水平同步信號從開始到一行的有效數據開始之間VCLK的個數
HFPD:表示一行有限數據結束到下一個水平同步信號開始之間VCLK的個數
VCLK:像素時鐘信號
VD[23:0]:LCD像素數據輸出端口
VDEN:數據使能信號
LEDN:行結束信號
顯示圖像的時候會看到圖像四周有黑色邊框,結合時序圖解釋一下:當我們發出VSYNC信號后,要經過(VSPW+1+VBPD+1)這么長時間,那么這么長時間所掃面的行是無效的,這對應著我們圖像的最上邊的黑框,接下來是掃描LINEVAL+1行有效數據,最后經過(VFPD+1)個無效行,這對應著圖像下面的黑框。對于每一行圖像數據,HSYNC信號發出后,經過(HSPW+1+HBPD+1)個無效像素,這對應著我們圖像左邊黑框,接下來顯示HOZVAL+1個有效像素,接著掃描(HFPD+1)個無效像素,這對應著我們圖像的右邊黑框。
VSYNC信號的出現表示一幀圖像的開始,我們把1s內能顯示圖像的幀數稱為顯示器頻率,也叫做場頻率或者垂直頻率。顯示分辨率又稱屏幕分辨率,指顯示器屏幕上顯示的有效像素點的數目。這是不同的概念。
3、LCD操作
下面講解如何操作LCD來顯一幀圖像:
一個像素點的顏色是由三種顏色(紅,綠,藍)按照一定比例配置得到的,每種顏色由幾位二進制來表示,到底是由幾位來表示需要我們設置LCD寄存器來配置。LCD支持單色(1BPP),4級灰度(2BPP),16級灰度(4BPP),256級灰度(8BPP)調色板顯示模式和16BPP和24BPP的非調色板顯示模式。BPP:bit per Pixel 即 位/像素。 我們的LCD就是選擇的16BPP顯示模式,16BPP有兩種表示方式,分別為5:5:5:1顯示模式和5:6:5顯示模式。我的LCD選擇的是5:6:5顯示模式,5:6:5表示的就是前5位二進制表示的事紅色,中間6位表示綠色,最后5位表示的是藍色。16BPP顯示模式圖如下所示
我們先了解下有關幀內存的概念,所謂的幀內存就是圖像數據的存放地址,我們將圖像數據放入到幀內存中,然后自動通過LCDDMA將數據送到LCD上顯示。
我們主要要對一下幾個寄存器進行操作:LCDCON1,LCDCON2,LCDCON3,LCDCON4,LCDCON5,LCDSADDR1,LCDSADDR2,LCDSADDR3
LCDCON1寄存器如下圖所示
第0位是LCD信號輸出使能位,[4:1]位是選擇BBP模式,[6:5]位是選擇顯示模式,我們LCD是TFT屏,故此處應該設置為3,[7]用不到暫時不管,[17:8]位用來設置像素信號始終,這個要根據具體的LCD數據手冊來設置,[27:18]沒用到暫時不管。
LCDCON2寄存器如下圖所示
此處的各參數的含義前面已經解釋過了,我們需要查看LCD的數據手冊進行設置,其中LINEVAL設置為239,因為我們LCD是320X240的屏
LCDCON3寄存器如下圖所示
參考數據手冊對上圖進行配置,其中HOZVAL為319
LCDCON4寄存器如下圖所示
我們只需用到[7:0]位參考數據手冊對HSPW進行設置
LCDCON5寄存器如下圖所示
第0、1位用來設置數據存儲方式,我們ARM上電默認的方式是小端模式,即數據的低位放在低地址處,數據的高位放在高地址處。第3位用來設置給LCD供電,我們LCD有兩種供電方式,一種是外接電源,一種是我們io口輸出高電平供電,mini2440采用的是io口供電,采用IO供電的好處是當我們不用LCD的時候可以通過軟件來設置LCD的開啟與關閉。第8、9位是設置信號極性的。所謂信號極性入下圖所示
上面一個波形是正極性,下面一個為負極性。參考我們的LCD時序圖可以看出,我們在時鐘信號的下降沿采集數據,故應該設置為負極性信號,第10位設置為1。第11位用來設置顯示模式,我們采用的的是5:6:5模式。談到數據存儲,我們接下來講一講幀內存的概念,所謂幀內存就是圖像數據在內存中的存儲地址,我們將數據存放在幀內存中,然后將幀內存的地址告訴LCD控制器,LCD會自動通過DMA讀取數據并顯示。因此,我們在編程的時候應該事先聲明一個數組用來保存圖像數據,然后將內存地址告訴LCd控制器。
下面介紹一下幀內存地址寄存器
【29:21】位用來保存幀內存地址的高9位【30:22】,【20:0】用來保存LCD的幀緩沖區開始地址的【21:1】位
用來保存LCD的幀緩沖區的結束地址的【21:1】位。它的計算方法應經給出來了,LCDBASEL=((the frame end address)>>1)+1=LCDBASEU+(PAGEWID+OFFSIZE)x(LINEVAL+1)
我們用到【10:0】位,這里用來設置視口的寬度,半字位單位,我們一個像素就是半字,LCD的寬度為320個像素,故應該設置為320,其他位置0即可。
下面給出幾個例子
1、我們在LCD上顯示一個藍色的點。程序如下:
#include "2440addr.h"
//根據數據手冊設置配置參數,W35的屏的收據手冊可能參數上有點老了,反正我按照上面的配置就是不對,然后參照開發板自帶的程序進行配置
//LCDCON1配置
#define CLKVAL 4
#define BPPMODE 12
#define PNRMODE 3
//LCDCON2配置
#define HEIGHT 240
#define VBPD 10
#define VFPD 4
#define VSPW 1
//LCDCON3,4配置
#define WIDTH 320
#define HBPD 0x44
#define HFPD 0x04
#define HSPW 0x01
//LCDCON5配置
#define FRM565 1
#define INVVCLK 1
#define INVLINE 1
#define INVVFRAME 1
#define PWREN 1
#define BSWP 0
#define HWSWP 1
//此宏定義就是為了獲取LCD的幀緩沖區的起始地址的【21:1】位
#define Low21Bits(n) ((n)&0x1fffff)
//聲明一個幀內存用于保存幀圖像數據
volatile unsigned short Lcd_Buffer[240][320];
//LCD控制寄存器初始化
void Lcd_Init(void)
{
rGPCCON=0xaaaa02a9;
rGPDCON=0xaaaaaaaa; //先將GPC和GPD的管教配置為LCD下的功能。
rLCDCON1=(CLKVAL<<8)|(PNRMODE<<5)|(BPPMODE<<1);
rLCDCON2=(VBPD<<24)|((HEIGHT-1)<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|((WIDTH-1)<<8)|(HFPD);
rLCDCON4=HSPW;
rLCDCON5=(FRM565<<11)|(INVVCLK<<10)|(INVLINE<<9)|(INVVFRAME<<8)|(BSWP<<1)|(HWSWP);
rLCDSADDR1=(((unsigned int)Lcd_Buffer>>22)<<21)|Low21Bits((unsigned int)Lcd_Buffer>>1);
rLCDSADDR2=Low21Bits(((unsigned int)Lcd_Buffer+(240*320*2))>>1);
rLCDSADDR3=(0<<11)|(WIDTH);
}
void Lcd_PowerEnable(int powerEnable)
{
rGPGCON&=~(3<<8)|(2<<8);
rGPGDAT|=1<<4;
rLCDCON5&=~(1<<3)|(powerEnable<<3);
}
void PutPixel(unsigned int x,unsigned int y,unsigned short c)
{
if((x<320)&&(y<240))
Lcd_Buffer[y][x]=c;
}
void Lcd_ClearScr(unsigned int c)
{
unsigned int x,y;
for(y=0;y<240;y++)
{
for(x=0;x<320;x++)
{
Lcd_Buffer[y][x]=c;
}
}
}
int Main()
{
Lcd_Init();
Lcd_PowerEnable(1);
rLCDCON1|=1<<0;
Lcd_ClearScr(0xffff);
while(1)
{
PutPixel(100,100,569);
}
return 0;
}
上一篇:裸機程序在mini2440上的運行
下一篇:mini2440裸機程序 統寶3.5 LCD驅動 TopPoly-TD035STED4
推薦閱讀
史海拾趣
隨著市場需求的不斷增長,Aplus Integrated Circuits公司決定擴大生產規模。公司在原有生產線的基礎上,增加了多條先進的生產線,并引進了自動化生產設備,提高了生產效率。同時,公司還加強了質量管理,確保產品質量的穩定性和可靠性。這些舉措使得公司的產能得到了大幅提升,為公司的持續發展提供了有力保障。
這五個故事展示了Aplus Integrated Circuits公司在電子行業中的發展歷程和成就,從創業初期的技術突破到與國際市場的接軌,再到應對行業變革的挑戰、加強產學研合作以及擴大生產規模,每一步都體現了公司的努力和堅持。
Curtis Industries公司在發展的同時,也積極承擔社會責任。公司關注環保問題,采用環保材料和節能技術生產產品,減少對環境的影響。此外,公司還積極參與公益活動,支持教育事業和社會福利事業的發展。這些舉措不僅提升了公司的社會形象,也為公司的可持續發展注入了新的動力。
HI Microwave Technology Limited自2004年在中國成立以來,便以“Hertz Infinite”(赫茲無限)為愿景,致力于將產品范圍擴展至30 KHz至110 GHz+(針對GaAs、HEMT、PHEMT和MMIC基產品)以及220 GHz+(針對毫米波產品和子系統)。這一宏偉愿景不僅為公司指明了發展方向,也激勵著每一位員工不斷追求技術創新和產品卓越。在初創階段,HI Microwave通過引進國際先進的生產設備和技術人才,迅速在微波通信領域站穩腳跟。
面對日益嚴峻的環境問題,Emerson Embedded Power積極響應,將環保理念融入產品設計和生產過程中。該公司致力于開發節能、低碳的電源產品,幫助客戶降低能源消耗和碳排放。同時,公司還積極推廣綠色制造理念,推動整個電子行業的可持續發展。
隨著物聯網和智能家居概念的普及,一家名為“FORMOSA智能科技”的公司專注于研發和生產智能家居硬件產品。該公司推出的智能音箱、智能門鎖、智能照明等系列產品,憑借其出色的性能、便捷的操作和良好的用戶體驗,在市場上迅速獲得了消費者的青睞。FORMOSA智能科技還積極與各大智能家居平臺進行合作,實現了產品的互聯互通和智能化管理。通過不斷的技術創新和市場拓展,該公司成功推動了智能家居產品的普及和應用。
ERNI Electronics一直致力于技術創新和產品升級。繼成功開發出世界上第一個DIN連接器后,公司又發展了多種電路板連接器和輸入/輸出連接器。這些連接器具有不同的針腳大小和間距,滿足了各種應用場景的需求。此外,ERNI還推出了高速數據傳輸連接器、堅固耐用的M8/M12連接器以及最新的MiniBridge單排電纜連接器系統等創新產品,不斷推動電子行業的發展。
怎樣將rhapsody的構造型符號由'?'改為'<<>>'? 1.rhapsody中,在object struct diagram里創建一個類,指定構造型后,為什么出現了?號而不是號?比如是?task?而不是。7.0和7.4版本都如此,請問怎么解決這一問題 2.怎么創建一個behavior類型的構造型呢?新建一stereotype后,可選的構造型選項里面 ...… 查看全部問答∨ |
|
各位XDJM,最近公司想搞基于Windows CE的嵌入式開發,小弟在Microsoft官網在線安裝成功,機子上也安裝了Microsoft Visual Studio 2005,但不知道如何啟動Windows CE,如何進行下一步程序開發,工程部署,望哪位大俠不吝賜教!… 查看全部問答∨ |
下載NK.BIN文件時報校驗和出錯,如下所示。換了一塊FLASH,該FLASH有幾個壞塊,請問與FLASH有沒關系? 我用前一塊FLASH下載是正常的 Download BIN file information: ----------------------------------------------------- [0]: Base Add ...… 查看全部問答∨ |
為什么H-JTAG可以檢測到CPU 而SJF2440檢測不到 H-JTAG可以檢測到CPU 而SJF2440檢測不到,提示no cpu is delected 確定驅動已經安裝完成 … 查看全部問答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 編輯 普及型自動恒溫式電飯鍋的電氣總成系統主要包括磁鋼限溫器、雙金屬片恒溫器、開關杠桿、壓力彈簧、電靜觸點、拉桿、壓簧片、電源指示燈等部件組成。 當電飯鍋在更換總成或者更換局部器件后 ...… 查看全部問答∨ |
產品價格:¥550.00咨詢電話:0755-25504951 25638952 25532557購買配置: · STM103V100-II開發板1塊 · 單色LCD顯示屏 1塊 · 交叉串口線 1條 · USB線 1條& ...… 查看全部問答∨ |
|
在進行嵌入式Linux學習開發的過程中,將經常使用到Linux的操作命令。實際上,Linux系統中的命令也是為實現特定的功能而編寫的程序,而且絕大數的命令是用C語言編寫的。有些實用性強的程序被廣泛使用和傳播,逐漸地演變成Linux的標準命令。但是Linux ...… 查看全部問答∨ |