added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
119:3921aeca8633
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

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