• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-23
  • 语言: 其他
  • 标签: Linux  驱动  mpu6050  

资源简介

自己写的基于linux mpu6050的iic驱动代码 已在开发板上运行过了

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “mpu6050.h“




struct mpu6050_device{
struct i2c_client *mpu6050_client;
    struct cdev cdev;

}

static struct mpu6050_device *mpu6050;
static int major;
static struct class *class;
//static struct device *dev;



static const struct i2c_device_id mpu6050_id[] = {
{ “mpu6050“ 0 }
{ }
};


static int mpu6050_read (struct i2c_client *client unsigned char reg)

{
   /*传入buf[0]:addr*/
   struct i2c_msg msg[2];
   unsigned char reg_addrdata;
   //copy_from_user(®_addrbuf1);
   msg[0].addr=client->addr;
   msg[0].flags =0;
   msg[0].len =1;
   msg[0].buf=®_addr;
   msg[1].addr =client->addr;
   msg[1].flags=I2C_M_RD;
   msg[1].len=1;
   msg[1].buf=&data;
   i2c_transfer(client->adaptermsg2);
   //i2c_smbus_read_byte_data(mpu6050_clientaddr);
  // copy_to_user(buf&data1);
   return data;

}


static int mpu6050_write (struct i2c_client *client unsigned char reg unsigned char val)
{
   /*buf[0] addr
    *buf[1] data
    */
    struct i2c_msg msg;
    unsigned char buf[2];
buf[0]=reg;
buf[1]=val;
    //unsigned char reg_addrdata;
    //unsigned char ker_buf[2];
//copy_from_user(ker_bufbuf2);
//reg_addr=ker_buf[0];
//data=ker_buf[1];
    msg.addr=client->addr;
msg.flags=0;
msg.buf =buf;
msg.len=2;
i2c_transfer(client->adapter&msg1);
return 0;

}
static int mpu6050_ioctl(struct file *file unsigned int cmdunsigned long arg)
{
   
   union mpu6050_data data;
struct i2c_client *client = mpu6050->client;

switch(cmd) {
case GET_ACCEL:
data.accel.x = mpu6050_read_byte(client ACCEL_XOUT_L);
data.accel.x |= mpu6050_read_byte(client ACCEL_XOUT_H) << 8;

data.accel.y = mpu6050_read_byte(client ACCEL_YOUT_L);
data.accel.y |= mpu6050_read_byte(client ACCEL_YOUT_H) << 8;

data.accel.z = mpu6050_read_byte(client ACCEL_ZOUT_L);
data.accel.z |= mpu6050_read_byte(client ACCEL_ZOUT_H) << 8;
break;

case GET_GYRO:

data.gyro.x = mpu6050_read_byte(client GYRO_XOUT_L);
data.g

评论

共有 条评论