Other Parts Discussed in Thread: TMP102, CC2650
Thread 中讨论的其他器件: SYSBIOS、 TMP102、 CC2650
工具/软件:TI-RTOS
大家好、
我使用的是 LAUNCHXL-CC2650、并且希望使用 I2C 与加速计通信、
我将 DIO4用作 SCL、将 DIO5用作 SDA、
但 我无法与加速计通信、我尝试读取"我是谁"寄存器、但没有获得任何值、
而当我使用 CC2640R2-Launch Pad 进行相同的尝试时、通信完成、我能够读取加速计的"谁是我"寄存器的值
此外、我在 LAUNCHXL-CC2650 SDK 以及 TI 的 Resource Explorer 中搜索了 i2c 的示例代码、但我无法找到 LAUNCHXL-CC2650的任何示例代码、
但同样、当我使用 CC2640R2-Launch Pad 时、我会得到相应的值。
我已附上 使用 SDK 中的空项目示例创建的 I2C 通信代码、请检查并告知我是否有任何改进
我还附上了板级配置文件以及 CC2650LaunchXL.c 和.h,如果需要对这些文件进行任何更改,请提供帮助
/*
*==== i2ctmp006_cc26xx.c ===
*
/* XDCtools 头文件*/
#include
#include
#include
/* BIOS 头文件*/
#include
#include
/* TI-RTOS 头文件*/
#include
#include
/*示例/板头文件*/
#include "Board.h"
#define TASKSTACKSIZE 512
Task_Structsk0Struct;
uint8 tsk0Stack[TASKSTACKSIZE];
Task_Handle 任务;
/*
*==== 回声 Fxn =====
*此函数的任务是静态创建的。 请参阅工程的.cfg 文件。
*
空 taskFxn (UARg arg0、UARg arg1)
{
// unsigned int i;
uint16_t 温度= 0;
uint8_t txBuffer[1];
uint8_t rxBuffer[2];
I2C_Handle i2c;
I2C_Params i2cParams;
I2C_Transaction i2cTransaction;
/*创建 I2C 以供使用*/
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
I2C = I2C_open (Board_I2C、&i2cParams);
if (i2c == NULL){
System_abort ("初始化 I2C\n 时出错");
}
否则{
system_printf ("I2C 已初始化!\n"\});
}
/*指向 T 环境寄存器并读取其2个字节*/
TxBuffer[0]= 0x000F;
i2cTransaction.slaveAddress = 0x1D;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 2;
if (I2C_transfer (i2c、&i2cTransaction)){
/*从接收到的数据中提取°C;请参阅 TMP102数据表*/
温度= rxBuffer[0];
}
/*已取消初始化 I2C */
I2C_Close (i2c);
System_printf ("I2C 已关闭!\n"\});
system_flush();
}
/*
*==== main ====
*
int main (空)
{
Task_Params tskParams;
/*呼叫板初始化函数*/
Board_initGeneral();
I2C_init();
/*构造 LED 任务线程*/
Task_Params_init (&tskParams);
tskParams.STACKSIZE = TASKSTACKSIZE;
tskParams.stack =&tsk0Stack;
tskParams.arg0 = 50;
Task_construct(&tsk0Struct,(Task_FuncPtr) taskFxn、&tskParams、NULL);
/*获取实例句柄*/
任务= Task_handle (&tsk0Struct);
system_printf ("启动 I2C 示例\n 系统提供程序设置为 SysMin。"
"停止目标以查看 ROV 中的任何 SysMin 内容。\n");
/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();
/*启动 BIOS */
BIOS_start();
返回(0);
}
//========================================
此外、我想告诉大家、当我将 break 放在"if (I2C_transfer (i2c、&i2cTransaction)"上时、代码会直接跳转到"I2C_CLOSE (i2c)";
请尽早检查 CC2650-Launchpad 上的 i2c 通信并为我提供帮助。
谢谢、此致
Utkarsh