aboutsummaryrefslogtreecommitdiff
path: root/src/peripherals/timer.ts
diff options
context:
space:
mode:
authorUri Shaked2022-02-21 17:49:10 +0200
committerUri Shaked2022-02-21 17:49:10 +0200
commit0f2a3b0abf058d04f5368d7c1ce55131d5e319a0 (patch)
tree67727dbe707e3d49a1f9071bce2487774084596f /src/peripherals/timer.ts
parentMerge pull request #116 from Dudeplayz/master (diff)
downloadavr8js-0f2a3b0abf058d04f5368d7c1ce55131d5e319a0.tar.gz
avr8js-0f2a3b0abf058d04f5368d7c1ce55131d5e319a0.tar.bz2
avr8js-0f2a3b0abf058d04f5368d7c1ce55131d5e319a0.zip
fix(timer): OCRH masking #117
Diffstat (limited to '')
-rw-r--r--src/peripherals/timer.ts21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/peripherals/timer.ts b/src/peripherals/timer.ts
index 53777e2..6167394 100644
--- a/src/peripherals/timer.ts
+++ b/src/peripherals/timer.ts
@@ -388,11 +388,16 @@ export class AVRTimer {
const updateTempRegister = (value: u8) => {
this.highByteTemp = value;
};
+ const updateOCRHighRegister = (value: u8, old: u8, addr: u16) => {
+ this.highByteTemp = value & (this.ocrMask >> 8);
+ cpu.data[addr] = this.highByteTemp;
+ return true;
+ };
this.cpu.writeHooks[config.TCNT + 1] = updateTempRegister;
- this.cpu.writeHooks[config.OCRA + 1] = updateTempRegister;
- this.cpu.writeHooks[config.OCRB + 1] = updateTempRegister;
+ this.cpu.writeHooks[config.OCRA + 1] = updateOCRHighRegister;
+ this.cpu.writeHooks[config.OCRB + 1] = updateOCRHighRegister;
if (this.hasOCRC) {
- this.cpu.writeHooks[config.OCRC + 1] = updateTempRegister;
+ this.cpu.writeHooks[config.OCRC + 1] = updateOCRHighRegister;
}
this.cpu.writeHooks[config.ICR + 1] = updateTempRegister;
}
@@ -481,6 +486,16 @@ export class AVRTimer {
}
}
+ get ocrMask() {
+ switch (this.topValue) {
+ case TopOCRA:
+ case TopICR:
+ return 0xffff;
+ default:
+ return this.topValue;
+ }
+ }
+
private updateWGMConfig() {
const { config, WGM } = this;
const wgmModes = config.bits === 16 ? wgmModes16Bit : wgmModes8Bit;