BMP280_ATY.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /**
  2. * @file BMP280_ATY.h
  3. *
  4. * @param Project DEVICE_GENERAL_ATY_LIB
  5. *
  6. * @author ATY
  7. *
  8. * @copyright
  9. * - Copyright 2017 - 2026 MZ-ATY
  10. * - This code follows:
  11. * - MZ-ATY Various Contents Joint Statement -
  12. * <a href="https://mengze.top/MZ-ATY_VCJS">
  13. * https://mengze.top/MZ-ATY_VCJS</a>
  14. * - CC 4.0 BY-NC-SA -
  15. * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
  16. * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
  17. * - Your use will be deemed to have accepted the terms of this statement.
  18. *
  19. * @brief functions of BMP280 for C platform
  20. *
  21. * @version
  22. * - 1_01_220831 > ATY
  23. * -# Preliminary version, first Release
  24. * - 1_02_231229 > ATY
  25. * -# add multy addr and channel
  26. ********************************************************************************
  27. */
  28. #ifndef __BMP280_ATY_H
  29. #define __BMP280_ATY_H
  30. #include "INCLUDE_ATY.h"
  31. #include "HW_I2C_ATY.h"
  32. /******************************* For user *************************************/
  33. // Set SDO voltage level for device address
  34. #define BMP280_SDO 1
  35. #define BMP280_ADDRESS (0x76 | BMP280_SDO)
  36. // #define BMP280_USE_FIXED_POINT_COMPENSATE
  37. // #define __DEBUG_BMP280_ATY
  38. // #define BMP280_I2C I2C_C1
  39. /******************************************************************************/
  40. typedef long signed int BMP280_S32_t; // signed 32
  41. typedef long unsigned int BMP280_U32_t; // unsigned 32
  42. typedef long long signed int BMP280_S64_t; // signed 64
  43. #define BMP280_RESET_VALUE 0xB6
  44. #define BMP280_CHIPID_REG 0xD0
  45. #define BMP280_RESET_REG 0xE0 // Softreset Register
  46. #define BMP280_STATUS_REG 0xF3
  47. #define BMP280_CTRLMEAS_REG 0xF4 // Ctrl Measure Register
  48. #define BMP280_CONFIG_REG 0xF5
  49. #define BMP280_PRESSURE_MSB_REG 0xF7
  50. #define BMP280_PRESSURE_LSB_REG 0xF8
  51. #define BMP280_PRESSURE_XLSB_REG 0xF9
  52. #define BMP280_TEMPERATURE_MSB_REG 0xFA
  53. #define BMP280_TEMPERATURE_LSB_REG 0xFB
  54. #define BMP280_TEMPERATURE_XLSB_REG 0xFC
  55. #define BMP280_MEASURING 0x01 // Measure state reg
  56. #define BMP280_IM_UPDATE 0x08 // Update state reg
  57. // BMP280 work mode
  58. typedef enum {
  59. BMP280_SLEEP_MODE = 0x00,
  60. BMP280_FORCED_MODE = 0x01, // and 0x02
  61. BMP280_NORMAL_MODE = 0x03
  62. } BMP280_WORK_MODE;
  63. // Pressure oversampling factor
  64. typedef enum
  65. {
  66. BMP280_P_MODE_SKIP = 0x0, // skipped
  67. BMP280_P_MODE_1, // x1
  68. BMP280_P_MODE_2, // x2
  69. BMP280_P_MODE_3, // x4
  70. BMP280_P_MODE_4, // x8
  71. BMP280_P_MODE_5 // x16
  72. } BMP280_P_OVERSAMPLING;
  73. // Temperature oversampling factor
  74. typedef enum {
  75. BMP280_T_MODE_SKIP = 0x0, // skipped
  76. BMP280_T_MODE_1, // x1
  77. BMP280_T_MODE_2, // x2
  78. BMP280_T_MODE_3, // x4
  79. BMP280_T_MODE_4, // x8
  80. BMP280_T_MODE_5 // x16
  81. } BMP280_T_OVERSAMPLING;
  82. // IIR filter time constant
  83. typedef enum {
  84. BMP280_FILTER_OFF = 0x0, // filter off
  85. BMP280_FILTER_MODE_1, // x2 0.223*ODR
  86. BMP280_FILTER_MODE_2, // x4 0.092*ODR
  87. BMP280_FILTER_MODE_3, // x8 0.042*ODR
  88. BMP280_FILTER_MODE_4 // x16 0.021*ODR
  89. } BMP280_FILTER_COEFFICIENT;
  90. // Hold time
  91. typedef enum {
  92. BMP280_T_SB1 = 0x0, // 0.5ms
  93. BMP280_T_SB2, // 62.5ms
  94. BMP280_T_SB3, // 125ms
  95. BMP280_T_SB4, // 250ms
  96. BMP280_T_SB5, // 500ms
  97. BMP280_T_SB6, // 1000ms
  98. BMP280_T_SB7, // 2000ms
  99. BMP280_T_SB8 // 4000ms
  100. } BMP280_T_SB;
  101. // T1~P9 Is the compensation coefficient
  102. typedef struct _BMP280_CC
  103. {
  104. uint16_t T1;
  105. int16_t T2;
  106. int16_t T3;
  107. uint16_t P1;
  108. int16_t P2;
  109. int16_t P3;
  110. int16_t P4;
  111. int16_t P5;
  112. int16_t P6;
  113. int16_t P7;
  114. int16_t P8;
  115. int16_t P9;
  116. } BMP280_CC;
  117. #define BMP280_DIG_T1_LSB_REG 0x88
  118. #define BMP280_DIG_T1_MSB_REG 0x89
  119. #define BMP280_DIG_T2_LSB_REG 0x8A
  120. #define BMP280_DIG_T2_MSB_REG 0x8B
  121. #define BMP280_DIG_T3_LSB_REG 0x8C
  122. #define BMP280_DIG_T3_MSB_REG 0x8D
  123. #define BMP280_DIG_P1_LSB_REG 0x8E
  124. #define BMP280_DIG_P1_MSB_REG 0x8F
  125. #define BMP280_DIG_P2_LSB_REG 0x90
  126. #define BMP280_DIG_P2_MSB_REG 0x91
  127. #define BMP280_DIG_P3_LSB_REG 0x92
  128. #define BMP280_DIG_P3_MSB_REG 0x93
  129. #define BMP280_DIG_P4_LSB_REG 0x94
  130. #define BMP280_DIG_P4_MSB_REG 0x95
  131. #define BMP280_DIG_P5_LSB_REG 0x96
  132. #define BMP280_DIG_P5_MSB_REG 0x97
  133. #define BMP280_DIG_P6_LSB_REG 0x98
  134. #define BMP280_DIG_P6_MSB_REG 0x99
  135. #define BMP280_DIG_P7_LSB_REG 0x9A
  136. #define BMP280_DIG_P7_MSB_REG 0x9B
  137. #define BMP280_DIG_P8_LSB_REG 0x9C
  138. #define BMP280_DIG_P8_MSB_REG 0x9D
  139. #define BMP280_DIG_P9_LSB_REG 0x9E
  140. #define BMP280_DIG_P9_MSB_REG 0x9F
  141. typedef struct
  142. {
  143. BMP280_P_OVERSAMPLING P_Osample;
  144. BMP280_T_OVERSAMPLING T_Osample;
  145. BMP280_WORK_MODE WORKMODE;
  146. } BMP280_OVERSAMPLE_MODE;
  147. typedef struct
  148. {
  149. BMP280_T_SB T_SB;
  150. BMP280_FILTER_COEFFICIENT FILTER_COEFFICIENT;
  151. FunctionalState SPI_EN;
  152. } BMP280_CONFIG;
  153. extern struct _BMP280_CC bmp280Cc;
  154. extern uint8_t bmp280Id;
  155. extern uint8_t bmp280InitFlag;
  156. uint8_t BMP280_TempPreGet(uint16_t* tp, uint8_t addr, uint8_t channel);
  157. #endif /* __BMP280_ATY_H */
  158. /******************************** End Of File *********************************/