ChibiOS  0.0.0
Collaboration diagram for L3GD20:

Detailed Description

Macros

#define l3gd20GyroscopeGetAxesNumber(devp)   gyroscopeGetAxesNumber(&((devp)->gyro_if))
 Return the number of axes of the BaseGyroscope. More...
 
#define l3gd20GyroscopeReadRaw(devp, axes)   gyroscopeReadRaw(&((devp)->gyro_if), axes)
 Retrieves raw data from the BaseGyroscope. More...
 
#define l3gd20GyroscopeReadCooked(devp, axes)   gyroscopeReadCooked(&((devp)->gyro_if), axes)
 Retrieves cooked data from the BaseGyroscope. More...
 
#define l3gd20GyroscopeSampleBias(devp)   gyroscopeSampleBias(&((devp)->gyro_if))
 Samples bias values for the BaseGyroscope. More...
 
#define l3gd20GyroscopeSetBias(devp, bp)   gyroscopeSetBias(&((devp)->gyro_if), bp)
 Set bias values for the BaseGyroscope. More...
 
#define l3gd20GyroscopeResetBias(devp)   gyroscopeResetBias(&((devp)->gyro_if))
 Reset bias values for the BaseGyroscope. More...
 
#define l3gd20GyroscopeSetSensitivity(devp, sp)   gyroscopeSetSensitivity(&((devp)->gyro_if), sp)
 Set sensitivity values for the BaseGyroscope. More...
 
#define l3gd20GyroscopeResetSensitivity(devp)   gyroscopeResetSensitivity(&((devp)->gyro_if))
 Reset sensitivity values for the BaseGyroscope. More...
 
#define l3gd20GyroscopeSetFullScale(devp, fs)   (devp)->vmt->acc_set_full_scale(devp, fs)
 Changes the L3GD20Driver gyroscope fullscale value. More...
 

Version identification

#define EX_L3GD20_VERSION   "1.1.1"
 L3GD20 driver version string. More...
 
#define EX_L3GD20_MAJOR   1
 L3GD20 driver version major number. More...
 
#define EX_L3GD20_MINOR   1
 L3GD20 driver version minor number. More...
 
#define EX_L3GD20_PATCH   1
 L3GD20 driver version patch number. More...
 
#define L3GD20_GYRO_NUMBER_OF_AXES   3U
 L3GD20 gyroscope system characteristics. More...
 

L3GD20 communication interfaces related bit masks

#define L3GD20_DI_MASK   0xFF
 
#define L3GD20_DI(n)   (1 << n)
 
#define L3GD20_AD_MASK   0x3F
 
#define L3GD20_AD(n)   (1 << n)
 
#define L3GD20_MS   (1 << 6)
 
#define L3GD20_RW   (1 << 7)
 

L3GD20 register addresses

#define L3GD20_AD_WHO_AM_I   0x0F
 
#define L3GD20_AD_CTRL_REG1   0x20
 
#define L3GD20_AD_CTRL_REG2   0x21
 
#define L3GD20_AD_CTRL_REG3   0x22
 
#define L3GD20_AD_CTRL_REG4   0x23
 
#define L3GD20_AD_CTRL_REG5   0x24
 
#define L3GD20_AD_REFERENCE   0x25
 
#define L3GD20_AD_OUT_TEMP   0x26
 
#define L3GD20_AD_STATUS_REG   0x27
 
#define L3GD20_AD_OUT_X_L   0x28
 
#define L3GD20_AD_OUT_X_H   0x29
 
#define L3GD20_AD_OUT_Y_L   0x2A
 
#define L3GD20_AD_OUT_Y_H   0x2B
 
#define L3GD20_AD_OUT_Z_L   0x2C
 
#define L3GD20_AD_OUT_Z_H   0x2D
 
#define L3GD20_AD_FIFO_CTRL_REG   0x2E
 
#define L3GD20_AD_FIFO_SRC_REG   0x2F
 
#define L3GD20_AD_INT1_CFG   0x30
 
#define L3GD20_AD_INT1_SRC   0x31
 
#define L3GD20_AD_INT1_THS_XH   0x32
 
