#include "Lcd.h"
void Init()
{
int i = 0;
int j = 0;
for(i = 0; i < Y_SIZE; i++)
{
for(j = 0; j < X_SIZE; j++)
{
LCD_BUFFER[i][j] = 0;
}
}
//设置VD0~15
GPICON_REG = 0XAAAAAAAA; //设置GPI0~15为LCD VD0~15
GPIPUD_REG = 0; // 下拉电阻屏蔽
//设置VD16~23和HSYNC、VSYNC、VDEN、VCLK
GPJCON_REG = 0XAAAAAAAA;
GPJPUD_REG =0; // 下拉电阻屏蔽
// 关闭LCD
lcd_disable();
// 窗口0控制器 关闭视频输出
S3C_WINCON0 &= (~(S3C_WINCONx_ENWIN_F_ENABLE));
//LCD寄存器设置 手册上写着必须这么设置SPCON寄存器
SPCON_REG &= (~0x3);
SPCON_REG |= 0x01;
// 手册上写着必须这么设置MIFPCON寄存器
MIFPCON_REG &= ~(1<<3); //设置LCD支路为一般模式
// 第六位是确定CLKVAL_F值,第四位用CLKVAL_F选择时钟源
S3C_VIDCON0 = (13 << 6) | (1 << 4);
// 第五位指明VSYNC为反向, 第六位HSYNC为反向
S3C_VIDCON1 = (1 <<6) | (1 <<5);
//设置屏的时序
S3C_VIDTCON0 = (1 << 16) | (1 << 8) | 9;
S3C_VIDTCON1 = (1 << 16) | (1 << 8) | 40;
S3C_VIDTCON2 = (271<<11)|(479<<0);
//设置窗口格式
S3C_WINCON0 = 11<<2; //设置24BPP
//设置窗口位置
S3C_VIDOSD0A = (0<<11)|(0<<0); // 左上角坐标,0-10位是纵坐标 11-21是横坐标
S3C_VIDOSD0B = ((479)<<11) | ((271)<<0); // 右下角坐标
S3C_VIDOSD0C = 480 * 272 ; // 窗口尺寸
//设置窗口1的开始和结束的缓存地址与地址在内存中的存放地址以及缓存的大小
S3C_VIDW00ADD0B0 = (U32)LCD_BUFFER;
S3C_VIDW00ADD1B0 = ((U32)LCD_BUFFER + 480 * 272 * 4 ) & 0xffffff;
S3C_VIDW00ADD2 = (0 << 13)|(480 * 4 );
lcd_Enable();
S3C_WINCON0 |= S3C_WINCONx_ENWIN_F_ENABLE;
S3C_WINCON1 = 0;
S3C_WINCON2 = 0;
S3C_WINCON3 = 0;
S3C_WINCON4 = 0;
}
void lcd_disable(void)
{
S3C_VIDCON0 &= (~(S3C_VIDCON0_ENVID_ENABLE | S3C_VIDCON0_ENVID_F_ENABLE));
}
/**************************************************************
480*272 TFT LCD
**************************************************************/
void lcd_Enable(void)
{
S3C_VIDCON0 |= (S3C_VIDCON0_ENVID_ENABLE | S3C_VIDCON0_ENVID_F_ENABLE);
}
void fill()
{
int i = 0;
int j = 0;
for(i = 0; i < Y_SIZE / 2; i++)
{
for(j = 0; j < X_SIZE; j++)
{
U8 r = 255;
U8 g = 0;
U8 b = 0;
U32 co = ((r << 16) | (g << 8) | b);
LCD_BUFFER[i][j] = co;
}
}
}
开发环境:
OS: MAC OS
IDE: ECLIPSE
6410启动LCD其实很简单,只需要设置几个寄存器就行,以上放上我的初始化代码。