|
| 1 | +/* |
| 2 | + Copyright (c) 2014-2015 Arduino LLC. 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 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 20 | + * + Pin number + M0 Radio pin | PIN | Label/Name | Comments (* is for default peripheral in use) |
| 21 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 22 | + * | | Digital Low | | | |
| 23 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 24 | + * | 2 | 1 | PA14 | MISO | EIC/EXTINT[14] *SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] TCC0/WO[4] |
| 25 | + * | 3 | A17 | PA09 | | EIC/EXTINT[9] *ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3] |
| 26 | + * | 4 | A16 | PA08 | | EIC/NMI *ADC/AIN[16] PTC/X[0] SERCOM0/PAD[0] SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2] |
| 27 | + * | 5 | ~5 | PA15 | | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] *TC3/WO[1] TCC0/WO[5] |
| 28 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 29 | + * | | Digital High | | | |
| 30 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 31 | + * | 8 | ~8 | PA06 | | EIC/EXTINT[6] ADC/AIN[6] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[2] *TCC1/WO[0] |
| 32 | + * | 9 | ~9 | PA07 | | EIC/EXTINT[7] ADC/AIN[7] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[3] *TCC1/WO[1] |
| 33 | + * | 10 | ~10 | PA18 | | EIC/EXTINT[2] PTC/X[6] +SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2] |
| 34 | + * | 11 | ~11 | PA16 | | EIC/EXTINT[0] PTC/X[4] +SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6] |
| 35 | + * | 12 | ~12 | PA19 | | EIC/EXTINT[3] PTC/X[7] +SERCOM1/PAD[3] SERCOM3/PAD[3] TC3/WO[1] *TCC0/WO[3] |
| 36 | + * | 13 | ~13 | PA17 | LED | EIC/EXTINT[1] PTC/X[5] +SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7] |
| 37 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 38 | + * | | Analog Connector | | | |
| 39 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 40 | + * | ??? | A11 | PB03 | | EIC/EXTINT[3] *ADC/AIN[11] PTC/Y[8] SERCOM5/PAD[1] |
| 41 | + * | 17 | A3 | PA04 | A3 | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[0] TCC0/WO[0] |
| 42 | + * | 18 | A4 | PA05 | A4 | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] PTC/Y[5] SERCOM0/PAD[1] TCC0/WO[1] |
| 43 | + * | 19 | A5 | PB02 | A5 | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0] |
| 44 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 45 | + * | | Wire | | | |
| 46 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 47 | + * | 20 | SDA | PA22 | SDA | EIC/EXTINT[6] PTC/X[10] *SERCOM3/PAD[0] SERCOM5/PAD[0] TC4/WO[0] TCC0/WO[4] |
| 48 | + * | 21 | SCL | PA23 | SCL | EIC/EXTINT[7] PTC/X[11] *SERCOM3/PAD[1] SERCOM5/PAD[1] TC4/WO[1] TCC0/WO[5] |
| 49 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 50 | + * | |SPI (Legacy ICSP) | | | |
| 51 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 52 | + * | 22 | 4 | PA12 | MOSI | EIC/EXTINT[12] *SERCOM2/PAD[0] SERCOM4/PAD[0] TCC2/WO[0] TCC0/WO[6] |
| 53 | + * | | 2 | | 5V0 | |
| 54 | + * | 38 | 3 | PA13 | SCK | EIC/EXTINT[13] *SERCOM2/PAD[1] SERCOM4/PAD[1] TCC2/WO[1] TCC0/WO[7] |
| 55 | + * | | 5 | | RESET | |
| 56 | + * | | 6 | | GND | |
| 57 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 58 | + * | | LEDs | | | |
| 59 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 60 | + * | 26 | | PA27 | TX | |
| 61 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 62 | + * | | USB | | | |
| 63 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 64 | + * | 27 | | PA28 | USB_HOST_ENABLE | EIC/EXTINT[8] |
| 65 | + * | 28 | | PA24 | USB_NEGATIVE | *USB/DM |
| 66 | + * | 29 | | PA25 | USB_POSITIVE | *USB/DP |
| 67 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 68 | + * | | UART | | | |
| 69 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 70 | + * | 30 | | PB22 | UART TX | *SERCOM5/PAD[2] |
| 71 | + * | 31 | | PB23 | UART RX | *SERCOM5/PAD[3] |
| 72 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 73 | + * | 32 | | PA22 | EDBG_SDA | Pin 20 (SDA) |
| 74 | + * | 33 | | PA23 | EDBG_SCL | Pin 21 (SCL) |
| 75 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 76 | + * | | | | | |
| 77 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 78 | + * | |32.768KHz Crystal | | | |
| 79 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 80 | + * | | | PA00 | XIN32 | EIC/EXTINT[0] SERCOM1/PAD[0] TCC2/WO[0] |
| 81 | + * | | | PA01 | XOUT32 | EIC/EXTINT[1] SERCOM1/PAD[1] TCC2/WO[1] |
| 82 | + * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- |
| 83 | + */ |
| 84 | + |
| 85 | + |
| 86 | +#include "variant.h" |
| 87 | + |
| 88 | +/* |
| 89 | + * Pins descriptions |
| 90 | + */ |
| 91 | +const PinDescription g_APinDescription[]= |
| 92 | +{ |
| 93 | + // 0..13 - Digital pins |
| 94 | + // ---------------------- |
| 95 | + |
| 96 | + // 2..12 |
| 97 | + // Digital Low |
| 98 | + { PORTA, 9, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 }, // MISO: SERCOM2/PAD[2] |
| 99 | + |
| 100 | + |
| 101 | + { 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] |
| 102 | + { PORTA, 15, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_15 }, // TC3/WO[1] |
| 103 | + { PORTA, 20, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH6, TCC0_CH6, EXTERNAL_INT_4 }, // TCC0/WO[6] |
| 104 | + { PORTA, 21, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, |
| 105 | + |
| 106 | + // Digital High |
| 107 | + { PORTA, 6, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER|PIN_ATTR_ANALOG), ADC_Channel6, PWM1_CH0, TCC1_CH0, EXTERNAL_INT_6 }, // TCC1/WO[0] |
| 108 | + { PORTA, 7, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER|PIN_ATTR_ANALOG), ADC_Channel7, PWM1_CH1, TCC1_CH1, EXTERNAL_INT_7 }, // TCC1/WO[1] |
| 109 | + { PORTA, 18, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH0, TC3_CH0, EXTERNAL_INT_2 }, // TC3/WO[0] |
| 110 | + { PORTA, 16, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_0 }, // TCC2/WO[0] |
| 111 | + { PORTA, 19, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER_ALT), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_3 }, // TCC0/WO[3] |
| 112 | + |
| 113 | + // 13 (LED) |
| 114 | + { PORTA, 17, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM2_CH1, NOT_ON_TIMER, EXTERNAL_INT_1 }, // TCC2/WO[1] |
| 115 | + |
| 116 | + // 14..19 - Analog pins |
| 117 | + // -------------------- |
| 118 | + { PORTA, 2, PIO_ANALOG, PIN_ATTR_ANALOG, ADC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // ADC/AIN[0] |
| 119 | + { PORTB, 8, PIO_ANALOG, (PIN_ATTR_PWM|PIN_ATTR_TIMER), ADC_Channel2, PWM4_CH0, TC4_CH0, EXTERNAL_INT_8 }, // ADC/AIN[2] |
| 120 | + { PORTB, 9, PIO_ANALOG, (PIN_ATTR_PWM|PIN_ATTR_TIMER), ADC_Channel3, PWM4_CH1, TC4_CH1, EXTERNAL_INT_9 }, // ADC/AIN[3] |
| 121 | + { PORTA, 4, PIO_ANALOG, 0, ADC_Channel4, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_4 }, // ADC/AIN[4] |
| 122 | + { PORTA, 5, PIO_ANALOG, 0, ADC_Channel5, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_5 }, // ADC/AIN[5] |
| 123 | + { PORTB, 2, PIO_ANALOG, 0, ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // ADC/AIN[10] |
| 124 | + |
| 125 | + // 20..21 I2C pins (SDA/SCL and also EDBG:SDA/SCL) |
| 126 | + // ---------------------- |
| 127 | + { PORTA, 22, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_6 }, // SDA: SERCOM3/PAD[0] |
| 128 | + { PORTA, 23, PIO_SERCOM, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_7 }, // SCL: SERCOM3/PAD[1] |
| 129 | + |
| 130 | + // 22..24 - SPI pins (ICSP:MISO,SCK,MOSI) |
| 131 | + // ---------------------- |
| 132 | + { PORTA, 12, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_12 }, |
| 133 | + { PORTB, 10, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_10 }, // MOSI: SERCOM4/PAD[2] |
| 134 | + { PORTB, 11, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_11 }, // SCK: SERCOM4/PAD[3] |
| 135 | + |
| 136 | + // 25..26 - RX/TX LEDS (PB03/PA27) |
| 137 | + // -------------------- |
| 138 | + { PORTB, 3, PIO_OUTPUT, PIN_AT
10662
TR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // used as output only |
| 139 | + { PORTA, 27, PIO_OUTPUT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // used as output only |
| 140 | + |
| 141 | + // 27..29 - USB |
| 142 | + // -------------------- |
| 143 | + { PORTA, 28, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB Host enable |
| 144 | + { PORTA, 24, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB/DM |
| 145 | + { PORTA, 25, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // USB/DP |
| 146 | + |
| 147 | + // 30..41 - EDBG |
| 148 | + // ---------------------- |
| 149 | + // 30/31 - EDBG/UART |
| 150 | + { PORTB, 22, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // TX: SERCOM5/PAD[2] |
| 151 | + { PORTB, 23, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // RX: SERCOM5/PAD[3] |
| 152 | + |
| 153 | + // 32/33 I2C (SDA/SCL and also EDBG:SDA/SCL) |
| 154 | + { PORTA, 22, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SDA: SERCOM3/PAD[0] |
| 155 | + { PORTA, 23, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SCL: SERCOM3/PAD[1] |
| 156 | + |
| 157 | + // 34..37 - EDBG/SPI |
| 158 | + { PORTA, 19, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MISO: SERCOM1/PAD[3] |
| 159 | + { PORTA, 16, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // MOSI: SERCOM1/PAD[0] |
| 160 | + { PORTA, 18, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SS: SERCOM1/PAD[2] |
| 161 | + { PORTA, 17, PIO_SERCOM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // SCK: SERCOM1/PAD[1] |
| 162 | + |
| 163 | + // 38..41 - EDBG/Digital |
| 164 | + { PORTA, 13, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM0_CH5, NOT_ON_TIMER, EXTERNAL_INT_13 }, // EIC/EXTINT[13] *TCC2/WO[1] TCC0/WO[7] |
| 165 | + { PORTA, 21, PIO_PWM_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM0_CH7, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Pin 7 |
| 166 | + { PORTA, 6, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH0, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Pin 8 |
| 167 | + { PORTA, 7, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH1, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // Pin 9 |
| 168 | + |
| 169 | + // 42 (AREF) |
| 170 | + { PORTA, 3, PIO_ANALOG, PIN_ATTR_ANALOG, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // DAC/VREFP |
| 171 | + |
| 172 | + // ---------------------- |
| 173 | + // 43 - Alternate use of A0 (DAC output) |
| 174 | + { PORTA, 2, PIO_ANALOG, PIN_ATTR_ANALOG, DAC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // DAC/VOUT |
| 175 | +} ; |
| 176 | + |
| 177 | +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; |
| 178 | + |
| 179 | +// Multi-serial objects instantiation |
| 180 | +SERCOM sercom0( SERCOM0 ) ; |
| 181 | +SERCOM sercom1( SERCOM1 ) ; |
| 182 | +SERCOM sercom2( SERCOM2 ) ; |
| 183 | +SERCOM sercom3( SERCOM3 ) ; |
| 184 | +SERCOM sercom4( SERCOM4 ) ; |
| 185 | +SERCOM sercom5( SERCOM5 ) ; |
| 186 | + |
| 187 | +Uart Serial1( &sercom0, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; |
| 188 | +void SERCOM0_Handler() |
| 189 | +{ |
| 190 | + Serial1.IrqHandler(); |
| 191 | +} |
| 192 | + |
| 193 | + |
| 194 | +// Serial5 not available on Feather so ditch it |
| 195 | + |
| 196 | +//Uart Serial5( &sercom5, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ; |
| 197 | +/* |
| 198 | +void SERCOM5_Handler() |
| 199 | +{ |
| 200 | + Serial5.IrqHandler(); |
| 201 | +} |
| 202 | +*/ |
0 commit comments