工具/软件:TI-RTOS
您好,
我们正在使用德州仪器(TI)的6.2 0程序,
MCU MSP430FR5969以及Bosh BME280传感器,
它通过I2C连接到TI-RTOS 2.20 通信系统和XDCtools 3.32 .0.6 下的MCU。
在6.2 中,我们下载了“i2ctmp006_MSP_EXP430FR5969”示例。 寄存器已更改为BME280。
在“MSP_EXP430FR5969.c”文件中,通过这些引脚将传感器连接到MCU已通过以下函数进行了配置:
void MSP_EXP430FR5969_initI2C (void){/*
注:TI-RTOS示例将EUSCIB0配置为SPI或I2C。 因此
,*
当I2C和SPI驱动程序同时在*一个应用程序中使用时,会发生冲突。 在
运行应用程序之前,修改此文件中的pin mux设置并解决*冲突。
*/
GPIO _setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P3,
GPIO _PIN6 | GPIO _PIN5,GPIO _secondary _module_function);
I2C_INIT();
}
在文件"i2ctmp006.cfg"中,脚本末尾添加了以下内容:
var hwiParams = new halHwi.Params(); /* eSCI驱动程序的I2C Hwi */ hwiParams.arg = 1; halHwi.create(47,"&I2CEUSCIB_hwiIntFxn",hwiParams);
在文件"i2ctmp006.c"中,负责读取/写入传感器的任务已编程
void taskFxn (UArg arg0,UArg arg1)
{
unsigned int i;
uint8_t txBuffer[2];
uint8_t rxBuffer[2];
I2C_handle i2c;
I2C_Params i2cParams;
I2C_Transaction i2cTransaction;
/*创建I2C以供使用*/
I2C_Params_init(&i2cParams);
i2cParams.transferMode = I2C_MODE_callback;
i2cParams.bitrate =}_400kHz;
// i2cParams.custom =
i2c_open(Bon_I2C_I2C_I2C_TMP, I2C=i2C_Initializing_I2c= i2C; I2c= i2C_
系统=已初始化i2c_自动1c_系统
/*指向T环境寄存器并读取其2字节*/
txBuffer[0]= 0xE0;
txBuffer[1]= 0xB6;
i2cTransaction.slaveAddress = 0x76;//Board_TMP006_ADDR;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 2;
i2cTransaction.readBuf = NULL;
i2cTransaction.ReadCount = 0;
//重置
I2C_TRANSFER (i2c,&i2cTransaction);
TASK_SLEEP(3000);
txBuffer[0]= 0xD0;
i2cTransaction.slaveAddress = 0x76;//Board_TMP006_ADDR;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = 1;
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.ReadCount = 1;
/*提取20个样本并将其打印到控制台*/
(i = 0;i < 20;i++){
IF (I2C_transfer (i2c,&i2cTransaction)){
System_printf ("Sample System_Buffer
,rx[0],%u:c] -%x (C)\n",rxBuffer[1]);System_flush();
}
否则{
System_printf("I2C总线故障\n");System_flush();
}
System_flush();
Task_sleep(1000);}/*
已初始化I2C */
I2C_close(i2c);
System_printf("I2C!_flush();}_System!\n"\}
如果是以下句子
i2cParams.transferMode = I2C_MODE_blocking;
已更改为
i2cParams.transferMode = I2C_MODE_callback;
它不会被阻止,但不起作用。
我们认为在正常配置上缺少一些东西,但是我们不确定是由于硬件中断还是I2C配置造成的。
谢谢