aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-03-17 20:41:52 -0400
committerKevin O'Connor <kevin@koconnor.net>2019-03-17 20:56:25 -0400
commit4a35f927fc1d7b8c3b34f32c1c889fb433752dcc (patch)
treee775cbf7f216996cd2056c6568c5fbc5eac1f3fb /src
parent0af89e4766e5a25abb9d5d9667e2f187c4cec7c1 (diff)
downloadkutter-4a35f927fc1d7b8c3b34f32c1c889fb433752dcc.tar.gz
kutter-4a35f927fc1d7b8c3b34f32c1c889fb433752dcc.tar.xz
kutter-4a35f927fc1d7b8c3b34f32c1c889fb433752dcc.zip
initial_pins: Add ability to configure output pins at mcu startup
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src')
-rw-r--r--src/Kconfig9
-rw-r--r--src/Makefile2
-rw-r--r--src/initial_pins.c25
-rw-r--r--src/initial_pins.h15
4 files changed, 50 insertions, 1 deletions
diff --git a/src/Kconfig b/src/Kconfig
index a80e1deb..7e6475b9 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -88,6 +88,15 @@ config STEP_DELAY
The default for AVR is -1, for all other micro-controllers it
is 2us.
+config INITIAL_PINS
+ string "GPIO pins to set at micro-controller startup"
+ depends on LOW_LEVEL_OPTIONS
+ help
+ One may specify a comma separated list of gpio pins to set
+ during the micro-controller startup sequence. By default the
+ pins will be set to output high - preface a pin with a '!'
+ character to set that pin to output low.
+
# The HAVE_GPIO_x options allow boards to disable support for some
# commands if the hardware does not support the feature.
config HAVE_GPIO
diff --git a/src/Makefile b/src/Makefile
index 546dc0a5..c838e911 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,6 +1,6 @@
# Main code build rules
-src-y += sched.c command.c basecmd.c debugcmds.c
+src-y += sched.c command.c basecmd.c debugcmds.c initial_pins.c
src-$(CONFIG_HAVE_GPIO) += gpiocmds.c stepper.c endstop.c
src-$(CONFIG_HAVE_GPIO_ADC) += adccmds.c
src-$(CONFIG_HAVE_GPIO_SPI) += spicmds.c thermocouple.c
diff --git a/src/initial_pins.c b/src/initial_pins.c
new file mode 100644
index 00000000..cd478508
--- /dev/null
+++ b/src/initial_pins.c
@@ -0,0 +1,25 @@
+// Support setting gpio pins at mcu start
+//
+// Copyright (C) 2019 Kevin O'Connor <kevin@koconnor.net>
+//
+// This file may be distributed under the terms of the GNU GPLv3 license.
+
+#include "autoconf.h" // CONFIG_INITIAL_PINS
+#include "board/gpio.h" // gpio_out_setup
+#include "board/pgm.h" // READP
+#include "ctr.h" // DECL_CTR
+#include "initial_pins.h" // initial_pins
+#include "sched.h" // DECL_INIT
+
+DECL_CTR("DECL_INITIAL_PINS " __stringify(CONFIG_INITIAL_PINS));
+
+void
+initial_pins_setup(void)
+{
+ int i;
+ for (i=0; i<initial_pins_size; i++) {
+ const struct initial_pin_s *ip = &initial_pins[i];
+ gpio_out_setup(READP(ip->pin), READP(ip->flags) & IP_OUT_HIGH);
+ }
+}
+DECL_INIT(initial_pins_setup);
diff --git a/src/initial_pins.h b/src/initial_pins.h
new file mode 100644
index 00000000..95bb2921
--- /dev/null
+++ b/src/initial_pins.h
@@ -0,0 +1,15 @@
+#ifndef __INITIAl_PINS_H
+#define __INITIAl_PINS_H
+
+struct initial_pin_s {
+ int pin;
+ uint8_t flags;
+};
+
+enum { IP_OUT_HIGH = 1 };
+
+// out/compile_time_request.c (auto generated file)
+extern const struct initial_pin_s initial_pins[];
+extern const int initial_pins_size;
+
+#endif // initial_pins.h