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 RX部件的示例?

Guru**** 2582405 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/614828/msp432p401r-has-anybody-working-example-of-dma-uart-rx-part

部件号:MSP432P401R

您好,社区:

我可以创建正在运行的DMA UART发送。不幸的是,对于DMA UART RX代码不起作用。

有任何人在做示例。。

只是我的几个职能...

void preparareDMA()
{
MAP_DMA_enableModule();
MAP_DMA_setControlBase(dmaControlTable);
/*将DMA通道0分配给EUSCI_A0_TX0 */
MAP_DMA_赋 值通道(DMA_CH0_EUSCIA0TX);

/*设置TX传输特性和缓冲区*/
MAP_DMA_setChannelControl(DMA_CH0_EUSCIA0TX | UDMA_PRI_SELECT,
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
MAP_DMA_赋 值中断(INT_DMA_INT1,DMA_CHANGE_0);
MAP_DMA_DisableInterrupt (INT_DMA_INT1);

/*将DMA通道1分配给EUSCI_A0_RX0 */
MAP_DMA_赋 值通道(DMA_CH1_EUSCIAN0RX);
/*设置RX传输特性和缓冲区*/
MAP_DMA_setChannelControl(DMA_CH1_EUSCIAN0RX | UDMA_PRI_SELECT,
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1);
MAP_DMA_赋 值中断(INT_DMA_INT2,DMA_CHANGE_1);
MAP_DMA_DisableInterrupt (INT_DMA_INT2);
}

void UART_SEND_DMA(char buy[],int n)
{
MAP_DMA_setChannelTransfer(.
DMA_CH0_EUSCIA0TX | UDMA_PRI_SELECT,
udma_mode_basic,
缓冲器,
(void *) MAP_SPI_getTransmitBufferAddressForDMA(EUSSCI_A0_base),n);

MAP_DMA_enableInterrupt (INT_DMA_INT1);
MAP_DMA_enableInterrupt (INT_DMA_ERR);
MAP_DMA_enableChannel(DMA_Channel_0);
}

void UART_receive DMA (char buy[],int n)
{
MAP_DMA_setChannelTransfer(.
DMA_CH1_EUSCIA0RX | UDMA_PRI_SELECT,
udma_mode_basic,
(void*)MAP_SPI_getReceiveBufferAddressForDMA(EUSSCI_A0_base),
黄,n);
MAP_DMA_enableInterrupt (INT_DMA_INT2);
MAP_DMA_enableInterrupt (INT_DMA_ERR);
MAP_DMA_enableChannel(DMA_Channel_1);}


不幸的是,在UART_receive_DMA()调用后,没有相关中断...
UART_SEND_DMA()起作用,每个调用都会导致中断调用。

谢谢 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尤利
    当eUSCI外围设备从复位释放时,TX IFG将自动设置,指示传输缓冲区为空,并且可以将另一个字节写入缓冲区。 但在接收中则不是这种情况。 分配给通道1的第二个DMA IRQ (DMA_CH1_EUSCIAN0RX)在收到'n'字节之前不会发生。 如果您有某种回路,则需要确保在Tx之前调用Rx,否则Tx将在Rx准备就绪之前传输字节,并且Rx IRQ将不会发生,因为它未看到所有n字节。 我建议使用单独的传输和接收缓冲区。

    如果导航到API指南的UART部分,您还会找到特定的API,而不是使用SPI API。

    dev.ti.com/.../modules.html

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

    >如果您有某种回路...

    否,我没有...输入流(RX,从我的角度来看)是从独立源生成的。

    只需发送一次第二个256字节UART。

    >如果导航到API指南的UART部分,您还会找到特定的API,而不是使用SPI API。  

    谢谢,今天稍后会这样做。

    回到我的问题,那么从您的角度来看,我的功能在编码方面是否正确?

    我只需要注意入站UART流,对吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尤利
    是的,我认为这些功能的编码正确。 通常,我看到DMA的配置完成一次,然后根据需要进行更新以重复数据传输。 因此,虽然我不习惯看到如此配置的DMA,但只要您注意您提到的UART入站流,我仍然看不到任何问题。

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

    好的。

    我可以使用裸机代码运行此DMA RX,但不能在TI RTOS中运行。

    当然,我知道在TI RTOS中没有IRQ,但有hwi。

    然而,没有时间进一步调查

    谢谢你。

    让我们结束这一事件。