Dmitry Kovalev
/
LG2
fork
Fork of LG by
Command.c
- Committer:
- Kovalev_D
- Date:
- 2016-04-15
- Revision:
- 136:19b9e6abb86f
- Parent:
- 131:ef5973569c02
- Child:
- 137:8b99cf0842f9
- Child:
- 145:f023b2f18b82
File content as of revision 136:19b9e6abb86f:
#include "stdlib.h" #include "LPC17xx.h" #include "Global.h" int tempNH,tempNL; unsigned int Rate_Flag; unsigned int CountBuFFIn; unsigned int N=0,CRC_N; unsigned int Param1=0; unsigned int Param2=0; unsigned int Param3=0; unsigned int Param4=0; unsigned int Consol=123; unsigned int TempParam=1; unsigned int CountParam=0; unsigned int pDestT ; GyroParam *Flash; void ReadFlash ( void) { WriteCon("\r\n Pirivet Flash"); pDestT= (unsigned int) (0x10000); Flash = (GyroParam*) pDestT; GyroP = *(Flash); sprintf((Time)," dffddfd <%07d> ", GyroP.Str.K_WP_rst_heating); WriteCon(Time); } unsigned int memdump( char *base, int n ) { unsigned int *p; printf( " memdump from 0x%08X for %d bytes", (unsigned long)base, n ); p = (unsigned int *)((unsigned int)base & ~(unsigned int)0x3); for ( int i = 0; i < (n >> 2); i++, p++ ) { if ( !(i % 4) ) printf( "\r\n 0x%08X :", (unsigned int)p ); printf( " 0x%08X", *p ); } printf( "\r\n" ); } void CMD_M_Param_R(void) { unsigned int NP; unsigned int Param; BuffTemp[0] = Gyro.SOC_Out; BuffTemp[1] = Gyro.My_Addres; NP = BuffTemp[3]; Param = GyroP.Array[NP]; BuffTemp[2] =(Param >> 8) & 0xff;//старший байт требуемого параметра BuffTemp[3] =(Param >> 0) & 0xff;//младший байт требуемого параметра Check(BuffTemp, 6); WriteConN (BuffTemp,6); } void CMD_M_Param_W(void) { unsigned int NP; unsigned int Param; NP = BuffTemp[3]; Param = (BuffTemp[4]<<8); Param |= BuffTemp[5]; GyroP.Array[NP] = Param; BuffTemp[0] = Gyro.SOC_Out; BuffTemp[1] = Gyro.My_Addres; BuffTemp[2] = Gyro.CMD_In; BuffTemp[3] = 0x00;//старший байт требуемого параметра Check(BuffTemp, 6); WriteConN (BuffTemp,6); } void CMD_Maintenance(void) { BuffTemp[0] = Gyro.SOC_Out; BuffTemp[1] = Gyro.My_Addres; BuffTemp[2] = Gyro.Firmware_Version; BuffTemp[3] = Gyro.GLD_Serial; BuffTemp[4]=0x00; BuffTemp[5]=0x00; Check(BuffTemp, 8); WriteConN (BuffTemp,8); } void CMD_Delta_500Hz(void) { Gyro.Delta500_Event=0; unsigned int Temp; BuffTemp[ 0] = Gyro.SOC_Out; BuffTemp[ 1] = Gyro.My_Addres; Temp = Gyro.CuruAngle; Gyro.CuruAngle = 0; BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков BuffTemp[ 4] = CountParam; switch(CountParam) { //F_ras case 0: Temp = Gyro.F_ras; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 1: BuffTemp[5] = (Temp >> 0) & 0xff; break; //HFO case 2: Temp = 0;//HFO BuffTemp[5] = (Temp >> 8) & 0xff; break; case 3: Temp = 0;//HFO BuffTemp[5] = (Temp >> 0) & 0xff; break; //T_Vibro case 4: Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12))); BuffTemp[5] = (Temp >> 8) & 0xff; break; case 5: BuffTemp[5] = (Temp >> 0) & 0xff; break; //L_Vibro case 6: Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12))); BuffTemp[5] = (Temp >> 8) & 0xff; break; case 7: BuffTemp[5] = (Temp >> 0) & 0xff; break; //Напряжение на регуляторе периметра case 8: Temp = Spi.DAC_B - 0x7fff; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 9: BuffTemp[5] = (Temp >> 0) & 0xff; break; //темпкратурный канал 0 case 10: Temp = 100; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 11: BuffTemp[5] = (Temp >> 0) & 0xff; break; //темпкратурный канал 1 case 12: Temp = Gyro.AD_Slow >> 16; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 13: BuffTemp[5] = (Temp >> 0) & 0xff; break; //ток 1 case 14: Temp = Gyro.In1; BuffTemp[5] = (Temp >> 8) & 0xff;//in1//2 break; case 15: BuffTemp[5] = (Temp >> 0) & 0xff; break; //ток 2 case 16: Temp = Gyro.In2; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 17: BuffTemp[5] = (Temp >> 0) & 0xff;//in2//3 break; //разностный температурный канал Delta Temp case 18: Temp = Gyro.DeltaT; BuffTemp[5] = (Temp >> 8) & 0xff;//дельта break; case 19: BuffTemp[5] = (Temp >> 0) & 0xff; break; //температурный канал 5 case 20: Temp = Gyro.Termo;//0xa4=164 BuffTemp[5] =(Temp >> 8) & 0xff;//температура break; case 21: BuffTemp[5] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5 break; } Check(BuffTemp, 6); WriteConN (BuffTemp,6); CountParam++; if(CountParam>21)CountParam=0;//зацикливания буфера от 0 до 21 } void CMD_Delta_Ext(void) { unsigned int Temp; Gyro.EXT_Latch=0; BuffTemp[ 0] = Gyro.SOC_Out; BuffTemp[ 1] = Gyro.My_Addres; Temp = Gyro.CuruAngle; Gyro.CuruAngle = 0; BuffTemp[ 2] =(Temp >> 8) & 0xff;//старший байт разности счетчиков BuffTemp[ 3] =(Temp >> 0) & 0xff;//младший байт разности счетчиков BuffTemp[ 4] = CountParam; switch(CountParam) { WriteCon("5"); //F_ras case 0: Temp = Gyro.F_ras; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 1: BuffTemp[5] = (Temp >> 0) & 0xff; break; //HFO case 2: Temp = 0;//HFO BuffTemp[5] = (Temp >> 8) & 0xff; break; case 3: Temp = 0;//HFO BuffTemp[5] = (Temp >> 0) & 0xff; break; //T_Vibro case 4: Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12))); BuffTemp[5] = (Temp >> 8) & 0xff; break; case 5: BuffTemp[5] = (Temp >> 0) & 0xff; break; //L_Vibro case 6: Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12))); BuffTemp[5] = (Temp >> 8) & 0xff; break; case 7: BuffTemp[5] = (Temp >> 0) & 0xff; break; //Напряжение на регуляторе периметра case 8: Temp = Spi.DAC_B - 0x7fff; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 9: BuffTemp[5] = (Temp >> 0) & 0xff; break; //темпкратурный канал 0 case 10: Temp = 100; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 11: BuffTemp[5] = (Temp >> 0) & 0xff; break; //темпкратурный канал 1 case 12: Temp = Gyro.AD_Slow >> 16; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 13: BuffTemp[5] = (Temp >> 0) & 0xff; break; //ток 1 case 14: Temp = Gyro.In1; BuffTemp[5] = (Temp >> 8) & 0xff;//in1//2 break; case 15: BuffTemp[5] = (Temp >> 0) & 0xff; break; //ток 2 case 16: Temp = Gyro.In2; BuffTemp[5] = (Temp >> 8) & 0xff; break; case 17: BuffTemp[5] = (Temp >> 0) & 0xff;//in2//3 break; //разностный температурный канал Delta Temp case 18: Temp = Gyro.DeltaT; BuffTemp[5] = (Temp >> 8) & 0xff;//дельта break; case 19: BuffTemp[5] = (Temp >> 0) & 0xff; break; //температурный канал 5 case 20: Temp = Gyro.Termo;//0xa4=164 BuffTemp[5] =(Temp >> 8) & 0xff;//температура break; case 21: BuffTemp[5] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5 break; } Check(BuffTemp, 8); WriteConN (BuffTemp,8); CountParam++; if(CountParam>21)CountParam=0;//зацикливания буфера от 0 до 21 } void CMD_Rate2(void) { Gyro.Rate2_Event=0; BuffTemp[ 0] = Gyro.SOC_Out; BuffTemp[ 1] = Gyro.My_Addres; BuffTemp[ 2] =(Gyro.CaunPlus >> 8) & 0xff;//старший байт счетчика +. BuffTemp[ 3] =(Gyro.CaunPlus >> 0) & 0xff;//младший байт счетчика +. BuffTemp[ 4] =(Gyro.CaunMin >> 8) & 0xff;//старший байт счетчика -. BuffTemp[ 5] =(Gyro.CaunMin >> 0) & 0xff;//младший байт счетчика -. Check(BuffTemp, 8); WriteConN (BuffTemp,8); } void CMD_Rate(void) { Gyro.Rate1_Event=0; unsigned int Temp; Gyro.Firmware_Version=0xff; /// промежуточная затычка BuffTemp[ 0] = Gyro.SOC_Out; BuffTemp[ 1] = Gyro.My_Addres; BuffTemp[ 2] =(Gyro.CaunPlus >> 8) & 0xff;//старший байт счетчика +. BuffTemp[ 3] =(Gyro.CaunPlus >> 0) & 0xff;//младший байт счетчика +. BuffTemp[ 4] =(Gyro.CaunMin >> 8) & 0xff;//старший байт счетчика -. BuffTemp[ 5] =(Gyro.CaunMin >> 0) & 0xff;//младший байт счетчика -. Temp = Gyro.CuruAngle; Gyro.CuruAngle = 0; Temp = Gyro.AD_Fast >> 16; BuffTemp[ 6] =(Temp >> 8) & 0xff;//старший байт разности счетчиков BuffTemp[ 7] =(Temp >> 0) & 0xff;//младший байт разности счетчиков Temp = Gyro.F_ras; BuffTemp[ 8] = (Temp >> 8) & 0xff;//расщипление частота BuffTemp[ 9] = (Temp >> 0) & 0xff;// BuffTemp[10] = (Temp >> 8) & 0xff;//выход регулятора гвч; BuffTemp[11] = (Temp >> 0) & 0xff; Temp = (Gyro.AD_Slow >> 16)- 0x7fff; BuffTemp[12]=(Temp >> 8) & 0xff;//// BuffTemp[13]=(Temp >> 0) & 0xff;//// Temp = (unsigned int)((7680000*16/(Gyro.Frq>>12))); BuffTemp[14] = (Temp >> 8) & 0xff; BuffTemp[15] = (Temp >> 0) & 0xff; BuffTemp[16] = 0xf; BuffTemp[17] = 0x02; Temp = (unsigned int)(((7680000*16/200) *Gyro.AmpPer /(Gyro.Frq>>12))); BuffTemp[18] = (Temp >> 8) & 0xff; BuffTemp[19] = (Temp >> 0) & 0xff; BuffTemp[20] = 0x00; BuffTemp[21] = 0x00; Temp = Spi.DAC_B - 0x7fff; BuffTemp[22] = (Temp >> 8) & 0xff; BuffTemp[23] = (Temp >> 0) & 0xff; Temp = Gyro.PLC_Delta >> 16; BuffTemp[24] = (Temp >> 8) & 0xff; BuffTemp[25] = (Temp >> 0) & 0xff;// ХЗ Temp = 100; Temp = Gyro.AD_Slow >> 16; BuffTemp[26] = (Temp >> 8) & 0xff; BuffTemp[27] = (Temp >> 0) & 0xff; Temp = Gyro.AD_Slow >> 16; BuffTemp[28] = (Temp >> 8) & 0xff; BuffTemp[29] = (Temp >> 0) & 0xff; Temp = Gyro.In1; BuffTemp[30] = (Temp >> 8) & 0xff;//in1//2 BuffTemp[31] = (Temp >> 0) & 0xff; Temp = Gyro.In2; BuffTemp[32] = (Temp >> 8) & 0xff; BuffTemp[33] = (Temp >> 0) & 0xff;//in2//3 Temp = Gyro.DeltaT; BuffTemp[34] = (Temp >> 8) & 0xff;//дельта BuffTemp[35] = (Temp >> 0) & 0xff; Temp = Gyro.Termo;//0xa4=164 BuffTemp[36] =(Temp >> 8) & 0xff;//температура BuffTemp[37] =(Temp >> 0) & 0xff;//ADC6 sesnsor 5 BuffTemp[38] =0x00; BuffTemp[39] =0x00; BuffTemp[40] =0x00; BuffTemp[41] =0x00; Check(BuffTemp, 44); WriteConN (BuffTemp,44); } void CMD_M_Control_D8()///установка\сброс регистров управления { unsigned int bit,NReg,Pa; unsigned int SR,V,A,Bit_num; SR=0; V=0; A=0; Bit_num=0; BuffTemp[0] = Gyro.SOC_Out; //DD BuffTemp[1] = Gyro.My_Addres; //00 BuffTemp[2] = Gyro.CMD_In; //D8 /* FrqON PlcON HFOOFF HFOON PlcOFF PlcON */ Pa = BuffTemp[3]; SR = Pa >> 0x7; V = Pa >> 0x5; V = V & 0x3; A = Pa >> 0x4; A = A & 0x1; Bit_num = Pa & 0xf; if(SR) { switch (Bit_num){ case 0x06: FrqON break; case 0x03: HFOON break; case 0x01: PlcON break; } } else{ switch (Bit_num){ case 0x06: FrqOff break; case 0x03: HFOOFF break; case 0x01: PlcOFF break; } } BuffTemp[0] = Gyro.SOC_Out; //DD BuffTemp[1] = Gyro.My_Addres; //00 BuffTemp[2] = Gyro.CMD_In; //D8 BuffTemp[3] = A<<4; BuffTemp[4] = 0x0; BuffTemp[5] = 0x0; Check(BuffTemp, CRC_N); WriteConN (BuffTemp,CRC_N); } void CMD_M_Control_D9()///чтение регистров управления { int bit,NReg; BuffTemp[0] = Gyro.SOC_Out; //DD BuffTemp[1] = Gyro.My_Addres; //00 BuffTemp[2] = Gyro.CMD_In; //D9 if ((Param1 & 0x10) == 0) { BuffTemp[3]=0<<4; BuffTemp[4] = (Gyro.RgConA>>8 )& 0xff; BuffTemp[5] = Gyro.RgConA & 0xff; } else { BuffTemp[3]=1<<4; BuffTemp[4] = (Gyro.RgConB>>8 ) & 0xff; BuffTemp[5] = Gyro.RgConB & 0xff; } Check(BuffTemp, CRC_N); WriteConN (BuffTemp,CRC_N); } // (номер (код) ЦАПа 0...3, старший байт требуемого ЦАПа, младший байт треб ЦАПа) void CMD_M_Stymul() { int temp; int HFO; temp=BuffTemp[3]; Consol = temp&0x3; HFO = temp&0x3;// // (номер (код) ЦАПа 0...3, HFO - 3dac, PLC - 0DAC temp =((BuffTemp[4]<<8) | BuffTemp[5]); // temp=0; temp=temp&0xFFFF; if(HFO) { Spi.DAC_A=(unsigned int)temp; } else{ DACF =(temp*K_DAC)+deltaDAC; Spi.DAC_B =(unsigned int)(DACF) /*(unsigned int)(temp*K_DAC+deltaDAC)*/; // K_DAC); } } void Gph_W() { Out_G_photo(BuffTemp[4],BuffTemp[5]); } void CMD_M_vib() { unsigned int temp1,temp2; temp1 =((BuffTemp[4]<<8) | BuffTemp[5]); temp1=temp1&0xFFFF; temp2 =((BuffTemp[6]<<8) | BuffTemp[7]); temp2=temp2&0xFFFF; Gyro.Frq = ((unsigned int) ((7680000*16/temp1)))*16*16*16; Consol=Gyro.Frq ; } unsigned int Check(char *c, unsigned int Count) { int i=1; unsigned int temp,CRC; temp=1; CRC=0; for(; i<Count-2; i++) { CRC+=c[i]; } if(c[Count-2]!=((CRC>>8)&0xFF)) { temp=0; Gyro.RsErrLine = (Gyro.RsErrLine)&=0x2; } if(c[Count-1]!=((CRC>>0)&0xFF)) { temp=0; // Gyro.RsErrLine= (Gyro.RsErrLine)=0x2; } c[Count-2]=(CRC>>8)&0xFF; c[Count-1]=(CRC>>0)&0xFF; return temp; } int Getlengf(void) { unsigned int lengf; lengf = 1; switch(Gyro.CMD_In) { case 0x99://Gyrotainance lengf=6; CRC_N=8; break; case 0x0A: //m_stymul lengf=8; break; case 0xE9://DeviceMode lengf=6; CRC_N=8; break; case 0xE8://DeviceMode lengf=6; CRC_N=8; break; case 0xA5://DeviceMode lengf=6; CRC_N=8; break; case 0xDD://m_rate lengf=6; CRC_N=44; break; case 0xA0://Delta_PS lengf=6; CRC_N=8; break; case 0xB0://DeviceMode lengf=6; CRC_N=8; break; case 0xD8://m_control lengf=6; CRC_N=8; break; case 0xD9://m_control lengf=6; CRC_N=8; break; case 0xE4: lengf=8; break; case 0xE6: lengf=8; break; } return lengf; } void Read_CMD(void) { Gyro.RsErrLine = (Gyro.RsErrLine)& 0xffff;//для сброса ошибки CountBuFFIn=ReadChekCon1(BuffTemp); // чтение данных из консоли if(CountBuFFIn==1) { // если есть первый байт if (BuffTemp[0] != SOC_In) { ReadCon1(BuffTemp); Gyro.RsErrLine += 0x100;//WriteCon("\n\r ...Error.... "); BuffTemp[99]=Gyro.RsErrLine; } } else if(CountBuFFIn==2) { //если второй ,fqn if (BuffTemp[1] != Gyro.My_Addres) { ReadCon1(BuffTemp); Gyro.RsErrLine += 0x1;//WriteCon("\n\r ...Error_ADDRES.... "); } } else if(CountBuFFIn==3) { // если ьоетий байт Gyro.CMD_In=BuffTemp[2]; N=Getlengf(); } else if(CountBuFFIn==4 && (N==6)) { // N - длина посылки аскглд(для записи параметров). определяется по коду команды в Getlengf(); Param1=BuffTemp[3]; } else if((CountBuFFIn==5)&&(N==7)) { Param1=BuffTemp[3]; Param2=BuffTemp[4]; } else if((CountBuFFIn==6)&&(N==8)) { Param1=BuffTemp[3]; Param2=BuffTemp[4]; Param3=BuffTemp[5]; } else if((CountBuFFIn==8)&&(N==10)) { Param1=BuffTemp[4]; Param2=BuffTemp[5]; Param3=BuffTemp[6]; Param4=BuffTemp[7]; } else if(CountBuFFIn > (N-1)) { ReadCon1(BuffTemp); switch(Gyro.CMD_In) { Rate_Flag=0; case 0x99: Gyro.ModeOut=0; CMD_Maintenance(); break; case 0xA0: TempParam=(BuffTemp[3]) & 0x90; if (TempParam==Delta_500) CMD_Delta_500Hz(); else if (TempParam==Delta_EXT) CMD_Delta_Ext(); else if (TempParam==PDelta_500) { Gyro.ModeOut=3; Gyro.Delta500_Event=0; WriteCon("Delta500"); } else if (TempParam==PDelta_EXT) { Gyro.ModeOut=4; Gyro.DeltaEXT_Event=0; WriteCon("deltaEXT"); } break; case 0xD8: CMD_M_Control_D8(); break; case 0xE9://чтение параметров CMD_M_Param_R(); break; case 0xE8://запись параметра CMD_M_Param_W(); break; case 0xD9: CMD_M_Control_D9(); break; case 0x0A: CMD_M_Stymul(); break; case 0xDD: TempParam=(BuffTemp[3]) & 0x9f; if (TempParam == Rate1) { CMD_Rate(); WriteCon("Rate11");} else if (TempParam == Rate2) { CMD_Rate2(); WriteCon("Rate21");} else if (TempParam == PRate1) { Gyro.ModeOut=1; Gyro.Rate1_Event=0; WriteCon("Rate12");} else if (TempParam == PRate2) { Gyro.ModeOut=2; Gyro.Rate2_Event=0; WriteCon("Rate22");} break; case 0xE4: CMD_M_vib(); break; case 0xE6: Gph_W(); break; Gyro.RsErrLine = 0; } } // else if(CountBuFFIn > 40 ) // { // ReadCon1(BuffTemp); // } }