?? vportcap.c
字號:
/********************************************************************/
/* Copyright 2004 by SEED Incorporated. */
/* All rights reserved. Property of SEED Incorporated. */
/* Restricted rights to use, duplicate or disclose this code are */
/* granted through contract. */
/* */
/********************************************************************/
/*以下的程序是用DMA方式采集圖的的設置、中斷、以及數據傳輸的函數*/
/**********************************************************/
/* Capture parameter definitions based on 525/60 format */
/**********************************************************/
//#define VCB_HBLNK_SIZE 138 /* (858-720),horizontal blanking */
//#define VCB_IMG_VSIZE1 244 /* (263-20+1), fld1 vertical image size */
//#define VCB_IMG_VSIZE2 243 /* (525-283+1), fld2 vertical image size */
/*PAL*/
#define VCB_HBLNK_SIZE 144 /* (864-720),horizontal blanking */
/*確定第一場圖像的重直像素為288*/
#define VCB_IMG_VSIZE1 288 /* (311-24+1), fld1 vertical image size */
/*確定第一場圖像的重直像素為288*/
#define VCB_IMG_VSIZE2 288 /* (625-338+1), fld2 vertical image size */
/*確定第一場圖像的水平像素為720*/
#define VCB_IMG_HSIZE1 720 /* field1 horizontal image size */
/*確定第二場圖像的水平像素為720*/
#define VCB_IMG_HSIZE2 720 /* field2 horizontal image size */
/* 確定一場像素的大小為720×288 */
#define VCB_IMAGE_SIZE1 (VCB_IMG_HSIZE1 * VCB_IMG_VSIZE1)
/* 確定二場像素的大小為720×288 */
#define VCB_IMAGE_SIZE2 (VCB_IMG_HSIZE2 * VCB_IMG_VSIZE2)
/* Define threshold values in double.words. Both fields should have same threshold value*/
/* 確定FIFO的事件的門檻,為一行的長度,因為DM642為64位DMA,所以長度/8 */
#define VCB_VDTHRLD1 (VCB_IMG_HSIZE1/8) /* line length in */
#define VCB_VDTHRLD2 VCB_VDTHRLD1 /* double.words */
/* ....................................................... */
/* Define channel A capture window co-ordinates for Field1 */
/* ....................................................... */
/*設置圖像的采集框*/
/* HRST = 0, start of horizontal blanking,HCOUNT在EAV后復位
即一行是從EAV之后開始 ,那行消隱在前,圖像在后*/
#define VCB_XSTART1 (VCB_HBLNK_SIZE-2)/*EAV*/
#define VCB_XSTOP1 (VCB_XSTART1 + VCB_IMG_HSIZE1-1)
/* VRST = 1, end of vertical blanking */
#define VCB_YSTART1 1
#define VCB_YSTOP1 (VCB_YSTART1 + VCB_IMG_VSIZE1-1)
/* ....................................................... */
/* Define channel A capture window co-ordinates for Field2 */
/* ....................................................... */
/* HRST = 0, start of horizontal blanking */
#define VCB_XSTART2 (VCB_HBLNK_SIZE-2/*EAV*/)
#define VCB_XSTOP2 (VCB_XSTART2 + VCB_IMG_HSIZE2-1)
/* VRST = 1, end of vertical blanking */
#define VCB_YSTART2 1
#define VCB_YSTOP2 (VCB_YSTART2 + VCB_IMG_VSIZE2-1)
/* Define threshold values in double-words. Both fields should same threshold value */
/* 確定FIFO觸發的長度*/
#define VCB_THRLD_FIELD1 (VCB_IMG_HSIZE1/8) /* line length in */
#define VCB_THRLD_FIELD2 VCB_THRLD_FIELD1 /* double-words */
/* Define number of events to be generated for field1 and field2
定義奇場(244)與偶場的行數(243)*/
#define VCB_CAPEVT1 (VCB_IMAGE_SIZE1 / (VCB_VDTHRLD1 * 8))
#define VCB_CAPEVT2 (VCB_IMAGE_SIZE2 / (VCB_VDTHRLD2 * 8))
/* in this example 定義采1幀 */
#define CAPCHA_FRAME_COUNT 1
/* ............................................ */
/* EDMA parameters for capture Y event that are */
/* specific to this example. */
/* ............................................ */
/* because VCB_THRLD_FIELDn is in double-words and element size is 32-bit */
#define VCB_Y_EDMA_ELECNT (VCB_THRLD_FIELD1 * 2)
#define VCB_Y_EDMA_FRMCNT ((VCB_CAPEVT1 + VCB_CAPEVT2) * CAPCHA_FRAME_COUNT)
/*NTSC*/
//#define VCA_HBLNK_SIZE 138 /* (858-720),horizontal blanking */
//#define VCA_IMG_VSIZE1 244 /* (263-20+1), fld1 vertical image size */
//#define VCA_IMG_VSIZE2 243 /* (525-283+1), fld2 vertical image size */
/*PAL*/
#define VCA_HBLNK_SIZE 144 /* (864-720),horizontal blanking */
/*確定第一場圖像的重直像素為288*/
#define VCA_IMG_VSIZE1 288 /* (311-24+1), fld1 vertical image size */
/*確定第一場圖像的重直像素為288*/
#define VCA_IMG_VSIZE2 288 /* (625-338+1), fld2 vertical image size */
/*確定第一場圖像的水平像素為720*/
#define VCA_IMG_HSIZE1 720 /* field1 horizontal image size */
/*確定第二場圖像的水平像素為720*/
#define VCA_IMG_HSIZE2 720 /* 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 threshold values in double.words. Both fields should have same threshold value*/
/* 確定FIFO的事件的門檻,為一行的長度,因為DM642為64位DMA,所以長度/8 */
#define VCA_VDTHRLD1 (VCA_IMG_HSIZE1/8) /* line length in */
#define VCA_VDTHRLD2 VCA_VDTHRLD1 /* double.words */
/* ....................................................... */
/* Define channel A capture window co-ordinates for Field1 */
/* ....................................................... */
/*設置圖像的采集框*/
/* HRST = 0, start of horizontal blanking,HCOUNT在EAV后復位
即一行是從EAV之后開始 ,那行消隱在前,圖像在后*/
#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 1
#define VCA_YSTOP1 (VCA_YSTART1 + VCA_IMG_VSIZE1-1)
/* ....................................................... */
/* Define channel A capture window co-ordinates for Field2 */
/* ....................................................... */
/* HRST = 0, start of horizontal blanking */
#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 1
#define VCA_YSTOP2 (VCA_YSTART2 + VCA_IMG_VSIZE2-1)
/* Define threshold values in double-words. Both fields should same threshold value */
/* 確定FIFO觸發的長度*/
#define VCA_THRLD_FIELD1 (VCA_IMG_HSIZE1/8) /* line length in */
#define VCA_THRLD_FIELD2 VCA_THRLD_FIELD1 /* double-words */
/* Define number of events to be generated for field1 and field2
定義奇場(244)與偶場的行數(243)*/
#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
/* ............................................ */
/* EDMA parameters for capture Y event that are */
/* specific to this example. */
/* ............................................ */
/* because VCA_THRLD_FIELDn is in double-words and element size is 32-bit */
#define VCA_Y_EDMA_ELECNT (VCA_THRLD_FIELD1 * 2)
#define VCA_Y_EDMA_FRMCNT ((VCA_CAPEVT1 + VCA_CAPEVT2) * CAPCHA_FRAME_COUNT)
/******************************************************************/
/* Description : 8.bit BT.656 non.continuous frame capture */
/* */
/* Some important field descriptions: */
/* */
/* CMODE = 000, 8.bit BT.656 mode */
/* CON = 0 */
/* FRAME = 1, capture frame */
/* CF2 = 0 */
/* CF1 = 0, (8-bit non.continuous frame capture) */
/* SCALE = 0, no scaling */
/* RESMPL= 0, no resampling */
/* 10BPK = X, not used in 8-bit capture */
/* EXC = 0, use EAV/SAV codes */
/* VRST = 1, end of vertical blanking */
/* HRST = 0, start of horizontal blanking */
/* FLDD = 0, 1st line EAV or FID input */
/* FINV = 0, no field invert */
/* RDFE = X, used in Raw mode only(Enable field identification) */
/* SSE = X, used in Raw mode only(Startup synch enable) */
/******************************************************************/
#include <vportcap.h>
/*................................................................ */
/* global variable declarations */
/* ............................................................... */
#pragma DATA_SECTION(capChaAYSpace, ".capChaAYSpace")
/* buffer to store captured Y-data */
Uint8 capChaAYSpace[720*588];
#pragma DATA_SECTION(capChaACbSpace, ".capChaACbSpace")
/* buffer to store captured Cb-data */
Uint8 capChaACbSpace[360*588];
#pragma DATA_SECTION(capChaACrSpace, ".capChaACrSpace")
/* buffer to store captured Cr-data */
Uint8 capChaACrSpace[360*588];
/* handle of vp that to be configured */
VP_Handle vpCaptureHandle;
/*設置Y、Cb、Cr的EDMA通路的句柄*/
EDMA_Handle hEdmaVPCapChaAY;
EDMA_Handle hEdmaVPCapChaACb;
EDMA_Handle hEdmaVPCapChaACr;
EDMA_Handle hEdmaVPCapChaAY1;
EDMA_Handle hEdmaVPCapChaACb1;
EDMA_Handle hEdmaVPCapChaACr1;
EDMA_Handle hEdmaVPCapChaAY2;
EDMA_Handle hEdmaVPCapChaACb2;
EDMA_Handle hEdmaVPCapChaACr2;
EDMA_Handle hEdmaVPCapChaAYb;
EDMA_Handle hEdmaVPCapChaACbb;
EDMA_Handle hEdmaVPCapChaACrb;
/* EDMA tcc for Y channel */
Int32 edmaCapChaAYTccNum = 0;
/* EDMA tcc for Cb channel */
Int32 edmaCapChaACbTccNum = 0;
/* EDMA tcc for Cb channel */
Int32 edmaCapChaACrTccNum = 0;
/* no of frames captured */
volatile Uint32 capChaAFrameCount = 0;
/* Error flags */
volatile Uint32 capChaAOverrun = 0;
volatile Uint32 capChaASyncError = 0;
volatile Uint32 capChaAShortFieldDetect = 0;
volatile Uint32 capChaALongFieldDetect = 0;
volatile Uint32 capNewFrame = 0;
volatile Uint32 capNewFrame1 = 0;
volatile Uint32 capNewFrame2 = 0;
volatile Uint32 capNewFrame3 = 0;
volatile Uint8 ED=0;
volatile Uint8 WV;
/*******************************************************************/
/* Function : bt656_8bit_ncfc */
/* Input(s) : portNumber, video port number i.e. 0, 1 or 2. */
/* Description : Configures given video port for 8.bit BT.656 non. */
/* continuos frame capture on channel A. */
/*******************************************************************/
VP_Handle bt656_8bit_ncfcb( int portNumber)//VP2通道B初始化函數
{
/* Open video port for capture ,打開一個視頻端口*/
vpCaptureHandle = VP_open(portNumber, VP_OPEN_RESET);
if(vpCaptureHandle == INV)
{
return (VP_Handle)0xffff;
}
/*將VP2設置為雙通路*/
VP_FSETH(vpCaptureHandle,VPCTL,DCHNL,VP_VPCTL_DCHNL_OF(1));
/* Enable video port functionality in VP Peripheral Control Reg(PCR),使能視頻端口*/
VP_FSETH(vpCaptureHandle, PCR, PEREN, VP_PCR_PEREN_ENABLE);
/* ..................... */
/* Enable all interrupts */
/* ..................... */
/*便能VCB的中斷源*/
/* Enable capture overrun interrupt(COVRA) for VP channel B */
VP_FSETH(vpCaptureHandle, VPIE, COVRB, VP_VPIE_COVRB_ENABLE);
/* Enable capture complete interrupt(CCMPA) for VP channel B */
VP_FSETH(vpCaptureHandle, VPIE, CCMPB, VP_VPIE_CCMPB_ENABLE);
/* Enable channel synchronization error interrupt(SERRA) for VP channel B */
VP_FSETH(vpCaptureHandle, VPIE, SERRB, VP_VPIE_SERRB_ENABLE);
/* Enable short field detect interrupt(SFDA) for VP channel B */
VP_FSETH(vpCaptureHandle, VPIE, SFDB, VP_VPIE_SFDB_ENABLE);
/* Enable video port global interrupt enable */
VP_FSETH(vpCaptureHandle, VPIE, VIE, VP_VPIE_VIE_ENABLE);
/* ...................... */
/* Setup all other fields */
/* ...................... */
/* Enable short field detect,使能缺場探測*/
VP_FSETH(vpCaptureHandle, VCBCTL, SFDE, VP_VCBCTL_SFDE_ENABLE);
/* Set last pixel to be captured in Field1 (VCB_STOP1 reg) */
/*設置第一場的最后一個像素的Y軸與X軸的坐標*/
VP_RSETH(vpCaptureHandle, VCBSTOP1,VP_VCBSTOP1_RMK(VCB_YSTOP1, VCB_XSTOP1));
/* Set last pixel to be captured in Field2 (VCB_STOP2 reg) */
/*設置第二場的最后一個像素的Y軸與X軸的坐標*/
VP_RSETH(vpCaptureHandle, VCBSTOP2,VP_VCBSTOP2_RMK(VCB_YSTOP2, VCB_XSTOP2));
/* Set first pixel to be captured in Field1 (VCB_STRT1 reg) */
/*設置第一場的第一個像素的Y軸與X軸的坐標*/
VP_RSETH(vpCaptureHandle, VCBSTRT1, VP_VCBSTRT1_RMK(VCB_YSTART1,VP_VCBSTRT1_SSE_ENABLE, VCB_XSTART1));
/* Set first pixel to be captured in Field2 (VCB_STRT2 reg) */
/*設置第二場的第一個像素的Y軸與X軸的坐標*/
VP_RSETH(vpCaptureHandle, VCBSTRT2,VP_VCBSTRT2_RMK(VCB_YSTART2, VCB_XSTART2));
/* Set threshold values ,設置EDMA啟動的門限*/
VP_RSETH(vpCaptureHandle, VCBTHRLD,VP_VCBTHRLD_RMK(VCB_THRLD_FIELD2, VCB_THRLD_FIELD1));
/* Set capture event.register values,設置一場的需要的EDMA的次數 */
VP_RSETH(vpCaptureHandle, VCBEVTCT,VP_VCBEVTCT_RMK(VCB_CAPEVT2,VCB_CAPEVT1));
/* Vertical interrupts (VCB_INT) are not enabled in this example. */
/* Set CMODE to 8.bit BT.656,采用BT656格式的數據流 */
VP_FSETH(vpCaptureHandle, VCBCTL, CMODE, VP_VCBCTL_CMODE_BT656B);
/* Set non.continuous frame capture,設置為電視顯示格式的采集,即不連續的采集,
CON/FRAME/CF2/CF1的值為0100 */
VP_FSETH(vpCaptureHandle, VCBCTL, CON, VP_VCBCTL_CON_DISABLE);
VP_FSETH(vpCaptureHandle, VCBCTL, FRAME, VP_VCBCTL_FRAME_FRMCAP);
VP_FSETH(vpCaptureHandle, VCBCTL, CF2, VP_VCBCTL_CF2_NONE);
VP_FSETH(vpCaptureHandle, VCBCTL, CF1, VP_VCBCTL_CF1_NONE);
/* Let FLDD and FINV to be their defaults */
/* Set VRST to end of vertical blanking,VCOUNT復位在場消隱之后 */
VP_FSETH(vpCaptureHandle, VCBCTL, VRST, VP_VCBCTL_VRST_V0EAV);
/* Set HRST to start of horizontal blanking,行計數復位在EAV之后 */
VP_FSETH(vpCaptureHandle, VCBCTL, HRST, VP_VCBCTL_HRST_OF(0));
/* 10.bit pack mode(10BPK bit) in this 8.bit example */
/* No (1/2) scaling and no chroma re.sampling in this example */
/*初始化EDMA通路*/
IRQ_enable(IRQ_EVT_VINT2);
/* Enable video port interrupts */
IRQ_enable(vpCaptureHandle->eventId);
/* Setup Y, Cb and Cr EDMA channels */
setupVPCapChaAEDMAb(portNumber);
/* Clear VPHLT in VP_CTL to make video port function,清除VPHLT位?
使能其它位 */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -