/* Send a master receive request when the bus is idle.(Read Step1) 
For this function returns immediately, it is always using in the interrupt hander. */
void xI2CMasterReadRequestS1(unsigned long ulBase, unsigned char ucSlaveAddr, xtBoolean bEndTransmition)
/* Send a master receive request when the bus is idle.(Read Step1) 
For this function returns immediately, it is always using in the interrupt hander. */
void xI2CMasterReadRequestS1(unsigned long ulBase, unsigned char ucSlaveAddr, xtBoolean bEndTransmition)
{
    unsigned long ulStatus;
    xASSERT((ulBase == I2C0_BASE) || (ulBase == I2C1_BASE));
    xHWREG(ulBase + I2C_CON) |= I2C_CON_AA;
    ulStatus = I2CStartSend(ulBase);
    if(!((ulStatus == I2C_I2STAT_M_TX_START) ||
         (ulStatus == I2C_I2STAT_M_TX_RESTART)))
    {
        I2CStopSend(ulBase);
        return ;
    }
    ulStatus = I2CByteSend(ulBase, (ucSlaveAddr << 1) | 1) ;
    if(!(ulStatus == I2C_I2STAT_M_RX_SLAR_ACK))
    {
        I2CStopSend(ulBase);
        return ;
    }
    if(bEndTransmition)
    {
        xHWREG(ulBase + I2C_CON) &= ~I2C_CON_AA;
        I2CStopSend(ulBase);
    }
}