| /* |
| pins_arduino.h - Pin definition functions for Arduino |
| Part of Arduino - http://www.arduino.cc/ |
| |
| Copyright (c) 2007 David A. Mellis |
| |
| This library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Lesser General Public |
| License as published by the Free Software Foundation; either |
| version 2.1 of the License, or (at your option) any later version. |
| |
| This library 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 |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General |
| Public License along with this library; if not, write to the |
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, |
| Boston, MA 02111-1307 USA |
| |
| $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ |
| */ |
| |
| #ifndef Pins_Arduino_h |
| #define Pins_Arduino_h |
| |
| #include <avr/pgmspace.h> |
| |
| #define NOT_A_PIN 0 |
| #define NOT_A_PORT 0 |
| |
| #define NOT_ON_TIMER 0 |
| #define TIMER0A 1 |
| #define TIMER0B 2 |
| #define TIMER1A 3 |
| #define TIMER1B 4 |
| #define TIMER2 5 |
| #define TIMER2A 6 |
| #define TIMER2B 7 |
| |
| #define TIMER3A 8 |
| #define TIMER3B 9 |
| #define TIMER3C 10 |
| #define TIMER4A 11 |
| #define TIMER4B 12 |
| #define TIMER4C 13 |
| #define TIMER5A 14 |
| #define TIMER5B 15 |
| #define TIMER5C 16 |
| |
| #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) |
| const static uint8_t SS = 53; |
| const static uint8_t MOSI = 51; |
| const static uint8_t MISO = 50; |
| const static uint8_t SCK = 52; |
| #else |
| const static uint8_t SS = 10; |
| const static uint8_t MOSI = 11; |
| const static uint8_t MISO = 12; |
| const static uint8_t SCK = 13; |
| #endif |
| |
| // On the ATmega1280, the addresses of some of the port registers are |
| // greater than 255, so we can't store them in uint8_t's. |
| extern const uint16_t PROGMEM port_to_mode_PGM[]; |
| extern const uint16_t PROGMEM port_to_input_PGM[]; |
| extern const uint16_t PROGMEM port_to_output_PGM[]; |
| |
| extern const uint8_t PROGMEM digital_pin_to_port_PGM[]; |
| // extern const uint8_t PROGMEM digital_pin_to_bit_PGM[]; |
| extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[]; |
| extern const uint8_t PROGMEM digital_pin_to_timer_PGM[]; |
| |
| // Get the bit location within the hardware port of the given virtual pin. |
| // This comes from the pins_*.c file for the active board configuration. |
| // |
| // These perform slightly better as macros compared to inline functions |
| // |
| #define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) ) |
| #define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) ) |
| #define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) ) |
| #define analogInPinToBit(P) (P) |
| #define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) ) |
| #define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) ) |
| #define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) ) |
| |
| #endif |