Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG2 by
CntrlGLD.c
00001 #include "Global.h" 00002 00003 #define COMMAND_DEBUG 00004 00005 uint32_t SRgR; //r. системный регистр режима платы ADSP 00006 00007 //uint32_t RgConA; //r. основной регистр управления устройства 00008 //uint32_t RgConB; //r. дополнительный регистр управления 00009 //uint32_t Copy_e5_RgR; //r. копия регистра режима платы E5 00010 //uint32_t Copy_e5_RgRA; //r. копия дополнительного регистра режима E5 00011 00012 uint32_t Valid_Data; //r. байт-признак достоверных данных, накапливающий ошибки от запроса до запроса 00013 00014 //TDEVICE_BLK Device_blk; //e. union for device constants 00015 uint32_t ser_num; //e. device serial number 00016 00017 int Device_Mode = DM_INT_10KHZ_LATCH; //r. режим работы прибора (внутр.защелка, знаковый меандр или внешняя защелка) 00018 00019 void Sts_Pulse(void); 00020 void Sts_Pause(void); 00021 void Sts_Polling(void); 00022 00023 //r. таблица состояний процедуры запуска прибора 00024 void (* Tab_Gld_Start[3])(void) = {Sts_Pulse, Sts_Pause, Sts_Polling}; 00025 //r. таблица состояний процедуры поджига лазера 00026 void (* Tab_Gld_Pulse[1])(void) = {Sts_Pulse}; 00027 00028 //e. stack of states of the procedure of starting //r. стек параметров состояний процедуры запуска 00029 uint32_t Stk_Gld_Start[3] = {LIGHT_UP_PULSE_WDTH, LIGHT_UP_PAUSE, LIGHT_UP_POLLING}; 00030 00031 uint32_t gyro_Sts = 0; //r. регистр состояния прибора 00032 uint32_t start_Rq = 1; //r. запрос на запуск прибора 00033 uint32_t start_Go = 0; //r. процедура запуска активна 00034 uint32_t stop_Rq = 0; //r. запрос на останов прибора 00035 uint32_t pulse_Rq = 0; //r. запрос на поджиг лазера 00036 uint32_t pulse_Go = 0; //r. процесс поджига активен 00037 00038 uint32_t state_index; //r. индекс состояния процедуры (старта) 00039 uint32_t sts_work; //r. 1 - текущее состояние - в рабочей фазе, 0 - инициализации 00040 uint32_t sts_time; //r. счетчик времени текущего состояния 00041 uint32_t attempt_Str; //r. счетчик попыток запуска прибора 00042 00043 00044 uint32_t BIT_number; 00045 uint32_t Is_BIT = 0; 00046 00047 void GLD_Stop(void) //e.---------- procedure of GLD stopping -------------------------------------- //r.---------- процедура останова ГЛД -------------------------------------- 00048 { 00049 if (!stop_Rq) { //r. проверить запрос на выключение прибора 00050 return; //r. если нет, возврат 00051 } 00052 00053 //r. сбросить флаги 00054 start_Rq = 0; //r. запроса включения, 00055 start_Go = 0; //r. активности процесса запуска прибора, 00056 stop_Rq = 0; //r. запроса останова 00057 // open_all_loops(); //r. выключить все контура регулирования 00058 00059 gyro_Sts = 0; //r. сброс регистра состояния аппаратуры ГЛД 00060 00061 //r. установка значений покоя выходных параметров регуляторов 00062 #if !defined COMMAND_DEBUG 00063 disable_DACs(); 00064 #endif 00065 } // GLD_Stop 00066 /* 00067 void GLD_Status(void) //r.---------- допусковый контроль параметров ГЛД -------------------------- 00068 { 00069 static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH DM_EXT_LATCH_DELTA_SF_PULSE ; 00070 00071 if ( loop_is_closed(GLD_ON) == 0 ) { 00072 open_all_loops(); 00073 GLD_Stop(); 00074 } 00075 if (Device_Mode_Old != Device_Mode) { //deviсe mode has been changed 00076 if (SwitchMode()) { //e. mode is changed successful 00077 Device_Mode_Old = Device_Mode; //e. save current mode name 00078 if (Device_Mode_Old == DM_INT_10KHZ_LATCH) 00079 trm_ena = 1; //e. enable answer 00080 } 00081 } 00082 } // GLD_Status 00083 */ 00084 void Sts_Pause(void) //r.------- процедура состояния паузы -------------------------------------- 00085 { 00086 if (sts_work) { //r. состояние в активной фазе? 00087 sts_time--; //r. декремент счетчика времени состояния 00088 if (sts_time > 0) { 00089 return; //r. продолжать работу, пока счетчик положителен 00090 } 00091 //r. время состояния кончилось 00092 sts_work = 0; //r. сбросить флаг активности 00093 state_index++; //r. передвинуть указатель на следующее состояние 00094 } else { 00095 sts_time = Stk_Gld_Start[state_index]; //r. время данного состояния 00096 sts_work = 1; //r. установить флаг активной фазы 00097 } 00098 } // Sts_Pause 00099 00100 void Sts_Pulse() //r. ------- процедура состояния импульса поджига -------------------------- 00101 { 00102 if (sts_work) { //r. состояние в активной фазе? 00103 sts_time--; //r. декремент счетчика времени состояния 00104 if (sts_time > 0) { 00105 return; //r. продолжать работу, пока счетчик положителен 00106 } 00107 //r. время состояния кончилось 00108 sts_work = 0; //r. сбросить флаг активности 00109 state_index++; //r. передвинуть указатель на следующее состояние 00110 00111 Set_LightUp; //r. снять сигнал поджига лазера 00112 00113 } else { 00114 sts_time = Stk_Gld_Start[state_index]; //r. время данного состояния 00115 sts_work = 1; //r. установить флаг активной фазы 00116 00117 Reset_LightUp; //r. активировать сигнал поджига лазера 00118 00119 } 00120 } // Sts_Pulse 00121 00122 void Sts_Polling(void) //r.========== процедура состояния измерения и принятия решения о запуске 00123 { 00124 static int32_t Sum_F_ras = 0; //r. интегральная сумма расщепления для процедуры старта 00125 00126 if (sts_work) { //r. состояние в активной фазе? 00127 if (Dif_Curr_Vib >0) 00128 Sum_F_ras = L_add(Sum_F_ras, Dif_Curr_Vib); 00129 else 00130 Sum_F_ras = L_sub(Sum_F_ras, Dif_Curr_Vib); 00131 00132 //r. нет, пропустить накопление суммы расщепления 00133 sts_time--; //r. декремент счетчика времени состояния 00134 if (sts_time > 0) { 00135 return; //r. продолжать работу, пока счетчик положителен 00136 } 00137 //r. время состояния кончилось 00138 sts_work = 0; //r. сбросить флаг активности 00139 state_index++; //r. передвинуть указатель на следующее состояние 00140 //r. проверить наличие генерации 00141 if ( Sum_F_ras >= F_RAS_MIN) { //e. //r. F_RAS_MIN = 10000 ??? что это за единицы??? 00142 gyro_Sts |= LASER_ON; //r. иначе старт состоялся, отметить в регистре состояния 00143 return; //r. прибора и завершать процесс 00144 } 00145 //r. если она меньше, генерации нет 00146 attempt_Str--; //r. декремент счетчика попыток запуска лазера 00147 if (attempt_Str <= 0) { 00148 return; //r. если попытки закончены, завершить процесс 00149 } 00150 //r. иначе установить указатель состояний на 00151 state_index = 0; //r. начало процесса запуска для повторной попытки 00152 } else { 00153 sts_time = Stk_Gld_Start[state_index]; //r. время данного состояния 00154 sts_work = 1; //r. установить флаг активной фазы 00155 Sum_F_ras = 0; //r. предсброс интегральной суммы расщепления 00156 } 00157 00158 } // Sts_Polling 00159 00160 00161 //r.---------- процесс запуска прибора ------------------------------------- 00162 void GLD_Start(void) 00163 { 00164 if (!start_Rq) { //r. проверить состояние запроса на запуск прибора 00165 return; //r. запроса нет, возврат 00166 } 00167 00168 if (!start_Go) { //r. процесс запуска еще не был активен? 00169 //r. это начало запуска 00170 attempt_Str = N_START_MAX; //r. установить максимальное число попыток запуска 00171 //r. разомкнуть контура регуляторов 00172 //open_loop(VB_FREQ_ON | VB_TAU_ON | WP_REG_ON | HF_REG_ON); // 0xff95 00173 //close_all_loops(); 00174 00175 sts_work = 0; //r. сбросить флаг активной фазы состояния 00176 state_index= 0; //r. установить указатель состояний в начальное положение 00177 start_Go = 1; //r. процесс старта начался 00178 } 00179 00180 ( *Tab_Gld_Start[state_index] )(); //r. вызов процедуры состояния по номеру в массиве 00181 00182 if (sts_work) { //r. текущее состояние окончено? 00183 return; //r. продолжать ожидание 00184 } 00185 //r. состояние закончилось проверить указатель состояний 00186 if ( state_index >= 3 ) { 00187 //r. окончание процесса 00188 //r. сбросить флаги 00189 start_Rq = 0; //r. запроса 00190 start_Go = 0; //r. и активности процесса 00191 #if !defined COMMAND_DEBUG 00192 Out_G_photo(Device_blk.Str.Gain_Ph_A, Device_blk.Str.Gain_Ph_B); //r. повторно инициализировать коэф-ты передачи фотоприемников 00193 #endif 00194 // close_all_loops(); 00195 00196 } 00197 00198 } // GLD_Start 00199 00200 void GLD_Pulse(void) //r.---------- процесс поджига лазера -------------------------------------- 00201 { 00202 if (!pulse_Rq) { //r. проверить состояние запроса на поджиг лазера 00203 return; //r. запроса нет, возврат 00204 } 00205 00206 if (!pulse_Go) { //r. процесс поджига еще не был активен? 00207 sts_work = 0; //r. сбросить флаг активной фазы состояния 00208 state_index = 0; //r. установить указатель состояний в начальное положение 00209 pulse_Go = 1; //r. процесс старта начался 00210 } 00211 00212 ( *Tab_Gld_Pulse[state_index] )(); //r. вызов процедуры состояния по номеру в массиве 00213 00214 if (sts_work) { //r. текущее состояние окончено? 00215 return; //r. продолжать ожидание 00216 } 00217 00218 if ( state_index >= 1 ) { 00219 //r. сбросить флаги 00220 pulse_Rq = 0; //r. запроса 00221 pulse_Go = 0; //r. и активности процесса 00222 } 00223 00224 } // GLD_Pulse 00225 /* 00226 void contrl_GLD(void) //r.========== процедура управления прибором =============================== 00227 { 00228 GLD_Start(); //r. запустить прибор, если есть запрос 00229 // GLD_Status(); //r. проверка состояния прибора 00230 GLD_Stop(); //r. остановить прибор, если необходимо 00231 GLD_Pulse(); //r. генерация импульса поджига при наличии запроса 00232 GLD_Output(); //r. режимы выдачи данных из гироскопа 00233 } */// contrl_GLD 00234 00235 00236
Generated on Thu Jul 14 2022 02:34:42 by
 1.7.2
 1.7.2 
    