mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_TOSHIBA/TARGET_TMPM3HQ/pinmap.c
- Committer:
- AnnaBridge
- Date:
- 2019-02-20
- Revision:
- 189:f392fc9709a3
File content as of revision 189:f392fc9709a3:
/* mbed Microcontroller Library * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2018 All rights reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "mbed_assert.h" #include "pinmap.h" #include "gpio_include.h" void pin_function(PinName pin, int function) { int port = 0; uint8_t bit = 0; uint8_t func = 0; uint8_t dir = 0; uint32_t port_base = 0; uint32_t mode_base = 0; // Assert that pin is valid MBED_ASSERT(pin != NC); // Calculate pin function and pin direction func = PIN_FUNC(function); dir = PIN_DIR(function); // Calculate port and pin position port = PIN_PORT(pin); bit = PIN_POS(pin); port_base = BITBAND_PORT_BASE(port); // Initialization PxFR OFF mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7); BITBAND_PORT_CLR(mode_base, bit); // Initialize Input mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE); BITBAND_PORT_SET(mode_base, bit); switch (func) { case 0: break; case 1: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1); break; case 2: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2); break; case 3: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3); break; case 4: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4); break; case 5: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5); break; case 6: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6); break; case 7: mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7); break; default: break; } if (func != 0) { BITBAND_PORT_SET(mode_base, bit); } if (dir == PIN_OUTPUT) { mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE); BITBAND_PORT_CLR(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR); BITBAND_PORT_SET(mode_base, bit); } else if (dir == PIN_INOUT) { mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE); BITBAND_PORT_SET(mode_base, bit); mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR); BITBAND_PORT_SET(mode_base, bit); } } void pin_mode(PinName pin, PinMode mode) { int port = 0; uint8_t bit = 0; uint8_t val = 0; // Assert that pin is valid MBED_ASSERT(pin != NC); // Check if function is in range if (mode > OpenDrain) { return; } // Calculate port and pin position port = PIN_PORT(pin); bit = PIN_POS(pin); val = (1 << bit); switch (port) { case PortA: if (mode == OpenDrain) TSB_PA->OD |= val; else if (mode == PullUp) TSB_PA->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PA->PDN |= val; break; case PortB: if (mode == OpenDrain) TSB_PB->OD |= val; else if (mode == PullUp) TSB_PB->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PB->PDN |= val; break; case PortC: if (mode == OpenDrain) TSB_PC->OD |= val; else if (mode == PullUp) TSB_PC->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PC->PDN |= val; break; case PortD: if (mode == OpenDrain) TSB_PD->OD |= val; else if (mode == PullUp) TSB_PD->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PD->PDN |= val; break; case PortE: if (mode == OpenDrain) TSB_PE->OD |= val; else if (mode == PullUp) TSB_PE->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PE->PDN |= val; break; case PortF: if (mode == OpenDrain) TSB_PF->OD |= val; else if (mode == PullUp) TSB_PF->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PF->PDN |= val; break; case PortG: if (mode == OpenDrain) TSB_PG->OD |= val; else if (mode == PullUp) TSB_PG->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PG->PDN |= val; break; case PortH: if (mode == PullDown) TSB_PH->PDN |= val; break; case PortJ: if (mode == OpenDrain) TSB_PJ->OD |= val; else if (mode == PullUp) TSB_PJ->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PJ->PDN |= val; break; case PortK: if (mode == OpenDrain) TSB_PK->OD |= val; else if (mode == PullUp) TSB_PK->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PK->PDN |= val; break; case PortL: if (mode == OpenDrain) TSB_PL->OD |= val; else if (mode == PullUp) TSB_PL->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PL->PDN |= val; break; case PortM: if (mode == OpenDrain) TSB_PM->OD |= val; else if (mode == PullUp) TSB_PM->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PM->PDN |= val; break; case PortN: if (mode == OpenDrain) TSB_PN->OD |= val; else if (mode == PullUp) TSB_PN->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PN->PDN |= val; break; case PortP: if (mode == OpenDrain) TSB_PP->OD |= val; else if (mode == PullUp) TSB_PP->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PP->PDN |= val; break; case PortR: if (mode == OpenDrain) TSB_PR->OD |= val; else if (mode == PullUp) TSB_PR->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PR->PDN |= val; break; case PortT: if (mode == OpenDrain) TSB_PT->OD |= val; else if (mode == PullUp) TSB_PT->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PT->PDN |= val; break; case PortU: if (mode == OpenDrain) TSB_PU->OD |= val; else if (mode == PullUp) TSB_PU->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PU->PDN |= val; break; case PortV: if (mode == OpenDrain) TSB_PV->OD |= val; else if (mode == PullUp) TSB_PV->PUP |= val; else if (mode == PullDown || mode == PullDefault) TSB_PV->PDN |= val; break; default: break; } }