added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

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