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;
}
可以参考TI给的例程 或者对着手册上改吧。。。 cbing2000 发表于 2013-8-5 16:17 static/image/common/back.gif
你没搞出来太正常了,我也觉得Ti的这个I2C确实是JiBa难用。 虽然我现在已经会了。
发送的时候 建议 ...
我试试~~~ 个人建议能用模拟还是用模拟吧,俺在调试硬件时经常出现程序死掉的问题,硬件的I2C程序用了网上现成的代码修改的,读取AT2416一点问题都没有,但是修改一下就完了,可能是俺修改的不完善,现在改用模拟跑的很好。 mark……
顶一个… {:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 430的IIC和别的单片机设备地址在寄存器中存储的对齐方式不一样,而且设备地址是单片机自动发送的,你要注意一下!其次不能连续接受数据,因为接受寄存器中的数据在有新数据到来时不会完全被清掉,会保留一个最高位(也可能是最低位,记不清了),所以发送数据时没关系,但如果是需要接受数据,那么在每次发起通信时都要重新初始化IIC才行,你去我空间看下,有一篇我发的430驱动贴,里面有我调试过的程序 我也遇到这个问题,关注! seewolf 发表于 2013-8-12 09:30 static/image/common/back.gif
430的IIC和别的单片机设备地址在寄存器中存储的对齐方式不一样,而且设备地址是单片机自动发送的,你要注意 ...
你的空间看不了,能直接给个链接不? divineliu 发表于 2013-10-17 16:07 static/image/common/back.gif
你的空间看不了,能直接给个链接不?
...都过了两个月啦,呵呵~链接是这个:http://www.amobbs.com/thread-5528175-1-1.html 多谢10楼了。
另外,下面这个帖子对430 的I2C解说的很详细。
http://www.amobbs.com/forum.php?mod=viewthread&tid=5548190&page=1&authorid=88848 调430 i2c 中,学习下~~~~ 先马克再说
页:
[1]