embox

Форк
0
94 строки · 2.2 Кб
1
/**
2
 * @file
3
 * @brief
4
 *
5
 * @date 21.04.2023
6
 * @author Andrew Bursian
7
 */
8

9
#include <unistd.h>
10
#include <util/log.h>
11
#include <endian.h>
12

13
#include "lps22hb.h"
14
#include "lps22hb_transfer.h"
15

16
#define LPS22HB_INTERRUPT_CFG	0x0b
17
#define LPS22HB_THS_P_L		0x0c
18
#define LPS22HB_THS_P_H		0x0d
19
#define LPS22HB_WHO_AM_I	0xf
20
#define LPS22HB_CTRL_REG(i)	(0x10 + i - 1)
21
#define LPS22HB_FIFO_CTRL	0x14
22
#define LPS22HB_REF_P_XL	0x15
23
#define LPS22HB_REF_P_L		0x16
24
#define LPS22HB_REF_P_H		0x17
25
#define LPS22HB_RPDS_L		0x18
26
#define LPS22HB_RPDS_H		0x19
27
#define LPS22HB_RES_CONF	0x1a
28
#define LPS22HB_INT_SOURCE	0x25
29
#define LPS22HB_FIFO_STATUS	0x26
30
#define LPS22HB_STATUS_REG	0x27
31
#define LPS22HB_PRESS_OUT_XL	0x28
32
#define LPS22HB_PRESS_OUT_L	0x29
33
#define LPS22HB_PRESS_OUT_H	0x2a
34
#define LPS22HB_TEMP_OUT_L	0x2b
35
#define LPS22HB_TEMP_OUT_H	0x2c
36
#define LPS22HB_LPFP_RES	0x33
37

38

39
#define LPS22HB_WHO_AM_I_VALUE 0xb1
40

41
extern struct lps22hb_dev lps22hb_dev0;
42

43
int32_t lps22hb_get_pressure_4096(void) {
44
	struct lps22hb_dev *dev = &lps22hb_dev0;
45
	union {int32_t val; uint8_t b[4];} p;
46

47
	lps22hb_readb(dev, LPS22HB_PRESS_OUT_XL,&(p.b[0]));
48
	lps22hb_readb(dev, LPS22HB_PRESS_OUT_L, &(p.b[1]));
49
	lps22hb_readb(dev, LPS22HB_PRESS_OUT_H, &(p.b[2]));
50
	p.b[3] = (p.b[2] & 0x80)? 0xff: 0; // sign spread
51

52
	return le32toh(p.val);
53
}
54

55
int16_t lps22hb_get_temp_x100(void) {
56
	struct lps22hb_dev *dev = &lps22hb_dev0;
57
	union {int16_t val; uint8_t b[2];}t;
58
	lps22hb_readb(dev, LPS22HB_TEMP_OUT_L, &(t.b[0]));
59
	lps22hb_readb(dev, LPS22HB_TEMP_OUT_H, &(t.b[1]));
60

61
	return le16toh(t.val);
62
}
63

64
int lps22hb_init(void) {
65
	int i;
66
	uint8_t tmp;
67
	struct lps22hb_dev *dev = &lps22hb_dev0;
68

69
	if (lps22hb_hw_init(dev) < 0) {
70
		log_error("LPS22HB hw init failed!");
71
		return -1;
72
	}
73

74
	if (lps22hb_readb(dev, LPS22HB_WHO_AM_I, &tmp) < 0) {
75
		log_error("LPS22HB readb failed!");
76
		return -1;
77
	}
78
	log_info("WHO_AM_I = 0x%02x", tmp);
79
	if (tmp != LPS22HB_WHO_AM_I_VALUE) {
80
		log_error("LPS22HB Device ID mismatch! %2x", tmp);
81
		return -1;
82
	}
83

84
	tmp = 0x10;		/* Output data rate is 1 Hz */
85
	lps22hb_writeb(dev, LPS22HB_CTRL_REG(1), tmp);
86

87
	for (i = 1; i <= 3; i++) {
88
		lps22hb_readb(dev, LPS22HB_CTRL_REG(i), &tmp);
89
		log_info("CTRL_REG%d = 0x%02x", i, tmp);
90
	}
91
	lps22hb_readb(dev, LPS22HB_STATUS_REG, &tmp);
92
	log_info("STATUS_REG = 0x%02x", tmp);
93
	return 0;
94
}
95

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.