首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux下I2C设备驱动开发和实现 04

Linux下I2C设备驱动开发和实现 04

  其中针对TMP75设备寄存器的特定格式定义TMP75寄存器读写的两个函数如下:
  static int TMP75_write_value(struct i2c_client *client,u8 reg,u16 value)
{
if (reg == TMP75_REG_CONF)
return i2c_smbus_write_byte_data(client,reg,value);
else
return i2c_smbus_write_word_data(client,reg,swab16(value));
}

static int TMP75_read_value(struct i2c_client *client,u8 reg)
{
if (reg == TMP 75_REG_CONF)
return i2c_smbus_read_byte_data(client,reg);
else
return swab16(i2c_smbus_read_word_data(client,reg));
}
  具体的设备驱动程序完成之后将TMP75设备驱动的配置选项添加到chips文件夹下的kconfig文件中,这样在配置内核选项时就可以把TMP75设备驱动添加到内核中。
  5 Linux下I2C应用程序开发
  Linux中应用程序要使用本驱动来访问外部I2C器件,首先要通过open()来打开其驱动,使用完毕后使用close()将其关闭。
  int fd;
fd = open("/dev/i2c/0",O_RDWR);
……
close(fd);
  I2C总线控制器驱动提供的API函数提供了ioctl()函数用于设定I2C总线控制器的一些参数,本应用程序调用ioctl函数将I2C总线设置为7位地址模式,同时设置I2C从机地址。
   ioctl(fd,I2C_TENBIT,0)
ioctl(fd,I2C_SLAVE,SLAVE_ADDR)
  对TMP75的初始化工作通过调用write()函数实现,通过调用该函数实现对配置寄存器、高温阈值和低温阈值寄存器的初始化配置。
   //配置寄存器的初始化
senbuf[0]=0x01;
senbuf[1]=I2C_CONF_INITDATA;
write(fd,sendbuf,2);
  对TMP75当前工作温度的读取通过调用write()函数先写入温度寄存器的地址,
返回列表