diff --git a/src/app/waittest/Makefile.inc b/src/app/waittest/Makefile.inc
new file mode 100644
index 0000000000000000000000000000000000000000..9d375f147284a62de679f5d2dbe877cb629a9bbe
--- /dev/null
+++ b/src/app/waittest/Makefile.inc
@@ -0,0 +1,3 @@
+loop ?= 1
+timer_s ?= 1
+arch_drivers += ,timer
diff --git a/src/app/waittest/main.cc b/src/app/waittest/main.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f6aaea806ab56194ab0f8d729fbd881395ae7725
--- /dev/null
+++ b/src/app/waittest/main.cc
@@ -0,0 +1,52 @@
+#include "arch.h"
+#include "driver/gpio.h"
+#include "driver/stdout.h"
+#include "driver/timer.h"
+#include "driver/uptime.h"
+
+#ifndef F_TIMER
+#define F_TIMER 100000
+#endif
+
+volatile unsigned char timer_done = 0;
+
+inline void await_timer()
+{
+	timer_done = 0;
+	timer.start(1);
+	while (!timer_done) {
+		arch.idle();
+	}
+	timer.stop();
+}
+
+void loop(void)
+{
+	gpio.led_toggle(1);
+	kout << "start waiting" << endl;
+	await_timer();
+	kout << "done waiting" << endl;
+}
+
+int main(void)
+{
+	arch.setup();
+	gpio.setup();
+	kout.setup();
+#if F_TIMER > 999
+	timer.setup_khz(F_TIMER / 1000);
+#else
+	timer.setup_hz(F_TIMER);
+#endif
+
+	gpio.led_on(0);
+	kout << "Timer set at " << dec << F_TIMER << " Hz" << endl;
+
+	arch.idle_loop();
+
+	return 0;
+}
+
+ON_TIMER_INTERRUPT_head
+	timer_done = 1;
+ON_TIMER_INTERRUPT_tail