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;


