mbed library sources

Fork of mbed-src by mbed official

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}
+};
 
 
 
-
-