📄 master_main_old_原来机场算法.c
字号:
/*************************************************************
* 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 + -