fork

Dependencies:   mbed

Fork of LG by igor Apu

Global.c

Committer:
Kovalev_D
Date:
2016-09-01
Revision:
192:d32c8cf7bcd9
Parent:
191:40028201ddad
Child:
193:a0fe8bfc97e4

File content as of revision 192:d32c8cf7bcd9:

#include "Global.h"



unsigned int 	VibroReg = 0;   //регистр состаяния вибропривода.
unsigned long	Global_Time, Time_UART,Time_Sec,Time_vibro,Time_1kHz;

unsigned char	BuffTemp[100];
unsigned char 	Time[500];
unsigned int 	Event1Hz;
unsigned int 	Event500Hz;
unsigned int 	Event1K ;
unsigned int 	Event100K;
unsigned int 	EventVibro;

unsigned int 	Time100K;
unsigned int 	Time1K;
unsigned int 	Time500Hz;
unsigned int 	Time1Hz;
unsigned int 	Clock1Hz;
unsigned int    ShiftD;
unsigned int    ShiftL;



__asm void boot_jump( uint32_t address ){
   LDR SP, [R0]         ;Load new stack pointer address
   LDR R0, [R0, #4]     ;Load new program counter address
   BX R0
}

void GLD_Init(void)
{
	 Gyro.DropDelayGLD = DropDelayGLD_0;//задержка на выдачу 45 микросекунд для любого адреса ГЛД
	 int Dummy; // инициализация мусорки для очистки буфера приема.
/////////////////////////////////////////////
///////////инициализация таймеров////////////
/////////////////////////////////////////////
     Init_TIM1(TIME_INTERVAL ); //Timer 1: CCLK / 7812 = 12800.819Hz; Vibro: Timer1/32 = 400.025Hz; 10ms???
	 Init_TIM2();				//Timer 2: CCLK / 4 / 250 = 100kHz
/////////////////////////////////////////////
/////////////////////////////////////////////	
	Gyro.RgConA = 0xffff;
	Gyro.RgConB = 0xffff;
/////////////////////////////////////////////
///////////обнуление счетчиков///////////////
/////////////////////////////////////////////
    Global_Time	= 0;
    Time_UART	= 0;
    Time_Sec	= 0;
    Time_vibro	= 0;
    Time_1kHz   = 0;
    Event1Hz 	= 0;
    Event1K 	= 0;
    Event100K 	= 0;
    EventVibro 	= 0;
    Time1K 		= 0;
    Time100K	= 0;
    Time1Hz		= 0;
    Clock1Hz	= 0;
    ShiftD		= 0;
    ShiftL		= 0;
    Event500Hz  = 0;
    Time500Hz   = 0;
    
/////////////////////////////////////////////
/////////////////////////////////////////////


    /////////////////////////////////////////////////////
    /////////////обнуление переменых для/////////////////
    ///////////расчета значений буферов ВП///////////////
    /////////////////////////////////////////////////////
    /////////////инициализация переменных в структ вибро/////////////////
    Gyro.Gain_Sin =100;
    Gyro.Gain_Cos =100;
    
    Gyro.FlashMod=0;
    Gyro.FrqHZ=450;
    Gyro.Frq = Gyro.FrqHZ<<16;
    Gyro.FrqHZmin = 350<<16;
    Gyro.FrqHZmax = 450<<16;
    Gyro.FrqChengSpeed=1000;
   
    Gyro.AmpPer=40;
    Gyro.AmpPerMin = 20;
    Gyro.AmpPerMax = 90;
    Gyro.AmpSpeed = 1;
    Gyro.AmpPerDel=3;
    Gyro.AmpTarget =20000;// целевая амплитуда ВП
    Gyro.Amp  = 10*65535;
    Gyro.AmpMin =2;// минимальное  значение AmpT;5
    Gyro.AmpTD =6;////////////////////////////////////////////////////////
    Gyro.CuruAngle  = 0;
    Pulse_8Point 	= 0;
    Pulse_16Point 	= 0;
    Pulse_16PointD	= 0;
    Pulse_32Point 	= 0;
    /////////////////////////////////////////////////////
    /////////////предварительное заполнение//////////////
    ////////////////буферов вибропривода/////////////////
    /////////////////////////////////////////////////////
    for (int i = 0; i < 32; i++ ) {
        Buff_16Point[i] 	= 0x00;
        Buff_8Point[i] 		= 0x00;
        Buff_32Point[i] 	= 0x00;
        Buff_16PointD[i] 	= 0x00;
        GyroP.Array[i]     = 0x00;
    }
    /*
   for (int i = 0; i < 170; i++ ) {
      GyroP.Array[i]     =i;
    }*/
    ////////////////////////////////////////////////////
    ////////////////////////////////////////////////////
	/////////////////////////////////////////////////////
    /////////////обнуление переменых для/////////////////
    //////////////////переменных АЦП/////////////////////
    /////////////////////////////////////////////////////
 //   Temp_AMP=0;
    Temp_AMP64P=0;
    Temp_ADC_2=0;
    Temp_ADC_3=0;
    Temp_ADC_4=0;
    Temp_ADC_5=0;
    /////////////////////////////////////////////////////
    /////////////предварительное заполнение//////////////
    /////////////////////буферов АЦП/////////////////////
    /////////////////////////////////////////////////////
    for (int i = 0; i < 32; i++ ) {
        Buff_ADC_1[i] 		= 0;	// ампл ацп.
        Buff_ADC_2[i] 		= 0;
        Buff_ADC_3[i] 		= 0;
        Buff_ADC_4[i] 		= 0;
      }
       for (int i = 0; i < 256; i++ ) {
       Buff_ADC_5[i]= 0;
    }
     for (int i = 0; i < 256; i++ ) {
       Buff_AMP64P[i]= 0;
    }
     for (int i = 0; i < 256; i++ ) {
       Buff_AMP[i]= 0;
    }
    ////////////////////////////////////////////////////
    ////////////////////////////////////////////////////





   
    Gyro.SOC_Out=0xDD;
    Gyro.Firmware_Version	= 0x11; //версия программы
    Gyro.GLD_Serial 		= 0xD7; //серийный номер
    Gyro.My_Addres			= 0; //адрес глд
    
    switch(Gyro.My_Addres){//смещение поджига и подсветки в зависимости от адреса ГЛД
    case 0:
    Gyro.Discharg =  StartDischarg  << ShiftStart0;
    Gyro.BackLight = StartBackLight << ShiftStart0;
    break;
    case 1:
    Gyro.Discharg =  StartDischarg  << ShiftStart1;
    Gyro.BackLight = StartBackLight << ShiftStart1;
    break;
    case 2:
    Gyro.Discharg =  StartDischarg  << ShiftStart2;
    Gyro.BackLight = StartBackLight << ShiftStart2;
    break;
    case 3:
    Gyro.Discharg =  StartDischarg  << ShiftStart3;
    Gyro.BackLight = StartBackLight << ShiftStart3;
    break;
}

    /////////////////////////////////////////////////////
    //////инициализация цап_LPC (р0.26 цап выход)////////
    /////////////////////////////////////////////////////
    LPC_PINCON->PINSEL1 = 0x00200000;
    /////////////////////////////////////////////////////
    ////////////начальное значение для цап///////////////
    //////////////////середина шкалы/////////////////////
    /////////////////////////////////////////////////////
   
    //  Spi.DAC_A = 20000;
    Spi.DAC_A = 38000;
    Spi.DAC_B = 38000;
    //Spi.DAC_A = 44000;
  
  //Spi.DAC_B = 0x7fff;  //старое начало
      //40000
   //Spi.DAC_B = 11000;  //для просмотра мод
   
    Gyro.StrayHZ		= 1000;
    Gyro.StrayHZ_flag	= 0;
    Gyro.LogHZ 		    = 0;
    
    Gyro.StrayPLC_Pls		=  1000;
    Gyro.StrayPLC_Mns		= -1000;
    Gyro.StrayPLC_2Mode	= 2000;
    Gyro.StrayPLC_flag	= 0;
    Gyro.LogPLC 		= 0;
    Gyro.PLC_Lern =  0;
    Gyro.ModJump = 0;
    Gyro.PLC_Error2Mode =500; //для записи мод  
  //Gyro.PLC_Error2Mode = 65;  //стандартное включение прибора регулировка (65 начальная задержка для поиска АМП мах)
    ////////////////////////////////////////////////////
    /////////////поправочный коэффициент/////////////////
    /////////для цапов (граници +-12.5 вольт)////////////
    /////////////////////////////////////////////////////
    K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2));
    K_DAC=0.8;
    /////////////////////////////////////////////////////
    /////////////////////////////////////////////////////



    secPuls =0;// переменная для конопки поджига аск глд(временная)


    /////////////////////////////////////////////////////
    /////////////обнуление переменых для/////////////////
    ///////////////переменных энкодера///////////////////
    /////////////////////////////////////////////////////
    Gyro.CaunPlus	=0;
    Gyro.CaunMin	=0;
    Cur_QEI=0;
    Last_QEI=0;
    /////////////////////////////////////////////////////
    /////////////инициализация энкодера//////////////////
    /////////////////////////////////////////////////////
    LPC_SC->PCONP |= (1<<18);//0x00040000;		включение квадратурного энкодера.
    LPC_SC->PCLKSEL1 |= 0x00000001;	   // выбор частоты для кв.э. CLK=103MHz
    LPC_PINCON->PINSEL3 &= ~0x4100;
    LPC_PINCON->PINSEL3 |= 0x4100;	  //P1.20, p1.23 установить как входы кв.э
    LPC_PINCON->PINMODE3 |= 0x3C300;	  //P1.20, p1.23 

 
    LPC_QEI->MAXPOS = MAX_QEI_CNT;	//LPC_QEI->"регистор максимального положения" = 2147483646
    LPC_QEI->FILTER = 2;		    // фильтр( ?? )
    LPC_QEI->CON = 0xF;				//сбросить в ноль все счетчики кв.э. (скорость, направление, позицию и тд)
    LPC_QEI->CONF = (0<<2) |(0<<1);	//Quadrature inputs, no inverting,only A pulses are counted

    LPC_QEI->CLR = 0x1fff; 			 //r. сбросить все прерывания
    LPC_QEI->IEC = 0x1fff;			 //r. запретить прерывание при изменении направления

  /*NVIC_SetPriority(QEI_IRQn, 0);
  NVIC_EnableIRQ(QEI_IRQn);*/
    //////////////////////////////////////////////////////
    //////////////////////////////////////////////////////


  //////////////////////////////////////////////////////
  ///////////////////////I2C////////////////////////////
  //////////////////////////////////////////////////////

  LPC_SC->PCONP |= (1 << 19);//включение интерфейса I2C.

  /* set PIO0.27 and PIO0.28 to I2C0 SDA and SCK */
  /* function to 01 on both SDA and SCK. */
  LPC_PINCON->PINSEL1 &= ~0x03C00000; //P0.27 - SDA.
  LPC_PINCON->PINSEL1 |= 0x01400000;	//P0.28 - SCK.

	//                   подтверждение     Флаг           флаг        разрешения 
  /*сброс флагоф          флага    прерывания I2C      старта      интерфейса I2C    */
  LPC_I2C0->CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;   // установка микроконтроллера в режим мастера 

  /*--- Reset registers ---*/
  LPC_I2C0->SCLL   = I2SCLL_SCLL; // - счетчик scl low time period
  LPC_I2C0->SCLH   = I2SCLH_SCLH; // - счетчик scl high time period
  
   	I2CMasterBuffer[0] = A_ADDRESS;  
	I2CMasterBuffer[1] = WRITE_CMD;  
	I2CMasterBuffer[3] = B_ADDRESS;  
	I2CMasterBuffer[4] = WRITE_CMD;  
  
  LPC_I2C0->CONSET = I2CONSET_I2EN; //включение интерфейса I2C.
  //////////////////////////////////////////////////////////
  //////////////////////////////////////////////////////////






    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////
    //////////////////////////SPI//////////////////////////
    ///////////////////////////////////////////////////////
   Dummy = Dummy;

  /* Enable AHB clock to the SSP0, SSP1 */
 	 LPC_SC->PCONP |= (0x1<<21); // включение SSP0.

  /* выбор частоты для переферии используем по умолчания с делителем основной на 4 */
   LPC_SC->PCLKSEL1 &= ~(0x3<<10);	//00 CLK/4;	1 CLK; 2 CLK/2; 3 CLK/8
   LPC_SC->PCLKSEL1 |= (0x0<<10);	//00 CLK/4;	1 CLK; 2 CLK/2; 3 CLK/

  // P0.15~0.18 as SSP0 
  LPC_PINCON->PINSEL0 &= ~(0x3UL<<30);  //установит Р 0.15 
  LPC_PINCON->PINSEL0 |=  (0x2UL<<30);  //частота для синхронизациии Master - slave

  LPC_PINCON->PINSEL1 &= ~((0x3<<0)|(0x3<<2)|(0x3<<4)); // устанивоить   Р 0.17    и   Р 0.18
  LPC_PINCON->PINSEL1 |=  ((0x2<<2)|(0x2<<4));	        //    как         MISO0    и    MOSI0

  LPC_PINCON->PINMODE0 &= ~(0x3UL<<30);// ?  установление на Р 0.15 режима On-Chip pull-down resistor enabled
  LPC_PINCON->PINMODE0 |=  (0x3UL<<30);// ?  установление на Р 0.15 режима On-Chip pull-down resistor enabled

  LPC_PINCON->PINMODE1 &= ~((0x3<<2)|(0x3<<4));// ?  установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled
  LPC_PINCON->PINMODE1 |=  ((0x3<<2)|(0x3<<4));// ?  установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled

  LPC_SSP0->CR0 = ((3<<8)|(0<<7)|(0<<4) |0xF); // (0xF)-установление DSS(Data sise select) в 16-битный формат, (3<<8 scr - выбор частоты), 
                                             	//   низкий уровень линии тактирования между кадрами, прикрепление передачи к первому нарастанию тактового мигнала
																						 //    формат кадра TI.
   
  /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */
  LPC_SSP0->CPSR = 0x2;	  // freq = CLK/(cpsdvr*(scr+1)) = 1.6 MHz
 
 /*SSP enable, master mode	   */
  LPC_SSP0->CR1 = SSPCR1_SSE;	
