c++ template 传入结构体_LCD原理详解及裸机程序分析——第004节_编程抽象出重要结构体...

8be34e9f5f2732524f2b9105b83cce52.png

来源:韦东山嵌入式专栏_ARM裸机加强版维基教程

作者:韦东山

本文字数:1449,阅读时长:1.5分钟

开始正式编写程序,根据前面的框架,新建如下文件:

font.c、framebuffer.c、geometry.c、lcd.c、lcd_4.3.c、lcd_controller.c、s3c2440_lcd_controller.c、lcd_test.c

首先编写lcd_controller.c,它向上要接收不同LCD的参数,向下要使用这些参数设置对应的LCD控制器。

前面我们列举了LCD的参数,例如引脚的极性、时序、数据的格式bpp、分辨率等,使用面向对象的思维方式,将这些封装成结构体放在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;

以后就使用lcd_params结构体来表示lcd参数。

对于有多个lcd的情况,再定义个一个结构体,包含指针初始化函数和使能函数,放在lcd_controller.h里面:

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

最后在lcd_controller.c里传入lcd参数,再通过指针函数初始化对应的lcd控制器:

void lcd_controller_init(p_lcd_params plcdparams){    /* 调用2440的LCD控制器的初始化函数 */    lcd_controller.init(plcdparams);}

在s3c2440_lcd_controller.c还需构造一个当前soc的lcd控制器结构体:

struct lcd_controller s3c2440_lcd_controller = {    .init    = xxx,    .enalbe  = xxx,    .disable = xxx,};

上一篇:LCD原理详解及裸机程序分析——第003节_编程框架与准备

下一篇:LCD原理详解及裸机程序分析——第005节_LCD控制器编程

点击“了解更多”阅读更多相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值