我尝试在 I2C 外设作为从设备运行时使用 UDMA、并再次遇到 CPU 信号处理问题。
DMA 设置为从缓冲器向 FIFODATA 寄存器传输40个字节(或当 i2c 主器件向 cc3235 "从器件"写入数据时反向)。
I2C_SLAVE_INT_TX_DMA_DONE 和 I2C_SLAVE_INT_RX_DMA_DONE 中断均已启用。
当 I2C 主设备尝试读取 CC3235时、会发生此问题。
1) 1)我设置 DMA 将40字节传输到 FIFO。
2) 2)然后将 GPIO 设置为低电平。
3) 3)当 I2C_SLAVE_INT_TX_DMA_DONE 完成时、GPIO 变为高电平(当可能发生另一个传输时、GPIO 信号内部信标)。
问题是:DMA TX 完成似乎提前发出信号、并导致应用程序回卷/初始化 DMA 并发送下一个缓冲区数据覆盖/损坏传输的字节。

在该图中、当 DMA_RDY 信号变为高电平时、会发生覆盖->应用重新加载指向其他缓冲区的 DMA -> 通过将错误数据填充到 FIFO 来破坏正在进行的 I2C TX。
是否有方法以任何可靠的方式向 I2C 传输结束发出信号?
(我不寻找驱动程序支持我知道驱动程序不支持此用例、我对 CPU /低级用法感兴趣、根据 swru543a 技术参考手册、CPU 配备了 I2C 从设备和 uDMA)