SilentSensors / mbed-dev

Fork of mbed-dev by mbed official

Committer:
AnnaBridge
Date:
Thu Sep 06 13:40:20 2018 +0100
Revision:
187:0387e8f68319
mbed-dev library. Release version 163

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 187:0387e8f68319 1 /* mbed Microcontroller Library
AnnaBridge 187:0387e8f68319 2 * Copyright (c) 2015-2017 Nuvoton
AnnaBridge 187:0387e8f68319 3 *
AnnaBridge 187:0387e8f68319 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 187:0387e8f68319 5 * you may not use this file except in compliance with the License.
AnnaBridge 187:0387e8f68319 6 * You may obtain a copy of the License at
AnnaBridge 187:0387e8f68319 7 *
AnnaBridge 187:0387e8f68319 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 187:0387e8f68319 9 *
AnnaBridge 187:0387e8f68319 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 187:0387e8f68319 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 187:0387e8f68319 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 187:0387e8f68319 13 * See the License for the specific language governing permissions and
AnnaBridge 187:0387e8f68319 14 * limitations under the License.
AnnaBridge 187:0387e8f68319 15 */
AnnaBridge 187:0387e8f68319 16
AnnaBridge 187:0387e8f68319 17 #include "gpio_api.h"
AnnaBridge 187:0387e8f68319 18 #include "mbed_assert.h"
AnnaBridge 187:0387e8f68319 19 #include "pinmap.h"
AnnaBridge 187:0387e8f68319 20 #include "mbed_error.h"
AnnaBridge 187:0387e8f68319 21 #include "PeripheralPins.h"
AnnaBridge 187:0387e8f68319 22
AnnaBridge 187:0387e8f68319 23 uint32_t gpio_set(PinName pin)
AnnaBridge 187:0387e8f68319 24 {
AnnaBridge 187:0387e8f68319 25 if (pin == (PinName) NC) {
AnnaBridge 187:0387e8f68319 26 return 0;
AnnaBridge 187:0387e8f68319 27 }
AnnaBridge 187:0387e8f68319 28
AnnaBridge 187:0387e8f68319 29 uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
AnnaBridge 187:0387e8f68319 30
AnnaBridge 187:0387e8f68319 31 #if 1
AnnaBridge 187:0387e8f68319 32 pin_function(pin, 0 << NU_MFP_POS(pin_index));
AnnaBridge 187:0387e8f68319 33 #else
AnnaBridge 187:0387e8f68319 34 pinmap_pinout(pin, PinMap_GPIO);
AnnaBridge 187:0387e8f68319 35 #endif
AnnaBridge 187:0387e8f68319 36
AnnaBridge 187:0387e8f68319 37 return (uint32_t)(1 << pin_index); // Return the pin mask
AnnaBridge 187:0387e8f68319 38 }
AnnaBridge 187:0387e8f68319 39
AnnaBridge 187:0387e8f68319 40 int gpio_is_connected(const gpio_t *obj)
AnnaBridge 187:0387e8f68319 41 {
AnnaBridge 187:0387e8f68319 42 return (obj->pin != (PinName) NC);
AnnaBridge 187:0387e8f68319 43 }
AnnaBridge 187:0387e8f68319 44
AnnaBridge 187:0387e8f68319 45 void gpio_init(gpio_t *obj, PinName pin)
AnnaBridge 187:0387e8f68319 46 {
AnnaBridge 187:0387e8f68319 47 obj->pin = pin;
AnnaBridge 187:0387e8f68319 48
AnnaBridge 187:0387e8f68319 49 if (obj->pin == (PinName) NC) {
AnnaBridge 187:0387e8f68319 50 return;
AnnaBridge 187:0387e8f68319 51 }
AnnaBridge 187:0387e8f68319 52
AnnaBridge 187:0387e8f68319 53 obj->mask = gpio_set(pin);
AnnaBridge 187:0387e8f68319 54 }
AnnaBridge 187:0387e8f68319 55
AnnaBridge 187:0387e8f68319 56 void gpio_mode(gpio_t *obj, PinMode mode)
AnnaBridge 187:0387e8f68319 57 {
AnnaBridge 187:0387e8f68319 58 if (obj->pin == (PinName) NC) {
AnnaBridge 187:0387e8f68319 59 return;
AnnaBridge 187:0387e8f68319 60 }
AnnaBridge 187:0387e8f68319 61
AnnaBridge 187:0387e8f68319 62 pin_mode(obj->pin, mode);
AnnaBridge 187:0387e8f68319 63 }
AnnaBridge 187:0387e8f68319 64
AnnaBridge 187:0387e8f68319 65 void gpio_dir(gpio_t *obj, PinDirection direction)
AnnaBridge 187:0387e8f68319 66 {
AnnaBridge 187:0387e8f68319 67 if (obj->pin == (PinName) NC) {
AnnaBridge 187:0387e8f68319 68 return;
AnnaBridge 187:0387e8f68319 69 }
AnnaBridge 187:0387e8f68319 70
AnnaBridge 187:0387e8f68319 71 uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin);
AnnaBridge 187:0387e8f68319 72 uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin);
AnnaBridge 187:0387e8f68319 73 GPIO_T *gpio_base = NU_PORT_BASE(port_index);
AnnaBridge 187:0387e8f68319 74
AnnaBridge 187:0387e8f68319 75 uint32_t mode_intern = GPIO_MODE_INPUT;
AnnaBridge 187:0387e8f68319 76
AnnaBridge 187:0387e8f68319 77 switch (direction) {
AnnaBridge 187:0387e8f68319 78 case PIN_INPUT:
AnnaBridge 187:0387e8f68319 79 mode_intern = GPIO_MODE_INPUT;
AnnaBridge 187:0387e8f68319 80 break;
AnnaBridge 187:0387e8f68319 81
AnnaBridge 187:0387e8f68319 82 case PIN_OUTPUT:
AnnaBridge 187:0387e8f68319 83 mode_intern = GPIO_MODE_OUTPUT;
AnnaBridge 187:0387e8f68319 84 break;
AnnaBridge 187:0387e8f68319 85
AnnaBridge 187:0387e8f68319 86 default:
AnnaBridge 187:0387e8f68319 87 return;
AnnaBridge 187:0387e8f68319 88 }
AnnaBridge 187:0387e8f68319 89
AnnaBridge 187:0387e8f68319 90 GPIO_SetMode(gpio_base, 1 << pin_index, mode_intern);
AnnaBridge 187:0387e8f68319 91 }