如何在Cortex M3上使用DMA进行I2C读取

时间:2013-07-12 18:02:26

标签: i2c cortex-m3 atmel dma

我正在使用Atmel SAM3S MCU,他们的ASF内容可以做I2C(他们称之为TWI)通信。这很好,除了从我的主循环中花费太多时间。

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

我唯一想到的就是设置TX部分和下一个RX部分,并希望它在TX完成后自动启用RX。

有没有人在SAM3S上使用DMA进行I2C读取?如果是这样,你能指点我一些文档或例子吗?

1 个答案:

答案 0 :(得分:0)

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

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