forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

main.c

Committer:
igor_v
Date:
2016-02-06
Revision:
37:bdd52117b56e
Parent:
36:65c171b56105
Child:
38:716472a4492e

File content as of revision 37:bdd52117b56e:

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


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



/******************************************************************************
**   Main Function  main()
******************************************************************************/
extern uint32_t CMD_Mode;
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
int i1 =0;
volatile unsigned int 	IRQ_Counter=0;
volatile uint32_t 		timer1_counter = 0;
int temp111=0,temp=0;
int y = 0;
int CuruAngleOld=0;
unsigned int  secPuls,CountBI,CmmandIn,tt,th;

unsigned int paramV;
void Led_init()
{
    LPC_PINCON->PINSEL0 = (0x00<<28);
    LPC_GPIO1->FIODIR   = (0x1<<30);
    LPC_PINCON->PINMODE0 = (0x3<<28);
    // LPC_GPIO1->FIOSET = (0x0<<30);
    // LPC_GPIO0->FIOSET = (1<<4);
}

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

void Led_Blink()
{
    if (flag == 0) {
        LPC_GPIO1->FIOSET = (0x1<<30);
        flag=1;
    } else {
        flag =0;
        LPC_GPIO1->FIOCLR = (0x01<<30);
    }
}

long LED_TEMP=0;




int main (void)
{
    K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2));
    K_DAC=0.8;

    Gyro.Firmware_Version	=0x15;
    Gyro.GLD_Serial 		= 0x20;
    Gyro.My_Addres			= 0;

    secPuls =0;
    Pulse_midl = 0;
    PulseHalf = 0;
    CuruAngle = 0;
    Spi.DAC_A = 0x7fff;
    Spi.DAC_B = 0x7fff;
    //инициализация
    SystemInit();  // Инициализация системы
    Led_init();

    ///*
    //Конфигурирование сигнала поджига
    LPC_PINCON->PINSEL0 &= ~(3<<8);		//e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0    выбор P0.4 как GPIO)
    LPC_PINCON->PINMODE0 |= (3<<8);		//e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0  "для включения подтягивающего резистора")
    LPC_GPIO0->FIODIR   |= (1<<4);		//e. P0.4 is output   (запись ( 1 ) в  5  бит FIODIR    выбор P0.4 как выход)
    LightUpON		//e. P0.4 is output   (запись ( 1 ) в  5  бит CLR       устанавливаем на P0.4 низкий уровень сигнала)
    /*
    LPC_PINCON->PINSEL0 &= ~(3<<10);		//e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0    выбор P0.4 как GPIO)
    LPC_PINCON->PINMODE0 |= (3<<10);		//e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0  "для включения подтягивающего резистора")
    LPC_GPIO0->FIODIR   |= (1<<5);		//e. P0.4 is output   (запись ( 1 ) в  5  бит FIODIR    выбор P0.4 как выход)
    LPC_GPIO0->FIOCLR   |= (1<<5);		//e. P0.4 is output   (запись ( 1 ) в  5  бит CLR       устанавливаем на P0.4 низкий уровень сигнала)*/

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    LPC_PINCON->PINSEL3   = (0x00<<18);		//e. P1.25 is GPIO pin
    LPC_PINCON->PINMODE3 |= (3<<18);		//e. P1.25  (включениe подтягивающего резистора")
    LPC_GPIO1->FIODIR    |= (1<<25);		//e. P0.5 is output   (запись ( 1 ) в  5  бит FIODIR    выбор P0.5 как выход)
    LPC_GPIO1->FIOCLR    |= (1<<25);


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    LPC_PINCON->PINSEL3   = (0x00<<24);		//e. P1.28 is GPIO pin
    LPC_PINCON->PINMODE3 |= (3<<24);		//e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0  "для включения подтягивающего резистора")
    LPC_GPIO1->FIODIR    |= (1<<28);		//e. P1.28 is output   (запись ( 1 ) в  5  бит FIODIR    выбор P0.5 как выход)
    LPC_GPIO1->FIOCLR    |= (1<<28);
