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;
}
时间: 2024-11-09 04:13:55

S3C2440之LCD驱动代码模板(RealView MDK)的相关文章

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

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 Camera驱动代码.使用友善MINI2440开发板,开发环境为RealView MDK 4.22. 原始工程下载地址:点击打开链接 最初,本人在网上下载了许多mini2440 camera驱动的代码,但结果都不尽人意,因为这些代码看起来都比较晦涩难懂,都是直接对寄存器进行位与位或操作,且有的代码排版布局很乱,对初学者来说难度较大.由于本人接触了STM32开发后,觉得STM32的库函数给初学者提供了很大帮助,仅仅通过函数

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

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 UART驱动代码.使用友善MINI2440开发板,开发环境为RealView MDK 4.22.需要注意的是,本代码中,对GPIO的初始化放在了s3c2440.s中完成,采用keil自带的html方式进行配置. 该源码结构简单明了,原始工程下载地址:点击打开链接 UART控制器初始化: void Uart_Init(void) { #define rULCON0 (*(volatile unsigned int*)0x5

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

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出自己写的S3C2440 MMU代码库.使用友善MINI2440开发板,开发环境为RealView MDK 4.22. 该源码结构简单明了,原始工程下载地址:点击打开链接 Register 0, ID code register: unsigned int MMU_ReadID(void) { unsigned int id; __asm("mrc p15, 0, id, c0, c0, 0"); return id; } Re

浅谈linux的LCD驱动

一.硬件基础 1.硬件框图 2.LCD控制器 了解硬件最直接的办法就是看手册,在这里我只会简单介绍下LCD的硬件.具体的我会在下面结合程序讲解. a.REGBANK是LCD控制器的寄存器,含17个寄存器以及一块256*16的调色内存,用来设置各项参数. b.LCDCDMA是LCD控制器专用的DMA信道. c.TIMEGEN和LPC3600负责产生LCD屏所需要的控制时序. d.VIDPRCS需要与LCDCDMA中的数组合成特定的格式,然后从VD[23:0]发送给LCD屏幕. 3.时序理解 二.驱

LCD驱动分析【转】

转自:http://blog.csdn.net/hanmengaidudu/article/details/21559153 1.S3C2440上LCD驱动 (FrameBuffer)实例开发讲解 其中的代码也可直接参考:drivers/video/s3c2410fb.c 以下为转载文章,文章原地址:http://blog.csdn.net/jianyun123/archive/2010/04/24/5524427.aspx S3C2440上LCD驱动 (FrameBuffer)实例开发讲解 一

S3C2440 LCD驱动(FrameBuffer)实例开发&lt;一&gt;(转)

1. 背景知识 在多媒体的推动下,彩色LCD越来越多地应用到嵌入式系统中,PDA和手机等大多都采用LCD作为显示器材,因此学习LCD的应用很有实际意义! LCD工作的硬件需求:要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器.在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等.TQ2440是采用了S3C2440,S

S3C2440 LCD驱动(FrameBuffer)实例开发&lt;二&gt;(转)

开发板自带的LCD驱动是基于platform总线写的,所以如果要使其它的LCD能够在自己的开发板上跑起来,那么就先了解platform驱动的架构,下面简单记录下自己看platform驱动时体会,简单的说platform是一种虚拟总线,那么它也是一条总线,所以它分为3个部分,platform_bus,platform_device,platform_driver.在platform_device向platform_bus注册设备,platform_driver向platform_bus注册驱动,注

LCD驱动分析(三)时序分析

参考:S3C2440 LCD驱动(FrameBuffer)实例开发<一>   S3C2440 LCD驱动(FrameBuffer)实例开发<二>

s3c2440的LCD字符显示

在上一篇文章中,我们详细介绍了如何驱动LCD,对于在LCD屏上呈现各种简单的图形已经不是一件高不可攀的难事.但如何绘制字符呢? 其实每一字符就是一幅图像,字符的大小对应于图像的大小,字符的笔画对应于图像的内容.那么如何把字符转换为图像呢?简单的方法是使用"字模提取"之类的软件,它能够把任意的字符转换为一个字节型的数组,数组元素中的每一位代表LCD上的一个像素点,当为1时,表示该位置为字符的一个笔画,需要上色,而为0时,表示不是笔画,不需要上色.例如,一个字符想要在16×16的面积上显示