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 =
|
||||
|
||||
# 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
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <ch.h>
|
||||
|
||||
#include "lpc214x.h"
|
||||
#include "board.h"
|
||||
#include "buzzer.h"
|
||||
|
||||
EventSource BuzzerSilentEventSource;
|
||||
|
|
|
@ -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");
|
||||
}
|
|
@ -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;
|
||||
|
||||
/*
|
|
@ -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
|
|
@ -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
|
|
@ -22,6 +22,7 @@
|
|||
#include "lpc214x.h"
|
||||
#include "vic.h"
|
||||
#include "lpc214x_serial.h"
|
||||
#include "board.h"
|
||||
|
||||
FullDuplexDriver COM1;
|
||||
BYTE8 ib1[SERIAL_BUFFERS_SIZE];
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue