完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用UART07,通过DMA进行数据发送,发送5个数据:0x79,0x91,0x04,0x71,0x01
通过逻辑分析仪截取UART07_TX的波形图如下,发出的数据不完整(只有0x79和0x71),请问出现这个现象的原因是什么? 详细寄存器设定如下: UART07 设定: CPG_MFS07_UART_SCR_TXE = 0; /* UART Tx Stop */ CPG_MFS07_UART_SCR_RXE = 0; /* UART Rx Stop */ CPG_MFS07_UART_SCR_UPCL = 1; /* UART7 status initialize */ CPG_MFS07_UART_SMR = 0x00; /* Operation mode setting (Asynchronous normal mode)*/ CPG_MFS07_UART_BGR = 0x002F; /* initialize bgr 416kbps */ CPG_MFS07_UART_SCR = 0x00; /* UART7 transmission setting initialize */ CPG_MFS07_UART_ESCR = 0x00; /* Data format setting (8bit length) */ CPG_MFS07_UART_SCR_TXE = 1; /* UART Tx Start */ CPG_MFS07_UART_SCR_RXE = 1; /* UART Rx Start */ DMA0 设定: DMA0_R_PR = 0x00; /* set dma fixed priority */ DMA0_R_DBE = 0; /* set debug no react */ DMA0_R_DB = 0x00; /* set debug behavior continue */ /* Enable DMA0 */ DMA0_R_DE = 1; /* Enable DMA */ DMA0_A0_IS = 0x00; /* Software request */ DMA0_A0_AL = 0; /* Contiguous */ DMA0_A0_BL = 0x00; /* Single transfer (SINGLE) */ DMA0_A0_BC = 0; DMA0_A0_TC = 5; DMA0_B0_MS = 0x01; /* Burst transfer mode */ DMA0_B0_TW = 0x00; /* Byte */ DMA0_B0_EI = 1; /* Error interrupt issuance is enabled */ DMA0_B0_CI = 1; /* Completion interrupt issuance is enabled */ DMA0_B0_PN = 0; DMA0_SA0 = (uint32_t)(aubSendStartByte_p); /* set source address */ DMA0_DA0 = (uint32_t) CPG_MFS07_UART_TDR; /* set destination address */ DMA0_C0_CD = 0; /* clear dma iqr */ DMA0_C0_CE = 0; /* clear dma error irq */ DMA0_D0_1_FD = 1; /* Destination address is kept fixed */ DMA0_D0_3_FS = 0; /* Source address is incremented */ DMA0_D0_3_US = 1; /* DMAi_SAn is updated with the next address after the DMA transfer is successfully completed */ DMA0_D0_3_DES = 0; /* Source address is incremented */ DMA0_D0_3_FBS = 0; /* Start address of first block of DMA transfer is set to the value stored in DMAi_SAn. Start address of consecutive blocks is the address following the previous block last address */ DMA0_CMCHIC0_RLESEL = 0; /* CMCHIC Reload event of DMAi_CMCHICn is disabled */ DMA0_CMCHIC0_RLSLOT = 0; /* Value of DMAAn_CMCHICRDB0 register is copied to DMAi_CMCHICn at CMCHIC reload event */ DMA0_CMCHIC0_CI = 33; /* MFS ch.7 TX */ DMA0_A0_EB = 1; /* Channel is enabled */ /* External Interrupt */ EIC00_ENIR_EN0 = CLEAR; /* DISABLE External Interrupt */ EIC00_ELVR0_LA0 = 1; EIC00_ELVR0_LB0 = 1; EIC00_ELVR0_LC0 = 0; EIC00_EIRCR_ERC0 = SET; /* CLEAR External Interrupt Factor */ EIC00_DRESR_DRES0 = SET; /* ENABLE DMA Request */ EIC00_ENIR_EN0 = SET; /* ENABLE External Interrupt */ DMA0_A0_ST = 1; /* Software request */ |
|
相关推荐
1个回答
|
|
根据提供的寄存器设定,没有看到涉及DMA的相关配置信息,因此推测发生数据不完整的原因可能是DMA配置不正确或者未启用DMA功能。
要使用DMA进行数据发送,需要配置DMA通道和相关寄存器,并启用DMA传输功能。下面是一些可能需要检查和配置的寄存器和步骤: 1. 配置DMA通道:根据硬件平台,选择合适的DMA通道(例如DMA0、DMA1等)作为UART07的传输通道。 2. 设置DMA传输方向:将DMA通道配置为外设至存储器(Peripheral to Memory)传输模式。 3. 配置DMA传输源和目的地址:将UART07的发送数据寄存器作为DMA传输的源地址,将存储器的相应地址(用于存放发送数据)作为DMA传输的目的地址。 4. 配置DMA传输数据长度:设置DMA传输数据的长度为5个数据,即发送的0x79、0x91、0x04、0x71、0x01。 5. 启用DMA传输:将DMA通道的使能位设置为1,使得DMA开始传输数据。 如果以上步骤中有任何一个步骤配置不正确或者未执行,可能会导致数据不完整。 需要注意的是,以上只是一般的思路和步骤,具体的配置和操作细节可能因硬件平台和实际需求而有所不同。建议参考相关芯片的技术手册或者参考其他可靠来源的示例代码,来正确地配置和使用DMA进行数据发送。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11771 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 17:17 , Processed in 0.714095 second(s), Total 42, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号