Other Parts Discussed in Thread: TMP102
主题中讨论的其他器件:TMP102
工具/软件:TI-RTOS
在 I2C 传输后、我们无法将 SCL 引脚配置为 GPIO 引脚。
已执行的步骤:
- 使用 I2C_init()和 I2C_params_init()初始化 I2C
- 通过调用 I2C_open()获取 I2C 句柄
- 通过调用 I2C_transfer ()执行 I2C 传输
- 使用 I2C_CLOSE ()取消初始化 I2C
- 使用 GPIO_setConfig()将 SCL 引脚配置为 GPIO 引脚
- 尝试通过切换此 GPIO 引脚来生成方波
- 已使用逻辑分析仪检查输出
我们使用了 i2ctmp007示例项目、请找到以下代码。
/*
*==== mainThread ====
*
void * mainThread (void * arg0)
{
unsigned int i;
uint16_t 温度;
uint8_t txBuffer[1];
uint8_t rxBuffer[2];
I2C_Handle i2c;
I2C_Params i2cParams;
I2C_Transaction i2cTransaction;
/*调用驱动程序初始化函数*/
display_init();
GPIO_init();
I2C_init();
/*配置 LED 引脚*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/*打开主机显示屏以输出*/
Display = Display_open (Display_Type_UART、NULL);
if (display =NULL){
while (1);
}
/*打开用户 LED */
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
display_printf (display、0、0、"启动 i2ctmp007示例\n");
/*创建 I2C 以供使用*/
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_100kHz;
I2C = I2C_open (Board_I2C_TMP、&i2cParams);
if (i2c == NULL){
Display_printf (display、0、0、"Error Initializing I2C\n");
while (1);
}
否则{
display_printf (display、0、0、"I2C initialized!\n"\});
}
/*指向 T 环境寄存器并读取其2个字节*/
txBuffer[0]= TMP007_obj_TEMP;
i2cTransaction.slaveAddress = Board_TMP_ADDR;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 2;
/*采集20个样本并将其打印到控制台*/
对于(i = 0;i < 20;i++){
if (I2C_transfer (i2c、&i2cTransaction)){
/*从接收到的数据中提取°C;请参阅 TMP102数据表*/
温度=(rxBuffer[0]<< 6)|(rxBuffer[1]>> 2);
/*
*如果 MSB 设置为"1"、则我们有二进制补码
*需要符号扩展的负值
*
if (rxBuffer[0]& 0x80){
温度|= 0xF000;
}
/*
*为简单起见、将温度值除以32即可摆脱
*十进制精度;请参阅 TI 的 TMP007数据表
*
温度/= 32;
display_printf (display、0、0、"Sample %u:%d (C)\n"、i、temperature);
}
否则{
display_printf (display、0、0、"I2C 总线故障\n"\});
}
/*睡眠1秒*/
睡眠(1);
}
/*已取消初始化 I2C */
I2C_Close (i2c);
display_printf (display、0、0、"I2C closed!\n"\});
//将 SCL 引脚配置为 GPIO
GPIO_setConfig (CC2640R2_LAUNCHXL_I2C0_SCL0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
Task_disable();
INT 计数= 0;
int j = 0;
用于生成方波的//逻辑
for (;;){
GPIO_WRITE (CC2640R2_LAUNCHXL_I2C0_SCL0、j 和1);
J++;
while (count < 10){
count++;
}
计数= 0;
}
返回(空);
}
请注意、我们目前使用以下工具和 API 版本:
- simplelink_cc2640r2_sdk_2_20_0_49
- CCS