diff options
author | tcsullivan <tullivan99@gmail.com> | 2019-07-18 18:43:22 -0400 |
---|---|---|
committer | tcsullivan <tullivan99@gmail.com> | 2019-07-18 18:43:22 -0400 |
commit | 998b3ac86e3b3f926d81e768f1200815e9e3d148 (patch) | |
tree | e4f0c7ea4499c07b5a73844cbeef55cb56a5b46d /src/libgpio/gpio.c | |
parent | b92ccff9b1d3dd33fc97b0796b193852027678ba (diff) |
Fixed syscalls, initrd program works
Diffstat (limited to 'src/libgpio/gpio.c')
-rw-r--r-- | src/libgpio/gpio.c | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/src/libgpio/gpio.c b/src/libgpio/gpio.c index fdc877c..522817f 100644 --- a/src/libgpio/gpio.c +++ b/src/libgpio/gpio.c @@ -2,77 +2,79 @@ #include <stdint.h> +#define NOOPTIMIZE __attribute__((optimize(0))) + +NOOPTIMIZE void gpioMode(gpio_pin_t pin, int mode) { - register uint32_t r1 __asm("r1") = pin; - register uint32_t r2 __asm("r2") = mode; - __asm("\ + uint32_t args[2] = { (uint32_t)pin, mode }; + __asm volatile("\ mov r0, 0; \ - mov r1, %0; \ - mov r2, %1; \ + mov r1, 0; \ + mov r2, %0; \ svc 1; \ - " :: "r" (r1), "r" (r2)); + " :: "r" (args)); } +NOOPTIMIZE void gpioType(gpio_pin_t pin, int type) { - register uint32_t r1 __asm("r1") = pin; - register uint32_t r2 __asm("r2") = type; - __asm("\ + uint32_t args[2] = { (uint32_t)pin, type }; + __asm volatile("\ mov r0, 1; \ - mov r1, %0; \ - mov r2, %1; \ + mov r1, 0; \ + mov r2, %0; \ svc 1; \ - " :: "r" (r1), "r" (r2)); + " :: "r" (args)); } +NOOPTIMIZE void gpioPuPd(gpio_pin_t pin, int pupd) { - register uint32_t r1 __asm("r1") = pin; - register uint32_t r2 __asm("r2") = pupd; - __asm("\ + uint32_t args[2] = { (uint32_t)pin, pupd }; + __asm volatile("\ mov r0, 2; \ - mov r1, %0; \ - mov r2, %1; \ + mov r1, 0; \ + mov r2, %0; \ svc 1; \ - " :: "r" (r1), "r" (r2)); + " :: "r" (args)); } +NOOPTIMIZE void gpioSpeed(gpio_pin_t pin, int speed) { - register uint32_t r1 __asm("r1") = pin; - register uint32_t r2 __asm("r2") = speed; - __asm("\ + uint32_t args[2] = { (uint32_t)pin, speed }; + __asm volatile("\ mov r0, 3; \ - mov r1, %0; \ - mov r2, %1; \ + mov r1, 0; \ + mov r2, %0; \ svc 1; \ - " :: "r" (r1), "r" (r2)); + " :: "r" (args)); } +NOOPTIMIZE void gpioWrite(gpio_pin_t pin, int value) { - register uint32_t r1 __asm("r1") = pin; - register uint32_t r2 __asm("r2") = value; - __asm("\ + uint32_t args[2] = { (uint32_t)pin, value }; + __asm volatile("\ mov r0, 4; \ - mov r1, %0; \ - mov r2, %1; \ + mov r1, 0; \ + mov r2, %0; \ svc 1; \ - " :: "r" (r1), "r" (r2)); + " :: "r" (args)); } +NOOPTIMIZE int gpioRead(gpio_pin_t pin) { - int ret = 0; - register uint32_t r1 __asm("r1") = pin; - register uint32_t r2 __asm("r2") = (uint32_t)&ret; - __asm("\ + volatile int ret = 0; + uint32_t args[1] = { (uint32_t)pin }; + __asm volatile("\ mov r0, 5; \ mov r1, %0; \ mov r2, %1; \ svc 1; \ - " :: "r" (r1), "r" (r2)); + " :: "r" (&ret), "r" (args)); return ret; } |