《rt-thread驱动框架分析》-lcd驱动
简介
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代码):
framebuffer清0,
LCD控制器的相关GPIO初始化
LCD控制器的相关时钟初始化
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驱动相关推荐
- LCD 设备驱动框架分析及核心结构
Linux 下很多东西都是和结构体相关,举个例子,时钟大家都知道吧,Linux 下对应时钟的东西就有好几个结构体,所以你要是想明白Linux 下那些东西,对结构体要有所了解,LCD 是基础的驱动设备, ...
- framebuffer驱动详解2——framebuffer驱动框架分析
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.framebuffer驱动框架总览 1.驱动框架部分 (1)drivers/video/fbmem.c(主要的文件) 创建graphic ...
- rt-thread SDIO驱动框架分析(SD卡驱动\SD Nand驱动)
rt-thread SDIO驱动框架分析之SD卡驱动 文章目录 rt-thread SDIO驱动框架分析之SD卡驱动 1. 前言 2. SDIO通用驱动框架介绍 3. 文件架构分析 4. SDIO设备 ...
- Linux USB驱动框架分析 【转】
转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...
- 驱动框架2——内核驱动框架中LED的基本情况、初步分析
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.内核驱动框架中LED的基本情况 1.相关文件 (1)drivers/leds目录 驱动框架规定的LED这种硬件的驱动应该待的地方. (2 ...
- Linux PCI驱动框架分析:(Peripheral Component Interconnect,外部设备互联)
<DPDK 20.05 | rte_pci_bus思维导图 | 第一版> <linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作> <Linux指令:ls ...
- Linux PCIe驱动框架分析(第二章)
目录 项目背景 1. 概述 2. 数据结构 3. 流程分析 3.1 设备驱动模型 3.2 初始化 3.2.1 pci_bus_match 3.2.2 pci_device_probe 3.3 枚举 项 ...
- I2C驱动框架分析(3):DW_I2C驱动分析
I2C驱动框架分析(1):I2C重要概念与数据结构 I2C驱动框架分析(2):I2C框架源码分析 I2C驱动框架分析(3):DW_I2C驱动分析 第三章:DW_I2C驱动 其驱动文件在drivers/ ...
- linux内核usb驱动框架,基于S3C2440平台的linux2.6.22内核版本的USB驱动框架分析
基于S3C2440平台的linux2.6.22内核版本的USB驱动框架分析 发布时间:2014-07-18 16:47:31来源:红联作者:linux08071151 driver/usb/host/ ...
最新文章
- eclipse如何修改dynamic web module version
- 皮一皮:原来网恋就是这个感觉...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 条件设置行背景颜色
- 基于环信的仿QQ即时通讯的简单实现
- Java教程:SpringBoot常用配置
- Spring Bootstrap中带有配置元数据的高级配置
- ElementUI table组件,表格组件,单击单元格可编辑逻辑
- linux io函数,unix/Linux低级IO函数的用法有哪些? 爱问知识人
- 八年级信息技术认识计算机网络,初二信息技术课名称:认识计算机网络.doc
- redis事务冲突问题 - 乐观锁和悲观锁
- iOS 8 Auto Layout界面自动布局系列5-自身内容尺寸约束、修改约束、布局动画
- 向量自回归VAR模型、结构向量自回归SVAR模型、VMA模型
- java软件工程师简历格式模板,重要概念一网打尽!
- 论文学习笔记:Detecting and quantifying causal associations in large nonlinear time series datasets
- 移动云API开放平台助力开发者驰骋云端
- 制作一个简单的轮播图(详解新手教学)
- 亚马逊云科技连续12年蝉联Gartner云基础设施和平台服务魔力象限领导者
- PAT-1014 福尔摩斯的约会
- 垃圾回收与垃圾收集算法
- 区块链人才能力评价测试机构亮相