#define L3GD20_AD_INT1_THS_XL   0x33
 
#define L3GD20_AD_INT1_THS_YH   0x34
 
#define L3GD20_AD_INT1_THS_YL   0x35
 
#define L3GD20_AD_INT1_THS_ZH   0x36
 
#define L3GD20_AD_INT1_THS_ZL   0x37
 
#define L3GD20_AD_INT1_DURATION   0x38
 

L3GD20_CTRL_REG1 register bits definitions

#define L3GD20_CTRL_REG1_MASK   0xFF
 
#define L3GD20_CTRL_REG1_XEN   (1 << 0)
 
#define L3GD20_CTRL_REG1_YEN   (1 << 1)
 
#define L3GD20_CTRL_REG1_ZEN   (1 << 2)
 
#define L3GD20_CTRL_REG1_PD   (1 << 3)
 
#define L3GD20_CTRL_REG1_BW0   (1 << 4)
 
#define L3GD20_CTRL_REG1_BW1   (1 << 5)
 
#define L3GD20_CTRL_REG1_DR0   (1 << 6)
 
#define L3GD20_CTRL_REG1_DR1   (1 << 7)
 

L3GD20_CTRL_REG2 register bits definitions

#define L3GD20_CTRL_REG2_MASK   0x3F
 
#define L3GD20_CTRL_REG2_HPCF0   (1 << 0)
 
#define L3GD20_CTRL_REG2_HPCF1   (1 << 1)
 
#define L3GD20_CTRL_REG2_HPCF2   (1 << 2)
 
#define L3GD20_CTRL_REG2_HPCF3   (1 << 3)
 
#define L3GD20_CTRL_REG2_HPM0   (1 << 4)
 
#define L3GD20_CTRL_REG2_HPM1   (1 << 5)
 

L3GD20_CTRL_REG3 register bits definitions

#define L3GD20_CTRL_REG3_MASK   0xFF
 
#define L3GD20_CTRL_REG3_I2_EMPTY   (1 << 0)
 
#define L3GD20_CTRL_REG3_I2_ORUN   (1 << 1)
 
#define L3GD20_CTRL_REG3_I2_WTM   (1 << 2)
 
#define L3GD20_CTRL_REG3_I2_DRDY   (1 << 3)
 
#define L3GD20_CTRL_REG3_PP_OD   (1 << 4)
 
#define L3GD20_CTRL_REG3_H_LACTIVE   (1 << 5)
 
#define L3GD20_CTRL_REG3_I1_BOOT   (1 << 6)
 
#define L3GD20_CTRL_REG3_I1_INT1   (1 << 7)
 

L3GD20_CTRL_REG4 register bits definitions

#define L3GD20_CTRL_REG4_MASK   0xF1
 
#define L3GD20_CTRL_REG4_SIM   (1 << 0)
 
#define L3GD20_CTRL_REG4_FS_MASK   0x30
 
#define L3GD20_CTRL_REG4_FS0   (1 << 4)
 
#define L3GD20_CTRL_REG4_FS1   (1 << 5)
 
#define L3GD20_CTRL_REG4_BLE   (1 << 6)
 
#define L3GD20_CTRL_REG4_BDU   (1 << 7)
 

L3GD20_CTRL_REG5 register bits definitions

#define L3GD20_CTRL_REG5_MASK   0xDF
 
#define L3GD20_CTRL_REG5_OUT_SEL0   (1 << 0)
 
#define L3GD20_CTRL_REG5_OUT_SEL1   (1 << 1)
 
#define L3GD20_CTRL_REG5_INT1_SEL0   (1 << 2)
 
#define L3GD20_CTRL_REG5_INT1_SEL1   (1 << 3)
 
#define L3GD20_CTRL_REG5_HPEN   (1 << 4)
 
#define L3GD20_CTRL_REG5_FIFO_EN   (1 << 6)
 
#define L3GD20_CTRL_REG5_BOOT   (1 << 7)
 

L3GD20_INT1_CFG register bits definitions

#define L3GD20_INT1_CFG_MASK   0xFF
 
#define L3GD20_INT1_CFG_XLIE   (1 << 0)
 
#define L3GD20_INT1_CFG_XHIE   (1 << 1)
 
