本来是来问问题,没想到问着问着就明白了。。  
原程序是每次读一个数据,现在我想一次读好几个数据,所以对状态进行修改:if(u32Status == 0x08)                      //写slave address  
    { 
        I2C_SET_DATA(I2C0, (g_u8DeviceAddr << 1));  
        I2C_SET_CONTROL_REG(I2C0, I2C_CTL_SI); 
    } 
    else if(u32Status == 0x18)                //写索引地址 
    { 
 
                        I2C_SET_DATA(I2C0, g_u8RegAddr);// 
                    I2C_SET_CONTROL_REG(I2C0, I2C_CTL_SI);//因为之前索引为16bit,现在为8位,不需要再发数据了,就想跳过0x28这一步,直接到0x10 
                //I2C_SET_CONTROL_REG(I2C0, I2C_CTL_STA_SI); 
 
    } 
 
 else if(u32Status == 0x28)  
{ 
              I2C_SET_CONTROL_REG(I2C0, I2C_CTL_STA_SI); 
/*为什么必须有这一步:因为发送索引值,slave要回复ack,状态就一定会跳到0x28*/ 
} 
 |