工具/软件:Code Composer Studio
大家好、我一直在使用 MPU6050、按照 Arduino 配置、我能够设置0x6B 寄存 器、MPU6050似乎正在向我发送 ACK、但从寄存器为0x3B 和0x3C 的 x 轴加速器获取数据时遇到问题。 输出(pui32DataRx)始终为0、我不知道错误的位置。 这里是代码、有人配置了 TM4C129、以便使用 I2C 与 MPU6050配合使用??
#include
#include
#include "inc/hw_i2c.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctio.uarth"
#include "UART"
//
//要发送的 I2C 数据包数量。
////
*****************
#define NUM_I2C_DATA 3
#define SLAVE_ADDRESS 0x68
uint32_t ui32SysClock;
uint32_t pui32DataTx[NUM_I2C_DATA];
uint32_t pui32DataRx[2];
uint32_t ejeX;
int end = 0;
//*********
//
//配置 I2C0主机和从机,并使用环回模式连接它们。
////
*****************
int
main (void)
{
uint32_t ui32Index;
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//使用前必须启用 I2C0外设。
SysCtlPeripheralEnable (SYSCTL_Periph_I2C0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
GPIOPinConfigure (GPIO_PB2_I2C0SCL);
GPIOPinConfigure (GPIO_PB3_I2C0SDA);
GPIOPinTypeI2CSCL (GPIO_PORTB_BASE、GPIO_PIN_2);
GPIOPinTypeI2C (GPIO_PORTB_BASE、GPIO_PIN_3);
// I2CLoopbackEnable (I2C0_BASE);
I2CMasterInitExpClk (I2C0_BASE、ui32SysClock、false);
I2CSlaveEnable (I2C0_BASE); //洛普伊多高贵
I2CSlaveInit (I2C0_BASE、SLAVE_ADDRESS); //Setea la dirección ó n del esclavo
I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、FALSE); //假的 escribir al esclavo,真的 para leer al esclavo
//初始化要发送的数据。
pui32DataTx[0]= 0x6B;
pui32DataTx[1]= 0x00;
for (ui32Index = 0;ui32Index < 2;ui32Index++)
{
I2CMasterDataPut (I2C0_BASE、pui32DataTx[ui32Index]); //将要发送的数据放在数据寄存器中
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_SEND);
while (!(I2CSlaveStatus (I2C0_BASE)& I2C_SLAVE_ACT_RREQ)// espera ACK del esclavo del recoissimiento de datos
{
}
pui32DataRx[ui32Index]= I2CSlaveDataGet (I2C0_BASE);// Lee la data del esclavo
while (I2CMasterBusy (I2C0_BASE))//espera que el modulo maestro termine con la transferencia
{
}
end++;
}
I2CMasterSlaveAddrSet (I2C0_BASE、SLAVE_ADDRESS、TRUE); //假的 escribir al esclavo,真的 para leer al esclavo
while (1)
{
I2CMasterDataPut (I2C0_BASE、0x3B); //将要发送的数据放在数据寄存器中
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_Receive);
while (!(I2CSlaveStatus (I2C0_BASE)& I2C_SLAVE_ACT_TREQ)// espera ACK del esclavo del recoissimiento de datos
{
}
pui32DataRx[0]= I2CMasterDataGet (I2C0_BASE)<<8;
I2CMasterDataPut (I2C0_BASE、0x3C); //将要发送的数据放在数据寄存器中
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_Receive);
while (!(I2CSlaveStatus (I2C0_BASE)& I2C_SLAVE_ACT_TREQ)// espera ACK del esclavo del recoissimiento de datos
{
}
pui32DataRx[1]= I2CMasterDataGet (I2C0_BASE);
ejeX = pui32DataRx[0]|pui32DataRx[1];
}
// return (0);
}
