Dmitry Kovalev / Mbed 2 deprecated LGstaandart

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CntrlGLD.c Source File

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