Dmitry Kovalev
/
LG
n
Fork of LG by
Diff: commandset.c
- Revision:
- 21:bc8c1cec3da6
- Parent:
- 1:f2adcae3d304
diff -r 18e3fd7b92d0 -r bc8c1cec3da6 commandset.c --- a/commandset.c Tue Feb 02 17:14:25 2016 +0000 +++ b/commandset.c Wed Feb 03 07:19:30 2016 +0000 @@ -6,911 +6,809 @@ #include "Global.h" + #define COMMAND_DEBUG //++++++++++++++++debug++++++++++++++++ extern uint32_t In_Flag; unsigned char BuffTemp1[100]; -//e. +++++++++++++++++++ variables +++++++++++++++++++++++++++++++++++++++++++ //r. +++++++++++++++++++ ���������� +++++++++++++++++++++++++++++++++++++++++++ -uint32_t CMD_Mode = 0; //e. operation mode of the device //r. ����� ������ ���������� -uint32_t CMD_Code; //e. full code of the last recieved command //r. ������ ��� ��������� �������� ������� -uint32_t wrk_period; //e. run period in cycles //r. ������� ������ � ������ +//e. +++++++++++++++++++ variables +++++++++++++++++++++++++++++++++++++++++++ //r. +++++++++++++++++++ переменные +++++++++++++++++++++++++++++++++++++++++++ +uint32_t CMD_Mode = 0; //e. operation mode of the device //r. режим работы устройства +uint32_t CMD_Code; //e. full code of the last recieved command //r. полный код последней принятой команды +uint32_t wrk_period; //e. run period in cycles //r. рабочий период в циклах uint32_t blt_in_test; - int32_t ScopeMode; //e. mode of display for a control point of an scope //r. ����� ����������� ��� ����������� ����� ������������ +int32_t ScopeMode; //e. mode of display for a control point of an scope //r. режим отображения для контрольной точки осциллографа -void SetSpeedPeriod(void) //e.============ procedure of set of rate and periodicity of answer ======== //r.============ ��������� ��������� �������� � ������������� ������ ======== +void SetSpeedPeriod(void) //e.============ procedure of set of rate and periodicity of answer ======== //r.============ процедура установки скорости и периодичности ответа ======== { - if ((rcv_buf[3] & 0x0080) != 0) //e. is periodic data transmission needed? //r. ������������� �������� ���������? - { - trm_cycl = 1; //e. yes, set present flag //r. ��, ���������� ������ ���� - } - else - { - trm_cycl = 0; //e. no, reset present flag //r. ���, �������� ������ ���� - } - - SRgR &= 0xffcf; //e. clear the bit of transfer rate //r. ������� ��� �������� �������� - trm_rate = (rcv_buf[3] >> 1) & 0x0030; - SRgR |= trm_rate; //e. set present transfer rate //r. ���������� ������ �������� �������� + if ((rcv_buf[3] & 0x0080) != 0) { //e. is periodic data transmission needed? //r. периодическая передача трубуется? + trm_cycl = 1; //e. yes, set present flag //r. да, установить данный флаг + } else { + trm_cycl = 0; //e. no, reset present flag //r. нет, сбросить данный флаг + } + + SRgR &= 0xffcf; //e. clear the bit of transfer rate //r. очистка бит скорости передачи + trm_rate = (rcv_buf[3] >> 1) & 0x0030; + SRgR |= trm_rate; //e. set present transfer rate //r. установить данную скорость передачи } // SetSpeedPeriod -void B_Delta_BINS(void) //r.===��������� ������ ����������� ��������� ��������� ��������� � ��� � ������� 14.18 +void B_Delta_BINS(void) //r.===процедура выдачи накопленных разностей счетчиков импульсов в ИНС в формате 14.18 { - Valid_Data = 0; // reset all bits of status word + Valid_Data = 0; // reset all bits of status word - num_of_par = 2; //e. 2 parameters output //r. �������� 2 ��������� - addr_param[0] = &Output.Str.BINS_dif; //e. set the first parameter address //r. ������ ����� ������� ��������� - addr_param[1] = &Valid_Data; //e. set the second paremeter address //r. ������ ����� ������� ��������� - size_param[0] = 4; //e. the length of the 1st parameter is 4 bytes //r. �������� 1 ���e� ����� 4 ����� - size_param[1] = 1; //e. the length of the 2nd parameter is 1 byte (!! - the high byte, instead of low is transmitted) //r. �������� 2 ����� ����� 1 ���� (!!! ���������� ������� ����, � �� �������) - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + num_of_par = 2; //e. 2 parameters output //r. выводить 2 параметра + addr_param[0] = &Output.Str.BINS_dif; //e. set the first parameter address //r. задать адрес первого параметра + addr_param[1] = &Valid_Data; //e. set the second paremeter address //r. задать адрес второго параметра + size_param[0] = 4; //e. the length of the 1st parameter is 4 bytes //r. параметр 1 имеeт длину 4 байта + size_param[1] = 1; //e. the length of the 2nd parameter is 1 byte (!! - the high byte, instead of low is transmitted) //r. параметр 2 имеет длину 1 байт (!!! передается старший байт, а не младший) + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // B_Delta_BINS -void B_Delta_SF(void) //r.=== ��������� ��� ��������� ����������� ��������� +void B_Delta_SF(void) //r.=== процедура для измерения масштабного множителя { - //e. time for data transfer has come, we work only with dither counters //r. ������ ����� ���������� ������, �������� ������ � �����-���������� - RgConB = RATE_VIBRO_1; //e. set in the additional register of device control the mode of work with dither counters and the filter of moving average //r. ������������� � �������������� �������� ���������� ����� ������ � ��������������� � �������� ����������� �������� + //e. time for data transfer has come, we work only with dither counters //r. пришло время передавать данные, работаем только с вибро-счетчиками + RgConB = RATE_VIBRO_1; //e. set in the additional register of device control the mode of work with dither counters and the filter of moving average //r. устанавливаем в дополнительном регистре управления режим работы с вибросчетчиками и фильтром скользящего среднего - Valid_Data = 0; // reset all bits of status word + Valid_Data = 0; // reset all bits of status word - num_of_par = 5;//8; //e. 8 parameters output //r. �������� 8 ��������� - addr_param[0] = &Output.Str.SF_dif; //e. set the first parameter address //r. ������ ����� ������� ��������� - addr_param[1] = &Out_main_cycle_latch; //e. set the second paremeter address //r. ������ ����� ������� ��������� - addr_param[2] = &Out_T_latch;//F_ras; - addr_param[3] = &Output.Str.WP_reg; - addr_param[4] = &Output.Str.Tmp_Out; - size_param[0] = 8; //e. the length of the 1st parameter is 4 bytes //r. �������� 1 ���e� ����� 4 ����� - size_param[1] = 4; //e. the length of the 2nd parameter is 1 byte (!! - the high byte, instead of low is transmitted) //r. �������� 2 ����� ����� 1 ���� (!!! ���������� ������� ����, � �� �������) - size_param[2] = 2; - size_param[3] = 2; - size_param[4] = 12; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + num_of_par = 5;//8; //e. 8 parameters output //r. выводить 8 параметра + addr_param[0] = &Output.Str.SF_dif; //e. set the first parameter address //r. задать адрес первого параметра + addr_param[1] = &Out_main_cycle_latch; //e. set the second paremeter address //r. задать адрес второго параметра + addr_param[2] = &Out_T_latch;//F_ras; + addr_param[3] = &Output.Str.WP_reg; + addr_param[4] = &Output.Str.Tmp_Out; + size_param[0] = 8; //e. the length of the 1st parameter is 4 bytes //r. параметр 1 имеeт длину 4 байта + size_param[1] = 4; //e. the length of the 2nd parameter is 1 byte (!! - the high byte, instead of low is transmitted) //r. параметр 2 имеет длину 1 байт (!!! передается старший байт, а не младший) + size_param[2] = 2; + size_param[3] = 2; + size_param[4] = 12; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // B_Delta_SF void B_Delta_PS_execution(void) { - static void * paramTable[11] = {&(Output.Str.F_ras) , &(Output.Str.HF_reg), &(Output.Str.T_Vibro), &(Output.Str.L_Vibro), &(Output.Str.WP_reg), &(Output.Str.Tmp_Out[0]), &(Output.Str.Tmp_Out[1]), &(Output.Str.Tmp_Out[2]), &(Output.Str.Tmp_Out[3]), &(Output.Str.Tmp_Out[4]), &(Output.Str.Tmp_Out[5])}; - static uint32_t val, paramTmpWord; - static uint32_t * ptr; - static uint32_t index = 0; - - if ((index & 1) == 0) // high byte - { - ptr = (uint32_t*)paramTable[index >> 1]; - val = *ptr; - paramTmpWord = val >> 8; // move it to low byte of word - } - else - { - paramTmpWord = val; - } - paramTmpWord &= 0xFF; - paramTmpWord |= index << 8; - - Valid_Data = 0; // reset all bits of status word - + static void * paramTable[11] = {&(Output.Str.F_ras) , &(Output.Str.HF_reg), &(Output.Str.T_Vibro), &(Output.Str.L_Vibro), &(Output.Str.WP_reg), &(Output.Str.Tmp_Out[0]), &(Output.Str.Tmp_Out[1]), &(Output.Str.Tmp_Out[2]), &(Output.Str.Tmp_Out[3]), &(Output.Str.Tmp_Out[4]), &(Output.Str.Tmp_Out[5])}; + static uint32_t val, paramTmpWord; + static uint32_t * ptr; + static uint32_t index = 0; + + if ((index & 1) == 0) { // high byte + ptr = (uint32_t*)paramTable[index >> 1]; + val = *ptr; + paramTmpWord = val >> 8; // move it to low byte of word + } else { + paramTmpWord = val; + } + paramTmpWord &= 0xFF; + paramTmpWord |= index << 8; - num_of_par = 2; //e. 2 parameters output //r. �������� 2 ��������� - addr_param[0] = &Output.Str.PS_dif; //e. set the first parameter address //r. ������ ����� ������� ��������� - addr_param[1] = ¶mTmpWord; - size_param[0] = 2; //e. the 1st parameter has 2 bytes length //r. �������� 1 ���e� ����� 2 ���� - size_param[1] = 2; //e. the 2nd and 3rd parameters have 1 bytes length//r. ��������� 2,3 ����� ����� 1 ���� - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + Valid_Data = 0; // reset all bits of status word + - index++; - if (index > 21) - { - index = 0; - } + num_of_par = 2; //e. 2 parameters output //r. выводить 2 параметра + addr_param[0] = &Output.Str.PS_dif; //e. set the first parameter address //r. задать адрес первого параметра + addr_param[1] = ¶mTmpWord; + size_param[0] = 2; //e. the 1st parameter has 2 bytes length //r. параметр 1 имеeт длину 2 байт + size_param[1] = 2; //e. the 2nd and 3rd parameters have 1 bytes length//r. параметры 2,3 имеют длину 1 байт + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика + + index++; + if (index > 21) { + index = 0; + } } // B_Delta_PS_execution -void M_Mirror(void) //e.---------------- prepare to transmission of the copy of receiving buffer ------------- //r.---------------- ���������� �������� ����� ��������� ������ ------------- +void M_Mirror(void) //e.---------------- prepare to transmission of the copy of receiving buffer ------------- //r.---------------- подготовка передачи копии приемного буфера ------------- { - num_of_par = 1; //e. 1 parameter output //r. �������� 1 �������� + num_of_par = 1; //e. 1 parameter output //r. выводить 1 параметр - addr_param[0] = &rcv_copy; //e. set the address of the receiving buffer //r. ��������� ������ ��������� ������ + addr_param[0] = &rcv_copy; //e. set the address of the receiving buffer //r. установка адреса приемного буфера - //e. multiply the number of copied words on 2, since each //r. �������� ����� ������������� ���� �� 2, �.�. ������ - //e. will be trasferred in two steps: first zero, and then //r. ����� ������������ � ��� ������: ������� �������, � ����� - size_param[0] = rcv_byt_copy << 1; // multiplay by 2 - if (size_param[0] >= 64) - { - size_param[0] = 64; //e. maximal amount - no more than double length of the copy buffer //r. ������������ ���������� - �� ����� ������� ����� ������-����� - } - trm_rate = 0; //e. set the transfer rate to the 38400 bauds //r. ���������� �������� �������� 38400 ��� - trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. ��������� �������� ��������� � ����� - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + //e. multiply the number of copied words on 2, since each //r. умножить число скопированных слов на 2, т.к. каждое + //e. will be trasferred in two steps: first zero, and then //r. будет передаватьсч в два приема: сначала нулевой, а затем + size_param[0] = rcv_byt_copy << 1; // multiplay by 2 + if (size_param[0] >= 64) { + size_param[0] = 64; //e. maximal amount - no more than double length of the copy buffer //r. максимальное количество - не более двойной длины буфера-копии + } + trm_rate = 0; //e. set the transfer rate to the 38400 bauds //r. установить скорость передачи 38400 бод + trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. запретить передачу параметра в цикле + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // M_Mirror - -void Mk_Ask1(void) //r.----------------- prepare of the standart answer 1 ---------------------- //r.----------------- ���������� ������������ ������ 1 ---------------------- + +void Mk_Ask1(void) //r.----------------- prepare of the standart answer 1 ---------------------- //r.----------------- подготовка стандартного ответа 1 ---------------------- { - CMD_Code &= 0xff00; //e. clear bits of errors //r. �������� � ��� ���� ������ - num_of_par = 1; //e. total amount parameters in aswer - 1 //r. ����� ���������� � ������ - 1 - addr_param[0] = &CMD_Code; //e. and this parameter - returnable command code //r. � ���� �������� - ������������ ��� ������� - size_param[0] = 2; //e. and both its bytes //r. ������ ��� ��� ����� - trm_ena = 1; //e. allow operation of the transmitter of the device //r. ��������� ������ ����������� ���������� + CMD_Code &= 0xff00; //e. clear bits of errors //r. очистить в нем поле ошибок + num_of_par = 1; //e. total amount parameters in aswer - 1 //r. всего параметров в ответе - 1 + addr_param[0] = &CMD_Code; //e. and this parameter - returnable command code //r. и этот параметр - возвращаемый код команды + size_param[0] = 2; //e. and both its bytes //r. причем оба его байта + trm_ena = 1; //e. allow operation of the transmitter of the device //r. разрешить работу передатчика устройства } // Mk_Ask1 -void Mk_AskDev(void) //r.----------------- answer on a command for device mode set ------------ //r.----------------- ����� �� ������� ��������� ������ ������� ------------ +void Mk_AskDev(void) //r.----------------- answer on a command for device mode set ------------ //r.----------------- Ответ на команду установки режима прибора ------------ { - num_of_par = 2; //e. 2 parameters output //r. �������� ��� ��������� - addr_param[0] = &Device_Mode; //e. address of the counter mode register (intenal latch, external latch, etc.) //r. ����� �������� ������ ��������� (�����., ������� ������� � �.�.) - addr_param[1] = &SRgR; //e. address of the mode register of the processor card //r. ����� �������� ������ ����� ���������� - size_param[0] = 2; //e. size of the counter mode register - 2 bytes //r. ������ �������� ������ ��������� - 2 ����� - size_param[1] = 2; //e. size of the mode register of the processor card //r. ������ �������� ������ ����� ���������� - trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. ��������� �������� ��������� � ����� - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + num_of_par = 2; //e. 2 parameters output //r. выводить два параметра + addr_param[0] = &Device_Mode; //e. address of the counter mode register (intenal latch, external latch, etc.) //r. адрес регистра режима счетчиков (внутр., внешняя защелка и т.д.) + addr_param[1] = &SRgR; //e. address of the mode register of the processor card //r. адрес регистра режима платы процессора + size_param[0] = 2; //e. size of the counter mode register - 2 bytes //r. размер регистра режима счетчиков - 2 байта + size_param[1] = 2; //e. size of the mode register of the processor card //r. размер регистра режима платы процессора + trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. запретить передачу параметра в цикле + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // Mk_AskDev -void GLD_Output(void) //e. ----------- Output modes --------- //r. --------- ������ ������ --------- +void GLD_Output(void) //e. ----------- Output modes --------- //r. --------- Режимы вывода --------- { -if (Latch_Rdy) //latch appeared - { - if (trm_cycl) - trm_ena = 1; //enable packet generation + if (Latch_Rdy) { //latch appeared + if (trm_cycl) + trm_ena = 1; //enable packet generation - switch (CMD_Mode) - { - case 1: //e. Delta _PS mode - B_Delta_PS_execution(); - break; + switch (CMD_Mode) { + case 1: //e. Delta _PS mode + B_Delta_PS_execution(); + break; - case 5: - CMD_Code &= 0xff1f; //e. reset bits of current command code settings of periodicity and transfer rate //r. �������� � ������� ���� ������� ���� ��������� ������������� � �������� �������� - if (CMD_Code == 0xdd02) //e. is it the Rate2 mode? //r. ��� ����� Rate2? - { - if (data_Rdy & WHOLE_PERIOD) - { - trm_ena = 1; - } - else - trm_ena = 0; - } - break; - } - } + case 5: + CMD_Code &= 0xff1f; //e. reset bits of current command code settings of periodicity and transfer rate //r. сбросить в текущем коде команды биты установки периодичности и скорости передачи + if (CMD_Code == 0xdd02) { //e. is it the Rate2 mode? //r. это режим Rate2? + if (data_Rdy & WHOLE_PERIOD) { + trm_ena = 1; + } else + trm_ena = 0; + } + break; + } + } } // GLD_Delta ///// -------- commands ------------------------------------------------------------- -//e. set main device operation modes: //r. ��������� �������� ������� ������ �������: -//e. 1. acions with counters (internal latch, external latch with request over line, //r. 1. ������ �� ���������� (���������� �������, ������� ������� � �������� �� �����, -//e. external latch without request over line (instant answer after receiving of external latch pulse)) //r. ������� ������� ��� ������� �� ����� (����� ����� ����� ������� �������� �����. �������)) -//e. 2. line receiving/transmission rate //r. 2. �������� ������/�������� �� ����� -void B_Dev_Mode(void) +//e. set main device operation modes: //r. Установка основных режимов работы прибора: +//e. 1. acions with counters (internal latch, external latch with request over line, //r. 1. работа со счетчиками (внутренняя защелка, внешняя защелки с запросом по линии, +//e. external latch without request over line (instant answer after receiving of external latch pulse)) //r. внешняя защелка без запроса по линии (ответ сразу после прихода импульса внешн. защелки)) +//e. 2. line receiving/transmission rate //r. 2. скорость приема/передачи по линии +void B_Dev_Mode(void) { - Device_Mode = rcv_buf[3] & 0x00ff; //e. read the byte of command parameter from the receiver buffer //r. ������� �� ������ ��������� ���� ��������� ������� - //e. and write it to the counter mode register //r. � ���������� � ������� ������ ��������� - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_AskDev(); + Device_Mode = rcv_buf[3] & 0x00ff; //e. read the byte of command parameter from the receiver buffer //r. считать из буфера приемника байт параметра команды + //e. and write it to the counter mode register //r. и записываем в регистр режима счетчиков + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_AskDev(); } // B_Dev_Mode void B_BIT_Mode(void) { - uint8_t temp; - - temp = rcv_buf[3] & 0x000f & (~((rcv_buf[3] & 0x00f0) >> 4)); - if (temp == 1) // 1 - const test - { - Is_BIT = 1; - BIT_number = (long)(rcv_buf[4] & 0x00FF) << 24; - BIT_number |= (long)(rcv_buf[5] & 0x00FF) << 16; - BIT_number |= (long)(rcv_buf[6] & 0x00FF) << 8; - BIT_number |= (long)(rcv_buf[7] & 0x00FF); - } - else - { - Is_BIT = 0; - } - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_AskDev(); + uint8_t temp; + + temp = rcv_buf[3] & 0x000f & (~((rcv_buf[3] & 0x00f0) >> 4)); + if (temp == 1) { // 1 - const test + Is_BIT = 1; + BIT_number = (long)(rcv_buf[4] & 0x00FF) << 24; + BIT_number |= (long)(rcv_buf[5] & 0x00FF) << 16; + BIT_number |= (long)(rcv_buf[6] & 0x00FF) << 8; + BIT_number |= (long)(rcv_buf[7] & 0x00FF); + } else { + Is_BIT = 0; + } + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_AskDev(); } // B_BIT_Mode -void M_Stimul(void) //e. === procedure of output of analog (DAC) and digital (flags) stimuluses //r. === ��������� ������ ���������� (���) � ���������� (�����) �������� +void M_Stimul(void) //e. === procedure of output of analog (DAC) and digital (flags) stimuluses //r. === процедура вывода аналоговых (ЦАП) и дискретных (флаги) стимулов { - uint32_t chan; - - ScopeMode = 4; //e. WP_PHASE_DETECTOR allocate a mode of display for a control point of an scope //r. WP_PHASE_DETECTOR ��������� ����� ����������� ��� ����������� ����� ������������ + uint32_t chan; - chan = CMD_Code & 0x0007; //e. extracting the number of stimulus //r. ��������� ������ ������� + ScopeMode = 4; //e. WP_PHASE_DETECTOR allocate a mode of display for a control point of an scope //r. WP_PHASE_DETECTOR назначить режим отображения для контрольной точки осциллографа + + chan = CMD_Code & 0x0007; //e. extracting the number of stimulus //r. выделение номера стимула Output.ArrayOut[chan] = (((int)rcv_buf[4] << 8) | (int)rcv_buf[5])-0x8000; - - if ((CMD_Code & (1 << 7)) == 0) //e. to estimate: whether the answer is required //r. �������: ��������� �� ����� - { - return; //e. if no - return //r. ���� ��� - ������� - } - Mk_Ask1(); //e. otherwise - answer output //r. ����� - ������ ����� + + if ((CMD_Code & (1 << 7)) == 0) { //e. to estimate: whether the answer is required //r. оценить: требуется ли ответ + return; //e. if no - return //r. если нет - возврат + } + Mk_Ask1(); //e. otherwise - answer output //r. иначе - выдать ответ } // M_Stymul - -void M_Status(void) //e. === procedure of initialization of transmission of the device status //r. === ��������� ������������� �������� ������� ���������� + +void M_Status(void) //e. === procedure of initialization of transmission of the device status //r. === процедура инициализации передачи статуса устройства { - SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. � ���������� �������� �������� ������ � ��� ������������� + SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. и установить скорость передачи ответа и его периодичность - num_of_par = 2; //e. 2 parameters output //r. �������� ��� ��������� - addr_param[0] = &blt_in_test; //e. the register address of the self-testing result //r. ����� �������� ���������� ���������������� - addr_param[1] = &ser_num; //e. address of the register of errors of line //r. ����� �������� ������ ����� - size_param[0] = 2; //e. size of the self-test register - 2 bytes //r. ������ �������� ���������������� - 2 ����� - size_param[1] = 2; //e. size of the register of errors of line //r. ������ �������� ������ ����� + num_of_par = 2; //e. 2 parameters output //r. выводить два параметра + addr_param[0] = &blt_in_test; //e. the register address of the self-testing result //r. адрес регистра результата самотестирования + addr_param[1] = &ser_num; //e. address of the register of errors of line //r. адрес регистра ошибок линии + size_param[0] = 2; //e. size of the self-test register - 2 bytes //r. размер регистра самотестирования - 2 байта + size_param[1] = 2; //e. size of the register of errors of line //r. размер регистра ошибок линии - trm_rate = 0; //e. set the transfer rate to the 38400 bauds //r. ���������� �������� �������� 38400 ��� - trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. ��������� �������� ��������� � ����� - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + trm_rate = 0; //e. set the transfer rate to the 38400 bauds //r. установить скорость передачи 38400 бод + trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. запретить передачу параметра в цикле + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // M_Status -void M_Clear(void) //e.---------------- cleaning of the register of errors of line -------------------------- //r.---------------- ������� �������� ������ ����� -------------------------- +void M_Clear(void) //e.---------------- cleaning of the register of errors of line -------------------------- //r.---------------- очистка регистра ошибок линии -------------------------- { - line_err = 0; + line_err = 0; } // M_Clear -void M_Tmp_W(void) //e.----------------- write the command to the AD7714 IC ------------------------- //r.----------------- ������ ������� � ����� AD7714 ------------------------- +void M_Tmp_W(void) //e.----------------- write the command to the AD7714 IC ------------------------- //r.----------------- запись команды в схемы AD7714 ------------------------- { - Mk_Ask1(); + Mk_Ask1(); } -void M_Tmp_R(void) //e.----------------- read the data from the AD7714 IC -------------------------- //r.----------------- ������ ������ �� ���� AD7714 -------------------------- +void M_Tmp_R(void) //e.----------------- read the data from the AD7714 IC -------------------------- //r.----------------- чтение данных из схем AD7714 -------------------------- { } // M_Tmp_R -void M_ADC_R(void) //e.----------------- read the data from the ADCs ADS1250, ADS8321 --------- //r.----------------- ������ ������ �� ������� ��� ADS1250, ADS8321 --------- +void M_ADC_R(void) //e.----------------- read the data from the ADCs ADS1250, ADS8321 --------- //r.----------------- чтение данных из каналов АЦП ADS1250, ADS8321 --------- { - SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. ���������� �������� �������� ������ � ��� ������������� - UART_SwitchSpeed(trm_rate); - - num_of_par = 4; //e. 4 parameters output //r. �������� ������ ��������� - addr_param[0] = 0; //e. //r. <!-- �������������� ��� ���, ������ �� ������������ - addr_param[1] = 0; //e. //r. --> - addr_param[2] = 0; - addr_param[3] = &(Input.StrIn.HF_out); //e. set the 4th parameter address _HF_out //r. ������ ����� ���������� ��������� _HF_out - size_param[0] = 2; //e. size of the parameters - 2 bytes //r. ������ ���������� - 2 ����� - size_param[1] = 2; - size_param[2] = 2; - size_param[3] = 2; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. установить скорость передачи ответа и его периодичность + UART_SwitchSpeed(trm_rate); + + num_of_par = 4; //e. 4 parameters output //r. выводить четыре параметра + addr_param[0] = 0; //e. //r. <!-- использовались для ДУП, теперь не используются + addr_param[1] = 0; //e. //r. --> + addr_param[2] = 0; + addr_param[3] = &(Input.StrIn.HF_out); //e. set the 4th parameter address _HF_out //r. задать адрес четвертого параметра _HF_out + size_param[0] = 2; //e. size of the parameters - 2 bytes //r. размер параметров - 2 байта + size_param[1] = 2; + size_param[2] = 2; + size_param[3] = 2; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // M_ADC_R -void M_Cnt_R(void) //r.----------------- read the counters of the Elio5 card -------------------------- //r.----------------- ������ ��������� ����� Elio5 -------------------------- +void M_Cnt_R(void) //r.----------------- read the counters of the Elio5 card -------------------------- //r.----------------- чтение счетчиков платы Elio5 -------------------------- { - SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. ���������� �������� �������� ������ � ��� ������������� - UART_SwitchSpeed(trm_rate); - num_of_par = 2; //e. 2 parameters output //r. �������� ��� ��������� + SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. установить скорость передачи ответа и его периодичность + UART_SwitchSpeed(trm_rate); + num_of_par = 2; //e. 2 parameters output //r. выводить два параметра - addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the first parameter address //r. ������ ����� ������� ��������� - addr_param[1] = &(Output.Str.Cnt_Mns); //e. set the second paremeter address //r. ������ ����� ������� ��������� - size_param[0] = 2; //e. size of the parameters - 2 bytes //r. ������ ���������� - 2 ����� - size_param[1] = 2; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the first parameter address //r. задать адрес первого параметра + addr_param[1] = &(Output.Str.Cnt_Mns); //e. set the second paremeter address //r. задать адрес второго параметра + size_param[0] = 2; //e. size of the parameters - 2 bytes //r. размер параметров - 2 байта + size_param[1] = 2; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // M_Cnt_R - -/*void M_e5r_W(void) //r.----------------- write to the mode register of the Elio5 card ------------------ //r.----------------- ������ � ������� ������ ����� Elio5 ------------------ + +/*void M_e5r_W(void) //r.----------------- write to the mode register of the Elio5 card ------------------ //r.----------------- запись в регистр режима платы Elio5 ------------------ { - //e. read the byte of command parameter from the receiver buffer //r. ������� �� ������ ��������� ���� ��������� ������� - //e. and write it to the card mode register and its copy //r. � �������� ��� � ������� ������ ����� � � ��� ����� -#if !defined COMMAND_DEBUG - Copy_e5_RgR = rcv_buf[3]; - io_space_write(E5_RGR, Copy_e5_RgR); + //e. read the byte of command parameter from the receiver buffer //r. считать из буфера приемника байт параметра команды + //e. and write it to the card mode register and its copy //r. и записать его в регистр режима платы и в его копию +#if !defined COMMAND_DEBUG + Copy_e5_RgR = rcv_buf[3]; + io_space_write(E5_RGR, Copy_e5_RgR); #endif - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется Mk_Ask1(); } // M_e5r_W */ /* -void M_e5rA_W(void) //e.----- write to the 1st additional mode register of the Elio5 card ---------- //r.----- ������ � 1-�� �������������� ������� ������ ����� Elio5 ---------- +void M_e5rA_W(void) //e.----- write to the 1st additional mode register of the Elio5 card ---------- //r.----- запись в 1-ый дополнительный регистр режима платы Elio5 ---------- { - //e. this command is used for switching a signal on which data counters are latched: //r. ��� ������� ������������ ��� ������������ �������, �� �������� ������������� - //e. on the Reper signal or on Sign Meander //r. �������������� ��������: ���� �� Reper`� ���� �� RefMeandr`� - - //e. read the byte of command parameter from the receiver buffer //r. ������� �� ������ ��������� ���� ��������� ������� - //e. and write it to the card mode register and its copy //r. � �������� ��� � ������� ������ ����� � � ��� ����� - Copy_e5_RgRA = rcv_buf[3]; -//??? Device_Mode = Copy_e5_RgRA; //e. and write it to the counter mode register //r. � ���������� � ������� ������ ��������� -#if !defined COMMAND_DEBUG + //e. this command is used for switching a signal on which data counters are latched: //r. эта команда используется для переключения сигнала, по которому защелкиваются + //e. on the Reper signal or on Sign Meander //r. информационные счетчики: либо по Reper`у либо по RefMeandr`у + + //e. read the byte of command parameter from the receiver buffer //r. считать из буфера приемника байт параметра команды + //e. and write it to the card mode register and its copy //r. и записать его в регистр режима платы и в его копию + Copy_e5_RgRA = rcv_buf[3]; +//??? Device_Mode = Copy_e5_RgRA; //e. and write it to the counter mode register //r. и записываем в регистр режима счетчиков +#if !defined COMMAND_DEBUG io_space_write(E5_RGRA, Copy_e5_RgRA); #endif - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется Mk_Ask1(); } // M_e5rA_W */ - -void M_Ctl_R(void) //r.----------------- reading the control register of the device ----------------- //r.----------------- ������ �������� ���������� ���������� ----------------- + +void M_Ctl_R(void) //r.----------------- reading the control register of the device ----------------- //r.----------------- чтение регистра управления устройства ----------------- { - num_of_par = 2; //e. 2 parameters transfer //r. ���������� 2 ��������� - addr_param[0] = &CMD_Code; //e. the first parameter in answer - returned command code //r. ������ �������� � ������ - ������������ ��� ������� - size_param[0] = 2; - size_param[1] = 2; //e. two bytes also have control registers //r. ��� ����� ����� ����� � �������� ���������� - if ((rcv_buf[3] & (1 << 4)) == 0) //e. is main control register needed? //r. ��������� �������� ������� ����������? - { - addr_param[1] = &RgConA; //e. yes //r. �� - } - else - { - addr_param[1] = &RgConB; //e. otherwise - load the address of the addititonal register //r. ����� - ��������� ����� ��������������� �������� - } - CMD_Code &= 0xff10; //e. clear in it bit of errors and byte number //r. �������� � ��� ���� ������ � ������ ���� - trm_ena = 1; //e. allow operation of the transmitter of line //r. ��������� ������ ����������� ����� + num_of_par = 2; //e. 2 parameters transfer //r. передавать 2 параметра + addr_param[0] = &CMD_Code; //e. the first parameter in answer - returned command code //r. первый параметр в ответе - возвращаемый код команды + size_param[0] = 2; + size_param[1] = 2; //e. two bytes also have control registers //r. два байта имеют также и регистры управления + if ((rcv_buf[3] & (1 << 4)) == 0) { //e. is main control register needed? //r. требуется основной регистр управления? + addr_param[1] = &RgConA; //e. yes //r. да + } else { + addr_param[1] = &RgConB; //e. otherwise - load the address of the addititonal register //r. иначе - загрузить адрес дополнительного регистра + } + CMD_Code &= 0xff10; //e. clear in it bit of errors and byte number //r. сбросить в нем поля ошибок и номера бита + trm_ena = 1; //e. allow operation of the transmitter of line //r. разрешить работу передатчика линии } // M_Ctl_R - -void M_Ctl_M(void) //r.----------------- modification of the control register of the device ------------ //r.----------------- ����������� �������� ���������� ���������� ------------ + +void M_Ctl_M(void) //r.----------------- modification of the control register of the device ------------ //r.----------------- модификация регистра управления устройства ------------ { - uint32_t * ptr; - uint32_t bit_numb; - - num_of_par = 2; //e. 2 parameters transfer //r. ���������� 2 ��������� - addr_param[0] = &CMD_Code; //e. the first parameter in answer - returned command code //r. ������ �������� � ������ - ������������ ��� ������� - size_param[0] = 2; - size_param[1] = 2; //e. two bytes also have control registers //r. ��� ����� ����� ����� � �������� ���������� - if ((CMD_Code & (1 << 4)) == 0) //e. is main control register needed? //r. ��������� �������� ������� ����������? - { - ptr = &RgConA; //e. yes //r. �� - } - else - { - ptr = &RgConB; //e. otherwise - load the address of the addititonal register //r. ����� - ��������� ����� ��������������� �������� - } - addr_param[1] = ptr; //e. the second parameter in answer - modified register //r. ������ �������� � ������ - ���������������� ������� - - bit_numb = CMD_Code & 0x000f; //e. extract the number of the changeable bit //r. �������� ����� ����������� ���� - if ((CMD_Code & (1 << 7)) == 0) // Is clear bit - { - *ptr &= ~(1 << bit_numb); // yes, clear bit - } - else - { - *ptr |= 1 << bit_numb; // no, set bit - } - - CMD_Code &= 0xff10; //e. clear in command bit of errors and byte number //r. �������� � ������� ���� ������ � ������ ���� - trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. ��������� �������� ��������� � ����� - trm_ena = 1; //e. allow operation of the transmitter of line //r. ��������� ������ ����������� ����� + uint32_t * ptr; + uint32_t bit_numb; + + num_of_par = 2; //e. 2 parameters transfer //r. передавать 2 параметра + addr_param[0] = &CMD_Code; //e. the first parameter in answer - returned command code //r. первый параметр в ответе - возвращаемый код команды + size_param[0] = 2; + size_param[1] = 2; //e. two bytes also have control registers //r. два байта имеют также и регистры управления + if ((CMD_Code & (1 << 4)) == 0) { //e. is main control register needed? //r. требуется основной регистр управления? + ptr = &RgConA; //e. yes //r. да + } else { + ptr = &RgConB; //e. otherwise - load the address of the addititonal register //r. иначе - загрузить адрес дополнительного регистра + } + addr_param[1] = ptr; //e. the second parameter in answer - modified register //r. второй параметр в ответе - модифицированный регистр + + bit_numb = CMD_Code & 0x000f; //e. extract the number of the changeable bit //r. выделить номер изменяемого бита + if ((CMD_Code & (1 << 7)) == 0) { // Is clear bit + *ptr &= ~(1 << bit_numb); // yes, clear bit + } else { + *ptr |= 1 << bit_numb; // no, set bit + } + + CMD_Code &= 0xff10; //e. clear in command bit of errors and byte number //r. сбросить в команде поля ошибок и номера бита + trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. запретить передачу параметра в цикле + trm_ena = 1; //e. allow operation of the transmitter of line //r. разрешить работу передатчика линии } // M_Ctl_M - -void M_Flg_R(void) //e.------------ reading the register of input flags --------------------------- //r.------------ ������ �������� ������� ������ --------------------------- + +void M_Flg_R(void) //e.------------ reading the register of input flags --------------------------- //r.------------ чтение регистра входных флагов --------------------------- { - - num_of_par = 1; //e. 1 parameter output //r. �������� ���� �������� - addr_param[0] = &In_Flag; //e. the address of the flag register copy //r. ����� ����� �������� ������ - size_param[0] = 2; //e. size of the buffer - 2 bytes //r. ������ ������ - 2 ����� - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + + num_of_par = 1; //e. 1 parameter output //r. выводить один параметр + addr_param[0] = &In_Flag; //e. the address of the flag register copy //r. адрес копии регистра флагов + size_param[0] = 2; //e. size of the buffer - 2 bytes //r. размер буфера - 2 байта + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // M_Flg_R - -void M_Vib_W(void) //r.------------ set the oscillation period of the dither drive ----------------- //r.------------ ��������� ������� ��������� ������������ ----------------- + +void M_Vib_W(void) //r.------------ set the oscillation period of the dither drive ----------------- //r.------------ установка периода колебаний вибропривода ----------------- { - ScopeMode = 1; //e. VB_PHASE_DETECTOR allocate a mode of display for a control point of an scope //r. VB_PHASE_DETECTOR ��������� ����� ����������� ��� ����������� ����� ������������ + ScopeMode = 1; //e. VB_PHASE_DETECTOR allocate a mode of display for a control point of an scope //r. VB_PHASE_DETECTOR назначить режим отображения для контрольной точки осциллографа - Output.Str.T_Vibro = (rcv_buf[4] << 8) | (rcv_buf[5] & 0xFF); //e. new variable of the period //r. ����� ���������� ������� -/* sprintf(BuffTemp1, "\n\r F = %d ", Output.Str.T_Vibro); - SendToBuff(BuffTemp1,15);*/ - Output.Str.L_Vibro= (rcv_buf[6] << 8) | (rcv_buf[7] & 0xFF); //e. new variable of the pulse width //r. ����� ���������� ������������ ��������� - /*sprintf(BuffTemp1, "\n\r L = %d ", Output.Str.L_Vibro); - SendToBuff(BuffTemp1,15);*/ - VibroDither_Set(); //e. and output its value to period registers on card //r. ������� �� �������� � �������� ������� �� ����� + Output.Str.T_Vibro = (rcv_buf[4] << 8) | (rcv_buf[5] & 0xFF); //e. new variable of the period //r. новая переменная периода + /* sprintf(BuffTemp1, "\n\r F = %d ", Output.Str.T_Vibro); + SendToBuff(BuffTemp1,15);*/ + Output.Str.L_Vibro= (rcv_buf[6] << 8) | (rcv_buf[7] & 0xFF); //e. new variable of the pulse width //r. новая переменная длительности импульсов + /*sprintf(BuffTemp1, "\n\r L = %d ", Output.Str.L_Vibro); + SendToBuff(BuffTemp1,15);*/ + VibroDither_Set(); //e. and output its value to period registers on card //r. вывести ее значение в регистры периода на плате - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_Vib_W -void M_Gph_W(void) //e.------------ set the gain factor of photodetector channels ------------------- //r.------------ ��������� �������� ������� ������������� ------------------- +void M_Gph_W(void) //e.------------ set the gain factor of photodetector channels ------------------- //r.------------ установка усиления каналов фотоприемника ------------------- { - Device_blk.Str.Gain_Ph_A = rcv_buf[4]; //e. read from the receiver buffer the value of the gain factor of the A channel //r. ������� �� ������ ��������� �������� �������� ������ � - Device_blk.Str.Gain_Ph_B = rcv_buf[5]; //e. read from the receiver buffer the value of the gain factor of the B channel //r. ������� �� ������ ��������� �������� �������� ������ � + Device_blk.Str.Gain_Ph_A = rcv_buf[4]; //e. read from the receiver buffer the value of the gain factor of the A channel //r. считать из буфера приемника значение усиления канала А + Device_blk.Str.Gain_Ph_B = rcv_buf[5]; //e. read from the receiver buffer the value of the gain factor of the B channel //r. считать из буфера приемника значение усиления канала В - Out_G_photo(Device_blk.Str.Gain_Ph_A, Device_blk.Str.Gain_Ph_B); //e. display these values to digital potentiometers //r. ������� ��� �������� � �������� ������������� + Out_G_photo(Device_blk.Str.Gain_Ph_A, Device_blk.Str.Gain_Ph_B); //e. display these values to digital potentiometers //r. вывести эти значения в цифровые потенциометры - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_Gph_W -void M_Rate(void) //e.------------ start of transfer of the M_Rate parameters stack ------------------- //r.------------ ������ �������� ������ ���������� M_Rate ------------------- +void M_Rate(void) //e.------------ start of transfer of the M_Rate parameters stack ------------------- //r.------------ запуск передачи набора параметров M_Rate ------------------- { - uint8_t mode; + uint8_t mode; - SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. ���������� �������� �������� ������ � ��� ������������� - UART_SwitchSpeed(trm_rate); + SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. установить скорость передачи ответа и его периодичность + UART_SwitchSpeed(trm_rate); + + mode = rcv_buf[3] & 0x001f; //e. extract number of the parameters stack in the command //r. выделить номер набора параметров в команде - mode = rcv_buf[3] & 0x001f; //e. extract number of the parameters stack in the command //r. �������� ����� ������ ���������� � ������� - - switch (mode) { - case 1: //e. it is the Rate stack //r. ��� ����� Rate - RgConB = RATE_REPER_OR_REFMEANDR; //e. counter latch every vibro period - SwitchRefMeandInt(RATE_REPER_OR_REFMEANDR); //e. enable reference meander interrupt - - wrk_period = 12500000; //e. load needed length of working period 1 �.//r. ��������� ��������� ������������ �������� ������� 1 �. - num_of_par = 14; //e. 9 parameters or groups of parameters output //r. �������� 9 ���������� ��� ����� ���������� - - Valid_Data = 0; // reset all bits of status word + switch (mode) { + case 1: //e. it is the Rate stack //r. это набор Rate + RgConB = RATE_REPER_OR_REFMEANDR; //e. counter latch every vibro period + SwitchRefMeandInt(RATE_REPER_OR_REFMEANDR); //e. enable reference meander interrupt + + wrk_period = 12500000; //e. load needed length of working period 1 с.//r. загрузить требуемую длительность рабочего периода 1 с. + num_of_par = 14; //e. 9 parameters or groups of parameters output //r. выводить 9 параметров или групп параметров + + Valid_Data = 0; // reset all bits of status word - addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the address of the 1st parameter in the 1st group //r. ������ ����� ������� ��������� � 1-�� ������ - addr_param[1] = &(Output.Str.Cnt_Mns); //e. set the address of the 1st parameter in the 2nd group //r. ������ ����� ������� ��������� � 2-�� ������ - addr_param[2] = &(Output.Str.Cnt_Dif); //e. set the address of the 1st parameter in the 3rd group //r. ������ ����� ������� ��������� � 3-�� ������ - addr_param[3] = &(Output.Str.F_ras); //e. set the address of the _F_ras parameter in the 4th group //r. ������ ����� ��������� _F_ras �� 4-�� ������ - addr_param[4] = &(Output.Str.HF_reg); //e. set the address of the _HF_reg parameter in the 5th group //r. ������ ����� ��������� _HF_reg � 5-�� ������ - addr_param[5] = &(Output.Str.HF_dif); //e. set the address of the _HF_dif parameter in the 6th group //r. ������ ����� ��������� _HF_dif � 6-�� ������ - addr_param[6] = &(Output.Str.T_Vibro); //e. parameter _T_Vibro //r. �������� _T_Vibro - addr_param[7] = &(Output.Str.T_VB_pll); //e. parameter _T_VB_pll //r.��������� _T_VB_pll - addr_param[8] = &(Output.Str.L_Vibro); //e. parameter _L_Vibro //r. �������� _L_Vibro - addr_param[9] = &(Input.StrIn.HF_out); //e. set the address of the _RI_reg parameter in the 8th group //r. ������ ����� ��������� _RI_reg � 8-�� ������ - addr_param[10] = &(Output.Str.WP_reg); //e. parameters: _WP_reg, _WP_pll //r. ���������� _WP_reg, _WP_pll - addr_param[11] = &(Output.Str.WP_pll); //e. parameters: _WP_reg, _WP_pll //r. ���������� _WP_reg, _WP_pll - addr_param[12] = &(Output.Str.Tmp_Out); //e. set the address of the temperature sensors array //r. ������ ����� ������� �������� ����������� - addr_param[13] = &(Output.Str.WP_scope1); //e. reserved //r. ��������������� ��� ���������� ���������� - - size_param[0] = 2; //e. groups 1-6, 8-10 consists of one parameter ... //r. ������ 1-6, 8-10 �������� �� ������ ��������� - size_param[1] = 2; //e. and have 2 bytes length each //r. � ����� ����� 2 ����� ������ - size_param[2] = 2; - size_param[3] = 2; - size_param[4] = 2; - size_param[5] = 2; - size_param[6] = 2; - size_param[7] = 2; - size_param[8] = 2; - size_param[9] = 2; - size_param[10] = 2; - size_param[11] = 2; - - size_param[13] = 4; //e. the 11th group parameters has length of 4 bytes //r. 11-z ������ ���������� ����� ����� 4 ����� - - size_param[12] = 12; //e. format o the GLD array of temperatures - 12 bytes //r. ������ ������� ���������� ��� - 12 ���� - - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� - break; - - case 2: //e. it is the Rate2 stack //r. ��� ����� Rate2 - RgConB = RATE_REPER_OR_REFMEANDR; - SwitchRefMeandInt(RATE_REPER_OR_REFMEANDR); //e. enable interrupt from ref. meander - wrk_period = 0; //e. frequency of output = fvibro //r. ������� ������ ����� ������� �� + addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the address of the 1st parameter in the 1st group //r. задать адрес первого параметра в 1-ой группе + addr_param[1] = &(Output.Str.Cnt_Mns); //e. set the address of the 1st parameter in the 2nd group //r. задать адрес первого параметра в 2-ой группе + addr_param[2] = &(Output.Str.Cnt_Dif); //e. set the address of the 1st parameter in the 3rd group //r. задать адрес первого параметра в 3-ой группе + addr_param[3] = &(Output.Str.F_ras); //e. set the address of the _F_ras parameter in the 4th group //r. задать адрес параметра _F_ras во 4-ой группе + addr_param[4] = &(Output.Str.HF_reg); //e. set the address of the _HF_reg parameter in the 5th group //r. задать адрес параметра _HF_reg в 5-ей группе + addr_param[5] = &(Output.Str.HF_dif); //e. set the address of the _HF_dif parameter in the 6th group //r. задать адрес параметра _HF_dif в 6-ой группе + addr_param[6] = &(Output.Str.T_Vibro); //e. parameter _T_Vibro //r. параметр _T_Vibro + addr_param[7] = &(Output.Str.T_VB_pll); //e. parameter _T_VB_pll //r.параметрв _T_VB_pll + addr_param[8] = &(Output.Str.L_Vibro); //e. parameter _L_Vibro //r. параметр _L_Vibro + addr_param[9] = &(Input.StrIn.HF_out); //e. set the address of the _RI_reg parameter in the 8th group //r. задать адрес параметра _RI_reg в 8-ой группе + addr_param[10] = &(Output.Str.WP_reg); //e. parameters: _WP_reg, _WP_pll //r. параметров _WP_reg, _WP_pll + addr_param[11] = &(Output.Str.WP_pll); //e. parameters: _WP_reg, _WP_pll //r. параметров _WP_reg, _WP_pll + addr_param[12] = &(Output.Str.Tmp_Out); //e. set the address of the temperature sensors array //r. задать адрес массива датчиков температуры + addr_param[13] = &(Output.Str.WP_scope1); //e. reserved //r. зарезервировано для дальнейших применений + + size_param[0] = 2; //e. groups 1-6, 8-10 consists of one parameter ... //r. группы 1-6, 8-10 содержат по одному параметру + size_param[1] = 2; //e. and have 2 bytes length each //r. и имеют длину 2 байта каждая + size_param[2] = 2; + size_param[3] = 2; + size_param[4] = 2; + size_param[5] = 2; + size_param[6] = 2; + size_param[7] = 2; + size_param[8] = 2; + size_param[9] = 2; + size_param[10] = 2; + size_param[11] = 2; + + size_param[13] = 4; //e. the 11th group parameters has length of 4 bytes //r. 11-z группа параметров имеет длину 4 байта + + size_param[12] = 12; //e. format o the GLD array of temperatures - 12 bytes //r. формат массива температур ГЛД - 12 байт + + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика + break; + + case 2: //e. it is the Rate2 stack //r. это набор Rate2 + RgConB = RATE_REPER_OR_REFMEANDR; + SwitchRefMeandInt(RATE_REPER_OR_REFMEANDR); //e. enable interrupt from ref. meander + wrk_period = 0; //e. frequency of output = fvibro //r. частота вывода равна частоте ВП - num_of_par = 2; //e. 2 parameters output //r. �������� 2 ��������� - - addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the first parameter address //r. ������ ����� ������� ��������� - addr_param[1] = &(Output.Str.Cnt_Mns); //e. and the 2nd //r. � ������� - size_param[0] = 2; //e. parameters has 2 bytes length //r. ��������� ����� ����� 2 ����� - size_param[1] = 2; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� - break; - - case 3: //e. it is the Rate3 stack //r. ��� ����� Rate3 + num_of_par = 2; //e. 2 parameters output //r. выводить 2 параметра + + addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the first parameter address //r. задать адрес первого параметра + addr_param[1] = &(Output.Str.Cnt_Mns); //e. and the 2nd //r. и второго + size_param[0] = 2; //e. parameters has 2 bytes length //r. параметры имеет длину 2 байта + size_param[1] = 2; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика + break; + + case 3: //e. it is the Rate3 stack //r. это набор Rate3 - wrk_period = 2500; //e. frequency of output = 10000 Hz //r. n=1, ������� ������ = 10000 Hz - num_of_par = 2; //e. 2 parameters output //r. �������� 2 ��������� - - addr_param[0] = &(Output.Str.WP_scope1); //e. set the addresses of output parameters //r. ������ ������ ��������� ���������� - addr_param[1] = &(Output.Str.WP_scope2); - size_param[0] = 2; //e. all parameters has 2 bytes length //r. ��� ��������� ����� ����� 2 ����� - size_param[1] = 2; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� - break; - - case 4: //e. it is the Rate4 stack //r. ��� ����� Rate4 - wrk_period = 20000; //e. correspond to output frequency 1.25 kHz //r. ������������ ������� ������ 1.25 kHz - num_of_par = 4; //e. 4 parameters output //r. �������� 4 ��������� + wrk_period = 2500; //e. frequency of output = 10000 Hz //r. n=1, частота вывода = 10000 Hz + num_of_par = 2; //e. 2 parameters output //r. выводить 2 параметра + + addr_param[0] = &(Output.Str.WP_scope1); //e. set the addresses of output parameters //r. задать адреса выводимых параметров + addr_param[1] = &(Output.Str.WP_scope2); + size_param[0] = 2; //e. all parameters has 2 bytes length //r. все параметры имеют длину 2 байта + size_param[1] = 2; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика + break; + + case 4: //e. it is the Rate4 stack //r. это набор Rate4 + wrk_period = 20000; //e. correspond to output frequency 1.25 kHz //r. соотвествует частоте вывода 1.25 kHz + num_of_par = 4; //e. 4 parameters output //r. выводить 4 параметра - //e. set the addresses of output parameters //r. ������ ������ ��������� ���������� - // --- raw data array of numbers --- - // addr_param[0] = &Dif_Curr_Array; - // --- filtered array of numbers --- - // addr_param[1] = &Dif_Filt_Array; - // --------------------------------- - addr_param[2] = &(Output.Str.HF_reg); //e. HFO regulator //r. ���������� ��� - addr_param[3] = &(Output.Str.WP_reg); //e. CPLC heater regulator //r. ���������� ����������� - size_param[0] = 16; - size_param[1] = 32; - size_param[2] = 2; - size_param[3] = 2; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� - break; - case 7: - wrk_period = 20000; //e. correspond to output frequency 1250 Hz //r. ������������ ������� ������ 1.25 kHz - num_of_par = 5; //e. 4 parameters output //r. �������� 5 ��������� + //e. set the addresses of output parameters //r. задать адреса выводимых параметров + // --- raw data array of numbers --- + // addr_param[0] = &Dif_Curr_Array; + // --- filtered array of numbers --- + // addr_param[1] = &Dif_Filt_Array; + // --------------------------------- + addr_param[2] = &(Output.Str.HF_reg); //e. HFO regulator //r. напряжение ГВЧ + addr_param[3] = &(Output.Str.WP_reg); //e. CPLC heater regulator //r. напряжение нагревателя + size_param[0] = 16; + size_param[1] = 32; + size_param[2] = 2; + size_param[3] = 2; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика + break; + case 7: + wrk_period = 20000; //e. correspond to output frequency 1250 Hz //r. соотвествует частоте вывода 1.25 kHz + num_of_par = 5; //e. 4 parameters output //r. выводить 5 параметра - //e. set the addresses of output parameters //r. ������ ������ ��������� ���������� - // --- raw data array of PLC phase --- - addr_param[0] = &(Output.Str.WP_Phase_Det_Array); - // --- filtered array of reference sin--- - addr_param[1] = &(Output.Str.WP_sin_Array); - // --------------------------------- - addr_param[2] = &(Output.Str.WP_reg); //e. CPLC heater regulator //r. ���������� ����������� - addr_param[3] = &(Output.Str.WP_pll); //e. CPLC phase //r. ���� - addr_param[4] = &(Output.Str.HF_reg); //e. set the address of the _HF_reg parameter in the 5th group //r. ������ ����� ��������� _HF_reg � 5-�� ������ - size_param[0] = 16; - size_param[1] = 16; - size_param[2] = 2; - size_param[3] = 2; - size_param[4] = 2; - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� - break; - } - SetIntLatch(wrk_period); + //e. set the addresses of output parameters //r. задать адреса выводимых параметров + // --- raw data array of PLC phase --- + addr_param[0] = &(Output.Str.WP_Phase_Det_Array); + // --- filtered array of reference sin--- + addr_param[1] = &(Output.Str.WP_sin_Array); + // --------------------------------- + addr_param[2] = &(Output.Str.WP_reg); //e. CPLC heater regulator //r. напряжение нагревателя + addr_param[3] = &(Output.Str.WP_pll); //e. CPLC phase //r. фаза + addr_param[4] = &(Output.Str.HF_reg); //e. set the address of the _HF_reg parameter in the 5th group //r. задать адрес параметра _HF_reg в 5-ей группе + size_param[0] = 16; + size_param[1] = 16; + size_param[2] = 2; + size_param[3] = 2; + size_param[4] = 2; + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика + break; + } + SetIntLatch(wrk_period); } // M_Rate void M_Reset(void) { - while(1); + while(1); } // will not achieve - -void M_Param_R(void) //e. ------------ read the parameter of the GLD from the data memory ---------------------- //r.------------ ������ ��������� GLD �� ������ ������ ---------------------- + +void M_Param_R(void) //e. ------------ read the parameter of the GLD from the data memory ---------------------- //r.------------ чтение параметра GLD из памяти данных ---------------------- { - num_of_par = 1; //e. 1 parameter output //r. �������� ���� �������� - addr_param[0] = (void *)(&Device_blk.Str.My_Addres + rcv_buf[3]); //e. address of the needed parameter in the block //r. ����� ���������� ��������� � ����� - size_param[0] = 2; //e. size of the buffer - 2 bytes //r. ������ ������ - 2 ����� + num_of_par = 1; //e. 1 parameter output //r. выводить один параметр + addr_param[0] = (void *)(&Device_blk.Str.My_Addres + rcv_buf[3]); //e. address of the needed parameter in the block //r. адрес требуемого параметра в блоке + size_param[0] = 2; //e. size of the buffer - 2 bytes //r. размер буфера - 2 байта - trm_ena = 1; //e. allow operation of the transmitter //r. ��������� ������ ����������� + trm_ena = 1; //e. allow operation of the transmitter //r. разрешить работу передатчика } // M_Param_R -void M_Param_W(void) //e.------------ write the parameter of the GLD from the data memory ----------------------- //r.------------ ������ ��������� GLD � ������ ������ ----------------------- +void M_Param_W(void) //e.------------ write the parameter of the GLD from the data memory ----------------------- //r.------------ запись параметра GLD в память данных ----------------------- { - int * ptr; - - ScopeMode = 0; //e. VB_DELAY_MEANDER allocate a mode of display for a control point of an scope //r. VB_DELAY_MEANDER ��������� ����� ����������� ��� ����������� ����� ������������ - - ptr = (int *)&Device_blk.Str.My_Addres; // pointer to Parameters block - ptr += rcv_buf[3]; // calculate offset - *ptr = (rcv_buf[4] << 8) | (rcv_buf[5] & 0xFF); // write new parameter value + int * ptr; + + ScopeMode = 0; //e. VB_DELAY_MEANDER allocate a mode of display for a control point of an scope //r. VB_DELAY_MEANDER назначить режим отображения для контрольной точки осциллографа - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + ptr = (int *)&Device_blk.Str.My_Addres; // pointer to Parameters block + ptr += rcv_buf[3]; // calculate offset + *ptr = (rcv_buf[4] << 8) | (rcv_buf[5] & 0xFF); // write new parameter value + + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_Param_W -void M_LdPar_F() //e.============ procedure for load the GLD parameters from the flash-memory =========== //r.============ ��������� �������� ���������� ��� �� ����-������ =========== +void M_LdPar_F() //e.============ procedure for load the GLD parameters from the flash-memory =========== //r.============ процедура загрузки параметров ГЛД из флэш-памяти =========== { - LoadFlashParam(FromFLASH); //e. load the GLD parameters from the flash-memory //r. ��������� ��������� ��� �� ����-������ - blt_in_test = ((uint32_t)FIRMWARE_VER << 8) | (Device_blk.Str.Device_SerialNumber & 0x00FF); + LoadFlashParam(FromFLASH); //e. load the GLD parameters from the flash-memory //r. загрузить параметры ГЛД из фдэш-памяти + blt_in_test = ((uint32_t)FIRMWARE_VER << 8) | (Device_blk.Str.Device_SerialNumber & 0x00FF); // Init_software(); - - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_LdPar_F -void M_LdPar_D(void) //e.============ procedure for set parameters of the GLD by default ============ //r.============ ��������� ��������� ���������� ��� �� ��������� ============ +void M_LdPar_D(void) //e.============ procedure for set parameters of the GLD by default ============ //r.============ процедура установки параметров ГЛД по умолчанию ============ { #if !defined COMMAND_DEBUG - LoadFlashParam(ByDefault); //e. define parameters of the GLD by default //r. ���������� ��������� ��� �� ��������� (default) - Init_software(); -#endif - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + LoadFlashParam(ByDefault); //e. define parameters of the GLD by default //r. определить параметры ГЛД по умолчанию (default) + Init_software(); +#endif + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_LdPar_D -void M_Start(void) //e.============ initialization of the GLD switch on ================================= //r.============ ������������� ������� ��� ================================= +void M_Start(void) //e.============ initialization of the GLD switch on ================================= //r.============ инициализация запуска ГЛД ================================= { - start_Rq = 1; //e. set the flag of the GLD switch on request //r. ���������� ���� ������� ������ ��� - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + start_Rq = 1; //e. set the flag of the GLD switch on request //r. установить флаг запроса старта ГЛД + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_Start -void M_Stop(void) //e.============ initialization of the GLD switch off ============================== //r.============ ������������� ���������� ��� ============================== +void M_Stop(void) //e.============ initialization of the GLD switch off ============================== //r.============ инициализация выключения ГЛД ============================== { - stop_Rq = 1; //e. set the flag of the GLD switch off request //r. ���������� ���� ������� ���������� ��� - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); -} // M_Stop + stop_Rq = 1; //e. set the flag of the GLD switch off request //r. установить флаг запроса выключения ГЛД + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); +} // M_Stop -void M_Pulse(void) //e.============ generetion of the light-up pulse ========================= //r.============ ��������� �������� ������� ������ ========================= +void M_Pulse(void) //e.============ generetion of the light-up pulse ========================= //r.============ генерация импульса запуска лазера ========================= { - pulse_Rq = 1; //e. set the flag of the GLD switch on request //r. ���������� ���� ������� ������ ��� - trm_cycl = 0; //e. periodic data transmission is not needed //r. ������������� �������� ������ �� ��������� - Mk_Ask1(); + pulse_Rq = 1; //e. set the flag of the GLD switch on request //r. установить флаг запроса старта ГЛД + trm_cycl = 0; //e. periodic data transmission is not needed //r. периодическая передача ответа не требуется + Mk_Ask1(); } // M_Pulse -void B_Rate(void) //e. === procedure of device operation in a mode of continuous output of raw data //r. === ��������� ������ ������� � ������ ����������� ������ "�����" ������ +void B_Rate(void) //e. === procedure of device operation in a mode of continuous output of raw data //r. === процедура работы прибора в режиме непрерывной выдачи "сырых" данных { } // B_Rate -void B_Delta(void) //e. === procedure not used //r. === ��������� �� ������������ +void B_Delta(void) //e. === procedure not used //r. === процедура не используется { } // B_Delta -void D_Period_W(void) //e. === set the period of the angle increase output //r. === ��������� ������� ������ ���������� ���� +void D_Period_W(void) //e. === set the period of the angle increase output //r. === установка периода выдачи приращения угла { } // D_Period_W - // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void exec_CMD(void) //e. === the final decoding and command execution procedure //r. === ��������� ������������� ���������� � ���������� ������� +// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void exec_CMD(void) //e. === the final decoding and command execution procedure //r. === процедура окончательной дешифрации и исполнения команды { - uint32_t wcode; - - rx_buf_copy = 1; //e. initialization of the flag of copying of receiving buffer //r. ����������� ����� ����������� ��������� ������ + uint32_t wcode; - wcode = (rcv_buf[2] & 0xFF) << 8; - CMD_Code = wcode | (rcv_buf[3] & 0xFF); //e. save it in the memory for echo-transmission //r. ��������� ��� � ������ ��� �������� �������� + rx_buf_copy = 1; //e. initialization of the flag of copying of receiving buffer //r. предустанов флага копирования приемного буфера + + wcode = (rcv_buf[2] & 0xFF) << 8; + CMD_Code = wcode | (rcv_buf[3] & 0xFF); //e. save it in the memory for echo-transmission //r. сохранить его в памяти для обратной передачи - if (wcode == CMD_RATE) //e. is it Rate command? //r. ��� ������� Rate? - { - B_Rate(); - return; - } - else if (wcode == CMD_DEV_MODE) //e. is it the Device_Mode command? //r. ��� ������� ��������� ������ �������? - { - CMD_Mode = 3; - B_Dev_Mode(); - return; - } - else if (wcode == CMD_DELTA_BINS) //e. is it the B_DeltaBINS command (command of request for data transfer to the navigation system)? //r. ��� ������� ������� �������� ������ � �����.�������? - { - RgConB = RATE_VIBRO_1; //e. set in the additional register of device control the mode of work with dither counters and the filter of moving average //r. ������������� � �������������� �������� ���������� ����� ������ � ��������������� � �������� ����������� �������� - SetSpeedPeriod(); - UART_SwitchSpeed(trm_rate); - CMD_Mode = 4; - B_Delta_BINS(); - return; - } - else if (wcode == CMD_DELTA_PS) //e. is it the B_DeltaPS command (command of request for data transfer to the uPC)? //r. ��� ������� ������� �������� ������ � MkPC? - { - SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. � ���������� �������� �������� ������ � ��� ������������� (_trm_cycl) - UART_SwitchSpeed(trm_rate); - if (Device_Mode < 4) //e. work with internal latch - Device_Mode = DM_INT_LATCH_DELTA_PS; - else - Device_Mode = DM_EXT_LATCH_DELTA_PS_PULSE; - CMD_Mode = 1; - // B_Delta_PS(); - return; - } - else if (wcode == CMD_DELTA_SF) // is it the B_DeltaSF command? - { - SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. � ���������� �������� �������� ������ � ��� ������������� (_trm_cycl) - CMD_Mode = 7; - if ((rcv_buf[3] & 0x0001) != 0) //e.reset of accumulated number is disabled //r. ����� ������������ ����� ��������� ����� �������� - Ext_Latch_ResetEnable = 0; - else - Ext_Latch_ResetEnable = 1; - B_Delta_SF(); - return; - } - else if (wcode == CMD_BIT_MODE) //e. is this the BIT mode command? //r. ��� ������� ������������? - { - CMD_Mode = 6; //e. set the value of the Delta mode//r. ���������� �������� ������ Delta - B_BIT_Mode(); - return; - } - else if (wcode == CMD_DELTA) //e. is this the B_Delta command? //r. ��� ������� B_Delta? - { - CMD_Mode = 2; //e. set the value of the Delta mode//r. ���������� �������� ������ Delta - B_Delta(); //e. output calculated value of angle increase //r. �������� ����������� �������� ���������� ���� - return; - } - else if (CMD_Code == CMD_MAINT) //e. is this the Maintenance mode command? //r. ��� ������� Maintenance mode? - { - if (!RgConB) - { - RgConB = RATE_VIBRO_1; - SwitchRefMeandInt(RATE_VIBRO_1); //e. disable interrupt from referense meander - } - CMD_Mode = 5; //e. yes, switch on present mode //r. ��, �������� ������ ����� - M_Status(); //e. output the status stack of registers //r. ������� ��������� ����� ��������� - if (Device_Mode != DM_INT_10KHZ_LATCH) //e. mode of internal latch 10 kHz //r. ����� ���������� ������� 10 ��� - { - Device_Mode = DM_INT_10KHZ_LATCH; - trm_ena = 0; - } - else - UART_SwitchSpeed(trm_rate); - return; - } - else if (wcode == SUBCMD_M_RESET) //e. is this subcommand for modification of the device control register? //r. ��� ���������� ����������� �������� ���������� �-��? - { + if (wcode == CMD_RATE) { //e. is it Rate command? //r. это команда Rate? + B_Rate(); + return; + } else if (wcode == CMD_DEV_MODE) { //e. is it the Device_Mode command? //r. это команда установки режима прибора? + CMD_Mode = 3; + B_Dev_Mode(); + return; + } else if (wcode == CMD_DELTA_BINS) { //e. is it the B_DeltaBINS command (command of request for data transfer to the navigation system)? //r. это команда запроса передачи данных в навиг.систему? + RgConB = RATE_VIBRO_1; //e. set in the additional register of device control the mode of work with dither counters and the filter of moving average //r. устанавливаем в дополнительном регистре управления режим работы с вибросчетчиками и фильтром скользящего среднего + SetSpeedPeriod(); + UART_SwitchSpeed(trm_rate); + CMD_Mode = 4; + B_Delta_BINS(); + return; + } else if (wcode == CMD_DELTA_PS) { //e. is it the B_DeltaPS command (command of request for data transfer to the uPC)? //r. это команда запроса передачи данных в MkPC? + SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. и установить скорость передачи ответа и его периодичность (_trm_cycl) + UART_SwitchSpeed(trm_rate); + if (Device_Mode < 4) //e. work with internal latch + Device_Mode = DM_INT_LATCH_DELTA_PS; + else + Device_Mode = DM_EXT_LATCH_DELTA_PS_PULSE; + CMD_Mode = 1; + // B_Delta_PS(); + return; + } else if (wcode == CMD_DELTA_SF) { // is it the B_DeltaSF command? + SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. и установить скорость передачи ответа и его периодичность (_trm_cycl) + CMD_Mode = 7; + if ((rcv_buf[3] & 0x0001) != 0) //e.reset of accumulated number is disabled //r. сброс накопленного между защелками числа запрещен + Ext_Latch_ResetEnable = 0; + else + Ext_Latch_ResetEnable = 1; + B_Delta_SF(); + return; + } else if (wcode == CMD_BIT_MODE) { //e. is this the BIT mode command? //r. это команда тестирования? + CMD_Mode = 6; //e. set the value of the Delta mode//r. установить значение режима Delta + B_BIT_Mode(); + return; + } else if (wcode == CMD_DELTA) { //e. is this the B_Delta command? //r. это команда B_Delta? + CMD_Mode = 2; //e. set the value of the Delta mode//r. установить значение режима Delta + B_Delta(); //e. output calculated value of angle increase //r. выводить вычисленное значение приращения угла + return; + } else if (CMD_Code == CMD_MAINT) { //e. is this the Maintenance mode command? //r. это команда Maintenance mode? + if (!RgConB) { + RgConB = RATE_VIBRO_1; + SwitchRefMeandInt(RATE_VIBRO_1); //e. disable interrupt from referense meander + } + CMD_Mode = 5; //e. yes, switch on present mode //r. да, включить данный режим + M_Status(); //e. output the status stack of registers //r. вывести статусный набор регистров + if (Device_Mode != DM_INT_10KHZ_LATCH) { //e. mode of internal latch 10 kHz //r. режим внутренней защелки 10 кГц + Device_Mode = DM_INT_10KHZ_LATCH; + trm_ena = 0; + } else + UART_SwitchSpeed(trm_rate); + return; + } else if (wcode == SUBCMD_M_RESET) { //e. is this subcommand for modification of the device control register? //r. это подкоманда модификации регистра управления у-ва? // Mk_AskDev(); - M_Reset(); - return; - } - else // subcommand analyse - { - if (CMD_Mode == 2) //e. is this the 2(Delta) mode? //r. ��� ����� 2? (Delta) - { - if (CMD_Code == CMD_D_PERIOD_W) //e. the Delta mode, check the subcommand ... //r. ����� DElta, ��������� ���������� �������� ������� - { - D_Period_W(); //e. otherwise - set the data transfer period //r. ����� ����������� ������ ������ ������ - return; - } - else - { - line_sts = line_sts | CODE_ERR; // invalid command code - return; - } - } - else if (CMD_Mode == 5) //e. check the 5 mode (Maintenance) //r. �������� ������ 5 (Maintenance) - { - if (CMD_Code == SUBCMD_M_CLEAR) //e. is this subcommand of cleaning of the error register? //r. ��� ���������� ������� �������� ������ �����? - { - M_Clear(); //e. yes, cleaning the error register //r. ��, ������� �������� ������ - M_Status(); //e. preparing for trabsfer of the device status //r. ���������� �������� ������� ���������� - UART_SwitchSpeed(trm_rate); - return; - } - else if (CMD_Code == SUBCMD_M_MIRR) //e. is this subcommand of return of previous command? //r. ��� ���������� �������� ���������� �������? - { - rx_buf_copy = 0; //e. yes, forbid copying of command on saving previous //r. ��, ��������� ����������� ������� ��� ���������� ���������� - M_Mirror(); //e. prepare transfer of the receiving buffer copy //r. ����������� �������� ����� ��������� ������ - return; - } - /* else if (wcode == SUBCMD_M_TMP_W) //e. is this subcommand for writing instructions to the AD7714? //r. ��� ���������� ������ ���������� � AD7714? - { - // M_Tmp_W(); //e. yes, procedure call of write of the command //r. ��, ����� ��������� ������ ������� - return; - } */ - else if (wcode == SUBCMD_M_TMP_R) //e. is this subcommand for data read from the AD7714? //r. ��� ���������� ������ ������ �� AD7714? - { - M_Tmp_R(); //r. yes, call the procedure for data read //e. ��, ����� ��������� ������ ������ - return; - } - /* else if (wcode == SUBCMD_M_E5R_W) //e. is this subcommand for write to the mode register? //r. ��� ���������� ������ � ������� ������? - { - M_e5r_W(); //e. yes, write data to the mode register of the Elio5 card //r. ��, �������� ������ � ������� ������ ����� Elio5 - return; - } - else if (wcode == SUBCMD_M_E5RA_W) //e. is this subcommand for write to the mode register? //r. ��� ���������� ������ � ������� ������? - { - M_e5rA_W(); //e. yes, write data to the mode register of the Elio5 card //r. ��, �������� ������ � ������� ������ ����� Elio5 - return; - } */ - else if (wcode == SUBCMD_M_ADC_R) //e. is t the subcommand for data read from ADCs ADS1250 and ADS8321 ? //r. ��� ���������� ������ ������ �� ��� ADS1250 � ADS8321? - { - M_ADC_R(); //e. read of ADC channels //r. ������ ������� ��� - return; - } - else if (wcode == SUBCMD_M_CNT_R) //e. is this subcommand of data read from pulse counters? //r. ��� ���������� ������ ������ �� ��������� ���������? - { - M_Cnt_R(); //e. read of counters //r. ������ ��������� - return; - } - else if (wcode == SUBCMD_M_FLG_R) //e. is it the command of data read about input flags? //r. ��� ���������� ������ ������ � ������� ������? - { - M_Flg_R(); //e. read the input flags //r. ������ ������� ����� - return; - } - else if (wcode == SUBCMD_M_VIB_W) //e. is this subcommand for load the dither drive period? //r. ��� ���������� �������� ������� ������������? - { - M_Vib_W(); //e. set the new value of the period //r. ���������� ����� �������� ������� - return; - } - else if (wcode == SUBCMD_M_GPH_W) //e. is this subcommand for set the gain factor of photodetector channels? //r. ��� ���������� ��������� �������� ������� ������������� ? - { - M_Gph_W(); //e. set the new values of gain factor //r. ���������� ����� �������� �������� - return; - } - else if (wcode == SUBCMD_M_STIMUL) //e. is this subcommand for set the values of the DACs and flags? //r. ��� ���������� ��������� �������� ����� � ������ ? - { - M_Stimul(); //e. set the new values //r. ���������� ����� �������� - return; - } - else if (wcode == SUBCMD_M_RATE) //e. is this subcommand for set the M_Rate output stack //r. ��� ���������� ��������� ������ ������ M_Rate ? - { - M_Rate(); //e. switch on the M_Rate data transfer //r. �������� �������� ������ M_Rate - return; - } - else if (wcode == SUBCMD_M_PARAM_W) //e. is this subcommand for write the new value of the GLD parameter ... //r. ��� ���������� ������ ������ �������� ��������� GLD - { - M_Param_W(); //e. write the new value of the parameter //r. �������� ����� �������� ��������� - return; - } - else if (wcode == SUBCMD_M_PARAM_R) //e. is this subcommand for read the value of the GLD parameter? //r. ��� ���������� ������ �������� ��������� GLD? - { - M_Param_R(); //e. read the value from the data memory //r. ������� �������� ��������� �� ������ ����� - return; - } - else if (CMD_Code == SUBCMD_M_LDPAR_F) //e. is this subcommand for load GLD parameters ... //r. ��� ���������� �������� ���������� GLD - { - M_LdPar_F(); //e. start the loading of parameters //r. ��������� �������� ���������� - return; - } - else if (CMD_Code == SUBCMD_M_LDPAR_D) //e. is this subcommand for direct setting of the GLD parameters ... //r. ��� ���������� ������� ���������� ���������� GLD - { - M_LdPar_D(); //e. read the value of the parameter from the data memory //r. ������� �������� ��������� �� ������ ����� - return; - } - else if (CMD_Code == SUBCMD_M_START) //e. is this subcommand for GLD starting? //r. ��� ���������� ������� GLD? - { - M_Start(); //e. call the procedure of start //r. ��������� ��������� ������ - return; - } - else if (CMD_Code == SUBCMD_M_PULSE) //e. is this subcommand for GLD starting? //r. ��� ���������� ������� GLD? - { - M_Pulse(); //e. call light-up function //r. ������ ������� ������� - return; - } - else if (CMD_Code == SUBCMD_M_STOP) //e. is this subcommand for GLD switch off? //r. ��� ���������� ���������� GLD? - { - M_Stop(); //e. otherwise- switch off all regulators and stop device //r. ��������� ��� ������� � ���������� ������ - return; - } - else if (wcode == SUBCMD_M_CTL_R) //e. is this subcommand for read the device control register? //r. ��� ���������� ������ �������� ���������� �-��? - { - M_Ctl_R(); - return; - } - else if (wcode == SUBCMD_M_CTL_M) //e. is this subcommand for modification of the device control register? //r. ��� ���������� ����������� �������� ���������� �-��? - { - M_Ctl_M(); - return; - } -/* else if (wcode == SUBCMD_M_RESET) //e. is this subcommand for modification of the device control register? //r. ��� ���������� ����������� �������� ���������� �-��? - { - M_Reset(); - return; - }*/ - else - { - line_sts = line_sts | MODE_ERR; // mode error - return; - } - } - } + M_Reset(); + return; + } else { // subcommand analyse + if (CMD_Mode == 2) { //e. is this the 2(Delta) mode? //r. это режим 2? (Delta) + if (CMD_Code == CMD_D_PERIOD_W) { //e. the Delta mode, check the subcommand ... //r. режим DElta, проверить подкоманду загрузки периода + D_Period_W(); //e. otherwise - set the data transfer period //r. иначе установитиь период выдачи данных + return; + } else { + line_sts = line_sts | CODE_ERR; // invalid command code + return; + } + } else if (CMD_Mode == 5) { //e. check the 5 mode (Maintenance) //r. проверка режима 5 (Maintenance) + if (CMD_Code == SUBCMD_M_CLEAR) { //e. is this subcommand of cleaning of the error register? //r. это подкоманда очистки регистра ошибок линии? + M_Clear(); //e. yes, cleaning the error register //r. да, очистка регистра ошибок + M_Status(); //e. preparing for trabsfer of the device status //r. подготовка передачи статуса устройства + UART_SwitchSpeed(trm_rate); + return; + } else if (CMD_Code == SUBCMD_M_MIRR) { //e. is this subcommand of return of previous command? //r. это подкоманда возврата предыдущей команды? + rx_buf_copy = 0; //e. yes, forbid copying of command on saving previous //r. да, запретить копирование команды для сохранения предыдущей + M_Mirror(); //e. prepare transfer of the receiving buffer copy //r. подготовить передачу копии приемного буфера + return; + } + /* else if (wcode == SUBCMD_M_TMP_W) //e. is this subcommand for writing instructions to the AD7714? //r. это подкоманда записи инструкций в AD7714? + { + // M_Tmp_W(); //e. yes, procedure call of write of the command //r. да, вызов процедуры записи команды + return; + } */ + else if (wcode == SUBCMD_M_TMP_R) { //e. is this subcommand for data read from the AD7714? //r. это подкоманда чтения данных из AD7714? + M_Tmp_R(); //r. yes, call the procedure for data read //e. да, вызов процедуры чтения данных + return; + } + /* else if (wcode == SUBCMD_M_E5R_W) //e. is this subcommand for write to the mode register? //r. это подкоманда записи в регистр режима? + { + M_e5r_W(); //e. yes, write data to the mode register of the Elio5 card //r. да, записать данные в регистр режима платы Elio5 + return; + } + else if (wcode == SUBCMD_M_E5RA_W) //e. is this subcommand for write to the mode register? //r. это подкоманда записи в регистр режима? + { + M_e5rA_W(); //e. yes, write data to the mode register of the Elio5 card //r. да, записать данные в регистр режима платы Elio5 + return; + } */ + else if (wcode == SUBCMD_M_ADC_R) { //e. is t the subcommand for data read from ADCs ADS1250 and ADS8321 ? //r. это подкоманда чтения данных из АЦП ADS1250 и ADS8321? + M_ADC_R(); //e. read of ADC channels //r. чтение каналов АЦП + return; + } else if (wcode == SUBCMD_M_CNT_R) { //e. is this subcommand of data read from pulse counters? //r. это подкоманда чтения данных из счетчиков импульсов? + M_Cnt_R(); //e. read of counters //r. чтение счетчиков + return; + } else if (wcode == SUBCMD_M_FLG_R) { //e. is it the command of data read about input flags? //r. это подкоманда чтения данных о входных флагах? + M_Flg_R(); //e. read the input flags //r. читать входные флаги + return; + } else if (wcode == SUBCMD_M_VIB_W) { //e. is this subcommand for load the dither drive period? //r. это подкоманда загрузки периода вибропривода? + M_Vib_W(); //e. set the new value of the period //r. установить новое значение периода + return; + } else if (wcode == SUBCMD_M_GPH_W) { //e. is this subcommand for set the gain factor of photodetector channels? //r. это подкоманда установки усиления каналов фотоприемника ? + M_Gph_W(); //e. set the new values of gain factor //r. установить новые значения усиления + return; + } else if (wcode == SUBCMD_M_STIMUL) { //e. is this subcommand for set the values of the DACs and flags? //r. это подкоманда установки значения ЦАПов и фдагов ? + M_Stimul(); //e. set the new values //r. установить новые значения + return; + } else if (wcode == SUBCMD_M_RATE) { //e. is this subcommand for set the M_Rate output stack //r. это подкоманда установки выдачи набора M_Rate ? + M_Rate(); //e. switch on the M_Rate data transfer //r. включить передачу данных M_Rate + return; + } else if (wcode == SUBCMD_M_PARAM_W) { //e. is this subcommand for write the new value of the GLD parameter ... //r. это подкоманда записи нового значения параметра GLD + M_Param_W(); //e. write the new value of the parameter //r. записать новое значение параметра + return; + } else if (wcode == SUBCMD_M_PARAM_R) { //e. is this subcommand for read the value of the GLD parameter? //r. это подкоманда чтения значения параметра GLD? + M_Param_R(); //e. read the value from the data memory //r. считать значение параметра из памяти даных + return; + } else if (CMD_Code == SUBCMD_M_LDPAR_F) { //e. is this subcommand for load GLD parameters ... //r. это подкоманда загрузки параметров GLD + M_LdPar_F(); //e. start the loading of parameters //r. запустить загрузку параметров + return; + } else if (CMD_Code == SUBCMD_M_LDPAR_D) { //e. is this subcommand for direct setting of the GLD parameters ... //r. это подкоманда прямого назначения параметров GLD + M_LdPar_D(); //e. read the value of the parameter from the data memory //r. считать значение параметра из памяти даных + return; + } else if (CMD_Code == SUBCMD_M_START) { //e. is this subcommand for GLD starting? //r. это подкоманда запуска GLD? + M_Start(); //e. call the procedure of start //r. запустить процедуру старта + return; + } else if (CMD_Code == SUBCMD_M_PULSE) { //e. is this subcommand for GLD starting? //r. это подкоманда запуска GLD? + M_Pulse(); //e. call light-up function //r. выдать импульс поджига + return; + } else if (CMD_Code == SUBCMD_M_STOP) { //e. is this subcommand for GLD switch off? //r. это подкоманда выключения GLD? + M_Stop(); //e. otherwise- switch off all regulators and stop device //r. выключить все контуры и остановить прибор + return; + } else if (wcode == SUBCMD_M_CTL_R) { //e. is this subcommand for read the device control register? //r. это подкоманда чтения регистра управления у-ва? + M_Ctl_R(); + return; + } else if (wcode == SUBCMD_M_CTL_M) { //e. is this subcommand for modification of the device control register? //r. это подкоманда модификации регистра управления у-ва? + M_Ctl_M(); + return; + } + /* else if (wcode == SUBCMD_M_RESET) //e. is this subcommand for modification of the device control register? //r. это подкоманда модификации регистра управления у-ва? + { + M_Reset(); + return; + }*/ + else { + line_sts = line_sts | MODE_ERR; // mode error + return; + } + } + } } // exec_CMD - + void decode_CMD(void) -{ - int size; - - if (!rcv_Rdy) //e. is data in receive buffer? //r. � �������� ������ ���� ����������? - { - return; //e. if no, stop processing //r. ���� ���, ��������� ��������� - } - - if (!line_sts) //e. Whether there were errors of receiving of start-bit? //r. ���� �� ������ ������ �����-���� ? - { - //e. there were not errors of receiving of bytes, check the device address //r. ������ ������ ������ �� ����, ��������� ����� ��������� - //Is_Brodcast_Req = 0; //e. reset the flag of broadcasting request //r. �������� ���� ������������������ ������� - if (rcv_buf[1] != Device_blk.Str.My_Addres) - { - if (rcv_buf[1] != BROADCAST_ADDRESS) - { - goto end; - } - } - - if (rcv_buf[0] == COMMAND_PREFIX) - { //e. there is new command in the receiver buffer, stop the transfer //r. � ������ ��������� ���� ����� �������, ���������� �������� - trm_ena = 0; //e. reset the flag of transmission allowing //r. �������� ���� ���������� �������� - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - exec_CMD(); // ��� ������� - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //e. check up presence of errors in operation of this procedure //r. ���������, ������� ������ � ������ ������ �������� - //e. did is the "unknown code of a command" or "parameters were set incorrectly" error? //r. ���� ������ "����������� ��� �������" ��� "������� �������� ���������"? - if ( ((line_sts & CODE_ERR) == CODE_ERR) || ((line_sts & PARAM_ERR) == PARAM_ERR) ) - { - line_err = line_sts; //e. set error bits in the error register of the line //r. ���������� ���� ������ � �������� ������ ����� - } - } - else - { - line_err = line_sts | NO_CMD_ERR; // ���������� ������ � ������� ������ - } - - } - else - { - line_err = line_sts; - } -end: - if (rx_buf_copy) //e. is copying of present received packet needed? //r. ��������� ����������� ������� ��������� ������? - { - size = rcv_num_byt; - rcv_byt_copy = rcv_num_byt; //e. save the size of copy //r. ��������� ������ ����� - if (rcv_num_byt > sizeof(rcv_buf)) //e. compare the size of receiving buffer with amount of received bytes //r. ����������� ���������, �������� ������ ��������� ������ � ������ �������� ���� - { - size = sizeof(rcv_buf); - } - memcpy(rcv_copy, rcv_buf, size); //e. copy of received amount of bytes, but no more than buffer size //r. ���������� �������� ����� ����, �� �� ����� ������� ������ - } - rx_buf_copy = 0; //e. reset the flag of necessity of copying of receiving buffer //r. �������� ���� ������������� ����������� ��������� ������ - - do - rcv_buf[--rcv_num_byt] = 0; - while(rcv_num_byt); - rcv_num_byt_old = rcv_num_byt; - line_sts = 0; //e. reset the line status register //r. �������� ������� ������� ����� - rcv_Rdy = 0; //e. allow further data reception //r. ��������� ���������� ����� ������ -} // decode_CMD +{ + int size; + + if (!rcv_Rdy) { //e. is data in receive buffer? //r. в приемном буфере есть информация? + return; //e. if no, stop processing //r. если нет, закончить обработку + } + + if (!line_sts) { //e. Whether there were errors of receiving of start-bit? //r. были ли ошибки приема старт-бита ? + //e. there were not errors of receiving of bytes, check the device address //r. ошибок приема байтов не было, проверить адрес обращения + //Is_Brodcast_Req = 0; //e. reset the flag of broadcasting request //r. сбросить флаг широковещательного запроса + if (rcv_buf[1] != Device_blk.Str.My_Addres) { + if (rcv_buf[1] != BROADCAST_ADDRESS) { + goto end; + } + } + + if (rcv_buf[0] == COMMAND_PREFIX) { + //e. there is new command in the receiver buffer, stop the transfer //r. в буфере приемника есть новая команда, прекратить передачу + trm_ena = 0; //e. reset the flag of transmission allowing //r. сбросить флаг разрешения передачи + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + exec_CMD(); // шей команды + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //e. check up presence of errors in operation of this procedure //r. проверить, наличие ошибок в работе данной поцедуры + //e. did is the "unknown code of a command" or "parameters were set incorrectly" error? //r. была ошибка "неизвестный код команды" или "неверно заданные параметры"? + if ( ((line_sts & CODE_ERR) == CODE_ERR) || ((line_sts & PARAM_ERR) == PARAM_ERR) ) { + line_err = line_sts; //e. set error bits in the error register of the line //r. установить биты ошибок в регистре ошибок линии + } + } else { + line_err = line_sts | NO_CMD_ERR; // добавление ошибки в регистр ошибок + } + + } else { + line_err = line_sts; + } +end: + if (rx_buf_copy) { //e. is copying of present received packet needed? //r. требуется копирование данного принятого пакета? + size = rcv_num_byt; + rcv_byt_copy = rcv_num_byt; //e. save the size of copy //r. запомнить размер копии + if (rcv_num_byt > sizeof(rcv_buf)) { //e. compare the size of receiving buffer with amount of received bytes //r. копирование требуется, сравнить размер приемного буфера с числом принятых байт + size = sizeof(rcv_buf); + } + memcpy(rcv_copy, rcv_buf, size); //e. copy of received amount of bytes, but no more than buffer size //r. копировать принятое число байт, но не более размера буфера + } + rx_buf_copy = 0; //e. reset the flag of necessity of copying of receiving buffer //r. сбросить флаг необходимости копирования приемного буфера + + do + rcv_buf[--rcv_num_byt] = 0; + while(rcv_num_byt); + rcv_num_byt_old = rcv_num_byt; + line_sts = 0; //e. reset the line status register //r. сбросить регистр статуса линии + rcv_Rdy = 0; //e. allow further data reception //r. разрешить дальнейший прием данных +} // decode_CMD