1 // 2 // Copyright (c) 2010-2024 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using System; 8 using System.Collections.Generic; 9 using Antmicro.Renode.Core; 10 using Antmicro.Renode.Core.Structure.Registers; 11 using Antmicro.Renode.Peripherals.Bus; 12 using Antmicro.Renode.Utilities; 13 using Antmicro.Renode.Logging; 14 15 namespace Antmicro.Renode.Peripherals.DMA 16 { 17 public class RenesasDA14_DMA : RenesasDA_DMABase, IKnownSize, IGPIOReceiver 18 { RenesasDA14_DMA(IMachine machine)19 public RenesasDA14_DMA(IMachine machine) : base(machine, ChannelCount, ChannelCount / 2) 20 { 21 Registers.PeripheralsMapping.Define(this, 0x00000fff) 22 .WithValueField(0, 4, out peripheralSelect[0], name: "DMA01_SEL") 23 .WithValueField(4, 4, out peripheralSelect[1], name: "DMA23_SEL") 24 .WithValueField(8, 4, out peripheralSelect[2], name: "DMA45_SEL") 25 .WithReservedBits(ChannelCount * 2, 32 - ChannelCount * 2); 26 27 RegistersCollection.AddRegister((long)Registers.InterruptStatus, interruptsManager.GetMaskedInterruptFlagRegister<DoubleWordRegister>()); 28 RegistersCollection.AddRegister((long)Registers.InterruptClear, interruptsManager.GetInterruptClearRegister<DoubleWordRegister>()); 29 RegistersCollection.AddRegister((long)Registers.InterruptMask, interruptsManager.GetInterruptEnableRegister<DoubleWordRegister>()); 30 RegistersCollection.AddRegister((long)Registers.SetInterruptMask, interruptsManager.GetInterruptEnableSetRegister<DoubleWordRegister>()); 31 RegistersCollection.AddRegister((long)Registers.ResetInterruptMask, interruptsManager.GetInterruptEnableClearRegister<DoubleWordRegister>()); 32 33 Reset(); 34 } 35 36 public long Size => 0x118; 37 38 private const int ChannelCount = 6; 39 40 private enum Registers 41 { 42 PeripheralsMapping = 0x100, 43 InterruptStatus = 0x104, 44 InterruptClear = 0x108, 45 InterruptMask = 0x10C, 46 SetInterruptMask = 0x110, 47 ResetInterruptMask = 0x114, 48 } 49 } 50 } 51 52