查看: 710|回复: 0

[原创] 【MCXC444 分享】3.USART+DMA通讯

[复制链接]
  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    110

    主题

    3404

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    9002
    最后登录
    2025-7-17
    发表于 2024-11-17 19:45:20 | 显示全部楼层 |阅读模式
           外设通讯使用,多搭载DMA,不但减轻MCU核的负担,实现也不复杂。当前测试USART只是个例子,其他外设使用也尽量连接到DMA。
    参看原理图连接如图1所示:
    3-2.png
    图1

    根据原理图,板卡连接串口线后,如图2所示:
    3-3.jpg
    图2

    官方SDK中提供了该部分例程,uart_dma_rb_transfer,搞清楚这部分代码的使用,修改一下就可以移植到自己的项目中了。在这里,你发现
    例程实现过程已经写的很清楚了。初始化后,先发送一帧已定义好的数据,启动DMA的环形缓存,将接收到的数据放进缓存里,这里最大设置了
    32个字节,根据自己的实际需要设置最大缓存。这部分可以参考环形缓存的实现,还是挺有意思的。

    然后判断数据大小,读缓存数据,发送出去。基本上实现思路就是这个样子,实现如下:
    1. /* Wait for idle line interrupt occur*/
    2.         while (!rxIdleLineDetected)
    3.         {
    4.         }
    5.         rxIdleLineDetected = false;
    6.         /* Get the received bytes number stored in DMA ring buffer. */
    7.         length = EXAMPLE_GetRingBufferLengthDMA();
    8.         /* If byte count larger than ring buffer size, it menas data overflow occurred with ring buffer used.
    9.          * Users should make sure the ring buffer is large enough or read the ring buffer ASAP.
    10.          */
    11.         if (length > EXAMPLE_RING_BUFFER_SIZE)
    12.         {
    13.             length = EXAMPLE_RING_BUFFER_SIZE;
    14.         }

    15.         /* Move the data from ring buffer to given buffer section. */
    16.         EXAMPLE_ReadRingBufferDMA(g_ringBuffer, g_rxBuffer, length);
    17.         /* Wait for sending finished */
    18.         while (txOnGoing)
    19.         {
    20.         }

    21.         /* Start to echo. */
    22.         txOnGoing         = true;
    23.         sendXfer.data     = g_rxBuffer;
    24.         sendXfer.dataSize = length;
    25.         UART_TransferSendDMA(EXAMPLE_UART, &g_uartDmaHandle, &sendXfer);
    复制代码

    参考这部分,在实际使用中就可以移植到自己的项目中了。测试效果如图3所示:
    3-1.png
    图3

    加油哦
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 18:32 , Processed in 0.079911 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表