36#ifndef LIBOPENCM3_GPIO_H
37#define LIBOPENCM3_GPIO_H
49#define GPIOA GPIO_PORT_A_BASE
50#define GPIOB GPIO_PORT_B_BASE
51#define GPIOC GPIO_PORT_C_BASE
52#define GPIOD GPIO_PORT_D_BASE
53#define GPIOE GPIO_PORT_E_BASE
54#define GPIOH GPIO_PORT_H_BASE
60#define GPIO_MODER(port) MMIO32((port) + 0x00)
61#define GPIOA_MODER GPIO_MODER(GPIOA)
62#define GPIOB_MODER GPIO_MODER(GPIOB)
63#define GPIOC_MODER GPIO_MODER(GPIOC)
64#define GPIOD_MODER GPIO_MODER(GPIOD)
65#define GPIOE_MODER GPIO_MODER(GPIOE)
66#define GPIOH_MODER GPIO_MODER(GPIOH)
69#define GPIO_OTYPER(port) MMIO32((port) + 0x04)
70#define GPIOA_OTYPER GPIO_OTYPER(GPIOA)
71#define GPIOB_OTYPER GPIO_OTYPER(GPIOB)
72#define GPIOC_OTYPER GPIO_OTYPER(GPIOC)
73#define GPIOD_OTYPER GPIO_OTYPER(GPIOD)
74#define GPIOE_OTYPER GPIO_OTYPER(GPIOE)
75#define GPIOH_OTYPER GPIO_OTYPER(GPIOH)
78#define GPIO_OSPEEDR(port) MMIO32((port) + 0x08)
79#define GPIOA_OSPEEDR GPIO_OSPEEDR(GPIOA)
80#define GPIOB_OSPEEDR GPIO_OSPEEDR(GPIOB)
81#define GPIOC_OSPEEDR GPIO_OSPEEDR(GPIOC)
82#define GPIOD_OSPEEDR GPIO_OSPEEDR(GPIOD)
83#define GPIOE_OSPEEDR GPIO_OSPEEDR(GPIOE)
84#define GPIOH_OSPEEDR GPIO_OSPEEDR(GPIOH)
87#define GPIO_PUPDR(port) MMIO32((port) + 0x0c)
88#define GPIOA_PUPDR GPIO_PUPDR(GPIOA)
89#define GPIOB_PUPDR GPIO_PUPDR(GPIOB)
90#define GPIOC_PUPDR GPIO_PUPDR(GPIOC)
91#define GPIOD_PUPDR GPIO_PUPDR(GPIOD)
92#define GPIOE_PUPDR GPIO_PUPDR(GPIOE)
93#define GPIOH_PUPDR GPIO_PUPDR(GPIOH)
96#define GPIO_IDR(port) MMIO32((port) + 0x10)
97#define GPIOA_IDR GPIO_IDR(GPIOA)
98#define GPIOB_IDR GPIO_IDR(GPIOB)
99#define GPIOC_IDR GPIO_IDR(GPIOC)
100#define GPIOD_IDR GPIO_IDR(GPIOD)
101#define GPIOE_IDR GPIO_IDR(GPIOE)
102#define GPIOH_IDR GPIO_IDR(GPIOH)
105#define GPIO_ODR(port) MMIO32((port) + 0x14)
106#define GPIOA_ODR GPIO_ODR(GPIOA)
107#define GPIOB_ODR GPIO_ODR(GPIOB)
108#define GPIOC_ODR GPIO_ODR(GPIOC)
109#define GPIOD_ODR GPIO_ODR(GPIOD)
110#define GPIOE_ODR GPIO_ODR(GPIOE)
111#define GPIOH_ODR GPIO_ODR(GPIOH)
114#define GPIO_BSRR(port) MMIO32((port) + 0x18)
115#define GPIOA_BSRR GPIO_BSRR(GPIOA)
116#define GPIOB_BSRR GPIO_BSRR(GPIOB)
117#define GPIOC_BSRR GPIO_BSRR(GPIOC)
118#define GPIOD_BSRR GPIO_BSRR(GPIOD)
119#define GPIOE_BSRR GPIO_BSRR(GPIOE)
120#define GPIOH_BSRR GPIO_BSRR(GPIOH)
123#define GPIO_LCKR(port) MMIO32((port) + 0x1C)
124#define GPIOA_LCKR GPIO_LCKR(GPIOA)
125#define GPIOB_LCKR GPIO_LCKR(GPIOB)
126#define GPIOC_LCKR GPIO_LCKR(GPIOC)
127#define GPIOD_LCKR GPIO_LCKR(GPIOD)
128#define GPIOE_LCKR GPIO_LCKR(GPIOE)
129#define GPIOH_LCKR GPIO_LCKR(GPIOH)
132#define GPIO_AFRL(port) MMIO32((port) + 0x20)
133#define GPIOA_AFRL GPIO_AFRL(GPIOA)
134#define GPIOB_AFRL GPIO_AFRL(GPIOB)
135#define GPIOC_AFRL GPIO_AFRL(GPIOC)
136#define GPIOD_AFRL GPIO_AFRL(GPIOD)
137#define GPIOE_AFRL GPIO_AFRL(GPIOE)
138#define GPIOH_AFRL GPIO_AFRL(GPIOH)
141#define GPIO_AFRH(port) MMIO32((port) + 0x24)
142#define GPIOA_AFRH GPIO_AFRH(GPIOA)
143#define GPIOB_AFRH GPIO_AFRH(GPIOB)
144#define GPIOC_AFRH GPIO_AFRH(GPIOC)
145#define GPIOD_AFRH GPIO_AFRH(GPIOD)
146#define GPIOE_AFRH GPIO_AFRH(GPIOE)
147#define GPIOH_AFRH GPIO_AFRH(GPIOH)
151#define GPIO_MODE(n, mode) ((mode) << (2 * (n)))
152#define GPIO_MODE_MASK(n) (0x3 << (2 * (n)))
156#define GPIO_MODE_INPUT 0x00
157#define GPIO_MODE_OUTPUT 0x01
158#define GPIO_MODE_AF 0x02
159#define GPIO_MODE_ANALOG 0x03
168#define GPIO_OTYPE_PP 0x0
170#define GPIO_OTYPE_OD 0x1
174#define GPIO_OSPEED(n, speed) ((speed) << (2 * (n)))
175#define GPIO_OSPEED_MASK(n) (0x3 << (2 * (n)))
179#define GPIO_OSPEED_400KHZ 0x0
180#define GPIO_OSPEED_2MHZ 0x1
181#define GPIO_OSPEED_10MHZ 0x2
182#define GPIO_OSPEED_40MHZ 0x3
187#define GPIO_PUPD(n, pupd) ((pupd) << (2 * (n)))
188#define GPIO_PUPD_MASK(n) (0x3 << (2 * (n)))
192#define GPIO_PUPD_NONE 0x0
193#define GPIO_PUPD_PULLUP 0x1
194#define GPIO_PUPD_PULLDOWN 0x2
212#define GPIO_LCKK (1 << 16)
220#define GPIO_AFR(n, af) ((af) << ((n) * 4))
221#define GPIO_AFR_MASK(n) (0xf << ((n) * 4))
253void gpio_mode_setup(uint32_t gpioport, uint8_t mode, uint8_t pull_up_down,
257void gpio_set_af(uint32_t gpioport, uint8_t alt_func_num, uint16_t gpios);
void gpio_set_af(uint32_t gpioport, uint8_t alt_func_num, uint16_t gpios)
Set GPIO Alternate Function Selection.
void gpio_mode_setup(uint32_t gpioport, uint8_t mode, uint8_t pull_up_down, uint16_t gpios)
Set GPIO Pin Mode.
void gpio_set_output_options(uint32_t gpioport, uint8_t otype, uint8_t speed, uint16_t gpios)
Set GPIO Output Options.