~arcachofo/simulide/1.1.0

« back to all changes in this revision

Viewing changes to src/gpsim/modules/tmr0.h

  • Committer: arcachofo
  • Date: 2021-01-01 14:23:42 UTC
  • Revision ID: arcachofo@simulide.com-20210101142342-ozfljnll44g5lbl3
Initial Commit 0.5.15-RC3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
   Copyright (C) 1998,1999,2000 T. Scott Dattalo
 
3
 
 
4
This file is part of the libgpsim library of gpsim
 
5
 
 
6
This library is free software; you can redistribute it and/or
 
7
modify it under the terms of the GNU Lesser General Public
 
8
License as published by the Free Software Foundation; either
 
9
version 2.1 of the License, or (at your option) any later version.
 
10
 
 
11
This library is distributed in the hope that it will be useful,
 
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
Lesser General Public License for more details.
 
15
 
 
16
You should have received a copy of the GNU Lesser General Public
 
17
License along with this library; if not, see 
 
18
<http://www.gnu.org/licenses/lgpl-2.1.html>.
 
19
*/
 
20
 
 
21
#ifndef __TMR0_H__
 
22
#define __TMR0_H__
 
23
 
 
24
#include "ioports.h"
 
25
 
 
26
class T1GCON;
 
27
class ADCON2_TRIG;
 
28
class CLC;
 
29
 
 
30
//---------------------------------------------------------
 
31
// TMR0 - Timer
 
32
class TMR0 : public SfrReg, public TriggerObject, public SignalSink
 
33
{
 
34
public:
 
35
  uint 
 
36
    prescale,
 
37
    prescale_counter,
 
38
    old_option,       // Save option register contents here.
 
39
    state;            // Either on or off right now.
 
40
  uint64_t
 
41
    synchronized_cycle,
 
42
    future_cycle;
 
43
  int64_t
 
44
    last_cycle;   // can be negative ...
 
45
 
 
46
  OPTION_REG *m_pOptionReg;
 
47
 
 
48
 
 
49
  virtual void callback();
 
50
 
 
51
  TMR0(Processor *, const char *pName );
 
52
 
 
53
  virtual void release();
 
54
 
 
55
  virtual void put(uint new_value);
 
56
  virtual void put_value(uint new_value);
 
57
  virtual uint get();
 
58
  virtual uint get_value();
 
59
  virtual void start(int new_value,int sync=0);
 
60
  virtual void stop();
 
61
  virtual void increment();   // Used when tmr0 is attached to an external clock
 
62
  virtual void new_prescale();
 
63
  virtual uint get_prescale();
 
64
  virtual uint max_counts() {return 256;}
 
65
  virtual bool get_t0cs();
 
66
  virtual bool get_t0se();
 
67
  virtual void set_t0if();
 
68
  virtual void set_t0xcs(bool _t0xcs){t0xcs = _t0xcs;}
 
69
  virtual bool get_t0xcs() {return t0xcs;}
 
70
  virtual void reset(RESET_TYPE r);
 
71
  virtual void callback_print();
 
72
  virtual void clear_trigger();
 
73
 
 
74
  virtual void set_cpu(Processor *, PortRegister *, uint pin,OPTION_REG *);
 
75
  virtual void set_cpu(Processor *new_cpu, PinModule *pin,OPTION_REG *);
 
76
  virtual void setSinkState(char);
 
77
  virtual void sleep();
 
78
  virtual void wake();
 
79
  void set_t1gcon(T1GCON *_t1gcon) { m_t1gcon = _t1gcon; }
 
80
  void set_adcon2(ADCON2_TRIG *_adcon2) { m_adcon2 = _adcon2; }
 
81
  void set_clc(CLC *_clc, int index);
 
82
 
 
83
  enum {
 
84
    STOPPED = 0,
 
85
    RUNNING = 1,
 
86
    SLEEPING = 2
 
87
  };
 
88
 
 
89
protected:
 
90
  T1GCON     *m_t1gcon;
 
91
  ADCON2_TRIG   *m_adcon2;
 
92
  CLC        *m_clc[4];
 
93
 
 
94
private:
 
95
  bool         m_bLastClockedState;
 
96
  bool        t0xcs;            //  clock source is the capacitive sensing oscillator
 
97
};
 
98
 
 
99
#endif