n

Dependencies:   mbed

Fork of LG by igor Apu

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.c Source File

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