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 LGstaandart by
Diff: host/Source/App/CntrlGLD.c
- Revision:
- 23:12e6183f04d4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/host/Source/App/CntrlGLD.c Wed Feb 03 10:44:42 2016 +0300
@@ -0,0 +1,265 @@
+#include "commandset.h"
+#include "CntrlGLD.h"
+#include "Cyclessync.h"
+#include "dspfns.h"
+#include "SIP.h"
+#include "el_lin.h"
+
+#define COMMAND_DEBUG
+
+uint32_t SRgR; //r. ñèñòåìíûé ðåãèñòð ðåæèìà ïëàòû ADSP
+
+uint32_t RgConA; //r. îñíîâíîé ðåãèñòð óïðàâëåíèÿ óñòðîéñòâà
+uint32_t RgConB; //r. äîïîëíèòåëüíûé ðåãèñòð óïðàâëåíèÿ
+//uint32_t Copy_e5_RgR; //r. êîïèÿ ðåãèñòðà ðåæèìà ïëàòû E5
+//uint32_t Copy_e5_RgRA; //r. êîïèÿ äîïîëíèòåëüíîãî ðåãèñòðà ðåæèìà E5
+
+uint32_t Valid_Data; //r. áàéò-ïðèçíàê äîñòîâåðíûõ äàííûõ, íàêàïëèâàþùèé îøèáêè îò çàïðîñà äî çàïðîñà
+
+TDEVICE_BLK Device_blk; //e. union for device constants
+uint32_t ser_num; //e. device serial number
+
+int Device_Mode = DM_INT_10KHZ_LATCH; //r. ðåæèì ðàáîòû ïðèáîðà (âíóòð.çàùåëêà, çíàêîâûé ìåàíäð èëè âíåøíÿÿ çàùåëêà)
+
+void Sts_Pulse(void);
+void Sts_Pause(void);
+void Sts_Polling(void);
+
+ //r. òàáëèöà ñîñòîÿíèé ïðîöåäóðû çàïóñêà ïðèáîðà
+void (* Tab_Gld_Start[3])(void) = {Sts_Pulse, Sts_Pause, Sts_Polling};
+ //r. òàáëèöà ñîñòîÿíèé ïðîöåäóðû ïîäæèãà ëàçåðà
+void (* Tab_Gld_Pulse[1])(void) = {Sts_Pulse};
+
+ //e. stack of states of the procedure of starting //r. ñòåê ïàðàìåòðîâ ñîñòîÿíèé ïðîöåäóðû çàïóñêà
+uint32_t Stk_Gld_Start[3] = {LIGHT_UP_PULSE_WDTH, LIGHT_UP_PAUSE, LIGHT_UP_POLLING};
+
+uint32_t gyro_Sts = 0; //r. ðåãèñòð ñîñòîÿíèÿ ïðèáîðà
+uint32_t start_Rq = 1; //r. çàïðîñ íà çàïóñê ïðèáîðà
+uint32_t start_Go = 0; //r. ïðîöåäóðà çàïóñêà àêòèâíà
+uint32_t stop_Rq = 0; //r. çàïðîñ íà îñòàíîâ ïðèáîðà
+uint32_t pulse_Rq = 0; //r. çàïðîñ íà ïîäæèã ëàçåðà
+uint32_t pulse_Go = 0; //r. ïðîöåññ ïîäæèãà àêòèâåí
+
+uint32_t state_index; //r. èíäåêñ ñîñòîÿíèÿ ïðîöåäóðû (ñòàðòà)
+uint32_t sts_work; //r. 1 - òåêóùåå ñîñòîÿíèå - â ðàáî÷åé ôàçå, 0 - èíèöèàëèçàöèè
+uint32_t sts_time; //r. ñ÷åò÷èê âðåìåíè òåêóùåãî ñîñòîÿíèÿ
+uint32_t attempt_Str; //r. ñ÷åò÷èê ïîïûòîê çàïóñêà ïðèáîðà
+
+
+uint32_t BIT_number;
+uint32_t Is_BIT = 0;
+
+void GLD_Stop(void) //e.---------- procedure of GLD stopping -------------------------------------- //r.---------- ïðîöåäóðà îñòàíîâà ÃËÄ --------------------------------------
+{
+ if (!stop_Rq) //r. ïðîâåðèòü çàïðîñ íà âûêëþ÷åíèå ïðèáîðà
+ {
+ return; //r. åñëè íåò, âîçâðàò
+ }
+
+ //r. ñáðîñèòü ôëàãè
+ start_Rq = 0; //r. çàïðîñà âêëþ÷åíèÿ,
+ start_Go = 0; //r. àêòèâíîñòè ïðîöåññà çàïóñêà ïðèáîðà,
+ stop_Rq = 0; //r. çàïðîñà îñòàíîâà
+ open_all_loops(); //r. âûêëþ÷èòü âñå êîíòóðà ðåãóëèðîâàíèÿ
+
+ gyro_Sts = 0; //r. ñáðîñ ðåãèñòðà ñîñòîÿíèÿ àïïàðàòóðû ÃËÄ
+
+ //r. óñòàíîâêà çíà÷åíèé ïîêîÿ âûõîäíûõ ïàðàìåòðîâ ðåãóëÿòîðîâ
+#if !defined COMMAND_DEBUG
+ disable_DACs();
+#endif
+} // GLD_Stop
+
+void GLD_Status(void) //r.---------- äîïóñêîâûé êîíòðîëü ïàðàìåòðîâ ÃËÄ --------------------------
+{
+ static uint32_t Device_Mode_Old = DM_INT_10KHZ_LATCH/*DM_EXT_LATCH_DELTA_SF_PULSE*/;
+
+ if ( loop_is_closed(GLD_ON) == 0 )
+ {
+ open_all_loops();
+ GLD_Stop();
+ }
+ if (Device_Mode_Old != Device_Mode) //deviñe mode has been changed
+ {
+ if (SwitchMode()) //e. mode is changed successful
+ {
+ Device_Mode_Old = Device_Mode; //e. save current mode name
+ if (Device_Mode_Old == DM_INT_10KHZ_LATCH)
+ trm_ena = 1; //e. enable answer
+ }
+ }
+} // GLD_Status
+
+void Sts_Pause(void) //r.------- ïðîöåäóðà ñîñòîÿíèÿ ïàóçû --------------------------------------
+{
+ if (sts_work) //r. ñîñòîÿíèå â àêòèâíîé ôàçå?
+ {
+ sts_time--; //r. äåêðåìåíò ñ÷åò÷èêà âðåìåíè ñîñòîÿíèÿ
+ if (sts_time > 0)
+ {
+ return; //r. ïðîäîëæàòü ðàáîòó, ïîêà ñ÷åò÷èê ïîëîæèòåëåí
+ }
+ //r. âðåìÿ ñîñòîÿíèÿ êîí÷èëîñü
+ sts_work = 0; //r. ñáðîñèòü ôëàã àêòèâíîñòè
+ state_index++; //r. ïåðåäâèíóòü óêàçàòåëü íà ñëåäóþùåå ñîñòîÿíèå
+ }
+ else
+ {
+ sts_time = Stk_Gld_Start[state_index]; //r. âðåìÿ äàííîãî ñîñòîÿíèÿ
+ sts_work = 1; //r. óñòàíîâèòü ôëàã àêòèâíîé ôàçû
+ }
+} // Sts_Pause
+
+void Sts_Pulse() //r. ------- ïðîöåäóðà ñîñòîÿíèÿ èìïóëüñà ïîäæèãà --------------------------
+{
+ if (sts_work) //r. ñîñòîÿíèå â àêòèâíîé ôàçå?
+ {
+ sts_time--; //r. äåêðåìåíò ñ÷åò÷èêà âðåìåíè ñîñòîÿíèÿ
+ if (sts_time > 0)
+ {
+ return; //r. ïðîäîëæàòü ðàáîòó, ïîêà ñ÷åò÷èê ïîëîæèòåëåí
+ }
+ //r. âðåìÿ ñîñòîÿíèÿ êîí÷èëîñü
+ sts_work = 0; //r. ñáðîñèòü ôëàã àêòèâíîñòè
+ state_index++; //r. ïåðåäâèíóòü óêàçàòåëü íà ñëåäóþùåå ñîñòîÿíèå
+
+ Set_LightUp; //r. ñíÿòü ñèãíàë ïîäæèãà ëàçåðà
+
+ }
+ else
+ {
+ sts_time = Stk_Gld_Start[state_index]; //r. âðåìÿ äàííîãî ñîñòîÿíèÿ
+ sts_work = 1; //r. óñòàíîâèòü ôëàã àêòèâíîé ôàçû
+
+ Reset_LightUp; //r. àêòèâèðîâàòü ñèãíàë ïîäæèãà ëàçåðà
+
+ }
+} // Sts_Pulse
+
+void Sts_Polling(void) //r.========== ïðîöåäóðà ñîñòîÿíèÿ èçìåðåíèÿ è ïðèíÿòèÿ ðåøåíèÿ î çàïóñêå
+{
+ static int32_t Sum_F_ras = 0; //r. èíòåãðàëüíàÿ ñóììà ðàñùåïëåíèÿ äëÿ ïðîöåäóðû ñòàðòà
+
+ if (sts_work) //r. ñîñòîÿíèå â àêòèâíîé ôàçå?
+ {
+ if (Dif_Curr_Vib >0)
+ Sum_F_ras = L_add(Sum_F_ras, Dif_Curr_Vib);
+ else
+ Sum_F_ras = L_sub(Sum_F_ras, Dif_Curr_Vib);
+
+//r. íåò, ïðîïóñòèòü íàêîïëåíèå ñóììû ðàñùåïëåíèÿ
+ sts_time--; //r. äåêðåìåíò ñ÷åò÷èêà âðåìåíè ñîñòîÿíèÿ
+ if (sts_time > 0)
+ {
+ return; //r. ïðîäîëæàòü ðàáîòó, ïîêà ñ÷åò÷èê ïîëîæèòåëåí
+ }
+ //r. âðåìÿ ñîñòîÿíèÿ êîí÷èëîñü
+ sts_work = 0; //r. ñáðîñèòü ôëàã àêòèâíîñòè
+ state_index++; //r. ïåðåäâèíóòü óêàçàòåëü íà ñëåäóþùåå ñîñòîÿíèå
+ //r. ïðîâåðèòü íàëè÷èå ãåíåðàöèè
+ if ( Sum_F_ras >= F_RAS_MIN) //e. //r. F_RAS_MIN = 10000 ??? ÷òî ýòî çà åäèíèöû???
+ {
+ gyro_Sts |= LASER_ON; //r. èíà÷å ñòàðò ñîñòîÿëñÿ, îòìåòèòü â ðåãèñòðå ñîñòîÿíèÿ
+ return; //r. ïðèáîðà è çàâåðøàòü ïðîöåññ
+ }
+ //r. åñëè îíà ìåíüøå, ãåíåðàöèè íåò
+ attempt_Str--; //r. äåêðåìåíò ñ÷åò÷èêà ïîïûòîê çàïóñêà ëàçåðà
+ if (attempt_Str <= 0)
+ {
+ return; //r. åñëè ïîïûòêè çàêîí÷åíû, çàâåðøèòü ïðîöåññ
+ }
+ //r. èíà÷å óñòàíîâèòü óêàçàòåëü ñîñòîÿíèé íà
+ state_index = 0; //r. íà÷àëî ïðîöåññà çàïóñêà äëÿ ïîâòîðíîé ïîïûòêè
+ }
+ else
+ {
+ sts_time = Stk_Gld_Start[state_index]; //r. âðåìÿ äàííîãî ñîñòîÿíèÿ
+ sts_work = 1; //r. óñòàíîâèòü ôëàã àêòèâíîé ôàçû
+ Sum_F_ras = 0; //r. ïðåäñáðîñ èíòåãðàëüíîé ñóììû ðàñùåïëåíèÿ
+ }
+
+} // Sts_Polling
+
+
+//r.---------- ïðîöåññ çàïóñêà ïðèáîðà -------------------------------------
+void GLD_Start(void)
+{
+ if (!start_Rq) //r. ïðîâåðèòü ñîñòîÿíèå çàïðîñà íà çàïóñê ïðèáîðà
+ {
+ return; //r. çàïðîñà íåò, âîçâðàò
+ }
+
+ if (!start_Go) //r. ïðîöåññ çàïóñêà åùå íå áûë àêòèâåí?
+ {
+ //r. ýòî íà÷àëî çàïóñêà
+ attempt_Str = N_START_MAX; //r. óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî ïîïûòîê çàïóñêà
+ //r. ðàçîìêíóòü êîíòóðà ðåãóëÿòîðîâ
+ //open_loop(VB_FREQ_ON | VB_TAU_ON | WP_REG_ON | HF_REG_ON); // 0xff95
+ //close_all_loops();
+
+ sts_work = 0; //r. ñáðîñèòü ôëàã àêòèâíîé ôàçû ñîñòîÿíèÿ
+ state_index= 0; //r. óñòàíîâèòü óêàçàòåëü ñîñòîÿíèé â íà÷àëüíîå ïîëîæåíèå
+ start_Go = 1; //r. ïðîöåññ ñòàðòà íà÷àëñÿ
+ }
+
+ ( *Tab_Gld_Start[state_index] )(); //r. âûçîâ ïðîöåäóðû ñîñòîÿíèÿ ïî íîìåðó â ìàññèâå
+
+ if (sts_work) //r. òåêóùåå ñîñòîÿíèå îêîí÷åíî?
+ {
+ return; //r. ïðîäîëæàòü îæèäàíèå
+ }
+ //r. ñîñòîÿíèå çàêîí÷èëîñü ïðîâåðèòü óêàçàòåëü ñîñòîÿíèé
+ if ( state_index >= 3 )
+ {
+ //r. îêîí÷àíèå ïðîöåññà
+ //r. ñáðîñèòü ôëàãè
+ start_Rq = 0; //r. çàïðîñà
+ start_Go = 0; //r. è àêòèâíîñòè ïðîöåññà
+#if !defined COMMAND_DEBUG
+ Out_G_photo(Device_blk.Str.Gain_Ph_A, Device_blk.Str.Gain_Ph_B); //r. ïîâòîðíî èíèöèàëèçèðîâàòü êîýô-òû ïåðåäà÷è ôîòîïðèåìíèêîâ
+#endif
+ // close_all_loops();
+
+ }
+
+} // GLD_Start
+
+void GLD_Pulse(void) //r.---------- ïðîöåññ ïîäæèãà ëàçåðà --------------------------------------
+{
+ if (!pulse_Rq) //r. ïðîâåðèòü ñîñòîÿíèå çàïðîñà íà ïîäæèã ëàçåðà
+ {
+ return; //r. çàïðîñà íåò, âîçâðàò
+ }
+
+ if (!pulse_Go) //r. ïðîöåññ ïîäæèãà åùå íå áûë àêòèâåí?
+ {
+ sts_work = 0; //r. ñáðîñèòü ôëàã àêòèâíîé ôàçû ñîñòîÿíèÿ
+ state_index = 0; //r. óñòàíîâèòü óêàçàòåëü ñîñòîÿíèé â íà÷àëüíîå ïîëîæåíèå
+ pulse_Go = 1; //r. ïðîöåññ ñòàðòà íà÷àëñÿ
+ }
+
+ ( *Tab_Gld_Pulse[state_index] )(); //r. âûçîâ ïðîöåäóðû ñîñòîÿíèÿ ïî íîìåðó â ìàññèâå
+
+ if (sts_work) //r. òåêóùåå ñîñòîÿíèå îêîí÷åíî?
+ {
+ return; //r. ïðîäîëæàòü îæèäàíèå
+ }
+
+ if ( state_index >= 1 )
+ {
+ //r. ñáðîñèòü ôëàãè
+ pulse_Rq = 0; //r. çàïðîñà
+ pulse_Go = 0; //r. è àêòèâíîñòè ïðîöåññà
+ }
+
+} // GLD_Pulse
+
+void contrl_GLD(void) //r.========== ïðîöåäóðà óïðàâëåíèÿ ïðèáîðîì ===============================
+{
+ GLD_Start(); //r. çàïóñòèòü ïðèáîð, åñëè åñòü çàïðîñ
+ GLD_Status(); //r. ïðîâåðêà ñîñòîÿíèÿ ïðèáîðà
+ GLD_Stop(); //r. îñòàíîâèòü ïðèáîð, åñëè íåîáõîäèìî
+ GLD_Pulse(); //r. ãåíåðàöèÿ èìïóëüñà ïîäæèãà ïðè íàëè÷èè çàïðîñà
+ GLD_Output(); //r. ðåæèìû âûäà÷è äàííûõ èç ãèðîñêîïà
+} // contrl_GLD
+