#define L3GD20_INT1_CFG_YLIE   (1 << 2)
 
#define L3GD20_INT1_CFG_YHIE   (1 << 3)
 
#define L3GD20_INT1_CFG_ZLIE   (1 << 4)
 
#define L3GD20_INT1_CFG_ZHIE   (1 << 5)
 
#define L3GD20_INT1_CFG_LIR   (1 << 6)
 
#define L3GD20_INT1_CFG_AND_OR   (1 << 7)
 

L3GD20_INT1_SRC register bits definitions

#define L3GD20_INT1_SRC_MASK   0x7F
 
#define L3GD20_INT1_SRC_XL   (1 << 0)
 
#define L3GD20_INT1_SRC_XH   (1 << 1)
 
#define L3GD20_INT1_SRC_YL   (1 << 2)
 
#define L3GD20_INT1_SRC_YH   (1 << 3)
 
#define L3GD20_INT1_SRC_ZL   (1 << 4)
 
#define L3GD20_INT1_SRC_ZH   (1 << 5)
 
#define L3GD20_INT1_SRC_IA   (1 << 6)
 

Configuration options

#define L3GD20_USE_SPI   TRUE
 L3GD20 SPI interface switch. More...
 
#define L3GD20_SHARED_SPI   FALSE
 L3GD20 shared SPI switch. More...
 
#define L3GD20_USE_I2C   FALSE
 L3GD20 I2C interface switch. More...
 
#define L3GD20_SHARED_I2C   FALSE
 L3GD20 shared I2C switch. More...
 
#define L3GD20_GYRO_USE_ADVANCED   FALSE
 L3GD20 accelerometer subsystem advanced configurations switch. More...
 
#define L3GD20_BIAS_ACQ_TIMES   50
 Number of acquisitions for bias removal. More...
 
#define L3GD20_BIAS_SETTLING_US   5000
 Settling time for bias removal. More...
 

L3GD20 data structures and types.

Todo:
Add support for L3GD20 over I2C.
typedef struct L3GD20Driver L3GD20Driver
 Structure representing a L3GD20 driver. More...
 
#define _l3gd20_methods_alone
 L3GD20 specific methods. More...
 
#define _l3gd20_methods
 L3GD20 specific methods with inherited ones. More...
 
#define _l3gd20_data
 L3GD20Driver specific data. More...
 

Data Structures

struct  L3GD20Config
 L3GD20 configuration structure. More...
 
struct  L3GD20VMT
 L3GD20 virtual methods table. More...
 
struct  L3GD20Driver
 L3GD20 3-axis gyroscope class. More...
 

Functions

