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

📄 image_s_m.c

📁 DSP图像板调试小程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************
	Program for reg dsp image board * 
		UART (CPLD) UART_OUT,UATR_IN 2007.09.04
        transfer data width is 8 bit *
        for cis: 4 seg *		
******************************************************************/

#include <stdio.h>
#include <csl.h>
#include <csl_cache.h>
#include <csl_edma.h>
#include <csl_timer.h>
#include <csl_irq.h>

#include "image_s.h"


EDMA_Handle hEdma;
EDMA_Config cfgEdma;

extern far void vectors();

void EraseFlash(void);
void setupInterrupts(void);
void stopEdma(void); 

void cis_bright(unsigned char cis_led_bright);	   // cis_led_bright=0--16
void start_sampling();
void stop_sampling();
void clear_sampling();
void ad0_init();
void ad1_init();
void start_edma();

void pre_process00();
void pre_process01();
void pre_process02();
void pre_process100();
void pre_process101();
void pre_process102();

void frame_process();
void setupInterrupts(void);
void stopEdma(void);
void init_emif( void );
void  init_pll( void );
void save_image0();
void save_image1();
void save_image2();
void test(void);
void mem_test(void);
void rs232_out();
unsigned char rs232_in(void);
void disp(int Num);
void init_sys(void);

/**********************************************/

void main(){

	init_sys();


	while(1)   
		{
	
	  if( get_sampling==1 ){

		while( sampling_stop==0 ){

			start_sampling();
			start_edma();

	   	    while( frame_sam_end==0 )  	{  	}

			stop_sampling();
			frame_process();
	
//			printf("\nf=%3d",frame_counter);

			disp(frame_counter);

			save_image0();
			save_image1();
//			save_image2();

	  		frame_counter++;

		}
  	  }
	}
}
/**********************************************/
//-------------------------------------------

void init_sys(void)
{	

    init_pll();
	init_emif();
   
	tmp00=0x40;			          
	ad_com_addr_p=AD_COM_ADDR1;
	*ad_com_addr_p=tmp00;
    CSL_init();

	*( unsigned char *)FrameCon1 = FrameWindow+2;        //Frame sampling control
	*( unsigned char *)FrameCon2 = FrameWindow+1;
	*( unsigned char *)FrameCon3 = FrameWindow;
	*( unsigned char *)FrameCon4 = FrameWindow + FrameWindow_Offset;

//	EraseFlash();

	clear_sampling();
	stop_sampling();
	test();

//	mem_test();

//	while(1)
	ad0_init();	

//	while(1)
	ad1_init();	

//	while(1)
//	rs232_out();

/*
	while(1)
	{
	uart232_out = rs232_in();
	rs232_out(); 
	}
*/

//	while(1)
	cis_bright(BRIGHT);
	receive_p=receive_buf;
	setupInterrupts();  /* defined below */

	get_sampling=1;
	sampling_stop=0;
	frame_counter=0;
  	get_sampling=1;

/*
	while(1)
	{
			//test for rs232 working whith extint 5
	}
*/

}

//------------------------------------------------
void EraseFlash(void)
{
	/* Code to erase AMD29LV400B
	 * 4MBit (256K X 8) Flash Memory
	 */
	*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY1;
	*(volatile char *)FLASH_ADR2 = (char)FLASH_KEY2;
	*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY4;

	*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY1;
	*(volatile char *)FLASH_ADR2 = (char)FLASH_KEY2;
	*(volatile char *)FLASH_ADR1 = (char)FLASH_KEY5;
	
	/* Scan here until erasing completes
	 */
//	while(GetFlashVal(FLASH_START) != 0xff)
        ;/* Do Nothing!*/	
		
	return;
}


/* Create the EDMA configuration structure for line_buffer transfers */

