Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
lcd驱动
《rt-thread驱动框架分析》-lcd驱动
发布于 2021-01-22 21:54:15 浏览:1803
订阅该版
[tocm] ## 简介 - rt-smart相关文章 - [《rt-smart的第一个应用程序,imx6ull用户态点灯》](https://mp.weixin.qq.com/s/vFvxlkPuEa2xQhaho-kKoQ) - [《rt-smart用户态通过IPC通信玩转传感器数据》](https://mp.weixin.qq.com/s/nmO_0LH2pztHW4MK3ZLK6A) - rt-thread驱动相关文章 - [《rt-thread驱动框架分析》-pin驱动](https://mp.weixin.qq.com/s/vFvxlkPuEa2xQhaho-kKoQ) - [《rt-thread驱动框架分析》-i2c驱动](https://mp.weixin.qq.com/s/nmO_0LH2pztHW4MK3ZLK6A) - 对于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接口。 ``` C /* 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的手册。 ![](https://RiceChen0.gitee.io/picture/rt-thread专辑/lcd框架/1.png) ###### control接口: - rtt提供了如下6条命令: ``` C /** * 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 ``` C 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没有独立的驱动框架,所以以一个通用设备驱动框架来实现: ```C int rt_hw_lcd_init(void) { rt_err_t ret; lcd.device.type = RT_Device_Class_Graphic; #ifdef RT_USING_DEVICE_OPS lcd.device.ops = &lcd_ops; #else lcd.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; #endif lcd.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 ![](https://RiceChen0.gitee.io/picture/rt-thread专辑/lcd框架/2.png)
关注微信公众号『Rice嵌入式开发技术分享』,后台回复“微信”添加作者微信,备注”入群“,便可邀请进入技术交流群。 ![](https://oss-club.rt-thread.org/uploads/20220714/42b25f77e3631ff00e2d436b621507a6f6a58d3a.jpg)
4
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
RiceChen
内核/软件架构/开源
文章
4
回答
27
被采纳
4
关注TA
发私信
相关文章
1
为啥没有 LCD 驱动框架呢
2
RT-Thread Studio 环境下如何实现LCD屏的翻转?
3
大家都是如何使用stm32驱动nt35510这个LCD显示IC的啊
4
请问stm32f103vet6怎么做ili9341 TFT_LCD显示啊?
5
RT-Thread Stduio + ST7789LCD液晶显示屏
6
用户手册LCD例程使用问题
7
星火一号LCD取模软件有没有
8
在rtthread系统中STM32103VET6使用硬件FSMC驱动LCD刷屏速度慢
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
xusiwei1236
8
个答案
2
次被采纳
踩姑娘的小蘑菇
1
个答案
2
次被采纳
用户名由3_15位
9
个答案
1
次被采纳
bernard
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
本月文章贡献
聚散无由
2
篇文章
15
次点赞
catcatbing
2
篇文章
5
次点赞
Wade
2
篇文章
4
次点赞
Ghost_Girls
1
篇文章
6
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部