static void l3gd20SPIReadRegister (SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
 Reads a generic register value using SPI. More...
 
static void l3gd20SPIWriteRegister (SPIDriver *spip, uint8_t reg, size_t n, uint8_t *b)
 Writes a value into a generic register using SPI. More...
 
static size_t gyro_get_axes_number (void *ip)
 Return the number of axes of the BaseGyroscope. More...
 
static msg_t gyro_read_raw (void *ip, int32_t axes[L3GD20_GYRO_NUMBER_OF_AXES])
 Retrieves raw data from the BaseGyroscope. More...
 
static msg_t gyro_read_cooked (void *ip, float axes[])
 Retrieves cooked data from the BaseGyroscope. More...
 
static msg_t gyro_sample_bias (void *ip)
 Samples bias values for the BaseGyroscope. More...
 
static msg_t gyro_set_bias (void *ip, float *bp)
 Set bias values for the BaseGyroscope. More...
 
static msg_t gyro_reset_bias (void *ip)
 Reset bias values for the BaseGyroscope. More...
 
static msg_t gyro_set_sensivity (void *ip, float *sp)
 Set sensitivity values for the BaseGyroscope. More...
 
static msg_t gyro_reset_sensivity (void *ip)
 Reset sensitivity values for the BaseGyroscope. More...
 
static msg_t gyro_set_full_scale (L3GD20Driver *devp, l3gd20_fs_t fs)
 Changes the L3GD20Driver gyroscope fullscale value. More...
 
void l3gd20ObjectInit (L3GD20Driver *devp)
 Initializes an instance. More...
 
void l3gd20Start (L3GD20Driver *devp, const L3GD20Config *config)
 Configures and activates L3GD20 Complex Driver peripheral. More...
 
void l3gd20Stop (L3GD20Driver *devp)
 Deactivates the L3GD20 Complex Driver peripheral. More...
 

Macro Definition Documentation

#define EX_L3GD20_VERSION   "1.1.1"

L3GD20 driver version string.

Definition at line 45 of file l3gd20.h.

#define EX_L3GD20_MAJOR   1

L3GD20 driver version major number.

Definition at line 50 of file l3gd20.h.

#define EX_L3GD20_MINOR   1

L3GD20 driver version minor number.

Definition at line 55 of file l3gd20.h.

#define EX_L3GD20_PATCH   1

L3GD20 driver version patch number.

Definition at line 60 of file l3gd20.h.

#define L3GD20_GYRO_NUMBER_OF_AXES   3U

L3GD20 gyroscope system characteristics.

Note
Sensitivity is expressed as DPS/LSB whereas DPS stand for Degree per second [°/s].
Bias is expressed as DPS.

Definition at line 71 of file l3gd20.h.

Referenced by gyro_get_axes_number(), gyro_read_cooked(), gyro_read_raw(), gyro_reset_bias(), gyro_reset_sensivity(), gyro_sample_bias(), gyro_set_bias(), gyro_set_full_scale(), gyro_set_sensivity(), and l3gd20Start().

#define L3GD20_USE_SPI   TRUE

L3GD20 SPI interface switch.

If set to TRUE the support for SPI is included.

Note
The default is TRUE.

Definition at line 241 of file l3gd20.h.

#define L3GD20_SHARED_SPI   FALSE

L3GD20 shared SPI switch.

If set to TRUE the device acquires SPI bus ownership on each transaction.

Note
The default is FALSE. Requires SPI_USE_MUTUAL_EXCLUSION.

Definition at line 251 of file l3gd20.h.

#define L3GD20_USE_I2C   FALSE

L3GD20 I2C interface switch.

If set to TRUE the support for I2C is included.

Note
The default is FALSE.

Definition at line 260 of file l3gd20.h.

#define L3GD20_SHARED_I2C   FALSE

L3GD20 shared I2C switch.

If set to TRUE the device acquires I2C bus ownership on each transaction.

Note
The default is FALSE. Requires I2C_USE_MUTUAL_EXCLUSION.

Definition at line 270 of file l3gd20.h.

#define L3GD20_GYRO_USE_ADVANCED   FALSE

L3GD20 accelerometer subsystem advanced configurations switch.

If set to TRUE more configurations are available.

Note
The default is FALSE.

Definition at line 280 of file l3gd20.h.

#define L3GD20_BIAS_ACQ_TIMES   50

Number of acquisitions for bias removal.

This is the number of acquisitions performed to compute the bias. A repetition is required in order to remove noise.

Definition at line 289 of file l3gd20.h.

Referenced by gyro_sample_bias().

#define L3GD20_BIAS_SETTLING_US   5000

Settling time for bias removal.

This is the time between each bias acquisition.

Definition at line 297 of file l3gd20.h.

Referenced by gyro_sample_bias().

#define _l3gd20_methods_alone
Value:
/* Change full scale value of L3GD20.*/ \
static msg_t gyro_set_full_scale(L3GD20Driver *devp, l3gd20_fs_t fs)
Changes the L3GD20Driver gyroscope fullscale value.
Definition: l3gd20.c:378
L3GD20 3-axis gyroscope class.
Definition: l3gd20.h:548
l3gd20_fs_t
L3GD20 full scale.
Definition: l3gd20.h:348
int32_t msg_t
Definition: chtypes.h:51

L3GD20 specific methods.

Definition at line 507 of file l3gd20.h.

#define _l3gd20_methods
Value:
#define _l3gd20_methods_alone
L3GD20 specific methods.
Definition: l3gd20.h:507

L3GD20 specific methods with inherited ones.

Definition at line 514 of file l3gd20.h.

#define _l3gd20_data
Value:
/* Driver state.*/ \
/* Current configuration data.*/ \
const L3GD20Config *config; \
/* Gyroscope subsystem axes number.*/ \
size_t gyroaxes; \
/* Gyroscope subsystem current sensitivity.*/ \
float gyrosensitivity[L3GD20_GYRO_NUMBER_OF_AXES]; \
/* Gyroscope subsystem current Bias.*/ \
float gyrobias[L3GD20_GYRO_NUMBER_OF_AXES]; \
/* Gyroscope subsystem current full scale value.*/ \
float gyrofullscale;
l3gd20_state_t
Driver state machine possible states.
Definition: l3gd20.h:428
#define L3GD20_GYRO_NUMBER_OF_AXES
L3GD20 gyroscope system characteristics.
Definition: l3gd20.h:71
L3GD20 configuration structure.
Definition: l3gd20.h:437
#define _base_sensor_data
BaseSensor specific data.
Definition: hal_sensors.h:74

L3GD20Driver specific data.

Definition at line 530 of file l3gd20.h.

#define l3gd20GyroscopeGetAxesNumber (   devp)    gyroscopeGetAxesNumber(&((devp)->gyro_if))

Return the number of axes of the BaseGyroscope.

Parameters
[in]devppointer to L3GD20Driver.
Returns
the number of axes.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 570 of file l3gd20.h.

#define l3gd20GyroscopeReadRaw (   devp,
  axes 
)    gyroscopeReadRaw(&((devp)->gyro_if), axes)

