|
|
|
@ -138,26 +138,28 @@ extern uint32_t default_layer_state;
|
|
|
|
|
|
|
|
|
|
//Function substitutions to ease GPIO manipulation
|
|
|
|
|
#ifdef __AVR__
|
|
|
|
|
#define PIN_ADDRESS(p, offset) _SFR_IO8(ADDRESS_BASE + (p >> PORT_SHIFTER) + offset)
|
|
|
|
|
|
|
|
|
|
#define pin_t uint8_t
|
|
|
|
|
#define setPinInput(pin) _SFR_IO8((pin >> 4) + 1) &= ~ _BV(pin & 0xF)
|
|
|
|
|
#define setPinInput(pin) PIN_ADDRESS(pin, 1) &= ~ _BV(pin & 0xF)
|
|
|
|
|
#define setPinInputHigh(pin) ({\
|
|
|
|
|
_SFR_IO8((pin >> 4) + 1) &= ~ _BV(pin & 0xF);\
|
|
|
|
|
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);\
|
|
|
|
|
PIN_ADDRESS(pin, 1) &= ~ _BV(pin & 0xF);\
|
|
|
|
|
PIN_ADDRESS(pin, 2) |= _BV(pin & 0xF);\
|
|
|
|
|
})
|
|
|
|
|
#define setPinInputLow(pin) _Static_assert(0, "AVR Processors cannot impliment an input as pull low")
|
|
|
|
|
#define setPinOutput(pin) _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF)
|
|
|
|
|
#define setPinOutput(pin) PIN_ADDRESS(pin, 1) |= _BV(pin & 0xF)
|
|
|
|
|
|
|
|
|
|
#define writePinHigh(pin) _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF)
|
|
|
|
|
#define writePinLow(pin) _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF)
|
|
|
|
|
#define writePinHigh(pin) PIN_ADDRESS(pin, 2) |= _BV(pin & 0xF)
|
|
|
|
|
#define writePinLow(pin) PIN_ADDRESS(pin, 2) &= ~_BV(pin & 0xF)
|
|
|
|
|
static inline void writePin(pin_t pin, uint8_t level){
|
|
|
|
|
if (level){
|
|
|
|
|
_SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
|
|
|
|
|
PIN_ADDRESS(pin, 2) |= _BV(pin & 0xF);
|
|
|
|
|
} else {
|
|
|
|
|
_SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF);
|
|
|
|
|
PIN_ADDRESS(pin, 2) &= ~_BV(pin & 0xF);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define readPin(pin) (_SFR_IO8(pin >> 4) & _BV(pin & 0xF))
|
|
|
|
|
#define readPin(pin) (PIN_ADDRESS(pin, 0) & _BV(pin & 0xF))
|
|
|
|
|
#elif defined(PROTOCOL_CHIBIOS)
|
|
|
|
|
#define pin_t ioline_t
|
|
|
|
|
#define setPinInput(pin) palSetLineMode(pin, PAL_MODE_INPUT)
|
|
|
|
|