引用: 物是人非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大概要消耗多少硬件资源,是不是会占用掉算法处理的时间?
问题有点多,麻烦你了,非常感谢!
引用: 物是人非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大概要消耗多少硬件资源,是不是会占用掉算法处理的时间?
问题有点多,麻烦你了,非常感谢!
举报