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.

Revision:
592:a274ee790e56
Parent:
579:53297373a894
--- a/targets/hal/TARGET_Atmel/TARGET_SAM21/TARGET_SAMR21G18A/PeripheralPins.c	Wed Jul 15 08:15:08 2015 +0100
+++ b/targets/hal/TARGET_Atmel/TARGET_SAM21/TARGET_SAMR21G18A/PeripheralPins.c	Fri Jul 17 09:15:10 2015 +0100
@@ -16,503 +16,139 @@
 
 #include "PeripheralPins.h"
 
-#define SERCOM_NULL 0xFF
-#define MUX_NULL    0xFF
-
-#define SERCOM_USART_CTRLA_RXPO_Pos 20           /**< \brief (SERCOM_USART_CTRLA) Receive Data Pinout */
-#define SERCOM_USART_CTRLA_RXPO_Msk (0x3ul << SERCOM_USART_CTRLA_RXPO_Pos)
-#define SERCOM_USART_CTRLA_RXPO(value) ((SERCOM_USART_CTRLA_RXPO_Msk & ((value) << SERCOM_USART_CTRLA_RXPO_Pos)))
-
-#define SERCOM_USART_CTRLA_TXPO_Pos 16           /**< \brief (SERCOM_USART_CTRLA) Transmit Data Pinout */
-#define SERCOM_USART_CTRLA_TXPO_Msk (0x3ul << SERCOM_USART_CTRLA_TXPO_Pos)
-#define SERCOM_USART_CTRLA_TXPO(value) ((SERCOM_USART_CTRLA_TXPO_Msk & ((value) << SERCOM_USART_CTRLA_TXPO_Pos)))
-
-
 /************RTC***************/
 const PinMap PinMap_RTC[] = {
+    /* Not connected */
+    {NC  , NC   , NC}
 };
 
 /************ADC***************/
 const PinMap PinMap_ADC[] = {
-};
-
-/************DAC***************/
-const PinMap PinMap_DAC[] = {
-};
+    {PA04,  ADC_4, 1},
+    {PA05,  ADC_5, 1},
+    {PA06,  ADC_6, 1},
+    {PA07,  ADC_7, 1},
+    {PB02,  ADC_10, 1},
+    {PB03,  ADC_11, 1},
+    {PA08,  ADC_16, 1},
+    {PA09,  ADC_17, 1},
 
-/************I2C***************/
-const PinMap PinMap_I2C_SDA[] = {
-};
-
-const PinMap PinMap_I2C_SCL[] = {
+    /* Not connected */
+    {NC  , NC   , NC}
 };
 
