fork

Dependencies:   mbed

Fork of LG by igor Apu

Revision:
147:1aed74f19a8f
Parent:
146:2bea299a7c4f
Child:
150:29c9f7671bac
--- a/main.c	Thu Apr 28 13:54:29 2016 +0000
+++ b/main.c	Fri Apr 29 07:27:50 2016 +0000
@@ -18,513 +18,95 @@
 //2016_06 Dima
 //2016_02_06 21:20 Kovalev_D
 *********************************************************************************************************/
-
-
 #include "Global.h"
-//#include <math.h>
 #include "Device.h"
-//#include "IAP.h"
 /******************************************************************************
 **   Main Function  main()
 ******************************************************************************/
 extern Device device; //Single global for all device hardware-independent algorithm
-#define	IMG_START_SECTOR	0x00010000	/* Sector 16 */
-#define	IMG_END_SECTOR		0x00017FFF	/* Sector 20 */
-
-/*
-#define	IMG_START_SECTOR	0x00030000//0x00010000	/* Sector 16 
-#define	IMG_END_SECTOR		0x00037FFF	*/
 unsigned int addres;
-
 uint32_t Result[5];
 extern uint32_t CMD_Mode;
 unsigned int  secPuls;
 float DACF, K_DAC;
 int tempAMP;
 int temp;
-//unsigned int    *Add;
-
 unsigned int status;
 unsigned int Para;
 int main (void)
 {
-int ttemp;
-
-unsigned int TempA;
 SystemInit1();  // Инициализация контроллера: установка тактовых частот
-addres = 0x10000;
-
-
-    //FlashDMA_Init(); 		  // Загрузка параметров с флэш
-    SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz
-
-
-
-    GLD_Init();
-    ///////////старый UART
-//    UARTInit();				  // инициализация  UART0 на скорость 38400.
-//    UART1_Init();             // инициализация  UART1 на скорость 38400.
-
+SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz
+GLD_Init();
 
       UART_InitSet (0, 921600, 0x03);  // надо проверить, мож чо с ногам
    // UART_InitSet (1, 921600, 0x03);
       UART_InitSet (1, 115200, 0x03);
-    
-    ////////////
-    //DAC_ADC_Exchange_Init();  // инициализация  обмена АЦП и ЦАП.
 
     IntLatch_Init();		  // инициализация внутренней защелки.
     ExtLatch_Init();		  // инициализация внешней защелки.
     LoadFlashParam(FromFLASH); 	//загрузка параметров.
-
-   // open_all_loops();                          //#define open_all_loops()			RgConA   = 0	(Основной регистр управления устройства (0 - включить, 1 - отключить)).
-  //  Output.Str.HF_reg = Device_blk.Str.HF_min; //HFO output voltage = максивальное напряжение на ГВЧ.
     init_PLC();                                //Инициализация СРП(регулировка периметра)
     init_Dither_reg();                         //инициализация вибропривода
-  //  RgConB = RATE_VIBRO_1; // дополнительный регистр управления = разность вибросчетчиков после фильтра скольз.среднего(#define RATE_VIBRO_1	0x0001)
- //   close_all_loops();
 
     Out_G_photo(200,200);        //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины.
-
     WriteCon1("\n\r ...GL start programm uart ACK.... ");
     WriteCon("\n\r ...GL start programm uart Tech.... ");
     sprintf(Time,"\r\nCompiled: %s %s.",__DATE__,  __TIME__ );                 //Подготовка даты и времени компиляции
     WriteCon(Time);
 
 Gyro.PLC_Error2Mode = 10;  // начальная задержка (неработает СРП)
-
     while ( 1 ) { //основной цикл.
-  
-     	G_Photo_Exchange();	
+       	G_Photo_Exchange();	
         Concol ();				// Проврка 0 консоли  (вход и выход)
         Concol1 ();		        // Проврка 0 консоли  (вход и выход)
         Read_CMD();	
         if (OutBufConCount)  OutBufConCount--;
         if (OutBufCon1Count)  OutBufCon1Count--;
-        
-        if (ReadCon (Time)) {
-/////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-//////////////////////Выбор FlashMod///////////////////////////
-////////////////////////////////////////////////////////////////
-
-            if (Time[0] == 'B') {
-                Gyro.FlashMod=1;
-            }  
-             if (Time[0] == 'W') {
-                Gyro.FlashMod=2;
-            }
-            if (Time[0] == 'R') {
-                Gyro.FlashMod=3;
-            }
-
-         
-///////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////
-
-            if (Time[0] == 'H') { // если ввели буквц h то выдать подсказку. сделанно через принф ОЧЕНЬ плохо в работе не использовать
-                sprintf(Time,"\r\nCompiled: %s %s.",__DATE__,  __TIME__ );                 //Подготовка даты и времени компиляции
-                WriteCon(Time);
-                sprintf(Time,"--%d.%3.d.%2.d.",Time1Hz,Time1K,Time100K);                 //Временно выдачпа временни из трех чисел
-                WriteCon(Time);
-            }
-            if (Time[0] == 'D') {
-                Gyro.Discharg = StartDischarg;
-            }
-            if (Time[0] == 'L') {
-                Gyro.BackLight = StartBackLight;
-            }
-            
-             if (Time[0] == 'F') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                sprintf((Time)," Gyro.Termo = <%07d>  Spi.ADC1 = <%07d>  Spi.ADC1_Accum = <%07d>",Spi.ADC4,Spi.ADC4,Spi.ADC4_Accum );
-                WriteCon(Time);
-            }   
-            
-             if (Time[0] == 'q') {		// внешняя защелка
-                Gyro.EXT_Latch=1;
-            }   
-          if (Time[0] == '1') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_1Point[i]);
-                WriteCon(Time);
-            }
-            
-               if (Time[0] == '2') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",    Buff_8Point[i]);
-                WriteCon(Time);
-            }
-                if (Time[0] == '3') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",    Buff_16Point[i]);
-                WriteCon(Time);
-            }
-            
-             if (Time[0] == '4') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",    Buff_16PointD[i]);
-                WriteCon(Time);
-            }
- 
-
-
-                      if (Time[0] == 'z') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-           
-                  for (int i = 0; i < 32; i++ ) 
-                  { 
-                  ttemp=(Buff_16PointD[i]);
-                  if (ttemp < 0) WriteCon("1"); else WriteCon("0");
-                  }
        
