forkd

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

MTimer.c

Committer:
Kovalev_D
Date:
2016-11-18
Revision:
202:c03b7b128e11
Parent:
201:76f4123bf22a

File content as of revision 202:c03b7b128e11:

#include "MTimer.h"
#include "LPC17xx.h"
#include "MTimer.h"
#include "vibro.h"
#include "QEI.h"
#include "Global.h"
#include "SPI.h"
#include "InputOutput.h"

unsigned int CountV64=0;
unsigned int CountV31=0;
unsigned int CountV255=0;
unsigned int f,f1;
int Timee=0;
/////////////////////////////////////////////////////
/////////////////////EVENT///////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
///////////////////// 1Hz ///////////////////////////
/////////////////////////////////////////////////////
void Event_1Hz(void)// событие раз в 1 Гц
{   
    if (Event1Hz)	
    { 
    Event1Hz--;
     // BackLightON
      Timee++;
      switch(Gyro.LogPLC) { case 0:   ShowMod();    break;   }
       Gyro.Rate1_Event = 1; 
       
       Time1Hz++;
       Discharg ();
       BackLight();
    
  //    BackLightOFF
      }
}
/////////////////////////////////////////////////////
///////////////////// 1kHz //////////////////////////
/////////////////////////////////////////////////////
void Event_1KHz(void)// событие раз в 1 кГц
{
    if (Event1K) 
    {
        
        Event1K --;
        Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
        if(Gyro.Start) Gyro.Start--;
      // if(Gyro.Start==6999)   AVibON;
       if (Time1K > 100) 
        {
            Time1K -=100;
            Event1Hz ++;
        }
    }
}
void Event_500Hz(void)// событие раз в 500 Гц
{
	if(Event500Hz)
	{//   
	    Event500Hz--;
		Gyro.Event_500Hz=1;// Event 500Гц  выдачи данных для постройки графика управления вибро
	//	
	}
}


void Event_250Hz(void)// событие раз в 200 Гц(модулятор)
{
	if(Event250Hz)
	{ //  
	   Event250Hz--;
	 /*  sprintf((Time),"%d %d %d   %d %d\r\n",Gyro.AD_Slow, Gyro.CuruAngle, Gyro.Termo, ADCDIF>>9, Spi.DAC_B);
	   WriteCon(Time);*/
	 //   Gyro.EventMOD=1;// 
	//    
	}
}
 /**/
/////////////////////////////////////////////////////
///////////////////// 100kHz //////////////////////////
/////////////////////////////////////////////////////
void Event_100KHz(void)// событие раз в 100 кГц
{
        
    if (Event100K)	{
       
        Event100K --;
      
        if (OutBufCon1Count)OutBufCon1Count--;  // обратный отсчет для управления ногой и формирование задержки на выдачу
        Time100K++;
        if(Time100K==998){Event1K=1;Time100K-=998;}
    //    PinCheng();	// чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
    //   
    }
}
/////////////////////////////////////////////////////
//////////////////vibro EVENT////////////////////////
/////////////////////////////////////////////////////
void Event_Vibro(void)// событие от вибр
{
    if (EventVibro)	{
        EventVibro --;
    }
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////


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

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

unsigned int Init_TIM1 (unsigned int TimerInterval )
{
    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 = 259;
 LPC_TIM2->MR0 = 159;
    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;
}
/*
unsigned int Init_TIM0 (void)
{
    LPC_TIM0->MR0 =180;
    LPC_TIM0->MCR = 3;				
    NVIC_EnableIRQ(TIMER0_IRQn);
    return 1;
}*/
/*
void enable_timer0(void)
{
    //LPC_SC->PCONP |= (1<<23);
    LPC_TIM0->TCR = 1;
    LPC_TIM0->TCR = 0x01;
   
}*/

//////////////////////////////////////////////////////////////////////
/////////////////////////прерывание таймера 1//////////////////////////
//////////////////////////////////////////////////////////////////////
__irq void TIMER1_IRQHandler (void)//13.27 kHz
{   // 	
   // BackLightON
    ResetCS(ADC);					  	 	//prepare ADC for sampling
    SetDAC(DAC);
 
    CountV255++;							// инкремент счеттчика
    CountV255 &= 0xff;						// ОБРЕЗАНИЕ СЧЕТЧИКА 
    CountV64 = CountV255 & 0x3f;
    CountV31 = CountV255 & 0x1f;			// малый счетчик
   
    SetCS(ADC);					    		//start ADC sampling
    ResetDAC(DAC);
    SPI_Exchange();
    
    D_QEI();								//чтение данных по счетчику
    cheng();		             			// выставление флагов в 32 тактном цикле.


						//Чтение ADC_SPI

    LPC_TIM1->IR = 1;
     
       // 
 //BackLightOFF   
}

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

 Time_vibro++;  
   
       if(CountV31>=16) 
      {//первая нога вибро
         // левая граница вЫкл вибро 1 > Time_vibro <ПРАВАЯ  граница вЫкл вибро 1
        if((Time_vibro==Gyro.AmpN1))	
        {
           SetV1//установить в регистре PinReg бит "вибро 1" в "0"
        } 
        else if(Time_vibro>Gyro.AmpN2)
        {
           ClrV1 //установить в регистре PinReg бит "вибро 1" в "1"
        }
      }
    else 
    {//вторая нога вибро
        if((Time_vibro==Gyro.AmpN1))	
        {
          SetV2 //установить в регистре PinReg бит "вибро 2" в "0"
        } 
       else if(Time_vibro>Gyro.AmpN2)
        {
          ClrV2//установить в регистре PinReg бит "вибро 2" в "1"
        }
    }         
 /*           
VibroOut();
PinCheng();	*/


 LoopOff  
    LPC_TIM2->IR = 1;
  Global_Time++;
    if(Time_UART) Time_UART--;
  
  Gyro.VibroOutF=1;
    Event100K ++;  
    Time500Hz++;
   // Time100K++;
    Time250Hz++;
      
       /*if (Time500Hz > 200) 
         { // 
            Time500Hz -= 200;
            Event500Hz ++; 
       //      
         }
        if (Time250Hz > 1198) 
         { //
            Time250Hz -=1198;
            Event250Hz ++;
           // 
         }*/
 //
         
     
         
}
/*__irq void TIMER0_IRQHandler (void)
{ 
 LPC_TIM0->IR = 1;
}*/