//在main.c中被main_periodic()调用 void imu_periodic(void) { //imu_init()中imu_aspirin2的状态已设为Aspirin2StatusUninit if (imu_aspirin2.status == Aspirin2StatusUninit) { mpu_configure(); imu_aspirin2.status = Aspirin2StatusIdle;//imu空闲 aspirin2_mpu60x0.output_length = 22;//读和写的字数 aspirin2_mpu60x0.input_length = 22; //mpu的读缓冲区的buf[0]为中断寄存器状态和spi读 aspirin2_mpu60x0.output_buf[0] = MPU60X0_REG_INT_STATUS + MPU60X0_SPI_READ; for (int i=1; i<aspirin2_mpu60x0.output_length; i++) { aspirin2_mpu60x0.output_buf[i] = 0;//剩余的21个缓冲区存放为0 } } else { spi_submit(&(MPU6000_SPI_DEV), &aspirin2_mpu60x0); } }
void imu_periodic(void) { if (imu_aspirin2.status == Aspirin2StatusUninit) { mpu_configure(); // imu_aspirin_arch_int_enable(); imu_aspirin2.status = Aspirin2StatusIdle; aspirin2_mpu60x0.length = 22; aspirin2_mpu60x0.mosi_buf[0] = MPU60X0_REG_INT_STATUS + MPU60X0_SPI_READ; for (int i=1;i<aspirin2_mpu60x0.length;i++) { aspirin2_mpu60x0.mosi_buf[i] = 0; } } else { // imu_aspirin2.imu_tx_buf[0] = MPU60X0_REG_WHO_AM_I + MPU60X0_SPI_READ; // imu_aspirin2.imu_tx_buf[1] = 0x00; spi_rw(&aspirin2_mpu60x0); } }