diff --git a/build/final.elf b/build/final.elf index 933203e..e72a153 100755 Binary files a/build/final.elf and b/build/final.elf differ diff --git a/build/gpio.S b/build/gpio.S index 9af46bc..0b828f1 100644 --- a/build/gpio.S +++ b/build/gpio.S @@ -61,11 +61,11 @@ gpio_set_mode: .loc 1 9 7 ldr r3, [r7, #12] ldr r3, [r3] - .loc 1 9 34 + .loc 1 9 32 ldr r2, [r7, #8] lsls r2, r2, #1 - .loc 1 9 27 - movs r1, #17 + .loc 1 9 25 + movs r1, #3 lsl r2, r1, r2 .loc 1 9 18 mvns r2, r2 @@ -79,10 +79,10 @@ gpio_set_mode: .loc 1 10 24 ldrb r2, [r7, #5] @ zero_extendqisi2 and r1, r2, #3 - .loc 1 10 40 + .loc 1 10 39 ldr r2, [r7, #8] lsls r2, r2, #1 - .loc 1 10 33 + .loc 1 10 32 lsl r2, r1, r2 .loc 1 10 15 orrs r2, r2, r3 diff --git a/build/gpio.i b/build/gpio.i index 8601f4c..348afd2 100644 --- a/build/gpio.i +++ b/build/gpio.i @@ -2028,8 +2028,8 @@ void gpio_write(uint16_t pin, void gpio_set_mode(uint16_t pin, GPIO_MODE mode) { struct gpio *gpio = ((struct gpio*)(uintptr_t)((0x40020000U) + ((0x400U) * (pin >> 8)))); int pn = (pin & 0b1111); - gpio->MODER &= ~(0x0011 << (pn * 2)); - gpio->MODER |= (mode & 0b011) << (pn * 2); + gpio->MODER &= ~(0b11 << (pn * 2)); + gpio->MODER |= (mode & 0b11) << (pn * 2); } void gpio_write(uint16_t pin, diff --git a/build/gpio.o b/build/gpio.o index c02e7ce..3483ab3 100644 Binary files a/build/gpio.o and b/build/gpio.o differ diff --git a/src/gpio.c b/src/gpio.c index afed8f4..b92dd26 100644 --- a/src/gpio.c +++ b/src/gpio.c @@ -6,8 +6,8 @@ void gpio_set_mode(uint16_t pin, GPIO_MODE mode) { struct gpio *gpio = GPIO(PINPORT(pin)); // GPIO port address int pn = PINNUM(pin); // Pin number - gpio->MODER &= ~(0x0011 << (pn * 2)); // Clear existing setting. Each pin uses 2 bits - gpio->MODER |= (mode & 0b011) << (pn * 2); // Set new mode. Each pin uses 2 bits + gpio->MODER &= ~(0b11 << (pn * 2)); // Clear existing setting. Each pin uses 2 bits + gpio->MODER |= (mode & 0b11) << (pn * 2); // Set new mode. Each pin uses 2 bits } void gpio_write(uint16_t pin, bool val) {