sim/config: sync DMA peripheral registers to ISP The locations of registers now match the Sparrow ISP. Change-Id: Ic9e69ba28da0eae880455a9735e96ba7eae808b4
diff --git a/shodan_infrastructure/DoubleBufferDMA.cs b/shodan_infrastructure/DoubleBufferDMA.cs index 686e011..4034335 100644 --- a/shodan_infrastructure/DoubleBufferDMA.cs +++ b/shodan_infrastructure/DoubleBufferDMA.cs
@@ -54,13 +54,16 @@ } var data = RegisteredPeripheral.ReadFrame(); + var size = horizontalSize.Value * verticalSize.Value; + // Restore bottom 3 bits of address. + var addr1 = rxBuffer1Address.Value << 3; - if(data.Length != rxBufferSize.Value) + if(data.Length != size) { - this.Log(LogLevel.Warning, "Received {0} bytes from the device, but RX DMA stream is configured for {1} bytes. This might indicate problems in the driver", data.Length, rxBufferSize.Value); + this.Log(LogLevel.Warning, "Received {0} bytes from the device, but RX DMA stream is configured for {1} bytes. This might indicate problems in the driver", data.Length, size); } - - Machine.SystemBus.WriteBytes(data, rxBuffer1Address.Value); + + Machine.SystemBus.WriteBytes(data, addr1); // TODO(jesionowski): re-enable double buffer once sw supports it // if(use_buffer1) { @@ -78,38 +81,39 @@ public GPIO Trigger { get; } public GPIO IRQ { get; } - public long Size => 0x100; + public long Size => 0x1000; private void DefineRegisters() { - Registers.RxBufferSize.Define(this) - .WithValueField(0, 32, out rxBufferSize, name: "RX_SIZE") + Registers.HorizontalSize.Define(this) + .WithValueField(0, 15, out horizontalSize, name: "HORIZONTAL_SIZE") + ; + + Registers.VerticalSize.Define(this) + .WithValueField(0, 14, out verticalSize, name: "VERTICAL_SIZE") ; Registers.RxBufferBaseAddress1.Define(this) - .WithValueField(0, 32, out rxBuffer1Address, name: "ADDR1") + .WithValueField(3, 29, out rxBuffer1Address, name: "ADDR1") ; Registers.RxBufferBaseAddress2.Define(this) - .WithValueField(0, 32, out rxBuffer2Address, name: "ADDR2") - ; - - Registers.Configuration.Define(this) - .WithReservedBits(0, 32) + .WithValueField(3, 29, out rxBuffer2Address, name: "ADDR2") ; } private bool use_buffer1 = true; private IValueRegisterField rxBuffer1Address; private IValueRegisterField rxBuffer2Address; - private IValueRegisterField rxBufferSize; + private IValueRegisterField horizontalSize; + private IValueRegisterField verticalSize; private enum Registers { - Configuration = 0x0, - RxBufferSize = 0x4, - RxBufferBaseAddress1 = 0x8, - RxBufferBaseAddress2 = 0xc, + HorizontalSize = 0x410, + VerticalSize = 0x414, + RxBufferBaseAddress1 = 0xe08, + RxBufferBaseAddress2 = 0xf30, } } }