数据结构设计
2 Dec 2024
Read time: 1 minute(s)
管理 I2C 控制器资源的顶层结构体:
struct aic_i2c_dev {
struct device *dev;
void __iomem *base;
struct i2c_adapter adap;
struct completion cmd_complete;
struct clk *clk;
struct reset_control *rst;
int irq;
enum aic_i2c_speed i2c_speed;
u16 scl_hcnt;
u16 scl_lcnt;
u32 abort_source;
struct i2c_msg *msg;
enum aic_msg_status msg_status;
int buf_write_idx;
int buf_read_idx;
bool is_first_message;
bool is_last_message;
int msg_err;
struct i2c_timings timings;
u32 master_cfg;
u32 slave_cfg;
struct i2c_client *slave;
};
部分变量说明:
-
cmd_complete:完成量,用于指示一个 message 是否传输完成
-
scl_hcnt:SCL 时钟高电平时钟数
-
scl_lcnt:SCL 时钟低电平时钟数
-
msg:指向当前传输的 message
-
buf_write_idx:当前 message 为 write msg 时,buf_write_idx 为写数据的计数。当前 message 为 read msg 时,buf_write_idx 为写命令的计数(I2C 模块需要每次写 read 命令,才能读出数据)。
-
buf_read_idx:读数据的计数
-
is_first_message:是否是第一个 message
-
is_last_message:是否是最后一个 message