您的位置:首页 > 编程语言

S3C2440之LCD驱动代码模板(RealView MDK)

2015-03-03 15:49 302 查看
好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 LCD控制初始化代码。使用友善MINI2440开发板,LCD为320*240,开发环境为RealView MDK 4.22。

该源码结构简单明了,原始工程下载地址:点击打开链接

寄存器宏定义:

#define rGPCCON		(*(volatile unsigned long *)0x56000020)
#define rGPCUP		(*(volatile unsigned long *)0x56000028)
#define rGPDCON		(*(volatile unsigned long *)0x56000030)
#define rGPDUP		(*(volatile unsigned long *)0x56000038)

#define rLCDCON1	(*(volatile unsigned long *)0x4D000000)
#define rLCDCON2	(*(volatile unsigned long *)0x4D000004)
#define rLCDCON3	(*(volatile unsigned long *)0x4D000008)
#define rLCDCON4	(*(volatile unsigned long *)0x4D00000C)
#define rLCDCON5	(*(volatile unsigned long *)0x4D000010)
#define rLCDSADDR1	(*(volatile unsigned long *)0x4D000014)
#define rLCDSADDR2	(*(volatile unsigned long *)0x4D000018)
#define rLCDSADDR3	(*(volatile unsigned long *)0x4D00001C)
#define rTPAL			(*(volatile unsigned long *)0x4D000050)


显示缓冲区:

#define LCD_XSIZE	320
#define LCD_YSIZE	240

unsigned int LCD_BUFFER[LCD_YSIZE][LCD_XSIZE];


GPIO初始化:

void LCD_GPIO_Init(void)
{
rGPCUP = 0xffffffff;
rGPCCON = 0xaaaa02a8;

rGPDUP = 0xffffffff;
rGPDCON = 0xaaaaaaaa;
}


LCD初始化:

#define CLKVAL				6
#define TFT_MODE			3
#define BPP_MODE_16BIT		0x0c
#define BPP_MODE_24BIT		0x0D

#define VBPD				9
#define LINEVAL				(LCD_YSIZE - 1)
#define VFPD				1
#define VSPW				2

#define HBPD				6//0x0C
#define HOZVAL				(LCD_XSIZE - 1)
#define HFPD				5
#define HSPW				0//1

#define BPP24BL				0
#define FRM565				1
#define INVVCLK				1
#define INVHSYNC			1
#define INVVSYNC			1
#define BSWP				0
#define HWSWP				0

void LCD_Init(void)
{
LCD_GPIO_Init();

rLCDCON1 = (CLKVAL << 8) | (TFT_MODE << 5) | (BPP_MODE_24BIT << 1);
rLCDCON2 = (VBPD << 24) | (LINEVAL << 14) | (VFPD << 6) | (VSPW << 0);
rLCDCON3 = (HBPD << 19) | (HOZVAL << 8) | (HFPD << 0);
rLCDCON4 = HSPW;
rLCDCON5 = (BPP24BL << 12) | (INVVCLK << 10) | (INVHSYNC << 9) | (INVVSYNC << 8) | (BSWP << 1) | (HWSWP << 0);

rLCDSADDR1 = ((unsigned int)LCD_BUFFER) >> 1;
rLCDSADDR2 = ((unsigned int)LCD_BUFFER + LCD_YSIZE * LCD_XSIZE * sizeof(LCD_BUFFER[0][0])) >> 1;
rLCDSADDR3 = LCD_XSIZE*2;
}


开启/关闭LCD:

void LCD_ON(void)
{
rLCDCON1 |= 1;
}

void LCD_OFF(void)
{
rLCDCON1 &= ~1;
}


清屏函数:

void LCD_ClrScr(unsigned int color)
{
int i, j;

for(j = 0; j < LCD_YSIZE; j++)
for(i = 0; i < LCD_XSIZE; i++)
LCD_BUFFER[j][i] = color;
}


使用临时调色板清屏:

void LCD_ClrScrUseTPAL(unsigned int color24)
{
rTPAL = (1 << 24) | color24;
}


禁止TPAL:

void LCD_DisableTPAL(void)
{
rTPAL &= ~(1 << 24);
}


FillRect函数:

void LCD_FillRect(int x0, int y0, int x1, int y1, unsigned int color)
{
int i, j;

if((x0 > x1) || (y0 > y1))	return;

for(j = y0; j <= y1; j++)
for(i = x0; i <= x1; i++)
LCD_BUFFER[j][i] = color;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: