TestDMA2.Mod 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. MODULE TestDMA;
  2. IMPORT SYSTEM, Trace, Machine, Kernel, Random, DMA, MT := MatrixTools, Timer;
  3. CONST
  4. Size = 64 * 256;
  5. VAR
  6. g: Random.Generator;
  7. w: DMA.Writer;
  8. r: DMA.Reader;
  9. src, dst: POINTER TO ARRAY Size + 8 OF CHAR;
  10. (*src, dst: POINTER TO ARRAY Size OF LONGINT;*)
  11. interm: ARRAY Size OF LONGINT;
  12. t: Kernel.MilliTimer;
  13. pOut, pIn: ADDRESS;
  14. count, burst, i, len, time: LONGINT;
  15. PROCEDURE Align (address: ADDRESS; align: LONGINT): LONGINT;
  16. VAR
  17. BEGIN
  18. IF align = 8 THEN
  19. RETURN 8 - address MOD 8
  20. ELSE
  21. RETURN 8 - address MOD 8 + align
  22. END
  23. END Align;
  24. BEGIN
  25. burst := 64;
  26. pOut := 7F000000H;
  27. pIn := pOut + 8;
  28. NEW(g);
  29. NEW(src);
  30. NEW(dst);
  31. DMA.OpenWriter(w, Size, burst, pOut, FALSE, 0);
  32. DMA.OpenReader(r, Size, burst, pIn, FALSE, 1);
  33. (*SYSTEM.PUT(MT.AxiBaseAddr0 +1*MT.ChanOffset, 0); (* reset the timer *)
  34. dmaOut.Update;
  35. SYSTEM.PUT(MT.AxiBaseAddr0 +1*MT.ChanOffset, 1); (* sample the timer *)
  36. SYSTEM.GET(MT.AxiBaseAddr0 + 1*MT.ChanOffset+MT.DataOffset, t); (* read timer data*)*)
  37. FOR i := 0 TO LEN(src) - 1 DO src[i] := CHR(g.Dice(100H)) END;
  38. (*Kernel.SetTimer(t, 1000);*)
  39. Timer.Tick;
  40. w.Bytes(src^, 0, Size);
  41. (*time := Kernel.Elapsed(t);*)
  42. (*FOR i := 0 TO Size - 1 BY 4 DO
  43. interm[i] := ORD(src[i]) + (ORD(src[i + 1])) * 100H + ORD(src[i + 2]) * 10000H + (ORD(src[i + 3])) * 1000000H;
  44. SYSTEM.PUT(pOut, interm[i])
  45. END;*)
  46. (*FOR i := 0 TO Size - 1 BY 4 DO
  47. len := SYSTEM.GET32(pIn);
  48. dst[i] := CHR(len MOD 100H);
  49. dst[i + 1] := CHR((len DIV 100H) MOD 100H);
  50. dst[i + 2] := CHR((len DIV 10000H) MOD 100H);
  51. dst[i + 3] := CHR((len DIV 1000000H) MOD 100H)
  52. END;*)
  53. r.Bytes(dst^, 0, Size, len);
  54. Timer.Tock(time);
  55. TRACE(time);
  56. len := SYSTEM.GET32(pOut);
  57. TRACE(len);
  58. count := 0;
  59. FOR i := 0 TO Size - 1 DO
  60. (*Trace.String("elt "); Trace.Int(i, 4);
  61. Trace.String(" ");
  62. Trace.Hex(ORD(src[i]), -2);
  63. Trace.String(" ");
  64. Trace.Hex(ORD(dst[i]), -2);
  65. Trace.String(" ");
  66. Trace.Boolean(src[i] = dst[i]);
  67. Trace.Ln;*)
  68. IF src[i] # dst[i] THEN INC(count) END;
  69. END;
  70. Trace.String(" => Differences: "); Trace.Int(count, 0); Trace.String("/"); Trace.Int(Size, 0); Trace.Ln
  71. (*FOR i := 0 TO LEN(src) - 1 DO src[i] := g.Integer() END;
  72. (*w.Bytes(src^, 0, Size);*)
  73. FOR i := 0 TO Size - 1 DO
  74. SYSTEM.PUT32(pOut, src[i])
  75. END;
  76. (*r.Bytes(dst^, 0, Size, len);*)
  77. FOR i := 0 TO Size - 1 DO
  78. dst[i] := SYSTEM.GET32(pIn);
  79. END;
  80. count := 0;
  81. FOR i := 0 TO Size - 1 DO
  82. Trace.String("elt "); Trace.Int(i, 4); Trace.Ln;
  83. Trace.String(" ");
  84. Trace.Hex(src[i], -8); Trace.Ln;
  85. Trace.String(" ");
  86. Trace.Hex(dst[i], -8); Trace.Ln;
  87. Trace.String(" ");
  88. Trace.Boolean(src[i] = dst[i]);
  89. Trace.Ln;
  90. IF src[i] # dst[i] THEN INC(count) END;
  91. END;
  92. Trace.String(" => Differences: "); Trace.Int(count, 0); Trace.String("/"); Trace.Int(Size, 0); Trace.Ln*)
  93. END TestDMA.
  94. Compiler.Compile -b=ARM --traceModule=Trace --initLocals
  95. basel/ARM.A2/ARM.Streams.Mod
  96. basel/ARM.A2/ARM.Math.Mod
  97. Random.Mod
  98. basel/ARM.A2/DMA330.Mod
  99. Timer.Mod
  100. basel/ARM.A2/Zynq.DMA.Mod
  101. Locks.Mod
  102. Zynq.MatrixTools.Mod
  103. TestDMA2.Mod
  104. ~
  105. StaticLinker.Link --fileName=Test.Bin --displacement=100000H -a
  106. Initializer Runtime Platform FPE64 ARMRuntime Trace Uart Machine
  107. Heaps Modules Objects Kernel
  108. Streams KernelLog
  109. Math Random Locks
  110. Timer
  111. DMA330 DMA
  112. MatrixTools
  113. TestDMA
  114. ~