altos: Add bit-bang i2c driver
[fw/altos] / src / kernel / ao_notask.c
index a5bdc8a7c65e5d81dbc6e0ad8b7bcf9ff54261d8..8c5743fdecd0a0a1f7ae62c528e32d27c98a138b 100644 (file)
@@ -41,17 +41,20 @@ ao_sleep(void *wchan)
 
 #if HAS_AO_DELAY
 void
-ao_delay(uint16_t ticks)
+ao_delay_until(AO_TICK_TYPE target)
 {
-       AO_TICK_TYPE    target;
-
-       if (!ticks)
-               ticks = 1;
-       target = ao_tick_count + ticks;
-       do {
-               ao_sleep(&ao_time);
-       } while ((int16_t) (target - ao_tick_count) > 0);
+       ao_arch_block_interrupts();
+       while ((int16_t) (target - ao_tick_count) > 0)
+               ao_sleep((void *) &ao_tick_count);
+       ao_arch_release_interrupts();
 }
+
+void
+ao_delay(AO_TICK_TYPE ticks)
+{
+       ao_delay_until(ao_time() + ticks);
+}
+
 #endif
 
 void