[PATCH] Rechecked and fixed Lpc21xx for Lpceurobot board. Fixed eb_blink for arm-elflgcc-4.4.4 (the lates gcc optimise stupid wait while delay), now the time delay coworks with timer 0.
jiri.kubias@gmail.com (sysless@pandora.cz)
jiri.kubias at gmail.com
Tue Jul 6 16:37:48 CEST 2010
---
app/arm/eb_blink/main.c | 63 +++++++++++++++++++++++++++++++-----
arch/generic/defines/Makefile.omk | 2 +-
2 files changed, 55 insertions(+), 10 deletions(-)
diff --git a/app/arm/eb_blink/main.c b/app/arm/eb_blink/main.c
index 43a9786..65c4167 100644
--- a/app/arm/eb_blink/main.c
+++ b/app/arm/eb_blink/main.c
@@ -12,29 +12,74 @@
#include <lpc21xx.h> /* LPC21xx definitions */
#include <deb_led.h>
-
+#include <system_def.h>
-void dummy_wait()
+
+volatile uint32_t time_ms = 0; //< this varialbe is incremented every milisecond
+#define TIME1MS ((CPU_APB_HZ) / 1000)
+
+
+#define T1_ISR 6
+
+/*
+ This function wait specified time in ms
+
+ @param time time in ms to wait
+*/
+
+void delay(int time)
{
- unsigned int wait = 5000000;
- while(--wait);
+ int target_time = time_ms + time;
+ while(target_time > time_ms);
}
-int main (void) {
+/*
+ This function is called from timer 1 ISR
+
+*/
+void tc1 (void) __attribute__ ((interrupt));
+void tc1 (void) {
+ time_ms +=1;
+
+ T1IR = 4; // Vynulovani priznaku preruseni
+ VICVectAddr = 0; // Potvrzeni o obsluze preruseni
+}
+
+/* Setup the Timer Counter 1 Interrupt */
+void init_time (unsigned rx_isr_vect)
+{
+ T1PR = 0;
+ T1MR2 = TIME1MS;
+ T1MCR = (3<<6); // interrupt on MR1
+
+ T1TCR = 1; // Starts Timer 1
+
+ ((uint32_t*)&VICVectAddr0)[rx_isr_vect] = (unsigned long)tc1; // Nastaveni adresy vektotu preruseni
+ ((uint32_t*)&VICVectCntl0)[rx_isr_vect] = 0x20 | 0x5; // vyber casovece pro preruseni
+ VICIntEnable = (1<<5); // Povoli obsluhu preruseni
+}
+
+
+
+
+int main (void) {
+
+
+ init_time(T1_ISR);
while(1)
{
deb_led_change(LEDR);
- dummy_wait();
+ delay(100);
deb_led_change(LEDG);
- dummy_wait();
+ delay(100);
deb_led_change(LEDB);
- dummy_wait();
+ delay(100);
deb_led_change(LEDY);
- dummy_wait();
+ delay(100);
}
}
diff --git a/arch/generic/defines/Makefile.omk b/arch/generic/defines/Makefile.omk
index afe582e..713fdd5 100644
--- a/arch/generic/defines/Makefile.omk
+++ b/arch/generic/defines/Makefile.omk
@@ -1,7 +1,7 @@
# -*- makefile -*-
#include_HEADERS += byteswap.h endian.h
-include_HEADERS += lt_timer.h lt_timer_types.h
+include_HEADERS += lt_timer.h lt_timer_types.h deb_led.h
#include_HEADERS += keyval_id_his.h ads1x46.h
include_HEADERS += irq_generic.h
--
1.7.1
---
More information about the Sysless
mailing list