forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Revision:
23:12e6183f04d4
diff -r bc8c1cec3da6 -r 12e6183f04d4 host/Source/App/CntrlGLD.c
--- /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
+