Retrieves raw data from the BaseGyroscope.

Note
This data is retrieved from MEMS register without any algebraical manipulation.
The axes array must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]devppointer to L3GD20Driver.
[out]axesa buffer which would be filled with raw data.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 588 of file l3gd20.h.

#define l3gd20GyroscopeReadCooked (   devp,
  axes 
)    gyroscopeReadCooked(&((devp)->gyro_if), axes)

Retrieves cooked data from the BaseGyroscope.

Note
This data is manipulated according to the formula cooked = (raw * sensitivity) - bias.
Final data is expressed as DPS.
The axes array must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]devppointer to L3GD20Driver.
[out]axesa buffer which would be filled with cooked data.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 607 of file l3gd20.h.

#define l3gd20GyroscopeSampleBias (   devp)    gyroscopeSampleBias(&((devp)->gyro_if))

Samples bias values for the BaseGyroscope.

Note
The L3GD20 shall not be moved during the whole procedure.
After this function internal bias is automatically updated.
The behavior of this function depends on L3GD20_BIAS_ACQ_TIMES and L3GD20_BIAS_SETTLING_US.
Parameters
[in]devppointer to L3GD20Driver.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 624 of file l3gd20.h.

#define l3gd20GyroscopeSetBias (   devp,
  bp 
)    gyroscopeSetBias(&((devp)->gyro_if), bp)

Set bias values for the BaseGyroscope.

Note
Bias must be expressed as DPS.
The bias buffer must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]devppointer to L3GD20Driver.
[in]bpa buffer which contains biases.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 641 of file l3gd20.h.

#define l3gd20GyroscopeResetBias (   devp)    gyroscopeResetBias(&((devp)->gyro_if))

Reset bias values for the BaseGyroscope.

Note
Default biases value are obtained from device datasheet when available otherwise they are considered zero.
Parameters
[in]devppointer to L3GD20Driver.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 656 of file l3gd20.h.

#define l3gd20GyroscopeSetSensitivity (   devp,
  sp 
)    gyroscopeSetSensitivity(&((devp)->gyro_if), sp)

Set sensitivity values for the BaseGyroscope.

Note
Sensitivity must be expressed as DPS/LSB.
The sensitivity buffer must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]devppointer to L3GD20Driver.
[in]spa buffer which contains sensitivities.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 673 of file l3gd20.h.

#define l3gd20GyroscopeResetSensitivity (   devp)    gyroscopeResetSensitivity(&((devp)->gyro_if))

Reset sensitivity values for the BaseGyroscope.

Note
Default sensitivities value are obtained from device datasheet.
Parameters
[in]devppointer to L3GD20Driver.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
MSG_RESETotherwise.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 688 of file l3gd20.h.

