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

📄 frame_get.c

📁 black-fin DSP处理器单帧图像获取程序
💻 C
字号:
#include"init.h"
#include"camera_drive.h"


///for dam buffers;
dma_descriptor DMA_ARRAY[2];
dsect(l1a,4,rw) unsigned char in_buf1[512*2];
dsect(l1b,4,rw) unsigned char in_buf2[512*2];

dsect(l1b,4,rw) unsigned char out_buf1[512*3*2];
dsect(l1b,4,rw) unsigned char out_buf2[512*3*2];

unsigned int in_buf1_add=&in_buf1[0];
unsigned int in_buf2_add=&in_buf2[0];

EX_INTERRUPT_HANDLER(MEM_COPY_ISR)
{
    *pMDMA_D0_IRQ_STATUS=0x000f;//清除本次中断
    *pMDMA_S0_CONFIG=0x0000;
    *pMDMA_D0_CONFIG=0x0000;  
    asm("nop;");
}
void sdram_copy_init()
{
    //read from mem
    *pMDMA_S0_START_ADDR=&(buffer[0]);
    *pMDMA_S0_X_COUNT=256*4;
    *pMDMA_S0_X_MODIFY=1;
    *pMDMA_S0_Y_COUNT=1;
    *pMDMA_S0_Y_MODIFY=1;
    *pMDMA_S0_PERIPHERAL_MAP=0x0040;
    //write to mem
    *pMDMA_D0_START_ADDR=TESTBUFFER;
    *pMDMA_D0_X_COUNT=256*4;
    *pMDMA_D0_X_MODIFY=1;
    *pMDMA_D0_Y_COUNT=1;
    *pMDMA_D0_Y_MODIFY=1;
    *pMDMA_D0_PERIPHERAL_MAP=0x0040; 
 	//ISR   
    *pSIC_IAR2&=0xff0fffff;
    *pSIC_IAR2|=0x00400000;//real time IVG=11; 
    *pSIC_IMASK|=0x00200000;//enable mem stream0 interrupt
    register_handler(ik_ivg11, MEM_COPY_ISR);       
}
void sdram_copy_start(unsigned char *inbuffer,unsigned char *outbuffer)
{

}

