private void DoTickWt(object sender, Scheduler.WallTimeEvent e) { unchecked { if (--count == 0) { if (MissedLoop) { count = 255; } else { count = InitialCount; } if (Loop) { MissedLoop = true; Scheduler.EnqueueRelativeEvent(e, WtPeriod); } else { IsActive = false; } if (GenerateInterrupt) { HasInterrupt = true; } HasExpired = true; } else { Scheduler.EnqueueRelativeEvent(e, WtPeriod); } } }
public CrystalTimer(Quartz32768HzCrystal master, Scheduler scheduler, int timerNumber) { switch (timerNumber) { case 1: InterruptId = Calculator.InterruptId.CrystalTimer1; break; case 2: InterruptId = Calculator.InterruptId.CrystalTimer2; break; case 3: InterruptId = Calculator.InterruptId.CrystalTimer3; break; default: throw new ArgumentOutOfRangeException("timerNumber must be between 1 and 3"); } TimerNumber = timerNumber; MasterTimer = master; //Oscillation = new EventHandler(DoTick); Scheduler = scheduler; NextWtIncrement = new Scheduler.WallTimeEvent(); NextWtIncrement.Tag = "Crystal timer " + timerNumber.ToString() + " wall-time tick"; NextWtIncrement.Handler = new EventHandler <Scheduler.WallTimeEvent>(DoTickWt); NextScIncrement = new Scheduler.SystemClockEvent(); NextScIncrement.Tag = "Crystal timer " + timerNumber.ToString() + " clock-time tick"; NextScIncrement.Handler = new EventHandler <Scheduler.SystemClockEvent>(DoTickSc); //Scheduler.EnqueueRelativeEvent(NextWtIncrement, 1.0 / 32768); }
public virtual void DoTick(object sender, Scheduler.WallTimeEvent e) { Scheduler.EnqueueRelativeEvent(e, Period); if (GenerateInterrupt) { Master.SetInterrupt(InterruptId); } }
private void DoTick(object sender, Scheduler.WallTimeEvent e) { Scheduler.EnqueueRelativeEvent(e, 1.0 / 32768); if (Tick != null) { Tick(this, null); } }
public ApdTimer(Scheduler sched, Calculator.InterruptId interruptId, Calculator master, double period) { NextIncrement = new Scheduler.WallTimeEvent(); NextIncrement.Tag = "HW Timer tick " + interruptId.ToString(); NextIncrement.Handler = new EventHandler <Scheduler.WallTimeEvent>(DoTick); Scheduler = sched; InterruptId = interruptId; Master = master; this.period = period; Scheduler.EnqueueRelativeEvent(NextIncrement, Period); }
public Quartz32768HzCrystal(Calculator master) { Master = master; Cpu = master.Cpu; Scheduler = Master.Scheduler; NextIncrement = new Scheduler.WallTimeEvent(); NextIncrement.Tag = "32768 Hz Crystal Tick"; NextIncrement.Handler = new EventHandler <Scheduler.WallTimeEvent>(DoTick); Scheduler.EnqueueRelativeEvent(NextIncrement, 1.0 / 32768); }