422 lines
10 KiB
C
422 lines
10 KiB
C
// Map of Arduino pins to avr bit, ddr, port, pin
|
|
// Credit Paul Stoffregen for idea
|
|
#ifndef ArduinoPins_h
|
|
#define ArduinoPins_h
|
|
|
|
#define PIN_BITNUM(pin) (PIN##pin##_BITNUM)
|
|
#define PIN_PORTREG(pin) (PIN##pin##_PORTREG)
|
|
#define PIN_DDRREG(pin) (PIN##pin##_DDRREG)
|
|
#define PIN_PINREG(pin) (PIN##pin##_PINREG)
|
|
#ifndef _BV
|
|
#define _BV(n) (1 << (n))
|
|
#endif
|
|
|
|
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
|
// Mega Arduino
|
|
|
|
// Two Wire (aka I2C) ports
|
|
#define SDA_PIN 20
|
|
#define SCL_PIN 21
|
|
|
|
// SPI port
|
|
#define SS_PIN 53
|
|
#define MOSI_PIN 51
|
|
#define MISO_PIN 50
|
|
#define SCK_PIN 52
|
|
|
|
// bit number for all digital pins
|
|
#define PIN0_BITNUM 0
|
|
#define PIN1_BITNUM 1
|
|
#define PIN2_BITNUM 4
|
|
#define PIN3_BITNUM 5
|
|
#define PIN4_BITNUM 5
|
|
#define PIN5_BITNUM 3
|
|
#define PIN6_BITNUM 3
|
|
#define PIN7_BITNUM 4
|
|
#define PIN8_BITNUM 5
|
|
#define PIN9_BITNUM 6
|
|
#define PIN10_BITNUM 4
|
|
#define PIN11_BITNUM 5
|
|
#define PIN12_BITNUM 6
|
|
#define PIN13_BITNUM 7
|
|
#define PIN14_BITNUM 1
|
|
#define PIN15_BITNUM 0
|
|
#define PIN16_BITNUM 1
|
|
#define PIN17_BITNUM 0
|
|
#define PIN18_BITNUM 3
|
|
#define PIN19_BITNUM 2
|
|
#define PIN20_BITNUM 1
|
|
#define PIN21_BITNUM 0
|
|
#define PIN22_BITNUM 0
|
|
#define PIN23_BITNUM 1
|
|
#define PIN24_BITNUM 2
|
|
#define PIN25_BITNUM 3
|
|
#define PIN26_BITNUM 4
|
|
#define PIN27_BITNUM 5
|
|
#define PIN28_BITNUM 6
|
|
#define PIN29_BITNUM 7
|
|
#define PIN30_BITNUM 7
|
|
#define PIN31_BITNUM 6
|
|
#define PIN32_BITNUM 5
|
|
#define PIN33_BITNUM 4
|
|
#define PIN34_BITNUM 3
|
|
#define PIN35_BITNUM 2
|
|
#define PIN36_BITNUM 1
|
|
#define PIN37_BITNUM 0
|
|
#define PIN38_BITNUM 7
|
|
#define PIN39_BITNUM 2
|
|
#define PIN40_BITNUM 1
|
|
#define PIN41_BITNUM 0
|
|
#define PIN42_BITNUM 7
|
|
#define PIN43_BITNUM 6
|
|
#define PIN44_BITNUM 5
|
|
#define PIN45_BITNUM 4
|
|
#define PIN46_BITNUM 3
|
|
#define PIN47_BITNUM 2
|
|
#define PIN48_BITNUM 1
|
|
#define PIN49_BITNUM 0
|
|
#define PIN50_BITNUM 3
|
|
#define PIN51_BITNUM 2
|
|
#define PIN52_BITNUM 1
|
|
#define PIN53_BITNUM 0
|
|
#define PIN54_BITNUM 0
|
|
#define PIN55_BITNUM 1
|
|
#define PIN56_BITNUM 2
|
|
#define PIN57_BITNUM 3
|
|
#define PIN58_BITNUM 4
|
|
#define PIN59_BITNUM 5
|
|
#define PIN60_BITNUM 6
|
|
#define PIN61_BITNUM 7
|
|
#define PIN62_BITNUM 0
|
|
#define PIN63_BITNUM 1
|
|
#define PIN64_BITNUM 2
|
|
#define PIN65_BITNUM 3
|
|
#define PIN66_BITNUM 4
|
|
#define PIN67_BITNUM 5
|
|
#define PIN68_BITNUM 6
|
|
#define PIN69_BITNUM 7
|
|
|
|
// output register for digital pins
|
|
#define PIN0_PORTREG PORTE
|
|
#define PIN1_PORTREG PORTE
|
|
#define PIN2_PORTREG PORTE
|
|
#define PIN3_PORTREG PORTE
|
|
#define PIN4_PORTREG PORTG
|
|
#define PIN5_PORTREG PORTE
|
|
#define PIN6_PORTREG PORTH
|
|
#define PIN7_PORTREG PORTH
|
|
#define PIN8_PORTREG PORTH
|
|
#define PIN9_PORTREG PORTH
|
|
#define PIN10_PORTREG PORTB
|
|
#define PIN11_PORTREG PORTB
|
|
#define PIN12_PORTREG PORTB
|
|
#define PIN13_PORTREG PORTB
|
|
#define PIN14_PORTREG PORTJ
|
|
#define PIN15_PORTREG PORTJ
|
|
#define PIN16_PORTREG PORTH
|
|
#define PIN17_PORTREG PORTH
|
|
#define PIN18_PORTREG PORTD
|
|
#define PIN19_PORTREG PORTD
|
|
#define PIN20_PORTREG PORTD
|
|
#define PIN21_PORTREG PORTD
|
|
#define PIN22_PORTREG PORTA
|
|
#define PIN23_PORTREG PORTA
|
|
#define PIN24_PORTREG PORTA
|
|
#define PIN25_PORTREG PORTA
|
|
#define PIN26_PORTREG PORTA
|
|
#define PIN27_PORTREG PORTA
|
|
#define PIN28_PORTREG PORTA
|
|
#define PIN29_PORTREG PORTA
|
|
#define PIN30_PORTREG PORTC
|
|
#define PIN31_PORTREG PORTC
|
|
#define PIN32_PORTREG PORTC
|
|
#define PIN33_PORTREG PORTC
|
|
#define PIN34_PORTREG PORTC
|
|
#define PIN35_PORTREG PORTC
|
|
#define PIN36_PORTREG PORTC
|
|
#define PIN37_PORTREG PORTC
|
|
#define PIN38_PORTREG PORTD
|
|
#define PIN39_PORTREG PORTG
|
|
#define PIN40_PORTREG PORTG
|
|
#define PIN41_PORTREG PORTG
|
|
#define PIN42_PORTREG PORTL
|
|
#define PIN43_PORTREG PORTL
|
|
#define PIN44_PORTREG PORTL
|
|
#define PIN45_PORTREG PORTL
|
|
#define PIN46_PORTREG PORTL
|
|
#define PIN47_PORTREG PORTL
|
|
#define PIN48_PORTREG PORTL
|
|
#define PIN49_PORTREG PORTL
|
|
#define PIN50_PORTREG PORTB
|
|
#define PIN51_PORTREG PORTB
|
|
#define PIN52_PORTREG PORTB
|
|
#define PIN53_PORTREG PORTB
|
|
#define PIN54_PORTREG PORTF
|
|
#define PIN55_PORTREG PORTF
|
|
#define PIN56_PORTREG PORTF
|
|
#define PIN57_PORTREG PORTF
|
|
#define PIN58_PORTREG PORTF
|
|
#define PIN59_PORTREG PORTF
|
|
#define PIN60_PORTREG PORTF
|
|
#define PIN61_PORTREG PORTF
|
|
#define PIN62_PORTREG PORTK
|
|
#define PIN63_PORTREG PORTK
|
|
#define PIN64_PORTREG PORTK
|
|
#define PIN65_PORTREG PORTK
|
|
#define PIN66_PORTREG PORTK
|
|
#define PIN67_PORTREG PORTK
|
|
#define PIN68_PORTREG PORTK
|
|
#define PIN69_PORTREG PORTK
|
|
|
|
// direction control register for digital pins
|
|
#define PIN0_DDRREG DDRE
|
|
#define PIN1_DDRREG DDRE
|
|
#define PIN2_DDRREG DDRE
|
|
#define PIN3_DDRREG DDRE
|
|
#define PIN4_DDRREG DDRG
|
|
#define PIN5_DDRREG DDRE
|
|
#define PIN6_DDRREG DDRH
|
|
#define PIN7_DDRREG DDRH
|
|
#define PIN8_DDRREG DDRH
|
|
#define PIN9_DDRREG DDRH
|
|
#define PIN10_DDRREG DDRB
|
|
#define PIN11_DDRREG DDRB
|
|
#define PIN12_DDRREG DDRB
|
|
#define PIN13_DDRREG DDRB
|
|
#define PIN14_DDRREG DDRJ
|
|
#define PIN15_DDRREG DDRJ
|
|
#define PIN16_DDRREG DDRH
|
|
#define PIN17_DDRREG DDRH
|
|
#define PIN18_DDRREG DDRD
|
|
#define PIN19_DDRREG DDRD
|
|
#define PIN20_DDRREG DDRD
|
|
#define PIN21_DDRREG DDRD
|
|
#define PIN22_DDRREG DDRA
|
|
#define PIN23_DDRREG DDRA
|
|
#define PIN24_DDRREG DDRA
|
|
#define PIN25_DDRREG DDRA
|
|
#define PIN26_DDRREG DDRA
|
|
#define PIN27_DDRREG DDRA
|
|
#define PIN28_DDRREG DDRA
|
|
#define PIN29_DDRREG DDRA
|
|
#define PIN30_DDRREG DDRC
|
|
#define PIN31_DDRREG DDRC
|
|
#define PIN32_DDRREG DDRC
|
|
#define PIN33_DDRREG DDRC
|
|
#define PIN34_DDRREG DDRC
|
|
#define PIN35_DDRREG DDRC
|
|
#define PIN36_DDRREG DDRC
|
|
#define PIN37_DDRREG DDRC
|
|
#define PIN38_DDRREG DDRD
|
|
#define PIN39_DDRREG DDRG
|
|
#define PIN40_DDRREG DDRG
|
|
#define PIN41_DDRREG DDRG
|
|
#define PIN42_DDRREG DDRL
|
|
#define PIN43_DDRREG DDRL
|
|
#define PIN44_DDRREG DDRL
|
|
#define PIN45_DDRREG DDRL
|
|
#define PIN46_DDRREG DDRL
|
|
#define PIN47_DDRREG DDRL
|
|
#define PIN48_DDRREG DDRL
|
|
#define PIN49_DDRREG DDRL
|
|
#define PIN50_DDRREG DDRB
|
|
#define PIN51_DDRREG DDRB
|
|
#define PIN52_DDRREG DDRB
|
|
#define PIN53_DDRREG DDRB
|
|
#define PIN54_DDRREG DDRF
|
|
#define PIN55_DDRREG DDRF
|
|
#define PIN56_DDRREG DDRF
|
|
#define PIN57_DDRREG DDRF
|
|
#define PIN58_DDRREG DDRF
|
|
#define PIN59_DDRREG DDRF
|
|
#define PIN60_DDRREG DDRF
|
|
#define PIN61_DDRREG DDRF
|
|
#define PIN62_DDRREG DDRK
|
|
#define PIN63_DDRREG DDRK
|
|
#define PIN64_DDRREG DDRK
|
|
#define PIN65_DDRREG DDRK
|
|
#define PIN66_DDRREG DDRK
|
|
#define PIN67_DDRREG DDRK
|
|
#define PIN68_DDRREG DDRK
|
|
#define PIN69_DDRREG DDRK
|
|
|
|
// input register for digital pins
|
|
#define PIN0_PINREG PINE
|
|
#define PIN1_PINREG PINE
|
|
#define PIN2_PINREG PINE
|
|
#define PIN3_PINREG PINE
|
|
#define PIN4_PINREG PING
|
|
#define PIN5_PINREG PINE
|
|
#define PIN6_PINREG PINH
|
|
#define PIN7_PINREG PINH
|
|
#define PIN8_PINREG PINH
|
|
#define PIN9_PINREG PINH
|
|
#define PIN10_PINREG PINB
|
|
#define PIN11_PINREG PINB
|
|
#define PIN12_PINREG PINB
|
|
#define PIN13_PINREG PINB
|
|
#define PIN14_PINREG PINJ
|
|
#define PIN15_PINREG PINJ
|
|
#define PIN16_PINREG PINH
|
|
#define PIN17_PINREG PINH
|
|
#define PIN18_PINREG PIND
|
|
#define PIN19_PINREG PIND
|
|
#define PIN20_PINREG PIND
|
|
#define PIN21_PINREG PIND
|
|
#define PIN22_PINREG PINA
|
|
#define PIN23_PINREG PINA
|
|
#define PIN24_PINREG PINA
|
|
#define PIN25_PINREG PINA
|
|
#define PIN26_PINREG PINA
|
|
#define PIN27_PINREG PINA
|
|
#define PIN28_PINREG PINA
|
|
#define PIN29_PINREG PINA
|
|
#define PIN30_PINREG PINC
|
|
#define PIN31_PINREG PINC
|
|
#define PIN32_PINREG PINC
|
|
#define PIN33_PINREG PINC
|
|
#define PIN34_PINREG PINC
|
|
#define PIN35_PINREG PINC
|
|
#define PIN36_PINREG PINC
|
|
#define PIN37_PINREG PINC
|
|
#define PIN38_PINREG PIND
|
|
#define PIN39_PINREG PING
|
|
#define PIN40_PINREG PING
|
|
#define PIN41_PINREG PING
|
|
#define PIN42_PINREG PINL
|
|
#define PIN43_PINREG PINL
|
|
#define PIN44_PINREG PINL
|
|
#define PIN45_PINREG PINL
|
|
#define PIN46_PINREG PINL
|
|
#define PIN47_PINREG PINL
|
|
#define PIN48_PINREG PINL
|
|
#define PIN49_PINREG PINL
|
|
#define PIN50_PINREG PINB
|
|
#define PIN51_PINREG PINB
|
|
#define PIN52_PINREG PINB
|
|
#define PIN53_PINREG PINB
|
|
#define PIN54_PINREG PINF
|
|
#define PIN55_PINREG PINF
|
|
#define PIN56_PINREG PINF
|
|
#define PIN57_PINREG PINF
|
|
#define PIN58_PINREG PINF
|
|
#define PIN59_PINREG PINF
|
|
#define PIN60_PINREG PINF
|
|
#define PIN61_PINREG PINF
|
|
#define PIN62_PINREG PINK
|
|
#define PIN63_PINREG PINK
|
|
#define PIN64_PINREG PINK
|
|
#define PIN65_PINREG PINK
|
|
#define PIN66_PINREG PINK
|
|
#define PIN67_PINREG PINK
|
|
#define PIN68_PINREG PINK
|
|
#define PIN69_PINREG PINK
|
|
|
|
#elif defined(__AVR_ATmega644P__)
|
|
// Sanguino
|
|
|
|
#error Sanguino not defined
|
|
|
|
#else // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
|
// 168 and 328 Arduinos
|
|
|
|
// Two Wire (aka I2C) ports
|
|
#define SDA_PIN 18
|
|
#define SCL_PIN 19
|
|
|
|
// SPI port
|
|
#define SS_PIN 10
|
|
#define MOSI_PIN 11
|
|
#define MISO_PIN 12
|
|
#define SCK_PIN 13
|
|
|
|
// bit number for digital pins
|
|
#define PIN0_BITNUM 0
|
|
#define PIN1_BITNUM 1
|
|
#define PIN2_BITNUM 2
|
|
#define PIN3_BITNUM 3
|
|
#define PIN4_BITNUM 4
|
|
#define PIN5_BITNUM 5
|
|
#define PIN6_BITNUM 6
|
|
#define PIN7_BITNUM 7
|
|
#define PIN8_BITNUM 0
|
|
#define PIN9_BITNUM 1
|
|
#define PIN10_BITNUM 2
|
|
#define PIN11_BITNUM 3
|
|
#define PIN12_BITNUM 4
|
|
#define PIN13_BITNUM 5
|
|
#define PIN14_BITNUM 0
|
|
#define PIN15_BITNUM 1
|
|
#define PIN16_BITNUM 2
|
|
#define PIN17_BITNUM 3
|
|
#define PIN18_BITNUM 4
|
|
#define PIN19_BITNUM 5
|
|
|
|
// output register for all pins
|
|
#define PIN0_PORTREG PORTD
|
|
#define PIN1_PORTREG PORTD
|
|
#define PIN2_PORTREG PORTD
|
|
#define PIN3_PORTREG PORTD
|
|
#define PIN4_PORTREG PORTD
|
|
#define PIN5_PORTREG PORTD
|
|
#define PIN6_PORTREG PORTD
|
|
#define PIN7_PORTREG PORTD
|
|
#define PIN8_PORTREG PORTB
|
|
#define PIN9_PORTREG PORTB
|
|
#define PIN10_PORTREG PORTB
|
|
#define PIN11_PORTREG PORTB
|
|
#define PIN12_PORTREG PORTB
|
|
#define PIN13_PORTREG PORTB
|
|
#define PIN14_PORTREG PORTC
|
|
#define PIN15_PORTREG PORTC
|
|
#define PIN16_PORTREG PORTC
|
|
#define PIN17_PORTREG PORTC
|
|
#define PIN18_PORTREG PORTC
|
|
#define PIN19_PORTREG PORTC
|
|
|
|
// direction control register for digital pins
|
|
#define PIN0_DDRREG DDRD
|
|
#define PIN1_DDRREG DDRD
|
|
#define PIN2_DDRREG DDRD
|
|
#define PIN3_DDRREG DDRD
|
|
#define PIN4_DDRREG DDRD
|
|
#define PIN5_DDRREG DDRD
|
|
#define PIN6_DDRREG DDRD
|
|
#define PIN7_DDRREG DDRD
|
|
#define PIN8_DDRREG DDRB
|
|
#define PIN9_DDRREG DDRB
|
|
#define PIN10_DDRREG DDRB
|
|
#define PIN11_DDRREG DDRB
|
|
#define PIN12_DDRREG DDRB
|
|
#define PIN13_DDRREG DDRB
|
|
#define PIN14_DDRREG DDRC
|
|
#define PIN15_DDRREG DDRC
|
|
#define PIN16_DDRREG DDRC
|
|
#define PIN17_DDRREG DDRC
|
|
#define PIN18_DDRREG DDRC
|
|
#define PIN19_DDRREG DDRC
|
|
|
|
// input register for digital pins
|
|
#define PIN0_PINREG PIND
|
|
#define PIN1_PINREG PIND
|
|
#define PIN2_PINREG PIND
|
|
#define PIN3_PINREG PIND
|
|
#define PIN4_PINREG PIND
|
|
#define PIN5_PINREG PIND
|
|
#define PIN6_PINREG PIND
|
|
#define PIN7_PINREG PIND
|
|
#define PIN8_PINREG PINB
|
|
#define PIN9_PINREG PINB
|
|
#define PIN10_PINREG PINB
|
|
#define PIN11_PINREG PINB
|
|
#define PIN12_PINREG PINB
|
|
#define PIN13_PINREG PINB
|
|
#define PIN14_PINREG PINC
|
|
#define PIN15_PINREG PINC
|
|
#define PIN16_PINREG PINC
|
|
#define PIN17_PINREG PINC
|
|
#define PIN18_PINREG PINC
|
|
#define PIN19_PINREG PINC
|
|
#endif // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
|
#endif // ArduinoPins_h
|