框架结构
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 *op
让op
指向不同的结构体达到调用不同的初始化函数效果
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;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。