Dmitry Kovalev / Mbed 2 deprecated LGstaandart

Dependencies:   mbed

Fork of LG2 by Dmitry Kovalev

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MTimer.c Source File

MTimer.c

00001 #include "MTimer.h"
00002 #include "LPC17xx.h"
00003 #include "MTimer.h"
00004 #include "vibro.h"
00005 #include "QEI.h"
00006 #include "Global.h"
00007 #include "SPI.h"
00008 #include "InputOutput.h"
00009 
00010 unsigned int CountV64=0;
00011 unsigned int CountV31=0;
00012 unsigned int CountV255=0;
00013 unsigned int CountV511=0;
00014 unsigned int f,MODCount=0;
00015 int loop=0;
00016 int t;
00017 /////////////////////////////////////////////////////
00018 /////////////////////EVENT///////////////////////////
00019 /////////////////////////////////////////////////////
00020 /////////////////////////////////////////////////////
00021 ///////////////////// 1250Hz ///////////////////////////
00022 /////////////////////////////////////////////////////
00023 void Event_1250Hz(void)// событие раз в 1,25 КГц
00024 {
00025     if(Event1250Hz)
00026     {
00027         Gyro.EvenRate7=1;
00028     
00029         Event1250Hz--;
00030 
00031     }
00032 }
00033 
00034 
00035 
00036 
00037 void JumpMod(void)
00038 {
00039     static int JumpFlag=0;
00040     switch(JumpFlag) {
00041         case 0:
00042             Spi.DAC_B-=Gyro.JumpDelta;
00043             JumpFlag=1;
00044         break;
00045         case 1:
00046             Spi.DAC_B+=Gyro.JumpDelta;
00047             JumpFlag=0;
00048         break;
00049         }
00050     
00051 }
00052 
00053 
00054 /////////////////////////////////////////////////////
00055 ///////////////////// 1Hz ///////////////////////////
00056 /////////////////////////////////////////////////////
00057 
00058 void Event_1Hz(void)// событие раз в 1 Гц
00059 { 
00060     static int tempdac=0,tempdac1,JumpTimer=0;
00061     if (Event1Hz)   
00062     {
00063      
00064 
00065      
00066      if(Gyro.RgConA&0x4) JumpTimer=0;
00067      else
00068         {   
00069         /*sprintf((Time),"%d %d\r\n",Gyro.RgConA,JumpTimer);
00070         WriteCon(Time);*/
00071          JumpTimer++;
00072          if(JumpTimer>(Gyro.TimeToJump-1))
00073             {
00074             Gyro.PLCDelay   = GyroP.Str.PLCDelay; 
00075             JumpMod();
00076             JumpTimer=0;
00077             }
00078         }
00079      
00080      
00081 
00082       Discharg();
00083       BackLight();
00084       Gyro.Rate1_Event = 1; 
00085       Event1Hz--;
00086       Time1Hz++; 
00087      sprintf((Time),"%d \r\n",GyroP.Str.GLD_Serial );
00088      WriteCon(Time);
00089     }
00090 }
00091 
00092 /////////////////////////////////////////////////////
00093 ///////////////////// 1kHz //////////////////////////
00094 /////////////////////////////////////////////////////
00095 void Event_1KHz(void)// событие раз в 1 кГц
00096 {     if (Event1K) 
00097     {
00098        if(Gyro.PLCDelay) Gyro.PLCDelay--;
00099         Event1K --;
00100 
00101         Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
00102         if (Time1K > 1000) 
00103         {
00104             Time1K -=1000;
00105             Event1Hz ++;
00106         }
00107         
00108     }
00109 }
00110 
00111 void Event_5KHz(void)// событие раз в 5 кГц
00112 {
00113     int temp=0;
00114     if (Event5K) 
00115     {   
00116         Gyro.EvenRate5K++;
00117         Event5K --;
00118     }
00119 }
00120 void Event_500Hz(void)// событие раз в 500 Гц
00121 {
00122     if(Event500Hz)
00123     {   
00124         if(Gyro.Debag2)
00125         {
00126             sprintf((Time),"%d   %d   %d\r\n", (0xffff-Spi.DAC_A),  ((Spi.DAC_B-0x7fff)&0xffff), BuffADC_128Point[CountV64]);
00127             WriteCon(Time);  
00128      
00129         }
00130      Event500Hz--;
00131      Gyro.Event_500Hz=1;// Event 500Гц  выдачи данных для постройки графика управления вибро
00132     }
00133 }
00134 void Event_250Hz(void)
00135 {
00136     if(Event250Hz)
00137     {        
00138       
00139     // Gyro.CuruAngle=0;
00140       Event250Hz--;
00141       MODCount++;
00142       }
00143 }
00144 /////////////////////////////////////////////////////
00145 ///////////////////// 100kHz //////////////////////////
00146 /////////////////////////////////////////////////////
00147 void Event_100KHz(void)// событие раз в 100 кГц
00148 {
00149         
00150     if (Event100K)  {
00151        
00152         Event100K --;
00153       
00154         if (OutBufCon1Count)OutBufCon1Count--;  // обратный отсчет для управления ногой и формирование задержки на выдачу
00155        
00156          PinCheng();    // чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
00157     }
00158 }
00159 /////////////////////////////////////////////////////
00160 //////////////////vibro EVENT////////////////////////
00161 /////////////////////////////////////////////////////
00162 void Event_Vibro(void)// событие от вибр
00163 {
00164     if (EventVibro) {
00165         EventVibro --;
00166     }
00167 }
00168 /////////////////////////////////////////////////////
00169 /////////////////////////////////////////////////////
00170 /////////////////////////////////////////////////////
00171 
00172 
00173 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00174 ////////////////////////////////////////////////////////TIMER1////////////////////////////////////////////////////////////////////////////
00175 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00176 
00177 //////////////////////////////////////////////////////////////////////
00178 /////////////////////инициализация таймера 1 /////////////////////////
00179 //////////////////////////////////////////////////////////////////////
00180 
00181 unsigned int Init_TIM1 (unsigned int TimerInterval )
00182 {
00183    // LPC_SC->PCLKSEL0 |= (1<<4);
00184    
00185     LPC_TIM1->MR0 = TimerInterval;
00186     LPC_TIM1->MCR = 3;              /* Interrupt and Reset on MR1 */
00187     NVIC_EnableIRQ(TIMER1_IRQn );
00188 }
00189 
00190 
00191 //////////////////////////////////////////////////////////////////////
00192 /////////////////////////включение таймера 1//////////////////////////
00193 //////////////////////////////////////////////////////////////////////
00194 void enable_timer1( void )
00195 {
00196     LPC_TIM1->TCR = 1;
00197     return;
00198 }
00199 
00200 
00201 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00202 /////////////////////////////////////////////////TIMER2//////////////////////////////////////////////////////////////////////////////////
00203 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
00204 
00205 //////////////////////////////////////////////////////////////////////
00206 /////////////////////инициализация таймера 2 /////////////////////////
00207 //////////////////////////////////////////////////////////////////////
00208 unsigned int Init_TIM2 (void)
00209 {
00210     LPC_TIM2->MR0 = 257;
00211     LPC_TIM2->MCR = 3;              /* Interrupt and Reset on MR0 */
00212     NVIC_EnableIRQ(TIMER2_IRQn );
00213     return 1;
00214 }
00215 
00216 //////////////////////////////////////////////////////////////////////
00217 /////////////////////////включение таймера 2//////////////////////////
00218 //////////////////////////////////////////////////////////////////////
00219 void enable_timer2(void)
00220 {
00221     LPC_TIM2->TCR = 1;
00222     LPC_TIM2->TCR = 0x01;
00223 }
00224 
00225 
00226 //////////////////////////////////////////////////////////////////////
00227 /////////////////////////прерывание таймера 1//////////////////////////
00228 //////////////////////////////////////////////////////////////////////
00229 __irq void TIMER1_IRQHandler (void)//13.27 kHz(vibro*32)
00230 {   
00231 
00232     ResetCS(ADC);                           //prepare ADC for sampling
00233     SetDAC(DAC);
00234     Global_Time++;
00235     CountV255++;                            // инкремент счеттчика
00236     CountV511++;
00237     CountV255 &= 0xff;                      // ОБРЕЗАНИЕ СЧЕТЧИКА 
00238     CountV511 &= 0x1ff;
00239     CountV64 = CountV255 & 0x3f;
00240     CountV31 = CountV255 & 0x1f;            // малый счетчик
00241    
00242     D_QEI();                                //чтение данных по счетчику
00243     cheng();                                // выставление флагов в 32 тактном цикле.
00244 
00245 
00246     SetCS(ADC);                             //start ADC sampling
00247     ResetDAC(DAC);
00248     SPI_Exchange();                         //Чтение ADC_SPI
00249 
00250     LPC_TIM1->IR = 1;   
00251     
00252 }
00253 
00254 ///////////////////////////////////////////////////////////////////////
00255 /////////////////////////прерывание таймера 2//////////////////////////
00256 ///////////////////////////////////////////////////////////////////////
00257 __irq void TIMER2_IRQHandler (void)
00258 {   
00259    /// LoopOn
00260     LPC_TIM2->IR = 1;
00261     if (Gyro.UARTFlag)
00262         {
00263          if(Time_UART) Time_UART--;
00264         }
00265     //   
00266 
00267     Time_vibro++;
00268    // VibroOut();
00269     Gyro.VibroOutF=1;
00270     Event100K ++; 
00271     Time1250Hz++; 
00272     Time500Hz++;
00273     Time250Hz++;
00274     Time100K++;
00275     Time5K++;
00276     //Time2K++;
00277  //   Time250Hz++;
00278  
00279         if (Time1250Hz > 79)
00280          {  
00281             Time1250Hz -= 80;
00282             Event1250Hz ++;
00283          }
00284         if (Time100K == 100)
00285          { // LoopOn
00286             Time100K = 0;
00287             Event1K ++;
00288              // LoopOn
00289          }
00290          
00291          if (Time5K > 200000)
00292          {  Time5K = 0;
00293             if(Gyro.Debag)
00294             {   
00295              for(int q=0; q<64; q++)
00296                 {   
00297                 sprintf((Time),"%i   \r\n", ModArraySin [q]);
00298                 WriteCon(Time);
00299                 }
00300             }
00301             Event5K ++;
00302          }
00303          
00304         if (Time500Hz > 200) 
00305          { // LoopOn
00306             Time500Hz -= 200;
00307             Event500Hz ++;     
00308          }
00309          
00310            if (Time250Hz > 6) 
00311          { // LoopOn
00312             Time250Hz -= 6;
00313             Event250Hz ++;     
00314          }
00315    
00316     //LoopOff
00317 }