diff options
author | root <root@ka-ata-killa.panaceas.james.local> | 2021-11-21 17:27:02 +0000 |
---|---|---|
committer | root <root@ka-ata-killa.panaceas.james.local> | 2021-11-21 17:27:02 +0000 |
commit | 64f632692fe2a164830a363f8db158a8a2ae33de (patch) | |
tree | c2106d606b7e355ede93ff2a04848224a480dbc7 /stm32/app/pins.h | |
download | metric_clock-64f632692fe2a164830a363f8db158a8a2ae33de.tar.gz metric_clock-64f632692fe2a164830a363f8db158a8a2ae33de.tar.bz2 metric_clock-64f632692fe2a164830a363f8db158a8a2ae33de.zip |
first workingish cut
Diffstat (limited to 'stm32/app/pins.h')
-rw-r--r-- | stm32/app/pins.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/stm32/app/pins.h b/stm32/app/pins.h new file mode 100644 index 0000000..954396f --- /dev/null +++ b/stm32/app/pins.h @@ -0,0 +1,54 @@ +#ifndef _PINS_H_ +#define _PINS_H_ + +/* st seem to change these with every chip revision */ + +#define MAP_ANA(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_ANALOG, a ); \ + } while (0) + +#define MAP_AF(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, a ); \ + } while (0) + +/* STM32F1 doesn't have AF pull up, but also doesn't disconnect af inputs so just use regular pull up */ +#define MAP_AF_PU(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, a); \ + gpio_set( a ## _PORT, a); \ + } while (0) + +#define MAP_AF_OD(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_OPENDRAIN, a ); \ + } while (0) + + +#define MAP_OUTPUT_PP(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, a ); \ + } while (0) + + +#define MAP_OUTPUT_OD(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, a ); \ + } while (0) + + +/* STM32F1 madly uses the output register to drive the other end of the resistor, so pull up */ +/* requires us to write a 1 there */ + +#define MAP_INPUT_PU(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, a); \ + gpio_set( a ## _PORT, a); \ + } while (0) + + +#define MAP_INPUT(a) do { \ + gpio_set_mode( a ## _PORT, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, a); \ + } while (0) + + +#define CLEAR(a) gpio_clear( a ## _PORT, a) +#define SET(a) gpio_set( a ## _PORT, a) +#define GET(a) gpio_get( a ## _PORT, a) +#define TOGGLE(a) gpio_toggle( a ## _PORT, a) + +#endif |