?? main.c
字號:
/*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 + -