//  init_timer(TIME_INTERVAL ); // 10ms
// enable_timer1();
///иНИциализация подсветки
    LPC_PINCON->PINSEL2   = (0x00<<24);		//e. P2.12 is GPIO pin
    LPC_PINCON->PINMODE3 |= (3<<24);		//e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0  "для включения подтягивающего резистора")
    LPC_GPIO2->FIODIR    |= (1<<12);		//e. P1.28 is output   (запись ( 1 ) в  5  бит FIODIR    выбор P0.5 как выход)
    LPC_GPIO2->FIOCLR    |= (1<<12);

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /*
      //конфигурирование сигнала поджига оторваная нога (поджиг на 80 ноге вместо 81)
      LPC_PINCON->PINSEL0   = (0x00<<10);		//e. P0.5 is GPIO pin (запись ( 00 ) в 11:10 бит PISEL0    выбор P0.5 как GPIO)
      LPC_PINCON->PINMODE0 |= (3<<10);		//e. P0.5 is GPIO pin (запись ( 11 ) в 11:10 бит PINMODE0  "для включения подтягивающего резистора")
      LPC_GPIO0->FIODIR    |= (1<<5);		//e. P0.5 is output   (запись ( 1 ) в  5  бит FIODIR    выбор P0.5 как выход)
      LPC_GPIO0->FIOCLR    |= (1<<5);		//e. P0.5 is output   (запись ( 1 ) в  5  бит CLR       устанавливаем на P0.5 низкий уровень сигнала)
    	*/
    DMA_Init();           // Инициализация DMA
    FlashDMA_Init(); 			// Загрузка параметров с флэш

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


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

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

//----------------debug-------------------------
    //LPC_GPIO2->FIODIR = 0x5C;		// P2.0...P2.7 defined as Outputs
    //LPC_GPIO2->FIOCLR = 0x5C;		// turn off all the LEDs
