Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG2 by
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 }
Generated on Thu Jul 14 2022 02:34:42 by
1.7.2
