aboutsummaryrefslogtreecommitdiffstats
path: root/demos
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2007-10-23 18:43:39 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2007-10-23 18:43:39 +0000
commit4674513d38a8872a95a895de05ed6a750c842591 (patch)
tree6c2aee20ec20f2547c970c62a5194ff67d6e07ed /demos
parentbca8923f622aa26a55b9b9ae834b1094487498c4 (diff)
downloadChibiOS-4674513d38a8872a95a895de05ed6a750c842591.tar.gz
ChibiOS-4674513d38a8872a95a895de05ed6a750c842591.tar.bz2
ChibiOS-4674513d38a8872a95a895de05ed6a750c842591.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@59 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'demos')
-rw-r--r--demos/ARM7-LPC214x-GCC/Makefile4
-rw-r--r--demos/ARM7-LPC214x-GCC/chcore.c34
-rw-r--r--demos/AVR-AT90CANx-GCC/chcore.c35
-rw-r--r--demos/AVR-AT90CANx-GCC/main.c6
4 files changed, 49 insertions, 30 deletions
diff --git a/demos/ARM7-LPC214x-GCC/Makefile b/demos/ARM7-LPC214x-GCC/Makefile
index 2c8616b80..fb9dba78b 100644
--- a/demos/ARM7-LPC214x-GCC/Makefile
+++ b/demos/ARM7-LPC214x-GCC/Makefile
@@ -62,8 +62,8 @@ UDEFS =
UADEFS =
# List ARM-mode C source files here
-ASRC = chcore.c main.c buzzer.c ../../src/lib/evtimer.c \
- ../../test/test.c ../../ports/ARM7-LPC214x/GCC/lpc214x_serial.c \
+ASRC = chcore.c main.c buzzer.c ../../src/lib/evtimer.c ../../test/test.c \
+ ../../ports/ARM7-LPC214x/GCC/vic.c ../../ports/ARM7-LPC214x/GCC/lpc214x_serial.c \
../../src/chinit.c ../../src/chlists.c ../../src/chdelta.c ../../src/chschd.c \
../../src/chthreads.c ../../src/chsem.c ../../src/chevents.c ../../src/chmsg.c \
../../src/chsleep.c ../../src/chqueues.c ../../src/chserial.c
diff --git a/demos/ARM7-LPC214x-GCC/chcore.c b/demos/ARM7-LPC214x-GCC/chcore.c
index d06e57657..e0de6fc02 100644
--- a/demos/ARM7-LPC214x-GCC/chcore.c
+++ b/demos/ARM7-LPC214x-GCC/chcore.c
@@ -20,7 +20,9 @@
#include <ch.h>
#include "lpc214x.h"
+#include "vic.h"
#include "lpc214x_serial.h"
+
#include "buzzer.h"
extern void IrqHandler(void);
@@ -62,7 +64,6 @@ extern void T0IrqHandler(void);
* NOTE: Interrupts are still disabled.
*/
void hwinit(void) {
- int i;
/*
* All peripherals clock disabled by default in order to save power.
@@ -110,17 +111,9 @@ void hwinit(void) {
/*
* Interrupt vectors assignment.
- * NOTE: Better reset everything in the VIC, it is a HUGE source of trouble.
*/
- VIC *vic = VICBase;
- vic->VIC_IntSelect = 0;
- vic->VIC_IntEnable = 0;
- vic->VIC_VectAddr = 0;
- for (i = 0; i < 16; i++) {
- vic->VIC_VectCntls[i] = 0;
- vic->VIC_VectAddrs[i] = 0;
- }
- vic->VIC_DefVectAddr = (IOREG32)IrqHandler;
+ InitVIC();
+ VICDefVectAddr = (IOREG32)IrqHandler;
SetVICVector(T0IrqHandler, 0, SOURCE_Timer0);
SetVICVector(UART0IrqHandler, 1, SOURCE_UART0);
SetVICVector(UART1IrqHandler, 2, SOURCE_UART1);
@@ -128,7 +121,7 @@ void hwinit(void) {
/*
* System Timer initialization, 1ms intervals.
*/
- vic->VIC_IntEnable |= INTMASK(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);
@@ -168,20 +161,11 @@ void chSysHalt(void) {
}
/*
- * Set a vector for an interrupt source, the vector is enabled too.
- */
-void SetVICVector(void *handler, int vector, int source) {
-
- VIC *vicp = VICBase;
- vicp->VIC_VectAddrs[vector] = (IOREG32)handler;
- vicp->VIC_VectCntls[vector] = (IOREG32)(source | 0x20);
-}
-
-/*
* Undefined Instruction exception handler.
* Yellow LED + RED LED 2.
*/
void UndHandler(void) {
+
IO0SET = 0x80000C00;
IO0CLR = 0x80000800;
while(TRUE)
@@ -193,6 +177,7 @@ void UndHandler(void) {
* Yellow LED + RED LED 1.
*/
void PrefetchHandler(void) {
+
IO0SET = 0x80000C00;
IO0CLR = 0x80000400;
while(TRUE)
@@ -204,6 +189,7 @@ void PrefetchHandler(void) {
* Yellow LED + both RED LEDs.
*/
void AbortHandler(void) {
+
IO0SET = 0x80000C00;
IO0CLR = 0x80000C00;
while(TRUE)
@@ -214,6 +200,7 @@ void AbortHandler(void) {
* Non-vectored IRQs handling here.
*/
void NonVectoredIrq(void) {
+
VICVectAddr = 0;
}
@@ -221,7 +208,8 @@ void NonVectoredIrq(void) {
* Timer 0 IRQ handling here.
*/
void Timer0Irq(void) {
- chSchTimerHandlerI();
+
T0IR = 1; /* Clear interrupt on match MR0. */
VICVectAddr = 0;
+ chSchTimerHandlerI();
}
diff --git a/demos/AVR-AT90CANx-GCC/chcore.c b/demos/AVR-AT90CANx-GCC/chcore.c
index 85dff271f..9d2e0e1b2 100644
--- a/demos/AVR-AT90CANx-GCC/chcore.c
+++ b/demos/AVR-AT90CANx-GCC/chcore.c
@@ -19,16 +19,41 @@
#include <ch.h>
+#include <avr/io.h>
+
+void hwinit(void) {
+
+ /*
+ * I/O ports setup.
+ * Everything configured as input with pull-up initially.
+ */
+ DDRA = 0;
+ PORTA = 0xFF;
+ DDRB = 0;
+ PORTB = 0xFF;
+ DDRC = 0;
+ PORTC = 0xFF;
+ DDRD = 0;
+ PORTD = 0xFF;
+ DDRE = 0;
+ PORTE = 0xFF;
+ DDRF = 0;
+ PORTF = 0xFF;
+ DDRG = 0;
+ PORTG = 0xFF;
+
+ /*
+ * Enables Idle mode for SLEEP instruction.
+ */
+ SMCR = 1;
+}
+
void chSysPause(void) {
chThdSetPriority(IDLEPRIO);
- asm volatile (
- "ldi r18, 1 \n\t" // SE bit
- "out 0x33, r18" // SMCR
- );
while (TRUE) {
- asm volatile ("sleep");
+// asm volatile ("sleep");
}
}
diff --git a/demos/AVR-AT90CANx-GCC/main.c b/demos/AVR-AT90CANx-GCC/main.c
index 2c04d82dc..48f58d080 100644
--- a/demos/AVR-AT90CANx-GCC/main.c
+++ b/demos/AVR-AT90CANx-GCC/main.c
@@ -19,6 +19,10 @@
#include <ch.h>
+#include <avr/io.h>
+
+void hwinit(void);
+
static BYTE8 waThread1[UserStackSize(32)];
static t_msg Thread1(void *arg) {
@@ -31,6 +35,8 @@ static t_msg Thread1(void *arg) {
int main(int argc, char **argv) {
+ hwinit();
+
chSysInit();
chThdCreate(NORMALPRIO, 0, waThread1, sizeof(waThread1), Thread1, NULL);
chSysPause();