📄 frame_buffer_manager.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 + -