从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,代码木有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值