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.

[参考译文] LAUNCHXL-F28379D:MPU6050和 LaunchPad 28379d 之间的通信

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/859733/launchxl-f28379d-communication-between-mpu6050-and-launchpad-28379d

器件型号:LAUNCHXL-F28379D

您好!

我正在尝试从 MPU6050获取数据、但它不会在图中显示任何内容。 我使用的是 Altair Embed、它与另一个 Launchpad F28377S 配合使用。  

n´t 是否已将与该 Launchpad 的 I2C 通信拧紧或进行其他操作。  

我所做的连接是:

SDA - GPIO104 -引脚10 (J1)

SCL - GPIO105 -引脚9 (J1)

我将展示 Embed 生成的代码

/*** Altair Embed 2019.0.1 Build 41 Automatic C Code Generator ***/*
Outputfor FC.VSM at Thu 11月14日20:13:22 2019 */*
Target:F280x[F28379cpu1]*/

#include "math.h"
#include "cgen.h"
#include "cendl.h"
#include "DEC2000_0




、0_zh";#define 0、0、0_0、0_0、0_zh_0_zh_c2000_zh_serial;#define 0、0、0、0_0、0_zh_c2000
extern int _i2cMaxFifo=4;
静态 CGDOUBLE GXS=0;
静态 CGDOUBLE fcang=0;

静态 CGDOUBLE _XF_state17[1]=0};
静态 CGDOUBLE _XF_XDOT_17;

//
静态空 subsystem3()
{
if (1)
i2c0PutChar(107 );
if (1)
i2c0PutChar(0);
if (1)
{
I2CSARA = 0x68;//设置从器件地址
I2CCNTA = 0x2;//设置 msg len
I2CMDRA = 0x2E20;//开始 Tx
}


}
静态空子系统37 (空);
静态信号_vsOutSig37[8]={{T_scaled_INT、.U.scaledInt={16、16、0}}、{T_scaled_INT、.U.scaledInt={16、16、0}}、{T_scaled_INT、.U.scaledInt ={16、16、0}、}、{T.scaledInt}、{16、 {T_scaled_int,.U..scaledInt={16,16,0},{T_scaled_int,.U.scaledInt={16,16,0},{T_scaled_int,.U..U.scaledInt={16,16,0},{T_scaled_Int={16,16,0},{T_subscaledInts&}{1,37>subscale0*/subscale0}}}}{&subscale0}}}{&subscale0}}{&subscale0}}}{&subscale0}}{&s&s&subscale0}}}}{&subscale0}{&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&s&subscale0>subscale0}












hSubsystemCG37->outSigS[5].U.scaledInt.val = i2c0GetChar (&i2cRx0);
hSubsystem37->outSigS[6]。U.S.U.S.scaledInt.val = i2c0GetChar (&i2cRx0);hSubsystem37->outSigST_UXF[0_static



=_ud_ble_dot







1;_udeXF5_ud_0_ble_dot =静态0x53_ud_ud_0_ble_ud_ud_ble_0_ud_dot;i205_ud_ble_ud_ble_dose0_ud_ble_ble_static =_d0_d0_ud_d0_ble_d0_d0_ud_ble_ud_ble_static}

静态 T_SIG_SCALE_INT _INSig_53_2={T_SCALE_INT、16、0};
静态 T_SIG_double _inSig_53_3={T_double、0};
静态 T_SIG_缩 放_INT 53_4={T_sigure_int、16、0、0、0、53}*

静态




信号


;静态 TSIG_0、53_INS0、53*、INS0、INS0、53_INSIN *、54_INS0、54_INSIN *、54_INS0、53*、INSIN




