0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread驱动开发指南进阶篇-动手驱动先楫未适配的外设LCD

RTThread物联网操作系统 来源:RCSN嵌入式 2024-02-25 11:04 次阅读

一、概述

经过上一篇的《《RT-Thread设备驱动开发指南》基础篇--以先楫bsp的hwtimer设备为例》阐述,可以大致了解到RT-thread设备驱动开发的方法步骤,开发指南中的进阶篇外设主要是比基础篇外设复杂点的外设设备,分别是SDIO、Touch、LCD、sensor、MTD nor、MTD nand、脉冲编码器、加解密设备、PM设备。

对于进阶篇的外设,本文不对先楫已经支持的进阶外设进行阐述,而是进行一次动手实践驱动一个先楫尚未适配的驱动外设-LCD,来更加深入开发RT-thread的设备驱动。

来个效果:

在官方示例的wifi_web_camera_demo基础上加上lcd驱动显示摄像头

二、开发方法

(一)RT-thread的LCD驱动框架介绍

LCD驱动,跟其他外设也类似,无非就是IO设备管理框架-->LCD设备驱动框架->LCD设备驱动。

IO设备管理层主要为设备框架提供统一的操作接口,包括rt_device_read/write/open/close/control等。而做好一个外设驱动,最终的目标就是应用上使用这些统一操作接口,无需理会底层操作。

LCD设备驱动框架层是RT-thread对LCD基本功能的抽象,是一层通用的软件层,和硬件平台无关,抽象了LCD设备的类型定义和具体的操作方法,其框架源码在rtdef.h中

LCD的信息结构 rt_device_graphic_info,定义了像素格式,位宽,宽高、显存地址等。

50354092-d249-11ee-a297-92fbcf53809c.png

LCD的操作接口rt_device_graphic_ops,定义了LCD的绘图操作,比如像素点、画线等操作。

503e984a-d249-11ee-a297-92fbcf53809c.png

LCD的控制命令,比如更新显存、开关LCD、获取信息、等待VSYNC等。

504245a8-d249-11ee-a297-92fbcf53809c.png

LCD的像素格式

50471f42-d249-11ee-a297-92fbcf53809c.png

可见,RT-thread对于LCD的抽象操作还是比较直观,完成以上的操作,再借助IO设备管理层提供的注册接口rt_device_register进行注册,即可使用IO设备管理接口操作LCD。

(二)先楫LCDC外设介绍

对于先楫的LCDC外设硬件控制器

在HPM6750上有RGB控制器,支持24位的RGB显示接口

505e554a-d249-11ee-a297-92fbcf53809c.png

在HPM6800上,支持2 个 4 Lane MIPI-DSI/LVDS-Tx 显示接口

5074e706-d249-11ee-a297-92fbcf53809c.png

对于在RT-thread上,也支持了hpm_sdk的panel组件,涵盖了hpm6750和hpm6800的显示适配。

508d7ac8-d249-11ee-a297-92fbcf53809c.png

对于hpm_sdk的panel组件介绍,可以参考文章《[hpm_application]选先楫!爽跑1080P or 720Pmipi屏的单片机

对于使用LCD硬件控制器(RGB,MIPI DSI)通信的屏幕,LCD设备驱动只需要实现LCD设备的操作方法struct rt_device_ops即可,比如control接口里更新硬件控制器的缓存区即可控制屏幕绘图。

如此一来,配合先楫适配好的RT-thread BSP,可以很顺手得适配好LCD的驱动,按先楫BSP的driver照葫芦画瓢个drv_lcd。

50a4b35a-d249-11ee-a297-92fbcf53809c.png

(三)创建LCD设备

下面来创建先楫的LCD设备。LCD设备模型从struct rt_device结构体中派生,并添加自己的私有数据。

成员主要有LCD的基地址,中断号,互斥锁,LCD名称等。

50b981ae-d249-11ee-a297-92fbcf53809c.png

实例化一个lcd的设备数组,可以存在多个lcd设备,里面包含设备的初始化参数

50d0a0dc-d249-11ee-a297-92fbcf53809c.png

(四)实现LCD设备的操作方法

按照以上的定义,已经实例化了一个hpm_lcd_ops结构体,然后需要实现对应的操作函数,也就是LCD设备定义操作方法。对于LCD设备来说,只有其中的init和control操作方法才有意义,而本文实现的也是这两个接口,分别是hpm_lcd_init、hpm_lcd_control。

