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.
您好!
我正在尝试从 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