Dmitry Kovalev
/
LG2
fork
Fork of LG by
Embed:
(wiki syntax)
Show/hide line numbers
Global.c
00001 #include "Global.h" 00002 00003 unsigned int VibroReg = 0; //регистр состаяния вибропривода. 00004 unsigned long Global_Time, Time_UART,Time_Sec,Time_vibro,Time_1kHz; 00005 float t1; 00006 unsigned char BuffTemp[100]; 00007 unsigned char Time[1000]; 00008 unsigned int Event1Hz; 00009 unsigned int Event100Hz; 00010 unsigned int Event250Hz; 00011 unsigned int Event500Hz; 00012 unsigned int Event1K; 00013 unsigned int Event1250Hz; 00014 unsigned int Event2K; 00015 unsigned int Event100K; 00016 unsigned int EventVibro; 00017 unsigned int MODFlag=0; 00018 unsigned int Time250Hz; 00019 unsigned int Event250Hz; 00020 00021 unsigned int Time100K; 00022 unsigned int Time1K; 00023 unsigned int Time1250Hz; 00024 unsigned int Time2K; 00025 unsigned int Time500Hz; 00026 unsigned int Time250Hz; 00027 unsigned int Time1Hz; 00028 unsigned int Time100Hz; 00029 unsigned int Clock1Hz; 00030 unsigned int ShiftD; 00031 unsigned int ShiftL; 00032 00033 00034 00035 00036 00037 int BuffADC_1Point [600]; 00038 int BuffADC_1Point_64 [100]; 00039 int BuffADC_1Point_Recalc [100]; 00040 int BuffADC_64Point [100]; 00041 int BuffADC_16Point [100]; 00042 int BuffADC_znak [100]; 00043 00044 int Buff_Restored_Mod [100]; 00045 int Buff_PLC_Eror [100]; 00046 int BSinMns [100]; 00047 int BSinPls [100]; 00048 int ADC_1Point =0; 00049 int ADC_32PointD =0; 00050 int ADC_64Point =0; 00051 int ADC_16Point =0; 00052 //unsigned int EventMod; 00053 00054 00055 __asm void boot_jump( uint32_t address ){ 00056 LDR SP, [R0] ;Load new stack pointer address 00057 LDR R0, [R0, #4] ;Load new program counter address 00058 BX R0 00059 } 00060 00061 void Param_init(void) 00062 { 00063 int temp=0; 00064 00065 InitMOD(); 00066 00067 Gyro.CuruAngleLog=0; 00068 Global_Time = 0; 00069 Time_UART = 0; 00070 Time_Sec = 0; 00071 Time_vibro = 0; 00072 Time1250Hz = 0; 00073 Time_1kHz = 0; 00074 Event1Hz = 0; 00075 Event1K = 0; 00076 Event100K = 0; 00077 EventVibro = 0; 00078 Time1K = 0; 00079 Time100K = 0; 00080 Time1Hz = 0; 00081 Clock1Hz = 0; 00082 ShiftD = 0; 00083 ShiftL = 0; 00084 Event500Hz = 0; 00085 Time500Hz = 0; 00086 00087 Temp_AMP64P = 0; 00088 00089 Gyro.Log = 0; 00090 Gyro.LogPLC = 0; 00091 Gyro.PLC_Lern = 0; 00092 Gyro.CuruAngle = 0; 00093 Pulse_8Point = 0; 00094 Pulse_16Point = 0; 00095 Pulse_16PointD = 0; 00096 Pulse_32Point = 0; 00097 Gyro.FlashMod = 0; 00098 00099 00100 ///////////////////////////////////////////// 00101 ///////////инициализация таймеров//////////// 00102 ///////////////////////////////////////////// 00103 Init_TIM1(TIME_INTERVAL ); //Timer 1: CCLK / 7812 = 12800.819Hz; Vibro: Timer1/32 = 400.025Hz; 10ms??? 00104 Init_TIM2(); //Timer 2: CCLK / 4 / 250 = 100kHz 00105 ///////////////////////////////////////////// 00106 /////////////инициализация переменных в структ вибро///////////////// 00107 00108 Gyro.DropDelayGLD = DropDelayGLD_0;//задержка на выдачу 45 микросекунд для любого адреса ГЛД 00109 Gyro.PLC_Error2Mode = 1400; 00110 Gyro.SOC_Out = 0xDD; 00111 00112 Gyro.RgConMod = 1; 00113 00114 GyroP.Str.ParamMod=0; 00115 00116 ReadFlash (); 00117 // GyroP.Str.ParamMod=0; 00118 if(GyroP.Str.ParamMod) 00119 { 00120 00121 Gyro.PLC_Start = 0x7fff+GyroP.Str.PLC_Start; 00122 Gyro.DownTreshold = 0x7fff+GyroP.Str.DownTreshold; //27 00123 Gyro.HighTreshold = 0x7fff+GyroP.Str.HighTreshold; 00124 Gyro.PLCDelay = GyroP.Str.PLCDelay/10; 00125 Gyro.ResetLevelCool = 0x7fff+GyroP.Str.ResetLevelCool; //105 00126 Gyro.ResetLevelHeat = 0x7fff+GyroP.Str.ResetLevelHeat; 00127 Gyro.HFO_Gain = GyroP.Str.HFO_Gain; 00128 Gyro.HFO_ref = (unsigned int)(GyroP.Str.HFO_ref)*0.82; 00129 Gyro.LG_Type = GyroP.Str.LG_Type; 00130 Gyro.My_Addres = GyroP.Str.My_Addres; // Gyro.My_Addres = 0; 00131 Gyro.GLD_Serial = GyroP.Str.GLD_Serial; 00132 Gyro.FrqHZ = (7680000/GyroP.Str.FrqHZ); 00133 Gyro.Frq = ((7680000/GyroP.Str.FrqHZ)<<16); 00134 Gyro.FrqHZmin = ((7680000/GyroP.Str.FrqHZmin)<<16); 00135 Gyro.FrqHZmax = ((7680000/GyroP.Str.FrqHZmax)<<16); 00136 Gyro.FrqChengSpeed = GyroP.Str.FrqChengSpeed; 00137 Gyro.PLC_Gain = GyroP.Str.PLC_Gain; 00138 Gyro.PLC_Phase = GyroP.Str.PLC_Phase; 00139 Gyro.ModAmp = GyroP.Str.ModAmp; 00140 Gyro.FrqPhase = GyroP.Str.FrqPhase; 00141 Gyro.AmpPer = 700;//GyroP.Str.AmpPer*100; 00142 Gyro.Amp =(GyroP.Str.AmpPer<<17); 00143 Gyro.AmpSpeed = GyroP.Str.AmpSpeed; 00144 Gyro.AmpPerDel = GyroP.Str.AmpPerDel; 00145 temp=((GyroP.Str.VB_Fdf_Hi<<16) | GyroP.Str.VB_Fdf_Lo); 00146 temp=temp*20; 00147 Gyro.AmpTarget=(unsigned int)(temp); 00148 Gyro.AmpPerMin = GyroP.Str.AmpPerMin; 00149 Gyro.AmpPerMax = GyroP.Str.AmpPerMax; 00150 Gyro.AmpMin = GyroP.Str.AmpMin; 00151 Gyro.AmpTD = GyroP.Str.AmpTD; 00152 F_vib=(103200000<<5)/((Gyro.Frq)>>10);//периуд вибро. 00153 T_vibP = F_vib/10000; 00154 T_vib_1 = Gyro.AmpPer * T_vibP; 00155 T_vib_2 = T_vibP * (10000-Gyro.AmpPer); 00156 LPC_MCPWM->LIM1 = F_vib; 00157 LPC_MCPWM->LIM2 = F_vib; 00158 LPC_MCPWM->MAT1 = T_vib_1; 00159 LPC_MCPWM->MAT2 = T_vib_2; 00160 if(Gyro.LG_Type==1){ 00161 Gyro.HFO_Max=((int)(GyroP.Str.DAC_current_Work*0.67)-2000); 00162 Gyro.HFO_Min=((int)(GyroP.Str.DAC_current_Start*0.67)-2000); 00163 00164 } 00165 else Spi.DAC_A = ((((int)(GyroP.Str.DAC_current_Work+0x7fff) & 0xffff)+22544)*0.65); 00166 Gyro.DacIn = GyroP.Str.DAC_current_Work; 00167 // Gyro.TermoNKU = GyroP.Str.TermoNKU<<2; 00168 Gyro.Firmware_Version = 0x11; 00169 // Spi.DAC_A = GyroP.Str.DAC_A; 00170 // Spi.DAC_B = GyroP.Str.DAC_B; 00171 Gyro.Gain_Sin = GyroP.Str.Gain_Sin; 00172 Gyro.Gain_Cos = GyroP.Str.Gain_Cos; 00173 Out_G_photo(Gyro.Gain_Sin, Gyro.Gain_Cos); 00174 } 00175 else 00176 { 00177 Gyro.DownTreshold = GyroP.Str.DownTreshold; //27 00178 Gyro.HighTreshold = GyroP.Str.HighTreshold; 00179 Gyro.PLCDelay = 30000; 00180 Gyro.ResetLevelCool = 56000; //105 00181 Gyro.ResetLevelHeat = 15000; 00182 Gyro.HFO_ref = 13000; 00183 Gyro.LG_Type = 0; 00184 Gyro.PLC_Phase = 3; 00185 Gyro.PLC_Gain = 3; 00186 Gyro.FrqPhase = 8; 00187 Gyro.FrqHZ = 403; 00188 Gyro.Frq = Gyro.FrqHZ<<16; 00189 Gyro.FrqHZmin = 350<<16; 00190 Gyro.FrqHZmax = 450<<16; 00191 Gyro.FrqChengSpeed = 100; 00192 Gyro.ModAmp = 250; 00193 Gyro.AmpPer = 20; 00194 Gyro.AmpPerMin = 2; 00195 Gyro.AmpPerMax = 90; 00196 Gyro.AmpSpeed = 1; 00197 Gyro.AmpPerDel = 3; 00198 Gyro.AmpTarget = 5500;// целевая амплитуда ВП 00199 Gyro.Amp = 20*65535; 00200 Gyro.AmpMin = 20;// минимальное значение AmpT;5 00201 Gyro.AmpTD = 20;//////////////////////////////////////////////////////// 00202 Gyro.TermoNKU = 44700;//48824*0,0061-273=25 С° 00203 Spi.DAC_B = Gyro.PLC_Start; 00204 Gyro.PLC_Error2Mode = 1400; //для записи мод 00205 Gyro.Gain_Sin = 175; 00206 Gyro.Gain_Cos = 215; 00207 Gyro.Firmware_Version = 0x11; //версия программы 00208 Gyro.GLD_Serial = 123; //серийный номер 00209 Gyro.My_Addres = 0; //адрес глд 00210 Gyro.Tmp_OffsetT4 = 0; 00211 Gyro.Tmp_OffsetT5 = 0; 00212 Gyro.Tmp_scaleT4 = 1; //53 00213 Gyro.Tmp_scaleT5 = 1; 00214 00215 Gyro.DAC_current_Work =50000; //3 00216 Gyro.DAC_current_Start =41000; 00217 00218 00219 F_vib=(103200000<<5)/((Gyro.Frq)>>10);//периуд вибро. 00220 T_vibP = F_vib/10000; 00221 T_vib_1 = Gyro.AmpPer * T_vibP; 00222 T_vib_2 = T_vibP * (10000-Gyro.AmpPer); 00223 LPC_MCPWM->LIM1 = F_vib; 00224 LPC_MCPWM->LIM2 = F_vib; 00225 LPC_MCPWM->MAT1 = T_vib_1; 00226 LPC_MCPWM->MAT2 = T_vib_2; 00227 } 00228 Spi.DAC_B=Gyro.PLC_Start; 00229 switch(Gyro.My_Addres){//смещение поджига и подсветки в зависимости от адреса ГЛД 00230 case 0: 00231 Gyro.Discharg = StartDischarg << ShiftStart0; 00232 Gyro.BackLight = StartBackLight << ShiftStart0; 00233 break; 00234 case 1: 00235 Gyro.Discharg = StartDischarg << ShiftStart1; 00236 Gyro.BackLight = StartBackLight << ShiftStart1; 00237 break; 00238 case 2: 00239 Gyro.Discharg = StartDischarg << ShiftStart2; 00240 Gyro.BackLight = StartBackLight << ShiftStart2; 00241 break; 00242 case 3: 00243 Gyro.Discharg = StartDischarg << ShiftStart3; 00244 Gyro.BackLight = StartBackLight << ShiftStart3; 00245 break; 00246 } 00247 00248 ///////////////////////////////////////////////////// 00249 //////инициализация цап_LPC (р0.26 цап выход)//////// 00250 ///////////////////////////////////////////////////// 00251 LPC_PINCON->PINSEL1 = 0x00200000; 00252 ///////////////////////////////////////////////////// 00253 ////////////начальное значение для цап/////////////// 00254 //////////////////середина шкалы///////////////////// 00255 ///////////////////////////////////////////////////// 00256 00257 //////////////////////////////////////////////////// 00258 /////////////поправочный коэффициент///////////////// 00259 /////////для цапов (граници +-12.5 вольт)//////////// 00260 ///////////////////////////////////////////////////// 00261 K_DAC=65535.0/(65535.0+(deltaDAC+deltaDAC/2)); 00262 K_DAC=0.8; 00263 00264 ///////////////////////////////////////////////////// 00265 /////////////обнуление переменых для///////////////// 00266 ///////////////переменных энкодера/////////////////// 00267 ///////////////////////////////////////////////////// 00268 secPuls =0;// переменная для конопки поджига аск глд(временная) 00269 Gyro.CaunPlus =0; 00270 Gyro.CaunMin =0; 00271 Cur_QEI=0; 00272 Last_QEI=0; 00273 } 00274 00275 void GLD_Init(void) 00276 { 00277 int Dummy; // инициализация мусорки для очистки буфера приема. 00278 00279 00280 if(Gyro.LG_Type==1)Spi.DAC_A=(unsigned int)(26000); 00281 00282 00283 00284 ///////////////////////////////////////////////////// 00285 /////////////инициализация энкодера////////////////// 00286 ///////////////////////////////////////////////////// 00287 00288 LPC_SC->PCONP |= (1<<18);//0x00040000; включение квадратурного энкодера. 00289 LPC_SC->PCLKSEL1 |= 0x00000001; // выбор частоты для кв.э. CLK=103MHz 00290 LPC_PINCON->PINSEL3 &= ~0x4100; 00291 LPC_PINCON->PINSEL3 |= 0x4100; //P1.20, p1.23 установить как входы кв.э 00292 LPC_PINCON->PINMODE3 |= 0x3C300; //P1.20, p1.23 00293 00294 00295 LPC_QEI->MAXPOS = MAX_QEI_CNT; //LPC_QEI->"регистор максимального положения" = 2147483646 00296 LPC_QEI->FILTER = 2; // фильтр( ?? ) 00297 LPC_QEI->CON = 0xF; //сбросить в ноль все счетчики кв.э. (скорость, направление, позицию и тд) 00298 LPC_QEI->CONF = (1<<2) |(0<<1); //Quadrature inputs, no inverting,only A pulses are counted 00299 00300 LPC_QEI->CLR = 0x1fff; //r. сбросить все прерывания 00301 LPC_QEI->IEC = 0x1fff; //r. запретить прерывание при изменении направления 00302 00303 /*NVIC_SetPriority(QEI_IRQn, 0); 00304 NVIC_EnableIRQ(QEI_IRQn);*/ 00305 ////////////////////////////////////////////////////// 00306 ////////////////////////////////////////////////////// 00307 00308 00309 ////////////////////////////////////////////////////// 00310 ///////////////////////I2C//////////////////////////// 00311 ////////////////////////////////////////////////////// 00312 00313 LPC_SC->PCONP |= (1 << 19);//включение интерфейса I2C. 00314 00315 /* set PIO0.27 and PIO0.28 to I2C0 SDA and SCK */ 00316 /* function to 01 on both SDA and SCK. */ 00317 LPC_PINCON->PINSEL1 &= ~0x03C00000; //P0.27 - SDA. 00318 LPC_PINCON->PINSEL1 |= 0x01400000; //P0.28 - SCK. 00319 00320 // подтверждение Флаг флаг разрешения 00321 /*сброс флагоф флага прерывания I2C старта интерфейса I2C */ 00322 LPC_I2C0->CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC; // установка микроконтроллера в режим мастера 00323 00324 /*--- Reset registers ---*/ 00325 LPC_I2C0->SCLL = I2SCLL_SCLL; // - счетчик scl low time period 00326 LPC_I2C0->SCLH = I2SCLH_SCLH; // - счетчик scl high time period 00327 00328 I2CMasterBuffer[0] = A_ADDRESS; 00329 I2CMasterBuffer[1] = WRITE_CMD; 00330 I2CMasterBuffer[3] = B_ADDRESS; 00331 I2CMasterBuffer[4] = WRITE_CMD; 00332 00333 LPC_I2C0->CONSET = I2CONSET_I2EN; //включение интерфейса I2C. 00334 ////////////////////////////////////////////////////////// 00335 ////////////////////////////////////////////////////////// 00336 00337 00338 00339 00340 00341 00342 /////////////////////////////////////////////////////// 00343 /////////////////////////////////////////////////////// 00344 //////////////////////////SPI////////////////////////// 00345 /////////////////////////////////////////////////////// 00346 Dummy = Dummy; 00347 00348 /* Enable AHB clock to the SSP0, SSP1 */ 00349 LPC_SC->PCONP |= (0x1<<21); // включение SSP0. 00350 00351 /* выбор частоты для переферии используем по умолчания с делителем основной на 4 */ 00352 LPC_SC->PCLKSEL1 &= ~(0x3<<10); //00 CLK/4; 1 CLK; 2 CLK/2; 3 CLK/8 00353 LPC_SC->PCLKSEL1 |= (0x0<<10); //00 CLK/4; 1 CLK; 2 CLK/2; 3 CLK/ 00354 00355 // P0.15~0.18 as SSP0 00356 LPC_PINCON->PINSEL0 &= ~(0x3UL<<30); //установит Р 0.15 00357 LPC_PINCON->PINSEL0 |= (0x2UL<<30); //частота для синхронизациии Master - slave 00358 00359 LPC_PINCON->PINSEL1 &= ~((0x3<<0)|(0x3<<2)|(0x3<<4)); // устанивоить Р 0.17 и Р 0.18 00360 LPC_PINCON->PINSEL1 |= ((0x2<<2)|(0x2<<4)); // как MISO0 и MOSI0 00361 00362 LPC_PINCON->PINMODE0 &= ~(0x3UL<<30);// ? установление на Р 0.15 режима On-Chip pull-down resistor enabled 00363 LPC_PINCON->PINMODE0 |= (0x3UL<<30);// ? установление на Р 0.15 режима On-Chip pull-down resistor enabled 00364 00365 LPC_PINCON->PINMODE1 &= ~((0x3<<2)|(0x3<<4));// ? установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled 00366 LPC_PINCON->PINMODE1 |= ((0x3<<2)|(0x3<<4));// ? установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled 00367 00368 LPC_SSP0->CR0 = ((3<<8)|(0<<7)|(0<<4) |0xF); // (0xF)-установление DSS(Data sise select) в 16-битный формат, (3<<8 scr - выбор частоты), 00369 // низкий уровень линии тактирования между кадрами, прикрепление передачи к первому нарастанию тактового мигнала 00370 // формат кадра TI. 00371 00372 /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */ 00373 LPC_SSP0->CPSR = 0x2; // freq = CLK/(cpsdvr*(scr+1)) = 1.6 MHz 00374 00375 /*SSP enable, master mode */ 00376 LPC_SSP0->CR1 = SSPCR1_SSE; 00377 // LPC_SSP1->CR1 = SSPCR1_SSE; 00378 while (LPC_SSP0->SR & SSP_BUSY); 00379 while (LPC_SSP0->SR & RX_SSP_notEMPT) /* clear the RxFIFO */ 00380 Dummy = LPC_SSP0->DR; 00381 //all pins after reset is in GPIO mode, so CS pins needn't to configure 00382 LPC_GPIO0->FIODIR |= (1<<16); // P0.16 defined as CS for ADC 00383 LPC_GPIO0->FIOSET |= (1<<16); // set CS for ADC 00384 00385 LPC_GPIO0->FIODIR |= (1<<23); // P defined as CS for DAC 00386 LPC_GPIO0->FIOCLR |= (1<<23); // set CS for DAC 00387 while (LPC_SSP1->SR & RX_SSP_notEMPT) 00388 Dummy = LPC_SSP1->DR; /* clear the RxFIFO */ 00389 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// 00390 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// 00391 ///////////////////////////////////////////////////////////////////////////////////////////////////////////// 00392 00393 00394 00395 00396 ///////////////////////////////////////////////////// 00397 /////////////////инициализация ног/////////////////// 00398 ///////////////////////////////////////////////////// 00399 00400 ///////////////////////////////////////////////////// 00401 Gyro.PinRegOld = 0xffffffff; 00402 Gyro.PinReg = 0; // всЁ выключенно 00403 PinCheng(); 00404 ///////////////////////////////////////////////////// 00405 Gyro.ModeOut=0; 00406 ///////////////////////////////////////////////////// 00407 //////////////отладочный светодиод/////////////////// 00408 ///////////////////////////////////////////////////// 00409 00410 LPC_PINCON->PINSEL0 &= ~(0x00<<28); 00411 LPC_PINCON->PINSEL0 |= (0x00<<28); 00412 LPC_PINCON->PINMODE0 |= (0x3<<28); 00413 LPC_GPIO1->FIODIR |= (1<<30); 00414 ///////////////////////////////////////////////////// 00415 ///////////////////////////////////////////////////// 00416 NVIC_EnableIRQ(EINT3_IRQn ); 00417 // LPC_GPIOINT->IO0IntEnF |= (1<<1); /* enable falling edge irq */ 00418 LPC_GPIOINT->IO0IntEnR |= (1<<1); /* enable rasing edge irq */ 00419 ///////////////////////////////////////////////////// 00420 ////////////////управление уартом//////////////////// 00421 ///////////////////////////////////////////////////// 00422 LPC_GPIO2->FIODIR |= (1<<7);//направление ноги uart enable 00423 ///////////////////////////////////////////////////// 00424 ///////////////////////////////////////////////////// 00425 00426 00427 00428 ///////////////////////////////////////////////////// 00429 ///////////////////////поджиг//////////////////////// 00430 ///////////////////////////////////////////////////// 00431 LPC_PINCON->PINSEL0 &= ~(3<<8); //e. P0.4 is GPIO pin (запись ( 00 ) в 9:8 бит PISEL0 выбор P0.4 как GPIO) 00432 LPC_PINCON->PINMODE0 |= (3<<8); //e. P0.4 is GPIO pin (запись ( 11 ) в 9:8 бит PINMODE0 "для включения подтягивающего резистора") 00433 LPC_GPIO0->FIODIR |= (1<<4); //e. P0.4 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.4 как выход) 00434 ///////////////////////////////////////////////////// 00435 ///////////////////////////////////////////////////// 00436 00437 00438 00439 ///////////////////////////////////////////////////// 00440 /////////////////////вибро 1///////////////////////// 00441 ///////////////////////////////////////////////////// 00442 LPC_PINCON->PINSEL3 &= ~(0x00<<18); //e. P1.25 is GPIO pin 00443 LPC_PINCON->PINSEL3 |= (0x00<<18); //e. P1.25 is GPIO pin 00444 LPC_PINCON->PINMODE3 |= (3<<18); //e. P1.25 (включениe подтягивающего резистора") 00445 LPC_GPIO1->FIODIR |= (1<<25); //e. P0.5 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00446 LPC_GPIO1->FIOCLR |= (1<<25); 00447 ////////////////////////////////////////////////////// 00448 //////////////////////вибро 2///////////////////////// 00449 ////////////////////////////////////////////////////// 00450 LPC_PINCON->PINSEL3 &= ~(0x00<<24); //e. P1.28 is GPIO pin 00451 LPC_PINCON->PINSEL3 |= (0x00<<24); //e. P1.28 is GPIO pin 00452 LPC_PINCON->PINMODE3 |= (3<<24); //e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0 "для включения подтягивающего резистора") 00453 LPC_GPIO1->FIODIR |= (1<<28); //e. P1.28 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00454 LPC_GPIO1->FIOCLR |= (1<<28); 00455 ///////////////////////////////////////////////////// 00456 ///////////////////////////////////////////////////// 00457 00458 00459 00460 ///////////////////////////////////////////////////// 00461 /////////////инициализация подсветки///////////////// 00462 ///////////////////////////////////////////////////// 00463 LPC_PINCON->PINSEL2 &= ~(0x00<<24); 00464 LPC_PINCON->PINSEL2 |= (0x00<<24); //e. P2.12 is GPIO pin 00465 LPC_PINCON->PINMODE3 |= (3<<24); //e. P1.28 is GPIO pin (запись ( 11 ) в бит PINMODE0 "для включения подтягивающего резистора") 00466 LPC_GPIO2->FIODIR |= (1<<12); //e. P1.28 is output (запись ( 1 ) в 5 бит FIODIR выбор P0.5 как выход) 00467 LPC_GPIO2->FIOCLR |= (1<<12); 00468 /////////////////////////////////////////////////////// 00469 /////////////////////////////////////////////////////// 00470 00471 00472 /////////////////////////////////////////////////////// 00473 /////////////////////////////////////////////////////// 00474 ///////////////////включение таймеров////////////////// 00475 /////////////////////////////////////////////////////// 00476 enable_timer1(); 00477 enable_timer2(); 00478 /////////////////////////////////////////////////////// 00479 00480 ////////////////////////////////////////////////////////////////// 00481 // LPC_GPIO0->FIOCLR = (1<<5);/////////////отключение поджига 00482 00483 00484 00485 /////////////////////////////////////////////////////// 00486 /////////////////////////////////////////////////////// 00487 //////////////////////////SPI////////////////////////// 00488 /////////////////////////////////////////////////////// 00489 Dummy = Dummy; 00490 00491 /* Enable AHB clock to the SSP0, SSP1 */ 00492 LPC_SC->PCONP |= (0x1<<21); // включение SSP0. 00493 00494 /* выбор частоты для переферии используем по умолчания с делителем основной на 4 */ 00495 LPC_SC->PCLKSEL1 &= ~(0x3<<10); //00 CLK/4; 1 CLK; 2 CLK/2; 3 CLK/8 00496 LPC_SC->PCLKSEL1 |= (0x0<<10); //00 CLK/4; 1 CLK; 2 CLK/2; 3 CLK/ 00497 00498 // P0.15~0.18 as SSP0 00499 LPC_PINCON->PINSEL0 &= ~(0x3UL<<30); //установит Р 0.15 00500 LPC_PINCON->PINSEL0 |= (0x2UL<<30); //частота для синхронизациии Master - slave 00501 00502 LPC_PINCON->PINSEL1 &= ~((0x3<<0)|(0x3<<2)|(0x3<<4)); // устанивоить Р 0.17 и Р 0.18 00503 LPC_PINCON->PINSEL1 |= ((0x2<<2)|(0x2<<4)); // как MISO0 и MOSI0 00504 00505 LPC_PINCON->PINMODE0 &= ~(0x3UL<<30);// ? установление на Р 0.15 режима On-Chip pull-down resistor enabled 00506 LPC_PINCON->PINMODE0 |= (0x3UL<<30);// ? установление на Р 0.15 режима On-Chip pull-down resistor enabled 00507 00508 LPC_PINCON->PINMODE1 &= ~((0x3<<2)|(0x3<<4));// ? установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled 00509 LPC_PINCON->PINMODE1 |= ((0x3<<2)|(0x3<<4));// ? установление на Р 0.17 и Р 0.18 режима On-Chip pull-down resistor enabled 00510 00511 LPC_SSP0->CR0 = ((3<<8)|(0<<7)|(0<<4) |0xF); // (0xF)-установление DSS(Data sise select) в 16-битный формат, (3<<8 scr - выбор частоты), 00512 // низкий уровень линии тактирования между кадрами, прикрепление передачи к первому нарастанию тактового мигнала 00513 // формат кадра TI. 00514 00515 /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */ 00516 LPC_SSP0->CPSR = 0x2; // freq = CLK/(cpsdvr*(scr+1)) = 1.6 MHz 00517 00518 /*SSP enable, master mode */ 00519 LPC_SSP0->CR1 = SSPCR1_SSE; 00520 // LPC_SSP1->CR1 = SSPCR1_SSE; 00521 while (LPC_SSP0->SR & SSP_BUSY); 00522 while (LPC_SSP0->SR & RX_SSP_notEMPT) /* clear the RxFIFO */ 00523 Dummy = LPC_SSP0->DR; 00524 //all pins after reset is in GPIO mode, so CS pins needn't to configure 00525 LPC_GPIO0->FIODIR |= (1<<16); // P0.16 defined as CS for ADC 00526 LPC_GPIO0->FIOSET |= (1<<16); // set CS for ADC 00527 00528 LPC_GPIO0->FIODIR |= (1<<23); // P defined as CS for DAC 00529 LPC_GPIO0->FIOCLR |= (1<<23); // set CS for DAC 00530 while (LPC_SSP1->SR & RX_SSP_notEMPT) 00531 Dummy = LPC_SSP1->DR; /* clear the RxFIFO */ 00532 //Gyro=GyroP.str; 00533 //Gyro = (*(struct Gyro*)(&GyroP.Str)); 00534 00535 } 00536 00537 00538 00539 00540
Generated on Wed Jul 13 2022 02:30:10 by 1.7.2