#define l3gd20GyroscopeSetFullScale (   devp,
  fs 
)    (devp)->vmt->acc_set_full_scale(devp, fs)

Changes the L3GD20Driver gyroscope fullscale value.

Note
This function also rescale sensitivities and biases based on previous and next fullscale value.
A recalibration is highly suggested after calling this function.
Parameters
[in]devppointer to L3GD20Driver.
[in]fsnew fullscale value.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
MSG_RESETotherwise.
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 706 of file l3gd20.h.

Typedef Documentation

typedef struct L3GD20Driver L3GD20Driver

Structure representing a L3GD20 driver.

Definition at line 343 of file l3gd20.h.

Enumeration Type Documentation

L3GD20 full scale.

Enumerator
L3GD20_FS_250DPS 

Full scale 250 degree per second.

L3GD20_FS_500DPS 

Full scale 500 degree per second.

L3GD20_FS_2000DPS 

Full scale 2000 degree per second.

Definition at line 348 of file l3gd20.h.

L3GD20 output data rate and bandwidth.

Enumerator
L3GD20_ODR_95HZ 

Output data rate 95 Hz.

L3GD20_ODR_190HZ 

Output data rate 190 Hz.

L3GD20_ODR_380HZ 

Output data rate 380 Hz.

L3GD20_ODR_760HZ 

Output data rate 760 Hz.

Definition at line 357 of file l3gd20.h.

L3GD20 low pass filter 1 bandwidth.

Enumerator
L3GD20_BW0 

LPF1 bandwidth. Depends on ODR.

L3GD20_BW1 

LPF1 bandwidth. Depends on ODR.

L3GD20_BW2 

LPF1 bandwidth. Depends on ODR.

L3GD20_BW3 

LPF1 bandwidth. Depends on ODR.

Definition at line 367 of file l3gd20.h.

L3GD20 block data update.

Enumerator
L3GD20_BDU_CONTINUOUS 

Block data continuously updated.

L3GD20_BDU_BLOCKED 

Block data updated after reading.

Definition at line 377 of file l3gd20.h.

L3GD20 HP filter mode.

Enumerator
L3GD20_HPM_NORMAL 

Normal mode.

L3GD20_HPM_REFERENCE 

Reference signal for filtering.

L3GD20_HPM_AUTORESET 

Autoreset on interrupt event.

L3GD20_HPM_BYPASSED 

HP filter bypassed

Definition at line 385 of file l3gd20.h.

L3GD20 HP configuration.

Enumerator
L3GD20_HPCF_0 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_1 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_2 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_3 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_4 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_5 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_6 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_7 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_8 

Depends on ODR (Table 26 for more).

L3GD20_HPCF_9 

Depends on ODR (Table 26 for more).

Definition at line 395 of file l3gd20.h.

L3GD20 LP2 filter mode.

To activate LP2 HP should be active

Enumerator
L3GD20_LP2M_ON 

LP2 filter activated.

L3GD20_LP2M_BYPASSED 

LP2 filter bypassed.

Definition at line 412 of file l3gd20.h.

L3GD20 endianness.

Enumerator
L3GD20_END_LITTLE 

Little endian.

L3GD20_END_BIG 

Big endian.

Definition at line 420 of file l3gd20.h.

Driver state machine possible states.

Enumerator
L3GD20_UNINIT 

Not initialized.

L3GD20_STOP 

Stopped.

L3GD20_READY 

Ready.

Definition at line 428 of file l3gd20.h.

Function Documentation

static void l3gd20SPIReadRegister ( SPIDriver spip,
uint8_t  reg,
size_t  n,
uint8_t *  b 
)
static

Reads a generic register value using SPI.

Precondition
The SPI interface must be initialized and the driver started.
Parameters
[in]spippointer to the SPI interface
[in]regstarting register address
[in]nnumber of consecutive registers to read
[in]bpointer to an output buffer.

Definition at line 59 of file l3gd20.c.

References spiReceive(), spiSelect(), spiSend(), and spiUnselect().

Referenced by gyro_read_raw(), and gyro_set_full_scale().

