[gnoduino: 14/237] Factoring pin definitions out of the core.



commit cf6aaac53e7db7798069e33e79a7d1d961f275c4
Author: David A. Mellis <d mellis arduino cc>
Date:   Fri Mar 4 21:05:05 2011 -0500

    Factoring pin definitions out of the core.
    
    That is, there's now a pins/ directory in a platform, which includes multiple directories, each of which has its own pins_arduino.h.  The boards.txt gets a new preferences, <BOARD>.build.pins, whose values is a sub-directory of the pins/ directory (possibly with a "platform:" prefix).  That sub-directory is then placed in the include path during compilation.

 arduino/boards.txt                                 |   20 ++-
 arduino/cores/arduino/Arduino.h                    |   12 ++
 .../{cores/arduino => pins/mega}/pins_arduino.h    |  183 ------------------
 arduino/pins/standard/pins_arduino.h               |  199 ++++++++++++++++++++
 4 files changed, 229 insertions(+), 185 deletions(-)
---
diff --git a/arduino/boards.txt b/arduino/boards.txt
index 0ae40d3..40c13a7 100644
--- a/arduino/boards.txt
+++ b/arduino/boards.txt
@@ -14,6 +14,7 @@ uno.bootloader.lock_bits=0x0F
 uno.build.mcu=atmega328p
 uno.build.f_cpu=16000000L
 uno.build.core=arduino
+uno.build.pins=standard
 
 ##############################################################
 
@@ -34,6 +35,7 @@ atmega328.bootloader.lock_bits=0x0F
 atmega328.build.mcu=atmega328p
 atmega328.build.f_cpu=16000000L
 atmega328.build.core=arduino
+atmega328..build.pins=standard
 
 ##############################################################
 
@@ -54,6 +56,7 @@ diecimila.bootloader.lock_bits=0x0F
 diecimila.build.mcu=atmega168
 diecimila.build.f_cpu=16000000L
 diecimila.build.core=arduino
+diecimila.build.pins=standard
 
 ##############################################################
 
@@ -74,6 +77,7 @@ mega2560.bootloader.lock_bits=0x0F
 mega2560.build.mcu=atmega2560
 mega2560.build.f_cpu=16000000L
 mega2560.build.core=arduino
+mega2560.build.pins=mega
 
 ##############################################################
 
@@ -94,6 +98,7 @@ mega.bootloader.lock_bits=0x0F
 mega.build.mcu=atmega1280
 mega.build.f_cpu=16000000L
 mega.build.core=arduino
+mega.build.pins=mega
 
 ##############################################################
 
@@ -114,6 +119,7 @@ mini.bootloader.lock_bits=0x0F
 mini.build.mcu=atmega168
 mini.build.f_cpu=16000000L
 mini.build.core=arduino
+mini.build.pins=standard
 
 ##############################################################
 
@@ -133,7 +139,8 @@ fio.bootloader.lock_bits=0x0F
 
 fio.build.mcu=atmega328p
 fio.build.f_cpu=8000000L
-fio.build.core=arduino:arduino
+fio.build.core=arduino
+fio.build.pins=standard
 
 ##############################################################
 
@@ -155,6 +162,7 @@ bt328.bootloader.lock_bits=0x0F
 bt328.build.mcu=atmega328p
 bt328.build.f_cpu=16000000L
 bt328.build.core=arduino
+bt328.build.pins=standard
 
 ##############################################################
 
@@ -176,6 +184,7 @@ bt.bootloader.lock_bits=0x0F
 bt.build.mcu=atmega168
 bt.build.f_cpu=16000000L
 bt.build.core=arduino
+bt.build.pins=standard
 
 ##############################################################
 
@@ -196,6 +205,7 @@ lilypad328.bootloader.lock_bits=0x0F
 lilypad328.build.mcu=atmega328p
 lilypad328.build.f_cpu=8000000L
 lilypad328.build.core=arduino
+lilypad328.build.pins=standard
 
 ##############################################################
 
@@ -216,6 +226,7 @@ lilypad.bootloader.lock_bits=0x0F
 lilypad.build.mcu=atmega168
 lilypad.build.f_cpu=8000000L
 lilypad.build.core=arduino
+lilypad.build.pins=standard
 
 ##############################################################
 
@@ -236,6 +247,7 @@ pro5v328.bootloader.lock_bits=0x0F
 pro5v328.build.mcu=atmega328p
 pro5v328.build.f_cpu=16000000L
 pro5v328.build.core=arduino
