fork

Dependencies:   mbed

Fork of LG by igor Apu

main.c

Committer:
Kovalev_D
Date:
2016-04-08
Revision:
124:9ae09249f842
Parent:
122:fbacb932a30b
Child:
127:6a7472d67804

File content as of revision 124:9ae09249f842:

//ssdfwewedfsfds
/****************************************Copyright (c)****************************************************
**--------------File Info---------------------------------------------------------------------------------
** File name:           main.c
** Last modified Date:  2011-10-24
** Last Version:        V1.00
** Descriptions:        The main() function
**
**--------------------------------------------------------------------------------------------------------
** Created by:          Electrooptica Incorp.
** Created date:        2011-08-22
** Version:             V1.00
** Descriptions:
**--------------------------------------------------------------------------------------------------------
последнии изменения
//2016_02_03_17_47
//2016_02_06 igor
//2016_06 Dima
//2016_02_06 21:20 Kovalev_D
*********************************************************************************************************/


#include "Global.h"
//#include <math.h>
#include "Device.h"

/******************************************************************************
**   Main Function  main()
******************************************************************************/
Device device; //Single global for all device hardware-independent algorithm

extern uint32_t CMD_Mode;
unsigned int  secPuls;
float DACF, K_DAC;
int tempAMP;
int main (void)
{
int ttemp;
unsigned int TempA;

    //DMA_Init();               // Инициализация DMA не используем
    //DACInit();                // инициализация ЦАП.
    //UART_DMA_Init();			//инициализация DMA для UART.//не используем
    //WDTInit();
  //  G_Photo_Init();				      //инициализация интерфейса I2C для фотодетектора.
    //инициализация



    SystemInit1();  // Инициализация контроллера: установка тактовых частот
    FlashDMA_Init(); 		  // Загрузка параметров с флэш
    SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz

    GLD_Init();
    ///////////старый UART
//    UARTInit();				  // инициализация  UART0 на скорость 38400.
//    UART1_Init();             // инициализация  UART1 на скорость 38400.


    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_Znak = 10;

    while ( 1 ) { //основной цикл.
  
     	G_Photo_Exchange();	
        Concol ();				// Проврка 0 консоли  (вход и выход)
        Concol1 ();		        // Проврка 0 консоли  (вход и выход)
        Read_CMD();	
        if (OutBufConCount)  OutBufConCount--;
        if (OutBufCon1Count)  OutBufCon1Count--;
        
        if (ReadCon (Time)) {

            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)," <%07d>   <%07d>",Gyro.F_ras,Param2);
                WriteCon(Time);
            }   
          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] == 'c') {		// выдача технологическая
                sprintf(Time,"\r\n");
                WriteCon(Time);
                sprintf((Time)," <%07d> <%07d> <%07d> <%07d>", Gyro.F_ras,Gyro.F_ras/16, Gyro.Cnt_Pls, Gyro.Cnt_Mns);
                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);
  //         	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] == '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");
                  }
       
            }
           
            
        }
        
     // Read_CMD();
//ДИМА== посмотри пожалуйста нармално ли работуют все таймеры аппаратные и програмные, то есть нет ли где затыком по времени
// с помошью ссветодиода например помаргай в разные временна, почему в режиме "рейт" передача от гироскопа идет с разной частотой
// попробуй сделать "рейт M4" посмотри в протоколе как вклбчается и на кокой скорости работает
       
          
        Event_100KHz();
        Event_1KHz();
        Event_500Hz();
        Event_1Hz();
        
        Event_Vibro();
        
	 switch(Gyro.ModeOut) {
     case 1:
            if(Gyro.Rate1_Event==1)CMD_Rate();
     break;  
     case 2:
            if(Gyro.Rate2_Event==1)CMD_Rate2();
     break;   
     case 3:
            if(Gyro.Delta500_Event==1)CMD_Delta_500Hz();
     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
    }


}//while
}  //main

/******************************************************************************
**                            End Of File
******************************************************************************/