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

📄 master_main_old_原来机场算法.c

📁 DSP编程
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************
*    The programme serves the Master-DSP in primary Board    *
*    Designed by zw,    November 26,  2004                   *
**************************************************************/

#include <stdio.h>
#include <c6x.h>
#include <math.h>
#include "include.h"
#include "target.h"

#define TEST
#define TEST_DSP1_2

/*---------------------*/
/* GLOBAL VARIABLE:    */
/*---------------------*/
#pragma DATA_SECTION(ImgBufferArea,"STORE_IN_IRAM");
 INT16S ImgBufferArea[IMG_SIZE];
 
#pragma DATA_SECTION(img_buff,"STORE_IN_IRAM");
 INT16U img_buff[IMG_SIZE];
 
#pragma DATA_SECTION(seg_buff,"STORE_IN_IRAM");
  INT8U seg_buff[IMG_SIZE];   
       
#pragma DATA_SECTION(TrashArea,"STORE_IN_SDRAM");
 INT16S TrashArea[IMG_SIZE];
 
#pragma DATA_SECTION(RecRstArea,"STORE_IN_IRAM");
volatile PROC_RESULT RecRstArea[3];
volatile PROC_RESULT TransRstArea;

#pragma DATA_SECTION(symbol_tmp,"STORE_IN_IRAM")
 INT16U symbol_tmp[6][8*16]={
  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,SYMBOLGRAY,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,0,0,0,0,0,0,SYMBOLGRAY,0,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,SYMBOLGRAY,0,0,0,SYMBOLGRAY,0,0,SYMBOLGRAY,0,0,0,0,0,SYMBOLGRAY,SYMBOLGRAY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
 };

volatile INT8U RecfromDsp1_flag=0, RecfromDsp2_flag=0, TransToDsp1_flag=0, TransToDsp2_flag=0,
               exch_flag=0, TransToDpram_flag=0, TransToHotlink_flag=0, RecMsg_flag=0, 
               RawImgRxEnable=1, BusEnable=1, StartTrace_flag=1, IsNeedGetMask[3]={1,1,1};

volatile INT32U RawImgRxCnt=0, RstImgTxCnt=0, Trash_Count=0, Delay_Count=0, ExchFromDsp1Cnt=0, ExchFromDsp2Cnt=0;

volatile MSG message_rec, message_trans;
volatile INT16U control_rec=0, control_trans[2];
volatile DSP_STATE dsp_s={good,good,good};
volatile short target_max,target_min,cur_x=0,cur_y=0,target_mode,height_mode_parameter,height_mode,algorithm_mode,height_1;
volatile char TargetMode=0,algorithm0=0,algorithm1=0,algorithm2=0,algorithm3=0,algorithm4=0;

volatile INT32S tips0_start, tips0, slave1_time, slave2_time, temp_time,time_count[50];
volatile TIME_STAT test_time={0,999999,0,0};


extern int iDetect, iFirst;
extern NPOT NPLastRes;
int iCount;
long temp_cc;
int k1;
MATCH_LOC MLcc;

/*--------------- Start: Algorithm one needed ------------*/
volatile INT8U MaskSizeRow=MASKSIZE_Y, MaskSizeCol=MASKSIZE_X;
volatile target obj={158,117,0};
 NPOT ret={160,120,0};
 NPOT ret_mch[3];
INT32U yorn = 5000;
INT32S search_x=158, search_y=117;

MATCH_LOC MLmachen[3];

extern far void RelocateISTP();

