aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-10-04 12:00:18 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-10-04 12:00:18 +0000
commitf44bd871c77406f8e28047d9484cbabafa626040 (patch)
tree943b624cb77712767dfdfb63de149948c3d98eab
parenta3bb2266cf4fc0c3b6deb6595bb992d30b698191 (diff)
downloadChibiOS-f44bd871c77406f8e28047d9484cbabafa626040.tar.gz
ChibiOS-f44bd871c77406f8e28047d9484cbabafa626040.tar.bz2
ChibiOS-f44bd871c77406f8e28047d9484cbabafa626040.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@459 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--demos/ARM7-LPC214x-G++/Makefile3
-rw-r--r--demos/ARM7-LPC214x-G++/Makefile.thumb3
-rw-r--r--demos/ARM7-LPC214x-G++/board.c20
-rw-r--r--demos/ARM7-LPC214x-G++/ch.ld2
-rw-r--r--demos/ARM7-LPC214x-G++/main.cpp6
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/Makefile3
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/Makefile.thumb3
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/board.c20
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/ch.ld2
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/main.c9
-rw-r--r--demos/ARM7-LPC214x-GCC/Makefile3
-rw-r--r--demos/ARM7-LPC214x-GCC/Makefile.thumb3
-rw-r--r--demos/ARM7-LPC214x-GCC/board.c20
-rw-r--r--demos/ARM7-LPC214x-GCC/ch.ld2
-rw-r--r--demos/ARM7-LPC214x-GCC/main.c9
-rw-r--r--ports/ARM7-LPC214x/crt0.s172
-rw-r--r--ports/ARM7-LPC214x/vectors.s49
-rw-r--r--readme.txt2
18 files changed, 122 insertions, 209 deletions
diff --git a/demos/ARM7-LPC214x-G++/Makefile b/demos/ARM7-LPC214x-G++/Makefile
index 95d6bfdb8..9bd08a8ee 100644
--- a/demos/ARM7-LPC214x-G++/Makefile
+++ b/demos/ARM7-LPC214x-G++/Makefile
@@ -93,7 +93,8 @@ TCSRC =
TCPPSRC =
# List ASM source files here
-ASMSRC = ../../ports/ARM7-LPC214x/crt0.s ../../ports/ARM7/chsys.s
+ASMSRC = ../../ports/ARM7/crt0.s ../../ports/ARM7/chsys.s \
+ ../../ports/ARM7-LPC214x/vectors.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib ../../test \
diff --git a/demos/ARM7-LPC214x-G++/Makefile.thumb b/demos/ARM7-LPC214x-G++/Makefile.thumb
index 29f2a61a4..177e7cda0 100644
--- a/demos/ARM7-LPC214x-G++/Makefile.thumb
+++ b/demos/ARM7-LPC214x-G++/Makefile.thumb
@@ -93,7 +93,8 @@ TCSRC = ../../ports/ARM7-LPC214x/chcore.c \
TCPPSRC = ../../src/lib/ch.cpp main.cpp
# List ASM source files here
-ASMSRC = ../../ports/ARM7-LPC214x/crt0.s ../../ports/ARM7/chsys.s
+ASMSRC = ../../ports/ARM7/crt0.s ../../ports/ARM7/chsys.s \
+ ../../ports/ARM7-LPC214x/vectors.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib ../../test \
diff --git a/demos/ARM7-LPC214x-G++/board.c b/demos/ARM7-LPC214x-G++/board.c
index 6f004ba29..8b17399e0 100644
--- a/demos/ARM7-LPC214x-G++/board.c
+++ b/demos/ARM7-LPC214x-G++/board.c
@@ -58,10 +58,11 @@ static void T0IrqHandler(void) {
}
/*
- * Hardware initialization goes here.
- * NOTE: Interrupts are still disabled.
+ * Early initialization code.
+ * This initialization is performed just after reset before BSS and DATA
+ * segments initialization.
*/
-void hwinit(void) {
+void hwinit0(void) {
/*
* All peripherals clock disabled by default in order to save power.
@@ -106,6 +107,14 @@ void hwinit(void) {
IO0SET = 0xFFFFFFFF;
IO1DIR = VAL_FIO1DIR;
IO1SET = 0xFFFFFFFF;
+}
+
+/*
+ * Late initialization code.
+ * This initialization is performed after BSS and DATA segments initialization
+ * and before invoking the main() function.
+ */
+void hwinit1(void) {
/*
* Interrupt vectors assignment.
@@ -132,4 +141,9 @@ void hwinit(void) {
// InitSSP();
// InitMMC();
// InitBuzzer();
+
+ /*
+ * ChibiOS/RT initialization.
+ */
+ chSysInit();
}
diff --git a/demos/ARM7-LPC214x-G++/ch.ld b/demos/ARM7-LPC214x-G++/ch.ld
index bb59cec1c..81ab80dc6 100644
--- a/demos/ARM7-LPC214x-G++/ch.ld
+++ b/demos/ARM7-LPC214x-G++/ch.ld
@@ -48,7 +48,7 @@ SECTIONS
.text :
{
_text = .;
- KEEP(*(.startup))
+ KEEP(*(vectors))
*(.text)
*(.text.*);
*(.rodata);
diff --git a/demos/ARM7-LPC214x-G++/main.cpp b/demos/ARM7-LPC214x-G++/main.cpp
index 37147fe91..576581b79 100644
--- a/demos/ARM7-LPC214x-G++/main.cpp
+++ b/demos/ARM7-LPC214x-G++/main.cpp
@@ -124,8 +124,8 @@ static void TimerHandler(eventid_t id) {
}
/*
- * Entry point, the interrupts are disabled on entry.
- * This is the real "application".
+ * Entry point, note, the main() function is already a thread in the system
+ * on entry.
*/
int main(int argc, char **argv) {
static const evhandler_t evhndl[] = {
@@ -134,8 +134,6 @@ int main(int argc, char **argv) {
static EvTimer evt;
struct EventListener el0;
- System::Init(); // ChibiOS/RT goes live here.
-
evtInit(&evt, 500); // Initializes an event timer.
evtStart(&evt); // Starts the event timer.
chEvtRegister(&evt.et_es, &el0, 0); // Registers a listener on the source.
diff --git a/demos/ARM7-LPC214x-GCC-minimal/Makefile b/demos/ARM7-LPC214x-GCC-minimal/Makefile
index d035f6f23..6450cad6b 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/Makefile
+++ b/demos/ARM7-LPC214x-GCC-minimal/Makefile
@@ -80,7 +80,8 @@ ASRC = ../../ports/ARM7-LPC214x/chcore.c \
TSRC =
# List ASM source files here
-ASMSRC = ../../ports/ARM7-LPC214x/crt0.s ../../ports/ARM7/chsys.s
+ASMSRC = ../../ports/ARM7/crt0.s ../../ports/ARM7/chsys.s \
+ ../../ports/ARM7-LPC214x/vectors.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib \
diff --git a/demos/ARM7-LPC214x-GCC-minimal/Makefile.thumb b/demos/ARM7-LPC214x-GCC-minimal/Makefile.thumb
index ace728b15..f4fe4c25b 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/Makefile.thumb
+++ b/demos/ARM7-LPC214x-GCC-minimal/Makefile.thumb
@@ -80,7 +80,8 @@ TSRC = ../../ports/ARM7-LPC214x/chcore.c \
board.c main.c
# List ASM source files here
-ASMSRC = ../../ports/ARM7-LPC214x/crt0.s ../../ports/ARM7/chsys.s
+ASMSRC = ../../ports/ARM7/crt0.s ../../ports/ARM7/chsys.s \
+ ../../ports/ARM7-LPC214x/vectors.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib \
diff --git a/demos/ARM7-LPC214x-GCC-minimal/board.c b/demos/ARM7-LPC214x-GCC-minimal/board.c
index e140f2359..3b3bd848e 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/board.c
+++ b/demos/ARM7-LPC214x-GCC-minimal/board.c
@@ -58,10 +58,11 @@ static void T0IrqHandler(void) {
}
/*
- * Hardware initialization goes here.
- * NOTE: Interrupts are still disabled.
+ * Early initialization code.
+ * This initialization is performed just after reset before BSS and DATA
+ * segments initialization.
*/
-void hwinit(void) {
+void hwinit0(void) {
/*
* All peripherals clock disabled by default in order to save power.
@@ -106,6 +107,14 @@ void hwinit(void) {
IO0SET = 0xFFFFFFFF;
IO1DIR = VAL_FIO1DIR;
IO1SET = 0xFFFFFFFF;
+}
+
+/*
+ * Late initialization code.
+ * This initialization is performed after BSS and DATA segments initialization
+ * and before invoking the main() function.
+ */
+void hwinit1(void) {
/*
* Interrupt vectors assignment.
@@ -132,4 +141,9 @@ void hwinit(void) {
// InitSSP();
// InitMMC();
// InitBuzzer();
+
+ /*
+ * ChibiOS/RT initialization.
+ */
+ chSysInit();
}
diff --git a/demos/ARM7-LPC214x-GCC-minimal/ch.ld b/demos/ARM7-LPC214x-GCC-minimal/ch.ld
index bb59cec1c..81ab80dc6 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/ch.ld
+++ b/demos/ARM7-LPC214x-GCC-minimal/ch.ld
@@ -48,7 +48,7 @@ SECTIONS
.text :
{
_text = .;
- KEEP(*(.startup))
+ KEEP(*(vectors))
*(.text)
*(.text.*);
*(.rodata);
diff --git a/demos/ARM7-LPC214x-GCC-minimal/main.c b/demos/ARM7-LPC214x-GCC-minimal/main.c
index a7c896222..11fdd7b56 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/main.c
+++ b/demos/ARM7-LPC214x-GCC-minimal/main.c
@@ -56,17 +56,12 @@ static msg_t Thread2(void *arg) {
}
/*
- * Entry point, the interrupts are disabled on entry.
+ * Entry point, note, the main() function is already a thread in the system
+ * on entry.
*/
int main(int argc, char **argv) {
/*
- * The main() function becomes a thread here then the interrupts are
- * enabled and ChibiOS/RT goes live.
- */
- chSysInit();
-
- /*
* Creates the blinker threads.
*/
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
diff --git a/demos/ARM7-LPC214x-GCC/Makefile b/demos/ARM7-LPC214x-GCC/Makefile
index 8e1790bb2..2bdf1959f 100644
--- a/demos/ARM7-LPC214x-GCC/Makefile
+++ b/demos/ARM7-LPC214x-GCC/Makefile
@@ -84,7 +84,8 @@ ASRC = ../../ports/ARM7-LPC214x/chcore.c \
TSRC =
# List ASM source files here
-ASMSRC = ../../ports/ARM7-LPC214x/crt0.s ../../ports/ARM7/chsys.s
+ASMSRC = ../../ports/ARM7/crt0.s ../../ports/ARM7/chsys.s \
+ ../../ports/ARM7-LPC214x/vectors.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib ../../test \
diff --git a/demos/ARM7-LPC214x-GCC/Makefile.thumb b/demos/ARM7-LPC214x-GCC/Makefile.thumb
index 4b62f9091..a676a4af1 100644
--- a/demos/ARM7-LPC214x-GCC/Makefile.thumb
+++ b/demos/ARM7-LPC214x-GCC/Makefile.thumb
@@ -84,7 +84,8 @@ TSRC = ../../ports/ARM7-LPC214x/chcore.c \
board.c buzzer.c mmcsd.c main.c
# List ASM source files here
-ASMSRC = ../../ports/ARM7-LPC214x/crt0.s ../../ports/ARM7/chsys.s
+ASMSRC = ../../ports/ARM7/crt0.s ../../ports/ARM7/chsys.s \
+ ../../ports/ARM7-LPC214x/vectors.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib ../../test \
diff --git a/demos/ARM7-LPC214x-GCC/board.c b/demos/ARM7-LPC214x-GCC/board.c
index 94bc21336..9f453100c 100644
--- a/demos/ARM7-LPC214x-GCC/board.c
+++ b/demos/ARM7-LPC214x-GCC/board.c
@@ -58,10 +58,11 @@ static void T0IrqHandler(void) {
}
/*
- * Hardware initialization goes here.
- * NOTE: Interrupts are still disabled.
+ * Early initialization code.
+ * This initialization is performed just after reset before BSS and DATA
+ * segments initialization.
*/
-void hwinit(void) {
+void hwinit0(void) {
/*
* All peripherals clock disabled by default in order to save power.
@@ -106,6 +107,14 @@ void hwinit(void) {
IO0SET = 0xFFFFFFFF;
IO1DIR = VAL_FIO1DIR;
IO1SET = 0xFFFFFFFF;
+}
+
+/*
+ * Late initialization code.
+ * This initialization is performed after BSS and DATA segments initialization
+ * and before invoking the main() function.
+ */
+void hwinit1(void) {
/*
* Interrupt vectors assignment.
@@ -132,4 +141,9 @@ void hwinit(void) {
InitSSP();
InitMMC();
InitBuzzer();
+
+ /*
+ * ChibiOS/RT initialization.
+ */
+ chSysInit();
}
diff --git a/demos/ARM7-LPC214x-GCC/ch.ld b/demos/ARM7-LPC214x-GCC/ch.ld
index bb59cec1c..81ab80dc6 100644
--- a/demos/ARM7-LPC214x-GCC/ch.ld
+++ b/demos/ARM7-LPC214x-GCC/ch.ld
@@ -48,7 +48,7 @@ SECTIONS
.text :
{
_text = .;
- KEEP(*(.startup))
+ KEEP(*(vectors))
*(.text)
*(.text.*);
*(.rodata);
diff --git a/demos/ARM7-LPC214x-GCC/main.c b/demos/ARM7-LPC214x-GCC/main.c
index 588bd21af..3ff516077 100644
--- a/demos/ARM7-LPC214x-GCC/main.c
+++ b/demos/ARM7-LPC214x-GCC/main.c
@@ -109,7 +109,8 @@ static void RemoveHandler(eventid_t id) {
}
/*
- * Entry point, the interrupts are disabled on entry.
+ * Entry point, note, the main() function is already a thread in the system
+ * on entry.
*/
int main(int argc, char **argv) {
static const evhandler_t evhndl[] = {
@@ -121,12 +122,6 @@ int main(int argc, char **argv) {
struct EventListener el0, el1, el2;
/*
- * The main() function becomes a thread here then the interrupts are
- * enabled and ChibiOS/RT goes live.
- */
- chSysInit();
-
- /*
* If a button is pressed during the reset then the blinking leds threads
* are not started in order to make accurate benchmarks.
*/
diff --git a/ports/ARM7-LPC214x/crt0.s b/ports/ARM7-LPC214x/crt0.s
deleted file mode 100644
index ca81adb55..000000000
--- a/ports/ARM7-LPC214x/crt0.s
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT 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.
-
- ChibiOS/RT 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/>.
-*/
-
-/*
- * Generic ARM startup file for ChibiOS/RT.
- */
-
-.set MODE_USR, 0x10
-.set MODE_FIQ, 0x11
-.set MODE_IRQ, 0x12
-.set MODE_SVC, 0x13
-.set MODE_ABT, 0x17
-.set MODE_UND, 0x1B
-.set MODE_SYS, 0x1F
-
-.equ I_BIT, 0x80
-.equ F_BIT, 0x40
-
-.section .startup
-.code 32
-.balign 4
-/*
- * System entry points.
- */
-_start:
- ldr pc, _reset
- ldr pc, _undefined
- ldr pc, _swi
- ldr pc, _prefetch
- ldr pc, _abort
- nop
- ldr pc, [pc,#-0xFF0] /* VIC - IRQ Vector Register */
- ldr pc, _fiq
-
-_reset:
- .word ResetHandler
-_undefined:
- .word UndHandler
-_swi:
- .word SwiHandler
-_prefetch:
- .word PrefetchHandler
-_abort:
- .word AbortHandler
-_fiq:
- .word FiqHandler
- .word 0
- .word 0
-
-/*
- * Reset handler.
- */
-.text
-ResetHandler:
- /*
- * Stack pointers initialization.
- */
- ldr r0, =__ram_end__
- /* Undefined */
- msr CPSR_c, #MODE_UND | I_BIT | F_BIT
- mov sp, r0
- ldr r1, =__und_stack_size__
- sub r0, r0, r1
- /* Abort */
- msr CPSR_c, #MODE_ABT | I_BIT | F_BIT
- mov sp, r0
- ldr r1, =__abt_stack_size__
- sub r0, r0, r1
- /* FIQ */
- msr CPSR_c, #MODE_FIQ | I_BIT | F_BIT
- mov sp, r0
- ldr r1, =__fiq_stack_size__
- sub r0, r0, r1
- /* IRQ */
- msr CPSR_c, #MODE_IRQ | I_BIT | F_BIT
- mov sp, r0
- ldr r1, =__irq_stack_size__
- sub r0, r0, r1
- /* Supervisor */
- msr CPSR_c, #MODE_SVC | I_BIT | F_BIT
- mov sp, r0
- ldr r1, =__svc_stack_size__
- sub r0, r0, r1
- /* System */
- msr CPSR_c, #MODE_SYS | I_BIT | F_BIT
- mov sp, r0
-// ldr r1, =__sys_stack_size__
-// sub r0, r0, r1
- /*
- * Data initialization.
- * NOTE: It assumes that the DATA size is a multiple of 4.
- */
- ldr r1, =_textdata
- ldr r2, =_data
- ldr r3, =_edata
-dataloop:
- cmp r2, r3
- ldrlo r0, [r1], #4
- strlo r0, [r2], #4
- blo dataloop
- /*
- * BSS initialization.
- * NOTE: It assumes that the BSS size is a multiple of 4.
- */
- mov r0, #0
- ldr r1, =_bss_start
- ldr r2, =_bss_end
-bssloop:
- cmp r1, r2
- strlo r0, [r1], #4
- blo bssloop
- /*
- * Application-provided HW initialization routine.
- */
-#ifndef THUMB_NO_INTERWORKING
- bl hwinit
- /*
- * main(0, NULL).
- */
- mov r0, #0
- mov r1, r0
- bl main
- bl chSysHalt
-#else
- add r0, pc, #1
- bx r0
-.code 16
- bl hwinit
- mov r0, #0
- mov r1, r0
- bl main
- bl chSysHalt
-.code 32
-#endif
-
-.weak UndHandler
-.globl UndHandler
-UndHandler:
-
-.weak SwiHandler
-.globl SwiHandler
-SwiHandler:
-
-.weak PrefetchHandler
-.globl PrefetchHandler
-PrefetchHandler:
-
-.weak AbortHandler
-.globl AbortHandler
-AbortHandler:
-
-.weak FiqHandler
-.globl FiqHandler
-FiqHandler:
-
-.loop: b .loop
diff --git a/ports/ARM7-LPC214x/vectors.s b/ports/ARM7-LPC214x/vectors.s
new file mode 100644
index 000000000..59bc99d2c
--- /dev/null
+++ b/ports/ARM7-LPC214x/vectors.s
@@ -0,0 +1,49 @@
+/*
+ ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT 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.
+
+ ChibiOS/RT 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/>.
+*/
+
+.section vectors
+.code 32
+.balign 4
+/*
+ * System entry points.
+ */
+_start:
+ ldr pc, _reset
+ ldr pc, _undefined
+ ldr pc, _swi
+ ldr pc, _prefetch
+ ldr pc, _abort
+ nop
+ ldr pc, [pc,#-0xFF0] /* VIC - IRQ Vector Register */
+ ldr pc, _fiq
+
+_reset:
+ .word ResetHandler
+_undefined:
+ .word UndHandler
+_swi:
+ .word SwiHandler
+_prefetch:
+ .word PrefetchHandler
+_abort:
+ .word AbortHandler
+_fiq:
+ .word FiqHandler
+ .word 0
+ .word 0
diff --git a/readme.txt b/readme.txt
index d49442790..2d65304f6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -83,7 +83,7 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
projects. The new startup file implements early and late initialization
phases as described above for the CM3 startup file.
The architecture specific vector tables are now encapsulated into the
- vectors.s file.
+ vectors.s files.
- Modified the STM32 demo makefile to use the latest YAGARTO toolchain as
default (arm-elf-gcc).