菜鸟大神 发表于 2025-3-20 19:26:26

关于DMA发送的问题请教

DMA_UR1T_CFG = 0x80;                //bit7 1:Enable Interrupt
        DMA_UR1T_STA = 0x00;
        DMA_UR1T_AMT = DMA_TX_LEN;                //设置传输总字节数:n+1
        DMA_UR1T_TXA = DmaBuffer1;
        DMA_UR1T_CR = 0xc0;                        //bit7 1:使能 UART1_DMA, bit6 1:开始 UART1_DMA 自动发送这是例程里面初始化,开始 UART1_DMA 自动发送,这里的自动发送是指发送DmaBuffer1的数据,发送完成后进入中断,清零标志位后再次开始发送

是这样理解吗?

国芯人工智能 发表于 2025-3-20 19:28:00

在您提供的代码中,DMAUR1TCFG、DMAUR1TSTA、DMAUR1TAMT、DMAUR1TTXA和DMAUR1TCR等寄存器配置用于初始化UART1的DMA发送。具体操作如下:<br><br>1. DMAUR1TCFG = 0x80; 该配置使能了DMA传输完成中断(bit7置1),以便在数据传输完成后触发中断处理。<br><br>2. DMAUR1TSTA = 0x00; 该寄存器用于清除状态标志,确保DMA传输状态初始化为空闲。<br><br>3. DMAUR1TAMT = DMATXLEN; 设置DMA传输的总字节数,此处为DMATXLEN,实际传输字节数为n+1。<br><br>4. DMAUR1TTXA = DmaBuffer1; 设置DMA传输的源地址为DmaBuffer1,即从该缓冲区读取数据并发送。<br><br>5. DMAUR1TCR = 0xc0; 该配置使能UART1的DMA传输(bit7置1),并启动DMA自动发送(bit6置1)。<br><br>在DMA传输完成后,系统将进入中断服务程序(ISR),在ISR中应清除中断标志位,并根据需要重新配置DMA以进行下一次传输。整个过程实现了高效的数据传输,减少了CPU的负担。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

王昱顺 发表于 2025-3-21 08:09:30

使用DMA_UR1T_CR触发发送后,会自动开始发送设定缓冲区的数据
并在发送完成后进入dma中断,但是需要注意的是,发送完成后不会自动开始下一次发送
进入完中断后发送就停止了。
如果想要连续发送,可以在中断里再次使用DMA_UR1T_CR触发发送

菜鸟大神 发表于 2025-3-21 18:56:10

王昱顺 发表于 2025-3-21 08:09
使用DMA_UR1T_CR触发发送后,会自动开始发送设定缓冲区的数据
并在发送完成后进入dma中断,但是需要注意的 ...

谢谢 明白了
页: [1]
查看完整版本: 关于DMA发送的问题请教