Takuo WATANABE / pin_port

Dependents:   pin_port_test

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pin_port.cpp Source File

pin_port.cpp

00001 /* A function for finding the port and bit position of a pin
00002  * Copyright 2015, Takuo Watanabe
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *   http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 #include "mbed.h"
00018 #include "pin_port.h"
00019 
00020 int pin_port(PinName pin, PortName *port) {
00021 #if defined(TARGET_LPC176X)
00022     int p = pin - LPC_GPIO0_BASE;
00023     *port = (PortName)(p >> PORT_SHIFT);
00024     return p & ((1 << PORT_SHIFT) - 1);
00025 #elif defined(TARGET_LPC11UXX)
00026     *port = (PortName)((int)pin >> PORT_SHIFT);
00027     return ((1 << PORT_SHIFT) - 1) & (int)pin;
00028 #elif defined(TARGET_KLXX)
00029     *port = (PortName)((int)pin >> PORT_SHIFT);
00030     return (((1 << PORT_SHIFT) - 1) & (int)pin) >> 2;
00031 #elif defined(TARGET_KPSDK_MCUS)
00032     *port = (PortName)((int)pin >> GPIO_PORT_SHIFT);
00033     return ((1 << GPIO_PORT_SHIFT) - 1) & (int)pin;
00034 #elif defined(TARGET_STM32F4)
00035     *port = (PortName)((int)pin >> 4);
00036     return 0xf & (int)pin;
00037 #else
00038 #error "Unsupported target"
00039 #endif
00040 }