diff options
author | Joshua Diamond <josh@windowoffire.com> | 2021-02-14 19:59:26 -0500 |
---|---|---|
committer | Joshua Diamond <josh@windowoffire.com> | 2021-02-14 19:59:26 -0500 |
commit | f1a3ce49ccdfee79fbad76fd13bcf4448318eb6b (patch) | |
tree | 8725ba276f485dc62a40d8f6d1ebe1bbc84e6fb3 /tmk_core/common/avr/gpio.h | |
parent | c80e5f9f8868ccaa8cb990be6f4da3f1011c2b78 (diff) | |
parent | 6f44c2ec31a6aeacd9e90060a9670be03be372fe (diff) |
Merge branch 'master' into develop
Diffstat (limited to 'tmk_core/common/avr/gpio.h')
-rw-r--r-- | tmk_core/common/avr/gpio.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tmk_core/common/avr/gpio.h b/tmk_core/common/avr/gpio.h new file mode 100644 index 0000000000..231556c29c --- /dev/null +++ b/tmk_core/common/avr/gpio.h @@ -0,0 +1,34 @@ +/* Copyright 2021 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#pragma once + +#include <avr/io.h> +#include "pin_defs.h" + +typedef uint8_t pin_t; + +#define setPinInput(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF)) +#define setPinInputHigh(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) |= _BV((pin)&0xF)) +#define setPinInputLow(pin) _Static_assert(0, "AVR processors cannot implement an input as pull low") +#define setPinOutput(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF)) + +#define writePinHigh(pin) (PORTx_ADDRESS(pin) |= _BV((pin)&0xF)) +#define writePinLow(pin) (PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF)) +#define writePin(pin, level) ((level) ? writePinHigh(pin) : writePinLow(pin)) + +#define readPin(pin) ((bool)(PINx_ADDRESS(pin) & _BV((pin)&0xF))) + +#define togglePin(pin) (PORTx_ADDRESS(pin) ^= _BV((pin)&0xF)) |