RL78单片机串口DMA的实现

strongerHuang 2026-06-07 08:00

转自 | 瑞萨嵌入式小百科


DMA:Direct Memory Access,直接内存访问。简单来说就是内存RAM直接和其他设备(外设)进行数据交互,而不需要CPU参与的一种控制器。


为了减少CPU长期被占用提高运行效率,DMA就起着关键作用。目前市面上大部分处理器都带有DMA功能,因此,DMA是一种在嵌入式实时任务处理中常用的功能。


DMA它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的数据复制到缓存器,然后把它们再次写回到新的地方。在这个过程中,CPU不能做其他的工作。


DMA优点

DMA在系统中的角色好比一个公司的员工,CPU好比是公司的老板。
老板想要寄送一个快递到北京,只需要一个口令安排员工即可,具体填写快递单号、物流、派送等一系列工作老板不用关心。最后快递被对方收到,通知一声老板即可。


回到UART发送数据,同样的道理,CPU只需要简单的操作(“安排任务”),就可把一串数据包丢给DMA直接发送,最后发送完成,收到一个发送完成中断,通知CPU发送完成即可。

说到这里相信大部分人都明白了,老板可以亲自开车或者坐飞机送快递,完成这件事情,但会耽搁老板很多时间。

同样,如果我们使用UART自己发送,CPU就会不停仲裁发送结果,占据CPU大量资源。

在RTOS中,特别是有大量任务需要处理的时候,UART使用DMA发送就会带来很大方便。使用裸机运行的相同,尤为突出。


单片机DMA在UART中的应用案例

今天结合RL78系列单片机给大家讲讲DMA在UART中的应用。


RL78单片机串口DMA的实现图1


打开DMA0的配置界面如下,首先要确定DMA0的传送方向,其次选择外设SFR寄存器,以及RAM的地址和指定DMA0传送的数据长度,第三要设置DMA0的触发源。DAM1的设置和DMA0是相同的,根据应用需求,进行相应的配置。


RL78单片机串口DMA的实现图2
RL78单片机串口DMA的实现图3


UART的配置比较简单,在此不再累述,配置好后,点击“code generator”,生成对应的驱动代码,顺便说,自动生产的串口API函数是没有__far类型的,但是实际测试的时候,发送的数据可能是错误的,因为定义的数据buffer可能不在镜像区,这样会导致传送的地址是错误的,所以为避免类似的情况发生,建议在如下地方修改为__far类型。


RL78单片机串口DMA的实现图4


定义好接收数据的uart_buf[10], 并把数据buffer的地址给到DRA0,如下,DMA0被触发后,会把在SFR接收到的数据直接送给uart_buf[10]。


RL78单片机串口DMA的实现图5

 

RL78单片机串口DMA的实现图6


通过DMA1发送数据时,也是一样,要发送数据的buffer的地址赋给DRA1,DMA1被触发后,会把RAM buffer的数据送给SFR进行发送。


RL78单片机串口DMA的实现图7

 

在主函数main里,初始化相关的函数,如下。

RL78单片机串口DMA的实现图8

 

连接好硬件,并把生成的.mot文件下载到MCU里,通过串口助手给MCU发送8个字符数据“12345678”,在应用程序里没有对接收的SFR数据进行处理的情况下,通过DMA0会把接收到SFR的8个数据送到指定的buffer 里,经检查结果,数据接收正确。

 

RL78单片机串口DMA的实现图9


RL78单片机串口DMA的实现图10


RL78单片机串口DMA的实现图11


------------ END ------------




关于科技区角:国内科技展会垂直内容策划服务商,提供从论坛内容全案策划、会展市场化IP打造到精准专业观众一站式邀约服务,以产业内容吸引高质量B端人群,打通展会从议题设计、演讲嘉宾邀约、宣传预热、精准邀观到供需对接全链路。
声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。
单片机
more
【有奖评测 】最强Cortex-M85单片机!RA8D1套件(显示屏+摄像头)免费评测
单片机通过WiFI进行OTA固件升级
单片机变量不被初始化的实现方法
单片机代码中while(1)和for(;;)的区别
RA6单片机4种互补PWM模式原理和实现方法
单片机OTA传输协议深入分析
单片机开发为啥很少用C++?
主频1GHz单片机RA8P1性能表现和AI能力
高段位的单片机工程师,到底有多恐怖?!
单片机虚拟EEPROM模块的应用
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号