1、init:初始化LCD设备

对于该操作方法,先楫的LCD驱动代码不需要执行任何操作,只需要在注册初始化LCD即可。

50d469ec-d249-11ee-a297-92fbcf53809c.png

2、control:控制LCD设备

应用程序也可以对LCD设备进行控制,通过control方法完成。原型如下:

50ed2a40-d249-11ee-a297-92fbcf53809c.png

其中参数cmd包含了控制LCD的方式,通用设备命令可取以下宏定义:

50f4fc34-d249-11ee-a297-92fbcf53809c.png

当然在最新rtthread 5.0.2当中也更新了几个命令

50f8a82a-d249-11ee-a297-92fbcf53809c.png

本文在这里主要实现以下几个命令

(1)RTGRAPHIC_CTRL_RECT_UPDATE 更新显存

对于显存的更新,可以使用控制器自身定义的显存也可以使用传入的显存地址,在先楫的手册中有提到影子寄存器加载使能功能,也就是显存会在下一个VSYNC到达加载,这样可以做到显示的完整更新。

51019f34-d249-11ee-a297-92fbcf53809c.png

而在hpmicro的驱动中也提供了该API:lcdc_layer_set_next_buffer,这里适配的驱动使用第一层layer。

故可以下实现:

51132a2e-d249-11ee-a297-92fbcf53809c.png

(2)RTGRAPHIC_CTRL_WAIT_VSYNC 等待帧完成

为了保证传输的高效和防撕裂,这里使用中断方式传输一帧,再下一帧更新之前等待VSYNC完毕。

512a9cf4-d249-11ee-a297-92fbcf53809c.png

(3)RTGRAPHIC_CTRL_GET_INFO 获取LCD信息

主要获取LCD的像素格式、宽高等,传递给args参数

512f54e2-d249-11ee-a297-92fbcf53809c.png

(4)RTGRAPHIC_CTRL_POWERON亮屏

RTGRAPHIC_CTRL_POWEROFF 息屏

调用hpm_sdk的panel组件接口即可。

51580b44-d249-11ee-a297-92fbcf53809c.png

(五)注册LCD设备

使用IO设备框架的rt_device_register完成注册,主要关注设备操作方法的赋值部分,以及保存lcd设备示例赋值给lcd的user_data成员。

515c18ba-d249-11ee-a297-92fbcf53809c.png

(六)驱动配置

在board的Kconfig中使能LCD,该宏控制LCD驱动相关代码是否添加到工程中

5160178a-d249-11ee-a297-92fbcf53809c.png

另外添加panel组件,该宏先楫已经实现,这里使用的是hpm6750,故只有RGB接口。

516d6476-d249-11ee-a297-92fbcf53809c.png

在驱动drivers的SConscript文件添加LCD驱动的判断选项,如果使能,drv_lcd.c则会被添加到工程中。

518bedba-d249-11ee-a297-92fbcf53809c.png

(七)驱动验证

注册设备之后,LCD设备将会在IO设备管理器中出现,我们使用hpm6750evkmini的wifi_web_camera_demo这个官方示例作为验证,烧录验证,使用list device命令查看到注册的设备已经包含了LCD设备。

519bbac4-d249-11ee-a297-92fbcf53809c.png

在wifi_web_camera_demo的示例上,在获取camera图像的接口中,添加lcd的设备操作,把图像显示到LCD上,只需要先打开lcd,然后进行control,两条语句就可以实现显示,特别方便操作。

51a05598-d249-11ee-a297-92fbcf53809c.png

最终可以实现使用简单的IO设备即可操作LCD

52b2112e-d249-11ee-a297-92fbcf53809c.png

52b5c422-d249-11ee-a297-92fbcf53809c.png





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171189
  • RGB
    RGB
    +关注

    关注

    4

    文章

    763

    浏览量

    57407
  • LCD驱动
    +关注

    关注

    4

    文章

    77

    浏览量

    26524
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38872
  • 脉冲编码器
    +关注

    关注

    0

    文章

    13

    浏览量

    8184

