Midnight Sun Firmware
Loading...
Searching...
No Matches
bmi323.h
1#pragma once
2
3/************************************************************************************************
4 * @file bmi323.h
5 *
6 * @brief Header file for BMI323 Driver
7 *
8 * @date 2025-03-06
9 * @author Midnight Sun Team #24 - MSXVI
10 ************************************************************************************************/
11
12/* Standard library Headers */
13
14/* Inter-component Headers */
15#include "can.h"
16#include "spi.h"
17
18/* Intra-component Headers */
19
26#define FEATURE_IO0 0x10
27#define FEATURE_IO1 0x11
28#define FEATURE_IO2 0x12
29#define FEATURE_IO3 0x13
30#define FEATURE_IO_STATUS 0x14
31#define FEATURE_CTRL 0x40
32#define INT_STATUS_INT1 0x0D
33#define INT_STATUS_INT2 0x0E
34
35#define BMI_SET_LOW_BYTE 0x00FF
36#define BMI_SET_HIGH_BYTE 0xFF00
37#define BMI3_E_NULL_PTR INT8_C(-1)
38
39#define BMI323_CHIP_ID 0x43U
40#define BMI323_MAX_NUM_DATA 16U
41
42/*
43this might be 13 or 14 idk
44#define BMI3_ACC_DP_OFF_XYZ_13_BIT_MASK UINT16_C(0x1FFF)
45#define BMI3_ACC_DP_OFF_XYZ_14_BIT_MASK UINT16_C(0x3FFF)
46*/
47#define BMI3_ACC_DP_DOFFSET_X_MASK UINT16_C(0x3FFF)
48#define BMI3_ACC_DP_DOFFSET_Y_MASK UINT16_C(0x3FFF)
49#define BMI3_ACC_DP_DOFFSET_Z_MASK UINT16_C(0x3FFF)
50
51#define BMI3_ACC_DP_DGAIN_X_MASK UINT16_C(0x00FF)
52#define BMI3_ACC_DP_DGAIN_Y_MASK UINT16_C(0x00FF)
53#define BMI3_ACC_DP_DGAIN_Z_MASK UINT16_C(0x00FF)
54
55#define BMI3_GYR_DP_OFF_X_MASK UINT16_C(0x03FF)
56#define BMI3_GYR_DP_DGAIN_X_MASK UINT16_C(0x007F)
57#define BMI3_GYR_DP_OFF_Y_MASK UINT16_C(0x03FF)
58#define BMI3_GYR_DP_DGAIN_Y_MASK UINT16_C(0x007F)
59#define BMI3_GYR_DP_OFF_Z_MASK UINT16_C(0x03FF)
60#define BMI3_GYR_DP_DGAIN_Z_MASK UINT16_C(0x007F)
61
63typedef enum {
70
72typedef enum {
78 NUM_IMU_GYRO_RANGES
80
82typedef enum {
83 /* General Registers */
89 /* Accelerometer Registers */
99 /* Gyroscope Registers */
109 /* Control and Configuration Registers */
117 /* Power Management */
123 /* Interrupt Registers */
129 /* Status Registers */
133 /* Temperature Sensor Registers */
136 /* Calibration and Error Handling */
140 /* Other Registers */
143 ACC_DP_OFF_X = 0x60,
144 ACC_DP_DGAIN_X = 0x61,
145 ACC_DP_OFF_Y = 0x62,
146 ACC_DP_DGAIN_Y = 0x63,
147 ACC_DP_OFF_Z = 0x64,
148 ACC_DP_DGAIN_Z = 0x65,
149 GYR_DP_OFF_X = 0x66,
150 GYR_DP_DGAIN_X = 0x67,
151 GYR_DP_OFF_Y = 0x68,
152 GYR_DP_DGAIN_Y = 0x69,
153 GYR_DP_OFF_Z = 0x6A,
154 GYR_DP_DGAIN_Z = 0x6B
156
157typedef struct {
158 uint16_t accel_offset_x;
159 uint16_t accel_offset_y;
160 uint16_t accel_offset_z;
161 uint8_t accel_gain_x;
162 uint8_t accel_gain_y;
163 uint8_t accel_gain_z;
165
166typedef struct {
167 uint16_t gyro_offset_x;
168 uint16_t gyro_offset_y;
169 uint16_t gyro_offset_z;
170 uint8_t gyro_gain_x;
171 uint8_t gyro_gain_y;
172 uint8_t gyro_gain_z;
174
175typedef struct {
176 int16_t x;
177 int16_t y;
178 int16_t z;
179} Axes;
180
181typedef struct {
182 SpiPort spi_port;
183 SpiSettings spi_settings;
184 GpioAddress int1;
185 GpioAddress int2;
186 IMUAccelRange accel_range;
187 IMUGyroRange gyro_range;
189
190typedef struct {
191 Bmi323Settings *settings;
192 Axes accel;
193 Axes gyro;
194 AccelGainOffsetValues accel_go_values;
195 GyroGainOffsetValues gyro_go_values;
197
198StatusCode bmi323_init(Bmi323Storage *storage);
199
200StatusCode bmi323_update();
201
SpiPort
SPI Port selection.
Definition: spi.h:34
StatusCode
StatusCodes for various errors.
Definition: status.h:27
IMUGyroRange
IMU Gyro range in units of degrees.
Definition: bmi323.h:72
Bmi323Registers
BMI323 Registers.
Definition: bmi323.h:82
IMUAccelRange
IMU Accel range, in units of gravity acceleration (9.81m/s^2)
Definition: bmi323.h:63
@ IMU_GYRO_RANGE_2000_DEG
Definition: bmi323.h:77
@ IMU_GYRO_RANGE_125_DEG
Definition: bmi323.h:73
@ IMU_GYRO_RANGE_500_DEG
Definition: bmi323.h:75
@ IMU_GYRO_RANGE_1000_DEG
Definition: bmi323.h:76
@ IMU_GYRO_RANGE_250_DEG
Definition: bmi323.h:74
@ BMI323_REG_RESET
Definition: bmi323.h:87
@ BMI323_REG_ACCEL_Z_H
Definition: bmi323.h:96
@ BMI323_REG_ACCEL_REG_ADDR
Definition: bmi323.h:90
@ BMI323_REG_PWR_CTRL
Definition: bmi323.h:118
@ BMI323_REG_GYRO_Y_L
Definition: bmi323.h:103
@ BMI323_REG_ACCEL_Y_L
Definition: bmi323.h:93
@ BMI323_REG_STATUS_REG
Definition: bmi323.h:130
@ BMI323_REG_TEMP_SENSOR
Definition: bmi323.h:134
@ BMI323_REG_CTRL_REG4
Definition: bmi323.h:113
@ BMI323_REG_ERROR_REG
Definition: bmi323.h:138
@ BMI323_REG_CTRL_REG1
Definition: bmi323.h:110
@ BMI323_REG_CTRL_REG5
Definition: bmi323.h:114
@ BMI323_REG_INT_STATUS
Definition: bmi323.h:125
@ BMI323_REG_ACCEL_X_H
Definition: bmi323.h:92
@ BMI323_REG_CTRL_REG2
Definition: bmi323.h:111
@ BMI323_REG_PWR_CTRL4
Definition: bmi323.h:121
@ BMI323_REG_CALIBRATION_REG
Definition: bmi323.h:137
@ BMI323_REG_ERROR_STATUS
Definition: bmi323.h:86
@ BMI323_REG_ACCEL_Z_L
Definition: bmi323.h:95
@ BMI323_REG_GYRO_X_L
Definition: bmi323.h:101
@ BMI323_REG_GYRO_REG_ADDR
Definition: bmi323.h:100
@ BMI323_REG_INT_CONFIG
Definition: bmi323.h:124
@ BMI323_REG_BANK_SEL
Definition: bmi323.h:84
@ BMI323_REG_GYRO_Z_L
Definition: bmi323.h:105
@ BMI323_REG_CMD
Definition: bmi323.h:141
@ BMI323_REG_PWR_CTRL3
Definition: bmi323.h:120
@ BMI323_REG_ACCEL_X_L
Definition: bmi323.h:91
@ BMI323_REG_CHIP_ID
Definition: bmi323.h:85
@ BMI323_REG_GYRO_Z_H
Definition: bmi323.h:106
@ BMI323_REG_CTRL_REG6
Definition: bmi323.h:115
@ BMI323_REG_GYRO_CONF
Definition: bmi323.h:107
@ BMI323_REG_GYRO_Y_H
Definition: bmi323.h:104
@ BMI323_REG_CTRL_REG3
Definition: bmi323.h:112
@ BMI323_REG_GYRO_X_H
Definition: bmi323.h:102
@ BMI323_REG_PWR_CTRL2
Definition: bmi323.h:119
@ BMI323_REG_ACC_CONF
Definition: bmi323.h:97
@ BMI323_REG_INT_EN_2
Definition: bmi323.h:127
@ BMI323_REG_ACCEL_Y_H
Definition: bmi323.h:94
@ BMI323_REG_FIFO_STATUS
Definition: bmi323.h:131
@ BMI323_REG_INT_EN_1
Definition: bmi323.h:126
@ NUM_IMU_ACCEL_RANGE
Definition: bmi323.h:68
@ IMU_ACCEL_RANGE_2G
Definition: bmi323.h:64
@ IMU_ACCEL_RANGE_4G
Definition: bmi323.h:65
@ IMU_ACCEL_RANGE_8G
Definition: bmi323.h:66
@ IMU_ACCEL_RANGE_16G
Definition: bmi323.h:67
Definition: bmi323.h:157
Definition: bmi323.h:175
Definition: bmi323.h:181
Definition: bmi323.h:190
Port and pin data.
Definition: network.h:62
Definition: bmi323.h:166
SPI settings struct.
Definition: spi.h:76