RISC-V MCU应用方案之Little VGL(LVGL)移植(一)
作者:互联网
一、Little VGL(LVGL)图形库简介
1.LVGL是一个开源图形库,提供完善的GUI开发组件,具有易于使用的图形元素,绚丽的界面和占用内存低等特点。LVGL官网
2.几乎所有的MCU都能够支持LVGL的运行,显然您的MCU至少要满足以下参数:
- 1.16, 32 或 64 位微控制器或处理器
- Clock: >=16MHz主频
- Flash/ROM:至少> 64 kB (> 180 kB 可运行大部分显示库组件)
- Stack: 至少> 2kB (推荐> 8 kB)
- Dynamic data (heap): > 4 KB (如果工程使用多个组件,建议> 32 kB )。在 in lv_conf.h头文件中设置LV_MEM_SIZE参数。
- Display buffer: > “Horizontal resolution” pixels (> 10 × “Horizontal resolution” is recommended)
- One frame buffer in the MCU or in an external display controller
- 编译器支持C99 ,keil5中在c/c++选项框中勾选C99。Mountain River编译器无需额外设置。
- 以上的内存推荐设置是官方给定的,实际开发无需拘泥于具体的参数设置,要根据实际的工程灵活调整。另外,同一工程使用不同架构的编译器编译,其存储空间的使用量及分配也有一定差异。
3.官方提供了众多Demo,多变的风格,总能找到它的应用场景。
二、CH32V307单片机简介
1.单片机使用了RISC-V内核,遵循BSD License开源协议,使用RISC-V内核无需另外支付授权费用,是一个非常有前景的开源处理器架构。
2.使用Mountain River IED软件辅助开发
三、TFT LCD显示屏简介
1.TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display。(显示原理,请自行搜索)大概长相为下图所示。
2.TFT LCD接受8080端口时序控制(自行学习),重要引脚如下表所示
这里需要注意的一点是,对于TFT LCD显示器,其工作原理决定了需要背光,背光引脚在购买到的模块中,有的标注“BL”,有的直接连接vcc。RST引脚可以连接在单片机复位引脚,也可以连接一个GPIO口,实现软复位(初始化:推挽输出-SetBits,主程序:ResetBits+Delay_Ms(100)+SetBits)。
3.显示屏驱动程序由厂家提供,您可以找到屏幕制造商,拨打技术电话索要例程。或者,您购买某一款stm32开发板,可参照开发板例程学习驱动程序的使用。
四、FSMC简介
1.FSMC(Flexible Static Memory Controller,可变静态存储控制器)是一种新型的存储器扩展技术,应用在外扩存储器(SRAM等),自动生成匹配外扩存储器的控制时序,降低了外扩驱动编写的难度。
2.FSMC模块框图(左)与存储块(右),FSMC可以控制8bit或16bit的SRAM,这个速度相比用GPIO模拟时序控制SRAM是非常快的。FSMC一些重要引脚如下表所示
3.接下来,将分析如何使用FSMC控制TFT LCD。要实现一个系统控制另一个系统,重要的是如何实现引脚的对接。注意到TFT LCD与FSMC的引脚有些类似,需要处理两个有差异的引脚
对于TFT LCD而言,RS引脚高电平表示读写数据,低电平表示读写命令;对于FSMC而言A16-A23引脚表示读写地址。那么怎样实现用FSMC地址引脚控制RS呢?这要从FSMC与AHB总线地址的映射关系说起。
FSMC挂接在AHB总线上,AHB总线地址是按照8位寻址。当FSMC外接16位器件(TFT LCD)时,FSMC需要在程序中设置为16位,需要将AHB总线地址重新映射到FSMC。如下表所示
这种映射关系可以理解为一种约定,有点像结构体。即在FSMC看来的地址为“AHB结构体”的首地址,“AHB结构体”有两个8位成员。另一个有趣的现象是,FSMC地址为AHB总线地址右移一位。我们在程序中操作的地址实际上是AHB总线地址,所以要设置FSMC地址为001 1111 1111 1111 1111,在程序中应该设置地址为011 1111 1111 1111 1110 。
在数字电路中操作指令,例如操作FSMC的某个地址Ax引脚(x=16~23),一般有高(1)低(0)两种状态,这恰能与TFT LCD 中RS引脚(0:命令,1:数据)的二态性对应起来。若,我们将A17引脚接RS端口,通过控制A17引脚高低来控制RS引脚高低,实现FSMC与TFT LCD端口的对接,引脚对应如下表所示
CH32V307只有NE1,所以表中的NEx应为NE1。
我们想让RS引脚为零(命令),则A17引脚必须为零;RS引脚为1(数据),则A17引脚必须为1。FSMC地址中A17引脚电平被横杠标识了,因为程序中的代码为AHB总线对应的地址。所以,FSMC令A17引脚为0的地址(00 1 1111 1111 1111 1111),在程序中应写为AHB对应地址(011 1111 1111 1111 1110),即0x3FFFE;FSMC令A17引脚为1的地址( 01 0 0000 0000 0000 0000),在程序中应写为AHB对应地址(100 0000 0000 0000 0000),即0x40000。在程序中实现A17与RS对应的代码片段如下
/* LCD addr */ typedef struct { vu16 LCD_REG; vu16 LCD_RAM; } LCD_TypeDef; /* A17, Bank1, sector1 */ #define LCD_BASE ((u32)(0x60000000 | 0x0003FFFE)) #define LCD ((LCD_TypeDef *) LCD_BASE)
由FSMC存储块图可知,块1的起始绝对地址为0x60000000,A17引脚相较于0x60000000的偏移量为 0x0003FFFE(AHB总线地址),所以LCD_BASE表示的是A17引脚的绝对偏移量。定义LCD为LCD_TypeDef类型结构体,并将LCD_BASE地址强制赋给LCD_TypeDef首成员LCD_REG。又因为LCD_TypeDef结构体成员类型为16位,所以成员地址LCD_REG:0x6003FFFE,LCD_RAM:0x60040000。在程序中通过调用结构体成员,就能控制RS了。
到此为止,FSMC与TFT LCD对应关系已经讲完了,以上属于个人理解,欢迎交流。
下一篇文章将分享移植一个LVGL案例到CH32V307单片机的操作过程。
————————————————
版权声明:本文为CSDN博主「付小熊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44845994/article/details/123708527
搜索
复制
标签:VGL,AHB,Little,引脚,FSMC,RISC,1111,LCD,地址 来源: https://www.cnblogs.com/zxyy-/p/16117945.html