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