123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- MODULE TestDMA;
- IMPORT Trace, Machine, Random, DMA;
- VAR
- g: Random.Generator;
- w: DMA.Writer;
- r: DMA.Reader;
- src, dst: POINTER TO ARRAY 2048 + 16 OF CHAR;
- len, size, burst, i, srcOfs, dstOfs: LONGINT;
- errors, ovf1, ovf2: BOOLEAN;
- PROCEDURE Align (address: ADDRESS; align: LONGINT): LONGINT;
- VAR
- BEGIN
- IF align = 8 THEN
- RETURN 8 - address MOD 8
- ELSE
- RETURN 8 - address MOD 8 + align
- END
- END Align;
- BEGIN
- size := 1024;
- burst := 64;
- NEW(g);
- NEW(src);
- NEW(dst);
- srcOfs := Align(ADDRESSOF(src[0]), 8);
- (*dstOfs := Align(ADDRESSOF(dst[0]), 8);*)
- (*FOR srcOfs := 0 TO 7 DO*)
- FOR dstOfs := 0 TO 7 DO
- Trace.String(":: Transfer: "); Trace.Address(ADDRESSOF(src[srcOfs]));
- Trace.String(" => "); Trace.Address(ADDRESSOF(dst[dstOfs])); Trace.Ln;
- Trace.String(" => src ofs: "); Trace.Int(srcOfs, 0); Trace.Ln;
- Trace.String(" => dst ofs: "); Trace.Int(dstOfs, 0); Trace.Ln;
- FOR i := 0 TO LEN(src) - 1 DO src[i] := CHR(g.Dice(100H)) END;
- FOR i := 0 TO LEN(dst) - 1 DO dst[i] := 0X END;
- Machine.FlushDCacheRange(ADDRESSOF(src[0]), LEN(src));
- Machine.FlushDCacheRange(ADDRESSOF(dst[0]), LEN(dst));
- (*DMA.OpenWriter(w, size, burst, ADDRESSOF(dst[dstOfs]), TRUE);
- w.Bytes(src^, srcOfs, size);*)
- DMA.OpenReader(r, size, burst, ADDRESSOF(src[srcOfs]), TRUE);
- r.Bytes(dst^, dstOfs, size, len);
- (*DMA.controller.channels[0].Await;*)
- Machine.InvalidateDCacheRange(ADDRESSOF(dst[0]), LEN(dst));
- errors := FALSE;
- FOR i := 0 TO size - 1 DO
- IF src[i + srcOfs] # dst[i + dstOfs] THEN
- IF ~errors THEN
- errors:= TRUE;
- Trace.StringLn(" -> FOUND TRANSFER ERROR:");
- END;
- Trace.String(" Difference: "); Trace.Int(i, 3); Trace.String(" "); Trace.Hex(ORD(src[i + srcOfs]), -2); Trace.String(" "); Trace.Hex(ORD(dst[i + dstOfs]), -2); Trace.Ln
- END
- END;
- ovf1 := FALSE;
- FOR i := 0 TO dstOfs - 1 DO
- IF dst[i] # 0X THEN
- IF ~ovf1 THEN
- ovf1 := TRUE;
- Trace.StringLn(" -> FOUND TRANSFER OVERFLOW:")
- END;
- Trace.String(" pos, val: "); Trace.Int(i, 3); Trace.String(" "); Trace.Hex(ORD(dst[i]), -2); Trace.Ln
- END
- END;
- ovf2 := FALSE;
- FOR i := dstOfs + size TO LEN(dst) - 1 DO
- IF dst[i] # 0X THEN
- IF ~ovf2 THEN
- ovf2 := TRUE;
- Trace.StringLn(" -> FOUND TRANSFER OVERFLOW:")
- END;
- Trace.String(" pos, val: "); Trace.Int(i, 3); Trace.String(" "); Trace.Hex(ORD(dst[i]), -2); Trace.Ln
- END
- END;
- IF ~(errors OR ovf1 OR ovf2) THEN
- Trace.StringLn(" -> NO ERROR FOUND")
- END;
- Trace.Ln
- END
- (*END*)
- END TestDMA.
- Compiler.Compile -b=ARM --traceModule=Trace --initLocals
- Timothee/ARM.A2/ARM.Streams.Mod
- Timothee/ARM.A2/ARM.Math.Mod
- Random.Mod
- Timothee/ARM.A2/DMA330.Mod
- Timothee/ARM.A2/Zynq.DMA.Mod
- Timothee/ARM.A2/TestDMA.Mod
- ~
- StaticLinker.Link --fileName=Test.Bin --displacement=100000H -a
- Initializer Runtime Platform FPE64 ARMRuntime Trace Uart Machine
- Heaps Modules Objects Kernel
- Streams
- Math Random
- DMA330 DMA
- TestDMA
- ~
|