2011-10-07 19:18:23 -03:00
|
|
|
/*
|
|
|
|
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
|
|
|
|
|
2012-11-18 18:03:35 -04:00
|
|
|
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(DESKTOP_BUILD)
|
2011-10-07 19:18:23 -03:00
|
|
|
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
|