Other Parts Discussed in Thread: SYSCONFIG
主题: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 位字。 我想让你忘掉她们。