微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > TCA6416A 从机地址是多少?读写位怎么处理?

TCA6416A 从机地址是多少?读写位怎么处理?

时间:10-02 整理:3721RD 点击:

我看官方提供的430操作该器件发送的从机地址是7位(0x20)

/************************** I2C Address ***************************************/
#define TCA6416A_ADDRESS		0x20 		// I2C Address 0100 00 + ADDR + R/W						// ADDR tied to P2.2 of LaunchPad
/************************** I2C Registers *************************************/

然后

// ****************************************************************************
//! @fn          void TCA6416AInitI2CReg(TCA6416ARegs* Regs)
//! @brief
//!
//! TODO 		 Implement I2C return (success/failure)
// ****************************************************************************
unsigned char TCA6416AInitI2CReg(TCA6416ARegs* Regs){
	unsigned char return_Value = I2C_OPERATION_SUCCESSFUL;
	I2C_Write(2, TCA6416A_ADDRESS, TCA6416A_CONFIG_REG0, (unsigned char*)&Regs->Config, 0);
	I2C_Write(2, TCA6416A_ADDRESS, TCA6416A_OUTPUT_REG0, (unsigned char*)&Regs->Output, 0);
	I2C_Write(2, TCA6416A_ADDRESS, TCA6416A_POLARITY_REG0, (unsigned char*)&Regs->PolarityInversion, 0);
	if(NACK)
	{
		NACK = 0;

		return_Value = I2C_OPERATION_FAIL;
	}

	return return_Value;
}

然后

void I2C_Write (unsigned char byte_Count, unsigned char Slave_Address, unsigned char Register_Address, unsigned char Register_Data[], unsigned char offset)
{
    // wait until I2C module has finished all operations.
    while (UCB0STAT & UCBUSY);

    // Set slave address
    UCB0I2CSA  = Slave_Address;

	I2CBufferArray[byte_Count] = Register_Address;
	// If word mode, write 2 bytes
	int x = byte_Count-1;
	unsigned char y=0;
	for (;x>=0;x--)
	{
		I2CBufferArray[x] = Register_Data[y+offset];
		y++;
	}

	PtrTransmit = byte_Count;


    // start condition generation
    I2CWriteInit();

    // => I2C communication is started
    UCB0CTL1 |= UCTXSTT;
    UCB0I2CIE |= UCNACKIE;

    // Enter LPM0 w/ interrupts
	__bis_SR_register(LPM0_bits + GIE);

	// I2C stop condition
	UCB0CTL1 |= UCTXSTP;

	// Ensure stop condition got sent
	while(UCB0CTL1 & UCTXSTP);

    UCB0I2CIE &= ~UCNACKIE;

}
UCB0I2CSA  = Slave_Address;
从上面这句话可以看出访问TCA6416A就是这个,那个R/W#位怎么使用的。

I2C Address格式就是后面注释部分,7位从机地址加一位读写位, 对于TCA6416A来说,为0100 00 + ADDR + R/W,ADDR 通过ADDR引脚的高低电平来决定,读写位为方向位,写为0,1为读。

嗯,谢谢,意思是说MSP430的知道的是7位从机地址,然后读写位是由430中某位寄存器决定,然后通过硬件自动加上去的。如果我模拟IIC的话就需要直接发送8位地址。

读写位是由数据方向控制的,如果主机向从机发送数据,就是写为0, 主机读从机中的数据就为1.

而在调用函数时,只需要将从机的7位地址填写进去即可,正如这里的430发送的地址为0x20,即7位地址,0100000

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top