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.

[参考译文] MSPM0G3507:MSPM0G3519

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455533/mspm0g3507-mspm0g3519

器件型号:MSPM0G3507
主题中讨论的其他器件:MSPM0G3519

工具与软件:

e2e.ti.com/.../i2c_5F00_target_5F00_rw_5F00_multibyte_5F00_fifo_5F00_interrupts_5F00_LP_5F00_MSPM0G3519_5F00_nortos_5F00_ticlang.rar

我目前正在通过 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 ()。