搜索
bottom↓
回复: 13

【求助】MSP430F5438A + ADXL345 硬件IIC的问题

[复制链接]

出0入0汤圆

发表于 2013-8-4 15:31:13 | 显示全部楼层 |阅读模式
小弟正在学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, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-8-4 15:32:03 | 显示全部楼层
自己顶~~~

出0入0汤圆

发表于 2013-8-4 16:14:07 | 显示全部楼层
看着程序确实不像有问题

出0入0汤圆

发表于 2013-8-4 16:26:25 | 显示全部楼层
示波器抓波形

出0入0汤圆

发表于 2013-8-4 20:32:23 | 显示全部楼层
UCB3I2CSA = SlaveAddress;

是不是地址错了,我看了一下数据手册,地址可以为0x1D 或者 0x53

出0入0汤圆

发表于 2013-8-4 20:54:16 | 显示全部楼层
随机读可能也有问题:

while((UCB3IFG&UCRXIFG)==0);              // 等待接受一个数据
  RandomReadByte = UCB3RXBUF;               // 读入一个数据
  UCB3CTL1 |= UCTXSTP+ UCTXNACK;            // 启动停止信号,发应答信号

我觉得应该是先操作UCB3CTL1
UCB3CTL1 |= UCTXSTP+ UCTXNACK;            // 启动停止信号,发应答信号
while((UCB3IFG&UCRXIFG)==0);              // 等待接受一个数据
RandomReadByte = UCB3RXBUF;               // 读入一个数据

身边没有代码,具体我可以试试

出0入0汤圆

 楼主| 发表于 2013-8-5 10:01:31 | 显示全部楼层
xukai871105 发表于 2013-8-4 20:32
UCB3I2CSA = SlaveAddress;

是不是地址错了,我看了一下数据手册,地址可以为0x1D 或者 0x53 ...

这个地址我写的 0xA6
ADDR拉低了~

出0入0汤圆

 楼主| 发表于 2013-8-5 10:02:50 | 显示全部楼层
xukai871105 发表于 2013-8-4 20:54
随机读可能也有问题:

while((UCB3IFG&UCRXIFG)==0);              // 等待接受一个数据

现在写不进去~可能还是我设的有问题~ 我同学用软件模拟也没有读到数据~

出0入0汤圆

发表于 2013-8-5 11:03:57 | 显示全部楼层
Zoiphy 发表于 2013-8-5 10:01
这个地址我写的 0xA6
ADDR拉低了~

你不能写A6 操作I2CSA时需要写入的是7位地址,而不是什么读操作地址和写操作地址,这个和I2C软件操作是不一样的。

还有,MSP430写I2C停止的时候,在读操作时也和软件模拟的不一样,你可以多尝试一下!

出0入0汤圆

发表于 2013-8-24 23:33:15 | 显示全部楼层
为什么要写入0X35而不是0XA6

出0入0汤圆

发表于 2013-8-25 10:31:33 | 显示全部楼层
飘香雪剑 发表于 2013-8-24 23:33
为什么要写入0X35而不是0XA6

我确定是写0x53 而不是0xA6

一般情况下 I2C从机地址定义为 AAAA AAAX 这种写法便是0xA6
但是MSP430的 I2C从机地址定义为 XAAA AAAA  这种写法便是0x53

如果还不清楚,我上传代码吧,你修改一下测试一下就明白了!

出0入8汤圆

发表于 2013-8-25 22:19:59 | 显示全部楼层
为什么不用SIP口呢,还有一个问题就是,ADXL345测量的频率范围的应用问题,如果是实验也需要注意这个问题,因为我就遇到这个问题,实际信号超过频响,测试不准,呵呵

出0入0汤圆

发表于 2013-8-26 19:05:33 | 显示全部楼层
谢了,经过我的试验,确实是0x53,而且从机的地址是430自己发送的,谢谢大神了

出0入0汤圆

发表于 2014-1-9 17:21:47 | 显示全部楼层
不错。这个必须顶一顶。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 05:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表