fork

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Kovalev_D
Date:
Wed Jul 26 13:24:39 2017 +0000
Revision:
213:9953db9543d6
Parent:
211:ac8251b067d2
Child:
214:4c70e452c491
work

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