📄 vpcap.c
字号:
#include "DM642.h"
////////////////////////////////////定义采集大小//////////////////////////
#define VCA_HBLNK_SIZE hstat /* (864-720),horizontal blanking */
#define VCA_IMG_VSIZE1 vsize /* (311-24+1), fld1 vertical image size */
#define VCA_IMG_VSIZE2 vsize /* (625-338+1), fld2 vertical image size */
#define VCA_IMG_HSIZE1 hsize /* field1 horizontal image size */
#define VCA_IMG_HSIZE2 hsize /* field2 horizontal image size */
/* 确定一场像素的大小为720×288 */
#define VCA_IMAGE_SIZE1 (VCA_IMG_HSIZE1 * VCA_IMG_VSIZE1)
/* 确定二场像素的大小为720×288 */
#define VCA_IMAGE_SIZE2 (VCA_IMG_HSIZE2 * VCA_IMG_VSIZE2)
#define VCA_VDTHRLD1 (VCA_IMG_HSIZE1/8) /* line length in */
#define VCA_VDTHRLD2 VCA_VDTHRLD1 /* double.words */
#define VCA_XSTART1 (VCA_HBLNK_SIZE-2)/*EAV*/
#define VCA_XSTOP1 (VCA_XSTART1 + VCA_IMG_HSIZE1-1)
/* VRST = 1, end of vertical blanking */
#define VCA_YSTART1 vstat
#define VCA_YSTOP1 (VCA_YSTART1 + VCA_IMG_VSIZE1-1)
#define VCA_XSTART2 (VCA_HBLNK_SIZE-2/*EAV*/)
#define VCA_XSTOP2 (VCA_XSTART2 + VCA_IMG_HSIZE2-1)
/* VRST = 1, end of vertical blanking */
#define VCA_YSTART2 vstat
#define VCA_YSTOP2 (VCA_YSTART2 + VCA_IMG_VSIZE2-1)
#define VCA_THRLD_FIELD1 (VCA_IMG_HSIZE1/8) /* line length in */
#define VCA_THRLD_FIELD2 VCA_THRLD_FIELD1 /* double-words */
#define VCA_CAPEVT1 (VCA_IMAGE_SIZE1 / (VCA_VDTHRLD1 * 8))
#define VCA_CAPEVT2 (VCA_IMAGE_SIZE2 / (VCA_VDTHRLD2 * 8))
/* in this example 定义采1帧 */
#define CAPCHA_FRAME_COUNT 1
#define VCA_Y_EDMA_ELECNT (VCA_THRLD_FIELD1 * 2)
#define VCA_Y_EDMA_FRMCNT ((VCA_CAPEVT1) * CAPCHA_FRAME_COUNT) // + VCA_CAPEVT2
extern unsigned int NewFrame;
extern unsigned char OneOrTwo ;
//未用/////////////////////////////////////////////////////////////
void vpcap(void){/////////////////视频初始化///////////////
//设置edma
CCERL = 0x4;
///////////////////EDMA设置//////////////////////
*(volatile unsigned int *)0x01A00180=0x40a00002;//0x40a00002;
*(volatile unsigned int *)0x01A00184=0x74000000;
*(volatile unsigned int *)0x01A00188=VCA_Y_EDMA_ELECNT|((VCA_Y_EDMA_FRMCNT-1)<<16);
*(volatile unsigned int *)0x01A0018C=DSTADDR;
*(volatile unsigned int *)0x01A00190=(VCA_Y_EDMA_ELECNT*4)<<16;
*(volatile unsigned int *)0x01A00194=0x00000600;
//////////
*(volatile unsigned int *)0x01A00600=0x40a00002; //0x40b21042;//
*(volatile unsigned int *)0x01A00604=0x74000000;
*(volatile unsigned int *)0x01A00608=VCA_Y_EDMA_ELECNT|((VCA_Y_EDMA_FRMCNT-1)<<16);
*(volatile unsigned int *)0x01A0060C=DSTADDR1;
*(volatile unsigned int *)0x01A00610=(VCA_Y_EDMA_ELECNT*4)<<16;
*(volatile unsigned int *)0x01A00614=0x00000618;
*(volatile unsigned int *)0x01A00618=0x40a00002;
*(volatile unsigned int *)0x01A0061c=0x74000000;
*(volatile unsigned int *)0x01A00620=VCA_Y_EDMA_ELECNT|((VCA_Y_EDMA_FRMCNT-1)<<16);
*(volatile unsigned int *)0x01A00624=DSTADDR;
*(volatile unsigned int *)0x01A00628=(VCA_Y_EDMA_ELECNT*4)<<16;
*(volatile unsigned int *)0x01A0062c=0x00000600;
EERL = 0x00010000 ;
VP_PCR0=0x000000004 ;
VC_ASTOP01=(VCA_YSTOP1 << 16) | VCA_XSTOP1;
VC_ASTOP02=(VCA_YSTOP2 << 16) | VCA_XSTOP2;
VC_ASTRT01=VCA_XSTART1 | (VCA_YSTART1<<16);
VC_ASTRT02=VCA_XSTART2 | (VCA_YSTART2<<16);
VC_ATHRLD0=VCA_THRLD_FIELD1 | (VCA_THRLD_FIELD2<<16);
AEVTCT0=VCA_CAPEVT1 | (VCA_CAPEVT2<<16);
VP_IE0=0x5;
VC_CTL0=0x400a0054;
VP_CTL0=0x00000030 ;
VC_CTL0=VC_CTL0 | 0x00008000 ;
VC_CTL0=VC_CTL0 & 0xBFFFFFFF ;
VP_CTL0=VP_CTL0 | 0x00004000 ;
}
///////////////////////////////视频中断处理
//interrupt
void VPK(void)
{
int vpis;
vpis = VP_IS0;
if(vpis & 0x00000004 )
{
VP_IS0 =0x00000004;
VC_STAT0=VC_STAT0|0x40000000;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -