embox

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

9
#include <stdint.h>
10
#include <framework/mod/options.h>
11
#include <util/log.h>
12
#include <drivers/spi.h>
13

14
#include "lsm6dsl.h"
15
#include "lsm6dsl_transfer.h"
16

17
#define LSM6DSL_SPI_BUS   OPTION_GET(NUMBER, spi_bus)
18

19
#define LSM6DSL_SPI_READ   0x80
20
#define LSM6DSL_SPI_WRITE  0x00
21

22
struct lsm6dsl_dev {
23
	int spi_bus;
24
	struct spi_device *spi_dev;
25
};
26

27
struct lsm6dsl_dev lsm6dsl_dev0 = {
28
	.spi_bus  = LSM6DSL_SPI_BUS,
29
};
30

31
int lsm6dsl_readb(struct lsm6dsl_dev *dev, int offset, uint8_t *ret) {
32
	uint8_t in[2];
33
	uint8_t out[2];
34

35
	in[0] = offset | LSM6DSL_SPI_READ;
36
	in[1] = 0;
37
	if (spi_transfer(dev->spi_dev, in, out, 2) < 0) {
38
		log_debug("failed");
39
		return -1;
40
	}
41
	*ret = out[1];
42

43
	return 0;
44
}
45

46
int lsm6dsl_writeb(struct lsm6dsl_dev *dev,
47
	    int offset, uint8_t val) {
48
	uint8_t in[2];
49
	uint8_t out[2];
50

51
	in[0] = offset | LSM6DSL_SPI_WRITE;
52
	in[1] = val;
53
	if (spi_transfer(dev->spi_dev, in, out, 2) < 0) {
54
		log_debug("failed");
55
		return -1;
56
	}
57
	return 0;
58
}
59

60
int lsm6dsl_hw_init(struct lsm6dsl_dev *dev) {
61
	dev->spi_dev = spi_dev_by_id(dev->spi_bus);
62
	if (!dev->spi_dev) {
63
		return -1;
64
	}
65
	spi_set_master_mode(dev->spi_dev);
66

67
	spi_select(dev->spi_dev, 0);
68

69
	dev->spi_dev->flags |= SPI_CS_ACTIVE;
70
	dev->spi_dev->flags |= SPI_CS_INACTIVE;
71
	return 0;
72
}
73

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

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

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

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