/* * pin_defs_x.h * optiboot helper defining the default pin assignments (LED, SOFT_UART) * for the various chips that are supported. This also has some ugly macros * for selecting among various UARTs and LED possibilities using command-line * defines like "UART=2 LED=B5" * * Copyright 2013-2020 by Bill Westfield. * Copyright 2010 by Peter Knight. * This software is licensed under version 2 of the Gnu Public Licence. * See optiboot.c for details. */ /* * A bunch of macros to enable the LED to be specified as "B5" for bit 5 * of port B, and similar. * We define symbols for all the legal combination of port/bit on a chip, * and do pre-processor tests to see if there's a match. This ends up * being very verbose, but it is pretty easy to generate semi-automatically. * (We wouldn't need this if the preprocessor could do string compares.) */ // Symbols for each PortA bit. #define A0 0x100 #define A1 0x101 #define A2 0x102 #define A3 0x103 #define A4 0x104 #define A5 0x105 #define A6 0x106 #define A7 0x107 // If there is no PORTA on this chip, don't allow these to be used // (and indicate the error by redefining LED) #if !defined(PORTA) #if LED >= A0 && LED <= A7 #undef LED #define LED -1 #endif #endif #define B0 0x200 #define B1 0x201 #define B2 0x202 #define B3 0x203 #define B4 0x204 #define B5 0x205 #define B6 0x206 #define B7 0x207 #if !defined(PORTB) #if LED >= B0 && LED <= B7 #undef LED #define LED -1 #endif #endif #define C0 0x300 #define C1 0x301 #define C2 0x302 #define C3 0x303 #define C4 0x304 #define C5 0x305 #define C6 0x306 #define C7 0x307 #if !(defined(PORTC)) #if LED >= C0 && LED <= C7 #undef LED #define LED -1 #endif #endif #define D0 0x400 #define D1 0x401 #define D2 0x402 #define D3 0x403 #define D4 0x404 #define D5 0x405 #define D6 0x406 #define D7 0x407 #if !(defined(PORTD)) #if LED >= D0 && LED <= D7 #undef LED #define LED -1 #endif #endif #define E0 0x500 #define E1 0x501 #define E2 0x502 #define E3 0x503 #define E4 0x504 #define E5 0x505 #define E6 0x506 #define E7 0x507 #if !(defined(PORTE)) #if LED >= E0 && LED <= E7 #undef LED #define LED -1 #endif #endif #define F0 0x600 #define F1 0x601 #define F2 0x602 #define F3 0x603 #define F4 0x604 #define F5 0x605 #define F6 0x606 #define F7 0x607 #if !(defined(PORTF)) #if LED >= F0 && LED <= F7 #undef LED #define LED -1 #endif #endif #define G0 0x700 #define G1 0x701 #define G2 0x702 #define G3 0x703 #define G4 0x704 #define G5 0x705 #define G6 0x706 #define G7 0x707 #if !defined(PORTG) #if LED >= G0 && LED <= G7 #undef LED #define LED -1 #endif #endif #define H0 0x800 #define H1 0x801 #define H2 0x802 #define H3 0x803 #define H4 0x804 #define H5 0x805 #define H6 0x806 #define H7 0x807 #if !(defined(PORTH)) #if LED >= H0 && LED <= H7 #undef LED #define LED -1 #endif #endif #define J0 0xA00 #define J1 0xA01 #define J2 0xA02 #define J3 0xA03 #define J4 0xA04 #define J5 0xA05 #define J6 0xA06 #define J7 0xA07 #if !(defined(PORTJ)) #if LED >= J0 && LED <= J7 #undef LED #define LED -1 #endif #endif #define K0 0xB00 #define K1 0xB01 #define K2 0xB02 #define K3 0xB03 #define K4 0xB04 #define K5 0xB05 #define K6 0xB06 #define K7 0xB07 #if !(defined(PORTK)) #if LED >= K0 && LED <= K7 #undef LED #define LED -1 #endif #endif #define L0 0xC00 #define L1 0xC01 #define L2 0xC02 #define L3 0xC03 #define L4 0xC04 #define L5 0xC05 #define L6 0xC06 #define L7 0xC07 #if !(defined(PORTL)) #if LED >= L0 && LED <= L7 #undef LED #define LED -1 #endif #endif /* * A statement like "#if LED == B0" will evaluation (in the preprocessor) * to #if C0 == B0, and then to #if 0x301 == 0x201 */ #if LED == B0 #define LED_NAME "B0" #undef LED #define LED_PORT VPORTB #define LED (1<