问题:当IIC发送起始信号后始终无法接收到ADS1115的ACK.。ADS1115的地址是0x48。附上只与发送数据相关的代码代码
void I2C_Init()
{
//--------开启引脚复用功能,BIT6->SCL BIT7->SDA-------//
P1SEL |= BIT6+BIT7;
P1SEL2 |= BIT6+BIT7;
//--------软件复位状态-----------//
UCB0CTL1 |= UCSWRST;
//--------同步通信I2C主机状态-------//
UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;
//-------使用SMCLK,软件复位--------//
UCB0CTL1 = UCSSEL_2 + UCSWRST;
//-------分频系数-------//
UCB0BR0 = 11;
//-------一级别分频一般不启用--------//
UCB0BR1 = 0;
//------从机地址,可在宏定义中修改-------//
UCB0I2CSA = Slave_Addr;
//------开启I2C-------//
UCB0CTL1 &=~ UCSWRST;
_enable_interrupts();
}
void I2C_Tx_Init()
{
UCB0CTL1 |= UCTR;
IFG2 &=~ UCB0TXIFG;
IE2 &=~ UCB0RXIE;
IE2 |= UCB0TXIE;
}
void I2C_TxFrame(unsigned char num,unsigned char *p_Tx)
{
while(UCB0STAT & UCBBUSY);
TxByteCnt = num;
pTxData = (unsigned char *)p_Tx;
I2C_Tx_Init();
UCB0CTL1 |= UCTXSTT;
__bis_SR_register(CPUOFF + GIE);
while (UCB0CTL1 & UCTXSTP);
}
**********************************************/
void I2C_TxFrame_ISR()
{
//---------------判断数据剩余个数-------//
if(TxByteCnt)
{
//--------数据填充-------//
UCB0TXBUF = *pTxData;
//--------指针位移-------//
pTxData++;
//--------数据个数减一-------//
TxByteCnt--;
}
else
{
//--------数据个数为0,发送停止位------//
UCB0CTL1 |= UCTXSTP;
//-------没有把数据写入buffer,不能清除中断,需要手动清除中断----------//
IFG2 &=~ UCB0TXIFG;
}
}
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR_HOOK(void)
{
//-------UCA0和UCB0共用一个中断向量,进入中断前判断哪个触发了中断
if(IFG2 & UCA0TXIFG)
{
IFG2 &=~ UCA0TXIFG;
//---------调用事件处理函数-------
}
if(IFG2 & UCB0TXIFG)
{
//---------调用事件处理函数-------
I2C_TxFrame_ISR();
}
}