123
Fork of LG by
CntrlGLD.c@129:406995a91322, 2016-04-12 (annotated)
- Committer:
- Kovalev_D
- Date:
- Tue Apr 12 11:10:49 2016 +0000
- Revision:
- 129:406995a91322
- Parent:
- 112:4a96133a1311
- Child:
- 150:29c9f7671bac
?????? ? ?????? ??????????
Who changed what in which revision?
User | Revision | Line number | New 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 | { |
igor_v | 21:bc8c1cec3da6 | 69 | static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH/*DM_EXT_LATCH_DELTA_SF_PULSE*/; |
igor_v | 21:bc8c1cec3da6 | 70 | |
Kovalev_D | 112:4a96133a1311 | 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 |
igor_v | 0:8ad47e2b6f00 | 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. режимы выдачи данных из гироскопа |
igor_v | 0:8ad47e2b6f00 | 233 | } // contrl_GLD |
igor_v | 0:8ad47e2b6f00 | 234 | |
igor_v | 0:8ad47e2b6f00 | 235 | |
igor_v | 21:bc8c1cec3da6 | 236 |