在线时间113 小时
UID3573447
注册时间2019-7-2
NXP金币55
TA的每日心情 | 开心 2020-12-18 12:56 |
---|
签到天数: 55 天 连续签到: 1 天 [LV.5]常住居民I
管理员
  
- 积分
- 1995
- 最后登录
- 2025-7-26
|
MCX N系列MCU介绍
MCX N系列是高性能、低功耗微控制器,配备智能外设和加速器,可提供多任务功能和高能效。选择MCX N系列,包含eIQ® Neutron神经处理单元(NPU),适用于机器学习应用。低功耗高速缓存增强了系统性能,双块Flash存储器和带ECC检测的RAM支持系统功能安全,提供了额外的保护和保证。
SmartDMA介绍
MCX N系列微控制器全系带有SmartDMA协处理器。该协处理器支持高效汇编代码指令运行,主要功能包含加减,左移右移,字节位域交换,位翻转,访问内存外设,单周期读写IO,接收外部触发信号等。为了方便客户工程师简单使用,我将常用的一些功能,通过数组的形式放在主代码工程中,用户只需要调用API函数即可。今天主要介绍如何使用SmartDMA对图像进行预处理。
图像处理介绍及应用
在嵌入式领域,我们经常需要对图像的数据进行处理。比如,我们从原图像接收到的数据,每个像素的高低字节可能是反的,又比如,我们可能只想要RGB数据,但是原图像数据可能还带有透明度的数据成分,这时我们想把透明度的数据去掉。有时候我们显示接口要求的数据格式可能与我们RAM中的数据格式不一致,这时候就需要对图像数据进行预处理,然后再显示。还有时候,针对RAM中存放的显示数据,我们想挑选其中的一部分进行显示,比如隔点隔行显示。上面这些情况都可以通过CPU核来处理,但这种重复简单的工作无形给CPU造成很大的负担。SmartDMA可以很容易实现上述功能,并且不需要打扰CPU核工作。
SmartDMA对图像处理的实现
针对目前常用的情况,我用SmartDMA实现了如下几个功能:
1) 可以作为通用的DMA来实现,因为SmartDMA可以访问内存和外设,所以它可以作为一个通用的DMA。
2) 字节翻转功能。Smart DMA有字节翻转、位翻转等功能,所以又可以对数据进行预处理。字节翻转可以是一个半字(Half Word)里面的高低位字节翻转。也可以是一个字(Word)里面的最高字节和最低字节翻转。
3) 对一定长度内的字节换序。比如每次图像处理的一组数据有32个字节,SmartDMA可以将这些字节进行颠倒,也就是说第一个字节和最后一个字节互换,第二个字节和倒数第二个字节互换,以此类推。
4) 针对图像的数据格式实现RGB565和RGB888之间的互换,这也是为了应对不同的显示接口格式与RAM中存放的数据格式不一致的问题。
Demo展示
在MCXN系列微处理器的软件开发包SDK里面已经有一个相应的例程(lvgl_demo_widgets_bm)来实现这个功能。它实现的是一个流行的图形用户界面Little VGL的常用部件功能。在显示驱动中,用户既可以通过普通的DMA传送数据到LCD接口,也可以配置为通过SmartDMA来实现数据的传输。
使用的开发板是FRDM-MCXN947(FRDM-MCXN947 Development Board using MCUXpresso | NXP Semiconductors), 该开发板具有LCD接口。LCD使用FlexIO来驱动。LCD接口支持NXP LCD显示屏模块LCD-PAR-S035(LCD-PAR-S035 | NXP Semiconductors)。该LCD支持480x320分辨率。
SmartDMA给用户提供API接口有如下几个:
enum _smartdma_display_api
{
kSMARTDMA_FlexIO_DMA_Endian_Swap = 0U,
kSMARTDMA_FlexIO_DMA_Reverse32,
kSMARTDMA_FlexIO_DMA,
kSMARTDMA_FlexIO_DMA_Reverse, /*!< Send data to FlexIO with reverse order.
*/
kSMARTDMA_RGB565To888, /*!< Convert RGB565 to RGB888 and save to output
memory, use parameter
smartdma_rgb565_rgb888_param_t. */
kSMARTDMA_FlexIO_DMA_RGB565To888, /*!< Convert RGB565 to RGB888 and send to
FlexIO, use parameter
smartdma_flexio_mculcd_param_t. */
kSMARTDMA_FlexIO_DMA_ARGB2RGB, /*!< Convert ARGB to RGB and send to FlexIO,
use parameter
smartdma_flexio_mculcd_param_t. */
kSMARTDMA_FlexIO_DMA_ARGB2RGB_Endian_Swap, /*!< Convert ARGB to RGB, then
swap endian, and send to FlexIO, use
parameter smartdma_flexio_mculcd_param_t. */
kSMARTDMA_FlexIO_DMA_ARGB2RGB_Endian_Swap_Reverse, /*!< Convert ARGB to RGB,
then swap endian and reverse, and send
to FlexIO, use parameter smartdma_flexio_mculcd_param_t. */
};
Demo显示如下:
本篇文章有相应的应用笔记放在MCX N 系列微控制器的主页上面。欢迎大家下载阅读。Using SmartDMA for Graphic on MCX N Series MCU (nxp.com.cn)
|
|