Merge "sim/config: sync DMA peripheral registers to ISP"
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,
}
}
}