This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FR5969:使用I2C读取加速计DEG_ID

Guru**** 2614265 points
Other Parts Discussed in Thread: MSP430FR5969

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/665646/ccs-msp430fr5969-reading-accelerometer-dev_id-by-using-i2c

部件号:MSP430FR5969

工具/软件:Code Composer Studio

HII..这是harikrishna paritala。

我对I2S协议的使用不熟悉,并且正在将我的MCU (msp430fr5969)与加速度计连接...因此,当我读取加速度计的dev_id时,未获得值...通过下面的代码,我曾使用i2c协议读取值,而不使用interupts ...任何人请帮助读取值和 如果可能,请更正我的代码并添加我忘记的说明...

#include <MSP4S.h>
RXCHAR数据;
#define REG_ADD 0x00
#define slaver_Add 0x3B
void clock_init();
void Init_I2I();
char recieve(unsigned char reg_addr);
内部主(无效)

易失性字符REG_VALUE;
挥发字符值;

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM2;
P1OUT &=~BIT0;//透明的WFP 1.0 输出锁存器
P1DIR || BIT0;//用于LED
P1SEL1 || BIT6 | BIT7;// I2C引脚
__bis_sr_register (GIE);
Clock_init();
init_I2C ();
__DELAY周期(1万);
while (I2C_NOTREATE());
__DELAY周期(1000);
REG_Value=接收(REG_ADD);
IF (REG_VALUE!= 0x00)
Value=reg_value;
返回0;
}
void Init_I2I()

UCB0CTLW0 |= UCSWRST;//已启用软件重置
UCB0CTLW0 |= UCMODE_3| UCMST | UCSYNC;// I2C模式,主模式,同步
UCB0CTLW1 |= UCASTP_2;//生成自动停止
UCB0CTLW0|=UCSSEL_2;//到达UCB0TBCNT之后
UCB0BR0 = 0x0010;//波特率= SMCLK / 10
UCB0BR1=0;
//UCB0TBCNT = 0x0005;//要接收的字节数
UCB0I2CSA = SLAND_ADD;//从地址
UCB0CTL1 &=~UCSWRST;
}
int I2C_NOTREATE()

IF (UCB0STATW&UCBBUSY)
返回1;
否则
返回0;
}
char recieve(unsigned char reg_addr)

字符recieve_byte;
while (UCB0CTLW0&UCTXSTP);//确保已发送停止条件
UCB0CTLW0|=UCTXSTT|UCTR;//I2C起始条件带有用于传输的uctr标志
while (UCB0IFG&UCTXIFG0);
UCB0TXBUF=REG_ADDR;
//在txbuf中写入寄存器地址
__DELAY周期(1000);
while (UCB0IFG&UCTXIFG0);//等待txbuf为空并传输
UCB0CTLW0&=~UCTR;//清除接收的传输标志
UCB0CTLW0|=UCTXSTT|UCTXNACK;//I2C起始条件,带有一个字节的nack读//类似重新发送...
while (UCB0CTLW0&UCTXSTT);//start conditon sent?rxbuf full
recieve_byte=UCB0RXBUF;
UCB0CTLW0|=UCTXSTP;//I2C停止条件
返回recieve_byte;
}
void clock_init()

CSCTL0_H = CSOKEY >> 8;//解锁CS寄存器
CSCTL1 = DCOFSEL_0;//将DCO设置为1MHz
CSCTL2 =拉美经济体系_ LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVs__1 | DIVM__1;//设置所有分隔线
CSCTL0_H = 0;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Harikrishna,您好!

    这里提供了一个代码示例 ,它演示了I2C主控如何使用中断从I2C从属设备读取寄存器。 您可以尝试使用以下函数调用来读取加速计数据:

    I2C_Master_ReadReg (0x3B,0x00,1); 

    确保SCL和SDA通信线路也具有10k上拉电阻。

    此致,

    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    部件号:MSP430FR5969

    工具/软件:Code Composer Studio

    HII..这是harikrishna

    我正在命令使用msp430fr5969中的i2c协议读取adxl345加速计的设备ID。所以,任何人都可以通过program...it来获得很大帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Harikrishna,您好!

    您是否已查看Ryan链接到的代码示例? 只要您使用为该设备提供的文档,与adxl345接口的工作方式与一般示例相同。

    此致,
    Nathan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    HII..Nathan sigel
    这是harikrishna。我想通过使用计时器(TIMERA0)在16 MHz频率下生成5分钟的延迟,我怎么做that..please给我代码example...it可以帮我很多
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Harikrishna,您好!

    请参阅Ryan链接到的示例。 这里还有一些计时器示例。 您应该能够修改其中一个以生成5分钟的延迟。

    此致,
    Nathan