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

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值