123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /***************************************************************************//**
- * @file dev_accel.h
- * @brief Accelerometer driver of RT-Thread RTOS for EFM32
- * COPYRIGHT (C) 2012, RT-Thread Development Team
- * @author onelife
- * @version 1.0
- *******************************************************************************
- * @section License
- * The license and distribution terms for this file may be found in the file
- * LICENSE in this distribution or at http://www.rt-thread.org/license/LICENSE
- *******************************************************************************
- * @section Change Logs
- * Date Author Notes
- * 2011-07-13 onelife Initial creation for using EFM32 ADC module to
- * interface the Freescale MMA7361L
- * 2011-08-02 onelife Add digital interface support of using EFM32 IIC
- * module for the Freescale MMA7455L
- ******************************************************************************/
- #ifndef __DEV_ACCEL_H__
- #define __DEV_ACCEL_H__
- /* Includes ------------------------------------------------------------------*/
- #if (EFM32_USING_ACCEL == EFM32_INTERFACE_IIC)
- #include "mma7455l.h"
- #endif
- /* Exported types ------------------------------------------------------------*/
- struct efm32_accel_result_t
- {
- rt_int32_t x;
- rt_int32_t y;
- rt_int32_t z;
- };
- /* Exported constants --------------------------------------------------------*/
- /* Exported macro ------------------------------------------------------------*/
- /* MMA7361LC
- g-Select g-Range Sensitivity
- 0 1.5 g 800 mV/g
- 1 6 g 206 mV/g
- MMA7455L
- g-Select g-Range Sensitivity
- 0 2 g 64 LSB/g
- 1 4 g 32 LSB/g
- 2 8 g 16 LSB/g
- */
- #define ACCEL_G_SELECT (0)
- #define ACCEL_CAL_SAMPLES (4) /* Must be multiple of 2 */
- #define ACCEL_CAL_ROUND (50)
- #define ACCEL_CAL_SIMPLE (0)
- #define ACCEL_CAL_INTERACT (1)
- #if (EFM32_USING_ACCEL == EFM32_INTERFACE_ADC)
- /* Reading_at_1g = Sensitivity * Max_reading / Refference_voltage */
- #define ACCEL_CAL_1G_VALUE {993, 256}
- #define ACCEL_X_ADC_CH ADC_SCANCTRL_INPUTMASK_CH2
- #define ACCEL_Y_ADC_CH ADC_SCANCTRL_INPUTMASK_CH3
- #define ACCEL_Z_ADC_CH ADC_SCANCTRL_INPUTMASK_CH4
- #elif (EFM32_USING_ACCEL == EFM32_INTERFACE_IIC)
- #define ACCEL_CAL_1G_VALUE {0x3f, 0x1f, 0x0f}
- #define ACCEL_IIC_SLAVE_ADDRESS (0x1d)
- #define ACCEL_INT1_PORT (gpioPortD)
- #define ACCEL_INT1_PIN (13)
- #define ACCEL_INT2_PORT (gpioPortD)
- #define ACCEL_INT2_PIN (12)
- #define ACCEL_MODE_STANDBY (1 << 0)
- #define ACCEL_MODE_MEASUREMENT (1 << 1)
- #define ACCEL_MODE_LEVEL (1 << 2)
- #define ACCEL_MODE_PULSE (1 << 3)
- #define ACCEL_RANGE_8G (1 << 4)
- #define ACCEL_RANGE_4G (1 << 5)
- #define ACCEL_RANGE_2G (1 << 6)
- #define ACCEL_INTPIN_INVERSE (1 << 7)
- #define ACCEL_INT_LEVEL_PULSE (1 << 8)
- #define ACCEL_INT_PULSE_LEVEL (1 << 9)
- #define ACCEL_INT_SINGLE_DOUBLE (1 << 10)
- #define ACCEL_DISABLE_X (1 << 11)
- #define ACCEL_DISABLE_Y (1 << 12)
- #define ACCEL_DISABLE_Z (1 << 13)
- #define ACCEL_THRESHOLD_INTEGER (1 << 14) /* For level detection only */
- #define ACCEL_BANDWIDTH_125HZ (1 << 15)
- #define ACCEL_LEVEL_AND (1 << 16)
- #define ACCEL_PULSE_AND (1 << 17)
- #define ACCEL_DRIVE_STRONG (1 << 18)
- #define ACCEL_SOURCE_LEVEL_X (1 << 19)
- #define ACCEL_SOURCE_LEVEL_Y (1 << 20)
- #define ACCEL_SOURCE_LEVEL_Z (1 << 21)
- #define ACCEL_SOURCE_PULSE_X (1 << 22)
- #define ACCEL_SOURCE_PULSE_Y (1 << 23)
- #define ACCEL_SOURCE_PULSE_Z (1 << 24)
- #define ACCEL_SHIFT_MODE (0)
- #define ACCEL_SHIFT_RANGE (4)
- #define ACCEL_SHIFT_INT (8)
- #define ACCEL_SHIFT_DISABLE (11)
- #define ACCEL_SHIFT_SOURCE (19)
- #define ACCEL_MASK_MODE (0X0000000f << ACCEL_SHIFT_MODE)
- #define ACCEL_MASK_RANGE (0X00000007 << ACCEL_SHIFT_RANGE)
- #define ACCEL_MASK_INT (0X00000007 << ACCEL_SHIFT_INT)
- #define ACCEL_MASK_DISABLE (0X00000007 << ACCEL_SHIFT_DISABLE)
- #define ACCEL_MASK_SOURCE (0X0000003f << ACCEL_SHIFT_SOURCE)
- #endif
- /* Exported functions ------------------------------------------------------- */
- rt_err_t efm_accel_get_data(struct efm32_accel_result_t *data,
- rt_bool_t lowResolution);
- rt_err_t efm_accel_config(rt_uint32_t config,
- rt_uint8_t level_threshold,
- rt_uint8_t pulse_threshold,
- rt_uint8_t pulse_duration,
- rt_uint8_t pulse_latency,
- rt_uint8_t pulse_duration2);
- rt_err_t efm_accel_auto_zero(rt_uint8_t mode, rt_tick_t period);
- rt_err_t efm_accel_init(void);
- #endif /*__DEV_ACCEL_H__ */
|