-            }
-           
-            
-              if (Time[0] == '5') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_32Point[i]);
-                WriteCon(Time);
-            }
-           
-              if (Time[0] == '6') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_Restored_sin[i]);
-                WriteCon(Time);
-            }       
-            
-            
-            
-                
-            
-            
-           if (Time[0] == '7') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time + i * 10)," <%07d> ",Buff_AMP64P[i]-(Buff_AMP[i]));
-                WriteCon(Time);
-            }
-               if (Time[0] == '9') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time)," <%07d> ",Gyro.Frq);
-                WriteCon(Time);
-            }
-            
-            if (Time[0] == 'p') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-                for (int i = 0; i < 32; i++ )sprintf((Time)," <%07d> ",Cur_Amp);
-                WriteCon(Time);
-            }
-             if (Time[0] == 'm') {		// выдача технологическая
-               sprintf(Time,"\r\n");
-               WriteCon(Time);
-             //  sprintf((Time),"Cur_Amp  <%07d> ",	Cur_Amp);  	WriteCon(Time);              
-           //    sprintf((Time),"Znak_Amp  <%07d> ",	Znak_Amp);  	WriteCon(Time);
-            //   sprintf((Time),"AD_Regul  <%07d> ",	AD_Regul);  	WriteCon(Time);
-               
-                sprintf((Time),"PLC_Delta  <%07d> ",	Gyro.PLC_Delta);  	    WriteCon(Time);
-                sprintf((Time),"PLC_DeltaADD  <%07d> ",	Gyro.PLC_DeltaADD);  	WriteCon(Time);
-  //         	printf((Time),"AD_Regul  <%07d> ",	Delta);  	WriteCon(Time);               
-              
-//               sprintf((Time),"Spi.DAC_B  <%07d> ",Spi.DAC_B);  WriteCon(Time);*/
-//               sprintf((Time),"MaxAmp  <%07d> ", MaxAmp);  WriteCon(Time);
- //              sprintf((Time),"CaunAddPlus  <%07d> ", CaunAddPlus);  WriteCon(Time);
- //              sprintf((Time),"CaunAddMin  <%07d> ",  CaunAddMin);  WriteCon(Time);
-//               sprintf((Time)," Gyro.Amp <%07d> ",amp);  WriteCon(Time);
-
-            }
-          if (Time[0] == 'V') {		// выдача технологическая
-            //    Gyro.Frq+=65000;
-            Spi.DAC_B += 200;
-            
-            }
-          if (Time[0] == 'v') {		// выдача технологическая
-              //Gyro.Frq-=65000;
-               Spi.DAC_B -= 200;
-            }
-       /*     
-         if (Time[0] == 'Y') {		// выдача технологическая
-              Log=1;
-            }*/
-            
-            
-            
-       ////////////////////////////////////////////////////////////////////////////////   
-                      /*Запись лога настройки частоты*/
-            if (Time[0] == 'y')   Gyro.LogHZ=1;           //включит передачу
-            if (Time[0] == 'u')   Gyro.StrayHZ_flag = 1;  //LPC_TIM1->MR0+1000  вносим помеху        
-            if (Time[0] == 'i')   Gyro.StrayHZ_flag = 0;  //LPC_TIM1->MR0       убираем помеху  
-            if (Time[0] == 'o')   Gyro.LogHZ=0;           //Отключить передачу
-       ////////////////////////////////////////////////////////////////////////////////////     
-                      /*Запись лога настройки периметра*/
-            if (Time[0] == 'g')   Gyro.LogPLC=1;           //включит передачу
-            if (Time[0] == 'h')   Gyro.StrayPLC_flag = 1;  //LPC_TIM1->MR0+1000  вносим помеху
-            if (Time[0] == 'j')   Gyro.StrayPLC_flag = 0;  
-            if (Time[0] == 'b')   Gyro.StrayPLC_flag = 3;  //LPC_TIM1->MR0-1000  вносим помеху
-            if (Time[0] == 'n')   Gyro.StrayPLC_flag = 2;  //LPC_TIM1->MR0       убираем помеху  
-            if (Time[0] == 'k')   Gyro.LogPLC=0;           //Отключить передачу
-           
-      //////////////////////////////////////////////////////////////////////////////////////     
-            
-  
-                if (Time[0] == '8') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-            //  for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_AMP64P[i]-(Buff_AMP[i]*2));
-                  for (int i = 0; i < 32; i++ ) 
-                  { 
-                  ttemp=(Buff_AMP64P[i]-(Buff_AMP[i]));
-                  if (ttemp < 0) WriteCon("1"); else WriteCon("0");
-                  }
-            //   WriteCon(Time);
-            }
-            
-                 if (Time[0] == 'b') {		// выдача технологическая
-                sprintf(Time,"\r\n");
-                WriteCon(Time);
-           
-                  for (int i = 0; i < 32; i++ ) 
-                  { 
-                  ttemp=(Buff_Restored_sin[i]);
-                  if (ttemp < 0) WriteCon("1"); else WriteCon("0");
-                  }
-       
-            }
-           
-                 if (Gyro.PLC_Error2Mode) {		// выдача технологическая
-                sprintf(Time,"\r\nPLC_Error2Mode");
-                WriteCon(Time);
-                }
-            
-        }
-        
+        TechLog();//технологическая выдача
     
