mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Wed Jul 01 09:45:11 2015 +0100
Revision:
579:53297373a894
Child:
592:a274ee790e56
Synchronized with git revision d5b4d2ab9c47edb4dc5776e7177b0c2263459081

Full URL: https://github.com/mbedmicro/mbed/commit/d5b4d2ab9c47edb4dc5776e7177b0c2263459081/

Initial version of drivers for SAMR21

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 579:53297373a894 1 /* mbed Microcontroller Library
mbed_official 579:53297373a894 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 579:53297373a894 3 *
mbed_official 579:53297373a894 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 579:53297373a894 5 * you may not use this file except in compliance with the License.
mbed_official 579:53297373a894 6 * You may obtain a copy of the License at
mbed_official 579:53297373a894 7 *
mbed_official 579:53297373a894 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 579:53297373a894 9 *
mbed_official 579:53297373a894 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 579:53297373a894 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 579:53297373a894 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 579:53297373a894 13 * See the License for the specific language governing permissions and
mbed_official 579:53297373a894 14 * limitations under the License.
mbed_official 579:53297373a894 15 */
mbed_official 579:53297373a894 16
mbed_official 579:53297373a894 17 #include "PeripheralPins.h"
mbed_official 579:53297373a894 18
mbed_official 579:53297373a894 19 #define SERCOM_NULL 0xFF
mbed_official 579:53297373a894 20 #define MUX_NULL 0xFF
mbed_official 579:53297373a894 21
mbed_official 579:53297373a894 22 #define SERCOM_USART_CTRLA_RXPO_Pos 20 /**< \brief (SERCOM_USART_CTRLA) Receive Data Pinout */
mbed_official 579:53297373a894 23 #define SERCOM_USART_CTRLA_RXPO_Msk (0x3ul << SERCOM_USART_CTRLA_RXPO_Pos)
mbed_official 579:53297373a894 24 #define SERCOM_USART_CTRLA_RXPO(value) ((SERCOM_USART_CTRLA_RXPO_Msk & ((value) << SERCOM_USART_CTRLA_RXPO_Pos)))
mbed_official 579:53297373a894 25
mbed_official 579:53297373a894 26 #define SERCOM_USART_CTRLA_TXPO_Pos 16 /**< \brief (SERCOM_USART_CTRLA) Transmit Data Pinout */
mbed_official 579:53297373a894 27 #define SERCOM_USART_CTRLA_TXPO_Msk (0x3ul << SERCOM_USART_CTRLA_TXPO_Pos)
mbed_official 579:53297373a894 28 #define SERCOM_USART_CTRLA_TXPO(value) ((SERCOM_USART_CTRLA_TXPO_Msk & ((value) << SERCOM_USART_CTRLA_TXPO_Pos)))
mbed_official 579:53297373a894 29
mbed_official 579:53297373a894 30
mbed_official 579:53297373a894 31 /************RTC***************/
mbed_official 579:53297373a894 32 const PinMap PinMap_RTC[] = {
mbed_official 579:53297373a894 33 };
mbed_official 579:53297373a894 34
mbed_official 579:53297373a894 35 /************ADC***************/
mbed_official 579:53297373a894 36 const PinMap PinMap_ADC[] = {
mbed_official 579:53297373a894 37 };
mbed_official 579:53297373a894 38
mbed_official 579:53297373a894 39 /************DAC***************/
mbed_official 579:53297373a894 40 const PinMap PinMap_DAC[] = {
mbed_official 579:53297373a894 41 };
mbed_official 579:53297373a894 42
mbed_official 579:53297373a894 43 /************I2C***************/
mbed_official 579:53297373a894 44 const PinMap PinMap_I2C_SDA[] = {
mbed_official 579:53297373a894 45 };
mbed_official 579:53297373a894 46
mbed_official 579:53297373a894 47 const PinMap PinMap_I2C_SCL[] = {
mbed_official 579:53297373a894 48 };
mbed_official 579:53297373a894 49
mbed_official 579:53297373a894 50 /************UART***************/
mbed_official 579:53297373a894 51 const PinMap PinMap_UART_TX[] = {
mbed_official 579:53297373a894 52 {PA04, UART_0, 0}
mbed_official 579:53297373a894 53 };
mbed_official 579:53297373a894 54
mbed_official 579:53297373a894 55 const PinMap PinMap_UART_RX[] = {
mbed_official 579:53297373a894 56 {PA05, UART_0, 0}
mbed_official 579:53297373a894 57 };
mbed_official 579:53297373a894 58
mbed_official 579:53297373a894 59 /************SPI***************/
mbed_official 579:53297373a894 60 const PinMap PinMap_SPI_SCLK[] = {
mbed_official 579:53297373a894 61 };
mbed_official 579:53297373a894 62
mbed_official 579:53297373a894 63 const PinMap PinMap_SPI_MOSI[] = {
mbed_official 579:53297373a894 64 };
mbed_official 579:53297373a894 65
mbed_official 579:53297373a894 66 const PinMap PinMap_SPI_MISO[] = {
mbed_official 579:53297373a894 67 };
mbed_official 579:53297373a894 68
mbed_official 579:53297373a894 69 const PinMap PinMap_SPI_SSEL[] = {
mbed_official 579:53297373a894 70 };
mbed_official 579:53297373a894 71
mbed_official 579:53297373a894 72 /************PWM***************/
mbed_official 579:53297373a894 73 const PinMap PinMap_PWM[] = {
mbed_official 579:53297373a894 74 };
mbed_official 579:53297373a894 75
mbed_official 579:53297373a894 76 /********SERCOM MAPPING*********/
mbed_official 579:53297373a894 77 struct pin_sercom {
mbed_official 579:53297373a894 78 uint8_t pad_num; // a pin always mapped to a pad
mbed_official 579:53297373a894 79 uint8_t com_num[2]; // a pin always mapped to maximum of 2 sercoms
mbed_official 579:53297373a894 80 // uint8_t pin_mux[2]; // Mux setting for the pin A,B...H ---> 0,1...7
mbed_official 579:53297373a894 81 };
mbed_official 579:53297373a894 82 struct pin_values {
mbed_official 579:53297373a894 83 uint8_t pin;
mbed_official 579:53297373a894 84 uint8_t pad;
mbed_official 579:53297373a894 85 uint8_t com;
mbed_official 579:53297373a894 86 };
mbed_official 579:53297373a894 87
mbed_official 579:53297373a894 88 struct pin_sercom SAM21[] = {{0, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA00
mbed_official 579:53297373a894 89 {1, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA01
mbed_official 579:53297373a894 90 {0, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA04
mbed_official 579:53297373a894 91 {1, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA05
mbed_official 579:53297373a894 92 {2, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA06
mbed_official 579:53297373a894 93 {3, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA07
mbed_official 579:53297373a894 94 {0, {0, 2}/*, {2, 3}*/}, // PA08
mbed_official 579:53297373a894 95 {1, {0, 2}/*, {2, 3}*/}, // PA09
mbed_official 579:53297373a894 96 {0, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA12
mbed_official 579:53297373a894 97 {1, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA13
mbed_official 579:53297373a894 98 {2, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA14
mbed_official 579:53297373a894 99 {3, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA15
mbed_official 579:53297373a894 100 {0, {1, 3}/*, {2, 3}*/}, // PA16
mbed_official 579:53297373a894 101 {1, {1, 3}/*, {2, 3}*/}, // PA17
mbed_official 579:53297373a894 102 {2, {1, 3}/*, {2, 3}*/}, // PA18
mbed_official 579:53297373a894 103 {3, {1, 3}/*, {2, 3}*/}, // PA19
mbed_official 579:53297373a894 104 {0, {3, 5}/*, {2, 3}*/}, // PA22
mbed_official 579:53297373a894 105 {1, {3, 5}/*, {2, 3}*/}, // PA23
mbed_official 579:53297373a894 106 {2, {3, 5}/*, {2, 3}*/}, // PA24
mbed_official 579:53297373a894 107 {3, {3, 5}/*, {2, 3}*/}, // PA25
mbed_official 579:53297373a894 108 {0, {3, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PA27
mbed_official 579:53297373a894 109 {1, {3, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PA28
mbed_official 579:53297373a894 110 {2, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA30
mbed_official 579:53297373a894 111 {3, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA31
mbed_official 579:53297373a894 112 {0, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB02
mbed_official 579:53297373a894 113 {1, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB03
mbed_official 579:53297373a894 114 {2, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB22
mbed_official 579:53297373a894 115 {3, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB23
mbed_official 579:53297373a894 116 {2, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PB30
mbed_official 579:53297373a894 117 {1, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PB31
mbed_official 579:53297373a894 118 {3, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PC18
mbed_official 579:53297373a894 119 {0, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/} // PC19
mbed_official 579:53297373a894 120 };
mbed_official 579:53297373a894 121 const PinMap PinMap_SERCOM_PINS[] = {
mbed_official 579:53297373a894 122 {PA00},
mbed_official 579:53297373a894 123 {PA01},
mbed_official 579:53297373a894 124 {PA04},
mbed_official 579:53297373a894 125 {PA05},
mbed_official 579:53297373a894 126 {PA06},
mbed_official 579:53297373a894 127 {PA07},
mbed_official 579:53297373a894 128 {PA08},
mbed_official 579:53297373a894 129 {PA09},
mbed_official 579:53297373a894 130 {PA12},
mbed_official 579:53297373a894 131 {PA13},
mbed_official 579:53297373a894 132 {PA14},
mbed_official 579:53297373a894 133 {PA15},
mbed_official 579:53297373a894 134 {PA16},
mbed_official 579:53297373a894 135 {PA17},
mbed_official 579:53297373a894 136 {PA18},
mbed_official 579:53297373a894 137 {PA19},
mbed_official 579:53297373a894 138 {PA22},
mbed_official 579:53297373a894 139 {PA23},
mbed_official 579:53297373a894 140 {PA24},
mbed_official 579:53297373a894 141 {PA25},
mbed_official 579:53297373a894 142 {PA27},
mbed_official 579:53297373a894 143 {PA28},
mbed_official 579:53297373a894 144 {PA30},
mbed_official 579:53297373a894 145 {PA31},
mbed_official 579:53297373a894 146
mbed_official 579:53297373a894 147 {PB02},
mbed_official 579:53297373a894 148 {PB03},
mbed_official 579:53297373a894 149 {PB22},
mbed_official 579:53297373a894 150 {PB23},
mbed_official 579:53297373a894 151 {PB30},
mbed_official 579:53297373a894 152 {PB31},
mbed_official 579:53297373a894 153
mbed_official 579:53297373a894 154 {PC18},
mbed_official 579:53297373a894 155 {PC19}
mbed_official 579:53297373a894 156
mbed_official 579:53297373a894 157 };
mbed_official 579:53297373a894 158
mbed_official 579:53297373a894 159 uint32_t pinmap_find_sercom_index (PinName pin, const PinMap* map)
mbed_official 579:53297373a894 160 {
mbed_official 579:53297373a894 161 uint8_t count = 0;
mbed_official 579:53297373a894 162 while (map->pin != NC) {
mbed_official 579:53297373a894 163 if (map->pin == pin)
mbed_official 579:53297373a894 164 return count;
mbed_official 579:53297373a894 165 map++;
mbed_official 579:53297373a894 166 count++;
mbed_official 579:53297373a894 167 }
mbed_official 579:53297373a894 168 return (uint32_t)NC;
mbed_official 579:53297373a894 169 }
mbed_official 579:53297373a894 170
mbed_official 579:53297373a894 171 uint32_t pinmap_sercom_peripheral (PinName pin1, PinName pin2)
mbed_official 579:53297373a894 172 {
mbed_official 579:53297373a894 173 uint8_t index1 = 0, index2 = 0;
mbed_official 579:53297373a894 174
mbed_official 579:53297373a894 175 if ((pin1 == (PinName)NC) || (pin2 == (PinName)NC)) {
mbed_official 579:53297373a894 176 return (uint32_t)NC;
mbed_official 579:53297373a894 177 }
mbed_official 579:53297373a894 178
mbed_official 579:53297373a894 179 index1 = pinmap_find_sercom_index(pin1, PinMap_SERCOM_PINS);
mbed_official 579:53297373a894 180 index2 = pinmap_find_sercom_index(pin2, PinMap_SERCOM_PINS);
mbed_official 579:53297373a894 181
mbed_official 579:53297373a894 182 if (SAM21[index1].com_num[1] == SERCOM_NULL) {
mbed_official 579:53297373a894 183 return SAM21[index1].com_num[0];
mbed_official 579:53297373a894 184 } else {
mbed_official 579:53297373a894 185 if ((SAM21[index1].com_num[0] == SAM21[index2].com_num[0]) || (SAM21[index1].com_num[0] == SAM21[index2].com_num[1])) {
mbed_official 579:53297373a894 186 return SAM21[index1].com_num[0];
mbed_official 579:53297373a894 187 } else {
mbed_official 579:53297373a894 188 return SAM21[index1].com_num[1];
mbed_official 579:53297373a894 189 }
mbed_official 579:53297373a894 190 }
mbed_official 579:53297373a894 191 }
mbed_official 579:53297373a894 192
mbed_official 579:53297373a894 193 uint32_t pinmap_sercom_pad (PinName pin)
mbed_official 579:53297373a894 194 {
mbed_official 579:53297373a894 195 uint8_t index = 0;
mbed_official 579:53297373a894 196
mbed_official 579:53297373a894 197 if (pin == (PinName)NC)
mbed_official 579:53297373a894 198 return (uint32_t)NC;
mbed_official 579:53297373a894 199
mbed_official 579:53297373a894 200 index = pinmap_find_sercom_index(pin, PinMap_SERCOM_PINS);
mbed_official 579:53297373a894 201 return SAM21[index].pad_num;
mbed_official 579:53297373a894 202 }
mbed_official 579:53297373a894 203
mbed_official 579:53297373a894 204 uint32_t find_sercom_pinmux (struct pin_values* PinValues)
mbed_official 579:53297373a894 205 {
mbed_official 579:53297373a894 206 switch (PinValues->com) {
mbed_official 579:53297373a894 207 case 0: // SERCOM0
mbed_official 579:53297373a894 208 switch (PinValues->pin) {
mbed_official 579:53297373a894 209 case PA04:
mbed_official 579:53297373a894 210 return PINMUX_PA04D_SERCOM0_PAD0;
mbed_official 579:53297373a894 211 break;
mbed_official 579:53297373a894 212 case PA08:
mbed_official 579:53297373a894 213 return PINMUX_PA08C_SERCOM0_PAD0;
mbed_official 579:53297373a894 214 break;
mbed_official 579:53297373a894 215 case PA05:
mbed_official 579:53297373a894 216 return PINMUX_PA05D_SERCOM0_PAD1;
mbed_official 579:53297373a894 217 break;
mbed_official 579:53297373a894 218 case PA09:
mbed_official 579:53297373a894 219 return PINMUX_PA09C_SERCOM0_PAD1;
mbed_official 579:53297373a894 220 break;
mbed_official 579:53297373a894 221 case PA06:
mbed_official 579:53297373a894 222 return PINMUX_PA06D_SERCOM0_PAD2;
mbed_official 579:53297373a894 223 break;
mbed_official 579:53297373a894 224 case PA10:
mbed_official 579:53297373a894 225 return PINMUX_PA10C_SERCOM0_PAD2;
mbed_official 579:53297373a894 226 break;
mbed_official 579:53297373a894 227 case PA07:
mbed_official 579:53297373a894 228 return PINMUX_PA07D_SERCOM0_PAD3;
mbed_official 579:53297373a894 229 break;
mbed_official 579:53297373a894 230 case PA11:
mbed_official 579:53297373a894 231 return PINMUX_PA11C_SERCOM0_PAD3;
mbed_official 579:53297373a894 232 break;
mbed_official 579:53297373a894 233 default:
mbed_official 579:53297373a894 234 break;
mbed_official 579:53297373a894 235 }
mbed_official 579:53297373a894 236 break;
mbed_official 579:53297373a894 237 case 1: // SERCOM1
mbed_official 579:53297373a894 238 switch (PinValues->pin) {
mbed_official 579:53297373a894 239 case PA16:
mbed_official 579:53297373a894 240 return PINMUX_PA16C_SERCOM1_PAD0;
mbed_official 579:53297373a894 241 break;
mbed_official 579:53297373a894 242 case PA00:
mbed_official 579:53297373a894 243 return PINMUX_PA00D_SERCOM1_PAD0;
mbed_official 579:53297373a894 244 break;
mbed_official 579:53297373a894 245 case PA17:
mbed_official 579:53297373a894 246 return PINMUX_PA17C_SERCOM1_PAD1;
mbed_official 579:53297373a894 247 break;
mbed_official 579:53297373a894 248 case PA01:
mbed_official 579:53297373a894 249 return PINMUX_PA01D_SERCOM1_PAD1;
mbed_official 579:53297373a894 250 break;
mbed_official 579:53297373a894 251 case PA30:
mbed_official 579:53297373a894 252 return PINMUX_PA30D_SERCOM1_PAD2;
mbed_official 579:53297373a894 253 break;
mbed_official 579:53297373a894 254 case PA18:
mbed_official 579:53297373a894 255 return PINMUX_PA18C_SERCOM1_PAD2;
mbed_official 579:53297373a894 256 break;
mbed_official 579:53297373a894 257 case PA31:
mbed_official 579:53297373a894 258 return PINMUX_PA31D_SERCOM1_PAD3;
mbed_official 579:53297373a894 259 break;
mbed_official 579:53297373a894 260 case PA19:
mbed_official 579:53297373a894 261 return PINMUX_PA19C_SERCOM1_PAD3;
mbed_official 579:53297373a894 262 break;
mbed_official 579:53297373a894 263 default:
mbed_official 579:53297373a894 264 break;
mbed_official 579:53297373a894 265 }
mbed_official 579:53297373a894 266 break;
mbed_official 579:53297373a894 267 case 2: // SERCOM2
mbed_official 579:53297373a894 268 switch (PinValues->pin) {
mbed_official 579:53297373a894 269 case PA08:
mbed_official 579:53297373a894 270 return PINMUX_PA08D_SERCOM2_PAD0;
mbed_official 579:53297373a894 271 break;
mbed_official 579:53297373a894 272 case PA12:
mbed_official 579:53297373a894 273 return PINMUX_PA12C_SERCOM2_PAD0;
mbed_official 579:53297373a894 274 break;
mbed_official 579:53297373a894 275 case PA09:
mbed_official 579:53297373a894 276 return PINMUX_PA09D_SERCOM2_PAD1;
mbed_official 579:53297373a894 277 break;
mbed_official 579:53297373a894 278 case PA13:
mbed_official 579:53297373a894 279 return PINMUX_PA13C_SERCOM2_PAD1;
mbed_official 579:53297373a894 280 break;
mbed_official 579:53297373a894 281 case PA10:
mbed_official 579:53297373a894 282 return PINMUX_PA10D_SERCOM2_PAD2;
mbed_official 579:53297373a894 283 break;
mbed_official 579:53297373a894 284 case PA14:
mbed_official 579:53297373a894 285 return PINMUX_PA14C_SERCOM2_PAD2;
mbed_official 579:53297373a894 286 break;
mbed_official 579:53297373a894 287 case PA11:
mbed_official 579:53297373a894 288 return PINMUX_PA11D_SERCOM2_PAD3;
mbed_official 579:53297373a894 289 break;
mbed_official 579:53297373a894 290 case PA15:
mbed_official 579:53297373a894 291 return PINMUX_PA15C_SERCOM2_PAD3;
mbed_official 579:53297373a894 292 break;
mbed_official 579:53297373a894 293 default:
mbed_official 579:53297373a894 294 break;
mbed_official 579:53297373a894 295 }
mbed_official 579:53297373a894 296 break;
mbed_official 579:53297373a894 297 case 3: // SERCOM3
mbed_official 579:53297373a894 298 switch (PinValues->pin) {
mbed_official 579:53297373a894 299 case PA16:
mbed_official 579:53297373a894 300 return PINMUX_PA16D_SERCOM3_PAD0;
mbed_official 579:53297373a894 301 break;
mbed_official 579:53297373a894 302 case PA22:
mbed_official 579:53297373a894 303 return PINMUX_PA22C_SERCOM3_PAD0;
mbed_official 579:53297373a894 304 break;
mbed_official 579:53297373a894 305 case PA27:
mbed_official 579:53297373a894 306 return PINMUX_PA27F_SERCOM3_PAD0;
mbed_official 579:53297373a894 307 break;
mbed_official 579:53297373a894 308 case PA17:
mbed_official 579:53297373a894 309 return PINMUX_PA17D_SERCOM3_PAD1;
mbed_official 579:53297373a894 310 break;
mbed_official 579:53297373a894 311 case PA23:
mbed_official 579:53297373a894 312 return PINMUX_PA23C_SERCOM3_PAD1;
mbed_official 579:53297373a894 313 break;
mbed_official 579:53297373a894 314 case PA28:
mbed_official 579:53297373a894 315 return PINMUX_PA28F_SERCOM3_PAD1;
mbed_official 579:53297373a894 316 break;
mbed_official 579:53297373a894 317 case PA18:
mbed_official 579:53297373a894 318 return PINMUX_PA18D_SERCOM3_PAD2;
mbed_official 579:53297373a894 319 break;
mbed_official 579:53297373a894 320 case PA20:
mbed_official 579:53297373a894 321 return PINMUX_PA20D_SERCOM3_PAD2;
mbed_official 579:53297373a894 322 break;
mbed_official 579:53297373a894 323 case PA24:
mbed_official 579:53297373a894 324 return PINMUX_PA24C_SERCOM3_PAD2;
mbed_official 579:53297373a894 325 break;
mbed_official 579:53297373a894 326 case PA19:
mbed_official 579:53297373a894 327 return PINMUX_PA19D_SERCOM3_PAD3;
mbed_official 579:53297373a894 328 break;
mbed_official 579:53297373a894 329 case PA25:
mbed_official 579:53297373a894 330 return PINMUX_PA25C_SERCOM3_PAD3;
mbed_official 579:53297373a894 331 break;
mbed_official 579:53297373a894 332 default:
mbed_official 579:53297373a894 333 break;
mbed_official 579:53297373a894 334 }
mbed_official 579:53297373a894 335 break;
mbed_official 579:53297373a894 336 case 4: // SERCOM4
mbed_official 579:53297373a894 337 switch (PinValues->pin) {
mbed_official 579:53297373a894 338 case PA12:
mbed_official 579:53297373a894 339 return PINMUX_PA12D_SERCOM4_PAD0;
mbed_official 579:53297373a894 340 break;
mbed_official 579:53297373a894 341 case PB08:
mbed_official 579:53297373a894 342 return PINMUX_PB08D_SERCOM4_PAD0;
mbed_official 579:53297373a894 343 break;
mbed_official 579:53297373a894 344 case PC19:
mbed_official 579:53297373a894 345 return PINMUX_PC19F_SERCOM4_PAD0;
mbed_official 579:53297373a894 346 break;
mbed_official 579:53297373a894 347 case PA13:
mbed_official 579:53297373a894 348 return PINMUX_PA13D_SERCOM4_PAD1;
mbed_official 579:53297373a894 349 break;
mbed_official 579:53297373a894 350 case PB09:
mbed_official 579:53297373a894 351 return PINMUX_PB09D_SERCOM4_PAD1;
mbed_official 579:53297373a894 352 break;
mbed_official 579:53297373a894 353 case PB31:
mbed_official 579:53297373a894 354 return PINMUX_PB31F_SERCOM4_PAD1;
mbed_official 579:53297373a894 355 break;
mbed_official 579:53297373a894 356 case PA14:
mbed_official 579:53297373a894 357 return PINMUX_PA14D_SERCOM4_PAD2;
mbed_official 579:53297373a894 358 break;
mbed_official 579:53297373a894 359 case PB14:
mbed_official 579:53297373a894 360 return PINMUX_PB14C_SERCOM4_PAD2;
mbed_official 579:53297373a894 361 break;
mbed_official 579:53297373a894 362 case PB30:
mbed_official 579:53297373a894 363 return PINMUX_PB30F_SERCOM4_PAD2;
mbed_official 579:53297373a894 364 break;
mbed_official 579:53297373a894 365 case PA15:
mbed_official 579:53297373a894 366 return PINMUX_PA15D_SERCOM4_PAD3;
mbed_official 579:53297373a894 367 break;
mbed_official 579:53297373a894 368 case PB15:
mbed_official 579:53297373a894 369 return PINMUX_PB15C_SERCOM4_PAD3;
mbed_official 579:53297373a894 370 break;
mbed_official 579:53297373a894 371 case PC18:
mbed_official 579:53297373a894 372 return PINMUX_PC18F_SERCOM4_PAD3;
mbed_official 579:53297373a894 373 break;
mbed_official 579:53297373a894 374 default:
mbed_official 579:53297373a894 375 break;
mbed_official 579:53297373a894 376 }
mbed_official 579:53297373a894 377 break;
mbed_official 579:53297373a894 378 case 5: // SERCOM5
mbed_official 579:53297373a894 379 switch (PinValues->pin) {
mbed_official 579:53297373a894 380 case PB16:
mbed_official 579:53297373a894 381 return PINMUX_PB16C_SERCOM5_PAD0;
mbed_official 579:53297373a894 382 break;
mbed_official 579:53297373a894 383 case PA22:
mbed_official 579:53297373a894 384 return PINMUX_PA22D_SERCOM5_PAD0;
mbed_official 579:53297373a894 385 break;
mbed_official 579:53297373a894 386 case PB02:
mbed_official 579:53297373a894 387 return PINMUX_PB02D_SERCOM5_PAD0;
mbed_official 579:53297373a894 388 break;
mbed_official 579:53297373a894 389 case PB30:
mbed_official 579:53297373a894 390 return PINMUX_PB30D_SERCOM5_PAD0;
mbed_official 579:53297373a894 391 break;
mbed_official 579:53297373a894 392 case PB17:
mbed_official 579:53297373a894 393 return PINMUX_PB17C_SERCOM5_PAD1;
mbed_official 579:53297373a894 394 break;
mbed_official 579:53297373a894 395 case PA23:
mbed_official 579:53297373a894 396 return PINMUX_PA23D_SERCOM5_PAD1;
mbed_official 579:53297373a894 397 break;
mbed_official 579:53297373a894 398 case PB03:
mbed_official 579:53297373a894 399 return PINMUX_PB03D_SERCOM5_PAD1;
mbed_official 579:53297373a894 400 break;
mbed_official 579:53297373a894 401 case PB31:
mbed_official 579:53297373a894 402 return PINMUX_PB31D_SERCOM5_PAD1;
mbed_official 579:53297373a894 403 break;
mbed_official 579:53297373a894 404 case PA24:
mbed_official 579:53297373a894 405 return PINMUX_PA24D_SERCOM5_PAD2;
mbed_official 579:53297373a894 406 break;
mbed_official 579:53297373a894 407 case PB00:
mbed_official 579:53297373a894 408 return PINMUX_PB00D_SERCOM5_PAD2;
mbed_official 579:53297373a894 409 break;
mbed_official 579:53297373a894 410 case PB22:
mbed_official 579:53297373a894 411 return PINMUX_PB22D_SERCOM5_PAD2;
mbed_official 579:53297373a894 412 break;
mbed_official 579:53297373a894 413 case PA20:
mbed_official 579:53297373a894 414 return PINMUX_PA20C_SERCOM5_PAD2;
mbed_official 579:53297373a894 415 break;
mbed_official 579:53297373a894 416 case PA25:
mbed_official 579:53297373a894 417 return PINMUX_PA25D_SERCOM5_PAD3;
mbed_official 579:53297373a894 418 break;
mbed_official 579:53297373a894 419 case PB23:
mbed_official 579:53297373a894 420 return PINMUX_PB23D_SERCOM5_PAD3;
mbed_official 579:53297373a894 421 break;
mbed_official 579:53297373a894 422 default:
mbed_official 579:53297373a894 423 break;
mbed_official 579:53297373a894 424 }
mbed_official 579:53297373a894 425 break;
mbed_official 579:53297373a894 426 }
mbed_official 579:53297373a894 427 }
mbed_official 579:53297373a894 428 uint32_t find_mux_setting (PinName output, PinName input, PinName clock, PinName chipsel)
mbed_official 579:53297373a894 429 {
mbed_official 579:53297373a894 430 struct pin_values input_values, output_values, clock_values, chipsel_values;
mbed_official 579:53297373a894 431 uint32_t mux_setting = 0;
mbed_official 579:53297373a894 432
mbed_official 579:53297373a894 433 input_values.pin = input;
mbed_official 579:53297373a894 434 output_values.pin = output;
mbed_official 579:53297373a894 435 clock_values.pin = clock;
mbed_official 579:53297373a894 436 chipsel_values.pin = chipsel;
mbed_official 579:53297373a894 437
mbed_official 579:53297373a894 438 input_values.com = pinmap_sercom_peripheral(input, output);
mbed_official 579:53297373a894 439 output_values.com = input_values.com;
mbed_official 579:53297373a894 440 clock_values.com = input_values.com;
mbed_official 579:53297373a894 441 chipsel_values.com = input_values.com;
mbed_official 579:53297373a894 442
mbed_official 579:53297373a894 443 input_values.pad = pinmap_sercom_pad(input);
mbed_official 579:53297373a894 444 output_values.pad = pinmap_sercom_pad(output);
mbed_official 579:53297373a894 445 clock_values.pad = pinmap_sercom_pad(clock);
mbed_official 579:53297373a894 446 chipsel_values.pad = pinmap_sercom_pad(chipsel);
mbed_official 579:53297373a894 447
mbed_official 579:53297373a894 448 switch(input_values.pad) { //TODO: Condition for hardware flow control enabled is different.
mbed_official 579:53297373a894 449 case 0:
mbed_official 579:53297373a894 450 mux_setting |= SERCOM_USART_CTRLA_RXPO(0);
mbed_official 579:53297373a894 451 break;
mbed_official 579:53297373a894 452 case 1:
mbed_official 579:53297373a894 453 mux_setting |= SERCOM_USART_CTRLA_RXPO(1);
mbed_official 579:53297373a894 454 break;
mbed_official 579:53297373a894 455 case 2:
mbed_official 579:53297373a894 456 mux_setting |= SERCOM_USART_CTRLA_RXPO(2);
mbed_official 579:53297373a894 457 break;
mbed_official 579:53297373a894 458 case 3:
mbed_official 579:53297373a894 459 mux_setting |= SERCOM_USART_CTRLA_RXPO(3);
mbed_official 579:53297373a894 460 break;
mbed_official 579:53297373a894 461 }
mbed_official 579:53297373a894 462
mbed_official 579:53297373a894 463 if ((clock == NC) && (chipsel == NC)) { // condition for no hardware control and uart
mbed_official 579:53297373a894 464 if ((output_values.pad == 0)) { // condition for hardware enable and usart is different
mbed_official 579:53297373a894 465 mux_setting |= SERCOM_USART_CTRLA_TXPO(0);
mbed_official 579:53297373a894 466 } else if((output_values.pad == 2)) {
mbed_official 579:53297373a894 467 mux_setting |= SERCOM_USART_CTRLA_TXPO(1);
mbed_official 579:53297373a894 468 } else {
mbed_official 579:53297373a894 469 mux_setting = mux_setting; // dummy condition
mbed_official 579:53297373a894 470 }
mbed_official 579:53297373a894 471 } else { // for hardware flow control and uart // expecting the tx in pad 0, rts in pad2 and cts in pad 3
mbed_official 579:53297373a894 472 if((output_values.pad == 0) && (clock_values.pad/*rts pin*/ == 2) && (chipsel_values.pad/*cts pin*/ == 3)) {
mbed_official 579:53297373a894 473 mux_setting |= SERCOM_USART_CTRLA_TXPO(2);
mbed_official 579:53297373a894 474 }
mbed_official 579:53297373a894 475 }
mbed_official 579:53297373a894 476
mbed_official 579:53297373a894 477 return mux_setting;
mbed_official 579:53297373a894 478 }
mbed_official 579:53297373a894 479
mbed_official 579:53297373a894 480 void find_pin_settings (PinName output, PinName input, PinName clock, PinName chipsel, uint32_t* pad_pinmuxes)
mbed_official 579:53297373a894 481 {
mbed_official 579:53297373a894 482 struct pin_values input_values, output_values, clock_values, chipsel_values;
mbed_official 579:53297373a894 483 uint8_t i = 0;
mbed_official 579:53297373a894 484
mbed_official 579:53297373a894 485 for (i = 0; i < 4 ; i++ ) { // load default values for the pins
mbed_official 579:53297373a894 486 pad_pinmuxes[i] = 0xFFFFFFFF; //PINMUX_UNUSED
mbed_official 579:53297373a894 487 }
mbed_official 579:53297373a894 488
mbed_official 579:53297373a894 489 input_values.pin = input;
mbed_official 579:53297373a894 490 output_values.pin = output;
mbed_official 579:53297373a894 491 clock_values.pin = clock;
mbed_official 579:53297373a894 492 chipsel_values.pin = chipsel;
mbed_official 579:53297373a894 493
mbed_official 579:53297373a894 494 input_values.com = pinmap_sercom_peripheral(input, output);
mbed_official 579:53297373a894 495 output_values.com = input_values.com;
mbed_official 579:53297373a894 496 clock_values.com = input_values.com;
mbed_official 579:53297373a894 497 chipsel_values.com = input_values.com;
mbed_official 579:53297373a894 498
mbed_official 579:53297373a894 499 input_values.pad = pinmap_sercom_pad(input);
mbed_official 579:53297373a894 500 output_values.pad = pinmap_sercom_pad(output);
mbed_official 579:53297373a894 501 clock_values.pad = pinmap_sercom_pad(clock);
mbed_official 579:53297373a894 502 chipsel_values.pad = pinmap_sercom_pad(chipsel);
mbed_official 579:53297373a894 503
mbed_official 579:53297373a894 504 if (input_values.pad < 0x04)
mbed_official 579:53297373a894 505 pad_pinmuxes[input_values.pad] = find_sercom_pinmux(&input_values);
mbed_official 579:53297373a894 506 if (output_values.pad < 0x04)
mbed_official 579:53297373a894 507 pad_pinmuxes[output_values.pad] = find_sercom_pinmux(&output_values);
mbed_official 579:53297373a894 508 if (clock_values.pad < 0x04)
mbed_official 579:53297373a894 509 pad_pinmuxes[clock_values.pad] = find_sercom_pinmux(&clock_values);
mbed_official 579:53297373a894 510 if (chipsel_values.pad < 0x04)
mbed_official 579:53297373a894 511 pad_pinmuxes[chipsel_values.pad] = find_sercom_pinmux(&chipsel_values);
mbed_official 579:53297373a894 512
mbed_official 579:53297373a894 513 }
mbed_official 579:53297373a894 514
mbed_official 579:53297373a894 515
mbed_official 579:53297373a894 516
mbed_official 579:53297373a894 517
mbed_official 579:53297373a894 518