RT1052 LPSPI1 dma传输和UART2 DMA传输实现不定长数据接收

       买了一块飞凌的RT1052的开发板,主要是看中了它的核心板价格便宜,准备后面产品使用。使用了一段时间,然后今天准备做个记录,上一下关于LPSPI1和UART2的DMA操作。

        由于现在RT1052的网上资料并不多,学习过程比较缓慢,后面我想大家有学习的人,都多在网上讨论,放些资料,这样这个片子应该也是很好用了。从硬件性价比上说,RT1052真的要胜过STM32H7的很多,但是可能原来用习惯了STM32,熟悉它的编程思想,感觉上手STM32就是快,而RT1052就感觉编程上比较难。但用了一段实际,感觉主要还是网上资料多少问题,STM32的资料多,大部分时间都能找到对应的案例参考,就不用思考了,直接使用,而RT1052确实资料太少,但是带来的问题也是对STM32很多东西估计就了解就不深入了,用是没问题的,但是谈精通就说不上了。

     RT1052上面有个FlexSPI和LPSPI,两个是有区别的,FlexSPI主要是用作SPI FLASH的操作,而一般对外通信用LPSPI,两则的区别看到了如下说明,如需了解可以看一下:https://community.nxp.com/message/1258295

     在使用LPSPI和UART上主要是停留在了DMA这个上面,对整个东西画了些时间,今天总结一下,当然可能也还没有非常清晰,但至少有些脉络。在这里要感谢野火的教程,后面我也上传上来大家可以看看,如果没买开发板的,还是推荐野火的,资料比较多,看了野火]《i.MX RT库开发实战指南》的第19章,对RT1052的DMA结构有了一个了解,然后看了官方的关于DMA的例子,有如下总结:

1、DMA有2个通道组,DMA0 和DMA1。一共有32个通道。DMA0通道组包含0~15通道,DMA1通道组包含16~32通道。CR[ERCA] 寄存 控制是否使用固定优先级模式,只有 CR[ERCA] = 0 时优先级的设置才有效。CR[GRP0PRI]寄存器与CR[GRP1PRI]寄存器分别用于设置通道组 0 与通道组 1 的优先级。初始状态下 CR[GRP0PRI] = 0,CR[GRP1PRI] = 1。优先级数值越大对应的优先级越高。默认情况下,DMA 通道组 1 的所有通道的优先级高于 DMA 通道组 0 的所有通道的
优先级。DCHPRIn(n 取 0 到 31),每一个 DMA 通道有各自的通道优先级设置寄存器。

2、RT1052 大多数外设能够申请 DMA 传输请求,在 RT1052 官方的 SDK 库中定义了 114个 DMA 请求源,借助 DMAMUX 模块 (自己理解就是一个多路通道切换配置开关,配置那个DMA通道和那个请求对应),每一个 DMA通道可以选择任意一个 DAM 触发源作为 DMA 的触发信号。这样可以极大的提高 DMA 使用的灵活性与使用效率。

3、传输控制描述符 TCD(transfer-control descriptor)。这一部分自己还没有很好的理解。感觉就是设置DMA传输的一些参数的,诸如每次传输多少个字节,对齐方式,循环传输多少次等一些参数。这个可能后面还要多多了解。

用官方库一般程序需要步骤:

1、初始DMA

2、初始DMAMUX,配置好通道和对应传输请求

3、配置传输及回调函数

4、配置传输参数

5、生效传输,开始

我把自己测试的工程上传上来,供大家参考,由于SPI和UART里面有官方库直接的SPI_DMA和UART_DMA的文件,已经做了一些封装,上说的初始过程更简单了,然后关于管脚的配置在pin_mux.c文件的void BOARD_InitPins(void)内。

一下工程文件可以直接放在NXP的SDK里面如下路径\boards\evkbimxrt1050\driver_examples\lpspi,直接打开MDK然后编译就留可以了,使用的存储配置文件是对应飞凌开发板的,如果要对应自己的开发板估计要做些修改。

发布了47 篇原创文章 · 获赞 28 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/x13163303344/article/details/104142237
今日推荐