This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:DMA UART传输和DMA UART接收

Guru**** 2609895 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/657540/msp432p401r-dma-uart-transmission-and-dma-uart-receive

部件号:MSP432P401R

是否有办法在不清除TXIFG的情况下启动DMA TX?  

当DMA TX完成时,UART在传输移位寄存器中有一个(部分)字符,在TXBUF寄存器中有最后一个字符。 当这些字符移出TX传输移位寄存器时,将设置TXIFG。  因此,当您要发送下一个数据包时,已设置TXIFG。  我可以通过1)重置TXIFG和2)设置TXIFG或将字符写入TXBUF寄存器来启动另一个DMA TX。

问题在于,如果正在进行接收DMA UART,则TXIFG的复位或设置可能会影响RXIFG,因为TXIFG的复位或设置需要读取IFG寄存器,修改一位,然后将修改后的内容写回IFG寄存器。  例如,读取RXIFG等于'1'的IFG寄存器, RCV DMA读取RXBUF,写入IFG寄存器,然后再次设置RXIFG。 RCV DMA从RXBUF寄存器读取同一字符两次。

我能想到的唯一解决方案是将TX和RX acroos两个UART分开。   还有其他想法吗???

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tom,
    我自己没有尝试过,但您是否可以在准备好开始将数据发送到TX缓冲区之前禁用关联的DMA通道? 一旦eUSCI被配置并从(EUSSCI_A_CTLW0_SWRST)重置释放后,TXIFG将自动设置。

    仅访问TXIFG的一个想法是使用位带区域:

    #define BITBAND_PERI(x, b)(*((__IO uint8_t *)(BITBAND_PERI_BASE +((UINT32_t)(UINT32_t *)&(x))- Periph_base)*32 +(b)*4)))
    BITBAND_PERI(EUSI_A0->IFG, EUSCI_A_IFG_TXIFG_OFS)=0;

    此致,
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道`BITBAND` 这应该能解决问题。

    非常感谢