forkd

Dependencies:   mbed

Fork of LGstaandart by Dmitry Kovalev

MTimer.c

Committer:
Kovalev_D
Date:
2018-01-31
Revision:
232:130a2b5003e6
Parent:
231:079835d508ef

File content as of revision 232:130a2b5003e6:

#include "MTimer.h"
#include "LPC17xx.h"
#include "MTimer.h"
#include "vibro.h"
#include "QEI.h"
#include "Global.h"
#include "string.h"
#include "SPI.h"
#include "InputOutput.h"
#include "time.h"
//#define		HALFINT		16384
unsigned int CountV64=0;
unsigned int CountV31=0;
unsigned int CountV255=0;
unsigned int CountV511=0;
unsigned int f;
int loop=0;
int t;
float aPLC[5];
float bPLC[5];
/////////////////////////////////////////////////////
/////////////////////EVENT///////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
///////////////////// 1250Hz ///////////////////////////
/////////////////////////////////////////////////////
void Event_1250Hz(void)// событие раз в 1,25 КГц
{
	if(Event1250Hz)
	{
	
		Gyro.EvenRate7=1;


		Event1250Hz--;

	}
}




void JumpMod(void)
{
	static int JumpFlag=0;
	switch(JumpFlag) {
	    case 0:
	    	Spi.DAC_B-=Gyro.JumpDelta;
		    JumpFlag=1;
	    break;
	    case 1:
	        Spi.DAC_B+=Gyro.JumpDelta;
		  	JumpFlag=0;
	    break;
	    }
	
}


/////////////////////////////////////////////////////
///////////////////// 1Hz ///////////////////////////
/////////////////////////////////////////////////////
/*int InitPlcFilt ( void )
{
  
   int CenterFreq = 12800;
   int BandWidth = 50;
  float K, R, Cos_x_2, R_x_R;
  float pi =  3.1415;

  R = 1.0 - 3.0 * BandWidth;
  R_x_R = R * R;
  Cos_x_2 = cos(2.0 * pi * CenterFreq) * 2.0;
  K = (1.0 - R * Cos_x_2 + R_x_R)/(2.0 - Cos_x_2);
  
   aPLC[0] = ((1.0 - K));
   aPLC[1] = (((K - R) * Cos_x_2));
   aPLC[2] = ((R_x_R - K));
   
   bPLC[0] = 0;
   bPLC[1] = ((R * Cos_x_2));
   bPLC[2] = ((- R_x_R));
   
              for(int q=0; q<3; q++)
            		{
                	sprintf((Time),"%f    %f\r\n", aPLC[q],bPLC[q]);
        			WriteCon(Time);
            		}
            		return 0;
     	
}*/




void Event_1Hz(void)// событие раз в 1 Гц
{ 
    static int OldTermoMod;
	static int tempdac=0,tempdac1,JumpTimer=0;
	
    if (Event1Hz)	
    {
   TempClac();
   

     TermoCopensRecalc(Spi.ADC1, Spi.ADC2, 10000);
     PlcWormDeltaout=0;

        if(Gyro.RgConA&0x4) JumpTimer=0;
        else
     	{   
     	 JumpTimer++;
    	 if(JumpTimer>(Gyro.TimeToJump-1))
     		{
     		//Gyro.PLCDelay = GyroP.Str.PLCDelay; 
     		JumpMod();
     		JumpTimer=0;
    	 	}
    	 	
     	}     

      Discharg();
      BackLight();
      Gyro.Rate1_Event = 1; 
      Event1Hz--;
      Time1Hz++; 
    }
}

/////////////////////////////////////////////////////
///////////////////// 1kHz //////////////////////////
/////////////////////////////////////////////////////
void Event_1KHz(void)// событие раз в 1 кГц
{     if (Event1K) 
    {
       if(Gyro.PLCDelay) Gyro.PLCDelay--;
        Event1K --;

        Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
        if (Time1K > 1007) 
        {
            Time1K =0;
            Event1Hz ++;
        }
         
    }
}

