简介

  • rt-smart相关文章

    • 《rt-smart的第一个应用程序,imx6ull用户态点灯》

    • 《rt-smart用户态通过IPC通信玩转传感器数据》

  • rt-thread驱动相关文章

    • 《rt-thread驱动框架分析》-pin驱动

    • 《rt-thread驱动框架分析》-i2c驱动

  • 对于imx6ull这个平台,目前RT-Thread是没有对应的BSP,已经相关的硬件驱动,所以通过这个平台来学习RT-Thread的驱动框架也是非常好的,而且又能玩rt-smart,两全其美。

  • 100ask_imx6ull带有7寸的屏幕,有屏幕不玩起来还是挺无聊的,所以花了点时间对接一下相关驱动,LCD驱动和touch驱动,我分成两篇。

  • 为了把屏幕跑起来,中间走了不少路,屏幕出现一闪一闪的(时钟配置错了),屏幕错位等,下面讲解的是我个人的做法,不对的地方,请指出。。。。

  • 关于RT-Smart对接屏幕,后面我会重新更新一篇文章,并对比一个rt-thread和rt-smart的不同之处。

  • 基于100ask_imx6ull的rt-thread和rt-smart仓库:

    • rt-thread的仓库:https://gitee.com/RiceChen0/imx6ull_rt_rthread

    • rt-smart的厂库:https://gitee.com/RiceChen0/imx6ull_rt_smart

LCD驱动:

  • imx6ull这款芯片自带LCD控制器,所以比较方便。

  • 关于LCD驱动,从RTT的代码是没有对应的驱动框架的,所以直接对接设备驱动框架中。而且只需要实现通用设备接口的init和control接口。

    /* common device interface */rt_err_t  (*init)   (rt_device_t dev);rt_err_t  (*open)   (rt_device_t dev, rt_uint16_t oflag);rt_err_t  (*close)  (rt_device_t dev);rt_size_t (*read)   (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);rt_size_t (*write)  (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);rt_err_t  (*control)(rt_device_t dev, int cmd, void *args);

init接口:我主要做了以下四个步骤(详情实现请clone代码):

  1. framebuffer清0,

  2. LCD控制器的相关GPIO初始化

  3. LCD控制器的相关时钟初始化

  4. LCD控制器的相关配置初始化(这里要结合屏幕手册进行配置)

  • 时钟配置,控制配置需要参考LCD的手册。

control接口:

  • rtt提供了如下6条命令:

/*** graphic device control command*/
#define RTGRAPHIC_CTRL_RECT_UPDATE      0
#define RTGRAPHIC_CTRL_POWERON          1
#define RTGRAPHIC_CTRL_POWEROFF         2
#define RTGRAPHIC_CTRL_GET_INFO         3
#define RTGRAPHIC_CTRL_SET_MODE         4
#define RTGRAPHIC_CTRL_GET_EXT          5
  • 因为我使用的是单个FB,所以实际只实现了3条命令:RTGRAPHIC_CTRL_POWERON、RTGRAPHIC_CTRL_POWEROFF、RTGRAPHIC_CTRL_GET_INFO

static rt_err_t imx6ull_lcd_control(rt_device_t dev, int cmd, void *args)
{struct imx6ull_lcd *lcd_dev = (struct imx6ull_lcd *)dev;switch(cmd){case RTGRAPHIC_CTRL_RECT_UPDATE:{break;}case RTGRAPHIC_CTRL_POWERON:{rt_pin_write(IMX6ULL_LCD_BL_PIN, PIN_HIGH);break;}case RTGRAPHIC_CTRL_POWEROFF:{rt_pin_write(IMX6ULL_LCD_BL_PIN, PIN_LOW);break;}case RTGRAPHIC_CTRL_GET_INFO:{struct rt_device_graphic_info *info = (struct rt_device_graphic_info*)args;RT_ASSERT(info != RT_NULL);rt_memcpy(info, &lcd_dev->info, sizeof(lcd.info));break;}}return RT_EOK;
}

注册设备

  • 前面也说道LCD没有独立的驱动框架,所以以一个通用设备驱动框架来实现:

int rt_hw_lcd_init(void)
{rt_err_t ret;lcd.device.type    = RT_Device_Class_Graphic;
#ifdef RT_USING_DEVICE_OPSlcd.device.ops         = &lcd_ops;
#elselcd.device.init    = imx6ull_lcd_init;lcd.device.open    = RT_NULL;lcd.device.close   = RT_NULL;lcd.device.read    = RT_NULL;lcd.device.write   = RT_NULL;lcd.device.control = imx6ull_lcd_control;
#endiflcd.device.user_data = (void *)&lcd.info;ret = rt_device_register(&lcd.device, "lcd", RT_DEVICE_FLAG_RDWR);return ret;
}
INIT_BOARD_EXPORT(rt_hw_lcd_init);

