Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of LG by
main.c
- Committer:
- Diletant
- Date:
- 2016-02-06
- Revision:
- 35:84e05c2c3b46
- Parent:
- 34:1e4b4d86a7ac
- Child:
- 36:65c171b56105
File content as of revision 35:84e05c2c3b46:
//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 req Andreq *********************************************************************************************************/ #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 Led_init() { LPC_PINCON->PINSEL0 = (0x00<<28); LPC_GPIO1->FIODIR = (0x1<<30); LPC_PINCON->PINMODE0 = (0x3<<28); // LPC_GPIO1->FIOSET = (0x0<<30); // LPC_GPIO0->FIOSET = (1<<4); } int flag=0, TIME=0,t=0, Sec=0,tmpSec=0,SEC=0, mSec=0; int tempsec=0; float DACF, K_DAC; void Led_Blink() { if (flag == 0) { LPC_GPIO1->FIOSET = (0x1<<30); flag=1; } else { flag =0; LPC_GPIO1->FIOCLR = (0x01<<30); } } long LED_TEMP=0; int main (void) { K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2)); K_DAC=0.8; Gyro.Firmware_Version =0x15; Gyro.GLD_Serial = 0x20; Gyro.My_Addres = 0; secPuls =0; Pulse_midl = 0; PulseHalf = 0; CuruAngle = 0; Spi.DAC_A = 0x7fff; Spi.DAC_B = 0x7fff; //инициализация SystemInit(); // Инициализация системы Led_init(); ///* //Конфигурирование сигнала поджига 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 как выход) LightUpON //e. P0.4 is output (запись ( 1 ) в 5 бит CLR устанавливаем на P0.4 низкий уровень сигнала) /* LPC_PINCON->PINSEL0 &= ~(3<<10); //e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0 выбор P0.4 как GPIO) LPC_PINCON->PINMODE0 |= (3<<10); //e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0 "для включения подтягивающего резистора") LPC_GPIO0->FIODIR |= (1<<5); //e. P0.4 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.4 как выход) LPC_GPIO0->FIOCLR |= (1<<5); //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); // init_timer(TIME_INTERVAL ); // 10ms // enable_timer1(); ///иНИциализация подсветки 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); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* //конфигурирование сигнала поджига оторваная нога (поджиг на 80 ноге вместо 81) LPC_PINCON->PINSEL0 = (0x00<<10); //e. P0.5 is GPIO pin (запись ( 00 ) в 11:10 бит PISEL0 выбор P0.5 как GPIO) LPC_PINCON->PINMODE0 |= (3<<10); //e. P0.5 is GPIO pin (запись ( 11 ) в 11:10 бит PINMODE0 "для включения подтягивающего резистора") LPC_GPIO0->FIODIR |= (1<<5); //e. P0.5 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) LPC_GPIO0->FIOCLR |= (1<<5); //e. P0.5 is output (запись ( 1 ) в 5 бит CLR устанавливаем на P0.5 низкий уровень сигнала) */ DMA_Init(); // Инициализация DMA FlashDMA_Init(); // Загрузка параметров с флэш SystemCoreClockUpdate(); // расчет системной частоты для UART. UARTInit(); // инициализация UART0 на скорость 38400. UART1_Init(); // инициализация UART1 на скорость 38400. DAC_ADC_Exchange_Init(); // инициализация обмена АЦП и ЦАП. DACInit(); // инициализация ЦАП. SOI_Init(); // Инициализация квадратурного энкодера. IntLatch_Init(); // инициализация внутренней защелки. ExtLatch_Init(); // инициализация внешней защелки. //----------------debug------------------------- //LPC_GPIO2->FIODIR = 0x5C; // P2.0...P2.7 defined as Outputs //LPC_GPIO2->FIOCLR = 0x5C; // turn off all the LEDs //----------------debug------------------------- 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 ); // 10ms enable_timer1(); Init_TIM2(); 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; } WriteCon("\n\r ...GL start programm uart 0.... "); sprintf(Time,"\r\nCompiled: %s %s.",__DATE__, __TIME__ ); //Подготовка даты и времени компиляции WriteCon(Time); do { //основной цикл. Concol (); // Проврка 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 (Event1Hz) {// событие раз в 1 Гц Event1Hz --; Clock1Hz++; //============================= блок управления поджигом и подсветкой, сделанно через сдвиг====================== if (Gyro.Discharg){ //Проверка поджига if (Gyro.Discharg & 0x01) Gyro.PinReg |= PinRegBitD; else Gyro.PinReg &= ~PinRegBitD; Gyro.Discharg = Gyro.Discharg >> 1; } } if (Event1K) {// событие раз в 1 кГц Event1K --; Time1K++; if (Time1K == 1000) { Time1K = 0; Event1Hz ++; } } if (Event100K) {// событие раз в 100 кГц Event100K --; Time100K++; if (Time100K == 100) { Time100K = 0; Event1K ++; } } if (EventVibro) {// событие от вибр EventVibro --; } // Concol1 (); 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 (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 ******************************************************************************/