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.

[参考译文] TMS320F28388D:DMA 事件后 SPI 事务延迟

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1113479/tms320f28388d-delay-on-spi-transaction-after-dma-event

器件型号:TMS320F28388D

您好!

我正在设计一个系统、其中 SPI 事务通过 DMA 执行并由 EPWM10SOCA 事件触发(在这里配置为 PWM10信号的上升沿)。 我注意到 SPI 事务上有两件事:

  1. SPI 事务无法立即工作、SOCA 事件和第一个 SPI 时钟周期之间存在"长"延迟(延迟为~1µs μ s、表示 CPU 以100MHz 运行时的100个系统时钟周期)
  2.  与 PWM10上升沿相比、在 SPI 时钟启动的确切时刻存在+/-k 0.2µs Ω 抖动。 1.2µs 总延迟介于0.8µs μ s 和 μ s 之间、具体取决于周期。

延迟来自哪里? 我能否控制抖动(因此使 SPI 时钟的开始与 PWM 同步)?

我已经尝试通过使源地址和目的都在 SPI 外设寄存器范围内来消除 DMA 中的任何延迟、但这并没有改变任何东西。  我的配置如下:

  • 以100MHz 运行的 CPU
  • SPI 配置为2.5MHz 时钟
  • PWM10是一个7.5kHz 方波信号(ePWM 处于递增计数 模式、CMPA =周期/ 2)
  • PWM10触发 SOCA 事件:

EPWM_setADCTriggerSource(EPWM10_BASE, EPWM_SOC_A, EPWM_SOC_TBCTR_ZERO);
EPWM_setADCTriggerEventPrescale(EPWM10_BASE, EPWM_SOC_A, 1);
EPWM_enableADCTrigger(EPWM10_BASE, EPWM_SOC_A);

  • DMA 由 SOCA 事件触发并填充 SPI Tx 缓冲器:

DMA_configAddresses(DMA_CH5_BASE, (uint16_t *)(SPIB_BASE + SPI_O_TXBUF), srcAddr);
DMA_configMode(DMA_CH5_BASE, DMA_TRIGGER_EPWM10SOCA, DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT);

此致、

Stephane

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

    Stephane、

    延迟可能来自数据表中的"延迟时间、SPISTE 有效至 SPICLK"参数。

    此致、

    曼诺伊

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

    抖动又如何呢? 为什么在触发 SPI 缓冲器写入的 DMA 事件之后、SPI 时钟从不在同一时间点启动?

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

    抖动是因为延迟时间、到 SPICLK 的 SPISTE 有效值为最小/最大值。