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 LG2 by
Global.c
- Committer:
- Kovalev_D
- Date:
- 2016-03-28
- Revision:
- 95:dd51e577e114
- Parent:
- 92:c892f0311aa7
- Child:
- 96:1c8536458119
File content as of revision 95:dd51e577e114:
#include "Global.h"
unsigned int VibroReg = 0; //регистр состаяния вибропривода.
unsigned long Global_Time, Time_UART,Time_Sec,Time_vibro,Time_1kHz;
unsigned long MaxAmp=0;
unsigned char BuffTemp[100];
unsigned char Time[500];
unsigned int Event1Hz;
unsigned int Event1K ;
unsigned int Event100K;
unsigned int EventVibro;
unsigned int Time1K;
unsigned int Time100K;
unsigned int Time1Hz;
unsigned int Clock1Hz;
unsigned int ShiftD;
unsigned int ShiftL;
void GLD_Init(void)
{
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
/////////////////////////////////////////////
/////////////////////////////////////////////
/////////////////////////////////////////////
///////////обнуление счетчиков///////////////
/////////////////////////////////////////////
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;
/////////////////////////////////////////////
/////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////обнуление переменых для/////////////////
///////////расчета значений буферов ВП///////////////
/////////////////////////////////////////////////////
/////////////инициализация переменных в структ вибро/////////////////
Gyro.FrqHZ=449;
Gyro.Frq = Gyro.FrqHZ<<16;
Gyro.AmpPer=20;
Gyro.AmpPerDel=10;
Gyro.Amp = 10*65535;
Gyro.AmpMin =10;// минимальное значение AmpT;
Gyro.AmpTD =30;// максимальное значение AmpT; (AmpT частота ошумления)
//////////////////////////////////////////////////////////////////////
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;
}
////////////////////////////////////////////////////
////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/////////////обнуление переменых для/////////////////
//////////////////переменных АЦП/////////////////////
/////////////////////////////////////////////////////
Temp_AMP=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;
}
////////////////////////////////////////////////////
////////////////////////////////////////////////////
Gyro.SOC_Out=0xDD;
Gyro.Firmware_Version =0x15; //версия программы
Gyro.GLD_Serial = 0x20; //серийный номер
Gyro.My_Addres = 0; //адрес глд
Gyro.Discharg = StartDischarg;
Gyro.BackLight = StartBackLight;
/////////////////////////////////////////////////////
//////инициализация цап_LPC (р0.26 цап выход)////////
/////////////////////////////////////////////////////
LPC_PINCON->PINSEL1 = 0x00200000;
/////////////////////////////////////////////////////
////////////начальное значение для цап///////////////
//////////////////середина шкалы/////////////////////
/////////////////////////////////////////////////////
Spi.DAC_A = 0x7fff;
Spi.DAC_B = 0x7fff;
////////////////////////////////////////////////////
/////////////поправочный коэффициент/////////////////
/////////для цапов (граници +-12.5 вольт)////////////
/////////////////////////////////////////////////////
K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2));
K_DAC=0.8;
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
secPuls =0;// переменная для конопки поджига аск глд(временная)
/////////////////////////////////////////////////////
/////////////обнуление переменых для/////////////////
///////////////переменных энкодера///////////////////
/////////////////////////////////////////////////////
Cur_QEI=0;
Last_QEI=0;
/////////////////////////////////////////////////////
/////////////инициализация энкодера//////////////////
/////////////////////////////////////////////////////
LPC_SC->PCONP |= (1<<18);//0x00040000; включение квадратурного энкодера.
LPC_SC->PCLKSEL1 |= 0x00000001; // выбор частоты для кв.э. CLK=100MHz
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
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); // а нужно, ведь по умолчаниб у них 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->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->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);
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
///////////////////включение таймеров//////////////////
///////////////////////////////////////////////////////
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 */
}