-/************UART***************/
-const PinMap PinMap_UART_TX[] = {
-    {PA04,  UART_0, 0}
-};
+/************SERCOM Pins***********/
+const PinMap PinMap_SERCOM_PAD[] = {
+    {PA04, SERCOM0_PAD0, 3},
+    {PA05, SERCOM0_PAD1, 3},
+    {PA06, SERCOM0_PAD2, 3},
+    {PA07, SERCOM0_PAD3, 3},
+    {PA08, SERCOM0_PAD0, 2},
+    {PA09, SERCOM0_PAD1, 2},
+    {PA12, SERCOM2_PAD0, 2},
+    {PA13, SERCOM2_PAD1, 2},
+    {PA14, SERCOM2_PAD2, 2},
+    {PA15, SERCOM2_PAD3, 2},
+    {PA16, SERCOM1_PAD0, 2},
+    {PA17, SERCOM1_PAD1, 2},
+    {PA18, SERCOM1_PAD2, 2},
+    {PA19, SERCOM1_PAD3, 2},
+    {PA22, SERCOM3_PAD0, 2},
+    {PA23, SERCOM3_PAD1, 2},
+    {PA24, SERCOM3_PAD2, 2},
+    {PA25, SERCOM3_PAD3, 2},
+    {PA27, SERCOM3_PAD0, 5},
+    {PA28, SERCOM3_PAD1, 5},
+    {PB02, SERCOM5_PAD0, 3},
+    {PB03, SERCOM5_PAD1, 3},
+    {PB22, SERCOM5_PAD2, 3},
+    {PB23, SERCOM5_PAD3, 3},
+    {PB30, SERCOM4_PAD2, 5},
+    {PB31, SERCOM4_PAD1, 5},
+    {PC18, SERCOM4_PAD3, 5},
+    {PC19, SERCOM4_PAD0, 5},
 
-const PinMap PinMap_UART_RX[] = {
-    {PA05,  UART_0, 0}
+    /* Not connected */
+    {NC  , NC   , NC}
 };
 
-/************SPI***************/
-const PinMap PinMap_SPI_SCLK[] = {
+/*******SERCOM Pins extended*******/
+const PinMap PinMap_SERCOM_PADEx[] = {
+    {PA00, SERCOM1_PAD0, 3},
+    {PA01, SERCOM1_PAD1, 3},
+    {PA08, SERCOM2_PAD0, 3},
+    {PA09, SERCOM2_PAD1, 3},
+    {PA16, SERCOM3_PAD0, 3},
+    {PA17, SERCOM3_PAD1, 3},
+    {PA18, SERCOM3_PAD2, 3},
+    {PA19, SERCOM3_PAD3, 3},
+    {PA22, SERCOM5_PAD0, 3},
+    {PA23, SERCOM5_PAD1, 3},
+    {PA24, SERCOM5_PAD2, 3},
+    {PA25, SERCOM5_PAD3, 3},
+    {PA30, SERCOM1_PAD2, 3},
+    {PA31, SERCOM1_PAD3, 3},
+
+    /* Not connected */
+    {NC  , NC   , NC}
 };
 
-const PinMap PinMap_SPI_MOSI[] = {
-};
-
-const PinMap PinMap_SPI_MISO[] = {
-};
-
-const PinMap PinMap_SPI_SSEL[] = {
-};
 
 /************PWM***************/
 const PinMap PinMap_PWM[] = {
-};
-
-/********SERCOM MAPPING*********/
-struct pin_sercom {
-    uint8_t pad_num;  // a pin always mapped to a pad
-    uint8_t com_num[2]; // a pin always mapped to maximum of 2 sercoms
-//	uint8_t pin_mux[2]; // Mux setting for the pin A,B...H ---> 0,1...7
-};
-struct pin_values {
-    uint8_t pin;
-    uint8_t pad;
-    uint8_t com;
-};
-
-struct pin_sercom SAM21[] = {{0, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/},    // PA00
-    {1, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA01
-    {0, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA04
-    {1, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA05
-    {2, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA06
-    {3, {0, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA07
-    {0, {0, 2}/*, {2, 3}*/},                  // PA08
-    {1, {0, 2}/*, {2, 3}*/},                  // PA09
-    {0, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA12
-    {1, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA13
-    {2, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA14
-    {3, {2, SERCOM_NULL}/*, {2, MUX_NULL}*/}, // PA15
-    {0, {1, 3}/*, {2, 3}*/},                  // PA16
-    {1, {1, 3}/*, {2, 3}*/},                  // PA17
-    {2, {1, 3}/*, {2, 3}*/},                  // PA18
-    {3, {1, 3}/*, {2, 3}*/},                  // PA19
-    {0, {3, 5}/*, {2, 3}*/},                  // PA22
-    {1, {3, 5}/*, {2, 3}*/},                  // PA23
-    {2, {3, 5}/*, {2, 3}*/},                  // PA24
-    {3, {3, 5}/*, {2, 3}*/},                  // PA25
-    {0, {3, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PA27
-    {1, {3, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PA28
-    {2, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA30
-    {3, {1, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PA31
-    {0, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB02
-    {1, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB03
-    {2, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB22
-    {3, {5, SERCOM_NULL}/*, {3, MUX_NULL}*/}, // PB23
-    {2, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PB30
-    {1, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PB31
-    {3, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}, // PC18
-    {0, {4, SERCOM_NULL}/*, {5, MUX_NULL}*/}  // PC19
-};
-const PinMap PinMap_SERCOM_PINS[] = {
-    {PA00},
-    {PA01},
-    {PA04},
-    {PA05},
-    {PA06},
-    {PA07},
-    {PA08},
-    {PA09},
-    {PA12},
-    {PA13},
-    {PA14},
-    {PA15},
-    {PA16},
-    {PA17},
-    {PA18},
-    {PA19},
-    {PA22},
-    {PA23},
-    {PA24},
-    {PA25},
-    {PA27},
-    {PA28},
-    {PA30},
-    {PA31},
-
-    {PB02},
-    {PB03},
-    {PB22},
-    {PB23},
-    {PB30},
-    {PB31},
-
-    {PC18},
-    {PC19}
-
+    /* Not connected */
+    {NC  , NC   , NC}
 };
 
-uint32_t pinmap_find_sercom_index (PinName pin, const PinMap* map)
-{
-    uint8_t count = 0;
-    while (map->pin != NC) {
-        if (map->pin == pin)
-            return count;
-        map++;
-        count++;
-    }
-    return (uint32_t)NC;
-}
+/**********EXTINT*************/
+const PinMap PinMap_EXTINT[] = {
+    {PB00,  EXTINT_0, 0},
+    {PB16,  EXTINT_0, 0},
 
-uint32_t pinmap_sercom_peripheral (PinName pin1, PinName pin2)
-{
-    uint8_t index1 = 0, index2 = 0;
-
-    if ((pin1 == (PinName)NC) || (pin2 == (PinName)NC)) {
-        return (uint32_t)NC;
-    }
+    {PA17,  EXTINT_1, 0},
+    {PB17,  EXTINT_1, 0},
+    {PA01,  EXTINT_1, 0},
 
-    index1 = pinmap_find_sercom_index(pin1, PinMap_SERCOM_PINS);
-    index2 = pinmap_find_sercom_index(pin2, PinMap_SERCOM_PINS);
+    {PA18,  EXTINT_2, 0},
+    {PB02,  EXTINT_2, 0},
+
+    {PA19,  EXTINT_3, 0},
+    {PB03,  EXTINT_3, 0},
 
-    if (SAM21[index1].com_num[1] == SERCOM_NULL) {
-        return SAM21[index1].com_num[0];
-    } else {
-        if ((SAM21[index1].com_num[0] == SAM21[index2].com_num[0]) || (SAM21[index1].com_num[0] == SAM21[index2].com_num[1])) {
-            return SAM21[index1].com_num[0];
-        } else {
-            return SAM21[index1].com_num[1];
-        }
-    }
-}
+    {PA04,  EXTINT_4, 0},
+
+    {PA05,  EXTINT_5, 0},
 
-uint32_t pinmap_sercom_pad (PinName pin)
-{
-    uint8_t index = 0;
-
-    if (pin == (PinName)NC)
-        return (uint32_t)NC;
-
-    index = pinmap_find_sercom_index(pin, PinMap_SERCOM_PINS);
-    return SAM21[index].pad_num;
-}
+    {PA06,  EXTINT_6, 0},
+    {PA22,  EXTINT_6, 0},
+    {PB22,  EXTINT_6, 0},
 
-uint32_t find_sercom_pinmux (struct pin_values* PinValues)
-{
-    switch (PinValues->com) {
-        case 0:  // SERCOM0
-            switch (PinValues->pin) {
-                case PA04:
-                    return PINMUX_PA04D_SERCOM0_PAD0;
-                    break;
-                case PA08:
-                    return PINMUX_PA08C_SERCOM0_PAD0;
-                    break;
-                case PA05:
-                    return PINMUX_PA05D_SERCOM0_PAD1;
-                    break;
-                case PA09:
-                    return PINMUX_PA09C_SERCOM0_PAD1;
-                    break;
-                case PA06:
-                    return PINMUX_PA06D_SERCOM0_PAD2;
-                    break;
-                case PA10:
-                    return PINMUX_PA10C_SERCOM0_PAD2;
-                    break;
-                case PA07:
-                    return PINMUX_PA07D_SERCOM0_PAD3;
-                    break;
-                case PA11:
-                    return PINMUX_PA11C_SERCOM0_PAD3;
-                    break;
-                default:
-                    break;
-            }
-            break;
-        case 1:  // SERCOM1
-            switch (PinValues->pin) {
-                case PA16:
-                    return PINMUX_PA16C_SERCOM1_PAD0;
-                    break;
-                case PA00:
-                    return PINMUX_PA00D_SERCOM1_PAD0;
-                    break;
-                case PA17:
-                    return PINMUX_PA17C_SERCOM1_PAD1;
-                    break;
-                case PA01:
-                    return PINMUX_PA01D_SERCOM1_PAD1;
-                    break;
-                case PA30:
-                    return PINMUX_PA30D_SERCOM1_PAD2;
-                    break;
-                case PA18:
-                    return PINMUX_PA18C_SERCOM1_PAD2;
-                    break;
-                case PA31:
-                    return PINMUX_PA31D_SERCOM1_PAD3;
-                    break;
-                case PA19:
-                    return PINMUX_PA19C_SERCOM1_PAD3;
-                    break;
-                default:
-                    break;
-            }
-            break;
-        case 2:  // SERCOM2
-            switch (PinValues->pin) {
-                case PA08:
-                    return PINMUX_PA08D_SERCOM2_PAD0;
-                    break;
-                case PA12:
-                    return PINMUX_PA12C_SERCOM2_PAD0;
-                    break;
-                case PA09:
-                    return PINMUX_PA09D_SERCOM2_PAD1;
-                    break;
-                case PA13:
-                    return PINMUX_PA13C_SERCOM2_PAD1;
-                    break;
-                case PA10:
-                    return PINMUX_PA10D_SERCOM2_PAD2;
-                    break;
-                case PA14:
-                    return PINMUX_PA14C_SERCOM2_PAD2;
-                    break;
-                case PA11:
-                    return PINMUX_PA11D_SERCOM2_PAD3;
-                    break;
-                case PA15:
-                    return PINMUX_PA15C_SERCOM2_PAD3;
-                    break;
-                default:
-                    break;
-            }
-            break;
-        case 3:  // SERCOM3
-            switch (PinValues->pin) {
-                case PA16:
-                    return PINMUX_PA16D_SERCOM3_PAD0;
-                    break;
-                case PA22:
-                    return PINMUX_PA22C_SERCOM3_PAD0;
-                    break;
-                case PA27:
-                    return PINMUX_PA27F_SERCOM3_PAD0;
-                    break;
-                case PA17:
-                    return PINMUX_PA17D_SERCOM3_PAD1;
-                    break;
-                case PA23:
-                    return PINMUX_PA23C_SERCOM3_PAD1;
-                    break;
-                case PA28:
-                    return PINMUX_PA28F_SERCOM3_PAD1;
-                    break;
-                case PA18:
-                    return PINMUX_PA18D_SERCOM3_PAD2;
-                    break;
-                case PA20:
-                    return PINMUX_PA20D_SERCOM3_PAD2;
-                    break;
-                case PA24:
-                    return PINMUX_PA24C_SERCOM3_PAD2;
-                    break;
-                case PA19:
-                    return PINMUX_PA19D_SERCOM3_PAD3;
-                    break;
-                case PA25:
-                    return PINMUX_PA25C_SERCOM3_PAD3;
-                    break;
-                default:
-                    break;
-            }
-            break;
-        case 4:  // SERCOM4
-            switch (PinValues->pin) {
-                case PA12:
-                    return PINMUX_PA12D_SERCOM4_PAD0;
-                    break;
-                case PB08:
-                    return PINMUX_PB08D_SERCOM4_PAD0;
-                    break;
-                case PC19:
-                    return PINMUX_PC19F_SERCOM4_PAD0;
-                    break;
-                case PA13:
-                    return PINMUX_PA13D_SERCOM4_PAD1;
-                    break;
-                case PB09:
-                    return PINMUX_PB09D_SERCOM4_PAD1;
-                    break;
-                case PB31:
-                    return PINMUX_PB31F_SERCOM4_PAD1;
-                    break;
-                case PA14:
-                    return PINMUX_PA14D_SERCOM4_PAD2;
-                    break;
-                case PB14:
-                    return PINMUX_PB14C_SERCOM4_PAD2;
-                    break;
-                case PB30:
-                    return PINMUX_PB30F_SERCOM4_PAD2;
-                    break;
-                case PA15:
-                    return PINMUX_PA15D_SERCOM4_PAD3;
-                    break;
-                case PB15:
-                    return PINMUX_PB15C_SERCOM4_PAD3;
-                    break;
-                case PC18:
-                    return PINMUX_PC18F_SERCOM4_PAD3;
-                    break;
-                default:
-                    break;
-            }
-            break;
-        case 5:  // SERCOM5
-            switch (PinValues->pin) {
-                case PB16:
-                    return PINMUX_PB16C_SERCOM5_PAD0;
-                    break;
-                case PA22:
-                    return PINMUX_PA22D_SERCOM5_PAD0;
-                    break;
-                case PB02:
-                    return PINMUX_PB02D_SERCOM5_PAD0;
-                    break;
-                case PB30:
-                    return PINMUX_PB30D_SERCOM5_PAD0;
-                    break;
-                case PB17:
-                    return PINMUX_PB17C_SERCOM5_PAD1;
-                    break;
-                case PA23:
-                    return PINMUX_PA23D_SERCOM5_PAD1;
-                    break;
-                case PB03:
-                    return PINMUX_PB03D_SERCOM5_PAD1;
-                    break;
-                case PB31:
-                    return PINMUX_PB31D_SERCOM5_PAD1;
-                    break;
-                case PA24:
-                    return PINMUX_PA24D_SERCOM5_PAD2;
-                    break;
-                case PB00:
-                    return PINMUX_PB00D_SERCOM5_PAD2;
-                    break;
-                case PB22:
-                    return PINMUX_PB22D_SERCOM5_PAD2;
-                    break;
-                case PA20:
-                    return PINMUX_PA20C_SERCOM5_PAD2;
-                    break;
-                case PA25:
-                    return PINMUX_PA25D_SERCOM5_PAD3;
-                    break;
-                case PB23:
-                    return PINMUX_PB23D_SERCOM5_PAD3;
-                    break;
-                default:
-                    break;
-            }
-            break;
-    }
-}
-uint32_t find_mux_setting (PinName output, PinName input, PinName clock, PinName chipsel)
-{
-    struct pin_values input_values, output_values, clock_values, chipsel_values;
-    uint32_t mux_setting = 0;
+    {PA07,  EXTINT_7, 0},
+    {PA23,  EXTINT_7, 0},
+    {PB23,  EXTINT_7, 0},
+
+    {PA28,  EXTINT_8, 0},
+
+    {PA09,  EXTINT_9, 0},
+
+    {PA30,  EXTINT_10, 0},
+
+    {PA31,  EXTINT_11, 0},
 
-    input_values.pin = input;
-    output_values.pin = output;
-    clock_values.pin = clock;
-    chipsel_values.pin = chipsel;
-
-    input_values.com = pinmap_sercom_peripheral(input, output);
-    output_values.com = input_values.com;
-    clock_values.com = input_values.com;
-    chipsel_values.com = input_values.com;
-
-    input_values.pad = pinmap_sercom_pad(input);
-    output_values.pad = pinmap_sercom_pad(output);
-    clock_values.pad = pinmap_sercom_pad(clock);
-    chipsel_values.pad = pinmap_sercom_pad(chipsel);
+    {PA12,  EXTINT_12, 0},
+    {PA24,  EXTINT_12, 0},
 
-    switch(input_values.pad) {      //TODO: Condition for hardware flow control enabled is different.
-        case 0:
-            mux_setting |= SERCOM_USART_CTRLA_RXPO(0);
-            break;
-        case 1:
-            mux_setting |= SERCOM_USART_CTRLA_RXPO(1);
-            break;
-        case 2:
-            mux_setting |= SERCOM_USART_CTRLA_RXPO(2);
-            break;
-        case 3:
-            mux_setting |= SERCOM_USART_CTRLA_RXPO(3);
-            break;
-    }
+    {PA13,  EXTINT_13, 0},
+    {PA25,  EXTINT_13, 0},
 
-    if ((clock == NC) && (chipsel == NC)) { // condition for no hardware control and uart
-        if ((output_values.pad == 0)) {  // condition for hardware enable and usart is different
-            mux_setting |= SERCOM_USART_CTRLA_TXPO(0);
-        } else if((output_values.pad == 2)) {
-            mux_setting |= SERCOM_USART_CTRLA_TXPO(1);
-        } else {
-            mux_setting = mux_setting;  // dummy condition
-        }
-    } else { // for hardware flow control and uart // expecting the tx in pad 0, rts in pad2 and cts in pad 3
-        if((output_values.pad == 0) && (clock_values.pad/*rts pin*/ == 2) && (chipsel_values.pad/*cts pin*/ == 3)) {
-            mux_setting |= SERCOM_USART_CTRLA_TXPO(2);
-        }
-    }
-
-    return mux_setting;
-}
-
-void find_pin_settings (PinName output, PinName input, PinName clock, PinName chipsel, uint32_t* pad_pinmuxes)
-{
-    struct pin_values input_values, output_values, clock_values, chipsel_values;
-    uint8_t i = 0;
-
-    for (i = 0; i < 4 ; i++ ) { // load default values for the pins
-        pad_pinmuxes[i] = 0xFFFFFFFF; //PINMUX_UNUSED
-    }
+    {PA14,  EXTINT_14, 0},
 
-    input_values.pin = input;
-    output_values.pin = output;
-    clock_values.pin = clock;
-    chipsel_values.pin = chipsel;
-
-    input_values.com = pinmap_sercom_peripheral(input, output);
-    output_values.com = input_values.com;
-    clock_values.com = input_values.com;
-    chipsel_values.com = input_values.com;
+    {PA15,  EXTINT_15, 0},
+    {PA27,  EXTINT_15, 0},
 
-    input_values.pad = pinmap_sercom_pad(input);
-    output_values.pad = pinmap_sercom_pad(output);
-    clock_values.pad = pinmap_sercom_pad(clock);
-    chipsel_values.pad = pinmap_sercom_pad(chipsel);
-
-    if (input_values.pad < 0x04)
-        pad_pinmuxes[input_values.pad] = find_sercom_pinmux(&input_values);
-    if (output_values.pad < 0x04)
-        pad_pinmuxes[output_values.pad] = find_sercom_pinmux(&output_values);
-    if (clock_values.pad < 0x04)
-        pad_pinmuxes[clock_values.pad] = find_sercom_pinmux(&clock_values);
-    if (chipsel_values.pad < 0x04)
-        pad_pinmuxes[chipsel_values.pad] = find_sercom_pinmux(&chipsel_values);
-
-}
+    /* Not connected */
+    {NC  , NC   , NC}
+};
 
 
 
-
-