查看: 2908|回复: 2

[其他] UART0采用DMA发送数据

[复制链接]
  • TA的每日心情
    开心
    2018-2-11 12:29
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    10

    主题

    210

    帖子

    1

    中级会员

    Rank: 3Rank: 3

    积分
    211
    最后登录
    2018-11-21
    发表于 2018-4-11 16:02:36 | 显示全部楼层 |阅读模式
    首先UART0单独进行收发是正常的,然后加上DMA发送数据,结果上位机一直接收不到数据, DMA配置采用寄存器的形式写的:
    E_FLG  DmaInitMemToPer (unsigned char  uc_DMAn,
                            unsigned char  uc_DMAReSource,
                            void                    *pulSrcAddress,
                            void                    *pulDestAddress,
                            unsigned int   ui_DMASize,
                            unsigned char  uc_IntCon)
    {
        SIM->SCGC7 |= SIM_SCGC7_DMA_MASK;                // 开启DMA门控时钟
        SIM->SCGC6 |= SIM_SCGC6_DMAMUX_MASK;        // 开启多路复用DMA时钟   
           
            DMAMUX0->CHCFG[uc_DMAn] = 0x00;                // 禁止DMA

            DMA0->DMA[uc_DMAn].SAR = (uint32_t)pulSrcAddress;                      // 源地址配置
            DMA0->DMA[uc_DMAn].DAR = (uint32_t)pulDestAddress;                        // 目标地址

        DMA0->DMA[uc_DMAn].DSR_BCR |= (DMA_DSR_BCR_DONE_MASK             // 清除Done标志位
                                                                     | DMA_DSR_BCR_BCR(ui_DMASize));// 传输数据量大小配置
           
            DMA0->DMA[uc_DMAn].DCR |= (uc_IntCon << 31)
                                                            | DMA_DCR_SSIZE(1)                // 源数据位8bit(00-32;01-8;10-16)
                                                            | DMA_DCR_DSIZE(1)                 // 目标地址8bit(00-32;01-8;10-16)
                                                            | DMA_DCR_SINC_MASK                // 源地址自动增加
                                                            | DMA_DCR_CS_MASK                // 单次传输
                                                            | DMA_DCR_ERQ_MASK                // 外设请求配置
                                                            | (uc_IntCon << DMA_DCR_EINT_SHIFT);        // 中断配置
       
            DMAMUX0->CHCFG[uc_DMAn] |= DMAMUX_CHCFG_SOURCE(uc_DMAReSource);        // 选择DMA请求源
                               
            if(DMA0->DMA[uc_DMAn].DSR_BCR & DMA_DSR_BCR_CE_MASK)        // 出现错误
            {
                    return         FLG_FAIL;
            }
            else        //配置正常
            {
                    DMAMUX0->CHCFG[uc_DMAn] |= DMAMUX_CHCFG_ENBL_MASK;        //DMAMUX使能
                    return         FLG_SUCCESS;
            }
    }

    调用的地方:
            BSP_DMA_CTR.MemToPer(MKL_DMA0, 3, (uint8_t*)a, (uint8_t*)(UART0_BASE + 0x7), 10, 0);

    //        DMA0->DMA[0].DCR |= DMA_DCR_START_MASK;

            UART0->C5 |=   UART0_C5_TDMAE_MASK;        //发送DMA使能

            while((DMA0->DMA[0].DSR_BCR & DMA_DSR_BCR_DONE_MASK) != DMA_DSR_BCR_DONE_MASK);

    结果是发送完成标志立马就置位完成的.
    手册上也没查到串口0对应的DMA通道应该是0-3中 的几(0和1都测试过没用)

    最佳答案

    楼主你好,请问问题的时候告知我们你使用的芯片型号,这样才好帮你对应查看。
    哈哈哈哈哈哈
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24884
    最后登录
    2025-7-20
    发表于 2018-4-11 16:20:42 | 显示全部楼层
    楼主你好,请问问题的时候告知我们你使用的芯片型号,这样才好帮你对应查看。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-11 12:29
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    10

    主题

    210

    帖子

    1

    中级会员

    Rank: 3Rank: 3

    积分
    211
    最后登录
    2018-11-21
     楼主| 发表于 2018-4-12 10:16:18 | 显示全部楼层
    KL16的,问题解决了,原来发送数据量大小不能一起赋值
    哈哈哈哈哈哈
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 03:35 , Processed in 0.092319 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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