dev_accel.h 4.2 KB

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