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:
188:bcfe06ba3d64
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 188:bcfe06ba3d64 1 /* mbed Microcontroller Library
AnnaBridge 188:bcfe06ba3d64 2 * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2018 All rights reserved
AnnaBridge 188:bcfe06ba3d64 3 *
AnnaBridge 188:bcfe06ba3d64 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 188:bcfe06ba3d64 5 * you may not use this file except in compliance with the License.
AnnaBridge 188:bcfe06ba3d64 6 * You may obtain a copy of the License at
AnnaBridge 188:bcfe06ba3d64 7 *
AnnaBridge 188:bcfe06ba3d64 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 188:bcfe06ba3d64 9 *
AnnaBridge 188:bcfe06ba3d64 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 188:bcfe06ba3d64 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 188:bcfe06ba3d64 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 188:bcfe06ba3d64 13 * See the License for the specific language governing permissions and
AnnaBridge 188:bcfe06ba3d64 14 * limitations under the License.
AnnaBridge 188:bcfe06ba3d64 15 */
AnnaBridge 188:bcfe06ba3d64 16 #include "mbed_assert.h"
AnnaBridge 188:bcfe06ba3d64 17 #include "mbed_error.h"
AnnaBridge 188:bcfe06ba3d64 18 #include "pinmap.h"
AnnaBridge 188:bcfe06ba3d64 19 #include "txz_gpio.h"
AnnaBridge 188:bcfe06ba3d64 20
AnnaBridge 188:bcfe06ba3d64 21 #define PIN_FUNC_MAX 8
AnnaBridge 188:bcfe06ba3d64 22
AnnaBridge 188:bcfe06ba3d64 23 extern _gpio_t gpio_port_add;
AnnaBridge 188:bcfe06ba3d64 24
AnnaBridge 188:bcfe06ba3d64 25 void pin_function(PinName pin, int function)
AnnaBridge 188:bcfe06ba3d64 26 {
AnnaBridge 188:bcfe06ba3d64 27 uint32_t port = 0;
AnnaBridge 188:bcfe06ba3d64 28 uint8_t bit = 0;
AnnaBridge 188:bcfe06ba3d64 29 uint8_t func = 0;
AnnaBridge 188:bcfe06ba3d64 30 uint8_t dir = 0;
AnnaBridge 188:bcfe06ba3d64 31
AnnaBridge 188:bcfe06ba3d64 32 // Assert that pin is valid
AnnaBridge 188:bcfe06ba3d64 33 MBED_ASSERT(pin != NC);
AnnaBridge 188:bcfe06ba3d64 34
AnnaBridge 188:bcfe06ba3d64 35 // Calculate pin function and pin direction
AnnaBridge 188:bcfe06ba3d64 36 func = PIN_FUNC(function);
AnnaBridge 188:bcfe06ba3d64 37 dir = PIN_DIR(function);
AnnaBridge 188:bcfe06ba3d64 38 // Calculate port and pin position
AnnaBridge 188:bcfe06ba3d64 39 port = PIN_PORT(pin);
AnnaBridge 188:bcfe06ba3d64 40 bit = PIN_POS(pin);
AnnaBridge 188:bcfe06ba3d64 41
AnnaBridge 188:bcfe06ba3d64 42 // Find function is in range or not
AnnaBridge 188:bcfe06ba3d64 43 if (func <= PIN_FUNC_MAX) {
AnnaBridge 188:bcfe06ba3d64 44 // Set pin function and direction if direction is in range
AnnaBridge 188:bcfe06ba3d64 45 switch (dir) {
AnnaBridge 188:bcfe06ba3d64 46 case PIN_INPUT:
AnnaBridge 188:bcfe06ba3d64 47 // Set pin input
AnnaBridge 188:bcfe06ba3d64 48 gpio_func(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, (uint32_t)func, GPIO_PIN_INPUT);
AnnaBridge 188:bcfe06ba3d64 49 break;
AnnaBridge 188:bcfe06ba3d64 50 case PIN_OUTPUT:
AnnaBridge 188:bcfe06ba3d64 51 // Set pin output
AnnaBridge 188:bcfe06ba3d64 52 gpio_func(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, (uint32_t)func, GPIO_PIN_OUTPUT);
AnnaBridge 188:bcfe06ba3d64 53 break;
AnnaBridge 188:bcfe06ba3d64 54 case PIN_INOUT:
AnnaBridge 188:bcfe06ba3d64 55 // Set pin both input and output
AnnaBridge 188:bcfe06ba3d64 56 gpio_func(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, (uint32_t)func, GPIO_PIN_INOUT);
AnnaBridge 188:bcfe06ba3d64 57 break;
AnnaBridge 188:bcfe06ba3d64 58 default:
AnnaBridge 188:bcfe06ba3d64 59 break;
AnnaBridge 188:bcfe06ba3d64 60 }
AnnaBridge 188:bcfe06ba3d64 61 } else {
AnnaBridge 188:bcfe06ba3d64 62 // Do nothing
AnnaBridge 188:bcfe06ba3d64 63 }
AnnaBridge 188:bcfe06ba3d64 64 }
AnnaBridge 188:bcfe06ba3d64 65
AnnaBridge 188:bcfe06ba3d64 66 void pin_mode(PinName pin, PinMode mode)
AnnaBridge 188:bcfe06ba3d64 67 {
AnnaBridge 188:bcfe06ba3d64 68 uint32_t port = 0;
AnnaBridge 188:bcfe06ba3d64 69 uint8_t bit = 0;
AnnaBridge 188:bcfe06ba3d64 70
AnnaBridge 188:bcfe06ba3d64 71 // Assert that pin is valid
AnnaBridge 188:bcfe06ba3d64 72 MBED_ASSERT(pin != NC);
AnnaBridge 188:bcfe06ba3d64 73
AnnaBridge 188:bcfe06ba3d64 74 // Check if function is in range
AnnaBridge 188:bcfe06ba3d64 75 if (mode > OpenDrain) {
AnnaBridge 188:bcfe06ba3d64 76 return;
AnnaBridge 188:bcfe06ba3d64 77 }
AnnaBridge 188:bcfe06ba3d64 78
AnnaBridge 188:bcfe06ba3d64 79 // Calculate port and pin position
AnnaBridge 188:bcfe06ba3d64 80 port = PIN_PORT(pin);
AnnaBridge 188:bcfe06ba3d64 81 bit = PIN_POS(pin);
AnnaBridge 188:bcfe06ba3d64 82
AnnaBridge 188:bcfe06ba3d64 83 // Set pin mode
AnnaBridge 188:bcfe06ba3d64 84 switch (mode) {
AnnaBridge 188:bcfe06ba3d64 85 case PullNone:
AnnaBridge 188:bcfe06ba3d64 86 gpio_SetPullUp(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, GPIO_PIN_RESET);
AnnaBridge 188:bcfe06ba3d64 87 gpio_SetPullDown(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, GPIO_PIN_RESET);
AnnaBridge 188:bcfe06ba3d64 88 gpio_SetOpenDrain(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, GPIO_PIN_RESET);
AnnaBridge 188:bcfe06ba3d64 89 break;
AnnaBridge 188:bcfe06ba3d64 90 case PullUp:
AnnaBridge 188:bcfe06ba3d64 91 gpio_SetPullUp(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, GPIO_PIN_SET);
AnnaBridge 188:bcfe06ba3d64 92 break;
AnnaBridge 188:bcfe06ba3d64 93 case PullDown:
AnnaBridge 188:bcfe06ba3d64 94 gpio_SetPullDown(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, GPIO_PIN_SET);
AnnaBridge 188:bcfe06ba3d64 95 break;
AnnaBridge 188:bcfe06ba3d64 96 case OpenDrain:
AnnaBridge 188:bcfe06ba3d64 97 gpio_SetOpenDrain(&gpio_port_add, (gpio_gr_t)port, (gpio_num_t)bit, GPIO_PIN_SET);
AnnaBridge 188:bcfe06ba3d64 98 break;
AnnaBridge 188:bcfe06ba3d64 99 default:
AnnaBridge 188:bcfe06ba3d64 100 break;
AnnaBridge 188:bcfe06ba3d64 101 }
AnnaBridge 188:bcfe06ba3d64 102 }