git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@143 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2007-12-18 09:41:28 +00:00
parent 0bb20d36f4
commit cae69c784f
8 changed files with 29 additions and 149 deletions

View File

@ -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

View File

@ -27,6 +27,7 @@
#include <ch.h>
#include "lpc214x.h"
#include "board.h"
#include "buzzer.h"
EventSource BuzzerSilentEventSource;

View File

@ -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");
}

View File

@ -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;
/*

View File

@ -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

View File

@ -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

View File

@ -22,6 +22,7 @@
#include "lpc214x.h"
#include "vic.h"
#include "lpc214x_serial.h"
#include "board.h"
FullDuplexDriver COM1;
BYTE8 ib1[SERIAL_BUFFERS_SIZE];

View File

@ -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