Thread 中讨论的其他器件:SYSBIOS
工具/软件:Code Composer Studio
大家好、
我将 CC2640R2 Launchpad 与定制板和传感器搭配使用、并尝试将基于简单 BLE 外设和传感器标签从 BLE 2.2.1到 BLE5的项目移植到 BLE5。 我按照从 BLE 2.2.1到3.0.0以及从 BLE 3.0.0到 BLE5 1.0.0的移植指南进行了操作、但我无法移植存在于板文件夹下传感器标签开发项目中的 bsp_i2c 文件。 我不知道如何更改 Semaphore_post、Semaphore_pend 等、因为参数数量需要更改。
是否有人已经完成了传感器标签移植、以便与 CC2640R2 Launchpad 配合使用或知道修改 bsp_i2c 文件的方法?
感谢你的帮助。
SEB
下面是 bsp_i2c.c 文件的一部分:
/*********
*文件名:bsp_i2c.c
*已修订:$Date:$
*修订版:$Revision:$
*
*说明:在 RTOS 驱动程序之上添加了向后的层
*与非 RTOS I2C 驱动程序的兼容性。
*用于简化 i2C.h 和 i2c/I2CCC26XX.h 中的函数
*
*
秘书长的报告 /
/*********
*包括
*
#include
#include
#include
#include
#include
#include
#include
#include "Board.h"
#include "sensor.h"
#include "bsp_i2c.h"
/*********
*常量
*
#define I2C_TIMEOUT 2500
/*********
*全局变量
*
extern I2CCC26XX_HWAttrs i2cCC26xxHWAttrs[];
/*********
*局部变量
*
静态易失性 uint8_t slaveAddr;
静态易失性 uint8_t 接口;
静态 I2C_Handle i2cHandle;
静态 I2C_Params i2cParams;
静态信号量结构互斥量;
静态常量 I2CCC26XX_I2CPinCfg pinCfg0 =
{
// I2C 接口0的引脚配置
.pinSDA = Board_I2C0_SDA0、
.pinSCL = Board_I2C0_SCL0
};
/*********
*@fn bspI2cSelect
*
*@简短选择 I2C 接口和从器件
*
*@param newInterface -所选接口
*@param address -从器件地址
*
*@如果成功则返回 true
*
bool bspI2cSelect (uint8_t newInterface、uint8_t 地址)
{
//获取 I2C 资源
if (!Semaphore_pend (Semaphore_handle (&mutex)、MS_2_ticks (I2C_TIMEOUT))))
{
返回 false;
}
//存储新的从地址
slaveAddr =地址;
//接口已更改?
if (newInterface!=接口)
{
//存储新接口
接口= newInterface;
//关闭 RTOS 驱动程序
I2C_Close (i2cHandle);
//将定制设置为 NULL,选择 I2C 接口0
I2C_Params_init (&i2cParams);
//根据所选的 I2C 接口0分配 I2C 数据/时钟引脚//接口为1
IF (接口= BSP_I2C_interface_0)
{
i2cParams.custom=(void*).pinCfg0;
}
//重新打开具有新总线引脚分配的 RTOS 驱动程序
i2cHandle = I2C_open (Board_I2C、&i2cParams);
}
返回 true;
}
/*********
*@fn bspI2cDeselect
*
*@brief 允许其他任务访问 I2C 驱动程序
*
*@param none
*
*@返回无
*
void bspI2cDeselect (void)
{
//释放 I2C 资源
Semaphore_post (Semaphore_handle (&mutex));
}
/*********
*@fn bspI2cInit
*
*@简要初始化 RTOS I2C 驱动程序(只能调用一次)
*
*@param none
*
*@返回无
*
void bspI2cInit (void)
{
#define I2C_initialized
Semaphore_Params semParamsMutex;
//创建保护信标
Semaphore_Params_init (&semParamsMutex);
SemParametersMutex.mode = Semaphore_Mode_binary;
Semaphore_construction (&mutex、1、&semParamsMutex);
//重置 I2C 控制器
HapiResetPeripheral (PRCM_Periph_I2C0);
I2C_init();
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
i2cHandle = I2C_open (Board_I2C、&i2cParams);
//初始化局部变量
slaveAddr = 0xFF;
接口= BSP_I2C_interface_0;
if (i2cHandle ==空)
{
Task_exit();
}
}
/*********
*@fn bspI2cReset
*
*@简要重置 RTOS I2C 驱动程序
*
*@param none
*
*@返回无
*
void bspI2cReset (void)(空)
{
//获取 I2C 资源*/
if (!Semaphore_pend (Semaphore_handle (&mutex)、MS_2_ticks (I2C_TIMEOUT))))
{
返回;
}
//关闭驱动程序
I2C_Close (i2cHandle);
//重置 I2C 控制器
HapiResetPeripheral (PRCM_Periph_I2C0);
//重置局部变量
slaveAddr = 0xFF;
接口= BSP_I2C_interface_0;
//打开驱动程序
i2cHandle = I2C_open (Board_I2C、&i2cParams);
//释放 I2C 资源
Semaphore_post (Semaphore_handle (&mutex));
}