inport from local

Dependents:   Hobbyking_Cheetah_0511

Committer:
NYX
Date:
Mon Mar 16 06:35:48 2020 +0000
Revision:
0:85b3fd62ea1a
reinport to mbed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NYX 0:85b3fd62ea1a 1 /* mbed Microcontroller Library
NYX 0:85b3fd62ea1a 2 * Copyright (c) 2006-2013 ARM Limited
NYX 0:85b3fd62ea1a 3 *
NYX 0:85b3fd62ea1a 4 * Licensed under the Apache License, Version 2.0 (the "License");
NYX 0:85b3fd62ea1a 5 * you may not use this file except in compliance with the License.
NYX 0:85b3fd62ea1a 6 * You may obtain a copy of the License at
NYX 0:85b3fd62ea1a 7 *
NYX 0:85b3fd62ea1a 8 * http://www.apache.org/licenses/LICENSE-2.0
NYX 0:85b3fd62ea1a 9 *
NYX 0:85b3fd62ea1a 10 * Unless required by applicable law or agreed to in writing, software
NYX 0:85b3fd62ea1a 11 * distributed under the License is distributed on an "AS IS" BASIS,
NYX 0:85b3fd62ea1a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
NYX 0:85b3fd62ea1a 13 * See the License for the specific language governing permissions and
NYX 0:85b3fd62ea1a 14 * limitations under the License.
NYX 0:85b3fd62ea1a 15 */
NYX 0:85b3fd62ea1a 16 #include "hal/pinmap.h"
NYX 0:85b3fd62ea1a 17 #include "platform/mbed_error.h"
NYX 0:85b3fd62ea1a 18
NYX 0:85b3fd62ea1a 19 void pinmap_pinout(PinName pin, const PinMap *map) {
NYX 0:85b3fd62ea1a 20 if (pin == NC)
NYX 0:85b3fd62ea1a 21 return;
NYX 0:85b3fd62ea1a 22
NYX 0:85b3fd62ea1a 23 while (map->pin != NC) {
NYX 0:85b3fd62ea1a 24 if (map->pin == pin) {
NYX 0:85b3fd62ea1a 25 pin_function(pin, map->function);
NYX 0:85b3fd62ea1a 26
NYX 0:85b3fd62ea1a 27 pin_mode(pin, PullNone);
NYX 0:85b3fd62ea1a 28 return;
NYX 0:85b3fd62ea1a 29 }
NYX 0:85b3fd62ea1a 30 map++;
NYX 0:85b3fd62ea1a 31 }
NYX 0:85b3fd62ea1a 32 error("could not pinout");
NYX 0:85b3fd62ea1a 33 }
NYX 0:85b3fd62ea1a 34
NYX 0:85b3fd62ea1a 35 uint32_t pinmap_merge(uint32_t a, uint32_t b) {
NYX 0:85b3fd62ea1a 36 // both are the same (inc both NC)
NYX 0:85b3fd62ea1a 37 if (a == b)
NYX 0:85b3fd62ea1a 38 return a;
NYX 0:85b3fd62ea1a 39
NYX 0:85b3fd62ea1a 40 // one (or both) is not connected
NYX 0:85b3fd62ea1a 41 if (a == (uint32_t)NC)
NYX 0:85b3fd62ea1a 42 return b;
NYX 0:85b3fd62ea1a 43 if (b == (uint32_t)NC)
NYX 0:85b3fd62ea1a 44 return a;
NYX 0:85b3fd62ea1a 45
NYX 0:85b3fd62ea1a 46 // mis-match error case
NYX 0:85b3fd62ea1a 47 error("pinmap mis-match");
NYX 0:85b3fd62ea1a 48 return (uint32_t)NC;
NYX 0:85b3fd62ea1a 49 }
NYX 0:85b3fd62ea1a 50
NYX 0:85b3fd62ea1a 51 uint32_t pinmap_find_peripheral(PinName pin, const PinMap* map) {
NYX 0:85b3fd62ea1a 52 while (map->pin != NC) {
NYX 0:85b3fd62ea1a 53 if (map->pin == pin)
NYX 0:85b3fd62ea1a 54 return map->peripheral;
NYX 0:85b3fd62ea1a 55 map++;
NYX 0:85b3fd62ea1a 56 }
NYX 0:85b3fd62ea1a 57 return (uint32_t)NC;
NYX 0:85b3fd62ea1a 58 }
NYX 0:85b3fd62ea1a 59
NYX 0:85b3fd62ea1a 60 uint32_t pinmap_peripheral(PinName pin, const PinMap* map) {
NYX 0:85b3fd62ea1a 61 uint32_t peripheral = (uint32_t)NC;
NYX 0:85b3fd62ea1a 62
NYX 0:85b3fd62ea1a 63 if (pin == (PinName)NC)
NYX 0:85b3fd62ea1a 64 return (uint32_t)NC;
NYX 0:85b3fd62ea1a 65 peripheral = pinmap_find_peripheral(pin, map);
NYX 0:85b3fd62ea1a 66 if ((uint32_t)NC == peripheral) // no mapping available
NYX 0:85b3fd62ea1a 67 error("pinmap not found for peripheral");
NYX 0:85b3fd62ea1a 68 return peripheral;
NYX 0:85b3fd62ea1a 69 }
NYX 0:85b3fd62ea1a 70
NYX 0:85b3fd62ea1a 71 uint32_t pinmap_find_function(PinName pin, const PinMap* map) {
NYX 0:85b3fd62ea1a 72 while (map->pin != NC) {
NYX 0:85b3fd62ea1a 73 if (map->pin == pin)
NYX 0:85b3fd62ea1a 74 return map->function;
NYX 0:85b3fd62ea1a 75 map++;
NYX 0:85b3fd62ea1a 76 }
NYX 0:85b3fd62ea1a 77 return (uint32_t)NC;
NYX 0:85b3fd62ea1a 78 }
NYX 0:85b3fd62ea1a 79
NYX 0:85b3fd62ea1a 80 uint32_t pinmap_function(PinName pin, const PinMap* map) {
NYX 0:85b3fd62ea1a 81 uint32_t function = (uint32_t)NC;
NYX 0:85b3fd62ea1a 82
NYX 0:85b3fd62ea1a 83 if (pin == (PinName)NC)
NYX 0:85b3fd62ea1a 84 return (uint32_t)NC;
NYX 0:85b3fd62ea1a 85 function = pinmap_find_function(pin, map);
NYX 0:85b3fd62ea1a 86 if ((uint32_t)NC == function) // no mapping available
NYX 0:85b3fd62ea1a 87 error("pinmap not found for function");
NYX 0:85b3fd62ea1a 88 return function;
NYX 0:85b3fd62ea1a 89 }