/*---------------------*/
/* FUNCTION: MAIN()    */
/*---------------------*/
void main()
{   
	INT32S i=0,j=0;
  
	InitDSP();

	message_trans.SrcdspId = MASTER_DSP;
                                                              
	//main loop
	while(1) 
	{              
		//收图
		while(RawImgRxEnable);
    
		//找出图像中灰度值7%的最大最小点
		findthrehold(ImgBufferArea,ROW,COL,&target_max,&target_min);
		//根据最大值最小值进行动态归一化,结果存在result_img中
		display(ImgBufferArea,img_buff,target_max,target_min,ROW,COL,255);
		for(i=0;i<COL*ROW;i++)
			seg_buff[i]=(unsigned char)img_buff[i];
              
	    //算法开始    
		algorithm1=1;    //挂飞调试用  
     
		if(algorithm1)
		{        

		//CallFunc_Airport1(seg_buff, 240, 320, ThreeKM_UPRIGHT, &MLcc, &ret);    

			if(dsp_s.Dsp1State==good)
			{
				slave1_time = 1000;    //wait and decide with 2's
      
				message_trans.DstDspId = SLAVE_ONE;
				message_trans.MsgType = MSG_TYPE_TRANS_INFORM;
				message_trans.MsgTypeContent.TSMsg.ProcessType = PROC_TYPE_ALL;  //处理方式: 检测还是跟踪
				message_trans.MsgTypeContent.TSMsg.TargetMode = 0x1;//target_mode;  //检测或跟踪何种目标
	  
				message_trans.MsgTypeContent.TSMsg.Algorithm_Dsp1 = 10;  //通知dsp1采用何种算法进行运算
				//message_trans.MsgTypeContent.TSMsg.Algorithm_Dsp2 = 20;  //通知dsp2采用何种算法进行运算
				message_trans.MsgTypeContent.TSMsg.Height = height_mode_parameter;  //导弹高度
				message_trans.MsgTypeContent.TSMsg.Target_x = TransRstArea.Target_x;
				message_trans.MsgTypeContent.TSMsg.Target_y = TransRstArea.Target_y;
				message_trans.MsgTypeContent.TSMsg.Target_Cof = TransRstArea.Target_Cof; 
				message_trans.MsgTypeContent.TSMsg.x1=MLcc.x1;
				message_trans.MsgTypeContent.TSMsg.y1=MLcc.y1;
				message_trans.MsgTypeContent.TSMsg.x2=MLcc.x2;
				message_trans.MsgTypeContent.TSMsg.y2=MLcc.y2;
				message_trans.MsgTypeContent.TSMsg.alpha=MLcc.alpha; 
	          
				SPORT_edmax_init((int)&message_trans, McBSP1_TO_DSP12, MSG_SIZE);
				SET_BIT(McBSP_SPCR(McBSP1_TO_DSP12),XRST);
				delay_msec(2, 0.001);
				while(!MCBSP_AVAILABLE(McBSP1_TO_DSP12));
				RESET_BIT(McBSP_SPCR(McBSP1_TO_DSP12),XRST);
	      
				while(TransToDsp1_flag==0);
				TransToDsp1_flag = 0;
			}
    

       if(dsp_s.Dsp2State==good)
       {
         slave2_time = 1000;    //wait and decide with 2's
      
   	     message_trans.DstDspId = SLAVE_TWO;
         message_trans.MsgType = MSG_TYPE_TRANS_INFORM;
         message_trans.MsgTypeContent.TSMsg.ProcessType = PROC_TYPE_ALL;  //处理方式: 检测还是跟踪

         message_trans.MsgTypeContent.TSMsg.TargetMode = 0x1;//target_mode;  //检测或跟踪何种目标

   	     // message_trans.MsgTypeContent.TSMsg.Algorithm_Dsp1 = 10;  //通知dsp1采用何种算法进行运算
         message_trans.MsgTypeContent.TSMsg.Algorithm_Dsp2 = 20;  //通知dsp2采用何种算法进行运算
   	     message_trans.MsgTypeContent.TSMsg.Height = height_mode_parameter;  //导弹高度
         message_trans.MsgTypeContent.TSMsg.Target_x = TransRstArea.Target_x;
         message_trans.MsgTypeContent.TSMsg.Target_y = TransRstArea.Target_y;
         message_trans.MsgTypeContent.TSMsg.Target_Cof = TransRstArea.Target_Cof;
         message_trans.MsgTypeContent.TSMsg.x1=MLcc.x1;
         message_trans.MsgTypeContent.TSMsg.y1=MLcc.y1;
         message_trans.MsgTypeContent.TSMsg.x2=MLcc.x2;
         message_trans.MsgTypeContent.TSMsg.y2=MLcc.y2;
         message_trans.MsgTypeContent.TSMsg.alpha=MLcc.alpha; 
          
            
         SPORT_edmax_init((int)&message_trans, McBSP1_TO_DSP12, MSG_SIZE);
         SET_BIT(McBSP_SPCR(McBSP1_TO_DSP12),XRST);
         delay_msec(2, 0.001);
         while(!MCBSP_AVAILABLE(McBSP1_TO_DSP12));
         RESET_BIT(McBSP_SPCR(McBSP1_TO_DSP12),XRST);
      
         while(TransToDsp2_flag==0);
         TransToDsp2_flag = 0;  
       }
       
	    //.............
	    					  
	    CallFunc_Airport2(seg_buff, 240, 320, &MLcc, ThreeKM_UPRIGHT, &ret_mch[0]);
	    
	    while(RecfromDsp1_flag==0 || RecfromDsp2_flag==0);
          RecfromDsp1_flag = 0;
          RecfromDsp2_flag = 0;

       if(dsp_s.Dsp1State==bad)
       {
    
       }
      
       if(dsp_s.Dsp2State==bad)
       {

       }

                  
       search_x = obj.objx;
  	   search_y = obj.objy; 
   
       AddCross(img_buff, ROW,COL, ret.x, ret.y);

    
    }

    
          edma_1Dto2D_start((int)symbol_tmp[0], (int)img_buff, CHANNEL_OF_INTERNAL_EXCH, 320, 240,
				      7, 0, 14, 15, 2);
          SET_BIT(ESRL,CHANNEL_OF_INTERNAL_EXCH);
          while(exch_flag == 0);
          exch_flag = 0;
          
          edma_1Dto2D_start((int)symbol_tmp[0], (int)img_buff, CHANNEL_OF_INTERNAL_EXCH, 320, 240,
				      14, 0, 21, 15, 2);
          SET_BIT(ESRL,CHANNEL_OF_INTERNAL_EXCH);
          while(exch_flag == 0);
          exch_flag = 0;
         
             

    TransformData(img_buff, IMG_SIZE, 2);
    //*(unsigned volatile int *)ECRL |= (1<<CHANNEL_OF_TARNS_TO_DPRAM);	
    *(unsigned volatile int *)QDMA_S_OPT = (QDMA_PRI<<PRI) + (1<<SUM) + (1<<DUM) + (1<<TCINT)  
                                     + (CHANNEL_OF_TARNS_TO_DPRAM%16<<TCC)+ (CHANNEL_OF_TARNS_TO_DPRAM/16<<TCCM) + (1<<FS);
    //SET_BIT(ESRL,CHANNEL_OF_TARNS_TO_DPRAM);
    while(TransToDpram_flag == 0);
    TransToDpram_flag = 0;
  }  
    
}