-          
         Event_100KHz();
         Event_1KHz();
         Event_500Hz();
         Event_1Hz();
-        
         Event_Vibro();
         
 	 switch(Gyro.ModeOut) {
      case 1:
-            if(Gyro.Rate1_Event==1)CMD_Rate();
+            if(Gyro.Rate1_Event    == 1) CMD_Rate();
      break;  
      case 2:
-            if(Gyro.Rate2_Event==1)CMD_Rate2();
-     break;   
+            if(Gyro.Rate2_Event    == 1) CMD_Rate2();
+     break;    
      case 3:
-            if(Gyro.Delta500_Event==1)CMD_Delta_500Hz();
+            if(Gyro.Delta500_Event == 1) CMD_Delta_500Hz();
      break;   
      case 4:
-            if(Gyro.EXT_Latch==1){CMD_Delta_Ext();}
+            if(Gyro.EXT_Latch      == 1) CMD_Delta_Ext();
      break;       		   		
      } 
-	if (Spi.ADC_NewData == 1)  // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
-	{
-// можно апихнкть в функцию
-		Spi.ADC_NewData = 0;	
-		Gyro.Termo 	= Spi.ADC1;
-		Gyro.In1   	= Spi.ADC2;
-		Gyro.In2   	= Spi.ADC3;
-		Gyro.DeltaT = Spi.ADC4;
-		TempA = (0x7fff - Spi.ADC5) << 1;  		// перевернем знак  и умножим на два (было 32000...0 стало 0 ...64000)
-
-		Gyro.ADF_Accum += TempA;
-		Gyro.ADS_Accum += TempA;
-		Gyro.ADF_Count ++;
-		Gyro.ADS_Count ++;
-
-		if (Gyro.ADF_Count > 15)					// если прошло 16 тактов виброподвеса
-		{
-			Gyro.AD_Fast = Gyro.ADF_Accum << 12;	//обновляем данные и приводим в один масштаб
-			Gyro.ADF_Count = 0;
-			Gyro.ADF_Accum = 0;
-			Gyro.ADF_NewData = 1;
-		}
-		if (Gyro.ADS_Count > 255)					// если прошло 256 тактов виброподвеса
-		{
-			Gyro.AD_Slow = Gyro.ADS_Accum << 8;		//обновляем данные и приводим в один масштаб
-			Gyro.ADS_Count = 0;
-			Gyro.ADS_Accum = 0;
-			Gyro.ADS_NewData = 1;
-		}
-	}
-	
-
-
-
-	if (Gyro.ADF_NewData == 1)  // был приход новых данных После быстрого фильтра AD
-	{
-		Gyro.ADF_NewData = 0;
-	}// можно запихнкть в функцию
-	
-	if (Gyro.ADS_NewData == 1)  // был приход новых данных После Медленного фильтра AD
-	{
-
-		Gyro.ADS_NewData = 0;
-		PlcRegul();//Расчет	
-		
-	
-
-	}// можно запихнкть в функцию
-	
-    if(Gyro.VibroFrqRegulF == 1)		//Регулеровка частоты виброподвеса
-    {
-    	  Gyro.VibroFrqRegulF = 0;
-    	  VibroFrqRegul();
-    }
-
-    if(Gyro.VibroAMPRegulF == 1)		//Регулеровка Амплитуды виброподвеса
-    {
-    	  Gyro.VibroAMPRegulF = 0;
-    	  VibroAMPRegul();
-    }
-    if(Gyro.VibroNoiseF == 1)			//регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
-    {
-    	  Gyro.VibroNoiseF = 0;
-    	  CalcAmpN();
-    }
-
-    if(Gyro.VibroOutF== 1)				// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно
-    {
-    	  Gyro.VibroOutF = 0;
-    	  VibroOut();				//Чтение ADS_SPI
-    }
-    
-    if( (Gyro.LogHZ == 1)&&(Gyro.Event_500Hz==1))				// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно
+    if (Spi.ADC_NewData     == 1) {ADS_Acum();								 	}  // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро
+	if (Gyro.ADF_NewData    == 1) {Gyro.ADF_NewData = 0;                    	}  // был приход новых данных После быстрого фильтра AD	
+	if (Gyro.ADS_NewData    == 1) {Gyro.ADS_NewData = 0;     PlcRegul();     	}  // был приход новых данных После Медленного фильтра AD
+    if (Gyro.VibroFrqRegulF == 1) {Gyro.VibroFrqRegulF = 0;	 VibroFrqRegul();	}	//Регулеровка частоты виброподвеса    
+    if (Gyro.VibroAMPRegulF == 1) {Gyro.VibroAMPRegulF = 0;	 VibroAMPRegul();   }	//Регулеровка Амплитуды виброподвеса
+    if (Gyro.VibroNoiseF    == 1) {Gyro.VibroNoiseF = 0;	 CalcAmpN();	    }//регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды
+    if(Gyro.VibroOutF       == 1) {Gyro.VibroOutF = 0;		 VibroOut();		}// установка ног в регисторе тоже подумать , зачем отделный флаг? наверно 
+    if( (Gyro.LogHZ == 1)&&(Gyro.Event_500Hz==1))				
     {
     	 Gyro.Event_500Hz=0;
-    
-    	  sprintf((Time),"%d \r\n",LPC_TIM1->MR0);
-          WriteCon(Time);
-               
-    }
-   //&Gyro.Firmware_Version
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
+     	 sprintf((Time),"%d \r\n",LPC_TIM1->MR0);
+         WriteCon(Time);
+    }  
 /////////////////////////////////////////////////////////////////////////////////////////////////////////
 /////////////////////////Работа с Flash//////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////////////////////////////////
