[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.

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

Mam vyhradu k popisu toho commitu. Pis popisy tak, ze na prvni radku das jen kratke, ale vystizne, shrnuti (napr. Rechecked and fixed Lpc21xx for Lpceurobot board), pak prazdny radek a dalsi popis. Takhle dlouha radka se v predmetu mailu cte fakt blbe. On Tue, 06 Jul 2010, jiri.kubias@gmail.com wrote:
--- +void delay(int time) { - unsigned int wait = 5000000; - while(--wait); + int target_time = time_ms + time; + while(target_time > time_ms); }
Mam pocit, ze staci deklarovat promennou wait jako volatile. Nechces to radsi zmenit timhle zpusobem, aby tam nebylo moc zbytecnyho balastu? Vzhledem k tomuze, ze tahle aplikace se pouziva pro otestovani zakladni funkcionality, mela by byt co nejjednodussi. Michal ---
participants (2)
-
jiri.kubias@gmail.com (sysless@pandora.cz)
-
Michal Sojka (sysless@pandora.cz)