[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