AbstractBoard_Pcie.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using System.Diagnostics;
  8. using Uestc.Auto6.Dso.Hardware.Calibration.Data.Base;
  9. namespace Uestc.Auto6.Dso.Hardware.Driver
  10. {
  11. internal abstract class AbstractPcieBd:IBoard
  12. {
  13. public virtual void Init() { }
  14. public virtual void Test() { }
  15. public virtual bool IsAllPowerOk() { return false; }
  16. public virtual bool IsPowerOk() { return true; }
  17. public virtual void PowerDown() { }
  18. public virtual FpgaVersion? FpgaVersion { get => fpgaVersion; }
  19. public virtual string FpgaVerionStr { get => ""; }
  20. public virtual CaliDataType ChangedCaliDataType { get; set; }
  21. protected FpgaVersion? fpgaVersion = null;
  22. public virtual void ReadFpgaVersion()
  23. {
  24. FpgaVersionRegs pcieRegs = new FpgaVersionRegs(
  25. (UInt32)PcieBdReg.R.VersionInfo_CompileTimeWord0, (UInt32)PcieBdReg.R.VersionInfo_CompileTimeWord1,
  26. (UInt32)PcieBdReg.R.VersionInfo_VersionWord0, (UInt32)PcieBdReg.R.VersionInfo_VersionWord1,
  27. new UInt32[] { (UInt32)PcieBdReg.R.VersionInfo_DesignerWord0, (UInt32)PcieBdReg.R.VersionInfo_DesignerWord1, (UInt32)PcieBdReg.R.VersionInfo_DesignerWord2, (UInt32)PcieBdReg.R.VersionInfo_DesignerWord3 },
  28. new UInt32[] {
  29. (UInt32)PcieBdReg.R.VersionInfo_CommentWord0, (UInt32)PcieBdReg.R.VersionInfo_CommentWord1, (UInt32)PcieBdReg.R.VersionInfo_CommentWord2, (UInt32)PcieBdReg.R.VersionInfo_CommentWord3,
  30. (UInt32)PcieBdReg.R.VersionInfo_CommentWord4, (UInt32)PcieBdReg.R.VersionInfo_CommentWord5, (UInt32)PcieBdReg.R.VersionInfo_CommentWord6, (UInt32)PcieBdReg.R.VersionInfo_CommentWord7,
  31. (UInt32)PcieBdReg.R.VersionInfo_CommentWord8, (UInt32)PcieBdReg.R.VersionInfo_CommentWord9, (UInt32)PcieBdReg.R.VersionInfo_CommentWord10, (UInt32)PcieBdReg.R.VersionInfo_CommentWord11,
  32. (UInt32)PcieBdReg.R.VersionInfo_CommentWord12, (UInt32)PcieBdReg.R.VersionInfo_CommentWord13, (UInt32)PcieBdReg.R.VersionInfo_CommentWord14, (UInt32)PcieBdReg.R.VersionInfo_CommentWord15
  33. });
  34. if (fpgaVersion == null)
  35. fpgaVersion = new();
  36. FpgaVersion.ReadFPGAVersion(pcieRegs, ref fpgaVersion);
  37. }
  38. public virtual string GetRegMonitorResult()
  39. {
  40. string resultStr = "";
  41. StringBuilder stringBuilder = new StringBuilder();
  42. #if !Product_B21_JinHui_PXI
  43. Type writeEnumType = typeof(PcieBdReg.W);
  44. Array writeRegs = Enum.GetValues(writeEnumType);
  45. Type readEnumType = typeof(PcieBdReg.R);
  46. Array readRegs = Enum.GetValues(readEnumType);
  47. stringBuilder.AppendLine(("Pcie Board").PadRight(60, '='));
  48. foreach (PcieBdReg.W reg in writeRegs)
  49. {
  50. HdIO.WriteReg(PcieBdReg.W.RegMonitor_RegAddress, (UInt32)reg);
  51. UInt32 readBackData = HdIO.ReadReg(PcieBdReg.R.RegMonitor_ReadbackValue);
  52. string? addr = ",address=" + HdIO.GetFPGARegisterDescription?.Invoke(writeEnumType, reg.ToString());
  53. stringBuilder.AppendLine(("[W],Name=" + reg.ToString()).PadRight(50) + addr.PadRight(70) + ",value=0x" + readBackData.ToString("X"));
  54. }
  55. foreach (PcieBdReg.R reg in readRegs)
  56. {
  57. UInt32 readBackData = HdIO.ReadReg((UInt32)reg);
  58. string? addr = ",address=" + HdIO.GetFPGARegisterDescription?.Invoke(readEnumType, reg.ToString());
  59. stringBuilder.AppendLine(("[R],Name=" + reg.ToString()).PadRight(50) + addr.PadRight(70) + ",value=0x" + readBackData.ToString("X"));
  60. }
  61. #endif
  62. resultStr = stringBuilder.ToString();
  63. return resultStr;
  64. }
  65. public virtual bool ProcBoardAlreadyPowerOn
  66. {
  67. get
  68. {
  69. #if !Product_B21_JinHui_PXI
  70. UInt32 data = 0x5a5a;
  71. HdIO.WriteReg(ProcBdReg.W.SysInfo_WorkOKTest, data);
  72. HdIO.WriteReg(0x8000, 0);
  73. return ((HdIO.ReadReg(ProcBdReg.R.SysInfo_WorkOKTest) & 0xffff) == data);
  74. #else
  75. return true;
  76. #endif
  77. }
  78. }
  79. public virtual void SendCmdToCD4094(UInt32 lowword, UInt32 highword)
  80. {
  81. #if !Product_B21_JinHui_PXI
  82. HdIO.WriteReg(PcieBdReg.W.AnalogChCtrl_4094Data_L32, lowword);
  83. HdIO.WriteReg(PcieBdReg.W.AnalogChCtrl_4094Data_H32, highword);
  84. HdIO.WriteReg(PcieBdReg.W.AnalogChCtrl_4094TransStart, 1);
  85. HdIO.WaitForSpiTransfer(1, 6);
  86. HdIO.Sleep(5);//延时10ms的道理是什么?
  87. HdIO.WriteReg(PcieBdReg.W.AnalogChCtrl_4094TransStart, 0);
  88. #else
  89. #endif
  90. }
  91. }
  92. }