コード例 #1
0
ファイル: CrystalTimer.cs プロジェクト: drdnar/Tiedye
 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);
         }
     }
 }
コード例 #2
0
ファイル: CrystalTimer.cs プロジェクト: drdnar/Tiedye
        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);
        }
コード例 #3
0
ファイル: ApdTimer.cs プロジェクト: drdnar/Tiedye
 public virtual void DoTick(object sender, Scheduler.WallTimeEvent e)
 {
     Scheduler.EnqueueRelativeEvent(e, Period);
     if (GenerateInterrupt)
     {
         Master.SetInterrupt(InterruptId);
     }
 }
コード例 #4
0
 private void DoTick(object sender, Scheduler.WallTimeEvent e)
 {
     Scheduler.EnqueueRelativeEvent(e, 1.0 / 32768);
     if (Tick != null)
     {
         Tick(this, null);
     }
 }
コード例 #5
0
ファイル: ApdTimer.cs プロジェクト: drdnar/Tiedye
 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);
 }
コード例 #6
0
        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);
        }