MCUXpresso开发RT1060(1)——使用RGB接口LCD
一、开发环境
1.TencentOS物联网开发套件,MCU为RT1060
2.IDE:MCUXpresso v11.4.1
3.屏幕为微雪4.3寸IPS屏幕,RGB888接口
二、使用MCUXpreso的配置工具
1.利用IDE的功能,从SDK中导入例程hello_world,作为程序基本框架。
2.打开IDE配置工具中的外设页面。
3.在左侧外设中添加LCDIF,打开外设LCDIF的设置。
RGB mode initialization部分根据屏幕的参数来由用户配置,包括屏幕像素帧率等参数。
在途中可以看到IDE报了一个warning。因为根据像素点和帧率等参数计算出来的LCD控制器时钟与实际时钟有差别,实际时钟是由硬件决定的,无法配置得和用户设计的参数一模一样,因此IDE会产生一个警告信息。该警告信息不影响屏幕正常工作。图中也可以看到我们设计的帧率是60Hz,但按照目前的时钟配置,实际帧率应为64Hz。
下部分Signals polarity是LCD控制信号的极性,根据屏幕的接口来设置。
值得注意的是,LCD data bus即LCD数据总线的格式中,RGB888格式有两种,一种是未经过打包的,占用32bits的格式,另一种是舍弃了最高8位的24bits格式。这个格式一定要和自己编写的程序对应起来,否则屏幕显示会出错。
LCDIF_Buffer是显存变量,工具会以此为名称开辟一个内存空间。用户可以修改LCDIF_Buffer中的值来显示自己想要的内容。
记得勾选上那个start RGB mode,否则需要在用户程序中加上开启RGB模式的代码。
最下面的配置内容与LCD控制器的中断有关。在该程序中,我开启了帧传输完成的中断。LCDIF_IRQn是我们需要重写的中断函数。
按照以上配置后,点击更新代码,会在工程目录中增加peripheral.c和.h文件,在其中完成了LCD的初始化工作。
三、程序代码
打开peripheral源文件和头文件,看下官方配置工具为我们完成了哪些工作。(文章中只展现出部分代码)
//peripheral.cconst elcdif_rgb_mode_config_t LCDIF_rgbConfig = {.panelWidth = LCDIF_PANEL_WIDTH,.panelHeight = LCDIF_PANEL_HEIGHT,.hsw = 30U,.hfp = 210U,.hbp = 30U,.vsw = 4U,.vfp = 4U,.vbp = 4U,.polarityFlags = (kELCDIF_VsyncActiveLow | kELCDIF_HsyncActiveLow | kELCDIF_DataEnableActiveHigh | kELCDIF_DriveDataOnRisingClkEdge),.bufferAddr = (uint32_t) LCDIF_Buffer[0],.pixelFormat = kELCDIF_PixelFormatXRGB8888,.dataBus = kELCDIF_DataBus24Bit
};
/* RGB buffer */
AT_NONCACHEABLE_SECTION_ALIGN(uint32_t LCDIF_Buffer[2][LCDIF_PANEL_HEIGHT][LCDIF_PANEL_WIDTH], LCDIF_RGB_BUFFER_ALIGN);
这部分是构建LCD控制器的设置参数,就是我们之前在配置工具中填写的像素、帧率等设置。
最下面一行代码是申请了一段内存空间LCDIF_Buffer,用作显存。具体实现方法请看本文参考资料中的野火的RT1052开发板教程。
//peripheral.cstatic void LCDIF_init(void) {/* RGB mode initialization */ELCDIF_RgbModeInit(LCDIF_PERIPHERAL, &LCDIF_rgbConfig);/* Enable interrupts */ELCDIF_EnableInterrupts(LCDIF_PERIPHERAL, (kELCDIF_CurFrameDoneInterruptEnable));/* Enable interrupt LCDIF_IRQn request in the NVIC. */EnableIRQ(LCDIF_LCDIF_IRQN);/* RGB mode start */ELCDIF_RgbModeStart(LCDIF_PERIPHERAL);
}/************************************************************************************************************************ Initialization functions**********************************************************************************************************************/
void BOARD_InitPeripherals(void)
{/* Initialize components */LCDIF_init();
}/************************************************************************************************************************ BOARD_InitBootPeripherals function**********************************************************************************************************************/
void BOARD_InitBootPeripherals(void)
{BOARD_InitPeripherals();
}
看这些函数的名字就知道,这段代码是对外设LCD控制器的初始化和中断配置,并进行了层层包装。我们在main函数中调用最后的BOARD_InitBootPeripheraals函数即可完成对外设的初始化。
从上述代码分析中可知,配置工具已经帮我们把LCD控制器设置好了,用户只需要调用一个函数即可,降低了代码开发量。之后用户根据自己需求,设计应用层面的代码即可。
我写了一段代码,让屏幕交替显示蓝色和白色。主要还是参考了野火的RT1052教程中的程序。
//mylcd.c#include "my_rd_lcd.h"
#include "fsl_common.h"
#include "stdint.h"
#include "fsl_debug_console.h"
#define MY_RD_LCD_TEST 1
//创建显存空间
//同样已通过IDE自带的设计工具设置好
//AT_NONCACHEABLE_SECTION_ALIGN(pixel_t
//s_psBufferLcd[2][LCD_PIXEL_HEIGHT][LCD_PIXEL_WIDTH], FRAME_BUFFER_ALIGN);static uint32_t current_frame_buff = (uint32_t)LCDIF_Buffer[0];static pixel_t current_text_color = CL_WHITE;
static pixel_t current_back_color = CL_BLUE;static uint8_t s_frameDone = 1;
static uint8_t frameBufferIndex = 0;
/* 帧计数器 */
static volatile uint32_t s_frame_count = 0;
static void put_pixel(uint16_t x, uint16_t y, pixel_t color)
{if((x < LCDIF_PANEL_WIDTH) && (y < LCDIF_PANEL_HEIGHT)){//LCDIF_Buffer[0][y][x] = color;*(pixel_t*)(current_frame_buff + LCD_BPP*(x + (LCDIF_PANEL_WIDTH * y))) = color;}
}void LCDIF_LCDIF_IRQHANDLER(void)
{volatile uint32_t intStatus;intStatus = ELCDIF_GetInterruptStatus(LCDIF);ELCDIF_ClearInterruptStatus(LCDIF, intStatus);if (intStatus & kELCDIF_CurFrameDone){s_frameDone = 1;s_frame_count++;}
}
四、运行结果
本程序让屏幕显示完一帧数据后,立刻显示下一帧,并通过systick中断计时,计算出屏幕的刷新帧率,可以达到80的帧率。
在此还遇到了个问题,LCDIF的时钟源默认是选用PLL3产生的,实测中发现LCD的时钟频率不对,改为PLL2后,才是正确的时钟频率,尚待探究。
利用MCUXpresso用户可以非常方便地开发NXP的单片机程序,尤其是使用RT1060这种跨界MCU中比较复杂的外设。用户使用官方的配置工具更有助于理解外设的功能,不必对着官方例程一行一行地改代码了,加快开发进度,减少出错的概率。
用惯了KEIL开发ARM后,使用这种基于eclipse的IDE还是感觉有些不习惯。但是因为是NXP官方设计的,更加适合开发NXP的单片机,而且提供了许多KEIL没有的更便于开发的工具。而且这种IDE还是完全免费的,对于个人爱好者而言,还是很有必要学习并使用MCUXpresso来开发单片机项目的。
更新:
该问题已解决。原因是IDE生成clock.c中把PLL3的时钟分频代码注释掉了。
五、参考
i.MX RT1060 | Crossover MCU with ARM Cortex-M7, 1 MB SRAM | NXP Semiconductorshttps://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/i-mx-rt-crossover-mcus/i-mx-rt1060-crossover-mcu-with-arm-cortex-m7-core:i.MX-RT1060
Embedfire-rt1052: 野火imx-rt1052开发板项目组https://gitee.com/Embedfire-rt10524.3inch Capacitive Touch LCD - Waveshare Wikihttps://www.waveshare.net/wiki/4.3inch_Capacitive_Touch_LCD2021 TencentOS Tiny AIoT应用创新大赛TencentOS Tiny AIoT 应用创新大赛是腾讯TencentOS团队联合恩智浦半导体、ARM中国发起的线上开发者活动,主要面向中小企业嵌入式工程师、广大嵌入式开发者、物联网爱好者、创客团队等,期待广大开发者能参与到国内开源项目中,通过开源协同,基于TencentOS Tiny打造更多新颖、实用、有价值和创造力的AIoT应用及解决方案。https://cloud.tencent.com/developer/competition/introduction/10032
MCUXpresso开发RT1060(1)——使用RGB接口LCD相关推荐
- rgb 接口lcd 驱动调试
文章目录 lcd 控制器的模式配置 rgb 接口 时序 dma 配置 lcd 调试要点 lcd 控制器的模式配置 接口配置 soc lcd controller 一般都支持多种的 Lcd 接口, 如 ...
- linux图形界面抖动,Linux下RGB接口LCD显示屏移植杂点抖动问题解决
处理器:IMX6Q 操作系统:Linux 3.14.28 LCD接口:RGB24bit+SPI 显示屏型号:TM043YDHG30-40 问题描述: SPI设置完参数给显示屏后,屏幕可以显示图片.亮度 ...
- Linux下RGB接口LCD显示屏移植杂点抖动问题
处理器:IMX6Q 操作系统:Linux 3.14.28 LCD接口:RGB24bit+SPI 显示屏型号:TM043YDHG30-40 问题描述: SPI设置完参数给显示屏后,屏幕可以显示图片.亮度 ...
- mipi接口 1280(RGB)*720 LCD屏开发驱动笔记帖
ps:创业开发产品,自学笔记,不一定适合教材性的阅读,零碎整理,自我总结用 材料:4.1寸lcd屏两块,屏自带触控,屏幕资料具备,rk3399和MK8788开发版上分别开发. 开发环境: 1]rk33 ...
- S3C2440A驱动RGB接口TFT LCD的研究(转载)
S3C2440A驱动RGB接口TFT LCD的研究 时间: 2009-02-25 11:29:50 来源:嵌入式在线 作者:纪宁宁,孙灵燕 1 引言 随着科技的进步,TFT LCD作为显示器件 ...
- LCD rgb接口如何区分cmd和data?
LCD rgb接口如何区分cmd和data? Justinyue Post at 2012-2-23 15:37:46 都是通过spi写入LCD module,都是8bit,如何区分是cmd还是dat ...
- video LCD(液晶显示器)的接口 RGB接口 RGB色彩模型 颜色模型除了RGB, 还有CIE, YUV 给我弄混了---RGB是接口还是颜色模型
LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器 LCD目前已经取代CRT, 成为TV.PC等的标配 接口类型 首先我们以传递的信号类型来区分主要有两大类: 模拟信号 ...
- S3C6410驱动I80接口LCD
在嵌入式的主流 LCD屏中主要支持两大类的硬件接口,一种是常见的RGB接口,另外一种是MCU接口.后面因为最早是针对单片机的领域在使用,因此得名.后在中低端手机大量使用,其主要特点是价格便宜的. MC ...
- stm32驱动rgb屏电路图_STM32直接驱动RGB接口的TFT数字彩屏设计
STM32 直接驱动 RGB 接口的 TFT 数字彩屏设计 本文提出了一种由 STM32 的 FSMC 总线直接挂载 RGB 接口屏的方案,直接由一片 CPU(STM32F103VC) 来完成 TFT ...
最新文章
- LVTRM架构发布0.1测试版
- pymongo连接mongodb的replset
- mysql分布式安装可靠读写案列图解,高并发下的分布式锁-mysql篇
- 说实话,你的API接口在高并发面前不堪一击!
- boost::callable_traits下qualified_class_of的测试程序
- 二进制信号量,互斥信号和计数信号量的区别
- java快速排序代码6_分分钟掌握快速排序(Java / Scala 实现)
- 技术分享——机房搬迁工作步骤及方案详解
- Linux文件目录与路径
- 续招商、保利后,纬衡科技又签地产大鳄碧桂园
- Atitit 大脑能够储存多大的数据量
- 《Android 应用案例开发大全(第3版)》——第1.2节掀起Android的盖头来
- 快速掌握粒子编辑器 —— onebyonedesign网页版
- 2021年1月13日以后,如何用Flash Player打开swf文件
- android开发者模式调试程序,Android用开发者模式进行调试时出现的问题及解决方案...
- Eslint的严格模式
- 网站导航 - 网址大全
- 排队论和对策论(博弈论)
- 大明战神戚继光带给程序员的启示
- 台式机怎样连接连接蓝牙耳机?搜索不到蓝牙耳机?
热门文章
- Filament Android 编译搭建(基于Ubuntu环境)
- win2003 php asp.net,Win2003下配置iis+php+mysql+zend图文 使其支持asp,.net,cgi,perl和php
- Google Java Style 中文版
- 《世界上谁最聪明?谁最愚蠢? ——最有道德者最聪明,最无道德者最愚蠢》作者:黎鸣...
- 认证疑难问题分析报告
- 极速office怎么才能自定义PPT幻灯片大小
- ssm健康饮食推荐系统分析与设计 毕业设计-附源码261631
- Dubbo系列(二)源码分析之SPI机制
- from_unixtime()与UNIX_TIMESTAMP
- Labview字符串转16进制