TI中文支持网
TI专业的中文技术问题搜集分享网站

5509I2C问题

我用5509的I2C读写时钟芯片ISL12026。
程序如下:
#define   WriteAddress        0xDE
#define   ReadAddress        0xDF

以上是设备读写地址

/* This next struct shows how to use the I2C API */
/* Create and initialize an I2C initialization structure */
I2C_Setup I2Cinit = {
        0,              /* 7 bit address mode */
        0,         /* own address – don't care if master */
        12,            /* clkout value (Mhz)  */
        50,            /* a number between 10 and 400*/
        0,              /* number of bits/byte to be received or transmitted (8)*/
        0,              /* DLB mode on*/
        1               /* FREE mode of operation on*/
};



/*I2C is undet reset*/
        I2C_RSET(I2CMDR,0);
        /*设置预分频寄存器,I2C的mode clock is 10MHz*/
        delay(100);
        I2C_RSET(I2CSAR,0x001A);
        I2C_RSET(I2CMDR,0x0620);
        I2C_FSET(I2CSTR,BB,0x1); /* Writing a 1 to BB Bus busy bit is supposed to clear it*/         
    I2C_setup(&I2Cinit);
        //myI2C_setup(&I2Cinit);
          /*设置I2C的Mater clock*/
        I2C_RSET(I2CCLKL,100);
        I2C_RSET(I2CCLKH,100);

    I2C_getConfig(&testI2C);

以上是初始化。
buffer1[0]=0x00;     //高位地址
        buffer1[1]=0x3f;          //地位地址
        buffer1[2]=0x02;           //数据
    i2c_status = I2C_write( buffer1,          //pointer to data array
                                    3,                                //length of data to be transmitted
                                    1,                                //master or slaver
                                    WriteAddress,            //slave address to transmit to
                                    1,                                //transfer mode of operation
                                    30000                        //time out for bus busy
                                        );

以上是写数据。用观察窗口看  i2c_status的值是3.

 

Shine:

/*I2C is undet reset*/        I2C_RSET(I2CMDR,0);        /*设置预分频寄存器,I2C的mode clock is 10MHz*/        delay(100);        I2C_RSET(I2CSAR,0x001A);        I2C_RSET(I2CMDR,0x0620);        I2C_FSET(I2CSTR,BB,0x1); /* Writing a 1 to BB Bus busy bit is supposed to clear it*/             I2C_setup(&I2Cinit);        //myI2C_setup(&I2Cinit);          /*设置I2C的Mater clock*/        I2C_RSET(I2CCLKL,100);        I2C_RSET(I2CCLKH,100);    I2C_getConfig(&testI2C);这些代码不用了,执行I2C_init(&Init);就会初始化。

你可以跟到I2C_write函数里看执行到哪步出错了?

ccb bcc:

回复 Shine:

谢谢!没有I2C_init(&init)函数。

I2C_write函数是API库里的,我单步进不去函数。

还有别的好办法吗?

ccb bcc:

回复 ccb bcc:

我初始化用的这个函数I2C_setup(&I2Cinit);

Shine:

回复 ccb bcc:

I2C_init和I2C_setup是一样的,可以到cslc55x.src查看源码。

在反汇编窗口看不到I2C_write的源码么?

I2C_status返回值3,表示ISL12026没有给出acknowledge信号,你要查时钟芯片的问题。

ccb bcc:

回复 Shine:

谢谢!

i2c_init找到了。

 

ccb bcc:

回复 ccb bcc:

反汇编窗口可以看到调用I2C_WRITE的语句,可是怎么进入那个函数里面呢?

我单步运行就直接跳过那个函数了。

Shine:

回复 ccb bcc:

试试反汇编窗口选择mixed source and assembly mode

ccb bcc:

回复 Shine:

谢谢!汇编代码进去了。

ccb bcc:

回复 ccb bcc:

是可以进去了,可是汇编看不懂。郁闷中。

赞(0)
未经允许不得转载:TI中文支持网 » 5509I2C问题
分享到: 更多 (0)