工程上传了附件,下面是主函数
int
main(void)
{
char a[2];
int_fast32_t i32IPart[16], i32FPart[16];
uint_fast32_t ui32Idx, ui32CompDCMStarted;
float pfData[13];
float *pfAccel, *pfGyro, *pfMag, *pfEulers, *pfQuaternion;
//
// Initialize convenience pointers that clean up and clarify the code
// meaning. We want all the data in a single contiguous array so that
// we can make our pretty printing easier later.
//
pfAccel = pfData;
pfGyro = pfData + 3;
pfEulers = pfData + 6;
pfQuaternion = pfData + 9;
//
//ÉèÖÃϵͳʱÖÓΪ40MHz
//
ROM_SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
SYSCTL_OSC_MAIN);
//
// ʹÄÜGPIOBÖжÏ
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//
// ³õʼ»¯UART.
//
ConfigureUART();
//
// ´òӡʾÀýÐÅÏ¢
//
UARTprintf("\033[2JMPU6050 Raw Example\n");
//
// ÉèÖÃÄ¿±ê°åÑÕÉ«Ëã·¨
//
g_pui32Colors[RED] = 0x8000;
g_pui32Colors[BLUE] = 0x8000;
g_pui32Colors[GREEN] = 0x0000;
//
// ³õʼ»¯RGBÇý¶¯
//
RGBInit(0);
RGBColorSet(g_pui32Colors);
RGBIntensitySet(0.5f);
RGBEnable();
//
// ʹÄÜI2C3ÍâÉè
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C3);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
//
// ÅäÖÃI2C3µÄIOΪPD0ºÍPD1
//
ROM_GPIOPinConfigure(GPIO_PD0_I2C3SCL);
ROM_GPIOPinConfigure(GPIO_PD1_I2C3SDA);
//
// Ñ¡ÔñIO¸´Óù¦ÄܵÄÀà±ð
//
GPIOPinTypeI2CSCL(GPIO_PORTD_BASE, GPIO_PIN_0);
ROM_GPIOPinTypeI2C(GPIO_PORTD_BASE, GPIO_PIN_1);
//
// ÉèÖÃÖжÏÒý½Å£¬²¶×½MPU6050µÄÖжÏÐźÅ
//
ROM_GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_2);
GPIOIntEnable(GPIO_PORTB_BASE, GPIO_PIN_2);
ROM_GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_FALLING_EDGE);
ROM_IntEnable(INT_GPIOB);
//
// Keep only some parts of the systems running while in sleep mode.
// GPIOB is for the MPU6050 interrupt pin.
// UART0 is the virtual serial port
// TIMER0, TIMER1 and WTIMER5 are used by the RGB driver
// I2C3 is the I2C interface to the ISL29023
//
ROM_SysCtlPeripheralClockGating(true);
ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_GPIOB);
ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0);
ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER0);
ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_TIMER1);
ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_I2C3);
ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_WTIMER5);
//
// ʹÄÜÖжϴ¦ÀíÆ÷
//
ROM_IntMasterEnable();
//
// ʹÄÜI2C3ÍâÉè
//
I2CMInit(&g_sI2CInst, I2C3_BASE, INT_I2C3, 0xff, 0xff,
ROM_SysCtlClockGet());
//
// ³õʶ»¯MPU6050Çý¶¯
//
MPU6050Init(&g_sMPU6050Inst, &g_sI2CInst, MPU6050_I2C_ADDRESS, MPU6050AppCallback, 0);
MPU6050AppI2CWait();
// g_sMPU6050Inst.pui8Data[0] = MPU6050_CONFIG_DLPF_CFG_94_98;
// g_sMPU6050Inst.pui8Data[1] = MPU6050_GYRO_CONFIG_FS_SEL_250;
// g_sMPU6050Inst.pui8Data[2] = MPU6050_ACCEL_CONFIG_AFS_SEL_2G;
// MPU6050Write(&g_sMPU6050Inst, MPU6050_O_CONFIG, g_sMPU6050Inst.pui8Data, 3,
// MPU6050AppCallback, 0);
// MPU6050AppI2CWait();
MPU6050ReadModifyWrite(&g_sMPU6050Inst, MPU6050_O_ACCEL_CONFIG,
~MPU6050_ACCEL_CONFIG_AFS_SEL_M,
MPU6050_ACCEL_CONFIG_AFS_SEL_4G, MPU6050AppCallback,
0);
MPU6050AppI2CWait();
//
// ʹÄÜÉÁ˸ָʾ³õʼ»¯Íê³É
//
RGBBlinkRateSet(1.0f);
ui32CompDCMStarted = 0;
while(1)
{
MPU6050DataRead(&g_sMPU6050Inst, MPU6050AppCallback, 0);
MPU6050AppI2CWait();
MPU6050DataAccelGetFloat(&g_sMPU6050Inst, pfAccel, pfAccel + 1, pfAccel + 2);
MPU6050DataGyroGetFloat(&g_sMPU6050Inst, pfGyro, pfGyro + 1, pfGyro + 2);
int_fast32_t fAccel[3], fGyro[3];
fAccel[0] = (int32_t)(pfAccel[0]);
fAccel[1] = (int32_t)(pfAccel[1]);
fAccel[2] = (int32_t)(pfAccel[2]);
fGyro[0] = (int32_t)(pfGyro[0]);
fGyro[1] = (int32_t)(pfGyro[1]);
fGyro[2] = (int32_t)(pfGyro[2]);
UARTprintf("\033[1;14H%010d %010d %010d\n\n", fAccel[0], fAccel[1],fAccel[2]);
UARTprintf("\033[2;14H%010d %010d %010d\n\n", fGyro[0], fGyro[1], fGyro[2]);
}
}