你好,
我正在使用I2C与传感器通信,并且需要使用DMA进行高带宽读取操作。
我能够让传感器准备好发送数据,并且如果我将0x0100写入i2c_data_cmd_reg(如在i2c_eeprom.c中所做的),则可以看到正在传输的数据。
我尚未管理的是使用DMA完成此交换。我可以通过写入i2c_data_cmd_reg不止一次,队列几个读取,但如果可以的话,我没有解决
让DMA自动化该过程。
有谁可以告诉我我需要做些什么来通过DMA从I2C奴隶中获取数据?
谢谢,
埃里克
关键词:
设备:
嗨埃里克,
使用DMA使用I2C的示例,为了使其在读取中工作,例如,您需要编写要手动读取,手动读取的从设备的地址,以便将设备输出。从站和从属寄存器的地址,上面应该足够快,以便模块不发送停止条件。因此,您必须配置两个DMA通道才能编写和读取,您需要设置一个频道,该通道将具有I2C_DATA_CMD_REG的源,并作为BUFFER的目标(使用DMA_SETUP STRUCT以传递配置)。设置接收方面后,需要设置发送通道,以便从DMA发送到I2C模块,以便通过写入I2C_DATA_CMD_REG来生成时钟,值0x100设置该位以读取并生成时钟。因此,第二通道的源地址将是具有值0x100的变量,目标地址将是I2C_DATA_CMD_REG。设置后,通道通过DMA_Initialization_Function()初始化它们(应为每个通道调用两次),然后通过DMA_CHANNEL_ENABLE()启用DMA(每个频道再次调用一个调用。因此,在完成DMA的设置后,您将不得不发送手动写命令,然后通过setword16(i2c_dma_cr_reg,tdmae + rdmae)启用DMA之后;
谢谢mt_dialog.