![cathy的头像 cathy的头像](https://mcu.eetrend.com/files/styles/picture200/public/letter-avatars/u-593.png?itok=XTs2kpZ8)
对于RL78系列的MCU,为了提高运行效率,减少CPU的占用,建议UART数据收发使用DMA功能。DMA(Direct Memory Access)是RL78 MCU内置的一个控制器,能在支持DMA外围硬件的SFR和内部RAM之间不经过CPU而自动传送数据。
打开DMA0的配置界面如下,首先要确定DMA0的传送方向,其次选择外设SFR寄存器,以及RAM的地址和指定DMA0传送的数据长度,第三要设置DMA0的触发源。DAM1的设置和DMA0是相同的,根据应用需求,进行相应的配置。
UART的配置比较简单,在此不在累述,配置好后,点击“code generator”,生成对应的驱动代码,顺便说,自动生产的串口API函数是没有__far类型的,但是实际测试的时候,发送的数据可能是错误的,因为定义的数据buffer可能不在镜像区,这样会导致传送的地址是错误的,所以为避免类似的情况发生,建议在如下地方修改为__far类型。
定义好接收数据的uart_buf[10], 并把数据buffer的地址给到DRA0,如下,DMA0被触发后,会把在SFR接收到的数据直接送给uart_buf[10]。
通过DMA1发送数据时,也是一样,要发送数据的buffer的地址赋给DRA1,DMA1被触发后,会把RAM buffer的数据送给SFR进行发送。
在主函数main里,初始化相关的函数,如下。
连接好硬件,并把生成的.mot文件下载到MCU里,通过串口助手给MCU发送8个字符数据“12345678”,在应用程序里没有对接收的SFR数据进行处理的情况下,通过DMA0会把接收到SFR的8个数据送到指定的buffer 里,经检查结果,数据接收正确。
来源:瑞萨嵌入式小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。