S5PV210之LCD

注意:本人開發板是深圳九鼎創展科技的產品,7寸LCD分辨率是800*480。
 
#include "main.h"

#define GPF0CON (*(volatile unsigned long *)0xE0200120)
#define GPF1CON (*(volatile unsigned long *)0xE0200140)
#define GPF2CON (*(volatile unsigned long *)0xE0200160)
#define GPF3CON (*(volatile unsigned long *)0xE0200180)

#define GPD0CON (*(volatile unsigned long *)0xE02000A0)
#define GPD0DAT (*(volatile unsigned long *)0xE02000A4)

#define CLK_SRC1 (*(volatile unsigned long *)0xe0100204)
#define CLK_DIV1 (*(volatile unsigned long *)0xe0100304)
#define DISPLAY_CONTROL (*(volatile unsigned long *)0xe0107008)

#define VIDCON0 (*(volatile unsigned long *)0xF8000000)
#define VIDCON1 (*(volatile unsigned long *)0xF8000004)
#define VIDTCON2 (*(volatile unsigned long *)0xF8000018)
#define WINCON0 (*(volatile unsigned long *)0xF8000020)
#define WINCON2 (*(volatile unsigned long *)0xF8000028) 
#define VIDOSD0A (*(volatile unsigned long *)0xF8000040)
#define VIDOSD0B (*(volatile unsigned long *)0xF8000044)
#define VIDOSD0C (*(volatile unsigned long *)0xF8000048)
#define SHADOWCON (*(volatile unsigned long *)0xF8000034)  

#define VIDW00ADD0B0 (*(volatile unsigned long *)0xF80000A0)
#define VIDW00ADD1B0 (*(volatile unsigned long *)0xF80000D0)

#define VIDTCON0 (*(volatile unsigned long *)0xF8000010)
#define VIDTCON1 (*(volatile unsigned long *)0xF8000014)
//下面註釋的參數是本開發板廠家出廠參數
#define HSPW (40)                   // 1~40 DCLK
#define HBPD (10 - 1)              // 46
#define HFPD (240 - 1)            // 16  - 210  - 354
#define VSPW (20)                   // 1~20 DCLK
#define VBPD (10 - 1)              // 23
#define VFPD (30 - 1)              // 7  - 22 -  147
// FB地址(即顯存地址)
#define FB_ADDR (0x23000000)//隨便定,除了23,還可以25、27、
#define ROW (480)
#define COL   (800)
#define HOZVAL   (COL-1)
#define LINeval_r  (ROW-1)

#define XSIZE   COL
#define YSIZE   ROW


// 初始化LCD
void lcd_init(void)
{
// 配置引腳用於LCD功能
GPF0CON = 0x22222222;
GPF1CON = 0x22222222;
GPF2CON = 0x22222222;
GPF3CON = 0x22222222;

// 打開背光 GPD0_0(PWMTOUT0)
GPD0CON &= ~(0xf<<0);
GPD0CON |= (1<<0);                  // output mode
GPD0DAT &= ~(1<<0);             // output 0 to enable backlight

// 10: RGB=FIMD I80=FIMD ITU=FIMD
DISPLAY_CONTROL = 2<<0;

// bit[26~28]:使用RGB接口
// bit[18]:RGB 並行
// bit[2]:選擇時鐘源爲HCLK_DSYS=166MHz
VIDCON0 &= ~( (3<<26)|(1<<18)|(1<<2) );

// bit[1]:使能lcd控制器
// bit[0]:當前幀結束後使能lcd控制器
VIDCON0 |= ( (1<<0)|(1<<1) );

// bit[6]:選擇需要分頻
// bit[6~13]:分頻係數爲5,即VCLK = 166M/(4+1) = 33M
VIDCON0 |= 4<<6 | 1<<4;


// H43-HSD043I9W1.pdf(p13) 時序圖:VSYNC和HSYNC都是低脈衝
// s5pv210芯片手冊(p1207) 時序圖:VSYNC和HSYNC都是高脈衝有效,所以需要反轉
VIDCON1 |= 1<<5 | 1<<6;

// 設置時序
VIDTCON0 = VBPD<<16 | VFPD<<8 | VSPW<<0;
VIDTCON1 = HBPD<<16 | HFPD<<8 | HSPW<<0;
// 設置長寬(物理屏幕)
VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0);

// 設置window0
// bit[0]:使能
// bit[2~5]:24bpp(RGB888)
WINCON0 |= 1<<0;
WINCON0 &= ~(0xf << 2);
WINCON0 |= (0xB<<2) | (1<<15);

#define LeftTopX     0
#define LeftTopY     0
#define RightBotX   799//可以設置得顯存空間更大,1920,不過要看內存大小
#define RightBotY   479

// 設置window0的上下左右
// 設置的是顯存空間的大小
VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0);
VIDOSD0B = (RightBotX<<11) | (RightBotY << 0);
VIDOSD0C = (LINEVAL + 1) * (HOZVAL + 1);


// 設置fb的地址(映射空間地址)(像素需要3個點,不過要像素對齊,所以是乘以4)
VIDW00ADD0B0 = FB_ADDR;
VIDW00ADD1B0 = (((HOZVAL + 1)*4 + 0) * (LINEVAL + 1)) & (0xffffff);

// 使能channel 0傳輸數據
SHADOWCON = 0x1;
}
在編寫代碼中,發現S5PV210數據手冊中P1249出現一個小錯誤,現截圖提醒:
S5PV210之LCD

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章