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

📄 myproc.c

📁 TMS320C6416的BOOTLOADER程序代码
💻 C
字号:
/*********************************************************/
/*                                                       */
/*                DETECT.C                                 */
/*                                                       */
/*     The program is used to detect and  estimate       */
/*                                                       */
/*     the signal received .                      */   
/*                                                       */
/*     And the program can be used when only one target. */
/*                                                       */
/*     Copyright2004.11-2005.5 by FU JIN          */
/*                                                       */
/*********************************************************/



void myproc()
{
    int position;
    int x;
 	int absx;
 
    position=num_cal%0x10;
    *(unsigned volatile int *)TIMER0_CTRL=0x03c5;
    flag_chn=0;
    add_yout=0;//add all notch-filter output
    //*******update the thresh*******************
     # pragma MUST_ITERATE(ChnNum,ChnNum);
    for(i=0;i<ChnNum;i++)
    { ws[i]=ws[i]+(((e*u1>>15)*SINE[pXS[i]])>>15);//u=4000/32768;
	  wc[i]=wc[i]+(((e*u1>>15)*SINE[pXC[i]])>>15);
	  pXS[i]=(pXS[i]+STEP_f[i])%0x2000;
	  pXC[i]=(pXC[i]+STEP_f[i])%0x2000;
	  yout[i]=((ws[i]*SINE[pXS[i]])>>15)+((wc[i]*SINE[pXC[i]])>>15);
	  absout[i]=_abs(yout[i])>>4; 
	  A[i]=A[i]+absout[i]-absout_buf[i][position];
	  absout_buf[i][position]=absout[i];
      //THRESH_h[i]=((unsigned short)(THRESH_h[i]>>1)+A[i])>>1;
     // THRESH_h[i]=((unsigned short)(THRESH_h[i]>>1)+A[i])>>1;//problem
      THRESH_h[i]=100;
      add_yout=add_yout+yout[i];
      
	 /***************VIFD********************/
      B[i]=ws[i]*wc_p[i]-ws_p[i]*wc[i];
      C[i]=ws_p[i]*ws[i]+wc_p[i]*wc[i];
      ws_p[i]=ws[i];
      wc_p[i]=wc[i];
      
  }
   # pragma MUST_ITERATE(ChnNum,ChnNum);
for (i=0;i<ChnNum;i++)
 {
 
	x=(B[i]<<11)/C[i] ;
	absx=_abs(x); 
	if (absx<2048)
	   w[i]=atan_table[absx];
	else if (absx==2048)
       w[i]=4096;
	else
	{
    	absx=2048*2048/absx;
    	w[i]=atan_table[absx];
    	w[i]=8192-w[i];
	}
	if (x<0)
		w[i]=-w[i];
		}
   # pragma MUST_ITERATE(ChnNum,ChnNum);
 for(i=0;i<ChnNum;i++)
    { 
      
      dtf[i]=w[i]*fs>>15;
      sum_f[i]+=dtf[i]-dtf_buf[i][position];
      sum_f2[i]+=(unsigned int)((dtf[i])*(dtf[i]))-(unsigned int)(dtf_buf[i][position]*dtf_buf[i][position]);
      dtf_buf[i][position]=dtf[i];
     // meanf[i]=-(sum_f[i]>>4);// 频率差
  	 // varf[i]=(unsigned int)(sum_f2[i]>>4)-meanf[i]*meanf[i]; 
  
  }
    # pragma MUST_ITERATE(ChnNum,ChnNum);
 for(i=0;i<ChnNum;i++)
    { 
      
 if (A[i]<THRESH_h[i])
  	     { 
  	       if(KUAN[i]>=IDENT)
  	       { 
  	   	  	  
	  	       //if (((flag_all<1)||(varf[i]<THRESH_vifd))&&((delay[i]-T_first[i])>10000)) 
  	   	  	  if ((flag_all<1)||(pulse_varf[i]<THRESH_vifd))
  	   	  	      {
  	   	  	         delay[i]=num_cal-KUAN[i];
	  	   	  	    //if((delay[i]-T_last[i])>15000)//判断为首脉冲
	  	   	  	    if(1)
	  	   	  	      { 
	  	   	  	        trans[i].pulse[flag_first[i]].width=KUAN[i];
		  	   	  	    trans[i].pulse[flag_first[i]].amp=amp[i];
			       	    trans[i].pulse[flag_first[i]].varf=pulse_varf[i];
			       	    trans[i].pulse[flag_first[i]].dtf=pulse_meanf[i];
			       	    trans[i].pulse[flag_first[i]].delay=delay[i];
			       	    T_first[i]=delay[i];
			       	    flag_first[i]++;//last last last//首脉冲个数加1
			       	    }
	  	   	  	     else 
	  	   	  	      {
	  	   	  	       //除了首脉冲外的脉冲
	  	   	  	       if(num_p[i]<3)
	  	   	  	        { way[i].pulse[num_p[i]].width=KUAN[i];
			  	   	  	  way[i].pulse[num_p[i]].amp=amp[i];
			  	   	  	  way[i].pulse[num_p[i]].varf=pulse_varf[i];
			  	   	  	  way[i].pulse[num_p[i]].dtf=pulse_meanf[i];
			  	   	  	  way[i].pulse[num_p[i]].delay=delay[i];
	  	   	  	         }
	  	   	  	         else if(amp[i]>way[i].pulse[min[i]].amp) 
			  	   	  	  { min[i]=(way[i].pulse[0].amp>way[i].pulse[1].amp)?1:0;
				       	    min[i]=(way[i].pulse[min[i]].amp>way[i].pulse[2].amp)?2:min[i];
		                    way[i].pulse[min[i]].width=KUAN[i];
				       	    way[i].pulse[min[i]].amp=amp[i];
				       	    way[i].pulse[min[i]].varf=pulse_varf[i];
				       	    way[i].pulse[min[i]].dtf=pulse_meanf[i];
				       	    way[i].pulse[min[i]].delay=delay[i];
			  	   	  	  }
			  	   	  num_p[i]++;//must after up data
			  	   	  }
	  	   	  	 flag_chn++; 
		       	 T_last[i]=delay[i];
	  	   	  	 
  	   	    }
  	   	   
  	   	 }
  	   	 KUAN[i]=0;
  	   	 amp[i]=0;//must 
  	      }
  	    else
  	    {
  	     
  	      
  	       KUAN[i]++;
  	       if (A[i]>amp[i])
  	       {
  	       amp[i]=A[i];
  	       pulse_meanf[i]=-(sum_f[i]>>4);
  	       pulse_varf[i]=(unsigned int)(sum_f2[i]>>4)-pulse_meanf[i]*pulse_meanf[i];
  	       //保留最大的幅度和对应的方差//problem
  	     	  
  	   }
     }
  }
 
   flag_all+=flag_chn-flag_buf[position];//num_cal%10 has problem
   flag_buf[position]=flag_chn;//对于同一个通道这个时刻一定没有脉冲(宽度门限)

   e=DATA-add_yout;
   *(unsigned volatile int *)TIMER0_CTRL=0x0305;
}

⌨️ 快捷键说明

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