Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430G2553 I2C模块读取ADT7410 Chip ID结果不正确

$
0
0

Hi, All !Happy New Year!

在调试MSP430G2553的I2C外设读取ADT7410的CHIP ID时,结果不正确。怀疑是配置错误或配置的顺序不正确。困扰很久了,我需要帮助。

芯片:MSP430G2553

IDE:CCS V7.4

ADT7410是一个2C接口温度传感芯片,同MSP430一样,支持低功耗特性,但在调试期间,我先不考虑能耗优化,先用I2C读取到Chip ID,再做软件设计。ADT7410的设备地址是0x4B,我已经访问到了。Chip ID的寄存器地址是0x0B,Chip ID的是11001XXX(MSB),后三位是芯片版本号,不固定。用我写的代码读取的值是0x0C,也就是说,我读错了。原代码和调试结果如下,请各位工程师帮忙看一眼,看看错在哪了,谢谢!

#include <msp430.h>
#include "msp430g2553.h"
#include "12864_3xian.h"//Function delay1000(DELAY) in this file
#define DELAY  2

void LED2_ON(void);
void LED3_ON(void);
void LED2_OFF(void);
void LED3_OFF(void);

int 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
  P3DIR |=BIT2+BIT3;//BIT2 BIT3 is LED on Board

  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 = 0x4B;                         // ADT7410 I2C address is 0x4B
  UCB0CTL1 &= ~UCSWRST;                     // Clear SW reset, resume operation

  unsigned int temp;

  while (1)
  {

    UCB0CTL1 |= UCTR;//设置为发送模式
    delay1000(DELAY);
    UCB0CTL1 |= UCTXSTT;//先产生起始条件
    UCB0TXBUF = 0x0B;//再往BUF中写入待发送的数据。ADT7410的Chip ID地址是0x0B
    while (UCB0CTL1 & UCTXSTT);//数据发送完成后,UCTXSTT会被置0。即等待直到发送完成。
    UCB0CTL1 |= UCTXSTP;//完成后往总线发送停止条件,结束本次写操作

    //After write ,blanking LED for easy debug
    LED2_ON();
    delay1000(DELAY);
    LED2_OFF();
    delay1000(DELAY);

    UCB0CTL1 &= ~UCTR;//设置为接收模式
    delay1000(DELAY);
    UCB0CTL1 |= UCTXSTT;//先产生起始条件
    while(UCB0CTL1 & UCTXSTT)//等待ADT7410的ACK
    temp = UCB0RXBUF;//读取缓冲区
    UCB0CTL1 |= UCTXSTP;//完成后往总线发送停止条件,结束本次读操作
    delay1000(DELAY);

  }
}

void LED2_ON(void)
{
    P3OUT |=BIT2;
}
void LED3_ON(void)
{
    P3OUT |=BIT3;
}
void LED2_OFF(void)
{
    P3OUT &=~BIT2;
}
void LED3_OFF(void)
{
    P3OUT &=~BIT3;


Viewing all articles
Browse latest Browse all 3634

Trending Articles