完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以DMA方式通过UART发送数据应该是工程应用中很常用的一种方式了,尤其是在需要频繁发送数据或者数据包长度较大的场合,如果使用传统的UART查询或者中断方式发送和接收数据,对CPU资源的占用将是极大的浪费,带操作系统的应用还好些,如果是纯粹的前后台程序有时不能容忍的,所以DMA方式是很恰当的选择。关于DMA原理和细节的一些东西我在很早之前曾经写过一篇《从零入手Kinetis系统开发(十)之eDMA模块》专门介绍过,不过是针对Kinetis K系列的eDMA的,而本篇的主角则是最近火热起来的Cortex-M0+内核Kinetis L系列,不同于K系列复杂强大的eDMA功能,L系列的DMA模块配置起来还是比较简单的,原理性的东西我就不多做介绍了,建议去看一下L系列RM,这里就直接上代码了:
测试平台:IAR6.7 + KL26 FRDM 测试代码:FRDM-KL26Z_SCFRDM-KL26Z_SC_Rev_1.0klxx-sc-baremetalbuildiaruart0_dma 其实KL26的官方代码中是自带uart0_dma例程的,但是实现的功能只是将UART口接收到的每一个字节的数据通过DMA方式再发送出去(即环形缓冲),这样用来作为功能演示可以,但是往往我们需要的是将某缓冲区的数据以DMA方式发送出去或者将接收到的数据以DMA方式写到某缓冲区这样的功能,为此我们就需要在原有的例程上进行修改从而达到我们的应用目的,这里给出几点需要修改的地方,并做了相关注释: 1)定义待发送缓冲区:
2)设置DMA源地址:
3) 在DMA0_init()函数中修改发送数据包的长度:
4)添加源地址自动加1功能,因为之前的环形缓冲方式只是单字节数据,所以不需要源地址递增,但是由于我们这次需要发送整个数据包,所以这里我们就需要将源地址递增功能打开,而具体递增1,2还是4则取决于发送数据的最小单位(8bit,16bit or 32bit):
5)配置DMAMUX通道为UART0 TX即发送通道,因为我们需要的是UART0_TX触发DMA传送:
6)在UART0_DMA_init()函数中修改UART0发送缓冲区为空时即触发DMA发送:
7)在DMA发送完成中断服务函数中禁掉DMA通道,实现单次发送,即每个数据包发送完成之后即停止发送,否则不禁掉的话会一直触发DMA发送,造成串口堵塞:
将上述代码做完相应修改即可实现单次将内存缓冲区数据以DMA方式通过UART0发送出去,效果如下。此外,如果想周期性触发或者条件性触发,则只需再相应位置添加“DMAMUX0_CHCFG0 |= DMAMUX_CHCFG_ENBL_MASK;”这句代码即可打开通道,然后立即会触发UART0_TX发送数据,然后待数据包发送完之后再次停止等待下次使能。 附件为修改后的整个工程:
kl26_uart0_dma.zip
(222.95 KB, 下载次数: 112
)
|
|
相关推荐
|
|
您好,有个问题问一下,这个代码在UART0下能正常工作,改到UART1下不工作,请问Async DMA capable是啥意思,是不是UART0具有Async DMA capable,这个代码配置完就可以工作,而UART1不具备Async DMA capable,需要更改些配置?
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1907个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36358 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4396 浏览 0 评论
6050 浏览 1 评论
6763 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4213 浏览 0 评论
619浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
615浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
606浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
798浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 16:48 , Processed in 1.135705 second(s), Total 46, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号