天嵌 ARM开发社区

 找回密码
 注册
查看: 3875|回复: 2

UBOOT i2c_init函数

[复制链接]
xmayyang 发表于 2013-6-25 22:30:48 | 显示全部楼层 |阅读模式
TQ2440           UBOOT1.1.6    cpu/arm920t/s3c24x0/i2c.c
I2C初始化函数,我删除了与2440无关的部分
void i2c_init (int speed, int slaveadd)
{
        S3C24X0_I2C *const i2c = S3C24X0_GetBase_I2C ();
        S3C24X0_GPIO *const gpio = S3C24X0_GetBase_GPIO ();
        ulong freq, pres = 16, div;
        int i, status;

        /* wait for some time to give previous transfer a chance to finish */

        i = I2C_TIMEOUT * 1000;
        status = i2c->IICSTAT;
        while ((i > 0) && (status & I2CSTAT_BSY)) {
                udelay (1000);
                status = i2c->IICSTAT;
                i--;
        }
         此处应该是判断I2C总线忙的情况,问题:GetI2CSDA () == 0这个判断怎么理解,是判断SDA是否是高电平吗
        if ((status & I2CSTAT_BSY) || GetI2CSDA () == 0) {
                ulong old_gpecon = gpio->GPECON;

                /* bus still busy probably by (most) previously interrupted transfer */
                /* set I2CSDA and I2CSCL (GPE15, GPE14) to GPIO */
                 此处是把GPE15,14重新设置为输入、输出,为什么这么做
                gpio->GPECON = (gpio->GPECON & ~0xF0000000) | 0x10000000;

                /* toggle I2CSCL until bus idle */
             SetI2CSCL (0)作用是什么,是拉高SCL的意思吗
                SetI2CSCL (0);
                udelay (1000);
                i = 10;
                while ((i > 0) && (GetI2CSDA () != 1)) {
                        SetI2CSCL (1);
                        udelay (1000);
                        SetI2CSCL (0);
                        udelay (1000);
                        i--;
                }
                SetI2CSCL (1);
                udelay (1000);

                /* restore pin functions */
                gpio->GPECON = old_gpecon;
        }
       /****
               ......省略无关代码......
      *****/
}

亚瑟王 发表于 2013-6-26 09:33:41 | 显示全部楼层
建议将GetI2CSDA和SetI2CSCL函数阅读之后再看这个函数。
瞄了一下这个代码应该不是用的I2C接口,而是用GPIO模拟I2C的代码。
 楼主| xmayyang 发表于 2013-6-26 11:05:55 | 显示全部楼层
GPIO模拟I2C是什么东东?为什么要用GPIO模拟I2C。难道2440没有I2C总线吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-28 13:37 , Processed in 1.046875 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表