CMD0x23_Request_ExternalChannelSet.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. #define PACKAGE_EXTERNALSET_DATA_BYTES 9
  9. //////////////////////////////////////////////////////////////////////////////
  10. // 2203/5/X GHz_ljw 合并版,业务逻辑下沉
  11. //////////////////////////////////////////////////////////////////////////////
  12. u8 Get4094ExternalCtrlWord(struct Paras595 params, u32* ctrlWordCH,u8* ctrlWordExit)
  13. {
  14. u8 _ctrlWord = 2;// 0b000000010; TRIG_SOURCE_SELECT_2=1 EXT , TRIG_HF_RJ_CTRL常低
  15. if((params.exterHFRejection & 1) == 1)
  16. {
  17. _ctrlWord|= 128; //0b10000000;
  18. }
  19. // 耦合
  20. if(params.coupling == 0)//DC
  21. {
  22. _ctrlWord|= 0;// 0b00000000;
  23. }
  24. else if(params.coupling == 1) //AC
  25. {
  26. _ctrlWord|= 8;// 0b00001000;
  27. }
  28. else if(params.coupling == 2) //LFR
  29. {
  30. ctrlWordCH[0] |= (u32)1<<31;// 1;
  31. }
  32. else if(params.coupling == 3) //HFR
  33. {
  34. ctrlWordCH[0] ^= (u32)1<<31;// 0;
  35. }
  36. else
  37. {
  38. return 0; //error
  39. }
  40. // 阻抗
  41. if(params.high_low == 1)//50
  42. {
  43. _ctrlWord|= 64;// 0b0100_0000;
  44. }
  45. else if(params.high_low == 0)//1M
  46. {
  47. _ctrlWord|= 0;// 0b000000000;
  48. }
  49. else
  50. {
  51. return 0; //error
  52. }
  53. //衰减
  54. if(params.att==1) //Ext
  55. {
  56. _ctrlWord|= 0;
  57. }
  58. else if(params.att==ATTLV1) //Ext 5
  59. {
  60. _ctrlWord|= 32;// 0b0010_0000;
  61. }
  62. else
  63. {
  64. return 0; //error
  65. }
  66. ctrlWordExit[0] = _ctrlWord;
  67. return 1;
  68. }
  69. u8 ExternalChannelSet_Check_Len(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv)
  70. {
  71. if(dataLen < PACKAGE_EXTERNALSET_DATA_BYTES + PACKAGE_CHANNELSET_INDEX_BYTES)
  72. {
  73. return 0;
  74. }
  75. u8 channelCount=0;
  76. for (u8 i=0; i<MAX_CHANNEL_NUM; i++)
  77. {
  78. if (((1<<i) & pData[0])==1)
  79. channelCount++;
  80. }
  81. if((dataLen - PACKAGE_CHANNELSET_INDEX_BYTES) != (channelCount*PACKAGE_EXTERNALSET_DATA_BYTES))
  82. {
  83. return 0;
  84. }
  85. if (bIsContentBitInverted_Recv)
  86. {
  87. u8 checkDataLen=PACKAGE_CHANNELSET_INDEX_BYTES+channelCount*PACKAGE_EXTERNALSET_DATA_BYTES;
  88. return Helper_CheckInvertBytesIsRegist(pData,checkDataLen);
  89. }
  90. return 1;
  91. }
  92. //TRIG_LEVEL_2
  93. void ExterDACPostion(u16 dac)
  94. {
  95. u32 dacindex = 8-6;
  96. u32 dacindexEx = 0xC;
  97. u32 Port = 1;
  98. u32 ConfigWord_dac = 0x10300000;
  99. ConfigWord_dac |= dacindexEx << 24;
  100. ConfigWord_dac |= Port << 16;
  101. ConfigWord_dac |= dac;
  102. DAC_AD5628(ConfigWord_dac,dacindex);
  103. }
  104. //TRIG_LEVEL_1
  105. void ExterDACSensit(u16 dac)
  106. {
  107. u32 dacindex = 8-6;
  108. u32 dacindexEx = 0xC;
  109. u32 Port = 3;
  110. u32 ConfigWord_dac = 0x10300000;
  111. ConfigWord_dac |= dacindexEx << 24;
  112. ConfigWord_dac |= Port << 16;
  113. ConfigWord_dac |= dac;
  114. DAC_AD5628(ConfigWord_dac,dacindex);
  115. }
  116. void ExternalChannelSet(u8 *pData,u8 channelId)
  117. {
  118. u8 att = pData[1];
  119. u8 coupling = pData[2];
  120. u8 high_low = pData[3];
  121. u8 exterHFRejection = pData[8];
  122. u16 dacSensit = pData[4] + (pData[5]<<8);
  123. u16 dacPostion = pData[6] + (pData[7]<<8);
  124. High8HC595 = 0;
  125. //控制字
  126. struct Paras595 params595;
  127. //dataType: 0-ref,1-offset_lz,2-offset_hz,3-move_lz,4-move_hz
  128. //ConfigWord |= dacindexEx << 24;
  129. //ConfigWord |= Port << 16;
  130. //ConfigWord |= Data;
  131. //控制HC595/CD4094
  132. u32 ctrlWordCH595=Low32HC595;
  133. u8 ctrlWordExit595=0;
  134. params595.att = att;
  135. params595.coupling = coupling;
  136. params595.high_low = high_low;
  137. params595.exterHFRejection = exterHFRejection;
  138. u8 result = Get4094ExternalCtrlWord(params595,&ctrlWordCH595,&ctrlWordExit595);
  139. if(result==0){
  140. //参数错误
  141. return;
  142. }
  143. //High8HC595_new |= (ctrlWord595 >> 1);
  144. //Low32HC595_new |= (ctrlWord595 & 0x1) << 31;
  145. High8HC595 = ctrlWordExit595;
  146. Low32HC595 = ctrlWordCH595;
  147. //if(High8HC595_new!=High8HC595||Low32HC595_new!=Low32HC595)
  148. //{
  149. //CD_4094(High8HC595_new,1);
  150. //CD_4094(Low32HC595_new,4);
  151. CD_4094(High8HC595,1);
  152. CD_4094(Low32HC595,4);
  153. //delay_ms(1);
  154. //Low32HC595 = Low32HC595_new;
  155. //High8HC595 = High8HC595_new;
  156. //}
  157. //dac
  158. //SendDataTo5675(8, 3, 0xc, (uint)dacSendValue); //0x8600??0v????
  159. ExterDACSensit(dacSensit);
  160. ExterDACPostion(dacPostion);
  161. delay_ms(2);
  162. }
  163. void CMD0x23_Request_ExternalChannelSet_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
  164. {
  165. #ifdef RUNNING_WHERE_AT_BOOT
  166. Command_SendbackErrorMessage(Error0x02_CannotRunAtBoot,1);
  167. #else
  168. if(ExternalChannelSet_Check_Len(pData,dataLen,bIsContentBitInverted_Recv)==0)
  169. {
  170. Command_SendbackErrorMessage(Error0x05_CMD_ParaLentghError,1);
  171. return;
  172. }
  173. u8 channelId = pData[0];
  174. u8 channelCount=0;
  175. for(int i=0; i<MAX_CHANNEL_NUM; i++)
  176. {
  177. if(((channelId>>i) & 0x01) == 1)
  178. {
  179. ExternalChannelSet(pData + 1 + channelCount * PACKAGE_EXTERNALSET_DATA_BYTES,i+1);
  180. channelCount++;
  181. }
  182. }
  183. #endif
  184. }