471181730 发表于 2013-8-1 10:47:32

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

这个程序和AT2402通信,我想读出一个字节,应该怎么设置相应的寄存器,求大神求指点!
贴出程序
MSP430F2617的
晶振是手表晶振


#include "msp430f2617.h"

#define WriteAdd 0xA0    //2402写地址
#define ReadAdd0xA1   //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 TXRX 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;                  
}

ljc2012 发表于 2013-8-2 23:11:35

可以参考TI给的例程 或者对着手册上改吧。。。

471181730 发表于 2013-8-7 18:18:42

cbing2000 发表于 2013-8-5 16:17 static/image/common/back.gif
你没搞出来太正常了,我也觉得Ti的这个I2C确实是JiBa难用。 虽然我现在已经会了。

发送的时候 建议 ...

我试试~~~

皮爱了西 发表于 2013-8-8 17:25:33

个人建议能用模拟还是用模拟吧,俺在调试硬件时经常出现程序死掉的问题,硬件的I2C程序用了网上现成的代码修改的,读取AT2416一点问题都没有,但是修改一下就完了,可能是俺修改的不完善,现在改用模拟跑的很好。

xiefy21 发表于 2013-8-12 08:30:03

mark……
顶一个…

气球 发表于 2013-8-12 08:57:03

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

seewolf 发表于 2013-8-12 09:30:42

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

qinkaiabc 发表于 2013-9-10 16:31:22

我也遇到这个问题,关注!

divineliu 发表于 2013-10-17 16:07:47

seewolf 发表于 2013-8-12 09:30 static/image/common/back.gif
430的IIC和别的单片机设备地址在寄存器中存储的对齐方式不一样,而且设备地址是单片机自动发送的,你要注意 ...

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

seewolf 发表于 2013-10-18 09:13:01

divineliu 发表于 2013-10-17 16:07 static/image/common/back.gif
你的空间看不了,能直接给个链接不?

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

divineliu 发表于 2013-10-18 10:17:26

多谢10楼了。
另外,下面这个帖子对430 的I2C解说的很详细。
http://www.amobbs.com/forum.php?mod=viewthread&tid=5548190&page=1&authorid=88848

alexla 发表于 2016-11-27 23:50:26

调430 i2c 中,学习下~~~~

xiaoshideyu 发表于 2016-11-28 22:23:45

先马克再说
页: [1]
查看完整版本: MSP430 硬件I2C 搞了几天 没做出来,求大神指点