embox

Форк
0
/
k210_fpioa.c 
87 строк · 2.0 Кб
1
/**
2
 * @file k210_gpio.c
3
 * @brief
4
 * @author sksat <sksat@sksat.net>
5
 * @version 0.1
6
 * @date 2020-08-15
7
 */
8

9
#include <assert.h>
10
#include <util/log.h>
11

12
#include <embox/unit.h>
13
#include <lib/libds/bit.h>
14
#include <lib/libds/array.h>
15

16
#include <drivers/gpio/k210/fpioa.h>
17
#include <drivers/clk/maix_bit_sysctl.h>
18
#include <config/board_config.h>
19

20
volatile fpioa_t* const fpioa = (volatile fpioa_t*) CONF_FPIOA_PORT_REGION_BASE;
21

22
// EMBOX_UNIT_INIT(k210_fpioa_init);
23

24
// // TODO: add sysctl driver
25

26
// // central clock enable(sysctl: 0x28)
27
// volatile sysctl_clock_enable_central* const clk_en_cent = (volatile sysctl_clock_enable_central*) CONF_SYSCTL_REGION_BASE + 0x28;
28
// volatile sysctl_clock_enable_peripheral* const clk_en_peri = (volatile sysctl_clock_enable_peripheral*) CONF_SYSCTL_REGION_BASE + 0x2c;
29

30
// static int k210_fpioa_init(void){
31

32
// 	// enable bus clock
33
// 	clk_en_cent->apb0 = 1;
34

35
// 	// enable device clock
36
// 	clk_en_peri->fpioa = 1;
37

38
// 	return 0;
39
// }
40

41
void k210_fpioa_set_func_impl(uint8_t num, k210_fpioa_func_t func){
42
	// TODO: other func
43
	assert(FN_GPIO0 <= func && func <= FN_GPIO7);
44

45
	if(FN_GPIO0 <= func && func <= FN_GPIO7){
46
		fpioa->io[num] = (const k210_fpioa_io_cfg_t){
47
			.channel = func,
48
			.div = 0xf,
49
			.out_enable = 1,
50
			.out_inv = 0,
51
			.data_out = 0,
52
			.data_inv = 0,
53
			.pullup = 0,
54
			.pulldown = 1,		// pull down
55
			.reserved = 0,
56
			.slew = 0,
57
			.in_enable = 1,
58
			.in_inv = 0,
59
			.data_in_inv = 0,
60
			.sch_trigger = 1,
61
			.reserved1 = 0,
62
			.pad_di = 0,
63
		};
64
	}
65
}
66

67
void k210_fpioa_set_func(uint8_t num, k210_fpioa_func_t func){
68
	assert(num <= CONF_FPIOA_PORT_WIDTH);
69
	assert(0 <= func && func < FN_MAX);
70

71
	if(func == FN_RESERVED0){
72
		k210_fpioa_set_func_impl(num, FN_RESERVED0);
73
		return;
74
	}
75

76
	for(int i=0;i<CONF_FPIOA_PORT_WIDTH;i++){
77
		if((fpioa->io[i].channel == func) && (i != num)){
78
			k210_fpioa_set_func_impl(num, FN_RESERVED0);
79
		}
80
	}
81

82
	k210_fpioa_set_func_impl(num, func);
83
}
84

85
void k210_fpioa_set_pull(uint8_t num, k210_fpioa_pull_t pull){
86
	// TODO
87
}
88

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

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

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

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