主题中讨论的其他器件:TMP112、 TCA6424
工具/软件:TI-RTOS
您好!
我在处理2条不同的 I2C 总线时遇到问题、只有一条 I2C 总线在工作、另一条 I2C 总线不工作。
我的代码如下所示。
#define Board_I2C_AT24_TMP112 MSP_MSP430F5659_I2CB1 -- >I2C 总线1
#define Board_I2C_swicth MSP_MSP430F5659_I2CB2 ---- >I2C 总线2
1 ->.cfg 文件我已声明2条总线。
TIRTOS.useI2C = true;
var hwi5Params = new hwi.Params();
hwi5Params.instance.name ="hwi5";
hwi5Params.arg = 0;
program.global.hwi5 = Hwi.create (45、"&I2CUSCIB_hwiIntFxn"、hwi5Params);
var hwi6Params = new hwi.Params();
hwi6Params.instance.name ="hwi6";
hwi6Params.arg = 1;
program.global.hwi6 = Hwi.create (35、"&I2CUSCIB_hwiIntFxn"、hwi6Params);
2 ->在 board_gpio.c 和 board_gpio.h 声明中、如下所示
#define Board_TCA6424_ADDR (0x22)//(0x44)
typedef 枚举 MSP_MSP430F5659_I2CName{
MSP_MSP430F5659_I2CB1 = 0、
MSP_MSP430F5659_I2CB2 = 1、
MSP_MSP430F5659_I2CCOUNT
}MSP_MSP430F5659_I2CName;
#if defined (__TI_Compiler_version__)
#pragma DATA_SECTION (I2C_CONFIG、".CONST:I2C_CONFIG")
#pragma DATA_SECTION (i2cUSCIBHWAttrs、".const:i2cUSCIBHWAttrs")
#endif
#include
#include
I2CUSCIB_Object i2cUSCIBObjects[MSP_MSP430F5659_I2CCOUNT;
CONST I2CUSCIB_HWAttrs i2cUSCIIBHWAttrs[MSP_MSP430F5659_I2CCOUNT ={
{
baseAddr = USCI_B1_base、
时钟源= USCI_B_I2C_CLOCKSOURCE_SMCLK
}、
{
baseAddr = USCI_B2_base、
时钟源= USCI_B_I2C_CLOCKSOURCE_SMCLK
}
};
const I2C_Config I2C_CONFIG[]={
{
.fxnTablePtr =&I2CUSCIB_fxnTable、
.object =&i2cUSCIBObjects[0]、
hwAttrs =&i2cUSCIBHWAttrs[0]
}、
{
.fxnTablePtr =&I2CUSCIB_fxnTable、
.object =&i2cUSCIBObjects[1]、
hwAttrs =&i2cUSCIBHWAttrs[1]
}、
{
空、空、空}
};
/*
*==== MSP_MSP430F5659_initI2C ===
*
void MSP_MSP430F5659_initI2C (void)
{
/*
*注意:TI-RTOS 示例将 USCIB0配置为 SPI 或 I2C。 因此、
*在中同时使用 I2C 和 SPI 驱动程序时会发生冲突
*应用程序。 修改此文件中的引脚多路复用设置并解析
*运行应用程序前发生冲突。
*
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P8、
GPIO_PIN5 | GPIO_PIN6);
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P9、
GPIO_PIN5 | GPIO_PIN6);
I2C_init();
}
3.->在 main.c 中
调用 MSP_MSP430F5659_initI2C ()、 也调用 InitSwictch ()和 Switch_Register_write (4、value)
4 ->在 switch handle.c InitSwictch ()和 Switch_Register_write()中、定义如下。 未找到错误
空 InitSwitch (空)
{
I2C_Params_init (&i2cparams);
i2cparams.bitrate = I2C_400kHz;
句柄= I2C_open (Board_I2C_swicth、&i2cparams);
if (handle == NULL){
断言(1);
}
}
空 Switch_Register_write (TUSIGN8 REG_Len、TUSIGN8 * REG_DATA)
{
TUSIGN8 writeBuffer[4]、I=0;
I2C_Transaction i2c;
I2C.slaveAddress = Board_TCA6424_ADDR;
I2C.ReadCount = 0;
I2C.readBuf =空;
I2C.writeBuf = writeBuffer;
I2C.writeCount = reg_len;
操作
{
writeBuffer[i]=* reg_data++;
i++;
REG_Len--;
}while (reg_Len!= 0);
if (!I2C_transfer (handle、&i2c))
{
while (1);
}
}/* switch_Register_write()的末尾*/
最后,如果我在总线2 (USCI_B2_BASE,即 P9.5和 P9.6 )上看到示波器,我将看不到 CLK 和数据。 这里可能会有什么问题
在 BUS1 (USCI_B1_BASE,即 P8.5和 P8.6 )上,我看到数据和 CLK,并且工作正常。
这可能是什么问题,我是否做了错误的初始化? 请指导我。
如果有人能快速帮助解决这一问题、我将不胜感激并表示感谢。
提前感谢
Nitesh