45#define EX_L3GD20_VERSION "1.1.3"
50#define EX_L3GD20_MAJOR 1
55#define EX_L3GD20_MINOR 1
60#define EX_L3GD20_PATCH 3
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
278#if !defined(L3GD20_USE_ADVANCED) || defined(__DOXYGEN__)
279#define L3GD20_USE_ADVANCED FALSE
287#if !defined(L3GD20_BIAS_ACQ_TIMES) || defined(__DOXYGEN__)
288#define L3GD20_BIAS_ACQ_TIMES 50
295#if !defined(L3GD20_BIAS_SETTLING_US) || defined(__DOXYGEN__)
296#define L3GD20_BIAS_SETTLING_US 5000
304#if !(L3GD20_USE_SPI ^ L3GD20_USE_I2C)
305#error "L3GD20_USE_SPI and L3GD20_USE_I2C cannot be both true or both false"
308#if L3GD20_USE_SPI && !HAL_USE_SPI
309#error "L3GD20_USE_SPI requires HAL_USE_SPI"
312#if L3GD20_SHARED_SPI && !SPI_USE_MUTUAL_EXCLUSION
313#error "L3GD20_SHARED_SPI requires SPI_USE_MUTUAL_EXCLUSION"
316#if L3GD20_USE_I2C && !HAL_USE_I2C
317#error "L3GD20_USE_I2C requires HAL_USE_I2C"
320#if L3GD20_SHARED_I2C && !I2C_USE_MUTUAL_EXCLUSION
321#error "L3GD20_SHARED_I2C requires I2C_USE_MUTUAL_EXCLUSION"
328#error "L3GD20 over I2C still not supported"
438#if L3GD20_USE_SPI || defined(__DOXYGEN__)
448#if L3GD20_USE_I2C || defined(__DOXYGEN__)
474#if L3GD20_USE_ADVANCED || defined(__DOXYGEN__)
506#define _l3gd20_methods_alone \
508 msg_t (*gyro_set_full_scale)(L3GD20Driver *devp, l3gd20_fs_t fs);
513#define _l3gd20_methods \
514 _base_object_methods \
515 _l3gd20_methods_alone
529#define _l3gd20_data \
532 l3gd20_state_t state; \
534 const L3GD20Config *config; \
538 float gyrosensitivity[L3GD20_GYRO_NUMBER_OF_AXES]; \
540 float gyrobias[L3GD20_GYRO_NUMBER_OF_AXES]; \
569#define l3gd20GyroscopeGetAxesNumber(devp) \
570 gyroscopeGetAxesNumber(&((devp)->gyro_if))
587#define l3gd20GyroscopeReadRaw(devp, axes) \
588 gyroscopeReadRaw(&((devp)->gyro_if), axes)
606#define l3gd20GyroscopeReadCooked(devp, axes) \
607 gyroscopeReadCooked(&((devp)->gyro_if), axes)
623#define l3gd20GyroscopeSampleBias(devp) \
624 gyroscopeSampleBias(&((devp)->gyro_if))
640#define l3gd20GyroscopeSetBias(devp, bp) \
641 gyroscopeSetBias(&((devp)->gyro_if), bp)
655#define l3gd20GyroscopeResetBias(devp) \
656 gyroscopeResetBias(&((devp)->gyro_if))
672#define l3gd20GyroscopeSetSensitivity(devp, sp) \
673 gyroscopeSetSensitivity(&((devp)->gyro_if), sp)
687#define l3gd20GyroscopeResetSensitivity(devp) \
688 gyroscopeResetSensitivity(&((devp)->gyro_if))
705#define l3gd20GyroscopeSetFullScale(devp, fs) \
706 (devp)->vmt->acc_set_full_scale(devp, fs)
Generic gyroscope interface header.
struct hal_i2c_config I2CConfig
Type of a structure representing an I2C configuration.
struct hal_i2c_driver I2CDriver
Type of a structure representing an I2C driver.
l3gd20_end_t
L3GD20 endianness.
void l3gd20ObjectInit(L3GD20Driver *devp)
Initializes an instance.
l3gd20_bdu_t
L3GD20 block data update.
#define _l3gd20_data
L3GD20Driver specific data.
void l3gd20Stop(L3GD20Driver *devp)
Deactivates the L3GD20 Complex Driver peripheral.
void l3gd20Start(L3GD20Driver *devp, const L3GD20Config *config)
Configures and activates L3GD20 Complex Driver peripheral.
l3gd20_state_t
Driver state machine possible states.
l3gd20_hpcf_t
L3GD20 HP configuration.
l3gd20_hpm_t
L3GD20 HP filter mode.
l3gd20_bw_t
L3GD20 low pass filter 1 bandwidth.
l3gd20_odr_t
L3GD20 output data rate and bandwidth.
l3gd20_lp2m_t
L3GD20 LP2 filter mode.
#define _l3gd20_methods
L3GD20 specific methods with inherited ones.
l3gd20_fs_t
L3GD20 full scale.
struct hal_spi_config SPIConfig
Type of a SPI driver configuration structure.
struct hal_spi_driver SPIDriver
Type of a structure representing an SPI driver.
L3GD20 configuration structure.
float * gyrosensitivity
L3GD20 gyroscope system initial sensitivity.
const SPIConfig * spicfg
SPI configuration associated to this L3GD20.
l3gd20_lp2m_t gyrolp2mode
L3GD20 gyroscope system LP2 filter mode.
float * gyrobias
L3GD20 gyroscope system initial bias.
I2CDriver * i2cp
I2C driver associated to this L3GD20.
l3gd20_end_t gyroendianness
L3GD20 gyroscope system endianness.
SPIDriver * spip
SPI driver associated to this L3GD20.
l3gd20_bdu_t gyrobdu
L3GD20 gyroscope system block data update.
l3gd20_odr_t gyroodr
L3GD20 gyroscope system output data rate selection.
l3gd20_hpm_t gyrohpmode
L3GD20 gyroscope system HP filter mode.
const I2CConfig * i2ccfg
I2C configuration associated to this L3GD20.
l3gd20_hpcf_t gyrohpcfg
L3GD20 gyroscope system HP configuration.
l3gd20_bw_t gyrobandwidth
L3GD20 gyroscope system LP1 filter bandwidth.
l3gd20_fs_t gyrofullscale
L3GD20 gyroscope system initial full scale value.
L3GD20 3-axis gyroscope class.
const struct L3GD20VMT * vmt
Virtual Methods Table.
BaseGyroscope gyro_if
Base gyroscope interface.
L3GD20 virtual methods table.