fork

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Kovalev_D
Date:
Wed Sep 27 13:09:24 2017 +0000
Revision:
219:2d3475d0dd1b
Parent:
150:29c9f7671bac
hnjtfgyy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igor_v 1:f2adcae3d304 1 #include "Global.h"
igor_v 0:8ad47e2b6f00 2
igor_v 21:bc8c1cec3da6 3 #define COMMAND_DEBUG
igor_v 0:8ad47e2b6f00 4
igor_v 21:bc8c1cec3da6 5 uint32_t SRgR; //r. системный регистр режима платы ADSP
igor_v 0:8ad47e2b6f00 6
Kovalev_D 112:4a96133a1311 7 //uint32_t RgConA; //r. основной регистр управления устройства
Kovalev_D 112:4a96133a1311 8 //uint32_t RgConB; //r. дополнительный регистр управления
igor_v 21:bc8c1cec3da6 9 //uint32_t Copy_e5_RgR; //r. копия регистра режима платы E5
igor_v 21:bc8c1cec3da6 10 //uint32_t Copy_e5_RgRA; //r. копия дополнительного регистра режима E5
igor_v 0:8ad47e2b6f00 11
igor_v 21:bc8c1cec3da6 12 uint32_t Valid_Data; //r. байт-признак достоверных данных, накапливающий ошибки от запроса до запроса
igor_v 0:8ad47e2b6f00 13
Kovalev_D 129:406995a91322 14 //TDEVICE_BLK Device_blk; //e. union for device constants
igor_v 0:8ad47e2b6f00 15 uint32_t ser_num; //e. device serial number
igor_v 0:8ad47e2b6f00 16
igor_v 21:bc8c1cec3da6 17 int Device_Mode = DM_INT_10KHZ_LATCH; //r. режим работы прибора (внутр.защелка, знаковый меандр или внешняя защелка)
igor_v 0:8ad47e2b6f00 18
igor_v 0:8ad47e2b6f00 19 void Sts_Pulse(void);
igor_v 0:8ad47e2b6f00 20 void Sts_Pause(void);
igor_v 0:8ad47e2b6f00 21 void Sts_Polling(void);
igor_v 0:8ad47e2b6f00 22
igor_v 21:bc8c1cec3da6 23 //r. таблица состояний процедуры запуска прибора
igor_v 0:8ad47e2b6f00 24 void (* Tab_Gld_Start[3])(void) = {Sts_Pulse, Sts_Pause, Sts_Polling};
igor_v 21:bc8c1cec3da6 25 //r. таблица состояний процедуры поджига лазера
igor_v 0:8ad47e2b6f00 26 void (* Tab_Gld_Pulse[1])(void) = {Sts_Pulse};
igor_v 0:8ad47e2b6f00 27
igor_v 21:bc8c1cec3da6 28 //e. stack of states of the procedure of starting //r. стек параметров состояний процедуры запуска
igor_v 0:8ad47e2b6f00 29 uint32_t Stk_Gld_Start[3] = {LIGHT_UP_PULSE_WDTH, LIGHT_UP_PAUSE, LIGHT_UP_POLLING};
igor_v 0:8ad47e2b6f00 30
igor_v 21:bc8c1cec3da6 31 uint32_t gyro_Sts = 0; //r. регистр состояния прибора
igor_v 21:bc8c1cec3da6 32 uint32_t start_Rq = 1; //r. запрос на запуск прибора
igor_v 21:bc8c1cec3da6 33 uint32_t start_Go = 0; //r. процедура запуска активна
igor_v 21:bc8c1cec3da6 34 uint32_t stop_Rq = 0; //r. запрос на останов прибора
igor_v 21:bc8c1cec3da6 35 uint32_t pulse_Rq = 0; //r. запрос на поджиг лазера
igor_v 21:bc8c1cec3da6 36 uint32_t pulse_Go = 0; //r. процесс поджига активен
igor_v 0:8ad47e2b6f00 37
igor_v 21:bc8c1cec3da6 38 uint32_t state_index; //r. индекс состояния процедуры (старта)
igor_v 21:bc8c1cec3da6 39 uint32_t sts_work; //r. 1 - текущее состояние - в рабочей фазе, 0 - инициализации
igor_v 21:bc8c1cec3da6 40 uint32_t sts_time; //r. счетчик времени текущего состояния
igor_v 21:bc8c1cec3da6 41 uint32_t attempt_Str; //r. счетчик попыток запуска прибора
igor_v 0:8ad47e2b6f00 42
igor_v 21:bc8c1cec3da6 43
igor_v 0:8ad47e2b6f00 44 uint32_t BIT_number;
igor_v 0:8ad47e2b6f00 45 uint32_t Is_BIT = 0;
igor_v 0:8ad47e2b6f00 46
igor_v 21:bc8c1cec3da6 47 void GLD_Stop(void) //e.---------- procedure of GLD stopping -------------------------------------- //r.---------- процедура останова ГЛД --------------------------------------
igor_v 0:8ad47e2b6f00 48 {
igor_v 21:bc8c1cec3da6 49 if (!stop_Rq) { //r. проверить запрос на выключение прибора
igor_v 21:bc8c1cec3da6 50 return; //r. если нет, возврат
igor_v 21:bc8c1cec3da6 51 }
igor_v 0:8ad47e2b6f00 52
igor_v 21:bc8c1cec3da6 53 //r. сбросить флаги
igor_v 21:bc8c1cec3da6 54 start_Rq = 0; //r. запроса включения,
igor_v 21:bc8c1cec3da6 55 start_Go = 0; //r. активности процесса запуска прибора,
igor_v 21:bc8c1cec3da6 56 stop_Rq = 0; //r. запроса останова
Kovalev_D 112:4a96133a1311 57 // open_all_loops(); //r. выключить все контура регулирования
igor_v 0:8ad47e2b6f00 58
igor_v 21:bc8c1cec3da6 59 gyro_Sts = 0; //r. сброс регистра состояния аппаратуры ГЛД
igor_v 21:bc8c1cec3da6 60
igor_v 21:bc8c1cec3da6 61 //r. установка значений покоя выходных параметров регуляторов
igor_v 0:8ad47e2b6f00 62 #if !defined COMMAND_DEBUG
igor_v 21:bc8c1cec3da6 63 disable_DACs();
igor_v 0:8ad47e2b6f00 64 #endif
igor_v 0:8ad47e2b6f00 65 } // GLD_Stop
Kovalev_D 112:4a96133a1311 66 /*
igor_v 21:bc8c1cec3da6 67 void GLD_Status(void) //r.---------- допусковый контроль параметров ГЛД --------------------------
igor_v 0:8ad47e2b6f00 68 {
Kovalev_D 150:29c9f7671bac 69 static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH DM_EXT_LATCH_DELTA_SF_PULSE ;
igor_v 21:bc8c1cec3da6 70
Kovalev_D 150:29c9f7671bac 71 if ( loop_is_closed(GLD_ON) == 0 ) {
igor_v 21:bc8c1cec3da6 72 open_all_loops();
igor_v 21:bc8c1cec3da6 73 GLD_Stop();
igor_v 21:bc8c1cec3da6 74 }
igor_v 21:bc8c1cec3da6 75 if (Device_Mode_Old != Device_Mode) { //deviсe mode has been changed
igor_v 21:bc8c1cec3da6 76 if (SwitchMode()) { //e. mode is changed successful
igor_v 21:bc8c1cec3da6 77 Device_Mode_Old = Device_Mode; //e. save current mode name
igor_v 21:bc8c1cec3da6 78 if (Device_Mode_Old == DM_INT_10KHZ_LATCH)
igor_v 21:bc8c1cec3da6 79 trm_ena = 1; //e. enable answer
igor_v 21:bc8c1cec3da6 80 }
igor_v 21:bc8c1cec3da6 81 }
igor_v 0:8ad47e2b6f00 82 } // GLD_Status
Kovalev_D 112:4a96133a1311 83 */
igor_v 21:bc8c1cec3da6 84 void Sts_Pause(void) //r.------- процедура состояния паузы --------------------------------------
igor_v 0:8ad47e2b6f00 85 {
igor_v 21:bc8c1cec3da6 86 if (sts_work) { //r. состояние в активной фазе?
igor_v 21:bc8c1cec3da6 87 sts_time--; //r. декремент счетчика времени состояния
igor_v 21:bc8c1cec3da6 88 if (sts_time > 0) {
igor_v 21:bc8c1cec3da6 89 return; //r. продолжать работу, пока счетчик положителен
igor_v 21:bc8c1cec3da6 90 }
igor_v 21:bc8c1cec3da6 91 //r. время состояния кончилось
igor_v 21:bc8c1cec3da6 92 sts_work = 0; //r. сбросить флаг активности
igor_v 21:bc8c1cec3da6 93 state_index++; //r. передвинуть указатель на следующее состояние
igor_v 21:bc8c1cec3da6 94 } else {
igor_v 21:bc8c1cec3da6 95 sts_time = Stk_Gld_Start[state_index]; //r. время данного состояния
igor_v 21:bc8c1cec3da6 96 sts_work = 1; //r. установить флаг активной фазы
igor_v 21:bc8c1cec3da6 97 }
igor_v 0:8ad47e2b6f00 98 } // Sts_Pause
igor_v 0:8ad47e2b6f00 99
igor_v 21:bc8c1cec3da6 100 void Sts_Pulse() //r. ------- процедура состояния импульса поджига --------------------------
igor_v 0:8ad47e2b6f00 101 {
igor_v 21:bc8c1cec3da6 102 if (sts_work) { //r. состояние в активной фазе?
igor_v 21:bc8c1cec3da6 103 sts_time--; //r. декремент счетчика времени состояния
igor_v 21:bc8c1cec3da6 104 if (sts_time > 0) {
igor_v 21:bc8c1cec3da6 105 return; //r. продолжать работу, пока счетчик положителен
igor_v 21:bc8c1cec3da6 106 }
igor_v 21:bc8c1cec3da6 107 //r. время состояния кончилось
igor_v 21:bc8c1cec3da6 108 sts_work = 0; //r. сбросить флаг активности
igor_v 21:bc8c1cec3da6 109 state_index++; //r. передвинуть указатель на следующее состояние
igor_v 0:8ad47e2b6f00 110
igor_v 21:bc8c1cec3da6 111 Set_LightUp; //r. снять сигнал поджига лазера
igor_v 0:8ad47e2b6f00 112
igor_v 21:bc8c1cec3da6 113 } else {
igor_v 21:bc8c1cec3da6 114 sts_time = Stk_Gld_Start[state_index]; //r. время данного состояния
igor_v 21:bc8c1cec3da6 115 sts_work = 1; //r. установить флаг активной фазы
igor_v 0:8ad47e2b6f00 116
igor_v 21:bc8c1cec3da6 117 Reset_LightUp; //r. активировать сигнал поджига лазера
igor_v 21:bc8c1cec3da6 118
igor_v 21:bc8c1cec3da6 119 }
igor_v 0:8ad47e2b6f00 120 } // Sts_Pulse
igor_v 0:8ad47e2b6f00 121
igor_v 21:bc8c1cec3da6 122 void Sts_Polling(void) //r.========== процедура состояния измерения и принятия решения о запуске
igor_v 0:8ad47e2b6f00 123 {
igor_v 21:bc8c1cec3da6 124 static int32_t Sum_F_ras = 0; //r. интегральная сумма расщепления для процедуры старта
igor_v 0:8ad47e2b6f00 125
igor_v 21:bc8c1cec3da6 126 if (sts_work) { //r. состояние в активной фазе?
igor_v 21:bc8c1cec3da6 127 if (Dif_Curr_Vib >0)
igor_v 21:bc8c1cec3da6 128 Sum_F_ras = L_add(Sum_F_ras, Dif_Curr_Vib);
igor_v 21:bc8c1cec3da6 129 else
igor_v 21:bc8c1cec3da6 130 Sum_F_ras = L_sub(Sum_F_ras, Dif_Curr_Vib);
igor_v 0:8ad47e2b6f00 131
igor_v 21:bc8c1cec3da6 132 //r. нет, пропустить накопление суммы расщепления
igor_v 21:bc8c1cec3da6 133 sts_time--; //r. декремент счетчика времени состояния
igor_v 21:bc8c1cec3da6 134 if (sts_time > 0) {
igor_v 21:bc8c1cec3da6 135 return; //r. продолжать работу, пока счетчик положителен
igor_v 21:bc8c1cec3da6 136 }
igor_v 21:bc8c1cec3da6 137 //r. время состояния кончилось
igor_v 21:bc8c1cec3da6 138 sts_work = 0; //r. сбросить флаг активности
igor_v 21:bc8c1cec3da6 139 state_index++; //r. передвинуть указатель на следующее состояние
igor_v 21:bc8c1cec3da6 140 //r. проверить наличие генерации
igor_v 21:bc8c1cec3da6 141 if ( Sum_F_ras >= F_RAS_MIN) { //e. //r. F_RAS_MIN = 10000 ??? что это за единицы???
igor_v 21:bc8c1cec3da6 142 gyro_Sts |= LASER_ON; //r. иначе старт состоялся, отметить в регистре состояния
igor_v 21:bc8c1cec3da6 143 return; //r. прибора и завершать процесс
igor_v 0:8ad47e2b6f00 144 }
igor_v 21:bc8c1cec3da6 145 //r. если она меньше, генерации нет
igor_v 21:bc8c1cec3da6 146 attempt_Str--; //r. декремент счетчика попыток запуска лазера
igor_v 21:bc8c1cec3da6 147 if (attempt_Str <= 0) {
igor_v 21:bc8c1cec3da6 148 return; //r. если попытки закончены, завершить процесс
igor_v 0:8ad47e2b6f00 149 }
igor_v 21:bc8c1cec3da6 150 //r. иначе установить указатель состояний на
igor_v 21:bc8c1cec3da6 151 state_index = 0; //r. начало процесса запуска для повторной попытки
igor_v 21:bc8c1cec3da6 152 } else {
igor_v 21:bc8c1cec3da6 153 sts_time = Stk_Gld_Start[state_index]; //r. время данного состояния
igor_v 21:bc8c1cec3da6 154 sts_work = 1; //r. установить флаг активной фазы
igor_v 21:bc8c1cec3da6 155 Sum_F_ras = 0; //r. предсброс интегральной суммы расщепления
igor_v 21:bc8c1cec3da6 156 }
igor_v 21:bc8c1cec3da6 157
igor_v 0:8ad47e2b6f00 158 } // Sts_Polling
igor_v 0:8ad47e2b6f00 159
igor_v 0:8ad47e2b6f00 160
igor_v 21:bc8c1cec3da6 161 //r.---------- процесс запуска прибора -------------------------------------
igor_v 0:8ad47e2b6f00 162 void GLD_Start(void)
igor_v 0:8ad47e2b6f00 163 {
igor_v 21:bc8c1cec3da6 164 if (!start_Rq) { //r. проверить состояние запроса на запуск прибора
igor_v 21:bc8c1cec3da6 165 return; //r. запроса нет, возврат
igor_v 21:bc8c1cec3da6 166 }
igor_v 0:8ad47e2b6f00 167
igor_v 21:bc8c1cec3da6 168 if (!start_Go) { //r. процесс запуска еще не был активен?
igor_v 21:bc8c1cec3da6 169 //r. это начало запуска
igor_v 21:bc8c1cec3da6 170 attempt_Str = N_START_MAX; //r. установить максимальное число попыток запуска
igor_v 21:bc8c1cec3da6 171 //r. разомкнуть контура регуляторов
igor_v 21:bc8c1cec3da6 172 //open_loop(VB_FREQ_ON | VB_TAU_ON | WP_REG_ON | HF_REG_ON); // 0xff95
igor_v 21:bc8c1cec3da6 173 //close_all_loops();
igor_v 21:bc8c1cec3da6 174
igor_v 21:bc8c1cec3da6 175 sts_work = 0; //r. сбросить флаг активной фазы состояния
igor_v 21:bc8c1cec3da6 176 state_index= 0; //r. установить указатель состояний в начальное положение
igor_v 21:bc8c1cec3da6 177 start_Go = 1; //r. процесс старта начался
igor_v 21:bc8c1cec3da6 178 }
igor_v 0:8ad47e2b6f00 179
igor_v 21:bc8c1cec3da6 180 ( *Tab_Gld_Start[state_index] )(); //r. вызов процедуры состояния по номеру в массиве
igor_v 21:bc8c1cec3da6 181
igor_v 21:bc8c1cec3da6 182 if (sts_work) { //r. текущее состояние окончено?
igor_v 21:bc8c1cec3da6 183 return; //r. продолжать ожидание
igor_v 0:8ad47e2b6f00 184 }
igor_v 21:bc8c1cec3da6 185 //r. состояние закончилось проверить указатель состояний
igor_v 21:bc8c1cec3da6 186 if ( state_index >= 3 ) {
igor_v 21:bc8c1cec3da6 187 //r. окончание процесса
igor_v 21:bc8c1cec3da6 188 //r. сбросить флаги
igor_v 21:bc8c1cec3da6 189 start_Rq = 0; //r. запроса
igor_v 21:bc8c1cec3da6 190 start_Go = 0; //r. и активности процесса
igor_v 0:8ad47e2b6f00 191 #if !defined COMMAND_DEBUG
igor_v 21:bc8c1cec3da6 192 Out_G_photo(Device_blk.Str.Gain_Ph_A, Device_blk.Str.Gain_Ph_B); //r. повторно инициализировать коэф-ты передачи фотоприемников
igor_v 0:8ad47e2b6f00 193 #endif
igor_v 21:bc8c1cec3da6 194 // close_all_loops();
igor_v 0:8ad47e2b6f00 195
igor_v 21:bc8c1cec3da6 196 }
igor_v 21:bc8c1cec3da6 197
igor_v 0:8ad47e2b6f00 198 } // GLD_Start
igor_v 0:8ad47e2b6f00 199
igor_v 21:bc8c1cec3da6 200 void GLD_Pulse(void) //r.---------- процесс поджига лазера --------------------------------------
igor_v 0:8ad47e2b6f00 201 {
igor_v 21:bc8c1cec3da6 202 if (!pulse_Rq) { //r. проверить состояние запроса на поджиг лазера
igor_v 21:bc8c1cec3da6 203 return; //r. запроса нет, возврат
igor_v 0:8ad47e2b6f00 204 }
igor_v 21:bc8c1cec3da6 205
igor_v 21:bc8c1cec3da6 206 if (!pulse_Go) { //r. процесс поджига еще не был активен?
igor_v 21:bc8c1cec3da6 207 sts_work = 0; //r. сбросить флаг активной фазы состояния
igor_v 21:bc8c1cec3da6 208 state_index = 0; //r. установить указатель состояний в начальное положение
igor_v 21:bc8c1cec3da6 209 pulse_Go = 1; //r. процесс старта начался
igor_v 0:8ad47e2b6f00 210 }
igor_v 21:bc8c1cec3da6 211
igor_v 21:bc8c1cec3da6 212 ( *Tab_Gld_Pulse[state_index] )(); //r. вызов процедуры состояния по номеру в массиве
igor_v 21:bc8c1cec3da6 213
igor_v 21:bc8c1cec3da6 214 if (sts_work) { //r. текущее состояние окончено?
igor_v 21:bc8c1cec3da6 215 return; //r. продолжать ожидание
igor_v 0:8ad47e2b6f00 216 }
igor_v 21:bc8c1cec3da6 217
igor_v 21:bc8c1cec3da6 218 if ( state_index >= 1 ) {
igor_v 21:bc8c1cec3da6 219 //r. сбросить флаги
igor_v 21:bc8c1cec3da6 220 pulse_Rq = 0; //r. запроса
igor_v 21:bc8c1cec3da6 221 pulse_Go = 0; //r. и активности процесса
igor_v 0:8ad47e2b6f00 222 }
igor_v 21:bc8c1cec3da6 223
igor_v 0:8ad47e2b6f00 224 } // GLD_Pulse
Kovalev_D 150:29c9f7671bac 225 /*
igor_v 21:bc8c1cec3da6 226 void contrl_GLD(void) //r.========== процедура управления прибором ===============================
igor_v 0:8ad47e2b6f00 227 {
igor_v 21:bc8c1cec3da6 228 GLD_Start(); //r. запустить прибор, если есть запрос
Kovalev_D 112:4a96133a1311 229 // GLD_Status(); //r. проверка состояния прибора
igor_v 21:bc8c1cec3da6 230 GLD_Stop(); //r. остановить прибор, если необходимо
igor_v 21:bc8c1cec3da6 231 GLD_Pulse(); //r. генерация импульса поджига при наличии запроса
igor_v 21:bc8c1cec3da6 232 GLD_Output(); //r. режимы выдачи данных из гироскопа
Kovalev_D 150:29c9f7671bac 233 } */// contrl_GLD
igor_v 0:8ad47e2b6f00 234
igor_v 0:8ad47e2b6f00 235
igor_v 21:bc8c1cec3da6 236