EX_INTERRUPT_HANDLER(DMA0_ISR)
{
    static int count=0;
    unsigned short i;
    unsigned char r,g,b;
    unsigned char y,u,v;
    //*pFIO_FLAG_S = 0x0008;
    *pDMA0_IRQ_STATUS=0x000f;//清除本次中断
    if(count++>240)
    {
        count=0;
        return;
    }
    
    if(((int)(*pDMA0_START_ADDR)&0x00100000))
    {
        //inbuffer=in_buf1_add;
        //cinbuffer=in_buf2_add;
        //outbuffer=&out_buf1[0];
        //coutbuffer=&out_buf2[0];
        
        //copy to sdram
     	*pMDMA_S0_START_ADDR=out_buf2;//cinbuffer;
    	*pMDMA_D0_START_ADDR=TESTBUFFER+count*256*4;
    
    	*pMDMA_S0_CONFIG=0x00a1;
    	*pMDMA_D0_CONFIG=0x00a3;
    	/*//raw to rgb
    	for(i=0;i<256;i++)
	    {
	        b=*(in_buf1+i*2);
	        g=*(in_buf1+i*2+1);
	        r=*(in_buf1+512+i*2+1);
        
	        *(out_buf1+i*3)=b;
	        *(out_buf1+i*3+1)=g;
	        *(out_buf1+i*3+2)=r;
	    }  */  
	    //row to vyuy 422
	    /*for(i=0;i<256;i++)
	    {
	        b=*(in_buf1+i*2);
	        g=*(in_buf1+i*2+1);
	        r=*(in_buf1+512+i*2+1);
	        y=(unsigned char)((234*(int)r+601*g+117*b)>>10);
	        u=((unsigned short)y+256-b)>>1;
	        v=((unsigned short)y+256-r)>>1;
	        *(out_buf1+i*4)=u;
	        *(out_buf1+i*4+1)=y;
	        *(out_buf1+i*4+2)=v;
	        *(out_buf1+i*4+3)=y;
	    }*/	        
	             
    }
    else
    {
        //inbuffer=in_buf2_add;
        //cinbuffer=in_buf1_add;
        //outbuffer=&out_buf2[0];
        //coutbuffer=&out_buf1[0];
        
        //copy to sdram
        *pMDMA_S0_START_ADDR=out_buf1;//cinbuffer;
    	*pMDMA_D0_START_ADDR=TESTBUFFER+count*256*4;
    
    	*pMDMA_S0_CONFIG=0x00a1;
    	*pMDMA_D0_CONFIG=0x00a3;
    	/*//raw to rgb
    	for(i=0;i<256;i++)
	    {
	        b=*(in_buf2+i*2);
	        g=*(in_buf2+i*2+1);
	        r=*(in_buf2+512+i*2+1);
        
	        *(out_buf2+i*3)=b;
	        *(out_buf2+i*3+1)=g;
	        *(out_buf2+i*3+2)=r;
	    }*/
	    //row to vyuy 422
	    /*for(i=0;i<256;i++)
	    {
	        b=*(in_buf2+i*2);
	        g=*(in_buf2+i*2+1);
	        r=*(in_buf2+512+i*2+1);
	        y=(unsigned char)((234*(int)r+601*g+117*b)>>10);
	        u=((unsigned short)y+256-b)>>1;
	        v=((unsigned short)y+256-r)>>1;
	        *(out_buf2+i*4)=0;
	        *(out_buf2+i*4+1)=0;
	        *(out_buf2+i*4+2)=0;
	        *(out_buf2+i*4+3)=0;
	    }*/	      
    }  
}
void get_one_frame()
{
    unsigned short test2;
    unsigned short status;
    int i;
    
    //start cameara
    //i2c_write(0x09,test1);
    i2c_write(0x0c,0x0001);
    //i2c_write(0x7f,0x26aa);
    //i2c_write(0x7f,0x3000);
    //i2c_write(0x7f,0x2800);
    i2c_write(0x7f,0x0000);
    //i2c_write(0x7f,0x3800);
    i2c_write(0x72,0x0000);
    i2c_write(0x05,94);
    i2c_write(0x06,45);
    i2c_write(0x03,480);
    i2c_write(0x04,720);
    test2=i2c_read(0x00);
    
    //clear sdram
    for(i=0;i<512*480*3;i++)
    	*(TESTBUFFER+i)=0;
 
    
     //ppi init;
    *pPPI_DELAY=0;
    *pPPI_COUNT=IMG_WIDTH-1;
    *pPPI_FRAME=IMG_HEIGHT;
    *pPPI_CONTROL=0x402d&0xfffe;//0x402d;//0x404d;//0x00ad;  not start;
    
    //dma init;
    DMA_ARRAY[0].NDPL=(unsigned short)(&DMA_ARRAY[1]);
    DMA_ARRAY[0].SAL=(unsigned short)(in_buf1_add);
    DMA_ARRAY[0].SAH=(unsigned short)((in_buf1_add)>>16);
    DMA_ARRAY[1].NDPL=(unsigned short)(&DMA_ARRAY[0]);
    DMA_ARRAY[1].SAL=(unsigned short)(in_buf2_add);
    DMA_ARRAY[1].SAH=(unsigned short)((in_buf2_add)>>16);
    
    *pDMA0_CURR_DESC_PTR=&DMA_ARRAY[0];
    *pDMA0_START_ADDR=in_buf1_add;
    *pDMA0_X_COUNT=512*2;
    *pDMA0_X_MODIFY=1;
    *pDMA0_Y_COUNT=1;
    *pDMA0_Y_MODIFY=1;
    *pDMA0_NEXT_DESC_PTR=&DMA_ARRAY[1];
    *pDMA0_PERIPHERAL_MAP=0x0000;
    *pDMA0_CONFIG=0x63a2;// stop DMA
    
    sdram_copy_init();
      
    
    //isr
    *pSIC_IAR1&=0xfffffff0;
    *pSIC_IAR1|=0x00000001;//real time IVG=8; 
    *pSIC_IMASK|=0x00000100;//enable dma0 interrupt
    register_handler(ik_ivg8, DMA0_ISR);    
    //start ppi trans
    *pPPI_CONTROL=0x402d;
    *pDMA0_CONFIG=0x63a3;// start DMA     
    
    asm("nop;");
}

/*void mem2mem_copy()
{
    int i;
    for(i=0;i<100;i++)
    	buffer[i]=(char)i;
    //read from mem
    *pMDMA_S0_START_ADDR=&(buffer[0]);
    *pMDMA_S0_X_COUNT=100;
    *pMDMA_S0_X_MODIFY=1;
    *pMDMA_S0_Y_COUNT=1;
    *pMDMA_S0_Y_MODIFY=1;
    *pMDMA_S0_PERIPHERAL_MAP=0x0040;
    //write to mem
    *pMDMA_D0_START_ADDR=TESTBUFFER;
    *pMDMA_D0_X_COUNT=100;
    *pMDMA_D0_X_MODIFY=1;
    *pMDMA_D0_Y_COUNT=1;
    *pMDMA_D0_Y_MODIFY=1;
    *pMDMA_D0_PERIPHERAL_MAP=0x0040; 
 	//ISR   
    *pSIC_IAR2&=0xff0fffff;
    *pSIC_IAR2|=0x00400000;//real time IVG=11; 
    *pSIC_IMASK|=0x00200000;//enable mem stream0 interrupt
    register_handler(ik_ivg11, MEM_COPY_ISR);  
    //start DMA    
    *pMDMA_S0_CONFIG=0x00a1;
    *pMDMA_D0_CONFIG=0x00a3;

       
}*/
    
    

⌨️ 快捷键说明

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