Files
PIC-Simu/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java

60 lines
1.5 KiB
Java

package fabrik.simulator.pic16f84;
import fabrik.simulator.pic16f84.interfaces.*;
public class WatchdogTimer extends PICComponent implements WatchdogTimerInterface {
private long watchdogTime;
private double lastReset = 0;
private boolean enabled = false;
private long rawtimer = 0;
private long realtimer = 0;
public WatchdogTimer(){
}
private long getTimeFromRegister() {
return (preScaler.isPrescalerOnTimer()) ? 18L : preScaler.getFactor() * 18L;
}
public void testAndTrigger() {
watchdogTime = getTimeFromRegister() * 1000;
if (enabled) {
if (realtimer >= (watchdogTime + lastReset - 1)) {
dataRegister.clearBit(3, 4);
lastReset = commands.getTotalExecutionTime();
frontendController.stopRunFromBackend("Watchdog Timer");
}
else {
rawtimer++;
realtimer = (long) (rawtimer * frontendController.getExecutionTimeMultiplier());
}
}
}
public void reset (){
lastReset = commands.getTotalExecutionTime();
rawtimer = 0;
realtimer = 0;
preScaler.reset();
dataRegister.setBit(3, 3);
dataRegister.setBit(3, 4);
}
public void enable() {
enabled = true;
}
public void disable() {
enabled = false;
}
public long get (){
return realtimer;
}
@Override
public void initialize(PICComponents picComponents) {
super.initialize(picComponents);
}
}