Uart.c 85 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010
  1. #define __UART_DEF
  2. #include "ABIS_User.h"
  3. #include <stdarg.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. unsigned int gloublePrintLevel = 4;
  7. /****************************************************************
  8. * 函数名: Van_Device_Printf
  9. * 创建时间: 2021/04/22
  10. * 创建人: 范义东
  11. * 函数说明:调试打印接口函数
  12. * 输入参数: dev 传 NULL 采用本地定义
  13. devNum 数码
  14. * 输出参数: *name
  15. * 返回值 : void
  16. ****************************************************************/
  17. void Van_Device_Printf(unsigned int printLevel, const char *cmd, ...)
  18. {
  19. char buf[128] = {};
  20. int buflen = 0;
  21. if (gloublePrintLevel >= printLevel)
  22. {
  23. va_list args; //定义一个va_list类型的变量,用来储存单个参数
  24. va_start(args, cmd); //使args指向可变参数的第一个参数
  25. vsprintf(buf, cmd, args); //必须用vprintf等带V的
  26. va_end(args); //结束可变参数的获取
  27. buflen = strlen((const char *)buf);
  28. for(unsigned int i=0; i<buflen; i++){
  29. g_ucU3TX_Data[i] = buf[i];
  30. }
  31. if(buflen==0)return;
  32. while(DMA2CONbits.CHEN);
  33. DMA2CNT=(buflen-1);
  34. DMA2CONbits.CHEN = 1;
  35. DMA2REQbits.FORCE = 1;
  36. }
  37. return;
  38. }
  39. /*******************************************************************************
  40. * 函数名称:InitUart1
  41. *******************************************************************************/
  42. void InitUart(void) {
  43. U1MODEbits.STSEL = 0;
  44. U1MODEbits.PDSEL = 0;
  45. U1MODEbits.BRGH = 0;
  46. U1MODEbits.ABAUD = 0;
  47. U1MODEbits.LPBACK = 0;
  48. // U1BRG = 31;
  49. U1BRG = 389;
  50. U1STAbits.UTXISEL0 = 1;
  51. U1STAbits.UTXISEL1 = 0;
  52. U1STAbits.URXISEL = 0;
  53. IEC0bits.U1TXIE = 0;
  54. IEC0bits.U1RXIE = 1;
  55. U1MODEbits.UARTEN = 1;
  56. U1STAbits.UTXEN = 1;
  57. IPC2bits.U1RXIP = 7;
  58. IPC3bits.U1TXIP = 7;
  59. }
  60. /*******************************************************************************
  61. * 函数名称:InitUart2
  62. *******************************************************************************/
  63. void InitUart2(void) {
  64. U2MODEbits.STSEL = 0;
  65. U2MODEbits.PDSEL = 0;
  66. U2MODEbits.BRGH = 0;
  67. U2MODEbits.ABAUD = 0;
  68. U2MODEbits.LPBACK = 0;
  69. // U1BRG = 31;
  70. U2BRG = 389;
  71. U2STAbits.UTXISEL0 = 1;
  72. U2STAbits.UTXISEL1 = 0;
  73. U2STAbits.URXISEL = 0;
  74. IEC1bits.U2TXIE = 0;
  75. IEC1bits.U2RXIE = 1;
  76. U2MODEbits.UARTEN = 1;
  77. U2STAbits.UTXEN = 1;
  78. IPC7bits.U2RXIP = 7;
  79. IPC7bits.U2TXIP = 7;
  80. }
  81. /*******************************************************************************
  82. * 函数名称:InitUart3
  83. *******************************************************************************/
  84. void InitUart3(void) {
  85. U3MODEbits.STSEL = 0;
  86. U3MODEbits.PDSEL = 0;
  87. U3MODEbits.BRGH = 0;
  88. U3MODEbits.ABAUD = 0;
  89. U3MODEbits.LPBACK = 0;
  90. // U1BRG = 31;
  91. U3BRG = 31;
  92. U3STAbits.UTXISEL0 = 1;
  93. U3STAbits.UTXISEL1 = 0;
  94. U3STAbits.URXISEL = 0;
  95. IEC5bits.U3TXIE = 0;
  96. IEC5bits.U3RXIE = 1;
  97. U3MODEbits.UARTEN = 1;
  98. U3STAbits.UTXEN = 1;
  99. IPC20bits.U3RXIP = 7;
  100. IPC20bits.U3TXIP = 7;
  101. }
  102. /*******************************************************************************
  103. * 函数名称:Uart1Send
  104. *******************************************************************************/
  105. void UART1SEND(char data)
  106. {
  107. U1TXREG = data;
  108. while(!IFS0bits.U1TXIF);
  109. IFS0bits.U1TXIF=0;
  110. }
  111. /*******************************************************************************
  112. * 函数名称:_U1RXInterrupt
  113. *******************************************************************************/
  114. void __attribute__((__interrupt__,no_auto_psv)) _U1RXInterrupt(void)
  115. {
  116. IFS0bits.U1RXIF = 0;
  117. g_ucU1RX_Data[g_uiUart1_No] = U1RXREG;
  118. if(g_BUSY1 == 1) return;
  119. if(g_ucHeaderFlag1 == 0){
  120. if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){
  121. g_ucHeaderFlag1 = 1;
  122. g_ucU1RX_Data[0] = FRAME_HEAD;
  123. g_uiUart1_No = 1;
  124. }else{
  125. g_BUSY1 = 0;
  126. }
  127. }else if(g_ucHeaderFlag1 == 1){
  128. g_uiUart1_No++;
  129. }
  130. if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){
  131. g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX];
  132. if(g_uiUart1_No == g_uiLth1){
  133. g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);
  134. g_ucCRC1 = (unsigned char)g_ulRSUM1; //
  135. if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){
  136. g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];
  137. g_ucUART1_flag = 1;
  138. g_ulRSUM1 = 0;
  139. g_uiUart1_No = 0;
  140. g_ucHeaderFlag1 = 0;
  141. g_BUSY1 = 1;
  142. }else{
  143. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  144. g_BUSY1 = 0;
  145. }
  146. }else if(g_uiUart1_No > g_uiLth1){
  147. g_uiUart1_No = 0;
  148. g_ucHeaderFlag1 = 0;
  149. g_BUSY1 = 0;
  150. }
  151. }
  152. // if(g_ucUART1_flag == 1)
  153. // {
  154. // Uart1_Ack();
  155. // }
  156. }
  157. /*******************************************************************************
  158. * 函数名称:_U2RXInterrupt
  159. *******************************************************************************/
  160. void __attribute__((__interrupt__,no_auto_psv)) _U2RXInterrupt(void)
  161. {
  162. IFS1bits.U2RXIF = 0;
  163. g_ucU1RX_Data[g_uiUart1_No] = U2RXREG;
  164. if(g_BUSY1 == 1) return;
  165. if(g_ucHeaderFlag1 == 0){
  166. if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){
  167. g_ucHeaderFlag1 = 1;
  168. g_ucU1RX_Data[0] = FRAME_HEAD;
  169. g_uiUart1_No = 1;
  170. }else{
  171. g_BUSY1 = 0;
  172. }
  173. }else if(g_ucHeaderFlag1 == 1){
  174. g_uiUart1_No++;
  175. }
  176. if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){
  177. g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX];
  178. if(g_uiUart1_No == g_uiLth1){
  179. g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);
  180. g_ucCRC1 = (unsigned char)g_ulRSUM1;
  181. if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){
  182. g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];
  183. g_ucUART1_flag = 1;
  184. g_ulRSUM1 = 0;
  185. g_uiUart1_No = 0;
  186. g_ucHeaderFlag1 = 0;
  187. g_BUSY1 = 1;
  188. }else{
  189. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  190. g_BUSY1 = 0;
  191. }
  192. }else if(g_uiUart1_No > g_uiLth1){
  193. g_uiUart1_No = 0;
  194. g_ucHeaderFlag1 = 0;
  195. g_BUSY1 = 0;
  196. }
  197. }
  198. }
  199. /*******************************************************************************
  200. * 函数名称:_U3RXInterrupt
  201. *******************************************************************************/
  202. void __attribute__((__interrupt__,no_auto_psv)) _U3RXInterrupt(void)
  203. {
  204. IFS5bits.U3RXIF = 0;
  205. g_ucU1RX_Data[g_uiUart1_No] = U3RXREG;
  206. if(g_BUSY1 == 1) return;
  207. if(g_ucHeaderFlag1 == 0){
  208. if(g_ucU1RX_Data[g_uiUart1_No] == FRAME_HEAD){
  209. g_ucHeaderFlag1 = 1;
  210. g_ucU1RX_Data[0] = FRAME_HEAD;
  211. g_uiUart1_No = 1;
  212. }else{
  213. g_BUSY1 = 0;
  214. }
  215. }else if(g_ucHeaderFlag1 == 1){
  216. g_uiUart1_No++;
  217. }
  218. if(g_uiUart1_No > (FRAME_LTHH_INDEX+1)){
  219. g_uiLth1 = g_ucU1RX_Data[FRAME_LTHH_INDEX];
  220. if(g_uiUart1_No == g_uiLth1){
  221. g_ulRSUM1 = Check(g_ucU1RX_Data,g_uiLth1-1);
  222. g_ucCRC1 = (unsigned char)g_ulRSUM1; //
  223. if(g_ucCRC1 == g_ucU1RX_Data[g_uiLth1-1]){
  224. g_ucCMD1 = g_ucU1RX_Data[FRAME_CMD_INDEX];
  225. g_ucUART1_flag = 1;
  226. g_ulRSUM1 = 0;
  227. g_uiUart1_No = 0;
  228. g_ucHeaderFlag1 = 0;
  229. g_BUSY1 = 1;
  230. }else{
  231. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  232. g_BUSY1 = 0;
  233. }
  234. }else if(g_uiUart1_No > g_uiLth1){
  235. g_uiUart1_No = 0;
  236. g_ucHeaderFlag1 = 0;
  237. g_BUSY1 = 0;
  238. }
  239. }
  240. }
  241. /*******************************************************************************
  242. * 函数名称:Check
  243. *******************************************************************************/
  244. unsigned int Check(unsigned char *p,unsigned char num)
  245. {
  246. unsigned char i=0;
  247. unsigned int uiCheckSum=0;
  248. for(i=0;i<num;i++){
  249. uiCheckSum += *p;
  250. p++;
  251. }
  252. return uiCheckSum;
  253. }
  254. /*******************************************************************************
  255. * 函数名称:RS1_Ack
  256. *******************************************************************************/
  257. void RS1_Ack(unsigned int sendnum)
  258. {
  259. unsigned int i;
  260. for(i=0;i<sendnum;i++){
  261. UART1SEND(g_ucU1TX_Data[i]);
  262. }
  263. memset(g_ucU1TX_Data,0,sendnum*sizeof(unsigned char));
  264. }
  265. /****************************************************************
  266. * 函数名: Van_Device_Printf
  267. * 创建时间: 2021/04/22
  268. * 创建人: 范义东
  269. * 函数说明:调试打印接口函数
  270. * 输入参数: dev 传 NULL 采用本地定义
  271. devNum 数码
  272. * 输出参数: *name
  273. * 返回值 : void
  274. ****************************************************************/
  275. void Van_Device_Printf_uart1(unsigned int printLevel, const char *cmd, ...)
  276. {
  277. char buf[128] = {};
  278. int buflen = 0;
  279. if (gloublePrintLevel >= printLevel)
  280. {
  281. va_list args; //定义一个va_list类型的变量,用来储存单个参数
  282. va_start(args, cmd); //使args指向可变参数的第一个参数
  283. vsprintf(buf, cmd, args); //必须用vprintf等带V的
  284. va_end(args); //结束可变参数的获取
  285. buflen = strlen((const char *)buf);
  286. for(unsigned int i=0; i<buflen; i++){
  287. g_ucU1TX_Data[i] = buf[i];
  288. }
  289. if(buflen==0)return;
  290. while(DMA3CONbits.CHEN);
  291. DMA3CNT=(buflen-1);
  292. DMA3CONbits.CHEN = 1;
  293. DMA3REQbits.FORCE = 1;
  294. }
  295. return;
  296. }
  297. /*******************************************************************************
  298. * 函数名称:Uart1_Ack
  299. *******************************************************************************/
  300. void Uart1_Ack(void)
  301. {
  302. unsigned int g_uiFrmLth;
  303. unsigned int i=0;
  304. unsigned int j=0;
  305. unsigned int n=0;
  306. unsigned long sum;
  307. unsigned char Flag_STATUS=0;
  308. unsigned char Sensor,ucPWMindex,ucCtrlMode;
  309. unsigned int ADC;
  310. long lMPPCtemp = 0;
  311. long lPWMstate=0;
  312. switch(g_ucCMD1){
  313. /***********************(0x01)****************************/
  314. case HELLO:
  315. g_uiFrmLth = 6;
  316. g_ucU1TX_Data[0] = FRAME_HEAD;
  317. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  318. g_ucU1TX_Data[2] = 0;
  319. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  320. g_ucU1TX_Data[4] = Flag_STATUS;
  321. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  322. while(DMA3CONbits.CHEN);
  323. DMA3CNT=(g_uiFrmLth-1);
  324. DMA3CONbits.CHEN = 1;
  325. DMA3REQbits.FORCE = 1;
  326. break;
  327. /*************************(0x02)***************************/
  328. case PCR_SYSRST:
  329. g_uiFrmLth = 6;
  330. g_ucU1TX_Data[0] = FRAME_HEAD;
  331. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  332. g_ucU1TX_Data[2] = 0;
  333. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  334. g_ucU1TX_Data[4] = Flag_STATUS;
  335. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  336. while(DMA3CONbits.CHEN);
  337. DMA3CNT=(g_uiFrmLth-1);
  338. DMA3CONbits.CHEN = 1;
  339. DMA3REQbits.FORCE = 1;
  340. break;
  341. /**********************(0x03)*****************************/
  342. case PCR_SELFTEST:
  343. g_uiFrmLth = 6;
  344. g_ucU1TX_Data[0] = FRAME_HEAD;
  345. g_ucU1TX_Data[1] = g_ucCMD1 | 0X80;
  346. g_ucU1TX_Data[2] = 0;
  347. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  348. g_ucU1TX_Data[4] = 0x00; //
  349. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  350. while(DMA3CONbits.CHEN);
  351. DMA3CNT=(g_uiFrmLth-1);
  352. DMA3CONbits.CHEN = 1;
  353. DMA3REQbits.FORCE = 1;
  354. break;
  355. /**************************(0x04)***************************/
  356. case PCR_DEV:
  357. g_uiFrmLth = 6;
  358. g_ucU1TX_Data[0] = FRAME_HEAD;
  359. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  360. g_ucU1TX_Data[2] = 0;
  361. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  362. g_ucU1TX_Data[4] = Flag_STATUS;
  363. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  364. while(DMA3CONbits.CHEN);
  365. DMA3CNT=(g_uiFrmLth-1);
  366. DMA3CONbits.CHEN = 1;
  367. DMA3REQbits.FORCE = 1;
  368. break;
  369. /*************************(0x05)**************************/
  370. case PCR_STATUS:
  371. g_uiFrmLth = 6;
  372. g_ucU1TX_Data[0] = FRAME_HEAD;
  373. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  374. g_ucU1TX_Data[2] = 0;
  375. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  376. g_ucU1TX_Data[4] = Flag_STATUS;
  377. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  378. while(DMA3CONbits.CHEN);
  379. DMA3CNT=(g_uiFrmLth-1);
  380. DMA3CONbits.CHEN = 1;
  381. DMA3REQbits.FORCE = 1;
  382. break;
  383. /*************************(0x06)**************************/
  384. case SET_Temperature:
  385. if(g_ucU1RX_Data[4] != 0xFF){
  386. ucCtrlMode = 0;
  387. ucCtrlMode = g_ucU1RX_Data[12];
  388. if(ucCtrlMode == 1){
  389. g_ucENABLE = 0;
  390. TempChn[0].cPeltierRun = TempChn[1].cPeltierRun = TempChn[2].cPeltierRun = 0;
  391. TempChn[3].cPeltierRun = 0;
  392. }else{
  393. g_ucENABLE = 1;
  394. Target_temp = g_ucU1RX_Data[4];
  395. Target_temp = (Target_temp<<8) + g_ucU1RX_Data[5];
  396. g_dTarget_temp = (double)Target_temp /100.0;
  397. if(g_dTarget_temp >= 130.0) g_dTarget_temp = 130.0;
  398. if(g_dTarget_temp < 0) g_dTarget_temp = 0;
  399. for (i = 0; i < 4; i++) {
  400. TempChn[i].cBlockTempAriv = 0;
  401. TempChn[i].cPeltierRun = 1;
  402. TempChn[i].fBlockTargetTemp = g_dTarget_temp;
  403. if (fabs(TempChn[i].fCurrentTemperature - g_dTarget_temp) >= 0.3){
  404. ScheduleOperate(i);
  405. }
  406. }
  407. }
  408. }else{
  409. for (i = 0; i < 4; i++) {
  410. TempChn[i].cPeltierRun = 0;
  411. }
  412. }
  413. g_uiFrmLth = 6;
  414. g_ucU1TX_Data[0] = FRAME_HEAD;
  415. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  416. g_ucU1TX_Data[2] = 0;
  417. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  418. g_ucU1TX_Data[4] = Flag_STATUS;
  419. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  420. while(DMA3CONbits.CHEN);
  421. DMA3CNT=(g_uiFrmLth-1);
  422. DMA3CONbits.CHEN = 1;
  423. DMA3REQbits.FORCE = 1;
  424. break;
  425. /***************************(0x78)**************************/
  426. case SET_ZLTemperature:
  427. if(g_ucU1RX_Data[4] != 0xFF){
  428. ucCtrlMode = 0;
  429. ucCtrlMode = g_ucU1RX_Data[12];
  430. if(ucCtrlMode == 1){
  431. g_ucENABLE = 0;
  432. TempChn[4].cPeltierRun = TempChn[5].cPeltierRun = 0;
  433. }else{
  434. g_ucENABLE = 1;
  435. Target_temp = g_ucU1RX_Data[4];
  436. Target_temp = (Target_temp<<8) + g_ucU1RX_Data[5];
  437. g_dTarget_temp = (double)Target_temp /100.0;
  438. if(g_dTarget_temp >= 130.0) g_dTarget_temp = 130.0;
  439. if(g_dTarget_temp < 0) g_dTarget_temp = 0;
  440. for (i = 4; i < 6; i++) {
  441. TempChn[i].cBlockTempAriv = 0;
  442. TempChn[i].cPeltierRun = 1;
  443. TempChn[i].fBlockTargetTemp = g_dTarget_temp;
  444. if (fabs(TempChn[i].fCurrentTemperature - g_dTarget_temp) >= 0.3){
  445. ScheduleOperate(i);
  446. }
  447. }
  448. }
  449. }else{
  450. for (i = 4; i < 6; i++) {
  451. TempChn[i].cPeltierRun = 0;
  452. }
  453. }
  454. g_uiFrmLth = 6;
  455. g_ucU1TX_Data[0] = FRAME_HEAD;
  456. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  457. g_ucU1TX_Data[2] = 0;
  458. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  459. g_ucU1TX_Data[4] = Flag_STATUS;
  460. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  461. while(DMA3CONbits.CHEN);
  462. DMA3CNT=(g_uiFrmLth-1);
  463. DMA3CONbits.CHEN = 1;
  464. DMA3REQbits.FORCE = 1;
  465. break;
  466. /****************************(0x07)*************************/
  467. case PCR_MOTOR:
  468. PCR_MOTOR1 = (g_ucU1RX_Data[4]&0xf0);
  469. PCR_MOTOR2 = g_ucU1RX_Data[4]&0x0f;
  470. if(PCR_MOTOR1 == 0x10 ){
  471. switch(PCR_MOTOR2){
  472. case 6:g_lPulse = g_ucU1RX_Data[5];
  473. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  474. g_lPulse = g_lPulse * 2;
  475. ucMOTOR_DIR = g_ucU1RX_Data[7];
  476. uiSpeed = g_ucU1RX_Data[8];
  477. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  478. MotorXMove(g_lPulse,ucMOTOR_DIR,uiSpeed);
  479. break;
  480. case 7:g_lPulse = g_ucU1RX_Data[5];
  481. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  482. g_lPulse = g_lPulse * 2;
  483. ucMOTOR_DIR = g_ucU1RX_Data[7];
  484. uiSpeed = g_ucU1RX_Data[8];
  485. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  486. MotorXMove(g_lPulse,ucMOTOR_DIR,uiSpeed);
  487. break;
  488. case 3:
  489. MotorXHome(g_tEE.uiXPulseHome,g_tEE.uiXSpeedHome,g_tEE.uiXSpeedLeave);
  490. HangHao=0;
  491. break;
  492. case 10:g_lPulse = g_ucU1RX_Data[5];
  493. g_lPulse = (g_lPulse << 8) + g_ucU1RX_Data[6];
  494. g_lPulse = g_lPulse * 2;
  495. uiSpeed = g_ucU1RX_Data[7];
  496. uiSpeed = (uiSpeed << 8) + g_ucU1RX_Data[8];
  497. MotorXMoveTo(g_lPulse, uiSpeed);
  498. break;
  499. case 5:
  500. g_lPulse = g_ucU1RX_Data[5];
  501. g_lPulse = (g_lPulse << 8) + g_ucU1RX_Data[6];
  502. g_lPulse = g_lPulse * 2;
  503. ucMOTOR_DIR = g_ucU1RX_Data[7];
  504. uiSpeed = g_ucU1RX_Data[8];
  505. uiSpeed = (uiSpeed << 8) + g_ucU1RX_Data[9];
  506. Alldata = 1;
  507. MotorXScan(g_lPulse, ucMOTOR_DIR, uiSpeed);
  508. MotorXMoveTo(0, uiSpeed);
  509. MotorXHome(g_tEE.uiXPulseHome,g_tEE.uiXSpeedHome,g_tEE.uiXSpeedLeave);
  510. // g_uiScanPulseX = 0;
  511. // Alldata = 0;
  512. // IEC1bits.INT2IE = 0;
  513. // //数据处理
  514. //
  515. // for(i=0;i<17;i++){
  516. // ulFAMAD_All = 0;
  517. // ulVICAD_All = 0;
  518. // ulROXAD_All = 0;
  519. // ulCY5AD_All = 0;
  520. // for(j=0;j<SUM1;j++){
  521. // ulFAMAD_All += FAMData[i][j];
  522. // ulVICAD_All += VICData[i][j];
  523. // ulROXAD_All += ROXData[i][j];
  524. // ulCY5AD_All += CY5Data[i][j];
  525. // }
  526. // g_fFAMAD_Max[i] = (float)(ulFAMAD_All/SUM1);
  527. // g_fVICAD_Max[i] = (float)(ulVICAD_All/SUM1);
  528. // g_fROXAD_Max[i] = (float)(ulROXAD_All/SUM1);
  529. // g_fCY5AD_Max[i] = (float)(ulCY5AD_All/SUM1);
  530. // }
  531. // g_fQCFAM_Current = g_fFAMAD_Max[8];
  532. // g_fQCVIC_Current = g_fVICAD_Max[8];
  533. // g_fQCROX_Current = g_fROXAD_Max[8];
  534. // g_fQCCY5_Current = g_fCY5AD_Max[8];
  535. for(i=0;i<17;i++){
  536. ulFAMAD_All = 0;
  537. ulVICAD_All = 0;
  538. ulROXAD_All = 0;
  539. ulCY5AD_All = 0;
  540. Bubble_Sort( &FAMData[i][15], 50);
  541. Bubble_Sort( &VICData[i][15], 50);
  542. Bubble_Sort( &ROXData[i][15], 50);
  543. Bubble_Sort( &CY5Data[i][15], 50);
  544. Bubble_Sort( &CY6Data[i][0], 50);
  545. Bubble_Sort(&_390Data[i][0], 50);
  546. for(j=18;j<(SUM1-18);j++){
  547. ulFAMAD_All += FAMData[i][j];
  548. ulVICAD_All += VICData[i][j];
  549. ulROXAD_All += ROXData[i][j];
  550. ulCY5AD_All += CY5Data[i][j];
  551. }
  552. g_fFAMAD_Max[i] = (float)(ulFAMAD_All/3);
  553. g_fVICAD_Max[i] = (float)(ulVICAD_All/3);
  554. g_fROXAD_Max[i] = (float)(ulROXAD_All/3);
  555. g_fCY5AD_Max[i] = (float)(ulCY5AD_All/3);
  556. }
  557. g_fQCFAM_Current = g_fFAMAD_Max[8];
  558. g_fQCVIC_Current = g_fVICAD_Max[8];
  559. g_fQCROX_Current = g_fROXAD_Max[8];
  560. g_fQCCY5_Current = g_fCY5AD_Max[8];
  561. MotorXMoveTo(0, uiSpeed);
  562. Alldata = 2;
  563. g_uiScanPulseX = 0;
  564. break;
  565. case 11:
  566. Alldata = 0;
  567. DglLedbuf = 0;
  568. FAMLED = 1;
  569. g_lPulse = g_ucU1RX_Data[5];
  570. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  571. g_lPulse = g_lPulse * 2;
  572. ucMOTOR_DIR = g_ucU1RX_Data[7];
  573. uiSpeed = g_ucU1RX_Data[8];
  574. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  575. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  576. Alldata = 2;
  577. FAMLED = 0;
  578. break;
  579. case 12:
  580. DglLedbuf = 0;
  581. Alldata = 0;
  582. VICLED = 1;
  583. g_lPulse = g_ucU1RX_Data[5];
  584. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  585. g_lPulse = g_lPulse * 2;
  586. ucMOTOR_DIR = g_ucU1RX_Data[7];
  587. uiSpeed = g_ucU1RX_Data[8];
  588. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  589. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  590. Alldata = 2;
  591. VICLED = 0;
  592. break;
  593. case 13:
  594. DglLedbuf = 0;
  595. Alldata = 0;
  596. ROXLED = 1;
  597. g_lPulse = g_ucU1RX_Data[5];
  598. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  599. g_lPulse = g_lPulse * 6;
  600. ucMOTOR_DIR = g_ucU1RX_Data[7];
  601. uiSpeed = g_ucU1RX_Data[8];
  602. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  603. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  604. Alldata = 2;
  605. ROXLED = 0;
  606. break;
  607. case 14:
  608. DglLedbuf = 0;
  609. Alldata = 0;
  610. CY5LED = 1;
  611. g_lPulse = g_ucU1RX_Data[5];
  612. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  613. g_lPulse = g_lPulse * 2;
  614. ucMOTOR_DIR = g_ucU1RX_Data[7];
  615. uiSpeed = g_ucU1RX_Data[8];
  616. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  617. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  618. Alldata = 2;
  619. CY5LED = 0;
  620. break;
  621. case 15:
  622. DglLedbuf = 0;
  623. Alldata = 0;
  624. CY6LED = 1;
  625. g_lPulse = g_ucU1RX_Data[5];
  626. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  627. g_lPulse = g_lPulse * 2;
  628. ucMOTOR_DIR = g_ucU1RX_Data[7];
  629. uiSpeed = g_ucU1RX_Data[8];
  630. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  631. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  632. Alldata = 2;
  633. CY6LED = 0;
  634. break;
  635. case 9:
  636. DglLedbuf = 0;
  637. Alldata = 0;
  638. _390LED = 1;
  639. g_lPulse = g_ucU1RX_Data[5];
  640. g_lPulse = (g_lPulse<<8) + g_ucU1RX_Data[6];
  641. g_lPulse = g_lPulse * 2;
  642. ucMOTOR_DIR = g_ucU1RX_Data[7];
  643. uiSpeed = g_ucU1RX_Data[8];
  644. uiSpeed = (uiSpeed<<8) + g_ucU1RX_Data[9];
  645. MotorXScan(g_lPulse,ucMOTOR_DIR,uiSpeed);
  646. Alldata = 2;
  647. _390LED = 0;
  648. break;
  649. default:
  650. break;
  651. }
  652. }
  653. g_uiFrmLth = 6;
  654. g_ucU1TX_Data[0] = FRAME_HEAD;
  655. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  656. g_ucU1TX_Data[2] = 0x00;
  657. g_ucU1TX_Data[3] = g_uiFrmLth;
  658. g_ucU1TX_Data[4] = Flag_STATUS;
  659. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  660. while(DMA3CONbits.CHEN);
  661. DMA3CNT=(g_uiFrmLth-1);
  662. DMA3CONbits.CHEN = 1;
  663. DMA3REQbits.FORCE = 1;
  664. break;
  665. /**************************(0x08)*****************************/
  666. case PCR_LEDCTRL:
  667. switch(g_ucU1RX_Data[4]){
  668. case 1:
  669. CTRLLED1=(g_ucU1RX_Data[5]&0x01)? 1:0;
  670. CTRLLED2=(g_ucU1RX_Data[5]&0x02)? 1:0;
  671. CTRLLED3=(g_ucU1RX_Data[5]&0x04)? 1:0;
  672. CTRLLED4=(g_ucU1RX_Data[5]&0x08)? 1:0;
  673. CTRLLED5=(g_ucU1RX_Data[5]&0x10)? 1:0;
  674. CTRLLED6=(g_ucU1RX_Data[5]&0x20)? 1:0;
  675. break;
  676. case 2:
  677. DglLedbuf=g_ucU1RX_Data[5]&0x3f;
  678. break;
  679. default:
  680. break;
  681. }
  682. g_uiFrmLth = 6;
  683. g_ucU1TX_Data[0] = FRAME_HEAD;
  684. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  685. g_ucU1TX_Data[2] = 0;
  686. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  687. g_ucU1TX_Data[4] = Flag_STATUS;
  688. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  689. while(DMA3CONbits.CHEN);
  690. DMA3CNT=(g_uiFrmLth-1);
  691. DMA3CONbits.CHEN = 1;
  692. DMA3REQbits.FORCE = 1;
  693. break;
  694. /*********************(0x09)*************************/
  695. case PCR_RDTEMP:
  696. g_ucRealTemp_Chanel = g_ucU1RX_Data[4];
  697. switch(g_ucRealTemp_Chanel){
  698. case 0:
  699. // Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  700. // g_ucRealTemp_Chanel = 0;
  701. break;
  702. case 1:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  703. g_ucRealTemp_Chanel = 0;
  704. break;
  705. case 2:Real_temp[1] = (unsigned int)(CAPReal_temp[0]*100.0);
  706. g_ucRealTemp_Chanel = 1;
  707. break;
  708. case 3:Real_temp[2] = (unsigned int)(CAPReal_temp[1]*100.0);
  709. g_ucRealTemp_Chanel = 2;
  710. break;
  711. case 4:Real_temp[3] = (unsigned int)(CAPReal_temp[0] * 100.0);
  712. g_ucRealTemp_Chanel = 3;
  713. break;
  714. case 5:Real_temp[4] = (unsigned int)(g_fFINReal_Temp*100.0);
  715. g_ucRealTemp_Chanel = 4;
  716. break;
  717. case 6:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  718. g_ucRealTemp_Chanel = 0;
  719. break;
  720. case 7:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  721. g_ucRealTemp_Chanel = 0;
  722. break;
  723. case 8:Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  724. g_ucRealTemp_Chanel = 0;
  725. break;
  726. default :
  727. break;
  728. }
  729. g_uiFrmLth = 9;
  730. g_ucU1TX_Data[0] = FRAME_HEAD;
  731. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  732. g_ucU1TX_Data[2] = 0;
  733. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;//桢长
  734. g_ucU1TX_Data[4] = Real_temp[g_ucRealTemp_Chanel]>>8;
  735. g_ucU1TX_Data[5] = Real_temp[g_ucRealTemp_Chanel]&0x00ff;
  736. g_ucU1TX_Data[6] = TempChn[g_ucRealTemp_Chanel].cTubeTempAriv;
  737. g_ucU1TX_Data[7] = Flag_STATUS;//状态位
  738. g_ucU1TX_Data[8] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  739. while(DMA3CONbits.CHEN);
  740. DMA3CNT=(g_uiFrmLth-1);
  741. DMA3CONbits.CHEN = 1;
  742. DMA3REQbits.FORCE = 1;
  743. break;
  744. case PCR_RTPCREMP://0x10
  745. g_ucRealTemp_Chanel = g_ucU1RX_Data[4];
  746. g_ucRealTemp_Chanel = 0;
  747. Real_temp[0] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0);
  748. // if((TempChn[0].cTubeTempAriv == 1)||(TempChn[1].cTubeTempAriv == 1)||(TempChn[2].cTubeTempAriv == 1)){
  749. // g_cTubeTempAriv = 1;
  750. // }else{
  751. // g_cTubeTempAriv = 0;
  752. // }
  753. g_uiFrmLth = 9;
  754. g_ucU1TX_Data[0] = FRAME_HEAD;
  755. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  756. g_ucU1TX_Data[2] = 0;
  757. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;//桢长
  758. g_ucU1TX_Data[4] = Real_temp[0]>>8;
  759. g_ucU1TX_Data[5] = Real_temp[0]&0x00ff;
  760. g_ucU1TX_Data[6] =TempChn[0].cTubeTempAriv;
  761. g_ucU1TX_Data[7] = Flag_STATUS; //状态位
  762. g_ucU1TX_Data[8] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  763. while(DMA3CONbits.CHEN);
  764. DMA3CNT=(g_uiFrmLth-1);
  765. DMA3CONbits.CHEN = 1;
  766. DMA3REQbits.FORCE = 1;
  767. break;
  768. /**********************(0x0A)************************/
  769. case PCR_SETCAP://0x0A
  770. CAPPower = g_ucU1RX_Data[4];
  771. CAPPower = (CAPPower<<8) + g_ucU1RX_Data[5];
  772. if(g_ucU1RX_Data[4] == 0xFF){
  773. CAPTarget_temp[0] = g_tEE.CAPTarget_temp[0];
  774. CAPTarget_temp[1] = g_tEE.CAPTarget_temp[1];
  775. }
  776. else {
  777. if(CAPPower < 13000){
  778. CAPTarget_temp[0] = CAPTarget_temp[1] = CAPPower/100;
  779. }else{
  780. }
  781. }
  782. g_uiFrmLth = 6;
  783. g_ucU1TX_Data[0] = FRAME_HEAD;
  784. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  785. g_ucU1TX_Data[2] = 0;
  786. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  787. g_ucU1TX_Data[4] = 0;
  788. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  789. while(DMA3CONbits.CHEN);
  790. DMA3CNT=(g_uiFrmLth-1);
  791. DMA3CONbits.CHEN = 1;
  792. DMA3REQbits.FORCE = 1;
  793. break;
  794. /********************(0x0c)***********************/
  795. case RD_PCRDATA://0x0C
  796. g_ucPCRDATA_Chanel=g_ucU1RX_Data[4];
  797. ucBuffer_Data[0]=((g_ucCMD1|0x80)<<8)+FRAME_HEAD;
  798. ucBuffer_Data[1]=(ZLENTH1<<8)+0;//帧长+CMDNO,
  799. g_ucU1RX_Data[3]=0;
  800. // for(i=0;i<20;i++){
  801. // lMPPCtemp += g_uiMPPCtemp[i];
  802. // }
  803. lMPPCtemp = AD_Get(0x0F);
  804. // if((MPPCALLtemp>60000)||((MPPCALLtemp<100)){
  805. // }
  806. HangHao=0;
  807. //FAM
  808. for(i=0;i<8;i++){
  809. g_fAD_Max[i] = g_fFAMAD_Max[i];
  810. }
  811. for(i=8;i<16;i++){
  812. g_fAD_Max[i] = g_fFAMAD_Max[i+1];
  813. }
  814. for (i = 0; i < 16; i++) {
  815. if (g_tEE.uiQCbuffer == 0) {
  816. g_fAD_Max[i] = g_fAD_Max[i];
  817. } else if (g_tEE.uiQCbuffer == 1) {
  818. if (g_fAD_Max[i] > g_tEE.FAM_MPPCB) {
  819. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.FAM_MPPCB;
  820. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCFAM_Current / g_fQCFAM);
  821. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.FAM_MPPCB;
  822. }else{
  823. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCFAM_Current / g_fQCFAM);
  824. }
  825. } else if (g_tEE.uiQCbuffer == 2) {
  826. if (g_fAD_Max[i] > g_tEE.FAM_MPPCB) {
  827. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.FAM_MPPCB;
  828. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.FAM_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.FAM_MPPCTk2 * lMPPCtemp + g_tEE.FAM_MPPCTb1); /*温度补偿*/
  829. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.FAM_MPPCB;
  830. }else{
  831. g_fAD_Max[i] = g_fAD_Max[i];
  832. }
  833. }else {
  834. }
  835. g_fAD_Max[i] = (g_tEE.fSFAMk[i] * g_fAD_Max[i] + g_tEE.sSFAMb[i]);
  836. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  837. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  838. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  839. }
  840. for(GlobalNum1=0;GlobalNum1<16;GlobalNum1++){
  841. ucBuffer_Data[2+ GlobalNum1] = uiAD_Max[GlobalNum1];//帧
  842. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  843. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  844. }
  845. for(i=0;i<8;i++){
  846. g_fAD_Max[i] = g_fCY5AD_Max[i];
  847. }
  848. for(i=8;i<16;i++){
  849. g_fAD_Max[i] = g_fCY5AD_Max[i+1];
  850. }
  851. for (i = 0; i < 16; i++) {
  852. if (g_tEE.uiQCbuffer == 0) {
  853. g_fAD_Max[i] = g_fAD_Max[i];
  854. }
  855. else if (g_tEE.uiQCbuffer == 1) {
  856. if (g_fAD_Max[i] > g_tEE.CY5_MPPCB) {
  857. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.CY5_MPPCB;
  858. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCCY5_Current / g_fQCCY5);
  859. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.CY5_MPPCB;
  860. }else{
  861. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCCY5_Current / g_fQCCY5);
  862. }
  863. }
  864. else if (g_tEE.uiQCbuffer == 2) {
  865. if (g_fAD_Max[i] > g_tEE.CY5_MPPCB) {
  866. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.CY5_MPPCB;
  867. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.CY5_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.CY5_MPPCTk2 * lMPPCtemp + g_tEE.CY5_MPPCTb1);
  868. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.CY5_MPPCB;
  869. }else{
  870. g_fAD_Max[i] = g_fAD_Max[i];
  871. }
  872. }
  873. else {
  874. }
  875. g_fAD_Max[i] = (g_tEE.fSCY5k[i] * g_fAD_Max[i] + g_tEE.sSCY5b[i]);
  876. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  877. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  878. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  879. }
  880. for(GlobalNum1=16;GlobalNum1<32;GlobalNum1++){
  881. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-16];//帧
  882. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  883. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  884. }
  885. for(i=0;i<8;i++){
  886. g_fAD_Max[i] = g_fVICAD_Max[i];
  887. }
  888. for(i=8;i<16;i++){
  889. g_fAD_Max[i] = g_fVICAD_Max[i+1];
  890. }
  891. for (i = 0; i < 16; i++) {
  892. if (g_tEE.uiQCbuffer == 0) {
  893. g_fAD_Max[i] = g_fAD_Max[i];
  894. } else if (g_tEE.uiQCbuffer == 1) {
  895. if (g_fAD_Max[i] > g_tEE.VIC_MPPCB) {
  896. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.VIC_MPPCB;
  897. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCVIC_Current / g_fQCVIC);
  898. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.VIC_MPPCB;
  899. }else{
  900. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCVIC_Current / g_fQCVIC);
  901. }
  902. } else if (g_tEE.uiQCbuffer == 2) {
  903. if (g_fAD_Max[i] > g_tEE.VIC_MPPCB) {
  904. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.VIC_MPPCB;
  905. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.VIC_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.VIC_MPPCTk2 * lMPPCtemp + g_tEE.VIC_MPPCTb1);
  906. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.VIC_MPPCB;
  907. }else{
  908. g_fAD_Max[i] = g_fAD_Max[i];
  909. }
  910. }else {
  911. }
  912. g_fAD_Max[i] = (g_tEE.fSVICk[i] * g_fAD_Max[i] + g_tEE.sSVICb[i]);
  913. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  914. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  915. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  916. }
  917. for(GlobalNum1=32;GlobalNum1<48;GlobalNum1++){
  918. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-32];//帧
  919. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  920. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  921. }
  922. for(i=0;i<8;i++){
  923. g_fAD_Max[i] = g_fROXAD_Max[i];
  924. }
  925. for(i=8;i<16;i++){//排序
  926. g_fAD_Max[i] = g_fROXAD_Max[i+1];
  927. }
  928. for (i = 0; i < 16; i++) {
  929. if (g_tEE.uiQCbuffer == 0) {
  930. g_fAD_Max[i] = g_fAD_Max[i];
  931. } else if (g_tEE.uiQCbuffer == 1) {
  932. if (g_fAD_Max[i] > g_tEE.ROX_MPPCB) {
  933. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.ROX_MPPCB;
  934. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCROX_Current / g_fQCROX);
  935. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.ROX_MPPCB;
  936. }else{
  937. g_fAD_Max[i] = g_fAD_Max[i] / (g_fQCROX_Current / g_fQCROX);
  938. }
  939. } else if (g_tEE.uiQCbuffer == 2) {
  940. if (g_fAD_Max[i] > g_tEE.ROX_MPPCB) {
  941. g_fAD_Max[i] = g_fAD_Max[i] - g_tEE.ROX_MPPCB;
  942. g_fAD_Max[i] = g_fAD_Max[i] / (g_tEE.ROX_MPPCTk1 * lMPPCtemp * lMPPCtemp + g_tEE.ROX_MPPCTk2 * lMPPCtemp + g_tEE.ROX_MPPCTb1);
  943. g_fAD_Max[i] = g_fAD_Max[i] + g_tEE.ROX_MPPCB;
  944. }else{
  945. g_fAD_Max[i] = g_fAD_Max[i];
  946. }
  947. }else {
  948. }
  949. g_fAD_Max[i] = (g_tEE.fSROXk[i] * g_fAD_Max[i] + g_tEE.sSROXb[i]);
  950. if (g_fAD_Max[i] > 60000)g_fAD_Max[i] = 60000;
  951. if (g_fAD_Max[i] < 20)g_fAD_Max[i] = 20;
  952. uiAD_Max[i] = (unsigned int) g_fAD_Max[i];
  953. }
  954. for(GlobalNum1=48;GlobalNum1<55;GlobalNum1++){
  955. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-48];//帧
  956. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  957. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  958. }
  959. if(g_ucMPPCtemp == 1){
  960. ucBuffer_Data[57] = (unsigned int)lMPPCtemp;
  961. g_ucU1RX_Data[3] += ucBuffer_Data[57]>>8;
  962. g_ucU1RX_Data[3] += ucBuffer_Data[57]&0xff;
  963. }else{
  964. ucBuffer_Data[57]=uiAD_Max[7];//帧
  965. g_ucU1RX_Data[3] += ucBuffer_Data[57]>>8;
  966. g_ucU1RX_Data[3] += ucBuffer_Data[57]&0xff;
  967. }
  968. for(GlobalNum1=56;GlobalNum1<64;GlobalNum1++){
  969. ucBuffer_Data[2+GlobalNum1]=uiAD_Max[GlobalNum1-48];//帧
  970. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  971. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  972. }
  973. g_ucU1RX_Data[3] +=ucBuffer_Data[0]>>8;
  974. g_ucU1RX_Data[3] +=ucBuffer_Data[0]&0xff;
  975. g_ucU1RX_Data[3] +=ucBuffer_Data[1]>>8;
  976. g_ucU1RX_Data[3] +=ucBuffer_Data[1]&0xff;
  977. ucBuffer_Data[GlobalNum1+2]=g_ucU1RX_Data[3]<<8;
  978. memset( uiAD_Max,0,16*sizeof(unsigned int));
  979. while(DMA1CONbits.CHEN);
  980. DMA1CNT=(ucBuffer_Data[1]>>8)-1;
  981. DMA1CONbits.CHEN=1;
  982. DMA1REQbits.FORCE =1;
  983. break;
  984. /***********************0x0d)******************************/
  985. case PCR_PMT:
  986. MPPCPower = g_ucU1RX_Data[4];
  987. MPPCPower = (MPPCPower<<8) + g_ucU1RX_Data[5];
  988. Write_DAC(DA_FAM);
  989. Delay_ms(10);
  990. Write_DAC(DA_FAM);
  991. g_uiFrmLth = 6;
  992. g_ucU1TX_Data[0] = FRAME_HEAD;
  993. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  994. g_ucU1TX_Data[2] = 0;
  995. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  996. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  997. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  998. while(DMA3CONbits.CHEN);
  999. DMA3CNT=(g_uiFrmLth-1);
  1000. DMA3CONbits.CHEN = 1;
  1001. DMA3REQbits.FORCE = 1;
  1002. break;
  1003. /**********************(0x0f)***********************/
  1004. case PCR_STALED:
  1005. g_ucSTATE_RUN = g_ucU1RX_Data[4];
  1006. if(g_ucSTATE_RUN == 2){
  1007. CAPTarget_temp[0] = CAPTarget_temp[1] = g_tEE.CAPTemp_PCR;
  1008. //
  1009. // IEC1bits.INT2IE = 1;
  1010. Alldata = 1;
  1011. MotorXScan(g_tEE.uiXPulseScan * 2, 1, g_tEE.uiXSpeedScan);
  1012. MotorXMoveTo(0, uiSpeed);
  1013. MotorXHome(g_tEE.uiXPulseHome,g_tEE.uiXSpeedHome,g_tEE.uiXSpeedLeave);
  1014. Alldata = 2;
  1015. ulAD_Max = 0;
  1016. Bubble_Sort( &FAMData[8][15], 50);
  1017. for(j=18;j<(SUM1-18);j++){
  1018. ulAD_Max += FAMData[8][j];
  1019. }
  1020. g_fQCFAM = (float)(ulAD_Max/3);
  1021. if(g_fQCFAM<100)g_fQCFAM = 100;
  1022. if(g_fQCFAM>60000)g_fQCFAM = 60000;
  1023. ulAD_Max = 0;
  1024. Bubble_Sort( &VICData[8][15], 50);
  1025. for(j=18;j<(SUM1-18);j++){
  1026. ulAD_Max += VICData[8][j];
  1027. }
  1028. g_fQCVIC = (float)(ulAD_Max/3);
  1029. if(g_fQCVIC<100)g_fQCVIC = 100;
  1030. if(g_fQCVIC>60000)g_fQCVIC = 60000;
  1031. ulAD_Max = 0;
  1032. Bubble_Sort( &ROXData[8][15], 50);
  1033. for(j=18;j<(SUM1-18);j++){
  1034. ulAD_Max += ROXData[8][j];
  1035. }
  1036. g_fQCROX = (float)(ulAD_Max/3);
  1037. if(g_fQCROX<100)g_fQCROX = 100;
  1038. if(g_fQCROX>60000)g_fQCROX = 60000;
  1039. ulAD_Max = 0;
  1040. Bubble_Sort( &CY5Data[8][15], 50);
  1041. for(j=18;j<(SUM1-18);j++){
  1042. ulAD_Max += CY5Data[8][j];
  1043. }
  1044. g_fQCCY5 = (float)(ulAD_Max/3);
  1045. if(g_fQCCY5<100)g_fQCCY5 = 100;
  1046. if(g_fQCCY5>60000)g_fQCCY5 = 60000;
  1047. ulAD_Max = 0;
  1048. Bubble_Sort( &CY6Data[8][15], 50);
  1049. for(j=18;j<(SUM1-18);j++){
  1050. ulAD_Max += CY6Data[8][j];
  1051. }
  1052. g_fQCCY6 = (float)(ulAD_Max/3);
  1053. if(g_fQCCY6<100)g_fQCCY6 = 100;
  1054. if(g_fQCCY6>60000)g_fQCCY6 = 60000;
  1055. }
  1056. else if(g_ucSTATE_RUN == 1){
  1057. CAPTarget_temp[0] = g_tEE.CAPTarget_temp[0];
  1058. CAPTarget_temp[1] = g_tEE.CAPTarget_temp[1];
  1059. if(g_usEERadiatorOvertemp >= 60)g_usEERadiatorOvertemp = 60;
  1060. if(g_usEERadiatorOvertemp < 20)g_usEERadiatorOvertemp = 20;
  1061. for (i = 0; i < 2; i++) {
  1062. TempChn[i].fBlockTargetTemp = g_usEERadiatorOvertemp;
  1063. TempChn[i].cPeltierRun = 1;
  1064. ScheduleOperate(i);
  1065. }
  1066. }
  1067. g_uiFrmLth = 6;
  1068. g_ucU1TX_Data[0] = FRAME_HEAD;
  1069. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1070. g_ucU1TX_Data[2] = 0;
  1071. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1072. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1073. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1074. while(DMA3CONbits.CHEN);
  1075. DMA3CNT=(g_uiFrmLth-1);
  1076. DMA3CONbits.CHEN = 1;
  1077. DMA3REQbits.FORCE = 1;
  1078. break;
  1079. /***************************(0x11)************************/
  1080. case READ_EEPROM:
  1081. uiEE_address = g_ucU1RX_Data[4];
  1082. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[5];
  1083. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[6];
  1084. GlobalTmp = g_ucU1RX_Data[7];
  1085. for(i=0;i<GlobalTmp;i++){
  1086. g_ucU1TX_Data[FRAME_LTHL_INDEX+i] = EE_read(uiEE_address+i);
  1087. }
  1088. g_uiFrmLth = GlobalTmp+6;
  1089. g_ucU1TX_Data[0] = FRAME_HEAD;
  1090. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1091. g_ucU1TX_Data[2] = 0;//地址
  1092. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1093. g_ucU1TX_Data[g_uiFrmLth-FRAME_STATE_INDEX-1] = Flag_STATUS;
  1094. g_ucU1TX_Data[g_uiFrmLth-FRAME_CRC_INDEX-1] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1095. while(DMA3CONbits.CHEN);
  1096. DMA3CNT=(g_uiFrmLth-1);
  1097. DMA3CONbits.CHEN = 1;
  1098. DMA3REQbits.FORCE = 1;
  1099. break;
  1100. /***************************(0x12)*************************/
  1101. case WRITE_EEPROM:
  1102. uiEE_address = g_ucU1RX_Data[4];
  1103. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[5];
  1104. uiEE_address = (uiEE_address << 8) + g_ucU1RX_Data[6];
  1105. if((uiEE_address >= 0x20)&&(uiEE_address < 0x40)){
  1106. }else{
  1107. GlobalTmp = g_ucU1RX_Data[3]-8;
  1108. for(i=0;i<GlobalTmp;i++){
  1109. EE_write(uiEE_address+i,g_ucU1RX_Data[7+i]);
  1110. Delay_ms(10);
  1111. }
  1112. Read_Sys_EE(uiEE_address);
  1113. }
  1114. g_uiFrmLth = 6;
  1115. g_ucU1TX_Data[0] = FRAME_HEAD;
  1116. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1117. g_ucU1TX_Data[2] = 0;
  1118. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1119. g_ucU1TX_Data[4] = Flag_STATUS; //状态标志位
  1120. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1121. while(DMA3CONbits.CHEN);
  1122. DMA3CNT=(g_uiFrmLth-1);
  1123. DMA3CONbits.CHEN = 1;
  1124. DMA3REQbits.FORCE = 1;
  1125. break;
  1126. /**************************(0x15)**********************/
  1127. case PCR_RDSENSOR:
  1128. g_uiFrmLth = 7;
  1129. if(HOMEX==1)Sensor = 1;
  1130. else Sensor = 0;
  1131. g_ucU1TX_Data[0] = FRAME_HEAD;
  1132. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1133. g_ucU1TX_Data[2] = 0;
  1134. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1135. g_ucU1TX_Data[4] = Sensor;
  1136. g_ucU1TX_Data[5] = Flag_STATUS;
  1137. g_ucU1TX_Data[6] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1138. while(DMA3CONbits.CHEN);
  1139. DMA3CNT=(g_uiFrmLth-1);
  1140. DMA3CONbits.CHEN = 1;
  1141. DMA3REQbits.FORCE = 1;
  1142. /**************************(0x18)**********************/
  1143. case GET_MPPCAD:
  1144. memset( uiMppcADBuff,0,6*sizeof(unsigned int));
  1145. uiMppcADBuff[0] = AD_Get(0x09);
  1146. uiMppcADBuff[1] = AD_Get(0x0B);
  1147. uiMppcADBuff[2] = AD_Get(0x0A);
  1148. uiMppcADBuff[3] = AD_Get(0x0C);
  1149. uiMppcADBuff[6] = AD_Get(0x0F);
  1150. g_uiFrmLth = 20;
  1151. g_ucU1TX_Data[0] = FRAME_HEAD;
  1152. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1153. g_ucU1TX_Data[2] = 0;
  1154. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1155. g_ucU1TX_Data[4] = uiMppcADBuff[0] >> 8;
  1156. g_ucU1TX_Data[5] = (unsigned char) uiMppcADBuff[0];
  1157. g_ucU1TX_Data[6] = uiMppcADBuff[1] >> 8;
  1158. g_ucU1TX_Data[7] = (unsigned char) uiMppcADBuff[1];
  1159. g_ucU1TX_Data[8] = uiMppcADBuff[2] >> 8;
  1160. g_ucU1TX_Data[9] = (unsigned char) uiMppcADBuff[2];
  1161. g_ucU1TX_Data[10] = uiMppcADBuff[3] >> 8;
  1162. g_ucU1TX_Data[11] = (unsigned char) uiMppcADBuff[3];
  1163. g_ucU1TX_Data[12] = uiMppcADBuff[4] >> 8;
  1164. g_ucU1TX_Data[13] = (unsigned char) uiMppcADBuff[4];
  1165. g_ucU1TX_Data[14] = uiMppcADBuff[5] >> 8;
  1166. g_ucU1TX_Data[15] = (unsigned char) uiMppcADBuff[5];
  1167. g_ucU1TX_Data[16] = uiMppcADBuff[6] >> 8;
  1168. g_ucU1TX_Data[17] = (unsigned char) uiMppcADBuff[6];
  1169. g_ucU1TX_Data[18] = Flag_STATUS; //状态位
  1170. g_ucU1TX_Data[19] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1171. while(DMA3CONbits.CHEN);
  1172. DMA3CNT=(g_uiFrmLth-1);
  1173. DMA3CONbits.CHEN = 1;
  1174. DMA3REQbits.FORCE = 1;
  1175. break;
  1176. /*************************** (0x18)***********************/
  1177. case PCR_RDADC:
  1178. g_uiFrmLth = 24;
  1179. g_ucU1TX_Data[0] = FRAME_HEAD;
  1180. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1181. g_ucU1TX_Data[2] = 0;
  1182. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1183. g_ucU1TX_Data[4] = dTemperatureAD[0] >> 8;
  1184. g_ucU1TX_Data[5] = (unsigned char) dTemperatureAD[0];
  1185. g_ucU1TX_Data[6] = dTemperatureAD[1] >> 8;
  1186. g_ucU1TX_Data[7] = (unsigned char) dTemperatureAD[1];
  1187. g_ucU1TX_Data[8] = dTemperatureAD[2] >> 8;
  1188. g_ucU1TX_Data[9] = (unsigned char) dTemperatureAD[2];
  1189. g_ucU1TX_Data[10] = dTemperatureAD[3] >> 8;
  1190. g_ucU1TX_Data[11] = (unsigned char) dTemperatureAD[3];
  1191. g_ucU1TX_Data[12] = dTemperatureAD[4] >> 8;
  1192. g_ucU1TX_Data[13] = (unsigned char) dTemperatureAD[4];
  1193. g_ucU1TX_Data[14] = dTemperatureAD[5] >> 8;
  1194. g_ucU1TX_Data[15] = (unsigned char) dTemperatureAD[5];
  1195. g_ucU1TX_Data[16] = dTemperatureAD[6] >> 8;
  1196. g_ucU1TX_Data[17] = (unsigned char) dTemperatureAD[6];
  1197. g_ucU1TX_Data[18] = dTemperatureAD[7] >> 8;
  1198. g_ucU1TX_Data[19] = (unsigned char) dTemperatureAD[7];
  1199. g_ucU1TX_Data[20] = dTemperatureAD[8] >> 8;
  1200. g_ucU1TX_Data[21] = (unsigned char) dTemperatureAD[8];
  1201. g_ucU1TX_Data[22] = Flag_STATUS;
  1202. g_ucU1TX_Data[23] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1203. while(DMA3CONbits.CHEN);
  1204. DMA3CNT=(g_uiFrmLth-1);
  1205. DMA3CONbits.CHEN = 1;
  1206. DMA3REQbits.FORCE = 1;
  1207. break;
  1208. /***************************(0x18)***********************/
  1209. // case ADGET:
  1210. //
  1211. // ADC = AD_Get(g_ucU1RX_Data[4]);
  1212. //
  1213. // g_uiFrmLth = 8;
  1214. // g_ucU1TX_Data[0] = FRAME_HEAD;
  1215. // g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1216. // g_ucU1TX_Data[2] = 0;
  1217. // g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1218. // g_ucU1TX_Data[4] = AD_Get(g_ucU1RX_Data[4]) >> 8;
  1219. // g_ucU1TX_Data[5] = (unsigned char) AD_Get(g_ucU1RX_Data[4]);
  1220. // g_ucU1TX_Data[6] = Flag_STATUS; //状态位
  1221. // g_ucU1TX_Data[7] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1222. // while(DMA3CONbits.CHEN);
  1223. // DMA3CNT=(g_uiFrmLth-1);
  1224. // DMA3CONbits.CHEN = 1;
  1225. // DMA3REQbits.FORCE = 1;
  1226. // break;
  1227. /***************************(0x1C)***********************/
  1228. case PCR_FAN:
  1229. FanCount = g_ucU1RX_Data[4];
  1230. MPPCPower = g_ucU1RX_Data[5];
  1231. MPPCPower = (MPPCPower<<8) + g_ucU1RX_Data[6];
  1232. FANOC_Set(FanCount,MPPCPower);
  1233. g_uiFrmLth = 6;
  1234. g_ucU1TX_Data[0] = FRAME_HEAD;
  1235. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1236. g_ucU1TX_Data[2] = 0;
  1237. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1238. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1239. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1240. while(DMA3CONbits.CHEN);
  1241. DMA3CNT=(g_uiFrmLth-1);
  1242. DMA3CONbits.CHEN = 1;
  1243. DMA3REQbits.FORCE = 1;
  1244. break;
  1245. /**************************(0x44)***********************/
  1246. case QC_Data:
  1247. g_uiFrmLth = 14;
  1248. g_ucU1TX_Data[0] = FRAME_HEAD;
  1249. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1250. g_ucU1TX_Data[2] = 0;
  1251. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1252. g_ucU1TX_Data[4] = (unsigned int)g_fQCFAM_Current >> 8;
  1253. g_ucU1TX_Data[5] = (unsigned char) g_fQCFAM_Current;
  1254. g_ucU1TX_Data[6] = (unsigned int)g_fQCVIC_Current >> 8;
  1255. g_ucU1TX_Data[7] = (unsigned char) g_fQCVIC_Current;
  1256. g_ucU1TX_Data[8] = (unsigned int)g_fQCROX_Current >> 8;
  1257. g_ucU1TX_Data[9] = (unsigned char) g_fQCROX_Current;
  1258. g_ucU1TX_Data[10] = (unsigned int)g_fQCCY5_Current >> 8;
  1259. g_ucU1TX_Data[11] = (unsigned char) g_fQCCY5_Current;
  1260. g_ucU1TX_Data[12] = Flag_STATUS; //状态位
  1261. g_ucU1TX_Data[13] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1262. while(DMA3CONbits.CHEN);
  1263. DMA3CNT=(g_uiFrmLth-1);
  1264. DMA3CONbits.CHEN = 1;
  1265. DMA3REQbits.FORCE = 1;
  1266. break;
  1267. /***************************(0x1E)*************************/
  1268. case PCR_IO:
  1269. g_uiFrmLth = 6;
  1270. if(g_ucU1RX_Data[4] == 255){
  1271. g_ucENABLE = 0;
  1272. }else if(g_ucU1RX_Data[4] == 254){
  1273. g_ucENABLE = 1;
  1274. }else{
  1275. SetIO(g_ucU1RX_Data[4],g_ucU1RX_Data[5]);
  1276. }
  1277. g_ucU1TX_Data[0] = FRAME_HEAD;
  1278. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1279. g_ucU1TX_Data[2] = 0;
  1280. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1281. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1282. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1283. while(DMA3CONbits.CHEN);
  1284. DMA3CNT=(g_uiFrmLth-1);
  1285. DMA3CONbits.CHEN = 1;
  1286. DMA3REQbits.FORCE = 1;
  1287. if(g_ucU1RX_Data[4] == 253){
  1288. _RP97R = 0x01;
  1289. _U1RXR = 0x6D;
  1290. STU2 = 0;
  1291. }
  1292. else if(g_ucU1RX_Data[4] == 252){
  1293. _RP97R = 0x01;
  1294. _U1RXR = 0x60;
  1295. STU2 = 1;
  1296. }
  1297. else{}
  1298. break;
  1299. /*****************************(0xE0)***************************/
  1300. case GET_IO:
  1301. Get_IOstate = Get_IO(g_ucU1RX_Data[4]);
  1302. g_uiFrmLth = 7;
  1303. g_ucU1TX_Data[0] = FRAME_HEAD;
  1304. g_ucU1TX_Data[1] = g_ucCMD1 | 0X80;
  1305. g_ucU1TX_Data[2] = 0;
  1306. g_ucU1TX_Data[3] = g_uiFrmLth; //
  1307. g_ucU1TX_Data[4] = Get_IOstate; //获取的IO状态
  1308. g_ucU1TX_Data[5] = Flag_STATUS; //状态位
  1309. g_ucU1TX_Data[6] = (unsigned char) Check(g_ucU1TX_Data, g_uiFrmLth - 1);
  1310. while (DMA3CONbits.CHEN);
  1311. DMA3CNT = (g_uiFrmLth - 1);
  1312. DMA3CONbits.CHEN = 1;
  1313. DMA3REQbits.FORCE = 1;
  1314. break;
  1315. /************************** (0x31)*************************/
  1316. case SET_PWM:
  1317. ucPWMindex = g_ucU1RX_Data[4];
  1318. lPWMstate = g_ucU1RX_Data[5];
  1319. lPWMstate = (lPWMstate << 8) + g_ucU1RX_Data[6];
  1320. ucCtrlMode = g_ucU1RX_Data[7];
  1321. if (ucCtrlMode == 0) {
  1322. SetPWM(ucPWMindex, lPWMstate);
  1323. } else if (ucCtrlMode == 1) {
  1324. SetPWM(ucPWMindex, -lPWMstate);
  1325. } else {}
  1326. g_uiFrmLth = 6;
  1327. g_ucU1TX_Data[0] = FRAME_HEAD;
  1328. g_ucU1TX_Data[1] = g_ucCMD1 | 0X80;
  1329. g_ucU1TX_Data[2] = 0;
  1330. g_ucU1TX_Data[3] = g_uiFrmLth;
  1331. g_ucU1TX_Data[4] = 0x00; //状态位
  1332. g_ucU1TX_Data[5] = (unsigned char) Check(g_ucU1TX_Data, g_uiFrmLth - 1);
  1333. while(DMA3CONbits.CHEN);
  1334. DMA3CNT=(g_uiFrmLth-1);
  1335. DMA3CONbits.CHEN = 1;
  1336. DMA3REQbits.FORCE = 1;
  1337. break;
  1338. /**************************(0x32)***********************/
  1339. case GET_PWM:
  1340. g_uiFrmLth = 18;
  1341. g_ucU1TX_Data[0] = FRAME_HEAD;
  1342. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1343. g_ucU1TX_Data[2] = 0;
  1344. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1345. g_ucU1TX_Data[4] = g_uiGetPWM[0] >> 8;
  1346. g_ucU1TX_Data[5] = (unsigned char) g_uiGetPWM[0];
  1347. g_ucU1TX_Data[6] = g_uiGetPWM[1] >> 8;
  1348. g_ucU1TX_Data[7] = (unsigned char) g_uiGetPWM[1];
  1349. g_ucU1TX_Data[8] = g_uiGetPWM[2] >> 8;
  1350. g_ucU1TX_Data[9] = (unsigned char) g_uiGetPWM[2];
  1351. g_ucU1TX_Data[10] = g_uiGetPWM[3] >> 8;
  1352. g_ucU1TX_Data[11] = (unsigned char) g_uiGetPWM[3];
  1353. g_ucU1TX_Data[12] = g_uiGetPWM[4] >> 8;
  1354. g_ucU1TX_Data[13] = (unsigned char) g_uiGetPWM[4];
  1355. g_ucU1TX_Data[14] = g_uiGetPWM[5] >> 8;
  1356. g_ucU1TX_Data[15] = (unsigned char) g_uiGetPWM[5];
  1357. g_ucU1TX_Data[16] = Flag_STATUS; //状态位
  1358. g_ucU1TX_Data[17] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1359. while(DMA3CONbits.CHEN);
  1360. DMA3CNT=(g_uiFrmLth-1);
  1361. DMA3CONbits.CHEN = 1;
  1362. DMA3REQbits.FORCE = 1;
  1363. break;
  1364. /********************(0x25)**********************/
  1365. case PCR_TUBEMODE:
  1366. g_uiFrmLth = 6;
  1367. g_ucU1TX_Data[0] = FRAME_HEAD;
  1368. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1369. g_ucU1TX_Data[2] = 0;
  1370. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1371. g_ucU1TX_Data[4] = Flag_STATUS; //状态位
  1372. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1373. while(DMA3CONbits.CHEN);
  1374. DMA3CNT=(g_uiFrmLth-1);
  1375. DMA3CONbits.CHEN = 1;
  1376. DMA3REQbits.FORCE = 1;
  1377. break;
  1378. /**********************(0x26)***************************/
  1379. case PCR_INBOX:
  1380. g_uiFrmLth = 6;
  1381. g_ucU1TX_Data[0] = FRAME_HEAD;
  1382. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1383. g_ucU1TX_Data[2] = 0;
  1384. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1385. g_ucU1TX_Data[4] = 0; //状态位
  1386. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1387. while(DMA3CONbits.CHEN);
  1388. DMA3CNT=(g_uiFrmLth-1);
  1389. DMA3CONbits.CHEN = 1;
  1390. DMA3REQbits.FORCE = 1;
  1391. break;
  1392. /**********************(0x27)***************************/
  1393. case PCR_OUTBOX:
  1394. g_uiFrmLth = 6;
  1395. g_ucU1TX_Data[0] = FRAME_HEAD;
  1396. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1397. g_ucU1TX_Data[2] = 0;
  1398. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1399. g_ucU1TX_Data[4] = 0; //状态位
  1400. g_ucU1TX_Data[5] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1401. while(DMA3CONbits.CHEN);
  1402. DMA3CNT=(g_uiFrmLth-1);
  1403. DMA3CONbits.CHEN = 1;
  1404. DMA3REQbits.FORCE = 1;
  1405. break;
  1406. case PCR_TEMP://0x43
  1407. if((TempChn[0].cTubeTempAriv == 1)||(TempChn[1].cTubeTempAriv == 1)||(TempChn[2].cTubeTempAriv == 1)||(TempChn[3].cTubeTempAriv == 1)
  1408. ){
  1409. g_cTubeTempAriv = 1;
  1410. }else{
  1411. g_cTubeTempAriv = 0;
  1412. }
  1413. g_uiFrmLth = 23;
  1414. g_ucU1TX_Data[0] = FRAME_HEAD;
  1415. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1416. g_ucU1TX_Data[2] = 0;
  1417. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1418. g_ucU1TX_Data[4] = (unsigned int)(TempChn[0].fCurrentTemperature*100.0) >> 8;
  1419. g_ucU1TX_Data[5] = (unsigned char) (TempChn[0].fCurrentTemperature*100.0);
  1420. g_ucU1TX_Data[6] = (unsigned int)(TempChn[1].fCurrentTemperature*100.0) >> 8;
  1421. g_ucU1TX_Data[7] = (unsigned char) (TempChn[1].fCurrentTemperature*100.0);
  1422. g_ucU1TX_Data[8] = (unsigned int)(TempChn[2].fCurrentTemperature*100.0) >> 8;
  1423. g_ucU1TX_Data[9] = (unsigned char) (TempChn[2].fCurrentTemperature*100.0);
  1424. g_ucU1TX_Data[10] = (unsigned int)(TempChn[3].fCurrentTemperature*100.0) >> 8;
  1425. g_ucU1TX_Data[11] = (unsigned char) (TempChn[3].fCurrentTemperature*100.0);
  1426. g_ucU1TX_Data[12] = (unsigned int)(TempChn[4].fCurrentTemperature*100.0) >> 8;
  1427. g_ucU1TX_Data[13] = (unsigned char) (TempChn[4].fCurrentTemperature*100.0);
  1428. g_ucU1TX_Data[14] = (unsigned int)(TempChn[5].fCurrentTemperature*100.0) >> 8;
  1429. g_ucU1TX_Data[15] = (unsigned char) (TempChn[5].fCurrentTemperature*100.0);
  1430. g_ucU1TX_Data[16] = (unsigned int)(TempChn[5].fCurrentTemperature*100.0) >> 8;
  1431. g_ucU1TX_Data[17] = (unsigned char) (TempChn[5].fCurrentTemperature*100.0);
  1432. g_ucU1TX_Data[18] = (unsigned int)(TempChn[5].fCurrentTemperature*100.0) >> 8;
  1433. g_ucU1TX_Data[19] = (unsigned char) (TempChn[5].fCurrentTemperature*100.0);
  1434. g_ucU1TX_Data[20] = g_cTubeTempAriv;
  1435. g_ucU1TX_Data[21] = Flag_STATUS; //状态位
  1436. g_ucU1TX_Data[22] = (unsigned char) Check(g_ucU1TX_Data, g_uiFrmLth - 1);
  1437. while(DMA3CONbits.CHEN);
  1438. DMA3CNT=(g_uiFrmLth-1);
  1439. DMA3CONbits.CHEN = 1;
  1440. DMA3REQbits.FORCE = 1;
  1441. break;
  1442. /***************(0x28)*********************/
  1443. case PCR_STATEBIT://0x28
  1444. g_uiFrmLth = 8;
  1445. g_ucU1TX_Data[0] = FRAME_HEAD;
  1446. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1447. g_ucU1TX_Data[2] = 0;
  1448. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1449. g_ucU1TX_Data[4] = 0x00;
  1450. g_ucU1TX_Data[5] = 0x00;
  1451. g_ucU1TX_Data[6] = Flag_STATUS; //状态位
  1452. g_ucU1TX_Data[7] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1453. while(DMA3CONbits.CHEN);
  1454. DMA3CNT=(g_uiFrmLth-1);
  1455. DMA3CONbits.CHEN = 1;
  1456. DMA3REQbits.FORCE = 1;
  1457. break;
  1458. /*********************(0xFF)***********************/
  1459. case RD_PCRALLDATA:
  1460. ucBuffer_Data[0]=((g_ucCMD1|0x80)<<8)+FRAME_HEAD;
  1461. ucBuffer_Data[1]=(ZLENTH2<<8)+0;
  1462. g_ucU1RX_Data[3]=0;
  1463. BTvar.ucScanNum = 0;
  1464. if(g_ucU1RX_Data[4] == 1){
  1465. SampleTransNo = 0;
  1466. for(i = 0;i<6748;i++){
  1467. ucBuffer_Data[i+2] = ((ucBuffer_Data[i+2]<< 8) + (ucBuffer_Data[i+2]>> 8));
  1468. }
  1469. ucBuffer_Data[2] = 0;
  1470. for(GlobalNum1=0;GlobalNum1<(ZLENTH2/2-3);GlobalNum1++){
  1471. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  1472. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  1473. }
  1474. }
  1475. else {
  1476. SampleTransNo ++;
  1477. for(GlobalNum1=0;GlobalNum1<(ZLENTH2/2-3);GlobalNum1++){
  1478. ucBuffer_Data[2+GlobalNum1]=ucBuffer_Data[SampleTransNo * (ZLENTH2/2-3)+GlobalNum1];//帧
  1479. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  1480. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  1481. }
  1482. }
  1483. g_ucU1RX_Data[3] +=ucBuffer_Data[0]>>8;
  1484. g_ucU1RX_Data[3] +=ucBuffer_Data[0]&0xff;
  1485. g_ucU1RX_Data[3] +=ucBuffer_Data[1]>>8;
  1486. g_ucU1RX_Data[3] +=ucBuffer_Data[1]&0xff;
  1487. ucBuffer_Data[GlobalNum1+2]=(g_ucU1RX_Data[3]<<8);//低位先发送,错误
  1488. while(DMA1CONbits.CHEN);
  1489. DMA1CNT=(ucBuffer_Data[1]>>8)-1;
  1490. DMA1CONbits.CHEN = 1;
  1491. DMA1REQbits.FORCE = 1;
  1492. break;
  1493. /********************(0xFE)***********************/
  1494. case RD_ALLDATAMAX:
  1495. ucBuffer_Data[0]=((g_ucCMD1|0x80)<<8)+FRAME_HEAD;
  1496. ucBuffer_Data[1]=(ZLENTH2<<8)+0;
  1497. g_ucU1RX_Data[3]=0;
  1498. if(g_ucU1RX_Data[4] == 1){
  1499. SampleTransNo = 0;
  1500. n = 0;
  1501. if(g_ucU1RX_Data[5] == 1){
  1502. for(i = 0;i<17;i++){
  1503. for(j = 0;j<SUM1;j++){
  1504. Alldata_Max[n] = ((FAMData[i][j]<< 8) + (FAMData[i][j]>> 8));
  1505. n++;
  1506. }
  1507. }
  1508. }
  1509. else if(g_ucU1RX_Data[5] == 2){
  1510. for(i = 0;i<17;i++){
  1511. for(j = 0;j<SUM1;j++){
  1512. Alldata_Max[n] = ((VICData[i][j]<< 8) + (VICData[i][j]>> 8));
  1513. n++;
  1514. }
  1515. }
  1516. }
  1517. else if(g_ucU1RX_Data[5] == 3){
  1518. for(i = 0;i<17;i++){
  1519. for(j = 0;j<SUM1;j++){
  1520. Alldata_Max[n] = ((ROXData[i][j]<< 8) + (ROXData[i][j]>> 8));
  1521. n++;
  1522. }
  1523. }
  1524. }
  1525. else if(g_ucU1RX_Data[5] == 4){
  1526. for(i = 0;i<17;i++){
  1527. for(j = 0;j<SUM1;j++){
  1528. Alldata_Max[n] = ((CY5Data[i][j]<< 8) + (CY5Data[i][j]>> 8));
  1529. n++;
  1530. }
  1531. }
  1532. }
  1533. }
  1534. else SampleTransNo ++;
  1535. for(GlobalNum1=0;GlobalNum1<ZLENTH2/2-3;GlobalNum1++){
  1536. ucBuffer_Data[2+GlobalNum1]=Alldata_Max[SampleTransNo * (ZLENTH2/2-3)+GlobalNum1];//帧
  1537. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]>>8;
  1538. g_ucU1RX_Data[3] += ucBuffer_Data[2+GlobalNum1]&0xff;
  1539. }
  1540. g_ucU1RX_Data[3] +=ucBuffer_Data[0]>>8;
  1541. g_ucU1RX_Data[3] +=ucBuffer_Data[0]&0xff;
  1542. g_ucU1RX_Data[3] +=ucBuffer_Data[1]>>8;
  1543. g_ucU1RX_Data[3] +=ucBuffer_Data[1]&0xff;
  1544. ucBuffer_Data[GlobalNum1+2]=(g_ucU1RX_Data[3]<<8);
  1545. while(DMA1CONbits.CHEN);
  1546. DMA1CNT=(ucBuffer_Data[1]>>8)-1;
  1547. DMA1CONbits.CHEN = 1;
  1548. DMA1REQbits.FORCE = 1;
  1549. break;
  1550. /****************(0x66)*********************/
  1551. case BT_Protocol://
  1552. BTvar.ucStepNum = g_ucU1RX_Data[5];
  1553. for (i = 0; i < BTvar.ucStepNum; i++) {
  1554. BTStep[i].Temp_Start = (g_ucU1RX_Data[i * 10 + 6] << 8) + g_ucU1RX_Data[i * 10 + 7];
  1555. BTStep[i].Temp_End = (g_ucU1RX_Data[i * 10 + 8] << 8) + g_ucU1RX_Data[i * 10 + 9];
  1556. BTStep[i].Duration = (g_ucU1RX_Data[i * 10 + 10] << 8) + g_ucU1RX_Data[i * 10 + 11];
  1557. BTStep[i].Cycle = g_ucU1RX_Data[i * 10 + 12];
  1558. if(BTStep[i].Cycle == 0)
  1559. BTStep[i].Mode = g_ucU1RX_Data[i * 10 + 13];
  1560. BTStep[i].Point = g_ucU1RX_Data[i * 10 + 14];
  1561. BTStep[i].Goto = g_ucU1RX_Data[i * 10 + 15];
  1562. }
  1563. BTvar.ucStartbuffer = 1;
  1564. BTvar.ucQCbuffer = 1;
  1565. g_uiFrmLth = 8;
  1566. g_ucU1TX_Data[0] = FRAME_HEAD;
  1567. g_ucU1TX_Data[1] = g_ucCMD1|0X80;
  1568. g_ucU1TX_Data[2] = 0;
  1569. g_ucU1TX_Data[3] = g_uiFrmLth & 0xff;
  1570. g_ucU1TX_Data[4] = 0x00;
  1571. g_ucU1TX_Data[5] = 0x00;
  1572. g_ucU1TX_Data[6] = Flag_STATUS; //状态位
  1573. g_ucU1TX_Data[7] = (unsigned char)Check(g_ucU1TX_Data,g_uiFrmLth-1);
  1574. while(DMA3CONbits.CHEN);
  1575. DMA3CNT=(g_uiFrmLth-1);
  1576. DMA3CONbits.CHEN = 1;
  1577. DMA3REQbits.FORCE = 1;
  1578. break;
  1579. default:
  1580. break;
  1581. }
  1582. g_ucUART1_flag = 0;
  1583. g_uiUart1_No = 0;
  1584. g_ucHeaderFlag1 = 0;
  1585. memset(g_ucU1RX_Data,0,g_uiLth1*sizeof(unsigned char));
  1586. g_BUSY1 = 0;
  1587. }
  1588. uint32_t m_pow_n(uint32_t m, uint32_t n)
  1589. {
  1590. uint32_t i = 0, ret = 1;
  1591. if (n < 0) return 0;
  1592. for (i = 0; i < n; i++)
  1593. {
  1594. ret *= m;
  1595. }
  1596. return ret;
  1597. }
  1598. void my_send_char(char ch){
  1599. g_ucU3TX_buf[g_ucU3TX_Last++] = ch;
  1600. }
  1601. // 返回值为打印字符的个数
  1602. // 支持%d,%o, %x,%s,%c,%f(只打印6位数字)
  1603. //int my_printf(const char* str, ...)
  1604. //{
  1605. // if (str == NULL) return -1;
  1606. //
  1607. // uint32_t ret_num = 0;// 返回打印字符的个数
  1608. // char* pStr = (char*)str;// 指向str
  1609. // int ArgIntVal = 0; // 接收整型
  1610. // uint32_t ArgHexVal = 0;// 接十六进制
  1611. // char* ArgStrVal = NULL; // 接收字符型
  1612. // double ArgFloVal = 0.0; // 接受浮点型
  1613. // uint32_t val_seg = 0; // 数据切分
  1614. // uint32_t val_temp = 0; // 临时保存数据
  1615. // int cnt = 0; // 数据长度计数
  1616. // int cnt_float = 0; // 数据长度计数
  1617. // int i = 0;
  1618. //
  1619. // va_list pArgs; // 定义va_list类型指针,用于存储参数的地址
  1620. // va_start(pArgs, str); // 初始化pArgs
  1621. // if(g_ucU3TX_Last > 0){
  1622. // return 0;
  1623. // }
  1624. // while (*pStr != '\0')
  1625. // {
  1626. // switch (*pStr)
  1627. // {
  1628. // case ' ':
  1629. // case '\r':
  1630. // case '\n':
  1631. // my_send_char(*pStr); ret_num++; break;
  1632. // case '\t':
  1633. // my_send_char(*pStr); ret_num += 4; break;
  1634. // case '%':
  1635. // pStr++;
  1636. // // % 格式解析
  1637. //
  1638. // if('.' == *pStr)
  1639. // {
  1640. // pStr++;
  1641. // cnt_float = *pStr - '0';// %.Nf,输出指定位数小数
  1642. // pStr++;
  1643. // }
  1644. //
  1645. // switch (*pStr)
  1646. // {
  1647. // case '%':
  1648. // my_send_char('%');// %%,输出%
  1649. // ret_num++;
  1650. // pStr++;
  1651. // continue;
  1652. // case 'c':
  1653. // ArgIntVal = va_arg(pArgs, int);// %c,输出char
  1654. // my_send_char((char)ArgIntVal);
  1655. // ret_num++;
  1656. // pStr++;
  1657. // continue;
  1658. // case 'd':
  1659. // // 接收整型
  1660. // ArgIntVal = va_arg(pArgs, int);
  1661. // if (ArgIntVal < 0)// 如果为负数打印,负号
  1662. // {
  1663. // ArgIntVal = -ArgIntVal;// 取相反数
  1664. //
  1665. // my_send_char('-');
  1666. // ret_num++;
  1667. // }
  1668. // val_seg = ArgIntVal;// 赋值给 val_seg处理数据
  1669. // // 计算ArgIntVal长度
  1670. // if (ArgIntVal)
  1671. // {
  1672. // while (val_seg) {
  1673. // cnt++;
  1674. // val_seg /= 10;
  1675. // }
  1676. // }
  1677. // else cnt = 1;// 数字0的长度为1
  1678. //
  1679. // ret_num += cnt;// 字符个数加上整数的长度
  1680. //
  1681. // // 将整数转为单个字符打印
  1682. // while (cnt)
  1683. // {
  1684. // val_seg = ArgIntVal / m_pow_n(10, cnt - 1);
  1685. // ArgIntVal %= m_pow_n(10, cnt - 1);
  1686. // my_send_char((char)val_seg + '0');
  1687. // cnt--;
  1688. // }
  1689. // pStr++;
  1690. // continue;
  1691. // case 'o':
  1692. // // 接收整型
  1693. // ArgIntVal = va_arg(pArgs, int);
  1694. // if (ArgIntVal < 0)// 如果为负数打印,负号
  1695. // {
  1696. // ArgIntVal = -ArgIntVal;// 取相反数
  1697. //
  1698. // my_send_char('-');
  1699. // ret_num++;
  1700. // }
  1701. // val_seg = ArgIntVal;// 赋值给 val_seg处理数据
  1702. // // 计算ArgIntVal长度
  1703. // if (ArgIntVal)
  1704. // {
  1705. // while (val_seg) {
  1706. // cnt++;
  1707. // val_seg /= 8;
  1708. // }
  1709. // }
  1710. // else cnt = 1;// 数字0的长度为1
  1711. //
  1712. // ret_num += cnt;// 字符个数加上整数的长度
  1713. //
  1714. // // 将整数转为单个字符打印
  1715. // while (cnt)
  1716. // {
  1717. // val_seg = ArgIntVal / m_pow_n(8, cnt - 1);
  1718. // ArgIntVal %= m_pow_n(8, cnt - 1);
  1719. // my_send_char((char)val_seg + '0');
  1720. // cnt--;
  1721. // }
  1722. // pStr++;
  1723. // continue;
  1724. // case 'x':
  1725. // // 接收16进制
  1726. // ArgHexVal = va_arg(pArgs, uint32_t);
  1727. // val_seg = ArgHexVal;
  1728. // // 计算ArgIntVal长度
  1729. // if (ArgHexVal)
  1730. // {
  1731. // while (val_seg) {
  1732. // cnt++;
  1733. // val_seg /= 16;
  1734. // }
  1735. // }
  1736. // else cnt = 1;// 数字0的长度为1
  1737. //
  1738. // ret_num += cnt;// 字符个数加上整数的长度
  1739. // // 将整数转为单个字符打印
  1740. // while (cnt)
  1741. // {
  1742. // val_seg = ArgHexVal / m_pow_n(16, cnt - 1);
  1743. // ArgHexVal %= m_pow_n(16, cnt - 1);
  1744. // if (val_seg <= 9)
  1745. // my_send_char((char)val_seg + '0');
  1746. // else
  1747. // {
  1748. // //my_send_char((char)val_seg - 10 + 'a'); //小写字母
  1749. // my_send_char((char)val_seg - 10 + 'A');
  1750. // }
  1751. // cnt--;
  1752. // }
  1753. // pStr++;
  1754. // continue;
  1755. // case 'b':
  1756. // // 接收整型
  1757. // ArgIntVal = va_arg(pArgs, int);
  1758. // val_seg = ArgIntVal;
  1759. // // 计算ArgIntVal长度
  1760. // if (ArgIntVal)
  1761. // {
  1762. // while (val_seg) {
  1763. // cnt++;
  1764. // val_seg /= 2;
  1765. // }
  1766. // }
  1767. // else cnt = 1;// 数字0的长度为1
  1768. //
  1769. // ret_num += cnt;// 字符个数加上整数的长度
  1770. // // 将整数转为单个字符打印
  1771. // while (cnt)
  1772. // {
  1773. // val_seg = ArgIntVal / m_pow_n(2, cnt - 1);
  1774. // ArgIntVal %= m_pow_n(2, cnt - 1);
  1775. // my_send_char((char)val_seg + '0');
  1776. // cnt--;
  1777. // }
  1778. // pStr++;
  1779. // continue;
  1780. // case 's':
  1781. // // 接收字符
  1782. // ArgStrVal = va_arg(pArgs, char*);
  1783. // ret_num += (uint32_t)strlen(ArgStrVal);
  1784. // while (*ArgStrVal)
  1785. // {
  1786. // my_send_char(*ArgStrVal);
  1787. // ArgStrVal++;
  1788. // }
  1789. //
  1790. // pStr++;
  1791. // continue;
  1792. //
  1793. // case 'f':
  1794. // // 接收浮点型 保留6为小数,不采取四舍五入
  1795. // ArgFloVal = va_arg(pArgs, double);
  1796. //
  1797. // if (ArgFloVal < 0)// 如果为负数打印,负号
  1798. // {
  1799. // ArgFloVal = -ArgFloVal;// 取相反数
  1800. //
  1801. // my_send_char('-');
  1802. // ret_num++;
  1803. // }
  1804. // val_seg = (uint32_t)ArgFloVal;// 取整数部分
  1805. // val_temp = val_seg; // 临时保存整数部分数据
  1806. // ArgFloVal = ArgFloVal - val_seg;// 得出余下的小数部分
  1807. // // 计算整数部分长度
  1808. // if (val_seg)
  1809. // {
  1810. // while (val_seg) {
  1811. // cnt++;
  1812. // val_seg /= 10;
  1813. // }
  1814. // }
  1815. // else cnt = 1;// 数字0的长度为1
  1816. // ret_num += cnt;// 字符个数加上整数的长度
  1817. // // 将整数转为单个字符打印
  1818. // while (cnt)
  1819. // {
  1820. // val_seg = val_temp / m_pow_n(10, cnt - 1);
  1821. // val_temp %= m_pow_n(10, cnt - 1);
  1822. // my_send_char((char)val_seg + '0');
  1823. // cnt--;
  1824. // }
  1825. // // 打印小数点
  1826. // my_send_char('.');
  1827. // ret_num++;
  1828. // // printf("\r\n %f\r\n", ArgFloVal);
  1829. // if(cnt_float == 0)
  1830. // cnt_float = 6;
  1831. //
  1832. // // 开始输出小数部分
  1833. // //ArgFloVal *= 1000000;
  1834. // ArgFloVal *= m_pow_n(10, cnt_float);
  1835. //
  1836. // val_temp = (int)ArgFloVal;// 取整数部分
  1837. // while (cnt_float)
  1838. // {
  1839. // val_seg = val_temp / m_pow_n(10, cnt_float - 1);
  1840. // val_temp %= m_pow_n(10, cnt_float - 1);
  1841. // my_send_char((char)val_seg + '0');
  1842. // cnt_float--;
  1843. // }
  1844. // ret_num += 6;
  1845. // pStr++;
  1846. // continue;
  1847. // default:// % 匹配错误,暂输出空格
  1848. // my_send_char(' '); ret_num++;
  1849. // break;
  1850. // }
  1851. // break;
  1852. //
  1853. //
  1854. // default:
  1855. // my_send_char(*pStr); ret_num++;
  1856. // break;
  1857. // }
  1858. // pStr++;
  1859. // }
  1860. // va_end(pArgs);// 结束取参数
  1861. //
  1862. // for(int i;i<ret_num;i++){
  1863. // g_ucU3TX_Data[i] = g_ucU3TX_buf[i];
  1864. // }
  1865. // g_ucU3TX_Last = 0;
  1866. // while(DMA2CONbits.CHEN);
  1867. // DMA2CNT=(ret_num-1);
  1868. // DMA2CONbits.CHEN = 1;
  1869. // DMA2REQbits.FORCE = 1;
  1870. //
  1871. //
  1872. // return ret_num;
  1873. //}