master_main_old_1121.c

来自「DSP编程」· C语言 代码 · 共 372 行

C
372
字号
//2007.11.16 by axia
//master DSP program
//dsp0/cpu1

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

#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(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 MSG message_rec1, message_rec2, message_trans;//McBSP串口通讯消息

volatile INT8U RecfromDsp1_flag=0, RecfromDsp2_flag=0, TransToDsp1_flag=0, TransToDsp2_flag=0, exch_flag=0, TransToDpram_flag=0, RawImgRxEnable=1;
               
volatile DSP_STATE dsp_s = {good,good,good};//3 DSPs初始状态
volatile INT32U slave1_time, slave2_time;	//从DSP定时器时间
volatile INT32U tips0_start,tips0_end, tips0;	//

volatile INT16S target_max, target_min, threhold;
volatile target obj={158,117,0};

volatile ATA_REC ata_rec_msg;	//与控制通讯用双口RAM的数据结构
ATA_TRANS ata_trans_msg;

#define REC_FROM_CONTROLLER(BaseAddr)			\
{												\
	ata_rec_msg.STA_O = *(INT8S*)(BaseAddr);	\
	ata_rec_msg.VAR_O = *(INT8S*)(BaseAddr+1);	\
	ata_rec_msg.PX_O = *(INT16S*)(BaseAddr+2);	\
	ata_rec_msg.PY_O = *(INT16S*)(BaseAddr+4);	\
	ata_rec_msg.RD = *(INT16S*)(BaseAddr+6);	\
	ata_rec_msg.TH = *(INT16S*)(BaseAddr+8);	\
	ata_rec_msg.EH = *(INT16S*)(BaseAddr+10);	\
	ata_rec_msg.EB = *(INT16S*)(BaseAddr+12);	\
	ata_rec_msg.MEH = *(INT16S*)(BaseAddr+14);	\
	ata_rec_msg.MEB = *(INT16S*)(BaseAddr+16);	\
	ata_rec_msg.MR = *(INT16S*)(BaseAddr+18);	\
	ata_rec_msg.MV = *(INT8S*)(BaseAddr+20);	\
}
	
#define TRANS_TO_CONTROLLER(BaseAddr)				\
{													\
	*(INT8S*)(BaseAddr) = ata_trans_msg.STA_VC;		\
	*(INT16S*)(BaseAddr+5) = ata_trans_msg.PX_O_T;	\
	*(INT16S*)(BaseAddr+7) = ata_trans_msg.PY_O_T;	\
	*(INT16S*)(BaseAddr+9) = ata_trans_msg.PX_O_R;	\
	*(INT16S*)(BaseAddr+11) = ata_trans_msg.PY_O_R;	\
	*(INT8S*)(BaseAddr+13) = ata_trans_msg.TIME_O;	\
	*(INT16S*)(BaseAddr+14) = ata_trans_msg.CODE_S;	\
	*(INT8U*)(BaseAddr+16) = ata_trans_msg.DELAY;	\
}

extern far void RelocateISTP();
void InitDSP();	

