| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228 |
- /* -------------------------- (C) COPYRIGHT 2020 Fortiortech ShenZhen ---------------------------*/
- /* File Name : Communication.c
- /* Author : Fortiortech Appliction Team
- /* Version : V1.0
- /* Date : 2020-04-09
- /* Description : This file contains XX-XX-XX function used for Motor Control.
- /* ----------------------------------------------------------------------------------------------*/
- /* All Rights Reserved
- /* ----------------------------------------------------------------------------------------------*/
- #include "FU68xx_5.h"
- #include <Myproject.h>
- #include <Communication.h>
- /************** Private variables *********************/
- //MCUART xdata ubf_status;
- #if (Debugg==1)
- void CMDMONI_WT_INIT(void);
- static int zop_cmdcheck(void);
- static int zop_dummy(void);
- static int zop_cmd00(void);
- static int zop_cmd01(void);
- static int zop_cmd02(void);
- static int zop_cmd03(void);
- static int zop_cmd04(void);
- static int zop_cmd05(void);
- static int zop_cmd06(void);
- static int zop_cmd07(void);
- static int zop_cmd08(void);
- static int zop_cmd09(void);
- static int zop_cmd0A(void);
- static unsigned char zop_CalcCheckSum(unsigned char * p, int cnt);
- static void zop_ClearSendCmdBuffer(void);
- static void zop_PressSend(int cnt);
- static void zop_ComCmdCheck(int id, int ctp);
- static void zop_SetGetTraceData(void);
- static void zop_trig_check(int trig_ch, int trig_mode);
- static int zop_SetByteToInt(unsigned char * pByte);
- static int cmdmoni_getdata_size(int * adrs, char size);
- const uint16 LengthMask[4] = {127, 255, 511, 1023};
- unsigned char snd_ringbuf[SZ_SENDRINGBUF] = 0; //SZ_SENDRINGBUF
- int16 iRd = 0;
- int16 iWr = 0;
- unsigned char rcv_cmdbuf[SZ_RECVBUF] = 0; //SZ_RECVBUF
- unsigned char snd_cmdbuf[SZ_SENDBUF] = 0; //SZ_SENDBUF
- int buf_trace[SZ_TRACEBUF] = 0; //SZ_TRACEBUF
- int idy_trace = 0;
- int idy_copy_trace = 0;
- int iTraceCount = 0;
- uint16 iTraceCntMax = 0;
- uint16 iIntervalCount = 0;
- int16 iTraceID = 0;
- uint8 iReceiveCount = 0;
- int * ptr_adrs[CH_MAX] = 0; //CH_MAX
- char adrs_size[CH_MAX] = 0; //CH_MAX
- int iTrigLevel = 0;
- int iTrigDelay = 0;
- int itrig_cnt_delay = 0;
- int itrig_cnt_wait = 0;
- int itrig_data_old = 0;
- union UNION_STATUS xdata ubf_status;
- uint16 cnt_wt_timeout = 0;
- uint16 cnt_wt_timeout2 = 0; //
- void MD_WT_INTRE( void )
- {
- // REG_RESET();// 处理各种错误,如:针错误,数据超时等等
- }
- void MD_WT_INTR( void )
- {
- int iCmd = rcv_cmdbuf[0];
- rcv_cmdbuf[iReceiveCount] = UT_DR;
- iCmd = rcv_cmdbuf[0];
- iReceiveCount++;
-
- if (iReceiveCount >= SZ_RECVBUF)
- {
- iReceiveCount = 0;
- iRd = 0;
- iWr = 0;
- }
- }
- void senddeal(void)
- {
- int iCmd = 0;
- iCmd = rcv_cmdbuf[0];
-
- switch (iReceiveCount)
- {
- case RCVCMD6:
- if (iCmd == 0x01)
- {
- zop_cmd01();
- iReceiveCount = 0;
- break;
- }
-
- if (iCmd == 0x05)
- {
- zop_cmd05();
- iReceiveCount = 0;
- break;
- }
-
- if (iCmd == 0x07)
- {
- zop_cmd07();
- iReceiveCount = 0;
- break;
- }
-
- if (iCmd == 0x0A)
- {
- zop_cmd0A();
- iReceiveCount = 0;
- break;
- }
-
- break;
-
- case RCVCMD9:
- if (iCmd == 0x03)
- {
- zop_cmd03();
- iReceiveCount = 0;
- break;
- }
-
- if (iCmd == 0x09)
- {
- zop_cmd09();
- iReceiveCount = 0;
- break;
- }
-
- break;
-
- case RCVCMD11:
- if (iCmd == 0x06)
- {
- zop_cmd06();
- iReceiveCount = 0;
- }
-
- break;
-
- case RCVCMD14:
- if (iCmd == 0x04)
- {
- zop_cmd04();
- iReceiveCount = 0;
- }
-
- break;
-
- case RCVCMD16:
- if (iCmd == 0x08)
- {
- zop_cmd08();
- iReceiveCount = 0;
- }
-
- break;
- }
-
- return;
- }
- static void CMDMONI_WT_TRACEHALT(void)
- {
- if (ubf_status.bf.halt_trace == 0)
- {
- ubf_status.bf.halt_trace = 1;
- idy_copy_trace = idy_trace;
- }
- }
- static int cmdmoni_getdata_size(int * adrs, char size)
- {
- switch (size)
- {
- case 1:
- {
- char * ptr = (char *)(adrs);
- return ((int)(*ptr));
- }
- break;
-
- case 2:
- {
- short * ptr = (short *)(adrs);
- return ((int)(*ptr));
- }
- break;
-
- case 4:
- return ((int)(*adrs));
- break;
-
- default:
- return ((int)(*adrs));
- break;
- }
- }
- int16 xdata GPFCON1 _at_ 0x000C2; //IA
- int16 xdata GPFCON2 _at_ 0x000C4; //IB
- int16 xdata GPFCON3 _at_ 0x000C6; //UD
- int16 xdata GPFCON4 _at_ 0x000C8; //UQ
- int16 xdata GPFCON5 _at_ 0x000CA; //角度
- int16 xdata GPFCON6 _at_ 0x000A2; //母线电压
- int16 xdata GPFCON7 _at_ 0x000A4; //给定转速
- int16 xdata GPFCON8 _at_ 0x000A6; //反馈转速
- int16 xdata GPFCON9 _at_ 0x000A8; //ipm温度
- int16 xdata GPFCON10 _at_ 0x000AA; //开关机转太
- /*根据所获得的地址设至相应的发送数据*/
- void CMDMONI_WT_TRACEWATCH(void)
- {
- int msk = 0;
- int iBase = 0;
- int itrig_data_new;
- {
- if (iIntervalCount < ubf_status.bf.interval)
- {
- iIntervalCount++;
- return;
- }
- else
- {
- iIntervalCount = 0;
- }
- }
-
- switch (adrs_size[ubf_status.bf.ch_trig])
- {
- case 1:
- {
- char * ptr = (char *)(ptr_adrs[ubf_status.bf.ch_trig]);
- itrig_data_new = (int)(*ptr);
- }
- break;
-
- case 2:
- {
- short * ptr = (short *)(ptr_adrs[ubf_status.bf.ch_trig]);
- itrig_data_new = (int)(*ptr);
- }
- break;
-
- case 4:
- itrig_data_new = (int)(*ptr_adrs[ubf_status.bf.ch_trig]);
- break;
- }
-
- if (ubf_status.bf.halt_trace == 0)
- {
- msk = LengthMask[(ubf_status.bf.len_trace & 0x03)];
-
- switch (ubf_status.bf.ch_trace)
- {
- case 0:
- iBase = idy_trace;
- #if BIGENDIAN
- buf_trace[iBase + 0] = cmdmoni_getdata_size(ptr_adrs[0], adrs_size[0]);
- #else
- buf_trace[iBase + 0] = 25122; //*( int16 xdata *)(ptr_adrs[0]); //*ptr_adrs[0];//*ptr_adrs[0]:所放数据的地址
- #endif
- idy_trace++;
- idy_trace &= msk;
- break;
-
- case 1:
- iBase = idy_trace + idy_trace;
- #if BIGENDIAN
- buf_trace[iBase + 0] = cmdmoni_getdata_size(ptr_adrs[0], adrs_size[0]);
- buf_trace[iBase + 1] = cmdmoni_getdata_size(ptr_adrs[1], adrs_size[1]);
- #else
- // GPFCON1=FOC__IA;
- // GPFCON2=FOC__IB;
- buf_trace[iBase + 0] = *(( int16 xdata *)ptr_adrs[0]);//*(( uint8 xdata *)0x000C2);//*( int16 xdata *)(ptr_adrs[0]); //*ptr_adrs[0];
- buf_trace[iBase + 1] = *(( int16 xdata *)ptr_adrs[1]);//*(( int16 xdata *)0x000A2);//( int16 xdata *)ojhgt;//*( int16 xdata *)(ptr_adrs[1]);//*ptr_adrs[1];
- #endif
- idy_trace++;
- idy_trace &= msk;
- break;
-
- case 2:
- iBase = idy_trace + idy_trace + idy_trace;
- #if BIGENDIAN
- buf_trace[iBase + 0] = cmdmoni_getdata_size(ptr_adrs[0], adrs_size[0]);
- buf_trace[iBase + 1] = cmdmoni_getdata_size(ptr_adrs[1], adrs_size[1]);
- buf_trace[iBase + 2] = cmdmoni_getdata_size(ptr_adrs[2], adrs_size[2]);
- #else
- buf_trace[iBase + 0] = FOC__IA;//*( int16 xdata *)(ptr_adrs[0]);//*ptr_adrs[0];
- buf_trace[iBase + 1] = FOC__IB;//*( int16 xdata *)(ptr_adrs[1]);//*ptr_adrs[1];
- buf_trace[iBase + 2] = FOC__IC;//*( int16 xdata *)(ptr_adrs[2]);//*ptr_adrs[2];
- #endif
- idy_trace++;
- idy_trace &= msk;
- break;
-
- case 3:
- iBase = idy_trace + idy_trace + idy_trace + idy_trace;
- #if BIGENDIAN
- buf_trace[iBase + 0] = cmdmoni_getdata_size(ptr_adrs[0], adrs_size[0]);
- buf_trace[iBase + 1] = cmdmoni_getdata_size(ptr_adrs[1], adrs_size[1]);
- buf_trace[iBase + 2] = cmdmoni_getdata_size(ptr_adrs[2], adrs_size[2]);
- buf_trace[iBase + 3] = cmdmoni_getdata_size(ptr_adrs[3], adrs_size[3]);
- #else
- buf_trace[iBase + 0] = *( int16 xdata *)(ptr_adrs[0]);//*ptr_adrs[0];
- buf_trace[iBase + 1] = *( int16 xdata *)(ptr_adrs[1]);//*ptr_adrs[1];
- buf_trace[iBase + 2] = *( int16 xdata *)(ptr_adrs[2]); //*ptr_adrs[2];
- buf_trace[iBase + 3] = *( int16 xdata *)(ptr_adrs[3]);//*ptr_adrs[3];
- #endif
- idy_trace++;
- idy_trace &= msk;
- break;
- }
-
- itrig_cnt_wait++;
-
- if (itrig_cnt_wait > (msk * 2))
- {
- itrig_cnt_wait = msk * 2;
-
- if ((0 == ubf_status.bf.triggered) && (0 != ubf_status.bf.trig_en))
- {
- switch (ubf_status.bf.type_trig)
- {
- case 0: // rise
- if ((itrig_data_new >= iTrigLevel) && (itrig_data_old < iTrigLevel))
- {
- ubf_status.bf.triggered = 1;
- }
-
- break;
-
- case 1: // fall
- if ((itrig_data_new <= iTrigLevel) && (itrig_data_old > iTrigLevel))
- {
- ubf_status.bf.triggered = 1;
- }
-
- break;
-
- case 2: // rise & fall
- if (itrig_data_new >= iTrigLevel)
- {
- if (itrig_data_old < iTrigLevel)
- {
- ubf_status.bf.triggered = 1;
- }
- }
- else
- {
- if (itrig_data_old > iTrigLevel)
- {
- ubf_status.bf.triggered = 1;
- }
- }
-
- break;
-
- default: // no
- break;
- }
- }
- }
-
- if (0 != ubf_status.bf.triggered)
- {
- itrig_cnt_delay++;
-
- if (itrig_cnt_delay >= iTrigDelay)
- {
- CMDMONI_WT_TRACEHALT();
- return;
- }
- }
- }
- else
- {
- ubf_status.bf.triggered = 0;
- itrig_cnt_delay = 0;
- itrig_cnt_wait = 0;
-
- if (0 == ubf_status.bf.trig_normal)
- {
- ubf_status.bf.trig_en = 0;
- }
- }
-
- itrig_data_old = itrig_data_new;
- }
- void CMDMONI_WT_1MS(void)
- {
- if (iReceiveCount > 0)
- {
- cnt_wt_timeout++;
- }
- else
- {
- cnt_wt_timeout = 0;
- }
- }
- static void zop_ComCmdCheck(int id, int ctp)
- {
- snd_cmdbuf[0] = 0x8A;
- snd_cmdbuf[1] = 0x04;
- snd_cmdbuf[2] = id;
- snd_cmdbuf[3] = 0x00;
- snd_cmdbuf[4] = ctp;
- snd_cmdbuf[5] = zop_CalcCheckSum(snd_cmdbuf, 5);
- zop_PressSend(6);
- }
- static int zop_SetByteToInt(unsigned char * pByte)
- {
- union UNION_INT iDATA;
- #if BIGENDIAN
- iDATA.b[0] = *(pByte + 3);
- iDATA.b[1] = *(pByte + 2);
- iDATA.b[2] = *(pByte + 1);
- iDATA.b[3] = *(pByte + 0);
- #else
- iDATA.b[0] = *(pByte + 0);
- iDATA.b[1] = *(pByte + 1);
- iDATA.b[2] = *(pByte + 2);
- iDATA.b[3] = *(pByte + 3);
- #endif
- return iDATA.i;
- }
- // Hello
- // RE[6]: 01H,04H,id,00H,00H,CS
- // TX[8]: 81H,06H,id,STATUS(4),CS
- static int zop_cmd01(void)
- {
- uint8 cnt = RCVCMD6 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- snd_cmdbuf[0] = 0x81;
- snd_cmdbuf[1] = 0x06;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- #if BIGENDIAN
- snd_cmdbuf[3] = ubf_status.b[0];
- snd_cmdbuf[4] = ubf_status.b[1];
- snd_cmdbuf[6] = ubf_status.b[2];
- snd_cmdbuf[5] = ubf_status.b[3];
- #else
- snd_cmdbuf[3] = ubf_status.b[3];
- snd_cmdbuf[4] = ubf_status.b[2];
- snd_cmdbuf[6] = ubf_status.b[1];
- snd_cmdbuf[5] = ubf_status.b[0];
- #endif
- snd_cmdbuf[7] = zop_CalcCheckSum(snd_cmdbuf, 7);
- zop_PressSend(8);
- return 1;
- }
- static int zop_cmd02(void)
- {
- return 0;
- }
- // Read
- // RE[9]: 03H,07H,id,00H,ADRESS(4),CS
- // TX[13]: 83H,0BH,id,00H,ADRESS(4),DATA(4),CS
- static int zop_cmd03(void)
- {
- union UNION_DWORD xdata dwAdrs;
- union UNION_INT xdata iDATA;
- union UNION_INT xdata iDATA2;
- uint8 cnt = RCVCMD9 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- dwAdrs.dw = zop_SetByteToInt(&rcv_cmdbuf[4]);
-
- if (dwAdrs.dw == 0)
- {
- dwAdrs.dw = DEF_TRACEADDR;
- }
-
- #if BIGENDIAN
-
- switch (rcv_cmdbuf[3])
- {
- case 1:
- {
- char * ptr;
- ptr = (char *)(dwAdrs.dw);
- iDATA.b[0] = 0;
- iDATA.b[1] = 0;
- iDATA.b[2] = 0;
- iDATA.b[3] = *ptr++;
- }
- break;
-
- case 2:
- {
- char * ptr;
- ptr = (char *)(dwAdrs.dw);
- iDATA.b[0] = 0;
- iDATA.b[1] = 0;
- iDATA.b[2] = *ptr++;
- iDATA.b[3] = *ptr++;
- }
- break;
-
- default:
- {
- char * ptr;
- ptr = (char *)(dwAdrs.dw);
- iDATA.b[0] = *ptr++;
- iDATA.b[1] = *ptr++;
- iDATA.b[2] = *ptr++;
- iDATA.b[3] = *ptr++;
- }
- break;
- }
-
- #else
- iDATA.i = *(( int16 xdata *)dwAdrs.dw);;//*(int *)(0x40c6 );
- #endif
- snd_cmdbuf[0] = 0x83;
- snd_cmdbuf[1] = 0x0B;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- snd_cmdbuf[3] = 0x00;
- #if BIGENDIAN
- snd_cmdbuf[4] = dwAdrs.b[0];
- snd_cmdbuf[5] = dwAdrs.b[1];
- snd_cmdbuf[6] = dwAdrs.b[2];
- snd_cmdbuf[7] = dwAdrs.b[3];
- snd_cmdbuf[8] = iDATA.b[0];
- snd_cmdbuf[9] = iDATA.b[1];
- snd_cmdbuf[10] = iDATA.b[2];
- snd_cmdbuf[11] = iDATA.b[3];
- #else
- snd_cmdbuf[4] = dwAdrs.b[3];
- snd_cmdbuf[5] = dwAdrs.b[2];
- snd_cmdbuf[6] = dwAdrs.b[1];
- snd_cmdbuf[7] = dwAdrs.b[0];
- snd_cmdbuf[8] = iDATA.b[0];
- snd_cmdbuf[9] = iDATA.b[1];
- snd_cmdbuf[10] = iDATA.b[2];
- snd_cmdbuf[11] = iDATA.b[3];
- #endif
- snd_cmdbuf[12] = zop_CalcCheckSum(snd_cmdbuf, 12);
- zop_PressSend(13);
- return 3;
- }
- // Write
- // RE[14]: 04H,0CH,id,00H,DATASIZE(1)ADRESS(4),DATA(4),CS
- // TX[13]: 84H,0BH,id,00H,ADRESS(4),DATA(4),CS
- static int zop_cmd04(void)
- {
- union UNION_DWORD xdata dwADRS;
- union UNION_INT xdata iDATA;
- uint8 cnt = RCVCMD14 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- dwADRS.dw = zop_SetByteToInt(&rcv_cmdbuf[5]);
-
- if (dwADRS.dw == 0)
- {
- dwADRS.dw = DEF_TRACEADDR;
- }
-
- iDATA.i = zop_SetByteToInt(&rcv_cmdbuf[9]);
-
- switch (rcv_cmdbuf[4])
- {
- case 1:
- #if BIGENDIAN
- *(char *)(dwADRS.dw) = iDATA.i;
- #else
- dwADRS.b[3] = 0;
- dwADRS.b[2] = 0;
- dwADRS.b[1] = 0;
- dwADRS.b[0] = iDATA.b[0];
- // *(char *)(dwADRS.dw) = iDATA.b[0];
- #endif
- break;
-
- case 2:
- #if BIGENDIAN
- *(short *)(dwADRS.dw) = iDATA.i;
- #else
- {
- union UNION_SHORT sSHORT;
- //// iDATA.b[3] = 0;
- //// iDATA.b[2] = 0;
- sSHORT.b[1] = iDATA.b[3];
- sSHORT.b[0] = iDATA.b[2];
- *(( int16 xdata *)dwADRS.dw) = sSHORT.s;
- }
- #endif
- break;
-
- case 4:
- *(int *)(dwADRS.dw) = iDATA.i;
- break;
- }
-
- snd_cmdbuf[0] = 0x84;
- snd_cmdbuf[1] = 0x0B;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- snd_cmdbuf[3] = 0x00;
- #if BIGENDIAN
- snd_cmdbuf[4] = dwADRS.b[0];
- snd_cmdbuf[5] = dwADRS.b[1];
- snd_cmdbuf[6] = dwADRS.b[2];
- snd_cmdbuf[7] = dwADRS.b[3];
- snd_cmdbuf[8] = iDATA.b[0];
- snd_cmdbuf[9] = iDATA.b[1];
- snd_cmdbuf[10] = iDATA.b[2];
- snd_cmdbuf[11] = iDATA.b[3];
- #else
- snd_cmdbuf[4] = dwADRS.b[0];
- snd_cmdbuf[5] = dwADRS.b[1];
- snd_cmdbuf[6] = dwADRS.b[2];
- snd_cmdbuf[7] = dwADRS.b[3];
- snd_cmdbuf[8] = iDATA.b[0];
- snd_cmdbuf[9] = iDATA.b[1];
- snd_cmdbuf[10] = iDATA.b[2];
- snd_cmdbuf[11] = iDATA.b[3];
- #endif
- snd_cmdbuf[12] = zop_CalcCheckSum(snd_cmdbuf, 12);
- zop_PressSend(13);
- return 4;
- }
- // GetTrace
- // RE[6]: 05H,04H,id,00H,00H,CS
- // TXHEAD[7]: 85H,05H,id,00H,Halt(2),cs //Halt(2)通道
- // TXBODY[?]: 85H,??H,id,FFH,NUM(2),{DATA(4) * (CHANNEL)},CS//数据
- static int zop_cmd05(void)
- {
- uint8 cnt = RCVCMD6 - 1;
- union UNION_WORD xdata wd;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- if (ubf_status.bf.cmd_gettrace)
- {
- return 0;
- }
-
- CMDMONI_WT_TRACEHALT();
- iTraceID = rcv_cmdbuf[2];
- iTraceCount = 0;
- iTraceCntMax = (0x80 << ubf_status.bf.len_trace);
- ubf_status.bf.cmd_gettrace = 1;
- wd.w = idy_copy_trace;
- snd_cmdbuf[0] = 0x85;
- snd_cmdbuf[1] = 0x05;
- snd_cmdbuf[2] = iTraceID;
- snd_cmdbuf[3] = 0x00;
- #if BIGENDIAN
- snd_cmdbuf[4] = wd.b[0];
- snd_cmdbuf[5] = wd.b[1];
- #else
- snd_cmdbuf[5] = wd.b[1];
- snd_cmdbuf[4] = wd.b[0];
- #endif
- snd_cmdbuf[6] = zop_CalcCheckSum(snd_cmdbuf, 6);
- zop_PressSend(7);
- return 5;
- }
- //int pokujg=0;
- // SetTraceAddress
- // RE[11]: 06H,09H,id,00H,CHANNEL(1),DATASIZE(1),ADRESS(4),CS
- // TX[6]: 86H,04H,id,00H,00H,CS
- static int zop_cmd06(void)
- {
- uint8 cnt = RCVCMD11 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- {
- int iCH = (rcv_cmdbuf[4] & 0x03);
- int dwAdrs = zop_SetByteToInt(&rcv_cmdbuf[6]);
-
- if (dwAdrs == 0)
- {
- dwAdrs = DEF_TRACEADDR;
- }
-
- ptr_adrs[iCH] = (int *)dwAdrs;
- adrs_size[iCH] = rcv_cmdbuf[5];
- }
-
- //pokujg=ptr_adrs[0];
- snd_cmdbuf[0] = 0x86;
- snd_cmdbuf[1] = 0x04;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- snd_cmdbuf[3] = 0x00;
- snd_cmdbuf[4] = 0x00;
- snd_cmdbuf[5] = zop_CalcCheckSum(snd_cmdbuf, 5);
- zop_PressSend(6);
- return 6;
- }
- // TraceHALT_Clear
- // RE[6]: 07H,04H,id,00H,00H,CS
- // TX[6]: 87H,04H,id,00H,00H,CS
- static int zop_cmd07(void)
- {
- uint8 cnt = RCVCMD6 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- snd_cmdbuf[0] = 0x87;
- snd_cmdbuf[1] = 0x04;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- snd_cmdbuf[3] = 0x00;
- snd_cmdbuf[4] = 0x00;
- snd_cmdbuf[5] = zop_CalcCheckSum(snd_cmdbuf, 5);
- zop_PressSend(6);
- return 7;
- }
- // SetTriggerEnvironment
- // RE[16]: 08H,0EH,id,00H,TRIG CHANNEL(1),TRIG MODE(1),TRIG TYPE(1),UP LEVEL(4),LO LEVEL(4),CS
- // TX[6]: 88H,04H,id,00H,00H,CS
- static int zop_cmd08(void)
- {
- int16 TG_ch = (rcv_cmdbuf[4] & 0x03);
- int16 TG_mode = (rcv_cmdbuf[5] & 0x01);
- int16 TG_type = (rcv_cmdbuf[6] & 0x07);
- int LV_up = zop_SetByteToInt(&rcv_cmdbuf[7]);
- int LV_lo = zop_SetByteToInt(&rcv_cmdbuf[11]);
- int cnt = RCVCMD16 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- ubf_status.bf.trig_normal = 0;
-
- if (TG_mode)
- {
- ubf_status.bf.trig_normal = 1;
- }
-
- ubf_status.bf.ch_trig = TG_ch;
-
- if (TG_ch > ubf_status.bf.ch_trace)
- {
- TG_ch = ubf_status.bf.ch_trace;
- }
-
- ubf_status.bf.type_trig = TG_type;
- iTrigLevel = LV_up;
- iTrigDelay = LV_lo;
- snd_cmdbuf[0] = 0x88;
- snd_cmdbuf[1] = 0x04;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- snd_cmdbuf[3] = 0x00;
- snd_cmdbuf[4] = 0x00;
- snd_cmdbuf[5] = zop_CalcCheckSum(snd_cmdbuf, 5);
- zop_PressSend(6);
- ubf_status.bf.trig_en = 1;
- return 8;
- }
- // SetTraceEnvironment
- // RE[9]: 09H,07H,id,00H,DATA LENGTH(1),CHANEEL NUM(1),INTERVEL(2),CS
- // TX[6]: 89H,04H,id,00H,00H,CS
- static int zop_cmd09(void)
- {
- union UNION_WORD uword;
- uint8 cnt = RCVCMD9 - 1;
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- #if BIGENDIAN
- uword.b[1] = rcv_cmdbuf[6];
- uword.b[0] = rcv_cmdbuf[7];
- #else
- uword.b[0] = rcv_cmdbuf[6];
- uword.b[1] = rcv_cmdbuf[7];
- #endif
- ubf_status.bf.interval = uword.w;
- snd_cmdbuf[0] = 0x89;
- snd_cmdbuf[1] = 0x04;
- snd_cmdbuf[2] = rcv_cmdbuf[2];
- snd_cmdbuf[3] = 0x00;
- snd_cmdbuf[4] = 0x00;
- snd_cmdbuf[5] = zop_CalcCheckSum(snd_cmdbuf, 5);
- zop_PressSend(6);
- return 9;
- }
- // RE[6]: 0AH,04H,id,00H,CHECK TYPE(1),CS
- // TX[6]: 8AH,04H,id,00H,CHECK TYPE(1),CS
- static int zop_cmd0A(void)
- {
- uint8 cnt = RCVCMD6 - 1;
- int16 iChkType = rcv_cmdbuf[4];
- unsigned char sum = zop_CalcCheckSum(rcv_cmdbuf, cnt);
-
- if (rcv_cmdbuf[cnt] != sum)
- {
- return 0;
- }
-
- // UserTraceHalt
- if (iChkType == 0)
- {
- CMDMONI_WT_TRACEHALT();
- }
-
- // UserTraceHalt Clear
- if (iChkType == 1)
- {
- ubf_status.bf.halt_trace = 0;
- }
-
- zop_ComCmdCheck((int)rcv_cmdbuf[2], (int)rcv_cmdbuf[4]);
- return 10;
- }
- /*TRACE 发送数据的处理*/
- void CMDMONI_WT_CHECKCMD(void)
- {
- static int8 uiui = 0;
-
- if (! ubf_status.bf.cmd_gettrace)
- {
- return;
- }
-
- {
- int s = iRd - iWr;
-
- if (s <= 0)
- {
- s += SZ_SENDRINGBUF;
- }
-
- if (s < 64)
- {
- return;
- }
- }
-
- // if(uiui<250)
- {
- // uiui++;
- zop_SetGetTraceData();
- iTraceCount++;
-
- if (iTraceCount >= iTraceCntMax)
- {
- ubf_status.bf.halt_trace = 0;
- ubf_status.bf.cmd_gettrace = 0;
- }
- }
- }
- uint8 txbuff = 0;
- /*一般数据发送的处理*/
- void CMDMONI_WT_SENDCMD(void)
- {
- if ((cnt_wt_timeout > 100) || (cnt_wt_timeout2 > 100))
- {
- CMDMONI_WT_INIT();
- cnt_wt_timeout = 0;
- cnt_wt_timeout2 = 0;
- return;
- }
-
- if ((iRd != iWr) && (TI == 0))
- {
- txbuff = snd_ringbuf[iRd];//while (TI==0){};TI=0;
- UT_DR = txbuff;
- iRd++;
-
- if (iRd >= SZ_SENDRINGBUF) //
- { iRd = 0; }
-
- cnt_wt_timeout2 = 0;
- }
- }
- void CMDMONI_WT_INIT(void)
- {
- iReceiveCount = 0;
- iRd = 0;
- iWr = 0;
- idy_trace = 0;
- idy_copy_trace = 0;
- iTraceCount = 0;
- iTraceCntMax = 0;
- iIntervalCount = 0;
- iTraceID = 0;
- {
- uint8 i;
-
- for (i = 0; i < CH_MAX; i++)
- {
- ptr_adrs[i] = (int *)DEF_TRACEADDR;
- adrs_size[i] = 4;
- }
- }
- ubf_status.ui = 0;
- ubf_status.bf.trig_support = 1;
- ubf_status.bf.ch_trace = CH_MAX - 1;
- ubf_status.bf.len_trace = LEN_TRACE;
- }
- static unsigned char zop_CalcCheckSum(unsigned char * p, int cnt)
- {
- uint8 i;
- int sum = 0;
-
- for (i = 0; i < cnt; i++)
- {
- sum += *p++;
- }
-
- sum = ~sum + 1;
- sum = sum & 0x0FF;
- return sum;
- }
- //uint8 faflag=0;
- static void zop_PressSend(int cnt)
- {
- uint8 i;
-
- for (i = 0; i < cnt; i++)
- {
- snd_ringbuf[iWr] = snd_cmdbuf[i];
- iWr++;
-
- if (iWr >= SZ_SENDRINGBUF)
- { iWr = 0; }
- }
-
- // faflag=1;
- }
- // GetTrace
- // TX HEAD[7]: 85H,05H,id,00H,Halt?C???f?N?X(2),cs
- // TX BODY[?]: 85H,??H,id,FFH,NUM(2),{DATA(4) * (CHANNEL NUM)},CS
- static void zop_SetGetTraceData(void)
- {
- int msk = LengthMask[(ubf_status.bf.len_trace & 0x03)];
- union UNION_WORD xdata wd;
- union UNION_INT xdata ui;
- int iDATA0 = 0;
- int iDATA1 = 0;
- int iDATA2 = 0;
- int iDATA3 = 0;
- wd.w = iTraceCount;
- snd_cmdbuf[0] = 0x85;
- snd_cmdbuf[1] = 0x00;
- snd_cmdbuf[2] = iTraceID;
- snd_cmdbuf[3] = 0xFF;
- #if BIGENDIAN
- snd_cmdbuf[5] = wd.b[0];
- snd_cmdbuf[4] = wd.b[1];
- #else
- snd_cmdbuf[5] = wd.b[1];
- snd_cmdbuf[4] = wd.b[0];
- #endif
-
- switch (ubf_status.bf.ch_trace)
- {
- case 0:
- snd_cmdbuf[1] = 0x09;
- {
- int iBase = idy_copy_trace;
- iDATA0 = buf_trace[iBase + 0];
- idy_copy_trace++;
- idy_copy_trace &= msk;
- }
- ui.i = iDATA0;
- #if BIGENDIAN
- snd_cmdbuf[9] = ui.b[0];
- snd_cmdbuf[8] = ui.b[1];
- snd_cmdbuf[7] = ui.b[2];
- snd_cmdbuf[6] = ui.b[3];
- #else
- snd_cmdbuf[9] = ui.b[3];
- snd_cmdbuf[8] = ui.b[2];
- snd_cmdbuf[7] = ui.b[1];
- snd_cmdbuf[6] = ui.b[0];
- #endif
- snd_cmdbuf[10] = zop_CalcCheckSum(snd_cmdbuf, 10);
- zop_PressSend(11);
- break;
-
- case 1:
- snd_cmdbuf[1] = 0x0D;
- {
- int iBase = (idy_copy_trace + idy_copy_trace);
- iDATA0 = buf_trace[iBase + 0];
- iDATA1 = buf_trace[iBase + 1];
- idy_copy_trace++;
- idy_copy_trace &= msk;
- }
- ui.i = iDATA0;
- #if BIGENDIAN
- snd_cmdbuf[9] = ui.b[0];
- snd_cmdbuf[8] = ui.b[1];
- snd_cmdbuf[7] = ui.b[2];
- snd_cmdbuf[6] = ui.b[3];
- #else
- snd_cmdbuf[9] = ui.b[3];
- snd_cmdbuf[8] = ui.b[2];
- snd_cmdbuf[7] = ui.b[1];
- snd_cmdbuf[6] = ui.b[0];
- #endif
- ui.i = iDATA1;
- #if BIGENDIAN
- snd_cmdbuf[13] = ui.b[0];
- snd_cmdbuf[12] = ui.b[1];
- snd_cmdbuf[11] = ui.b[2];
- snd_cmdbuf[10] = ui.b[3];
- #else
- snd_cmdbuf[13] = ui.b[3];
- snd_cmdbuf[12] = ui.b[2];
- snd_cmdbuf[11] = ui.b[1];
- snd_cmdbuf[10] = ui.b[0];
- #endif
- snd_cmdbuf[14] = zop_CalcCheckSum(snd_cmdbuf, 14);
- zop_PressSend(15);
- break;
-
- case 2:
- snd_cmdbuf[1] = 0x11;
- {
- int iBase = (idy_copy_trace + idy_copy_trace + idy_copy_trace);
- iDATA0 = buf_trace[iBase + 0];
- iDATA1 = buf_trace[iBase + 1];
- iDATA2 = buf_trace[iBase + 2];
- idy_copy_trace++;
- idy_copy_trace &= msk;
- }
- ui.i = iDATA0;
- #if BIGENDIAN
- snd_cmdbuf[6] = ui.b[0];
- snd_cmdbuf[7] = ui.b[1];
- snd_cmdbuf[8] = ui.b[2];
- snd_cmdbuf[9] = ui.b[3];
- #else
- snd_cmdbuf[6] = ui.b[3];
- snd_cmdbuf[7] = ui.b[2];
- snd_cmdbuf[8] = ui.b[1];
- snd_cmdbuf[9] = ui.b[0];
- #endif
- ui.i = iDATA1;
- #if BIGENDIAN
- snd_cmdbuf[10] = ui.b[0];
- snd_cmdbuf[11] = ui.b[1];
- snd_cmdbuf[12] = ui.b[2];
- snd_cmdbuf[13] = ui.b[3];
- #else
- snd_cmdbuf[10] = ui.b[3];
- snd_cmdbuf[11] = ui.b[2];
- snd_cmdbuf[12] = ui.b[1];
- snd_cmdbuf[13] = ui.b[0];
- #endif
- ui.i = iDATA2;
- #if BIGENDIAN
- snd_cmdbuf[14] = ui.b[0];
- snd_cmdbuf[15] = ui.b[1];
- snd_cmdbuf[16] = ui.b[2];
- snd_cmdbuf[17] = ui.b[3];
- #else
- snd_cmdbuf[14] = ui.b[3];
- snd_cmdbuf[15] = ui.b[2];
- snd_cmdbuf[16] = ui.b[1];
- snd_cmdbuf[17] = ui.b[0];
- #endif
- snd_cmdbuf[18] = zop_CalcCheckSum(snd_cmdbuf, 18);
- zop_PressSend(19);
- break;
-
- case 3:
- snd_cmdbuf[1] = 0x15;
- {
- int iBase = (idy_copy_trace + idy_copy_trace + idy_copy_trace + idy_copy_trace);
- iDATA0 = buf_trace[iBase + 0];
- iDATA1 = buf_trace[iBase + 1];
- iDATA2 = buf_trace[iBase + 2];
- iDATA3 = buf_trace[iBase + 3];
- idy_copy_trace++;
- idy_copy_trace &= msk;
- }
- ui.i = iDATA0;
- #if BIGENDIAN
- snd_cmdbuf[6] = ui.b[0];
- snd_cmdbuf[7] = ui.b[1];
- snd_cmdbuf[8] = ui.b[2];
- snd_cmdbuf[9] = ui.b[3];
- #else
- snd_cmdbuf[6] = ui.b[3];
- snd_cmdbuf[7] = ui.b[2];
- snd_cmdbuf[8] = ui.b[1];
- snd_cmdbuf[9] = ui.b[0];
- #endif
- ui.i = iDATA1;
- #if BIGENDIAN
- snd_cmdbuf[10] = ui.b[0];
- snd_cmdbuf[11] = ui.b[1];
- snd_cmdbuf[12] = ui.b[2];
- snd_cmdbuf[13] = ui.b[3];
- #else
- snd_cmdbuf[10] = ui.b[3];
- snd_cmdbuf[11] = ui.b[2];
- snd_cmdbuf[12] = ui.b[1];
- snd_cmdbuf[13] = ui.b[0];
- #endif
- ui.i = iDATA2;
- #if BIGENDIAN
- snd_cmdbuf[14] = ui.b[0];
- snd_cmdbuf[15] = ui.b[1];
- snd_cmdbuf[16] = ui.b[2];
- snd_cmdbuf[17] = ui.b[3];
- #else
- snd_cmdbuf[14] = ui.b[3];
- snd_cmdbuf[15] = ui.b[2];
- snd_cmdbuf[16] = ui.b[1];
- snd_cmdbuf[17] = ui.b[0];
- #endif
- ui.i = iDATA3;
- #if BIGENDIAN
- snd_cmdbuf[18] = ui.b[0];
- snd_cmdbuf[19] = ui.b[1];
- snd_cmdbuf[20] = ui.b[2];
- snd_cmdbuf[21] = ui.b[3];
- #else
- snd_cmdbuf[18] = ui.b[3];
- snd_cmdbuf[19] = ui.b[2];
- snd_cmdbuf[20] = ui.b[1];
- snd_cmdbuf[21] = ui.b[0];
- #endif
- snd_cmdbuf[22] = zop_CalcCheckSum(snd_cmdbuf, 22);
- zop_PressSend(23);
- break;
- }
- }
- void PC_MONITOR_MAIN(void)
- {
- CMDMONI_WT_CHECKCMD();
- }
- void PC_MONITOR_1MS(void)
- {
- CMDMONI_WT_1MS();
- }
- void PC_MONITOR_PWM(void)
- {
- CMDMONI_WT_TRACEWATCH();
- }
- void PC_MONITOR_INTR(void)
- {
- {
- MD_WT_INTR();
- }
- }
- #endif
|