struct tx3904cpu {
/* Pending interrupts for delivery by event handler */
int pending_reset, pending_nmi, pending_level;
+ struct hw_event* event;
};
controller->pending_level = 0;
controller->pending_reset = 0;
controller->pending_nmi = 0;
+ controller->event = NULL;
}
(controller->pending_level & ((SR >> status_IM_shift) & status_IM_mask)))
{
controller->pending_level = 0;
- SignalExceptionInterrupt();
+ SignalExceptionInterrupt(0 /* dummy value */);
}
else
{
/* reschedule soon */
- hw_event_queue_schedule (me, 1, deliver_tx3904cpu_interrupt, NULL);
+ if(controller->event != NULL)
+ hw_event_queue_deschedule(me, controller->event);
+ controller->event =
+ hw_event_queue_schedule (me, 1, deliver_tx3904cpu_interrupt, NULL);
}
} /* interrupt set */
}
/* Schedule an event to be delivered immediately after current
instruction. */
- hw_event_queue_schedule (me, 0, deliver_tx3904cpu_interrupt, NULL);
+ if(controller->event != NULL)
+ hw_event_queue_deschedule(me, controller->event);
+ controller->event =
+ hw_event_queue_schedule (me, 0, deliver_tx3904cpu_interrupt, NULL);
}