linux驱动调用函数,Linux驱动之i2c用户态函数调用

1.     #include

2.     #include

3.     #include

4.     #include

5.     #include

6.     #include

7.     #include

8.     #include

9.     #include

10.

11.  #defineI2C_FILE_NAME   "/dev/i2c-1"

12.  #defineI2C_ADDR    0x40

13.

14.  intfd;

15.

16.  inti2c_open()

17.  {

18.      fd = open(I2C_FILE_NAME, O_RDWR);

19.      if(fd < 0){

20.          perror("Unable to open i2c controlfile");

21.          return 1;

22.      }

23.  }

24.

25.  inti2c_write(int fd, unsigned char dev_addr, unsigned char reg_addr, unsigned charval)

26.  {

27.      int ret;

28.      unsigned char buf[2];

29.      struct i2c_rdwr_ioctl_data data;

30.      struct i2c_msg messages;

31.

32.      buf[0] = reg_addr;

33.      buf[1] = val;

34.      messages.addr = dev_addr;  //device address

35.      messages.flags = 0;    //write

36.      messages.len = 2;

37.      messages.buf = buf;  //data address

38.

39.      data.msgs = &messages;

40.      data.nmsgs = 1;

41.      if(ioctl(fd, I2C_RDWR, &data) < 0){

42.          printf("write ioctl err\n");

43.          return 1;

44.      }

45.      usleep(1000);

46.

47.      return 1;

48.  }

49.

50.  inti2c_read(int fd, unsigned char addr, unsigned char reg, unsigned char *val)

51.  {

52.      int ret;

53.      struct i2c_rdwr_ioctl_data data;

54.      struct i2c_msg messages[2];

55.

56.      messages[0].addr = addr;  //device address

57.      messages[0].flags = 0;    //write

58.      messages[0].len = sizeof(reg);

59.      messages[0].buf = ®  //data address

60.

61.      messages[1].addr = addr;       //device address

62.      messages[1].flags = I2C_M_RD;  //read

63.      messages[1].len = sizeof(val);

64.      messages[1].buf = val;

65.

66.      data.msgs = messages;

67.      data.nmsgs = 2;

68.      if(ioctl(fd, I2C_RDWR, &data) < 0){

69.          printf("read ioctlerr\n");

70.          return 1;

71.      }

72.

73.      return 0;

74.  }

75.

76.  intmain()

77.  {

78.      int i;

79.      unsigned char buf[4];

80.      unsigned char val[] = {0x04, 0x05, 0x06,0x07};

81.

82.      i2c_open();

83.

84.

85.      for(i =0; i< 4; i++)

86.        i2c_write(fd, I2C_ADDR, i, val[i]);

87.

88.

89.      memset(buf, 0x00, sizeof(buf));

90.      for(i = 0; i < sizeof(buf); i++){

91.          if(i2c_read(fd, I2C_ADDR, i,&buf[i])){

92.              printf("Unable to getregister!\n");

93.          }

94.      }

95.

96.      for(i=0; i< 4;i++)

97.          printf("buf[%d]=%d\n",i,buf[i]);

98.

99.}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值