请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:DK-TM4C129X
工具/软件:TI-RTOS
您好!
尝试读取温度传感器上的寄存器时遇到问题。 传感器是 MLX90632 FIR 传感器。 我需要编写一个函数来读取16位寄存器('m lx90632_i2c_read')中的值,但是,在我当前的实现中,我不认为 I2C_transfer ()运行成功。 在使用 CCS 调试模式单步执行后、我发现它返回 false。 在我的程序中、这是通过打印、I2C 传输错误来指示的。 我已根据示例'i2crf430cl330_load_DK_TM4C129X_TI'对我的函数建模。 我想知道我的逻辑在哪里不正确。
提前感谢 Connor
以下是我的代码。
/* XDCtools 头文件*/
#include
#include
#include
/* BIOS 头文件*/
#include
#include
#include
#include
/* TI-RTOS 头文件*/
#include
#include
/*示例/板头文件*/
#include "Board.h"
#include
#include
#include
#include
#include
#include
#include
#define SLAVE_ADDRESS 0x3A
//寄存
器#define EE_VERSION 0x240B
//32位常数
#define EE_P_R_LSB 0x240C
#define EE_P_R_MSB 0x240D
#define EE_P_G_LSB 0x240E #EE_P_P_MSB
0x24B_define
0x24B_EE_P_LED_LSB #define
0x24B_LSB #define 0x24B_EE_0x24B_0x24B_LSB #define #EE_0x24B_LSB #define
0x24B_LSB #EE_LSB #define
0x24B_LSB #define 0x24B_0x24B_0x24B_LSB #EE_LSB #define #EE_LSB #define 0x24B_0x24B_LSB #define 0x24B_LSB #EE_LSB #define 0x24B_
EE_29_MSB 0x2419
#define EE_BB_LSB 0x241A
#define EE_BB_MSB 0x241B
#define EE_Ca_LSB 0x241C
#define EE_Ca_MSB 0x241D
#define EE_CB_LSB 0x241E
#define EE_CA_LSB 0x2421
#define EE_LSB
#define 0x2421 EE_LSB #define 0x24E_EE_LSB #define 0x24EEE_LSB #define
0x24E_LSB #define 0x24EEE_LSB #define 0x24EEE_LSB #define
0x2421
#define EE_FB_LSB 0x242A
#define EE_FB_MSB 0x242B
#define EE_GA_LSB 0x242C
#define EE_GA_MSB 0x242D
//16位常数
#define EE_HA 0x2481
#define EE_HB 0x2482
#define EE_GB 0x242F
#define EE_寄存
器0x242F #define EE_REG #define 0x2421 #define EE_CLUS_RE#define 0x2421
#define #define #define EE_CLUST_REG#define #define 0x2421 #define EE_REG#define 0x2421 #define 0x2421 #define EE_REG#define 0x2421
RAM_1 0x4000
#define RAM_2 0x4001
#define RAM_3 0x4002
#define RAM_4 0x4003
#define RAM_5 0x4004
#define RAM_6 0x4006
#define RAM_8 0x4007
#define RAM_9 0x4008
//三种测量模式可用#define
RAM_SLEEP_6 0x4006 #define RAM_7 0x4006 #define RAM_10
#define RAM_BLE_BUSY_BIT #define
8 #define 10 #define RAM_9 0x4007 #define #define RAM_9 0x4008 #define 1 #define 1 #define 10 #define 1 #define
#define bit_cycle_POS 2 //6:2 = 5位
#define bit_new_data 0
//REG_CONTROL 位
#define bit_SOC 3
#define bit_mode 1 //2:1 = 2位
I2C_Handle I2C;
I2C_Params i2cParams;
#define TASKSTACKSIZE 768
Task_Structurt task0Struct;
Char task0Stack[TASKSTACKSIZE];
int32_t mlx90632_i2c_read (int16_t register_address、uint16_t *值){
uint8_t txBuffer[2];
I2C_Transaction i2cTransaction;
i2cTransaction。slaveAddress = Board_I2C2_SLAVE;
//写入16位状态寄存器
i2cTransaction。writeBuf = txBuffer;
i2cTransaction。readBuf =值;
i2cTransaction。writeCount = 2;
i2cTransaction。ReadCount = 2;
txBuffer[0]&i2c Transfer.readBuf =值;i2c
(i2c.h)寄存器/Adrabort = 0x2c
)(i2c)/Adrb)(i2c (i2c & i2c)+ i2c (i2c (i2c)+ i2c (iDC_transfer_transfer)= 1)/i2c (i2
}
void nfcLoadTask (UARg arg0、UARg arg1)
{
uint8_t EE_P_R_MSB_val[2]、EE_P_R_LSB_vals[2];
uint16_t EE_P_R_MSB_16、EE_P_R_LSB_16;uint32_t
EE_R;
int P_R;
EE_P_R_MSB_16 = mlx90632_i2c_read (EE_P_R_MSB、&EE_P_R_MSB_16);
EE_P_R_LSB_16 = mlx90632_i2c_read (EE_P_R_LSB、EE_P_R_LSB、&EE_R_LSB_16);
EE_P_R =(EE_P_R_MSB_16 << 16)|(EE_P_R_LSB_16);
P_R = EE_P_R * pow (2、-8);
System_printf ("%d"、P_R);
System_flush ();
}
/*
=== main ====
//
int main (void)
{
Task_Params taskParams;
//调用主板 init 函数*/
Board_initGeneral ();
Board_initGPIO ();
Board_initI2C ();
//构造 nfcLoad 任务线程*/
Task_Params_init (&taskParams.stackSIZE
= TASKSTACKSIZE
= TASKSTACK_PARSTACK_PRIZE;task= taskParams.instance->name;task.Params.taskParams.taskParks=task1.parstack1;taskParams.taskParks=taskParks.parparally=
Task_constructure(&task0Struct,(Task_funcPTR) nfcLoadTask,&taskParams, NULL);
//创建 I2C 以供使用*/
I2C_Params_init (&i2cParams);
i2cParams.bitrate = I2C_400kHz;
i2c = I2C_open (Board_I2C_IP2C2_init)(')*(&i2cParams.bitrate!)))))))("
如果已初始化
系统(&I2cParams.bitrate!)))))))))))*(i2cParams.bitrate=I2cAbort (&;i2C_open (&;i2C_open(i2C_open(&;i2C_open())