TI工程师你们好 我在使用MSP430的IIC时 发现读取数据不正常 请帮忙看下代码
unsigned char MSP430_IIC_ReadByte(void)
{
int retry=0;
while((IFG2&UCB0RXIFG)!=UCB0RXIFG)//检测是否已经接收完一个byte的数据
{
retry++;
if(retry>IIC_Busy_TimeOver) return FALSE; //累加200次,如果没有应答,退出等待,防止死机!
//200次累加的来源为:
}
return(UCB0RXBUF);
}
char MSP430_IIC_WriteByte(unsigned char cmd)
{
int retry=0;
while((IFG2 & UCB0TXIFG) != UCB0TXIFG) //检测UCB0TXBUF是否为空,为空则UCB0TXIFG为1
{
retry++;
if(retry>IIC_Busy_TimeOver) return FALSE;
}
UCB0TXBUF = cmd;
return TRUE;
}
void MSP430_IIC_Stop(void)
{
UCB0CTL1 |= UCTXSTP+UCTXNACK;//发送停止位+NOACK
}
char MSP430_IIC_WaitforACK(void)
{
int retry=0;
while((UCB0CTL1 & UCTXSTT)==UCTXSTT)//检测从机ACK信号,有ACK信号,则UCTXSTT自动清零
{
retry++;
if(retry>IIC_ACK_TimeOver) return FALSE;
}
return TRUE;
}
void MSP430_IIC_RepeatStart(unsigned char addr)
{
UCB0I2CSA = addr;
UCB0CTL1 |= UCTXSTT;//产生start信号
}
char MSP430_IIC_Start(unsigned char addr)
{
UCB0I2CSA = addr; // Set slave address 此处地址最高位为BIT6,mcu会自行左移1位
//UCB0CTL1 |= UCTR; //配置为发送模式
UCB0CTL1 |= UCTXSTT; //产生start信号
return TRUE;
/***必须对UCB0TXIFG赋值否则SCLK会一直拉低,等待从机应答***/
}
char MSP430_IIC_CheckBusy(void)
{
int retry;
while(UCB0STAT & UCBBUSY)//wait for IIC bus is busy
{
retry++;
if(retry>IIC_Busy_TimeOver) return FALSE;
}
return TRUE;
}
void MSP430_IIC_Recieve(void)
{
UCB0CTL1 &= ~UCTR; //配置为接收模式
}
void MSP430_IIC_Translate(void)
{
UCB0CTL1 |= UCTR; //配置为发送模式
}
灰小子:
读取数据有什么不正常?用逻辑分析仪或者示波器观察过时序吗?