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 2026-02-08
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#define BMI3_ACC_DP_DOFFSET_X_MASK UINT16_C(0x3FFF)
43#define BMI3_ACC_DP_DOFFSET_Y_MASK UINT16_C(0x3FFF)
44#define BMI3_ACC_DP_DOFFSET_Z_MASK UINT16_C(0x3FFF)
45
46#define BMI3_ACC_DP_DGAIN_X_MASK UINT16_C(0x00FF)
47#define BMI3_ACC_DP_DGAIN_Y_MASK UINT16_C(0x00FF)
48#define BMI3_ACC_DP_DGAIN_Z_MASK UINT16_C(0x00FF)
49
50#define BMI3_GYR_DP_OFF_X_MASK UINT16_C(0x03FF)
51#define BMI3_GYR_DP_DGAIN_X_MASK UINT16_C(0x007F)
52#define BMI3_GYR_DP_OFF_Y_MASK UINT16_C(0x03FF)
53#define BMI3_GYR_DP_DGAIN_Y_MASK UINT16_C(0x007F)
54#define BMI3_GYR_DP_OFF_Z_MASK UINT16_C(0x03FF)
55#define BMI3_GYR_DP_DGAIN_Z_MASK UINT16_C(0x007F)
56
58typedef enum {
65
67typedef enum {
73 NUM_IMU_GYRO_RANGES
75
77typedef enum {
78 /* General Registers */
84 /* Accelerometer Registers */
94 /* Gyroscope Registers */
104 /* Control and Configuration Registers */
112 /* Power Management */
118 /* Interrupt Registers */
124 /* Status Registers */
128 /* Temperature Sensor Registers */
131 /* Calibration and Error Handling */
135 /* Offset & Gain Registers*/
136 ACC_DP_OFF_X = 0x60,
137 ACC_DP_DGAIN_X = 0x61,
138 ACC_DP_OFF_Y = 0x62,
139 ACC_DP_DGAIN_Y = 0x63,
140 ACC_DP_OFF_Z = 0x64,
141 ACC_DP_DGAIN_Z = 0x65,
142 GYR_DP_OFF_X = 0x66,
143 GYR_DP_DGAIN_X = 0x67,
144 GYR_DP_OFF_Y = 0x68,
145 GYR_DP_DGAIN_Y = 0x69,
146 GYR_DP_OFF_Z = 0x6A,
147 GYR_DP_DGAIN_Z = 0x6B,
148
149 /* Other Registers */
152
154typedef struct {
155 uint16_t accel_offset_x;
156 uint16_t accel_offset_y;
157 uint16_t accel_offset_z;
158 uint8_t accel_gain_x;
159 uint8_t accel_gain_y;
160 uint8_t accel_gain_z;
162
164typedef struct {
165 uint16_t gyro_offset_x;
166 uint16_t gyro_offset_y;
167 uint16_t gyro_offset_z;
168 uint8_t gyro_gain_x;
169 uint8_t gyro_gain_y;
170 uint8_t gyro_gain_z;
172
173typedef struct {
174 float x;
175 float y;
176 float z;
177} Axes;
178
179typedef struct {
180 SpiPort spi_port;
181 SpiSettings spi_settings;
182 GpioAddress int1;
183 GpioAddress int2;
184 IMUAccelRange accel_range;
185 IMUGyroRange gyro_range;
187
189typedef struct {
190 Bmi323Settings *settings;
191 Axes accel;
192 Axes gyro;
193 AccelGainOffsetValues accel_go_values;
194 GyroGainOffsetValues gyro_go_values;
196
203StatusCode bmi323_init(Bmi323Storage *storage);
204
209StatusCode bmi323_update(Bmi323Storage *storage);
210
@ 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_RANGES
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
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
Struct to store offset and gain values for accelerometer.
Definition: bmi323.h:157
Definition: bmi323.h:175
Definition: bmi323.h:181
Storage struct for bmi323.
Definition: bmi323.h:190
Port and pin data.
Definition: network.h:62
Struct to store offset and gain values for gyroscope.
Definition: bmi323.h:166
SPI settings struct.
Definition: spi.h:76