mirror of https://github.com/ArduPilot/ardupilot
140 lines
4.3 KiB
C
140 lines
4.3 KiB
C
/*
|
|
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
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <avr/pgmspace.h>
|
|
|
|
|
|
#define NOT_A_PIN 0
|
|
#define NOT_A_PORT 0
|
|
#define PA 1
|
|
#define PB 2
|
|
#define PC 3
|
|
#define PD 4
|
|
#define PE 5
|
|
#define PF 6
|
|
#define PG 7
|
|
#define PH 8
|
|
#define PJ 10
|
|
#define PK 11
|
|
#define PL 12
|
|
|
|
#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 TIMER4D 14
|
|
#define TIMER5A 15
|
|
#define TIMER5B 16
|
|
#define TIMER5C 17
|
|
|
|
|
|
#define NUM_DIGITAL_PINS 71
|
|
#define NUM_ANALOG_INPUTS 16
|
|
#define analogInputToDigitalPin(p) ((p < 16) ? (p) + 54 : -1)
|
|
#define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 13) || ((p) >= 44 && (p)<= 46))
|
|
|
|
const static uint8_t SS = 53;
|
|
const static uint8_t MOSI = 51;
|
|
const static uint8_t MISO = 50;
|
|
const static uint8_t SCK = 52;
|
|
|
|
const static uint8_t SDA = 20;
|
|
const static uint8_t SCL = 21;
|
|
const static uint8_t LED_BUILTIN = 13;
|
|
|
|
const static uint8_t A0 = 54;
|
|
const static uint8_t A1 = 55;
|
|
const static uint8_t A2 = 56;
|
|
const static uint8_t A3 = 57;
|
|
const static uint8_t A4 = 58;
|
|
const static uint8_t A5 = 59;
|
|
const static uint8_t A6 = 60;
|
|
const static uint8_t A7 = 61;
|
|
const static uint8_t A8 = 62;
|
|
const static uint8_t A9 = 63;
|
|
const static uint8_t A10 = 64;
|
|
const static uint8_t A11 = 65;
|
|
const static uint8_t A12 = 66;
|
|
const static uint8_t A13 = 67;
|
|
const static uint8_t A14 = 68;
|
|
const static uint8_t A15 = 69;
|
|
|
|
// A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins)
|
|
// Only pins available for RECEIVE (TRANSMIT can be on any pin):
|
|
// (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me)
|
|
// Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
|
|
|
|
#define digitalPinToPCICR(p) ( (((p) >= 10) && ((p) <= 13)) || \
|
|
(((p) >= 50) && ((p) <= 53)) || \
|
|
(((p) >= 62) && ((p) <= 69)) ? (&PCICR) : ((uint8_t *)0) )
|
|
|
|
#define digitalPinToPCICRbit(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \
|
|
( (((p) >= 62) && ((p) <= 69)) ? 2 : \
|
|
0 ) )
|
|
|
|
#define digitalPinToPCMSK(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \
|
|
( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \
|
|
((uint8_t *)0) ) )
|
|
|
|
#define digitalPinToPCMSKbit(p) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \
|
|
( ((p) == 50) ? 3 : \
|
|
( ((p) == 51) ? 2 : \
|
|
( ((p) == 52) ? 1 : \
|
|
( ((p) == 53) ? 0 : \
|
|
( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \
|
|
0 ) ) ) ) ) )
|
|
|
|
// 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_mask_PGM[];
|
|
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
#endif
|