主题中讨论的其他器件: SysConfig
Q:当我们在 DMA 寄存器上写入要发送的数据时,应该会触发 I2C 中断并启动通信。
如果您可以共享分步说明来配置相同的功能(寄存器)、
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.
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
我通过参考下面的示例在我的项目中完成了配置。
您是否还在 SysConfig 中启用了 I2C DMA? 您能否发布选项卡的图像以显示其配置设置?
观察上面的函数、这些并不是 driverlib 函数。 我不知道这是否能正确地初始化 DMA、因为我不知道这些函数有什么作用。
一般过程应为:
初始化传输模式、目的和源地址增量、目的和源数据宽度、触发器和触发器类型。
然后、设置源地址、目标地址和传输大小、然后启用 SChannel。
编辑 MSPM0 DMA 学院中所示的示例以发送5个字节。 然后编辑该示例、使目标寄存器成为 I2C TX 缓冲区。 I2C0的基地址为0x400F0000、 I2C1的基地址为0x400F2000。 两者的偏移量都是0x1220。 因此、对于 I2C0、TX 缓冲器位于0x400F1220、对于 I2C1、TX 缓冲器位于0x400F3220。 确保在 DMA 传输之前初始化 I2C。 有关如何初始化 I2C 的信息、请参阅 MSPM0 I2C Academy 中的示例。