mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Jul 20 09:00:09 2015 +0100
Revision:
593:78ee8643776a
Parent:
556:a217bc785985
Child:
627:4fa1328d9c60
Synchronized with git revision a68b724d07788e6389ea4d52c622aad767953758

Full URL: https://github.com/mbedmicro/mbed/commit/a68b724d07788e6389ea4d52c622aad767953758/

[Silicon Labs] Bring EFM32 HAL up to date

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 525:c320967f86b9 1 /* mbed Microcontroller Library
mbed_official 525:c320967f86b9 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 525:c320967f86b9 3 *
mbed_official 525:c320967f86b9 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 525:c320967f86b9 5 * you may not use this file except in compliance with the License.
mbed_official 525:c320967f86b9 6 * You may obtain a copy of the License at
mbed_official 525:c320967f86b9 7 *
mbed_official 525:c320967f86b9 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 525:c320967f86b9 9 *
mbed_official 525:c320967f86b9 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 525:c320967f86b9 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 525:c320967f86b9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 525:c320967f86b9 13 * See the License for the specific language governing permissions and
mbed_official 525:c320967f86b9 14 * limitations under the License.
mbed_official 525:c320967f86b9 15 */
mbed_official 525:c320967f86b9 16 #include "gpio_api.h"
mbed_official 525:c320967f86b9 17 #include "pinmap.h"
mbed_official 525:c320967f86b9 18 #include "em_cmu.h"
mbed_official 525:c320967f86b9 19 #include "mbed_assert.h"
mbed_official 526:7c4bdfe6a168 20 #include "sleepmodes.h"
mbed_official 525:c320967f86b9 21
mbed_official 593:78ee8643776a 22
mbed_official 593:78ee8643776a 23 void gpio_write(gpio_t *obj, int value)
mbed_official 525:c320967f86b9 24 {
mbed_official 593:78ee8643776a 25 if (value) {
mbed_official 593:78ee8643776a 26 GPIO_PinOutSet((GPIO_Port_TypeDef)(obj->pin >> 4 & 0xF), obj->pin & 0xF); // Pin number encoded in first four bits of obj->pin
mbed_official 593:78ee8643776a 27 } else {
mbed_official 593:78ee8643776a 28 GPIO_PinOutClear((GPIO_Port_TypeDef)(obj->pin >> 4 & 0xF), obj->pin & 0xF);
mbed_official 593:78ee8643776a 29 }
mbed_official 593:78ee8643776a 30 }
mbed_official 593:78ee8643776a 31
mbed_official 593:78ee8643776a 32 int gpio_read(gpio_t *obj)
mbed_official 593:78ee8643776a 33 {
mbed_official 593:78ee8643776a 34 if (obj->dir == PIN_INPUT) {
mbed_official 593:78ee8643776a 35 return GPIO_PinInGet((GPIO_Port_TypeDef)(obj->pin >> 4 & 0xF), obj->pin & 0xF); // Pin number encoded in first four bits of obj->pin
mbed_official 593:78ee8643776a 36 } else {
mbed_official 593:78ee8643776a 37 return GPIO_PinOutGet((GPIO_Port_TypeDef)(obj->pin >> 4 & 0xF), obj->pin & 0xF);
mbed_official 593:78ee8643776a 38 }
mbed_official 593:78ee8643776a 39 }
mbed_official 593:78ee8643776a 40
mbed_official 593:78ee8643776a 41 int gpio_is_connected(const gpio_t *obj)
mbed_official 593:78ee8643776a 42 {
mbed_official 593:78ee8643776a 43 return (obj->pin | 0xFFFFFF00 )!= (PinName)NC;
mbed_official 525:c320967f86b9 44 }
mbed_official 525:c320967f86b9 45
mbed_official 525:c320967f86b9 46 /*
mbed_official 525:c320967f86b9 47 * @return the GPIO port mask for this pin
mbed_official 525:c320967f86b9 48 * Pin and port index encoded in one uint32.
mbed_official 525:c320967f86b9 49 * First four bits represent the pin number
mbed_official 525:c320967f86b9 50 * The remaining bits represent the pin mode
mbed_official 525:c320967f86b9 51 */
mbed_official 525:c320967f86b9 52 uint32_t gpio_set(PinName pin)
mbed_official 525:c320967f86b9 53 {
mbed_official 525:c320967f86b9 54 return 1 << ((uint32_t) pin & 0xF);
mbed_official 525:c320967f86b9 55 }
mbed_official 525:c320967f86b9 56
mbed_official 525:c320967f86b9 57 void gpio_init(gpio_t *obj, PinName pin)
mbed_official 525:c320967f86b9 58 {
mbed_official 525:c320967f86b9 59 MBED_ASSERT(pin != NC);
mbed_official 525:c320967f86b9 60
mbed_official 525:c320967f86b9 61 CMU_ClockEnable(cmuClock_HFPER, true);
mbed_official 525:c320967f86b9 62 CMU_ClockEnable(cmuClock_GPIO, true);
mbed_official 525:c320967f86b9 63 obj->pin = pin;
mbed_official 525:c320967f86b9 64 }
mbed_official 525:c320967f86b9 65
mbed_official 525:c320967f86b9 66 void gpio_mode(gpio_t *obj, PinMode mode)
mbed_official 525:c320967f86b9 67 {
mbed_official 593:78ee8643776a 68 if(obj->dir == PIN_INPUT) {
mbed_official 593:78ee8643776a 69 switch(mode) {
mbed_official 593:78ee8643776a 70 case PullDefault:
mbed_official 593:78ee8643776a 71 mode = Input;
mbed_official 593:78ee8643776a 72 break;
mbed_official 593:78ee8643776a 73 case PullUp:
mbed_official 593:78ee8643776a 74 mode = InputPullUp;
mbed_official 593:78ee8643776a 75 break;
mbed_official 593:78ee8643776a 76 case PullDown:
mbed_official 593:78ee8643776a 77 mode = InputPullDown;
mbed_official 593:78ee8643776a 78 break;
mbed_official 593:78ee8643776a 79 default:
mbed_official 593:78ee8643776a 80 break;
mbed_official 593:78ee8643776a 81 }
mbed_official 593:78ee8643776a 82
mbed_official 593:78ee8643776a 83 //Handle DOUT setting
mbed_official 593:78ee8643776a 84 if((mode & 0x10) != 0) {
mbed_official 593:78ee8643776a 85 //Set DOUT
mbed_official 593:78ee8643776a 86 GPIO->P[(obj->pin >> 4) & 0xF].DOUTSET = 1 << (obj->pin & 0xF);
mbed_official 593:78ee8643776a 87 } else {
mbed_official 593:78ee8643776a 88 //Clear DOUT
mbed_official 593:78ee8643776a 89 GPIO->P[(obj->pin >> 4) & 0xF].DOUTCLR = 1 << (obj->pin & 0xF);
mbed_official 593:78ee8643776a 90 }
mbed_official 593:78ee8643776a 91 } else {
mbed_official 593:78ee8643776a 92 switch(mode) {
mbed_official 593:78ee8643776a 93 case PullDefault:
mbed_official 593:78ee8643776a 94 mode = PushPull;
mbed_official 593:78ee8643776a 95 break;
mbed_official 593:78ee8643776a 96 case PullUp:
mbed_official 593:78ee8643776a 97 mode = WiredAndPullUp;
mbed_official 593:78ee8643776a 98 break;
mbed_official 593:78ee8643776a 99 case PullDown:
mbed_official 593:78ee8643776a 100 mode = WiredOrPullDown;
mbed_official 593:78ee8643776a 101 break;
mbed_official 593:78ee8643776a 102 default:
mbed_official 593:78ee8643776a 103 break;
mbed_official 593:78ee8643776a 104 }
mbed_official 593:78ee8643776a 105 }
mbed_official 593:78ee8643776a 106
mbed_official 525:c320967f86b9 107 obj->mode = mode; // Update object
mbed_official 525:c320967f86b9 108 pin_mode(obj->pin, mode); // Update register
mbed_official 525:c320967f86b9 109 }
mbed_official 525:c320967f86b9 110
mbed_official 525:c320967f86b9 111 // Used by DigitalInOut to set correct mode when direction is set
mbed_official 525:c320967f86b9 112 void gpio_dir(gpio_t *obj, PinDirection direction)
mbed_official 525:c320967f86b9 113 {
mbed_official 525:c320967f86b9 114 obj->dir = direction;
mbed_official 525:c320967f86b9 115 switch (direction) {
mbed_official 525:c320967f86b9 116 case PIN_INPUT:
mbed_official 525:c320967f86b9 117 gpio_mode(obj, PullDefault);
mbed_official 525:c320967f86b9 118 break;
mbed_official 525:c320967f86b9 119 case PIN_OUTPUT:
mbed_official 525:c320967f86b9 120 gpio_mode(obj, PullNone);
mbed_official 525:c320967f86b9 121 break;
mbed_official 525:c320967f86b9 122 }
mbed_official 525:c320967f86b9 123 }