diff --git a/megaavr/variants/28pin-standard/pins_arduino.h b/megaavr/variants/28pin-standard/pins_arduino.h index 1cc724b..e851a8d 100644 --- a/megaavr/variants/28pin-standard/pins_arduino.h +++ b/megaavr/variants/28pin-standard/pins_arduino.h @@ -67,11 +67,14 @@ // PWM pins #if defined(MILLIS_USE_TIMERB0) - #define digitalPinHasPWM(p) (((p) >= PIN_PD0 && (p) <= PIN_PD5) || (p) == PIN_PA3 || (p) == PIN_PC0) + #define digitalPinHasPWM(p) (((p) == PIN_PD0) || ((p) == PIN_PD1) || ((p) == PIN_PD1) || ((p) == PIN_PD3) || \ + ((p) == PIN_PD4) || ((p) == PIN_PD5) || ((p) == PIN_PA3) || ((p) == PIN_PC0)) #elif defined(MILLIS_USE_TIMERB1) - #define digitalPinHasPWM(p) (((p) >= PIN_PD0 && (p) <= PIN_PD5) || (p) == PIN_PA2 || (p) == PIN_PC0) + #define digitalPinHasPWM(p) (((p) == PIN_PD0) || ((p) == PIN_PD1) || ((p) == PIN_PD1) || ((p) == PIN_PD3) || \ + ((p) == PIN_PD4) || ((p) == PIN_PD5) || ((p) == PIN_PA2) || ((p) == PIN_PC0)) #else // default to MILLIS_USE_TIMERB2 - #define digitalPinHasPWM(p) (((p) >= PIN_PD0 && (p) <= PIN_PD5) || (p) == PIN_PA2 || (p) == PIN_PA3) + #define digitalPinHasPWM(p) (((p) == PIN_PD0) || ((p) == PIN_PD1) || ((p) == PIN_PD1) || ((p) == PIN_PD3) || \ + ((p) == PIN_PD4) || ((p) == PIN_PD5) || ((p) == PIN_PA2) || ((p) == PIN_PA3)) #endif // Timer pin mapping diff --git a/megaavr/variants/32pin-standard/pins_arduino.h b/megaavr/variants/32pin-standard/pins_arduino.h index 08e534e..06635e0 100644 --- a/megaavr/variants/32pin-standard/pins_arduino.h +++ b/megaavr/variants/32pin-standard/pins_arduino.h @@ -70,11 +70,14 @@ // PWM pins #if defined(MILLIS_USE_TIMERB0) - #define digitalPinHasPWM(p) (((p) >= PIN_PD0 && (p) <= PIN_PD5) || (p) == PIN_PA3 || (p) == PIN_PC0) + #define digitalPinHasPWM(p) (((p) == PIN_PD0) || ((p) == PIN_PD1) || ((p) == PIN_PD1) || ((p) == PIN_PD3) || \ + ((p) == PIN_PD4) || ((p) == PIN_PD5) || ((p) == PIN_PA3) || ((p) == PIN_PC0)) #elif defined(MILLIS_USE_TIMERB1) - #define digitalPinHasPWM(p) (((p) >= PIN_PD0 && (p) <= PIN_PD5) || (p) == PIN_PA2 || (p) == PIN_PC0) + #define digitalPinHasPWM(p) (((p) == PIN_PD0) || ((p) == PIN_PD1) || ((p) == PIN_PD1) || ((p) == PIN_PD3) || \ + ((p) == PIN_PD4) || ((p) == PIN_PD5) || ((p) == PIN_PA2) || ((p) == PIN_PC0)) #else // default to MILLIS_USE_TIMERB2 - #define digitalPinHasPWM(p) (((p) >= PIN_PD0 && (p) <= PIN_PD5) || (p) == PIN_PA2 || (p) == PIN_PA3) + #define digitalPinHasPWM(p) (((p) == PIN_PD0) || ((p) == PIN_PD1) || ((p) == PIN_PD1) || ((p) == PIN_PD3) || \ + ((p) == PIN_PD4) || ((p) == PIN_PD5) || ((p) == PIN_PA2) || ((p) == PIN_PA3)) #endif // Timer pin mapping diff --git a/megaavr/variants/40pin-standard/pins_arduino.h b/megaavr/variants/40pin-standard/pins_arduino.h index a3ec17e..ef6e786 100644 --- a/megaavr/variants/40pin-standard/pins_arduino.h +++ b/megaavr/variants/40pin-standard/pins_arduino.h @@ -79,21 +79,25 @@ // PWM pins #if defined(MILLIS_USE_TIMERB0) - #define digitalPinHasPWM(p) (((p) >= PIN_PC0 && (p) <= PIN_PC5) || (p) == PIN_PF5) + #define digitalPinHasPWM(p) (((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || ((p) == PIN_PC3) || \ + ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF5)) #elif defined(MILLIS_USE_TIMERB1) - #define digitalPinHasPWM(p) (((p) >= PIN_PC0 && (p) <= PIN_PC5) || (p) == PIN_PF4) + #define digitalPinHasPWM(p) (((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || ((p) == PIN_PC3) || \ + ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF4)) #elif defined(MILLIS_USE_TIMERB2) - #define digitalPinHasPWM(p) (((p) >= PIN_PC0 && (p) <= PIN_PC5) || (p) == PIN_PF4 || (p) == PIN_PF5) + #define digitalPinHasPWM(p) (((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || ((p) == PIN_PC3) || \ + ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF4) || ((p) == PIN_PF5)) #else // default to MILLIS_USE_TIMERB3 - #define digitalPinHasPWM(p) (((p) >= PIN_PC0 && (p) <= PIN_PC5) || (p) == PIN_PF4 || (p) == PIN_PF5) + #define digitalPinHasPWM(p) (((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || ((p) == PIN_PC3) || \ + ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF4) || ((p) == PIN_PF5)) #endif // Timer pin swaps -#define TCA0_PINS PORTMUX_TCA0_PORTC_gc -#define TCB0_PINS PORTMUX_TCB0_bm -#define TCB1_PINS PORTMUX_TCB1_bm -#define TCB2_PINS PORTMUX_TCB2_bm -#define TCB3_PINS 0x00 +#define TCA0_PINS PORTMUX_TCA0_PORTC_gc // TCA0 output on PC[0:5] +#define TCB0_PINS PORTMUX_TCB0_bm // TCB0 output on PF4 instead of PA2 +#define TCB1_PINS PORTMUX_TCB1_bm // TCB1 output on PF5 instead of PA3 +#define TCB2_PINS PORTMUX_TCB2_bm // TCB2 output on PB4 instead of PC0 +#define TCB3_PINS 0x00 // TCB3 output on PB5 instead of PC1 // SPI 0 // No pinswap enabled by default @@ -214,12 +218,12 @@ const uint8_t digital_pin_to_port[] = { PA, // 5 PA5/MISO PA, // 6 PA6/SCK PA, // 7 PA7/SS/CLKOUT - PC, // 8 PC0/USART1_Tx/TCA0 PWM - PC, // 9 PC1/USART1_Rx/TCA0 PWM - PC, // 10 PC2/TCA0 PWM - PC, // 11 PC3/TCA0 PWM - PC, // 12 PC4/TCA0 PWM - PC, // 13 PC5/TCA0 PWM + PC, // 8 PC0/USART1_Tx + PC, // 9 PC1/USART1_Rx + PC, // 10 PC2 + PC, // 11 PC3 + PC, // 12 PC4 + PC, // 13 PC5 PD, // 14 PD0/AIN0 PD, // 15 PD1/AIN1 PD, // 16 PD2/AIN2 @@ -236,8 +240,8 @@ const uint8_t digital_pin_to_port[] = { PF, // 27 PF1/USART2_Rx/TOSC2 PF, // 28 PF2/AIN12 PF, // 29 PF3/AIN13 - PF, // 30 PF4/AIN14/TCB0 PWM - PF, // 31 PF5/AIN15/TCB1 PWM/LED_BUILTIN + PF, // 30 PF4/AIN14 + PF, // 31 PF5/AIN15/LED_BUILTIN PF // 32 PF6 RESET }; @@ -251,12 +255,12 @@ const uint8_t digital_pin_to_bit_position[] = { PIN5_bp, // 5 PA5/MISO PIN6_bp, // 6 PA6/SCK PIN7_bp, // 7 PA7/SS/CLKOUT - PIN0_bp, // 8 PC0/USART1_Tx/TCA0 PWM - PIN1_bp, // 9 PC1/USART1_Rx/TCA0 PWM - PIN2_bp, // 10 PC2/TCA0 PWM - PIN3_bp, // 11 PC3/TCA0 PWM - PIN4_bp, // 12 PC4/TCA0 PWM - PIN5_bp, // 13 PC5/TCA0 PWM + PIN0_bp, // 8 PC0/USART1_Tx + PIN1_bp, // 9 PC1/USART1_Rx + PIN2_bp, // 10 PC2 + PIN3_bp, // 11 PC3 + PIN4_bp, // 12 PC4 + PIN5_bp, // 13 PC5 PIN0_bp, // 14 PD0/AIN0 PIN1_bp, // 15 PD1/AIN1 PIN2_bp, // 16 PD2/AIN2 @@ -273,8 +277,8 @@ const uint8_t digital_pin_to_bit_position[] = { PIN1_bp, // 27 PF1/USART2_Rx/TOSC2 PIN2_bp, // 28 PF2/AIN12 PIN3_bp, // 29 PF3/AIN13 - PIN4_bp, // 30 PF4/AIN14/TCB0 PWM - PIN5_bp, // 31 PF5/AIN15/TCB1 PWM/LED_BUILTIN + PIN4_bp, // 30 PF4/AIN14 + PIN5_bp, // 31 PF5/AIN15/LED_BUILTIN PIN6_bp // 42 PF6 RESET }; @@ -288,12 +292,12 @@ const uint8_t digital_pin_to_bit_mask[] = { PIN5_bm, // 5 PA5/MISO PIN6_bm, // 6 PA6/SCK PIN7_bm, // 7 PA7/SS/CLKOUT - PIN0_bm, // 8 PC0/USART1_Tx/TCA0 PWM - PIN1_bm, // 9 PC1/USART1_Rx/TCA0 PWM - PIN2_bm, // 10 PC2/TCA0 PWM - PIN3_bm, // 11 PC3/TCA0 PWM - PIN4_bm, // 12 PC4/TCA0 PWM - PIN5_bm, // 13 PC5/TCA0 PWM + PIN0_bm, // 8 PC0/USART1_Tx + PIN1_bm, // 9 PC1/USART1_Rx + PIN2_bm, // 10 PC2 + PIN3_bm, // 11 PC3 + PIN4_bm, // 12 PC4 + PIN5_bm, // 13 PC5 PIN0_bm, // 14 PD0/AIN0 PIN1_bm, // 15 PD1/AIN1 PIN2_bm, // 16 PD2/AIN2 @@ -310,8 +314,8 @@ const uint8_t digital_pin_to_bit_mask[] = { PIN1_bm, // 27 PF1/USART2_Rx/TOSC2 PIN2_bm, // 28 PF2/AIN12 PIN3_bm, // 29 PF3/AIN13 - PIN4_bm, // 30 PF4/AIN14/TCB0 PWM - PIN5_bm, // 31 PF5/AIN15/TCB1 PWM/LED_BUILTIN + PIN4_bm, // 30 PF4/AIN14 + PIN5_bm, // 31 PF5/AIN15/LED_BUILTIN PIN6_bm // 32 PF6 RESET }; @@ -324,12 +328,12 @@ const uint8_t digital_pin_to_timer[] = { NOT_ON_TIMER, // 5 PA5/MISO NOT_ON_TIMER, // 6 PA6/SCK NOT_ON_TIMER, // 7 PA7/SS/CLKOUT - TIMERA0, // 8 PC0/USART1_Tx/TCA0 PWM - TIMERA0, // 9 PC1/USART1_Rx/TCA0 PWM - TIMERA0, // 10 PC2/TCA0 PWM - TIMERA0, // 11 PC3/TCA0 PWM - TIMERA0, // 12 PC4/TCA0 PWM - TIMERA0, // 13 PC5/TCA0 PWM + TIMERA0, // 8 PC0/USART1_Tx + TIMERA0, // 9 PC1/USART1_Rx + TIMERA0, // 10 PC2 + TIMERA0, // 11 PC3 + TIMERA0, // 12 PC4 + TIMERA0, // 13 PC5 NOT_ON_TIMER, // 14 PD0/AIN0 NOT_ON_TIMER, // 15 PD1/AIN1 NOT_ON_TIMER, // 16 PD2/AIN2 @@ -349,12 +353,12 @@ const uint8_t digital_pin_to_timer[] = { #ifdef MILLIS_USE_TIMERB0 NOT_ON_TIMER, // 30 PF4/AIN14 #else - TIMERB0, // 30 PF4/AIN14/TCB0 PWM + TIMERB0, // 30 PF4/AIN14 #endif #ifdef MILLIS_USE_TIMERB1 NOT_ON_TIMER, // 31 PF5/AIN15/LED_BUILTIN #else - TIMERB1, // 31 PF5/AIN15/TCB1 PWM/LED_BUILTIN + TIMERB1, // 31 PF5/AIN15/LED_BUILTIN #endif NOT_ON_TIMER // 32 PF6 RESET }; diff --git a/megaavr/variants/48pin-standard/pins_arduino.h b/megaavr/variants/48pin-standard/pins_arduino.h index 66fdd34..ba7a6fe 100644 --- a/megaavr/variants/48pin-standard/pins_arduino.h +++ b/megaavr/variants/48pin-standard/pins_arduino.h @@ -25,146 +25,195 @@ #define DEFAULT_48PIN_PINOUT -#define NUM_DIGITAL_PINS 41 +// Arduino pin macros +#define PIN_PA0 0 +#define PIN_PA1 1 +#define PIN_PA2 2 +#define PIN_PA3 3 +#define PIN_PA4 4 +#define PIN_PA5 5 +#define PIN_PA6 6 +#define PIN_PA7 7 +#define PIN_PB0 8 +#define PIN_PB1 9 +#define PIN_PB2 10 +#define PIN_PB3 11 +#define PIN_PB4 12 +#define PIN_PB5 13 +#define PIN_PC0 14 +#define PIN_PC1 15 +#define PIN_PC2 16 +#define PIN_PC3 17 +#define PIN_PC4 18 +#define PIN_PC5 19 +#define PIN_PC6 20 +#define PIN_PC7 21 +#define PIN_PD0 22 +#define PIN_PD1 23 +#define PIN_PD2 24 +#define PIN_PD3 25 +#define PIN_PD4 26 +#define PIN_PD5 27 +#define PIN_PD6 28 +#define PIN_PD7 29 +#define PIN_PE0 30 +#define PIN_PE1 31 +#define PIN_PE2 32 +#define PIN_PE3 33 +#define PIN_PF0 34 +#define PIN_PF1 35 +#define PIN_PF2 36 +#define PIN_PF3 37 +#define PIN_PF4 38 +#define PIN_PF5 39 +#define PIN_PF6 40 + +#define PINS_COUNT 41 +#define NUM_DIGITAL_PINS PINS_COUNT #define NUM_ANALOG_INPUTS 16 #define NUM_RESERVED_PINS 0 #define NUM_INTERNALLY_USED_PINS 0 -#define NUM_I2C_PINS 2 // (SDA / SCL) -#define NUM_SPI_PINS 3 // (MISO / MOSI / SCK) -#define NUM_TOTAL_FREE_PINS (NUM_DIGITAL_PINS) -#define NUM_TOTAL_PINS (NUM_DIGITAL_PINS) +#define NUM_I2C_PINS 2 +#define NUM_SPI_PINS 3 +#define NUM_TOTAL_FREE_PINS NUM_DIGITAL_PINS +#define NUM_TOTAL_PINS NUM_DIGITAL_PINS #define ANALOG_INPUT_OFFSET 22 -#define LED_BUILTIN 7 // PA7 +#define LED_BUILTIN PIN_PA7 +#define EXTERNAL_NUM_INTERRUPTS 47 #define digitalPinToAnalogInput(p) ((p < NUM_ANALOG_INPUTS) ? (p) : ((p) >= 22 && (p) <= 33) ? ((p) - ANALOG_INPUT_OFFSET) : ((p) >= 36 && (p) <=39) ? ((p) - 2 - ANALOG_INPUT_OFFSET) : NOT_A_PIN) #define digitalOrAnalogPinToDigital(p) ((p <= 11) ? ((p) + ANALOG_INPUT_OFFSET) : ((p) <= 15) ? ((p) + ANALOG_INPUT_OFFSET + 2) : (((p) >= 22 && (p) <= 33) || ((p) >= 36 && (p) <= 39)) ? (p) : NOT_A_PIN) +// Timer to use for millis/micros #if !defined(MILLIS_USE_TIMERB0) || !defined(MILLIS_USE_TIMERB1) || !defined(MILLIS_USE_TIMERB2) || !defined(MILLIS_USE_TIMERB3) -#define MILLIS_USE_TIMERB2 // Use TCB2 for millis generation +#define MILLIS_USE_TIMERB2 // Use TCB2 if nothing else if defined #endif -#define EXTERNAL_NUM_INTERRUPTS (47) - +// PWM pins #if defined(MILLIS_USE_TIMERB0) - #define digitalPinHasPWM(p) (((p) >= 12 && (p) <= 19) || (p) == 39) + #define digitalPinHasPWM(p) (((p) == PIN_PB4) || ((p) == PIN_PB5) || ((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || \ + ((p) == PIN_PC3) || ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF5)) #elif defined(MILLIS_USE_TIMERB1) - #define digitalPinHasPWM(p) (((p) >= 12 && (p) <= 19) || (p) == 38) + #define digitalPinHasPWM(p) (((p) == PIN_PB4) || ((p) == PIN_PB5) || ((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || \ + ((p) == PIN_PC3) || ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF4)) #elif defined(MILLIS_USE_TIMERB2) - #define digitalPinHasPWM(p) (((p) >= 13 && (p) <= 19) || (p) == 38 || (p) == 39) + #define digitalPinHasPWM(p) (((p) == PIN_PB5) || ((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || ((p) == PIN_PC3) || \ + ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF4) || ((p) == PIN_PF5)) #else // default to MILLIS_USE_TIMERB3 - #define digitalPinHasPWM(p) ((p) == 12 || ((p) >= 14 && (p) <= 19) || (p) == 38 || (p) == 39) + #define digitalPinHasPWM(p) (((p) == PIN_PB4) || ((p) == PIN_PC0) || ((p) == PIN_PC1) || ((p) == PIN_PC2) || ((p) == PIN_PC3) || \ + ((p) == PIN_PC4) || ((p) == PIN_PC5) || ((p) == PIN_PF4) || ((p) == PIN_PF5)) #endif // Timer pin swaps -#define TCA0_PINS PORTMUX_TCA0_PORTC_gc -#define TCB0_PINS PORTMUX_TCB0_bm -#define TCB1_PINS PORTMUX_TCB1_bm -#define TCB2_PINS PORTMUX_TCB2_bm -#define TCB3_PINS 0x00 +#define TCA0_PINS PORTMUX_TCA0_PORTC_gc // TCA0 output on PC[0:5] +#define TCB0_PINS PORTMUX_TCB0_bm // TCB0 output on PF4 instead of PA2 +#define TCB1_PINS PORTMUX_TCB1_bm // TCB1 output on PF5 instead of PA3 +#define TCB2_PINS PORTMUX_TCB2_bm // TCB2 output on PB4 instead of PC0 +#define TCB3_PINS 0x00 // TCB3 output on PB5 instead of PC1 // SPI 0 // No pinswap enabled by default // Pinswap 2 not available #define SPI_INTERFACES_COUNT 1 -#define SPI_MUX (PORTMUX_SPI0_DEFAULT_gc) -#define SPI_MUX_PINSWAP_1 (PORTMUX_SPI0_ALT1_gc) -#define SPI_MUX_PINSWAP_2 (PORTMUX_SPI0_ALT2_gc) -#define PIN_SPI_MISO (5) -#define PIN_SPI_SCK (6) -#define PIN_SPI_MOSI (4) -#define PIN_SPI_SS (7) -#define PIN_SPI_MISO_PINSWAP_1 (15) -#define PIN_SPI_SCK_PINSWAP_1 (16) -#define PIN_SPI_MOSI_PINSWAP_1 (14) -#define PIN_SPI_SS_PINSWAP_1 (17) -#define PIN_SPI_MISO_PINSWAP_2 (31) -#define PIN_SPI_SCK_PINSWAP_2 (32) -#define PIN_SPI_MOSI_PINSWAP_2 (30) -#define PIN_SPI_SS_PINSWAP_2 (33) -static const uint8_t SS = PIN_SPI_SS; -static const uint8_t MOSI = PIN_SPI_MOSI; -static const uint8_t MISO = PIN_SPI_MISO; -static const uint8_t SCK = PIN_SPI_SCK; +#define SPI_MUX PORTMUX_SPI0_DEFAULT_gc +#define SPI_MUX_PINSWAP_1 PORTMUX_SPI0_ALT1_gc +#define SPI_MUX_PINSWAP_2 PORTMUX_SPI0_ALT2_gc +#define PIN_SPI_MISO PIN_PA5 +#define PIN_SPI_SCK PIN_PA6 +#define PIN_SPI_MOSI PIN_PA4 +#define PIN_SPI_SS PIN_PA7 +#define PIN_SPI_MISO_PINSWAP_1 PIN_PC1 +#define PIN_SPI_SCK_PINSWAP_1 PIN_PC2 +#define PIN_SPI_MOSI_PINSWAP_1 PIN_PC0 +#define PIN_SPI_SS_PINSWAP_1 PIN_PC3 +#define PIN_SPI_MISO_PINSWAP_2 PIN_PE1 +#define PIN_SPI_SCK_PINSWAP_2 PIN_PE2 +#define PIN_SPI_MOSI_PINSWAP_2 PIN_PE0 +#define PIN_SPI_SS_PINSWAP_2 PIN_PE3 +static const uint8_t SS = PIN_SPI_SS; +static const uint8_t MOSI = PIN_SPI_MOSI; +static const uint8_t MISO = PIN_SPI_MISO; +static const uint8_t SCK = PIN_SPI_SCK; // TWI 0 // No pinswap enabled by default -#define TWI_MUX (PORTMUX_TWI0_DEFAULT_gc) -#define TWI_MUX_PINSWAP (PORTMUX_TWI0_ALT2_gc) -#define PIN_WIRE_SDA (2) -#define PIN_WIRE_SCL (3) -#define PIN_WIRE_SDA_PINSWAP_1 (16) -#define PIN_WIRE_SCL_PINSWAP_1 (17) -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; +#define TWI_MUX PORTMUX_TWI0_DEFAULT_gc +#define TWI_MUX_PINSWAP PORTMUX_TWI0_ALT2_gc +#define PIN_WIRE_SDA PIN_PA2 +#define PIN_WIRE_SCL PIN_PA3 +#define PIN_WIRE_SDA_PINSWAP_1 PIN_PC2 +#define PIN_WIRE_SCL_PINSWAP_1 PIN_PC3 +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; // USART 0 // No pinswap by default -#define HWSERIAL0 (&USART0) -#define HWSERIAL0_DRE_VECTOR (USART0_DRE_vect) -#define HWSERIAL0_DRE_VECTOR_NUM (USART0_DRE_vect_num) -#define HWSERIAL0_RXC_VECTOR (USART0_RXC_vect) -#define HWSERIAL0_MUX (PORTMUX_USART0_DEFAULT_gc) -#define HWSERIAL0_MUX_PINSWAP_1 (PORTMUX_USART0_ALT1_gc) -#define PIN_WIRE_HWSERIAL0_TX (0) -#define PIN_WIRE_HWSERIAL0_RX (1) -#define PIN_WIRE_HWSERIAL0_TX_PINSWAP_1 (4) -#define PIN_WIRE_HWSERIAL0_RX_PINSWAP_1 (5) +#define HWSERIAL0 &USART0 +#define HWSERIAL0_DRE_VECTOR USART0_DRE_vect +#define HWSERIAL0_DRE_VECTOR_NUM USART0_DRE_vect_num +#define HWSERIAL0_RXC_VECTOR USART0_RXC_vect +#define HWSERIAL0_MUX PORTMUX_USART0_DEFAULT_gc +#define HWSERIAL0_MUX_PINSWAP_1 PORTMUX_USART0_ALT1_gc +#define PIN_WIRE_HWSERIAL0_TX PIN_PA0 +#define PIN_WIRE_HWSERIAL0_RX PIN_PA1 +#define PIN_WIRE_HWSERIAL0_TX_PINSWAP_1 PIN_PA4 +#define PIN_WIRE_HWSERIAL0_RX_PINSWAP_1 PIN_PA5 // USART1 // No pinswap by default -#define HWSERIAL1 (&USART1) -#define HWSERIAL1_DRE_VECTOR (USART1_DRE_vect) -#define HWSERIAL1_DRE_VECTOR_NUM (USART1_DRE_vect_num) -#define HWSERIAL1_RXC_VECTOR (USART1_RXC_vect) -#define HWSERIAL1_MUX (PORTMUX_USART1_DEFAULT_gc) -#define HWSERIAL1_MUX_PINSWAP_1 (PORTMUX_USART1_ALT1_gc) -#define PIN_WIRE_HWSERIAL1_TX (14) -#define PIN_WIRE_HWSERIAL1_RX (15) -#define PIN_WIRE_HWSERIAL1_TX_PINSWAP_1 (18) -#define PIN_WIRE_HWSERIAL1_RX_PINSWAP_1 (19) +#define HWSERIAL1 &USART1 +#define HWSERIAL1_DRE_VECTOR USART1_DRE_vect +#define HWSERIAL1_DRE_VECTOR_NUM USART1_DRE_vect_num +#define HWSERIAL1_RXC_VECTOR USART1_RXC_vect +#define HWSERIAL1_MUX PORTMUX_USART1_DEFAULT_gc +#define HWSERIAL1_MUX_PINSWAP_1 PORTMUX_USART1_ALT1_gc +#define PIN_WIRE_HWSERIAL1_TX PIN_PC0 +#define PIN_WIRE_HWSERIAL1_RX PIN_PC1 +#define PIN_WIRE_HWSERIAL1_TX_PINSWAP_1 PIN_PC4 +#define PIN_WIRE_HWSERIAL1_RX_PINSWAP_1 PIN_PC5 // USART 2 // No pinswap by default -#define HWSERIAL2 (&USART2) -#define HWSERIAL2_DRE_VECTOR (USART2_DRE_vect) -#define HWSERIAL2_DRE_VECTOR_NUM (USART2_DRE_vect_num) -#define HWSERIAL2_RXC_VECTOR (USART2_RXC_vect) -#define HWSERIAL2_MUX (PORTMUX_USART2_DEFAULT_gc) -#define HWSERIAL2_MUX_PINSWAP_1 (PORTMUX_USART2_ALT1_gc) -#define PIN_WIRE_HWSERIAL2_TX (34) -#define PIN_WIRE_HWSERIAL2_RX (35) -#define PIN_WIRE_HWSERIAL2_TX_PINSWAP_1 (38) -#define PIN_WIRE_HWSERIAL2_RX_PINSWAP_1 (39) +#define HWSERIAL2 &USART2 +#define HWSERIAL2_DRE_VECTOR USART2_DRE_vect +#define HWSERIAL2_DRE_VECTOR_NUM USART2_DRE_vect_num +#define HWSERIAL2_RXC_VECTOR USART2_RXC_vect +#define HWSERIAL2_MUX PORTMUX_USART2_DEFAULT_gc +#define HWSERIAL2_MUX_PINSWAP_1 PORTMUX_USART2_ALT1_gc +#define PIN_WIRE_HWSERIAL2_TX PIN_PF0 +#define PIN_WIRE_HWSERIAL2_RX PIN_PF1 +#define PIN_WIRE_HWSERIAL2_TX_PINSWAP_1 PIN_PF4 +#define PIN_WIRE_HWSERIAL2_RX_PINSWAP_1 PIN_PF5 // USART 3 // No pinswap by default -#define HWSERIAL3 (&USART3) -#define HWSERIAL3_DRE_VECTOR (USART3_DRE_vect) -#define HWSERIAL3_DRE_VECTOR_NUM (USART3_DRE_vect_num) -#define HWSERIAL3_RXC_VECTOR (USART3_RXC_vect) -#define HWSERIAL3_MUX (PORTMUX_USART3_DEFAULT_gc) -#define HWSERIAL3_MUX_PINSWAP_1 (PORTMUX_USART3_ALT1_gc) -#define PIN_WIRE_HWSERIAL3_TX (8) -#define PIN_WIRE_HWSERIAL3_RX (9) -#define PIN_WIRE_HWSERIAL3_TX_PINSWAP_1 (12) -#define PIN_WIRE_HWSERIAL3_RX_PINSWAP_1 (13) - -#define PIN_A0 (22) -#define PIN_A1 (23) -#define PIN_A2 (24) -#define PIN_A3 (25) -#define PIN_A4 (26) -#define PIN_A5 (27) -#define PIN_A6 (28) -#define PIN_A7 (29) -#define PIN_A8 (30) -#define PIN_A9 (31) -#define PIN_A10 (32) -#define PIN_A11 (33) -#define PIN_A12 (36) -#define PIN_A13 (37) -#define PIN_A14 (38) -#define PIN_A15 (39) +#define HWSERIAL3 &USART3 +#define HWSERIAL3_DRE_VECTOR USART3_DRE_vect +#define HWSERIAL3_DRE_VECTOR_NUM USART3_DRE_vect_num +#define HWSERIAL3_RXC_VECTOR USART3_RXC_vect +#define HWSERIAL3_MUX PORTMUX_USART3_DEFAULT_gc +#define HWSERIAL3_MUX_PINSWAP_1 PORTMUX_USART3_ALT1_gc +#define PIN_WIRE_HWSERIAL3_TX PIN_PB0 +#define PIN_WIRE_HWSERIAL3_RX PIN_PB1 +#define PIN_WIRE_HWSERIAL3_TX_PINSWAP_1 PIN_PB4 +#define PIN_WIRE_HWSERIAL3_RX_PINSWAP_1 PIN_PB5 +// Analog pins +#define PIN_A0 PIN_PD0 +#define PIN_A1 PIN_PD1 +#define PIN_A2 PIN_PD2 +#define PIN_A3 PIN_PD3 +#define PIN_A4 PIN_PD4 +#define PIN_A5 PIN_PD5 +#define PIN_A6 PIN_PD6 +#define PIN_A7 PIN_PD7 +#define PIN_A8 PIN_PE0 +#define PIN_A9 PIN_PE1 +#define PIN_A10 PIN_PE2 +#define PIN_A11 PIN_PE3 +#define PIN_A12 PIN_PF2 +#define PIN_A13 PIN_PF3 +#define PIN_A14 PIN_PF4 +#define PIN_A15 PIN_PF5 static const uint8_t A0 = PIN_A0; static const uint8_t A1 = PIN_A1; static const uint8_t A2 = PIN_A2; @@ -182,51 +231,6 @@ static const uint8_t A13 = PIN_A13; static const uint8_t A14 = PIN_A14; static const uint8_t A15 = PIN_A15; -#define PIN_PA0 0 -#define PIN_PA1 1 -#define PIN_PA2 2 -#define PIN_PA3 3 -#define PIN_PA4 4 -#define PIN_PA5 5 -#define PIN_PA6 6 -#define PIN_PA7 7 -#define PIN_PB0 8 -#define PIN_PB1 9 -#define PIN_PB2 10 -#define PIN_PB3 11 -#define PIN_PB4 12 -#define PIN_PB5 13 -#define PIN_PC0 14 -#define PIN_PC1 15 -#define PIN_PC2 16 -#define PIN_PC3 17 -#define PIN_PC4 18 -#define PIN_PC5 19 -#define PIN_PC6 20 -#define PIN_PC7 21 -#define PIN_PD0 22 -#define PIN_PD1 23 -#define PIN_PD2 24 -#define PIN_PD3 25 -#define PIN_PD4 26 -#define PIN_PD5 27 -#define PIN_PD6 28 -#define PIN_PD7 29 -#define PIN_PE0 30 -#define PIN_PE1 31 -#define PIN_PE2 32 -#define PIN_PE3 33 -#define PIN_PF0 34 -#define PIN_PF1 35 -#define PIN_PF2 36 -#define PIN_PF3 37 -#define PIN_PF4 38 -#define PIN_PF5 39 -#define PIN_PF6 40 - -#define PINS_COUNT (41u) - - #ifdef ARDUINO_MAIN const uint8_t digital_pin_to_port[] = { @@ -243,13 +247,13 @@ const uint8_t digital_pin_to_port[] = { PB, // 10 PB2 PB, // 11 PB3 PB, // 12 PB4/(TCB2 PWM) - PB, // 13 PB5/TCB3 PWM - PC, // 14 PC0/USART1_Tx/TCA0 PWM - PC, // 15 PC1/USART1_Rx/TCA0 PWM - PC, // 16 PC2/TCA0 PWM - PC, // 17 PC3/TCA0 PWM - PC, // 18 PC4/TCA0 PWM - PC, // 19 PC5/TCA0 PWM + PB, // 13 PB5 + PC, // 14 PC0/USART1_Tx + PC, // 15 PC1/USART1_Rx + PC, // 16 PC2 + PC, // 17 PC3 + PC, // 18 PC4 + PC, // 19 PC5 PC, // 20 PC6 PC, // 21 PC7 PD, // 22 PD0/AIN0 @@ -268,8 +272,8 @@ const uint8_t digital_pin_to_port[] = { PF, // 35 PF1/USART2_Rx/TOSC2 PF, // 36 PF2/AIN12 PF, // 37 PF3/AIN13 - PF, // 38 PF4/AIN14/TCB0 PWM - PF, // 39 PF5/AIN15/TCB1 PWM/LED_BUILTIN + PF, // 38 PF4/AIN14 + PF, // 39 PF5/AIN15/LED_BUILTIN PF // 40 PF6 RESET }; @@ -288,13 +292,13 @@ const uint8_t digital_pin_to_bit_position[] = { PIN2_bp, // 10 PB2 PIN3_bp, // 11 PB3 PIN4_bp, // 12 PB4/(TCB2 PWM) - PIN5_bp, // 13 PB5/TCB3 PWM - PIN0_bp, // 14 PC0/USART1_Tx/TCA0 PWM - PIN1_bp, // 15 PC1/USART1_Rx/TCA0 PWM - PIN2_bp, // 16 PC2/TCA0 PWM - PIN3_bp, // 17 PC3/TCA0 PWM - PIN4_bp, // 18 PC4/TCA0 PWM - PIN5_bp, // 19 PC5/TCA0 PWM + PIN5_bp, // 13 PB5 + PIN0_bp, // 14 PC0/USART1_Tx + PIN1_bp, // 15 PC1/USART1_Rx + PIN2_bp, // 16 PC2 + PIN3_bp, // 17 PC3 + PIN4_bp, // 18 PC4 + PIN5_bp, // 19 PC5 PIN6_bp, // 20 PC6 PIN7_bp, // 21 PC7 PIN0_bp, // 22 PD0/AIN0 @@ -313,8 +317,8 @@ const uint8_t digital_pin_to_bit_position[] = { PIN1_bp, // 35 PF1/USART2_Rx/TOSC2 PIN2_bp, // 36 PF2/AIN12 PIN3_bp, // 37 PF3/AIN13 - PIN4_bp, // 38 PF4/AIN14/TCB0 PWM - PIN5_bp, // 39 PF5/AIN15/TCB1 PWM/LED_BUILTIN + PIN4_bp, // 38 PF4/AIN14 + PIN5_bp, // 39 PF5/AIN15/LED_BUILTIN PIN6_bp // 40 PF6 RESET }; @@ -333,13 +337,13 @@ const uint8_t digital_pin_to_bit_mask[] = { PIN2_bm, // 10 PB2 PIN3_bm, // 11 PB3 PIN4_bm, // 12 PB4/(TCB2 PWM) - PIN5_bm, // 13 PB5/TCB3 PWM - PIN0_bm, // 14 PC0/USART1_Tx/TCA0 PWM - PIN1_bm, // 15 PC1/USART1_Rx/TCA0 PWM - PIN2_bm, // 16 PC2/TCA0 PWM - PIN3_bm, // 17 PC3/TCA0 PWM - PIN4_bm, // 18 PC4/TCA0 PWM - PIN5_bm, // 19 PC5/TCA0 PWM + PIN5_bm, // 13 PB5 + PIN0_bm, // 14 PC0/USART1_Tx + PIN1_bm, // 15 PC1/USART1_Rx + PIN2_bm, // 16 PC2 + PIN3_bm, // 17 PC3 + PIN4_bm, // 18 PC4 + PIN5_bm, // 19 PC5 PIN6_bm, // 20 PC6 PIN7_bm, // 21 PC7 PIN0_bm, // 22 PD0/AIN0 @@ -358,8 +362,8 @@ const uint8_t digital_pin_to_bit_mask[] = { PIN1_bm, // 35 PF1/USART2_Rx/TOSC2 PIN2_bm, // 36 PF2/AIN12 PIN3_bm, // 37 PF3/AIN13 - PIN4_bm, // 38 PF4/AIN14/TCB0 PWM - PIN5_bm, // 39 PF5/AIN15/TCB1 PWM/LED_BUILTIN + PIN4_bm, // 38 PF4/AIN14 + PIN5_bm, // 39 PF5/AIN15/LED_BUILTIN PIN6_bm // 40 PF6 RESET }; @@ -376,22 +380,22 @@ const uint8_t digital_pin_to_timer[] = { NOT_ON_TIMER, // 9 PB1/USART3_Rx NOT_ON_TIMER, // 10 PB2 NOT_ON_TIMER, // 11 PB3 -#ifdef MILLIS_USE_TIMERB2 - NOT_ON_TIMER, // 12 PB4 +#if !defined(MILLIS_USE_TIMERB2) + TIMERB2, // 12 PB4 #else - TIMERB2, // 12 PB4/TCB2 PWM + NOT_ON_TIMER, // 12 PB4 #endif -#ifdef MILLIS_USE_TIMERB3 - NOT_ON_TIMER, // 13 PB5 +#if !defined(MILLIS_USE_TIMERB3) + TIMERB3, // 13 PB5 #else - TIMERB3, // 13 PB5/TCB3 PWM + NOT_ON_TIMER, // 13 PB5 #endif - TIMERA0, // 14 PC0/USART1_Tx/TCA0 PWM - TIMERA0, // 15 PC1/USART1_Rx/TCA0 PWM - TIMERA0, // 16 PC2/TCA0 PWM - TIMERA0, // 17 PC3/TCA0 PWM - TIMERA0, // 18 PC4/TCA0 PWM - TIMERA0, // 19 PC5/TCA0 PWM + TIMERA0, // 14 PC0/USART1_Tx + TIMERA0, // 15 PC1/USART1_Rx + TIMERA0, // 16 PC2 + TIMERA0, // 17 PC3 + TIMERA0, // 18 PC4 + TIMERA0, // 19 PC5 NOT_ON_TIMER, // 20 PC6 NOT_ON_TIMER, // 21 PC7 NOT_ON_TIMER, // 22 PD0/AIN0 @@ -410,15 +414,15 @@ const uint8_t digital_pin_to_timer[] = { NOT_ON_TIMER, // 35 PF1/USART2_Rx/TOSC2 NOT_ON_TIMER, // 36 PF2/AIN12 NOT_ON_TIMER, // 37 PF3/AIN13 -#ifdef MILLIS_USE_TIMERB0 - NOT_ON_TIMER, // 38 PF4/AIN14 +#if !defined(MILLIS_USE_TIMERB0) + TIMERB0, // 38 PF4/AIN14 #else - TIMERB0, // 38 PF4/AIN14/TCB0 PWM + NOT_ON_TIMER, // 38 PF4/AIN14 #endif -#ifdef MILLIS_USE_TIMERB1 - NOT_ON_TIMER, // 39 PF5/AIN15/LED_BUILTIN +#if !defined(MILLIS_USE_TIMERB1) + TIMERB1, // 39 PF5/AIN15/LED_BUILTIN #else - TIMERB1, // 39 PF5/AIN15/TCB1 PWM/LED_BUILTIN + NOT_ON_TIMER, // 39 PF5/AIN15/LED_BUILTIN #endif NOT_ON_TIMER // 40 PF6 RESET };