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.

[参考译文] CCS/MSP432P401R:UDMA_MODE_PER_SP散 射_收集

Guru**** 2599415 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/649394/ccs-msp432p401r-udma_mode_per_scatter_gather

器件型号:MSP432P401R

工具/软件:Code Composer Studio

尊敬的论坛。 我在 MSP432P401R 中的散聚 DMA 模式出现问题。

我必须在散聚模式下通过 UART0发送四个缓冲器。  在某些步骤中、我测试了 UART:  可以肯定的是、通过 UART 进行的简单字符串传输是 UART

配置正常。 在我的 PC 上看到字符串输出后、我开始了散聚传输。 代码的一些相关部分是 hier。

/* DMA 控制表*/
#if defined (__TI_Compiler_version__)
#pragma DATA_ALIGN (MSP_EXP432P401RLP_DMAControlTable、1024)

#Elif defined (_IAR_systems_icc_)
#pragma DATA_alignment=1024
#Elif defined (_GNU_)
__attribute__((对齐(1024)))
#Elif defined (_CC_ARM)
_align (1024)
#endif
静态 DMA_ControlTable MSP_EXP432P401RLP_DMAControlTable[1024];

DMA_ControlTable g_TaskTableSrc[4]=

 
   //
   //任务:将片段缓冲区1复制到 UART
   // ARB 尺寸为8
   //
 DMA_TaskStructEntry (256、UDMA_SIZE_8、
                       UDMA_SRC_INC_8、FirstBufferTx、
                       UDMA_DST_INC_NONE、
                       &EUSCI_A0->TXBUF、
                       UDMA_ARB_8、UDMA_MODE_PER_散 射_收集)、

   //
   //任务:将片段缓冲区2复制到 UART
   // ARB 尺寸为8
   //
 DMA_TaskStructEntry (256、UDMA_SIZE_8、
                   UDMA_SRC_INC_8、二级缓冲器 Tx、
                   UDMA_DST_INC_NONE、
                   &EUSCI_A0->TXBUF、
                   UDMA_ARB_8、UDMA_MODE_PER_散 射_收集)、

   //任务 :将片段缓冲区3复制到 UART


 DMA_TaskStructEntry (256、UDMA_SIZE_8、
                  UDMA_SRC_INC_8、ThirdBufferTx、
                  UDMA_DST_INC_NONE、
                  &EUSCI_A0->TXBUF、
                  UDMA_ARB_8、UDMA_MODE_PER_散 射_收集)、

   //
   //任务:将片段缓冲区4复制到 UART
   // ARB 尺寸为8
   //模式是基本的,因为这是最后一个任务
   //
 DMA_TaskStructEntry (256、UDMA_SIZE_8、
                   UDMA_SRC_INC_8、FourtBufferTx、
                   UDMA_DST_INC_NONE、
                   &EUSCI_A0->TXBUF、
                   UDMA_ARB_8、UDMA_MODE_BASIC)
};

/*配置 DMA 模块*/
   map_dma_enableModule();
   MAP_DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable);

//为散聚配置 UART TX DMA 通道
   MAP_DMA_setChannelScatterGather (DMA_CH0_EUSCIA0TX、4、(void*) g_TaskTableSrc、1);

/*分配中断*/
      MAP_DMA_赋 值中断(DMA_INT1、DMA_CHANNEL 0);
      MAP_DMA_clearInterruptFlag (DMA_CHANNEL 0);
      MAP_DMA_enableInterrupt (DMA_INT0);
      MAP_DMA_enableInterrupt (DMA_INT1);

 /*启用 DMA Tx 通道*/
  map_dma_enableChannel (dma_channel_0);
  /*强制在 DMA 通道0上进行软件传输*/
      MAP_DMA_requestSoftwareTransfer (0);

在最后一个命令之后、我可以在终端上看到只有两个字符。 但我的 FirstBufferTx 和其他缓冲区的长度为256字节、且数据已满。

有人知道解决方案吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更新了。 我插入了
    /*将通道0分配给 EUSCIA0TX*/
    MAP_DMA_赋 值通道(DMA_CH0_EUSCIA0TX);
    在此代码中:
    /*配置 DMA 模块*/
    map_dma_enableModule();
    MAP_DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable);
    /*将通道0分配给 EUSCIA0TX*/
    MAP_DMA_赋 值通道(DMA_CH0_EUSCIA0TX);
    现在、我可以从我的四个缓冲区中看到更多字符、但仍然不正常、因为每个缓冲区丢失了大量字符。
    仍然希望得到明智的建议
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Aleksander

    UART 具有用于发送和接收的单个缓冲器。 您是否尝试使用 ARB 长度为1的 ARB 长度、而不是使用8的 ARB 长度?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Amit。 非常感谢。 这就是问题所在。

    很不错! 此致