TI论坛
直播中

张涵

7年用户 131经验值
私信 关注

请问如何在VPFE和VPBE之间加入自己的处理算法?

本帖最后由 一只耳朵怪 于 2018-5-29 14:33 编辑

尊敬的ti专家:
你好!我现在用DM6437开发板开发图像处理的项目,想在TI提供的video_loopback例程上进行开发,但是现在遇到了如下问题:
1.例程中只对VPFE和VPBE进行了初始化,而后就可以进行连续的图像采集和显示,我想知道采集和显示是怎么进行帧同步的,即显示端怎么知道采集端采完并在DDR2中保存了完整的一帧后才去显示的?我看了VPFE和VPBE的文档,没有找到两个模块之间是怎么进行帧同步的。
2.如果我想对采集的数据进行处理后再去显示的话,该怎么进行采集和显示的帧同步?我想,采集端可以使用VDINT0/VDINT1中断指示一帧采集的完成,但是这个中断指示的好像是CCDC采集完成而不是DDR2的存储完成,所以估计这个想法不行。所以我就想例程中VPFE和VPBE对DDR2的数据存取是不是都是用EDMA完成的,那么我就该使用EDMA的中断来通知VPBE采集的一帧数据已经存储完成,但是VPBE怎样得到这个通知?又怎样去显示新的一帧呢?
3.还有一个问题就是我在CCS中用profile clk得到的算法的运行的周期数计算得到的时间是程序实际运行时间的一半(都是在Emulator下看的),这是怎么回事?我是用定时器计算程序实际运行时间的。
非常希望能得到你的帮助,谢谢!

回帖(10)

乔婧

2018-5-28 10:28:47
1. 我的理解是:VPFE (CCDC)的输出地址指向的就是VPBE的OSD的输入地址。你可以修改CCDC的输出地址到其他地址,然后对其做相应的处理。再把处理完的数据配置的OSD的地址寄存器里,用于显示。
2. 如果你需要对采集的数据进行处理,那采集和输出就会有延时,不知道你提到的同步是什么概念。
3. 建议使用timer来看运行时间,是比较准确的
举报

张涵

2018-5-28 10:44:15
引用: 物是人非aaa 发表于 2018-5-28 10:28
1. 我的理解是:VPFE (CCDC)的输出地址指向的就是VPBE的OSD的输入地址。你可以修改CCDC的输出地址到其他地址,然后对其做相应的处理。再把处理完的数据配置的OSD的地址寄存器里,用于显示。
2. 如果你需要对采集的数据进行处理,那采集和输出就会有延时,不知道你提到的同步是什么概念。
3. 建议使用timer来看运行时间,是 ...

非常感谢你的回复,我说的同步是帧同步的意思,就是说我怎么才能知道CCDC已经采集好一帧数据并保存到DDR2了?这样我就可以在存完一帧数据后进行我的算法处理(算法是以帧为单位对图像进行处理的),处理完成后,后又怎样去控制显示器去显示这处理完的一帧数据?难道大家在做图像处理的时候不是严格以帧为单位进行的,而是随时取出采集缓存区的数据(不管这个时候缓冲区存的是完整的一帧数据还是上一帧和当前帧的混合数据)?
举报

乔婧

2018-5-28 11:01:17
引用: dsdaiztt 发表于 2018-5-28 10:44
非常感谢你的回复,我说的同步是帧同步的意思,就是说我怎么才能知道CCDC已经采集好一帧数据并保存到DDR2了?这样我就可以在存完一帧数据后进行我的算法处理(算法是以帧为单位对图像进行处理的),处理完成后,后又怎样去控制显示器去显示这处理完的一帧数据?难道大家在做图像处理的时候不是严格以帧为单位进行的,而是随 ...

一般我们认为下一帧数据的VD来到的时候,上一帧的数据就写到DDR完毕,当然你可以调整芯片内部VD产生的延时以确保。在VD里面我们是需要切换CCDC写DDR的输出地址的(ping-pong buffer)。这个寄存器是shadow寄存器,会在下一个VD到来的时候更新。
如果输入和输出显示的频率相同,一般可以不控制。因为如果你可以做到实时处理输入的数据,就可以可以把相应帧率的数据输出。当然你也可以做控制,利用采集的VD,或者timer。
举报

张涵

