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:您能否提供在控制器模式下为 I2C 发送配置 DMA 的步骤。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1341335/mspm0g3507-can-you-please-provide-the-steps-to-configure-dma-for-i2c-send-in-controller-mode

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

Q:当我们在 DMA 寄存器上写入要发送的数据时,应该会触发 I2C 中断并启动通信。

如果您可以共享分步说明来配置相同的功能(寄存器)、

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

    Lavina、您好!

    我建议您先使用 i2c_controller_rw_multibyte_fifo_interrupts 示例执行此操作、该 示例位于 SDK 的以下位置:mspm0_sdk_1_30_00_03\examples\nortos\LP_MSPM0G3507\driverlib\i2c_controller_rw_multibyte_fifo_interrupts

    导入此项目后、您可以打开.syscfg 文件、打开"I2C"选项卡、然后向下滚动到"DMA 配置"选项卡。 您可以在此处配置 DMA 通道、由 I2C TX FIFO 触发。 在 SysConfig 中配置 DMA 通道后,需要 使用 DL_DMA_setSrcAddr ()和 DL_DMA_setDestAddr ()函数配置 DMA 的源地址和目标地址。 完成此操作并确保设置 DMA 传输大小(可以使用 DL_DMA_setTransferSize ()或 SysConfig 完成)后,您可以使用 DL_DMA_enableChannel ()启用传输开始。

    若要切换此示例以使用 DMA ,您还需要 删除 该示例使用的 DL_I2C_ControllerTXFIFO ()函数。 由于我们没有发布带有 DMA 示例的 I2C、因此我还建议您使用带 DMA 的 SPI 示例来帮助开发、可以在 SDK 中的以下位置找到该示例: mspm0_sdk_1_30_00_03\examples\nortos\lp_MSPM0G3507\driverlib\spi_controller_fifo_dma_interrupts

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

    我通过参考下面的示例在我的项目中完成了配置。

          /*! DMA 通道配置*/
          DMA_ConfigureChannelData ( DMA_Channel0、 size_8_bit、 &txdatabuffer、&I2C1->MASTER.MTXDATA、  1);

          /*! 选择 I2C 事件发布者作为 DMA 通道0触发器*/
          DMA_TriggerSelection (DMA_Channel0、DMA_I2C1_TX_TRIG);

          DMA_SetSingleTransfer (DMA_Channel0);
          DMA_EnableChannel (DMA_Channel0);

    启用通道后、我会立即填充 I2C TXDATA 寄存器、但事实并非如此。 是否需要进行任何额外的配置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否还在 SysConfig 中启用了 I2C DMA? 您能否发布选项卡的图像以显示其配置设置?

    观察上面的函数、这些并不是 driverlib 函数。 我不知道这是否能正确地初始化 DMA、因为我不知道这些函数有什么作用。  

    一般过程应为:

    初始化传输模式、目的和源地址增量、目的和源数据宽度、触发器和触发器类型。

    然后、设置源地址、目标地址和传输大小、然后启用 SChannel。

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

    如果只传输一个字节的数据、是否需要进行 目的地址和源地址递增?

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

    如果要将数据从一个不变的奇异地址传输到另一个不变的奇异地址、则不需要增加任一地址。

    我认为、 首先看一下 MSPM0 DMA Academy、然后尝试设计示例可能会有所帮助。

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

    您能否分享配置 DMA 通道以向 I2C 外设发送5字节数据的步骤

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

    编辑 MSPM0 DMA 学院中所示的示例以发送5个字节。 然后编辑该示例、使目标寄存器成为 I2C TX 缓冲区。  I2C0的基地址为0x400F0000、 I2C1的基地址为0x400F2000。 两者的偏移量都是0x1220。 因此、对于 I2C0、TX 缓冲器位于0x400F1220、对于 I2C1、TX 缓冲器位于0x400F3220。 确保在 DMA 传输之前初始化 I2C。 有关如何初始化 I2C 的信息、请参阅 MSPM0 I2C Academy 中的示例

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

    TXFIFO 能够通过 DMA 处理多达8字节的数据。 超过8个字节、没有启用 I2C 停止字节。

    TXFIF0是否存在任何字节计数限制? 与单次传输模式一样、一次最多只能向 FIFO 放置8个字节?

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

    当我通过 I2C 传输更多的8个字节的数据时、停止位没有启用、它在一次可以从 Tx FIFO 发送出去的字节数方面存在任何限制

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

    Lavina、您好!

    I2C FIFO 为8字节深。 如果您一次向 I2C FIFO 传输超过8个字节、它将被填满、并且您的数据无法正确发送。 查看 SysConfig 中的 I2C DMA 配置选项卡、可以看到 FIFO 部分满时有触发器设置。 如果使用这些设置和单传输模式、FIFO 不会被覆盖、并且 I2C 传输可以是连续的。