Переход на C++

Очередная попытка реализовать чтение IMU как в рабочей прошивке оказалась провальной.
Поэтому было принято решение перенести проект на C++ и писать его подобно рабочей прошивке.
Реализован драйвер для I2C.
Добавлены файлы интерфейса IMU и конкретного ICM20948.
This commit is contained in:
2026-04-10 16:54:04 +03:00
parent b62fd39a67
commit d59cf7cd55
20 changed files with 732 additions and 2366 deletions

View File

@@ -25,7 +25,7 @@ control_channels_t ctrl_chs;
Vector3 euler;
void imu_callback(uint8_t* buf);
void imu_callback(uint8_t* buf, uint8_t size);
void delay_ms(uint32_t ms);
int main(void)
@@ -91,29 +91,29 @@ int main(void)
}
}
void imu_callback(uint8_t* buf)
void imu_callback(uint8_t* buf, uint8_t size)
{
imu_raw.ax = (buf[0] << 8) | buf[1];
imu_raw.ay = (buf[2] << 8) | buf[3];
imu_raw.az = (buf[4] << 8) | buf[5];
imu_raw.ax = Rev16((buf[0] << 8) | buf[1]);
imu_raw.ay = Rev16((buf[2] << 8) | buf[3]);
imu_raw.az = Rev16((buf[4] << 8) | buf[5]);
imu_raw.gx = (buf[6] << 8) | buf[7];
imu_raw.gy = (buf[8] << 8) | buf[9];
imu_raw.gz = (buf[10] << 8) | buf[11];
imu_raw.gx = Rev16((buf[6] << 8) | buf[7]);
imu_raw.gy = Rev16((buf[8] << 8) | buf[9]);
imu_raw.gz = Rev16((buf[10] << 8) | buf[11]);
imu_process_raw(&imu, &imu_raw, &allowed_calib);
imu_process_raw(&imu, &imu_raw, &allowed_calib);
irs.gyro.x = imu.gx;
irs.gyro.y = imu.gy;
irs.gyro.z = imu.gz;
irs.gyro.x = imu.gx;
irs.gyro.y = imu.gy;
irs.gyro.z = imu.gz;
irs.accel.x = imu.ax;
irs.accel.y = imu.ay;
irs.accel.z = imu.az;
irs.accel.x = imu.ax;
irs.accel.y = imu.ay;
irs.accel.z = imu.az;
IRS_update(&irs, IMU_DT);
euler = QuatToEuler(&irs.q);
IRS_update(&irs, IMU_DT);
euler = QuatToEuler(&irs.q);
}
void TIM6_DAC_IRQHandler()
@@ -122,7 +122,7 @@ void TIM6_DAC_IRQHandler()
{
TIM6->SR &= ~TIM_SR_UIF;
i2c_read_async(ICM_ADDR, 0x2D, 12, imu_callback);
imu_get_async(imu_callback);
control_update_flag = 1;
}
}