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
Parent:
187:0387e8f68319
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 187:0387e8f68319 1 /* mbed Microcontroller Library
AnnaBridge 187:0387e8f68319 2 * Copyright (c) 2017-2018 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 "port_api.h"
AnnaBridge 187:0387e8f68319 18 #include "gpio_api.h"
AnnaBridge 187:0387e8f68319 19 #include "pinmap.h"
AnnaBridge 187:0387e8f68319 20 #include "mbed_error.h"
AnnaBridge 187:0387e8f68319 21 #include "partition_M2351.h"
AnnaBridge 187:0387e8f68319 22
AnnaBridge 187:0387e8f68319 23 #if DEVICE_PORTIN || DEVICE_PORTOUT || DEVICE_PORTINOUT
AnnaBridge 187:0387e8f68319 24
AnnaBridge 187:0387e8f68319 25 PinName port_pin(PortName port, int pin_n)
AnnaBridge 187:0387e8f68319 26 {
AnnaBridge 187:0387e8f68319 27 return (PinName) NU_PORT_N_PIN_TO_PINNAME(port, pin_n);
AnnaBridge 187:0387e8f68319 28 }
AnnaBridge 187:0387e8f68319 29
AnnaBridge 187:0387e8f68319 30 void port_init(port_t *obj, PortName port, int mask, PinDirection dir)
AnnaBridge 187:0387e8f68319 31 {
AnnaBridge 187:0387e8f68319 32 obj->port = port;
AnnaBridge 187:0387e8f68319 33 obj->mask = mask;
AnnaBridge 187:0387e8f68319 34 obj->direction = dir;
AnnaBridge 187:0387e8f68319 35
AnnaBridge 187:0387e8f68319 36 uint32_t i;
AnnaBridge 187:0387e8f68319 37 obj->direction = dir;
AnnaBridge 187:0387e8f68319 38 for (i = 0; i < GPIO_PIN_MAX; i++) {
AnnaBridge 187:0387e8f68319 39 if (obj->mask & (1 << i)) {
AnnaBridge 187:0387e8f68319 40 gpio_set(port_pin(port, i));
AnnaBridge 187:0387e8f68319 41 }
AnnaBridge 187:0387e8f68319 42 }
AnnaBridge 187:0387e8f68319 43
AnnaBridge 187:0387e8f68319 44 port_dir(obj, dir);
AnnaBridge 187:0387e8f68319 45 }
AnnaBridge 187:0387e8f68319 46
AnnaBridge 187:0387e8f68319 47 void port_dir(port_t *obj, PinDirection dir)
AnnaBridge 187:0387e8f68319 48 {
AnnaBridge 187:0387e8f68319 49 uint32_t i;
AnnaBridge 187:0387e8f68319 50 obj->direction = dir;
AnnaBridge 187:0387e8f68319 51 for (i = 0; i < GPIO_PIN_MAX; i++) {
AnnaBridge 187:0387e8f68319 52 if (obj->mask & (1 << i)) {
AnnaBridge 187:0387e8f68319 53 if (dir == PIN_OUTPUT) {
AnnaBridge 187:0387e8f68319 54 GPIO_SetMode(NU_PORT_BASE(obj->port), 1 << i, GPIO_MODE_OUTPUT);
AnnaBridge 187:0387e8f68319 55 } else { // PIN_INPUT
AnnaBridge 187:0387e8f68319 56 GPIO_SetMode(NU_PORT_BASE(obj->port), 1 << i, GPIO_MODE_INPUT);
AnnaBridge 187:0387e8f68319 57 }
AnnaBridge 187:0387e8f68319 58 }
AnnaBridge 187:0387e8f68319 59 }
AnnaBridge 187:0387e8f68319 60 }
AnnaBridge 187:0387e8f68319 61
AnnaBridge 187:0387e8f68319 62 void port_mode(port_t *obj, PinMode mode)
AnnaBridge 187:0387e8f68319 63 {
AnnaBridge 187:0387e8f68319 64 uint32_t i;
AnnaBridge 187:0387e8f68319 65
AnnaBridge 187:0387e8f68319 66 for (i = 0; i < GPIO_PIN_MAX; i++) {
AnnaBridge 187:0387e8f68319 67 if (obj->mask & (1 << i)) {
AnnaBridge 187:0387e8f68319 68 pin_mode(port_pin(obj->port, i), mode);
AnnaBridge 187:0387e8f68319 69 }
AnnaBridge 187:0387e8f68319 70 }
AnnaBridge 187:0387e8f68319 71 }
AnnaBridge 187:0387e8f68319 72
AnnaBridge 187:0387e8f68319 73 void port_write(port_t *obj, int value)
AnnaBridge 187:0387e8f68319 74 {
AnnaBridge 187:0387e8f68319 75 uint32_t i;
AnnaBridge 187:0387e8f68319 76 uint32_t port_index = obj->port;
AnnaBridge 187:0387e8f68319 77
AnnaBridge 187:0387e8f68319 78 for (i = 0; i < GPIO_PIN_MAX; i++) {
AnnaBridge 187:0387e8f68319 79 if (obj->mask & (1 << i)) {
AnnaBridge 187:0387e8f68319 80 NU_SET_GPIO_PIN_DATA(port_index, i, (value & obj->mask) ? 1 : 0);
AnnaBridge 187:0387e8f68319 81 }
AnnaBridge 187:0387e8f68319 82 }
AnnaBridge 187:0387e8f68319 83 }
AnnaBridge 187:0387e8f68319 84
AnnaBridge 187:0387e8f68319 85 int port_read(port_t *obj)
AnnaBridge 187:0387e8f68319 86 {
AnnaBridge 187:0387e8f68319 87 uint32_t i;
AnnaBridge 187:0387e8f68319 88 uint32_t port_index = obj->port;
AnnaBridge 187:0387e8f68319 89 int value = 0;
AnnaBridge 187:0387e8f68319 90
AnnaBridge 187:0387e8f68319 91 for (i = 0; i < GPIO_PIN_MAX; i++) {
AnnaBridge 187:0387e8f68319 92 if (obj->mask & (1 << i)) {
AnnaBridge 187:0387e8f68319 93 value = value | (NU_GET_GPIO_PIN_DATA(port_index, i) << i);
AnnaBridge 187:0387e8f68319 94 }
AnnaBridge 187:0387e8f68319 95 }
AnnaBridge 187:0387e8f68319 96
AnnaBridge 187:0387e8f68319 97 return value;
AnnaBridge 187:0387e8f68319 98 }
AnnaBridge 187:0387e8f68319 99
AnnaBridge 187:0387e8f68319 100 #endif