1

我正在使用 Atmel SAM3S MCU,他们的 ASF 产品可以进行 I2C(他们称之为 TWI)通信。没关系,只是它从我的主循环中花费了太多时间。

因此,我希望能够启动 DMA 传输以从 I2C 设备读取数据。但是,所有文档都说您不能在像 TWI 这样的半双工设备上同时打开 TX 和 RX。文档确实显示它在 TWI 寄存器中有一个外设 DMA 控制器 (PDC) 寄存器部分,但我找不到任何 PDC 示例,除了全双工的 USART。

我唯一能想到的尝试是设置TX部分,和next-RX部分,并希望它在TX完成后自动启用RX。

有没有人在 SAM3S 上使用 DMA 进行 I2C 读取?如果是这样,您能否指出一些文档或示例?

4

1 回答 1

1

我对特定部分不熟悉,但是我建议对于许多常见的使用模式,您最好的选择可能是仅使用 DMA 来处理多字节数据序列。大多数 I2C 外设允许通过执行以“写入”地址字节开始的方式来读取数据,并且如果确认,则发送地址或有关所需数据的其他信息。随后是重新启动和“读取”地址字节。如果确认了这一点,则可以执行除设置了“ack”标志的所有字节读取之外的所有字节。完成后,请求读取最后一个字节,并清除“ack”标志。

我不确定是否值得使用 DMA 控制器来输出请求地址的字节,但可能不值得尝试使用它来输出读取命令的第一个字节。

于 2013-07-12T18:14:10.537 回答