|
| 1 | +/* |
| 2 | + Copyright (c) 2016 SODAQ. All right reserved. |
| 3 | + |
| 4 | + This library is free software; you can redistribute it and/or |
| 5 | + modify it under the terms of the GNU Lesser General Public |
| 6 | + License as published by the Free Software Foundation; either |
| 7 | + version 2.1 of the License, or (at your option) any later version. |
| 8 | + |
| 9 | + This library is distributed in the hope that it will be useful, |
| 10 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| 12 | + See the GNU Lesser General Public License for more details. |
| 13 | + |
| 14 | + You should have received a copy of the GNU Lesser General Public |
| 15 | + License along with this library; if not, write to the Free Software |
| 16 | + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 17 | +*/ |
| 18 | + |
| 19 | +#include "variant.h" |
| 20 | + |
| 21 | +/* |
| 22 | + * Pins descriptions |
| 23 | + */ |
| 24 | +const PinDescription g_APinDescription[]= |
| 25 | +{ |
| 26 | + // 0..3 Main IO Pins (D0-D3) Digital Properties |
| 27 | + { PORTA, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, |
| 28 | + { PORTA, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, |
| 29 | + { PORTB, 8, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM4_CH0, TC4_CH0, EXTERNAL_INT_8 }, // TC4/WO[0] |
| 30 | + { PORTB, 9, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM4_CH1, TC4_CH1, EXTERNAL_INT_9 }, // TC4/WO[1] |
| 31 | + |
| 32 | + // 4..5 Other Digital Pins |
| 33 | + { PORTA, 21, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, // ACCEL_INT2 |
| 34 | + { PORTA, 20, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 }, // ACCEL_INT1 |
| 35 | + |
| 36 | + // 6..13 Main IO Pins (D6-D13) Digital Properties |
| 37 | + { PORTA, 6, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH0, TCC1_CH0, EXTERNAL_INT_6 }, // TCC1/WO[0] |
| 38 | + { PORTA, 7, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH1, TCC1_CH1, EXTERNAL_INT_7 }, // TCC1/WO[1] |
| 39 | + { PORTA, 8, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH0, TCC0_CH0, EXTERNAL_INT_NMI }, // TCC0/WO[0] |
| 40 | + { PORTA, 9, PIO_TIMER, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 }, // TCC0/WO[1] |
| 41 | + { PORTA, 10, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH2, TCC0_CH2, EXTERNAL_INT_10 }, // TCC0/WO[2] |
| 42 | + { PORTA, 11, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_11 }, // TCC0/WO[3] |
| 43 | + { PORTB, 2, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, |
| 44 | + { PORTB, 3, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, |
| 45 | + |
| 46 | + // 14..21 Other Digital Pins |
| 47 | + { PORTA, 15, PIO_OUTPUT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_NONE }, // LED_BLUE |
| 48 | + { PORTB, 10, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SARA_R4XX_TOGGLE |
| 49 | + { PORTB, 11, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // NC |
| 50 | + { PORTA, 14, PIO_INPUT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH0, TC3_CH0, EXTERNAL_INT_NONE }, // LED_RED |
| 51 | + { PORTA, 18, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // GPS_ENABLE |
| 52 | + { PORTA, 16, PIO_INPUT, (PIN_ATTR_DIGITAL | PIN_ATTR_PWM | PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_NONE }, // LED_GREEN |
| 53 | + { PORTB, 22, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, |
| 54 | + { PORTA, 17, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_1 }, // GPS_TIMEPULSE |
| 55 | + |
| 56 | + // 22..33 Main IO Pins Analog Properties |
| 57 | + { PORTA, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, |
| 58 | + { PORTA, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel1, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, |
| 59 | + { PORTB, 8, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel2, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 }, |
| 60 | + { PORTB, 9, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel3, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, |
| 61 | + { PORTA, 6, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel6, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }, |
| 62 | + { PORTA, 7, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel7, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, |
| 63 | + { PORTA, 8, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel16, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI }, |
| 64 | + { PORTA, 9, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel17, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, |
| 65 | + { PORTA, 10, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel18, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, |
| 66 | + { PORTA, 11, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel19, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, |
| 67 | + { PORTB, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, |
| 68 | + { PORTB, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel11, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, |
| 69 | + |
| 70 | + // 34..36 Other Analog Pins |
| 71 | + { PORTA, 2, PIO_ANALOG, (PIN_ATTR_ANALOG), DAC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // DAC/VOUT |
| 72 | + { PORTA, 3, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel1, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // AREF |
| 73 | + { PORTA, 5, PIO_ANALOG, (PIN_ATTR_ANALOG), ADC_Channel5, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // BAT_VOLT |
| 74 | + |
| 75 | + // 37..38 USB Pins |
| 76 | + { PORTA, 24, PIO_COM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB_N |
| 77 | + { PORTA, 25, PIO_COM, (PIN_ATTR_NONE), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB_P |
| 78 | + |
| 79 | + // 39..40 Serial |
| 80 | + { PORTB, 3, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, // SERIAL_RX |
| 81 | + { PORTB, 2, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // SERIAL_TX |
| 82 | + |
| 83 | + // 41..42 Serial1 |
| 84 | + { PORTA, 13, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_13 }, // SERIAL1_RX |
| 85 | + { PORTA, 12, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_12 }, // SERIAL1_TX |
| 86 | + |
| 87 | + // 43..46 SPI |
| 88 | + { PORTA, 8, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NMI }, // SPI_MISO |
| 89 | + { PORTA, 9, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_9 }, // SPI_SS |
| 90 | + { PORTA, 10, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, // SPI_MOSI |
| 91 | +#ifdef ENABLE_BASE_SPI |
| 92 | + { PORTA, 7, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // SPI_SCK |
| 93 | +#else |
| 94 | + { PORTA, 11, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // SPI_SCK |
| 95 | +#endif |
| 96 | + |
| 97 | + // 47..48 I2C |
| 98 | + { PORTA, 22, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }, // I2C_SDA |
| 99 | + { PORTA, 23, PIO_SERCOM, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // I2C_SCL |
| 100 | + |
| 101 | + // 49 |
| 102 | + { PORTA, 4, PIO_OUTPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SARA_ENABLE |
| 103 | + |
| 104 | + // 50..52 |
| 105 | + { PORTA, 19, PIO_INPUT, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, // MAG_INT |
| 106 | + { PORTA, 27, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SARA_TX_ENABLE |
| 107 | + { PORTA, 28, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // BUZZER |
| 108 | +} ; |
| 109 | + |
| 110 | +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; |
| 111 | + |
| 112 | +// Multi-serial objects instantiation |
| 113 | +SERCOM sercom0( SERCOM0 ) ; // SPI |
| 114 | +SERCOM sercom1( SERCOM1 ) ; |
| 115 | +SERCOM sercom2( SERCOM2 ) ; // Serial1 |
| 116 | +SERCOM sercom3( SERCOM3 ) ; // I2C |
| 117 | +SERCOM sercom4( SERCOM4 ) ; |
| 118 | +SERCOM sercom5( SERCOM5 ) ; // Serial |
| 119 | + |
| 120 | +Uart Serial(&sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ; |
| 121 | +Uart Serial1(&sercom2, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX); |
| 122 | + |
| 123 | +void SERCOM2_Handler() |
| 124 | +{ |
| 125 | + Serial1.IrqHandler(); |
| 126 | +} |
| 127 | + |
| 128 | +void SERCOM5_Handler() |
| 129 | +{ |
| 130 | + Serial.IrqHandler(); |
| 131 | +} |
| 132 | + |
0 commit comments