aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/gpio.h
diff options
context:
space:
mode:
authoriperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123>2009-12-19 10:53:07 +0000
committeriperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123>2009-12-19 10:53:07 +0000
commitacf59b1abb346998c492b93fee4a680a32f538d5 (patch)
treec49dd57f489769608095736457a0db9350868a47 /src/lib/gpio.h
parentaf4c4985cef82b80b936584d686c80d9538082b6 (diff)
downloadlibrambutan-acf59b1abb346998c492b93fee4a680a32f538d5.tar.gz
librambutan-acf59b1abb346998c492b93fee4a680a32f538d5.zip
Added licensing. Moved lots of header files around. Added HardwareSerial reads, writes. Tweaked some of the util and assert functions. Added various useful routines for printing stuff to the serial port. Continued moving out stm32lib. Slightly more consistent naming, this will come in another change.
git-svn-id: https://leaflabs.googlecode.com/svn/trunk/library@74 749a229e-a60e-11de-b98f-4500b42dc123
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){