fork

Dependencies:   mbed

Fork of LG by igor Apu

Committer:
Kovalev_D
Date:
Tue Feb 07 10:11:35 2017 +0000
Revision:
208:19150d2b528f
Parent:
207:d1ce992f5d17
Child:
209:224e7331a061
465

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 197:7a05523bf588 13 unsigned int f;
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 208:19150d2b528f 23 {
Kovalev_D 115:e5a230e5af52 24 if (Event1Hz)
Kovalev_D 208:19150d2b528f 25 {
Kovalev_D 208:19150d2b528f 26 /*if(i) {LoopOn i=0;}
Kovalev_D 208:19150d2b528f 27 else {LoopOff i=1;}*/
Kovalev_D 208:19150d2b528f 28 Discharg();
Kovalev_D 208:19150d2b528f 29 BackLight();
Kovalev_D 208:19150d2b528f 30 Gyro.Rate1_Event = 1;
Kovalev_D 208:19150d2b528f 31 Event1Hz--;
Kovalev_D 208:19150d2b528f 32 Time1Hz++;
Kovalev_D 203:3a6615de9581 33
Kovalev_D 196:f76dbc081e63 34 }
Kovalev_D 88:b5c1d9d338d1 35 }
Kovalev_D 89:a0d344db227e 36 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 37 ///////////////////// 1kHz //////////////////////////
Kovalev_D 197:7a05523bf588 38 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 39 void Event_1KHz(void)// событие раз в 1 кГц
Kovalev_D 88:b5c1d9d338d1 40 {
Kovalev_D 116:66f1f0ff2dab 41 if (Event1K)
Kovalev_D 116:66f1f0ff2dab 42 {
Kovalev_D 208:19150d2b528f 43
Kovalev_D 88:b5c1d9d338d1 44 Event1K --;
Kovalev_D 116:66f1f0ff2dab 45 Time1K++;//первый ++ работает каждые 125 (event100kHz)второй был в 100 кГц
Kovalev_D 116:66f1f0ff2dab 46 if (Time1K == 1000)
Kovalev_D 115:e5a230e5af52 47 {
Kovalev_D 208:19150d2b528f 48 Time1K -=1000;
Kovalev_D 88:b5c1d9d338d1 49 Event1Hz ++;
Kovalev_D 88:b5c1d9d338d1 50 }
Kovalev_D 208:19150d2b528f 51 }
Kovalev_D 88:b5c1d9d338d1 52 }
Kovalev_D 124:9ae09249f842 53 void Event_500Hz(void)// событие раз в 500 Гц
Kovalev_D 124:9ae09249f842 54 {
Kovalev_D 124:9ae09249f842 55 if(Event500Hz)
Kovalev_D 205:775d54fdf646 56 {
Kovalev_D 205:775d54fdf646 57 Event500Hz--;
Kovalev_D 208:19150d2b528f 58 Gyro.Event_500Hz=1;// Event 500Гц выдачи данных для постройки графика управления вибро
Kovalev_D 197:7a05523bf588 59 }
Kovalev_D 197:7a05523bf588 60 }
Kovalev_D 89:a0d344db227e 61 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 62 ///////////////////// 100kHz //////////////////////////
Kovalev_D 89:a0d344db227e 63 /////////////////////////////////////////////////////
Kovalev_D 193:a0fe8bfc97e4 64 void Event_100KHz(void)// событие раз в 100 кГц
Kovalev_D 88:b5c1d9d338d1 65 {
Kovalev_D 162:44e4ded32c6a 66
Kovalev_D 88:b5c1d9d338d1 67 if (Event100K) {
Kovalev_D 197:7a05523bf588 68
Kovalev_D 88:b5c1d9d338d1 69 Event100K --;
Kovalev_D 197:7a05523bf588 70
Kovalev_D 124:9ae09249f842 71 if (OutBufCon1Count)OutBufCon1Count--; // обратный отсчет для управления ногой и формирование задержки на выдачу
Kovalev_D 124:9ae09249f842 72
Kovalev_D 124:9ae09249f842 73 PinCheng(); // чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами.
Kovalev_D 88:b5c1d9d338d1 74 }
Kovalev_D 88:b5c1d9d338d1 75 }
Kovalev_D 89:a0d344db227e 76 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 77 //////////////////vibro EVENT////////////////////////
Kovalev_D 89:a0d344db227e 78 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 79 void Event_Vibro(void)// событие от вибр
Kovalev_D 88:b5c1d9d338d1 80 {
Kovalev_D 88:b5c1d9d338d1 81 if (EventVibro) {
Kovalev_D 88:b5c1d9d338d1 82 EventVibro --;
Kovalev_D 88:b5c1d9d338d1 83 }
Kovalev_D 88:b5c1d9d338d1 84 }
Kovalev_D 89:a0d344db227e 85 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 86 /////////////////////////////////////////////////////
Kovalev_D 89:a0d344db227e 87 /////////////////////////////////////////////////////
Kovalev_D 88:b5c1d9d338d1 88
Kovalev_D 88:b5c1d9d338d1 89
Kovalev_D 112:4a96133a1311 90 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 91 ////////////////////////////////////////////////////////TIMER1////////////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 92 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 93
Kovalev_D 112:4a96133a1311 94 //////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 95 /////////////////////инициализация таймера 1 /////////////////////////
Kovalev_D 112:4a96133a1311 96 //////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 97
Kovalev_D 112:4a96133a1311 98 unsigned int Init_TIM1 (unsigned int TimerInterval )
Kovalev_D 112:4a96133a1311 99 {
Kovalev_D 112:4a96133a1311 100 LPC_TIM1->MR0 = TimerInterval;
Kovalev_D 112:4a96133a1311 101 LPC_TIM1->MCR = 3; /* Interrupt and Reset on MR1 */
Kovalev_D 112:4a96133a1311 102 NVIC_EnableIRQ(TIMER1_IRQn);
Kovalev_D 112:4a96133a1311 103 }
Kovalev_D 112:4a96133a1311 104
Kovalev_D 112:4a96133a1311 105
igor_v 0:8ad47e2b6f00 106 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 107 /////////////////////////включение таймера 1//////////////////////////
igor_v 0:8ad47e2b6f00 108 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 109 void enable_timer1( void )
igor_v 21:bc8c1cec3da6 110 {
igor_v 21:bc8c1cec3da6 111 LPC_TIM1->TCR = 1;
igor_v 21:bc8c1cec3da6 112 return;
igor_v 21:bc8c1cec3da6 113 }
igor_v 0:8ad47e2b6f00 114
igor_v 0:8ad47e2b6f00 115
igor_v 0:8ad47e2b6f00 116 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
igor_v 0:8ad47e2b6f00 117 /////////////////////////////////////////////////TIMER2//////////////////////////////////////////////////////////////////////////////////
igor_v 0:8ad47e2b6f00 118 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 119
igor_v 0:8ad47e2b6f00 120 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 121 /////////////////////инициализация таймера 2 /////////////////////////
igor_v 0:8ad47e2b6f00 122 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 123 unsigned int Init_TIM2 (void)
igor_v 21:bc8c1cec3da6 124 {
Kovalev_D 124:9ae09249f842 125 LPC_TIM2->MR0 = 257;
igor_v 21:bc8c1cec3da6 126 LPC_TIM2->MCR = 3; /* Interrupt and Reset on MR0 */
igor_v 21:bc8c1cec3da6 127 NVIC_EnableIRQ(TIMER2_IRQn);
igor_v 21:bc8c1cec3da6 128 return 1;
igor_v 21:bc8c1cec3da6 129 }
igor_v 0:8ad47e2b6f00 130
igor_v 21:bc8c1cec3da6 131 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 132 /////////////////////////включение таймера 2//////////////////////////
igor_v 21:bc8c1cec3da6 133 //////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 134 void enable_timer2(void)
igor_v 21:bc8c1cec3da6 135 {
igor_v 21:bc8c1cec3da6 136 LPC_TIM2->TCR = 1;
igor_v 21:bc8c1cec3da6 137 LPC_TIM2->TCR = 0x01;
igor_v 21:bc8c1cec3da6 138 }
igor_v 21:bc8c1cec3da6 139
igor_v 21:bc8c1cec3da6 140
Kovalev_D 112:4a96133a1311 141 //////////////////////////////////////////////////////////////////////
Kovalev_D 112:4a96133a1311 142 /////////////////////////прерывание таймера 1//////////////////////////
Kovalev_D 112:4a96133a1311 143 //////////////////////////////////////////////////////////////////////
Kovalev_D 183:7e200f4d9b16 144 __irq void TIMER1_IRQHandler (void)//13.27 kHz
Kovalev_D 205:775d54fdf646 145 {
Kovalev_D 208:19150d2b528f 146
Kovalev_D 208:19150d2b528f 147
igor_v 114:5cc38a53d8a7 148 ResetCS(ADC); //prepare ADC for sampling
Kovalev_D 112:4a96133a1311 149 SetDAC(DAC);
Kovalev_D 208:19150d2b528f 150 Global_Time++;
igor_v 114:5cc38a53d8a7 151 CountV255++; // инкремент счеттчика
Kovalev_D 164:6f43f85fdd8d 152 CountV255 &= 0xff; // ОБРЕЗАНИЕ СЧЕТЧИКА
Kovalev_D 197:7a05523bf588 153 CountV64 = CountV255 & 0x3f;
Kovalev_D 197:7a05523bf588 154 CountV31 = CountV255 & 0x1f; // малый счетчик
Kovalev_D 197:7a05523bf588 155
Kovalev_D 112:4a96133a1311 156 D_QEI(); //чтение данных по счетчику
Kovalev_D 143:2b15794a6cd2 157 cheng(); // выставление флагов в 32 тактном цикле.
Kovalev_D 116:66f1f0ff2dab 158
Kovalev_D 116:66f1f0ff2dab 159
Kovalev_D 116:66f1f0ff2dab 160 SetCS(ADC); //start ADC sampling
Kovalev_D 116:66f1f0ff2dab 161 ResetDAC(DAC);
Kovalev_D 197:7a05523bf588 162 SPI_Exchange(); //Чтение ADC_SPI
igor_v 114:5cc38a53d8a7 163
Kovalev_D 112:4a96133a1311 164 LPC_TIM1->IR = 1;
Kovalev_D 208:19150d2b528f 165
Kovalev_D 208:19150d2b528f 166
Kovalev_D 112:4a96133a1311 167 }
Kovalev_D 112:4a96133a1311 168
igor_v 21:bc8c1cec3da6 169 ///////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 170 /////////////////////////прерывание таймера 2//////////////////////////
igor_v 21:bc8c1cec3da6 171 ///////////////////////////////////////////////////////////////////////
igor_v 21:bc8c1cec3da6 172 __irq void TIMER2_IRQHandler (void)
Kovalev_D 208:19150d2b528f 173 {
Kovalev_D 208:19150d2b528f 174
igor_v 21:bc8c1cec3da6 175 LPC_TIM2->IR = 1;
Kovalev_D 208:19150d2b528f 176
Kovalev_D 190:289514f730ee 177 if(Time_UART) Time_UART--;
igor_v 21:bc8c1cec3da6 178 Time_vibro++;
Kovalev_D 203:3a6615de9581 179 VibroOut();
Kovalev_D 112:4a96133a1311 180 Gyro.VibroOutF=1;
Kovalev_D 190:289514f730ee 181 Event100K ++;
Kovalev_D 197:7a05523bf588 182 Time500Hz++;
Kovalev_D 197:7a05523bf588 183 Time100K++;
Kovalev_D 205:775d54fdf646 184 // Time250Hz++;
Kovalev_D 197:7a05523bf588 185 if (Time100K == 100)
Kovalev_D 197:7a05523bf588 186 {
Kovalev_D 197:7a05523bf588 187 Time100K = 0;
Kovalev_D 197:7a05523bf588 188 Event1K ++;
Kovalev_D 197:7a05523bf588 189 }
Kovalev_D 197:7a05523bf588 190 if (Time500Hz > 200)
Kovalev_D 208:19150d2b528f 191 { // LoopOn
Kovalev_D 197:7a05523bf588 192 Time500Hz -= 200;
Kovalev_D 208:19150d2b528f 193 Event500Hz ++;
Kovalev_D 197:7a05523bf588 194 }
Kovalev_D 208:19150d2b528f 195
igor_v 21:bc8c1cec3da6 196 }