|
小弟正在学MSP430
用MSP430F5438A 硬件IIC 调ADXL345 配置都是按着历程来的,但是运行时总是停在
UCB3TXBUF = Address;
while((UCB3IFG & UCTXIFG)==0);
好像是接收不到ADXL345的ACK回应。。。不太懂是哪里出的错。。
上代码,求大神们指点一下~~~
void iic_init(void)
{
P10SEL |= 0x06;
UCB3CTL1 |= UCSWRST;
UCB3CTL0 = UCMST + UCMODE_3 + UCSYNC;
UCB3CTL1 = UCSSEL_2 + UCSWRST;
UCB3BR0 = 10;//
UCB3I2CSA = SlaveAddress; // 从机地址,7位寻址方式(1001000) 从地址寄存器
UCB3CTL1 &= ~UCSWRST; // 清除状态机复位,恢复工作.
}
/******************************************************************************
写单字节
******************************************************************************/
void WriteByte (unsigned char Address,unsigned char Byte)
{
while(UCB3CTL1 & UCTXSTP); // 确保停止位已发出,总线空闲
UCB3CTL1 |= UCTXSTT + UCTR; // 启动开始信号+写模式
UCB3TXBUF = Address; // 写入地址
while((UCB3IFG & UCTXIFG)==0); //配置寄存器时,就会停在这里
UCB3TXBUF = Byte ; // 写入单数据
while((UCB3IFG & UCTXIFG)==0);
UCB3CTL1 |= UCTXSTP; // 启动停止信号
while((UCB3CTL1 & UCTXSTP)==1); // 等待停止信号是否已发送完成
}
/******************************************************************************
读单字节
******************************************************************************/
unsigned char RandomRead (unsigned char Address)
{
while (UCB3CTL1 & UCTXSTP); // 确保停止位已发出,总线空闲
UCB3CTL1 |= UCTXSTT + UCTR; // 启动开始信号+写模式
UCB3TXBUF = Address; // 写入地址
while((UCB3IFG & UCTXIFG)==0);
UCB3CTL1 &= ~UCTR; // 改为读模式
UCB3CTL1 |= UCTXSTT; // 重新启动开始信号
while((UCB3CTL1 & UCTXSTT)==1); // 确保发出
delay_ms(1); // 增加一个适当延时
while((UCB3IFG&UCRXIFG)==0); // 等待接受一个数据
RandomReadByte = UCB3RXBUF; // 读入一个数据
UCB3CTL1 |= UCTXSTP+ UCTXNACK; // 启动停止信号,发应答信号
return RandomReadByte;
}
这个硬件配置起来真的很头大啊。。。。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|