/* * Signal a start to the TWSI Bus. * * A start is signaled when data goes to low in a high clock cycle. * * Ends with Clock Low. * * Status: not tested */ void SkI2cStart( SK_IOC IoC) /* I/O Context */ { /* Init data and Clock to output lines */ /* Set Data high */ I2C_DATA_OUT(IoC); I2C_DATA_HIGH(IoC); /* Set Clock high */ I2C_CLK_HIGH(IoC); SkDgWaitTime(IoC, NS2BCLK(T_START_SETUP)); /* Set Data Low */ I2C_DATA_LOW(IoC); SkDgWaitTime(IoC, NS2BCLK(T_START_HOLD)); /* Clock low without Data to Input */ I2C_START_COND(IoC); SkDgWaitTime(IoC, NS2BCLK(T_CLK_LOW)); } /* SkI2cStart */
/* * Receive just one bit via the I2C bus. * * Note: Clock must be set to LOW before calling this function. * * Returns The received bit. */ int SkI2cRcvBit( SK_IOC IoC) /* I/O Context */ { int Bit; SK_U8 I2cSwCtrl; /* Init data as input line */ I2C_DATA_IN(IoC); SkDgWaitTime(IoC, NS2BCLK(T_CLK_2_DATA_OUT)); I2C_CLK_HIGH(IoC); SkDgWaitTime(IoC, NS2BCLK(T_CLK_HIGH)); SK_I2C_GET_SW(IoC, &I2cSwCtrl); Bit = (I2cSwCtrl & I2C_DATA) ? 1 : 0; I2C_CLK_LOW(IoC); SkDgWaitTime(IoC, NS2BCLK(T_CLK_LOW-T_CLK_2_DATA_OUT)); return(Bit); } /* SkI2cRcvBit */