//  LPC_SSP1->CR1 = SSPCR1_SSE;
   while (LPC_SSP0->SR & SSP_BUSY);
   while (LPC_SSP0->SR & RX_SSP_notEMPT)  /* clear the RxFIFO */
	Dummy = LPC_SSP0->DR;		
  //all pins after reset is in GPIO mode, so CS pins needn't to configure
     LPC_GPIO0->FIODIR |= (1<<16);		// P0.16 defined as CS for ADC
	 LPC_GPIO0->FIOSET |= (1<<16);		// set CS for ADC

	LPC_GPIO0->FIODIR |= (1<<23);		// P defined as CS for DAC
	LPC_GPIO0->FIOCLR |= (1<<23);		// set CS for DAC 
    while (LPC_SSP1->SR & RX_SSP_notEMPT)
	Dummy = LPC_SSP1->DR;	/* clear the RxFIFO */
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////




    /////////////////////////////////////////////////////
    /////////////////инициализация ног///////////////////
    /////////////////////////////////////////////////////
    
    /////////////////////////////////////////////////////
    Gyro.PinRegOld  = 0xffffffff;
    Gyro.PinReg     = 0;        // всЁ выключенно
    PinCheng();
    /////////////////////////////////////////////////////

    /////////////////////////////////////////////////////
    //////////////отладочный светодиод///////////////////
    /////////////////////////////////////////////////////
    
    LPC_PINCON->PINSEL0  &= ~(0x00<<28);
    LPC_PINCON->PINSEL0  |=  (0x00<<28);   // а нужно, ведь по умолчаниб у них 0 функция. попробоввать без них потом убрать
    LPC_PINCON->PINMODE0 |=  (0x3<<28);
    LPC_GPIO1->FIODIR    |=  (1<<30);
    /////////////////////////////////////////////////////
    /////////////////////////////////////////////////////


    /////////////////////////////////////////////////////
    ////////////////управление уартом////////////////////
    /////////////////////////////////////////////////////
    LPC_GPIO2->FIODIR   |= (1<<7);//направление ноги uart enable
    /////////////////////////////////////////////////////
    /////////////////////////////////////////////////////



    /////////////////////////////////////////////////////
    ///////////////////////поджиг////////////////////////
    /////////////////////////////////////////////////////
    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 как выход)
    /////////////////////////////////////////////////////
    /////////////////////////////////////////////////////



    /////////////////////////////////////////////////////
    /////////////////////вибро 1/////////////////////////
    /////////////////////////////////////////////////////
    LPC_PINCON->PINSEL3  &= ~(0x00<<18);       //e. P1.25 is GPIO pin
    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);
    //////////////////////////////////////////////////////
    //////////////////////вибро 2/////////////////////////
    //////////////////////////////////////////////////////
    LPC_PINCON->PINSEL3   &= ~(0x00<<24);       //e. P1.28 is GPIO pin
    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); 
    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);
    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////


    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////
    ///////////////////включение таймеров//////////////////
    ///////////////////////////////////////////////////////    
    enable_timer1();
    enable_timer2();
    ///////////////////////////////////////////////////////
    
    //////////////////////////////////////////////////////////////////
    // LPC_GPIO0->FIOCLR = (1<<5);/////////////отключение поджига
    
    

    ///////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////
    //////////////////////////SPI//////////////////////////
    ///////////////////////////////////////////////////////
   Dummy = Dummy;

  /* Enable AHB clock to the SSP0, SSP1 */
 	 LPC_SC->PCONP |= (0x1<<21); // включение SSP0.

  /* выбор частоты для переферии используем по умолчания с делителем основной на 4 */
   LPC_SC->PCLKSEL1 &= ~(0x3<<10);	//00 CLK/4;	1 CLK; 2 CLK/2; 3 CLK/8
   LPC_SC->PCLKSEL1 |= (0x0<<10);	//00 CLK/4;	1 CLK; 2 CLK/2; 3 CLK/

  // P0.15~0.18 as SSP0 
  LPC_PINCON->PINSEL0 &= ~(0x3UL<<30);  //установит Р 0.15 
  LPC_PINCON->PINSEL0 |=  (0x2UL<<30);  //частота для синхронизациии Master - slave

  LPC_PINCON->PINSEL1 &= ~((0x3<<0)|(0x3<<2)|(0x3<<4)); // устанивоить   Р 0.17    и   Р 0.18
  LPC_PINCON->PINSEL1 |=  ((0x2<<2)|(0x2<<4));	        //    как         MISO0    и    MOSI0

  LPC_PINCON->PINMODE0 &= ~(0x3UL<<30);// ?  установление на Р 0.15 режима On-Chip pull-down resistor enabled
  LPC_PINCON->PINMODE0 |=  (0x3UL<<30);// ?  установление на Р 0.15 режима On-Chip pull-down resistor enabled

  LPC_PINCON->PINMODE1 &= ~((0x3<<2)|(0x3<<4));// ?  установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled
  LPC_PINCON->PINMODE1 |=  ((0x3<<2)|(0x3<<4));// ?  установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled

  LPC_SSP0->CR0 = ((3<<8)|(0<<7)|(0<<4) |0xF); // (0xF)-установление DSS(Data sise select) в 16-битный формат, (3<<8 scr - выбор частоты), 
                                             	//   низкий уровень линии тактирования между кадрами, прикрепление передачи к первому нарастанию тактового мигнала
																						 //    формат кадра TI.
   
  /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */
  LPC_SSP0->CPSR = 0x2;	  // freq = CLK/(cpsdvr*(scr+1)) = 1.6 MHz
 
 /*SSP enable, master mode	   */
  LPC_SSP0->CR1 = SSPCR1_SSE;	
//  LPC_SSP1->CR1 = SSPCR1_SSE;
  while (LPC_SSP0->SR & SSP_BUSY);
  while (LPC_SSP0->SR & RX_SSP_notEMPT)  /* clear the RxFIFO */
	Dummy = LPC_SSP0->DR;		
  //all pins after reset is in GPIO mode, so CS pins needn't to configure
     LPC_GPIO0->FIODIR |= (1<<16);		// P0.16 defined as CS for ADC
	 LPC_GPIO0->FIOSET |= (1<<16);		// set CS for ADC

	LPC_GPIO0->FIODIR |= (1<<23);		// P defined as CS for DAC
	LPC_GPIO0->FIOCLR |= (1<<23);		// set CS for DAC 
    while (LPC_SSP1->SR & RX_SSP_notEMPT)
	Dummy = LPC_SSP1->DR;	/* clear the RxFIFO */

}