Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef BOOTLOADER_GPIO
#define BOOTLOADER_GPIO
/* format for flags
offset size name
0 4 LINE (0-15)
4 4 PORT (0-10)
8 4 ALT (0-15)
12 2 MODER (0-3)
14 2 PUPDR (0-2)
16 2 OSPEEDR (0-3)
18 1 OTYPER (0-1)
19 1 INITSTATE (0-1)
*/
enum {
GPIO_FLAGS_SHIFT_LINE = 0,
GPIO_FLAGS_SHIFT_PORT = 4,
GPIO_FLAGS_SHIFT_ALT = 8,
GPIO_FLAGS_SHIFT_MODE = 12,
GPIO_FLAGS_SHIFT_PULL = 14,
GPIO_FLAGS_SHIFT_SPD = 16,
GPIO_FLAGS_SHIFT_TYPE = 18,
GPIO_FLAGS_SHIFT_INIT = 19,
};
enum {
GPIO_FLAGS_MASK_LINE = 0x0000000F,
GPIO_PIN_0 = 0<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_1 = 1<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_2 = 2<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_3 = 3<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_4 = 4<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_5 = 5<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_6 = 6<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_7 = 7<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_8 = 8<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_9 = 9<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_10= 10<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_11= 11<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_12= 12<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_13= 13<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_14= 14<<GPIO_FLAGS_SHIFT_LINE,
GPIO_PIN_15= 15<<GPIO_FLAGS_SHIFT_LINE,
};
enum {
GPIO_PORT_A = 0<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_B = 1<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_C = 2<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_D = 3<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_E = 4<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_F = 5<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_G = 6<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_H = 7<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_I = 8<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_J = 9<<GPIO_FLAGS_SHIFT_PORT,
GPIO_PORT_K = 10<<GPIO_FLAGS_SHIFT_PORT,
};
enum {
GPIO_ALT_0 = 0<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_1 = 1<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_2 = 2<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_3 = 3<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_4 = 4<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_5 = 5<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_6 = 6<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_7 = 7<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_8 = 8<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_9 = 9<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_10= 10<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_11= 11<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_12= 12<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_13= 13<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_14= 14<<GPIO_FLAGS_SHIFT_ALT,
GPIO_ALT_15= 15<<GPIO_FLAGS_SHIFT_ALT,
};
enum {
GPIO_MODE_IN = 0<<GPIO_FLAGS_SHIFT_MODE,
GPIO_MODE_OUT = 1<<GPIO_FLAGS_SHIFT_MODE,
GPIO_MODE_ALT = 2<<GPIO_FLAGS_SHIFT_MODE,
GPIO_MODE_ANALOG = 3<<GPIO_FLAGS_SHIFT_MODE,
};
enum {
GPIO_PULL_NONE = 0<<GPIO_FLAGS_SHIFT_PULL,
GPIO_PULL_UP = 1<<GPIO_FLAGS_SHIFT_PULL,
GPIO_PULL_DOWN = 2<<GPIO_FLAGS_SHIFT_PULL,
};
enum {
GPIO_SPD_LOW = 0<<GPIO_FLAGS_SHIFT_SPD,
GPIO_SPD_MED = 1<<GPIO_FLAGS_SHIFT_SPD,
GPIO_SPD_FAST = 2<<GPIO_FLAGS_SHIFT_SPD,
GPIO_SPD_HIGH = 3<<GPIO_FLAGS_SHIFT_SPD,
};
enum {
GPIO_TYPE_PP = 0<<GPIO_FLAGS_SHIFT_TYPE,
GPIO_TYPE_OD = 1<<GPIO_FLAGS_SHIFT_TYPE,
};
enum {
GPIO_INIT_CLR = 0<<GPIO_FLAGS_SHIFT_INIT,
GPIO_INIT_SET = 1<<GPIO_FLAGS_SHIFT_INIT,
};
void bootloader_gpio_init(uint32_t gpiodesc);
void bootloader_gpio_write(uint32_t gpio, int state);
int bootloader_gpio_read(uint32_t gpio);
#endif /* BOOTLOADER_GPIO */