请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28388D 您好!
我正在设计一个系统、其中 SPI 事务通过 DMA 执行并由 EPWM10SOCA 事件触发(在这里配置为 PWM10信号的上升沿)。 我注意到 SPI 事务上有两件事:

- SPI 事务无法立即工作、SOCA 事件和第一个 SPI 时钟周期之间存在"长"延迟(延迟为~1µs μ s、表示 CPU 以100MHz 运行时的100个系统时钟周期)
- 与 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