void main()
{
	int i = 0;
	InitDSP();
	
	while(1)//main loop
	{
		while(RawImgRxEnable);//等待收图
		
		//找出图像中灰度值7%的最大最小点
		findthrehold(ImgBufferArea,ROW,COL,&target_max,&target_min,&threhold);
		//根据最大值最小值进行动态归一化,结果存在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];
		
		REC_FROM_CONTROLLER(ADDR_OF_REC_ATA_MSG);//21 BYTES---------------------
		
		timer_start(0);
		tips0_start = TIMER_READ(0);		
		
		ContiDet1(ImgBufferArea, ROW, COL,threhold,&obj);
		
		tips0_end=TIMER_READ(0); 
		tips0 = timer_count2us(tips0_end-tips0_start);

		ata_trans_msg.STA_VC = 0x05;	//ATA成功
		ata_trans_msg.PX_O_T = obj.objx;
		ata_trans_msg.PY_O_T = obj.objy;
		ata_trans_msg.PX_O_R = obj.objx;
		ata_trans_msg.PY_O_R = obj.objy;
		ata_trans_msg.DELAY = (INT8U)tips0;

		AddCross(img_buff, ROW,COL, obj.objx, obj.objy);
		
		TRANS_TO_CONTROLLER(ADDR_OF_TRANS_ATA_MSG);//18 BYTES---------------------			

	
		//屏幕显示
		edma_1Dto2D_start((int)symbol_tmp[0], (int)img_buff, CHANNEL_OF_INTERNAL_EXCH, 
							320, 256, 0, 0, 7, 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, 256, 319-7, 0, 319, 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, 256, 0, 240, 14, 255, 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, 256, 304, 240, 319, 255, 2);
		SET_BIT(ESRL,CHANNEL_OF_INTERNAL_EXCH);
		while(exch_flag == 0);
		exch_flag = 0; 
*/
		TransformData(img_buff, IMG_SIZE, 2);	
		*(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);
		while(TransToDpram_flag == 0);
		TransToDpram_flag = 0;	
	}
}

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,与其他DSP数据通讯
	*(volatile unsigned int *)EMIFA_CE0SEC = EMIFA_CE0SEC_PARAMS;
	*(volatile unsigned int *)EMIFA_CE2 = EMIFA_CE2_PARAMS;			//通讯双口RAM
	*(volatile unsigned int *)EMIFA_CE2SEC = EMIFA_CE2SEC_PARAMS;
	*(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 SDRAM
	*(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();

	//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);
  
	edma_null_init();
	edma_start(ADDR_OF_REC_FROM_FIFO,(int)(ImgBufferArea), CHANNEL_OF_REC_FROM_FIFO, 
				FIXED_ADDR_MODE, INCREMENT_ADDR_MODE, 1, IMG_SIZE_IN_WORD);
	edma_start(ADDR_OF_REC_FROM_FIFO,(int)(TrashArea), CHANNEL_OF_REC_FROM_FIFO_TRASH, 
				FIXED_ADDR_MODE, INCREMENT_ADDR_MODE, 1, IMG_SIZE_IN_WORD);
	edma_start((int)(seg_buff),ADDR_OF_TRANS_TO_DSP1,CHANNEL_OF_TRANS_TO_DSP1,
				INCREMENT_ADDR_MODE,FIXED_ADDR_MODE, 1, IMG_SIZE_IN_WORD/2);
	edma_start((int)(seg_buff),ADDR_OF_TRANS_TO_DSP2,CHANNEL_OF_TRANS_TO_DSP2,
				INCREMENT_ADDR_MODE,FIXED_ADDR_MODE, 1, IMG_SIZE_IN_WORD/2);
             

	*(unsigned volatile int *)QDMA_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);
	*(unsigned volatile int *)QDMA_SRC = (int)img_buff;
	*(unsigned volatile int *)QDMA_DST = ADDR_OF_DUALPORT_RAM;
	*(unsigned volatile int *)QDMA_CNT = IMG_SIZE_IN_WORD;	
	*(unsigned volatile int *)CIERL |= (1<<CHANNEL_OF_TARNS_TO_DPRAM);
  
	
	// Initial the McBSP registers
	mcbsp_init(McBSP_TO_DSP1, 5);     //modify the ClkGdv value in SRGR 
	RESET_BIT(McBSP_SPCR(McBSP_TO_DSP1), RRST);
	SPORT_edmar_init((int)&message_rec1, McBSP_TO_DSP1, MSG_SIZE);
	SET_BIT(McBSP_SPCR(McBSP_TO_DSP1), RRST);

	mcbsp_init(McBSP_TO_DSP2, 5);     //modify the ClkGdv value in SRGR 
	RESET_BIT(McBSP_SPCR(McBSP_TO_DSP2), RRST);
	SPORT_edmar_init((int)&message_rec2, McBSP_TO_DSP2, MSG_SIZE);
	SET_BIT(McBSP_SPCR(McBSP_TO_DSP2), RRST);

	//Initial the Timer register for interrupt
	slave1_time = 9999999;
	slave2_time = 9999999;
	C6000_Set_Up_TIMER_Tick_In_Microseconds(1000, 1);
	
	
	//dpram 
	ata_trans_msg.STA_VC = 0x00;	//默认待命
	TRANS_TO_CONTROLLER(ADDR_OF_TRANS_ATA_MSG);
	
	//Open the needed Interrupt
	ICR = IFR | ((1<<IF4)+(1<<IF5)+(1<<IF6)+(1<<IF7)+(1<<IF8)+(1<<IF15));
	IER |= ((1<<IF4)+(1<<IF5)+(1<<IF6)+(1<<IF7)+(1<<IF8)+(1<<IF15));
	CSR |= (1<<GIE);	
}

//从红外头收图中断
interrupt void RecOrg_isr()
{	
	if(RawImgRxEnable)
	{
//		BusEnable = 0;   //Lock the System Bus
		SET_BIT(ESRL,CHANNEL_OF_REC_FROM_FIFO); //trig rec EDMA
	}
	else
	{
//		BusEnable = 0;   //Lock the System Bus
		SET_BIT(ESRL,CHANNEL_OF_REC_FROM_FIFO_TRASH); //trig rec EDMA
	}
	
	REC_FROM_CONTROLLER(ADDR_OF_REC_ATA_MSG);
}

//从DSP超时无响应中断
interrupt void timer1_isr()
{
	if((--slave1_time)<=0)
	{
		slave1_time = 9999999;
		dsp_s.Dsp1State = bad;
		TransToDsp1_flag = 1;
		RecfromDsp1_flag = 1;
	}
	if((--slave2_time)<=0)
	{
		slave2_time = 9999999;
		dsp_s.Dsp2State = bad;
		TransToDsp2_flag = 1;
		RecfromDsp2_flag = 1;
	}
}

