mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /* mbed Microcontroller Library
AnnaBridge 189:f392fc9709a3 2 * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2018 All rights reserved
AnnaBridge 189:f392fc9709a3 3 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 189:f392fc9709a3 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 189:f392fc9709a3 5 * you may not use this file except in compliance with the License.
AnnaBridge 189:f392fc9709a3 6 * You may obtain a copy of the License at
AnnaBridge 189:f392fc9709a3 7 *
AnnaBridge 189:f392fc9709a3 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 189:f392fc9709a3 9 *
AnnaBridge 189:f392fc9709a3 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 189:f392fc9709a3 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 189:f392fc9709a3 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 189:f392fc9709a3 13 * See the License for the specific language governing permissions and
AnnaBridge 189:f392fc9709a3 14 * limitations under the License.
AnnaBridge 189:f392fc9709a3 15 */
AnnaBridge 189:f392fc9709a3 16 #include "mbed_assert.h"
AnnaBridge 189:f392fc9709a3 17 #include "pinmap.h"
AnnaBridge 189:f392fc9709a3 18 #include "gpio_include.h"
AnnaBridge 189:f392fc9709a3 19
AnnaBridge 189:f392fc9709a3 20 void pin_function(PinName pin, int function)
AnnaBridge 189:f392fc9709a3 21 {
AnnaBridge 189:f392fc9709a3 22 int port = 0;
AnnaBridge 189:f392fc9709a3 23 uint8_t bit = 0;
AnnaBridge 189:f392fc9709a3 24 uint8_t func = 0;
AnnaBridge 189:f392fc9709a3 25 uint8_t dir = 0;
AnnaBridge 189:f392fc9709a3 26 uint32_t port_base = 0;
AnnaBridge 189:f392fc9709a3 27 uint32_t mode_base = 0;
AnnaBridge 189:f392fc9709a3 28
AnnaBridge 189:f392fc9709a3 29 /* Assert that pin is valid*/
AnnaBridge 189:f392fc9709a3 30 MBED_ASSERT(pin != NC);
AnnaBridge 189:f392fc9709a3 31
AnnaBridge 189:f392fc9709a3 32 /* Calculate pin function and pin direction*/
AnnaBridge 189:f392fc9709a3 33 func = PIN_FUNC(function);
AnnaBridge 189:f392fc9709a3 34 dir = PIN_DIR(function);
AnnaBridge 189:f392fc9709a3 35
AnnaBridge 189:f392fc9709a3 36 /* Calculate port and pin position*/
AnnaBridge 189:f392fc9709a3 37 port = PIN_PORT(pin);
AnnaBridge 189:f392fc9709a3 38 bit = PIN_POS(pin);
AnnaBridge 189:f392fc9709a3 39
AnnaBridge 189:f392fc9709a3 40 port_base = BITBAND_PORT_BASE(port);
AnnaBridge 189:f392fc9709a3 41 /* Initialization PxFR OFF */
AnnaBridge 189:f392fc9709a3 42 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1);
AnnaBridge 189:f392fc9709a3 43 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 44 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2);
AnnaBridge 189:f392fc9709a3 45 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 46 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3);
AnnaBridge 189:f392fc9709a3 47 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 48 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4);
AnnaBridge 189:f392fc9709a3 49 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 50 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5);
AnnaBridge 189:f392fc9709a3 51 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 52 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6);
AnnaBridge 189:f392fc9709a3 53 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 54 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7);
AnnaBridge 189:f392fc9709a3 55 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 56
AnnaBridge 189:f392fc9709a3 57 /* Initialize Input */
AnnaBridge 189:f392fc9709a3 58 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
AnnaBridge 189:f392fc9709a3 59 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 60 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
AnnaBridge 189:f392fc9709a3 61 BITBAND_PORT_SET(mode_base, bit);
AnnaBridge 189:f392fc9709a3 62 switch (func) {
AnnaBridge 189:f392fc9709a3 63 case 0:
AnnaBridge 189:f392fc9709a3 64 break;
AnnaBridge 189:f392fc9709a3 65 case 1:
AnnaBridge 189:f392fc9709a3 66 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1);
AnnaBridge 189:f392fc9709a3 67 break;
AnnaBridge 189:f392fc9709a3 68 case 2:
AnnaBridge 189:f392fc9709a3 69 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2);
AnnaBridge 189:f392fc9709a3 70 break;
AnnaBridge 189:f392fc9709a3 71 case 3:
AnnaBridge 189:f392fc9709a3 72 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3);
AnnaBridge 189:f392fc9709a3 73 break;
AnnaBridge 189:f392fc9709a3 74 case 4:
AnnaBridge 189:f392fc9709a3 75 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4);
AnnaBridge 189:f392fc9709a3 76 break;
AnnaBridge 189:f392fc9709a3 77 case 5:
AnnaBridge 189:f392fc9709a3 78 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5);
AnnaBridge 189:f392fc9709a3 79 break;
AnnaBridge 189:f392fc9709a3 80 case 6:
AnnaBridge 189:f392fc9709a3 81 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6);
AnnaBridge 189:f392fc9709a3 82 break;
AnnaBridge 189:f392fc9709a3 83 case 7:
AnnaBridge 189:f392fc9709a3 84 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7);
AnnaBridge 189:f392fc9709a3 85 break;
AnnaBridge 189:f392fc9709a3 86 default:
AnnaBridge 189:f392fc9709a3 87 break;
AnnaBridge 189:f392fc9709a3 88 }
AnnaBridge 189:f392fc9709a3 89 if (func != 0)
AnnaBridge 189:f392fc9709a3 90 BITBAND_PORT_SET(mode_base, bit);
AnnaBridge 189:f392fc9709a3 91 if(dir == PIN_OUTPUT) {
AnnaBridge 189:f392fc9709a3 92 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
AnnaBridge 189:f392fc9709a3 93 BITBAND_PORT_CLR(mode_base, bit);
AnnaBridge 189:f392fc9709a3 94 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
AnnaBridge 189:f392fc9709a3 95 BITBAND_PORT_SET(mode_base, bit);
AnnaBridge 189:f392fc9709a3 96 } else if(dir == PIN_INOUT) {
AnnaBridge 189:f392fc9709a3 97 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
AnnaBridge 189:f392fc9709a3 98 BITBAND_PORT_SET(mode_base, bit);
AnnaBridge 189:f392fc9709a3 99 mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
AnnaBridge 189:f392fc9709a3 100 BITBAND_PORT_SET(mode_base, bit);
AnnaBridge 189:f392fc9709a3 101 }
AnnaBridge 189:f392fc9709a3 102 }
AnnaBridge 189:f392fc9709a3 103
AnnaBridge 189:f392fc9709a3 104 void pin_mode(PinName pin, PinMode mode)
AnnaBridge 189:f392fc9709a3 105 {
AnnaBridge 189:f392fc9709a3 106 int port = 0;
AnnaBridge 189:f392fc9709a3 107 uint8_t bit = 0;
AnnaBridge 189:f392fc9709a3 108 uint8_t val = 0;
AnnaBridge 189:f392fc9709a3 109
AnnaBridge 189:f392fc9709a3 110 /* Assert that pin is valid*/
AnnaBridge 189:f392fc9709a3 111 MBED_ASSERT(pin != NC);
AnnaBridge 189:f392fc9709a3 112
AnnaBridge 189:f392fc9709a3 113 /* Check if function is in range*/
AnnaBridge 189:f392fc9709a3 114 if (mode > OpenDrain) {
AnnaBridge 189:f392fc9709a3 115 return;
AnnaBridge 189:f392fc9709a3 116 }
AnnaBridge 189:f392fc9709a3 117
AnnaBridge 189:f392fc9709a3 118 /* Calculate port and pin position*/
AnnaBridge 189:f392fc9709a3 119 port = PIN_PORT(pin);
AnnaBridge 189:f392fc9709a3 120 bit = PIN_POS(pin);
AnnaBridge 189:f392fc9709a3 121 val = (1 << bit);
AnnaBridge 189:f392fc9709a3 122
AnnaBridge 189:f392fc9709a3 123 switch (port) {
AnnaBridge 189:f392fc9709a3 124 case PortA:
AnnaBridge 189:f392fc9709a3 125 if(mode == OpenDrain) TSB_PA->OD = val;
AnnaBridge 189:f392fc9709a3 126 else if(mode == PullUp) TSB_PA->PUP = val;
AnnaBridge 189:f392fc9709a3 127 else if(mode == PullDown || mode == PullDefault) TSB_PA->PDN = val;
AnnaBridge 189:f392fc9709a3 128 break;
AnnaBridge 189:f392fc9709a3 129 case PortB:
AnnaBridge 189:f392fc9709a3 130 if(mode == OpenDrain) TSB_PB->OD = val;
AnnaBridge 189:f392fc9709a3 131 else if(mode == PullUp) TSB_PB->PUP = val;
AnnaBridge 189:f392fc9709a3 132 else if(mode == PullDown || mode == PullDefault) TSB_PB->PDN = val;
AnnaBridge 189:f392fc9709a3 133 break;
AnnaBridge 189:f392fc9709a3 134 case PortC:
AnnaBridge 189:f392fc9709a3 135 if(mode == OpenDrain) TSB_PC->OD = val;
AnnaBridge 189:f392fc9709a3 136 else if(mode == PullUp) TSB_PC->PUP = val;
AnnaBridge 189:f392fc9709a3 137 else if(mode == PullDown || mode == PullDefault) TSB_PC->PDN = val;
AnnaBridge 189:f392fc9709a3 138 break;
AnnaBridge 189:f392fc9709a3 139 case PortD:
AnnaBridge 189:f392fc9709a3 140 if(mode == OpenDrain) TSB_PD->OD = val;
AnnaBridge 189:f392fc9709a3 141 else if(mode == PullUp) TSB_PD->PUP = val;
AnnaBridge 189:f392fc9709a3 142 else if(mode == PullDown || mode == PullDefault) TSB_PD->PDN = val;
AnnaBridge 189:f392fc9709a3 143 break;
AnnaBridge 189:f392fc9709a3 144 case PortE:
AnnaBridge 189:f392fc9709a3 145 if(mode == OpenDrain) TSB_PE->OD = val;
AnnaBridge 189:f392fc9709a3 146 else if(mode == PullUp) TSB_PE->PUP = val;
AnnaBridge 189:f392fc9709a3 147 else if(mode == PullDown || mode == PullDefault) TSB_PE->PDN = val;
AnnaBridge 189:f392fc9709a3 148 break;
AnnaBridge 189:f392fc9709a3 149 case PortF:
AnnaBridge 189:f392fc9709a3 150 if(mode == OpenDrain) TSB_PF->OD = val;
AnnaBridge 189:f392fc9709a3 151 else if(mode == PullUp) TSB_PF->PUP = val;
AnnaBridge 189:f392fc9709a3 152 else if(mode == PullDown || mode == PullDefault) TSB_PF->PDN = val;
AnnaBridge 189:f392fc9709a3 153 break;
AnnaBridge 189:f392fc9709a3 154 case PortG:
AnnaBridge 189:f392fc9709a3 155 if(mode == OpenDrain) TSB_PG->OD = val;
AnnaBridge 189:f392fc9709a3 156 else if(mode == PullUp) TSB_PG->PUP = val;
AnnaBridge 189:f392fc9709a3 157 else if(mode == PullDown || mode == PullDefault) TSB_PG->PDN = val;
AnnaBridge 189:f392fc9709a3 158 break;
AnnaBridge 189:f392fc9709a3 159 case PortH:
AnnaBridge 189:f392fc9709a3 160 if(mode == PullDown) TSB_PH->PDN = val;
AnnaBridge 189:f392fc9709a3 161 break;
AnnaBridge 189:f392fc9709a3 162 case PortJ:
AnnaBridge 189:f392fc9709a3 163 if(mode == OpenDrain) TSB_PJ->OD = val;
AnnaBridge 189:f392fc9709a3 164 else if(mode == PullUp) TSB_PJ->PUP = val;
AnnaBridge 189:f392fc9709a3 165 else if(mode == PullDown || mode == PullDefault) TSB_PJ->PDN = val;
AnnaBridge 189:f392fc9709a3 166 break;
AnnaBridge 189:f392fc9709a3 167 case PortK:
AnnaBridge 189:f392fc9709a3 168 if(mode == OpenDrain) TSB_PK->OD = val;
AnnaBridge 189:f392fc9709a3 169 else if(mode == PullUp) TSB_PK->PUP = val;
AnnaBridge 189:f392fc9709a3 170 else if(mode == PullDown || mode == PullDefault) TSB_PK->PDN = val;
AnnaBridge 189:f392fc9709a3 171 break;
AnnaBridge 189:f392fc9709a3 172 case PortL:
AnnaBridge 189:f392fc9709a3 173 if(mode == OpenDrain) TSB_PL->OD = val;
AnnaBridge 189:f392fc9709a3 174 else if(mode == PullUp) TSB_PL->PUP = val;
AnnaBridge 189:f392fc9709a3 175 else if(mode == PullDown || mode == PullDefault) TSB_PL->PDN = val;
AnnaBridge 189:f392fc9709a3 176 break;
AnnaBridge 189:f392fc9709a3 177 case PortM:
AnnaBridge 189:f392fc9709a3 178 if(mode == OpenDrain) TSB_PM->OD = val;
AnnaBridge 189:f392fc9709a3 179 else if(mode == PullUp) TSB_PM->PUP = val;
AnnaBridge 189:f392fc9709a3 180 else if(mode == PullDown || mode == PullDefault) TSB_PM->PDN = val;
AnnaBridge 189:f392fc9709a3 181 break;
AnnaBridge 189:f392fc9709a3 182 case PortN:
AnnaBridge 189:f392fc9709a3 183 if(mode == OpenDrain) TSB_PN->OD = val;
AnnaBridge 189:f392fc9709a3 184 else if(mode == PullUp) TSB_PN->PUP = val;
AnnaBridge 189:f392fc9709a3 185 else if(mode == PullDown || mode == PullDefault) TSB_PN->PDN = val;
AnnaBridge 189:f392fc9709a3 186 break;
AnnaBridge 189:f392fc9709a3 187 case PortP:
AnnaBridge 189:f392fc9709a3 188 if(mode == OpenDrain) TSB_PP->OD = val;
AnnaBridge 189:f392fc9709a3 189 else if(mode == PullUp) TSB_PP->PUP = val;
AnnaBridge 189:f392fc9709a3 190 else if(mode == PullDown || mode == PullDefault) TSB_PP->PDN = val;
AnnaBridge 189:f392fc9709a3 191 break;
AnnaBridge 189:f392fc9709a3 192 case PortR:
AnnaBridge 189:f392fc9709a3 193 if(mode == OpenDrain) TSB_PR->OD = val;
AnnaBridge 189:f392fc9709a3 194 else if(mode == PullUp) TSB_PR->PUP = val;
AnnaBridge 189:f392fc9709a3 195 else if(mode == PullDown || mode == PullDefault) TSB_PR->PDN = val;
AnnaBridge 189:f392fc9709a3 196 break;
AnnaBridge 189:f392fc9709a3 197 case PortT:
AnnaBridge 189:f392fc9709a3 198 if(mode == OpenDrain) TSB_PT->OD = val;
AnnaBridge 189:f392fc9709a3 199 else if(mode == PullUp) TSB_PT->PUP = val;
AnnaBridge 189:f392fc9709a3 200 else if(mode == PullDown || mode == PullDefault) TSB_PT->PDN = val;
AnnaBridge 189:f392fc9709a3 201 break;
AnnaBridge 189:f392fc9709a3 202 case PortU:
AnnaBridge 189:f392fc9709a3 203 if(mode == OpenDrain) TSB_PU->OD = val;
AnnaBridge 189:f392fc9709a3 204 else if(mode == PullUp) TSB_PU->PUP = val;
AnnaBridge 189:f392fc9709a3 205 else if(mode == PullDown || mode == PullDefault) TSB_PU->PDN = val;
AnnaBridge 189:f392fc9709a3 206 break;
AnnaBridge 189:f392fc9709a3 207 case PortV:
AnnaBridge 189:f392fc9709a3 208 if(mode == OpenDrain) TSB_PV->OD = val;
AnnaBridge 189:f392fc9709a3 209 else if(mode == PullUp) TSB_PV->PUP = val;
AnnaBridge 189:f392fc9709a3 210 else if(mode == PullDown || mode == PullDefault) TSB_PV->PDN = val;
AnnaBridge 189:f392fc9709a3 211 break;
AnnaBridge 189:f392fc9709a3 212 default:
AnnaBridge 189:f392fc9709a3 213 break;
AnnaBridge 189:f392fc9709a3 214 }
AnnaBridge 189:f392fc9709a3 215 }