云开全站登录
热门新闻
- 今日新股上市:泰坦股份、秋田微、富淼科技 [09-02]
- TCL 75C12G [09-17]
- 强力巨彩Q Pro户外LED显示屏:高清视界 “大”有可为 [09-18]
- 以“柔”克刚强力巨彩开启室内LED显示屏无限可能 [09-20]
- 震撼登场!TCL华星先锋屏显点亮CES2024显示热潮 [09-20]
- 百吋大屏成换新主流!选对好画质谨记这三点 [09-21]
- 全彩LED显示屏特点 [09-22]
- 全彩LED显现屏的实践显现作用怎么 [09-22]
Contact Us
联系我们
RT-Thread驱动开发指南进阶篇-动手驱动先楫未适配的外设LCD
mer设备为例》阐述,可以大致了解到RT-thread设备驱动开发的方法步骤,开发指南中的进阶篇外设主要是比基础篇外设复杂点的外设设备,分别是
对于进阶篇的外设,本文不对先楫已经支持的进阶外设进行阐述,而是进行一次动手实践驱动一个先楫尚未适配的驱动外设-LCD,来更加深入开发RT-thread的设备驱动。
LCD驱动,跟其他外设也类似,无非就是IO设备管理框架-->
LCD设备驱动框架->
LCD设备驱动。
IO设备管理层主要为设备框架提供统一的操作接口,包括rt_device_read/write/open/close/control等。而做好一个外设驱动,最终的目标就是应用上使用这一些统一操作接口,无需理会底层操作。
LCD设备驱动框架层是RT-thread对LCD基本功能的抽象,是一层通用的软件层,和硬件平台无关,抽象了LCD设备的类型定义和具体的操作方法,其框架源码在rtdef.h中
LCD的控制命令,比如更新显存、开关LCD、获取信息、等待VSYNC等。
可见,RT-thread对于LCD的抽象操作还是比较直观,完成以上的操作,再借助IO设备管理层提供的注册接口rt_device_register进行注册,就可以使用IO设备管理接口操作LCD。
对于使用LCD硬件控制器(RGB,MIPI DSI)通信的屏幕,LCD设备驱动只要实现LCD设备的操作方法struct rt_device_ops即可,比如control接口里更新硬件控制器的缓存区即可控制屏幕绘图。
如此一来,配合先楫适配好的RT-thread BSP,可以很顺手得适配好LCD的驱动,按先楫BSP的driver照葫芦画瓢个drv_lcd。
下面来创建先楫的LCD设备。LCD设备模型从struct rt_device结构体中派生,并添加自己的私有数据。
实例化一个lcd的设备数组,可以存在多个lcd设备,里面包含设备的初始化参数。
按照以上的定义,已经实例化了一个hpm_lcd_ops结构体,然后要实现对应的操作函数,也就是LCD设备定义操作方法。对于LCD设备来说,只有其中的init和control操作方法才有意义,而本文实现的也是这两个接口,分别是hpm_lcd_init、hpm_lcd_control。
对于该操作方法,先楫的LCD驱动代码不需要执行任何操作,只需要在注册初始化LCD即可。
应用程序也可以对LCD设备做控制,通过control方法完成。原型如下:
对于显存的更新,能够正常的使用控制器自身定义的显存也能够正常的使用传入的显存地址,在先楫的手册中有提到影子寄存器加载使能功能,也就是显存会在下一个VSYNC到达加载,这样做才能够做到显示的完整更新。
为了保证传输的高效和防撕裂,这里使用中断方式传输一帧,再下一帧更新之前等待VSYNC完毕。
使用IO设备框架的rt_device_register完成注册,主要关注设备操作方法的赋值部分,以及保存lcd设备示例赋值给lcd的user_data成员。
在board的Kconfig中使能LCD,该宏控制LCD驱动相关代码是否添加到工程中
另外添加panel组件,该宏先楫已经实现,这里使用的是hpm6750,故只有RGB接口。
在驱动drivers的SConscript文件添加LCD驱动的判断选项,如果使能,drv_lcd.c则会被添加到工程中。
注册设备之后,LCD设备将会在IO设备管理器中出现,个人会使用hpm6750evkmini的wifi_web_camera_demo这个官方示例作为验证,烧录验证,使用list device命令查看到注册的设备已经包含了LCD设备。
在wifi_web_camera_demo的示例上,在获取camera图像的接口中,添加lcd的设备操作,把图像显示到LCD上,只需要先打开lcd,接着进行control,两条语句就能轻松实现显示,特别方便操作。
原文标题:RT-Thread设备驱动开发指南进阶篇--动手驱动先楫LCD外设