+pro5v328.build.pins=standard
 
 ##############################################################
 
@@ -256,6 +268,7 @@ pro5v.bootloader.lock_bits=0x0F
 pro5v.build.mcu=atmega168
 pro5v.build.f_cpu=16000000L
 pro5v.build.core=arduino
+pro5v.build.pins=standard
 
 ##############################################################
 
@@ -276,6 +289,7 @@ pro328.bootloader.lock_bits=0x0F
 pro328.build.mcu=atmega328p
 pro328.build.f_cpu=8000000L
 pro328.build.core=arduino
+pro328.build.pins=standard
 
 ##############################################################
 
@@ -296,6 +310,7 @@ pro.bootloader.lock_bits=0x0F
 pro.build.mcu=atmega168
 pro.build.f_cpu=8000000L
 pro.build.core=arduino
+pro.build.pins=standard
 
 ##############################################################
 
@@ -316,6 +331,7 @@ atmega168.bootloader.lock_bits=0x0F
 atmega168.build.mcu=atmega168
 atmega168.build.f_cpu=16000000L
 atmega168.build.core=arduino
+atmega168.build.pins=standard
 
 ##############################################################
 
@@ -335,4 +351,4 @@ atmega8.bootloader.lock_bits=0x0F
 atmega8.build.mcu=atmega8
 atmega8.build.f_cpu=16000000L
 atmega8.build.core=arduino
-
+atmega8.build.pins=standard
diff --git a/arduino/cores/arduino/Arduino.h b/arduino/cores/arduino/Arduino.h
index e877970..ebdbe9a 100755
--- a/arduino/cores/arduino/Arduino.h
+++ b/arduino/cores/arduino/Arduino.h
@@ -142,6 +142,18 @@ extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];
 #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
diff --git a/arduino/cores/arduino/pins_arduino.h b/arduino/pins/mega/pins_arduino.h
similarity index 73%
rename from arduino/cores/arduino/pins_arduino.h
rename to arduino/pins/mega/pins_arduino.h
index 169e734..e3785e4 100644
--- a/arduino/cores/arduino/pins_arduino.h
+++ b/arduino/pins/mega/pins_arduino.h
@@ -27,19 +27,11 @@
 
 #include <avr/pgmspace.h>
 
-#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
 
-#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
 const static uint8_t A0 = 54;
 const static uint8_t A1 = 55;
 const static uint8_t A2 = 56;
@@ -56,72 +48,9 @@ const static uint8_t A12 = 66;
 const static uint8_t A13 = 67;
 const static uint8_t A14 = 68;
 const static uint8_t A15 = 69;
-#else
-const static uint8_t A0 = 14;
-const static uint8_t A1 = 15;
-const static uint8_t A2 = 16;
-const static uint8_t A3 = 17;
-const static uint8_t A4 = 18;
-const static uint8_t A5 = 19;
-const static uint8_t A6 = 20;
-const static uint8_t A7 = 21;
-#endif
 
 #ifdef ARDUINO_MAIN
 
-// On the Arduino board, digital pins are also used
-// for the analog output (software PWM).  Analog input
-// pins are a separate set.
-
-// ATMEL ATMEGA8 & 168 / ARDUINO
-//
-//                  +-\/-+
-//            PC6  1|    |28  PC5 (AI 5)
-//      (D 0) PD0  2|    |27  PC4 (AI 4)
-//      (D 1) PD1  3|    |26  PC3 (AI 3)
-//      (D 2) PD2  4|    |25  PC2 (AI 2)
-// PWM+ (D 3) PD3  5|    |24  PC1 (AI 1)
-//      (D 4) PD4  6|    |23  PC0 (AI 0)
-//            VCC  7|    |22  GND
-//            GND  8|    |21  AREF
-//            PB6  9|    |20  AVCC
-//            PB7 10|    |19  PB5 (D 13)
-// PWM+ (D 5) PD5 11|    |18  PB4 (D 12)
-// PWM+ (D 6) PD6 12|    |17  PB3 (D 11) PWM
-//      (D 7) PD7 13|    |16  PB2 (D 10) PWM
-//      (D 8) PB0 14|    |15  PB1 (D 9) PWM
-//                  +----+
-//
-// (PWM+ indicates the additional PWM pins on the ATmega168.)
-
-// ATMEL ATMEGA1280 / ARDUINO
-//
-// 0-7 PE0-PE7   works
-// 8-13 PB0-PB5  works
-// 14-21 PA0-PA7 works 
-// 22-29 PH0-PH7 works
-// 30-35 PG5-PG0 works
-// 36-43 PC7-PC0 works
-// 44-51 PJ7-PJ0 works
-// 52-59 PL7-PL0 works
-// 60-67 PD7-PD0 works
-// A0-A7 PF0-PF7
-// A8-A15 PK0-PK7
-
-#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
-
-
-#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
 const uint16_t PROGMEM port_to_mode_PGM[] = {
 	NOT_A_PORT,
 	(uint16_t) &DDRA,
@@ -394,118 +323,6 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
 	NOT_ON_TIMER	, // PK 6 ** 68 ** A14	
 	NOT_ON_TIMER	, // PK 7 ** 69 ** A15	
 };
