mirror of https://github.com/contiki-ng/mspsim
148 lines
4.1 KiB
Java
148 lines
4.1 KiB
Java
package se.sics.mspsim.core;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import se.sics.mspsim.util.Utils;
|
|
|
|
public abstract class MSP430Config {
|
|
|
|
public static class TimerConfig {
|
|
public final int ccr0Vector;
|
|
public final int ccrXVector;
|
|
public final int ccrCount;
|
|
public final int offset;
|
|
public final String name;
|
|
public final int[] srcMap;
|
|
public final int timerIVAddr;
|
|
|
|
public TimerConfig(int ccr0Vec, int ccrXVec, int ccrCount, int offset,
|
|
int[] srcMap, String name, int tiv) {
|
|
ccr0Vector = ccr0Vec;
|
|
ccrXVector = ccrXVec;
|
|
this.ccrCount = ccrCount;
|
|
this.name = name;
|
|
this.offset = offset;
|
|
this.srcMap = srcMap;
|
|
this.timerIVAddr = tiv;
|
|
}
|
|
}
|
|
|
|
public static class UARTConfig {
|
|
private static final int USCI_2 = 1;
|
|
private static final int USCI_5 = 2;
|
|
|
|
public final int txVector;
|
|
public final int rxVector;
|
|
public final int offset;
|
|
public final String name;
|
|
public final int txBit;
|
|
public final int rxBit;
|
|
public final int sfrAddr;
|
|
public final boolean usciA;
|
|
public final int type;
|
|
|
|
public UARTConfig(String name, int vector, int offset) {
|
|
type = USCI_5;
|
|
txVector = rxVector = vector;
|
|
this.txBit = this.rxBit = 0;
|
|
this.offset = offset;
|
|
this.name = name;
|
|
this.usciA = false;
|
|
this.sfrAddr = 0;
|
|
}
|
|
|
|
public UARTConfig(int txVector, int rxVector, int txBit, int rxBit, int sftAddr, int offset,
|
|
String name, boolean usciA) {
|
|
this.type = USCI_2;
|
|
this.txVector = txVector;
|
|
this.rxVector = rxVector;
|
|
this.txBit = txBit;
|
|
this.rxBit = rxBit;
|
|
this.offset = offset;
|
|
this.name = name;
|
|
this.usciA = usciA;
|
|
this.sfrAddr = sftAddr;
|
|
}
|
|
}
|
|
|
|
public UARTConfig[] uartConfig;
|
|
|
|
/* default for the 149/1611 */
|
|
public TimerConfig[] timerConfig = {
|
|
new TimerConfig(6, 5, 3, 0x160, Timer.TIMER_Ax149, "TimerA", Timer.TAIV),
|
|
new TimerConfig(13, 12, 7, 0x180, Timer.TIMER_Bx149, "TimerB", Timer.TBIV)
|
|
};
|
|
|
|
/* Memory configuration */
|
|
public int maxMemIO = 0x200;
|
|
public int maxMem = 64*1024;
|
|
public int maxInterruptVector = 15;
|
|
|
|
public int mainFlashStart = 0x0000;
|
|
public int mainFlashSize = 48 * 1024;
|
|
|
|
public int infoMemStart = 0x0000;
|
|
public int infoMemSize = 2 * 128;
|
|
|
|
public int ramStart = 0x2000;
|
|
public int ramSize = 2048;
|
|
|
|
|
|
public int flashControllerOffset = 0x128;
|
|
|
|
public boolean MSP430XArch = false;
|
|
|
|
public int sfrOffset = 0;
|
|
|
|
public int watchdogOffset = 0x120;
|
|
|
|
public abstract int setup(MSP430Core cpu, ArrayList<IOUnit> ioUnits);
|
|
|
|
|
|
public boolean isRAM(int address) {
|
|
return address >= ramStart && address < ramStart + ramSize;
|
|
}
|
|
|
|
public boolean isFlash(int address) {
|
|
return address >= mainFlashStart && address < mainFlashStart + mainFlashSize;
|
|
}
|
|
|
|
public boolean isInfoMem(int address) {
|
|
return address >= infoMemStart && address < infoMemStart + infoMemSize;
|
|
}
|
|
|
|
public boolean isIO(int address) {
|
|
return address < maxMemIO;
|
|
}
|
|
|
|
public String getAddressAsString(int addr) {
|
|
return Utils.hex16(addr);
|
|
}
|
|
|
|
|
|
public void infoMemConfig(int start, int size) {
|
|
infoMemStart = start;
|
|
infoMemSize = size;
|
|
}
|
|
|
|
public void mainFlashConfig(int start, int size) {
|
|
mainFlashStart = start;
|
|
mainFlashSize = size;
|
|
if (maxMem < start + size) {
|
|
maxMem = start + size;
|
|
}
|
|
}
|
|
|
|
/* ignored for now */
|
|
public void ramConfig(int start, int size) {
|
|
ramStart = start;
|
|
ramSize = size;
|
|
}
|
|
|
|
public void ioMemSize(int size) {
|
|
maxMemIO = size;
|
|
}
|
|
|
|
|
|
}
|