- if(Gyro.FlashMod == 1)		
- {    		   
- 	
- 	/*	Prepare Sectors to be flashed */
-    NVIC_DisableIRQ(TIMER1_IRQn);
-    NVIC_DisableIRQ(TIMER2_IRQn);
- 	NVIC_DisableIRQ(TIMER3_IRQn);
- 	NVIC_DisableIRQ(EINT3_IRQn);
-//SCB->VTOR = 0x00A000;
-
-
-SystemInitDef();
-vIAP_ReinvokeISP();
-} 
-
-
- if(Gyro.FlashMod == 2)			
-    {
-   
-    NVIC_DisableIRQ(TIMER1_IRQn);
-    NVIC_DisableIRQ(TIMER2_IRQn);
- 	NVIC_DisableIRQ(TIMER3_IRQn);
- 	NVIC_DisableIRQ(EINT3_IRQn);
- 
-  SystemInitDef();
- 
-  	
-  	
-   WriteCon("\r\n Start Prepare Sectors");
-   if(u32IAP_PrepareSectors(18, 21) == IAP_STA_CMD_SUCCESS)
-   {
-   	WriteCon("\r\nPrepare Sectors OK");
-   	WriteCon("\r\n Start Erase");
-   	
-    u32IAP_EraseSectors(IMG_START_SECTOR, IMG_END_SECTOR);
+		if(Gyro.FlashMod == 1)		{GoBoot();     }  
+		if(Gyro.FlashMod == 2)	    {WriteFlash(); }		
+		if(Gyro.FlashMod == 3)		{ReadFlash();  }
    
-    WriteCon("\r\n AND Erase");
-   }
-   else WriteCon("\r\nPrepare Sectors ERROR");  
-SystemInit1(); 
-Gyro.FlashMod = 0;
-//boot_jump(addres); 
-  }
-    
-    
-    
-  
-  /*
-#define IAP_STA_CMD_SUCCESS                                 0
-#define IAP_STA_INVALID_COMMAND                             1
-#define IAP_STA_SRC_ADDR_ERROR                              2
-#define IAP_STA_DST_ADDR_ERROR                              3
-#define IAP_STA_SRC_ADDR_NOT_MAPPED                         4
-#define IAP_STA_DST_ADDR_NOT_MAPPED                         5
-#define IAP_STA_COUNT_ERROR                                 6
-#define IAP_STA_INVALID_SECTOR                              7
-#define IAP_STA_SECTOR_NOT_BLANK                            8
-#define IAP_STA_SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION     9
-#define IAP_STA_COMPARE_ERROR                               10
-#define IAP_STA_BUSY                                        11
-#define IAP_STA_INVALD_PARAM                                12
-*/  
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-if(Gyro.FlashMod == 3)			
-    {
- 
- ReadFlash();
-  //  SystemInitDef();
-//  *status=(unsigned int*)addres;
-    /*NVIC_DisableIRQ(TIMER1_IRQn);
-    NVIC_DisableIRQ(TIMER2_IRQn);
- 	NVIC_DisableIRQ(TIMER3_IRQn);
- 	NVIC_DisableIRQ(EINT3_IRQn);*/
-    Gyro.FlashMod = 0;
-//     memdump(addres,4);
-//     addres+=0x10;
-//    p   = (unsigned int *)((unsigned int)base & ~(unsigned int)0x3);
-   // WriteCon(*addres);
-  //      status=*addres;
-   // SystemInit1();  
-    //  WriteCon(status);  
-   //   addres+=0x10;
-   
-    }
-
-
-
-
-}//while
+ }
 }//main
 
 /******************************************************************************