EDMA_Config cfgEdma = {
  EDMA_OPT_RMK(
    EDMA_OPT_PRI_LOW,
    EDMA_OPT_ESIZE_8BIT,
    EDMA_OPT_2DS_NO,
    EDMA_OPT_SUM_INC,
    EDMA_OPT_2DD_NO,
    EDMA_OPT_DUM_INC, 
    EDMA_OPT_TCINT_YES,
    EDMA_OPT_TCC_OF(TCCINTNUM),
    EDMA_OPT_LINK_NO,
    EDMA_OPT_FS_YES
    ),

  EDMA_SRC_OF(EDMA_SOURCE_ADDR),
  EDMA_CNT_OF(IMAGE_WIDTH),
  EDMA_DST_OF(line_buffer),
  EDMA_IDX_OF(0x00000000),
  EDMA_RLD_OF(0x00000000)
};

/************************************************************

   parameters and functions for dip and led control

**************************************************************
   

   cis init functions for sampling control  

********************************************************/
void cis_bright(unsigned char cis_led_bright)	   // cis_led_bright=0--16
{
	tmp00=cis_led_bright;		
	ad_com_addr_p=AD_COM_ADDR2;
	*ad_com_addr_p=tmp00;
}

void stop_sampling(){
	tmp00=0x40;		
	ad_com_addr_p=AD_COM_ADDR1;
	*ad_com_addr_p=tmp00;
	get_sampling=0;
}

void start_sampling(){
	tmp00=0xc0;		
	ad_com_addr_p=AD_COM_ADDR1;
	*ad_com_addr_p=tmp00;
}

//-----------------------------------------
void clear_sampling(){
	tmp00=0x0;		
	ad_com_addr_p=AD_COM_ADDR0;
	*ad_com_addr_p=tmp00;
#ifndef Sync_c
	*(unsigned char *)SamplingMode_se = WorkMode;	//setup WorkMod
	               //Image Sampling sync. with MCLK,N2
#else
	*(unsigned char *)SamplingMode_se = WorkMode | 0x80;
	               //Image Sampling sync. with internel clk.
#endif



}
//-----------------------------------------
void ad0_init(){

	tmp00=0x60;			          
	ad_com_addr_p=AD_COM_ADDR1;
	*ad_com_addr_p=tmp00;

	for( i=0;i<8;i++ )
	{

		tmp00=0x20;							//laod=1	
		*ad_com_addr_p=tmp00;				//SCLK=0

		value.Tw=ad0_init_com_w[i];

		ad_com_addr_p=AD_COM_ADDR3
		ad_com_addr_p1=AD_COM_ADDR4;

		for( j=0; j<16; j++ )
		{
			tmp00=value.Tb[1];

			tmp00=tmp00 & 0x80;
			*ad_com_addr_p=tmp00;			//DATA=BIT 7
			*ad_com_addr_p1=tmp00;		    //SCLK
		
			value.Tw=value.Tw<<1;

		}
			
		tmp00=0x60;							//laod=0		
		ad_com_addr_p=AD_COM_ADDR1;
		*ad_com_addr_p=tmp00;
	}

}

//-----------------------------------------
void ad1_init(){

	tmp00=0x60;			          
	ad_com_addr_p=AD_COM_ADDR1;
	*ad_com_addr_p=tmp00;

	for( i=0;i<8;i++ )
	{

		tmp00=0x40;							//laod=1	
		*ad_com_addr_p=tmp00;				//SCLK=0

		value.Tw=ad1_init_com_w[i];

		ad_com_addr_p=AD_COM_ADDR3
		ad_com_addr_p1=AD_COM_ADDR4;

		for( j=0; j<16; j++ )
		{
			tmp00=value.Tb[1];

			tmp00=tmp00 & 0x80;
			*ad_com_addr_p=tmp00;			//DATA=BIT 7
			*ad_com_addr_p1=tmp00;		//SCLK
		
			value.Tw=value.Tw<<1;

		}
			
		tmp00=0x60;							//laod=0		
		ad_com_addr_p=AD_COM_ADDR1;
		*ad_com_addr_p=tmp00;
	}

}


/*****************************************/

