00001 /* 00002 * Revised for Waspmote by D. Cuartielles & A. Bielsa, 2009 00003 * 00004 * Copyright (c) 2005 David A. Mellis 00005 * 00006 * This program is free software: you can redistribute it and/or modify 00007 * it under the terms of the GNU Lesser General Public License as published by 00008 * the Free Software Foundation, either version 2.1 of the License, or 00009 * (at your option) any later version. 00010 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU Lesser General Public License for more details. 00015 00016 * You should have received a copy of the GNU Lesser General Public License 00017 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00018 * 00019 * Version: 0.1 00020 * Design: David Gascón 00021 * Implementation: David A.Mellis, David Cuartielles, Alberto Bielsa 00022 */ 00023 00024 00025 #include <avr/io.h> 00026 #include "wiring_private.h" 00027 #include "pins_waspmote.h" 00028 00029 // On the Wasp board, digital pins are also used 00030 // for the analog output (software PWM). Analog input 00031 // pins are a separate set. 00032 // 00033 // ATMEL ATMEGA1281 / WASP 00034 // 00035 // 00036 // A G A P P P P P P P P G V P P P 00037 // V N R F F F F F F F F N C A A A 00038 // C D F 0 1 2 3 4 5 6 7 D C 0 1 2 00039 // 00040 // _64_63_62_61_60_59_58_57_56_55_54_53_52_51_50_49__ 00041 // /O | 00042 // ( ) PG5 1| |48 PA3 00043 // (D 0) PE1 2| |47 PA4 00044 // ( ) PE1 3| |46 PA5 00045 // ( ) PE2 4| |45 PA6 00046 // ( ) PE3 5| |44 PA7 00047 // ( ) PE4 6| |43 PG2 00048 // ( ) PE5 7| |42 PC7 00049 // ( ) PE6 8| |41 PC6 00050 // SOFT LED (LED4) - PE7 9| |40 PC5 00051 // ( ) PB0 10| |39 PC4 00052 // ( ) PB1 11| |38 PC3 00053 // ( ) PB2 12| |37 PC2 00054 // ( ) PB3 13| |36 PC1 - SOFT LED (LED3) 00055 // ( ) PB4 14| |35 PC0 00056 // ( ) PB5 15| |34 PG1 00057 // ( ) PB6 16| |33 PG0 00058 // |___________________________________________________| 00059 // 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 00060 // 00061 // P P P R V G X X P P P P P P P P 00062 // B G G S C N T T D D D D D D D D 00063 // 7 3 4 T C D 2 1 0 1 2 3 4 5 6 7 00064 // 00065 00066 00067 #define PA 1 00068 #define PB 2 00069 #define PC 3 00070 #define PD 4 00071 #define PE 5 00072 #define PF 6 00073 #define PG 7 00074 00075 // these arrays map port names (e.g. port B) to the 00076 // appropriate addresses for various functions (e.g. reading 00077 // and writing) 00078 const uint8_t PROGMEM port_to_mode_PGM[] = { 00079 NOT_A_PORT, 00080 &DDRA, 00081 &DDRB, 00082 &DDRC, 00083 &DDRD, 00084 &DDRE, 00085 &DDRF, 00086 &DDRG, 00087 }; 00088 00089 const uint8_t PROGMEM port_to_output_PGM[] = { 00090 NOT_A_PORT, 00091 &PORTA, 00092 &PORTB, 00093 &PORTC, 00094 &PORTD, 00095 &PORTE, 00096 &PORTF, 00097 &PORTG, 00098 }; 00099 00100 const uint8_t PROGMEM port_to_input_PGM[] = { 00101 NOT_A_PORT, 00102 &PINA, 00103 &PINB, 00104 &PINC, 00105 &PIND, 00106 &PINE, 00107 &PINF, 00108 &PING, 00109 }; 00110 00111 const uint8_t PROGMEM digital_pin_to_port_PGM[] = { 00112 // PORT PIN WASP API PIN DESCRIPTION 00113 PE , // PE 0 ** 0 ** USB_XBEE_RX 00114 PE , // PE 1 ** 1 ** USB_XBEE_TX 00115 PE , // PE 3 ** 2 ** DIGITAL1 00116 PE , // PE 4 ** 3 ** DIGITAL0 00117 PC , // PC 4 ** 4 ** DIGITAL7 00118 PC , // PC 5 ** 5 ** DIGITAL8 00119 PC , // PC 6 ** 6 ** DIGITAL6 00120 PC , // PC 7 ** 7 ** DIGITAL5 00121 PA , // PA 2 ** 8 ** DIGITAL2 00122 PA , // PA 3 ** 9 ** DIGITAL4 00123 PA , // PA 4 ** 10 ** DIGITAL3 00124 PD , // PD 5 ** 11 ** DIGITAL9 00125 PD , // PD 6 ** 12 ** LED0 00126 PC , // PC 1 ** 13 ** LED1 00127 PF , // PF 1 ** 14 ** ANA0 00128 PF , // PF 2 ** 15 ** ANA1 00129 PF , // PF 3 ** 16 ** ANA2 00130 PF , // PF 4 ** 17 ** ANA3 00131 PF , // PF 5 ** 18 ** ANA4 00132 PF , // PF 6 ** 19 ** ANA5 00133 PF , // PF 7 ** 20 ** ANA6 00134 PF , // PF 0 ** 21 ** BAT_MONITOR 00135 PA , // PA 1 ** 22 ** XBEE_PW 00136 PD , // PD 7 ** 23 ** XBEE SLEEP 00137 PE , // PE 5 ** 24 ** SENS_PW_5V 00138 PA , // PA 6 ** 25 ** BAT_MONITOR_PW 00139 PE , // PE 2 ** 26 ** SENS_PW_3v3 00140 PA , // PA 5 ** 27 ** MEM_PW 00141 PC , // PC 0 ** 28 ** SD_PRESENT 00142 PB , // PB 0 ** 29 ** SD_SS 00143 PB , // PB 1 ** 30 ** SD_SCK 00144 PB , // PB 2 ** 31 ** SD_MOSI 00145 PB , // PB 3 ** 32 ** SD_MISO 00146 PB , // PB 4 ** 33 ** SERID_PW 00147 PB , // PB 5 ** 34 ** SERID_IN 00148 PA , // PA 0 ** 35 ** GPS_PW 00149 PB , // PB 6 ** 36 ** GPS_RX 00150 PB , // PB 7 ** 37 ** GPS_TX 00151 PE , // PE 6 ** 38 ** RDY_ACC 00152 PE , // PE 7 ** 39 ** RST_RTC 00153 PD , // PD 0 ** 40 ** I2C_SCL 00154 PD , // PD 1 ** 41 ** I2C_SDA 00155 PC , // PC 3 ** 42 ** GPRS_PW 00156 PD , // PD 2 ** 43 ** GPRS_RX 00157 PD , // PD 3 ** 44 ** GPRS_TX 00158 PA , // PA 7 ** 45 ** BOOT PIN 00159 PC , // PC 2 ** 46 ** PWON 00160 PD , // PD 4 ** 47 ** FREE PIN 00161 PG , // PG 2 ** 48 ** RTC_PW 00162 PG , // PG 1 ** 49 ** RTC_SLEEP 00163 PG , // PG 0 ** 50 ** LOW_BAT_MON 00164 }; 00165 00166 const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { 00167 // PIN PORT PIN WASP API PIN DESCRIPTION 00168 _BV( 0 ) , // PE 0 ** 0 ** USB_XBEE_RX 00169 _BV( 1 ) , // PE 1 ** 1 ** USB_XBEE_TX 00170 _BV( 3 ) , // PE 3 ** 2 ** DIGITAL1 00171 _BV( 4 ) , // PE 4 ** 3 ** DIGITAL0 00172 _BV( 4 ) , // PC 4 ** 4 ** DIGITAL7 00173 _BV( 5 ) , // PC 5 ** 5 ** DIGITAL8 00174 _BV( 6 ) , // PC 6 ** 6 ** DIGITAL6 00175 _BV( 7 ) , // PC 7 ** 7 ** DIGITAL5 00176 _BV( 2 ) , // PA 2 ** 8 ** DIGITAL2 00177 _BV( 3 ) , // PA 3 ** 9 ** DIGITAL4 00178 _BV( 4 ) , // PA 4 ** 10 ** DIGITAL3 00179 _BV( 5 ) , // PD 5 ** 11 ** DIGITAL9 00180 _BV( 6 ) , // PD 6 ** 12 ** LED0 00181 _BV( 1 ) , // PC 1 ** 13 ** LED1 00182 _BV( 1 ) , // PF 1 ** 14 ** ANA0 00183 _BV( 2 ) , // PF 2 ** 15 ** ANA1 00184 _BV( 3 ) , // PF 3 ** 16 ** ANA2 00185 _BV( 4 ) , // PF 4 ** 17 ** ANA3 00186 _BV( 5 ) , // PF 5 ** 18 ** ANA4 00187 _BV( 6 ) , // PF 6 ** 19 ** ANA5 00188 _BV( 7 ) , // PF 7 ** 20 ** ANA6 00189 _BV( 0 ) , // PF 0 ** 21 ** BAT_MONITOR 00190 _BV( 1 ) , // PA 1 ** 22 ** XBEE_PW 00191 _BV( 7 ) , // PD 7 ** 23 ** XBEE SLEEP 00192 _BV( 5 ) , // PE 5 ** 24 ** SENS_PW_5V 00193 _BV( 6 ) , // PA 6 ** 25 ** BAT_MONITOR_PW 00194 _BV( 2 ) , // PE 2 ** 26 ** SENS_PW_3v3 00195 _BV( 5 ) , // PA 5 ** 27 ** MEM_PW 00196 _BV( 0 ) , // PC 0 ** 28 ** SD_PRESENT 00197 _BV( 0 ) , // PB 0 ** 29 ** SD_SS 00198 _BV( 1 ) , // PB 1 ** 30 ** SD_SCK 00199 _BV( 2 ) , // PB 2 ** 31 ** SD_MOSI 00200 _BV( 3 ) , // PB 3 ** 32 ** SD_MISO 00201 _BV( 4 ) , // PB 4 ** 33 ** SERID_PW 00202 _BV( 5 ) , // PB 5 ** 34 ** SERID_IN 00203 _BV( 0 ) , // PA 0 ** 35 ** GPS_PW 00204 _BV( 6 ) , // PB 6 ** 36 ** GPS_RX 00205 _BV( 7 ) , // PB 7 ** 37 ** GPS_TX 00206 _BV( 6 ) , // PE 6 ** 38 ** RDY_ACC 00207 _BV( 7 ) , // PE 7 ** 39 ** RST_RTC 00208 _BV( 0 ) , // PD 0 ** 40 ** I2C_SCL 00209 _BV( 1 ) , // PD 1 ** 41 ** I2C_SDA 00210 _BV( 3 ) , // PC 3 ** 42 ** GPRS_PW 00211 _BV( 2 ) , // PD 2 ** 43 ** GPRS_RX 00212 _BV( 3 ) , // PD 3 ** 44 ** GPRS_TX 00213 _BV( 7 ) , // PA 7 ** 45 ** BOOT PIN 00214 _BV( 2 ) , // PC 2 ** 46 ** PWON 00215 _BV( 4 ) , // PD 4 ** 47 ** FREE PIN 00216 _BV( 2 ) , // PG 2 ** 48 ** RTC_PW 00217 _BV( 1 ) , // PG 1 ** 49 ** RTC_SLEEP 00218 _BV( 0 ) , // PG 0 ** 50 ** LOW_BAT_MON 00219 00220 }; 00221 00222 const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { 00223 // PORT PIN WASP API PIN DESCRIPTION 00224 NOT_ON_TIMER , // PE 0 ** 0 ** USB_XBEE_RX 00225 NOT_ON_TIMER , // PE 1 ** 1 ** USB_XBEE_TX 00226 TIMER3A , // PE 3 ** 2 ** DIGITAL1 00227 TIMER3B , // PE 4 ** 3 ** DIGITAL0 00228 NOT_ON_TIMER , // PC 4 ** 4 ** DIGITAL7 00229 NOT_ON_TIMER , // PC 5 ** 5 ** DIGITAL8 00230 NOT_ON_TIMER , // PC 6 ** 6 ** DIGITAL6 00231 NOT_ON_TIMER , // PC 7 ** 7 ** DIGITAL5 00232 NOT_ON_TIMER , // PA 2 ** 8 ** DIGITAL2 00233 NOT_ON_TIMER , // PA 3 ** 9 ** DIGITAL4 00234 NOT_ON_TIMER , // PA 4 ** 10 ** DIGITAL3 00235 NOT_ON_TIMER , // PD 5 ** 11 ** DIGITAL9 00236 NOT_ON_TIMER , // PD 6 ** 12 ** LED0 00237 NOT_ON_TIMER , // PC 1 ** 13 ** LED1 00238 NOT_ON_TIMER , // PF 1 ** 14 ** ANA0 00239 NOT_ON_TIMER , // PF 2 ** 15 ** ANA1 00240 NOT_ON_TIMER , // PF 3 ** 16 ** ANA2 00241 NOT_ON_TIMER , // PF 4 ** 17 ** ANA3 00242 NOT_ON_TIMER , // PF 5 ** 18 ** ANA4 00243 NOT_ON_TIMER , // PF 6 ** 19 ** ANA5 00244 NOT_ON_TIMER , // PF 7 ** 20 ** ANA6 00245 NOT_ON_TIMER , // PF 0 ** 21 ** BAT_MONITOR 00246 NOT_ON_TIMER , // PA 1 ** 22 ** XBEE_PW 00247 NOT_ON_TIMER , // PD 7 ** 23 ** XBEE SLEEP 00248 NOT_ON_TIMER , // PE 5 ** 24 ** SENS_PW_5V 00249 NOT_ON_TIMER , // PA 6 ** 25 ** BAT_MONITOR_PW 00250 NOT_ON_TIMER , // PE 2 ** 26 ** SENS_PW_3v3 00251 NOT_ON_TIMER , // PA 5 ** 27 ** MEM_PW 00252 NOT_ON_TIMER , // PC 0 ** 28 ** SD_PRESENT 00253 NOT_ON_TIMER , // PB 0 ** 29 ** SD_SS 00254 NOT_ON_TIMER , // PB 1 ** 30 ** SD_SCK 00255 NOT_ON_TIMER , // PB 2 ** 31 ** SD_MOSI 00256 NOT_ON_TIMER , // PB 3 ** 32 ** SD_MISO 00257 NOT_ON_TIMER , // PB 4 ** 33 ** SERID_PW 00258 NOT_ON_TIMER , // PB 5 ** 34 ** SERID_IN 00259 NOT_ON_TIMER , // PA 0 ** 35 ** GPS_PW 00260 NOT_ON_TIMER , // PB 6 ** 36 ** GPS_RX 00261 NOT_ON_TIMER , // PB 7 ** 37 ** GPS_TX 00262 NOT_ON_TIMER , // PE 6 ** 38 ** RDY_ACC 00263 NOT_ON_TIMER , // PE 7 ** 39 ** RST_RTC 00264 NOT_ON_TIMER , // PD 0 ** 40 ** I2C_SCL 00265 NOT_ON_TIMER , // PD 1 ** 41 ** I2C_SDA 00266 NOT_ON_TIMER , // PC 3 ** 42 ** GPRS_PW 00267 NOT_ON_TIMER , // PD 2 ** 43 ** GPRS_RX 00268 NOT_ON_TIMER , // PD 3 ** 44 ** GPRS_TX 00269 NOT_ON_TIMER , // PA 7 ** 45 ** BOOT PIN 00270 NOT_ON_TIMER , // PC 2 ** 46 ** PWON 00271 NOT_ON_TIMER , // PD 4 ** 47 ** FREE PIN 00272 NOT_ON_TIMER , // PG 2 ** 48 ** RTC_PW 00273 NOT_ON_TIMER , // PG 1 ** 49 ** RTC_SLEEP 00274 NOT_ON_TIMER , // PG 0 ** 50 ** LOW_BAT_MON 00275 00276 }; 00277
1.5.6