This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:从TCA9535读取数据

Guru**** 2595770 points
Other Parts Discussed in Thread: TCA9535, MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/637211/msp432p401r-read-data-from-tca9535

部件号:MSP432P401R
主题中讨论的其他部件:TCA9535MSP430G2553

我尝试使用演示 bootxl_edumkII_lightSensor_msp432p401r从TCA9535读取数据,就像这样  

const eUSI_I2C_MasterConfig i2cConfig =
{
EUSCI_B_I2C_CLOCKSOURCE_SMCLK, // SMCLK时钟源
2400万, // SMCLK = 48MHz
EUSCI_B_I2C_SET_DATA_RATE_100KBPS, //所需的I2C时钟为100kHz
0, //无字节计数器阈值
EUSCI_B_I2C_NO_AUTO_STOP //无自动停止
};

静态void TCA9535_Write(ST_TCA9535* a_pstTCA9535,9535 a_pstTCA9535, C_U89535 C_U8 a_u8RegAddr , C_U8 a_u8RegData){/*


指定

	

Interinterrupt address for I2C_setSlaveAddress(I2C_SCI_B3_base, a_pst_a_ut8 a_utr8_utr8_utb3_I2C_DEF_I2C_DEF_I2C_DEB3_STB3_STB3_STB3;

	



	传输模式EDE_DE_DEF_I2C_DEB3_DEB3_DEF_EDEF_EDEB3_DEB3_DEB3_EDEF_I2I2I2I2C_DEF_I2C_DE_I2C_DEB3_DEB3_ST_DEB3_DEF_DEB3_

/*清除任何现有的中断标志PL */
I2C_clearInterruptFlag (EUSI_B3_BASE,
	EUSI_B_I2C_Transmit_INTERRUPT0);

/*等待准备好写入PL */
while (I2C_isBusy (EUSI_B3_BASE));


/*启动启动并发送第一个字符*/
I2C_masterSendMultiByteStart(EUSI_B3_base,
	a_u8RegAddr);

	
INTERSCI_MasterSendMultiByteFinish(EUSSCI_B3_base,
	A_u8RegData);
}

静态void TCA9535_Read(ST_TCA9535* a_pstTCA9535,9535 a_pstTCA9535, C_U89535 C_U8 a_u8RegAddr , C_U8* a_u8RegData)
{/*
	
	指定I2C */ I2C_INTERSTB3_ST_STB3_STREB3_EPT95B3_DE_DECAST_I2C_DELAST_I2B3_I2I2C_DE_I2C_DEAD_I2C_DE_I2C_DELA_I2B0,
	INTER_I2B3_I2C_DELA_I2C_DE_I2C_DELA_I2C_DELA_I2B3_I2C_DE_I2B0_I2C_DE_I
		
	
	
	
		


/*将主中继器设置为传输模式PL */
I2C_setMode (EUSI_B3_BASE,
EUSCI_B_I2C_Transmit_mode);

/*清除任何现有中断标志PL */
I2C_clearInterruptFlag (EUSI_B3_BASE,
EUSCI_B_I2C_Transmit_INTERRUPT0);

/*等待准备好写入PL */
While (I2C_isBusBusy (EUSCI_B3_BASE));

/*启动开始并发送第一个字符*/
I2C_masterSendMultiByteStart (EUSCI_B3_base,a_u8RegAddr);

/*等待TX完成*/
while (!(I2C_getInterruptStatus (EUSCI_B3_BASE),
EUSCI_B_I2C_Transmit_INTERRUPT0));

/*仅启动停止*/
I2C_masterSendMultiByteStop (EUSI_B3_BASE);



/*
*生成启动条件并将其设置为接收模式。
*这将发送从属地址并继续读取
*直到您发出停止
*/
		*a_u8RegData = I2C_masterReceiveSingleByte (EUSI_B3_base);
//I2C_masterReceiveStart (EUSCI_B3_BASE);

/*等待RX缓冲区填充*///
while (!(I2C_getInterruptStatus (EUSI_B3_BASE,
// EUSCI_B_I2C_Receive_INTERRUPT0));

/*接收第二个字节然后发送停止条件*//*a_u8RegData
= I2C_masterReceiveMultiByteFinish(EUSI_B3_base);
	
}

void TCA9535_Init(ST_TCA9535* a_pstTCA9535,9535 a_pstTCA9535, C_U89535 C_U8 a_u8DevAddr)
{
a_pstTCA9535->m_DevAddrW =(a_u8DevAddr <<1)| 0;// Addr + Write
a_pstTCA9535->m_DevAddrR =(a_u8DevAddr << 1)| 1;// Addr +读取
a_pstTCA9535->m_DevAddr = a_u8DevAddr;
	
GPIO_setAsPeripheralModuleFunctionOutputPin (
SCL_port,
SCL_PIN,
GPIO辅助模块功能);

GPIO_setAsPeripheralModuleFunctionOutputPin (
SDA_port,
SDA_PIN,
GPIO _secondal_module_function);

			/*初始化USI_B0和I2C主控器以与从属设备进行通信*/
	I2C_initMaster(EUSI_B3_base,&i2cConfig);
	
	/*禁用I2C模块以进行更改*/I2C_DisableModule(EUSCI_B3_base)
	;
	
	/*启用I2C模块以开始操作*/I2C_enableModule*(EI2C_SCL/ 6.5 6.4
	
	

 但它会被卡住

While (I2C_isBusBusy (EUSCI_B3_BASE));

因为UCBBUSY是Alwasy设置。
我发现UCBBUSY是在我执行I2C_enableModule(EUSSCI_B3_base)后立即设置的;
从不重置,但我尚未开始发送字节。

否则我会坚持  

I2C_masterSendMultiByteFinish (EUSI_B3_BASE,
a_u8RegData);

您知道原因吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在edumkii示意图中找不到TCA9535。 这是一个非板载I2C电路吗?

    我要检查的第一件事(特别是对于这种症状)是SCL/SDA上拉。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce您好,我发现当我逐步使用调试时,它不会卡住,但如果我直接运行,它将在以下情况时卡住:(I2C_isBusBusy (EUSCI_B3_BASE);或I2C_masterSendMultiByteFinish (EUSI_B3_BASE),
    a_u8RegData);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SDA/SCL上拉电阻值是多少? 通常我们建议在4k和10kohm之间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    电阻为4.7千欧
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    用户,

    您是否看到了TCA9535团队随其设备提供的代码? 它是在MSP430G2553 16位器件上编写的,但我建议咨询他们如何设置TCA器件,以确保您的代码符合他们在代码和文档中的建议,然后相应地查看MSP432的I2C。

    我可能也会看到增加I2C上拉的情况,以防万一。 TC9535器件的数据表通过了相当多的步骤来计算相应的上拉电阻器。 您是否已完成此流程? www.ti.com/.../tca9535.pdf

    当您浏览他们的代码/文档时,您可以参考我们在driverlib和您所指出的演示中拥有的许多I2C示例。 我相信这个例子是一个非常有用的开始。 我们确保在每个版本和工作中都对这些示例进行了测试。 dev.ti.com/.../

    解决USCI外设常见I2C问题的另一个好地方是,如果所有其他问题都失败,请参阅以下应用说明: www.ti.com/.../slaa734.pdf

    随时询问任何后续问题。