diff options
Diffstat (limited to 'src/lib/gpio.h')
-rw-r--r-- | src/lib/gpio.h | 71 |
1 files changed, 38 insertions, 33 deletions
diff --git a/src/lib/gpio.h b/src/lib/gpio.h index 7620f96..bc9bdde 100644 --- a/src/lib/gpio.h +++ b/src/lib/gpio.h @@ -1,9 +1,30 @@ -#ifndef _GPIO_H -#define _GPIO_H +/* ***************************************************************************** + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * Created: 12/18/09 02:36:01 + * Copyright (c) 2009 Perry L. Hung. All rights reserved. + * + * ****************************************************************************/ -#include <inttypes.h> -#include "util.h" +/** + * @file gpio.h + * + * @brief GPIO prototypes, defines, and inlined access functions + */ +#ifndef _GPIO_H +#define _GPIO_H /* Each of the GPIO port bits can be in the following modes (STM32 138/995): * Input floating @@ -13,15 +34,15 @@ * Output open-drain * Output push-pull * Alternate function push-pull - * Alternate function open-drain + * Alternate function open-drain * * - After reset, the alternate functions are not active and IO prts * are set to Input Floating mode */ -#define _GPIOA_BASE (GPIO_Port*)0x40010800 -#define _GPIOB_BASE (GPIO_Port*)0x40010C00 -#define _GPIOC_BASE (GPIO_Port*)0x40011000 -#define _GPIOD_BASE (GPIO_Port*)0x40011400 +#define GPIOA_BASE (GPIO_Port*)0x40010800 +#define GPIOB_BASE (GPIO_Port*)0x40010C00 +#define GPIOC_BASE (GPIO_Port*)0x40011000 +#define GPIOD_BASE (GPIO_Port*)0x40011400 /* Pin modes are set by [CNFx[1:0] : MODEx[1:0]] */ #define GPIO_SPEED_50MHZ (0x3) // Max output speed 50 MHz @@ -37,13 +58,13 @@ #define GPIO_MODE_INPUT_PD (0x02 << 2) #define GPIO_MODE_INPUT_PU (0x02 << 2) -#define INPUT_ANALOG GPIO_MODE_INPUT_ANALOG -#define INPUT_DIGITAL GPIO_MODE_INPUT_FLOATING -#define INPUT_FLOATING GPIO_MODE_INPUT_FLOATING -#define INPUT_PULLDOWN GPIO_MODE_INPUT_PD -#define INPUT_PULLUP GPIO_MODE_INPUT_PU -#define INPUT GPIO_MODE_INPUT_FLOATING -#define OUTPUT GPIO_MODE_OUTPUT_PP +//#define INPUT_ANALOG GPIO_MODE_INPUT_ANALOG +//#define INPUT_DIGITAL GPIO_MODE_INPUT_FLOATING +//#define INPUT_FLOATING GPIO_MODE_INPUT_FLOATING +//#define INPUT_PULLDOWN GPIO_MODE_INPUT_PD +//#define INPUT_PULLUP GPIO_MODE_INPUT_PU +//#define INPUT GPIO_MODE_INPUT_FLOATING +//#define OUTPUT GPIO_MODE_OUTPUT_PP typedef struct { volatile uint32_t CRL; // Port configuration register low @@ -65,23 +86,7 @@ extern "C"{ #endif void gpio_init(void); - -static inline void gpio_set_mode(GPIO_Port* port, uint8_t gpio_pin, uint8_t mode) { - uint32_t tmp; - uint32_t shift = POS(gpio_pin % 8); - GPIOReg CR; - - ASSERT(port); - ASSERT(gpio_pin < 16); - - CR = (gpio_pin < 8) ? &(port->CRL) : &(port->CRH); - - tmp = *CR; - tmp &= POS_MASK(shift); - tmp |= mode << shift; - - *CR = tmp; -} +void gpio_set_mode(GPIO_Port* port, uint8_t gpio_pin, uint8_t mode); static inline void gpio_write_bit(GPIO_Port *port, uint8_t gpio_pin, uint8_t val) { if (val){ |