public UDMA(Machine machine, int numberOfChannels = 32)
 {
     engine    = new DmaEngine(machine);
     SystemBus = machine.SystemBus;
     channels  = new Channel[numberOfChannels];
     IRQ       = new GPIO();
     Reset();
 }
Example #2
0
 public UDMA(Machine machine)
 {
     engine    = new DmaEngine(machine);
     SystemBus = machine.SystemBus;
     channels  = new Channel[32];
     IRQ       = new GPIO();
     Reset();
 }
Example #3
0
 public STM32LDMA(Machine machine)
 {
     engine   = new DmaEngine(machine);
     channels = new Channel[8];
     for (var i = 0; i < channels.Length; i++)
     {
         channels[i] = new Channel(this, i);
     }
 }
 public STM32DMA(Machine machine)
 {
     streamFinished = new bool[NumberOfStreams];
     streams        = new Stream[NumberOfStreams];
     for (var i = 0; i < streams.Length; i++)
     {
         streams[i] = new Stream(this, i);
     }
     this.machine = machine;
     engine       = new DmaEngine(machine);
     Reset();
 }
        public VybridDma(Machine mach)
        {
            machine = mach;
            engine  = new DmaEngine(machine);

            channels = new Channel[32];
            for (var i = 0; i < 32; i++)
            {
                channels[i] = new Channel(this, i);
            }

            IRQ = new GPIO();
        }
Example #6
0
        public TegraDma(Machine machine)
        {
            dmaEngine = new DmaEngine(machine);
            channels  = new Channel[ChannelNo];

            var innerConnections = new Dictionary <int, IGPIO>();

            for (var i = 0; i < channels.Length; i++)
            {
                channels[i]         = new Channel(this, i);
                innerConnections[i] = channels[i].IRQ;
            }

            Connections = new ReadOnlyDictionary <int, IGPIO>(innerConnections);
            Reset();
        }
        public MPFS_PDMA(Machine machine)
        {
            this.machine = machine;
            dmaEngine    = new DmaEngine(this.machine);
            channels     = new Channel[ChannelCount];

            var irqCounter       = 0;
            var innerConnections = new Dictionary <int, IGPIO>();

            for (var i = 0; i < ChannelCount; ++i)
            {
                channels[i] = new Channel(this, i);
                innerConnections[irqCounter++] = channels[i].DoneInterrupt;
                innerConnections[irqCounter++] = channels[i].ErrorInterrupt;
            }
            Connections = new ReadOnlyDictionary <int, IGPIO>(innerConnections);
            Reset();
        }
Example #8
0
        public STM32G0DMA(Machine machine, int numberOfChannels)
        {
            this.machine          = machine;
            engine                = new DmaEngine(machine);
            this.numberOfChannels = numberOfChannels;
            channels              = new Channel[numberOfChannels];
            var innerConnections = new Dictionary <int, IGPIO>();

            for (var i = 0; i < numberOfChannels; ++i)
            {
                channels[i]         = new Channel(this, i);
                innerConnections[i] = new GPIO();
            }

            Connections = new ReadOnlyDictionary <int, IGPIO>(innerConnections);

            var interruptStatus    = new DoubleWordRegister(this);
            var interruptFlagClear = new DoubleWordRegister(this)
                                     .WithWriteCallback((_, __) => Update());

            for (var i = 0; i < numberOfChannels; ++i)
            {
                var j = i;
                interruptStatus.DefineFlagField(j * 4 + 0, FieldMode.Read, valueProviderCallback: _ => channels[j].GlobalInterrupt, name: $"Global interrupt flag for channel {j} (GIF{j})");
                interruptStatus.DefineFlagField(j * 4 + 1, FieldMode.Read, valueProviderCallback: _ => channels[j].TransferComplete, name: $"Transfer complete flag for channel {j} (TCIF{j})");
                interruptStatus.DefineFlagField(j * 4 + 2, FieldMode.Read, valueProviderCallback: _ => channels[j].HalfTransfer, name: $"Half transfer flag for channel {j} (HTIF{j})");
                interruptStatus.Tag($"Transfer error flag for channel {j} (TEIF{j})", j * 4 + 3, 1);

                interruptFlagClear.DefineFlagField(j * 4 + 0, FieldMode.Write, writeCallback: (_, val) => channels[j].GlobalInterrupt  = !val, name: $"Global interrupt flag clear for channel {j} (CGIF{j})");
                interruptFlagClear.DefineFlagField(j * 4 + 1, FieldMode.Write, writeCallback: (_, val) => channels[j].TransferComplete = !val, name: $"Transfer complete flag clear for channel {j} (CTEIF{j})");
                interruptFlagClear.DefineFlagField(j * 4 + 2, FieldMode.Write, writeCallback: (_, val) => channels[j].HalfTransfer     = !val, name: $"Half transfer flag clear for channel {j} (CHTIF{j})");
                interruptFlagClear.Tag($"Transfer error flag clear for channel {j} (CTEIF{j})", j * 4 + 3, 1);
            }

            var registerMap = new Dictionary <long, DoubleWordRegister>
            {
                { (long)Registers.InterruptStatus, interruptStatus },
                { (long)Registers.InterruptFlagClear, interruptFlagClear },
            };

            registers = new DoubleWordRegisterCollection(this, registerMap);
        }
 public TegraDmaHost1X(Machine machine)
 {
     dmaEngine = new DmaEngine(machine);
     sysbus    = machine.SystemBus;
 }