9.2.3 RGB888驱动程序

 

/**

* @brief lcd 引脚配置及端口初始化

*/

static void _bsp_lcd_gpio_config(void){

uint32_t i;

 

GPIO_Init(LCD_BKL_PORT, LCD_BKL_PIN, 1, 0, 0, 0);//初始化背光引脚

GPIO_SetBit(LCD_BKL_PORT, LCD_BKL_PIN);//背光引脚拉高

GPIO_Init(LCD_RST_PORT, LCD_RST_PIN, 1, 0, 0, 0);//初始化复位引脚

GPIO_ClrBit(LCD_RST_PORT, LCD_RST_PIN);//复位引脚拉低

for(i = 0; i < 1000000; i++) __NOP();

GPIO_SetBit(LCD_RST_PORT, LCD_RST_PIN);//复位引脚拉高

for(i = 0; i < 1000000; i++) __NOP();

 

PORT_Init(LCD_B0_PORT, LCD_B0_PIN, LCD_B0_SEL, 0);//初始化RGB888 24根数据端口

PORT_Init(LCD_B1_PORT, LCD_B1_PIN, LCD_B1_SEL, 0);

PORT_Init(LCD_B2_PORT, LCD_B2_PIN, LCD_B2_SEL, 0);

PORT_Init(LCD_B3_PORT, LCD_B3_PIN, LCD_B3_SEL, 0);

PORT_Init(LCD_B4_PORT, LCD_B4_PIN, LCD_B4_SEL, 0);

PORT_Init(LCD_B5_PORT, LCD_B5_PIN, LCD_B5_SEL, 0);

PORT_Init(LCD_B6_PORT, LCD_B6_PIN, LCD_B6_SEL, 0);

PORT_Init(LCD_B7_PORT, LCD_B7_PIN, LCD_B7_SEL, 0);

PORT_Init(LCD_G0_PORT, LCD_G0_PIN, LCD_G0_SEL, 0);

PORT_Init(LCD_G1_PORT, LCD_G1_PIN, LCD_G1_SEL, 0);

PORT_Init(LCD_G2_PORT, LCD_G2_PIN, LCD_G2_SEL, 0);

PORT_Init(LCD_G3_PORT, LCD_G3_PIN, LCD_G3_SEL, 0);

PORT_Init(LCD_G4_PORT, LCD_G4_PIN, LCD_G4_SEL, 0);

PORT_Init(LCD_G5_PORT, LCD_G5_PIN, LCD_G5_SEL, 0);

PORT_Init(LCD_G6_PORT, LCD_G6_PIN, LCD_G6_SEL, 0);

PORT_Init(LCD_G7_PORT, LCD_G7_PIN, LCD_G7_SEL, 0);

PORT_Init(LCD_R0_PORT, LCD_R0_PIN, LCD_R0_SEL, 0);

PORT_Init(LCD_R1_PORT, LCD_R1_PIN, LCD_R1_SEL, 0);

PORT_Init(LCD_R2_PORT, LCD_R2_PIN, LCD_R2_SEL, 0);

PORT_Init(LCD_R3_PORT, LCD_R3_PIN, LCD_R3_SEL, 0);

PORT_Init(LCD_R4_PORT, LCD_R4_PIN, LCD_R4_SEL, 0);

PORT_Init(LCD_R5_PORT, LCD_R5_PIN, LCD_R5_SEL, 0);

PORT_Init(LCD_R6_PORT, LCD_R6_PIN, LCD_R6_SEL, 0);

PORT_Init(LCD_R7_PORT, LCD_R7_PIN, LCD_R7_SEL, 0);

 

PORT_Init(LCD_VSYNC_PORT, LCD_VSYNC_PIN, LCD_VSYNC_SEL, 0);//初始化垂直同步

PORT_Init(LCD_HSYNC_PORT, LCD_HSYNC_PIN, LCD_HSYNC_SEL, 0);//初始化水平同步

PORT_Init(LCD_DEN_PORT , LCD_DEN_PIN , LCD_DEN_SEL , 0);//初始化数据使能

PORT_Init(LCD_DCLK_PORT , LCD_DCLK_PIN , LCD_DCLK_SEL , 0);//初始化时钟端口

}

#define LCD_BUF_UT uint32_t

#define LCD_WIDTH (800)

#define LCD_HEIGTH (480)

#define LCD_ClkDiv (4)

#define LCD_Format (LCD_FMT_RGB888)

#define LCD_Hfp (40)

#define LCD_Hbp (40)

#define LCD_Vfp (13)

#define LCD_Vbp (29)

#define LCD_HsyncWidth (48)

#define LCD_VsyncWidth (48)

LCD_BUF_UT *_LCD_Buffer = (LCD_BUF_UT *)SDRAMM_BASE;

 

/**

* @brief lcd 初始化

*/

void _lcd_init_sturct(){

LCD_InitStructure LCD_initStruct;

 

LCD_initStruct.ClkDiv = LCD_ClkDiv;//时钟分频 4分频

LCD_initStruct.Format = LCD_Format;//数据格式 RGB888

LCD_initStruct.HnPixel = LCD_WIDTH;//水平方向像素点 宽度800

LCD_initStruct.VnPixel = LCD_HEIGTH;//垂直方向像素点 高度480

LCD_initStruct.Hfp = LCD_Hfp;//水平同步信号的前肩

LCD_initStruct.Hbp = LCD_Hbp;//水平同步信号的后肩

LCD_initStruct.Vfp = LCD_Vfp;//垂直同步信号的前肩

LCD_initStruct.Vbp = LCD_Vbp;//垂直同步信号的后肩

LCD_initStruct.HsyncWidth = LCD_HsyncWidth;//表示水平同步信号的宽度

LCD_initStruct.VsyncWidth = LCD_VsyncWidth;//表示垂直同步脉冲的宽度

LCD_initStruct.DataSource = (uint32_t)_LCD_Buffer;//数据地址

LCD_initStruct.Background = 0x0;//背景色

LCD_initStruct.SampleEdge = LCD_SAMPLE_RISE; // 上升沿采样

LCD_initStruct.IntEOTEn = 1; //End of Transter(传输完成)中断使能

LCD_Init(LCD, &LCD_initStruct);

}

 

/**

* @brief rgb888 lcd init

*/

void bsp_lcd_rgb_init(void)

{

_MemoryInit();//SDRAM init

_bsp_lcd_gpio_config();//lcd gpio init

_lcd_init_sturct();//lcd init

LCD_Start(LCD);//start lcd

}

/**

* @brief 画点函数

* @param x :需要画点的 x 坐标值

* @param y :需要画点的 y 坐标值

* @param color :颜色值

*/

void lcd_draw_point(uint16_t x, uint16_t y, uint32_t color)

{

_LCD_Buffer[y * LCD_WIDTH + x] = color;

}

下一页
上一页
    • 联系电话

    • 0755—83453881
    • 服务时间

    • 周一至周五 9:00-18:00
    • 高通GT-HMI交流群