fork

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Kovalev_D
Date:
Wed Mar 30 14:20:03 2016 +0000
Revision:
103:e96f08947def
Parent:
102:4270092be987
Child:
104:ab1cb4ff56b2
Gain

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igor_v 0:8ad47e2b6f00 1 #include "stdlib.h"
igor_v 0:8ad47e2b6f00 2 #include "LPC17xx.h"
igor_v 0:8ad47e2b6f00 3 #include "Global.h"
Kovalev_D 92:c892f0311aa7 4
igor_v 0:8ad47e2b6f00 5 unsigned int Rate_Flag;
igor_v 0:8ad47e2b6f00 6 unsigned int CountBuFFIn;
igor_v 21:bc8c1cec3da6 7 unsigned int N=0,CRC_N;
igor_v 21:bc8c1cec3da6 8 unsigned int Param1=0;
igor_v 21:bc8c1cec3da6 9 unsigned int Param2=0;
igor_v 21:bc8c1cec3da6 10 unsigned int Param3=0;
igor_v 21:bc8c1cec3da6 11 unsigned int Param4=0;
Kovalev_D 102:4270092be987 12 unsigned int Consol=123;
igor_v 0:8ad47e2b6f00 13 /*
igor_v 21:bc8c1cec3da6 14 void exec_CMD(void) //r. === процедура окончательной дешифрации и исполнения команды
igor_v 0:8ad47e2b6f00 15 {
igor_v 0:8ad47e2b6f00 16 unsigned int Comand_code;
igor_v 21:bc8c1cec3da6 17
igor_v 21:bc8c1cec3da6 18 //rx_buf_copy = 1; //r. предустанов флага копирования приемного буфера
igor_v 0:8ad47e2b6f00 19
igor_v 0:8ad47e2b6f00 20 Comand_code = (rcv_buf[2] & 0xFF) << 8;
igor_v 21:bc8c1cec3da6 21 PC_Comand = Comand_code | (rcv_buf[3] & 0xFF); //e. save it in the memory for echo-transmission //r. сохранить его в памяти для обратной передачи
igor_v 0:8ad47e2b6f00 22 }*/
igor_v 0:8ad47e2b6f00 23 void CMD_Maintenance(void)
igor_v 0:8ad47e2b6f00 24 {
igor_v 30:17c84ed091b3 25 BuffTemp[0] = Gyro.SOC_Out;
igor_v 30:17c84ed091b3 26 BuffTemp[1] = Gyro .My_Addres;
igor_v 30:17c84ed091b3 27 BuffTemp[2] = Gyro .Firmware_Version;
igor_v 30:17c84ed091b3 28 BuffTemp[3] = Gyro .GLD_Serial;
igor_v 21:bc8c1cec3da6 29 BuffTemp[4]=0x00;
igor_v 21:bc8c1cec3da6 30 BuffTemp[5]=0x00;
igor_v 21:bc8c1cec3da6 31 Check(BuffTemp, 8);
igor_v 21:bc8c1cec3da6 32 WriteConN (BuffTemp,8);
igor_v 0:8ad47e2b6f00 33 }
igor_v 0:8ad47e2b6f00 34
igor_v 0:8ad47e2b6f00 35 void CMD_Rate(void)
igor_v 21:bc8c1cec3da6 36 {
igor_v 21:bc8c1cec3da6 37
igor_v 21:bc8c1cec3da6 38 unsigned int T_VibH , T_VibL; // Частота вибропривода.
igor_v 21:bc8c1cec3da6 39 unsigned int Cnt_PlsL , Cnt_PlsH; // Счетчик +.
igor_v 21:bc8c1cec3da6 40 unsigned int Cnt_MnsL , Cnt_MnsH; // Счетчик -.
igor_v 21:bc8c1cec3da6 41 unsigned int Cnt_DifL , Cnt_DifH; // Разность счетчиков.
igor_v 21:bc8c1cec3da6 42 unsigned int F_rasL , F_rasH; // Частота расщепления.
igor_v 21:bc8c1cec3da6 43
igor_v 21:bc8c1cec3da6 44 unsigned int HF_regL , HF_regH; // Выход регулятора ГВЧ. НЕ СДЕЛАНО
igor_v 21:bc8c1cec3da6 45 unsigned int HF_difL , HF_difH; // Сигнал ошибки регулячтора ГВЧ. НЕ СДЕЛАНО
igor_v 21:bc8c1cec3da6 46
igor_v 21:bc8c1cec3da6 47 unsigned int WP_regL , WP_regH;
igor_v 21:bc8c1cec3da6 48
igor_v 21:bc8c1cec3da6 49 unsigned int ADC1L, ADC2L, ADC3L, ADC4L, ADC5L;
igor_v 21:bc8c1cec3da6 50 unsigned int ADC1H, ADC2H, ADC3H, ADC4H, ADC5H;
igor_v 21:bc8c1cec3da6 51
igor_v 21:bc8c1cec3da6 52
Kovalev_D 92:c892f0311aa7 53
igor_v 30:17c84ed091b3 54 // Gyro .T_Vib=(unsigned int)((7680000*16/Gyro.Frq)*4096);
igor_v 30:17c84ed091b3 55 Gyro.T_Vib=(unsigned int)((7680000*16/(Gyro.Frq>>12)));
igor_v 30:17c84ed091b3 56 Gyro.Firmware_Version=0xff; /// промежуточная затычка
igor_v 21:bc8c1cec3da6 57
igor_v 30:17c84ed091b3 58 T_VibH = ( Gyro.T_Vib>>8 ) TakeByte;
igor_v 30:17c84ed091b3 59 T_VibL = ( Gyro.T_Vib ) TakeByte;
igor_v 21:bc8c1cec3da6 60
igor_v 30:17c84ed091b3 61 Cnt_PlsH = ( Gyro.Cnt_Pls>>8) TakeByte;
igor_v 30:17c84ed091b3 62 Cnt_PlsL = ( Gyro.Cnt_Pls ) TakeByte;
igor_v 21:bc8c1cec3da6 63
igor_v 30:17c84ed091b3 64 Cnt_MnsH = ( Gyro.Cnt_Mns>>8) TakeByte;
igor_v 30:17c84ed091b3 65 Cnt_MnsL = ( Gyro.Cnt_Mns ) TakeByte;
igor_v 21:bc8c1cec3da6 66
igor_v 30:17c84ed091b3 67 Cnt_DifH = ( Gyro.Cnt_Dif>>8) TakeByte;
igor_v 30:17c84ed091b3 68 Cnt_DifL = ( Gyro.Cnt_Dif ) TakeByte;
igor_v 21:bc8c1cec3da6 69
igor_v 30:17c84ed091b3 70 F_rasH = ( Gyro.F_ras>>8 ) TakeByte;
igor_v 30:17c84ed091b3 71 F_rasL = ( Gyro.F_ras ) TakeByte;
igor_v 21:bc8c1cec3da6 72
igor_v 21:bc8c1cec3da6 73 ADC1H = ( Spi.ADC1>>8 ) TakeByte;
Kovalev_D 45:cbc955aecebe 74 ADC1L = ( Spi.ADC1 ) TakeByte;
igor_v 0:8ad47e2b6f00 75
igor_v 21:bc8c1cec3da6 76 ADC2H = ( Spi.ADC2>>8 ) TakeByte;
Kovalev_D 45:cbc955aecebe 77 ADC2L = ( Spi.ADC2 ) TakeByte;
igor_v 21:bc8c1cec3da6 78
igor_v 21:bc8c1cec3da6 79 ADC3H = ( Spi.ADC3>>8 ) TakeByte;
Kovalev_D 45:cbc955aecebe 80 ADC3L = ( Spi.ADC3 ) TakeByte;
igor_v 21:bc8c1cec3da6 81
igor_v 21:bc8c1cec3da6 82 ADC4H = ( Spi.ADC4>>8 ) TakeByte;
Kovalev_D 45:cbc955aecebe 83 ADC4L = ( Spi.ADC4 ) TakeByte;
igor_v 21:bc8c1cec3da6 84
igor_v 21:bc8c1cec3da6 85 ADC5H = ( Spi.ADC5>>8 ) TakeByte;
Kovalev_D 45:cbc955aecebe 86 ADC5L = ( Spi.ADC5 ) TakeByte;
igor_v 21:bc8c1cec3da6 87
igor_v 21:bc8c1cec3da6 88 WP_regH = ( Spi.DAC_B>>8 ) TakeByte;
igor_v 21:bc8c1cec3da6 89 WP_regL = ( Spi.DAC_B ) TakeByte;
igor_v 21:bc8c1cec3da6 90
igor_v 21:bc8c1cec3da6 91 HF_regH=0xff;
igor_v 21:bc8c1cec3da6 92 HF_regL=0xff;
igor_v 21:bc8c1cec3da6 93
igor_v 21:bc8c1cec3da6 94 HF_difH=0xff;
igor_v 21:bc8c1cec3da6 95 HF_difL=0xff;
igor_v 21:bc8c1cec3da6 96
igor_v 0:8ad47e2b6f00 97
igor_v 30:17c84ed091b3 98 BuffTemp[ 0] = Gyro.SOC_Out;
igor_v 30:17c84ed091b3 99 BuffTemp[ 1] = Gyro.My_Addres;
igor_v 21:bc8c1cec3da6 100
igor_v 21:bc8c1cec3da6 101 BuffTemp[ 2] = Cnt_PlsH;//старший байт счетчика +.
igor_v 21:bc8c1cec3da6 102 BuffTemp[ 3] = Cnt_PlsL;//младший байт счетчика +.
igor_v 21:bc8c1cec3da6 103
igor_v 21:bc8c1cec3da6 104 BuffTemp[ 4] = Cnt_MnsH;//старший байт счетчика -.
igor_v 21:bc8c1cec3da6 105 BuffTemp[ 5] = Cnt_MnsL;//младший байт счетчика -.
igor_v 21:bc8c1cec3da6 106
igor_v 21:bc8c1cec3da6 107 BuffTemp[ 6] = Cnt_DifH;//старший байт разности счетчиков
igor_v 21:bc8c1cec3da6 108 BuffTemp[ 7] = Cnt_DifL;//младший байт разности счетчиков
igor_v 21:bc8c1cec3da6 109
igor_v 21:bc8c1cec3da6 110 BuffTemp[ 8] = F_rasH;
igor_v 21:bc8c1cec3da6 111 BuffTemp[ 9] = F_rasL;
igor_v 21:bc8c1cec3da6 112
igor_v 21:bc8c1cec3da6 113 BuffTemp[10] = HF_regH;
igor_v 21:bc8c1cec3da6 114 BuffTemp[11] = HF_regL;
igor_v 21:bc8c1cec3da6 115
igor_v 21:bc8c1cec3da6 116 BuffTemp[12] = HF_difH;
igor_v 21:bc8c1cec3da6 117 BuffTemp[13] = HF_difL;
igor_v 21:bc8c1cec3da6 118
igor_v 21:bc8c1cec3da6 119 BuffTemp[14] = T_VibH ;//
igor_v 21:bc8c1cec3da6 120 BuffTemp[15] = T_VibL; //?
igor_v 21:bc8c1cec3da6 121
igor_v 30:17c84ed091b3 122 BuffTemp[16] = Gyro.Firmware_Version;//ХЗ
igor_v 30:17c84ed091b3 123 BuffTemp[17] = Gyro.Firmware_Version;//ХЗ
igor_v 21:bc8c1cec3da6 124
igor_v 21:bc8c1cec3da6 125 BuffTemp[18] = T_VibH>>1;
igor_v 21:bc8c1cec3da6 126 BuffTemp[19] = T_VibL;
igor_v 21:bc8c1cec3da6 127
igor_v 30:17c84ed091b3 128 BuffTemp[20] = Gyro.Firmware_Version;//ХЗ
igor_v 30:17c84ed091b3 129 BuffTemp[21] = Gyro.Firmware_Version;//ХЗ
igor_v 21:bc8c1cec3da6 130
igor_v 21:bc8c1cec3da6 131 BuffTemp[22] = WP_regH; //СРП Spi.DAC_B
igor_v 21:bc8c1cec3da6 132 BuffTemp[23] = WP_regL; //СРП
igor_v 21:bc8c1cec3da6 133
igor_v 30:17c84ed091b3 134 BuffTemp[24] = Gyro.Firmware_Version;// ХЗ
igor_v 30:17c84ed091b3 135 BuffTemp[25] = Gyro.Firmware_Version;// ХЗ
igor_v 21:bc8c1cec3da6 136
igor_v 21:bc8c1cec3da6 137 BuffTemp[26] = ADC1H;
igor_v 21:bc8c1cec3da6 138 BuffTemp[27] = ADC1L;
igor_v 21:bc8c1cec3da6 139
igor_v 21:bc8c1cec3da6 140 BuffTemp[28] = ADC1H;
igor_v 21:bc8c1cec3da6 141 BuffTemp[29] = ADC1L;
igor_v 21:bc8c1cec3da6 142
igor_v 21:bc8c1cec3da6 143 BuffTemp[30] = ADC1H;
igor_v 21:bc8c1cec3da6 144 BuffTemp[31] = ADC1L;
igor_v 21:bc8c1cec3da6 145
igor_v 21:bc8c1cec3da6 146 BuffTemp[32] = ADC1H;
igor_v 21:bc8c1cec3da6 147 BuffTemp[33] = ADC1L;
igor_v 21:bc8c1cec3da6 148
igor_v 21:bc8c1cec3da6 149 BuffTemp[34] = ADC1H;
igor_v 21:bc8c1cec3da6 150 BuffTemp[35] = ADC1L;
igor_v 21:bc8c1cec3da6 151
igor_v 21:bc8c1cec3da6 152 BuffTemp[36] = 0x00;//ADC6
igor_v 21:bc8c1cec3da6 153 BuffTemp[37] = 0x00;//ADC6
igor_v 21:bc8c1cec3da6 154
igor_v 30:17c84ed091b3 155 BuffTemp[38] = Gyro.Firmware_Version;
igor_v 30:17c84ed091b3 156 BuffTemp[39] = Gyro.Firmware_Version;
igor_v 30:17c84ed091b3 157 BuffTemp[40] = Gyro.Firmware_Version;
igor_v 30:17c84ed091b3 158 BuffTemp[41] = Gyro.Firmware_Version;
igor_v 21:bc8c1cec3da6 159
igor_v 21:bc8c1cec3da6 160
igor_v 21:bc8c1cec3da6 161 Check(BuffTemp, 44);
igor_v 21:bc8c1cec3da6 162 WriteConN (BuffTemp,44);
Kovalev_D 92:c892f0311aa7 163
igor_v 0:8ad47e2b6f00 164 }
igor_v 0:8ad47e2b6f00 165
igor_v 21:bc8c1cec3da6 166 void CMD_M_Control_D8()///установка\сброс регистров управления
igor_v 21:bc8c1cec3da6 167 {
igor_v 21:bc8c1cec3da6 168 int bit,NReg;
igor_v 30:17c84ed091b3 169 BuffTemp[0] = Gyro.SOC_Out; //DD
igor_v 30:17c84ed091b3 170 BuffTemp[1] = Gyro.My_Addres; //00
igor_v 30:17c84ed091b3 171 BuffTemp[2] = Gyro.CMD_In; //D8
igor_v 21:bc8c1cec3da6 172 //10?
igor_v 21:bc8c1cec3da6 173 if((Param1&0x80)) {
igor_v 21:bc8c1cec3da6 174 bit=1;
igor_v 21:bc8c1cec3da6 175 } else {
igor_v 21:bc8c1cec3da6 176 bit=0;
igor_v 21:bc8c1cec3da6 177 }
igor_v 21:bc8c1cec3da6 178
igor_v 21:bc8c1cec3da6 179 if ((Param1 & 0x10) == 0) {
igor_v 21:bc8c1cec3da6 180 NReg=0;
igor_v 30:17c84ed091b3 181 switch(Param1&0xf) { // Gyro.RgConA
igor_v 21:bc8c1cec3da6 182 case 0x0:
igor_v 30:17c84ed091b3 183 Gyro.RgConA|=bit;
igor_v 21:bc8c1cec3da6 184 break;
igor_v 21:bc8c1cec3da6 185
igor_v 21:bc8c1cec3da6 186 case 0x1:
igor_v 30:17c84ed091b3 187 Gyro.RgConA|=bit<<0x1;
igor_v 21:bc8c1cec3da6 188 break;
igor_v 21:bc8c1cec3da6 189
igor_v 21:bc8c1cec3da6 190 case 0x2:
igor_v 30:17c84ed091b3 191 Gyro.RgConA|=bit<<0x2;
igor_v 21:bc8c1cec3da6 192 break;
igor_v 21:bc8c1cec3da6 193
igor_v 21:bc8c1cec3da6 194 case 0x3:
igor_v 30:17c84ed091b3 195 Gyro.RgConA|=bit<<0x3;
igor_v 21:bc8c1cec3da6 196 break;
igor_v 21:bc8c1cec3da6 197
igor_v 21:bc8c1cec3da6 198 case 0x4:
igor_v 30:17c84ed091b3 199 Gyro.RgConA|=bit<<0x4;
igor_v 21:bc8c1cec3da6 200 break;
igor_v 21:bc8c1cec3da6 201
igor_v 21:bc8c1cec3da6 202 case 0x5:
igor_v 30:17c84ed091b3 203 Gyro.RgConA|=bit<<0x5;
igor_v 21:bc8c1cec3da6 204 break;
igor_v 21:bc8c1cec3da6 205
igor_v 21:bc8c1cec3da6 206 case 0x6:
igor_v 30:17c84ed091b3 207 Gyro.RgConA|=bit<<0x6;
igor_v 21:bc8c1cec3da6 208 break;
igor_v 21:bc8c1cec3da6 209
igor_v 21:bc8c1cec3da6 210 case 0x7:
igor_v 30:17c84ed091b3 211 Gyro.RgConA|=bit<<0x7;
igor_v 21:bc8c1cec3da6 212 break;
igor_v 21:bc8c1cec3da6 213 }
igor_v 21:bc8c1cec3da6 214 BuffTemp[3] = NReg<<4;
igor_v 30:17c84ed091b3 215 BuffTemp[4] = (Gyro.RgConA>>8 )& 0xff;
igor_v 30:17c84ed091b3 216 BuffTemp[5] = Gyro.RgConA & 0xff;
igor_v 21:bc8c1cec3da6 217 } else {
igor_v 30:17c84ed091b3 218 NReg=1; // Gyro.RgConB
igor_v 30:17c84ed091b3 219 switch(Param1&0xf) { // Gyro.RgConB
igor_v 21:bc8c1cec3da6 220 case 0x0:
igor_v 30:17c84ed091b3 221 Gyro.RgConB|=bit;
igor_v 21:bc8c1cec3da6 222 break;
igor_v 21:bc8c1cec3da6 223 case 0x1:
igor_v 30:17c84ed091b3 224 Gyro.RgConB|=bit<1;
igor_v 21:bc8c1cec3da6 225 break;
igor_v 21:bc8c1cec3da6 226 case 0x2:
igor_v 30:17c84ed091b3 227 Gyro.RgConB|=bit<2;
igor_v 21:bc8c1cec3da6 228 break;
igor_v 21:bc8c1cec3da6 229 }
igor_v 21:bc8c1cec3da6 230 BuffTemp[3] = NReg<<4;
igor_v 30:17c84ed091b3 231 BuffTemp[4] = (Gyro.RgConB>>8 ) & 0xff;
igor_v 30:17c84ed091b3 232 BuffTemp[5] = Gyro.RgConB & 0xff;
igor_v 21:bc8c1cec3da6 233 }
igor_v 21:bc8c1cec3da6 234
igor_v 21:bc8c1cec3da6 235 Check(BuffTemp, CRC_N);
igor_v 21:bc8c1cec3da6 236 WriteConN (BuffTemp,CRC_N);
igor_v 0:8ad47e2b6f00 237 }
igor_v 0:8ad47e2b6f00 238
igor_v 21:bc8c1cec3da6 239 void CMD_M_Control_D9()///чтение регистров управления
igor_v 21:bc8c1cec3da6 240 {
igor_v 21:bc8c1cec3da6 241 int bit,NReg;
igor_v 30:17c84ed091b3 242 BuffTemp[0] = Gyro.SOC_Out; //DD
igor_v 30:17c84ed091b3 243 BuffTemp[1] = Gyro.My_Addres; //00
igor_v 30:17c84ed091b3 244 BuffTemp[2] = Gyro.CMD_In; //D9
igor_v 21:bc8c1cec3da6 245 if ((Param1 & 0x10) == 0) {
igor_v 21:bc8c1cec3da6 246 BuffTemp[3]=0<<4;
igor_v 30:17c84ed091b3 247 BuffTemp[4] = (Gyro.RgConA>>8 )& 0xff;
igor_v 30:17c84ed091b3 248 BuffTemp[5] = Gyro.RgConA & 0xff;
igor_v 21:bc8c1cec3da6 249 } else {
igor_v 21:bc8c1cec3da6 250 BuffTemp[3]=1<<4;
igor_v 30:17c84ed091b3 251 BuffTemp[4] = (Gyro.RgConB>>8 ) & 0xff;
igor_v 30:17c84ed091b3 252 BuffTemp[5] = Gyro.RgConB & 0xff;
igor_v 21:bc8c1cec3da6 253 }
igor_v 21:bc8c1cec3da6 254 Check(BuffTemp, CRC_N);
igor_v 21:bc8c1cec3da6 255 WriteConN (BuffTemp,CRC_N);
igor_v 21:bc8c1cec3da6 256 }
igor_v 21:bc8c1cec3da6 257 // (номер (код) ЦАПа 0...3, старший байт требуемого ЦАПа, младший байт треб ЦАПа)
igor_v 0:8ad47e2b6f00 258 void CMD_M_Stymul()
igor_v 0:8ad47e2b6f00 259 {
igor_v 21:bc8c1cec3da6 260 int temp;
Kovalev_D 102:4270092be987 261 int HFO;
Kovalev_D 102:4270092be987 262 temp=BuffTemp[3];
Kovalev_D 102:4270092be987 263 Consol = temp&0x3;
Kovalev_D 103:e96f08947def 264 HFO = temp&0x3;// // (номер (код) ЦАПа 0...3, HFO - 3dac, PLC - 0DAC
igor_v 21:bc8c1cec3da6 265 temp =((BuffTemp[4]<<8) | BuffTemp[5]);
igor_v 21:bc8c1cec3da6 266 // temp=0;
igor_v 21:bc8c1cec3da6 267 temp=temp&0xFFFF;
Kovalev_D 102:4270092be987 268
Kovalev_D 102:4270092be987 269 if(HFO)
Kovalev_D 102:4270092be987 270 {
Kovalev_D 102:4270092be987 271 Spi.DAC_A=(unsigned int)temp;
Kovalev_D 102:4270092be987 272 }
Kovalev_D 102:4270092be987 273 else{
igor_v 21:bc8c1cec3da6 274 DACF =(temp*K_DAC)+deltaDAC;
igor_v 21:bc8c1cec3da6 275 Spi.DAC_B =(unsigned int)(DACF) /*(unsigned int)(temp*K_DAC+deltaDAC)*/; // K_DAC);
igor_v 21:bc8c1cec3da6 276 }
igor_v 0:8ad47e2b6f00 277 }
Kovalev_D 103:e96f08947def 278 void Gph_W()
Kovalev_D 103:e96f08947def 279 {
Kovalev_D 103:e96f08947def 280 int Gain_A;
Kovalev_D 103:e96f08947def 281 int Gain_B;
Kovalev_D 103:e96f08947def 282 Gyro.Gain_A=BuffTemp[4];
Kovalev_D 103:e96f08947def 283 Gyro.Gain_B=BuffTemp[5];
Kovalev_D 103:e96f08947def 284 }
igor_v 0:8ad47e2b6f00 285
Kovalev_D 98:95b8e79f13e1 286 void CMD_M_vib()
Kovalev_D 102:4270092be987 287 { LoopOn
Kovalev_D 102:4270092be987 288 unsigned int temp1,temp2;
Kovalev_D 102:4270092be987 289
Kovalev_D 102:4270092be987 290 temp1 =((BuffTemp[4]<<8) | BuffTemp[5]);
Kovalev_D 102:4270092be987 291 temp1=temp1&0xFFFF;
Kovalev_D 102:4270092be987 292
Kovalev_D 102:4270092be987 293 temp2 =((BuffTemp[6]<<8) | BuffTemp[7]);
Kovalev_D 102:4270092be987 294 temp2=temp2&0xFFFF;
Kovalev_D 102:4270092be987 295 Gyro.Frq = ((unsigned int) ((7680000*16/temp1)))*16*16*16;
Kovalev_D 102:4270092be987 296 Consol=Gyro.Frq ;
Kovalev_D 98:95b8e79f13e1 297 }
igor_v 0:8ad47e2b6f00 298 unsigned int Check(char *c, unsigned int Count)
igor_v 0:8ad47e2b6f00 299 {
igor_v 21:bc8c1cec3da6 300 int i=1;
igor_v 21:bc8c1cec3da6 301 unsigned int temp,CRC;
igor_v 21:bc8c1cec3da6 302
igor_v 21:bc8c1cec3da6 303
igor_v 21:bc8c1cec3da6 304 temp=1;
igor_v 21:bc8c1cec3da6 305 CRC=0;
igor_v 21:bc8c1cec3da6 306
igor_v 21:bc8c1cec3da6 307
igor_v 21:bc8c1cec3da6 308 for(; i<Count-2; i++) {
igor_v 21:bc8c1cec3da6 309 CRC+=c[i];
igor_v 21:bc8c1cec3da6 310 }
igor_v 0:8ad47e2b6f00 311
igor_v 21:bc8c1cec3da6 312 if(c[Count-2]!=((CRC>>8)&0xFF)) {
igor_v 21:bc8c1cec3da6 313 temp=0;
igor_v 30:17c84ed091b3 314 Gyro.RsErrLine = (Gyro.RsErrLine)&=0x2;
igor_v 21:bc8c1cec3da6 315 }
igor_v 0:8ad47e2b6f00 316
igor_v 21:bc8c1cec3da6 317 if(c[Count-1]!=((CRC>>0)&0xFF)) {
igor_v 21:bc8c1cec3da6 318 temp=0;
igor_v 30:17c84ed091b3 319 // Gyro.RsErrLine= (Gyro.RsErrLine)=0x2;
igor_v 21:bc8c1cec3da6 320 }
igor_v 21:bc8c1cec3da6 321
igor_v 21:bc8c1cec3da6 322 c[Count-2]=(CRC>>8)&0xFF;
igor_v 21:bc8c1cec3da6 323 c[Count-1]=(CRC>>0)&0xFF;
igor_v 21:bc8c1cec3da6 324
igor_v 21:bc8c1cec3da6 325
igor_v 21:bc8c1cec3da6 326
igor_v 21:bc8c1cec3da6 327 return temp;
igor_v 0:8ad47e2b6f00 328 }
igor_v 0:8ad47e2b6f00 329
igor_v 0:8ad47e2b6f00 330 int Getlengf(void)
igor_v 0:8ad47e2b6f00 331 {
igor_v 21:bc8c1cec3da6 332 unsigned int lengf=0;
igor_v 30:17c84ed091b3 333 switch(Gyro.CMD_In) {
igor_v 30:17c84ed091b3 334 case 0x99://Gyrotainance
Kovalev_D 92:c892f0311aa7 335
igor_v 21:bc8c1cec3da6 336 lengf=6;
igor_v 21:bc8c1cec3da6 337 CRC_N=8;
igor_v 21:bc8c1cec3da6 338 break;
igor_v 0:8ad47e2b6f00 339
igor_v 21:bc8c1cec3da6 340 case 0x0A: //m_stymul
igor_v 21:bc8c1cec3da6 341 lengf=8;
igor_v 21:bc8c1cec3da6 342 break;
igor_v 21:bc8c1cec3da6 343
igor_v 21:bc8c1cec3da6 344 case 0xA5://DeviceMode
igor_v 21:bc8c1cec3da6 345
igor_v 21:bc8c1cec3da6 346 lengf=6;
igor_v 21:bc8c1cec3da6 347 CRC_N=8;
igor_v 21:bc8c1cec3da6 348 break;
igor_v 21:bc8c1cec3da6 349
igor_v 21:bc8c1cec3da6 350 case 0xDD://m_rate
igor_v 0:8ad47e2b6f00 351
igor_v 21:bc8c1cec3da6 352 lengf=6;
igor_v 21:bc8c1cec3da6 353 CRC_N=44;
igor_v 21:bc8c1cec3da6 354 break;
igor_v 21:bc8c1cec3da6 355
igor_v 21:bc8c1cec3da6 356 case 0xB0://DeviceMode
igor_v 21:bc8c1cec3da6 357
igor_v 21:bc8c1cec3da6 358 lengf=6;
igor_v 21:bc8c1cec3da6 359 CRC_N=8;
igor_v 21:bc8c1cec3da6 360 break;
igor_v 21:bc8c1cec3da6 361
igor_v 21:bc8c1cec3da6 362 case 0xD8://m_control
igor_v 0:8ad47e2b6f00 363
igor_v 21:bc8c1cec3da6 364 lengf=6;
igor_v 21:bc8c1cec3da6 365 CRC_N=8;
igor_v 21:bc8c1cec3da6 366 break;
igor_v 21:bc8c1cec3da6 367
igor_v 21:bc8c1cec3da6 368 case 0xD9://m_control
igor_v 0:8ad47e2b6f00 369
igor_v 21:bc8c1cec3da6 370 lengf=6;
igor_v 21:bc8c1cec3da6 371 CRC_N=8;
igor_v 21:bc8c1cec3da6 372 break;
Kovalev_D 102:4270092be987 373
Kovalev_D 102:4270092be987 374 case 0xE4:
Kovalev_D 98:95b8e79f13e1 375 lengf=8;
Kovalev_D 98:95b8e79f13e1 376 break;
Kovalev_D 103:e96f08947def 377
Kovalev_D 103:e96f08947def 378
Kovalev_D 103:e96f08947def 379 case 0xE6:
Kovalev_D 103:e96f08947def 380 lengf=8;
Kovalev_D 103:e96f08947def 381 break;
Kovalev_D 103:e96f08947def 382
igor_v 21:bc8c1cec3da6 383 }
Kovalev_D 98:95b8e79f13e1 384
igor_v 21:bc8c1cec3da6 385 return lengf;
igor_v 0:8ad47e2b6f00 386 }
igor_v 0:8ad47e2b6f00 387
igor_v 0:8ad47e2b6f00 388 void Read_CMD(void)
igor_v 21:bc8c1cec3da6 389 {
Kovalev_D 92:c892f0311aa7 390
Kovalev_D 45:cbc955aecebe 391
Kovalev_D 45:cbc955aecebe 392 Gyro.RsErrLine = (Gyro.RsErrLine)& 0xffff;//для сброса ошибки
igor_v 21:bc8c1cec3da6 393
igor_v 21:bc8c1cec3da6 394
Kovalev_D 45:cbc955aecebe 395
Kovalev_D 93:b3803774f110 396 CountBuFFIn=ReadChekCon1(BuffTemp); // чтение данных из консоли
igor_v 42:6fc307c4963e 397
Kovalev_D 92:c892f0311aa7 398 if(CountBuFFIn==1) { // если есть первый байт
igor_v 21:bc8c1cec3da6 399 if (BuffTemp[0] != SOC_In) {
Kovalev_D 93:b3803774f110 400 ReadCon1(BuffTemp);
igor_v 30:17c84ed091b3 401 Gyro.RsErrLine += 0x100;//WriteCon("\n\r ...Error.... ");
Kovalev_D 93:b3803774f110 402 BuffTemp[99]=Gyro.RsErrLine;
Kovalev_D 102:4270092be987 403
igor_v 21:bc8c1cec3da6 404 }
Kovalev_D 92:c892f0311aa7 405 } else if(CountBuFFIn==2) { //если второй ,fqn
igor_v 30:17c84ed091b3 406 if (BuffTemp[1] != Gyro.My_Addres) {
Kovalev_D 93:b3803774f110 407 ReadCon1(BuffTemp);
igor_v 30:17c84ed091b3 408 Gyro.RsErrLine += 0x1;//WriteCon("\n\r ...Error_ADDRES.... ");
igor_v 21:bc8c1cec3da6 409 }
igor_v 42:6fc307c4963e 410 } else if(CountBuFFIn==3) { // если ьоетий байт
igor_v 30:17c84ed091b3 411 Gyro.CMD_In=BuffTemp[2];
Kovalev_D 92:c892f0311aa7 412 N=Getlengf();
Kovalev_D 92:c892f0311aa7 413 }
Kovalev_D 92:c892f0311aa7 414 else if(CountBuFFIn==4 && (N==6))
Kovalev_D 92:c892f0311aa7 415 { // N - длина посылки аскглд(для записи параметров). определяется по коду команды в Getlengf();
igor_v 21:bc8c1cec3da6 416 Param1=BuffTemp[3];
Kovalev_D 92:c892f0311aa7 417 }
Kovalev_D 92:c892f0311aa7 418 else if((CountBuFFIn==5)&&(N==7))
Kovalev_D 92:c892f0311aa7 419 {
Kovalev_D 92:c892f0311aa7 420
igor_v 21:bc8c1cec3da6 421 Param1=BuffTemp[3];
igor_v 21:bc8c1cec3da6 422 Param2=BuffTemp[4];
igor_v 0:8ad47e2b6f00 423
Kovalev_D 92:c892f0311aa7 424 }
Kovalev_D 92:c892f0311aa7 425 else if((CountBuFFIn==6)&&(N==8))
Kovalev_D 92:c892f0311aa7 426 {
igor_v 21:bc8c1cec3da6 427 Param1=BuffTemp[3];
igor_v 21:bc8c1cec3da6 428 Param2=BuffTemp[4];
igor_v 21:bc8c1cec3da6 429 Param3=BuffTemp[5];
Kovalev_D 92:c892f0311aa7 430 }
Kovalev_D 102:4270092be987 431 else if((CountBuFFIn==8)&&(N==10))
Kovalev_D 102:4270092be987 432 {
Kovalev_D 102:4270092be987 433 Param1=BuffTemp[4];
Kovalev_D 102:4270092be987 434 Param2=BuffTemp[5];
Kovalev_D 102:4270092be987 435 Param3=BuffTemp[6];
Kovalev_D 102:4270092be987 436 Param4=BuffTemp[7];
Kovalev_D 102:4270092be987 437 }
Kovalev_D 98:95b8e79f13e1 438
Kovalev_D 92:c892f0311aa7 439 else if(CountBuFFIn > (N-1))
Kovalev_D 92:c892f0311aa7 440 {
Kovalev_D 93:b3803774f110 441 ReadCon1(BuffTemp);
igor_v 30:17c84ed091b3 442 switch(Gyro.CMD_In) {
Kovalev_D 92:c892f0311aa7 443 case 0x99:
Kovalev_D 93:b3803774f110 444
igor_v 21:bc8c1cec3da6 445 CMD_Maintenance();
igor_v 21:bc8c1cec3da6 446 break;
igor_v 21:bc8c1cec3da6 447 case 0xD8:
igor_v 21:bc8c1cec3da6 448 CMD_M_Control_D8();
igor_v 21:bc8c1cec3da6 449 case 0xD9:
igor_v 21:bc8c1cec3da6 450 CMD_M_Control_D9();
igor_v 21:bc8c1cec3da6 451 break;
igor_v 21:bc8c1cec3da6 452 case 0x0A:
Kovalev_D 45:cbc955aecebe 453 CMD_M_Stymul();
igor_v 21:bc8c1cec3da6 454 break;
igor_v 21:bc8c1cec3da6 455 case 0xDD:
igor_v 21:bc8c1cec3da6 456 Rate_Flag=1;
Kovalev_D 102:4270092be987 457 break;
Kovalev_D 102:4270092be987 458 case 0xE4:
Kovalev_D 102:4270092be987 459 CMD_M_vib();
Kovalev_D 102:4270092be987 460 break;
Kovalev_D 103:e96f08947def 461 case 0xE6:
Kovalev_D 103:e96f08947def 462 Gph_W();
Kovalev_D 103:e96f08947def 463 break;
Kovalev_D 103:e96f08947def 464
Kovalev_D 103:e96f08947def 465
igor_v 30:17c84ed091b3 466 Gyro.RsErrLine = 0;
Kovalev_D 103:e96f08947def 467
Kovalev_D 103:e96f08947def 468
Kovalev_D 102:4270092be987 469 }
igor_v 21:bc8c1cec3da6 470 }
igor_v 0:8ad47e2b6f00 471 }
igor_v 0:8ad47e2b6f00 472
igor_v 0:8ad47e2b6f00 473
igor_v 21:bc8c1cec3da6 474