From bf2b8aad2feff6126085e06c60c8e43842d6da43 Mon Sep 17 00:00:00 2001 From: Taylor Vesely Date: Mon, 26 Mar 2012 16:43:43 -0600 Subject: Added a bunch of register definitions and gpio_set() to LPC17xx gpio. --- .../blueboard-lpc1768-h/miniblink/miniblink.c | 9 ++- include/libopencm3/lpc17xx/gpio.h | 65 ++++++++++++++++++++++ lib/lpc17xx/gpio.c | 25 +++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) diff --git a/examples/lpc17xx/blueboard-lpc1768-h/miniblink/miniblink.c b/examples/lpc17xx/blueboard-lpc1768-h/miniblink/miniblink.c index cfc53a5..c351581 100644 --- a/examples/lpc17xx/blueboard-lpc1768-h/miniblink/miniblink.c +++ b/examples/lpc17xx/blueboard-lpc1768-h/miniblink/miniblink.c @@ -33,7 +33,14 @@ int main(void) /* Blink LED0 (P3_0) on the board. */ while (1) { /* Manually: */ - GPIO1_SET = (1 << 29); /* LED off */ + //GPIO1_SET = (1 << 29); /* LED off */ + //for (i = 0; i < 800000; i++) /* Wait a bit. */ + // __asm__("nop"); + //GPIO1_CLR = (1 << 29); /* LED on */ + //for (i = 0; i < 800000; i++) /* Wait a bit. */ + // __asm__("nop"); + + gpio_set(GPIO1, GPIOPIN29); /* LED off */ for (i = 0; i < 800000; i++) /* Wait a bit. */ __asm__("nop"); GPIO1_CLR = (1 << 29); /* LED on */ diff --git a/include/libopencm3/lpc17xx/gpio.h b/include/libopencm3/lpc17xx/gpio.h index e4bf784..567cd2c 100644 --- a/include/libopencm3/lpc17xx/gpio.h +++ b/include/libopencm3/lpc17xx/gpio.h @@ -34,6 +34,37 @@ /* GPIO number definitions (for convenience) */ #define GPIOPIN0 (1 << 0) +#define GPIOPIN1 (1 << 1) +#define GPIOPIN2 (1 << 2) +#define GPIOPIN3 (1 << 3) +#define GPIOPIN4 (1 << 4) +#define GPIOPIN5 (1 << 5) +#define GPIOPIN6 (1 << 6) +#define GPIOPIN7 (1 << 7) +#define GPIOPIN8 (1 << 8) +#define GPIOPIN9 (1 << 9) +#define GPIOPIN10 (1 << 10) +#define GPIOPIN11 (1 << 11) +#define GPIOPIN12 (1 << 12) +#define GPIOPIN13 (1 << 13) +#define GPIOPIN14 (1 << 14) +#define GPIOPIN15 (1 << 15) +#define GPIOPIN16 (1 << 16) +#define GPIOPIN17 (1 << 17) +#define GPIOPIN18 (1 << 18) +#define GPIOPIN19 (1 << 19) +#define GPIOPIN20 (1 << 20) +#define GPIOPIN21 (1 << 21) +#define GPIOPIN22 (1 << 22) +#define GPIOPIN23 (1 << 23) +#define GPIOPIN24 (1 << 24) +#define GPIOPIN25 (1 << 25) +#define GPIOPIN26 (1 << 26) +#define GPIOPIN27 (1 << 27) +#define GPIOPIN28 (1 << 28) +#define GPIOPIN29 (1 << 29) +#define GPIOPIN30 (1 << 30) +#define GPIOPIN31 (1 << 31) /* --- GPIO registers ------------------------------------------------------ */ @@ -45,6 +76,14 @@ #define GPIO3_DIR GPIO_DIR(GPIO3) #define GPIO4_DIR GPIO_DIR(GPIO4) +/* GPIO fast mask register (GPIOn_DIR) */ +#define GPIO_MASK(port) MMIO32(port + 0x10) +#define GPIO0_MASK GPIO_MASK(GPIO0) +#define GPIO1_MASK GPIO_MASK(GPIO1) +#define GPIO2_MASK GPIO_MASK(GPIO2) +#define GPIO3_MASK GPIO_MASK(GPIO3) +#define GPIO4_MASK GPIO_MASK(GPIO4) + /* GPIO port pin value register (GPIOn_PIN) */ #define GPIO_PIN(port) MMIO32(port + 0x14) #define GPIO0_PIN GPIO_PIN(GPIO0) @@ -69,4 +108,30 @@ #define GPIO3_CLR GPIO_CLR(GPIO3) #define GPIO4_CLR GPIO_CLR(GPIO4) +/* GPIO interrupt register map */ +/* Interrupt enable rising edge */ +#define GPIO0_IER MMIO32(GPIOINTERRPUT_BASE + 0x90) +#define GPIO2_IER MMIO32(GPIOINTERRPUT_BASE + 0xB0) + +/* Interrupt enable falling edge */ +#define GPIO0_IEF MMIO32(GPIOINTERRPUT_BASE + 0x94) +#define GPIO2_IEF MMIO32(GPIOINTERRPUT_BASE + 0xB4) + +/* Interrupt status rising edge */ +#define GPIO0_ISR MMIO32(GPIOINTERRPUT_BASE + 0x84) +#define GPIO2_ISR MMIO32(GPIOINTERRPUT_BASE + 0xA4) + +/* Interrupt status falling edge */ +#define GPIO0_ISF MMIO32(GPIOINTERRPUT_BASE + 0x88) +#define GPIO2_ISF MMIO32(GPIOINTERRPUT_BASE + 0xA8) + +/* Interrupt clear */ +#define GPIO0_IC MMIO32(GPIOINTERRPUT_BASE + 0x8C) +#define GPIO1_IC MMIO32(GPIOINTERRPUT_BASE + 0xAC) + +/* Overall interrupt status */ +#define GPIO_IS MMIO32(GPIOINTERRPUT_BASE + 0x80) + +void gpio_set(u32 gpioport, u32 gpios); + #endif diff --git a/lib/lpc17xx/gpio.c b/lib/lpc17xx/gpio.c index e69de29..8913082 100644 --- a/lib/lpc17xx/gpio.c +++ b/lib/lpc17xx/gpio.c @@ -0,0 +1,25 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2010 Uwe Hermann + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include + +void gpio_set(u32 gpioport, u32 gpios) +{ + GPIO_SET(gpioport) = gpios; +} -- cgit v1.2.3