public override void ClearInterrupt() { #if RTC_NO_GO DebugStub.Print("Unwanted RTC interrupt! (b = {0})\n", __arglist(ReadRtc(DS1287_B))); return; #endif // RTC_NO_GO byte status = ReadRtc(DS1287_C); if ((status & 0x40) != 0x40) { // We may get Update-Ended interrupts even though we've // not requested them. pic.AckIrq(irq); return; } ClockLogger.AddEntry(4, rps, timer); rps.pitLastClock = timer.Timer2Read(); rps.upTime += InterruptGapTicks; ClockLogger.AddEntry(5, rps, timer); irqCount++; if (timer.InterruptPending == false) { // This is to keep time progressing if the user has // not set an interrupt timer.SetKeepAliveInterrupt(); } pic.AckIrq(irq); // Invalidate TSC snapshot to force clock synchronization this.tscSnapshotValid = false; }
public override void ClearInterrupt() { #if VERBOSE Tracing.Log(Tracing.Debug, "Timer.ClearInterrupt()"); #endif #if TIMER_NO_GO Tracing.Log(Tracing.Notice, "Unwanted timer interrupt!"); #endif // TIMER_NO_GO ClockLogger.AddEntry(10, rps, this); long currentTime = rps.GetKernelTicks(Timer2Read()); this.interruptPending = false; irqCount++; ClockLogger.AddEntry(11, rps, this); pic.AckIrq(irq); }
public override bool InternalInterrupt(byte interrupt) { // Strictly there are no interrupts internal to // this Hal instance. In practice, some hardware seems // intent on firing an interrupt even if it is masked. // // Return true if interrupt appears to be valid but // is masked, false otherwise. byte irq = pic.InterruptToIrq(interrupt); #if DEBUG_SPURIOUS DebugStub.Break(); #endif if (pic.IrqMasked(irq) == true) { DebugStub.WriteLine("--- Acked spurious Irq={0:x2}", __arglist(irq)); pic.AckIrq(irq); return(true); } return(false); }