summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sotoudeh <matthew@masot.net>2024-02-25 17:16:55 -0800
committerMatthew Sotoudeh <matthew@masot.net>2024-02-25 17:16:55 -0800
commitb78d16cd5580117254aa1c03e06204f05bdf094f (patch)
tree26474783de474329cfba89c98a79cf9fe63ef14f
parentb9c2cccd8baa60533ce82c59ef5e084b847bf336 (diff)
minor
-rw-r--r--blink/blink.c4
-rw-r--r--blink/gpio.c31
-rw-r--r--blink/gpio.h6
3 files changed, 31 insertions, 10 deletions
diff --git a/blink/blink.c b/blink/blink.c
index b59c950..260fb1f 100644
--- a/blink/blink.c
+++ b/blink/blink.c
@@ -13,8 +13,8 @@ int notmain() {
size_t pin = 29;
gpio_set_function(pin, GPIO_GPIO);
- gpio_set_input(pin, 0);
- gpio_set_output(pin, 1);
+ gpio_set_output(pin);
+ gpio_set_on(pin);
return 0;
}
diff --git a/blink/gpio.c b/blink/gpio.c
index 39c5d51..ea4e66b 100644
--- a/blink/gpio.c
+++ b/blink/gpio.c
@@ -34,22 +34,41 @@ enum gpio_io_mode {
IO_MODE_CACHE,
};
-void gpio_set_input(gpio_t pin, bool enable) {
+void gpio_set_on(gpio_t pin) {
struct gpio_config x = get32_type(struct gpio_config, GPIO_CONFIG + pin);
- x.io_mode = IO_MODE_SET_CLEAR;
- x.input_enable = enable;
+ x.output_value = 1;
put32_type(struct gpio_config, GPIO_CONFIG + pin, x);
}
-void gpio_set_output(gpio_t pin, bool enable) {
+void gpio_set_off(gpio_t pin) {
struct gpio_config x = get32_type(struct gpio_config, GPIO_CONFIG + pin);
- x.io_mode = IO_MODE_SET_CLEAR;
- x.output_enable = enable;
+ x.output_value = 0;
+ put32_type(struct gpio_config, GPIO_CONFIG + pin, x);
+}
+
+void gpio_set_input(gpio_t pin) {
+ struct gpio_config x = get32_type(struct gpio_config, GPIO_CONFIG + pin);
+ x.output_enable = 0;
+ x.input_enable = 1;
+ put32_type(struct gpio_config, GPIO_CONFIG + pin, x);
+}
+
+void gpio_set_output(gpio_t pin) {
+ struct gpio_config x = get32_type(struct gpio_config, GPIO_CONFIG + pin);
+ x.output_enable = 1;
+ x.input_enable = 0;
put32_type(struct gpio_config, GPIO_CONFIG + pin, x);
}
void gpio_set_function(gpio_t pin, enum gpio_alternate_function function) {
struct gpio_config x = get32_type(struct gpio_config, GPIO_CONFIG + pin);
+ x.input_enable = 0;
+ x.schmitt_trigger_enable = 1;
+ x.drive_strength = 3;
+ x.pullup_enable = 0;
+ x.pulldown_enable = 0;
+ x.output_enable = 0;
x.alternate_function = function;
+ x.io_mode = IO_MODE_NORMAL;
put32_type(struct gpio_config, GPIO_CONFIG + pin, x);
}
diff --git a/blink/gpio.h b/blink/gpio.h
index 1f0d651..69a2d0e 100644
--- a/blink/gpio.h
+++ b/blink/gpio.h
@@ -32,6 +32,8 @@ enum gpio_alternate_function {
typedef size_t gpio_t;
-void gpio_set_input(gpio_t pin, bool enable);
-void gpio_set_output(gpio_t pin, bool enable);
+void gpio_set_on(gpio_t pin);
+void gpio_set_off(gpio_t pin);
+void gpio_set_input(gpio_t pin);
+void gpio_set_output(gpio_t pin);
void gpio_set_function(gpio_t pin, enum gpio_alternate_function function);
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback