diff --git a/Software/TS.NET/source/TS.NET/Hardware/Thunderscope.cs b/Software/TS.NET/source/TS.NET/Hardware/Thunderscope.cs index 1e3340dc..3b9c1859 100644 --- a/Software/TS.NET/source/TS.NET/Hardware/Thunderscope.cs +++ b/Software/TS.NET/source/TS.NET/Hardware/Thunderscope.cs @@ -121,6 +121,13 @@ namespace TS.NET private void Initialise() { Write32(BarRegister.DATAMOVER_REG_OUT, 0); + + //Comment out below for Rev.1 + hardwareState.PllEnabled = true; //RSTn high --> PLL active + ConfigureDatamover(hardwareState); + Thread.Sleep(1); + //Comment out above for Rev.1 + hardwareState.BoardEnabled = true; ConfigureDatamover(hardwareState); ConfigurePLL(); @@ -208,6 +215,11 @@ namespace TS.NET } Write32(BarRegister.DATAMOVER_REG_OUT, datamoverRegister); } + + /* + ------------------------------------------------------------------ + UNCOMMENT THIS FOR REV 1 BASEBOARD + ------------------------------------------------------------------ private void ConfigurePLL() { @@ -244,6 +256,68 @@ namespace TS.NET fifo[3] = value; WriteFifo(fifo); } + */ + + /* + ------------------------------------------------------------------ + COMMENT BELOW OUT FOR REV 1 BASEBOARD + ------------------------------------------------------------------ + */ + + private void ConfigurePLL() + { + //Strobe RST line on power on + Thread.Sleep(1); + hardwareState.PllEnabled = false; //RSTn low --> PLL reset + ConfigureDatamover(hardwareState); + Thread.Sleep(1); + hardwareState.PllEnabled = true; //RSTn high --> PLL active + ConfigureDatamover(hardwareState); + Thread.Sleep(1); + + // These were provided by the chip configuration tool. + uint[] config_clk_gen = { + 0X000902, 0X062108, 0X063140, 0X010006, + 0X010120, 0X010202, 0X010380, 0X010A20, + 0X010B03, 0X01140D, 0X012006, 0X0125C0, + 0X012660, 0X01277F, 0X012904, 0X012AB3, + 0X012BC0, 0X012C80, 0X001C10, 0X001D80, + 0X034003, 0X020141, 0X022135, 0X022240, + 0X000C02, 0X000B01}; + + // write to the clock generator + for (int i = 0; i < config_clk_gen.Length; i++) + { + SetPllRegister((byte)(config_clk_gen[i] >> 16),(byte)(config_clk_gen[i] >> 8), (byte)(config_clk_gen[i] & 0xff)); + } + + Thread.Sleep(10); + + SetPllRegister((byte)(0x00),(byte)(0x0D), (byte)(0x05)); + + Thread.Sleep(10); + } + + const byte I2C_BYTE_PLL = 0xFF; + const byte CLOCK_GEN_I2C_ADDRESS_WRITE = 0b11011000; + const byte CLOCK_GEN_WRITE_COMMAND = 0x02; + private void SetPllRegister(byte reg_high, byte reg_low, byte value) + { + Span<byte> fifo = new byte[6]; + fifo[0] = I2C_BYTE_PLL; + fifo[1] = CLOCK_GEN_I2C_ADDRESS_WRITE; + fifo[2] = CLOCK_GEN_WRITE_COMMAND; + fifo[3] = reg_high; + fifo[4] = reg_low; + fifo[5] = value; + WriteFifo(fifo); + } + + /* + ------------------------------------------------------------------ + COMMENT ABOVE OUT FOR REV 1 BASEBOARD + ------------------------------------------------------------------ + */ private void ConfigureADC() {