Add a set_pins() core function which can configure all GPIO in one loop.
authorNathael Pajani <nathael.pajani@ed3l.fr>
Sun, 14 Dec 2014 17:00:11 +0000 (18:00 +0100)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Tue, 8 Nov 2022 16:03:04 +0000 (17:03 +0100)
core/pio.c
include/core/pio.h

index 149cbc0..f2fe4a3 100644 (file)
@@ -144,7 +144,11 @@ void config_pio(const struct pio* pp, uint32_t mode)
 }
 
 
-/* FIXME: We should add some system-wide way to "reserve" a pin, but anyway this
- * would not prevent anyone from configuring the same pin for two diferent functions
- * when not using our code.
- */
+void set_pins(const struct pio_config* pins)
+{
+       int i = 0;
+       for (i = 0; pins[i].pio.port != 0xFF; i++) {
+               config_pio(&(pins[i].pio), pins[i].mode);
+       }
+}
+
index fb558fe..30d9c73 100644 (file)
@@ -35,6 +35,13 @@ struct pio {
 };
 
 #define ARRAY_LAST_PIN   {0xFF, 0xFF, 0xFF}
+#define PIO_LAST   ARRAY_LAST_PIN
+
+struct pio_config {
+       struct pio pio;
+       uint32_t mode;
+};
+#define ARRAY_LAST_PIO  { PIO_LAST, 0xFF }
 
 
 #define PORT0_NB_PINS 32
@@ -47,6 +54,8 @@ void pio_copy(struct pio* dst, const struct pio* src);
 /* Configure the pin in the requested function and mode. */
 void config_pio(const struct pio* pp, uint32_t mode);
 
+/* Configure a set (array) of pins in a single loop */
+void set_pins(const struct pio_config* pins);
 
 /****************************************************************************/
 /*  GPIO Pins  */