embox

Форк
0
/
efm32_gpio.c 
82 строки · 1.7 Кб
1
/**
2
 * @file stm32_gpio_cube.c
3
 * @brief
4
 * @author Denis Deryugin <deryugin.denis@gmail.com>
5
 * @version 0.1
6
 * @date 2016-02-12
7
 */
8

9
#include <assert.h>
10

11
#include <embox/unit.h>
12
#include <lib/libds/bit.h>
13

14
#include <drivers/gpio/gpio_driver.h>
15

16
#include <em_cmu.h>
17
#include <em_gpio.h>
18

19
#include <framework/mod/options.h>
20

21
#include <module/platform/efm32/efm32_conf.h>
22

23
#include <embox/unit.h>
24

25
EMBOX_UNIT_INIT(efm32_gpio_init);
26

27
#define BSP_LED_POLARITY  1
28

29
#define EFM32_GPIO_CHIP_ID      OPTION_GET(NUMBER,gpio_chip_id)
30
#define EFM32_GPIO_PORTS_COUNT  (OPTION_GET(NUMBER,gpio_ports_number) + 1)
31

32
static const struct gpio_chip efm32_gpio_chip;
33

34
static int efm32_gpio_setup_mode(unsigned char port, gpio_mask_t pins, int mode) {
35
	int bit;
36

37
	switch(mode) {
38
	case GPIO_MODE_OUT: {
39
		bit_foreach(bit, pins) {
40
			if (pins & (1 << bit)) {
41
				GPIO_PinModeSet(port, bit, gpioModePushPull, BSP_LED_POLARITY ? 0 : 1);
42
			}
43
		}
44
		break;
45
	}
46
	}
47

48
	return 0;
49
}
50

51
static void efm32_gpio_set(unsigned char port, gpio_mask_t pins, char level) {
52
	if (level) {
53
		GPIO_PortOutSet(port, pins);
54
	} else {
55
		GPIO_PortOutClear(port, pins);
56
	}
57
}
58

59
static gpio_mask_t efm32_gpio_get(unsigned char port, gpio_mask_t pins) {
60

61
	return GPIO_PortOutGet(port) & pins;
62
}
63

64
static const struct gpio_chip efm32_gpio_chip = {
65
	.setup_mode = efm32_gpio_setup_mode,
66
	.get = efm32_gpio_get,
67
	.set = efm32_gpio_set,
68
	.nports = EFM32_GPIO_PORTS_COUNT
69
};
70

71
static int efm32_gpio_init(void) {
72
#if (_SILICON_LABS_32B_SERIES < 2)
73
  CMU_ClockEnable(cmuClock_HFPER, true);
74
#endif
75

76
#if (_SILICON_LABS_32B_SERIES < 2) \
77
  || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_2)
78
  CMU_ClockEnable(cmuClock_GPIO, true);
79
#endif
80
	return gpio_register_chip((struct gpio_chip *)&efm32_gpio_chip, EFM32_GPIO_CHIP_ID);
81

82
}
83

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

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

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

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