框架结构

LCD测试层:lcd_test.c
LCD应用层:geometry.c(画几何)font.c(写字)
LCD基础层:framebuffer.c


lcd.c、lcd.h

lcd.h内容
#ifndef _LCD_H
#define _LCD_H

enum {
    NORMAL = 0,
    INVERT = 1, 
};

/* NORMAL : 正常极性
 * INVERT : 反转极性
 */
typedef struct pins_polarity {
    int vclk;  /* normal: 在下降沿获取数据 */
    int rgb;   /* normal: 高电平表示1 */
    int hsync; /* normal: 高脉冲 */
    int vsync; /* normal: 高脉冲 */
}pins_polarity, *p_pins_polarity;;

typedef struct time_sequence {
    /* 垂直方向 */
    int tvp; /* vysnc脉冲宽度 */
    int tvb; /* 上边黑框, Vertical Back porch */
    int tvf; /* 下边黑框, Vertical Front porch */

    /* 水平方向 */
    int thp; /* hsync脉冲宽度 */
    int thb; /* 左边黑框, Horizontal Back porch */
    int thf; /* 右边黑框, Horizontal Front porch */

    int vclk;
}time_sequence, *p_time_sequence;

typedef struct lcd_params {
    /* 引脚极性 */
    pins_polarity pins_pol;
    
    /* 时序 */
    time_sequence time_seq;

    /* 分辨率, bpp */
    int xres;
    int yres;
    int bpp;
    
    /* framebuffer的地址 */
    unsigned int fb_base;    
}lcd_params, *p_lcd_params;

#endif

然后就可以在下层lcd_35.c等定义一个lcd_params变量实现不同lcd的参数

lcd_params lcd_35_params = {...};
lcd_params lcd_43_params = {...};
...

LCD相关:lcd_35.c、lcd_43.c等,针对LCD的时序进行设置

定义结构体
struct lcd_operation{
    void(* init)(void);
}
lcd_35.c声明结构体
struct lcd_operation lcd_35_opreation{
    *init = lcd_35_init;
}
lcd_43.c声明结构体
struct lcd_operation lcd_43_opreation{
    *init = lcd_43_init;
}

上层可通过定义struct lcd_operation *opop指向不同的结构体达到调用不同的初始化函数效果


lcd_controller.c、lcd_controller.h(耦合层)
从上级接收不同的LCD参数,向下调用不同的SOC处理,例如以下

void lcd_controller_init(p_lcd_params plcdparams){
    /* 调用2440的LCD控制器的初始化函数 */
    lcd_controller.init(plcdparams);
}
lcd_controller.h结构体定义
#ifndef _LCD_CONTROLLER_H
#define _LCD_CONTROLLER_H

#include "lcd.h"

typedef struct lcd_controller {
    void (*init)(p_lcd_params plcdparams);
    void (*enable)(void);
    void (*disable)(void);
}lcd_controller, *p_lcd_controller;

#endif /* _LCD_CONTROLLER_H */

SOC层:s3c2440_lcd_controller.c、am335x_lcd_controller.c等,针对不同SOC的LCD控制寄存器、引脚等进行设置。
功能:从上级接收不同LCD参数设置LCD控制寄存器、引脚等(p_lcd_params参数结构体定义在lcd.h中)

定义结构体
typedef struct lcd_controller {
    void (*init)(p_lcd_params plcdparams);
    void (*enable)(void);
    void (*disable)(void);
}lcd_controller, *p_lcd_controller;

Kyseng
1 声望3 粉丝

电子爱好者一枚,利用工作空余时间记录一下学习过程