从0开始创建FX3工程之四 - I2C

添加i2c功能
1 启动i2c功能

#ifdef MY_I2C
    io_cfg.useI2C    = CyTrue;
#else
    io_cfg.useI2C    = CyFalse;
#endif

2 初始化i2c模块

#ifdef MY_I2C
CyU3PReturnStatus_t
My_I2c_Init (void)
{
    CyU3PI2cConfig_t i2cConfig;
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

    /* Initialize and configure the I2C master module. */
    status = CyU3PI2cInit();
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    /* Start the I2C master block. The bit rate is set at 10KHz. */
    CyU3PMemSet ((uint8_t *)&i2cConfig, 0, sizeof(i2cConfig));
    i2cConfig.bitRate    = 10000;      /*  10 KHz ,速度太快读写可能异常100k  err.*/
    i2cConfig.busTimeout = 0xFFFFFFFF;
    i2cConfig.dmaTimeout = 0xFFFF;
    i2cConfig.isDma      = CyFalse;

    status = CyU3PI2cSetConfig (&i2cConfig, NULL);
    if (status == CY_U3P_SUCCESS)
    {
         return status;
    }
    return status;
}

3 编写i2c读写函数
以下两个函数AD_Write,AD_Read 用于8bit寄存器地址,8bit数据。
当然 8bit的slave address.

CyU3PReturnStatus_t
AD_Write (//ref_AN75779
        uint8_t slaveAddr,
        uint8_t regAddr,
        uint8_t data)
{
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
    CyU3PI2cPreamble_t preamble;
    uint8_t buf[1];

    buf[0] = data;
    preamble.buffer[0] = slaveAddr;
    preamble.buffer[1] = regAddr;
    preamble.length    = 2;
    preamble.ctrlMask  = 0x0000;

    status = CyU3PI2cTransmitBytes (&preamble, buf, 1, 0);
    CyU3PBusyWait(5) ;//CyU3PThreadSleep(10);//100.200:color not right.(speed)
    return status;
}

CyU3PReturnStatus_t
AD_Read (
        uint8_t slaveAddr,
        uint8_t regAddr,
        uint8_t *buf)
{
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
    CyU3PI2cPreamble_t preamble;
    preamble.buffer[0] = slaveAddr & I2C_SLAVEADDR_MASK;
    preamble.buffer[1] = regAddr;
    preamble.buffer[2] = slaveAddr;
    preamble.length    = 3;
    preamble.ctrlMask  = 0x0002;   /* slaveAddrPos: Send start bit after 2 byte of preamble.!! */

    status = CyU3PI2cReceiveBytes (&preamble, buf, 1, 0);
    CyU3PBusyWait(5);
    return status;
}
#endif

测试读写i2c寄存器ok,代码木有问题。

你可能感兴趣的:(FX3/CX3,USB3.0)