fork

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Kovalev_D
Date:
Wed Aug 16 09:00:25 2017 +0000
Revision:
214:4c70e452c491
Parent:
213:9953db9543d6
Child:
215:b58b887fd367
fdxcz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igor_v 0:8ad47e2b6f00 1 #include "MTimer.h"
igor_v 0:8ad47e2b6f00 2 #include "LPC17xx.h"
igor_v 0:8ad47e2b6f00 3 #include "MTimer.h"
igor_v 0:8ad47e2b6f00 4 #include "vibro.h"
igor_v 0:8ad47e2b6f00 5 #include "QEI.h"
igor_v 0:8ad47e2b6f00 6 #include "Global.h"
igor_v 0:8ad47e2b6f00 7 #include "SPI.h"
igor_v 0:8ad47e2b6f00 8 #include "InputOutput.h"
Kovalev_D 112:4a96133a1311 9
Kovalev_D 197:7a05523bf588 10 unsigned int CountV64=0;
igor_v 0:8ad47e2b6f00 11 unsigned int CountV31=0;
Kovalev_D 197:7a05523bf588 12 unsigned int CountV255=0;
Kovalev_D 209:224e7331a061 13 unsigned int f,MODCount=0;
Kovalev_D 124:9ae09249f842 14 int loop=0;
Kovalev_D 208:19150d2b528f 15 int t;
Kovalev_D 88:b5c1d9d338d1 16 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 17 /////////////////////EVENT///////////////////////////
Kovalev_D 88:b5c1d9d338d1 18 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 19 /////////////////////////////////////////////////////
Kovalev_D 214:4c70e452c491 20 ///////////////////// 1250Hz ///////////////////////////
Kovalev_D 214:4c70e452c491 21 /////////////////////////////////////////////////////
Kovalev_D 214:4c70e452c491 22 void Event_1250Hz(void)// событие раз в 1,25 КГц
Kovalev_D 214:4c70e452c491 23 {
Kovalev_D 214:4c70e452c491 24 if(Event1250Hz)
Kovalev_D 214:4c70e452c491 25 {
Kovalev_D 214:4c70e452c491 26 Gyro.EvenRate7=1;
Kovalev_D 214:4c70e452c491 27 LoopOn
Kovalev_D 214:4c70e452c491 28 LoopOn
Kovalev_D 214:4c70e452c491 29 LoopOn
Kovalev_D 214:4c70e452c491 30 LoopOn
Kovalev_D 214:4c70e452c491 31 Event1250Hz--;
Kovalev_D 214:4c70e452c491 32 LoopOff
Kovalev_D 214:4c70e452c491 33 }
Kovalev_D 214:4c70e452c491 34 }
Kovalev_D 214:4c70e452c491 35 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 36 ///////////////////// 1Hz ///////////////////////////
Kovalev_D 89:a0d344db227e 37 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 38 void Event_1Hz(void)// событие раз в 1 Гц
Kovalev_D 214:4c70e452c491 39 { static int tempdac=0,tempdac1;
Kovalev_D 115:e5a230e5af52 40 if (Event1Hz)
Kovalev_D 208:19150d2b528f 41 {
Kovalev_D 214:4c70e452c491 42 /* Check(BuffTemp, 8);
Kovalev_D 214:4c70e452c491 43 WriteConN (BuffTemp,8);*/
Kovalev_D 214:4c70e452c491 44
Kovalev_D 214:4c70e452c491 45 /* sprintf((Time)," %d %d \r\n", Spi.DAC_A,Gyro.DacIn);
Kovalev_D 214:4c70e452c491 46 WriteCon(Time);*/
Kovalev_D 213:9953db9543d6 47 if(Gyro.LogMod==1) ShowMod2();
Kovalev_D 208:19150d2b528f 48 Discharg();
Kovalev_D 208:19150d2b528f 49 BackLight();
Kovalev_D 208:19150d2b528f 50 Gyro.Rate1_Event = 1;
Kovalev_D 208:19150d2b528f 51 Event1Hz--;
Kovalev_D 208:19150d2b528f 52 Time1Hz++;
Kovalev_D 214:4c70e452c491 53 // sprintf((Time),"%d \r\n",Gyro.ModeOut );
Kovalev_D 214:4c70e452c491 54 // WriteCon(Time);
Kovalev_D 214:4c70e452c491 55
Kovalev_D 214:4c70e452c491 56 }
Kovalev_D 88:b5c1d9d338d1 57 }
Kovalev_D 89:a0d344db227e 58 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 59 ///////////////////// 1kHz //////////////////////////
Kovalev_D 197:7a05523bf588 60 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 61 void Event_1KHz(void)// событие раз в 1 кГц
Kovalev_D 214:4c70e452c491 62 { if (Event1K)
Kovalev_D 116:66f1f0ff2dab 63 {
Kovalev_D 214:4c70e452c491 64 if(Gyro.PLCDelay) Gyro.PLCDelay--;
Kovalev_D 88:b5c1d9d338d1 65 Event1K --;
Kovalev_D 214:4c70e452c491 66
Kovalev_D 116:66f1f0ff2dab 67 Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
Kovalev_D 209:224e7331a061 68 if (Time1K > 1000)
Kovalev_D 115:e5a230e5af52 69 {
Kovalev_D 208:19150d2b528f 70 Time1K -=1000;
Kovalev_D 88:b5c1d9d338d1 71 Event1Hz ++;
Kovalev_D 88:b5c1d9d338d1 72 }
Kovalev_D 209:224e7331a061 73
Kovalev_D 214:4c70e452c491 74 }
Kovalev_D 88:b5c1d9d338d1 75 }
Kovalev_D 209:224e7331a061 76
Kovalev_D 209:224e7331a061 77 void Event_2KHz(void)// событие раз в 1 кГц
Kovalev_D 214:4c70e452c491 78 {int temp=0;
Kovalev_D 214:4c70e452c491 79
Kovalev_D 209:224e7331a061 80 if (Event2K)
Kovalev_D 213:9953db9543d6 81 { if(Gyro.LogMod==2)
Kovalev_D 214:4c70e452c491 82 { temp=((((Spi.DAC_A/0.6667) - 30000))-0x7fff);
Kovalev_D 214:4c70e452c491 83 sprintf((Time),"%i %d %i %f %i %d \r\n", (Spi.DAC_B - 0x7fff), Gyro.LG_Type, Spi.DAC_A ,(Spi.DAC_A/0.6667),temp, Gyro.PLC_Eror_count );
Kovalev_D 213:9953db9543d6 84 WriteCon(Time);
Kovalev_D 214:4c70e452c491 85 Gyro.PLC_Eror_count=0;
Kovalev_D 214:4c70e452c491 86 Gyro.LG_Type=1;
Kovalev_D 214:4c70e452c491 87
Kovalev_D 213:9953db9543d6 88 }
Kovalev_D 209:224e7331a061 89 Event2K --;
Kovalev_D 209:224e7331a061 90 Gyro.Rate3_Event++;
Kovalev_D 209:224e7331a061 91 }
Kovalev_D 209:224e7331a061 92 }
Kovalev_D 124:9ae09249f842 93 void Event_500Hz(void)// событие раз в 500 Гц
Kovalev_D 124:9ae09249f842 94 {
Kovalev_D 124:9ae09249f842 95 if(Event500Hz)
Kovalev_D 211:ac8251b067d2 96 {
Kovalev_D 213:9953db9543d6 97
Kovalev_D 205:775d54fdf646 98 Event500Hz--;
Kovalev_D 208:19150d2b528f 99 Gyro.Event_500Hz=1;// Event 500Гц выдачи данных для постройки графика управления вибро
Kovalev_D 197:7a05523bf588 100 }
Kovalev_D 197:7a05523bf588 101 }
Kovalev_D 209:224e7331a061 102 void Event_250Hz(void)
Kovalev_D 209:224e7331a061 103 {
Kovalev_D 209:224e7331a061 104 if(Event250Hz)
Kovalev_D 209:224e7331a061 105 {
Kovalev_D 209:224e7331a061 106
Kovalev_D 209:224e7331a061 107 // Gyro.CuruAngle=0;
Kovalev_D 209:224e7331a061 108 Event250Hz--;
Kovalev_D 209:224e7331a061 109 MODCount++;
Kovalev_D 209:224e7331a061 110 if((MODCount&0x3f)==0)
Kovalev_D 209:224e7331a061 111 {/*
Kovalev_D 209:224e7331a061 112 sprintf((Time),"%d %d %d\r\n", Spi.DAC_B, (0xffff - Spi.ADC5), Gyro.CuruAngle);
Kovalev_D 209:224e7331a061 113 WriteCon(Time);
Kovalev_D 209:224e7331a061 114 Gyro.CuruAngle = 0;
Kovalev_D 209:224e7331a061 115 Gyro.CaunMinRate = 0;
Kovalev_D 209:224e7331a061 116 Gyro.CaunPlusRate = 0;
Kovalev_D 209:224e7331a061 117 */
Kovalev_D 209:224e7331a061 118 }
Kovalev_D 209:224e7331a061 119 if(MODFlag==2)
Kovalev_D 209:224e7331a061 120 {
Kovalev_D 214:4c70e452c491 121 /* BuffADC_64Point[MODCount&0x3f]=ADC5New;*/
Kovalev_D 209:224e7331a061 122 LPC_DAC->DACR = (ModArraySin[MODCount&0x3f] * Gyro.ModAmp);
Kovalev_D 209:224e7331a061 123
Kovalev_D 209:224e7331a061 124 if((MODCount&0x3f)==0) PLCRegul250();
Kovalev_D 209:224e7331a061 125 }
Kovalev_D 209:224e7331a061 126 }
Kovalev_D 209:224e7331a061 127 }
Kovalev_D 89:a0d344db227e 128 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 129 ///////////////////// 100kHz //////////////////////////
Kovalev_D 89:a0d344db227e 130 /////////////////////////////////////////////////////
Kovalev_D 193:a0fe8bfc97e4 131 void Event_100KHz(void)// событие раз в 100 кГц
Kovalev_D 88:b5c1d9d338d1 132 {
Kovalev_D 162:44e4ded32c6a 133
Kovalev_D 88:b5c1d9d338d1 134 if (Event100K) {
Kovalev_D 197:7a05523bf588 135
Kovalev_D 88:b5c1d9d338d1 136 Event100K --;
Kovalev_D 197:7a05523bf588 137
Kovalev_D 124:9ae09249f842 138 if (OutBufCon1Count)OutBufCon1Count--; // обратный отсчет для управления ногой и формирование задержки на выдачу
Kovalev_D 124:9ae09249f842 139
Kovalev_D 124:9ae09249f842 140 PinCheng(); // чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
Kovalev_D 88:b5c1d9d338d1 141 }
Kovalev_D 88:b5c1d9d338d1 142 }
Kovalev_D 89:a0d344db227e 143 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 144 //////////////////vibro EVENT////////////////////////
Kovalev_D 89:a0d344db227e 145 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 146 void Event_Vibro(void)// событие от вибр
Kovalev_D 88:b5c1d9d338d1 147 {
Kovalev_D 88:b5c1d9d338d1 148 if (EventVibro) {
Kovalev_D 88:b5c1d9d338d1 149 EventVibro --;
Kovalev_D 88:b5c1d9d338d1 150 }
Kovalev_D 88:b5c1d9d338d1 151 }
Kovalev_D 89:a0d344db227e 152 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 153 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 154 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 155
Kovalev_D 88:b5c1d9d338d1 156
Kovalev_D 112:4a96133a1311 157 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 158 ////////////////////////////////////////////////////////TIMER1////////////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 159 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 160
Kovalev_D 112:4a96133a1311 161 //////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 162 /////////////////////инициализация таймера 1 /////////////////////////
Kovalev_D 112:4a96133a1311 163 //////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 164
Kovalev_D 112:4a96133a1311 165 unsigned int Init_TIM1 (unsigned int TimerInterval )
Kovalev_D 112:4a96133a1311 166 {
Kovalev_D 214:4c70e452c491 167 // LPC_SC->PCLKSEL0 |= (1<<4);
Kovalev_D 112:4a96133a1311 168 LPC_TIM1->MR0 = TimerInterval;
Kovalev_D 112:4a96133a1311 169 LPC_TIM1->MCR = 3; /* Interrupt and Reset on MR1 */
Kovalev_D 112:4a96133a1311 170 NVIC_EnableIRQ(TIMER1_IRQn);
Kovalev_D 112:4a96133a1311 171 }
Kovalev_D 112:4a96133a1311 172
Kovalev_D 112:4a96133a1311 173
igor_v 0:8ad47e2b6f00 174 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 175 /////////////////////////включение таймера 1//////////////////////////
igor_v 0:8ad47e2b6f00 176 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 177 void enable_timer1( void )
igor_v 21:bc8c1cec3da6 178 {
igor_v 21:bc8c1cec3da6 179 LPC_TIM1->TCR = 1;
igor_v 21:bc8c1cec3da6 180 return;
igor_v 21:bc8c1cec3da6 181 }
igor_v 0:8ad47e2b6f00 182
igor_v 0:8ad47e2b6f00 183
igor_v 0:8ad47e2b6f00 184 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
igor_v 0:8ad47e2b6f00 185 /////////////////////////////////////////////////TIMER2//////////////////////////////////////////////////////////////////////////////////
igor_v 0:8ad47e2b6f00 186 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 187
igor_v 0:8ad47e2b6f00 188 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 189 /////////////////////инициализация таймера 2 /////////////////////////
igor_v 0:8ad47e2b6f00 190 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 191 unsigned int Init_TIM2 (void)
igor_v 21:bc8c1cec3da6 192 {
Kovalev_D 124:9ae09249f842 193 LPC_TIM2->MR0 = 257;
igor_v 21:bc8c1cec3da6 194 LPC_TIM2->MCR = 3; /* Interrupt and Reset on MR0 */
igor_v 21:bc8c1cec3da6 195 NVIC_EnableIRQ(TIMER2_IRQn);
igor_v 21:bc8c1cec3da6 196 return 1;
igor_v 21:bc8c1cec3da6 197 }
igor_v 0:8ad47e2b6f00 198
igor_v 21:bc8c1cec3da6 199 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 200 /////////////////////////включение таймера 2//////////////////////////
igor_v 21:bc8c1cec3da6 201 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 202 void enable_timer2(void)
igor_v 21:bc8c1cec3da6 203 {
igor_v 21:bc8c1cec3da6 204 LPC_TIM2->TCR = 1;
igor_v 21:bc8c1cec3da6 205 LPC_TIM2->TCR = 0x01;
igor_v 21:bc8c1cec3da6 206 }
igor_v 21:bc8c1cec3da6 207
igor_v 21:bc8c1cec3da6 208
Kovalev_D 112:4a96133a1311 209 //////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 210 /////////////////////////прерывание таймера 1//////////////////////////
Kovalev_D 112:4a96133a1311 211 //////////////////////////////////////////////////////////////////////
Kovalev_D 183:7e200f4d9b16 212 __irq void TIMER1_IRQHandler (void)//13.27 kHz
Kovalev_D 205:775d54fdf646 213 {
Kovalev_D 208:19150d2b528f 214
Kovalev_D 208:19150d2b528f 215
igor_v 114:5cc38a53d8a7 216 ResetCS(ADC); //prepare ADC for sampling
Kovalev_D 112:4a96133a1311 217 SetDAC(DAC);
Kovalev_D 208:19150d2b528f 218 Global_Time++;
igor_v 114:5cc38a53d8a7 219 CountV255++; // инкремент счеттчика
Kovalev_D 164:6f43f85fdd8d 220 CountV255 &= 0xff; // ОБРЕЗАНИЕ СЧЕТЧИКА
Kovalev_D 197:7a05523bf588 221 CountV64 = CountV255 & 0x3f;
Kovalev_D 197:7a05523bf588 222 CountV31 = CountV255 & 0x1f; // малый счетчик
Kovalev_D 197:7a05523bf588 223
Kovalev_D 112:4a96133a1311 224 D_QEI(); //чтение данных по счетчику
Kovalev_D 143:2b15794a6cd2 225 cheng(); // выставление флагов в 32 тактном цикле.
Kovalev_D 116:66f1f0ff2dab 226
Kovalev_D 116:66f1f0ff2dab 227
Kovalev_D 116:66f1f0ff2dab 228 SetCS(ADC); //start ADC sampling
Kovalev_D 116:66f1f0ff2dab 229 ResetDAC(DAC);
Kovalev_D 197:7a05523bf588 230 SPI_Exchange(); //Чтение ADC_SPI
igor_v 114:5cc38a53d8a7 231
Kovalev_D 214:4c70e452c491 232 LPC_TIM1->IR = 1;
Kovalev_D 208:19150d2b528f 233
Kovalev_D 112:4a96133a1311 234 }
Kovalev_D 112:4a96133a1311 235
igor_v 21:bc8c1cec3da6 236 ///////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 237 /////////////////////////прерывание таймера 2//////////////////////////
igor_v 21:bc8c1cec3da6 238 ///////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 239 __irq void TIMER2_IRQHandler (void)
Kovalev_D 210:b02fa166315d 240 {
Kovalev_D 213:9953db9543d6 241 /// LoopOn
igor_v 21:bc8c1cec3da6 242 LPC_TIM2->IR = 1;
Kovalev_D 213:9953db9543d6 243 if (Gyro.UARTFlag)
Kovalev_D 213:9953db9543d6 244 {
Kovalev_D 213:9953db9543d6 245 if(Time_UART) Time_UART--;
Kovalev_D 213:9953db9543d6 246 }
Kovalev_D 214:4c70e452c491 247 //
Kovalev_D 214:4c70e452c491 248
igor_v 21:bc8c1cec3da6 249 Time_vibro++;
Kovalev_D 214:4c70e452c491 250 // VibroOut();
Kovalev_D 112:4a96133a1311 251 Gyro.VibroOutF=1;
Kovalev_D 214:4c70e452c491 252 Event100K ++;
Kovalev_D 214:4c70e452c491 253 Time1250Hz++;
Kovalev_D 197:7a05523bf588 254 Time500Hz++;
Kovalev_D 209:224e7331a061 255 Time250Hz++;
Kovalev_D 197:7a05523bf588 256 Time100K++;
Kovalev_D 209:224e7331a061 257 Time2K++;
Kovalev_D 209:224e7331a061 258 //Time2K++;
Kovalev_D 205:775d54fdf646 259 // Time250Hz++;
Kovalev_D 214:4c70e452c491 260
Kovalev_D 214:4c70e452c491 261 if (Time1250Hz > 79)
Kovalev_D 214:4c70e452c491 262 {
Kovalev_D 214:4c70e452c491 263 Time1250Hz -= 80;
Kovalev_D 214:4c70e452c491 264 Event1250Hz ++;
Kovalev_D 214:4c70e452c491 265 }
Kovalev_D 197:7a05523bf588 266 if (Time100K == 100)
Kovalev_D 214:4c70e452c491 267 { // LoopOn
Kovalev_D 197:7a05523bf588 268 Time100K = 0;
Kovalev_D 197:7a05523bf588 269 Event1K ++;
Kovalev_D 214:4c70e452c491 270 // LoopOn
Kovalev_D 197:7a05523bf588 271 }
Kovalev_D 209:224e7331a061 272
Kovalev_D 213:9953db9543d6 273 if (Time2K== 2000)
Kovalev_D 209:224e7331a061 274 { Time2K=0;
Kovalev_D 209:224e7331a061 275 //Time100K = 0;
Kovalev_D 209:224e7331a061 276 Event2K ++;
Kovalev_D 209:224e7331a061 277 }
Kovalev_D 209:224e7331a061 278
Kovalev_D 197:7a05523bf588 279 if (Time500Hz > 200)
Kovalev_D 208:19150d2b528f 280 { // LoopOn
Kovalev_D 197:7a05523bf588 281 Time500Hz -= 200;
Kovalev_D 208:19150d2b528f 282 Event500Hz ++;
Kovalev_D 197:7a05523bf588 283 }
Kovalev_D 209:224e7331a061 284
Kovalev_D 209:224e7331a061 285 if (Time250Hz > 6)
Kovalev_D 209:224e7331a061 286 { // LoopOn
Kovalev_D 209:224e7331a061 287 Time250Hz -= 6;
Kovalev_D 209:224e7331a061 288 Event250Hz ++;
Kovalev_D 209:224e7331a061 289 }
Kovalev_D 210:b02fa166315d 290
Kovalev_D 213:9953db9543d6 291 //LoopOff
igor_v 21:bc8c1cec3da6 292 }