root / arduino-1.0 / hardware / arduino / variants / standard / pins_arduino.h @ 58d82c77
History | View | Annotate | Download (4.94 KB)
1 |
/*
|
---|---|
2 |
pins_arduino.h - Pin definition functions for Arduino
|
3 |
Part of Arduino - http://www.arduino.cc/
|
4 |
|
5 |
Copyright (c) 2007 David A. Mellis
|
6 |
|
7 |
This library is free software; you can redistribute it and/or
|
8 |
modify it under the terms of the GNU Lesser General Public
|
9 |
License as published by the Free Software Foundation; either
|
10 |
version 2.1 of the License, or (at your option) any later version.
|
11 |
|
12 |
This library is distributed in the hope that it will be useful,
|
13 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15 |
Lesser General Public License for more details.
|
16 |
|
17 |
You should have received a copy of the GNU Lesser General
|
18 |
Public License along with this library; if not, write to the
|
19 |
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
20 |
Boston, MA 02111-1307 USA
|
21 |
|
22 |
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
|
23 |
*/
|
24 |
|
25 |
#ifndef Pins_Arduino_h
|
26 |
#define Pins_Arduino_h
|
27 |
|
28 |
#include <avr/pgmspace.h> |
29 |
|
30 |
#define NUM_DIGITAL_PINS 20 |
31 |
#define NUM_ANALOG_INPUTS 6 |
32 |
#define analogInputToDigitalPin(p) ((p < 6) ? (p) + 14 : -1) |
33 |
|
34 |
#if defined(__AVR_ATmega8__)
|
35 |
#define digitalPinHasPWM(p) ((p) == 9 || (p) == 10 || (p) == 11) |
36 |
#else
|
37 |
#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11) |
38 |
#endif
|
39 |
|
40 |
const static uint8_t SS = 10; |
41 |
const static uint8_t MOSI = 11; |
42 |
const static uint8_t MISO = 12; |
43 |
const static uint8_t SCK = 13; |
44 |
|
45 |
const static uint8_t SDA = 18; |
46 |
const static uint8_t SCL = 19; |
47 |
const static uint8_t LED_BUILTIN = 13; |
48 |
|
49 |
const static uint8_t A0 = 14; |
50 |
const static uint8_t A1 = 15; |
51 |
const static uint8_t A2 = 16; |
52 |
const static uint8_t A3 = 17; |
53 |
const static uint8_t A4 = 18; |
54 |
const static uint8_t A5 = 19; |
55 |
const static uint8_t A6 = 20; |
56 |
const static uint8_t A7 = 21; |
57 |
|
58 |
#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0)) |
59 |
#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1)) |
60 |
#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0)))) |
61 |
#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14))) |
62 |
|
63 |
#ifdef ARDUINO_MAIN
|
64 |
|
65 |
// On the Arduino board, digital pins are also used
|
66 |
// for the analog output (software PWM). Analog input
|
67 |
// pins are a separate set.
|
68 |
|
69 |
// ATMEL ATMEGA8 & 168 / ARDUINO
|
70 |
//
|
71 |
// +-\/-+
|
72 |
// PC6 1| |28 PC5 (AI 5)
|
73 |
// (D 0) PD0 2| |27 PC4 (AI 4)
|
74 |
// (D 1) PD1 3| |26 PC3 (AI 3)
|
75 |
// (D 2) PD2 4| |25 PC2 (AI 2)
|
76 |
// PWM+ (D 3) PD3 5| |24 PC1 (AI 1)
|
77 |
// (D 4) PD4 6| |23 PC0 (AI 0)
|
78 |
// VCC 7| |22 GND
|
79 |
// GND 8| |21 AREF
|
80 |
// PB6 9| |20 AVCC
|
81 |
// PB7 10| |19 PB5 (D 13)
|
82 |
// PWM+ (D 5) PD5 11| |18 PB4 (D 12)
|
83 |
// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM
|
84 |
// (D 7) PD7 13| |16 PB2 (D 10) PWM
|
85 |
// (D 8) PB0 14| |15 PB1 (D 9) PWM
|
86 |
// +----+
|
87 |
//
|
88 |
// (PWM+ indicates the additional PWM pins on the ATmega168.)
|
89 |
|
90 |
// ATMEL ATMEGA1280 / ARDUINO
|
91 |
//
|
92 |
// 0-7 PE0-PE7 works
|
93 |
// 8-13 PB0-PB5 works
|
94 |
// 14-21 PA0-PA7 works
|
95 |
// 22-29 PH0-PH7 works
|
96 |
// 30-35 PG5-PG0 works
|
97 |
// 36-43 PC7-PC0 works
|
98 |
// 44-51 PJ7-PJ0 works
|
99 |
// 52-59 PL7-PL0 works
|
100 |
// 60-67 PD7-PD0 works
|
101 |
// A0-A7 PF0-PF7
|
102 |
// A8-A15 PK0-PK7
|
103 |
|
104 |
|
105 |
// these arrays map port names (e.g. port B) to the
|
106 |
// appropriate addresses for various functions (e.g. reading
|
107 |
// and writing)
|
108 |
const uint16_t PROGMEM port_to_mode_PGM[] = {
|
109 |
NOT_A_PORT, |
110 |
NOT_A_PORT, |
111 |
(uint16_t) &DDRB, |
112 |
(uint16_t) &DDRC, |
113 |
(uint16_t) &DDRD, |
114 |
}; |
115 |
|
116 |
const uint16_t PROGMEM port_to_output_PGM[] = {
|
117 |
NOT_A_PORT, |
118 |
NOT_A_PORT, |
119 |
(uint16_t) &PORTB, |
120 |
(uint16_t) &PORTC, |
121 |
(uint16_t) &PORTD, |
122 |
}; |
123 |
|
124 |
const uint16_t PROGMEM port_to_input_PGM[] = {
|
125 |
NOT_A_PORT, |
126 |
NOT_A_PORT, |
127 |
(uint16_t) &PINB, |
128 |
(uint16_t) &PINC, |
129 |
(uint16_t) &PIND, |
130 |
}; |
131 |
|
132 |
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
|
133 |
PD, /* 0 */
|
134 |
PD, |
135 |
PD, |
136 |
PD, |
137 |
PD, |
138 |
PD, |
139 |
PD, |
140 |
PD, |
141 |
PB, /* 8 */
|
142 |
PB, |
143 |
PB, |
144 |
PB, |
145 |
PB, |
146 |
PB, |
147 |
PC, /* 14 */
|
148 |
PC, |
149 |
PC, |
150 |
PC, |
151 |
PC, |
152 |
PC, |
153 |
}; |
154 |
|
155 |
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
|
156 |
_BV(0), /* 0, port D */ |
157 |
_BV(1),
|
158 |
_BV(2),
|
159 |
_BV(3),
|
160 |
_BV(4),
|
161 |
_BV(5),
|
162 |
_BV(6),
|
163 |
_BV(7),
|
164 |
_BV(0), /* 8, port B */ |
165 |
_BV(1),
|
166 |
_BV(2),
|
167 |
_BV(3),
|
168 |
_BV(4),
|
169 |
_BV(5),
|
170 |
_BV(0), /* 14, port C */ |
171 |
_BV(1),
|
172 |
_BV(2),
|
173 |
_BV(3),
|
174 |
_BV(4),
|
175 |
_BV(5),
|
176 |
}; |
177 |
|
178 |
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
|
179 |
NOT_ON_TIMER, /* 0 - port D */
|
180 |
NOT_ON_TIMER, |
181 |
NOT_ON_TIMER, |
182 |
// on the ATmega168, digital pin 3 has hardware pwm
|
183 |
#if defined(__AVR_ATmega8__)
|
184 |
NOT_ON_TIMER, |
185 |
#else
|
186 |
TIMER2B, |
187 |
#endif
|
188 |
NOT_ON_TIMER, |
189 |
// on the ATmega168, digital pins 5 and 6 have hardware pwm
|
190 |
#if defined(__AVR_ATmega8__)
|
191 |
NOT_ON_TIMER, |
192 |
NOT_ON_TIMER, |
193 |
#else
|
194 |
TIMER0B, |
195 |
TIMER0A, |
196 |
#endif
|
197 |
NOT_ON_TIMER, |
198 |
NOT_ON_TIMER, /* 8 - port B */
|
199 |
TIMER1A, |
200 |
TIMER1B, |
201 |
#if defined(__AVR_ATmega8__)
|
202 |
TIMER2, |
203 |
#else
|
204 |
TIMER2A, |
205 |
#endif
|
206 |
NOT_ON_TIMER, |
207 |
NOT_ON_TIMER, |
208 |
NOT_ON_TIMER, |
209 |
NOT_ON_TIMER, /* 14 - port C */
|
210 |
NOT_ON_TIMER, |
211 |
NOT_ON_TIMER, |
212 |
NOT_ON_TIMER, |
213 |
NOT_ON_TIMER, |
214 |
}; |
215 |
|
216 |
#endif
|
217 |
|
218 |
#endif
|