參數配置:
開發板型號TX2440;? 一個像素點采用16位表示; LCD屏幕分辨率 480*272; 液晶模塊型號:BL43014_SPEC;圖像的內容以C語言數組的形式保存在bmp.c文件中。
~~~
/*
*版權所有(C)2015,ZJU
*
*文件名稱:lcd.c
*內容摘要:關于lcd的配置
*其它說明:開發板型號: TX2440
* led顯示尺寸 480 x 272
液晶模塊型號:BL43014_SPEC
*當前版本:V1.0
*作 者:Frank
*完成日期:2015.12.20
*
*/
#define GPCCON (*(volatile unsigned long *)0x56000020)
#define GPDCON (*(volatile unsigned long *)0x56000030)
#define GPGCON (*(volatile unsigned long *)0x56000060)
//LCD控制寄存器定義
#define LCDCON1 (*(volatile unsigned long *)0x4D000000)
#define LCDCON2 (*(volatile unsigned long *)0x4D000004)
#define LCDCON3 (*(volatile unsigned long *)0x4D000008)
#define LCDCON4 (*(volatile unsigned long *)0x4D00000C)
#define LCDCON5 (*(volatile unsigned long *)0x4D000010)
#define LCDSADDR1 (*(volatile unsigned long *)0x4D000014)
#define LCDSADDR2 (*(volatile unsigned long *)0x4D000018)
#define LCDSADDR3 (*(volatile unsigned long *)0x4D00001C)
#define TPAL (*(volatile unsigned long *)0x4D000050)
/*以下宏定義的值參考所使用的LCD液晶模塊的芯片手冊*/
#define VSPW 9
#define VBPD 7
#define LINEVAL 271
#define VFPD 7
#define CLKVAL 4 // 10 = 100 / ((CLKVAL+1)*2)
#define HSPW 40
#define HBPD 39
#define HOZVAL 479
#define HFPD 4
unsigned short LCDBUFFER[272][480]; //定義一個LCD圖像緩存空間
extern unsigned char bmp[90200];
typedef unsigned char U8;
typedef unsigned short int U16;
typedef unsigned int U32;
/*******************************************************************
*函數名稱:Lcd_Port_Init()
*功能描述:LCD端口初始化
*其他說明:配置LCD用到的GPIO端口
*創建日期:2015.12.20
*******************************************************************/
void Lcd_Port_Init(void)
{
GPDCON = 0xaaaaaaaa;
GPCCON = 0xaaaaaaaa;
}
/*******************************************************************
*函數名稱:Lcd_Control_Init()
*功能描述:LCD控制寄存器初始化
*其他說明:配置LCD用到的控制寄存器
*創建日期:2015.12.20
*******************************************************************/
void Lcd_Control_Init(void)
{
LCDCON1 = (CLKVAL << 8) | (0x3 << 5) | (0xC << 1) | (0 << 0);
LCDCON2 = (VBPD << 24) | (LINEVAL << 14) | (VFPD << 6) | (VSPW);
LCDCON3 = (HBPD << 19) | (HOZVAL << 8) | (HFPD);
LCDCON4 = HSPW;
// LCDCON5 = (1 << 11) | (1 << 9) | (1 << 8) | (1 << 0);
LCDCON5 = (1 << 11) | (1 << 9) | (1 << 8);
LCDSADDR1 = (((unsigned int)LCDBUFFER >> 22) << 21) | (((unsigned int)LCDBUFFER >> 1) & 0x1fffff);
LCDSADDR2 = (((unsigned int)LCDBUFFER + 272*480*2) >> 1) & 0x1fffff;
LCDSADDR3 = (0 << 11) | (480*2 / 2);
TPAL = 0;
}
/*******************************************************************
*函數名稱:Lcd_Init()
*功能描述:LCD初始化
*其他說明:
*創建日期:2015.12.20
*******************************************************************/
void Lcd_Init()
{
Lcd_Port_Init();
Lcd_Control_Init();
/*打開LCD電源*/
GPGCON |= (0x3 << 8);
LCDCON5 |= (1 << 3);
/*使能LCD控制器*/
LCDCON1 |= 1;
}
/*******************************************************************
*函數名稱:point()
*功能描述:在lcd上畫一個點
*其他說明:
*創建日期:2015.12.20
*******************************************************************/
void Point(unsigned int x, unsigned int y, unsigned int color)
{
unsigned int red, green, blue;
red = (color >> 19) & 0x1f;
green = (color >> 10) & 0x3f;
blue = (color >> 3) & 0x1f;
/*采用5:6:5的模式表示一個RGB*/
LCDBUFFER[y][x] = (unsigned short)((red << 11) | (green << 5) | blue);
}
/*******************************************************************
*函數名稱:Paint_Bmp(U16,U16,U16,U16,U8)
*功能描述:LCD顯示一幅圖像
*輸入參數:(x0,y0)圖像顯示第一個點的坐標; high圖像的高度
wide圖像的寬度; bmp存儲圖像的數組
*其他說明:
*創建日期:2015.12.20
*******************************************************************/
void Paint_Bmp(U16 x0, U16 y0, U16 wide, U16 high, const U8 *bmp)
{
unsigned short x, y;
unsigned short c;
unsigned int p = 0;
for (y=y0; y<y0+high; y++)
{
for (x=x0; x<x0+wide; x++)
{
c = bmp[p] | (bmp[p+1]<<8); /*一個像素點由16位表示,bmp[p]
表示低8位,bmp[p+1]表示高8位*/
if ((x<480) && (y<272))
{
LCDBUFFER[y][x] = c;
}
p = p + 2;
}
}
}
/*******************************************************************
*函數名稱:Lcd_Test()
*功能描述:LCD測試函數
*其他說明:
*創建日期:2015.12.20
*******************************************************************/
void Lcd_Test(void)
{
int x;
/* for (x=0; x<480; ++x)
{
Point(x++, 150, 0xff0000);
}
*/
Paint_Bmp(0,0,220,220,bmp);
}
~~~
需要注意的幾點:
1、宏定義的值需要參考使用的LCD液晶模塊的芯片手冊(TX2440使用的LCD是BL43014_SPEC)


圖1 BL43014_SPEC Input Time Table
2、液晶模塊的Vsync和Hsync的時序與S3C2440芯片手冊上的相反,所以LCDCON5中bit8和bit9需要設置為1。

圖2 BL43014_SPEC Vertical Input Timing

圖3 TFT LCD Timing Example( S3C2440 Datasheet)