Lab_interaccio/2012/ASK-Shield/References/waspmote-api-v.021/pins_waspmote.c
Miguel Angel de Heras 451795bb92 Second commit
2025-03-05 15:57:19 +01:00

278 lines
9.7 KiB
C

/*
* Revised for Waspmote by D. Cuartielles & A. Bielsa, 2009
*
* Copyright (c) 2005 David A. Mellis
*
* This program 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 program 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 program. If not, see <http://www.gnu.org/licenses/>.
*
* Version: 0.1
* Design: David Gascón
* Implementation: David A.Mellis, David Cuartielles, Alberto Bielsa
*/
#include <avr/io.h>
#include "wiring_private.h"
#include "pins_waspmote.h"
// On the Wasp board, digital pins are also used
// for the analog output (software PWM). Analog input
// pins are a separate set.
//
// ATMEL ATMEGA1281 / WASP
//
//
// A G A P P P P P P P P G V P P P
// V N R F F F F F F F F N C A A A
// C D F 0 1 2 3 4 5 6 7 D C 0 1 2
//
// _64_63_62_61_60_59_58_57_56_55_54_53_52_51_50_49__
// /O |
// ( ) PG5 1| |48 PA3
// (D 0) PE1 2| |47 PA4
// ( ) PE1 3| |46 PA5
// ( ) PE2 4| |45 PA6
// ( ) PE3 5| |44 PA7
// ( ) PE4 6| |43 PG2
// ( ) PE5 7| |42 PC7
// ( ) PE6 8| |41 PC6
// SOFT LED (LED4) - PE7 9| |40 PC5
// ( ) PB0 10| |39 PC4
// ( ) PB1 11| |38 PC3
// ( ) PB2 12| |37 PC2
// ( ) PB3 13| |36 PC1 - SOFT LED (LED3)
// ( ) PB4 14| |35 PC0
// ( ) PB5 15| |34 PG1
// ( ) PB6 16| |33 PG0
// |___________________________________________________|
// 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
//
// P P P R V G X X P P P P P P P P
// B G G S C N T T D D D D D D D D
// 7 3 4 T C D 2 1 0 1 2 3 4 5 6 7
//
#define PA 1
#define PB 2
#define PC 3
#define PD 4
#define PE 5
#define PF 6
#define PG 7
// these arrays map port names (e.g. port B) to the
// appropriate addresses for various functions (e.g. reading
// and writing)
const uint8_t PROGMEM port_to_mode_PGM[] = {
NOT_A_PORT,
&DDRA,
&DDRB,
&DDRC,
&DDRD,
&DDRE,
&DDRF,
&DDRG,
};
const uint8_t PROGMEM port_to_output_PGM[] = {
NOT_A_PORT,
&PORTA,
&PORTB,
&PORTC,
&PORTD,
&PORTE,
&PORTF,
&PORTG,
};
const uint8_t PROGMEM port_to_input_PGM[] = {
NOT_A_PORT,
&PINA,
&PINB,
&PINC,
&PIND,
&PINE,
&PINF,
&PING,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
// PORT PIN WASP API PIN DESCRIPTION
PE , // PE 0 ** 0 ** USB_XBEE_RX
PE , // PE 1 ** 1 ** USB_XBEE_TX
PE , // PE 3 ** 2 ** DIGITAL1
PE , // PE 4 ** 3 ** DIGITAL0
PC , // PC 4 ** 4 ** DIGITAL7
PC , // PC 5 ** 5 ** DIGITAL8
PC , // PC 6 ** 6 ** DIGITAL6
PC , // PC 7 ** 7 ** DIGITAL5
PA , // PA 2 ** 8 ** DIGITAL2
PA , // PA 3 ** 9 ** DIGITAL4
PA , // PA 4 ** 10 ** DIGITAL3
PD , // PD 5 ** 11 ** DIGITAL9
PD , // PD 6 ** 12 ** LED0
PC , // PC 1 ** 13 ** LED1
PF , // PF 1 ** 14 ** ANA0
PF , // PF 2 ** 15 ** ANA1
PF , // PF 3 ** 16 ** ANA2
PF , // PF 4 ** 17 ** ANA3
PF , // PF 5 ** 18 ** ANA4
PF , // PF 6 ** 19 ** ANA5
PF , // PF 7 ** 20 ** ANA6
PF , // PF 0 ** 21 ** BAT_MONITOR
PA , // PA 1 ** 22 ** XBEE_PW
PD , // PD 7 ** 23 ** XBEE SLEEP
PE , // PE 5 ** 24 ** SENS_PW_5V
PA , // PA 6 ** 25 ** BAT_MONITOR_PW
PE , // PE 2 ** 26 ** SENS_PW_3v3
PA , // PA 5 ** 27 ** MEM_PW
PC , // PC 0 ** 28 ** SD_PRESENT
PB , // PB 0 ** 29 ** SD_SS
PB , // PB 1 ** 30 ** SD_SCK
PB , // PB 2 ** 31 ** SD_MOSI
PB , // PB 3 ** 32 ** SD_MISO
PB , // PB 4 ** 33 ** SERID_PW
PB , // PB 5 ** 34 ** SERID_IN
PA , // PA 0 ** 35 ** GPS_PW
PB , // PB 6 ** 36 ** GPS_RX
PB , // PB 7 ** 37 ** GPS_TX
PE , // PE 6 ** 38 ** RDY_ACC
PE , // PE 7 ** 39 ** RST_RTC
PD , // PD 0 ** 40 ** I2C_SCL
PD , // PD 1 ** 41 ** I2C_SDA
PC , // PC 3 ** 42 ** GPRS_PW
PD , // PD 2 ** 43 ** GPRS_RX
PD , // PD 3 ** 44 ** GPRS_TX
PA , // PA 7 ** 45 ** BOOT PIN
PC , // PC 2 ** 46 ** PWON
PD , // PD 4 ** 47 ** FREE PIN
PG , // PG 2 ** 48 ** RTC_PW
PG , // PG 1 ** 49 ** RTC_SLEEP
PG , // PG 0 ** 50 ** LOW_BAT_MON
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
// PIN PORT PIN WASP API PIN DESCRIPTION
_BV( 0 ) , // PE 0 ** 0 ** USB_XBEE_RX
_BV( 1 ) , // PE 1 ** 1 ** USB_XBEE_TX
_BV( 3 ) , // PE 3 ** 2 ** DIGITAL1
_BV( 4 ) , // PE 4 ** 3 ** DIGITAL0
_BV( 4 ) , // PC 4 ** 4 ** DIGITAL7
_BV( 5 ) , // PC 5 ** 5 ** DIGITAL8
_BV( 6 ) , // PC 6 ** 6 ** DIGITAL6
_BV( 7 ) , // PC 7 ** 7 ** DIGITAL5
_BV( 2 ) , // PA 2 ** 8 ** DIGITAL2
_BV( 3 ) , // PA 3 ** 9 ** DIGITAL4
_BV( 4 ) , // PA 4 ** 10 ** DIGITAL3
_BV( 5 ) , // PD 5 ** 11 ** DIGITAL9
_BV( 6 ) , // PD 6 ** 12 ** LED0
_BV( 1 ) , // PC 1 ** 13 ** LED1
_BV( 1 ) , // PF 1 ** 14 ** ANA0
_BV( 2 ) , // PF 2 ** 15 ** ANA1
_BV( 3 ) , // PF 3 ** 16 ** ANA2
_BV( 4 ) , // PF 4 ** 17 ** ANA3
_BV( 5 ) , // PF 5 ** 18 ** ANA4
_BV( 6 ) , // PF 6 ** 19 ** ANA5
_BV( 7 ) , // PF 7 ** 20 ** ANA6
_BV( 0 ) , // PF 0 ** 21 ** BAT_MONITOR
_BV( 1 ) , // PA 1 ** 22 ** XBEE_PW
_BV( 7 ) , // PD 7 ** 23 ** XBEE SLEEP
_BV( 5 ) , // PE 5 ** 24 ** SENS_PW_5V
_BV( 6 ) , // PA 6 ** 25 ** BAT_MONITOR_PW
_BV( 2 ) , // PE 2 ** 26 ** SENS_PW_3v3
_BV( 5 ) , // PA 5 ** 27 ** MEM_PW
_BV( 0 ) , // PC 0 ** 28 ** SD_PRESENT
_BV( 0 ) , // PB 0 ** 29 ** SD_SS
_BV( 1 ) , // PB 1 ** 30 ** SD_SCK
_BV( 2 ) , // PB 2 ** 31 ** SD_MOSI
_BV( 3 ) , // PB 3 ** 32 ** SD_MISO
_BV( 4 ) , // PB 4 ** 33 ** SERID_PW
_BV( 5 ) , // PB 5 ** 34 ** SERID_IN
_BV( 0 ) , // PA 0 ** 35 ** GPS_PW
_BV( 6 ) , // PB 6 ** 36 ** GPS_RX
_BV( 7 ) , // PB 7 ** 37 ** GPS_TX
_BV( 6 ) , // PE 6 ** 38 ** RDY_ACC
_BV( 7 ) , // PE 7 ** 39 ** RST_RTC
_BV( 0 ) , // PD 0 ** 40 ** I2C_SCL
_BV( 1 ) , // PD 1 ** 41 ** I2C_SDA
_BV( 3 ) , // PC 3 ** 42 ** GPRS_PW
_BV( 2 ) , // PD 2 ** 43 ** GPRS_RX
_BV( 3 ) , // PD 3 ** 44 ** GPRS_TX
_BV( 7 ) , // PA 7 ** 45 ** BOOT PIN
_BV( 2 ) , // PC 2 ** 46 ** PWON
_BV( 4 ) , // PD 4 ** 47 ** FREE PIN
_BV( 2 ) , // PG 2 ** 48 ** RTC_PW
_BV( 1 ) , // PG 1 ** 49 ** RTC_SLEEP
_BV( 0 ) , // PG 0 ** 50 ** LOW_BAT_MON
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
// PORT PIN WASP API PIN DESCRIPTION
NOT_ON_TIMER , // PE 0 ** 0 ** USB_XBEE_RX
NOT_ON_TIMER , // PE 1 ** 1 ** USB_XBEE_TX
TIMER3A , // PE 3 ** 2 ** DIGITAL1
TIMER3B , // PE 4 ** 3 ** DIGITAL0
NOT_ON_TIMER , // PC 4 ** 4 ** DIGITAL7
NOT_ON_TIMER , // PC 5 ** 5 ** DIGITAL8
NOT_ON_TIMER , // PC 6 ** 6 ** DIGITAL6
NOT_ON_TIMER , // PC 7 ** 7 ** DIGITAL5
NOT_ON_TIMER , // PA 2 ** 8 ** DIGITAL2
NOT_ON_TIMER , // PA 3 ** 9 ** DIGITAL4
NOT_ON_TIMER , // PA 4 ** 10 ** DIGITAL3
NOT_ON_TIMER , // PD 5 ** 11 ** DIGITAL9
NOT_ON_TIMER , // PD 6 ** 12 ** LED0
NOT_ON_TIMER , // PC 1 ** 13 ** LED1
NOT_ON_TIMER , // PF 1 ** 14 ** ANA0
NOT_ON_TIMER , // PF 2 ** 15 ** ANA1
NOT_ON_TIMER , // PF 3 ** 16 ** ANA2
NOT_ON_TIMER , // PF 4 ** 17 ** ANA3
NOT_ON_TIMER , // PF 5 ** 18 ** ANA4
NOT_ON_TIMER , // PF 6 ** 19 ** ANA5
NOT_ON_TIMER , // PF 7 ** 20 ** ANA6
NOT_ON_TIMER , // PF 0 ** 21 ** BAT_MONITOR
NOT_ON_TIMER , // PA 1 ** 22 ** XBEE_PW
NOT_ON_TIMER , // PD 7 ** 23 ** XBEE SLEEP
NOT_ON_TIMER , // PE 5 ** 24 ** SENS_PW_5V
NOT_ON_TIMER , // PA 6 ** 25 ** BAT_MONITOR_PW
NOT_ON_TIMER , // PE 2 ** 26 ** SENS_PW_3v3
NOT_ON_TIMER , // PA 5 ** 27 ** MEM_PW
NOT_ON_TIMER , // PC 0 ** 28 ** SD_PRESENT
NOT_ON_TIMER , // PB 0 ** 29 ** SD_SS
NOT_ON_TIMER , // PB 1 ** 30 ** SD_SCK
NOT_ON_TIMER , // PB 2 ** 31 ** SD_MOSI
NOT_ON_TIMER , // PB 3 ** 32 ** SD_MISO
NOT_ON_TIMER , // PB 4 ** 33 ** SERID_PW
NOT_ON_TIMER , // PB 5 ** 34 ** SERID_IN
NOT_ON_TIMER , // PA 0 ** 35 ** GPS_PW
NOT_ON_TIMER , // PB 6 ** 36 ** GPS_RX
NOT_ON_TIMER , // PB 7 ** 37 ** GPS_TX
NOT_ON_TIMER , // PE 6 ** 38 ** RDY_ACC
NOT_ON_TIMER , // PE 7 ** 39 ** RST_RTC
NOT_ON_TIMER , // PD 0 ** 40 ** I2C_SCL
NOT_ON_TIMER , // PD 1 ** 41 ** I2C_SDA
NOT_ON_TIMER , // PC 3 ** 42 ** GPRS_PW
NOT_ON_TIMER , // PD 2 ** 43 ** GPRS_RX
NOT_ON_TIMER , // PD 3 ** 44 ** GPRS_TX
NOT_ON_TIMER , // PA 7 ** 45 ** BOOT PIN
NOT_ON_TIMER , // PC 2 ** 46 ** PWON
NOT_ON_TIMER , // PD 4 ** 47 ** FREE PIN
NOT_ON_TIMER , // PG 2 ** 48 ** RTC_PW
NOT_ON_TIMER , // PG 1 ** 49 ** RTC_SLEEP
NOT_ON_TIMER , // PG 0 ** 50 ** LOW_BAT_MON
};