//EDMA中断
interrupt void edma_isr()
{
	if(GET_BIT(CIPRL,McBSPr_EDMA_Ch[McBSP_TO_DSP1]))
	{
		REG_WRITE(CIPRL,1<<McBSPr_EDMA_Ch[McBSP_TO_DSP1]);
		//消息处理
		switch(message_rec1.MsgType)
		{      
			case MSG_TYPE_PROC_RESULT:      
				slave1_time = 9999999;
				RecfromDsp1_flag = 1;
				// 算法需要赋值的--------------------
				break;
       
			case MSG_TYPE_ACK_STATE:
				FIFO_01_HIGH();
				FIFO_01_LOW();
				SET_BIT(ESRL,CHANNEL_OF_TRANS_TO_DSP1);
				break;
       
			default: 
				break;
		}    
		SPORT_edmar_init((int)&message_rec1, McBSP_TO_DSP1, MSG_SIZE);
	}

	if(GET_BIT(CIPRL,McBSPr_EDMA_Ch[McBSP_TO_DSP2]))
	{
		REG_WRITE(CIPRL,1<<McBSPr_EDMA_Ch[McBSP_TO_DSP2]);
		//消息处理
		switch(message_rec2.MsgType)
		{      
			case MSG_TYPE_PROC_RESULT:      
				slave2_time = 9999999;
				RecfromDsp2_flag = 1;
				// 算法需要赋值的--------------------
				break;
       
			case MSG_TYPE_ACK_STATE:
				FIFO_02_HIGH();
				FIFO_02_LOW();
				SET_BIT(ESRL,CHANNEL_OF_TRANS_TO_DSP2); 
				break;
       
			default: 
				break;
		}    
		SPORT_edmar_init((int)&message_rec2, McBSP_TO_DSP2, MSG_SIZE);
	}

	else if(GET_BIT(CIPRL,CHANNEL_OF_REC_FROM_FIFO))
	{
		REG_WRITE(CIPRL,1<<CHANNEL_OF_REC_FROM_FIFO);    
		edma_start(ADDR_OF_REC_FROM_FIFO,(int)(ImgBufferArea), CHANNEL_OF_REC_FROM_FIFO, 
					FIXED_ADDR_MODE, INCREMENT_ADDR_MODE, 1, IMG_SIZE_IN_WORD);
		RawImgRxEnable = 0;
//		BusEnable = 1;         //Unlock the System Bus
	}
  
	else if(GET_BIT(CIPRL,CHANNEL_OF_REC_FROM_FIFO_TRASH))
	{
		REG_WRITE(CIPRL,1<<CHANNEL_OF_REC_FROM_FIFO_TRASH);  
		edma_start(ADDR_OF_REC_FROM_FIFO,(int)(TrashArea), CHANNEL_OF_REC_FROM_FIFO_TRASH, 
					FIXED_ADDR_MODE, INCREMENT_ADDR_MODE, 1, IMG_SIZE_IN_WORD);               
//		BusEnable = 1;         //Unlock the System Bus
	}
  
	else if(GET_BIT(CIPRL,CHANNEL_OF_TRANS_TO_DSP1))
	{    
		REG_WRITE(CIPRL,1<<CHANNEL_OF_TRANS_TO_DSP1);        
		edma_start((int)(seg_buff),ADDR_OF_TRANS_TO_DSP1,CHANNEL_OF_TRANS_TO_DSP1,
					INCREMENT_ADDR_MODE,FIXED_ADDR_MODE, 1, IMG_SIZE_IN_WORD/2);
		TransToDsp1_flag = 1;
	}
  
	else if(GET_BIT(CIPRL,CHANNEL_OF_TRANS_TO_DSP2))
	{
		REG_WRITE(CIPRL,1<<CHANNEL_OF_TRANS_TO_DSP2);   
		edma_start((int)(seg_buff),ADDR_OF_TRANS_TO_DSP2,CHANNEL_OF_TRANS_TO_DSP2,
					INCREMENT_ADDR_MODE,FIXED_ADDR_MODE, 1, IMG_SIZE_IN_WORD/2);
		TransToDsp2_flag = 1;
	}
  
	else if(GET_BIT(CIPRL,CHANNEL_OF_INTERNAL_EXCH))
	{
		REG_WRITE(CIPRL,1<<CHANNEL_OF_INTERNAL_EXCH);
		exch_flag = 1;
	}
  
	else if(GET_BIT(CIPRL,CHANNEL_OF_TARNS_TO_DPRAM))
	{   
		REG_WRITE(CIPRL,1<<CHANNEL_OF_TARNS_TO_DPRAM);
		edma_start((int)(img_buff),ADDR_OF_DUALPORT_RAM, CHANNEL_OF_TARNS_TO_DPRAM,
					INCREMENT_ADDR_MODE, INCREMENT_ADDR_MODE, 1, IMG_SIZE_IN_WORD);
		RawImgRxEnable = 1;
		TransToDpram_flag = 1;
	}
}

⌨️ 快捷键说明

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