//----------------debug-------------------------



    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 ); // 10ms
    enable_timer1();
    Init_TIM2();
    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;
 
    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 (y = 0; y < 256; y++ ) {
        Buff_16Point[y] 	= 0xffff;
        Buff_8Point[y] 		= 0xffff;
        Buff_32Point[y] 	= 0xffff;
        Buff_ADC_1[y] 		= 0;	// ампл ацп.
        Buff_ADC_2[y] 		= 0;
        Buff_ADC_3[y] 		= 0;
        Buff_ADC_4[y] 		= 0;
        Buff_ADC_5[y] 		= 0;
    }
   	WriteCon("\n\r ...GL start programm uart 0.... ");
    sprintf(Time,"\r\nCompiled: %s %s.",__DATE__,  __TIME__ );                 //Подготовка даты и времени компиляции
    WriteCon(Time);



    do { //основной цикл.
        Concol ();					// Проврка 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 (Event1Hz)	{// событие раз в 1 Гц
            Event1Hz --;
            Clock1Hz++;

//============================= блок управления поджигом и подсветкой, сделанно через сдвиг======================
            if (Gyro.Discharg){	//Проверка поджига
	               if (Gyro.Discharg & 0x01) Gyro.PinReg |= PinRegBitD; else Gyro.PinReg &= ~PinRegBitD;
                Gyro.Discharg = Gyro.Discharg >> 1;
            }
 

        }
        if (Event1K)	{// событие раз в 1 кГц
            Event1K --;
            Time1K++;
            if (Time1K == 1000) {
                Time1K = 0;
                Event1Hz ++;

            }
        }
        if (Event100K)	{// событие раз в 100 кГц
            Event100K --;
            Time100K++;
            if (Time100K == 100) {
                Time100K = 0;
                Event1K ++;
            }
        }
        if (EventVibro)	{// событие от вибр
            EventVibro --;
        }




        //  Concol1 ();
        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);



        if (LPC_PWM1->IR & 0x0001) { // Если в регистре прерываний ШИМ1 (регистр PWM1IR) есть влаг прерывания совпадения счетчика с МАТСН (lim0 ?) то:

            /*	ResetCS(ADC);					  	//prepare ADC for sampling
            	SetDAC(DAC);
                LPC_GPIO2->FIOSET |= 0x0000004;			// turn on the LED
                LPC_GPIO2->FIOSET |= 0x0000004;			// turn on the LED
                LPC_GPIO2->FIOSET |= 0x0000004;			// turn on the LED
            	SetCS(ADC);					    	//start ADC sampling
            	ResetDAC(DAC);  	    			//start DAC prepearing for writing
            */
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            secPuls++;
            tmpSec++;
            mSec++;

            i1++;
            if(i1>10000)
                //if(CountV31>30)
            {
                WriteCon(".");
                i1=0;
                /*
                SendToBuffStr("\n\r");
                //	if (Buff_ADC_1	[y] > 65535)SendToBuffStr(" 0 "); else SendToBuffStr(" 1 ");
                sprintf (BuffTemp,"<%05d> <%05d> <%05d> <%05d> <%05d>", Temp_AMP>>5,Temp_ADC_2>>5,Temp_ADC_3>>5,Temp_ADC_4>>5,Temp_ADC_5>>5);
                // sprintf (BuffTemp,"<%07d> <%07d> <%07d> <%07d> <%07d>", Spi.ADC1,Spi.ADC2,Spi.ADC3,Spi.ADC4,Spi.ADC5);
                	SendToBuffStr(BuffTemp);
                */
                /*
                WriteConByte (Gyro.T_Vib&0xff00);
                WriteConByte (Gyro.T_Vib&0x00ff);
                WriteConByte (Gyro.T_Vib);
                */
                /*

                for (y = 0; y < 32; y++ )
                			{

                		  	 WriteCon(BuffTemp);
                			}	WriteCon("\n\r");

                */
                /*
                Gyro.T_Vib=((7680000*16/Gyro.Frq)*4096);
                         th=   Gyro.T_Vib&0xff00;
                         tt=   Gyro.T_Vib&0x00ff;
                            sprintf(BuffTemp,"<%07d  >",( (Gyro.T_Vib&0xff00)));
                						SendToBuffStr(BuffTemp);

                						sprintf(BuffTemp,"<%07d  >",( ( Gyro.T_Vib&0x00ff)));
                						SendToBuffStr(BuffTemp);

                						CuruAngleOld=CuruAngle;*/
                // Spi.ADC1=Spi.ADC1*0.000061;




                /*

                   	sprintf(BuffTemp,"\n\r<%05d><%05d><%05d><%05d><%05d>",Spi.ADC1,Spi.ADC2,Spi.ADC3,Spi.ADC4,Spi.ADC5);
                SendToBuffStr(BuffTemp);

                */

                /*	sprintf(BuffTemp,"<%d>",(FrecTemp));
                	SendToBuffStr(BuffTemp);
                for (y = 0; y < 32; y++ )
                {
                sprintf(BuffTemp,"   <%07d>", (Buff_16PointD [y]-65535));
                SendToBuffStr(BuffTemp);
                }		*/

            }








//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




            LPC_GPIO2->FIOSET |= 0x0000004;		// turn on the LED


            Curr_Cnt_Vib = LPC_QEI->POS;		// записать в переменную	Curr_Cnt_Vib текущее положение Энкодера.	(текущее количество импульсов)
            Latch_Event(); //определение защелки

            clc_Pulses(); // счетчик импульсов. RATE_REPER_OR_REFMEANDR или RATE_VIBRO_1


            //ADC_Input();  // проверка флагов заполнения буфера и четение Thermo1, Thermo2, HF_out в масив  Input.ArrayIn[n].
            //DAC_ADC_Exchange();//  проверка флагов заполнения буфера и зпись в ЦАПы.
            ServiceTime();//секундный таймер.
            clc_ThermoSensors();//расчет средней температуры за секунду
            clc_HFO(); //расчет значения для передачи в контур ГВЧ(на цап).

            clc_PLC();
            //	clc_Dith_regulator();
            clc_OutFreq_regulator();
            Output.Str.WP_sin = clc_WP_sin();
            contrl_GLD();
            G_Photo_Exchange();
            //  Output.Str.T_Vibro = paramV*48;


            Line_1_Rcv();
            decode_CMD();
            transm_DAT();
            //îòêëþ÷åíèå ïîäæèãà.


//			data_Rdy &= ~RESET_PERIOD;


            LPC_PWM1->IR = 0x0001;				 //e. clear interrupt flag
            LPC_GPIO2->FIOCLR |= 0x0000004;		// turn off the LED

//		WDTFeed();
//SPI_Exchange();

        }

    }	while ( 1 );	    // main infinie loop
}

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