mbed-os

Fork of mbed-os by erkin yucel

Committer:
xuaner
Date:
Thu Jul 20 14:26:57 2017 +0000
Revision:
1:3deb71413561
Parent:
0:f269e3021894
mbed_os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elessair 0:f269e3021894 1 /* mbed Microcontroller Library
elessair 0:f269e3021894 2 * Copyright (c) 2006-2015 ARM Limited
elessair 0:f269e3021894 3 *
elessair 0:f269e3021894 4 * Licensed under the Apache License, Version 2.0 (the "License");
elessair 0:f269e3021894 5 * you may not use this file except in compliance with the License.
elessair 0:f269e3021894 6 * You may obtain a copy of the License at
elessair 0:f269e3021894 7 *
elessair 0:f269e3021894 8 * http://www.apache.org/licenses/LICENSE-2.0
elessair 0:f269e3021894 9 *
elessair 0:f269e3021894 10 * Unless required by applicable law or agreed to in writing, software
elessair 0:f269e3021894 11 * distributed under the License is distributed on an "AS IS" BASIS,
elessair 0:f269e3021894 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
elessair 0:f269e3021894 13 * See the License for the specific language governing permissions and
elessair 0:f269e3021894 14 * limitations under the License.
elessair 0:f269e3021894 15 */
elessair 0:f269e3021894 16 #ifndef MBED_GPIO_OBJECT_H
elessair 0:f269e3021894 17 #define MBED_GPIO_OBJECT_H
elessair 0:f269e3021894 18
elessair 0:f269e3021894 19 #include "mbed_assert.h"
elessair 0:f269e3021894 20
elessair 0:f269e3021894 21 #ifdef __cplusplus
elessair 0:f269e3021894 22 extern "C" {
elessair 0:f269e3021894 23 #endif
elessair 0:f269e3021894 24
elessair 0:f269e3021894 25 typedef struct {
elessair 0:f269e3021894 26 PinName pin;
elessair 0:f269e3021894 27 uint32_t mask;
elessair 0:f269e3021894 28
elessair 0:f269e3021894 29 __IO uint32_t *reg_dir;
elessair 0:f269e3021894 30 __IO uint32_t *reg_mask;
elessair 0:f269e3021894 31 __IO uint32_t *reg_set;
elessair 0:f269e3021894 32 __IO uint32_t *reg_clr;
elessair 0:f269e3021894 33 __I uint32_t *reg_in;
elessair 0:f269e3021894 34 } gpio_t;
elessair 0:f269e3021894 35
elessair 0:f269e3021894 36 static inline void gpio_write(gpio_t *obj, int value) {
elessair 0:f269e3021894 37 MBED_ASSERT(obj->pin != (PinName)NC);
elessair 0:f269e3021894 38 *obj->reg_mask &= ~obj->mask;
elessair 0:f269e3021894 39 if (value)
elessair 0:f269e3021894 40 *obj->reg_set = obj->mask;
elessair 0:f269e3021894 41 else
elessair 0:f269e3021894 42 *obj->reg_clr = obj->mask;
elessair 0:f269e3021894 43 }
elessair 0:f269e3021894 44
elessair 0:f269e3021894 45 static inline int gpio_read(gpio_t *obj) {
elessair 0:f269e3021894 46 MBED_ASSERT(obj->pin != (PinName)NC);
elessair 0:f269e3021894 47 *obj->reg_mask &= ~obj->mask;
elessair 0:f269e3021894 48 return ((*obj->reg_in & obj->mask) ? 1 : 0);
elessair 0:f269e3021894 49 }
elessair 0:f269e3021894 50
elessair 0:f269e3021894 51 static inline int gpio_is_connected(const gpio_t *obj) {
elessair 0:f269e3021894 52 return obj->pin != (PinName)NC;
elessair 0:f269e3021894 53 }
elessair 0:f269e3021894 54
elessair 0:f269e3021894 55 #ifdef __cplusplus
elessair 0:f269e3021894 56 }
elessair 0:f269e3021894 57 #endif
elessair 0:f269e3021894 58
elessair 0:f269e3021894 59 #endif