Modified for BG96

Fork of mbed-dev by mbed official

Committer:
AnnaBridge
Date:
Thu Sep 06 13:40:20 2018 +0100
Revision:
187:0387e8f68319
Parent:
186:707f6e361f3e
mbed-dev library. Release version 163

Who changed what in which revision?

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