Skip to content
bootloader_gpio.h 3.59 KiB
Newer Older
f4grx's avatar
f4grx committed
#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 {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_PORT = 0x000000F0,
f4grx's avatar
f4grx committed
    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 {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_ALT  = 0x00000F00,
f4grx's avatar
f4grx committed
    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 {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_MODE = 0x00003000,
f4grx's avatar
f4grx committed
    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 {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_PULL = 0x0000C000,
f4grx's avatar
f4grx committed
    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 {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_SPD  = 0x00030000,
f4grx's avatar
f4grx committed
    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 {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_TYPE = 0x00040000,
f4grx's avatar
f4grx committed
    GPIO_TYPE_PP = 0<<GPIO_FLAGS_SHIFT_TYPE,
    GPIO_TYPE_OD = 1<<GPIO_FLAGS_SHIFT_TYPE,
};

enum {
f4grx's avatar
f4grx committed
	GPIO_FLAGS_MASK_INIT = 0x00080000,
f4grx's avatar
f4grx committed
    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 */