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:
Fri Sep 04 08:15:47 2015 +0100
Revision:
617:3b0e8f440867
Parent:
443:ed48b4122bfb
Synchronized with git revision a19d9e011d672ac4a34deee2f7e4379592ab1552

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

Modify the register setting method in the pin setting configuration.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 390:35c2c1cf29cd 1 /* mbed Microcontroller Library
mbed_official 390:35c2c1cf29cd 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 390:35c2c1cf29cd 3 *
mbed_official 390:35c2c1cf29cd 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 390:35c2c1cf29cd 5 * you may not use this file except in compliance with the License.
mbed_official 390:35c2c1cf29cd 6 * You may obtain a copy of the License at
mbed_official 390:35c2c1cf29cd 7 *
mbed_official 390:35c2c1cf29cd 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 390:35c2c1cf29cd 9 *
mbed_official 390:35c2c1cf29cd 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 390:35c2c1cf29cd 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 390:35c2c1cf29cd 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 390:35c2c1cf29cd 13 * See the License for the specific language governing permissions and
mbed_official 390:35c2c1cf29cd 14 * limitations under the License.
mbed_official 390:35c2c1cf29cd 15 */
mbed_official 390:35c2c1cf29cd 16 #include "pinmap.h"
mbed_official 390:35c2c1cf29cd 17 #include "mbed_error.h"
mbed_official 390:35c2c1cf29cd 18 #include "gpio_addrdefine.h"
mbed_official 390:35c2c1cf29cd 19
mbed_official 409:a95c696104d3 20 PinName gpio_multi_guard = (PinName)NC; /* If set pin name here, setting of the "pin" is just one time */
mbed_official 409:a95c696104d3 21
mbed_official 617:3b0e8f440867 22 typedef struct {
mbed_official 617:3b0e8f440867 23 PinName pin;
mbed_official 617:3b0e8f440867 24 int function;
mbed_official 617:3b0e8f440867 25 int pm;
mbed_official 617:3b0e8f440867 26 } PinFunc;
mbed_official 617:3b0e8f440867 27
mbed_official 617:3b0e8f440867 28 static const PinFunc PIPC_0_tbl[] = {
mbed_official 617:3b0e8f440867 29 // pin func pm
mbed_official 617:3b0e8f440867 30 {P4_0 , 2 , -1}, /* TIOC0A */
mbed_official 617:3b0e8f440867 31 {P5_0 , 6 , -1}, /* TIOC0A */
mbed_official 617:3b0e8f440867 32 {P7_0 , 7 , -1}, /* TIOC0A */
mbed_official 617:3b0e8f440867 33 {P10_4 , 2 , -1}, /* TIOC0A */
mbed_official 617:3b0e8f440867 34 {P4_1 , 2 , -1}, /* TIOC0B */
mbed_official 617:3b0e8f440867 35 {P5_1 , 6 , -1}, /* TIOC0B */
mbed_official 617:3b0e8f440867 36 {P7_1 , 7 , -1}, /* TIOC0B */
mbed_official 617:3b0e8f440867 37 {P10_5 , 2 , -1}, /* TIOC0B */
mbed_official 617:3b0e8f440867 38 {P4_2 , 2 , -1}, /* TIOC0C */
mbed_official 617:3b0e8f440867 39 {P5_5 , 6 , -1}, /* TIOC0C */
mbed_official 617:3b0e8f440867 40 {P7_2 , 7 , -1}, /* TIOC0C */
mbed_official 617:3b0e8f440867 41 {P10_6 , 2 , -1}, /* TIOC0C */
mbed_official 617:3b0e8f440867 42 {P4_3 , 2 , -1}, /* TIOC0D */
mbed_official 617:3b0e8f440867 43 {P5_7 , 6 , -1}, /* TIOC0D */
mbed_official 617:3b0e8f440867 44 {P7_3 , 7 , -1}, /* TIOC0D */
mbed_official 617:3b0e8f440867 45 {P10_7 , 2 , -1}, /* TIOC0D */
mbed_official 617:3b0e8f440867 46 {P2_11 , 5 , -1}, /* TIOC1A */
mbed_official 617:3b0e8f440867 47 {P6_0 , 5 , -1}, /* TIOC1A */
mbed_official 617:3b0e8f440867 48 {P7_4 , 7 , -1}, /* TIOC1A */
mbed_official 617:3b0e8f440867 49 {P8_8 , 5 , -1}, /* TIOC1A */
mbed_official 617:3b0e8f440867 50 {P9_7 , 4 , -1}, /* TIOC1A */
mbed_official 617:3b0e8f440867 51 {P10_8 , 2 , -1}, /* TIOC1A */
mbed_official 617:3b0e8f440867 52 {P2_12 , 8 , -1}, /* TIOC1B */
mbed_official 617:3b0e8f440867 53 {P5_2 , 6 , -1}, /* TIOC1B */
mbed_official 617:3b0e8f440867 54 {P6_1 , 5 , -1}, /* TIOC1B */
mbed_official 617:3b0e8f440867 55 {P7_5 , 7 , -1}, /* TIOC1B */
mbed_official 617:3b0e8f440867 56 {P8_9 , 5 , -1}, /* TIOC1B */
mbed_official 617:3b0e8f440867 57 {P10_9 , 2 , -1}, /* TIOC1B */
mbed_official 617:3b0e8f440867 58 {P2_1 , 6 , -1}, /* TIOC2A */
mbed_official 617:3b0e8f440867 59 {P6_2 , 6 , -1}, /* TIOC2A */
mbed_official 617:3b0e8f440867 60 {P7_6 , 7 , -1}, /* TIOC2A */
mbed_official 617:3b0e8f440867 61 {P8_14 , 4 , -1}, /* TIOC2A */
mbed_official 617:3b0e8f440867 62 {P10_10 , 2 , -1}, /* TIOC2A */
mbed_official 617:3b0e8f440867 63 {P2_2 , 6 , -1}, /* TIOC2B */
mbed_official 617:3b0e8f440867 64 {P6_3 , 6 , -1}, /* TIOC2B */
mbed_official 617:3b0e8f440867 65 {P7_7 , 7 , -1}, /* TIOC2B */
mbed_official 617:3b0e8f440867 66 {P8_15 , 4 , -1}, /* TIOC2B */
mbed_official 617:3b0e8f440867 67 {P10_11 , 2 , -1}, /* TIOC2B */
mbed_official 617:3b0e8f440867 68 {P10_11 , 2 , -1}, /* TIOC2B */
mbed_official 617:3b0e8f440867 69 {P3_4 , 6 , -1}, /* TIOC3A */
mbed_official 617:3b0e8f440867 70 {P7_8 , 7 , -1}, /* TIOC3A */
mbed_official 617:3b0e8f440867 71 {P8_10 , 4 , -1}, /* TIOC3A */
mbed_official 617:3b0e8f440867 72 {P3_5 , 6 , -1}, /* TIOC3B */
mbed_official 617:3b0e8f440867 73 {P7_9 , 7 , -1}, /* TIOC3B */
mbed_official 617:3b0e8f440867 74 {P8_11 , 4 , -1}, /* TIOC3B */
mbed_official 617:3b0e8f440867 75 {P3_6 , 6 , -1}, /* TIOC3C */
mbed_official 617:3b0e8f440867 76 {P5_3 , 6 , -1}, /* TIOC3C */
mbed_official 617:3b0e8f440867 77 {P7_10 , 7 , -1}, /* TIOC3C */
mbed_official 617:3b0e8f440867 78 {P8_12 , 4 , -1}, /* TIOC3C */
mbed_official 617:3b0e8f440867 79 {P3_7 , 6 , -1}, /* TIOC3D */
mbed_official 617:3b0e8f440867 80 {P5_4 , 6 , -1}, /* TIOC3D */
mbed_official 617:3b0e8f440867 81 {P7_11 , 7 , -1}, /* TIOC3D */
mbed_official 617:3b0e8f440867 82 {P8_13 , 4 , -1}, /* TIOC3D */
mbed_official 617:3b0e8f440867 83 {P3_8 , 6 , -1}, /* TIOC4A */
mbed_official 617:3b0e8f440867 84 {P4_4 , 3 , -1}, /* TIOC4A */
mbed_official 617:3b0e8f440867 85 {P7_12 , 7 , -1}, /* TIOC4A */
mbed_official 617:3b0e8f440867 86 {P11_0 , 2 , -1}, /* TIOC4A */
mbed_official 617:3b0e8f440867 87 {P3_9 , 6 , -1}, /* TIOC4B */
mbed_official 617:3b0e8f440867 88 {P4_5 , 3 , -1}, /* TIOC4B */
mbed_official 617:3b0e8f440867 89 {P7_13 , 7 , -1}, /* TIOC4B */
mbed_official 617:3b0e8f440867 90 {P11_1 , 2 , -1}, /* TIOC4B */
mbed_official 617:3b0e8f440867 91 {P3_10 , 6 , -1}, /* TIOC4C */
mbed_official 617:3b0e8f440867 92 {P4_6 , 3 , -1}, /* TIOC4C */
mbed_official 617:3b0e8f440867 93 {P7_14 , 7 , -1}, /* TIOC4C */
mbed_official 617:3b0e8f440867 94 {P11_2 , 2 , -1}, /* TIOC4C */
mbed_official 617:3b0e8f440867 95 {P3_11 , 6 , -1}, /* TIOC4D */
mbed_official 617:3b0e8f440867 96 {P4_7 , 3 , -1}, /* TIOC4D */
mbed_official 617:3b0e8f440867 97 {P7_15 , 7 , -1}, /* TIOC4D */
mbed_official 617:3b0e8f440867 98 {P11_3 , 2 , -1}, /* TIOC4D */
mbed_official 617:3b0e8f440867 99 {P5_7 , 1 , 1 }, /* TXOUT0M */
mbed_official 617:3b0e8f440867 100 {P5_6 , 1 , 1 }, /* TXOUT0P */
mbed_official 617:3b0e8f440867 101 {P5_5 , 1 , 1 }, /* TXOUT1M */
mbed_official 617:3b0e8f440867 102 {P5_4 , 1 , 1 }, /* TXOUT1P */
mbed_official 617:3b0e8f440867 103 {P5_3 , 1 , 1 }, /* TXOUT2M */
mbed_official 617:3b0e8f440867 104 {P5_2 , 1 , 1 }, /* TXOUT2P */
mbed_official 617:3b0e8f440867 105 {P5_1 , 1 , 1 }, /* TXCLKOUTM */
mbed_official 617:3b0e8f440867 106 {P5_0 , 1 , 1 }, /* TXCLKOUTP */
mbed_official 617:3b0e8f440867 107 {P2_11 , 4 , 0 }, /* SSITxD0 */
mbed_official 617:3b0e8f440867 108 {P4_7 , 5 , 0 }, /* SSITxD0 */
mbed_official 617:3b0e8f440867 109 {P7_4 , 6 , 0 }, /* SSITxD1 */
mbed_official 617:3b0e8f440867 110 {P10_15 , 2 , 0 }, /* SSITxD1 */
mbed_official 617:3b0e8f440867 111 {P4_15 , 6 , 0 }, /* SSITxD3 */
mbed_official 617:3b0e8f440867 112 {P7_11 , 2 , 0 }, /* SSITxD3 */
mbed_official 617:3b0e8f440867 113 {P2_7 , 4 , 0 }, /* SSITxD5 */
mbed_official 617:3b0e8f440867 114 {P4_11 , 5 , 0 }, /* SSITxD5 */
mbed_official 617:3b0e8f440867 115 {P8_10 , 8 , 0 }, /* SSITxD5 */
mbed_official 617:3b0e8f440867 116 {P3_7 , 8 , 0 }, /* WDTOVF */
mbed_official 617:3b0e8f440867 117 {NC , 0 , -1}
mbed_official 617:3b0e8f440867 118 };
mbed_official 617:3b0e8f440867 119
mbed_official 390:35c2c1cf29cd 120 void pin_function(PinName pin, int function) {
mbed_official 390:35c2c1cf29cd 121 if (pin == (PinName)NC) return;
mbed_official 390:35c2c1cf29cd 122
mbed_official 390:35c2c1cf29cd 123 int n = pin >> 4;
mbed_official 390:35c2c1cf29cd 124 int bitmask = 1<<(pin & 0xf);
mbed_official 617:3b0e8f440867 125 const PinFunc * Pipc_0_func = PIPC_0_tbl;
mbed_official 617:3b0e8f440867 126 int pipc_data = 1;
mbed_official 390:35c2c1cf29cd 127
mbed_official 409:a95c696104d3 128 if (gpio_multi_guard != pin) {
mbed_official 409:a95c696104d3 129 if (function == 0) {
mbed_official 409:a95c696104d3 130 // means GPIO mode
mbed_official 409:a95c696104d3 131 *PMC(n) &= ~bitmask;
mbed_official 409:a95c696104d3 132 } else {
mbed_official 409:a95c696104d3 133 // alt-function mode
mbed_official 409:a95c696104d3 134 --function;
mbed_official 390:35c2c1cf29cd 135
mbed_official 409:a95c696104d3 136 if (function & (1 << 2)) { *PFCAE(n) |= bitmask;}else { *PFCAE(n) &= ~bitmask;}
mbed_official 409:a95c696104d3 137 if (function & (1 << 1)) { *PFCE(n) |= bitmask;}else { *PFCE(n) &= ~bitmask;}
mbed_official 409:a95c696104d3 138 if (function & (1 << 0)) { *PFC(n) |= bitmask;}else { *PFC(n) &= ~bitmask;}
mbed_official 617:3b0e8f440867 139
mbed_official 617:3b0e8f440867 140 while (Pipc_0_func->pin != NC) {
mbed_official 617:3b0e8f440867 141 if ((Pipc_0_func->pin == pin) && ((Pipc_0_func->function - 1) == function)) {
mbed_official 617:3b0e8f440867 142 pipc_data = 0;
mbed_official 617:3b0e8f440867 143 if (Pipc_0_func->pm == 0) {
mbed_official 617:3b0e8f440867 144 *PMSR(n) = (bitmask << 16) | 0;
mbed_official 617:3b0e8f440867 145 } else if (Pipc_0_func->pm == 1) {
mbed_official 617:3b0e8f440867 146 *PMSR(n) = (bitmask << 16) | bitmask;
mbed_official 617:3b0e8f440867 147 } else {
mbed_official 617:3b0e8f440867 148 // Do Nothing
mbed_official 617:3b0e8f440867 149 }
mbed_official 617:3b0e8f440867 150 break;
mbed_official 617:3b0e8f440867 151 }
mbed_official 617:3b0e8f440867 152 Pipc_0_func++;
mbed_official 617:3b0e8f440867 153 }
mbed_official 617:3b0e8f440867 154 if (pipc_data == 1) {
mbed_official 409:a95c696104d3 155 *PIPC(n) |= bitmask;
mbed_official 617:3b0e8f440867 156 } else {
mbed_official 617:3b0e8f440867 157 *PIPC(n) &= ~bitmask;
mbed_official 617:3b0e8f440867 158 }
mbed_official 390:35c2c1cf29cd 159
mbed_official 409:a95c696104d3 160 if (P1_0 <= pin && pin <= P1_7 && function == 0) {
mbed_official 409:a95c696104d3 161 *PBDC(n) |= bitmask;
mbed_official 409:a95c696104d3 162 }
mbed_official 443:ed48b4122bfb 163 *PMC(n) |= bitmask;
mbed_official 390:35c2c1cf29cd 164 }
mbed_official 409:a95c696104d3 165 } else {
mbed_official 409:a95c696104d3 166 gpio_multi_guard = (PinName)NC;
mbed_official 390:35c2c1cf29cd 167 }
mbed_official 390:35c2c1cf29cd 168 }
mbed_official 390:35c2c1cf29cd 169
mbed_official 390:35c2c1cf29cd 170 void pin_mode(PinName pin, PinMode mode) {
mbed_official 390:35c2c1cf29cd 171 // if (pin == (PinName)NC) { return; }
mbed_official 390:35c2c1cf29cd 172 }