打印

MSP430F2619的硬件I2C

[复制链接]
1979|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huigoushang|  楼主 | 2012-6-10 10:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void EEPROM_Write(unsigned char high_Address,unsigned char Word)
{
  while (UCB1CTL1 & UCTXSTP);               // 确定总线空闲
  UCB1CTL1 |= UCTXSTT + UCTR;               // 发送起始位,确定为发送模式
  UCB1TXBUF = high_Address;                 // 发送高位地址
while((UC1IFG & UCB1TXIFG)==0);           // 判断是否发送完毕
  UCB1TXBUF = Word;                         // 发送数据
  while((UC1IFG & UCB1TXIFG)==0);           // 判断是否发送完毕
  UCB1CTL1 |= UCTXSTP;                      // 发送停止位
  while((UCB1CTL1 & UCTXSTP)==1);           // 判断停止位是否发送完毕
}

相关帖子

沙发
huigoushang|  楼主 | 2012-6-10 10:38 | 只看该作者
用硬件I2C给芯片寄存器写入数据,可是在示波器上一直看不到波形!单步运行后发现,到红色显示的这步,程序就不走了,求指导

使用特权

评论回复
板凳
peter_zheng| | 2012-6-10 20:05 | 只看该作者
红色部分是用来判断中断是否完成,其实可以用以下程序作为参考
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
  P1SEL |= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  P1SEL2|= BIT6 + BIT7;                     // Assign I2C pins to USCI_B0
  UCB0CTL1 |= UCSWRST;                      // Enable SW reset
  UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC;     // I2C Master, synchronous mode
  UCB0CTL1 = UCSSEL_2 + UCSWRST;            // Use SMCLK, keep SW reset
  UCB0BR0 = 12;                             // fSCL = SMCLK/12 = ~100kHz
  UCB0BR1 = 0;
  UCB0I2CSA = 0x4c;                         // Set slave address
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation
  IE2 |= UCB0TXIE;                          // Enable TX ready interrupt
  UCB0CTL1 |= UCTR + UCTXSTT;               // I2C TX, start condition
  UCB0TXBUF = 0x010;                        // Write DAC control byte
  __bis_SR_register(CPUOFF + GIE);          // Enter LPM0 w/ interrupts
}

// USCI_B0 Data ISR
#pragma vector = USCIAB0TX_VECTOR
__interrupt void USCIAB0TX_ISR(void)
{
  static unsigned char ByteCtr;

  UCB0TXBUF = Sine_Tab[ByteCtr++];          // Transmit data byte
  ByteCtr &= 0x1f;                          // Do not exceed table
}

另外,再检查一下I2C模块是否配置正确。

使用特权

评论回复
地板
wongk2009| | 2012-6-11 17:40 | 只看该作者
同学应该是用那个2619的开发板吧?
告诉你,那个开发板的AT24C01是不行的,你可以查一下它的VCC,只有零点几伏。
我自己焊过一个24C02,程序运行完全没有问题。

毫无意外这位同学应该是广工的同学。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

168

主题

1677

帖子

1

粉丝