![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
forkd
Fork of LGstaandart by
Diff: SPI.c
- Revision:
- 112:4a96133a1311
- Parent:
- 110:6406b7ac0442
- Child:
- 113:8be429494918
--- a/SPI.c Mon Apr 04 03:21:25 2016 +0000 +++ b/SPI.c Mon Apr 04 11:09:56 2016 +0000 @@ -1,6 +1,6 @@ #include "Global.h" struct SPI Spi; -unsigned int Temp_AMP; +//unsigned int Temp_AMP; unsigned int Temp_AMP64P; unsigned int Count_AMP, ADD_AMP, Cur_Amp; @@ -44,48 +44,64 @@ Spi.ADC2_Accum += LPC_SSP0->DR; Spi.ADC1_Accum += LPC_SSP0->DR; while (LPC_SSP0->SR & RX_SSP_notEMPT) {DummySPI = LPC_SSP0->DR;} //если буфер SPI не пуст.//очистить буфер. - LPC_SSP0->DR=0x5555; - LPC_SSP0->DR=0x5555; - LPC_SSP0->DR=0x5555; - - if (CountV31 & 1) { // если нечетный такт то - LPC_SSP0->DR = WRITE_DAC0; // команда для ЦАП_0 передавать. - LPC_SSP0->DR = (Spi.DAC_A); - } else { //если такт четный. - LPC_SSP0->DR = WRITE_DAC1 ; // команда для ЦАП_1 передавать. - LPC_SSP0->DR = (Spi.DAC_B); // передача 12 бит - } + + + DAC_OutPut(); + if (CountV31 == 0) // просто фильтруем по 32 точкам. { - Spi.ADC_NewData = 1; // выставояем бит, что есть новы данные + // выставояем бит, что есть новы данные Spi.ADC1 = Spi.ADC1_Accum >> 5; // подгоотавливаем данные (в той эе сетке) те ADC1 0..65535 Spi.ADC2 = Spi.ADC2_Accum >> 5; Spi.ADC3 = Spi.ADC3_Accum >> 5; Spi.ADC4 = Spi.ADC4_Accum >> 5; Spi.ADC5 = Spi.ADC5_Accum >> 5; - Spi.ADC1_Accum = 0; // сбрасывкем аккамулятор - Spi.ADC2_Accum = 0; - Spi.ADC3_Accum = 0; - Spi.ADC4_Accum = 0; - Spi.ADC5_Accum = 0; + Spi.ADC1_Accum = 0; // сбрасывкем аккамулятор + Spi.ADC2_Accum = 0; + Spi.ADC3_Accum = 0; + Spi.ADC4_Accum = 0; + Spi.ADC5_Accum = 0; + Spi.PLC_NewData = 1; } + Spi.ADC_NewData = 1; +} +void PlcRegul(void) +{ + int Delta; + + ADD_AMP+=Spi.ADC5; + Count_AMP++; + if(Count_AMP>=(32*32+8)) + { + Delta = ADD_AMP - Cur_Amp; + + if(Gyro.RgConA&0x2) + { + if (Znak_Amp > 1) {Znak_Amp --;} + else if ( Delta > 30000000 ) {AD_Regul += 5000000; Znak_Amp = 5;} + else if ( Delta < (-3000000)) {AD_Regul += 5000000; Znak_Amp = 5;} + else if ((Delta * Znak_Amp) > 0) + { + Znak_Amp = 1; + AD_Regul -= (Delta * Znak_Amp * 10); + } + else + { + Znak_Amp = -1; + AD_Regul -= (Delta * Znak_Amp * 10); + } + + Spi.DAC_B = (AD_Regul + 0x1fffffff)/65536; + } + Cur_Amp=ADD_AMP; Count_AMP=0; ADD_AMP=0; + } + } -void SPI_Exchange(void) +void DAC_OutPut(void)//выдача в цапы { - unsigned int DummySPI; - int Delta; - - Spi.ADC5 = LPC_SSP0->DR; - Spi.ADC4 = LPC_SSP0->DR; - Spi.ADC3 = LPC_SSP0->DR; - Spi.ADC2 = LPC_SSP0->DR; - Spi.ADC1 = LPC_SSP0->DR; - - Input.ArrayIn[2]= Spi.ADC5; - - LPC_SSP0->DR=0x5555; + LPC_SSP0->DR=0x5555; LPC_SSP0->DR=0x5555; LPC_SSP0->DR=0x5555; @@ -96,65 +112,37 @@ LPC_SSP0->DR = WRITE_DAC1 ; //e.команда для ЦАП_1 передавать. LPC_SSP0->DR = (Spi.DAC_B); //e. передача 12 бит } +} + + +void SPI_Exchange(void) +{ + unsigned int DummySPI; + + + Spi.ADC5 = LPC_SSP0->DR; + Spi.ADC4 = LPC_SSP0->DR; + Spi.ADC3 = LPC_SSP0->DR; + Spi.ADC2 = LPC_SSP0->DR; + Spi.ADC1 = LPC_SSP0->DR; + + Input.ArrayIn[2]= Spi.ADC5; + + DAC_OutPut(); // LPC_DAC->CR = (((SinPLC[CountV64]*35/5)+24300));// модулятор -// LPC_DAC->CR = (((SinPLC[CountV64]*35/5)+24300));// модулятор + while (LPC_SSP0->SR & RX_SSP_notEMPT) //если буфер SPI не пуст. DummySPI = LPC_SSP0->DR; //очистить буфер. - - Buff_ADC_1 [CountV31] = Spi.ADC1; - Buff_ADC_2 [CountV31] = Spi.ADC2; - Buff_ADC_3 [CountV31] = Spi.ADC3; - Buff_ADC_4 [CountV31] = Spi.ADC4; + //заполнение буферов еденичных значений АЦП. + Buff_ADC_1 [CountV31] = Spi.ADC1; + Buff_ADC_2 [CountV31] = Spi.ADC2; + Buff_ADC_3 [CountV31] = Spi.ADC3; + Buff_ADC_4 [CountV31] = Spi.ADC4; Buff_ADC_5 [CountV255] = Spi.ADC5; // ампл ацп. - -// Temp_AMP += Buff_ADC_5[CountV255]; -// Temp_AMP -= Buff_ADC_5[(CountV255-32) & 0xff]; // заполнение буфера накопленых приращений за 8 тактов -// Buff_AMP[CountV255] = (unsigned int) (Temp_AMP); - -// Temp_AMP += Buff_ADC_5[CountV255]; -// Temp_AMP -= Buff_ADC_5[(CountV255-32) & 0xff]; // з -// Temp_AMP += Buff_ADC_5[(CountV255-64) & 0xff]; // -// Temp_AMP -= Buff_ADC_5[(CountV255-96) & 0xff]; // з -// Buff_AMP[CountV255] = (unsigned int) (Temp_AMP); - - ADD_AMP+=Spi.ADC5; - Count_AMP++; - if(Count_AMP>=(32*32+8)) - { - Delta = ADD_AMP - Cur_Amp; - - if(Gyro.RgConA&0x2){ - - - - if (Znak_Amp > 10) {Znak_Amp --;} - else if ( Delta > 30000000 ) {AD_Regul += 5000000; Znak_Amp = 5;} - else if ( Delta < (-3000000)) {AD_Regul += 5000000; Znak_Amp = 5;} - else if ((Delta * Znak_Amp) > 0) - { -// Spi.DAC_B += 1 ; - Znak_Amp = 1; - AD_Regul += (Delta * Znak_Amp * 100); - } - else - { -// Spi.DAC_B -= 1; - Znak_Amp = -1; - AD_Regul += (Delta * Znak_Amp * 100); - } - - Spi.DAC_B = (AD_Regul + 0x1fffffff)/65536; - - - } - - - - Cur_Amp=ADD_AMP; Count_AMP=0; ADD_AMP=0; - } + Temp_AMP64P += Buff_ADC_5[CountV255]; Temp_AMP64P -= Buff_ADC_5[(CountV255-64) & 0xff]; // заполнение буфера накопленых приращений за 8 тактов Buff_AMP64P[CountV255] = (unsigned int) (Temp_AMP64P); @@ -171,4 +159,5 @@ Temp_ADC_5 += Buff_ADC_1[CountV255]; Temp_ADC_5 -= Buff_ADC_1[(CountV255-32) & 0xff]; + Spi.PLC_NewData=1; } \ No newline at end of file