|
发表于 2013-6-12 05:01:36
|
显示全部楼层
gadwgdsk77gg 发表于 2013-5-19 16:39
楼主大哥,可否帮忙解决一下问题
程序初始化到
result =
恰恰应该是I2C的问题。我用软件I2C,也搞了很久,发现地址得移位,类似这个:
I2C_SendByte(slave_addr<<1); //发送设备地址+写信号
就是把0x68变成0xd0.
之前单字节读写不需要移位也能正常读加速度数据。一直卡在读出FIRMWARE数据对比哪里。发狠一点点调试,才发现这个问题,貌似某位老大曾经提示过这个。。。。。。
贴给你参考一下:
int msp430_i2c_write(unsigned char slave_addr,
unsigned char reg_addr,
unsigned char length,
unsigned char const *data)
{
unsigned long start, cur;
if (!length)
return 0;
I2C_Start(); //起始信号
I2C_SendByte(slave_addr<<1); //发送设备地址+写信号
I2C_SendByte(reg_addr); //内部寄存器地址,
int i;
for(i=0;i<length;i++)
I2C_SendByte(data); //内部寄存器数据,
I2C_Stop(); //发送停止信号
return 0;
}
int msp430_i2c_read(unsigned char slave_addr,
unsigned char reg_addr,
unsigned char length,
unsigned char *data)
{
unsigned long start, cur;
if (!length)
return 0;
int i;
//for(i=0;i<length;i++)
// data=Single_ReadI2C(reg_addr++);
/**/
I2C_Start(); //起始信号
I2C_SendByte(slave_addr<<1); //发送设备地址+写信号
I2C_SendByte(reg_addr); //发送存储单元地址,从0开始
I2C_Start(); //起始信号
I2C_SendByte((slave_addr<<1)+1); //发送设备地址+读信号
for(i=0;i<length;i++)
{
data=I2C_RecvByte(); //读出寄存器数据
if(i<length-1)
I2C_SendACK(0); //接收应答信号
}
I2C_SendACK(1); //NACK
I2C_Stop(); //停止信号
return 0;
}
|
|