void Event_10KHz(void)// событие раз в 5 кГц
{
	int temp=0;
    if (Event10K) 
    {   
       // Gyro.EvenRate10K++;
        Event10K --;
    }
}
void Event_500Hz(void)// событие раз в 500 Гц
{
	if(Event500Hz)
	{   
		
	 Event500Hz--;
	 Gyro.Event_500Hz=1;// Event 500Гц  выдачи данных для постройки графика управления вибро
	}
}
void Event_250Hz(void)
{
	if(Event250Hz)
	{        
      
    // Gyro.CuruAngle=0;
	  Event250Hz--;

	  }
}
/////////////////////////////////////////////////////
///////////////////// 100kHz //////////////////////////
/////////////////////////////////////////////////////
void Event_100KHz(void)// событие раз в 100 кГц
{
        
    if (Event100K)	{
       
        Event100K --;
      
        if (OutBufCon1Count)OutBufCon1Count--;  // обратный отсчет для управления ногой и формирование задержки на выдачу
       
         PinCheng();	// чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
    }
}
/////////////////////////////////////////////////////
//////////////////vibro EVENT////////////////////////
/////////////////////////////////////////////////////
void Event_Vibro(void)// событие от вибр
{
    if (EventVibro)	{
        EventVibro --;
    }
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////TIMER1////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
/////////////////////инициализация таймера 1 /////////////////////////
//////////////////////////////////////////////////////////////////////

unsigned int Init_TIM1 (unsigned int TimerInterval )
{
   // LPC_SC->PCLKSEL0 |= (1<<4);
   
    LPC_TIM1->MR0 = TimerInterval;
    LPC_TIM1->MCR = 3;				/* Interrupt and Reset on MR1 */
    NVIC_EnableIRQ(TIMER1_IRQn);
}


//////////////////////////////////////////////////////////////////////
/////////////////////////включение таймера 1//////////////////////////
//////////////////////////////////////////////////////////////////////
void enable_timer1( void )
{
    LPC_TIM1->TCR = 1;
    return;
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////TIMER2//////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
/////////////////////инициализация таймера 2 /////////////////////////
//////////////////////////////////////////////////////////////////////
unsigned int Init_TIM2 (void)
{
    LPC_TIM2->MR0 = 257;
    LPC_TIM2->MCR = 3;				/* Interrupt and Reset on MR0 */
    NVIC_EnableIRQ(TIMER2_IRQn);
    return 1;
}

//////////////////////////////////////////////////////////////////////
/////////////////////////включение таймера 2//////////////////////////
//////////////////////////////////////////////////////////////////////
void enable_timer2(void)
{
    LPC_TIM2->TCR = 1;
    LPC_TIM2->TCR = 0x01;
}


//////////////////////////////////////////////////////////////////////
/////////////////////////прерывание таймера 1//////////////////////////
//////////////////////////////////////////////////////////////////////
__irq void TIMER1_IRQHandler (void)//13.27 kHz(vibro*32)
{   

    ResetCS(ADC);					  	 	//prepare ADC for sampling
    SetDAC(DAC);
    Global_Time++;
    CountV255++;							// инкремент счеттчика
    CountV511++;
    CountV255 &= 0xff;						// ОБРЕЗАНИЕ СЧЕТЧИКА 
    CountV511 &= 0x1ff;
    CountV64 = CountV255 & 0x3f;
    CountV31 = CountV255 & 0x1f;			// малый счетчик
   
    D_QEI();								//чтение данных по счетчику
    cheng();		             			// выставление флагов в 32 тактном цикле.


    SetCS(ADC);					    		//start ADC sampling
    ResetDAC(DAC);
	SPI_Exchange(); 						//Чтение ADC_SPI

    LPC_TIM1->IR = 1;   
 
}

///////////////////////////////////////////////////////////////////////
/////////////////////////прерывание таймера 2//////////////////////////
///////////////////////////////////////////////////////////////////////
__irq void TIMER2_IRQHandler (void)
{ 

    LPC_TIM2->IR = 1;
	if (Gyro.UARTFlag)
		{
   		 if(Time_UART) Time_UART--;
   		}
   	//	 

    Time_vibro++;
   // VibroOut();
    Gyro.VibroOutF=1;
    Event100K ++; 
    Time1250Hz++; 
    Time500Hz++;
    Time250Hz++;
    Time100K++;
    Time10K++;
    //Time2K++;
 //   Time250Hz++;
 
        if (Time1250Hz > 1000)
         {  
            Time1250Hz -= 1000;
            Event1250Hz ++;
         }
        if (Time100K == 89)
         { 
         
            Time100K -= 89;
            Event1K ++;
            
         }
         
         if (Time10K > 8)
         { 
       

            Time10K = 0;
         
         
            Event10K ++;
        
         }
         
        if (Time500Hz > 180) 
         { // LoopOn

            Time500Hz -= 180;
            Event500Hz ++;   
  
         }
}