-#else
-// these arrays map port names (e.g. port B) to the
-// appropriate addresses for various functions (e.g. reading
-// and writing)
-const uint16_t PROGMEM port_to_mode_PGM[] = {
-	NOT_A_PORT,
-	NOT_A_PORT,
-	(uint16_t) &DDRB,
-	(uint16_t) &DDRC,
-	(uint16_t) &DDRD,
-};
-
-const uint16_t PROGMEM port_to_output_PGM[] = {
-	NOT_A_PORT,
-	NOT_A_PORT,
-	(uint16_t) &PORTB,
-	(uint16_t) &PORTC,
-	(uint16_t) &PORTD,
-};
-
-const uint16_t PROGMEM port_to_input_PGM[] = {
-	NOT_A_PORT,
-	NOT_A_PORT,
-	(uint16_t) &PINB,
-	(uint16_t) &PINC,
-	(uint16_t) &PIND,
-};
-
-const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
-	PD, /* 0 */
-	PD,
-	PD,
-	PD,
-	PD,
-	PD,
-	PD,
-	PD,
-	PB, /* 8 */
-	PB,
-	PB,
-	PB,
-	PB,
-	PB,
-	PC, /* 14 */
-	PC,
-	PC,
-	PC,
-	PC,
-	PC,
-};
-
-const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
-	_BV(0), /* 0, port D */
-	_BV(1),
-	_BV(2),
-	_BV(3),
-	_BV(4),
-	_BV(5),
-	_BV(6),
-	_BV(7),
-	_BV(0), /* 8, port B */
-	_BV(1),
-	_BV(2),
-	_BV(3),
-	_BV(4),
-	_BV(5),
-	_BV(0), /* 14, port C */
-	_BV(1),
-	_BV(2),
-	_BV(3),
-	_BV(4),
-	_BV(5),
-};
-
-const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
-	NOT_ON_TIMER, /* 0 - port D */
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-	// on the ATmega168, digital pin 3 has hardware pwm
-#if defined(__AVR_ATmega8__)
-	NOT_ON_TIMER,
-#else
-	TIMER2B,
-#endif
-	NOT_ON_TIMER,
-	// on the ATmega168, digital pins 5 and 6 have hardware pwm
-#if defined(__AVR_ATmega8__)
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-#else
-	TIMER0B,
-	TIMER0A,
-#endif
-	NOT_ON_TIMER,
-	NOT_ON_TIMER, /* 8 - port B */
-	TIMER1A,
-	TIMER1B,
-#if defined(__AVR_ATmega8__)
-	TIMER2,
-#else
-	TIMER2A,
-#endif
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-	NOT_ON_TIMER, /* 14 - port C */
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-	NOT_ON_TIMER,
-};
-#endif
 
 #endif
 
