![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
n
Fork of LG by
Embed:
(wiki syntax)
Show/hide line numbers
main.c
00001 //ssdfwewedfsfds 00002 /****************************************Copyright (c)**************************************************** 00003 **--------------File Info--------------------------------------------------------------------------------- 00004 ** File name: main.c 00005 ** Last modified Date: 2011-10-24 00006 ** Last Version: V1.00 00007 ** Descriptions: The main() function 00008 ** 00009 **-------------------------------------------------------------------------------------------------------- 00010 ** Created by: Electrooptica Incorp. 00011 ** Created date: 2011-08-22 00012 ** Version: V1.00 00013 ** Descriptions: 00014 **-------------------------------------------------------------------------------------------------------- 00015 *********************************************************************************************************/ 00016 00017 00018 #include "Global.h" 00019 //#include <math.h> 00020 00021 00022 00023 00024 //проба верси 00025 //2016_02_03_17_47 00026 00027 00028 00029 00030 00031 /****************************************************************************** 00032 ** Main Function main() 00033 ******************************************************************************/ 00034 extern uint32_t CMD_Mode; 00035 ////////////////////////////////////////////////////////////////////////////////////////////////////////// 00036 ////////////////////////////////////////////////////////////////////////////////////////////////////////// 00037 int i1 =0; 00038 //extern unsigned int Buff_QEI[256]; 00039 volatile unsigned int IRQ_Counter=0; 00040 volatile uint32_t timer1_counter = 0; 00041 int temp111=0,temp=0; 00042 int y = 0; 00043 int CuruAngleOld=0; 00044 unsigned int LightUpCount,BackLightCount,secPuls,CountBI,CmmandIn,tt,th; 00045 00046 unsigned int paramV; 00047 00048 00049 00050 void Led_init() 00051 { 00052 LPC_PINCON->PINSEL0 = (0x00<<28); 00053 LPC_GPIO1->FIODIR = (0x1<<30); 00054 LPC_PINCON->PINMODE0 = (0x3<<28); 00055 // LPC_GPIO1->FIOSET = (0x0<<30); 00056 // LPC_GPIO0->FIOSET = (1<<4); 00057 } 00058 00059 int flag=0, TIME=0,t=0, Sec=0,tmpSec=0,SEC=0, mSec=0; 00060 int tempsec=0; 00061 float DACF, K_DAC; 00062 00063 void Led_Blink() 00064 { 00065 if (flag == 0) { 00066 LPC_GPIO1->FIOSET = (0x1<<30); 00067 flag=1; 00068 } else { 00069 flag =0; 00070 LPC_GPIO1->FIOCLR = (0x01<<30); 00071 } 00072 } 00073 00074 long LED_TEMP=0; 00075 00076 00077 00078 00079 int main (void) 00080 { 00081 K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2)); 00082 K_DAC=0.8; 00083 00084 Main.Firmware_Version=0x15; 00085 Main.GLD_Serial = 0x20; 00086 Main.My_Addres=0; 00087 LightUpCount=1000; 00088 BackLightCount=5000; 00089 secPuls=0; 00090 Pulse_midl = 0; 00091 PulseHalf = 0; 00092 CuruAngle = 0; 00093 Spi.DAC_A=0x7fff; 00094 Spi.DAC_B = 0x7fff; 00095 //инициализация 00096 SystemInit(); // Инициализация системы 00097 Led_init(); 00098 00099 ///* 00100 //конфигурирование сигнала поджига 00101 LPC_PINCON->PINSEL0 &= ~(3<<8); //e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0 выбор P0.4 как GPIO) 00102 LPC_PINCON->PINMODE0 |= (3<<8); //e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0 "для включения подтягивающего резистора") 00103 LPC_GPIO0->FIODIR |= (1<<4); //e. P0.4 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.4 как выход) 00104 LightUpON //e. P0.4 is output (запись ( 1 ) в 5 бит CLR устанавливаем на P0.4 низкий уровень сигнала) 00105 /* 00106 LPC_PINCON->PINSEL0 &= ~(3<<10); //e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0 выбор P0.4 как GPIO) 00107 LPC_PINCON->PINMODE0 |= (3<<10); //e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0 "для включения подтягивающего резистора") 00108 LPC_GPIO0->FIODIR |= (1<<5); //e. P0.4 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.4 как выход) 00109 LPC_GPIO0->FIOCLR |= (1<<5); //e. P0.4 is output (запись ( 1 ) в 5 бит CLR устанавливаем на P0.4 низкий уровень сигнала)*/ 00110 00111 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00112 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00113 00114 00115 LPC_PINCON->PINSEL3 = (0x00<<18); //e. P1.25 is GPIO pin 00116 LPC_PINCON->PINMODE3 |= (3<<18); //e. P1.25 (включениe подтягивающего резистора") 00117 LPC_GPIO1->FIODIR |= (1<<25); //e. P0.5 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00118 LPC_GPIO1->FIOCLR |= (1<<25); 00119 00120 00121 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00122 00123 LPC_PINCON->PINSEL3 = (0x00<<24); //e. P1.28 is GPIO pin 00124 LPC_PINCON->PINMODE3 |= (3<<24); //e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0 "для включения подтягивающего резистора") 00125 LPC_GPIO1->FIODIR |= (1<<28); //e. P1.28 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00126 LPC_GPIO1->FIOCLR |= (1<<28); 00127 // init_timer(TIME_INTERVAL ); // 10ms 00128 // enable_timer1(); 00129 ///иНИциализация подсветки 00130 LPC_PINCON->PINSEL2 = (0x00<<24); //e. P2.12 is GPIO pin 00131 LPC_PINCON->PINMODE3 |= (3<<24); //e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0 "для включения подтягивающего резистора") 00132 LPC_GPIO2->FIODIR |= (1<<12); //e. P1.28 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00133 LPC_GPIO2->FIOCLR |= (1<<12); 00134 00135 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00136 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00137 /* 00138 //конфигурирование сигнала поджига оторваная нога (поджиг на 80 ноге вместо 81) 00139 LPC_PINCON->PINSEL0 = (0x00<<10); //e. P0.5 is GPIO pin (запись ( 00 ) в 11:10 бит PISEL0 выбор P0.5 как GPIO) 00140 LPC_PINCON->PINMODE0 |= (3<<10); //e. P0.5 is GPIO pin (запись ( 11 ) в 11:10 бит PINMODE0 "для включения подтягивающего резистора") 00141 LPC_GPIO0->FIODIR |= (1<<5); //e. P0.5 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00142 LPC_GPIO0->FIOCLR |= (1<<5); //e. P0.5 is output (запись ( 1 ) в 5 бит CLR устанавливаем на P0.5 низкий уровень сигнала) 00143 */ 00144 DMA_Init(); // Инициализация DMA 00145 FlashDMA_Init(); // Загрузка параметров с флэш 00146 00147 SystemCoreClockUpdate(); // расчет системной частоты для UART. 00148 UARTInit(); // инициализация UART0 на скорость 38400. 00149 UART1_Init(); // инициализация UART1 на скорость 38400. 00150 00151 00152 DAC_ADC_Exchange_Init(); // инициализация обмена АЦП и ЦАП. 00153 DACInit(); // инициализация ЦАП. 00154 SOI_Init(); // Инициализация квадратурного энкодера. 00155 00156 IntLatch_Init(); // инициализация внутренней защелки. 00157 ExtLatch_Init(); // инициализация внешней защелки. 00158 00159 //----------------debug------------------------- 00160 //LPC_GPIO2->FIODIR = 0x5C; // P2.0...P2.7 defined as Outputs 00161 //LPC_GPIO2->FIOCLR = 0x5C; // turn off all the LEDs 00162 //----------------debug------------------------- 00163 00164 00165 00166 LoadFlashParam(FromFLASH); //загрузка параметров. 00167 UART_DMA_Init(); //инициализация DMA для UART. 00168 G_Photo_Init(); //инициализация интерфейса I2C для фотодетектора. 00169 Out_G_photo(60, 60); //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины. 00170 // WDTInit(); 00171 00172 00173 open_all_loops(); //#define open_all_loops() RgConA = 0 (Основной регистр управления устройства (0 - включить, 1 - отключить)). 00174 Output.Str.HF_reg = Device_blk.Str.HF_min; //HFO output voltage = максивальное напряжение на ГВЧ. 00175 init_PLC(); //Инициализация СРП(регулировка периметра) 00176 init_Dither_reg(); //инициализация вибропривода 00177 RgConB = RATE_VIBRO_1; // дополнительный регистр управления = разность вибросчетчиков после фильтра скольз.среднего(#define RATE_VIBRO_1 0x0001) 00178 00179 init_Vibro(); 00180 init_timer(TIME_INTERVAL ); // 10ms 00181 enable_timer1(); 00182 Init_TIM2(); 00183 enable_timer2(); 00184 close_all_loops(); 00185 00186 00187 LPC_GPIO0->FIOCLR = (1<<5); 00188 00189 00190 Event1Hz = 0; 00191 Event1K = 0; 00192 Event100K = 0; 00193 EventVibro = 0; 00194 Time1K = 0; 00195 Time100K = 0; 00196 Time1Hz = 0; 00197 Clock1Hz = 0; 00198 Main.Discharg = StartDischarg; 00199 00200 Pulse_8Point = 0; 00201 Pulse_16Point = 0; 00202 Pulse_32Point = 0; 00203 00204 Temp_AMP=0; 00205 Temp_ADC_2=0; 00206 Temp_ADC_3=0; 00207 Temp_ADC_4=0; 00208 Temp_ADC_5=0; 00209 00210 for (y = 0; y < 256; y++ ) { 00211 Buff_16Point[y] = 0xffff; 00212 Buff_8Point[y] = 0xffff; 00213 Buff_32Point[y] = 0xffff; 00214 Buff_ADC_1[y] = 0; // ампл ацп. 00215 Buff_ADC_2[y] = 0; 00216 Buff_ADC_3[y] = 0; 00217 Buff_ADC_4[y] = 0; 00218 Buff_ADC_5[y] = 0; 00219 00220 } 00221 00222 00223 00224 00225 WriteCon("\n\r ...GL start programm uart 0.... "); 00226 sprintf(Time,"\r\nCompiled: %s %s.",__DATE__, __TIME__ ); //Подготовка даты и времени компиляции 00227 WriteCon(Time); 00228 00229 00230 00231 do { //основной цикл. 00232 Concol (); // Проврка 0 консоли (вход и выход) 00233 if (OutBufConCount) OutBufConCount--; 00234 00235 if (ReadCon (Time)) { 00236 if (Time[0] == 'h') { // если ввели буквц h то выдать подсказку. сделанно через принф ОЧЕНЬ плохо в работе не использовать 00237 sprintf(Time,"\r\nCompiled: %s %s.",__DATE__, __TIME__ ); //Подготовка даты и времени компиляции 00238 WriteCon(Time); 00239 sprintf(Time,"--%d.%3.d.%2.d.",Clock1Hz,Time1K,Time100K); //Временно выдачпа временни из трех чисел 00240 WriteCon(Time); 00241 } 00242 } 00243 00244 if (Event1Hz) {// событие раз в 1 Гц 00245 Event1Hz --; 00246 Clock1Hz++; 00247 00248 //============================= блок управления поджигом и подсветкой, сделанно через сдвиг====================== 00249 if (Main.Discharg){ //Проверка поджига 00250 if (Main.Discharg & 0x01) Main.PinReg |= PinRegBitD; else Main.PinReg &= ~PinRegBitD; 00251 Main.Discharg = Main.Discharg >> 1; 00252 } 00253 00254 00255 } 00256 if (Event1K) {// событие раз в 1 кГц 00257 Event1K --; 00258 Time1K++; 00259 if (Time1K == 1000) { 00260 Time1K = 0; 00261 Event1Hz ++; 00262 00263 } 00264 } 00265 if (Event100K) {// событие раз в 100 кГц 00266 Event100K --; 00267 Time100K++; 00268 if (Time100K == 100) { 00269 Time100K = 0; 00270 Event1K ++; 00271 } 00272 } 00273 if (EventVibro) {// событие от вибр 00274 EventVibro --; 00275 } 00276 00277 00278 00279 00280 // Concol1 (); 00281 Read_CMD(); 00282 00283 // VibroOut(); 00284 00285 if(Time_1kHz>100) { 00286 00287 SEC++; 00288 if(Rate_Flag==1 && SEC>500) { 00289 SEC-=500; 00290 // CMD_Rate(); 00291 } 00292 00293 Time_1kHz-=100; 00294 if(LightUpCount) { 00295 LightUpCount--; 00296 LightUpON 00297 } 00298 00299 else { 00300 LightUpOFF; 00301 } 00302 if(BackLightCount) { 00303 BackLightCount--; 00304 BackLightON 00305 } else { 00306 BackLightOFF; 00307 } 00308 } 00309 ButtonLightUP(); 00310 //Device_blk.Str. 00311 // TakeFromBuff(); 00312 00313 //отключение поджига. 00314 00315 // paramV=TakeParam(1); 00316 00317 00318 00319 if (LPC_PWM1->IR & 0x0001) { // Если в регистре прерываний ШИМ1 (регистр PWM1IR) есть влаг прерывания совпадения счетчика с МАТСН (lim0 ?) то: 00320 00321 /* ResetCS(ADC); //prepare ADC for sampling 00322 SetDAC(DAC); 00323 LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED 00324 LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED 00325 LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED 00326 SetCS(ADC); //start ADC sampling 00327 ResetDAC(DAC); //start DAC prepearing for writing 00328 */ 00329 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00330 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00331 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00332 secPuls++; 00333 tmpSec++; 00334 mSec++; 00335 00336 i1++; 00337 if(i1>10000) 00338 //if(CountV31>30) 00339 { 00340 WriteCon("."); 00341 i1=0; 00342 /* 00343 SendToBuffStr("\n\r"); 00344 // if (Buff_ADC_1 [y] > 65535)SendToBuffStr(" 0 "); else SendToBuffStr(" 1 "); 00345 sprintf (BuffTemp,"<%05d> <%05d> <%05d> <%05d> <%05d>", Temp_AMP>>5,Temp_ADC_2>>5,Temp_ADC_3>>5,Temp_ADC_4>>5,Temp_ADC_5>>5); 00346 // sprintf (BuffTemp,"<%07d> <%07d> <%07d> <%07d> <%07d>", Spi.ADC1,Spi.ADC2,Spi.ADC3,Spi.ADC4,Spi.ADC5); 00347 SendToBuffStr(BuffTemp); 00348 */ 00349 /* 00350 WriteConByte (Main.T_Vib&0xff00); 00351 WriteConByte (Main.T_Vib&0x00ff); 00352 WriteConByte (Main.T_Vib); 00353 */ 00354 /* 00355 00356 for (y = 0; y < 32; y++ ) 00357 { 00358 00359 WriteCon(BuffTemp); 00360 } WriteCon("\n\r"); 00361 00362 */ 00363 /* 00364 Main.T_Vib=((7680000*16/Main.Frq)*4096); 00365 th= Main.T_Vib&0xff00; 00366 tt= Main.T_Vib&0x00ff; 00367 sprintf(BuffTemp,"<%07d >",( (Main.T_Vib&0xff00))); 00368 SendToBuffStr(BuffTemp); 00369 00370 sprintf(BuffTemp,"<%07d >",( ( Main.T_Vib&0x00ff))); 00371 SendToBuffStr(BuffTemp); 00372 00373 CuruAngleOld=CuruAngle;*/ 00374 // Spi.ADC1=Spi.ADC1*0.000061; 00375 00376 00377 00378 00379 /* 00380 00381 sprintf(BuffTemp,"\n\r<%05d><%05d><%05d><%05d><%05d>",Spi.ADC1,Spi.ADC2,Spi.ADC3,Spi.ADC4,Spi.ADC5); 00382 SendToBuffStr(BuffTemp); 00383 00384 */ 00385 00386 /* sprintf(BuffTemp,"<%d>",(FrecTemp)); 00387 SendToBuffStr(BuffTemp); 00388 for (y = 0; y < 32; y++ ) 00389 { 00390 sprintf(BuffTemp," <%07d>", (Buff_16PointD [y]-65535)); 00391 SendToBuffStr(BuffTemp); 00392 } */ 00393 00394 } 00395 00396 00397 00398 00399 00400 00401 00402 00403 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00404 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00405 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 00406 00407 00408 00409 00410 LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED 00411 00412 00413 Curr_Cnt_Vib = LPC_QEI->POS; // записать в переменную Curr_Cnt_Vib текущее положение Энкодера. (текущее количество импульсов) 00414 Latch_Event(); //определение защелки 00415 00416 clc_Pulses(); // счетчик импульсов. RATE_REPER_OR_REFMEANDR или RATE_VIBRO_1 00417 00418 00419 //ADC_Input(); // проверка флагов заполнения буфера и четение Thermo1, Thermo2, HF_out в масив Input.ArrayIn[n]. 00420 //DAC_ADC_Exchange();// проверка флагов заполнения буфера и зпись в ЦАПы. 00421 ServiceTime();//секундный таймер. 00422 clc_ThermoSensors();//расчет средней температуры за секунду 00423 clc_HFO(); //расчет значения для передачи в контур ГВЧ(на цап). 00424 00425 clc_PLC(); 00426 // clc_Dith_regulator(); 00427 clc_OutFreq_regulator(); 00428 Output.Str.WP_sin = clc_WP_sin(); 00429 contrl_GLD(); 00430 G_Photo_Exchange(); 00431 // Output.Str.T_Vibro = paramV*48; 00432 00433 00434 Line_1_Rcv(); 00435 decode_CMD(); 00436 transm_DAT(); 00437 //îòêëþ÷åíèå ïîäæèãà. 00438 00439 00440 // data_Rdy &= ~RESET_PERIOD; 00441 00442 00443 LPC_PWM1->IR = 0x0001; //e. clear interrupt flag 00444 LPC_GPIO2->FIOCLR |= 0x0000004; // turn off the LED 00445 00446 // WDTFeed(); 00447 //SPI_Exchange(); 00448 00449 } 00450 00451 } while ( 1 ); // main infinie loop 00452 } 00453 00454 /****************************************************************************** 00455 ** End Of File 00456 ******************************************************************************/ 00457 00458
Generated on Tue Jul 12 2022 15:16:11 by
![doxygen](doxygen.png)