请教下各位大牛。我在使用C6455的I2C对slave device 进行读写时,写数据有ACK回应,读数据总是读不到。我使用的6455的CSL库,loopmode设置为disable。DSP时钟为1GHZ,其中时钟设置为:
#define CSL_I2C_CLOCK_PRESCALAR 0x13
#define CSL_I2C_CLOCK_CLKL 0x23
#define CSL_I2C_CLOCK_CLKH 0x24
即设置为100KHZ。
I2C设置为:
hwSetup.mode = CSL_I2C_MODE_MASTER;
hwSetup.dir = CSL_I2C_DIR_TRANSMIT;
hwSetup.addrMode = CSL_I2C_ADDRSZ_SEVEN;
hwSetup.sttbyteen = CSL_I2C_STB_DISABLE;
hwSetup.ownaddr = CSL_I2C_SLAVE_ADDR;
hwSetup.ackMode = CSL_I2C_ACK_ENABLE;
hwSetup.runMode = CSL_I2C_FREE_MODE_DISABLE;
hwSetup.repeatMode = CSL_I2C_REPEAT_MODE_DISABLE;
hwSetup.loopBackMode = CSL_I2C_DLB_DISABLE;
hwSetup.freeDataFormat = CSL_I2C_FDF_DISABLE;
hwSetup.resetMode = CSL_I2C_IRS_ENABLE;
hwSetup.bcm = CSL_I2C_BCM_DISABLE;
hwSetup.inten = 0x00;
hwSetup.clksetup = &clksetup;
这里的ownaddr好像是自己的地址设置,所以我又单独设置了slave address。I2C_ICSAR = CSL_I2C_SLAVE_ADDR。
在进行完写操作后,SDA和SCL总是会被一直拉低。进行读操作是,发送出设备地址读后,一直没有返回数据。
请问是什么原因?
按照CSL库中,其中读写操作里的
/* Clear the flag */
cmd_arg = CSL_I2C_CLEAR_XRDY;
if (CSL_i2cHwControl(hI2c,CSL_I2C_CMD_CLEAR_STATUS,&cmd_arg) !=
CSL_SOK) {
return;
}
/* Clear the receive ready flag */
cmd_arg = CSL_I2C_CLEAR_RRDY;
if (CSL_i2cHwControl(hI2c,CSL_I2C_CMD_CLEAR_STATUS,&cmd_arg) !=
CSL_SOK) {
return;
}
这两处分别是写的那个寄存器?