diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index 89b357e..618c911 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -1022,7 +1022,10 @@ static void uhci_frame_timer(void *opaque)
 {
     UHCIState *s = opaque;
     int64_t expire_time;
+    int count = 0;
 
+    while ( count < 200 )
+    {
     if (!(s->cmd & UHCI_CMD_RS)) {
         /* Full stop */
         qemu_del_timer(s->frame_timer);
@@ -1050,10 +1053,11 @@ static void uhci_frame_timer(void *opaque)
     uhci_process_frame(s);
 
     uhci_async_validate_end(s);
-
+    count++;
+    }
     /* prepare the timer for the next frame */
     expire_time = qemu_get_clock(vm_clock) +
-        (ticks_per_sec / FRAME_TIMER_FREQ);
+        (ticks_per_sec / ( FRAME_TIMER_FREQ * 200) );
     qemu_mod_timer(s->frame_timer, expire_time);
 }
 

