Dmitry Kovalev
/
LGstaandart
forkd
Fork of LG2 by
main.c
- Committer:
- igor_v
- Date:
- 2016-04-11
- Revision:
- 127:6a7472d67804
- Parent:
- 124:9ae09249f842
- Child:
- 128:1e4675a36c93
File content as of revision 127:6a7472d67804:
//ssdfwewedfsfds /****************************************Copyright (c)**************************************************** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2011-10-24 ** Last Version: V1.00 ** Descriptions: The main() function ** **-------------------------------------------------------------------------------------------------------- ** Created by: Electrooptica Incorp. ** Created date: 2011-08-22 ** Version: V1.00 ** Descriptions: **-------------------------------------------------------------------------------------------------------- последнии изменения //2016_02_03_17_47 //2016_02_06 igor //2016_06 Dima //2016_02_06 21:20 Kovalev_D *********************************************************************************************************/ #include "Global.h" //#include <math.h> #include "Device.h" /****************************************************************************** ** Main Function main() ******************************************************************************/ Device device; //Single global for all device hardware-independent algorithm extern uint32_t CMD_Mode; unsigned int secPuls; float DACF, K_DAC; int tempAMP; int main (void) { int ttemp; unsigned int TempA; //DMA_Init(); // Инициализация DMA не используем //DACInit(); // инициализация ЦАП. //UART_DMA_Init(); //инициализация DMA для UART.//не используем //WDTInit(); // G_Photo_Init(); //инициализация интерфейса I2C для фотодетектора. //инициализация SystemInit1(); // Инициализация контроллера: установка тактовых частот FlashDMA_Init(); // Загрузка параметров с флэш SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz GLD_Init(); ///////////старый UART // UARTInit(); // инициализация UART0 на скорость 38400. // UART1_Init(); // инициализация UART1 на скорость 38400. UART_InitSet (0, 921600, 0x03); // надо проверить, мож чо с ногам UART_InitSet (1, 921600, 0x03); //UART_InitSet (1, 115200, 0x03); //////////// //DAC_ADC_Exchange_Init(); // инициализация обмена АЦП и ЦАП. IntLatch_Init(); // инициализация внутренней защелки. ExtLatch_Init(); // инициализация внешней защелки. LoadFlashParam(FromFLASH); //загрузка параметров. // open_all_loops(); //#define open_all_loops() RgConA = 0 (Основной регистр управления устройства (0 - включить, 1 - отключить)). Output.Str.HF_reg = Device_blk.Str.HF_min; //HFO output voltage = максивальное напряжение на ГВЧ. init_PLC(); //Инициализация СРП(регулировка периметра) init_Dither_reg(); //инициализация вибропривода // RgConB = RATE_VIBRO_1; // дополнительный регистр управления = разность вибросчетчиков после фильтра скольз.среднего(#define RATE_VIBRO_1 0x0001) // close_all_loops(); Out_G_photo(200,200); //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины. WriteCon1("\n\r ...GL start programm uart ACK.... "); WriteCon("\n\r ...GL start programm uart Tech.... "); sprintf(Time,"\r\nCompiled: %s %s.",__DATE__, __TIME__ ); //Подготовка даты и времени компиляции WriteCon(Time); Gyro.PLC_Error2Mode = 10; // начальная задержка (неработает СРП) while ( 1 ) { //основной цикл. G_Photo_Exchange(); Concol (); // Проврка 0 консоли (вход и выход) Concol1 (); // Проврка 0 консоли (вход и выход) Read_CMD(); if (OutBufConCount) OutBufConCount--; if (OutBufCon1Count) OutBufCon1Count--; if (ReadCon (Time)) { if (Time[0] == 'h') { // если ввели буквц h то выдать подсказку. сделанно через принф ОЧЕНЬ плохо в работе не использовать sprintf(Time,"\r\nCompiled: %s %s.",__DATE__, __TIME__ ); //Подготовка даты и времени компиляции WriteCon(Time); sprintf(Time,"--%d.%3.d.%2.d.",Time1Hz,Time1K,Time100K); //Временно выдачпа временни из трех чисел WriteCon(Time); } if (Time[0] == 'D') { Gyro.Discharg = StartDischarg; } if (Time[0] == 'L') { Gyro.BackLight = StartBackLight; } if (Time[0] == 'F') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); sprintf((Time)," <%07d> <%07d>",Gyro.F_ras,Param2); WriteCon(Time); } if (Time[0] == '1') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_1Point[i]); WriteCon(Time); } if (Time[0] == '2') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ", Buff_8Point[i]); WriteCon(Time); } if (Time[0] == '3') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ", Buff_16Point[i]); WriteCon(Time); } if (Time[0] == '4') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ", Buff_16PointD[i]); WriteCon(Time); } if (Time[0] == 'z') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ ) { ttemp=(Buff_16PointD[i]); if (ttemp < 0) WriteCon("1"); else WriteCon("0"); } } if (Time[0] == '5') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_32Point[i]); WriteCon(Time); } if (Time[0] == '6') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_Restored_sin[i]); WriteCon(Time); } if (Time[0] == 'c') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); sprintf((Time)," <%07d> <%07d> <%07d> <%07d>", Gyro.F_ras,Gyro.F_ras/16, Gyro.Cnt_Pls, Gyro.Cnt_Mns); WriteCon(Time); } if (Time[0] == '7') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time + i * 10)," <%07d> ",Buff_AMP64P[i]-(Buff_AMP[i])); WriteCon(Time); } if (Time[0] == '9') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time)," <%07d> ",Gyro.Frq); WriteCon(Time); } if (Time[0] == 'p') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ )sprintf((Time)," <%07d> ",Cur_Amp); WriteCon(Time); } if (Time[0] == 'm') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); sprintf((Time),"Cur_Amp <%07d> ", Cur_Amp); WriteCon(Time); sprintf((Time),"Znak_Amp <%07d> ", Znak_Amp); WriteCon(Time); sprintf((Time),"AD_Regul <%07d> ", AD_Regul); WriteCon(Time); // printf((Time),"AD_Regul <%07d> ", Delta); WriteCon(Time); // sprintf((Time),"Spi.DAC_B <%07d> ",Spi.DAC_B); WriteCon(Time);*/ // sprintf((Time),"MaxAmp <%07d> ", MaxAmp); WriteCon(Time); // sprintf((Time),"CaunAddPlus <%07d> ", CaunAddPlus); WriteCon(Time); // sprintf((Time),"CaunAddMin <%07d> ", CaunAddMin); WriteCon(Time); // sprintf((Time)," Gyro.Amp <%07d> ",amp); WriteCon(Time); } if (Time[0] == 'V') { // выдача технологическая // Gyro.Frq+=65000; Spi.DAC_B += 200; } if (Time[0] == 'v') { // выдача технологическая //Gyro.Frq-=65000; Spi.DAC_B -= 200; } if (Time[0] == '8') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); // for (int i = 0; i < 32; i++ )sprintf((Time + i * 9)," <%05d> ",Buff_AMP64P[i]-(Buff_AMP[i]*2)); for (int i = 0; i < 32; i++ ) { ttemp=(Buff_AMP64P[i]-(Buff_AMP[i])); if (ttemp < 0) WriteCon("1"); else WriteCon("0"); } // WriteCon(Time); } if (Time[0] == 'b') { // выдача технологическая sprintf(Time,"\r\n"); WriteCon(Time); for (int i = 0; i < 32; i++ ) { ttemp=(Buff_Restored_sin[i]); if (ttemp < 0) WriteCon("1"); else WriteCon("0"); } } } // Read_CMD(); //ДИМА== посмотри пожалуйста нармално ли работуют все таймеры аппаратные и програмные, то есть нет ли где затыком по времени // с помошью ссветодиода например помаргай в разные временна, почему в режиме "рейт" передача от гироскопа идет с разной частотой // попробуй сделать "рейт M4" посмотри в протоколе как вклбчается и на кокой скорости работает Event_100KHz(); Event_1KHz(); Event_500Hz(); Event_1Hz(); Event_Vibro(); switch(Gyro.ModeOut) { case 1: if(Gyro.Rate1_Event==1)CMD_Rate(); break; case 2: if(Gyro.Rate2_Event==1)CMD_Rate2(); break; case 3: if(Gyro.Delta500_Event==1)CMD_Delta_500Hz(); break; } if (Spi.ADC_NewData == 1) // был приход новых данных по ацп сдесь сделать обработку информации и подготовку для выдачи делается 1 раз за вибро { // можно апихнкть в функцию Spi.ADC_NewData = 0; Gyro.Termo = Spi.ADC1; Gyro.In1 = Spi.ADC2; Gyro.In2 = Spi.ADC3; Gyro.DeltaT = Spi.ADC4; TempA = (0x7fff - Spi.ADC5) << 1; // перевернем знак и умножим на два (бало 32000...0 стало 0 ...64000) Gyro.ADF_Accum += TempA; Gyro.ADS_Accum += TempA; Gyro.ADF_Count ++; Gyro.ADS_Count ++; if (Gyro.ADF_Count > 15) // если прошло 16 тактов виброподвеса { Gyro.AD_Fast = Gyro.ADF_Accum << 12; //обновляем данные и приводим в один масштаб Gyro.ADF_Count = 0; Gyro.ADF_Accum = 0; Gyro.ADF_NewData = 1; } if (Gyro.ADS_Count > 255) // если прошло 256 тактов виброподвеса { Gyro.AD_Slow = Gyro.ADS_Accum << 8; //обновляем данные и приводим в один масштаб Gyro.ADS_Count = 0; Gyro.ADS_Accum = 0; Gyro.ADS_NewData = 1; } } if (Gyro.ADF_NewData == 1) // был приход новых данных После быстрого фильтра AD { Gyro.ADF_NewData = 0; }// можно запихнкть в функцию if (Gyro.ADS_NewData == 1) // был приход новых данных После Медленного фильтра AD { Gyro.ADS_NewData = 0; PlcRegul();//Расчет }// можно запихнкть в функцию if(Gyro.VibroFrqRegulF == 1) //Регулеровка частоты виброподвеса { Gyro.VibroFrqRegulF = 0; VibroFrqRegul(); } if(Gyro.VibroAMPRegulF == 1) //Регулеровка Амплитуды виброподвеса { Gyro.VibroAMPRegulF = 0; VibroAMPRegul(); } if(Gyro.VibroNoiseF == 1) //регулеровка ошумления, наверно нужно объеденить с регулеровкой ампитуды { Gyro.VibroNoiseF = 0; CalcAmpN(); } if(Gyro.VibroOutF== 1) // установка ног в регисторе тоже подумать , зачем отделный флаг? наверно { Gyro.VibroOutF = 0; VibroOut(); //Чтение ADS_SPI } }//while } //main /****************************************************************************** ** End Of File ******************************************************************************/