/* FUNCTION: Initialize the DSP    */
/*---------------------------------*/
void InitDSP()
{
  volatile int temp, i;
  
  /* Initial the common control registers */
  CSR = (1<<EN);        //enable the little endian mode
  IER = (1<<NMIE);
  ICR = 0xffff;         //clear the all interruptions
  RelocateISTP();
  
  /* Initial the EMIFA and EMIFB register */
  *(volatile unsigned int *)EMIFA_GCR = EMIFA_GCR_PARAMS; /*EMIFA global control*/
  *(volatile unsigned int *)EMIFA_CE0 = EMIFA_CE0_PARAMS; /*32bit programmable sync for DSPs*/
  *(volatile unsigned int *)EMIFA_CE0SEC = EMIFA_CE0SEC_PARAMS;
  *(volatile unsigned int *)EMIFA_CE2 = EMIFA_CE2_PARAMS; /*32bit async for HOTLINK*/
  *(volatile unsigned int *)EMIFA_CE3 = EMIFA_CE3_PARAMS; /*32bit programmable sync for FIFO*/
  *(volatile unsigned int *)EMIFA_CE3SEC = EMIFA_CE3SEC_PARAMS;  /* FWFT mode */
   
  *(volatile unsigned int *)EMIFB_GCR = EMIFB_GCR_PARAMS; /*EMIFB global control*/
  *(volatile unsigned int *)EMIFB_CE0 = EMIFB_CE0_PARAMS; /*16bit sync for SDAM*/
  *(volatile unsigned int *)EMIFB_CE1 |= EMIFB_CE1_PARAMS; /*8bit async for FLASH*/
  *(volatile unsigned int *)EMIFB_CE3 = EMIFB_CE3_PARAMS; /*16bit async for dual-RAM*/
  *(volatile unsigned int *)EMIFB_SDCTRL = EMIFB_SDCTRL_PARAMS;
  *(volatile unsigned int *)EMIFB_SDRP = EMIFB_SDRP_PARAMS;
  *(volatile unsigned int *)EMIFB_SDEXT = EMIFB_SDEXT_PARAMS;
  
  /* Initial the GPIO register */
  *(volatile unsigned int *)GPEN |= GPEN_PARAMS;
  *(volatile unsigned int *)GPDIR = GPDIR_PARAMS;
  FIFO_01_LOW();
  FIFO_02_LOW();
  TRANS_TO_HOTLINK_LOW();
  
  /* Initial the EDMA registers */
  REG_WRITE(CIERL, 0x0);     REG_WRITE(CIERH, 0x0);
  REG_WRITE(CIPRL, 0xFFFF);  REG_WRITE(CIPRH, 0xFFFF);
  
  REG_WRITE(EERL, 0x0);      REG_WRITE(EERH, 0x0);
  REG_WRITE(ECRL, 0xFFFF);   REG_WRITE(ECRH, 0xFFFF);

⌨️ 快捷键说明

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