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

📄 frame_buffer_manager.c

📁 black-fin DSP处理器单帧图像获取程序
💻 C
字号:
#include "init.h"
#include"video_in.h"
dsect(l1b,4,rw) ifrm_t inframe_que[8];
dsect(l1b,4,rw) dma_descriptor dma_des[8];
dsect(l1b,4,rw) unsigned short cur_write_frame=0;
dsect(l1b,4,rw) unsigned short cur_read_frame=0;
int flag_got_one_frame=0;
/*void creat_test_frame_buffer()
{
    int i,j,f;
    unsigned int temp1,temp2;
    temp1=FRAMEBUFFERA;
    temp2=FRAMEBUFFERB;
	    for(j=0;j<480;j++)
	    {
	        for(i=0;i<720;i++)
	        {
	            if(i<300 && i>100)
	            {
	            	*(FRAMEBUFFERA+j*720+i)=240;
	            }
	            else
	            {
	                *(FRAMEBUFFERA+j*720+i)=20;
	            }
	        }
	    }
	    for(j=480;j<720;j++)
	    {
	        for(i=0;i<720;i++)
	        {
	           *(FRAMEBUFFERA+j*720+i)=128;
	        }
	    }	        

	asm("nop;");
}      */ 
void frame_buffer_init()
{
    int i;
    for(i=0;i<4;i++)
    {
        inframe_que[i].nxt=&(inframe_que[i+1]);
        inframe_que[i].pucFramePtr=(FRAMEBUFFERA+i*0x80000);
        inframe_que[i].ulTS=720*480;
    }
    for(i=0;i<3;i++)
    {
        inframe_que[i+4].nxt=&(inframe_que[i+4+1]);
        inframe_que[i+4].pucFramePtr=(FRAMEBUFFERB+(i)*0x80000);
        inframe_que[i+4].ulTS=720*480;
    }
    i=3;
    inframe_que[i+4].nxt=&(inframe_que[0]);
    inframe_que[i+4].pucFramePtr=(FRAMEBUFFERB+(i)*0x80000);
    inframe_que[i+4].ulTS=720*480;
}
ifrm_t * current_frame()
{
    //cur_read_frame=(cur_write_frame+4)%8;
    //return &(inframe_que[cur_write_frame]);
    return &(inframe_que[0]);
    
}

EX_INTERRUPT_HANDLER(DMA0_ISR)
{
    *pDMA0_IRQ_STATUS=0x000f;//清除本次中断

    flag_got_one_frame=1;
    asm("nop;");
}
void stop_dma()
{
    *pDMA0_CONFIG=0x00b2;
}
void init_camera()
{   
     unsigned short test2;
    unsigned short test1;
        //start camera
    //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);
}
void init_dma()
{
    int i; 

  

    //ppi init;
    *pPPI_DELAY=0;
    *pPPI_COUNT=720-1;
    *pPPI_FRAME=480;
    *pPPI_CONTROL=0x402d&0xfffe;//0x402d;//0x404d;//0x00ad;  not start;

    //dma init
    //*pDMA0_CURR_DESC_PTR=&(dma_des[7]);
    *pDMA0_START_ADDR=FRAMEBUFFERA;
    *pDMA0_X_COUNT=720;
    *pDMA0_X_MODIFY=1;
    *pDMA0_Y_COUNT=480;
    *pDMA0_Y_MODIFY=1;
    //*pDMA0_NEXT_DESC_PTR=&(dma_des[0]);
    *pDMA0_PERIPHERAL_MAP=0x0000;
    *pDMA0_CONFIG=0x00b2;//0x63b2;// stop DMA
    
     //isr init
    *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=0x00b3;//0x63b3;// start DMA     
    
    asm("nop;");       
}

        

⌨️ 快捷键说明

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