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.

[参考译文] TMS320F28379D:BURSTSIZE 的 SPI DMA 问题

Guru**** 2614905 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1583002/tms320f28379d-spi-dma-problems-with-burstsize

部件号:TMS320F28379D
主题:SysConfig 中讨论的其他器件

我使用以下代码片段来配置 F28379D 上的 DMA 通道、以便将数据缓冲区写入 SPI 可寻址 DAC 器件。 我的目的是在每次触发 SOCA 事件时、都将 DAC_BUFFER_A 中的一个 16 位元素写入外设。

#define DAC_SPI_TX_DMA_TRIGGER DMA_TRIGGER_EPWM1SOCA
#define DAC_SPI_TX_DMA_ADDRESS ((uint16_t *)(SPIA_BASE + SPI_O_TXBUF))

void DAC_SPI_TX_DMA_init() { 
    DMA_setEmulationMode(DMA_EMULATION_FREE_RUN);
    DMA_configAddresses(DAC_SPI_TX_DMA_BASE, DAC_SPI_TX_DMA_ADDRESS, dac_buffer_a);
    DMA_configBurst(DAC_SPI_TX_DMA_BASE, 1U, 1, 0);
    DMA_configTransfer(DAC_SPI_TX_DMA_BASE, 16U, 0, 0);
    DMA_configMode(DAC_SPI_TX_DMA_BASE, DAC_SPI_TX_DMA_TRIGGER, DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT);
    DMA_setInterruptMode(DAC_SPI_TX_DMA_BASE, DMA_INT_AT_END);
    DMA_enableInterrupt(DAC_SPI_TX_DMA_BASE);
    DMA_disableOverrunInterrupt(DAC_SPI_TX_DMA_BASE);
    DMA_enableTrigger(DAC_SPI_TX_DMA_BASE);
}

不幸的是、这种情况没有发生。 在传输结束(16 字节)时、检查源地址表明它没有前进。 为什么会这样? 我的理解是,将 1 作为突发大小传递到 dma_configBurst () 应该会导致源地址在每个单字突发之后前进。 这似乎没有发生。  

如果我将 dma_configBurst() 的第二个参数从 1 更改为 2、顺便说一下、源地址在传输结束时按预期结束(起始地址+ 16)。 但是、我不希望在每次触发事件发生时发送 2 个 16 位字。 我想让你忘掉她们。  

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

    您好 Brandon、

    您的突发和传输步长都看起来正确。 请发送 DAC_BUFFER_A 数据类型/定义的屏幕截图、以便我可以进行查看。 您是否也使用了 SysConfig 来实现这一点? 如果是、您能否发送 SysConfig 选择的屏幕截图。 您能否将以下代码行添加到配置中、以确保禁用绕接?

    DMA_configWrap(DAC_SPI_TX_DMA_BASE, 65535U, 0, 65535U, 0);

    此致、

    Delaney