DM642多路采集显示的参数分析
seedvpm642_vcapparamsPAL_Scale.c和seedvpm642_vcapparamsPAL.c的区别VPORTCAP_Params SEEDVPM642_vCapParamsChan2b = {VPORT_MODE_BT656_8BIT, /* cmode:3 */VPORT_FLDOP_FLD2, /* fldOp:3 */ VPORT_SCALING_ENABLE, /* scale:1 */ VPORT_RESMPL_DISABLE, /* resmpl:1 */VPORTCAP_BPK_10BIT_ZERO_EXTENDED, /*bpk10Bit:2 */VPORTCAP_HRST_SAV, /*hCtRst:1 */VPORTCAP_VRST_END_VBLK,/*vCtRst:1 */VPORTCAP_FLDD_DISABLE, /*fldDect:1 */VPORTCAP_EXC_DISABLE, /*extCtl:1 */ VPORTCAP_FINV_ENABLE, /* fldInv:1 */8, /*fldXStrt1 */1, /*fldYStrt1 */ 8, /*fldXStrt2 */ 1, //15, /*fldYStrt2 */LINE_SZ-1+8, /*fldXStop1 */NUM_LINES, /*fldYStop1 */LINE_SZ-1+8, /*fldXStop2 */NUM_LINES, /*fldYStop2 */(LINE_SZ>>3), /*thrld */3, /*numFrmBufs*/128, /*alignment */VPORT_FLDS_SEPARATED, /*mergeFlds */NULL, /*segId */ EDMA_OPT_PRI_HIGH, /*edmaPri */14, /* irqId */ };VPORT_PortParams SEEDVPM642_vCapParamsPortCh2b = {TRUE, /* enableDualChan; */ VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 1 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 2 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 3 polarity */&TVP51XX_Fxns,&TVP51XX_Fxns,};
下表是通道1a和2a的对比:
1a2a#define LINE_SZ 720#define LINE_SZ 704#define LINE_SZ 704#define NUM_LINES 288#define NUM_LINES 288#define NUM_LINES 288VPORTCAP_Params EVMDM642_vCapParamsChan = {VPORTCAP_Params SEEDVPM642_vCapParamsChan = {VPORTCAP_Params SEEDVPM642_vCapParamsChan2a = {VPORT_MODE_BT656_8BIT, /* cmode:3 */VPORT_MODE_BT656_8BIT, /* cmode:3 */VPORT_MODE_BT656_8BIT, /* cmode:3 */VPORT_FLDOP_FRAME, /* fldOp:3 */ VPORT_FLDOP_FLD2, /* fldOp:3 */ VPORT_FLDOP_FLD2, /* fldOp:3 */ VPORT_SCALING_DISABLE, /* scale:1 */ VPORT_SCALING_ENABLE, /* scale:1 */ VPORT_SCALING_ENABLE, /* scale:1 */ VPORT_RESMPL_DISABLE, /* resmpl:1 */VPORT_RESMPL_DISABLE, /* resmpl:1 */VPORT_RESMPL_DISABLE, /* resmpl:1 */VPORTCAP_BPK_10BIT_ZERO_EXTENDED, /*bpk10Bit:2 */VPORTCAP_BPK_10BIT_ZERO_EXTENDED, /*bpk10Bit:2 */VPORTCAP_BPK_10BIT_ZERO_EXTENDED, /*bpk10Bit:2 */VPORTCAP_HRST_END_HBLK, /*hCtRst:1 */VPORTCAP_HRST_SAV, /*hCtRst:1 */VPORTCAP_HRST_SAV, /*hCtRst:1 */VPORTCAP_VRST_END_VSYNC,/*vCtRst:1 */VPORTCAP_VRST_END_VBLK,/*vCtRst:1 */VPORTCAP_VRST_END_VBLK,/*vCtRst:1 */VPORTCAP_FLDD_DISABLE, /*fldDect:1 */VPORTCAP_FLDD_DISABLE, /*fldDect:1 */VPORTCAP_FLDD_DISABLE, /*fldDect:1 */VPORTCAP_EXC_ENABLE, /*extCtl:1 */ VPORTCAP_EXC_DISABLE, /*extCtl:1 */ VPORTCAP_EXC_DISABLE, /*extCtl:1 */ VPORTCAP_FINV_DISABLE, /* fldInv:1 */VPORTCAP_FINV_ENABLE, /* fldInv:1 */VPORTCAP_FINV_ENABLE, /* fldInv:1 */0, /*fldXStrt1 */20, /*fldYStrt1 */ 0, /*fldXStrt2 */ 20, /*fldYStrt2 */8, /*fldXStrt1 */1, /*fldYStrt1 */ 8, /*fldXStrt2 */ 1, //15, /*fldYStrt2 */0, /*fldXStrt1 */1, /*fldYStrt1 */ 0, /*fldXStrt2 */ 1, //15, /*fldYStrt2 */LINE_SZ-1, /*fldXStop1 */NUM_LINES + 20, /*fldYStop1 */LINE_SZ-1+8, /*fldXStop1 */NUM_LINES, /*fldYStop1 */LINE_SZ-1, /*fldXStop1 */NUM_LINES, /*fldYStop1 */LINE_SZ-1, /*fldXStop2 */NUM_LINES + 20, /*fldYStop2 */LINE_SZ-1+8, /*fldXStop2 */NUM_LINES, /*fldYStop2 */LINE_SZ-1, /*fldXStop2 */NUM_LINES, /*fldYStop2 */(LINE_SZ>>3), /*thrld */3, /*numFrmBufs*/128, /*alignment */VPORT_FLDS_MERGED, /*mergeFlds */NULL, /*segId */ EDMA_OPT_PRI_HIGH, /*edmaPri */ 8 /* irqId */ (LINE_SZ>>3), /*thrld */3, /*numFrmBufs*/128, /*alignment */VPORT_FLDS_SEPARATED, /*mergeFlds */NULL, /*segId */ EDMA_OPT_PRI_HIGH, /*edmaPri */8, /* irqId */ (LINE_SZ>>3), /*thrld */3, /*numFrmBufs*/128, /*alignment */VPORT_FLDS_SEPARATED, /*mergeFlds */NULL, /*segId */ EDMA_OPT_PRI_HIGH, /*edmaPri */9, /* irqId */ };};};VPORT_PortParams EVMDM642_vCapParamsPort = {FALSE, /* enableDualChan; */ VPORT_POLARITY_ACTIVE_LOW, /* vport control pin 1 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 2 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 3 polarity */&SAA7115_Fxns,INV,}; VPORT_PortParams SEEDVPM642_vCapParamsPort = {FALSE, /* enableDualChan; */ VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 1 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 2 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 3 polarity */&TVP51XX_Fxns,INV,};VPORT_PortParams SEEDVPM642_vCapParamsPortCh2a = {TRUE, /* enableDualChan; */ VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 1 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 2 polarity */VPORT_POLARITY_ACTIVE_HIGH, /* vport control pin 3 polarity */&TVP51XX_Fxns,&TVP51XX_Fxns,};SAA7115_ConfParams EVMDM642_vCapParamsSAA7115 = {SAA7115_MODE_PAL720,SAA7115_MODE_PAL720,SAA7115_AFMT_COMPOSITE,FALSE,FALSE,INV, /*handleI2C */}; TVP51XX_ConfParams SEEDVPM642_vCapParamsTVP5150 = {TVP51XX_MODE_PAL601, /*TVP5150的视频模式*/TVP51XX_AFMT_COMPOSITE, /*TVP5150的输入方式*/1, /*input port*/}; /*handleI2C */TVP51XX_ConfParams SEEDVPM642_vCapParamsTVP5150 = {TVP51XX_MODE_PAL601, /*TVP5150的视频模式*/TVP51XX_AFMT_COMPOSITE, /*TVP5150的输入方式*/1, /*input port*/}; /*handleI2C */ 从表中可以看出,有些参数是不一样的。具体参数的意义可以从ti提供的文档中找到。有位兄弟问:
VPORTCAP_Params SEEDVPM642_vCapParamsChan
SEEDVPM642_vCapParamsChan2a
SEEDVPM642_vCapParamsChan2b
这是三个输入通道的参数设置,其中里面的irqId,是变化的。也看到了网上关于他们想在这块板子上跑四路关于这个参数设置不对的文章。 想问的是:irqId它的值根据什么而定的,值从哪里来,它的作用是什么,能决定什么。它是不是决定打开哪路通道传输的关键参数。
显然:irqId是中断值。下面分析这个值的意义。
中断类型和中断信号如下:
三种中断类型:RESET#,NMI,INT4-INT15,优先顺序如下:
复位中断:最高级别,用来停止CPU工作,并返回到一个已知的状态.
它是低电平有效,其他的中断是转向高电平的上升沿有效.
为了正确初始化CPU,在RESET#再次变成高电平之前必须保持10个时钟.
复位操作使得所有的指令执行都被打断,所有的寄存器返回到他们的默认状态.
复位中断服务取指包必须放在地址为0的内存中.
复位不受转移指令的影响.
不可屏蔽中断NMI它通常用来向CPU发出严重硬件中断的警报.为了实现NMI,在中断使能寄存器中的不可屏蔽中断使能位(NMIE)必须置1.如果NMIE置1,阻止NMI处理的唯一可能是包括屏蔽中断发生在转移指令的延迟间隙里.
INT4-INT15C6000有12个可屏蔽中断,他们被连接到芯片外部或片内外设,也可以由软件控制或者不用.中断发生时,将中断标志寄存器(IFR)得相应位置置1.假如一个INT不发生在转移指令的间隙里,它还必须满足下列条件才能得到响应.
状态控制寄存器(CSR)中的全局中断使能位置1中断使能寄存器(IER)中断NMIE位置1.IER中的相应使能位置置1。在IFR中没有更高优先级的中断标志(IF)位为1
中断响应信号(IACK ,INUMx)IACK ,INUMx信号用来通知C6000片外硬件:在CPU内一个中断已经发生并且正在处理时,会由IACK信号指出CPU已经开始处理一个中断,INUMx信号(INUM3~INUM0)指出正在处理的是哪一个中断(即IFR中的中断位).例如如果INUMx信号从高到低为0111,表明正在处理INT7中断.二:中断服务表(IST)中断服务表(IST)是包含中断服务代码的取指包的一个地址表当CPU开始处理一个中断时,他要参照IST进行.IST包包含16个连续取指包,每个服务取指包都含有8条(32位字)指令.因此中断服务表中的地址以32字节增长.
控制状态寄存器CSR它有低两位用来控制中断,bit0---GIE,bit1---PGIE.PGIE保存先前的GIE值,即在响应可屏蔽中断时,保存GIE的值,而GIE被清0,这样在处理一个可屏蔽中断时,就防止了另外的一个可屏蔽中断的发生.当从中断返回时,通过BIRP指令可使PGIE的值重新回到GIE.
中断初始化的过程1. 初始化中断服务表指针(ISTP):intr_init(); 2. 选择用哪一个中断: intr_map(CPU_INT7,ISN_EXT_INT7); 3. 清中断: INTR_CLR_FLAG(CPU_INT7); 4. 中断服务子程序与中断号挂钩: intr_hook(Int7_ISR,CPU_INT7); 5. 打开非屏蔽中断: INTR_ENABLE(CPU_INT_NMI); 6. 打开所选中断: INTR_ENABLE(CPU_INT7); 7. 全局中断使能: INTR_GLOBAL_ENABLE();其中的第二条中的两个参数分别可以为下列的值:
中断处理函数都是小写的,而宏定义都是大写的,在 C 语言的语法里是要注意的,否则会出现找不到函数或者函数未定义。
example:中断源需要映射到CPU中断,这个是通过加载中断选择数到需要的中断选择域中.intr_map(CPU_INT8,ISN_DMA_INT0);当中断多路器寄存器配置后,ISR就可以跟CPU挂钩并使能了.interrupt void exampleISR(void){isrFlag= TRUE;return;}intr_hook( exampleISR, CPU_INT8 );INTR_ENABLE( CPU_INT8 );现在DMA通道0的中断事件就可以调用exampleISR .
我的分析只是一面之言,难免有偏颇之处,要是有错误,请大家批评指正。