打印

arm的i2c接口读,需要连读2次才可以吗?

[复制链接]
1690|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quarticarm|  楼主 | 2011-11-15 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int i2c_read(int reg_offset)
{
    int data;
        int activity;
      //        reg_offset = reg_offset | 0x100 ;
    //        mem_wr_i2c(0x10, reg_offset);        // IC_DATA_CMD: set register address
    *(volatile UINT32 *)0x18500010 = reg_offset;
    //        mem_wr_i2c(0x10, 0x100);                // IC_DATA_CMD: set read bit
    *(volatile UINT32 *)0x18500010 = 0x100;

    ic_status = mem_rd_i2c(0x70);        // IC STATUS register. LSB is the common activity bit
    activity = ic_status & 0x1;
    while (activity == 0)
    {
        ic_status = mem_rd_i2c(0x70);        // IC STATUS register. LSB is the common activity bit
        activity = ic_status & 0x1;
    }
data = mem_rd_i2c(0x10);                // IC_DATA_CMD: read returned register value
    //printf("1:%d\n",data);
    ic_status = mem_rd_i2c(0x70);        // IC STATUS register. LSB is the common activity bit
    activity = ic_status & 0x1;
    while (activity == 1)
    {
        readCounter++;
        ic_status = mem_rd_i2c(0x70);        // IC STATUS register. LSB is the common activity bit
        activity = ic_status & 0x1;
    }
       data = mem_rd_i2c(0x10);                // IC_DATA_CMD: read returned register value
    printf("2:%d\n",data);
        return (data);
}

相关帖子

沙发
quarticarm|  楼主 | 2011-11-15 13:34 | 只看该作者
这段代码,就是i2c状态关闭的时候,从data线读一次:
data = mem_rd_i2c(0x10);       
然后i2c从激活状态到未激活状态在读一次,这次的值才真正的返回,这段代码如果把第一处代码注释,
data = mem_rd_i2c(0x10);       
程序i2c通讯不正确了。。。
   也就是必须读2次,问题是,为什么??
核心是arm内核

使用特权

评论回复
板凳
quarticarm|  楼主 | 2011-11-15 14:15 | 只看该作者
自己顶。。。。。。

使用特权

评论回复
地板
李富贵| | 2011-11-15 15:01 | 只看该作者
arm和iic没有关系。

使用特权

评论回复
5
quarticarm|  楼主 | 2011-11-15 15:35 | 只看该作者
arm和iic没有关系。
李富贵 发表于 2011-11-15 15:01

那通常应该不需要read 2次的吧?

使用特权

评论回复
6
quarticarm|  楼主 | 2011-11-16 09:39 | 只看该作者
那通常应该不需要read 2次的吧

使用特权

评论回复
7
quarticarm|  楼主 | 2011-11-16 09:39 | 只看该作者
核是arm 926的

使用特权

评论回复
8
ckfgf| | 2012-11-26 13:41 | 只看该作者
每次写完等待5ms才可以读,写完加个延迟就ok

使用特权

评论回复
9
阿南| | 2012-11-26 14:06 | 只看该作者
和核及哪个处理器没关系,如果是IO口模拟时序,通常时间响应等问题,可以加些延时。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

32

帖子

1

粉丝