⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 DSP通过EMIF接口与外部FIFO通信并实现IQ调制功能
💻 C
📖 第 1 页 / 共 2 页
字号:

/*EDMA传输结束中断*/
void hwiEdmaIsr(int arg)
{   
    flag++;
	if(EDMA_intTest(TCCINTNUM_in))		/*输入中断*/
	{
		EDMA_intClear(TCCINTNUM_in);	/*清除输入中断字*/
        flag_ping=1;
        num_ping++;
        EDMA_disableChannel(hEdma);
	}
	if(EDMA_intTest(TCCINTNUM_out))								/*输出中断*/
	{
		EDMA_intClear(TCCINTNUM_out);   /*清除输入中断字*/
		EDMA_RSET(ECRL,0x00000040);     /*关闭EDMA输出*/
		flag_pong=1;
		num_pong++;	
	} 
    if(flag_ping&&flag_pong){
        if(pingpong==PING){
	        SWI_or(&processingSwi, PING);
            pingpong=PONG;
        }
        else{
            SWI_or(&processingSwi, PONG);
            pingpong=PING;
        }
        flag_ping=0;
        flag_pong=0;
       EDMA_enableChannel(hEdma);
       EDMA_RSET(ESRL,0x00000040);
    }

}

/*用户程序,输入变量:*in;输出变量:*out. 变量长度:BUFF_SZ*/
void processing(void)
{
	int x,pingpong_flag;
	struct complex_sh outbuff[2048];	
	pingpong_flag=SWI_getmbox();
	if(pingpong_flag==PING){
	CalcBPFilter(ping,outbuff);
	for(x=0;x<2048;x++)
	{
		outping[x]=(outbuff[x].x>>2);
		//outping[x+1024]=(outbuff[x].y>>2);
	}
	}
	else{
	CalcBPFilter(pong,outbuff);
	for(x=0;x<2048;x++)
	{
		outpong[x]=(outbuff[x].x>>2);
		//outping[x+1024]=(outbuff[x].y>>2);
	}	
	}
}


void CalcBPFilter( short *restrict pIn, struct complex_sh *restrict pOut )
{
struct 		complex_t acc;
const short *restrict IKptr;//Q15定标
const short *restrict QKptr;//Q15定标
const short *restrict Fir_in;
int 		i;
int 		a3_a2, a1_a0;
int 		b3_b2, b1_b0;
int 		c3_c2, c1_c0;

int 		a3_a2_0, a1_a0_0;
int 		b3_b2_0, b1_b0_0;
int			c3_c2_0, c1_c0_0;

int 		a3_a2_1, a1_a0_1;
int 		b3_b2_1, b1_b0_1;
int 		c3_c2_1, c1_c0_1;

int 		a3_a2_2, a1_a0_2;
int 		b3_b2_2, b1_b0_2;
int 		c3_c2_2, c1_c0_2;

#pragma MUST_ITERATE( 2048 );

for ( i = 0; i < BUFF_SZ; i++ )
	{   	
		IKptr = IHilbertBPFirCoef;
		QKptr = QHilbertBPFirCoef;
		Fir_in = pIn + i;
			//0
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			//1
			a3_a2_0 = _hi( _memd8_const( Fir_in ) );
			a1_a0_0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2_0 = _hi( _amemd8_const( IKptr ) );
			b1_b0_0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2_0 = _hi( _amemd8_const( QKptr ) );
			c1_c0_0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x = _dotp2( a3_a2_0, b3_b2_0 ) + _dotp2( a3_a2, b3_b2 );
			acc.y = _dotp2( a3_a2_0, c3_c2_0 ) + _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0_0, b1_b0_0 ) + _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0_0, c1_c0_0 ) + _dotp2( a1_a0, c1_c0 );
			//2
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );	
			//3
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );			
			//4
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );	
			//5
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );			
			//6			
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );	
			//7
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );
			//8
			a3_a2_1 = _hi( _memd8_const( Fir_in ) );
			a1_a0_1 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2_1 = _hi( _amemd8_const( IKptr ) );
			b1_b0_1 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2_1 = _hi( _amemd8_const( QKptr ) );
			c1_c0_1 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			//9
			a3_a2_2 = _hi( _memd8_const( Fir_in ) );
			a1_a0_2 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2_2 = _hi( _amemd8_const( IKptr ) );
			b1_b0_2 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2_2 = _hi( _amemd8_const( QKptr ) );
			c1_c0_2 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2_1, b3_b2_1 ) + _dotp2( a3_a2_2, b3_b2_2 );
			acc.y += _dotp2( a3_a2_1, c3_c2_1 ) + _dotp2( a3_a2_2, c3_c2_2 );
			acc.x += _dotp2( a1_a0_1, b1_b0_1 ) + _dotp2( a1_a0_2, b1_b0_2 );
			acc.y += _dotp2( a1_a0_1, c1_c0_1 ) + _dotp2( a1_a0_2, c1_c0_2 );
			//10
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );	
			//11
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );
			//12
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );	
			//13
			a3_a2 = _hi( _memd8_const( Fir_in ) );
			a1_a0 = _lo( _memd8_const( Fir_in ) );
			Fir_in = Fir_in + 4;
			b3_b2 = _hi( _amemd8_const( IKptr ) );
			b1_b0 = _lo( _amemd8_const( IKptr ) );
			IKptr = IKptr + 4;
			c3_c2 = _hi( _amemd8_const( QKptr ) );
			c1_c0 = _lo( _amemd8_const( QKptr ) );
			QKptr = QKptr + 4;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );
			acc.x += _dotp2( a1_a0, b1_b0 );
			acc.y += _dotp2( a1_a0, c1_c0 );		
			
			a3_a2 = _mem4_const( Fir_in );
			Fir_in = Fir_in + 2;
			b3_b2 = _amem4_const( IKptr );
			IKptr = IKptr + 2;
			c3_c2 = _amem4_const( QKptr );
			QKptr = QKptr + 2;
			acc.x += _dotp2( a3_a2, b3_b2 );
			acc.y += _dotp2( a3_a2, c3_c2 );	
						
			acc.x += ( *Fir_in ) * ( *IKptr );//改为16位成以16位
			acc.y += ( *Fir_in ) * ( *QKptr );	
		pOut[i].x = acc.x>>12;
		//*a = pOut[i].x;
		pOut[i].y = acc.y>>12;
		//*b = pOut[i].y;
	}
 }



/*----------------------------------------------------------------------------*/

/******************************************************************************\
* End of main.c
\******************************************************************************/
                                                                                

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -