Example #1
0
RBAPI(bool) i2cmaster_Start(int dev, unsigned char addr, unsigned char rwbit) {
    bool result = true;
    
    if (I2C_action[dev] != I2CACT_IDLE)
    {
        err_SetMsg(ERROR_I2CWRONGUSAGE, "can't start a transaction because I2C%d isn't idle", dev);
        return false;
    }

    I2C_rsInfo[dev].restart = false;

    if (I2C_swMode[dev] != I2CSW_DISABLE)
        result = i2csw_Start(dev, addr, rwbit, false);
    else
    {

        if (I2C_speedMode[dev] == I2CMODE_HIGHSPEED) 
            result = i2cmaster_Start1(dev, 0x07, I2C_WRITE); //send high-speed master code

        if (result == true) result = i2cmaster_Start1(dev, addr, rwbit);
    }
    
    if (result == true)
    {
        I2C_action[dev]  = (rwbit == I2C_WRITE)? I2CACT_MASTERWRITE : I2CACT_MASTERREAD;
        I2C_curAddr[dev] = addr;
    }
    return result;
}
Example #2
0
RBAPI(bool) i2cmaster_Start(int dev, unsigned char addr, unsigned char rwbit) {
    if (I2C_action[dev] != I2CACT_IDLE)
    {
        err_SetMsg(ERROR_I2CWRONGUSAGE, "can't start a transaction because I2C%d isn't idle", dev);
        return false;
    }

    I2C_rsInfo[dev].restart = false;

    if (I2C_speedMode[dev] == I2CMODE_HIGHSPEED) //&&
    if (i2cmaster_Start1(dev, 0x07, I2C_WRITE) == false) //send high-speed code
        return false;

    return i2cmaster_Start1(dev, addr, rwbit);
}
Example #3
0
RBAPI(bool) i2cmaster_WriteLast(int dev, unsigned char val) {
    bool result = true;

    if (i2cmaster_Write(dev, val) == false) return false; else I2C_action[dev] = I2CACT_IDLE;

    // case of I2C RESTART after write
    if (I2C_rsInfo[dev].restart == true)
    {
        I2C_rsInfo[dev].restart = false;

        if (I2C_swMode[dev] != I2CSW_DISABLE)
            result = i2csw_Start(dev, I2C_rsInfo[dev].addr, I2C_rsInfo[dev].rwbit, true);
        else
            result = i2cmaster_Start1(dev, I2C_rsInfo[dev].addr, I2C_rsInfo[dev].rwbit);

        if (result == true)
        {
            I2C_action[dev] = (I2C_rsInfo[dev].rwbit == I2C_WRITE)? I2CACT_MASTERWRITE : I2CACT_MASTERREAD;
            I2C_count[dev]  = I2C_rsInfo[dev].count;
        }
        return result;
    }

    // case of I2C STOP after write
    if (I2C_swMode[dev] != I2CSW_DISABLE)
        i2csw_Stop(dev);
    else
    {
        i2cmaster_SetStopBit(dev);
        result = check_STOP_done(dev);
    }
    return result;
}
Example #4
0
RBAPI(bool) i2cmaster_WriteLast(int dev, unsigned char val) {
    if (i2cmaster_Write(dev, val) == false) return false; else I2C_action[dev] = I2CACT_IDLE;

    if (I2C_rsInfo[dev].restart == true)
    {
        I2C_rsInfo[dev].restart = false;
        if (i2cmaster_Start1(dev, I2C_rsInfo[dev].addr, I2C_rsInfo[dev].rwbit) == false) return false;

        I2C_count = I2C_rsInfo[dev].count;
        return true;
    }

    i2cmaster_SetStopBit(dev);
    return check_STOP_done(dev);
}