aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/gpio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/gpio.h')
-rw-r--r--src/lib/gpio.h71
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){