Fixed problem in DeviceSettings::strParam, returned wrong string
[avr-sim.git] / src / Timer8.h
blob07eed65b6ab641952f242a6ac617ba5ec2270d43
1 #ifndef AVR_TIMER8_H
2 #define AVR_TIMER8_H
4 #include "Types.h"
5 #include "Hardware.h"
7 #define MAX_OUTPUTCOMPARE8_UNITS 3
9 namespace avr {
11 /**
12 * @author Tom Haber
13 * @date May 29, 2008
14 * @brief 8-bit Output Compare Unit
16 * 8-bit Output Compare Unit
18 class OutputCompareUnit8 {
19 public:
20 OutputCompareUnit8() : ocfmask(0), ocr(0) {}
22 public:
23 void setOcrRegister(IORegister *ocr) { this->ocr = ocr; }
24 bool ocrSet() const { return ocr != 0; }
25 void setMask(unsigned char ocfmask) { this->ocfmask = ocfmask; }
26 void setCompareMode(unsigned char cm) { this->compareMode = cm; }
27 void regChanged(IORegister *reg);
29 public:
30 bool compare(unsigned char tcnt) const { return tcnt == ocrBuf; }
31 void flush();
32 unsigned char value() const { return ocrBuf; }
33 void forceOutputCompare(IORegister *tifr, unsigned char tcnt);
34 void compareMatchOutput(IORegister *tifr, unsigned char tcnt);
36 private:
37 // For double buffering ocr register
38 unsigned char ocrBuf;
39 unsigned char compareMode;
40 unsigned char ocfmask;
42 private:
43 IORegister *ocr;
46 /**
47 * @author Tom Haber
48 * @date May 2, 2008
49 * @brief 8-bit timers
51 * 8-bit timers
53 class Timer8 : public Hardware {
54 public:
55 Timer8(Bus & bus, unsigned char tovmask, int compunits,
56 unsigned char ocfmask[]);
58 public:
59 bool attachReg(const char *name, IORegister *reg);
60 bool finishBuild();
61 void regChanged( IORegister *reg );
62 void step();
64 private:
65 void setClock(unsigned char tccr);
66 void flushOCRn();
68 private:
69 unsigned char tovmask;
70 int direction;
72 /* pg. 93 of manual. Block compareMatch for one period after
73 * TCNTn is written to. */
74 bool blockCompareMatch;
76 unsigned char timerMode;
77 int period;
79 private:
80 IORegister *tcnt;
81 IORegister *tccr;
82 IORegister *tifr;
84 int nUnits;
85 OutputCompareUnit8 units[MAX_OUTPUTCOMPARE8_UNITS];
90 #endif /*AVR_TIMER8_H*/