ZHDA282 September   2026 MSPM0G5117 , MSPM0G5187

 

  1.   1
  2. 1 说明
  3. 2 所需外设
  4. 3 兼容器件
  5. 4 设计步骤
  6. 5 设计注意事项
  7. 6 软件流程图
  8. 7 应用代码
  9. 8 数据流示例
  10. 9 其他资源
  11. 10商标

软件流程图

图 6-1 展示了此示例的代码流程。

USB 转 I2C 方向:

  1. 每当 USB 主机发送数据时,TinyUSB 都会调用 tud_cdc_rx_cb()。该回调函数会调用 usb2i2c_pushTask(),从 USB CDC 接口读取最多 64 个字节,并将其作为任务加入 gUSB2I2CTask 队列。
  2. 在主循环中,当 gUSB2I2CTask.fifoCount > 0 时,usb2i2c_popTask() 会使用任务缓冲区的地址和长度配置 DMA 通道 CH1,然后启动对目标器件的 I²C 写传输。
  3. 当 DMA 完成对 I²C TX FIFO 的加载时,会触发 TX DMA 完成中断。处理程序清除 STOP 中断状态标志并启用 STOP 中断。总线上出现 I²C STOP 条件时,将触发 STOP 中断。处理程序调用 fifoCompleteRead() 以释放任务并清除 i2cInProgress。

I2C 转 USB 方向:

  1. I2C 目标器件将数据就绪 GPIO 引脚(上升沿)置为有效。GPIO 中断处理程序置位 i2ctargetDataReady
  2. 在主循环中,当 i2ctargetDataReady 被置位且 i2cInProgress 为 false 时,i2c2usb_pushTask() 将 DMA 通道 CH0 配置为接收缓冲区,开始 64 个字节的 I2C 读取传输,并置位 i2cInProgress。数据长度始终固定为 64 个字节。
  3. 当接收到所有 64 个字节时,将触发 RX DMA 完成中断。处理程序调用 fifoCompleteWrite() 将任务标记为 USB 传输准备就绪,清除 i2ctargetDataReady,然后清除 i2cInProgress。
  4. 在主循环中,当 gI2C2USBTask.fifoCount > 0 时,i2c2usb_popTask() 检查 TinyUSB CDC TX FIFO 是否有足够的空间,写入缓冲的数据,将其刷新到主机,然后调用 fifoCompleteRead() 以释放该任务。
 应用软件流程图图 6-1 应用软件流程图