完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 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个回答
|
|
1. 我的理解是:VPFE (CCDC)的输出地址指向的就是VPBE的OSD的输入地址。你可以修改CCDC的输出地址到其他地址,然后对其做相应的处理。再把处理完的数据配置的OSD的地址寄存器里,用于显示。
2. 如果你需要对采集的数据进行处理,那采集和输出就会有延时,不知道你提到的同步是什么概念。 3. 建议使用timer来看运行时间,是比较准确的 |
|
|
|
物是人非aaa 发表于 2018-5-28 10:28 非常感谢你的回复,我说的同步是帧同步的意思,就是说我怎么才能知道CCDC已经采集好一帧数据并保存到DDR2了?这样我就可以在存完一帧数据后进行我的算法处理(算法是以帧为单位对图像进行处理的),处理完成后,后又怎样去控制显示器去显示这处理完的一帧数据?难道大家在做图像处理的时候不是严格以帧为单位进行的,而是随时取出采集缓存区的数据(不管这个时候缓冲区存的是完整的一帧数据还是上一帧和当前帧的混合数据)? |
|
|
|
dsdaiztt 发表于 2018-5-28 10:44 一般我们认为下一帧数据的VD来到的时候,上一帧的数据就写到DDR完毕,当然你可以调整芯片内部VD产生的延时以确保。在VD里面我们是需要切换CCDC写DDR的输出地址的(ping-pong buffer)。这个寄存器是shadow寄存器,会在下一个VD到来的时候更新。 如果输入和输出显示的频率相同,一般可以不控制。因为如果你可以做到实时处理输入的数据,就可以可以把相应帧率的数据输出。当然你也可以做控制,利用采集的VD,或者timer。 |
|
|
|
物是人非aaa 发表于 2018-5-28 11:01 Chris, 非常感谢你的建议,让我知道了我对VPFE还是有很多理解不够透彻的地方,我基本明白了,回头我再仔细看一下VPFE的手册。现在还有几个新的问题请教: 1、我在采集和显示720*480的图像的时候,中间只做了一个简单的灰度化处理,由于程序的各个段都配置到了DDR2中,所以没有达到实时处理的效果,显示的运动场景的画面非常不连续,而我把各个段都配置到内部L2RAM后画面基本就连续了,我用profile clk看了一下,灰度化的过程分别消耗大约100ms和11ms,由于灰度化的代码非常简单,所以我猜测大部分时间都消耗在读写DDR2内存上了,如果读写内存这么消耗时间,那我的算法很可能不能达到时间要求,我想问一下怎样估算读写DDR2需要的时间?比如读一帧720*480的数据,DDR2时钟是162MHz。而且如果我程序在L2RAM中存储不下,要怎样分配段到外部DDR2才能达到最快处理速度? 灰度化代码: for(i=0;i 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大概要消耗多少硬件资源,是不是会占用掉算法处理的时间? 问题有点多,麻烦你了,非常感谢! |
|
|
|
dsdaiztt 发表于 2018-5-28 11:21 你好! DSP优化请了解一下processors.wiki.ti.com/.../TMS320C6000_DSP_Optimization_Workshop。你的编译选项,以及对循环的处理都对运行的时间有影响。 我对DM6437的软件不是很熟悉,但如果是软件包提供的各个软件模块,一定是可以配套运行正常的,请放心使用。 |
|
|
|
物是人非aaa 发表于 2018-5-28 11:40 Chris, 谢谢的你的帮助,我自己再摸索摸索,非常感谢! |
|
|
|
你好!我也是刚入入门达芬奇平台,选的是DM6446;也在做图像处理,遇到类似的问题,请问楼主你是在VPFE和VPBE之间添加处理代码的吗?楼主方便加一下QQ吗?Q:415926459.谢谢楼主!
|
|
|
|
你好。我现在写代码是也遇到了相同的问题。由于我以前是写软件的,对硬件不太熟悉。所以对怎么在VPFE和VPBE之间加入自己的处理算法不太熟悉,你方便说下你的方法么??谢谢了。 |
|
|
|
dlanny 发表于 2018-5-28 12:23 你好, 建议你看一下VPFE/VPBE的user guide,了解一下数据流。下面是一个例子,前端采集可能不会有不同的数据流。 CCDC->previewer>-resizer->DDR1, DDR2-》OSD->VENC->LCD/CVBS 一般来说loopback demo通常会把DDR1地址和DDR2地址设置为同一个。如果你需要在采集和显示中间加上处理,请将DDR1的地址和DDR2的地址设置为不同。下面是一个数据流的例子。一般DDR1和DDR2都要有ping -pong buffer,或者更多的buffer循环使用。 CCDC->previewer>-resizer->DDR1-》Data process-》DDR2-》OSD->VENC->LCD/CVBS |
|
|
|
物是人非aaa 发表于 2018-5-28 12:29 你好!谢谢你的回复,根据你说的我将ddr1和ddr2的地址设置成不同的可以加入我的函数了。 但是这样做的话显示器上的图片会一帧一帧的出现(我直接将地址里的数据搬运过去),也就是说这样太费时间了。你是怎么改进的??(如果方便的话加我QQ***) 谢谢!! |
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
690 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
604 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1059 浏览 1 评论
749 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
527 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
170浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
132浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
129浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
125浏览 12评论
GD32F303RCT6配置PA4 ADC引脚,将PA2代替key功能,PA2连接时无法实现预期功能,为什么?
60浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 21:33 , Processed in 1.189231 second(s), Total 95, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号