void start_edma(){

  sampling_stop=0;
  line_counter=0;
  frame_sam_end=0;  

    pixel_p0=ImageBuffer0;
    pixel_p1=ImageBuffer1;
    pixel_p2=ImageBuffer2;

  EDMA_clearPram(0x00000000);

  hEdma = EDMA_open(EDMA_CHA_EXTINT4, EDMA_OPEN_RESET);

/*  EDMA event select int4               */

  EDMA_config(hEdma, &cfgEdma);

  EDMA_intDisable(TCCINTNUM);
  EDMA_intClear(TCCINTNUM);  
  EDMA_intEnable(TCCINTNUM);        
  EDMA_enableChannel(hEdma);   

  IRQ_enable(IRQ_EVT_EDMAINT);

}

#ifndef Led_M

/*-------------------------------------------------

          Current input image line preprocess

    pre_process00()  
    get image_buffer0(IMAGE_WIDTH0*IMAGE_HIGHT0), 
          from current image  
-------------------------------------------------*/

void pre_process00(){

	if((line_counter>=IMAGE_L_ST0*line_m) &&
	(line_counter<(IMAGE_L_ST0+IMAGE_HIGHT0)*line_m) &&

	line_counter==((line_counter/line_m)*line_m))
	{

		inbuff0 = line_buffer+IMAGE_W_ST0*pixel_m;

		for ( x=0; x<IMAGE_WIDTH0;x++)
			{ 
    		*pixel_p0++ = *inbuff0;		/*image_buffer1   for 270*150 from HRS image  */
    		inbuff0=inbuff0+pixel_m;
    		}
  	
  	inbuff0=pixel_p0-IMAGE_WIDTH0;  

	CACHE_wbInvL2(inbuff0, (IMAGE_WIDTH0+1), CACHE_WAIT);
	}

	inbuff0 = line_buffer;

	CACHE_clean(CACHE_L2,inbuff0,(IMAGE_WIDTH+1));
}

/*------------------------------------------------

       get image_buffer1 from HRS image  

------------------------------------------------*/

void pre_process01(){
    int Image_ln;

	Image_ln=line_counter - (line_counter/line_m01)*line_m01;

	if(line_counter >= IMAGE_L_ST1 *line_m && 
	 	line_counter < IMAGE_L_ST1 *line_m + IMAGE_HIGHT1*line_m01 )
		{
		if ( Image_ln == 0 ){
		inbuff0 = line_buffer+( IMAGE_W_ST1 + IMAGE_W_ST0 ) * pixel_m;

		for ( x=0; x<IMAGE_WIDTH1;x++)
			{ 
    		*pixel_p1++ = *inbuff0;
    		inbuff0 = inbuff0 + pixel_m01;
    		}
    		}
		}
  	
  	inbuff0=pixel_p1-IMAGE_WIDTH1;  

	CACHE_wbInvL2(inbuff0, (IMAGE_WIDTH1+1), CACHE_WAIT);

	inbuff0 = line_buffer;

	CACHE_clean(CACHE_L2,inbuff0,(IMAGE_WIDTH+1));
  
}

/*------------------------------------------------

    get image_buffer2 from HRS image  

------------------------------------------------*/

void pre_process02(){
    int Image_ln;

	Image_ln=line_counter - (line_counter/line_m02)*line_m02;

	if(line_counter >= IMAGE_L_ST2 *line_m && 
	 	line_counter < IMAGE_L_ST2 *line_m + IMAGE_HIGHT2*line_m02 )
		{
		if ( Image_ln == 0 ){
		inbuff0 = line_buffer+( IMAGE_W_ST2 + IMAGE_W_ST0 ) * pixel_m;

		for ( x=0; x<IMAGE_WIDTH2;x++)
			{ 
    		*pixel_p2++ = *inbuff0;	/* image_buffer1   for 270*150 from HRS image*/
    		inbuff0 = inbuff0 + pixel_m02;
    		}
    		}
		}

  	inbuff0=pixel_p2-IMAGE_WIDTH2;  

	CACHE_wbInvL2(inbuff0, (IMAGE_WIDTH2+1), CACHE_WAIT);

	inbuff0 = line_buffer;

	CACHE_clean(CACHE_L2,inbuff0,(IMAGE_WIDTH+1));

⌨️ 快捷键说明

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