float t77;
静态 CGDOUBLE _Y_83=0;
_Y_59 =_XF_CG59[0];
t74 =((CGDOUBLE)(简短) hSubsystem53->inSigS[0]->U.ScaledInt.val);
t75 =(((CGDOUBLE)(short) hSubsystem53->inSigS[0]->U.SigedInt.state(<.XF=(>.stateInt.state(<.XF=.INT)<.state.NO.NO.NO.XF=(<.NO.XF=.NO.NO.NO.NO.NOT_XF=
double) t74)+-169.2)*6.103515625e-05),(0.+(((((((((((((((((((((((((). 双精度型) t75)+-21)*6.103515625e-05)))) *57.295779513082 /*弧度=>度*/)-_XF_CG84[0]*-0.99;
_Y_84 =_XF_XDOT_84*0.01;
t77 =(stateDOUBLE)(短整型) hSubsystem53->inSigS[3]->U.GXedInt( scalval
(=S) double) t77)+456。)*0.0076335877862595);
_XF_XDOT_83 = GXS -_XF_state83[0]*-0.99;
_Y_83 =_XF_XD_83*0.00396;
fcang =(_Y_84+_Y_83);
if (+=250_Cnaresquared>1:90?t1)
{GPASET = 0x2000L;}
否则
{GPACLEAR = 0x2000L;}
if ((((int)_Y_59))
{GPCSET = 0x800000L;}
否则
{GPCCLEAR = 0x800000L;}
hSubsystem53->outSigS[0].U.double = fcang;

_XF_state84[0]=_XF_XDOT_84;
_XF_state83[0]=_XF_XF_XT_59
=(1.+-(_0、0_0



、0_0、0_0、0、0_0、0_ARF);0、0_0 =
0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_ARF = 0、0_0、0_0、0_0、0_0 = 0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0、0_0








/* MPU */
INTERRUPT void cgMain()
{
静态 CGDOUBLE_Y_17=0;
int T34;
静态无符号_pulseCnt53=2;
TIMER2TCR = TIMER2TCR;
_Y_17 =_XF_state17[0];
if ((((I2CA_RX_RK_LEN (i2cRx0))>=1))
){/* Read_data *
subsystem37();
}T34
=((hSubsystem37->outSigS[4].U.scaledInt.val <<(简短) 8)+ hSubsystem37->outSigS[5].U..U.scaledInt.val);
if (++_pulseCnt53 > 1?_pulseCnt53=0、0*
)/*控制器组0
hSubsystem53->inSigS[0]->U.scaledInt.val =(hSubsystem37->outSigS[0].U.ScaledInt.val <<(简短) 8)+ hSubsystem37->outSigS[1].U.ScaledInt.val);
hSubsystem53->inSigS[1]->U.scaledInt.val =((hSubsystem37->outSigS[2].U.scaledInt.val <<(简短) 8)+ hSubsystem37->outSigS[3].U.scaledInt.val);
hSubsystem53->inSigS[2]->U.double =((((CGDOUBLE) T34)*0.0029411764705882)+36.53);
hSubsystem53->inSigS[3]->U.scaledInt.val =((hSubsystem37->outSigS[6].U.scaledInt.val <<(short) 8)+ hSubsystem37->outSigS[7].U.scaledInt.val);
subsystem53();
}
if (1)
i2c0PutChar( 61 );
if (1)
{
I2CSARA = 0x68;//设置从器件地址
I2CCNTA = 0x1;//设置 msg len
I2CMDRA = 0x2620;//开始 Tx
}
如果(((int)_Y_17))
{
I2CSARA = 0x68;//设置从器件地址
I2CCNTA = 0x8;//设置 msg len
I2CMDRA = 0x2C20;//开始 Rx
}
;
sim->outSigS[0].U.double = hSubsystem53->outSigS[0].U.double;

_XF_XDOT_17 =(1.+-(_Y_17));
_XF_state17[0]=_XF_XDOT_17;
endOfSampleCount = TIMER2TIM;
if (TIMER2TCR&0x8000)
setTgtStatus (VE_STAT_TGT_over_framing);

}

void main ()
{
EALLOW;
SYSPLLCTL1 = 0;
CLKSRCCTL1 = 2;//内部 OSC 1
CLKSRCCTL2 = 0;//内部 OSC 2
SYSPLLLULT = 0x14;//将 PLL 设置为


1 SYSPLLCLL = 0;SYSPLCTL = 0;//内部 TSL = 20XCLL = 0;SYSPLMCTL = 1 SYSPL= 0;SYSPL= 1 SYSPLLS = 0;SYSPLMCTL = 0!(当 SYSPL= 1时等待 SYSPL= 1) SYSPCL
for (divSel =63;divSel >=0;divSel--)
{SYSCLKDIVSEL = DIVSSEL;//斜升频率
SysCtlDelay (15);
}
}
SYSPLLCTL1 = 3;//使用 PLL
PERCLKDIVSEL = 0x10;
PCLKCR0 = 0x20;
PCLKCR1 = 0x1;
PCLKCR9 = 0x1;
EDIS;
hSubsystem37 = cgInitSubsystem (hSubsystem37,&tSubsystem37);
hSubsystem53 = cgInitSubsystem (hSubsystem53,&tSubsystem53);
simInit(&尖 点);
EALLOW;
GPADIR = 0x2000;
GPACSEL1 = 0x2222222222;
GPACSEL2 = 0x22022222;
GPACSEL3 = 0x22222222;
GPACSEL4 = 0x2222222222;
GPBQSEL1 = 0xF00000;
GPBCSEL1 = 0x22222222;
GPBCSEL2 = 0x22222222;
GPBCSEL3 = 0x22222222;
GPBCSEL4 = 0x22222222;
GPCDIR = 0x800000;
GPCCSEL1 = 0x22222222;
GPCCSEL2 = 0x22222222;
GPCCSEL3 = 0x2222222;
GPCCSEL4 = 0x22222222;
GPDMUX1 = 0x50000;
GPDPUD = 0xFFFFFFCFF;
GPDCSEL1 = 0x22222222;
GPDCSEL2 = 0x22222200;
GPDCSEL3 = 0x22222222;
GPDCSEL4 = 0x22222222;
GPECSEL1 = 0x22222222;
GPECSEL2 = 0x22222222;
GPECSEL3 = 0x22222222;
GPECSEL4 = 0x2222222222;
GPFCSEL1 = 0x22222222;
GPFCSEL2 = 0x22222222;
EDIS;
I2CPSCA = 50;
I2COARA = 0;//设置自己的地址
I2CCLKLA = 10;
I2CCLKHA = 5;
I2CMDRA = 0x20;//从复位
中取出 I2C I2CFFTXA = 0x4000;//复位 TX FIFO
I2CFFTXA = 0x6000;//启用 TX
FIFO I2CFFRXA = 0x64;//复位 RX
= 0x64; //启用 RX FIFO
startSimDsp();
installInterruptVec (8、2、&i2c0rx_ISR);
enable_PIE_INT (8);
subsystem3 ();/* Init */
installInterruptVec (-2,7,&cgMain);
TIMER2PRD = 0x1a80;// 32位定时器周期低
TIMER2PRDH = 0x6;// 32位定时器周期高
TIMER2TCR |= 0x4020;//中断使能,定时器
复位 PIR=


0x2000

;中断=中断 //在 PC 握手完成
之前禁用中断 EALLOW;
PCLKCR0 |= 0x80000;//启动所有 PWM 计时器
EDIS;
dspWait();
}

我知道这可能是一个上拉电阻器问题、但它也不起作用、同样、当您尝试使用示波器从 SCL 和 SDA 端口获取信号时、它甚至不会显示噪声信号。

如果你能帮助我,我会非常感激

提前感谢。

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

    由于美国假期、您可以在12月3日之前收到回复

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

    尊敬的 Julian:

    我不熟悉 Altair 的 Embed 平台。 您说这个代码适用于 f28377S 吗? 相同的硬件配置?

    SDA/SCL 信号的状态是什么? 即它们是高电平状态还是低电平状态? 如果在示波器上设置了触发器、您是否看到任何信号触发?

    您是否尝试过调试软件、设置断点或单步执行? 代码执行是否滞留在某个位置?

    您是否使用了外部上拉电阻器? C2000 F28379D 具有内部上拉电阻器、如果需要、请检查 GPAPUD 寄存器。

    最棒的

    Kevin

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

    Julian、

    再次与您核实、看看您是否能够查看 Kevin 的问题或从您的一方获得任何新数据。  我将此标记为 TI 认为已解决、但如果您回复、则会在您的帖子结束时提醒我们

    最棒的

    Matthew