数据结构设计
2 Dec 2024
Read time: 2 minute(s)
-
drv 层管理 I2C 控制器资源的顶层结构体
struct aic_i2c_bus { struct rt_i2c_bus_device bus; //RTT 内核 I2C 控制器数据结构 aic_i2c_ctrl aic_bus; //I2C 控制器资源的底层结构体 struct rt_completion cmd_complete; //完成量,用于指示一个 message 是否传输完成 };
-
RTT 内核 I2C 控制器数据结构
struct rt_i2c_bus_device { struct rt_device parent; //设备基类 device const struct rt_i2c_bus_device_ops *ops; //I2C 操作方法 rt_uint16_t flags; //I2C 读写标志 struct rt_mutex lock; //互斥锁,保证多线程访问安全 rt_uint32_t timeout; //超时时间 rt_uint32_t retries; //调用次数 void *priv; //私有数据 };
-
hal 层管理 I2C 控制器资源的底层结构体
struct aic_i2c_ctrl { int32_t index; char *device_name; unsigned long reg_base; uint32_t addr_bit; uint32_t speed_mode; uint32_t bus_mode; struct aic_i2c_msg *msg; //指向当前传输的 message struct aic_i2c_slave_info slave; //从机信息数据结构 enum aic_msg_status msg_status; uint32_t slave_addr; uint32_t abort_source; uint32_t msg_err; uint32_t buf_write_idx; //当前 message 为 write msg 时,buf_write_idx 为写数据的计数。当前 message 为 read msg 时,buf_write_idx 为写命令的计数(I2C 模块需要每次写 read 命令,才能读出数据)。 uint32_t buf_read_idx; //读数据的计数 bool is_first_message; //是否是最后一个 message bool is_last_message; //是否是第一个 message };
-
I2C 消息数据结构原型
struct aic_i2c_msg { uint16_t addr; // 从机地址 uint16_t flags; // 读写标志 uint16_t len; // 数据长度 uint8_t *buf; // 待传输数据的指针 };
-
I2C 从机信息数据结构原型
struct aic_i2c_slave_info { void *callback_param; //回调参数 i2c_slave_cb_t slave_cb; //从机回调函数 };