From 9d87c925a9eaa4fc256be3173c14a20d1469472d Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Wed, 9 Sep 2020 11:53:37 +0100 Subject: everything, mostly, working --- radiator-plc/stm32/app/outputs.c | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 radiator-plc/stm32/app/outputs.c (limited to 'radiator-plc/stm32/app/outputs.c') diff --git a/radiator-plc/stm32/app/outputs.c b/radiator-plc/stm32/app/outputs.c new file mode 100644 index 0000000..67d0519 --- /dev/null +++ b/radiator-plc/stm32/app/outputs.c @@ -0,0 +1,47 @@ +#include "project.h" + +#define N_OUTPUTS 8 + +static const uint32_t output_bank[N_OUTPUTS] = { GPIOC, GPIOA, GPIOA, GPIOA, GPIOD, GPIOD, GPIOD, GPIOD}; +static const uint32_t output[N_OUTPUTS] = { GPIO9, GPIO8, GPIO11, GPIO12, GPIO0, GPIO1, GPIO2, GPIO3}; + +void output_set (unsigned r) +{ + if (r >= N_OUTPUTS) return; + + gpio_set (output_bank[r], output[r]); +} + +void output_clear (unsigned r) +{ + if (r >= N_OUTPUTS) return; + + gpio_clear (output_bank[r], output[r]); +} + +void outputs_set (unsigned v) +{ + unsigned r; + + for (r = 0; r < N_OUTPUTS; r++, v >>= 1) { + if (v & 1) output_set (r); + else output_clear (r); + } +} + +void output_write (unsigned r, unsigned v) +{ + if (v) output_set (r); + else output_clear (r); +} + + + +void outputs_init (void) +{ + unsigned r; + + for (r = 0; r < N_OUTPUTS; ++r) + gpio_set_mode (output_bank[r], GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, output[r]); + +} -- cgit v1.2.3