Marco Mayer / Mbed OS Queue
Committer:
demayer
Date:
Wed Apr 22 11:50:00 2020 +0000
Revision:
2:c7897a3f5f11
Parent:
0:6bf0743ece18
test

Who changed what in which revision?

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