效果(通过刷屏演示)

  • 在代码中,我提供了测试样例,命令:lcd_test

关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。

《rt-thread驱动框架分析》-lcd驱动相关推荐

  1. LCD 设备驱动框架分析及核心结构

    Linux 下很多东西都是和结构体相关,举个例子,时钟大家都知道吧,Linux 下对应时钟的东西就有好几个结构体,所以你要是想明白Linux 下那些东西,对结构体要有所了解,LCD 是基础的驱动设备, ...

  2. framebuffer驱动详解2——framebuffer驱动框架分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.framebuffer驱动框架总览 1.驱动框架部分 (1)drivers/video/fbmem.c(主要的文件) 创建graphic ...

  3. rt-thread SDIO驱动框架分析(SD卡驱动\SD Nand驱动)

    rt-thread SDIO驱动框架分析之SD卡驱动 文章目录 rt-thread SDIO驱动框架分析之SD卡驱动 1. 前言 2. SDIO通用驱动框架介绍 3. 文件架构分析 4. SDIO设备 ...

  4. Linux USB驱动框架分析 【转】

    转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...

  5. 驱动框架2——内核驱动框架中LED的基本情况、初步分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.内核驱动框架中LED的基本情况 1.相关文件 (1)drivers/leds目录 驱动框架规定的LED这种硬件的驱动应该待的地方. (2 ...

  6. Linux PCI驱动框架分析:(Peripheral Component Interconnect,外部设备互联)

    <DPDK 20.05 | rte_pci_bus思维导图 | 第一版> <linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作> <Linux指令:ls ...

  7. Linux PCIe驱动框架分析(第二章)

    目录 项目背景 1. 概述 2. 数据结构 3. 流程分析 3.1 设备驱动模型 3.2 初始化 3.2.1 pci_bus_match 3.2.2 pci_device_probe 3.3 枚举 项 ...

  8. I2C驱动框架分析(3):DW_I2C驱动分析

    I2C驱动框架分析(1):I2C重要概念与数据结构 I2C驱动框架分析(2):I2C框架源码分析 I2C驱动框架分析(3):DW_I2C驱动分析 第三章:DW_I2C驱动 其驱动文件在drivers/ ...

  9. linux内核usb驱动框架,基于S3C2440平台的linux2.6.22内核版本的USB驱动框架分析

    基于S3C2440平台的linux2.6.22内核版本的USB驱动框架分析 发布时间:2014-07-18 16:47:31来源:红联作者:linux08071151 driver/usb/host/ ...

最新文章

  1. eclipse如何修改dynamic web module version
  2. 皮一皮:原来网恋就是这个感觉...
  3. 雷林鹏分享:jQuery EasyUI 数据网格 - 条件设置行背景颜色
  4. 基于环信的仿QQ即时通讯的简单实现
  5. Java教程:SpringBoot常用配置
  6. Spring Bootstrap中带有配置元数据的高级配置
  7. ElementUI table组件,表格组件,单击单元格可编辑逻辑
  8. linux io函数,unix/Linux低级IO函数的用法有哪些? 爱问知识人
  9. 八年级信息技术认识计算机网络,初二信息技术课名称:认识计算机网络.doc
  10. redis事务冲突问题 - 乐观锁和悲观锁
  11. iOS 8 Auto Layout界面自动布局系列5-自身内容尺寸约束、修改约束、布局动画
  12. 向量自回归VAR模型、结构向量自回归SVAR模型、VMA模型
  13. java软件工程师简历格式模板,重要概念一网打尽!
  14. 论文学习笔记:Detecting and quantifying causal associations in large nonlinear time series datasets
  15. 移动云API开放平台助力开发者驰骋云端
  16. 制作一个简单的轮播图(详解新手教学)
  17. 亚马逊云科技连续12年蝉联Gartner云基础设施和平台服务魔力象限领导者
  18. PAT-1014 福尔摩斯的约会
  19. 垃圾回收与垃圾收集算法
  20. 区块链人才能力评价测试机构亮相

热门文章

  1. Flask 框架流程
  2. JSON学习及cJSON使用
  3. 向量的几种距离计算方法
  4. Vue的生命周期的详解
  5. 电子信息工程有哪些SCI期刊推荐? - 易智编译EaseEditing
  6. 『言善信』Fiddler工具 — 17、抓取移动端App请求
  7. 服务器的上行、下行宽带
  8. Reactor模型 介绍
  9. zookeeper单机服务器启动流程
  10. Docker 安装 jellyfin