45 #define EX_L3GD20_VERSION "1.1.1" 50 #define EX_L3GD20_MAJOR 1 55 #define EX_L3GD20_MINOR 1 60 #define EX_L3GD20_PATCH 1 71 #define L3GD20_GYRO_NUMBER_OF_AXES 3U 73 #define L3GD20_250DPS 250.0f 74 #define L3GD20_500DPS 500.0f 75 #define L3GD20_2000DPS 2000.0f 77 #define L3GD20_GYRO_SENS_250DPS 0.00875f 78 #define L3GD20_GYRO_SENS_500DPS 0.01750f 79 #define L3GD20_GYRO_SENS_2000DPS 0.07000f 81 #define L3GD20_GYRO_BIAS 0.0f 88 #define L3GD20_DI_MASK 0xFF 89 #define L3GD20_DI(n) (1 << n) 90 #define L3GD20_AD_MASK 0x3F 91 #define L3GD20_AD(n) (1 << n) 92 #define L3GD20_MS (1 << 6) 93 #define L3GD20_RW (1 << 7) 100 #define L3GD20_AD_WHO_AM_I 0x0F 101 #define L3GD20_AD_CTRL_REG1 0x20 102 #define L3GD20_AD_CTRL_REG2 0x21 103 #define L3GD20_AD_CTRL_REG3 0x22 104 #define L3GD20_AD_CTRL_REG4 0x23 105 #define L3GD20_AD_CTRL_REG5 0x24 106 #define L3GD20_AD_REFERENCE 0x25 107 #define L3GD20_AD_OUT_TEMP 0x26 108 #define L3GD20_AD_STATUS_REG 0x27 109 #define L3GD20_AD_OUT_X_L 0x28 110 #define L3GD20_AD_OUT_X_H 0x29 111 #define L3GD20_AD_OUT_Y_L 0x2A 112 #define L3GD20_AD_OUT_Y_H 0x2B 113 #define L3GD20_AD_OUT_Z_L 0x2C 114 #define L3GD20_AD_OUT_Z_H 0x2D 115 #define L3GD20_AD_FIFO_CTRL_REG 0x2E 116 #define L3GD20_AD_FIFO_SRC_REG 0x2F 117 #define L3GD20_AD_INT1_CFG 0x30 118 #define L3GD20_AD_INT1_SRC 0x31 119 #define L3GD20_AD_INT1_THS_XH 0x32 120 #define L3GD20_AD_INT1_THS_XL 0x33 121 #define L3GD20_AD_INT1_THS_YH 0x34 122 #define L3GD20_AD_INT1_THS_YL 0x35 123 #define L3GD20_AD_INT1_THS_ZH 0x36 124 #define L3GD20_AD_INT1_THS_ZL 0x37 125 #define L3GD20_AD_INT1_DURATION 0x38 132 #define L3GD20_CTRL_REG1_MASK 0xFF 133 #define L3GD20_CTRL_REG1_XEN (1 << 0) 134 #define L3GD20_CTRL_REG1_YEN (1 << 1) 135 #define L3GD20_CTRL_REG1_ZEN (1 << 2) 136 #define L3GD20_CTRL_REG1_PD (1 << 3) 137 #define L3GD20_CTRL_REG1_BW0 (1 << 4) 138 #define L3GD20_CTRL_REG1_BW1 (1 << 5) 139 #define L3GD20_CTRL_REG1_DR0 (1 << 6) 140 #define L3GD20_CTRL_REG1_DR1 (1 << 7) 147 #define L3GD20_CTRL_REG2_MASK 0x3F 148 #define L3GD20_CTRL_REG2_HPCF0 (1 << 0) 149 #define L3GD20_CTRL_REG2_HPCF1 (1 << 1) 150 #define L3GD20_CTRL_REG2_HPCF2 (1 << 2) 151 #define L3GD20_CTRL_REG2_HPCF3 (1 << 3) 152 #define L3GD20_CTRL_REG2_HPM0 (1 << 4) 153 #define L3GD20_CTRL_REG2_HPM1 (1 << 5) 160 #define L3GD20_CTRL_REG3_MASK 0xFF 161 #define L3GD20_CTRL_REG3_I2_EMPTY (1 << 0) 162 #define L3GD20_CTRL_REG3_I2_ORUN (1 << 1) 163 #define L3GD20_CTRL_REG3_I2_WTM (1 << 2) 164 #define L3GD20_CTRL_REG3_I2_DRDY (1 << 3) 165 #define L3GD20_CTRL_REG3_PP_OD (1 << 4) 166 #define L3GD20_CTRL_REG3_H_LACTIVE (1 << 5) 167 #define L3GD20_CTRL_REG3_I1_BOOT (1 << 6) 168 #define L3GD20_CTRL_REG3_I1_INT1 (1 << 7) 175 #define L3GD20_CTRL_REG4_MASK 0xF1 176 #define L3GD20_CTRL_REG4_SIM (1 << 0) 177 #define L3GD20_CTRL_REG4_FS_MASK 0x30 178 #define L3GD20_CTRL_REG4_FS0 (1 << 4) 179 #define L3GD20_CTRL_REG4_FS1 (1 << 5) 180 #define L3GD20_CTRL_REG4_BLE (1 << 6) 181 #define L3GD20_CTRL_REG4_BDU (1 << 7) 188 #define L3GD20_CTRL_REG5_MASK 0xDF 189 #define L3GD20_CTRL_REG5_OUT_SEL0 (1 << 0) 190 #define L3GD20_CTRL_REG5_OUT_SEL1 (1 << 1) 191 #define L3GD20_CTRL_REG5_INT1_SEL0 (1 << 2) 192 #define L3GD20_CTRL_REG5_INT1_SEL1 (1 << 3) 193 #define L3GD20_CTRL_REG5_HPEN (1 << 4) 194 #define L3GD20_CTRL_REG5_FIFO_EN (1 << 6) 195 #define L3GD20_CTRL_REG5_BOOT (1 << 7) 202 #define L3GD20_INT1_CFG_MASK 0xFF 203 #define L3GD20_INT1_CFG_XLIE (1 << 0) 204 #define L3GD20_INT1_CFG_XHIE (1 << 1) 205 #define L3GD20_INT1_CFG_YLIE (1 << 2) 206 #define L3GD20_INT1_CFG_YHIE (1 << 3) 207 #define L3GD20_INT1_CFG_ZLIE (1 << 4) 208 #define L3GD20_INT1_CFG_ZHIE (1 << 5) 209 #define L3GD20_INT1_CFG_LIR (1 << 6) 210 #define L3GD20_INT1_CFG_AND_OR (1 << 7) 217 #define L3GD20_INT1_SRC_MASK 0x7F 218 #define L3GD20_INT1_SRC_XL (1 << 0) 219 #define L3GD20_INT1_SRC_XH (1 << 1) 220 #define L3GD20_INT1_SRC_YL (1 << 2) 221 #define L3GD20_INT1_SRC_YH (1 << 3) 222 #define L3GD20_INT1_SRC_ZL (1 << 4) 223 #define L3GD20_INT1_SRC_ZH (1 << 5) 224 #define L3GD20_INT1_SRC_IA (1 << 6) 240 #if !defined(L3GD20_USE_SPI) || defined(__DOXYGEN__) 241 #define L3GD20_USE_SPI TRUE 250 #if !defined(L3GD20_SHARED_SPI) || defined(__DOXYGEN__) 251 #define L3GD20_SHARED_SPI FALSE 259 #if !defined(L3GD20_USE_I2C) || defined(__DOXYGEN__) 260 #define L3GD20_USE_I2C FALSE 269 #if !defined(L3GD20_SHARED_I2C) || defined(__DOXYGEN__) 270 #define L3GD20_SHARED_I2C FALSE 279 #if !defined(L3GD20_GYRO_USE_ADVANCED) || defined(__DOXYGEN__) 280 #define L3GD20_GYRO_USE_ADVANCED FALSE 288 #if !defined(L3GD20_BIAS_ACQ_TIMES) || defined(__DOXYGEN__) 289 #define L3GD20_BIAS_ACQ_TIMES 50 296 #if !defined(L3GD20_BIAS_SETTLING_US) || defined(__DOXYGEN__) 297 #define L3GD20_BIAS_SETTLING_US 5000 305 #if !(L3GD20_USE_SPI ^ L3GD20_USE_I2C) 306 #error "L3GD20_USE_SPI and L3GD20_USE_I2C cannot be both true or both false" 309 #if L3GD20_USE_SPI && !HAL_USE_SPI 310 #error "L3GD20_USE_SPI requires HAL_USE_SPI" 313 #if L3GD20_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION 314 #error "L3GD20_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION" 317 #if L3GD20_USE_I2C && !HAL_USE_I2C 318 #error "L3GD20_USE_I2C requires HAL_USE_I2C" 321 #if L3GD20_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION 322 #error "L3GD20_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION" 329 #error "L3GD20 over I2C still not supported" 439 #if L3GD20_USE_SPI || defined(__DOXYGEN__) 449 #if L3GD20_USE_I2C || defined(__DOXYGEN__) 475 #if L3GD20_GYRO_USE_ADVANCED || defined(__DOXYGEN__) 507 #define _l3gd20_methods_alone \ 509 msg_t (*gyro_set_full_scale)(L3GD20Driver *devp, l3gd20_fs_t fs); 514 #define _l3gd20_methods \ 515 _base_object_methods \ 516 _l3gd20_methods_alone 530 #define _l3gd20_data \ 533 l3gd20_state_t state; \ 535 const L3GD20Config *config; \ 539 float gyrosensitivity[L3GD20_GYRO_NUMBER_OF_AXES]; \ 541 float gyrobias[L3GD20_GYRO_NUMBER_OF_AXES]; \ 570 #define l3gd20GyroscopeGetAxesNumber(devp) \ 571 gyroscopeGetAxesNumber(&((devp)->gyro_if)) 588 #define l3gd20GyroscopeReadRaw(devp, axes) \ 589 gyroscopeReadRaw(&((devp)->gyro_if), axes) 607 #define l3gd20GyroscopeReadCooked(devp, axes) \ 608 gyroscopeReadCooked(&((devp)->gyro_if), axes) 624 #define l3gd20GyroscopeSampleBias(devp) \ 625 gyroscopeSampleBias(&((devp)->gyro_if)) 641 #define l3gd20GyroscopeSetBias(devp, bp) \ 642 gyroscopeSetBias(&((devp)->gyro_if), bp) 656 #define l3gd20GyroscopeResetBias(devp) \ 657 gyroscopeResetBias(&((devp)->gyro_if)) 673 #define l3gd20GyroscopeSetSensitivity(devp, sp) \ 674 gyroscopeSetSensitivity(&((devp)->gyro_if), sp) 688 #define l3gd20GyroscopeResetSensitivity(devp) \ 689 gyroscopeResetSensitivity(&((devp)->gyro_if)) 706 #define l3gd20GyroscopeSetFullScale(devp, fs) \ 707 (devp)->vmt->acc_set_full_scale(devp, fs) const SPIConfig * spicfg
SPI configuration associated to this L3GD20.
void l3gd20ObjectInit(L3GD20Driver *devp)
Initializes an instance.
l3gd20_hpm_t
L3GD20 HP filter mode.
l3gd20_lp2m_t gyrolp2mode
L3GD20 gyroscope system LP2 filter mode.
Type of I2C driver configuration structure.
#define _l3gd20_methods
L3GD20 specific methods with inherited ones.
l3gd20_fs_t gyrofullscale
L3GD20 gyroscope system initial full scale value.
l3gd20_bw_t
L3GD20 low pass filter 1 bandwidth.
L3GD20 virtual methods table.
l3gd20_state_t
Driver state machine possible states.
float * gyrobias
L3GD20 gyroscope system initial bias.
BaseGyroscope gyro_if
Base gyroscope interface.
void l3gd20Start(L3GD20Driver *devp, const L3GD20Config *config)
Configures and activates L3GD20 Complex Driver peripheral.
L3GD20 3-axis gyroscope class.
I2CDriver * i2cp
I2C driver associated to this L3GD20.
const struct L3GD20VMT * vmt
Virtual Methods Table.
l3gd20_hpm_t gyrohpmode
L3GD20 gyroscope system HP filter mode.
Generic gyroscope interface header.
l3gd20_fs_t
L3GD20 full scale.
SPIDriver * spip
SPI driver associated to this L3GD20.
l3gd20_hpcf_t gyrohpconfiguration
L3GD20 gyroscope system HP configuration.
Structure representing an I2C driver.
Driver configuration structure.
const I2CConfig * i2ccfg
I2C configuration associated to this L3GD20.
float * gyrosensitivity
L3GD20 gyroscope system initial sensitivity.
l3gd20_end_t
L3GD20 endianness.
l3gd20_hpcf_t
L3GD20 HP configuration.
l3gd20_odr_t gyrooutputdatarate
L3GD20 gyroscope system output data rate selection.
l3gd20_bdu_t gyroblockdataupdate
L3GD20 gyroscope system block data update.
l3gd20_bw_t gyrobandwidth
L3GD20 gyroscope system LP1 filter bandwidth.
l3gd20_end_t gyroendianness
L3GD20 gyroscope system endianness.
L3GD20 configuration structure.
l3gd20_bdu_t
L3GD20 block data update.
l3gd20_odr_t
L3GD20 output data rate and bandwidth.
#define _l3gd20_data
L3GD20Driver specific data.
void l3gd20Stop(L3GD20Driver *devp)
Deactivates the L3GD20 Complex Driver peripheral.
Structure representing an SPI driver.
l3gd20_lp2m_t
L3GD20 LP2 filter mode.