fork

Dependencies:   mbed

Fork of LG by igor Apu

QEI.c

Committer:
Kovalev_D
Date:
2016-04-01
Revision:
106:250ddd8629c6
Parent:
105:bd01d8d20fb6
Child:
107:4d178bcc9d8a

File content as of revision 106:250ddd8629c6:

#include "Global.h"





int Dif_QEI;

int FFF=0;//для заплатки


int Pulse_8Point;
int Pulse_16Point;
int Pulse_32Point;
int Pulse_16PointD;
int Iras=0,Temp_F_ras=0;
int yy = 0;




int Buff_32Point		[32];			
int Buff_16Point		[32];
int Buff_16PointD		[32];
int Buff_8Point			[32];
int Buff_Restored_sin 	[32];
int Buff_1Point			[256];			// этот на 256



int unsigned Cur_QEI, Last_QEI;

// ДАВАЙ попробуем сделать буфера в целых (знаковы)
/*__irq void QEI_IRQHandler (void)
{
    Cur_QEI =  LPC_QEI->POS & 0xFFFF;		//e. read accumulated value of counter
    LPC_QEI->CLR = 0x1fff;			//e. reset interrupt request //r. сбросить запрос прерывания
}*/

void D_QEI(void)
{
    Dif_QEI=0;
    Cur_QEI  =  LPC_QEI->POS & 0xFFFF; // считывание текущего значения энкодера.
    Dif_QEI  =  (Cur_QEI - Last_QEI);  // получение приращения.()
    Last_QEI =  Cur_QEI;               // запись текущего значения энкодера в регистр предыдущего значения.

    if (Dif_QEI < -0xfff)  Dif_QEI += 0x10000;   // обработка прохода значения через ноль
    if (Dif_QEI >  0xfff)  Dif_QEI -= 0x10000;    // обработка прохода значения через ноль


    Buff_1Point[CountV255] = /*(unsigned int)*/ (Dif_QEI /* + 0xffff*/  );// накопление в буфер еденичных значений приращения по каждому такту.

    ////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////////
/*
    if (LPC_QEI->STAT) {					//e. "+" direction //r. стали вращаться в "+" сторону
        Gyro.Cnt_Mns -= Cur_QEI;
    } else {
        Gyro.Cnt_Pls = Cur_QEI;
    }
*/
    ////////// ???? Заплатка
    ////////// ???? Проблема начального заполнения буферов
    //////////////////////////////////////////////////////////////////////////////////////////////
   if(1)// if(FFF==1) { // если прошло 32 такта вибро подвеса начать заполнять остальные буверы.
       {  Pulse_8Point += Buff_1Point[CountV255];
        Pulse_8Point -= Buff_1Point[(CountV255-8) & 0xff];                    // заполнение буфера накопленых приращений за 8 тактов
        Buff_8Point[CountV31] = /*(unsigned int)*/ (Pulse_8Point/* + 0xffff*/);

        Pulse_16Point += Buff_1Point[CountV255];
        Pulse_16Point -= Buff_1Point[(CountV255-16) & 0xff];									// заполнение буфера накопленых приращений за 16 тактов
        Buff_16Point[CountV31] = /*(unsigned int)*/ (Pulse_16Point /*+ 0xffff*/);

        Pulse_32Point += Buff_1Point[CountV255];
        Pulse_32Point -= Buff_1Point[(CountV255-32) & 0xff];  								// заполнение буфера накопленых приращений за 32 тактов
        Gyro.Cnt_Dif  =  (Pulse_32Point/*+ 0xffff*/);
        Buff_32Point[CountV31] = /*(unsigned int)*/ (Pulse_32Point /*+ 0xffff*/);

        Pulse_16PointD += Buff_1Point[CountV255];
        Pulse_16PointD -= Buff_1Point[(CountV255-16) & 0xff];									// заполнение буфера накопленых приращений за 16 тактов Двойныз
        Pulse_16PointD += Buff_1Point[(CountV255-32) & 0xff];									//
        Pulse_16PointD -= Buff_1Point[(CountV255-48) & 0xff];									// з

        Buff_16PointD[CountV31] = /*(unsigned int)*/ (Pulse_16PointD /*+ 0xffff*/);

        Buff_Restored_sin [CountV31]= /*(unsigned int)*/( Buff_16PointD [ CountV31] /*+ 65536 */ - Buff_32Point[CountV31] );
       /*
        if(Buff_16Point[CountV255]<0)
        {
        Gyro.Cnt_Mns-=Buff_16Point[CountV255];
        }
        else
        {
        Gyro.Cnt_Pls+=Buff_16Point[CountV255];
        }*/
        
    if(Buff_Restored_sin [CountV31] > 0)Temp_F_ras += Buff_Restored_sin [CountV31];
    else Temp_F_ras -= Buff_Restored_sin [CountV31]; 			// расчет амплитуды

    if (CountV31 == 0) {								// если определеный так, то переписываем амиплитуду
        Gyro.F_ras = Temp_F_ras;
        Temp_F_ras = 0;
       
    }
   

    } else if(CountV255 == 255) {
        FFF=1;//временная заплатка  для паузы перед заполнением остальных буферов
    //    for (yy = 0; yy < 31; yy++ ) {
   ///         Buff_1Point [yy] = 0x00;
   //         Buff_16Point [yy] = 0x00;
   //         Buff_32Point [yy] = 0x00;
   //         Buff_16PointD [yy] = 0x0;
   //     }

    }
}