Fixed problem in DeviceSettings::strParam, returned wrong string
[avr-sim.git] / src / Timer16.h
blob52038f985581fd632038017e7d4c59c0fee1f56d
1 #ifndef AVR_TIMER16_H
2 #define AVR_TIMER16_H
4 #include "Types.h"
5 #include "Hardware.h"
6 #include <string>
8 #define MAX_OUTPUTCOMPARE16_UNITS 2
10 namespace avr {
12 /**
13 * @author Tom Haber
14 * @date May 29, 2008
15 * @brief 16-bit Output Compare Unit
17 * 16-bit Output Compare Unit
19 class OutputCompareUnit16 {
20 public:
21 OutputCompareUnit16() : ocfmask(0), ocrl(0), ocrh(0) {}
23 public:
24 void setOcrlRegister(IORegister *ocrl) { this->ocrl = ocrl; }
25 void setOcrhRegister(IORegister *ocrh) { this->ocrh = ocrh; }
26 bool ocrSet() const { return (ocrl != 0) && (ocrh != 0); }
27 void setMask(unsigned char ocfmask) { this->ocfmask = ocfmask; }
28 void setCompareMode(unsigned char cm) { this->compareMode = cm; }
29 void regChanged(IORegister *reg);
31 public:
32 void flush();
33 word value() const { return ocrBuf; }
34 void forceOutputCompare(IORegister *tifr, word tcnt);
35 void compareMatchOutput(IORegister *tifr, word tcnt);
37 private:
38 word ocrBuf;
39 unsigned char compareMode;
40 unsigned char ocfmask;
42 private:
43 IORegister *ocrl;
44 IORegister *ocrh;
47 /**
48 * @author Tom Haber
49 * @date May 2, 2008
50 * @brief 16-bit timers
52 * 16-bit timers
54 class Timer16 : public Hardware {
55 public:
56 Timer16(Bus & bus, unsigned char tovmask, int compunits,
57 unsigned char ocfmask[]);
59 public:
60 bool attachReg(const char *name, IORegister *reg);
61 void regChanged( IORegister *reg );
62 bool finishBuild();
63 void step();
65 private:
66 void flushOCRn();
67 void setClock(unsigned char tccr);
69 private:
70 unsigned char tovmask;
71 int direction;
73 word tcnt;
74 bool blockCompareMatch;
75 unsigned char timerMode;
76 int period;
78 int nUnits;
79 OutputCompareUnit16 units[MAX_OUTPUTCOMPARE16_UNITS];
81 private:
82 IORegister *tcntl;
83 IORegister *tcnth;
84 IORegister *tccra;
85 IORegister *tccrb;
86 IORegister *tifr;
91 #endif /*AVR_TIMER16_H*/