dev_accel.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /***************************************************************************//**
  2. * @file dev_accel.h
  3. * @brief Accelerometer driver of RT-Thread RTOS for EFM32
  4. * COPYRIGHT (C) 2012, RT-Thread Development Team
  5. * @author onelife
  6. * @version 1.0
  7. *******************************************************************************
  8. * @section License
  9. * The license and distribution terms for this file may be found in the file
  10. * LICENSE in this distribution or at http://www.rt-thread.org/license/LICENSE
  11. *******************************************************************************
  12. * @section Change Logs
  13. * Date Author Notes
  14. * 2011-07-13 onelife Initial creation for using EFM32 ADC module to
  15. * interface the Freescale MMA7361L
  16. * 2011-08-02 onelife Add digital interface support of using EFM32 IIC
  17. * module for the Freescale MMA7455L
  18. ******************************************************************************/
  19. #ifndef __DEV_ACCEL_H__
  20. #define __DEV_ACCEL_H__
  21. /* Includes ------------------------------------------------------------------*/
  22. #if (EFM32_USING_ACCEL == EFM32_INTERFACE_IIC)
  23. #include "mma7455l.h"
  24. #endif
  25. /* Exported types ------------------------------------------------------------*/
  26. struct efm32_accel_result_t
  27. {
  28. rt_int32_t x;
  29. rt_int32_t y;
  30. rt_int32_t z;
  31. };
  32. /* Exported constants --------------------------------------------------------*/
  33. /* Exported macro ------------------------------------------------------------*/
  34. /* MMA7361LC
  35. g-Select g-Range Sensitivity
  36. 0 1.5 g 800 mV/g
  37. 1 6 g 206 mV/g
  38. MMA7455L
  39. g-Select g-Range Sensitivity
  40. 0 2 g 64 LSB/g
  41. 1 4 g 32 LSB/g
  42. 2 8 g 16 LSB/g
  43. */
  44. #define ACCEL_G_SELECT (0)
  45. #define ACCEL_CAL_SAMPLES (4) /* Must be multiple of 2 */
  46. #define ACCEL_CAL_ROUND (50)
  47. #define ACCEL_CAL_SIMPLE (0)
  48. #define ACCEL_CAL_INTERACT (1)
  49. #if (EFM32_USING_ACCEL == EFM32_INTERFACE_ADC)
  50. /* Reading_at_1g = Sensitivity * Max_reading / Refference_voltage */
  51. #define ACCEL_CAL_1G_VALUE {993, 256}
  52. #define ACCEL_X_ADC_CH ADC_SCANCTRL_INPUTMASK_CH2
  53. #define ACCEL_Y_ADC_CH ADC_SCANCTRL_INPUTMASK_CH3
  54. #define ACCEL_Z_ADC_CH ADC_SCANCTRL_INPUTMASK_CH4
  55. #elif (EFM32_USING_ACCEL == EFM32_INTERFACE_IIC)
  56. #define ACCEL_CAL_1G_VALUE {0x3f, 0x1f, 0x0f}
  57. #define ACCEL_IIC_SLAVE_ADDRESS (0x1d)
  58. #define ACCEL_INT1_PORT (gpioPortD)
  59. #define ACCEL_INT1_PIN (13)
  60. #define ACCEL_INT2_PORT (gpioPortD)
  61. #define ACCEL_INT2_PIN (12)
  62. #define ACCEL_MODE_STANDBY (1 << 0)
  63. #define ACCEL_MODE_MEASUREMENT (1 << 1)
  64. #define ACCEL_MODE_LEVEL (1 << 2)
  65. #define ACCEL_MODE_PULSE (1 << 3)
  66. #define ACCEL_RANGE_8G (1 << 4)
  67. #define ACCEL_RANGE_4G (1 << 5)
  68. #define ACCEL_RANGE_2G (1 << 6)
  69. #define ACCEL_INTPIN_INVERSE (1 << 7)
  70. #define ACCEL_INT_LEVEL_PULSE (1 << 8)
  71. #define ACCEL_INT_PULSE_LEVEL (1 << 9)
  72. #define ACCEL_INT_SINGLE_DOUBLE (1 << 10)
  73. #define ACCEL_DISABLE_X (1 << 11)
  74. #define ACCEL_DISABLE_Y (1 << 12)
  75. #define ACCEL_DISABLE_Z (1 << 13)
  76. #define ACCEL_THRESHOLD_INTEGER (1 << 14) /* For level detection only */
  77. #define ACCEL_BANDWIDTH_125HZ (1 << 15)
  78. #define ACCEL_LEVEL_AND (1 << 16)
  79. #define ACCEL_PULSE_AND (1 << 17)
  80. #define ACCEL_DRIVE_STRONG (1 << 18)
  81. #define ACCEL_SOURCE_LEVEL_X (1 << 19)
  82. #define ACCEL_SOURCE_LEVEL_Y (1 << 20)
  83. #define ACCEL_SOURCE_LEVEL_Z (1 << 21)
  84. #define ACCEL_SOURCE_PULSE_X (1 << 22)
  85. #define ACCEL_SOURCE_PULSE_Y (1 << 23)
  86. #define ACCEL_SOURCE_PULSE_Z (1 << 24)
  87. #define ACCEL_SHIFT_MODE (0)
  88. #define ACCEL_SHIFT_RANGE (4)
  89. #define ACCEL_SHIFT_INT (8)
  90. #define ACCEL_SHIFT_DISABLE (11)
  91. #define ACCEL_SHIFT_SOURCE (19)
  92. #define ACCEL_MASK_MODE (0X0000000f << ACCEL_SHIFT_MODE)
  93. #define ACCEL_MASK_RANGE (0X00000007 << ACCEL_SHIFT_RANGE)
  94. #define ACCEL_MASK_INT (0X00000007 << ACCEL_SHIFT_INT)
  95. #define ACCEL_MASK_DISABLE (0X00000007 << ACCEL_SHIFT_DISABLE)
  96. #define ACCEL_MASK_SOURCE (0X0000003f << ACCEL_SHIFT_SOURCE)
  97. #endif
  98. /* Exported functions ------------------------------------------------------- */
  99. rt_err_t efm_accel_get_data(struct efm32_accel_result_t *data,
  100. rt_bool_t lowResolution);
  101. rt_err_t efm_accel_config(rt_uint32_t config,
  102. rt_uint8_t level_threshold,
  103. rt_uint8_t pulse_threshold,
  104. rt_uint8_t pulse_duration,
  105. rt_uint8_t pulse_latency,
  106. rt_uint8_t pulse_duration2);
  107. rt_err_t efm_accel_auto_zero(rt_uint8_t mode, rt_tick_t period);
  108. rt_err_t efm_accel_init(void);
  109. #endif /*__DEV_ACCEL_H__ */