fork

Dependencies:   mbed

Fork of LG by igor Apu

main.c

Committer:
igor_v
Date:
2016-02-11
Revision:
51:81f47b817071
Parent:
50:0e3d47f18a50
Child:
52:30f2e52a493f

File content as of revision 51:81f47b817071:

//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>


/******************************************************************************
**   Main Function  main()
******************************************************************************/
extern uint32_t CMD_Mode;




//int 		y = 0;
unsigned int  secPuls,CountBI,CmmandIn,tt,th;









int flag=0,  TIME=0,t=0, Sec=0,tmpSec=0,SEC=0, mSec=0;
int tempsec=0;
float DACF, K_DAC;





int main (void)
{



    Gyro.SOC_Out=0xDD;		
    Gyro.Firmware_Version	=0x15; //версия программы
    Gyro.GLD_Serial 		= 0x20; //серийный номер
    Gyro.My_Addres			= 0; //адрес глд
    
    
    
    K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2));
    K_DAC=0.8;


    Gyro.Discharg = 0x7;  // инициализация время поджига    3 сек  (в событии 1HZ)
    Gyro.BackLight=0x3ff;// инициализация время подсветки 10 сек  (в событии 1HZ)
    secPuls =0;
    Pulse_midl = 0;
    PulseHalf = 0;
    CuruAngle = 0;
    Spi.DAC_A = 0x7fff;
    Spi.DAC_B = 0x7fff;
    //инициализация
    SystemInit1();  // Инициализация контроллера: установка тактовых частот
 
 
    Init_Pin();

    ///*












    //DMA_Init();               // Инициализация DMA не используем
    FlashDMA_Init(); 		  // Загрузка параметров с флэш

    SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz

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


    DAC_ADC_Exchange_Init();  // инициализация  обмена АЦП и ЦАП.
    DACInit();                // инициализация ЦАП.
    SOI_Init(); 			  // Инициализация квадратурного энкодера.

    IntLatch_Init();		  // инициализация внутренней защелки.
    ExtLatch_Init();		  // инициализация внешней защелки.





    LoadFlashParam(FromFLASH); 	//загрузка параметров.
    //UART_DMA_Init();			    	//инициализация DMA для UART.//не используем
    G_Photo_Init();				      //инициализация интерфейса I2C для фотодетектора.
    Out_G_photo(60, 60);        //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины.
//  WDTInit();


    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)

    init_Vibro();
    init_timer(TIME_INTERVAL ); //Timer 1: CCLK / 7812 = 12800.819Hz; Vibro: Timer1/32 = 400.025Hz; 10ms???
    enable_timer1();
    Init_TIM2();				//Timer 2: CCLK / 4 / 250 = 100kHz
    enable_timer2();
    close_all_loops();


    LPC_GPIO0->FIOCLR = (1<<5);					


    Event1Hz	= 0;
    Event1K 	= 0;
    Event100K 	= 0;
    EventVibro 	= 0;
    Time1K 		= 0;
    Time100K	= 0;
    Time1Hz		= 0;
    Clock1Hz	= 0;
    Gyro.Discharg = StartDischarg;
    Gyro.BackLight = StartBackLight;

    Pulse_8Point = 0;
    Pulse_16Point = 0;
    Pulse_32Point = 0;

    Temp_AMP=0;
    Temp_ADC_2=0;
    Temp_ADC_3=0;
    Temp_ADC_4=0;
    Temp_ADC_5=0;


    for (int i = 0; i < 16; i++ ) {
        Buff_ADC_1[i] 		= 0;	// ампл ацп.
        Buff_ADC_2[i] 		= 0;
        Buff_ADC_3[i] 		= 0;
        Buff_ADC_4[i] 		= 0;
        Buff_ADC_5[i] 		= 0;
    }
   for (int i = 0; i < 32; i++ ) {

        Buff_16Point[i] 	= 0x00;
        Buff_8Point[i] 		= 0x00;
        Buff_32Point[i] 	= 0x00;
        Buff_16PointD[i] 	= 0x00;
    }





    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);



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


        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.",Clock1Hz,Time1K,Time100K);                 //Временно выдачпа временни из трех чисел
                WriteCon(Time);
        
            }
        
        	if (Time[0] == 'D'){Gyro.Discharg = StartDischarg;}	
        	if (Time[0] == 'L'){Gyro.BackLight = StartBackLight;}
			if (Time[0] == '1'){sprintf(Time,"\r\n");for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_32Point[i]); WriteCon(Time);} // выдача технологическая      

  
  



        }
   			
        if (OutBufCon1Count)  OutBufCon1Count--;
        if (Event1Hz)	{// событие раз в 1 Гц
        Event1Hz--;
	    Clock1Hz++;
//============================= блок управления поджигом, сделанно через сдвиг======================
            if (Gyro.Discharg) {	//Проверка поджига
                Gyro.Discharg = Gyro.Discharg >> 1;
                if (Gyro.Discharg & 0x01) Gyro.PinReg |= PinRegBitD;
                else Gyro.PinReg &= ~PinRegBitD;
                
            }
//============================= блок управления подсветкой, сделанно через сдвиг======================
            if (Gyro.BackLight) {	//Проверка подсветки
            	Gyro.BackLight = Gyro.BackLight >> 1;
                if (Gyro.BackLight & 0x01) Gyro.PinReg |= PinRegBitL;
                else Gyro.PinReg &= ~PinRegBitL;
                
            }
           // CMD_Rate();
         //   WriteCon(".");				//Так просто выдавать в секунду 1 байт ,что гирос жив
  /*
                for (y = 0; y < 32; y++ ){
                sprintf(Time,"  <%05d>  ",Buff_32Point[y]);
                }sprintf(Time,"\r\n");
                WriteCon(Time);*/
                           
        }
              
                
                
                 
               
        if (Event1K)	{// событие раз в 1 кГц
            Event1K --;
            Time1K++;
            if (Time1K == 1000) {
                Time1K = 0;
                Event1Hz ++;

            }

        }
        if (Event100K)	{			// событие раз в 100 кГц
            Event100K --;
            Time100K++;
      
            PinCheng();			// чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
        	if (OutBufCon1Count)  OutBufCon1Count--;	// обратный отсчет для управления ногой и формирование задержки на выдачу
	        if (Time100K == 100) {
                Time100K = 0;
                Event1K ++;
            }
        }
        if (EventVibro)	{// событие от вибр
            EventVibro --;
        }
        Read_CMD();

//	VibroOut();

        if(Time_1kHz>100) {

            SEC++;
            if(Rate_Flag==1 && SEC>500) {
                SEC-=500;
//                CMD_Rate();
            }

            Time_1kHz-=100;




        }
        ButtonLightUP();
        //Device_blk.Str.
//       TakeFromBuff();

         // paramV=TakeParam(1);


        
    }		    // main infinie loop
}

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