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.
工具与软件:
我目前正在通过 LaunchPad 调试 IIC 通信。 通过 IIC0发送数据、通过 IIC2接收数据。 两个接口可以正常通过中断模式接收数据。 但将 IIC2更改为 DMA 模式、则无法完成数据接收。 您能否提供通过 DMA 传输和接收数据的 IIC 示例? 请帮助在我修改的附件中找到问题。 谢谢你。
它在 I2C 的哪一侧工作? 该名称显示为"target"、但代码都似乎起到了控制器的作用。
---
更笼统地说:
> gTxCount0 = DL_I2C_fillControllerTXFIFO (I2C_0_INST、&gTxPacket0[0]、gTxLen0);
DMA 会从存储器传输到 FIFO、因此您不应该在此处预先填充 FIFO。 执行此操作会触发(DMA 与 I2C)计数。
---
除了您引用的线程中的建议外、从此处的"spi_controller_repeed_fifo_dma_interrupt"示例中的 spi_send ()函数开始可能会有用:
https://dev.ti.com/tirex/explore/node?node=A__AC8uwWRQ8P8dtELVi9opaA__MSPM0-SDK__a3PaaoK__LATEST
这里有两个细微之处:
1) 1)由于 SPI 是双向的、该函数设置 Tx 和 Rx DMA 通道。 I2C 只会对任何给定的事务使用其中一个。
2)对于 SPI、初始 Tx 触发始终为"优先"、因此启用 DMA 会立即启动事务。 对于 I2C ,这不会发生,直到你调用 DL_I2C_startControllerTransfer ()。