public SunxiHighSpeedTimer(Machine machine, long frequency) { irqEnableRegister = new DoubleWordRegister(this); irqStatusRegister = new DoubleWordRegister(this); timers = new SunxiHighSpeedTimerUnit[4]; interruptFlags = new IFlagRegisterField[4]; enableFlags = new IFlagRegisterField[4]; for(var i = 0; i < 4; ++i) { var j = i; timers[i] = new SunxiHighSpeedTimerUnit(machine, frequency); timers[i].LimitReached += () => OnTimerLimitReached(j); interruptFlags[i] = irqStatusRegister.DefineFlagField(i, FieldMode.WriteOneToClear, name: "Tx_IRQ_PEND"); enableFlags[i] = irqEnableRegister.DefineFlagField(i, name: "Tx_INT_EN"); } var innerConnections = new Dictionary<int, IGPIO>(); for(var i = 0; i < 4; ++i) { innerConnections[i] = new GPIO(); } Connections = new ReadOnlyDictionary<int, IGPIO>(innerConnections); }
public SunxiHighSpeedTimer(Machine machine, long frequency) { irqEnableRegister = new DoubleWordRegister(this); irqStatusRegister = new DoubleWordRegister(this); timers = new SunxiHighSpeedTimerUnit[4]; interruptFlags = new IFlagRegisterField[4]; enableFlags = new IFlagRegisterField[4]; for (var i = 0; i < 4; ++i) { var j = i; timers[i] = new SunxiHighSpeedTimerUnit(machine, frequency); timers[i].LimitReached += () => OnTimerLimitReached(j); interruptFlags[i] = irqStatusRegister.DefineFlagField(i, FieldMode.WriteOneToClear, name: "Tx_IRQ_PEND"); enableFlags[i] = irqEnableRegister.DefineFlagField(i, name: "Tx_INT_EN"); } var innerConnections = new Dictionary <int, IGPIO>(); for (var i = 0; i < 4; ++i) { innerConnections[i] = new GPIO(); } Connections = new ReadOnlyDictionary <int, IGPIO>(innerConnections); }
private int GetTimerRegisterByOffset(long offset, out SunxiHighSpeedTimerUnit timer) { if (offset < 0x10) { timer = null; return((int)offset); } var offsetPerTimer = ((offset - 0x10) % 0x20) + 0x10; var timerNumber = (uint)(offset - 0x10) / 0x20; timer = timers[timerNumber]; return((int)offsetPerTimer); }
private int GetTimerRegisterByOffset(long offset, out SunxiHighSpeedTimerUnit timer) { if(offset < 0x10) { timer = null; return (int)offset; } var offsetPerTimer = ((offset - 0x10) % 0x20) + 0x10; var timerNumber = (uint)(offset - 0x10) / 0x20; timer = timers[timerNumber]; return (int)offsetPerTimer; }