TEST(IQmath_ExtractInteger, IQ17int)
{
    LONGS_EQUAL(16383, _IQ17int(_IQ17(16383.999992371))) ;
    LONGS_EQUAL(-16384, _IQ17int(_IQ17(-16384.0))) ;
}
Пример #2
0
int main(void)
{
	/* FIFO Buffer */
	unsigned long temp[1];

	/*Set the clocking to directly run from the crystal at 8MHz*/
	SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);

	/*Enable ADC Peripheral*/
	SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);

	//Enable Timers.
	SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);

	/* Set the clock for the GPIO Port B */
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
	/* Set the type of the GPIO Pin */
	GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5);

	/* UART configuration */
	InitConsole();

	//Setting the timer for PWM
	TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PWM);
	TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM);
	TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM);

	/*Configure ADC Peripheral*/
	ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);

	/*Configure ADC Sequence*/
	ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH5 | ADC_CTL_IE | ADC_CTL_END);

	/*Enable ADC sequence*/
	ADCSequenceEnable(ADC0_BASE, 3);

	/*Clear ADC Interrupt*/
	ADCIntClear(ADC0_BASE, 3);

	IntMasterEnable();
    TimerLoadSet(TIMER2_BASE, TIMER_B, 500);
    TimerLoadSet(TIMER1_BASE, TIMER_A, 500);
    TimerLoadSet(TIMER0_BASE, TIMER_A, 500);


unsigned long i,k,counter=0,i1=0;

long num1,y=0,num2,num3,j=0,sum1=0,sum2=0,sum3=0;



 	while(1)
    {

		for(i=0;i<15648;i++)
		  {
             if(i%24 == 0)
             {
            	ADCProcessorTrigger(ADC0_BASE, 3);
				while(!ADCIntStatus(ADC0_BASE, 3, false))
				{
				}
	      ADCIntClear(ADC0_BASE, 3);
	      ADCSequenceDataGet(ADC0_BASE, 3, temp);
          x[i/24]=temp[0];
             }
		   }

		num1=0;
		num2=0;
		num3=0;
		n1=_IQ17(0);
		n2=_IQ17(0);
		n3=_IQ17(0);
		 for(k=0;k<652;k++)
			{
			 l1= _IQ17(b1[k]);
			 l2= _IQ17(b2[k]);
			 l3= _IQ17(b3[k]);
	    	  m= _IQ17(x[651-k]);
			 n1=n1 + _IQ17mpy(l1,m);
			 n2=n2 + _IQ17mpy(l2,m);
			 n3=n3 + _IQ17mpy(l3,m);
	         }
		 num1=_IQ17int(n1);
		 num2=_IQ17int(n2);
		 num3=_IQ17int(n3);
		 sum1+=num1*num1;
		 sum2+=num2*num2;
		 sum3+=num3*num3;
		 j++;

		 if(j==15)
		 {
			 sum1=sum1/500;
			 sum2=sum2/500;
			 sum3=sum3/500;
			 r1=isqrt(sum1);
		     r2=isqrt(sum2);
		     r3=isqrt(sum3);
			 sum1=sum2=0;
			 j=0;
		 }


        r01=r1*r1*r1;
        r02=r2*r2*r2;
        r03=r3*r3*r3;


        if(r01>0)
        	{
        	TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM);
        	pwm1(256-r01);
        	}
        else
        	{
        	TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PERIODIC);
        	}


        if(r02>0)
        	{
        	TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM);
        	pwm2(256-r02);
        	}
        else
        	{
        	TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PERIODIC);
        	}


        if(r03>0)
        	{
        	TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PWM);
            pwm3(256-r03);
        	}
        else
        	{
        	TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PERIODIC);
        	}

    }
}