mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
Diff: targets/TARGET_TOSHIBA/TARGET_TMPM3HQ/pinmap.c
- Revision:
- 189:f392fc9709a3
diff -r bcfe06ba3d64 -r f392fc9709a3 targets/TARGET_TOSHIBA/TARGET_TMPM3HQ/pinmap.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/targets/TARGET_TOSHIBA/TARGET_TMPM3HQ/pinmap.c Wed Feb 20 22:31:08 2019 +0000 @@ -0,0 +1,218 @@ +/* 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; + } +}