forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Committer:
Kovalev_D
Date:
Wed Feb 03 10:44:42 2016 +0300
Revision:
23:12e6183f04d4
[thyz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kovalev_D 23:12e6183f04d4 1 #include <string.h>
Kovalev_D 23:12e6183f04d4 2 #include "commandset.h"
Kovalev_D 23:12e6183f04d4 3 #include "el_lin.h"
Kovalev_D 23:12e6183f04d4 4 #include "CyclesSync.h"
Kovalev_D 23:12e6183f04d4 5 #include "CntrlGLD.h"
Kovalev_D 23:12e6183f04d4 6 #include "InputOutput.h"
Kovalev_D 23:12e6183f04d4 7 #include "Parameters.h"
Kovalev_D 23:12e6183f04d4 8
Kovalev_D 23:12e6183f04d4 9 #define COMMAND_DEBUG
Kovalev_D 23:12e6183f04d4 10
Kovalev_D 23:12e6183f04d4 11 //++++++++++++++++debug++++++++++++++++
Kovalev_D 23:12e6183f04d4 12 extern uint32_t In_Flag;
Kovalev_D 23:12e6183f04d4 13 unsigned char BuffTemp1[100];
Kovalev_D 23:12e6183f04d4 14 //e. +++++++++++++++++++ variables +++++++++++++++++++++++++++++++++++++++++++ //r. +++++++++++++++++++ ïåðåìåííûå +++++++++++++++++++++++++++++++++++++++++++
Kovalev_D 23:12e6183f04d4 15 uint32_t CMD_Mode = 0; //e. operation mode of the device //r. ðåæèì ðàáîòû óñòðîéñòâà
Kovalev_D 23:12e6183f04d4 16 uint32_t CMD_Code; //e. full code of the last recieved command //r. ïîëíûé êîä ïîñëåäíåé ïðèíÿòîé êîìàíäû
Kovalev_D 23:12e6183f04d4 17 uint32_t wrk_period; //e. run period in cycles //r. ðàáî÷èé ïåðèîä â öèêëàõ
Kovalev_D 23:12e6183f04d4 18 uint32_t blt_in_test;
Kovalev_D 23:12e6183f04d4 19
Kovalev_D 23:12e6183f04d4 20 int32_t ScopeMode; //e. mode of display for a control point of an scope //r. ðåæèì îòîáðàæåíèÿ äëÿ êîíòðîëüíîé òî÷êè îñöèëëîãðàôà
Kovalev_D 23:12e6183f04d4 21
Kovalev_D 23:12e6183f04d4 22
Kovalev_D 23:12e6183f04d4 23 void SetSpeedPeriod(void) //e.============ procedure of set of rate and periodicity of answer ======== //r.============ ïðîöåäóðà óñòàíîâêè ñêîðîñòè è ïåðèîäè÷íîñòè îòâåòà ========
Kovalev_D 23:12e6183f04d4 24 {
Kovalev_D 23:12e6183f04d4 25 if ((rcv_buf[3] & 0x0080) != 0) //e. is periodic data transmission needed? //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à òðóáóåòñÿ?
Kovalev_D 23:12e6183f04d4 26 {
Kovalev_D 23:12e6183f04d4 27 trm_cycl = 1; //e. yes, set present flag //r. äà, óñòàíîâèòü äàííûé ôëàã
Kovalev_D 23:12e6183f04d4 28 }
Kovalev_D 23:12e6183f04d4 29 else
Kovalev_D 23:12e6183f04d4 30 {
Kovalev_D 23:12e6183f04d4 31 trm_cycl = 0; //e. no, reset present flag //r. íåò, ñáðîñèòü äàííûé ôëàã
Kovalev_D 23:12e6183f04d4 32 }
Kovalev_D 23:12e6183f04d4 33
Kovalev_D 23:12e6183f04d4 34 SRgR &= 0xffcf; //e. clear the bit of transfer rate //r. î÷èñòêà áèò ñêîðîñòè ïåðåäà÷è
Kovalev_D 23:12e6183f04d4 35 trm_rate = (rcv_buf[3] >> 1) & 0x0030;
Kovalev_D 23:12e6183f04d4 36 SRgR |= trm_rate; //e. set present transfer rate //r. óñòàíîâèòü äàííóþ ñêîðîñòü ïåðåäà÷è
Kovalev_D 23:12e6183f04d4 37 } // SetSpeedPeriod
Kovalev_D 23:12e6183f04d4 38
Kovalev_D 23:12e6183f04d4 39
Kovalev_D 23:12e6183f04d4 40 void B_Delta_BINS(void) //r.===ïðîöåäóðà âûäà÷è íàêîïëåííûõ ðàçíîñòåé ñ÷åò÷èêîâ èìïóëüñîâ â ÈÍÑ â ôîðìàòå 14.18
Kovalev_D 23:12e6183f04d4 41 {
Kovalev_D 23:12e6183f04d4 42 Valid_Data = 0; // reset all bits of status word
Kovalev_D 23:12e6183f04d4 43
Kovalev_D 23:12e6183f04d4 44 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü 2 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 45 addr_param[0] = &Output.Str.BINS_dif; //e. set the first parameter address //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 46 addr_param[1] = &Valid_Data; //e. set the second paremeter address //r. çàäàòü àäðåñ âòîðîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 47 size_param[0] = 4; //e. the length of the 1st parameter is 4 bytes //r. ïàðàìåòð 1 èìåeò äëèíó 4 áàéòà
Kovalev_D 23:12e6183f04d4 48 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 áàéò (!!! ïåðåäàåòñÿ ñòàðøèé áàéò, à íå ìëàäøèé)
Kovalev_D 23:12e6183f04d4 49 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 50
Kovalev_D 23:12e6183f04d4 51 } // B_Delta_BINS
Kovalev_D 23:12e6183f04d4 52
Kovalev_D 23:12e6183f04d4 53 void B_Delta_SF(void) //r.=== ïðîöåäóðà äëÿ èçìåðåíèÿ ìàñøòàáíîãî ìíîæèòåëÿ
Kovalev_D 23:12e6183f04d4 54 {
Kovalev_D 23:12e6183f04d4 55 //e. time for data transfer has come, we work only with dither counters //r. ïðèøëî âðåìÿ ïåðåäàâàòü äàííûå, ðàáîòàåì òîëüêî ñ âèáðî-ñ÷åò÷èêàìè
Kovalev_D 23:12e6183f04d4 56 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. óñòàíàâëèâàåì â äîïîëíèòåëüíîì ðåãèñòðå óïðàâëåíèÿ ðåæèì ðàáîòû ñ âèáðîñ÷åò÷èêàìè è ôèëüòðîì ñêîëüçÿùåãî ñðåäíåãî
Kovalev_D 23:12e6183f04d4 57
Kovalev_D 23:12e6183f04d4 58 Valid_Data = 0; // reset all bits of status word
Kovalev_D 23:12e6183f04d4 59
Kovalev_D 23:12e6183f04d4 60 num_of_par = 5;//8; //e. 8 parameters output //r. âûâîäèòü 8 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 61 addr_param[0] = &Output.Str.SF_dif; //e. set the first parameter address //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 62 addr_param[1] = &Out_main_cycle_latch; //e. set the second paremeter address //r. çàäàòü àäðåñ âòîðîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 63 addr_param[2] = &Out_T_latch;//F_ras;
Kovalev_D 23:12e6183f04d4 64 addr_param[3] = &Output.Str.WP_reg;
Kovalev_D 23:12e6183f04d4 65 addr_param[4] = &Output.Str.Tmp_Out;
Kovalev_D 23:12e6183f04d4 66 size_param[0] = 8; //e. the length of the 1st parameter is 4 bytes //r. ïàðàìåòð 1 èìåeò äëèíó 4 áàéòà
Kovalev_D 23:12e6183f04d4 67 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 áàéò (!!! ïåðåäàåòñÿ ñòàðøèé áàéò, à íå ìëàäøèé)
Kovalev_D 23:12e6183f04d4 68 size_param[2] = 2;
Kovalev_D 23:12e6183f04d4 69 size_param[3] = 2;
Kovalev_D 23:12e6183f04d4 70 size_param[4] = 12;
Kovalev_D 23:12e6183f04d4 71 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 72 } // B_Delta_SF
Kovalev_D 23:12e6183f04d4 73
Kovalev_D 23:12e6183f04d4 74 void B_Delta_PS_execution(void)
Kovalev_D 23:12e6183f04d4 75 {
Kovalev_D 23:12e6183f04d4 76 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])};
Kovalev_D 23:12e6183f04d4 77 static uint32_t val, paramTmpWord;
Kovalev_D 23:12e6183f04d4 78 static uint32_t * ptr;
Kovalev_D 23:12e6183f04d4 79 static uint32_t index = 0;
Kovalev_D 23:12e6183f04d4 80
Kovalev_D 23:12e6183f04d4 81 if ((index & 1) == 0) // high byte
Kovalev_D 23:12e6183f04d4 82 {
Kovalev_D 23:12e6183f04d4 83 ptr = (uint32_t*)paramTable[index >> 1];
Kovalev_D 23:12e6183f04d4 84 val = *ptr;
Kovalev_D 23:12e6183f04d4 85 paramTmpWord = val >> 8; // move it to low byte of word
Kovalev_D 23:12e6183f04d4 86 }
Kovalev_D 23:12e6183f04d4 87 else
Kovalev_D 23:12e6183f04d4 88 {
Kovalev_D 23:12e6183f04d4 89 paramTmpWord = val;
Kovalev_D 23:12e6183f04d4 90 }
Kovalev_D 23:12e6183f04d4 91 paramTmpWord &= 0xFF;
Kovalev_D 23:12e6183f04d4 92 paramTmpWord |= index << 8;
Kovalev_D 23:12e6183f04d4 93
Kovalev_D 23:12e6183f04d4 94 Valid_Data = 0; // reset all bits of status word
Kovalev_D 23:12e6183f04d4 95
Kovalev_D 23:12e6183f04d4 96
Kovalev_D 23:12e6183f04d4 97 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü 2 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 98 addr_param[0] = &Output.Str.PS_dif; //e. set the first parameter address //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 99 addr_param[1] = &paramTmpWord;
Kovalev_D 23:12e6183f04d4 100 size_param[0] = 2; //e. the 1st parameter has 2 bytes length //r. ïàðàìåòð 1 èìåeò äëèíó 2 áàéò
Kovalev_D 23:12e6183f04d4 101 size_param[1] = 2; //e. the 2nd and 3rd parameters have 1 bytes length//r. ïàðàìåòðû 2,3 èìåþò äëèíó 1 áàéò
Kovalev_D 23:12e6183f04d4 102 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 103
Kovalev_D 23:12e6183f04d4 104 index++;
Kovalev_D 23:12e6183f04d4 105 if (index > 21)
Kovalev_D 23:12e6183f04d4 106 {
Kovalev_D 23:12e6183f04d4 107 index = 0;
Kovalev_D 23:12e6183f04d4 108 }
Kovalev_D 23:12e6183f04d4 109 } // B_Delta_PS_execution
Kovalev_D 23:12e6183f04d4 110
Kovalev_D 23:12e6183f04d4 111 void M_Mirror(void) //e.---------------- prepare to transmission of the copy of receiving buffer ------------- //r.---------------- ïîäãîòîâêà ïåðåäà÷è êîïèè ïðèåìíîãî áóôåðà -------------
Kovalev_D 23:12e6183f04d4 112 {
Kovalev_D 23:12e6183f04d4 113 num_of_par = 1; //e. 1 parameter output //r. âûâîäèòü 1 ïàðàìåòð
Kovalev_D 23:12e6183f04d4 114
Kovalev_D 23:12e6183f04d4 115 addr_param[0] = &rcv_copy; //e. set the address of the receiving buffer //r. óñòàíîâêà àäðåñà ïðèåìíîãî áóôåðà
Kovalev_D 23:12e6183f04d4 116
Kovalev_D 23:12e6183f04d4 117 //e. multiply the number of copied words on 2, since each //r. óìíîæèòü ÷èñëî ñêîïèðîâàííûõ ñëîâ íà 2, ò.ê. êàæäîå
Kovalev_D 23:12e6183f04d4 118 //e. will be trasferred in two steps: first zero, and then //r. áóäåò ïåðåäàâàòüñ÷ â äâà ïðèåìà: ñíà÷àëà íóëåâîé, à çàòåì
Kovalev_D 23:12e6183f04d4 119 size_param[0] = rcv_byt_copy << 1; // multiplay by 2
Kovalev_D 23:12e6183f04d4 120 if (size_param[0] >= 64)
Kovalev_D 23:12e6183f04d4 121 {
Kovalev_D 23:12e6183f04d4 122 size_param[0] = 64; //e. maximal amount - no more than double length of the copy buffer //r. ìàêñèìàëüíîå êîëè÷åñòâî - íå áîëåå äâîéíîé äëèíû áóôåðà-êîïèè
Kovalev_D 23:12e6183f04d4 123 }
Kovalev_D 23:12e6183f04d4 124 trm_rate = 0; //e. set the transfer rate to the 38400 bauds //r. óñòàíîâèòü ñêîðîñòü ïåðåäà÷è 38400 áîä
Kovalev_D 23:12e6183f04d4 125 trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. çàïðåòèòü ïåðåäà÷ó ïàðàìåòðà â öèêëå
Kovalev_D 23:12e6183f04d4 126 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 127 } // M_Mirror
Kovalev_D 23:12e6183f04d4 128
Kovalev_D 23:12e6183f04d4 129 void Mk_Ask1(void) //r.----------------- prepare of the standart answer 1 ---------------------- //r.----------------- ïîäãîòîâêà ñòàíäàðòíîãî îòâåòà 1 ----------------------
Kovalev_D 23:12e6183f04d4 130 {
Kovalev_D 23:12e6183f04d4 131 CMD_Code &= 0xff00; //e. clear bits of errors //r. î÷èñòèòü â íåì ïîëå îøèáîê
Kovalev_D 23:12e6183f04d4 132 num_of_par = 1; //e. total amount parameters in aswer - 1 //r. âñåãî ïàðàìåòðîâ â îòâåòå - 1
Kovalev_D 23:12e6183f04d4 133 addr_param[0] = &CMD_Code; //e. and this parameter - returnable command code //r. è ýòîò ïàðàìåòð - âîçâðàùàåìûé êîä êîìàíäû
Kovalev_D 23:12e6183f04d4 134 size_param[0] = 2; //e. and both its bytes //r. ïðè÷åì îáà åãî áàéòà
Kovalev_D 23:12e6183f04d4 135 trm_ena = 1; //e. allow operation of the transmitter of the device //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà óñòðîéñòâà
Kovalev_D 23:12e6183f04d4 136 } // Mk_Ask1
Kovalev_D 23:12e6183f04d4 137
Kovalev_D 23:12e6183f04d4 138 void Mk_AskDev(void) //r.----------------- answer on a command for device mode set ------------ //r.----------------- Îòâåò íà êîìàíäó óñòàíîâêè ðåæèìà ïðèáîðà ------------
Kovalev_D 23:12e6183f04d4 139 {
Kovalev_D 23:12e6183f04d4 140 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü äâà ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 141 addr_param[0] = &Device_Mode; //e. address of the counter mode register (intenal latch, external latch, etc.) //r. àäðåñ ðåãèñòðà ðåæèìà ñ÷åò÷èêîâ (âíóòð., âíåøíÿÿ çàùåëêà è ò.ä.)
Kovalev_D 23:12e6183f04d4 142 addr_param[1] = &SRgR; //e. address of the mode register of the processor card //r. àäðåñ ðåãèñòðà ðåæèìà ïëàòû ïðîöåññîðà
Kovalev_D 23:12e6183f04d4 143 size_param[0] = 2; //e. size of the counter mode register - 2 bytes //r. ðàçìåð ðåãèñòðà ðåæèìà ñ÷åò÷èêîâ - 2 áàéòà
Kovalev_D 23:12e6183f04d4 144 size_param[1] = 2; //e. size of the mode register of the processor card //r. ðàçìåð ðåãèñòðà ðåæèìà ïëàòû ïðîöåññîðà
Kovalev_D 23:12e6183f04d4 145 trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. çàïðåòèòü ïåðåäà÷ó ïàðàìåòðà â öèêëå
Kovalev_D 23:12e6183f04d4 146 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 147 } // Mk_AskDev
Kovalev_D 23:12e6183f04d4 148
Kovalev_D 23:12e6183f04d4 149 void GLD_Output(void) //e. ----------- Output modes --------- //r. --------- Ðåæèìû âûâîäà ---------
Kovalev_D 23:12e6183f04d4 150 {
Kovalev_D 23:12e6183f04d4 151 if (Latch_Rdy) //latch appeared
Kovalev_D 23:12e6183f04d4 152 {
Kovalev_D 23:12e6183f04d4 153 if (trm_cycl)
Kovalev_D 23:12e6183f04d4 154 trm_ena = 1; //enable packet generation
Kovalev_D 23:12e6183f04d4 155
Kovalev_D 23:12e6183f04d4 156 switch (CMD_Mode)
Kovalev_D 23:12e6183f04d4 157 {
Kovalev_D 23:12e6183f04d4 158 case 1: //e. Delta _PS mode
Kovalev_D 23:12e6183f04d4 159 B_Delta_PS_execution();
Kovalev_D 23:12e6183f04d4 160 break;
Kovalev_D 23:12e6183f04d4 161
Kovalev_D 23:12e6183f04d4 162 case 5:
Kovalev_D 23:12e6183f04d4 163 CMD_Code &= 0xff1f; //e. reset bits of current command code settings of periodicity and transfer rate //r. ñáðîñèòü â òåêóùåì êîäå êîìàíäû áèòû óñòàíîâêè ïåðèîäè÷íîñòè è ñêîðîñòè ïåðåäà÷è
Kovalev_D 23:12e6183f04d4 164 if (CMD_Code == 0xdd02) //e. is it the Rate2 mode? //r. ýòî ðåæèì Rate2?
Kovalev_D 23:12e6183f04d4 165 {
Kovalev_D 23:12e6183f04d4 166 if (data_Rdy & WHOLE_PERIOD)
Kovalev_D 23:12e6183f04d4 167 {
Kovalev_D 23:12e6183f04d4 168 trm_ena = 1;
Kovalev_D 23:12e6183f04d4 169 }
Kovalev_D 23:12e6183f04d4 170 else
Kovalev_D 23:12e6183f04d4 171 trm_ena = 0;
Kovalev_D 23:12e6183f04d4 172 }
Kovalev_D 23:12e6183f04d4 173 break;
Kovalev_D 23:12e6183f04d4 174 }
Kovalev_D 23:12e6183f04d4 175 }
Kovalev_D 23:12e6183f04d4 176 } // GLD_Delta
Kovalev_D 23:12e6183f04d4 177
Kovalev_D 23:12e6183f04d4 178
Kovalev_D 23:12e6183f04d4 179
Kovalev_D 23:12e6183f04d4 180 ///// -------- commands -------------------------------------------------------------
Kovalev_D 23:12e6183f04d4 181 //e. set main device operation modes: //r. Óñòàíîâêà îñíîâíûõ ðåæèìîâ ðàáîòû ïðèáîðà:
Kovalev_D 23:12e6183f04d4 182 //e. 1. acions with counters (internal latch, external latch with request over line, //r. 1. ðàáîòà ñî ñ÷åò÷èêàìè (âíóòðåííÿÿ çàùåëêà, âíåøíÿÿ çàùåëêè ñ çàïðîñîì ïî ëèíèè,
Kovalev_D 23:12e6183f04d4 183 //e. external latch without request over line (instant answer after receiving of external latch pulse)) //r. âíåøíÿÿ çàùåëêà áåç çàïðîñà ïî ëèíèè (îòâåò ñðàçó ïîñëå ïðèõîäà èìïóëüñà âíåøí. çàùåëêè))
Kovalev_D 23:12e6183f04d4 184 //e. 2. line receiving/transmission rate //r. 2. ñêîðîñòü ïðèåìà/ïåðåäà÷è ïî ëèíèè
Kovalev_D 23:12e6183f04d4 185 void B_Dev_Mode(void)
Kovalev_D 23:12e6183f04d4 186 {
Kovalev_D 23:12e6183f04d4 187 Device_Mode = rcv_buf[3] & 0x00ff; //e. read the byte of command parameter from the receiver buffer //r. ñ÷èòàòü èç áóôåðà ïðèåìíèêà áàéò ïàðàìåòðà êîìàíäû
Kovalev_D 23:12e6183f04d4 188 //e. and write it to the counter mode register //r. è çàïèñûâàåì â ðåãèñòð ðåæèìà ñ÷åò÷èêîâ
Kovalev_D 23:12e6183f04d4 189 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 190 Mk_AskDev();
Kovalev_D 23:12e6183f04d4 191 } // B_Dev_Mode
Kovalev_D 23:12e6183f04d4 192
Kovalev_D 23:12e6183f04d4 193 void B_BIT_Mode(void)
Kovalev_D 23:12e6183f04d4 194 {
Kovalev_D 23:12e6183f04d4 195 uint8_t temp;
Kovalev_D 23:12e6183f04d4 196
Kovalev_D 23:12e6183f04d4 197 temp = rcv_buf[3] & 0x000f & (~((rcv_buf[3] & 0x00f0) >> 4));
Kovalev_D 23:12e6183f04d4 198 if (temp == 1) // 1 - const test
Kovalev_D 23:12e6183f04d4 199 {
Kovalev_D 23:12e6183f04d4 200 Is_BIT = 1;
Kovalev_D 23:12e6183f04d4 201 BIT_number = (long)(rcv_buf[4] & 0x00FF) << 24;
Kovalev_D 23:12e6183f04d4 202 BIT_number |= (long)(rcv_buf[5] & 0x00FF) << 16;
Kovalev_D 23:12e6183f04d4 203 BIT_number |= (long)(rcv_buf[6] & 0x00FF) << 8;
Kovalev_D 23:12e6183f04d4 204 BIT_number |= (long)(rcv_buf[7] & 0x00FF);
Kovalev_D 23:12e6183f04d4 205 }
Kovalev_D 23:12e6183f04d4 206 else
Kovalev_D 23:12e6183f04d4 207 {
Kovalev_D 23:12e6183f04d4 208 Is_BIT = 0;
Kovalev_D 23:12e6183f04d4 209 }
Kovalev_D 23:12e6183f04d4 210 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 211 Mk_AskDev();
Kovalev_D 23:12e6183f04d4 212 } // B_BIT_Mode
Kovalev_D 23:12e6183f04d4 213
Kovalev_D 23:12e6183f04d4 214 void M_Stimul(void) //e. === procedure of output of analog (DAC) and digital (flags) stimuluses //r. === ïðîöåäóðà âûâîäà àíàëîãîâûõ (ÖÀÏ) è äèñêðåòíûõ (ôëàãè) ñòèìóëîâ
Kovalev_D 23:12e6183f04d4 215 {
Kovalev_D 23:12e6183f04d4 216 uint32_t chan;
Kovalev_D 23:12e6183f04d4 217
Kovalev_D 23:12e6183f04d4 218 ScopeMode = 4; //e. WP_PHASE_DETECTOR allocate a mode of display for a control point of an scope //r. WP_PHASE_DETECTOR íàçíà÷èòü ðåæèì îòîáðàæåíèÿ äëÿ êîíòðîëüíîé òî÷êè îñöèëëîãðàôà
Kovalev_D 23:12e6183f04d4 219
Kovalev_D 23:12e6183f04d4 220 chan = CMD_Code & 0x0007; //e. extracting the number of stimulus //r. âûäåëåíèå íîìåðà ñòèìóëà
Kovalev_D 23:12e6183f04d4 221
Kovalev_D 23:12e6183f04d4 222 Output.ArrayOut[chan] = (((int)rcv_buf[4] << 8) | (int)rcv_buf[5])-0x8000;
Kovalev_D 23:12e6183f04d4 223
Kovalev_D 23:12e6183f04d4 224 if ((CMD_Code & (1 << 7)) == 0) //e. to estimate: whether the answer is required //r. îöåíèòü: òðåáóåòñÿ ëè îòâåò
Kovalev_D 23:12e6183f04d4 225 {
Kovalev_D 23:12e6183f04d4 226 return; //e. if no - return //r. åñëè íåò - âîçâðàò
Kovalev_D 23:12e6183f04d4 227 }
Kovalev_D 23:12e6183f04d4 228 Mk_Ask1(); //e. otherwise - answer output //r. èíà÷å - âûäàòü îòâåò
Kovalev_D 23:12e6183f04d4 229 } // M_Stymul
Kovalev_D 23:12e6183f04d4 230
Kovalev_D 23:12e6183f04d4 231 void M_Status(void) //e. === procedure of initialization of transmission of the device status //r. === ïðîöåäóðà èíèöèàëèçàöèè ïåðåäà÷è ñòàòóñà óñòðîéñòâà
Kovalev_D 23:12e6183f04d4 232 {
Kovalev_D 23:12e6183f04d4 233 SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. è óñòàíîâèòü ñêîðîñòü ïåðåäà÷è îòâåòà è åãî ïåðèîäè÷íîñòü
Kovalev_D 23:12e6183f04d4 234
Kovalev_D 23:12e6183f04d4 235 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü äâà ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 236 addr_param[0] = &blt_in_test; //e. the register address of the self-testing result //r. àäðåñ ðåãèñòðà ðåçóëüòàòà ñàìîòåñòèðîâàíèÿ
Kovalev_D 23:12e6183f04d4 237 addr_param[1] = &ser_num; //e. address of the register of errors of line //r. àäðåñ ðåãèñòðà îøèáîê ëèíèè
Kovalev_D 23:12e6183f04d4 238 size_param[0] = 2; //e. size of the self-test register - 2 bytes //r. ðàçìåð ðåãèñòðà ñàìîòåñòèðîâàíèÿ - 2 áàéòà
Kovalev_D 23:12e6183f04d4 239 size_param[1] = 2; //e. size of the register of errors of line //r. ðàçìåð ðåãèñòðà îøèáîê ëèíèè
Kovalev_D 23:12e6183f04d4 240
Kovalev_D 23:12e6183f04d4 241 trm_rate = 0; //e. set the transfer rate to the 38400 bauds //r. óñòàíîâèòü ñêîðîñòü ïåðåäà÷è 38400 áîä
Kovalev_D 23:12e6183f04d4 242 trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. çàïðåòèòü ïåðåäà÷ó ïàðàìåòðà â öèêëå
Kovalev_D 23:12e6183f04d4 243 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 244 } // M_Status
Kovalev_D 23:12e6183f04d4 245
Kovalev_D 23:12e6183f04d4 246 void M_Clear(void) //e.---------------- cleaning of the register of errors of line -------------------------- //r.---------------- î÷èñòêà ðåãèñòðà îøèáîê ëèíèè --------------------------
Kovalev_D 23:12e6183f04d4 247 {
Kovalev_D 23:12e6183f04d4 248 line_err = 0;
Kovalev_D 23:12e6183f04d4 249 } // M_Clear
Kovalev_D 23:12e6183f04d4 250
Kovalev_D 23:12e6183f04d4 251 void M_Tmp_W(void) //e.----------------- write the command to the AD7714 IC ------------------------- //r.----------------- çàïèñü êîìàíäû â ñõåìû AD7714 -------------------------
Kovalev_D 23:12e6183f04d4 252 {
Kovalev_D 23:12e6183f04d4 253
Kovalev_D 23:12e6183f04d4 254 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 255 }
Kovalev_D 23:12e6183f04d4 256
Kovalev_D 23:12e6183f04d4 257 void M_Tmp_R(void) //e.----------------- read the data from the AD7714 IC -------------------------- //r.----------------- ÷òåíèå äàííûõ èç ñõåì AD7714 --------------------------
Kovalev_D 23:12e6183f04d4 258 {
Kovalev_D 23:12e6183f04d4 259
Kovalev_D 23:12e6183f04d4 260 } // M_Tmp_R
Kovalev_D 23:12e6183f04d4 261
Kovalev_D 23:12e6183f04d4 262 void M_ADC_R(void) //e.----------------- read the data from the ADCs ADS1250, ADS8321 --------- //r.----------------- ÷òåíèå äàííûõ èç êàíàëîâ ÀÖÏ ADS1250, ADS8321 ---------
Kovalev_D 23:12e6183f04d4 263 {
Kovalev_D 23:12e6183f04d4 264 SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. óñòàíîâèòü ñêîðîñòü ïåðåäà÷è îòâåòà è åãî ïåðèîäè÷íîñòü
Kovalev_D 23:12e6183f04d4 265 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 266
Kovalev_D 23:12e6183f04d4 267 num_of_par = 4; //e. 4 parameters output //r. âûâîäèòü ÷åòûðå ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 268 addr_param[0] = 0; //e. //r. <!-- èñïîëüçîâàëèñü äëÿ ÄÓÏ, òåïåðü íå èñïîëüçóþòñÿ
Kovalev_D 23:12e6183f04d4 269 addr_param[1] = 0; //e. //r. -->
Kovalev_D 23:12e6183f04d4 270 addr_param[2] = 0;
Kovalev_D 23:12e6183f04d4 271 addr_param[3] = &(Input.StrIn.HF_out); //e. set the 4th parameter address _HF_out //r. çàäàòü àäðåñ ÷åòâåðòîãî ïàðàìåòðà _HF_out
Kovalev_D 23:12e6183f04d4 272 size_param[0] = 2; //e. size of the parameters - 2 bytes //r. ðàçìåð ïàðàìåòðîâ - 2 áàéòà
Kovalev_D 23:12e6183f04d4 273 size_param[1] = 2;
Kovalev_D 23:12e6183f04d4 274 size_param[2] = 2;
Kovalev_D 23:12e6183f04d4 275 size_param[3] = 2;
Kovalev_D 23:12e6183f04d4 276 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 277 } // M_ADC_R
Kovalev_D 23:12e6183f04d4 278
Kovalev_D 23:12e6183f04d4 279 void M_Cnt_R(void) //r.----------------- read the counters of the Elio5 card -------------------------- //r.----------------- ÷òåíèå ñ÷åò÷èêîâ ïëàòû Elio5 --------------------------
Kovalev_D 23:12e6183f04d4 280 {
Kovalev_D 23:12e6183f04d4 281 SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. óñòàíîâèòü ñêîðîñòü ïåðåäà÷è îòâåòà è åãî ïåðèîäè÷íîñòü
Kovalev_D 23:12e6183f04d4 282 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 283 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü äâà ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 284
Kovalev_D 23:12e6183f04d4 285 addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the first parameter address //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 286 addr_param[1] = &(Output.Str.Cnt_Mns); //e. set the second paremeter address //r. çàäàòü àäðåñ âòîðîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 287 size_param[0] = 2; //e. size of the parameters - 2 bytes //r. ðàçìåð ïàðàìåòðîâ - 2 áàéòà
Kovalev_D 23:12e6183f04d4 288 size_param[1] = 2;
Kovalev_D 23:12e6183f04d4 289 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 290 } // M_Cnt_R
Kovalev_D 23:12e6183f04d4 291
Kovalev_D 23:12e6183f04d4 292 /*void M_e5r_W(void) //r.----------------- write to the mode register of the Elio5 card ------------------ //r.----------------- çàïèñü â ðåãèñòð ðåæèìà ïëàòû Elio5 ------------------
Kovalev_D 23:12e6183f04d4 293 {
Kovalev_D 23:12e6183f04d4 294 //e. read the byte of command parameter from the receiver buffer //r. ñ÷èòàòü èç áóôåðà ïðèåìíèêà áàéò ïàðàìåòðà êîìàíäû
Kovalev_D 23:12e6183f04d4 295 //e. and write it to the card mode register and its copy //r. è çàïèñàòü åãî â ðåãèñòð ðåæèìà ïëàòû è â åãî êîïèþ
Kovalev_D 23:12e6183f04d4 296 #if !defined COMMAND_DEBUG
Kovalev_D 23:12e6183f04d4 297 Copy_e5_RgR = rcv_buf[3];
Kovalev_D 23:12e6183f04d4 298 io_space_write(E5_RGR, Copy_e5_RgR);
Kovalev_D 23:12e6183f04d4 299 #endif
Kovalev_D 23:12e6183f04d4 300 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 301 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 302 } // M_e5r_W */
Kovalev_D 23:12e6183f04d4 303 /*
Kovalev_D 23:12e6183f04d4 304 void M_e5rA_W(void) //e.----- write to the 1st additional mode register of the Elio5 card ---------- //r.----- çàïèñü â 1-ûé äîïîëíèòåëüíûé ðåãèñòð ðåæèìà ïëàòû Elio5 ----------
Kovalev_D 23:12e6183f04d4 305 {
Kovalev_D 23:12e6183f04d4 306 //e. this command is used for switching a signal on which data counters are latched: //r. ýòà êîìàíäà èñïîëüçóåòñÿ äëÿ ïåðåêëþ÷åíèÿ ñèãíàëà, ïî êîòîðîìó çàùåëêèâàþòñÿ
Kovalev_D 23:12e6183f04d4 307 //e. on the Reper signal or on Sign Meander //r. èíôîðìàöèîííûå ñ÷åò÷èêè: ëèáî ïî Reper`ó ëèáî ïî RefMeandr`ó
Kovalev_D 23:12e6183f04d4 308
Kovalev_D 23:12e6183f04d4 309 //e. read the byte of command parameter from the receiver buffer //r. ñ÷èòàòü èç áóôåðà ïðèåìíèêà áàéò ïàðàìåòðà êîìàíäû
Kovalev_D 23:12e6183f04d4 310 //e. and write it to the card mode register and its copy //r. è çàïèñàòü åãî â ðåãèñòð ðåæèìà ïëàòû è â åãî êîïèþ
Kovalev_D 23:12e6183f04d4 311 Copy_e5_RgRA = rcv_buf[3];
Kovalev_D 23:12e6183f04d4 312 //??? Device_Mode = Copy_e5_RgRA; //e. and write it to the counter mode register //r. è çàïèñûâàåì â ðåãèñòð ðåæèìà ñ÷åò÷èêîâ
Kovalev_D 23:12e6183f04d4 313 #if !defined COMMAND_DEBUG
Kovalev_D 23:12e6183f04d4 314 io_space_write(E5_RGRA, Copy_e5_RgRA);
Kovalev_D 23:12e6183f04d4 315 #endif
Kovalev_D 23:12e6183f04d4 316 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 317 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 318 } // M_e5rA_W */
Kovalev_D 23:12e6183f04d4 319
Kovalev_D 23:12e6183f04d4 320 void M_Ctl_R(void) //r.----------------- reading the control register of the device ----------------- //r.----------------- ÷òåíèå ðåãèñòðà óïðàâëåíèÿ óñòðîéñòâà -----------------
Kovalev_D 23:12e6183f04d4 321 {
Kovalev_D 23:12e6183f04d4 322 num_of_par = 2; //e. 2 parameters transfer //r. ïåðåäàâàòü 2 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 323 addr_param[0] = &CMD_Code; //e. the first parameter in answer - returned command code //r. ïåðâûé ïàðàìåòð â îòâåòå - âîçâðàùàåìûé êîä êîìàíäû
Kovalev_D 23:12e6183f04d4 324 size_param[0] = 2;
Kovalev_D 23:12e6183f04d4 325 size_param[1] = 2; //e. two bytes also have control registers //r. äâà áàéòà èìåþò òàêæå è ðåãèñòðû óïðàâëåíèÿ
Kovalev_D 23:12e6183f04d4 326 if ((rcv_buf[3] & (1 << 4)) == 0) //e. is main control register needed? //r. òðåáóåòñÿ îñíîâíîé ðåãèñòð óïðàâëåíèÿ?
Kovalev_D 23:12e6183f04d4 327 {
Kovalev_D 23:12e6183f04d4 328 addr_param[1] = &RgConA; //e. yes //r. äà
Kovalev_D 23:12e6183f04d4 329 }
Kovalev_D 23:12e6183f04d4 330 else
Kovalev_D 23:12e6183f04d4 331 {
Kovalev_D 23:12e6183f04d4 332 addr_param[1] = &RgConB; //e. otherwise - load the address of the addititonal register //r. èíà÷å - çàãðóçèòü àäðåñ äîïîëíèòåëüíîãî ðåãèñòðà
Kovalev_D 23:12e6183f04d4 333 }
Kovalev_D 23:12e6183f04d4 334 CMD_Code &= 0xff10; //e. clear in it bit of errors and byte number //r. ñáðîñèòü â íåì ïîëÿ îøèáîê è íîìåðà áèòà
Kovalev_D 23:12e6183f04d4 335 trm_ena = 1; //e. allow operation of the transmitter of line //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà ëèíèè
Kovalev_D 23:12e6183f04d4 336 } // M_Ctl_R
Kovalev_D 23:12e6183f04d4 337
Kovalev_D 23:12e6183f04d4 338 void M_Ctl_M(void) //r.----------------- modification of the control register of the device ------------ //r.----------------- ìîäèôèêàöèÿ ðåãèñòðà óïðàâëåíèÿ óñòðîéñòâà ------------
Kovalev_D 23:12e6183f04d4 339 {
Kovalev_D 23:12e6183f04d4 340 uint32_t * ptr;
Kovalev_D 23:12e6183f04d4 341 uint32_t bit_numb;
Kovalev_D 23:12e6183f04d4 342
Kovalev_D 23:12e6183f04d4 343 num_of_par = 2; //e. 2 parameters transfer //r. ïåðåäàâàòü 2 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 344 addr_param[0] = &CMD_Code; //e. the first parameter in answer - returned command code //r. ïåðâûé ïàðàìåòð â îòâåòå - âîçâðàùàåìûé êîä êîìàíäû
Kovalev_D 23:12e6183f04d4 345 size_param[0] = 2;
Kovalev_D 23:12e6183f04d4 346 size_param[1] = 2; //e. two bytes also have control registers //r. äâà áàéòà èìåþò òàêæå è ðåãèñòðû óïðàâëåíèÿ
Kovalev_D 23:12e6183f04d4 347 if ((CMD_Code & (1 << 4)) == 0) //e. is main control register needed? //r. òðåáóåòñÿ îñíîâíîé ðåãèñòð óïðàâëåíèÿ?
Kovalev_D 23:12e6183f04d4 348 {
Kovalev_D 23:12e6183f04d4 349 ptr = &RgConA; //e. yes //r. äà
Kovalev_D 23:12e6183f04d4 350 }
Kovalev_D 23:12e6183f04d4 351 else
Kovalev_D 23:12e6183f04d4 352 {
Kovalev_D 23:12e6183f04d4 353 ptr = &RgConB; //e. otherwise - load the address of the addititonal register //r. èíà÷å - çàãðóçèòü àäðåñ äîïîëíèòåëüíîãî ðåãèñòðà
Kovalev_D 23:12e6183f04d4 354 }
Kovalev_D 23:12e6183f04d4 355 addr_param[1] = ptr; //e. the second parameter in answer - modified register //r. âòîðîé ïàðàìåòð â îòâåòå - ìîäèôèöèðîâàííûé ðåãèñòð
Kovalev_D 23:12e6183f04d4 356
Kovalev_D 23:12e6183f04d4 357 bit_numb = CMD_Code & 0x000f; //e. extract the number of the changeable bit //r. âûäåëèòü íîìåð èçìåíÿåìîãî áèòà
Kovalev_D 23:12e6183f04d4 358 if ((CMD_Code & (1 << 7)) == 0) // Is clear bit
Kovalev_D 23:12e6183f04d4 359 {
Kovalev_D 23:12e6183f04d4 360 *ptr &= ~(1 << bit_numb); // yes, clear bit
Kovalev_D 23:12e6183f04d4 361 }
Kovalev_D 23:12e6183f04d4 362 else
Kovalev_D 23:12e6183f04d4 363 {
Kovalev_D 23:12e6183f04d4 364 *ptr |= 1 << bit_numb; // no, set bit
Kovalev_D 23:12e6183f04d4 365 }
Kovalev_D 23:12e6183f04d4 366
Kovalev_D 23:12e6183f04d4 367 CMD_Code &= 0xff10; //e. clear in command bit of errors and byte number //r. ñáðîñèòü â êîìàíäå ïîëÿ îøèáîê è íîìåðà áèòà
Kovalev_D 23:12e6183f04d4 368 trm_cycl = 0; //e. forbid cyclic transmission of the parameter //r. çàïðåòèòü ïåðåäà÷ó ïàðàìåòðà â öèêëå
Kovalev_D 23:12e6183f04d4 369 trm_ena = 1; //e. allow operation of the transmitter of line //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà ëèíèè
Kovalev_D 23:12e6183f04d4 370 } // M_Ctl_M
Kovalev_D 23:12e6183f04d4 371
Kovalev_D 23:12e6183f04d4 372 void M_Flg_R(void) //e.------------ reading the register of input flags --------------------------- //r.------------ ÷òåíèå ðåãèñòðà âõîäíûõ ôëàãîâ ---------------------------
Kovalev_D 23:12e6183f04d4 373 {
Kovalev_D 23:12e6183f04d4 374
Kovalev_D 23:12e6183f04d4 375 num_of_par = 1; //e. 1 parameter output //r. âûâîäèòü îäèí ïàðàìåòð
Kovalev_D 23:12e6183f04d4 376 addr_param[0] = &In_Flag; //e. the address of the flag register copy //r. àäðåñ êîïèè ðåãèñòðà ôëàãîâ
Kovalev_D 23:12e6183f04d4 377 size_param[0] = 2; //e. size of the buffer - 2 bytes //r. ðàçìåð áóôåðà - 2 áàéòà
Kovalev_D 23:12e6183f04d4 378 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 379
Kovalev_D 23:12e6183f04d4 380 } // M_Flg_R
Kovalev_D 23:12e6183f04d4 381
Kovalev_D 23:12e6183f04d4 382 void M_Vib_W(void) //r.------------ set the oscillation period of the dither drive ----------------- //r.------------ óñòàíîâêà ïåðèîäà êîëåáàíèé âèáðîïðèâîäà -----------------
Kovalev_D 23:12e6183f04d4 383 {
Kovalev_D 23:12e6183f04d4 384 ScopeMode = 1; //e. VB_PHASE_DETECTOR allocate a mode of display for a control point of an scope //r. VB_PHASE_DETECTOR íàçíà÷èòü ðåæèì îòîáðàæåíèÿ äëÿ êîíòðîëüíîé òî÷êè îñöèëëîãðàôà
Kovalev_D 23:12e6183f04d4 385
Kovalev_D 23:12e6183f04d4 386 Output.Str.T_Vibro = (rcv_buf[4] << 8) | (rcv_buf[5] & 0xFF); //e. new variable of the period //r. íîâàÿ ïåðåìåííàÿ ïåðèîäà
Kovalev_D 23:12e6183f04d4 387 /* sprintf(BuffTemp1, "\n\r F = %d ", Output.Str.T_Vibro);
Kovalev_D 23:12e6183f04d4 388 SendToBuff(BuffTemp1,15);*/
Kovalev_D 23:12e6183f04d4 389 Output.Str.L_Vibro= (rcv_buf[6] << 8) | (rcv_buf[7] & 0xFF); //e. new variable of the pulse width //r. íîâàÿ ïåðåìåííàÿ äëèòåëüíîñòè èìïóëüñîâ
Kovalev_D 23:12e6183f04d4 390 /*sprintf(BuffTemp1, "\n\r L = %d ", Output.Str.L_Vibro);
Kovalev_D 23:12e6183f04d4 391 SendToBuff(BuffTemp1,15);*/
Kovalev_D 23:12e6183f04d4 392 VibroDither_Set(); //e. and output its value to period registers on card //r. âûâåñòè åå çíà÷åíèå â ðåãèñòðû ïåðèîäà íà ïëàòå
Kovalev_D 23:12e6183f04d4 393
Kovalev_D 23:12e6183f04d4 394 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 395 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 396 } // M_Vib_W
Kovalev_D 23:12e6183f04d4 397
Kovalev_D 23:12e6183f04d4 398 void M_Gph_W(void) //e.------------ set the gain factor of photodetector channels ------------------- //r.------------ óñòàíîâêà óñèëåíèÿ êàíàëîâ ôîòîïðèåìíèêà -------------------
Kovalev_D 23:12e6183f04d4 399 {
Kovalev_D 23:12e6183f04d4 400 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. ñ÷èòàòü èç áóôåðà ïðèåìíèêà çíà÷åíèå óñèëåíèÿ êàíàëà À
Kovalev_D 23:12e6183f04d4 401 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. ñ÷èòàòü èç áóôåðà ïðèåìíèêà çíà÷åíèå óñèëåíèÿ êàíàëà Â
Kovalev_D 23:12e6183f04d4 402
Kovalev_D 23:12e6183f04d4 403 Out_G_photo(Device_blk.Str.Gain_Ph_A, Device_blk.Str.Gain_Ph_B); //e. display these values to digital potentiometers //r. âûâåñòè ýòè çíà÷åíèÿ â öèôðîâûå ïîòåíöèîìåòðû
Kovalev_D 23:12e6183f04d4 404
Kovalev_D 23:12e6183f04d4 405 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 406 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 407 } // M_Gph_W
Kovalev_D 23:12e6183f04d4 408
Kovalev_D 23:12e6183f04d4 409 void M_Rate(void) //e.------------ start of transfer of the M_Rate parameters stack ------------------- //r.------------ çàïóñê ïåðåäà÷è íàáîðà ïàðàìåòðîâ M_Rate -------------------
Kovalev_D 23:12e6183f04d4 410 {
Kovalev_D 23:12e6183f04d4 411 uint8_t mode;
Kovalev_D 23:12e6183f04d4 412
Kovalev_D 23:12e6183f04d4 413 SetSpeedPeriod(); //e. set the answer transfer rate and its periodicity //r. óñòàíîâèòü ñêîðîñòü ïåðåäà÷è îòâåòà è åãî ïåðèîäè÷íîñòü
Kovalev_D 23:12e6183f04d4 414 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 415
Kovalev_D 23:12e6183f04d4 416 mode = rcv_buf[3] & 0x001f; //e. extract number of the parameters stack in the command //r. âûäåëèòü íîìåð íàáîðà ïàðàìåòðîâ â êîìàíäå
Kovalev_D 23:12e6183f04d4 417
Kovalev_D 23:12e6183f04d4 418 switch (mode) {
Kovalev_D 23:12e6183f04d4 419 case 1: //e. it is the Rate stack //r. ýòî íàáîð Rate
Kovalev_D 23:12e6183f04d4 420 RgConB = RATE_REPER_OR_REFMEANDR; //e. counter latch every vibro period
Kovalev_D 23:12e6183f04d4 421 SwitchRefMeandInt(RATE_REPER_OR_REFMEANDR); //e. enable reference meander interrupt
Kovalev_D 23:12e6183f04d4 422
Kovalev_D 23:12e6183f04d4 423 wrk_period = 12500000; //e. load needed length of working period 1 ñ.//r. çàãðóçèòü òðåáóåìóþ äëèòåëüíîñòü ðàáî÷åãî ïåðèîäà 1 ñ.
Kovalev_D 23:12e6183f04d4 424 num_of_par = 14; //e. 9 parameters or groups of parameters output //r. âûâîäèòü 9 ïàðàìåòðîâ èëè ãðóïï ïàðàìåòðîâ
Kovalev_D 23:12e6183f04d4 425
Kovalev_D 23:12e6183f04d4 426 Valid_Data = 0; // reset all bits of status word
Kovalev_D 23:12e6183f04d4 427
Kovalev_D 23:12e6183f04d4 428 addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the address of the 1st parameter in the 1st group //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà â 1-îé ãðóïïå
Kovalev_D 23:12e6183f04d4 429 addr_param[1] = &(Output.Str.Cnt_Mns); //e. set the address of the 1st parameter in the 2nd group //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà â 2-îé ãðóïïå
Kovalev_D 23:12e6183f04d4 430 addr_param[2] = &(Output.Str.Cnt_Dif); //e. set the address of the 1st parameter in the 3rd group //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà â 3-îé ãðóïïå
Kovalev_D 23:12e6183f04d4 431 addr_param[3] = &(Output.Str.F_ras); //e. set the address of the _F_ras parameter in the 4th group //r. çàäàòü àäðåñ ïàðàìåòðà _F_ras âî 4-îé ãðóïïå
Kovalev_D 23:12e6183f04d4 432 addr_param[4] = &(Output.Str.HF_reg); //e. set the address of the _HF_reg parameter in the 5th group //r. çàäàòü àäðåñ ïàðàìåòðà _HF_reg â 5-åé ãðóïïå
Kovalev_D 23:12e6183f04d4 433 addr_param[5] = &(Output.Str.HF_dif); //e. set the address of the _HF_dif parameter in the 6th group //r. çàäàòü àäðåñ ïàðàìåòðà _HF_dif â 6-îé ãðóïïå
Kovalev_D 23:12e6183f04d4 434 addr_param[6] = &(Output.Str.T_Vibro); //e. parameter _T_Vibro //r. ïàðàìåòð _T_Vibro
Kovalev_D 23:12e6183f04d4 435 addr_param[7] = &(Output.Str.T_VB_pll); //e. parameter _T_VB_pll //r.ïàðàìåòðâ _T_VB_pll
Kovalev_D 23:12e6183f04d4 436 addr_param[8] = &(Output.Str.L_Vibro); //e. parameter _L_Vibro //r. ïàðàìåòð _L_Vibro
Kovalev_D 23:12e6183f04d4 437 addr_param[9] = &(Input.StrIn.HF_out); //e. set the address of the _RI_reg parameter in the 8th group //r. çàäàòü àäðåñ ïàðàìåòðà _RI_reg â 8-îé ãðóïïå
Kovalev_D 23:12e6183f04d4 438 addr_param[10] = &(Output.Str.WP_reg); //e. parameters: _WP_reg, _WP_pll //r. ïàðàìåòðîâ _WP_reg, _WP_pll
Kovalev_D 23:12e6183f04d4 439 addr_param[11] = &(Output.Str.WP_pll); //e. parameters: _WP_reg, _WP_pll //r. ïàðàìåòðîâ _WP_reg, _WP_pll
Kovalev_D 23:12e6183f04d4 440 addr_param[12] = &(Output.Str.Tmp_Out); //e. set the address of the temperature sensors array //r. çàäàòü àäðåñ ìàññèâà äàò÷èêîâ òåìïåðàòóðû
Kovalev_D 23:12e6183f04d4 441 addr_param[13] = &(Output.Str.WP_scope1); //e. reserved //r. çàðåçåðâèðîâàíî äëÿ äàëüíåéøèõ ïðèìåíåíèé
Kovalev_D 23:12e6183f04d4 442
Kovalev_D 23:12e6183f04d4 443 size_param[0] = 2; //e. groups 1-6, 8-10 consists of one parameter ... //r. ãðóïïû 1-6, 8-10 ñîäåðæàò ïî îäíîìó ïàðàìåòðó
Kovalev_D 23:12e6183f04d4 444 size_param[1] = 2; //e. and have 2 bytes length each //r. è èìåþò äëèíó 2 áàéòà êàæäàÿ
Kovalev_D 23:12e6183f04d4 445 size_param[2] = 2;
Kovalev_D 23:12e6183f04d4 446 size_param[3] = 2;
Kovalev_D 23:12e6183f04d4 447 size_param[4] = 2;
Kovalev_D 23:12e6183f04d4 448 size_param[5] = 2;
Kovalev_D 23:12e6183f04d4 449 size_param[6] = 2;
Kovalev_D 23:12e6183f04d4 450 size_param[7] = 2;
Kovalev_D 23:12e6183f04d4 451 size_param[8] = 2;
Kovalev_D 23:12e6183f04d4 452 size_param[9] = 2;
Kovalev_D 23:12e6183f04d4 453 size_param[10] = 2;
Kovalev_D 23:12e6183f04d4 454 size_param[11] = 2;
Kovalev_D 23:12e6183f04d4 455
Kovalev_D 23:12e6183f04d4 456 size_param[13] = 4; //e. the 11th group parameters has length of 4 bytes //r. 11-z ãðóïïà ïàðàìåòðîâ èìååò äëèíó 4 áàéòà
Kovalev_D 23:12e6183f04d4 457
Kovalev_D 23:12e6183f04d4 458 size_param[12] = 12; //e. format o the GLD array of temperatures - 12 bytes //r. ôîðìàò ìàññèâà òåìïåðàòóð ÃËÄ - 12 áàéò
Kovalev_D 23:12e6183f04d4 459
Kovalev_D 23:12e6183f04d4 460 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 461 break;
Kovalev_D 23:12e6183f04d4 462
Kovalev_D 23:12e6183f04d4 463 case 2: //e. it is the Rate2 stack //r. ýòî íàáîð Rate2
Kovalev_D 23:12e6183f04d4 464 RgConB = RATE_REPER_OR_REFMEANDR;
Kovalev_D 23:12e6183f04d4 465 SwitchRefMeandInt(RATE_REPER_OR_REFMEANDR); //e. enable interrupt from ref. meander
Kovalev_D 23:12e6183f04d4 466 wrk_period = 0; //e. frequency of output = fvibro //r. ÷àñòîòà âûâîäà ðàâíà ÷àñòîòå ÂÏ
Kovalev_D 23:12e6183f04d4 467
Kovalev_D 23:12e6183f04d4 468 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü 2 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 469
Kovalev_D 23:12e6183f04d4 470 addr_param[0] = &(Output.Str.Cnt_Pls); //e. set the first parameter address //r. çàäàòü àäðåñ ïåðâîãî ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 471 addr_param[1] = &(Output.Str.Cnt_Mns); //e. and the 2nd //r. è âòîðîãî
Kovalev_D 23:12e6183f04d4 472 size_param[0] = 2; //e. parameters has 2 bytes length //r. ïàðàìåòðû èìååò äëèíó 2 áàéòà
Kovalev_D 23:12e6183f04d4 473 size_param[1] = 2;
Kovalev_D 23:12e6183f04d4 474 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 475 break;
Kovalev_D 23:12e6183f04d4 476
Kovalev_D 23:12e6183f04d4 477 case 3: //e. it is the Rate3 stack //r. ýòî íàáîð Rate3
Kovalev_D 23:12e6183f04d4 478
Kovalev_D 23:12e6183f04d4 479 wrk_period = 2500; //e. frequency of output = 10000 Hz //r. n=1, ÷àñòîòà âûâîäà = 10000 Hz
Kovalev_D 23:12e6183f04d4 480 num_of_par = 2; //e. 2 parameters output //r. âûâîäèòü 2 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 481
Kovalev_D 23:12e6183f04d4 482 addr_param[0] = &(Output.Str.WP_scope1); //e. set the addresses of output parameters //r. çàäàòü àäðåñà âûâîäèìûõ ïàðàìåòðîâ
Kovalev_D 23:12e6183f04d4 483 addr_param[1] = &(Output.Str.WP_scope2);
Kovalev_D 23:12e6183f04d4 484 size_param[0] = 2; //e. all parameters has 2 bytes length //r. âñå ïàðàìåòðû èìåþò äëèíó 2 áàéòà
Kovalev_D 23:12e6183f04d4 485 size_param[1] = 2;
Kovalev_D 23:12e6183f04d4 486 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 487 break;
Kovalev_D 23:12e6183f04d4 488
Kovalev_D 23:12e6183f04d4 489 case 4: //e. it is the Rate4 stack //r. ýòî íàáîð Rate4
Kovalev_D 23:12e6183f04d4 490 wrk_period = 20000; //e. correspond to output frequency 1.25 kHz //r. ñîîòâåñòâóåò ÷àñòîòå âûâîäà 1.25 kHz
Kovalev_D 23:12e6183f04d4 491 num_of_par = 4; //e. 4 parameters output //r. âûâîäèòü 4 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 492
Kovalev_D 23:12e6183f04d4 493 //e. set the addresses of output parameters //r. çàäàòü àäðåñà âûâîäèìûõ ïàðàìåòðîâ
Kovalev_D 23:12e6183f04d4 494 // --- raw data array of numbers ---
Kovalev_D 23:12e6183f04d4 495 // addr_param[0] = &Dif_Curr_Array;
Kovalev_D 23:12e6183f04d4 496 // --- filtered array of numbers ---
Kovalev_D 23:12e6183f04d4 497 // addr_param[1] = &Dif_Filt_Array;
Kovalev_D 23:12e6183f04d4 498 // ---------------------------------
Kovalev_D 23:12e6183f04d4 499 addr_param[2] = &(Output.Str.HF_reg); //e. HFO regulator //r. íàïðÿæåíèå ÃÂ×
Kovalev_D 23:12e6183f04d4 500 addr_param[3] = &(Output.Str.WP_reg); //e. CPLC heater regulator //r. íàïðÿæåíèå íàãðåâàòåëÿ
Kovalev_D 23:12e6183f04d4 501 size_param[0] = 16;
Kovalev_D 23:12e6183f04d4 502 size_param[1] = 32;
Kovalev_D 23:12e6183f04d4 503 size_param[2] = 2;
Kovalev_D 23:12e6183f04d4 504 size_param[3] = 2;
Kovalev_D 23:12e6183f04d4 505 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 506 break;
Kovalev_D 23:12e6183f04d4 507 case 7:
Kovalev_D 23:12e6183f04d4 508 wrk_period = 20000; //e. correspond to output frequency 1250 Hz //r. ñîîòâåñòâóåò ÷àñòîòå âûâîäà 1.25 kHz
Kovalev_D 23:12e6183f04d4 509 num_of_par = 5; //e. 4 parameters output //r. âûâîäèòü 5 ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 510
Kovalev_D 23:12e6183f04d4 511 //e. set the addresses of output parameters //r. çàäàòü àäðåñà âûâîäèìûõ ïàðàìåòðîâ
Kovalev_D 23:12e6183f04d4 512 // --- raw data array of PLC phase ---
Kovalev_D 23:12e6183f04d4 513 addr_param[0] = &(Output.Str.WP_Phase_Det_Array);
Kovalev_D 23:12e6183f04d4 514 // --- filtered array of reference sin---
Kovalev_D 23:12e6183f04d4 515 addr_param[1] = &(Output.Str.WP_sin_Array);
Kovalev_D 23:12e6183f04d4 516 // ---------------------------------
Kovalev_D 23:12e6183f04d4 517 addr_param[2] = &(Output.Str.WP_reg); //e. CPLC heater regulator //r. íàïðÿæåíèå íàãðåâàòåëÿ
Kovalev_D 23:12e6183f04d4 518 addr_param[3] = &(Output.Str.WP_pll); //e. CPLC phase //r. ôàçà
Kovalev_D 23:12e6183f04d4 519 addr_param[4] = &(Output.Str.HF_reg); //e. set the address of the _HF_reg parameter in the 5th group //r. çàäàòü àäðåñ ïàðàìåòðà _HF_reg â 5-åé ãðóïïå
Kovalev_D 23:12e6183f04d4 520 size_param[0] = 16;
Kovalev_D 23:12e6183f04d4 521 size_param[1] = 16;
Kovalev_D 23:12e6183f04d4 522 size_param[2] = 2;
Kovalev_D 23:12e6183f04d4 523 size_param[3] = 2;
Kovalev_D 23:12e6183f04d4 524 size_param[4] = 2;
Kovalev_D 23:12e6183f04d4 525 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 526 break;
Kovalev_D 23:12e6183f04d4 527 }
Kovalev_D 23:12e6183f04d4 528 SetIntLatch(wrk_period);
Kovalev_D 23:12e6183f04d4 529 } // M_Rate
Kovalev_D 23:12e6183f04d4 530
Kovalev_D 23:12e6183f04d4 531 void M_Reset(void)
Kovalev_D 23:12e6183f04d4 532 {
Kovalev_D 23:12e6183f04d4 533 while(1);
Kovalev_D 23:12e6183f04d4 534 } // will not achieve
Kovalev_D 23:12e6183f04d4 535
Kovalev_D 23:12e6183f04d4 536 void M_Param_R(void) //e. ------------ read the parameter of the GLD from the data memory ---------------------- //r.------------ ÷òåíèå ïàðàìåòðà GLD èç ïàìÿòè äàííûõ ----------------------
Kovalev_D 23:12e6183f04d4 537 {
Kovalev_D 23:12e6183f04d4 538 num_of_par = 1; //e. 1 parameter output //r. âûâîäèòü îäèí ïàðàìåòð
Kovalev_D 23:12e6183f04d4 539 addr_param[0] = (void *)(&Device_blk.Str.My_Addres + rcv_buf[3]); //e. address of the needed parameter in the block //r. àäðåñ òðåáóåìîãî ïàðàìåòðà â áëîêå
Kovalev_D 23:12e6183f04d4 540 size_param[0] = 2; //e. size of the buffer - 2 bytes //r. ðàçìåð áóôåðà - 2 áàéòà
Kovalev_D 23:12e6183f04d4 541
Kovalev_D 23:12e6183f04d4 542 trm_ena = 1; //e. allow operation of the transmitter //r. ðàçðåøèòü ðàáîòó ïåðåäàò÷èêà
Kovalev_D 23:12e6183f04d4 543 } // M_Param_R
Kovalev_D 23:12e6183f04d4 544
Kovalev_D 23:12e6183f04d4 545 void M_Param_W(void) //e.------------ write the parameter of the GLD from the data memory ----------------------- //r.------------ çàïèñü ïàðàìåòðà GLD â ïàìÿòü äàííûõ -----------------------
Kovalev_D 23:12e6183f04d4 546 {
Kovalev_D 23:12e6183f04d4 547 int * ptr;
Kovalev_D 23:12e6183f04d4 548
Kovalev_D 23:12e6183f04d4 549 ScopeMode = 0; //e. VB_DELAY_MEANDER allocate a mode of display for a control point of an scope //r. VB_DELAY_MEANDER íàçíà÷èòü ðåæèì îòîáðàæåíèÿ äëÿ êîíòðîëüíîé òî÷êè îñöèëëîãðàôà
Kovalev_D 23:12e6183f04d4 550
Kovalev_D 23:12e6183f04d4 551 ptr = (int *)&Device_blk.Str.My_Addres; // pointer to Parameters block
Kovalev_D 23:12e6183f04d4 552 ptr += rcv_buf[3]; // calculate offset
Kovalev_D 23:12e6183f04d4 553 *ptr = (rcv_buf[4] << 8) | (rcv_buf[5] & 0xFF); // write new parameter value
Kovalev_D 23:12e6183f04d4 554
Kovalev_D 23:12e6183f04d4 555 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 556 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 557 } // M_Param_W
Kovalev_D 23:12e6183f04d4 558
Kovalev_D 23:12e6183f04d4 559 void M_LdPar_F() //e.============ procedure for load the GLD parameters from the flash-memory =========== //r.============ ïðîöåäóðà çàãðóçêè ïàðàìåòðîâ ÃËÄ èç ôëýø-ïàìÿòè ===========
Kovalev_D 23:12e6183f04d4 560 {
Kovalev_D 23:12e6183f04d4 561
Kovalev_D 23:12e6183f04d4 562 LoadFlashParam(FromFLASH); //e. load the GLD parameters from the flash-memory //r. çàãðóçèòü ïàðàìåòðû ÃËÄ èç ôäýø-ïàìÿòè
Kovalev_D 23:12e6183f04d4 563 blt_in_test = ((uint32_t)FIRMWARE_VER << 8) | (Device_blk.Str.Device_SerialNumber & 0x00FF);
Kovalev_D 23:12e6183f04d4 564 // Init_software();
Kovalev_D 23:12e6183f04d4 565
Kovalev_D 23:12e6183f04d4 566 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 567 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 568 } // M_LdPar_F
Kovalev_D 23:12e6183f04d4 569
Kovalev_D 23:12e6183f04d4 570 void M_LdPar_D(void) //e.============ procedure for set parameters of the GLD by default ============ //r.============ ïðîöåäóðà óñòàíîâêè ïàðàìåòðîâ ÃËÄ ïî óìîë÷àíèþ ============
Kovalev_D 23:12e6183f04d4 571 {
Kovalev_D 23:12e6183f04d4 572 #if !defined COMMAND_DEBUG
Kovalev_D 23:12e6183f04d4 573 LoadFlashParam(ByDefault); //e. define parameters of the GLD by default //r. îïðåäåëèòü ïàðàìåòðû ÃËÄ ïî óìîë÷àíèþ (default)
Kovalev_D 23:12e6183f04d4 574 Init_software();
Kovalev_D 23:12e6183f04d4 575 #endif
Kovalev_D 23:12e6183f04d4 576 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 577 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 578 } // M_LdPar_D
Kovalev_D 23:12e6183f04d4 579
Kovalev_D 23:12e6183f04d4 580 void M_Start(void) //e.============ initialization of the GLD switch on ================================= //r.============ èíèöèàëèçàöèÿ çàïóñêà ÃËÄ =================================
Kovalev_D 23:12e6183f04d4 581 {
Kovalev_D 23:12e6183f04d4 582 start_Rq = 1; //e. set the flag of the GLD switch on request //r. óñòàíîâèòü ôëàã çàïðîñà ñòàðòà ÃËÄ
Kovalev_D 23:12e6183f04d4 583 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 584 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 585 } // M_Start
Kovalev_D 23:12e6183f04d4 586
Kovalev_D 23:12e6183f04d4 587 void M_Stop(void) //e.============ initialization of the GLD switch off ============================== //r.============ èíèöèàëèçàöèÿ âûêëþ÷åíèÿ ÃËÄ ==============================
Kovalev_D 23:12e6183f04d4 588 {
Kovalev_D 23:12e6183f04d4 589 stop_Rq = 1; //e. set the flag of the GLD switch off request //r. óñòàíîâèòü ôëàã çàïðîñà âûêëþ÷åíèÿ ÃËÄ
Kovalev_D 23:12e6183f04d4 590 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 591 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 592 } // M_Stop
Kovalev_D 23:12e6183f04d4 593
Kovalev_D 23:12e6183f04d4 594 void M_Pulse(void) //e.============ generetion of the light-up pulse ========================= //r.============ ãåíåðàöèÿ èìïóëüñà çàïóñêà ëàçåðà =========================
Kovalev_D 23:12e6183f04d4 595 {
Kovalev_D 23:12e6183f04d4 596 pulse_Rq = 1; //e. set the flag of the GLD switch on request //r. óñòàíîâèòü ôëàã çàïðîñà ñòàðòà ÃËÄ
Kovalev_D 23:12e6183f04d4 597 trm_cycl = 0; //e. periodic data transmission is not needed //r. ïåðèîäè÷åñêàÿ ïåðåäà÷à îòâåòà íå òðåáóåòñÿ
Kovalev_D 23:12e6183f04d4 598 Mk_Ask1();
Kovalev_D 23:12e6183f04d4 599 } // M_Pulse
Kovalev_D 23:12e6183f04d4 600
Kovalev_D 23:12e6183f04d4 601 void B_Rate(void) //e. === procedure of device operation in a mode of continuous output of raw data //r. === ïðîöåäóðà ðàáîòû ïðèáîðà â ðåæèìå íåïðåðûâíîé âûäà÷è "ñûðûõ" äàííûõ
Kovalev_D 23:12e6183f04d4 602 {
Kovalev_D 23:12e6183f04d4 603 } // B_Rate
Kovalev_D 23:12e6183f04d4 604
Kovalev_D 23:12e6183f04d4 605 void B_Delta(void) //e. === procedure not used //r. === ïðîöåäóðà íå èñïîëüçóåòñÿ
Kovalev_D 23:12e6183f04d4 606 {
Kovalev_D 23:12e6183f04d4 607 } // B_Delta
Kovalev_D 23:12e6183f04d4 608
Kovalev_D 23:12e6183f04d4 609 void D_Period_W(void) //e. === set the period of the angle increase output //r. === óñòàíîâêà ïåðèîäà âûäà÷è ïðèðàùåíèÿ óãëà
Kovalev_D 23:12e6183f04d4 610 {
Kovalev_D 23:12e6183f04d4 611 } // D_Period_W
Kovalev_D 23:12e6183f04d4 612
Kovalev_D 23:12e6183f04d4 613 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Kovalev_D 23:12e6183f04d4 614 void exec_CMD(void) //e. === the final decoding and command execution procedure //r. === ïðîöåäóðà îêîí÷àòåëüíîé äåøèôðàöèè è èñïîëíåíèÿ êîìàíäû
Kovalev_D 23:12e6183f04d4 615 {
Kovalev_D 23:12e6183f04d4 616 uint32_t wcode;
Kovalev_D 23:12e6183f04d4 617
Kovalev_D 23:12e6183f04d4 618 rx_buf_copy = 1; //e. initialization of the flag of copying of receiving buffer //r. ïðåäóñòàíîâ ôëàãà êîïèðîâàíèÿ ïðèåìíîãî áóôåðà
Kovalev_D 23:12e6183f04d4 619
Kovalev_D 23:12e6183f04d4 620 wcode = (rcv_buf[2] & 0xFF) << 8;
Kovalev_D 23:12e6183f04d4 621 CMD_Code = wcode | (rcv_buf[3] & 0xFF); //e. save it in the memory for echo-transmission //r. ñîõðàíèòü åãî â ïàìÿòè äëÿ îáðàòíîé ïåðåäà÷è
Kovalev_D 23:12e6183f04d4 622
Kovalev_D 23:12e6183f04d4 623 if (wcode == CMD_RATE) //e. is it Rate command? //r. ýòî êîìàíäà Rate?
Kovalev_D 23:12e6183f04d4 624 {
Kovalev_D 23:12e6183f04d4 625 B_Rate();
Kovalev_D 23:12e6183f04d4 626 return;
Kovalev_D 23:12e6183f04d4 627 }
Kovalev_D 23:12e6183f04d4 628 else if (wcode == CMD_DEV_MODE) //e. is it the Device_Mode command? //r. ýòî êîìàíäà óñòàíîâêè ðåæèìà ïðèáîðà?
Kovalev_D 23:12e6183f04d4 629 {
Kovalev_D 23:12e6183f04d4 630 CMD_Mode = 3;
Kovalev_D 23:12e6183f04d4 631 B_Dev_Mode();
Kovalev_D 23:12e6183f04d4 632 return;
Kovalev_D 23:12e6183f04d4 633 }
Kovalev_D 23:12e6183f04d4 634 else if (wcode == CMD_DELTA_BINS) //e. is it the B_DeltaBINS command (command of request for data transfer to the navigation system)? //r. ýòî êîìàíäà çàïðîñà ïåðåäà÷è äàííûõ â íàâèã.ñèñòåìó?
Kovalev_D 23:12e6183f04d4 635 {
Kovalev_D 23:12e6183f04d4 636 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. óñòàíàâëèâàåì â äîïîëíèòåëüíîì ðåãèñòðå óïðàâëåíèÿ ðåæèì ðàáîòû ñ âèáðîñ÷åò÷èêàìè è ôèëüòðîì ñêîëüçÿùåãî ñðåäíåãî
Kovalev_D 23:12e6183f04d4 637 SetSpeedPeriod();
Kovalev_D 23:12e6183f04d4 638 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 639 CMD_Mode = 4;
Kovalev_D 23:12e6183f04d4 640 B_Delta_BINS();
Kovalev_D 23:12e6183f04d4 641 return;
Kovalev_D 23:12e6183f04d4 642 }
Kovalev_D 23:12e6183f04d4 643 else if (wcode == CMD_DELTA_PS) //e. is it the B_DeltaPS command (command of request for data transfer to the uPC)? //r. ýòî êîìàíäà çàïðîñà ïåðåäà÷è äàííûõ â MkPC?
Kovalev_D 23:12e6183f04d4 644 {
Kovalev_D 23:12e6183f04d4 645 SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. è óñòàíîâèòü ñêîðîñòü ïåðåäà÷è îòâåòà è åãî ïåðèîäè÷íîñòü (_trm_cycl)
Kovalev_D 23:12e6183f04d4 646 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 647 if (Device_Mode < 4) //e. work with internal latch
Kovalev_D 23:12e6183f04d4 648 Device_Mode = DM_INT_LATCH_DELTA_PS;
Kovalev_D 23:12e6183f04d4 649 else
Kovalev_D 23:12e6183f04d4 650 Device_Mode = DM_EXT_LATCH_DELTA_PS_PULSE;
Kovalev_D 23:12e6183f04d4 651 CMD_Mode = 1;
Kovalev_D 23:12e6183f04d4 652 // B_Delta_PS();
Kovalev_D 23:12e6183f04d4 653 return;
Kovalev_D 23:12e6183f04d4 654 }
Kovalev_D 23:12e6183f04d4 655 else if (wcode == CMD_DELTA_SF) // is it the B_DeltaSF command?
Kovalev_D 23:12e6183f04d4 656 {
Kovalev_D 23:12e6183f04d4 657 SetSpeedPeriod(); //e. and set the answer transfer rate and its periodicity //r. è óñòàíîâèòü ñêîðîñòü ïåðåäà÷è îòâåòà è åãî ïåðèîäè÷íîñòü (_trm_cycl)
Kovalev_D 23:12e6183f04d4 658 CMD_Mode = 7;
Kovalev_D 23:12e6183f04d4 659 if ((rcv_buf[3] & 0x0001) != 0) //e.reset of accumulated number is disabled //r. ñáðîñ íàêîïëåííîãî ìåæäó çàùåëêàìè ÷èñëà çàïðåùåí
Kovalev_D 23:12e6183f04d4 660 Ext_Latch_ResetEnable = 0;
Kovalev_D 23:12e6183f04d4 661 else
Kovalev_D 23:12e6183f04d4 662 Ext_Latch_ResetEnable = 1;
Kovalev_D 23:12e6183f04d4 663 B_Delta_SF();
Kovalev_D 23:12e6183f04d4 664 return;
Kovalev_D 23:12e6183f04d4 665 }
Kovalev_D 23:12e6183f04d4 666 else if (wcode == CMD_BIT_MODE) //e. is this the BIT mode command? //r. ýòî êîìàíäà òåñòèðîâàíèÿ?
Kovalev_D 23:12e6183f04d4 667 {
Kovalev_D 23:12e6183f04d4 668 CMD_Mode = 6; //e. set the value of the Delta mode//r. óñòàíîâèòü çíà÷åíèå ðåæèìà Delta
Kovalev_D 23:12e6183f04d4 669 B_BIT_Mode();
Kovalev_D 23:12e6183f04d4 670 return;
Kovalev_D 23:12e6183f04d4 671 }
Kovalev_D 23:12e6183f04d4 672 else if (wcode == CMD_DELTA) //e. is this the B_Delta command? //r. ýòî êîìàíäà B_Delta?
Kovalev_D 23:12e6183f04d4 673 {
Kovalev_D 23:12e6183f04d4 674 CMD_Mode = 2; //e. set the value of the Delta mode//r. óñòàíîâèòü çíà÷åíèå ðåæèìà Delta
Kovalev_D 23:12e6183f04d4 675 B_Delta(); //e. output calculated value of angle increase //r. âûâîäèòü âû÷èñëåííîå çíà÷åíèå ïðèðàùåíèÿ óãëà
Kovalev_D 23:12e6183f04d4 676 return;
Kovalev_D 23:12e6183f04d4 677 }
Kovalev_D 23:12e6183f04d4 678 else if (CMD_Code == CMD_MAINT) //e. is this the Maintenance mode command? //r. ýòî êîìàíäà Maintenance mode?
Kovalev_D 23:12e6183f04d4 679 {
Kovalev_D 23:12e6183f04d4 680 if (!RgConB)
Kovalev_D 23:12e6183f04d4 681 {
Kovalev_D 23:12e6183f04d4 682 RgConB = RATE_VIBRO_1;
Kovalev_D 23:12e6183f04d4 683 SwitchRefMeandInt(RATE_VIBRO_1); //e. disable interrupt from referense meander
Kovalev_D 23:12e6183f04d4 684 }
Kovalev_D 23:12e6183f04d4 685 CMD_Mode = 5; //e. yes, switch on present mode //r. äà, âêëþ÷èòü äàííûé ðåæèì
Kovalev_D 23:12e6183f04d4 686 M_Status(); //e. output the status stack of registers //r. âûâåñòè ñòàòóñíûé íàáîð ðåãèñòðîâ
Kovalev_D 23:12e6183f04d4 687 if (Device_Mode != DM_INT_10KHZ_LATCH) //e. mode of internal latch 10 kHz //r. ðåæèì âíóòðåííåé çàùåëêè 10 êÃö
Kovalev_D 23:12e6183f04d4 688 {
Kovalev_D 23:12e6183f04d4 689 Device_Mode = DM_INT_10KHZ_LATCH;
Kovalev_D 23:12e6183f04d4 690 trm_ena = 0;
Kovalev_D 23:12e6183f04d4 691 }
Kovalev_D 23:12e6183f04d4 692 else
Kovalev_D 23:12e6183f04d4 693 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 694 return;
Kovalev_D 23:12e6183f04d4 695 }
Kovalev_D 23:12e6183f04d4 696 else if (wcode == SUBCMD_M_RESET) //e. is this subcommand for modification of the device control register? //r. ýòî ïîäêîìàíäà ìîäèôèêàöèè ðåãèñòðà óïðàâëåíèÿ ó-âà?
Kovalev_D 23:12e6183f04d4 697 {
Kovalev_D 23:12e6183f04d4 698 // Mk_AskDev();
Kovalev_D 23:12e6183f04d4 699 M_Reset();
Kovalev_D 23:12e6183f04d4 700 return;
Kovalev_D 23:12e6183f04d4 701 }
Kovalev_D 23:12e6183f04d4 702 else // subcommand analyse
Kovalev_D 23:12e6183f04d4 703 {
Kovalev_D 23:12e6183f04d4 704 if (CMD_Mode == 2) //e. is this the 2(Delta) mode? //r. ýòî ðåæèì 2? (Delta)
Kovalev_D 23:12e6183f04d4 705 {
Kovalev_D 23:12e6183f04d4 706 if (CMD_Code == CMD_D_PERIOD_W) //e. the Delta mode, check the subcommand ... //r. ðåæèì DElta, ïðîâåðèòü ïîäêîìàíäó çàãðóçêè ïåðèîäà
Kovalev_D 23:12e6183f04d4 707 {
Kovalev_D 23:12e6183f04d4 708 D_Period_W(); //e. otherwise - set the data transfer period //r. èíà÷å óñòàíîâèòèü ïåðèîä âûäà÷è äàííûõ
Kovalev_D 23:12e6183f04d4 709 return;
Kovalev_D 23:12e6183f04d4 710 }
Kovalev_D 23:12e6183f04d4 711 else
Kovalev_D 23:12e6183f04d4 712 {
Kovalev_D 23:12e6183f04d4 713 line_sts = line_sts | CODE_ERR; // invalid command code
Kovalev_D 23:12e6183f04d4 714 return;
Kovalev_D 23:12e6183f04d4 715 }
Kovalev_D 23:12e6183f04d4 716 }
Kovalev_D 23:12e6183f04d4 717 else if (CMD_Mode == 5) //e. check the 5 mode (Maintenance) //r. ïðîâåðêà ðåæèìà 5 (Maintenance)
Kovalev_D 23:12e6183f04d4 718 {
Kovalev_D 23:12e6183f04d4 719 if (CMD_Code == SUBCMD_M_CLEAR) //e. is this subcommand of cleaning of the error register? //r. ýòî ïîäêîìàíäà î÷èñòêè ðåãèñòðà îøèáîê ëèíèè?
Kovalev_D 23:12e6183f04d4 720 {
Kovalev_D 23:12e6183f04d4 721 M_Clear(); //e. yes, cleaning the error register //r. äà, î÷èñòêà ðåãèñòðà îøèáîê
Kovalev_D 23:12e6183f04d4 722 M_Status(); //e. preparing for trabsfer of the device status //r. ïîäãîòîâêà ïåðåäà÷è ñòàòóñà óñòðîéñòâà
Kovalev_D 23:12e6183f04d4 723 UART_SwitchSpeed(trm_rate);
Kovalev_D 23:12e6183f04d4 724 return;
Kovalev_D 23:12e6183f04d4 725 }
Kovalev_D 23:12e6183f04d4 726 else if (CMD_Code == SUBCMD_M_MIRR) //e. is this subcommand of return of previous command? //r. ýòî ïîäêîìàíäà âîçâðàòà ïðåäûäóùåé êîìàíäû?
Kovalev_D 23:12e6183f04d4 727 {
Kovalev_D 23:12e6183f04d4 728 rx_buf_copy = 0; //e. yes, forbid copying of command on saving previous //r. äà, çàïðåòèòü êîïèðîâàíèå êîìàíäû äëÿ ñîõðàíåíèÿ ïðåäûäóùåé
Kovalev_D 23:12e6183f04d4 729 M_Mirror(); //e. prepare transfer of the receiving buffer copy //r. ïîäãîòîâèòü ïåðåäà÷ó êîïèè ïðèåìíîãî áóôåðà
Kovalev_D 23:12e6183f04d4 730 return;
Kovalev_D 23:12e6183f04d4 731 }
Kovalev_D 23:12e6183f04d4 732 /* else if (wcode == SUBCMD_M_TMP_W) //e. is this subcommand for writing instructions to the AD7714? //r. ýòî ïîäêîìàíäà çàïèñè èíñòðóêöèé â AD7714?
Kovalev_D 23:12e6183f04d4 733 {
Kovalev_D 23:12e6183f04d4 734 // M_Tmp_W(); //e. yes, procedure call of write of the command //r. äà, âûçîâ ïðîöåäóðû çàïèñè êîìàíäû
Kovalev_D 23:12e6183f04d4 735 return;
Kovalev_D 23:12e6183f04d4 736 } */
Kovalev_D 23:12e6183f04d4 737 else if (wcode == SUBCMD_M_TMP_R) //e. is this subcommand for data read from the AD7714? //r. ýòî ïîäêîìàíäà ÷òåíèÿ äàííûõ èç AD7714?
Kovalev_D 23:12e6183f04d4 738 {
Kovalev_D 23:12e6183f04d4 739 M_Tmp_R(); //r. yes, call the procedure for data read //e. äà, âûçîâ ïðîöåäóðû ÷òåíèÿ äàííûõ
Kovalev_D 23:12e6183f04d4 740 return;
Kovalev_D 23:12e6183f04d4 741 }
Kovalev_D 23:12e6183f04d4 742 /* else if (wcode == SUBCMD_M_E5R_W) //e. is this subcommand for write to the mode register? //r. ýòî ïîäêîìàíäà çàïèñè â ðåãèñòð ðåæèìà?
Kovalev_D 23:12e6183f04d4 743 {
Kovalev_D 23:12e6183f04d4 744 M_e5r_W(); //e. yes, write data to the mode register of the Elio5 card //r. äà, çàïèñàòü äàííûå â ðåãèñòð ðåæèìà ïëàòû Elio5
Kovalev_D 23:12e6183f04d4 745 return;
Kovalev_D 23:12e6183f04d4 746 }
Kovalev_D 23:12e6183f04d4 747 else if (wcode == SUBCMD_M_E5RA_W) //e. is this subcommand for write to the mode register? //r. ýòî ïîäêîìàíäà çàïèñè â ðåãèñòð ðåæèìà?
Kovalev_D 23:12e6183f04d4 748 {
Kovalev_D 23:12e6183f04d4 749 M_e5rA_W(); //e. yes, write data to the mode register of the Elio5 card //r. äà, çàïèñàòü äàííûå â ðåãèñòð ðåæèìà ïëàòû Elio5
Kovalev_D 23:12e6183f04d4 750 return;
Kovalev_D 23:12e6183f04d4 751 } */
Kovalev_D 23:12e6183f04d4 752 else if (wcode == SUBCMD_M_ADC_R) //e. is t the subcommand for data read from ADCs ADS1250 and ADS8321 ? //r. ýòî ïîäêîìàíäà ÷òåíèÿ äàííûõ èç ÀÖÏ ADS1250 è ADS8321?
Kovalev_D 23:12e6183f04d4 753 {
Kovalev_D 23:12e6183f04d4 754 M_ADC_R(); //e. read of ADC channels //r. ÷òåíèå êàíàëîâ ÀÖÏ
Kovalev_D 23:12e6183f04d4 755 return;
Kovalev_D 23:12e6183f04d4 756 }
Kovalev_D 23:12e6183f04d4 757 else if (wcode == SUBCMD_M_CNT_R) //e. is this subcommand of data read from pulse counters? //r. ýòî ïîäêîìàíäà ÷òåíèÿ äàííûõ èç ñ÷åò÷èêîâ èìïóëüñîâ?
Kovalev_D 23:12e6183f04d4 758 {
Kovalev_D 23:12e6183f04d4 759 M_Cnt_R(); //e. read of counters //r. ÷òåíèå ñ÷åò÷èêîâ
Kovalev_D 23:12e6183f04d4 760 return;
Kovalev_D 23:12e6183f04d4 761 }
Kovalev_D 23:12e6183f04d4 762 else if (wcode == SUBCMD_M_FLG_R) //e. is it the command of data read about input flags? //r. ýòî ïîäêîìàíäà ÷òåíèÿ äàííûõ î âõîäíûõ ôëàãàõ?
Kovalev_D 23:12e6183f04d4 763 {
Kovalev_D 23:12e6183f04d4 764 M_Flg_R(); //e. read the input flags //r. ÷èòàòü âõîäíûå ôëàãè
Kovalev_D 23:12e6183f04d4 765 return;
Kovalev_D 23:12e6183f04d4 766 }
Kovalev_D 23:12e6183f04d4 767 else if (wcode == SUBCMD_M_VIB_W) //e. is this subcommand for load the dither drive period? //r. ýòî ïîäêîìàíäà çàãðóçêè ïåðèîäà âèáðîïðèâîäà?
Kovalev_D 23:12e6183f04d4 768 {
Kovalev_D 23:12e6183f04d4 769 M_Vib_W(); //e. set the new value of the period //r. óñòàíîâèòü íîâîå çíà÷åíèå ïåðèîäà
Kovalev_D 23:12e6183f04d4 770 return;
Kovalev_D 23:12e6183f04d4 771 }
Kovalev_D 23:12e6183f04d4 772 else if (wcode == SUBCMD_M_GPH_W) //e. is this subcommand for set the gain factor of photodetector channels? //r. ýòî ïîäêîìàíäà óñòàíîâêè óñèëåíèÿ êàíàëîâ ôîòîïðèåìíèêà ?
Kovalev_D 23:12e6183f04d4 773 {
Kovalev_D 23:12e6183f04d4 774 M_Gph_W(); //e. set the new values of gain factor //r. óñòàíîâèòü íîâûå çíà÷åíèÿ óñèëåíèÿ
Kovalev_D 23:12e6183f04d4 775 return;
Kovalev_D 23:12e6183f04d4 776 }
Kovalev_D 23:12e6183f04d4 777 else if (wcode == SUBCMD_M_STIMUL) //e. is this subcommand for set the values of the DACs and flags? //r. ýòî ïîäêîìàíäà óñòàíîâêè çíà÷åíèÿ ÖÀÏîâ è ôäàãîâ ?
Kovalev_D 23:12e6183f04d4 778 {
Kovalev_D 23:12e6183f04d4 779 M_Stimul(); //e. set the new values //r. óñòàíîâèòü íîâûå çíà÷åíèÿ
Kovalev_D 23:12e6183f04d4 780 return;
Kovalev_D 23:12e6183f04d4 781 }
Kovalev_D 23:12e6183f04d4 782 else if (wcode == SUBCMD_M_RATE) //e. is this subcommand for set the M_Rate output stack //r. ýòî ïîäêîìàíäà óñòàíîâêè âûäà÷è íàáîðà M_Rate ?
Kovalev_D 23:12e6183f04d4 783 {
Kovalev_D 23:12e6183f04d4 784 M_Rate(); //e. switch on the M_Rate data transfer //r. âêëþ÷èòü ïåðåäà÷ó äàííûõ M_Rate
Kovalev_D 23:12e6183f04d4 785 return;
Kovalev_D 23:12e6183f04d4 786 }
Kovalev_D 23:12e6183f04d4 787 else if (wcode == SUBCMD_M_PARAM_W) //e. is this subcommand for write the new value of the GLD parameter ... //r. ýòî ïîäêîìàíäà çàïèñè íîâîãî çíà÷åíèÿ ïàðàìåòðà GLD
Kovalev_D 23:12e6183f04d4 788 {
Kovalev_D 23:12e6183f04d4 789 M_Param_W(); //e. write the new value of the parameter //r. çàïèñàòü íîâîå çíà÷åíèå ïàðàìåòðà
Kovalev_D 23:12e6183f04d4 790 return;
Kovalev_D 23:12e6183f04d4 791 }
Kovalev_D 23:12e6183f04d4 792 else if (wcode == SUBCMD_M_PARAM_R) //e. is this subcommand for read the value of the GLD parameter? //r. ýòî ïîäêîìàíäà ÷òåíèÿ çíà÷åíèÿ ïàðàìåòðà GLD?
Kovalev_D 23:12e6183f04d4 793 {
Kovalev_D 23:12e6183f04d4 794 M_Param_R(); //e. read the value from the data memory //r. ñ÷èòàòü çíà÷åíèå ïàðàìåòðà èç ïàìÿòè äàíûõ
Kovalev_D 23:12e6183f04d4 795 return;
Kovalev_D 23:12e6183f04d4 796 }
Kovalev_D 23:12e6183f04d4 797 else if (CMD_Code == SUBCMD_M_LDPAR_F) //e. is this subcommand for load GLD parameters ... //r. ýòî ïîäêîìàíäà çàãðóçêè ïàðàìåòðîâ GLD
Kovalev_D 23:12e6183f04d4 798 {
Kovalev_D 23:12e6183f04d4 799 M_LdPar_F(); //e. start the loading of parameters //r. çàïóñòèòü çàãðóçêó ïàðàìåòðîâ
Kovalev_D 23:12e6183f04d4 800 return;
Kovalev_D 23:12e6183f04d4 801 }
Kovalev_D 23:12e6183f04d4 802 else if (CMD_Code == SUBCMD_M_LDPAR_D) //e. is this subcommand for direct setting of the GLD parameters ... //r. ýòî ïîäêîìàíäà ïðÿìîãî íàçíà÷åíèÿ ïàðàìåòðîâ GLD
Kovalev_D 23:12e6183f04d4 803 {
Kovalev_D 23:12e6183f04d4 804 M_LdPar_D(); //e. read the value of the parameter from the data memory //r. ñ÷èòàòü çíà÷åíèå ïàðàìåòðà èç ïàìÿòè äàíûõ
Kovalev_D 23:12e6183f04d4 805 return;
Kovalev_D 23:12e6183f04d4 806 }
Kovalev_D 23:12e6183f04d4 807 else if (CMD_Code == SUBCMD_M_START) //e. is this subcommand for GLD starting? //r. ýòî ïîäêîìàíäà çàïóñêà GLD?
Kovalev_D 23:12e6183f04d4 808 {
Kovalev_D 23:12e6183f04d4 809 M_Start(); //e. call the procedure of start //r. çàïóñòèòü ïðîöåäóðó ñòàðòà
Kovalev_D 23:12e6183f04d4 810 return;
Kovalev_D 23:12e6183f04d4 811 }
Kovalev_D 23:12e6183f04d4 812 else if (CMD_Code == SUBCMD_M_PULSE) //e. is this subcommand for GLD starting? //r. ýòî ïîäêîìàíäà çàïóñêà GLD?
Kovalev_D 23:12e6183f04d4 813 {
Kovalev_D 23:12e6183f04d4 814 M_Pulse(); //e. call light-up function //r. âûäàòü èìïóëüñ ïîäæèãà
Kovalev_D 23:12e6183f04d4 815 return;
Kovalev_D 23:12e6183f04d4 816 }
Kovalev_D 23:12e6183f04d4 817 else if (CMD_Code == SUBCMD_M_STOP) //e. is this subcommand for GLD switch off? //r. ýòî ïîäêîìàíäà âûêëþ÷åíèÿ GLD?
Kovalev_D 23:12e6183f04d4 818 {
Kovalev_D 23:12e6183f04d4 819 M_Stop(); //e. otherwise- switch off all regulators and stop device //r. âûêëþ÷èòü âñå êîíòóðû è îñòàíîâèòü ïðèáîð
Kovalev_D 23:12e6183f04d4 820 return;
Kovalev_D 23:12e6183f04d4 821 }
Kovalev_D 23:12e6183f04d4 822 else if (wcode == SUBCMD_M_CTL_R) //e. is this subcommand for read the device control register? //r. ýòî ïîäêîìàíäà ÷òåíèÿ ðåãèñòðà óïðàâëåíèÿ ó-âà?
Kovalev_D 23:12e6183f04d4 823 {
Kovalev_D 23:12e6183f04d4 824 M_Ctl_R();
Kovalev_D 23:12e6183f04d4 825 return;
Kovalev_D 23:12e6183f04d4 826 }
Kovalev_D 23:12e6183f04d4 827 else if (wcode == SUBCMD_M_CTL_M) //e. is this subcommand for modification of the device control register? //r. ýòî ïîäêîìàíäà ìîäèôèêàöèè ðåãèñòðà óïðàâëåíèÿ ó-âà?
Kovalev_D 23:12e6183f04d4 828 {
Kovalev_D 23:12e6183f04d4 829 M_Ctl_M();
Kovalev_D 23:12e6183f04d4 830 return;
Kovalev_D 23:12e6183f04d4 831 }
Kovalev_D 23:12e6183f04d4 832 /* else if (wcode == SUBCMD_M_RESET) //e. is this subcommand for modification of the device control register? //r. ýòî ïîäêîìàíäà ìîäèôèêàöèè ðåãèñòðà óïðàâëåíèÿ ó-âà?
Kovalev_D 23:12e6183f04d4 833 {
Kovalev_D 23:12e6183f04d4 834 M_Reset();
Kovalev_D 23:12e6183f04d4 835 return;
Kovalev_D 23:12e6183f04d4 836 }*/
Kovalev_D 23:12e6183f04d4 837 else
Kovalev_D 23:12e6183f04d4 838 {
Kovalev_D 23:12e6183f04d4 839 line_sts = line_sts | MODE_ERR; // mode error
Kovalev_D 23:12e6183f04d4 840 return;
Kovalev_D 23:12e6183f04d4 841 }
Kovalev_D 23:12e6183f04d4 842 }
Kovalev_D 23:12e6183f04d4 843 }
Kovalev_D 23:12e6183f04d4 844 } // exec_CMD
Kovalev_D 23:12e6183f04d4 845
Kovalev_D 23:12e6183f04d4 846 void decode_CMD(void)
Kovalev_D 23:12e6183f04d4 847 {
Kovalev_D 23:12e6183f04d4 848 int size;
Kovalev_D 23:12e6183f04d4 849
Kovalev_D 23:12e6183f04d4 850 if (!rcv_Rdy) //e. is data in receive buffer? //r. â ïðèåìíîì áóôåðå åñòü èíôîðìàöèÿ?
Kovalev_D 23:12e6183f04d4 851 {
Kovalev_D 23:12e6183f04d4 852 return; //e. if no, stop processing //r. åñëè íåò, çàêîí÷èòü îáðàáîòêó
Kovalev_D 23:12e6183f04d4 853 }
Kovalev_D 23:12e6183f04d4 854
Kovalev_D 23:12e6183f04d4 855 if (!line_sts) //e. Whether there were errors of receiving of start-bit? //r. áûëè ëè îøèáêè ïðèåìà ñòàðò-áèòà ?
Kovalev_D 23:12e6183f04d4 856 {
Kovalev_D 23:12e6183f04d4 857 //e. there were not errors of receiving of bytes, check the device address //r. îøèáîê ïðèåìà áàéòîâ íå áûëî, ïðîâåðèòü àäðåñ îáðàùåíèÿ
Kovalev_D 23:12e6183f04d4 858 //Is_Brodcast_Req = 0; //e. reset the flag of broadcasting request //r. ñáðîñèòü ôëàã øèðîêîâåùàòåëüíîãî çàïðîñà
Kovalev_D 23:12e6183f04d4 859 if (rcv_buf[1] != Device_blk.Str.My_Addres)
Kovalev_D 23:12e6183f04d4 860 {
Kovalev_D 23:12e6183f04d4 861 if (rcv_buf[1] != BROADCAST_ADDRESS)
Kovalev_D 23:12e6183f04d4 862 {
Kovalev_D 23:12e6183f04d4 863 goto end;
Kovalev_D 23:12e6183f04d4 864 }
Kovalev_D 23:12e6183f04d4 865 }
Kovalev_D 23:12e6183f04d4 866
Kovalev_D 23:12e6183f04d4 867 if (rcv_buf[0] == COMMAND_PREFIX)
Kovalev_D 23:12e6183f04d4 868 { //e. there is new command in the receiver buffer, stop the transfer //r. â áóôåðå ïðèåìíèêà åñòü íîâàÿ êîìàíäà, ïðåêðàòèòü ïåðåäà÷ó
Kovalev_D 23:12e6183f04d4 869 trm_ena = 0; //e. reset the flag of transmission allowing //r. ñáðîñèòü ôëàã ðàçðåøåíèÿ ïåðåäà÷è
Kovalev_D 23:12e6183f04d4 870
Kovalev_D 23:12e6183f04d4 871 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 23:12e6183f04d4 872
Kovalev_D 23:12e6183f04d4 873 exec_CMD(); // øåé êîìàíäû
Kovalev_D 23:12e6183f04d4 874
Kovalev_D 23:12e6183f04d4 875 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 23:12e6183f04d4 876
Kovalev_D 23:12e6183f04d4 877
Kovalev_D 23:12e6183f04d4 878 //e. check up presence of errors in operation of this procedure //r. ïðîâåðèòü, íàëè÷èå îøèáîê â ðàáîòå äàííîé ïîöåäóðû
Kovalev_D 23:12e6183f04d4 879 //e. did is the "unknown code of a command" or "parameters were set incorrectly" error? //r. áûëà îøèáêà "íåèçâåñòíûé êîä êîìàíäû" èëè "íåâåðíî çàäàííûå ïàðàìåòðû"?
Kovalev_D 23:12e6183f04d4 880 if ( ((line_sts & CODE_ERR) == CODE_ERR) || ((line_sts & PARAM_ERR) == PARAM_ERR) )
Kovalev_D 23:12e6183f04d4 881 {
Kovalev_D 23:12e6183f04d4 882 line_err = line_sts; //e. set error bits in the error register of the line //r. óñòàíîâèòü áèòû îøèáîê â ðåãèñòðå îøèáîê ëèíèè
Kovalev_D 23:12e6183f04d4 883 }
Kovalev_D 23:12e6183f04d4 884 }
Kovalev_D 23:12e6183f04d4 885 else
Kovalev_D 23:12e6183f04d4 886 {
Kovalev_D 23:12e6183f04d4 887 line_err = line_sts | NO_CMD_ERR; // äîáàâëåíèå îøèáêè â ðåãèñòð îøèáîê
Kovalev_D 23:12e6183f04d4 888 }
Kovalev_D 23:12e6183f04d4 889
Kovalev_D 23:12e6183f04d4 890 }
Kovalev_D 23:12e6183f04d4 891 else
Kovalev_D 23:12e6183f04d4 892 {
Kovalev_D 23:12e6183f04d4 893 line_err = line_sts;
Kovalev_D 23:12e6183f04d4 894 }
Kovalev_D 23:12e6183f04d4 895 end:
Kovalev_D 23:12e6183f04d4 896 if (rx_buf_copy) //e. is copying of present received packet needed? //r. òðåáóåòñÿ êîïèðîâàíèå äàííîãî ïðèíÿòîãî ïàêåòà?
Kovalev_D 23:12e6183f04d4 897 {
Kovalev_D 23:12e6183f04d4 898 size = rcv_num_byt;
Kovalev_D 23:12e6183f04d4 899 rcv_byt_copy = rcv_num_byt; //e. save the size of copy //r. çàïîìíèòü ðàçìåð êîïèè
Kovalev_D 23:12e6183f04d4 900 if (rcv_num_byt > sizeof(rcv_buf)) //e. compare the size of receiving buffer with amount of received bytes //r. êîïèðîâàíèå òðåáóåòñÿ, ñðàâíèòü ðàçìåð ïðèåìíîãî áóôåðà ñ ÷èñëîì ïðèíÿòûõ áàéò
Kovalev_D 23:12e6183f04d4 901 {
Kovalev_D 23:12e6183f04d4 902 size = sizeof(rcv_buf);
Kovalev_D 23:12e6183f04d4 903 }
Kovalev_D 23:12e6183f04d4 904 memcpy(rcv_copy, rcv_buf, size); //e. copy of received amount of bytes, but no more than buffer size //r. êîïèðîâàòü ïðèíÿòîå ÷èñëî áàéò, íî íå áîëåå ðàçìåðà áóôåðà
Kovalev_D 23:12e6183f04d4 905 }
Kovalev_D 23:12e6183f04d4 906 rx_buf_copy = 0; //e. reset the flag of necessity of copying of receiving buffer //r. ñáðîñèòü ôëàã íåîáõîäèìîñòè êîïèðîâàíèÿ ïðèåìíîãî áóôåðà
Kovalev_D 23:12e6183f04d4 907
Kovalev_D 23:12e6183f04d4 908 do
Kovalev_D 23:12e6183f04d4 909 rcv_buf[--rcv_num_byt] = 0;
Kovalev_D 23:12e6183f04d4 910 while(rcv_num_byt);
Kovalev_D 23:12e6183f04d4 911 rcv_num_byt_old = rcv_num_byt;
Kovalev_D 23:12e6183f04d4 912 line_sts = 0; //e. reset the line status register //r. ñáðîñèòü ðåãèñòð ñòàòóñà ëèíèè
Kovalev_D 23:12e6183f04d4 913 rcv_Rdy = 0; //e. allow further data reception //r. ðàçðåøèòü äàëüíåéøèé ïðèåì äàííûõ
Kovalev_D 23:12e6183f04d4 914 } // decode_CMD
Kovalev_D 23:12e6183f04d4 915