aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/ARM7-LPC214x-GCC/Makefile14
-rw-r--r--demos/ARM7-LPC214x-GCC/buzzer.c1
-rw-r--r--ports/ARM7-LPC214x/GCC/chcore.c (renamed from demos/ARM7-LPC214x-GCC/chcore.c)136
-rw-r--r--ports/ARM7-LPC214x/GCC/chcore.h (renamed from demos/ARM7-LPC214x-GCC/chcore.h)8
-rw-r--r--ports/ARM7-LPC214x/GCC/chcore2.s (renamed from demos/ARM7-LPC214x-GCC/chcore2.s)2
-rw-r--r--ports/ARM7-LPC214x/GCC/crt0.s (renamed from demos/ARM7-LPC214x-GCC/crt0.s)13
-rw-r--r--ports/ARM7-LPC214x/GCC/lpc214x_serial.c1
-rw-r--r--readme.txt3
8 files changed, 29 insertions, 149 deletions
diff --git a/demos/ARM7-LPC214x-GCC/Makefile b/demos/ARM7-LPC214x-GCC/Makefile
index a2f229617..a267ac184 100644
--- a/demos/ARM7-LPC214x-GCC/Makefile
+++ b/demos/ARM7-LPC214x-GCC/Makefile
@@ -62,16 +62,16 @@ UDEFS =
UADEFS =
# List ARM-mode C source files here
-ASRC = chcore.c \
+ASRC = ../../ports/ARM7-LPC214x/GCC/chcore.c \
+ ../../ports/ARM7-LPC214x/GCC/vic.c \
+ ../../ports/ARM7-LPC214x/GCC/lpc214x_serial.c \
+ ../../ports/ARM7-LPC214x/GCC/lpc214x_ssp.c \
../../src/chinit.c ../../src/chdebug.c ../../src/chlists.c ../../src/chdelta.c \
../../src/chschd.c ../../src/chthreads.c ../../src/chsem.c ../../src/chmtx.c \
../../src/chevents.c ../../src/chmsg.c ../../src/chsleep.c ../../src/chqueues.c \
../../src/chserial.c \
- ../../ports/ARM7-LPC214x/GCC/vic.c ../../ports/ARM7-LPC214x/GCC/lpc214x_serial.c \
- ../../ports/ARM7-LPC214x/GCC/lpc214x_ssp.c \
../../src/lib/evtimer.c ../../test/test.c \
- buzzer.c mmcsd.c main.c
-
+ board.c buzzer.c mmcsd.c main.c
# List THUMB-mode C sources here
# NOTE: If any module is compiled in thumb mode then -mthumb-interwork is
@@ -79,7 +79,7 @@ ASRC = chcore.c \
TSRC =
# List ASM source files here
-ASMSRC = crt0.s chcore2.s
+ASMSRC = ../../ports/ARM7-LPC214x/GCC/crt0.s ../../ports/ARM7-LPC214x/GCC/chcore2.s
# List all user directories here
UINCDIR = ../../src/include ../../src/lib ../../ports/ARM7-LPC214x/GCC
@@ -162,7 +162,7 @@ $(TOBJS) : %.o : %.c
$(ASMOBJS) : %.o : %.s
@echo
- $(AS) -c $(ASFLAGS) $< -o $@
+ $(AS) -c $(ASFLAGS) -I . $(INCDIR) $< -o $@
%elf: $(OBJS)
@echo
diff --git a/demos/ARM7-LPC214x-GCC/buzzer.c b/demos/ARM7-LPC214x-GCC/buzzer.c
index 7d80d8881..9ee122fe1 100644
--- a/demos/ARM7-LPC214x-GCC/buzzer.c
+++ b/demos/ARM7-LPC214x-GCC/buzzer.c
@@ -27,6 +27,7 @@
#include <ch.h>
#include "lpc214x.h"
+#include "board.h"
#include "buzzer.h"
EventSource BuzzerSilentEventSource;
diff --git a/demos/ARM7-LPC214x-GCC/chcore.c b/ports/ARM7-LPC214x/GCC/chcore.c
index 8b9b4d464..11f407627 100644
--- a/demos/ARM7-LPC214x-GCC/chcore.c
+++ b/ports/ARM7-LPC214x/GCC/chcore.c
@@ -20,123 +20,6 @@
#include <ch.h>
#include "lpc214x.h"
-#include "vic.h"
-#include "lpc214x_serial.h"
-#include "lpc214x_ssp.h"
-#include "mmcsd.h"
-
-#include "buzzer.h"
-
-extern void IrqHandler(void);
-extern void T0IrqHandler(void);
-
-#define VAL_TC0_PRESCALER 0
-
-/*
- * Pins configuration for Olimex LPC-P2148.
- *
- * PINSEL0
- * P0 P0 P0 P0 P0 P0 RXD TXD SSE MOS MIS SCK SDA SCL RXD TXD
- * 15 14 13 12 11 10 1 1 L0 I0 O0 0 0 0 0 0
- * 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01 01
- * IN IN OUT OUT OUT OUT -- -- -- -- -- -- -- -- -- --
- * 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
- *
- * PINSEL1
- * P0 AD P0 P0 -- -- AO -- VB P0 P0 P0 MOS MIS SCK P0
- * 31 03 29 28 -- -- UT -- US 22 21 20 I1 O1 1 16
- * 00 01 00 00 00 00 10 00 01 00 00 00 10 10 10 00
- * OUT -- OUT OUT -- -- -- -- -- OUT OUT OUT -- -- -- IN
- * 1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0
- *
- * PINSEL2
- * -- -- -- -- -- -- -- -- -- -- -- -- -- -- GP DBG --
- * -- -- -- -- -- -- -- -- -- -- -- -- -- -- IO --
- * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0 1 00
- * -- -- -- -- -- -- -- -- -- -- -- -- -- -- IN -- --
- */
-#define VAL_PINSEL0 0x00055555
-#define VAL_PINSEL1 0x100840A8
-#define VAL_PINSEL2 0x00000004
-#define VAL_FIO0DIR 0xB0703C00
-#define VAL_FIO1DIR 0x00000000
-
-/*
- * Hardware initialization goes here.
- * NOTE: Interrupts are still disabled.
- */
-void hwinit(void) {
-
- /*
- * All peripherals clock disabled by default in order to save power.
- */
- PCONP = PCRTC | PCTIM0;
-
- /*
- * MAM setup.
- */
- MAMTIM = 0x3; /* 3 cycles for flash accesses. */
- MAMCR = 0x2; /* MAM fully enabled. */
-
- /*
- * PLL setup for Fosc=12MHz and CCLK=48MHz.
- * P=2 M=3.
- */
- PLL *pll = PLLBase;
- pll->PLL0_CFG = 0x23; /* P and M values. */
- pll->PLL0_CON = 0x1; /* Enalbles the PLL 0. */
- pll->PLL0_FEED = 0xAA;
- pll->PLL0_FEED = 0x55;
- while (!(pll->PLL0_STAT & 0x400))
- ; /* Wait for PLL lock. */
-
- pll->PLL0_CON = 0x3; /* Connects the PLL. */
- pll->PLL0_FEED = 0xAA;
- pll->PLL0_FEED = 0x55;
-
- /*
- * VPB setup.
- * PCLK = CCLK / 4.
- */
- VPBDIV = VPD_D4;
-
- /*
- * I/O pins configuration.
- */
- PINSEL0 = VAL_PINSEL0;
- PINSEL1 = VAL_PINSEL1;
- PINSEL2 = VAL_PINSEL2;
- IO0DIR = VAL_FIO0DIR;
- IO0SET = 0xFFFFFFFF;
- IO1DIR = VAL_FIO1DIR;
- IO1SET = 0xFFFFFFFF;
-
- /*
- * Interrupt vectors assignment.
- */
- InitVIC();
- VICDefVectAddr = (IOREG32)IrqHandler;
-
- /*
- * System Timer initialization, 1ms intervals.
- */
- SetVICVector(T0IrqHandler, 0, SOURCE_Timer0);
- VICIntEnable = INTMASK(SOURCE_Timer0);
- TC *timer = T0Base;
- timer->TC_PR = VAL_TC0_PRESCALER;
- timer->TC_MR0 = (PCLK / CH_FREQUENCY) / (VAL_TC0_PRESCALER + 1);
- timer->TC_MCR = 3; /* Interrupt and clear TC on match MR0. */
- timer->TC_TCR = 2; /* Reset counter and prescaler. */
- timer->TC_TCR = 1; /* Timer enabled. */
-
- /*
- * Other subsystems.
- */
- InitSerial(1, 2);
- InitSSP();
- InitMMC();
- InitBuzzer();
-}
/*
* System idle thread loop.
@@ -234,6 +117,7 @@ void IrqCommon(void) {
*/
asm(".set MODE_IRQ, 0x12 \n\t" \
".set MODE_SYS, 0x1F \n\t" \
+ ".set F_BIT, 0x40 \n\t" \
".set I_BIT, 0x80 \n\t" \
"ldmfd sp!, {r0-r3, r12, lr} \n\t" \
"msr CPSR_c, #MODE_SYS | I_BIT \n\t" \
@@ -275,8 +159,7 @@ void IrqCommon(void) {
* NOTE: It is included into IrqCommon to make sure the symbol refers to
* 32 bit code.
*/
- asm(".set F_BIT, 0x40 \n\t" \
- ".weak threadstart \n\t" \
+ asm(".weak threadstart \n\t" \
".globl threadstart \n\t" \
"threadstart: \n\t" \
"msr CPSR_c, #MODE_SYS \n\t");
@@ -303,20 +186,9 @@ void IrqCommon(void) {
__attribute__((naked, weak))
void chSysHalt(void) {
- asm(".set F_BIT, 0x40 \n\t" \
- ".set I_BIT, 0x80 \n\t");
#ifdef THUMB
- asm(".p2align 2,, \n\t" \
- "mov r0, pc \n\t" \
+ asm("ldr r0, =_halt32 \n\t" \
"bx r0 \n\t");
#endif
- asm(".code 32 \n\t" \
- ".weak _halt32 \n\t" \
- ".globl _halt32 \n\t" \
- "_halt32: \n\t" \
- "mrs r0, CPSR \n\t" \
- "orr r0, #I_BIT | F_BIT \n\t" \
- "msr CPSR_c, r0 \n\t" \
- ".loop: \n\t" \
- "b .loop \n\t");
+ asm("b _halt32 \n\t");
}
diff --git a/demos/ARM7-LPC214x-GCC/chcore.h b/ports/ARM7-LPC214x/GCC/chcore.h
index cc1113c18..05223170d 100644
--- a/demos/ARM7-LPC214x-GCC/chcore.h
+++ b/ports/ARM7-LPC214x/GCC/chcore.h
@@ -20,14 +20,6 @@
#ifndef _CHCORE_H_
#define _CHCORE_H_
-/*
- * The following values are implementation dependent. You may change them in
- * order to match your HW.
- */
-#define FOSC 12000000
-#define CCLK 48000000
-#define PCLK 12000000
-
typedef void *regarm;
/*
diff --git a/demos/ARM7-LPC214x-GCC/chcore2.s b/ports/ARM7-LPC214x/GCC/chcore2.s
index 35dd49597..ee1e6ad55 100644
--- a/demos/ARM7-LPC214x-GCC/chcore2.s
+++ b/ports/ARM7-LPC214x/GCC/chcore2.s
@@ -17,7 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "chconf.h"
+#include <chconf.h>
.set MODE_USR, 0x10
.set MODE_FIQ, 0x11
diff --git a/demos/ARM7-LPC214x-GCC/crt0.s b/ports/ARM7-LPC214x/GCC/crt0.s
index 9032b0742..b58e189e8 100644
--- a/demos/ARM7-LPC214x-GCC/crt0.s
+++ b/ports/ARM7-LPC214x/GCC/crt0.s
@@ -136,6 +136,8 @@ bssloop:
mov r1, r0
bl main
bl chSysHalt
+.weak hwinit
+hwinit: bx lr
#else
add r0, pc, #1
bx r0
@@ -145,6 +147,8 @@ bssloop:
mov r1, r0
bl main
bl chSysHalt
+.weak hwinit
+hwinit: bx lr
.code 32
#endif
@@ -167,4 +171,11 @@ AbortHandler:
.weak FiqHandler
.globl FiqHandler
FiqHandler:
- b _halt32
+
+.weak _halt32
+.globl _halt32
+_halt32:
+ mrs r0, CPSR
+ orr r0, #I_BIT | F_BIT
+ msr CPSR_c, r0
+.loop: b .loop
diff --git a/ports/ARM7-LPC214x/GCC/lpc214x_serial.c b/ports/ARM7-LPC214x/GCC/lpc214x_serial.c
index 43adab3b5..35dc39867 100644
--- a/ports/ARM7-LPC214x/GCC/lpc214x_serial.c
+++ b/ports/ARM7-LPC214x/GCC/lpc214x_serial.c
@@ -22,6 +22,7 @@
#include "lpc214x.h"
#include "vic.h"
#include "lpc214x_serial.h"
+#include "board.h"
FullDuplexDriver COM1;
BYTE8 ib1[SERIAL_BUFFERS_SIZE];
diff --git a/readme.txt b/readme.txt
index f6692c623..cf0e4791a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -57,6 +57,9 @@ AVR-AT90CANx-GCC - Port on AVR AT90CAN128, not complete yet.
for details.
- Most of the asm code previously in chcore2.s is now inline asm code in
chcore.c (ARM port).
+- Moved all the board specific definitions/code into two new files: board.c
+ and board.h. Moved all the files no more board-dependent under ports/
+ (ARM port).
*** 0.4.5 ***
- Moved the serial IRQ handlers and VIC vectors initialization inside the