因仑“3+1”工程特种兵精英论坛

标题: S3C2440 LCD控制器 [打印本页]

作者: 曾经最美    时间: 2016-6-20 20:02
标题: S3C2440 LCD控制器
/* LCDCON1 */
#define LCD_WIDTH  240
#define LCD_HEIGHT 320
#define LCD_CLKVAL 7                // HCLK/((CLKVAL+1)*2) 100M/2/(7+1) = 6.25M
/* LCDCON2 */
#define LCD_VBPD 0
#define LCD_VFPD 2
#define LCD_VSPW 2

/* LCDCON3 */
#define LCD_HBPD 20
#define LCD_HFPD 10

/* LCDCON4 */
#define LCD_SPW 10

#pragma pack(100)
unsigned short VRAM[LCD_HEIGHT][LCD_WIDTH];
#pragma pack()

#define M5D(n)    ((n)&0x1fffff)

#define LCD_ADDR  (cyg_uint32)VRAM

#define LCD_POWOFF_TIMEOUT         600     //60s

static struct pos {
    cyg_uint32 x;
    cyg_uint32 y;
    cyg_uint16 c;
    cyg_uint32 idle;
    cyg_uint32 busy;
} cursor;

static void Lcd_Port_Init(void)
{
    rGPCUP  = 0xFFFFFFFF;  // Disable Pull-up register
    rGPCCON = 0xAAAA02A8;  // Initialize VD[7:0],VM,VFRAME,VLINE,VCLK

    rGPDUP  = 0xFFFFFFFF;  // Disable Pull-up register
    rGPDCON = 0xAAAAAAAA;  // Initialize VD[15:8]
}

static void LCD_Init(void)
{
    rLCDCON1 = (LCD_CLKVAL << 8) | (3 << 5) | (12 << 1);
    rLCDCON2 = (LCD_VBPD << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_VFPD << 6)|(LCD_VSPW << 0);
    rLCDCON3 = (LCD_HBPD << 19) | ((LCD_WIDTH - 1) << 8) | (LCD_HFPD << 0);
    rLCDCON4 = (LCD_SPW << 0);

#if !defined(LCD_CON5)
#    define LCD_CON5 ((1<<11) | (1 << 9) | (1 << 8) | (1 << 3) | (1 << 0))
#endif
    rLCDCON5 = LCD_CON5;

    rLCDSADDR1 = ((LCD_ADDR >> 22) << 21) | ((M5D(LCD_ADDR >> 1)) << 0);
    rLCDSADDR2 = M5D((LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2) >> 1);
    rLCDSADDR3 = LCD_WIDTH;

    rLCDINTMSK |= 3;
    rLPCSEL &= (~7);

    rTPAL = 0x0;
    rLPCSEL &= ~((1 << 4) | 1);
}





欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4