Edit online

接口设计

3 Mar 2025
Read time: 5 minute(s)

Driver 层接口设计

1. aic_hw_i2c_register

函数原型

static int aic_hw_i2c_register()

功能说明

注册和初始化 I2C 设备

参数定义

NULL

返回值

0:注册成功
<0:注册失败

注意事项

-

2. aic_i2c_bus_control

函数原型

static rt_err_t aic_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t cmd, rt_uint32_t value)

功能说明

对 I2C 总线参数进行设置,目前支持更改总线速率

参数定义

bus:I2C 接口对应的总线指针
cmd:命令参数
value:命令值

返回值

RT_EOK:函数执行成功
-RT_EIO:非法操作

注意事项

-

3. aic_i2c_slave_control

函数原型

static rt_err_t aic_i2c_slave_control(struct rt_i2c_bus_device *bus, rt_uint32_t cmd, void *arg)

功能说明

对 I2C 从机回调函数进行配置

参数定义

bus:I2C 接口对应的总线指针
cmd:命令参数
arg:回调函数参数

返回值

RT_EOK:函数执行成功

注意事项

-

4. aic_i2c_master_xfer

函数原型

static rt_size_t aic_i2c_master_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num)

功能说明

I2C 数据传输函数

参数定义

bus:I2C 接口对应的总线指针
msgs: 发送的消息数组
num: 发送的消息数量

返回值

返回已发出的消息数量

注意事项

-

5. aic_i2c_xfer_msg

函数原型

static int aic_i2c_xfer_msg(struct aic_i2c_ctrl *i2c_dev, struct aic_i2c_msg *msg, bool is_first, bool is_last)

功能说明

I2C 数据传输函数

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体
msg:指向当前将要传输的 msg | is_first:指示当前 msg 是否是第一个 msg | is_last:指示当前 msg 是否是最后一个 msg

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

6. aic_i2c_xfer_msg_init

函数原型

static void aic_i2c_xfer_msg_init(struct aic_i2c_ctrl *i2c_dev)

功能说明

在传输每个 msg 前进行的初始化,主要是将指示每个 msg 状态的变量设置为初始值,使能中断

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

注意事项

-

7. aic_i2c_handle_write

函数原型

static void aic_i2c_handle_write(struct aic_i2c_ctrl *i2c_dev)

功能说明

当触发 TX_EMPTY 中断时,调用该函数。若是读 msg,则调用该函数发送读命令,若是写 msg,则调用该函数发送数据

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

注意事项

-

8. aic_i2c_handle_read

函数原型

static void aic_i2c_handle_read(struct aic_i2c_ctrl *i2c_dev)

功能说明

当触发 RX_FULL 中断时,调用该函数读取接收到的数据,若完成当前 msg 的接收,则释放完成量

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

注意事项

-

HAL 层接口设计

9. hal_i2c_init

函数原型

int hal_i2c_init(aic_i2c_ctrl *i2c_dev)

功能说明

初始化 I2C 的时钟,主从模式,速率等基础设置

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

10. hal_i2c_clk_init

函数原型

int hal_i2c_clk_init(aic_i2c_ctrl *i2c_dev)

功能说明

初始化 I2C 的时钟

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

11. hal_i2c_set_hold

函数原型

void hal_i2c_set_hold(aic_i2c_ctrl *i2c_dev, u32 val)

功能说明

设置 SDA 的保持时间

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | val:设置保持时间的 cycle 数量,保持时间:val*41.66 ns

返回值

注意事项

-

12. hal_i2c_set_master_slave_mode

函数原型

int hal_i2c_set_master_slave_mode(aic_i2c_ctrl *i2c_dev)

功能说明

设置主从模式

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

13. hal_i2c_master_10bit_addr

函数原型

int hal_i2c_master_10bit_addr(aic_i2c_ctrl *i2c_dev)

功能说明

设置主机模式的寻址模式

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

14. hal_i2c_slave_10bit_addr

函数原型

int hal_i2c_slave_10bit_addr(aic_i2c_ctrl *i2c_dev)

功能说明

设置从机模式的寻址模式

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

15. hal_i2c_scl_cnt

函数原型

static int hal_i2c_scl_cnt(uint32_t clk_freq, uint8_t is_standard_speed, uint16_t *hcnt, uint16_t *lcnt)

功能说明

根据 i2c 模块工作的时钟频率和 i2c 的传输速率,返回需要设置的 hcnt 值和 lcnt 值

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

16. hal_i2c_speed_mode_select

函数原型

int hal_i2c_speed_mode_select(aic_i2c_ctrl *i2c_dev, uint32_t clk_freq, uint8_t mode)

功能说明

设置 I2C 的传输的工作模式和传输速率

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | clk_freq:模块时钟的时钟频率 | mode:工作模式

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

17. hal_i2c_target_addr

函数原型

void hal_i2c_target_addr(aic_i2c_ctrl *i2c_dev, uint32_t addr)

功能说明

设置 I2C 目标设备的地址

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | addr:目标地址

返回值

注意事项

-

18. hal_i2c_slave_own_addr

函数原型

int hal_i2c_slave_own_addr(aic_i2c_ctrl *i2c_dev, uint32_t addr)

功能说明

设置 SLAVE 模式被寻址的地址

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | addr:目标地址

返回值

0:执行成功
<0:执行过程中发生错误

注意事项

-

19. hal_i2c_wait_transmit

函数原型

static int32_t hal_i2c_wait_transmit(aic_i2c_ctrl *i2c_dev, uint32_t timeout)

功能说明

I2C 数据发送的超时函数

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | timeout:超时时间单位 ms

返回值

0:执行成功
<0:超时

注意事项

-

20. hal_i2c_wait_receive

函数原型

static int32_t hal_i2c_wait_receive(aic_i2c_ctrl *i2c_dev, uint32_t wait_data_num, uint32_t timeout)

功能说明

I2C 数据接收的超时函数

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | wait_data_num:等待接收数据的数量 | timeout:超时时间单位 ms

返回值

0:执行成功
<0:超时

注意事项

-

21. hal_i2c_wait_bus_free

函数原型

int32_t hal_i2c_wait_bus_free(aic_i2c_ctrl *i2c_dev, uint32_t timeout)

功能说明

等待 I2C 总线空闲

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | timeout:超时时间单位 ms

返回值

0:执行成功
<0:超时

注意事项

-

22. hal_i2c_master_send_msg

函数原型

int32_t hal_i2c_master_send_msg(aic_i2c_ctrl *i2c_dev, struct aic_i2c_msg *msg, uint8_t is_last_message)

功能说明

发送数据

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | msg:指向当前将要传输的 msg | is_last_message:指示当前 msg 是否是最后一个 msg

返回值

send_count:发送数据的数量
<0:发送出错

注意事项

-

23. hal_i2c_master_receive_msg

函数原型

int32_t hal_i2c_master_receive_msg(aic_i2c_ctrl *i2c_dev, struct aic_i2c_msg *msg, uint8_t is_last_message)

功能说明

发送数据

参数定义

i2c_dev:指向自定义的 aic_i2c_ctrl 结构体 | msg:指向当前将要传输的 msg | is_last_message:指示当前 msg 是否是最后一个 msg

返回值

read_count:接收到数据的数量
<0:接收出错

注意事项

-