new lib/lpc43xx, starting with copy of lpc17xx
This commit is contained in:
58
lib/lpc43xx/Makefile
Normal file
58
lib/lpc43xx/Makefile
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
##
|
||||||
|
## This file is part of the libopencm3 project.
|
||||||
|
##
|
||||||
|
## Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||||
|
##
|
||||||
|
## 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 <http://www.gnu.org/licenses/>.
|
||||||
|
##
|
||||||
|
|
||||||
|
LIBNAME = libopencm3_lpc17xx
|
||||||
|
|
||||||
|
PREFIX ?= arm-none-eabi
|
||||||
|
#PREFIX ?= arm-elf
|
||||||
|
CC = $(PREFIX)-gcc
|
||||||
|
AR = $(PREFIX)-ar
|
||||||
|
CFLAGS = -O0 -g -Wall -Wextra -I../../include -fno-common \
|
||||||
|
-mcpu=cortex-m3 -mthumb -Wstrict-prototypes \
|
||||||
|
-ffunction-sections -fdata-sections -MD
|
||||||
|
# ARFLAGS = rcsv
|
||||||
|
ARFLAGS = rcs
|
||||||
|
OBJS = gpio.o vector.o
|
||||||
|
|
||||||
|
# VPATH += ../usb
|
||||||
|
|
||||||
|
# Be silent per default, but 'make V=1' will show all compiler calls.
|
||||||
|
ifneq ($(V),1)
|
||||||
|
Q := @
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(LIBNAME).a
|
||||||
|
|
||||||
|
$(LIBNAME).a: $(OBJS)
|
||||||
|
@printf " AR $(subst $(shell pwd)/,,$(@))\n"
|
||||||
|
$(Q)$(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
@printf " CC $(subst $(shell pwd)/,,$(@))\n"
|
||||||
|
$(Q)$(CC) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@printf " CLEAN lib/lpc17xx\n"
|
||||||
|
$(Q)rm -f *.o *.d
|
||||||
|
$(Q)rm -f $(LIBNAME).a
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
|
||||||
|
-include $(OBJS:.o=.d)
|
||||||
|
|
||||||
30
lib/lpc43xx/gpio.c
Normal file
30
lib/lpc43xx/gpio.c
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the libopencm3 project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Uwe Hermann <uwe@hermann-uwe.de>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <libopencm3/lpc17xx/gpio.h>
|
||||||
|
|
||||||
|
void gpio_set(u32 gpioport, u32 gpios)
|
||||||
|
{
|
||||||
|
GPIO_SET(gpioport) = gpios;
|
||||||
|
}
|
||||||
|
|
||||||
|
void gpio_clear(u32 gpioport, u32 gpios)
|
||||||
|
{
|
||||||
|
GPIO_CLR(gpioport) = gpios;
|
||||||
|
}
|
||||||
73
lib/lpc43xx/libopencm3_lpc17xx.ld
Normal file
73
lib/lpc43xx/libopencm3_lpc17xx.ld
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the libopencm3 project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Generic linker script for LPC13XX targets using libopencm3. */
|
||||||
|
|
||||||
|
/* Memory regions must be defined in the ld script which includes this one. */
|
||||||
|
|
||||||
|
/* Enforce emmition of the vector table. */
|
||||||
|
EXTERN (vector_table)
|
||||||
|
|
||||||
|
/* Define the entry point of the output file. */
|
||||||
|
ENTRY(reset_handler)
|
||||||
|
|
||||||
|
/* Define sections. */
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = ORIGIN(rom);
|
||||||
|
|
||||||
|
.text : {
|
||||||
|
*(.vectors) /* Vector table */
|
||||||
|
*(.text*) /* Program code */
|
||||||
|
*(.rodata*) /* Read-only data */
|
||||||
|
_etext = .;
|
||||||
|
} >rom
|
||||||
|
|
||||||
|
. = ORIGIN(ram);
|
||||||
|
|
||||||
|
.data : {
|
||||||
|
_data = .;
|
||||||
|
*(.data*) /* Read-write initialized data */
|
||||||
|
_edata = .;
|
||||||
|
} >ram AT >rom
|
||||||
|
|
||||||
|
.bss : {
|
||||||
|
*(.bss*) /* Read-write zero initialized data */
|
||||||
|
*(COMMON)
|
||||||
|
_ebss = .;
|
||||||
|
} >ram AT >rom
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The .eh_frame section appears to be used for C++ exception handling.
|
||||||
|
* You may need to fix this if you're using C++.
|
||||||
|
*/
|
||||||
|
/DISCARD/ : { *(.eh_frame) }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Another section used by C++ stuff, appears when using newlib with
|
||||||
|
* 64bit (long long) printf support - discard it for now.
|
||||||
|
*/
|
||||||
|
/DISCARD/ : { *(.ARM.exidx) }
|
||||||
|
|
||||||
|
end = .;
|
||||||
|
}
|
||||||
|
|
||||||
|
PROVIDE(_stack = ORIGIN(ram) + LENGTH(ram));
|
||||||
|
|
||||||
94
lib/lpc43xx/vector.c
Normal file
94
lib/lpc43xx/vector.c
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the libopencm3 project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Piotr Esden-Tempski <piotr@esden.net>
|
||||||
|
*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define WEAK __attribute__ ((weak))
|
||||||
|
|
||||||
|
/* Symbols exported by the linker script(s). */
|
||||||
|
extern unsigned _etext, _data, _edata, _ebss, _stack;
|
||||||
|
|
||||||
|
void main(void);
|
||||||
|
void reset_handler(void);
|
||||||
|
void blocking_handler(void);
|
||||||
|
void null_handler(void);
|
||||||
|
|
||||||
|
void WEAK nmi_handler(void);
|
||||||
|
void WEAK hard_fault_handler(void);
|
||||||
|
void WEAK mem_manage_handler(void);
|
||||||
|
void WEAK bus_fault_handler(void);
|
||||||
|
void WEAK usage_fault_handler(void);
|
||||||
|
void WEAK sv_call_handler(void);
|
||||||
|
void WEAK debug_monitor_handler(void);
|
||||||
|
void WEAK pend_sv_handler(void);
|
||||||
|
void WEAK sys_tick_handler(void);
|
||||||
|
|
||||||
|
/* TODO: Interrupt handler prototypes */
|
||||||
|
|
||||||
|
__attribute__ ((section(".vectors")))
|
||||||
|
void (*const vector_table[]) (void) = {
|
||||||
|
(void*)&_stack, /* Addr: 0x0000_0000 */
|
||||||
|
reset_handler, /* Addr: 0x0000_0004 */
|
||||||
|
nmi_handler, /* Addr: 0x0000_0008 */
|
||||||
|
hard_fault_handler, /* Addr: 0x0000_000C */
|
||||||
|
mem_manage_handler, /* Addr: 0x0000_0010 */
|
||||||
|
bus_fault_handler, /* Addr: 0x0000_0014 */
|
||||||
|
usage_fault_handler, /* Addr: 0x0000_0018 */
|
||||||
|
0, 0, 0, 0, /* Reserved Addr: 0x0000_001C - 0x0000_002B */
|
||||||
|
sv_call_handler, /* Addr: 0x0000_002C */
|
||||||
|
debug_monitor_handler, /* Addr: 0x0000_0030 */
|
||||||
|
0, /* Reserved Addr: 0x0000_00034 */
|
||||||
|
pend_sv_handler, /* Addr: 0x0000_0038 */
|
||||||
|
sys_tick_handler, /* Addr: 0x0000_003C */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void reset_handler(void)
|
||||||
|
{
|
||||||
|
volatile unsigned *src, *dest;
|
||||||
|
__asm__("MSR msp, %0" : : "r"(&_stack));
|
||||||
|
|
||||||
|
for (src = &_etext, dest = &_data; dest < &_edata; src++, dest++)
|
||||||
|
*dest = *src;
|
||||||
|
|
||||||
|
while (dest < &_ebss)
|
||||||
|
*dest++ = 0;
|
||||||
|
|
||||||
|
/* Call the application's entry point. */
|
||||||
|
main();
|
||||||
|
}
|
||||||
|
|
||||||
|
void blocking_handler(void)
|
||||||
|
{
|
||||||
|
while (1) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void null_handler(void)
|
||||||
|
{
|
||||||
|
/* Do nothing. */
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma weak nmi_handler = null_handler
|
||||||
|
#pragma weak hard_fault_handler = blocking_handler
|
||||||
|
#pragma weak mem_manage_handler = blocking_handler
|
||||||
|
#pragma weak bus_fault_handler = blocking_handler
|
||||||
|
#pragma weak usage_fault_handler = blocking_handler
|
||||||
|
#pragma weak sv_call_handler = null_handler
|
||||||
|
#pragma weak debug_monitor_handler = null_handler
|
||||||
|
#pragma weak pend_sv_handler = null_handler
|
||||||
|
#pragma weak sys_tick_handler = null_handler
|
||||||
|
/* TODO: Interrupt handler weak aliases */
|
||||||
Reference in New Issue
Block a user