mbed library sources. Supersedes mbed-src.

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

Committer:
AnnaBridge
Date:
Thu Sep 06 13:40:20 2018 +0100
Revision:
187:0387e8f68319
Child:
188:bcfe06ba3d64
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) 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 <arm_cmse.h>
AnnaBridge 187:0387e8f68319 18 #include "mbed_assert.h"
AnnaBridge 187:0387e8f68319 19 #include "pinmap.h"
AnnaBridge 187:0387e8f68319 20 #include "PortNames.h"
AnnaBridge 187:0387e8f68319 21 #include "mbed_error.h"
AnnaBridge 187:0387e8f68319 22 #include "partition_M2351.h"
AnnaBridge 187:0387e8f68319 23 #include "hal_secure.h"
AnnaBridge 187:0387e8f68319 24
AnnaBridge 187:0387e8f68319 25 /**
AnnaBridge 187:0387e8f68319 26 * Configure pin multi-function
AnnaBridge 187:0387e8f68319 27 */
AnnaBridge 187:0387e8f68319 28 void pin_function(PinName pin, int data)
AnnaBridge 187:0387e8f68319 29 {
AnnaBridge 187:0387e8f68319 30 pin_function_s(pin, data);
AnnaBridge 187:0387e8f68319 31 }
AnnaBridge 187:0387e8f68319 32
AnnaBridge 187:0387e8f68319 33 /**
AnnaBridge 187:0387e8f68319 34 * Configure pin pull-up/pull-down
AnnaBridge 187:0387e8f68319 35 */
AnnaBridge 187:0387e8f68319 36 void pin_mode(PinName pin, PinMode mode)
AnnaBridge 187:0387e8f68319 37 {
AnnaBridge 187:0387e8f68319 38 MBED_ASSERT(pin != (PinName)NC);
AnnaBridge 187:0387e8f68319 39 uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
AnnaBridge 187:0387e8f68319 40 uint32_t port_index = NU_PINNAME_TO_PORT(pin);
AnnaBridge 187:0387e8f68319 41 GPIO_T *gpio_base = NU_PORT_BASE(port_index);
AnnaBridge 187:0387e8f68319 42
AnnaBridge 187:0387e8f68319 43 uint32_t mode_intern = GPIO_MODE_INPUT;
AnnaBridge 187:0387e8f68319 44
AnnaBridge 187:0387e8f68319 45 switch (mode) {
AnnaBridge 187:0387e8f68319 46 case PullUp:
AnnaBridge 187:0387e8f68319 47 mode_intern = GPIO_MODE_INPUT;
AnnaBridge 187:0387e8f68319 48 break;
AnnaBridge 187:0387e8f68319 49
AnnaBridge 187:0387e8f68319 50 case PullDown:
AnnaBridge 187:0387e8f68319 51 case PullNone:
AnnaBridge 187:0387e8f68319 52 // NOTE: Not support
AnnaBridge 187:0387e8f68319 53 return;
AnnaBridge 187:0387e8f68319 54
AnnaBridge 187:0387e8f68319 55 case PushPull:
AnnaBridge 187:0387e8f68319 56 mode_intern = GPIO_MODE_OUTPUT;
AnnaBridge 187:0387e8f68319 57 break;
AnnaBridge 187:0387e8f68319 58
AnnaBridge 187:0387e8f68319 59 case OpenDrain:
AnnaBridge 187:0387e8f68319 60 mode_intern = GPIO_MODE_OPEN_DRAIN;
AnnaBridge 187:0387e8f68319 61 break;
AnnaBridge 187:0387e8f68319 62
AnnaBridge 187:0387e8f68319 63 case Quasi:
AnnaBridge 187:0387e8f68319 64 mode_intern = GPIO_MODE_QUASI;
AnnaBridge 187:0387e8f68319 65 break;
AnnaBridge 187:0387e8f68319 66 }
AnnaBridge 187:0387e8f68319 67
AnnaBridge 187:0387e8f68319 68 GPIO_SetMode(gpio_base, 1 << pin_index, mode_intern);
AnnaBridge 187:0387e8f68319 69 }
AnnaBridge 187:0387e8f68319 70
AnnaBridge 187:0387e8f68319 71 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
AnnaBridge 187:0387e8f68319 72 __NONSECURE_ENTRY
AnnaBridge 187:0387e8f68319 73 void pin_function_s(int32_t pin, int32_t data)
AnnaBridge 187:0387e8f68319 74 {
AnnaBridge 187:0387e8f68319 75 MBED_ASSERT(pin != (PinName)NC);
AnnaBridge 187:0387e8f68319 76 uint32_t pin_index = NU_PINNAME_TO_PIN(pin);
AnnaBridge 187:0387e8f68319 77 uint32_t port_index = NU_PINNAME_TO_PORT(pin);
AnnaBridge 187:0387e8f68319 78
AnnaBridge 187:0387e8f68319 79 /* Guard access to secure GPIO from non-secure domain */
AnnaBridge 187:0387e8f68319 80 if (cmse_nonsecure_caller() &&
AnnaBridge 187:0387e8f68319 81 (! (SCU_INIT_IONSSET_VAL & (1 << (port_index + 0))))) {
AnnaBridge 187:0387e8f68319 82 error("Non-secure domain tries to control secure or undefined GPIO.");
AnnaBridge 187:0387e8f68319 83 }
AnnaBridge 187:0387e8f68319 84
AnnaBridge 187:0387e8f68319 85 __IO uint32_t *GPx_MFPx = ((__IO uint32_t *) &SYS->GPA_MFPL) + port_index * 2 + (pin_index / 8);
AnnaBridge 187:0387e8f68319 86 uint32_t MFP_Msk = NU_MFP_MSK(pin_index);
AnnaBridge 187:0387e8f68319 87
AnnaBridge 187:0387e8f68319 88 // E.g.: SYS->GPA_MFPL = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_SC0_CD ;
AnnaBridge 187:0387e8f68319 89 *GPx_MFPx = (*GPx_MFPx & (~MFP_Msk)) | data;
AnnaBridge 187:0387e8f68319 90 }
AnnaBridge 187:0387e8f68319 91 #endif