原文标题:RT-Thread设备驱动开发指南进阶篇--动手驱动先楫LCD外设

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread ssd1306驱动

    RT-Thread 驱动ssd1306
    的头像 发表于 04-21 10:08 26.4w次阅读
    <b class='flag-5'>RT-Thread</b> ssd1306<b class='flag-5'>驱动</b>

    RT-Thread设备驱动开发指南基础篇—以先楫bsp的hwtimer设备为例

    RT-Thread设备驱动开发指南》书籍是RT-thread官方出品撰写,系统讲解RT-thread IO设备
    的头像 发表于 02-20 16:01 824次阅读
    <b class='flag-5'>RT-Thread</b>设备<b class='flag-5'>驱动</b><b class='flag-5'>开发指南</b>基础篇—以先楫bsp的hwtimer设备为例

    RT-Thread Studio对于硬件外设驱动的支持情况

    本文将介绍 RT-Thread Studio 对于硬件外设驱动的支持情况。由于 RT-Thread nano 版本不具有设备概念,所以本文提到的 R
    发表于 04-02 07:30

    RT-Thread 架构图

    RT-Thread 架构图:RT-Thread开发指南开源地址内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内
    发表于 12-16 08:15

    基于RT-Thread Studio的ADC外设使用方案介绍

    1、基于RT-Thread Stduio使用ART-Pi的ADC外设1. 打开 RT-Thread Stduio,左上角新建 RT-Thread 项目,选择基于
    发表于 03-28 16:57

    基于MM32F5270开发RT-Thread SPI驱动适配指南

    1、第一次给RT-Thread添加芯片SPI驱动  为MM32F5370开发板添加SPI驱动支持的过程。适配完成后,我使用W25Q128模组
    发表于 09-02 14:59

    已结束-【书籍评测活动NO.4】RT-Thread官方撰写,涵盖26种设备驱动开发指南

    设备驱动开发技能。本书内容分为三:基础进阶篇与高级。基础
    发表于 02-22 15:30

    RT-Thread设备驱动开发指南》读书笔记

    的内容,熟悉了驱动开发的基本流程之后,就可以根据自己的需要,选择对应的章节学习。(3) 书上还说了,阅读本书要求读者具备了RT-Thread的基础知识,因此建议与大家学习《嵌入式实时
    发表于 03-23 10:35

    RT-Thread设备驱动开发指南》读书测评

    驱动开发指南》这本书主要分了三个部分,由基础进阶篇,高级组成,适用不同层次的开发者,对于不
    发表于 03-26 21:04

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本
    发表于 11-26 16:06 0次下载

    RT-Thread Studio驱动SD卡

    总结前言硬件平台:RT-Thread ART-Pi STM32H750XBH6开发板 H750开发开发软件:RT-Thread Studi
    发表于 12-27 19:13 20次下载
    <b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>驱动</b>SD卡

    送《RT-Thread设备驱动开发指南》,手慢无!

    迫切地希望有一本可以指导他们在RT-Thread开发驱动指南。 为了解决开发者的燃眉之急, 《RT
    的头像 发表于 03-19 23:00 1047次阅读

    电子工程专辑放福利啦!免费领取500本《RT-Thread设备驱动开发指南

    6月面包板社区新用户注册 免费领取物联学习大礼包! 大礼包包含: 1、《RT-Thread设备驱动开发指南》 2、RT-Thread线上教学课程16讲 3、10GB物联资料大全下载 扫
    的头像 发表于 06-28 19:25 422次阅读
    电子工程专辑放福利啦!免费领取500本《<b class='flag-5'>RT-Thread</b>设备<b class='flag-5'>驱动</b><b class='flag-5'>开发指南</b>》

    RK3568驱动指南驱动基础进阶篇-进阶8 内核运行ko文件总结

    RK3568驱动指南驱动基础进阶篇-进阶8 内核运行ko文件总结
    的头像 发表于 01-31 14:58 501次阅读
    RK3568<b class='flag-5'>驱动</b><b class='flag-5'>指南</b>|<b class='flag-5'>驱动</b>基础<b class='flag-5'>进阶篇</b>-<b class='flag-5'>进阶</b>8 内核运行ko文件总结

    RK3568驱动指南驱动基础进阶篇-进阶5 自定义实现insmod命令实验

    RK3568驱动指南驱动基础进阶篇-进阶5 自定义实现insmod命令实验
    的头像 发表于 02-20 14:10 179次阅读
    RK3568<b class='flag-5'>驱动</b><b class='flag-5'>指南</b>|<b class='flag-5'>驱动</b>基础<b class='flag-5'>进阶篇</b>-<b class='flag-5'>进阶</b>5 自定义实现insmod命令实验