部件号: TMS320F28379D
您好:
我尝试使用 ePWM 触发的 DMA 来驱动外部 DAC、以便从 24 点正弦波表写入 SPI 发送缓冲区。 我已经将 ePWM 映射到 GPIO 以监控其输出。 我看到 SPI 外设发送 16 个时钟脉冲并在每个 EPWM 脉冲的上升沿将芯片选择驱动为低电平、但是、不会通过 MOSI 传输任何数据(请参阅图,前几次 SPI 写入是手动进行的)。

这向我表明 DMA 由我的 ePWM 触发、但出于某种原因、数据在 DMA 和 SPI 之间无法正确传输。 我也感到困惑、因为我在调试中监控了一些 DMA 标志、我看到以下标志在运行时保持不变:
- DMA_getTransferStatusFlag = DMA_getRunStatusFlag = 1
- DMA_getTriggerFlagStatus = 0
我不确定是否确实触发了 DMA。
我想知道是否有人可以查看我的 DMA 配置、并指出是否缺少一些明显的信息。 我怀疑我的问题与该主题中描述的非常相似、但遗憾的是、此用户不详细说明他们所做的更改(使用 ePWM、DMA 和 DAC 生成 Sinewave)。 以下是我的配置:
extern uint16_t waveformDATA[24];
#define mySPI0_TX_DMA_ADDRESS (SPIA_BASE + SPI_O_TXBUF)
void DMA_init(){
DMA_initController();
myDMA0_init();
}
void myDMA0_init(){
DMA_setEmulationMode(DMA_EMULATION_STOP);
DMA_configAddresses(myDMA0_BASE, (const void *)mySPI0_TX_DMA_ADDRESS, (const void *)waveformDATA);
DMA_configBurst(myDMA0_BASE, 1U, 1, 0);
DMA_configTransfer(myDMA0_BASE, 24U, 1, 0);
DMA_configWrap(myDMA0_BASE, 24U, -24, 65535U, 0);
DMA_configMode(myDMA0_BASE, DMA_TRIGGER_EPWM6SOCA, DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT);
//DMA_stopChannel(myDMA0_BASE);
DMA_enableInterrupt(myDMA0_BASE);
DMA_setInterruptMode(myDMA0_BASE, DMA_INT_AT_END);
//DMA_clearTriggerFlag(myDMA0_BASE);
DMA_enableTrigger(myDMA0_BASE);
}
此致、
Malcolm
