搜索
bottom↓
回复: 12

MSP430 硬件I2C 搞了几天 没做出来,求大神指点

[复制链接]

出0入0汤圆

发表于 2013-8-1 10:47:32 | 显示全部楼层 |阅读模式
这个程序和AT2402通信,我想读出一个字节,应该怎么设置相应的寄存器,求大神求指点!
贴出程序
MSP430F2617的
晶振是手表晶振


#include "msp430f2617.h"

#define WriteAdd 0xA0    //2402写地址
#define ReadAdd  0xA1   //2402读地址

void delay(unsigned int time)
{
  int ii;
  for(;time>0;time--)
    for(ii=100;ii>0;ii--);
}

void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  //设置UCB0 为I2C模式 master模式
  //P3.1--SDA  ||| P3.2--SCL
  P3SEL |= 0x06;                            // Assign I2C pins to USCI_B0
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_1 + UCSWRST;
                                            // Use SMCLK, keep SW reset
  UCB0BR0 = 2;                              // fSCL = ACLK/2 = ~16.5kHz
  UCB0BR1 = 0;
  UCB0I2CSA = ReadAdd;
  UCB0I2CIE |= UCSTTIE + UCSTPIE + UCNACKIE;
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  IE2 |= UCB0TXIE+UCB0RXIE;                 // Enable TX  RX interrupt
  _EINT();
  
  while(1)
  {
//    while (UCB0CTL1 & UCTXSTP);             // Ensure stop condition got sent
    UCB0CTL1 |= UCTXSTT;                    // I2C start condition
    delay(50);
    UCB0TXBUF = 0X01;
    delay(50);
//    while (UCB0CTL1 & UCTXSTT);             // Start condition sent?
    UCB0CTL1 |= UCTXSTP;                    // I2C stop condition
    delay(50);
    while(UCB0STAT & UCBBUSY);
   
//    __bis_SR_register(GIE);                 // Enter interrupts
  }
}

// USCI_B0 Data ISR
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  UCB0TXBUF = 0X01;                     
}

#pragma vector = USCIAB0RX_VECTOR
__interrupt void USCIAB0RX_ISR(void)
{
  P2DIR = 0xFF;
  P2OUT = UCB0RXBUF;                    
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

阿莫论坛才是最爱国的,关心国家的经济、社会的发展、担心国家被别国牵连卷入战争、知道珍惜来之不易的和平发展,知道师夷之长,关注世界的先进文化与技术,也探讨中国文化的博大精深,也懂得警惕民粹主义的祸国殃民等等等等,无不是爱国忧民的表现。(坛友:tianxian)

出0入0汤圆

发表于 2013-8-2 23:11:35 | 显示全部楼层
可以参考TI给的例程 或者对着手册上改吧。。。

出0入0汤圆

 楼主| 发表于 2013-8-7 18:18:42 | 显示全部楼层
cbing2000 发表于 2013-8-5 16:17
你没搞出来太正常了,我也觉得Ti的这个I2C确实是JiBa难用。 虽然我现在已经会了。

发送的时候 建议 ...

我试试~~~

出0入0汤圆

发表于 2013-8-8 17:25:33 | 显示全部楼层
个人建议能用模拟还是用模拟吧,俺在调试硬件时经常出现程序死掉的问题,硬件的I2C程序用了网上现成的代码修改的,读取AT2416一点问题都没有,但是修改一下就完了,可能是俺修改的不完善,现在改用模拟跑的很好。

出0入0汤圆

发表于 2013-8-12 08:30:03 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-8-12 08:57:03 | 显示全部楼层

出0入0汤圆

发表于 2013-8-12 09:30:42 | 显示全部楼层
430的IIC和别的单片机设备地址在寄存器中存储的对齐方式不一样,而且设备地址是单片机自动发送的,你要注意一下!其次不能连续接受数据,因为接受寄存器中的数据在有新数据到来时不会完全被清掉,会保留一个最高位(也可能是最低位,记不清了),所以发送数据时没关系,但如果是需要接受数据,那么在每次发起通信时都要重新初始化IIC才行,你去我空间看下,有一篇我发的430驱动贴,里面有我调试过的程序

出0入0汤圆

发表于 2013-9-10 16:31:22 | 显示全部楼层
我也遇到这个问题,关注!

出0入0汤圆

发表于 2013-10-17 16:07:47 | 显示全部楼层
seewolf 发表于 2013-8-12 09:30
430的IIC和别的单片机设备地址在寄存器中存储的对齐方式不一样,而且设备地址是单片机自动发送的,你要注意 ...

你的空间看不了,能直接给个链接不?

出0入0汤圆

发表于 2013-10-18 09:13:01 | 显示全部楼层
divineliu 发表于 2013-10-17 16:07
你的空间看不了,能直接给个链接不?

...都过了两个月啦,呵呵~链接是这个:http://www.amobbs.com/thread-5528175-1-1.html

出0入0汤圆

发表于 2013-10-18 10:17:26 | 显示全部楼层
多谢10楼了。
另外,下面这个帖子对430 的I2C解说的很详细。
http://www.amobbs.com/forum.php? ... &authorid=88848

出0入0汤圆

发表于 2016-11-27 23:50:26 | 显示全部楼层
调430 i2c 中,学习下~~~~

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-16 14:44

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

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