2018-5-28 11:21:15
引用: 物是人非aaa 发表于 2018-5-28 11:01
一般我们认为下一帧数据的VD来到的时候,上一帧的数据就写到DDR完毕,当然你可以调整芯片内部VD产生的延时以确保。在VD里面我们是需要切换CCDC写DDR的输出地址的(ping-pong buffer)。这个寄存器是shadow寄存器,会在下一个VD到来的时候更新。
如果输入和输出显示的频率相同,一般可以不控制。因为如果你可以做到实时处理 ...

Chris,
非常感谢你的建议,让我知道了我对VPFE还是有很多理解不够透彻的地方,我基本明白了,回头我再仔细看一下VPFE的手册。现在还有几个新的问题请教:
1、我在采集和显示720*480的图像的时候,中间只做了一个简单的灰度化处理,由于程序的各个段都配置到了DDR2中,所以没有达到实时处理的效果,显示的运动场景的画面非常不连续,而我把各个段都配置到内部L2RAM后画面基本就连续了,我用profile clk看了一下,灰度化的过程分别消耗大约100ms和11ms,由于灰度化的代码非常简单,所以我猜测大部分时间都消耗在读写DDR2内存上了,如果读写内存这么消耗时间,那我的算法很可能不能达到时间要求,我想问一下怎样估算读写DDR2需要的时间?比如读一帧720*480的数据,DDR2时钟是162MHz。而且如果我程序在L2RAM中存储不下,要怎样分配段到外部DDR2才能达到最快处理速度?
灰度化代码:
                for(i=0;i                         *(disPack_32addr+i)=(*(capPack_32addr+i)&0xFF00FF00)|0x00800080;
2、我在程序中使能cache和不使能cache,程序运行时间没有什么差别,我在想是不是CCS的GEL中自动使能了cache,但是我在CCS SETUP里面没有设置GEL文件,所以很困惑。要怎样查看我的cache是否起作用了呢?我是这样使能cache的:
void config_cache(void)
[
 CSL_CacheRegsOvly cacheRegs = (CSL_CacheRegsOvly)CSL_CACHE_0_REGS;
 volatile unsigned int stall;
 // The below writes to the CFG registers are followed by a dummy read.  Mode
 // switches require that a read is performed immediately after the write.  The
 // read stalls the cpu to ensure the mode change completes.
 // Set L1P size to 32K
 CSL_FINST(cacheRegs->L1PCFG,CACHE_L1PCFG_MODE,32K);
 stall = cacheRegs->L1PCFG;
 // Set L1D size to 32K
 CSL_FINST(cacheRegs->L1DCFG,CACHE_L1DCFG_MODE,32K);
 stall = cacheRegs->L1DCFG;
 // Set L2 size to 64k and normal opperation
 cacheRegs->L2CFG = CSL_FMKT(CACHE_L2CFG_MODE,64K)
                  | CSL_FMKT(CACHE_L2CFG_L2CC,NORMAL);
 stall = cacheRegs->L2CFG;
 // The MAR registers set the cachability of memory spaces external to the
 // megamodule.  Below is an example of turning on cachability for two ranges.
 // Reference spru187 for a complete list the MAR ranges.
 // Set MAR[17] range 0x83000000-0x83FFFFFF as cacheable
 CSL_FINST(cacheRegs->MAR[131],CACHE_MAR_PC,CACHEABLE);
 CSL_FINST(cacheRegs->MAR[129],CACHE_MAR_PC,CACHEABLE);
 CSL_FINST(cacheRegs->MAR[130],CACHE_MAR_PC,CACHEABLE);
 CSL_FINST(cacheRegs->MAR[132],CACHE_MAR_PC,CACHEABLE);
 CSL_FINST(cacheRegs->MAR[133],CACHE_MAR_PC,CACHEABLE);
 CSL_FINST(cacheRegs->MAR[134],CACHE_MAR_PC,CACHEABLE);
]
3、我现在想用BIOS来处理底层硬件的配置,但是我在TI网站上下的dvsdk_1_11_00_00里包含的PSP的user guide中对应用PSP的系统要求XDC tools 3.00.01 or higher,但是DVSDK中自带的XDC的版本是2.95.02,我不知道这是不是自相矛盾了,我能不能在2.95.02的版本的基础上使用这个版本的PSP?如果不能我怎样单独安装其他版本的XDC,或者我能不能在CCS3.3中使用CCS4中的XDC?还有使用BIOS大概要消耗多少硬件资源,是不是会占用掉算法处理的时间?
问题有点多,麻烦你了,非常感谢!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分