mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-03 19:48:12 +02:00
+ experimental support unit for Phillips/NXP arm microcontroller
git-svn-id: trunk@12597 -
This commit is contained in:
parent
2a29180517
commit
c07a60f8e0
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -5219,6 +5219,7 @@ rtl/darwin/x86_64/sig_cpu.inc svneol=native#text/plain
|
|||||||
rtl/darwin/x86_64/sighnd.inc svneol=native#text/plain
|
rtl/darwin/x86_64/sighnd.inc svneol=native#text/plain
|
||||||
rtl/embedded/Makefile svneol=native#text/plain
|
rtl/embedded/Makefile svneol=native#text/plain
|
||||||
rtl/embedded/Makefile.fpc svneol=native#text/plain
|
rtl/embedded/Makefile.fpc svneol=native#text/plain
|
||||||
|
rtl/embedded/arm/lpc21x4.pp svneol=native#text/plain
|
||||||
rtl/embedded/check.inc svneol=native#text/plain
|
rtl/embedded/check.inc svneol=native#text/plain
|
||||||
rtl/embedded/empty.cfg -text
|
rtl/embedded/empty.cfg -text
|
||||||
rtl/embedded/rtl.cfg -text
|
rtl/embedded/rtl.cfg -text
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#
|
#
|
||||||
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/10/22]
|
# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/01/23]
|
||||||
#
|
#
|
||||||
default: all
|
default: all
|
||||||
MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
|
MAKEFILETARGETS=i386-embedded m68k-embedded powerpc-embedded sparc-embedded x86_64-embedded arm-embedded powerpc64-embedded avr-embedded armeb-embedded
|
||||||
BSDs = freebsd netbsd openbsd darwin
|
BSDs = freebsd netbsd openbsd darwin
|
||||||
UNIXs = linux $(BSDs) solaris qnx
|
UNIXs = linux $(BSDs) solaris qnx
|
||||||
LIMIT83fs = go32v2 os2 emx watcom
|
LIMIT83fs = go32v2 os2 emx watcom
|
||||||
@ -275,530 +275,94 @@ override FPCOPT+=@rtl.cfg
|
|||||||
ifdef RELEASE
|
ifdef RELEASE
|
||||||
override FPCOPT+=-Ur
|
override FPCOPT+=-Ur
|
||||||
endif
|
endif
|
||||||
|
CPU_UNITS=
|
||||||
|
SYSINIT_UNITS=
|
||||||
|
ifeq ($(ARCH),arm)
|
||||||
|
CPU_UNITS=lpc21x4
|
||||||
|
endif
|
||||||
OBJPASDIR=$(RTL)/objpas
|
OBJPASDIR=$(RTL)/objpas
|
||||||
GRAPHDIR=$(INC)/graph
|
GRAPHDIR=$(INC)/graph
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-win32)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-os2)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-beos)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-haiku)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-solaris)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-qnx)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netware)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-darwin)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-emx)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-watcom)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-wince)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-embedded)
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-symbian)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-atari)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-darwin)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-palmos)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-darwin)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-wince)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-gba)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-nds)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-embedded)
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-symbian)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),avr-embedded)
|
ifeq ($(FULL_TARGET),avr-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),armeb-linux)
|
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),armeb-embedded)
|
ifeq ($(FULL_TARGET),armeb-embedded)
|
||||||
override TARGET_UNITS+=$(SYSTEMUNIT) # objpas macpas strings
|
override TARGET_UNITS+=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings
|
||||||
endif
|
endif
|
||||||
override INSTALL_FPCPACKAGE=y
|
override INSTALL_FPCPACKAGE=y
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-win32)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-os2)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-beos)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-haiku)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-solaris)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-qnx)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netware)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-darwin)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-emx)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-watcom)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-wince)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-embedded)
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-symbian)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-atari)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-darwin)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-palmos)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-darwin)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-wince)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-gba)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-nds)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-embedded)
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-symbian)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),avr-embedded)
|
ifeq ($(FULL_TARGET),avr-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),armeb-linux)
|
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),armeb-embedded)
|
ifeq ($(FULL_TARGET),armeb-embedded)
|
||||||
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
override COMPILER_INCLUDEDIR+=$(INC) $(PROCINC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),i386-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-go32v2)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-win32)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-os2)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-freebsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-beos)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-haiku)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netbsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-solaris)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-qnx)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netware)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-openbsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-wdosx)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-darwin)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-emx)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-watcom)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-netwlibc)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-wince)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-embedded)
|
ifeq ($(FULL_TARGET),i386-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),i386-symbian)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-freebsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-netbsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-amiga)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-atari)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-openbsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),m68k-palmos)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),m68k-embedded)
|
ifeq ($(FULL_TARGET),m68k-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-netbsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-amiga)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-macos)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-darwin)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc-morphos)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc-embedded)
|
ifeq ($(FULL_TARGET),powerpc-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-netbsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),sparc-solaris)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),sparc-embedded)
|
ifeq ($(FULL_TARGET),sparc-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-freebsd)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-darwin)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),x86_64-win64)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),x86_64-embedded)
|
ifeq ($(FULL_TARGET),x86_64-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-palmos)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-darwin)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-wince)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-gba)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-nds)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),arm-embedded)
|
ifeq ($(FULL_TARGET),arm-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),arm-symbian)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),powerpc64-darwin)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
ifeq ($(FULL_TARGET),powerpc64-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),avr-embedded)
|
ifeq ($(FULL_TARGET),avr-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
|
||||||
ifeq ($(FULL_TARGET),armeb-linux)
|
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
|
||||||
endif
|
endif
|
||||||
ifeq ($(FULL_TARGET),armeb-embedded)
|
ifeq ($(FULL_TARGET),armeb-embedded)
|
||||||
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON)
|
override COMPILER_SOURCEDIR+=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
endif
|
endif
|
||||||
ifdef REQUIRE_UNITSDIR
|
ifdef REQUIRE_UNITSDIR
|
||||||
override UNITSDIR+=$(REQUIRE_UNITSDIR)
|
override UNITSDIR+=$(REQUIRE_UNITSDIR)
|
||||||
|
@ -7,7 +7,7 @@ main=rtl
|
|||||||
|
|
||||||
[target]
|
[target]
|
||||||
loaders=
|
loaders=
|
||||||
units=$(SYSTEMUNIT) # objpas macpas strings \
|
units=$(SYSTEMUNIT) $(CPU_UNITS) # objpas macpas strings \
|
||||||
# dos \
|
# dos \
|
||||||
# sysutils \
|
# sysutils \
|
||||||
# classes math typinfo varutils fmtbcd \
|
# classes math typinfo varutils fmtbcd \
|
||||||
@ -29,8 +29,7 @@ target=embedded
|
|||||||
|
|
||||||
[compiler]
|
[compiler]
|
||||||
includedir=$(INC) $(PROCINC)
|
includedir=$(INC) $(PROCINC)
|
||||||
sourcedir=$(INC) $(PROCINC) $(COMMON)
|
sourcedir=$(INC) $(PROCINC) $(COMMON) $(ARCH)
|
||||||
|
|
||||||
|
|
||||||
[prerules]
|
[prerules]
|
||||||
RTL=..
|
RTL=..
|
||||||
@ -45,6 +44,13 @@ ifdef RELEASE
|
|||||||
override FPCOPT+=-Ur
|
override FPCOPT+=-Ur
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
CPU_UNITS=
|
||||||
|
SYSINIT_UNITS=
|
||||||
|
|
||||||
|
ifeq ($(ARCH),arm)
|
||||||
|
CPU_UNITS=lpc21x4
|
||||||
|
endif
|
||||||
|
|
||||||
# Paths
|
# Paths
|
||||||
OBJPASDIR=$(RTL)/objpas
|
OBJPASDIR=$(RTL)/objpas
|
||||||
GRAPHDIR=$(INC)/graph
|
GRAPHDIR=$(INC)/graph
|
||||||
|
478
rtl/embedded/arm/lpc21x4.pp
Normal file
478
rtl/embedded/arm/lpc21x4.pp
Normal file
@ -0,0 +1,478 @@
|
|||||||
|
{******************************************************************************
|
||||||
|
lpc2114.h - Register defs for Philips LPC2114, LPC2124
|
||||||
|
|
||||||
|
|
||||||
|
THE SOFTWARE IS DELIVERED "AS IS" WITHOUT WARRANTY OR CONDITION OF ANY KIND,
|
||||||
|
EITHER EXPRESS, IMPLIED OR STATUTORY. THIS INCLUDES WITHOUT LIMITATION ANY
|
||||||
|
WARRANTY OR CONDITION WITH RESPECT TO MERCHANTABILITY OR FITNESS FOR ANY
|
||||||
|
PARTICULAR PURPOSE, OR AGAINST THE INFRINGEMENTS OF INTELLECTUAL PROPERTY RIGHTS
|
||||||
|
OF OTHERS.
|
||||||
|
|
||||||
|
This file may be freely used for commercial and non-commercial applications,
|
||||||
|
including being redistributed with any tools.
|
||||||
|
|
||||||
|
If you find a problem with the file, please report it so that it can be fixed.
|
||||||
|
|
||||||
|
Created by Sten Larsson (sten_larsson at yahoo com)
|
||||||
|
|
||||||
|
Free Pascal conversion by the Free Pascal development team
|
||||||
|
******************************************************************************}
|
||||||
|
unit lpc21x4;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## MISC
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
{ Constants for data to put in IRQ/FIQ Exception Vectors }
|
||||||
|
const
|
||||||
|
VECTDATA_IRQ = dword($E51FFFF0); { LDR PC,[PC,#-0xFF0] }
|
||||||
|
// VECTDATA_FIQ { __TODO }
|
||||||
|
|
||||||
|
type
|
||||||
|
BITS32 = bitpacked array[0..31] of 0..1;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## VECTORED INTERRUPT CONTROLLER
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
var
|
||||||
|
VICIRQStatus : DWord absolute dword($FFFFF000);
|
||||||
|
VICFIQStatus : DWord absolute $FFFFF004;
|
||||||
|
VICRawIntr : DWord absolute $FFFFF008;
|
||||||
|
VICIntSelect : DWord absolute $FFFFF00C;
|
||||||
|
VICIntEnable : DWord absolute $FFFFF010;
|
||||||
|
VICIntEnClear : DWord absolute $FFFFF014;
|
||||||
|
VICSoftInt : DWord absolute $FFFFF018;
|
||||||
|
VICSoftIntClear : DWord absolute $FFFFF01C;
|
||||||
|
VICProtection : DWord absolute $FFFFF020;
|
||||||
|
VICVectAddr : DWord absolute $FFFFF030;
|
||||||
|
VICDefVectAddr : DWord absolute $FFFFF034;
|
||||||
|
|
||||||
|
VICVectAddr0 : DWord absolute $FFFFF100;
|
||||||
|
VICVectAddr1 : DWord absolute $FFFFF104;
|
||||||
|
VICVectAddr2 : DWord absolute $FFFFF108;
|
||||||
|
VICVectAddr3 : DWord absolute $FFFFF10C;
|
||||||
|
VICVectAddr4 : DWord absolute $FFFFF110;
|
||||||
|
VICVectAddr5 : DWord absolute $FFFFF114;
|
||||||
|
VICVectAddr6 : DWord absolute $FFFFF118;
|
||||||
|
VICVectAddr7 : DWord absolute $FFFFF11C;
|
||||||
|
VICVectAddr8 : DWord absolute $FFFFF120;
|
||||||
|
VICVectAddr9 : DWord absolute $FFFFF124;
|
||||||
|
VICVectAddr10 : DWord absolute $FFFFF128;
|
||||||
|
VICVectAddr11 : DWord absolute $FFFFF12C;
|
||||||
|
VICVectAddr12 : DWord absolute $FFFFF130;
|
||||||
|
VICVectAddr13 : DWord absolute $FFFFF134;
|
||||||
|
VICVectAddr14 : DWord absolute $FFFFF138;
|
||||||
|
VICVectAddr15 : DWord absolute $FFFFF13C;
|
||||||
|
|
||||||
|
VICVectCntl0 : DWord absolute $FFFFF200;
|
||||||
|
VICVectCntl1 : DWord absolute $FFFFF204;
|
||||||
|
VICVectCntl2 : DWord absolute $FFFFF208;
|
||||||
|
VICVectCntl3 : DWord absolute $FFFFF20C;
|
||||||
|
VICVectCntl4 : DWord absolute $FFFFF210;
|
||||||
|
VICVectCntl5 : DWord absolute $FFFFF214;
|
||||||
|
VICVectCntl6 : DWord absolute $FFFFF218;
|
||||||
|
VICVectCntl7 : DWord absolute $FFFFF21C;
|
||||||
|
VICVectCntl8 : DWord absolute $FFFFF220;
|
||||||
|
VICVectCntl9 : DWord absolute $FFFFF224;
|
||||||
|
VICVectCntl10 : DWord absolute $FFFFF228;
|
||||||
|
VICVectCntl11 : DWord absolute $FFFFF22C;
|
||||||
|
VICVectCntl12 : DWord absolute $FFFFF230;
|
||||||
|
VICVectCntl13 : DWord absolute $FFFFF234;
|
||||||
|
VICVectCntl14 : DWord absolute $FFFFF238;
|
||||||
|
VICVectCntl15 : DWord absolute $FFFFF23C;
|
||||||
|
|
||||||
|
VICITCR : DWord absolute $FFFFF300;
|
||||||
|
VICITIP1 : DWord absolute $FFFFF304;
|
||||||
|
VICITIP2 : DWord absolute $FFFFF308;
|
||||||
|
VICITOP1 : DWord absolute $FFFFF30C;
|
||||||
|
VICITOP2 : DWord absolute $FFFFF310;
|
||||||
|
VICPeriphID0 : DWord absolute $FFFFFFE0;
|
||||||
|
VICPeriphID1 : DWord absolute $FFFFFFE4;
|
||||||
|
VICPeriphID2 : DWord absolute $FFFFFFE8;
|
||||||
|
VICPeriphID3 : DWord absolute $FFFFFFEC;
|
||||||
|
|
||||||
|
VICIntEnClr : DWord absolute $FFFFF014;
|
||||||
|
VICSoftIntClr : DWord absolute $FFFFF01C;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## PCB - Pin Connect Block
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
PCB_PINSEL0 : DWord absolute $E002C000;
|
||||||
|
PCB_PINSEL1 : DWord absolute $E002C004;
|
||||||
|
PCB_PINSEL2 : DWord absolute $E002C014;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## GPIO - General Purpose I/O
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
GPIO0_IOPIN : DWord absolute $E0028000;
|
||||||
|
GPIO0_IOSET : DWord absolute $E0028004;
|
||||||
|
GPIO0_IODIR : DWord absolute $E0028008;
|
||||||
|
GPIO0_IOCLR : DWord absolute $E002800C;
|
||||||
|
|
||||||
|
GPIO1_IOPIN : DWord absolute $E0028010;
|
||||||
|
GPIO1_IOSET : DWord absolute $E0028014;
|
||||||
|
GPIO1_IODIR : DWord absolute $E0028018;
|
||||||
|
GPIO1_IOCLR : DWord absolute $E002801C;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## UART0 / UART1
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
{ ---- UART 0 --------------------------------------------- }
|
||||||
|
UART0_RBR : DWord absolute $E000C000;
|
||||||
|
UART0_THR : DWord absolute $E000C000;
|
||||||
|
UART0_IER : DWord absolute $E000C004;
|
||||||
|
UART0_IIR : DWord absolute $E000C008;
|
||||||
|
UART0_FCR : DWord absolute $E000C008;
|
||||||
|
UART0_LCR : DWord absolute $E000C00C;
|
||||||
|
UART0_LSR : DWord absolute $E000C014;
|
||||||
|
UART0_SCR : DWord absolute $E000C01C;
|
||||||
|
UART0_DLL : DWord absolute $E000C000;
|
||||||
|
UART0_DLM : DWord absolute $E000C004;
|
||||||
|
|
||||||
|
{ ---- UART 1 --------------------------------------------- }
|
||||||
|
UART1_RBR : DWord absolute $E0010000;
|
||||||
|
UART1_THR : DWord absolute $E0010000;
|
||||||
|
UART1_IER : DWord absolute $E0010004;
|
||||||
|
UART1_IIR : DWord absolute $E0010008;
|
||||||
|
UART1_FCR : DWord absolute $E0010008;
|
||||||
|
UART1_LCR : DWord absolute $E001000C;
|
||||||
|
UART1_LSR : DWord absolute $E0010014;
|
||||||
|
UART1_SCR : DWord absolute $E001001C;
|
||||||
|
UART1_DLL : DWord absolute $E0010000;
|
||||||
|
UART1_DLM : DWord absolute $E0010004;
|
||||||
|
UART1_MCR : DWord absolute $E0010010;
|
||||||
|
UART1_MSR : DWord absolute $E0010018;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## I2C
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
I2C_I2CONSET : DWord absolute $E001C000;
|
||||||
|
I2C_I2STAT : DWord absolute $E001C004;
|
||||||
|
I2C_I2DAT : DWord absolute $E001C008;
|
||||||
|
I2C_I2ADR : DWord absolute $E001C00C;
|
||||||
|
I2C_I2SCLH : DWord absolute $E001C010;
|
||||||
|
I2C_I2SCLL : DWord absolute $E001C014;
|
||||||
|
I2C_I2CONCLR : DWord absolute $E001C018;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## SPI - Serial Peripheral Interface
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
SPI_SPCR : DWord absolute $E0020000; { SPI = SPI0 }
|
||||||
|
SPI_SPSR : DWord absolute $E0020004;
|
||||||
|
SPI_SPDR : DWord absolute $E0020008;
|
||||||
|
SPI_SPCCR : DWord absolute $E002000C;
|
||||||
|
SPI_SPTCR : DWord absolute $E0020010;
|
||||||
|
SPI_SPTSR : DWord absolute $E0020014;
|
||||||
|
SPI_SPTOR : DWord absolute $E0020018;
|
||||||
|
SPI_SPINT : DWord absolute $E002001C;
|
||||||
|
|
||||||
|
SPI0_SPCR : DWord absolute $E0020000; { SPI = SPI0 }
|
||||||
|
SPI0_SPSR : DWord absolute $E0020004;
|
||||||
|
SPI0_SPDR : DWord absolute $E0020008;
|
||||||
|
SPI0_SPCCR : DWord absolute $E002000C;
|
||||||
|
SPI0_SPTCR : DWord absolute $E0020010;
|
||||||
|
SPI0_SPTSR : DWord absolute $E0020014;
|
||||||
|
SPI0_SPTOR : DWord absolute $E0020018;
|
||||||
|
SPI0_SPINT : DWord absolute $E002001C;
|
||||||
|
|
||||||
|
SPI1_SPCR : DWord absolute $E0030000;
|
||||||
|
SPI1_SPSR : DWord absolute $E0030004;
|
||||||
|
SPI1_SPDR : DWord absolute $E0030008;
|
||||||
|
SPI1_SPCCR : DWord absolute $E003000C;
|
||||||
|
SPI1_SPTCR : DWord absolute $E0030010;
|
||||||
|
SPI1_SPTSR : DWord absolute $E0030014;
|
||||||
|
SPI1_SPTOR : DWord absolute $E0030018;
|
||||||
|
SPI1_SPINT : DWord absolute $E003001C;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## Timer 0 and Timer 1
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
{ ---- Timer 0 -------------------------------------------- }
|
||||||
|
T0_IR : DWord absolute $E0004000;
|
||||||
|
T0_TCR : DWord absolute $E0004004;
|
||||||
|
T0_TC : DWord absolute $E0004008;
|
||||||
|
T0_PR : DWord absolute $E000400C;
|
||||||
|
T0_PC : DWord absolute $E0004010;
|
||||||
|
T0_MCR : DWord absolute $E0004014;
|
||||||
|
T0_MR0 : DWord absolute $E0004018;
|
||||||
|
T0_MR1 : DWord absolute $E000401C;
|
||||||
|
T0_MR2 : DWord absolute $E0004020;
|
||||||
|
T0_MR3 : DWord absolute $E0004024;
|
||||||
|
T0_CCR : DWord absolute $E0004028;
|
||||||
|
T0_CR0 : DWord absolute $E000402C;
|
||||||
|
T0_CR1 : DWord absolute $E0004030;
|
||||||
|
T0_CR2 : DWord absolute $E0004034;
|
||||||
|
T0_CR3 : DWord absolute $E0004038;
|
||||||
|
T0_EMR : DWord absolute $E000403C;
|
||||||
|
|
||||||
|
{ ---- Timer 1 -------------------------------------------- }
|
||||||
|
T1_IR : DWord absolute $E0008000;
|
||||||
|
T1_TCR : DWord absolute $E0008004;
|
||||||
|
T1_TC : DWord absolute $E0008008;
|
||||||
|
T1_PR : DWord absolute $E000800C;
|
||||||
|
T1_PC : DWord absolute $E0008010;
|
||||||
|
T1_MCR : DWord absolute $E0008014;
|
||||||
|
T1_MR0 : DWord absolute $E0008018;
|
||||||
|
T1_MR1 : DWord absolute $E000801C;
|
||||||
|
T1_MR2 : DWord absolute $E0008020;
|
||||||
|
T1_MR3 : DWord absolute $E0008024;
|
||||||
|
T1_CCR : DWord absolute $E0008028;
|
||||||
|
T1_CR0 : DWord absolute $E000802C;
|
||||||
|
T1_CR1 : DWord absolute $E0008030;
|
||||||
|
T1_CR2 : DWord absolute $E0008034;
|
||||||
|
T1_CR3 : DWord absolute $E0008038;
|
||||||
|
T1_EMR : DWord absolute $E000803C;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## PWM
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
PWM_IR : DWord absolute $E0014000;
|
||||||
|
PWM_TCR : DWord absolute $E0014004;
|
||||||
|
PWM_TC : DWord absolute $E0014008;
|
||||||
|
PWM_PR : DWord absolute $E001400C;
|
||||||
|
PWM_PC : DWord absolute $E0014010;
|
||||||
|
PWM_MCR : DWord absolute $E0014014;
|
||||||
|
PWM_MR0 : DWord absolute $E0014018;
|
||||||
|
PWM_MR1 : DWord absolute $E001401C;
|
||||||
|
PWM_MR2 : DWord absolute $E0014020;
|
||||||
|
PWM_MR3 : DWord absolute $E0014024;
|
||||||
|
PWM_MR4 : DWord absolute $E0014040;
|
||||||
|
PWM_MR5 : DWord absolute $E0014044;
|
||||||
|
PWM_MR6 : DWord absolute $E0014048;
|
||||||
|
PWM_EMR : DWord absolute $E001403C;
|
||||||
|
PWM_PCR : DWord absolute $E001404C;
|
||||||
|
PWM_LER : DWord absolute $E0014050;
|
||||||
|
PWM_CCR : DWord absolute $E0014028;
|
||||||
|
PWM_CR0 : DWord absolute $E001402C;
|
||||||
|
PWM_CR1 : DWord absolute $E0014030;
|
||||||
|
PWM_CR2 : DWord absolute $E0014034;
|
||||||
|
PWM_CR3 : DWord absolute $E0014038;
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## RTC
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
{ ---- RTC: Miscellaneous Register Group ------------------ }
|
||||||
|
RTC_ILR : DWord absolute $E0024000;
|
||||||
|
RTC_CTC : DWord absolute $E0024004;
|
||||||
|
RTC_CCR : DWord absolute $E0024008;
|
||||||
|
RTC_CIIR : DWord absolute $E002400C;
|
||||||
|
RTC_AMR : DWord absolute $E0024010;
|
||||||
|
RTC_CTIME0 : DWord absolute $E0024014;
|
||||||
|
RTC_CTIME1 : DWord absolute $E0024018;
|
||||||
|
RTC_CTIME2 : DWord absolute $E002401C;
|
||||||
|
|
||||||
|
{ ---- RTC: Timer Control Group --------------------------- }
|
||||||
|
RTC_SEC : DWord absolute $E0024020;
|
||||||
|
RTC_MIN : DWord absolute $E0024024;
|
||||||
|
RTC_HOUR : DWord absolute $E0024028;
|
||||||
|
RTC_DOM : DWord absolute $E002402C;
|
||||||
|
RTC_DOW : DWord absolute $E0024030;
|
||||||
|
RTC_DOY : DWord absolute $E0024034;
|
||||||
|
RTC_MONTH : DWord absolute $E0024038;
|
||||||
|
RTC_YEAR : DWord absolute $E002403C;
|
||||||
|
|
||||||
|
{ ---- RTC: Alarm Control Group --------------------------- }
|
||||||
|
RTC_ALSEC : DWord absolute $E0024060;
|
||||||
|
RTC_ALMIN : DWord absolute $E0024064;
|
||||||
|
RTC_ALHOUR : DWord absolute $E0024068;
|
||||||
|
RTC_ALDOM : DWord absolute $E002406C;
|
||||||
|
RTC_ALDOW : DWord absolute $E0024070;
|
||||||
|
RTC_ALDOY : DWord absolute $E0024074;
|
||||||
|
RTC_ALMON : DWord absolute $E0024078;
|
||||||
|
RTC_ALYEAR : DWord absolute $E002407C;
|
||||||
|
|
||||||
|
{ ---- RTC: Reference Clock Divider Group ----------------- }
|
||||||
|
RTC_PREINT : DWord absolute $E0024080;
|
||||||
|
RTC_PREFRAC : DWord absolute $E0024084;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## AE - AD Converter
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
AD_ADCR : DWord absolute $E0034000;
|
||||||
|
AD_ADDR : DWord absolute $E0034004;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## WD - Watchdog
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
WD_WDMOD : DWord absolute $E0000000;
|
||||||
|
WD_WDTC : DWord absolute $E0000004;
|
||||||
|
WD_WDFEED : DWord absolute $E0000008;
|
||||||
|
WD_WDTV : DWord absolute $E000000C;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## SCB - System Control Block
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
SCB_EXTINT : DWord absolute $E01FC140;
|
||||||
|
SCB_EXTWAKE : DWord absolute $E01FC144;
|
||||||
|
SCB_EXTMODE : DWord absolute $E01FC148;
|
||||||
|
SCB_EXTPOLAR : DWord absolute $E01FC14C;
|
||||||
|
SCB_MEMMAP : DWord absolute $E01FC040;
|
||||||
|
SCB_PLLCON : DWord absolute $E01FC080;
|
||||||
|
SCB_PLLCFG : DWord absolute $E01FC084;
|
||||||
|
SCB_PLLSTAT : DWord absolute $E01FC088;
|
||||||
|
SCB_PLLFEED : DWord absolute $E01FC08C;
|
||||||
|
SCB_PCON : DWord absolute $E01FC0C0;
|
||||||
|
SCB_PCONP : DWord absolute $E01FC0C4;
|
||||||
|
SCB_VPBDIV : DWord absolute $E01FC100;
|
||||||
|
|
||||||
|
|
||||||
|
{##############################################################################
|
||||||
|
## MAM - Memory Accelerator Module
|
||||||
|
##############################################################################}
|
||||||
|
|
||||||
|
MAM_MAMCR : DWord absolute $E01FC000;
|
||||||
|
MAM_MAMTIM : DWord absolute $E01FC004;
|
||||||
|
MAM_MAMMAP : DWord absolute $E01FC040;
|
||||||
|
|
||||||
|
var
|
||||||
|
Undefined_Handler
|
||||||
|
SWI_Handler,
|
||||||
|
Prefetch_Handler,
|
||||||
|
Abort_Handler,
|
||||||
|
FIQ_Handler : pointer;
|
||||||
|
|
||||||
|
procedure InitPLL(m : 1..32;p : 1..8);
|
||||||
|
procedure PLLFeed;
|
||||||
|
function GetProcessorClock : DWord;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure PLLFeed;
|
||||||
|
begin
|
||||||
|
SCB_PLLFEED:=$aa
|
||||||
|
SCB_PLLFEED:=$55
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function GetProcessorClock(CrystalFrequency : DWord) : DWord;
|
||||||
|
begin
|
||||||
|
if (TBitvector32(SCB_PLLSTAT)[8] and 1)<>0 then
|
||||||
|
Result:=((SCB_PLLSTAT and $f)+1)*CrystalFrequency;
|
||||||
|
else
|
||||||
|
Result:=CrystalFrequency;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure InitPLL(m : 1..32;p : 1..8);
|
||||||
|
begin
|
||||||
|
case p of
|
||||||
|
1: p:=0;
|
||||||
|
2..3: p:=1;
|
||||||
|
4..7: p:=2;
|
||||||
|
8: p:=3;
|
||||||
|
end;
|
||||||
|
{ set p and m }
|
||||||
|
SCB_PLLCFG:=(m-1) or (p shl 5);
|
||||||
|
|
||||||
|
{ write changes }
|
||||||
|
PLLFeed;
|
||||||
|
|
||||||
|
{ start PLL }
|
||||||
|
TBitvector32(SCB_PLLCON)[0]:=1;
|
||||||
|
|
||||||
|
{ write changes }
|
||||||
|
PLLFeed;
|
||||||
|
|
||||||
|
{ wait for pll sync }
|
||||||
|
while TBitvector32(SCB_PLLSTAT)[10]=0 do
|
||||||
|
;
|
||||||
|
|
||||||
|
{ connect PLL }
|
||||||
|
TBitvector32(SCB_PLLCON)[1]:=1;
|
||||||
|
|
||||||
|
{ write changes }
|
||||||
|
PLLFeed;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
asm
|
||||||
|
// code derived from phillips appnote 10254
|
||||||
|
.init
|
||||||
|
Entry:
|
||||||
|
ldr pc, _start
|
||||||
|
ldr pc, Undefined_Addr
|
||||||
|
ldr pc, SWI_Addr
|
||||||
|
ldr pc, Prefetch_Addr
|
||||||
|
ldr pc, Abort_Addr
|
||||||
|
|
||||||
|
// signature
|
||||||
|
nop
|
||||||
|
ldr pc, [PC, #-0xFF0] // load irq vector from vic
|
||||||
|
ldr pc, FIQ_Addr
|
||||||
|
Undefined_Addr:
|
||||||
|
ldr
|
||||||
|
.L1:
|
||||||
|
.word Un
|
||||||
|
SWI_Handler:
|
||||||
|
B SWI_Handler
|
||||||
|
Prefetch_Handler:
|
||||||
|
B Prefetch_Handler
|
||||||
|
Abort_Handler:
|
||||||
|
B Abort_Handler
|
||||||
|
FIQ_Handler:
|
||||||
|
B FIQ_Handler
|
||||||
|
_start:
|
||||||
|
{
|
||||||
|
Set SP for Supervisor mode. Depending upon
|
||||||
|
the stack the application needs this value
|
||||||
|
needs to be set.
|
||||||
|
stack is already set by bootloader
|
||||||
|
but if this point is entered by any
|
||||||
|
other means than reset, the stack pointer
|
||||||
|
needs to be set explicity
|
||||||
|
}
|
||||||
|
// LDR SP,=0x40001000
|
||||||
|
|
||||||
|
{
|
||||||
|
Setting up SP for IRQ and FIQ mode.
|
||||||
|
Change mode before setting each one
|
||||||
|
move back again to Supervisor mode
|
||||||
|
Each interrupt has its own link
|
||||||
|
register, stack pointer and program
|
||||||
|
counter The stack pointers must be
|
||||||
|
initialized for interrupts to be
|
||||||
|
used later.
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
setup for fiq and irq interrupt stacks to run
|
||||||
|
below current stack by 1000.
|
||||||
|
}
|
||||||
|
mov r0, sp // copy current stack pointer
|
||||||
|
sub r0, r0, #1000 // make irq stack pointer
|
||||||
|
sub r1, r0, #1000 // make fiq stack pointer
|
||||||
|
msr cpsr_c, #0x12 // switch to irq mode
|
||||||
|
mov sp, r0 // set irq stack pointer
|
||||||
|
msr cpsr_c, #0x11 // fiq mode
|
||||||
|
mov sp, r1 // set fiq stack pointer
|
||||||
|
msr cpsr_c, #0x13 // supervisor mode F,I enabled
|
||||||
|
|
||||||
|
bl PASCALMAIN
|
||||||
|
end;
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user