diff --git a/arduino/pins/standard/pins_arduino.h b/arduino/pins/standard/pins_arduino.h
new file mode 100644
index 0000000..8fabb17
--- /dev/null
+++ b/arduino/pins/standard/pins_arduino.h
@@ -0,0 +1,199 @@
+/*
+  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>
+
+const static uint8_t SS   = 10;
+const static uint8_t MOSI = 11;
+const static uint8_t MISO = 12;
+const static uint8_t SCK  = 13;
+
+const static uint8_t A0 = 14;
+const static uint8_t A1 = 15;
+const static uint8_t A2 = 16;
+const static uint8_t A3 = 17;
+const static uint8_t A4 = 18;
+const static uint8_t A5 = 19;
+const static uint8_t A6 = 20;
+const static uint8_t A7 = 21;
+
+#ifdef ARDUINO_MAIN
+
+// On the Arduino board, digital pins are also used
+// for the analog output (software PWM).  Analog input
+// pins are a separate set.
+
+// ATMEL ATMEGA8 & 168 / ARDUINO
+//
+//                  +-\/-+
+//            PC6  1|    |28  PC5 (AI 5)
+//      (D 0) PD0  2|    |27  PC4 (AI 4)
+//      (D 1) PD1  3|    |26  PC3 (AI 3)
+//      (D 2) PD2  4|    |25  PC2 (AI 2)
+// PWM+ (D 3) PD3  5|    |24  PC1 (AI 1)
+//      (D 4) PD4  6|    |23  PC0 (AI 0)
+//            VCC  7|    |22  GND
+//            GND  8|    |21  AREF
+//            PB6  9|    |20  AVCC
+//            PB7 10|    |19  PB5 (D 13)
+// PWM+ (D 5) PD5 11|    |18  PB4 (D 12)
+// PWM+ (D 6) PD6 12|    |17  PB3 (D 11) PWM
+//      (D 7) PD7 13|    |16  PB2 (D 10) PWM
+//      (D 8) PB0 14|    |15  PB1 (D 9) PWM
+//                  +----+
+//
+// (PWM+ indicates the additional PWM pins on the ATmega168.)
+
+// ATMEL ATMEGA1280 / ARDUINO
+//
+// 0-7 PE0-PE7   works
+// 8-13 PB0-PB5  works
+// 14-21 PA0-PA7 works 
+// 22-29 PH0-PH7 works
+// 30-35 PG5-PG0 works
+// 36-43 PC7-PC0 works
+// 44-51 PJ7-PJ0 works
+// 52-59 PL7-PL0 works
+// 60-67 PD7-PD0 works
+// A0-A7 PF0-PF7
+// A8-A15 PK0-PK7
+
+
+// these arrays map port names (e.g. port B) to the
+// appropriate addresses for various functions (e.g. reading
+// and writing)
+const uint16_t PROGMEM port_to_mode_PGM[] = {
+	NOT_A_PORT,
+	NOT_A_PORT,
+	(uint16_t) &DDRB,
+	(uint16_t) &DDRC,
+	(uint16_t) &DDRD,
+};
+
+const uint16_t PROGMEM port_to_output_PGM[] = {
+	NOT_A_PORT,
+	NOT_A_PORT,
+	(uint16_t) &PORTB,
+	(uint16_t) &PORTC,
+	(uint16_t) &PORTD,
+};
+
+const uint16_t PROGMEM port_to_input_PGM[] = {
+	NOT_A_PORT,
+	NOT_A_PORT,
+	(uint16_t) &PINB,
+	(uint16_t) &PINC,
+	(uint16_t) &PIND,
+};
+
+const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
+	PD, /* 0 */
+	PD,
+	PD,
+	PD,
+	PD,
+	PD,
+	PD,
+	PD,
+	PB, /* 8 */
+	PB,
+	PB,
+	PB,
+	PB,
+	PB,
+	PC, /* 14 */
+	PC,
+	PC,
+	PC,
+	PC,
+	PC,
+};
+
+const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
+	_BV(0), /* 0, port D */
+	_BV(1),
+	_BV(2),
+	_BV(3),
+	_BV(4),
+	_BV(5),
+	_BV(6),
+	_BV(7),
+	_BV(0), /* 8, port B */
+	_BV(1),
+	_BV(2),
+	_BV(3),
+	_BV(4),
+	_BV(5),
+	_BV(0), /* 14, port C */
+	_BV(1),
+	_BV(2),
+	_BV(3),
+	_BV(4),
+	_BV(5),
+};
+
+const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
+	NOT_ON_TIMER, /* 0 - port D */
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+	// on the ATmega168, digital pin 3 has hardware pwm
+#if defined(__AVR_ATmega8__)
+	NOT_ON_TIMER,
+#else
+	TIMER2B,
+#endif
+	NOT_ON_TIMER,
+	// on the ATmega168, digital pins 5 and 6 have hardware pwm
+#if defined(__AVR_ATmega8__)
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+#else
+	TIMER0B,
+	TIMER0A,
+#endif
+	NOT_ON_TIMER,
+	NOT_ON_TIMER, /* 8 - port B */
+	TIMER1A,
+	TIMER1B,
+#if defined(__AVR_ATmega8__)
+	TIMER2,
+#else
+	TIMER2A,
+#endif
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+	NOT_ON_TIMER, /* 14 - port C */
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+	NOT_ON_TIMER,
+};
+
+#endif
+
+#endif
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]