mirror of
https://github.com/arduino/Arduino.git
synced 2025-02-18 12:54:25 +01:00
Adding pin-change interrupt pin mapping macros to pins_arduino.h.
http://code.google.com/p/arduino/issues/detail?id=490
This commit is contained in:
parent
f14fd94d0e
commit
f179794a45
@ -53,6 +53,31 @@ const static uint8_t A13 = 67;
|
|||||||
const static uint8_t A14 = 68;
|
const static uint8_t A14 = 68;
|
||||||
const static uint8_t A15 = 69;
|
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 ) ) ) ) ) )
|
||||||
|
|
||||||
#ifdef ARDUINO_MAIN
|
#ifdef ARDUINO_MAIN
|
||||||
|
|
||||||
const uint16_t PROGMEM port_to_mode_PGM[] = {
|
const uint16_t PROGMEM port_to_mode_PGM[] = {
|
||||||
|
@ -45,6 +45,11 @@ const static uint8_t A5 = 19;
|
|||||||
const static uint8_t A6 = 20;
|
const static uint8_t A6 = 20;
|
||||||
const static uint8_t A7 = 21;
|
const static uint8_t A7 = 21;
|
||||||
|
|
||||||
|
#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))
|
||||||
|
#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1))
|
||||||
|
#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0))))
|
||||||
|
#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14)))
|
||||||
|
|
||||||
#ifdef ARDUINO_MAIN
|
#ifdef ARDUINO_MAIN
|
||||||
|
|
||||||
// On the Arduino board, digital pins are also used
|
// On the Arduino board, digital pins are also used
|
||||||
|
@ -42,7 +42,6 @@ http://arduiniana.org.
|
|||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "SoftwareSerial.h"
|
#include "SoftwareSerial.h"
|
||||||
#include "icrmacros.h"
|
|
||||||
//
|
//
|
||||||
// Lookup table
|
// Lookup table
|
||||||
//
|
//
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
icrmacros.h
|
|
||||||
|
|
||||||
A place to put useful ICR (interrupt change register) macros
|
|
||||||
|
|
||||||
If you want to support non-Arduino processors you can extend or replace
|
|
||||||
this file.
|
|
||||||
|
|
||||||
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
The latest version of this library can always be found at
|
|
||||||
http://arduiniana.org.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Abstractions for maximum portability between processors
|
|
||||||
// These are macros to associate pins to pin change interrupts
|
|
||||||
#if !defined(digitalPinToPCICR) // Courtesy Paul Stoffregen
|
|
||||||
|
|
||||||
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
|
|
||||||
|
|
||||||
#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0))
|
|
||||||
#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1))
|
|
||||||
#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0))))
|
|
||||||
#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14)))
|
|
||||||
|
|
||||||
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
|
||||||
// Specifically for the Arduino Mega 2560 (or 1280 on the original Arduino Mega)
|
|
||||||
// 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 ) ) ) ) ) )
|
|
||||||
|
|
||||||
#else
|
|
||||||
#error This processor is not supported by SoftwareSerial
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user