TI RTOS BLE I2C(IIC) 驱动

环境

  1. 系统:Windows 10
  2. SDK:simplelink_cc13x2_26x2_sdk_4_30_00_54
  3. IDE:Code Composer Studio, Version: 10.1.1.00004
  4. 例程:simple_peripheral_oad_offchip_CC26X2R1_LAUNCHXL_tirtos_ccs (已删除不必要的代码,请看:删除simple_peripheral_oad_offchip工程多余的代码)

1. 添加I2C

添加1个I2C,配置好IO,我要驱动的是AT24CXX芯片,其他选项默认就可以。
在这里插入图片描述

2. I2C代码

CONFIG_I2C_0 这个宏是syscfg文件生成的,在 ti_drivers_config.h 文件。

#include <ti/drivers/I2C.h>
#include <ti/sysbios/knl/Task.h>

#include "ti_drivers_config.h"

#include "user/drivers/iic.h"

static I2C_Handle i2cHandle;
static I2C_Params i2cParams;

void iic_init(I2C_BitRate bitRate)
{
    I2C_init();
    I2C_Params_init(&i2cParams);
    i2cParams.bitRate = bitRate;
    i2cParams.transferMode = I2C_MODE_BLOCKING;
    i2cHandle = I2C_open(CONFIG_I2C_0, &i2cParams);
}

bool iic_write_bytes(uint8_t slaveaddr, uint8_t len, uint8_t *buf)
{
    I2C_Transaction i2cTransaction;

    i2cTransaction.writeBuf = buf;
    i2cTransaction.writeCount = len;
    i2cTransaction.readBuf = buf;
    i2cTransaction.readCount = 0;
    i2cTransaction.slaveAddress = slaveaddr;
    return I2C_transfer(i2cHandle, &i2cTransaction);
}

bool iic_read_bytes(uint8_t slaveaddr, uint8_t len, uint8_t *buf)
{
    I2C_Transaction i2cTransaction;

    i2cTransaction.writeBuf = buf;
    i2cTransaction.writeCount = 0;
    i2cTransaction.readBuf = buf;
    i2cTransaction.readCount = len;
    i2cTransaction.slaveAddress = slaveaddr;
    return I2C_transfer(i2cHandle, &i2cTransaction);
}

3. AT24C代码


#include "user/hal/hal_at24cxx.h"
#include <ti/sysbios/knl/Task.h>

#define HAL_AT24CXX_ADDR            0xA0
#define HAL_AT24CXX_DELAY(x)            Task_sleep(x)

void hal_at24cxx_init(void)
{
    iic_init(I2C_400kHz);
}


bool hal_at24cxx_read_bytes(uint8_t addr, uint8_t len, uint8_t *data)
{
    //this code can read less than 256 bytes data
    uint8_t pageAddr, offset;

    pageAddr = (HAL_AT24CXX_ADDR>>1) + addr/256;
    offset = addr % 256;

    if(iic_write_bytes(pageAddr, 1, &offset))
        return iic_read_bytes(pageAddr, len, data);

    return false;
}

bool hal_at24cxx_write_bytes(uint8_t addr, uint8_t length, uint8_t *data)
{
    uint8_t cnt=0, pageAddr,offset, len = 0;
    uint8_t txBuf[10] = {0};

    while(cnt < length)
    {
        pageAddr = (HAL_AT24CXX_ADDR>>1) + (addr+cnt)/256;
        offset = (addr+cnt) % 256;

        txBuf[0] = offset;
        len = 8 - offset%8;

        memcpy(&txBuf[1], &data[cnt], len);

        if(!iic_write_bytes(pageAddr, len + 1, txBuf))
            return false;

        cnt += len;

        HAL_AT24CXX_DELAY(500);  // the delay is necessary
    }

    return true;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值