blob: 370b9c3ad36564171d629d2a81b9f45b22fc0f24 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
// AVR-Dx RSTCTRL - Reset Controller
// Handles software reset and reset flags.
import { type CPU } from 'avr8js/cpu/cpu';
import { type AVRDxCCP } from './avrdx-ccp';
export const RSTFR = 0;
export const SWRR = 1;
export const SWRST_bm = 0x01;
export class AVRDxRSTCTRL {
/** Set this callback to handle software resets */
onReset: (() => void) | null = null;
constructor(cpu: CPU, base: number, ccp: AVRDxCCP) {
// RSTFR - reset flags, write 1 to clear
cpu.writeHooks[base + RSTFR] = (value) => {
cpu.data[base + RSTFR] &= ~value;
return true;
};
// SWRR - software reset register (CCP protected)
cpu.writeHooks[base + SWRR] = (value) => {
if (ccp.isUnlocked() && (value & SWRST_bm)) {
if (this.onReset) this.onReset();
}
return true;
};
}
}
|