CMD0x40_Request_AnalogChannelCalcOffset.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include "delay.h"
  2. #include "CommandsDefine.h"
  3. #include "AnalogChannelCtrl_Dictionary.h"
  4. #include "ProjectConfig.h"
  5. #include "Probe_MSO7000X_2d5g.h"
  6. #include "AnalogChannelCtrl_2d5g_base.h"
  7. #include "Helper.h"
  8. //////////////////////////////////////////////////////////////////////////////
  9. // 2203/5/X GHz_ljw 合并版
  10. //////////////////////////////////////////////////////////////////////////////
  11. u32 GetDACConfigWord(struct ParasDAC params,u8* dac_index)
  12. {
  13. u32 ConfigWord = 0x10300000;
  14. u8 dataType = refCtrl;
  15. if(params.isBias == 0) //hardware move
  16. {
  17. dataType = params.high_low == 0 ? move_hz : move_lz;
  18. }
  19. else if(params.isBias == 1) //bias, hardware offset
  20. {
  21. dataType = params.high_low == 0 ? offset_hz : offset_lz;
  22. }
  23. dac_index[0] = dacPortInfoTable[params.channelId-1][dataType][0] - 5;
  24. u8 dac_indexEx = dacPortInfoTable[params.channelId-1][dataType][2];
  25. u8 port = dacPortInfoTable[params.channelId-1][dataType][1];
  26. ConfigWord |= dac_indexEx << 24;
  27. ConfigWord |= port << 16;
  28. ConfigWord |= params.data;
  29. return ConfigWord;
  30. }
  31. void ChannelOffsetSet(u8 *pData,u8 channelId){
  32. //if(channelId!=1) return;
  33. u32 ConfigWord_dac;
  34. u8 dac_index;
  35. u8 isBias = pData[0];
  36. u8 high_low = pData[1];
  37. u16 dac = pData[2] + (pData[3]<<8);
  38. if(isBias==0)
  39. {
  40. isBias=1;
  41. }
  42. else
  43. {
  44. isBias=0;
  45. }
  46. //控制字
  47. struct ParasDAC paramsDAC;
  48. //bias
  49. paramsDAC.high_low = high_low;
  50. paramsDAC.channelId = channelId;
  51. paramsDAC.data = dac;
  52. paramsDAC.isBias = isBias;
  53. ConfigWord_dac = GetDACConfigWord(paramsDAC,&dac_index);
  54. DAC_AD5628(ConfigWord_dac,dac_index);
  55. //if(channelId==1){
  56. // channelId=channelId; //test point
  57. //}
  58. //if(channelId==2){
  59. // channelId=channelId; //test point
  60. //}
  61. // if(channelId==3){
  62. // channelId=channelId; //test point
  63. //}
  64. // if(channelId==4){
  65. // channelId=channelId; //test point
  66. //}
  67. //delay_ms(10);
  68. delay_ms(1);
  69. }
  70. void CMD0x40_Request_AnalogChannelCalcOffset_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
  71. {
  72. #ifdef RUNNING_WHERE_AT_BOOT
  73. Command_SendbackErrorMessage(Error0x02_CannotRunAtBoot,1);
  74. #else
  75. u8 bDataOK=1;
  76. u8 validDataLength=dataLen;
  77. if (bIsContentBitInverted_Recv)
  78. {
  79. validDataLength=dataLen/2;
  80. if (!Helper_CheckInvertBytesIsRegist(pData,dataLen))
  81. bDataOK=0;
  82. }
  83. if (validDataLength<5)
  84. bDataOK=0;
  85. if (bDataOK)
  86. {
  87. u8 channelId = pData[0];
  88. IsChannelSetting = 1;
  89. for(int i=0; i<MAX_CHANNEL_NUM; i++)
  90. {
  91. if(((channelId>>i) & 0x01) == 1){
  92. ChannelOffsetSet(pData + 1,i+1);
  93. delay_us(10);
  94. }
  95. }
  96. }
  97. else
  98. Command_SendbackErrorMessage(Error0x05_CMD_ParaLentghError,1);
  99. #endif
  100. }