X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Femul%2Ftimer_qt.c;h=0b24178db4048cb90601e4a5c641f338e86442db;hb=3ddb5bbec1b0c60a21dbd1311a285e79ba546ccc;hp=204b22dc40e2e4796da19a15ec325af1713e14a1;hpb=4cc44c9888a0336b9d01121ec0b7ad95f4a76195;p=bertos.git diff --git a/bertos/emul/timer_qt.c b/bertos/emul/timer_qt.c index 204b22dc..0b24178d 100644 --- a/bertos/emul/timer_qt.c +++ b/bertos/emul/timer_qt.c @@ -42,6 +42,10 @@ #include #include +#if CONFIG_KERN_IRQ +#include +#endif + // The user interrupt server routine void timer_isr(void); @@ -87,13 +91,28 @@ public: // Record initial time system_time.start(); + #if CONFIG_KERN_IRQ + irq_register(SIGALRM, timer_isr); + #endif + // Activate timer interrupt - timer.connect(&timer, SIGNAL(timeout()), this, SLOT(timerInterrupt())); + connect(&timer, SIGNAL(timeout()), SLOT(timerInterrupt())); timer.start(1000 / TIMER_TICKS_PER_SEC); initialized = true; } + void cleanup() + { + // Timer cleaned twice? + ASSERT(initialized); + + timer.stop(); + timer.disconnect(); + + initialized = false; + } + /// Return current time in high-precision format. hptime_t hpread() { @@ -105,7 +124,11 @@ public slots: void timerInterrupt(void) { // Just call user interrupt server, timer restarts automatically. - timer_isr(); + #if CONFIG_KERN_IRQ + irq_entry(SIGALRM); + #else + timer_isr(); + #endif } }; @@ -116,10 +139,14 @@ public slots: /// HW dependent timer initialization. static void timer_hw_init(void) { - // Kick EmulTimer initialization EmulTimer::instance().init(); } +static void timer_hw_cleanup(void) +{ + EmulTimer::instance().cleanup(); +} + INLINE hptime_t timer_hw_hpread(void) { return EmulTimer::instance().hpread();