zoukankan      html  css  js  c++  java
  • i2c精简总结

    基本的i2c的编程包括:读数据,写命令,写数据

    有关i2c的时序需要的话查看这里http://blog.csdn.net/qqliyunpeng/article/details/41511347

    1、读寄存器的一般步骤:开始i2c,写设备号,写那个寄存器,重新开始,写设备号读,设置成接收模式(Freescale MKL05Z32xxx4 的一个例子)

    uint8 hal_dev_read_reg(I2C_MemMapPtr p, uint8 devaddr, uint8 addr)//第一个参数目的是把i2c这种结构的地址传递过来,以方便在这块地址中来存储数据
    {
        uint8 result;
    
        i2c_start(p);
        i2c_write_byte(p, devaddr | I2C_WRITE );////这里有问题| I2C_WRITE
        
        i2c_wait(p);        //等待处理完毕
        i2c_get_ack(p);     //然后开始接收返回信号这里只是进行了接收的工作,
    
        i2c_write_byte(p, addr);
        i2c_wait(p);
        i2c_get_ack(p);
    
        i2c_repeated_start(p);    //
        i2c_write_byte(p, devaddr | I2C_READ );
        i2c_wait(p);
        i2c_get_ack(p);
    
        i2c_set_rx_mode(p);
        
        i2c_give_nack(p);//这里可以没有, 
        result = i2c_read_byte(p);
        i2c_wait(p);
    
        i2c_stop(p);
        result = i2c_read_byte(p);
        
        //**********************************
        pause();
        return result;
        
    }

    2、写寄存器的一般步骤是开始i2c,写地址,写寄存器的地址,写数据,停止。

    void hal_dev_write_reg(I2C_MemMapPtr p, uint8 devaddr, uint8 addr, uint8 data)//比命令多了个地址,就是在什么地址上写什么
    {
        i2c_start(p);
    
        i2c_write_byte(p, devaddr | I2C_WRITE);
        i2c_wait(p);
        i2c_get_ack(p);
    
        i2c_write_byte(p, addr);
        i2c_wait(p);
        i2c_get_ack(p);
    
        i2c_write_byte(p, data);
        i2c_wait(p);//等标志
        i2c_get_ack(p);
    
        i2c_stop(p);
        pause();//停止了之后还要等待一定的时间才能在次进行别的操作,这里很重要。
    }

    3、写命令的操作是:开始i2c,写设备地址,写命令,停止

    void hal_dev_write_cmd(I2C_MemMapPtr p, uint8 devaddr, uint8 cmd)
    {
        i2c_start(p);
    
        i2c_write_byte(p, devaddr | I2C_WRITE);
        i2c_wait(p);
        i2c_get_ack(p);
    
        i2c_write_byte(p, cmd);
        i2c_wait(p);
        i2c_get_ack(p);
    
        i2c_stop(p);
        pause();
    }

    4、需要注意的一点是:i2c操作过程中注意最后这个pause(),这个函数就是起到一个延时的作用,也就是,在操作i2c的过程中,写,读寄存器中的间隔是很重要的,要留下一定的时间。



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Leetcode Array 4 Median of Two Sorted Arrays
    vscode Python Pylint(代码检测插件)
    Leetcode Array 1 twoSum
    mysql 配置 安装和 root password 更改
    vscode 编译调试c/c++的环境配置
    chm文件打不开的解决办法
    A + B Problem II
    欢天喜地七仙女——代码规范与计划
    欢天喜地七仙女——项目系统设计与数据库设计
    欢天喜地七仙女——团队Gitee实战训练
  • 原文地址:https://www.cnblogs.com/otaku-lip/p/4765109.html
Copyright © 2011-2022 走看看