i2c_dma 使用示例
例程路径: ls_sdk\examples\peripheral\i2c\i2c_dma
本示例主要用于演示如何使用i2c dma相关接口进行数据收发。
一、程序基本配置:
1.1 宏定义说明
大多数宏定义与i2c_it示例一致。但由于i2c dma的特性,比如只支持主模式等,有些宏,例如CURRENT_ROLE、SIMU_IRQ_EN和I2C_POLLING_TIMEOUT_MS,在i2c_dma里是不需要的
1.2 其他配置
该例程使用到的全局变量与i2c_it示例一致,但需注意,收发的buffer需要增加DMA_RAM_ATTR宏定义属性
二、程序运行流程说明
2.1 初始化
初始化流程与i2c_it示例一致
2.2 运行流程
i2c_dma测试的流程基本和i2c_it基本一致,有区别的地方是,主机和从机每次收发的数据长度必须一致,dma模式不支持双方收发长度不一致的场景
三、操作步骤及结果:
3.1 操作步骤
参考i2c_it示例,操作步骤完全一致
3.2 测试结果
和i2c_it一样,主从机数据收发反复进行,无限循环,主从机LED灯会持续闪烁
四、其他
i2c_dma示例没有驱动鲁棒性验证选项。因为数据收发流程,除了开始和结束的一些处理,其他步骤都是由dma硬件完成的,因此外界中断的打断对dma本身没有什么影响。但如果使用i2c_it或i2c_polling作为从机和i2c_dma进行对测,是可以打开i2c_it或i2c_polling内部的SIMU_IRQ_EN宏,这对i2c_dma的运行没有影响
i2c_dma只支持master模式,不支持slave模式
同样的,i2c_dma不支持length > 255长度的数据传输