Here is the call graph for this function:

static void l3gd20SPIWriteRegister ( SPIDriver spip,
uint8_t  reg,
size_t  n,
uint8_t *  b 
)
static

Writes a value into a generic register using SPI.

Precondition
The SPI interface must be initialized and the driver started.
Parameters
[in]spippointer to the SPI interface
[in]regstarting register address
[in]nnumber of adjacent registers to write
[in]bpointer to a buffer of values.

Definition at line 78 of file l3gd20.c.

References spiSelect(), spiSend(), and spiUnselect().

Referenced by gyro_set_full_scale(), l3gd20Start(), and l3gd20Stop().

Here is the call graph for this function:

static size_t gyro_get_axes_number ( void *  ip)
static

Return the number of axes of the BaseGyroscope.

Parameters
[in]ippointer to BaseGyroscope interface.
Returns
the number of axes.

Definition at line 96 of file l3gd20.c.

References L3GD20_GYRO_NUMBER_OF_AXES.

Referenced by gyro_set_full_scale().

static msg_t gyro_read_raw ( void *  ip,
int32_t  axes[L3GD20_GYRO_NUMBER_OF_AXES] 
)
static

Retrieves raw data from the BaseGyroscope.

Note
This data is retrieved from MEMS register without any algebraical manipulation.
The axes array must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]ippointer to BaseGyroscope interface.
[out]axesa buffer which would be filled with raw data.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.

Definition at line 115 of file l3gd20.c.

References L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, l3gd20SPIReadRegister(), MSG_OK, objGetInstance, osalDbgAssert, osalDbgCheck, SPI_READY, spiAcquireBus(), spiReleaseBus(), and spiStart().

Referenced by gyro_read_cooked(), gyro_sample_bias(), and gyro_set_full_scale().

Here is the call graph for this function:

static msg_t gyro_read_cooked ( void *  ip,
float  axes[] 
)
static

Retrieves cooked data from the BaseGyroscope.

Note
This data is manipulated according to the formula cooked = (raw * sensitivity) - bias.
Final data is expressed as DPS.
The axes array must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]ippointer to BaseGyroscope interface.
[out]axesa buffer which would be filled with cooked data.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.

Definition at line 167 of file l3gd20.c.

References gyro_read_raw(), L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, objGetInstance, osalDbgAssert, and osalDbgCheck.

Referenced by gyro_set_full_scale().

Here is the call graph for this function:

static msg_t gyro_sample_bias ( void *  ip)
static

Samples bias values for the BaseGyroscope.

Note
The L3GD20 shall not be moved during the whole procedure.
After this function internal bias is automatically updated.
The behavior of this function depends on L3GD20_BIAS_ACQ_TIMES and L3GD20_BIAS_SETTLING_US.
Parameters
[in]ippointer to BaseGyroscope interface.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.

Definition at line 200 of file l3gd20.c.

References gyro_read_raw(), L3GD20_BIAS_ACQ_TIMES, L3GD20_BIAS_SETTLING_US, L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, MSG_OK, objGetInstance, osalDbgAssert, osalDbgCheck, osalThreadSleepMicroseconds, and SPI_READY.

Referenced by gyro_set_full_scale().

Here is the call graph for this function:

static msg_t gyro_set_bias ( void *  ip,
float *  bp 
)
static

Set bias values for the BaseGyroscope.

Note
Bias must be expressed as DPS.
The bias buffer must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]ippointer to BaseGyroscope interface.
[in]bpa buffer which contains biases.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.

Definition at line 248 of file l3gd20.c.

References L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, MSG_OK, objGetInstance, osalDbgAssert, and osalDbgCheck.

Referenced by gyro_set_full_scale().

static msg_t gyro_reset_bias ( void *  ip)
static

Reset bias values for the BaseGyroscope.

Note
Default biases value are obtained from device datasheet when available otherwise they are considered zero.
Parameters
[in]ippointer to BaseGyroscope interface.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.

Definition at line 277 of file l3gd20.c.

References L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, MSG_OK, objGetInstance, osalDbgAssert, and osalDbgCheck.

Referenced by gyro_set_full_scale().

