恒玄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缓冲获取数据进行处理。

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值