![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LG2 by
main.c
- Committer:
- Diletant
- Date:
- 2016-02-11
- Revision:
- 49:53277d871197
- Parent:
- 48:8697dfe679b9
- Child:
- 50:0e3d47f18a50
File content as of revision 49:53277d871197:
//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> /****************************************************************************** ** Main Function main() ******************************************************************************/ extern uint32_t CMD_Mode; ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// int i1 =0; volatile unsigned int IRQ_Counter=0; volatile uint32_t timer1_counter = 0; int temp111=0,temp=0; int y = 0; int CuruAngleOld=0; unsigned int secPuls,CountBI,CmmandIn,tt,th; unsigned int paramV; void Init_Pin() { Gyro.PinRegOld = 0xffffffff; Gyro.PinReg = 0; // всЁ выключенно PinCheng(); //LPC_PINCON->PINSEL0 = (0x00<<28); // а нужно, ведь по умолчаниб у них 0 функция. попробоввать без них потом убрать //LPC_PINCON->PINMODE0 = (0x3<<28); LPC_GPIO1->FIODIR |= (1<<30); LPC_GPIO2->FIODIR |= (1<<7); //Конфигурирование сигнала поджига //LPC_PINCON->PINSEL0 &= ~(3<<8); //e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0 выбор P0.4 как GPIO) //LPC_PINCON->PINMODE0 |= (3<<8); //e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0 "для включения подтягивающего резистора") LPC_GPIO0->FIODIR |= (1<<4); //e. P0.4 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.4 как выход) //e. P0.4 is output (запись ( 1 ) в 5 бит CLR устанавливаем на P0.4 низкий уровень сигнала) //LPC_PINCON->PINSEL3 = (0x00<<18); //e. P1.25 is GPIO pin //LPC_PINCON->PINMODE3 |= (3<<18); //e. P1.25 (включениe подтягивающего резистора") LPC_GPIO1->FIODIR |= (1<<25); //e. P0.5 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) LPC_GPIO1->FIOCLR |= (1<<25); //LPC_PINCON->PINSEL3 = (0x00<<24); //e. P1.28 is GPIO pin //LPC_PINCON->PINMODE3 |= (3<<24); //e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0 "для включения подтягивающего резистора") LPC_GPIO1->FIODIR |= (1<<28); //e. P1.28 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) LPC_GPIO1->FIOCLR |= (1<<28); ///иНИциализация подсветки // LPC_PINCON->PINSEL2 = (0x00<<24); //e. P2.12 is GPIO pin //LPC_PINCON->PINMODE3 |= (3<<24); //e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0 "для включения подтягивающего резистора") LPC_GPIO2->FIODIR |= (1<<12); //e. P1.28 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) LPC_GPIO2->FIOCLR |= (1<<12); } int flag=0, TIME=0,t=0, Sec=0,tmpSec=0,SEC=0, mSec=0; int tempsec=0; float DACF, K_DAC; int main (void) { Gyro.SOC_Out=0xDD; Gyro.Firmware_Version =0x15; //версия программы Gyro.GLD_Serial = 0x20; //серийный номер Gyro.My_Addres = 0; //адрес глд K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2)); K_DAC=0.8; Gyro.Discharg = 0x7; // инициализация время поджига 3 сек (в событии 1HZ) Gyro.BackLight=0x3ff;// инициализация время подсветки 10 сек (в событии 1HZ) secPuls =0; Pulse_midl = 0; PulseHalf = 0; CuruAngle = 0; Spi.DAC_A = 0x7fff; Spi.DAC_B = 0x7fff; //инициализация SystemInit1(); // Инициализация контроллера: установка тактовых частот Init_Pin(); ///* DMA_Init(); // Инициализация DMA FlashDMA_Init(); // Загрузка параметров с флэш SystemCoreClockUpdate1(); // расчет тактовой частоты процессора перед инициализацией UART - 100MHz UARTInit(); // инициализация UART0 на скорость 38400. UART1_Init(); // инициализация UART1 на скорость 38400. DAC_ADC_Exchange_Init(); // инициализация обмена АЦП и ЦАП. DACInit(); // инициализация ЦАП. SOI_Init(); // Инициализация квадратурного энкодера. IntLatch_Init(); // инициализация внутренней защелки. ExtLatch_Init(); // инициализация внешней защелки. LoadFlashParam(FromFLASH); //загрузка параметров. UART_DMA_Init(); //инициализация DMA для UART. G_Photo_Init(); //инициализация интерфейса I2C для фотодетектора. Out_G_photo(60, 60); //запись в буфер мастера принятые от функции данные (60,60) и установка флага старта передачи и занятой шины. // WDTInit(); 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) init_Vibro(); init_timer(TIME_INTERVAL ); //Timer 1: CCLK / 7812 = 12800.819Hz; Vibro: Timer1/32 = 400.025Hz; 10ms??? enable_timer1(); Init_TIM2(); //Timer 2: CCLK / 4 / 250 = 100kHz enable_timer2(); close_all_loops(); LPC_GPIO0->FIOCLR = (1<<5); Event1Hz = 0; Event1K = 0; Event100K = 0; EventVibro = 0; Time1K = 0; Time100K = 0; Time1Hz = 0; Clock1Hz = 0; Gyro.Discharg = StartDischarg; Pulse_8Point = 0; Pulse_16Point = 0; Pulse_32Point = 0; Temp_AMP=0; Temp_ADC_2=0; Temp_ADC_3=0; Temp_ADC_4=0; Temp_ADC_5=0; for (y = 0; y < 256; y++ ) { Buff_16Point[y] = 0xffff; Buff_8Point[y] = 0xffff; Buff_32Point[y] = 0xffff; Buff_ADC_1[y] = 0; // ампл ацп. Buff_ADC_2[y] = 0; Buff_ADC_3[y] = 0; Buff_ADC_4[y] = 0; Buff_ADC_5[y] = 0; } 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); do { //основной цикл. Concol (); // Проврка 0 консоли (вход и выход) Concol1 (); // Проврка 0 консоли (вход и выход) if (OutBufConCount) OutBufConCount--; 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.",Clock1Hz,Time1K,Time100K); //Временно выдачпа временни из трех чисел WriteCon(Time); } if (Time[0] == 'L'){Gyro.PinReg |= PinRegBitTXE; WriteCon("\n\r On");} // времееено включения драйвера if (Time[0] == 'l'){Gyro.PinReg &= ~(PinRegBitTXE); WriteCon("\n\r Off");} } if (OutBufCon1Count) OutBufCon1Count--; if (Event1Hz) {// событие раз в 1 Гц Clock1Hz++; //============================= блок управления поджигом, сделанно через сдвиг====================== if (Gyro.Discharg) { //Проверка поджига if (Gyro.Discharg & 0x01) Gyro.PinReg |= PinRegBitD; else Gyro.PinReg &= ~PinRegBitD; Gyro.Discharg = Gyro.Discharg >> 1; } //============================= блок управления подсветкой, сделанно через сдвиг====================== if (Gyro.BackLight) { //Проверка подсветки if (Gyro.BackLight & 0x01) Gyro.PinReg |= PinRegBitL; else Gyro.PinReg &= ~PinRegBitL; Gyro.BackLight = Gyro.BackLight >> 1; } // CMD_Rate(); WriteCon("."); //Так просто выдавать в секунду 1 байт ,что гирос жив /* for (y = 0; y < 32; y++ ){ sprintf(Time," <%05d> ",Buff_32Point[y]); }sprintf(Time,"\r\n"); WriteCon(Time);*/ } if (Event1K) {// событие раз в 1 кГц Event1K --; Time1K++; if (Time1K == 1000) { Time1K = 0; Event1Hz ++; } } if (Event100K) { // событие раз в 100 кГц Event100K --; Time100K++; PinCheng(); // чтение регистра состояния выводов(вибро, полсветка, поджиг, LED) и управление выводами. if (OutBufCon1Count) OutBufCon1Count--; // обратный отсчет для управления ногой и формирование задержки на выдачу if (Time100K == 100) { Time100K = 0; Event1K ++; } } if (EventVibro) {// событие от вибр EventVibro --; } Read_CMD(); // VibroOut(); if(Time_1kHz>100) { SEC++; if(Rate_Flag==1 && SEC>500) { SEC-=500; // CMD_Rate(); } Time_1kHz-=100; } ButtonLightUP(); //Device_blk.Str. // TakeFromBuff(); //отключение поджига. // paramV=TakeParam(1); if (0) // временно отключил олгоритм Сергея if (LPC_PWM1->IR & 0x0001) { // Если в регистре прерываний ШИМ1 (регистр PWM1IR) есть влаг прерывания совпадения счетчика с МАТСН (lim0 ?) то: /* ResetCS(ADC); //prepare ADC for sampling SetDAC(DAC); LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED SetCS(ADC); //start ADC sampling ResetDAC(DAC); //start DAC prepearing for writing */ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// secPuls++; tmpSec++; mSec++; i1++; if(i1>10000) //if(CountV31>30) { WriteCon("."); i1=0; /* SendToBuffStr("\n\r"); // if (Buff_ADC_1 [y] > 65535)SendToBuffStr(" 0 "); else SendToBuffStr(" 1 "); 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); // sprintf (BuffTemp,"<%07d> <%07d> <%07d> <%07d> <%07d>", Spi.ADC1,Spi.ADC2,Spi.ADC3,Spi.ADC4,Spi.ADC5); SendToBuffStr(BuffTemp); */ /* WriteConByte (Gyro.T_Vib&0xff00); WriteConByte (Gyro.T_Vib&0x00ff); WriteConByte (Gyro.T_Vib); */ /* for (y = 0; y < 32; y++ ) { WriteCon(BuffTemp); } WriteCon("\n\r"); */ /* Gyro.T_Vib=((7680000*16/Gyro.Frq)*4096); th= Gyro.T_Vib&0xff00; tt= Gyro.T_Vib&0x00ff; sprintf(BuffTemp,"<%07d >",( (Gyro.T_Vib&0xff00))); SendToBuffStr(BuffTemp); sprintf(BuffTemp,"<%07d >",( ( Gyro.T_Vib&0x00ff))); SendToBuffStr(BuffTemp); CuruAngleOld=CuruAngle;*/ // Spi.ADC1=Spi.ADC1*0.000061; /* sprintf(BuffTemp,"\n\r<%05d><%05d><%05d><%05d><%05d>",Spi.ADC1,Spi.ADC2,Spi.ADC3,Spi.ADC4,Spi.ADC5); SendToBuffStr(BuffTemp); */ /* sprintf(BuffTemp,"<%d>",(FrecTemp)); SendToBuffStr(BuffTemp); for (y = 0; y < 32; y++ ) { sprintf(BuffTemp," <%07d>", (Buff_16PointD [y]-65535)); SendToBuffStr(BuffTemp); } */ } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// LPC_GPIO2->FIOSET |= 0x0000004; // turn on the LED Curr_Cnt_Vib = LPC_QEI->POS; // записать в переменную Curr_Cnt_Vib текущее положение Энкодера. (текущее количество импульсов) Latch_Event(); //определение защелки clc_Pulses(); // счетчик импульсов. RATE_REPER_OR_REFMEANDR или RATE_VIBRO_1 //ADC_Input(); // проверка флагов заполнения буфера и четение Thermo1, Thermo2, HF_out в масив Input.ArrayIn[n]. //DAC_ADC_Exchange();// проверка флагов заполнения буфера и зпись в ЦАПы. ServiceTime();//секундный таймер. clc_ThermoSensors();//расчет средней температуры за секунду clc_HFO(); //расчет значения для передачи в контур ГВЧ(на цап). clc_PLC(); // clc_Dith_regulator(); clc_OutFreq_regulator(); Output.Str.WP_sin = clc_WP_sin(); contrl_GLD(); G_Photo_Exchange(); // Output.Str.T_Vibro = paramV*48; Line_1_Rcv(); decode_CMD(); transm_DAT(); //îòêëþ÷åíèå ïîäæèãà. // data_Rdy &= ~RESET_PERIOD; LPC_PWM1->IR = 0x0001; //e. clear interrupt flag LPC_GPIO2->FIOCLR |= 0x0000004; // turn off the LED // WDTFeed(); //SPI_Exchange(); } } while ( 1 ); // main infinie loop } /****************************************************************************** ** End Of File ******************************************************************************/