embox

Форк
0
/
l3g4200d_spi.c 
71 строка · 1.3 Кб
1
/**
2
 * @file
3
 * @brief
4
 *
5
 * @date 06.02.2020
6
 * @author Alexander Kalmuk
7
 */
8
#include <stdint.h>
9
#include <framework/mod/options.h>
10
#include <util/log.h>
11
#include <drivers/spi.h>
12

13
#include "l3g4200d.h"
14
#include "l3g4200d_transfer.h"
15

16
#define L3G4200D_SPI_BUS   OPTION_GET(NUMBER, spi_bus)
17

18
#define L3G4200D_SPI_READ   0x80
19
#define L3G4200D_SPI_WRITE  0x00
20

21
struct l3g4200d_dev {
22
	int spi_bus;
23
	struct spi_device *spi_dev;
24
};
25

26
struct l3g4200d_dev l3g4200d_dev0 = {
27
	.spi_bus  = L3G4200D_SPI_BUS,
28
};
29

30
int l3g4200d_readb(struct l3g4200d_dev *dev, int offset, uint8_t *ret) {
31
	uint8_t in[2];
32
	uint8_t out[2];
33

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

42
	return 0;
43
}
44

45
int l3g4200d_writeb(struct l3g4200d_dev *dev,
46
	    int offset, uint8_t val) {
47
	uint8_t in[2];
48
	uint8_t out[2];
49

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

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

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

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

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

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

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

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