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/MSP430G2553:与心跳传感器和加速计连接(MPU-6050)

Guru**** 2502205 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/662812/ccs-msp430g2553-interfacing-with-a-heartbeat-sensor-and-accelerometer-mpu-6050

部件号:MSP430G2553

工具/软件:Code Composer Studio

您好!

所以我尝试使用一个心跳传感器和一个加速计(MPU-6050)来连接MSP430G2553。

我想合并这两个代码,但我在理解代码时遇到了困难。 我查找了变量名称,描述只是告诉我变量的全名。 是否有地方我可以获得文档来了解这些内容?

加速计必须是WFP 1.6 和WFP 1.7

心跳传感器必须是WFP 1.0 到WFP 1.5


心跳传感器的代码如下所示:

#include "msp430g2253.h"

//变量
int ADC[50]={0};//设置10个整数的数组,值为零
int avg_ADC = 0;

//函数原型
void ADC_Setup();
void ADC_Sam10();

void main()
{
WDTCTL = WDTPW + WDTHOLD;//停止WDT_Setup()
; // ADC_setup的函数调用

,同时(1){

长adctot =0;
ADC_Sam10();//函数调用ADC_SAMP
//将所有采样数据除以10,以找到平均
int I =0;
for (I =0;I <= 49;I++){
adctot = adctot + ADC[I];
}
AVG_ADC = adctot/50;
}


// ADC10中断服务例程
#pragma vector=ADC10_vector
__interrupt void ADC10_ISR(void)
{
__BIC_SR_register_on_exit(CPUOFF);//清除来自0(SR)的CPUOFF位




// ADC设置功能c1020
= ADSC0 + ADC102
//采样和保持时间+ ADC10打开+中断启用
ADC10DTC1 = 0x32;// 1000转换
ADC10AE0 |= 0x01;// WFP 1.0 ADC选项选择
}//

ADC样本转换功能
void ADC_Sam10()
{
ADC10CTL0 &=~ENC;//
禁用转换,同时使用(ADC10CTL1 & Busy; //如果ADC10正忙
ADC10SA =(int)ADC;//将数据传输到下一个阵列(DTC自动增量地址)
ADC10CTL0 |= ENC + ADC10SC;//启用转换和转换启动
__bis_sr_register(CPUOFF + GIE);//低功率模式0,ADC10_ISR
},请稍候 

到目前为止,这种方法是有效的。 我们针对加速计的代码如下所示:

#ifndef I2C_USI_H
#define I2C_USI_H

// Address
#define MPU6050_address 0x68
#define BQ3.2万_address 0x68
#define DS1307_address 0x68
#define LM92_address 0x48
/********************************************************************** \
*原型*
\********************************************************************** /
void Byte_USI_Init(unsigned char addr);//Init





Write void I2C_USI_Set_Address(unsigned char addr);//更改从属地址char I2C_USI_READ_Byte(unsigned char address);//读取1字节//读取多个unsigned char字节/u2I2C_USCH_Read_Word (unsigned char,unsigned char,unsigned char,unsigned char,dr,u2I2I2I,unsigned char,unsigned char,unsigned char,unsigned char,unsigned char,dr,d
\
*函数*
\********************************************************************** /


void I2C_USI_Init(unsigned char addr)
{
P1SEL |= BIT6 + BIT7;//将I2C引脚分配给USSCI_B0
P1SEL2|= BIT6 + BIT7;//将I2C引脚分配给USSCI_B0
UCB0CTL1 || UCSWRST;//启用SW重置
UCB6 + UCS10+ UCSCR1F; UCSEL_UCSF_UCSR1CST+UCSF0
//使用SMCLK,keep SW reset
UCB0BR0 = 40;// fSCL = SMCLK/40 =~400kHz
UCB0BR1 = 0;
UCB0I2CSA = addr;//设置从属地址
UCB0CTL1 &=~UCSWRST;//清除SW reset,恢复操作


void I2C_UTCS=地址UTCS1= UTCS1UTCH


//设置从属地址
UCB0CTL1 &=~UCSWRST;//清除软件重置,恢复操作
}

unsigned char I2C_USI_READ_Byte (unsigned char地址)
{
while (UCB0CTL1 & UCTXG2);
UCB0CTL1 |= UCTR + UCTXSTT;// CBTX,start

while (!(!(IFSTL1&UCT1CSTL1= UCT1G; UCTXTP= UCT1CTOF= UCTXG= UCTXG; UCTXTP=




UCT0~UCT1G= UCTXCTXSTUCT1G= UCTXSTUCTXSTUCT1))
// I2C restart
IFG2 &=~UCB0TXIFG;

while (UCB0CTL1 & UCTXSTT);
UCB0CTL1 |= UCTXSTP;
return UCB0RXBUF;
}

unsigned char I2C_USI_READ_Word( unsigned char Addr_Data,unsigned char *Data,CBchar


Loop Length ){ CBTI=0; ctrC + UCT1; UCT1CST1; UCT1; UCT1= UCT1; UCTX; UCT1CTCH; UCT1CST1; UCTUCT1C; UCTUTC= UCTU
// I2C TX,启动条件

while (!(IFG2&UCB0TXIFG);
IFG2 &=~UCB0TXIFG;//清除USCI_B0 TX int flag
IF (UCB0STAT & UCNACKIFG)返回UCB0STAT;
UCB0TXUF = ADDR_Data;

while (!(TXI_B0


和UCBI) I2= UCBI
;UCSTUTC0I ~UTCU1= UCBI;UTC0I
~UTCG = UTCUTCU1G;UTCU1G;UCBUTC0I UTCU1= UTCUTC0STAT= UCBI;UCBUCBUTC0I0 UCBUCBI UTC0STAT= UCBI;UCBU // Clear USI_B0 TX int flag
while (UCB0CTL1 & UCTXSTT);//循环直到I2C STT被发送
(i=0;I<(Length-1);I+){

while (!(IFG2&UCB0XBIFG));
IFCBI&=~UCB0STP IFG1;// clear UCTXF=



UTX0I= UCTX2(UCST2; U= USC2= UTC0I=UTC0I=UTC0I=UTC0XF_USCI=~UTC0XF= USTXF_USCI= USCI= USTX0I= USTX0I= USCI= USTXF= USCI= USCI= USTXF=
//第一个TX
数据后的I2C停止条件[Length-1]= UCB0RXBUF;
IFG2 &=~UCB0TXIFG;//清除USIC_B0 TX int标志
返回0;
}

未签名的I2C CHAR_USIC_Write_Byte (未签名的字符地址,未签名的字符数据)
{
while (UCB0CTCBCTR & UCTXST1);UIFUTCF=
UF0CSTUF=

UTC0CSTUF; UCSTUF= UF0CSTUCSTU1UF= UCSTUC0CSTUF= UC0CSTUF= UCSTUF0CSTUF0CSTUF; UCSTUF= UF0




while (!(IFG2&UCB0TXIFG));
IF (UCB0STAT & UCNACKIFG) return UCB0STAT;
UCB0TXBUF = data;

while (!(IFG2&UCB0TXIFG));
IF (UCB0SCI & UCNACKIFG) return UCB0STAT; UCB0TX0STAT= data;
UCB0CTI2= UCB0I2; UCB0I2=
UCB0~UCT0STD= UCT0I2= UCT0I2F= UCT0I2= UCB0I2= UCB0STUCB0I2= U


我想合并这两个代码,但我在理解代码时遇到了困难。 我查找了变量名称,描述只是告诉我变量的全名。 是否有地方我可以获得文档来了解这些内容?

谢谢!
Vidhu Appalaraju

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

    您好,

    将代码发布到论坛时,请单击"插入代码,附加文件等..."链接,使用高级菜单。 从该菜单中单击</>按钮,然后以这种方式插入代码,以便对其进行格式化以提高可读性。 我已经手动编辑了您的帖子以执行此操作。

    至于您的问题,一个传感器似乎是由ADC完成的,另一个是由I2C接口完成的。 合并这些问题时,我看不出有什么问题。 这两个文件中都使用了一些变量,但您必须阅读文档中的此代码的获取位置,以了解有关此代码的详细信息。 您正在查看的大多数代码是MSP430寄存器定义和寄存器中特定位的标志屏蔽。要了解有关这些定义的更多信息,您需要查看MSP430用户指南。