static msg_t gyro_set_sensivity ( void *  ip,
float *  sp 
)
static

Set sensitivity values for the BaseGyroscope.

Note
Sensitivity must be expressed as DPS/LSB.
The sensitivity buffer must be at least the same size of the BaseGyroscope axes number.
Parameters
[in]ippointer to BaseGyroscope interface.
[in]spa buffer which contains sensitivities.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.

Definition at line 307 of file l3gd20.c.

References L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, MSG_OK, objGetInstance, osalDbgAssert, and osalDbgCheck.

Referenced by gyro_set_full_scale().

static msg_t gyro_reset_sensivity ( void *  ip)
static

Reset sensitivity values for the BaseGyroscope.

Note
Default sensitivities value are obtained from device datasheet.
Parameters
[in]ippointer to BaseGyroscope interface.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
MSG_RESETotherwise.

Definition at line 336 of file l3gd20.c.

References FALSE, L3GD20_FS_2000DPS, L3GD20_FS_250DPS, L3GD20_FS_500DPS, L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, MSG_OK, MSG_RESET, objGetInstance, osalDbgAssert, and osalDbgCheck.

Referenced by gyro_set_full_scale().

static msg_t gyro_set_full_scale ( L3GD20Driver devp,
l3gd20_fs_t  fs 
)
static

Changes the L3GD20Driver gyroscope fullscale value.

Note
This function also rescale sensitivities and biases based on previous and next fullscale value.
A recalibration is highly suggested after calling this function.
Parameters
[in]devppointer to BaseGyroscope interface.
[in]fsnew fullscale value.
Returns
The operation status.
Return values
MSG_OKif the function succeeded.
MSG_RESETotherwise.

Definition at line 378 of file l3gd20.c.

References gyro_get_axes_number(), gyro_read_cooked(), gyro_read_raw(), gyro_reset_bias(), gyro_reset_sensivity(), gyro_sample_bias(), gyro_set_bias(), gyro_set_sensivity(), L3GD20_FS_2000DPS, L3GD20_FS_250DPS, L3GD20_FS_500DPS, L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_READY, l3gd20SPIReadRegister(), l3gd20SPIWriteRegister(), MSG_OK, MSG_RESET, osalDbgAssert, osalDbgCheck, SPI_READY, spiAcquireBus(), spiReleaseBus(), and spiStart().

Here is the call graph for this function:

void l3gd20ObjectInit ( L3GD20Driver devp)

Initializes an instance.

Parameters
[out]devppointer to the L3GD20Driver object
Function Class:Initializer, this function just initializes an object and can be invoked before the kernel is initialized.

Definition at line 473 of file l3gd20.c.

References L3GD20Driver::gyro_if, L3GD20_STOP, BaseGyroscope::vmt, and L3GD20Driver::vmt.

void l3gd20Start ( L3GD20Driver devp,
const L3GD20Config config 
)

Configures and activates L3GD20 Complex Driver peripheral.

Parameters
[in]devppointer to the L3GD20Driver object
[in]configpointer to the L3GD20Config object
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 490 of file l3gd20.c.

References FALSE, L3GD20_FS_2000DPS, L3GD20_FS_250DPS, L3GD20_FS_500DPS, L3GD20_GYRO_NUMBER_OF_AXES, L3GD20_HPM_BYPASSED, L3GD20_LP2M_BYPASSED, L3GD20_READY, L3GD20_STOP, l3gd20SPIWriteRegister(), osalDbgAssert, osalDbgCheck, osalThreadSleepMilliseconds, spiAcquireBus(), spiReleaseBus(), and spiStart().

Here is the call graph for this function:

void l3gd20Stop ( L3GD20Driver devp)

Deactivates the L3GD20 Complex Driver peripheral.

Parameters
[in]devppointer to the L3GD20Driver object
Function Class:Normal API, this function can be invoked by regular system threads but not from within a lock zone.

Definition at line 613 of file l3gd20.c.

References L3GD20_READY, L3GD20_STOP, l3gd20SPIWriteRegister(), osalDbgAssert, osalDbgCheck, spiAcquireBus(), spiReleaseBus(), spiStart(), and spiStop().

Here is the call graph for this function: