git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@143 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
0bb20d36f4
commit
cae69c784f
|
@ -62,16 +62,16 @@ UDEFS =
|
||||||
UADEFS =
|
UADEFS =
|
||||||
|
|
||||||
# List ARM-mode C source files here
|
# 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/chinit.c ../../src/chdebug.c ../../src/chlists.c ../../src/chdelta.c \
|
||||||
../../src/chschd.c ../../src/chthreads.c ../../src/chsem.c ../../src/chmtx.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/chevents.c ../../src/chmsg.c ../../src/chsleep.c ../../src/chqueues.c \
|
||||||
../../src/chserial.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 \
|
../../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
|
# List THUMB-mode C sources here
|
||||||
# NOTE: If any module is compiled in thumb mode then -mthumb-interwork is
|
# NOTE: If any module is compiled in thumb mode then -mthumb-interwork is
|
||||||
|
@ -79,7 +79,7 @@ ASRC = chcore.c \
|
||||||
TSRC =
|
TSRC =
|
||||||
|
|
||||||
# List ASM source files here
|
# 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
|
# List all user directories here
|
||||||
UINCDIR = ../../src/include ../../src/lib ../../ports/ARM7-LPC214x/GCC
|
UINCDIR = ../../src/include ../../src/lib ../../ports/ARM7-LPC214x/GCC
|
||||||
|
@ -162,7 +162,7 @@ $(TOBJS) : %.o : %.c
|
||||||
|
|
||||||
$(ASMOBJS) : %.o : %.s
|
$(ASMOBJS) : %.o : %.s
|
||||||
@echo
|
@echo
|
||||||
$(AS) -c $(ASFLAGS) $< -o $@
|
$(AS) -c $(ASFLAGS) -I . $(INCDIR) $< -o $@
|
||||||
|
|
||||||
%elf: $(OBJS)
|
%elf: $(OBJS)
|
||||||
@echo
|
@echo
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <ch.h>
|
#include <ch.h>
|
||||||
|
|
||||||
#include "lpc214x.h"
|
#include "lpc214x.h"
|
||||||
|
#include "board.h"
|
||||||
#include "buzzer.h"
|
#include "buzzer.h"
|
||||||
|
|
||||||
EventSource BuzzerSilentEventSource;
|
EventSource BuzzerSilentEventSource;
|
||||||
|
|
|
@ -20,123 +20,6 @@
|
||||||
#include <ch.h>
|
#include <ch.h>
|
||||||
|
|
||||||
#include "lpc214x.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.
|
* System idle thread loop.
|
||||||
|
@ -234,6 +117,7 @@ void IrqCommon(void) {
|
||||||
*/
|
*/
|
||||||
asm(".set MODE_IRQ, 0x12 \n\t" \
|
asm(".set MODE_IRQ, 0x12 \n\t" \
|
||||||
".set MODE_SYS, 0x1F \n\t" \
|
".set MODE_SYS, 0x1F \n\t" \
|
||||||
|
".set F_BIT, 0x40 \n\t" \
|
||||||
".set I_BIT, 0x80 \n\t" \
|
".set I_BIT, 0x80 \n\t" \
|
||||||
"ldmfd sp!, {r0-r3, r12, lr} \n\t" \
|
"ldmfd sp!, {r0-r3, r12, lr} \n\t" \
|
||||||
"msr CPSR_c, #MODE_SYS | I_BIT \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
|
* NOTE: It is included into IrqCommon to make sure the symbol refers to
|
||||||
* 32 bit code.
|
* 32 bit code.
|
||||||
*/
|
*/
|
||||||
asm(".set F_BIT, 0x40 \n\t" \
|
asm(".weak threadstart \n\t" \
|
||||||
".weak threadstart \n\t" \
|
|
||||||
".globl threadstart \n\t" \
|
".globl threadstart \n\t" \
|
||||||
"threadstart: \n\t" \
|
"threadstart: \n\t" \
|
||||||
"msr CPSR_c, #MODE_SYS \n\t");
|
"msr CPSR_c, #MODE_SYS \n\t");
|
||||||
|
@ -303,20 +186,9 @@ void IrqCommon(void) {
|
||||||
__attribute__((naked, weak))
|
__attribute__((naked, weak))
|
||||||
void chSysHalt(void) {
|
void chSysHalt(void) {
|
||||||
|
|
||||||
asm(".set F_BIT, 0x40 \n\t" \
|
|
||||||
".set I_BIT, 0x80 \n\t");
|
|
||||||
#ifdef THUMB
|
#ifdef THUMB
|
||||||
asm(".p2align 2,, \n\t" \
|
asm("ldr r0, =_halt32 \n\t" \
|
||||||
"mov r0, pc \n\t" \
|
|
||||||
"bx r0 \n\t");
|
"bx r0 \n\t");
|
||||||
#endif
|
#endif
|
||||||
asm(".code 32 \n\t" \
|
asm("b _halt32 \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");
|
|
||||||
}
|
}
|
|
@ -20,14 +20,6 @@
|
||||||
#ifndef _CHCORE_H_
|
#ifndef _CHCORE_H_
|
||||||
#define _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;
|
typedef void *regarm;
|
||||||
|
|
||||||
/*
|
/*
|
|
@ -17,7 +17,7 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "chconf.h"
|
#include <chconf.h>
|
||||||
|
|
||||||
.set MODE_USR, 0x10
|
.set MODE_USR, 0x10
|
||||||
.set MODE_FIQ, 0x11
|
.set MODE_FIQ, 0x11
|
|
@ -136,6 +136,8 @@ bssloop:
|
||||||
mov r1, r0
|
mov r1, r0
|
||||||
bl main
|
bl main
|
||||||
bl chSysHalt
|
bl chSysHalt
|
||||||
|
.weak hwinit
|
||||||
|
hwinit: bx lr
|
||||||
#else
|
#else
|
||||||
add r0, pc, #1
|
add r0, pc, #1
|
||||||
bx r0
|
bx r0
|
||||||
|
@ -145,6 +147,8 @@ bssloop:
|
||||||
mov r1, r0
|
mov r1, r0
|
||||||
bl main
|
bl main
|
||||||
bl chSysHalt
|
bl chSysHalt
|
||||||
|
.weak hwinit
|
||||||
|
hwinit: bx lr
|
||||||
.code 32
|
.code 32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -167,4 +171,11 @@ AbortHandler:
|
||||||
.weak FiqHandler
|
.weak FiqHandler
|
||||||
.globl FiqHandler
|
.globl FiqHandler
|
||||||
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
|
|
@ -22,6 +22,7 @@
|
||||||
#include "lpc214x.h"
|
#include "lpc214x.h"
|
||||||
#include "vic.h"
|
#include "vic.h"
|
||||||
#include "lpc214x_serial.h"
|
#include "lpc214x_serial.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
FullDuplexDriver COM1;
|
FullDuplexDriver COM1;
|
||||||
BYTE8 ib1[SERIAL_BUFFERS_SIZE];
|
BYTE8 ib1[SERIAL_BUFFERS_SIZE];
|
||||||
|
|
|
@ -57,6 +57,9 @@ AVR-AT90CANx-GCC - Port on AVR AT90CAN128, not complete yet.
|
||||||
for details.
|
for details.
|
||||||
- Most of the asm code previously in chcore2.s is now inline asm code in
|
- Most of the asm code previously in chcore2.s is now inline asm code in
|
||||||
chcore.c (ARM port).
|
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 ***
|
*** 0.4.5 ***
|
||||||
- Moved the serial IRQ handlers and VIC vectors initialization inside the
|
- Moved the serial IRQ handlers and VIC vectors initialization inside the
|
||||||
|
|
Loading…
Reference in New Issue