diff --git a/include/libopencm3/lpc43xx/gpio.h b/include/libopencm3/lpc43xx/gpio.h index b3e62027..3bd73990 100644 --- a/include/libopencm3/lpc43xx/gpio.h +++ b/include/libopencm3/lpc43xx/gpio.h @@ -27,14 +27,14 @@ /* --- Convenience macros -------------------------------------------------- */ /* GPIO port base addresses (for convenience) */ -#define GPIO0 GPIO_PIO0_BASE -#define GPIO1 GPIO_PIO1_BASE -#define GPIO2 GPIO_PIO2_BASE -#define GPIO3 GPIO_PIO3_BASE -#define GPIO4 GPIO_PIO4_BASE -#define GPIO5 GPIO_PIO5_BASE -#define GPIO6 GPIO_PIO6_BASE -#define GPIO7 GPIO_PIO7_BASE +#define GPIO0 (GPIO_PORT_BASE + 0x2000) +#define GPIO1 (GPIO_PORT_BASE + 0x2004) +#define GPIO2 (GPIO_PORT_BASE + 0x2008) +#define GPIO3 (GPIO_PORT_BASE + 0x200C) +#define GPIO4 (GPIO_PORT_BASE + 0x2010) +#define GPIO5 (GPIO_PORT_BASE + 0x2014) +#define GPIO6 (GPIO_PORT_BASE + 0x2018) +#define GPIO7 (GPIO_PORT_BASE + 0x201C) /* GPIO number definitions (for convenience) */ #define GPIOPIN0 (1 << 0) @@ -72,111 +72,86 @@ /* --- GPIO registers ------------------------------------------------------ */ -//FIXME byte/word access registers +//TODO byte/word access registers /* GPIO data direction register (GPIOn_DIR) */ -//FIXME port should be offset 0x2000 -#define GPIO_DIR(port) MMIO32(port + 0x00) -#define GPIO0_DIR GPIO_DIR(GPIO0) -#define GPIO1_DIR GPIO_DIR(GPIO1) -#define GPIO2_DIR GPIO_DIR(GPIO2) -#define GPIO3_DIR GPIO_DIR(GPIO3) -#define GPIO4_DIR GPIO_DIR(GPIO4) -#define GPIO5_DIR GPIO_DIR(GPIO5) -#define GPIO6_DIR GPIO_DIR(GPIO6) -#define GPIO7_DIR GPIO_DIR(GPIO7) +#define GPIO_DIR(port) MMIO32(port + 0x00) +#define GPIO0_DIR GPIO_DIR(GPIO0) +#define GPIO1_DIR GPIO_DIR(GPIO1) +#define GPIO2_DIR GPIO_DIR(GPIO2) +#define GPIO3_DIR GPIO_DIR(GPIO3) +#define GPIO4_DIR GPIO_DIR(GPIO4) +#define GPIO5_DIR GPIO_DIR(GPIO5) +#define GPIO6_DIR GPIO_DIR(GPIO6) +#define GPIO7_DIR GPIO_DIR(GPIO7) /* GPIO fast mask register (GPIOn_MASK) */ -#define GPIO_MASK(port) MMIO32(port + 0x80) -#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) -#define GPIO5_MASK GPIO_MASK(GPIO5) -#define GPIO6_MASK GPIO_MASK(GPIO6) -#define GPIO7_MASK GPIO_MASK(GPIO7) +#define GPIO_MASK(port) MMIO32(port + 0x80) +#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) +#define GPIO5_MASK GPIO_MASK(GPIO5) +#define GPIO6_MASK GPIO_MASK(GPIO6) +#define GPIO7_MASK GPIO_MASK(GPIO7) /* GPIO port pin value register (GPIOn_PIN) */ -#define GPIO_PIN(port) MMIO32(port + 0x100) -#define GPIO0_PIN GPIO_PIN(GPIO0) -#define GPIO1_PIN GPIO_PIN(GPIO1) -#define GPIO2_PIN GPIO_PIN(GPIO2) -#define GPIO3_PIN GPIO_PIN(GPIO3) -#define GPIO4_PIN GPIO_PIN(GPIO4) -#define GPIO5_PIN GPIO_PIN(GPIO5) -#define GPIO6_PIN GPIO_PIN(GPIO6) -#define GPIO7_PIN GPIO_PIN(GPIO7) +#define GPIO_PIN(port) MMIO32(port + 0x100) +#define GPIO0_PIN GPIO_PIN(GPIO0) +#define GPIO1_PIN GPIO_PIN(GPIO1) +#define GPIO2_PIN GPIO_PIN(GPIO2) +#define GPIO3_PIN GPIO_PIN(GPIO3) +#define GPIO4_PIN GPIO_PIN(GPIO4) +#define GPIO5_PIN GPIO_PIN(GPIO5) +#define GPIO6_PIN GPIO_PIN(GPIO6) +#define GPIO7_PIN GPIO_PIN(GPIO7) /* GPIO port masked pin value register (GPIOn_MPIN) */ -#define GPIO_PIN(port) MMIO32(port + 0x180) -#define GPIO0_PIN GPIO_PIN(GPIO0) -#define GPIO1_PIN GPIO_PIN(GPIO1) -#define GPIO2_PIN GPIO_PIN(GPIO2) -#define GPIO3_PIN GPIO_PIN(GPIO3) -#define GPIO4_PIN GPIO_PIN(GPIO4) -#define GPIO5_PIN GPIO_PIN(GPIO5) -#define GPIO6_PIN GPIO_PIN(GPIO6) -#define GPIO7_PIN GPIO_PIN(GPIO7) +#define GPIO_PIN(port) MMIO32(port + 0x180) +#define GPIO0_PIN GPIO_PIN(GPIO0) +#define GPIO1_PIN GPIO_PIN(GPIO1) +#define GPIO2_PIN GPIO_PIN(GPIO2) +#define GPIO3_PIN GPIO_PIN(GPIO3) +#define GPIO4_PIN GPIO_PIN(GPIO4) +#define GPIO5_PIN GPIO_PIN(GPIO5) +#define GPIO6_PIN GPIO_PIN(GPIO6) +#define GPIO7_PIN GPIO_PIN(GPIO7) /* GPIO port output set register (GPIOn_SET) */ -#define GPIO_SET(port) MMIO32(port + 0x200) -#define GPIO0_SET GPIO_SET(GPIO0) -#define GPIO1_SET GPIO_SET(GPIO1) -#define GPIO2_SET GPIO_SET(GPIO2) -#define GPIO3_SET GPIO_SET(GPIO3) -#define GPIO4_SET GPIO_SET(GPIO4) -#define GPIO5_SET GPIO_SET(GPIO5) -#define GPIO6_SET GPIO_SET(GPIO6) -#define GPIO7_SET GPIO_SET(GPIO7) +#define GPIO_SET(port) MMIO32(port + 0x200) +#define GPIO0_SET GPIO_SET(GPIO0) +#define GPIO1_SET GPIO_SET(GPIO1) +#define GPIO2_SET GPIO_SET(GPIO2) +#define GPIO3_SET GPIO_SET(GPIO3) +#define GPIO4_SET GPIO_SET(GPIO4) +#define GPIO5_SET GPIO_SET(GPIO5) +#define GPIO6_SET GPIO_SET(GPIO6) +#define GPIO7_SET GPIO_SET(GPIO7) /* GPIO port output clear register (GPIOn_CLR) */ -#define GPIO_CLR(port) MMIO32(port + 0x280) -#define GPIO0_CLR GPIO_CLR(GPIO0) -#define GPIO1_CLR GPIO_CLR(GPIO1) -#define GPIO2_CLR GPIO_CLR(GPIO2) -#define GPIO3_CLR GPIO_CLR(GPIO3) -#define GPIO4_CLR GPIO_CLR(GPIO4) -#define GPIO5_CLR GPIO_CLR(GPIO5) -#define GPIO6_CLR GPIO_CLR(GPIO6) -#define GPIO7_CLR GPIO_CLR(GPIO7) +#define GPIO_CLR(port) MMIO32(port + 0x280) +#define GPIO0_CLR GPIO_CLR(GPIO0) +#define GPIO1_CLR GPIO_CLR(GPIO1) +#define GPIO2_CLR GPIO_CLR(GPIO2) +#define GPIO3_CLR GPIO_CLR(GPIO3) +#define GPIO4_CLR GPIO_CLR(GPIO4) +#define GPIO5_CLR GPIO_CLR(GPIO5) +#define GPIO6_CLR GPIO_CLR(GPIO6) +#define GPIO7_CLR GPIO_CLR(GPIO7) /* GPIO port toggle register (GPIOn_NOT) */ -#define GPIO_NOT(port) MMIO32(port + 0x300) -#define GPIO0_NOT GPIO_NOT(GPIO0) -#define GPIO1_NOT GPIO_NOT(GPIO1) -#define GPIO2_NOT GPIO_NOT(GPIO2) -#define GPIO3_NOT GPIO_NOT(GPIO3) -#define GPIO4_NOT GPIO_NOT(GPIO4) -#define GPIO5_NOT GPIO_NOT(GPIO5) -#define GPIO6_NOT GPIO_NOT(GPIO6) -#define GPIO7_NOT GPIO_NOT(GPIO7) +#define GPIO_NOT(port) MMIO32(port + 0x300) +#define GPIO0_NOT GPIO_NOT(GPIO0) +#define GPIO1_NOT GPIO_NOT(GPIO1) +#define GPIO2_NOT GPIO_NOT(GPIO2) +#define GPIO3_NOT GPIO_NOT(GPIO3) +#define GPIO4_NOT GPIO_NOT(GPIO4) +#define GPIO5_NOT GPIO_NOT(GPIO5) +#define GPIO6_NOT GPIO_NOT(GPIO6) +#define GPIO7_NOT GPIO_NOT(GPIO7) -//FIXME below - -/* 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) +//TODO interrupts void gpio_set(u32 gpioport, u32 gpios); void gpio_clear(u32 gpioport, u32 gpios); diff --git a/include/libopencm3/lpc43xx/memorymap.h b/include/libopencm3/lpc43xx/memorymap.h index 11144422..52efd2c1 100644 --- a/include/libopencm3/lpc43xx/memorymap.h +++ b/include/libopencm3/lpc43xx/memorymap.h @@ -2,6 +2,7 @@ * This file is part of the libopencm3 project. * * Copyright (C) 2010 Uwe Hermann + * Copyright (C) 2012 Michael Ossmann * * 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 @@ -17,49 +18,91 @@ * along with this library. If not, see . */ -#ifndef LPC17XX_MEMORYMAP_H -#define LPC17XX_MEMORYMAP_H +#ifndef LPC43XX_MEMORYMAP_H +#define LPC43XX_MEMORYMAP_H #include -/* --- LPC17XX specific peripheral definitions ----------------------------- */ +/* --- LPC43XX specific peripheral definitions ----------------------------- */ /* Memory map for all busses */ -#define PERIPH_BASE_APB0 0x40000000 -#define PERIPH_BASE_APB1 0x40080000 -#define PERIPH_BASE_AHB 0x20000000 +#define PERIPH_BASE_AHB 0x40000000 +#define PERIPH_BASE_APB0 0x40080000 +#define PERIPH_BASE_APB1 0x400A0000 +#define PERIPH_BASE_APB2 0x400C0000 +#define PERIPH_BASE_APB3 0x400E0000 /* Register boundary addresses */ -/* APB0 */ -#define WDT_BASE (PERIPH_BASE_APB0 + 0x00000) -#define TIMER0_BASE (PERIPH_BASE_APB0 + 0x04000) -#define TIMER1_BASE (PERIPH_BASE_APB0 + 0x08000) -#define UART0_BASE (PERIPH_BASE_APB0 + 0x0c000) -#define UART1_BASE (PERIPH_BASE_APB0 + 0x10000) -/* PERIPH_BASE_APB0 + 0X14000 (0x4001 4000 - 0x4001 7FFF): Reserved */ -#define PWM1_BASE (PERIPH_BASE_APB0 + 0x18000) -#define I2C0_BASE (PERIPH_BASE_APB0 + 0x1c000) -#define SPI_BASE (PERIPH_BASE_APB0 + 0x20000) -#define RTC_BASE (PERIPH_BASE_APB0 + 0x24000) -#define GPIOINTERRPUT_BASE (PERIPH_BASE_APB0 + 0x28000) -#define PINCONNECT_BASE (PERIPH_BASE_APB0 + 0x2c000) -#define SSP1_BASE (PERIPH_BASE_APB0 + 0x30000) -#define ADC_BASE (PERIPH_BASE_APB0 + 0x34000) -#define CANAFRAM_BASE (PERIPH_BASE_APB0 + 0x38000) -#define CANAFREG_BASE (PERIPH_BASE_APB0 + 0x3C000) -#define CANCOMMONREG_BASE (PERIPH_BASE_APB0 + 0x40000) -#define CAN1_BASE (PERIPH_BASE_APB0 + 0x44000) -#define CAN2_BASE (PERIPH_BASE_APB0 + 0x48000) -/* PERIPH_BASE_APB0 + 0X4C000 (0x4004 C000 - 0x4005 BFFF): Reserved */ -#define I2C1_BASE (PERIPH_BASE_APB0 + 0x5C000) -/* PERIPH_BASE_APB0 + 0X60000 (0x6000 0000 - 0x4007 BFFF): Reserved */ - /* AHB */ -#define GPIO_PIO0_BASE (PERIPH_BASE_AHB + 0x9c000) -#define GPIO_PIO1_BASE (PERIPH_BASE_AHB + 0x9c020) -#define GPIO_PIO2_BASE (PERIPH_BASE_AHB + 0x9c040) -#define GPIO_PIO3_BASE (PERIPH_BASE_AHB + 0x9c060) -#define GPIO_PIO4_BASE (PERIPH_BASE_AHB + 0x9c080) +#define SCT_BASE (PERIPH_BASE_AHB + 0x00000) +/* PERIPH_BASE_AHB + 0x01000 (0x4000 1000 - 0x4000 1FFF): Reserved */ +#define DMA_BASE (PERIPH_BASE_AHB + 0x02000) +#define SPIFI_BASE (PERIPH_BASE_AHB + 0x03000) +#define SDIO_BASE (PERIPH_BASE_AHB + 0x04000) +#define EMC_BASE (PERIPH_BASE_AHB + 0x05000) +#define USB0_BASE (PERIPH_BASE_AHB + 0x06000) +#define USB1_BASE (PERIPH_BASE_AHB + 0x07000) +#define LCD_BASE (PERIPH_BASE_AHB + 0x08000) +/* PERIPH_BASE_AHB + 0x09000 (0x4000 9000 - 0x4000 FFFF): Reserved */ +#define ETHERNET_BASE (PERIPH_BASE_AHB + 0x10000) + +/* 0x4001 2000 - 0x4003 FFFF Reserved */ + +/* RTC domain peripherals */ +//TODO + +/* clocking/reset control peripherals */ +//TODO + +/* 0x4006 0000 - 0x4007 FFFF Reserved */ + +/* APB0 */ +#define WWDT_BASE (PERIPH_BASE_APB0 + 0x00000) +#define USART0_BASE (PERIPH_BASE_APB0 + 0x01000) +#define UART1_BASE (PERIPH_BASE_APB0 + 0x02000) +#define SSP0_BASE (PERIPH_BASE_APB0 + 0x03000) +#define TIMER0_BASE (PERIPH_BASE_APB0 + 0x04000) +#define TIMER1_BASE (PERIPH_BASE_APB0 + 0x05000) +#define SCU_BASE (PERIPH_BASE_APB0 + 0x06000) +#define GPIO_PIN_INTERRUPT_BASE (PERIPH_BASE_APB0 + 0x07000) +#define GPIO_GROUP0_INTRRUPT_BASE (PERIPH_BASE_APB0 + 0x08000) +#define GPIO_GROUP1_INTRRUPT_BASE (PERIPH_BASE_APB0 + 0x09000) + +/* 0x4009 0000 - 0x4009 FFFF Reserved */ + +/* APB1 */ +//TODO + +/* 0x400B 0000 - 0x400B FFFF Reserved */ + +/* APB2 */ +//TODO + +/* 0x400D 0000 - 0x400D FFFF Reserved */ + +/* APB3 */ +//TODO + +/* 0x400F 0000 - 0x400F 0FFF Reserved */ + +#define AES_BASE 0x400F1000 + +/* 0x400F 2000 - 0x400F 3FFF Reserved */ + +#define GPIO_PORT_BASE 0x400F4000 + +/* 0x400F 8000 - 0x400F FFFF Reserved */ + +#define SPI_PORT_BASE 0x40100000 +#define SGPIO_PORT_BASE 0x40101000 + +/* 0x4010 2000 - 0x41FF FFFF Reserved */ + +/* 0x4200 0000 - 0x43FF FFFF peripheral bit band alias region */ + +/* 0x4400 0000 - 0x5FFF FFFF Reserved */ + +/* 0x6000 0000 - 0xFFFF FFFF external memories and ARM private bus */ #endif