diff --git a/drivers/avr/pio-simple.c b/drivers/avr/pio-simple.c index 5ae6716..c124a99 100644 --- a/drivers/avr/pio-simple.c +++ b/drivers/avr/pio-simple.c @@ -7,6 +7,10 @@ #include "pio-simple.h" +#define PIO_BITMASK(PIO) (BIT((PIO) & 7) + +#define PIO_PORT(PIO) ((PIO) >> 3) + /** Configure pio @param pio */ @@ -14,9 +18,9 @@ bool pio_config_set (pio_t pio, pio_config_t config) { uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: switch (config) @@ -115,9 +119,9 @@ void pio_output_high (pio_t pio) { uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: PORTB |= bitmask; @@ -143,9 +147,9 @@ void pio_output_low (pio_t pio) { uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: PORTB &= ~bitmask; @@ -171,9 +175,9 @@ void pio_output_toggle (pio_t pio) { uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: PORTB ^= bitmask; @@ -200,9 +204,9 @@ bool pio_input_get (pio_t pio) { uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: return (PINB & bitmask) != 0; @@ -240,9 +244,9 @@ pio_config_t pio_config_get (pio_t pio) bool port; uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: ddr = (DDRB & bitmask) != 0; @@ -285,9 +289,9 @@ bool pio_output_get (pio_t pio) { uint8_t bitmask; - bitmask = BIT (pio.bit); + bitmask = PIO_BITMASK (pio); - switch (pio.port) + switch (PIO_PORT (pio)) { case PORT_B: return (PORTB & bitmask) != 0; diff --git a/drivers/avr/pio-simple.h b/drivers/avr/pio-simple.h index 4c5fbf7..fc10735 100644 --- a/drivers/avr/pio-simple.h +++ b/drivers/avr/pio-simple.h @@ -14,13 +14,9 @@ typedef enum pio_port_enum PORT_A, PORT_B, PORT_C, PORT_D, PORT_E } pio_port_t; -typedef uint8_t pio_bit_t; -typedef struct pio_struct -{ - pio_port_t port; - pio_bit_t bit; -} pio_t; +typedef uint8_t pio_t; + typedef enum pio_config_enum { @@ -29,7 +25,7 @@ typedef enum pio_config_enum /* Define a PIO as a structure in terms of a port and a bit. */ -#define PIO_DEFINE(PORT, PORTBIT) (pio_t){PORT, PORTBIT} +#define PIO_DEFINE(PORT, PORTBIT) ((PORT) * 8 + (PORTBIT)) /** Configure pio.