Edit online

数据结构设计

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