本文主要是介绍恒玄BES软件平台学习笔记(5)-I2C,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.hal_iomux_set_i2c0 配置I2C的Pin脚复用,对应也有hal_iomux_set_i2c1
很多驱动代码没有使用这个API,直接配置了Pin脚,代码看起来不够简洁。
2.uint32_t hal_i2c_open(enum HAL_I2C_ID_T id, const struct HAL_I2C_CONFIG_T *cfg),配置I2C的参数,如模式,速率
先来看下都有什么模式。
enum HAL_I2C_API_MODE_T {
HAL_I2C_API_MODE_TASK = 0,
HAL_I2C_API_MODE_SIMPLE,
HAL_I2C_API_MODE_SENSOR_ENGINE,
};
HAL_I2C_API_MODE_TASK就是最常用的一种了,任务驱动的读写,可用于同步或异步,dma或非dma;
传输函数对为hal_i2c_send/hal_i2c_recv,实质是通过hal_i2c_sm_commit把传输任务填充到I2C的任务表中,最终在hal_i2c0_irq_handler中处理相应的任务表,可以看到I2C其实只有2个,HAL_I2C_ID_0和HAL_I2C_ID_1,任务总数也只有2个
#define HAL_I2C_SM_TASK_NUM_MAX 2
HAL_I2C_API_MODE_SIMPLE看起来是直接读写I2C
传输函数对为:hal_i2c_send_simple/hal_i2c_recv_simple。
HAL_I2C_API_MODE_SENSOR_ENGINE是一种DMA处理方式,适合处理批量读写数据,具体使用方法还没搞清楚,目前没有实际代码应用,只有个sensor_eng_test,后面有时间再研究。逻辑是定时会从DMA缓冲获取数据进行处理。
这篇关于恒玄BES软件平台学习笔记(5)-I2C的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!