am3517 lcd 裸机代码

来源:互联网 发布:python入门书籍推荐 编辑:程序博客网 时间:2024/05/19 10:34
#include <common.h>
#include <netdev.h>
#include <asm/io.h>
#include <asm/arch/mem.h>
#include <asm/arch/mux.h>
#include <asm/arch/sys_proto.h>
#include <i2c.h>
#include <asm/mach-types.h>
#include <asm/arch/gpio.h>
#include <video_fb.h>

#include "lcd.h"

#define        LCD_Y_SIZE    480
#define        LCD_X_SIZE    640

static u16 lcd_static_mem[LCD_Y_SIZE][LCD_X_SIZE];        //__attribute__((aligned(0x4)));

//#define LCDDMA_BASE 0x63601000

int omap3_lcd_init(void)
{    
//    u32 l = pad_read_reg(CONTROL_PADCONF_DSS_PCLK);

    pad_write_reg(CONTROL_PADCONF_DSS_PCLK,0x01100110);
    pad_write_reg(CONTROL_PADCONF_DSS_VSYNC,0x01000110);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA0,0x01000100);    
    pad_write_reg(CONTROL_PADCONF_DSS_DATA2,0x01000000);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA4,0x01000100);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA6,0x01000100);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA8,0x01000100);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA10,0x01000100);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA12,0x01000100);
    pad_write_reg(CONTROL_PADCONF_DSS_DATA14,0x01000100);


    u32 m = clkctrl_read_reg(CM_CLKEN_PLL);
//    printf("CM_CLKEN_PLL is %d\n",m);
    m |= 0x7 << 16;
    clkctrl_write_reg(CM_CLKEN_PLL,m);

    clkctrl_write_reg(CM_CLKSEL2_PLL,0x0000E102);
    dss_clk_write_reg(CM_CLKSEL_DSS,0x00010002);

    dss_clk_write_reg(CM_FCLKEN_DSS, 7);
    dss_clk_write_reg(CM_ICLKEN_DSS, 1);
    dss_clk_write_reg(CM_AUTOIDLE_DSS, 0);
    dss_clk_write_reg(CM_SLEEPDEP_DSS,0);
    dss_clk_write_reg(CM_CLKSTCTRL_DSS,0);

    dss_write_reg(DSS_SYSCONFIG,0x0002);
    while(! dss_read_reg(DSS_SYSSTATUS));


    dispc_write_reg(DISPC_CONTROL, 0x00018108 );//change 18309 to 18109 for 16bit per pix
    dispc_write_reg(DISPC_SIZE_LCD, 0x01df027f);    //size:640*480
    dispc_write_reg(DISPC_CONFIG,0x4);
    dispc_write_reg(DISPC_TIMING_H, 0x0720101e);    //LCD Timing params
    dispc_write_reg(DISPC_TIMING_V, 0x02100a03);
    dispc_write_reg(DISPC_POL_FREQ, 0x00);
    dispc_write_reg(DISPC_DIVISOR, 0x00010001);     //maybe need change

//    dispc_write_reg(DISPC_GLOBAL_ALPHA, 0x0ff);
    dispc_write_reg(DISPC_GFX_SIZE, 0x01df027f);    
    dispc_write_reg(DISPC_GFX_FIFO_THRESHOLD, 0x03ff0300);
    dispc_write_reg(DISPC_GFX_ROW_INC, 0x01);
    dispc_write_reg(DISPC_GFX_PIXEL_INC, 0x01);

    
    memset(lcd_static_mem, 0xff, sizeof(lcd_static_mem));
    dispc_write_reg(DISPC_GFX_BA0, (unsigned int )lcd_static_mem);
    

    dispc_write_reg(DISPC_GFX_POSITION, 0);
    dispc_write_reg(DISPC_GFX_ATTRIBUTES, 0x02d);    //change for GFX configuration
    

    dispc_write_reg(DISPC_CONTROL, 0x00018129);
    printf("lcd color test\n");

    u16 x,y;
    for(y=0;y<480;y++)
    {
        for(x=0;x<640;x++)
            lcd_static_mem[y][x]=0x07e0;
    }

    return 0;
}
原创粉丝点击