/**
* @file BMP280_ATY.h
*
* @param Project DEVICE_GENERAL_ATY_LIB
*
* @author ATY
*
* @copyright
* - Copyright 2017 - 2023 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
*
* https://mengze.top/MZ-ATY_VCJS
* - CC 4.0 BY-NC-SA -
*
* https://creativecommons.org/licenses/by-nc-sa/4.0/
* - Your use will be deemed to have accepted the terms of this statement.
*
* @brief Familiar functions of BMP280 for all embedded device
*
* @version
* - 1_01_220831 > ATY
* -# Preliminary version, first Release
* - 1_02_231229 > ATY
* -# add multy addr and channel
********************************************************************************
*/
#ifndef __BMP280_ATY_H
#define __BMP280_ATY_H
#include "INCLUDE_ATY.h"
#include "HW_I2C_ATY.h"
/******************************* For user *************************************/
// Set SDO voltage level for device address
#define BMP280_SDO 1
#define BMP280_ADDRESS (0x76 | BMP280_SDO)
// #define BMP280_USE_FIXED_POINT_COMPENSATE
// #define __DEBUG_BMP280_ATY
// #define BMP280_I2C I2C_C1
/******************************************************************************/
typedef long signed int BMP280_S32_t; // signed 32
typedef long unsigned int BMP280_U32_t; // unsigned 32
typedef long long signed int BMP280_S64_t; // signed 64
#define BMP280_RESET_VALUE 0xB6
#define BMP280_CHIPID_REG 0xD0
#define BMP280_RESET_REG 0xE0 // Softreset Register
#define BMP280_STATUS_REG 0xF3
#define BMP280_CTRLMEAS_REG 0xF4 // Ctrl Measure Register
#define BMP280_CONFIG_REG 0xF5
#define BMP280_PRESSURE_MSB_REG 0xF7
#define BMP280_PRESSURE_LSB_REG 0xF8
#define BMP280_PRESSURE_XLSB_REG 0xF9
#define BMP280_TEMPERATURE_MSB_REG 0xFA
#define BMP280_TEMPERATURE_LSB_REG 0xFB
#define BMP280_TEMPERATURE_XLSB_REG 0xFC
#define BMP280_MEASURING 0x01 // Measure state reg
#define BMP280_IM_UPDATE 0x08 // Update state reg
// BMP280 work mode
typedef enum {
BMP280_SLEEP_MODE = 0x00,
BMP280_FORCED_MODE = 0x01, // and 0x02
BMP280_NORMAL_MODE = 0x03
} BMP280_WORK_MODE;
// Pressure oversampling factor
typedef enum
{
BMP280_P_MODE_SKIP = 0x0, // skipped
BMP280_P_MODE_1, // x1
BMP280_P_MODE_2, // x2
BMP280_P_MODE_3, // x4
BMP280_P_MODE_4, // x8
BMP280_P_MODE_5 // x16
} BMP280_P_OVERSAMPLING;
// Temperature oversampling factor
typedef enum {
BMP280_T_MODE_SKIP = 0x0, // skipped
BMP280_T_MODE_1, // x1
BMP280_T_MODE_2, // x2
BMP280_T_MODE_3, // x4
BMP280_T_MODE_4, // x8
BMP280_T_MODE_5 // x16
} BMP280_T_OVERSAMPLING;
// IIR filter time constant
typedef enum {
BMP280_FILTER_OFF = 0x0, // filter off
BMP280_FILTER_MODE_1, // x2 0.223*ODR
BMP280_FILTER_MODE_2, // x4 0.092*ODR
BMP280_FILTER_MODE_3, // x8 0.042*ODR
BMP280_FILTER_MODE_4 // x16 0.021*ODR
} BMP280_FILTER_COEFFICIENT;
// Hold time
typedef enum {
BMP280_T_SB1 = 0x0, // 0.5ms
BMP280_T_SB2, // 62.5ms
BMP280_T_SB3, // 125ms
BMP280_T_SB4, // 250ms
BMP280_T_SB5, // 500ms
BMP280_T_SB6, // 1000ms
BMP280_T_SB7, // 2000ms
BMP280_T_SB8 // 4000ms
} BMP280_T_SB;
// T1~P9 Is the compensation coefficient
typedef struct _BMP280_CC
{
uint16_t T1;
int16_t T2;
int16_t T3;
uint16_t P1;
int16_t P2;
int16_t P3;
int16_t P4;
int16_t P5;
int16_t P6;
int16_t P7;
int16_t P8;
int16_t P9;
} BMP280_CC;
#define BMP280_DIG_T1_LSB_REG 0x88
#define BMP280_DIG_T1_MSB_REG 0x89
#define BMP280_DIG_T2_LSB_REG 0x8A
#define BMP280_DIG_T2_MSB_REG 0x8B
#define BMP280_DIG_T3_LSB_REG 0x8C
#define BMP280_DIG_T3_MSB_REG 0x8D
#define BMP280_DIG_P1_LSB_REG 0x8E
#define BMP280_DIG_P1_MSB_REG 0x8F
#define BMP280_DIG_P2_LSB_REG 0x90
#define BMP280_DIG_P2_MSB_REG 0x91
#define BMP280_DIG_P3_LSB_REG 0x92
#define BMP280_DIG_P3_MSB_REG 0x93
#define BMP280_DIG_P4_LSB_REG 0x94
#define BMP280_DIG_P4_MSB_REG 0x95
#define BMP280_DIG_P5_LSB_REG 0x96
#define BMP280_DIG_P5_MSB_REG 0x97
#define BMP280_DIG_P6_LSB_REG 0x98
#define BMP280_DIG_P6_MSB_REG 0x99
#define BMP280_DIG_P7_LSB_REG 0x9A
#define BMP280_DIG_P7_MSB_REG 0x9B
#define BMP280_DIG_P8_LSB_REG 0x9C
#define BMP280_DIG_P8_MSB_REG 0x9D
#define BMP280_DIG_P9_LSB_REG 0x9E
#define BMP280_DIG_P9_MSB_REG 0x9F
typedef struct
{
BMP280_P_OVERSAMPLING P_Osample;
BMP280_T_OVERSAMPLING T_Osample;
BMP280_WORK_MODE WORKMODE;
} BMP280_OVERSAMPLE_MODE;
typedef struct
{
BMP280_T_SB T_SB;
BMP280_FILTER_COEFFICIENT FILTER_COEFFICIENT;
FunctionalState SPI_EN;
} BMP280_CONFIG;
extern struct _BMP280_CC bmp280Cc;
extern uint8_t bmp280Id;
extern uint8_t bmp280InitFlag;
uint8_t BMP280_TempPreGet(uint16_t* tp, uint8_t addr, uint8_t channel);
#endif /* __BMP280_ATY_H */
/******************************** End Of File *********************************/