Add support for Atmega32A to pin declarations and universal matrix (#4015)
* add computed pins from mcu type * update for atmega32a * doc typo * add atmega16 chips, link to references * remove avr include from config * exclude assembler in config.h includes * consolodate options, add 646 * fix typo in pindef
This commit is contained in:
parent
5909d8aef1
commit
15f6278aa6
4 changed files with 119 additions and 69 deletions
|
@ -140,26 +140,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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue