DSP库中的函数怎么指定运行地址在DSP L1P RAM
比如DSPF_sp_fftSPxSP函数,想要放在DSP L1P RAM中运行,要怎么设置。
在DSPF_sp_fftSPxSP.s文件中,有.sect ".text:optimized"但是更改后运行不了。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
DSP库中的函数怎么指定运行地址在DSP L1P RAM
比如DSPF_sp_fftSPxSP函数,想要放在DSP L1P RAM中运行,要怎么设置。
在DSPF_sp_fftSPxSP.s文件中,有.sect ".text:optimized"但是更改后运行不了。
user3688025 说:如果L1P设置为程序的cache,那么是哪些程序cache了,可以确定么?
可以确定。用cache freeze 功能。
user3688025 说:2、如果不用于cache功能,那么是不是L1P与L1D就是无用 的了?
理论上在不用作cache时,L1P可以放程序,L1D可以放数据。但是L1P/L1D默认是使能的。那么在启动时,是不能作为程序,数据空间的。只能通过memory overlay方式,在启动后,将L1 Cache disable,再将程序搬到L1P去。
需要注意的是,在不用作Cache时:L1P只能放程序,L1D只能放数据。
user3688025 说:1、cache freeze 功能是CCS的功能么?如何使用?
最终在芯片上运行的,肯定与CCS无关,Freeze指的是Cache的配置。
关于Cache的寄存器说明,见下面文档,所有Cache的操作都是通过这几个寄存器来实现的,其实很简单。

关于Cache操作的几个模式,见下面文档(文中的关于CSL函数就不要追究了,这些函数是根据以前的DSP带的CSL库来的,现在的芯片没有这种CSL库了)

user3688025 说:2、默认使能是在不使用函数CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K );进行配置时,也是使能的么?
那么禁用是通过哪个函数,或是什么方式。
禁用就看有没有一个CacheDisable的函数,或者直接用配置上面文档里的寄存器
user3688025 说:memory overlay方式如何使用,L1D与L1P应该不能按地址访问吧
Disable cache功能后就是RAM了,就可以按地址访问了。
user3688025 说:可以将程序搬到L1P,将数据搬到L1D中,那么之后的程序运行与数据的读写更新是通过什么方式,按问题3来将不可以按地址访问的、
参考下面文档的 memory overlay和copy table.

最后问一下,为什么要将L1用作RAM?
首先感谢你的回复与细心指导。
1、使用L1为RAM的原因:
起初是想把程序中的主要算法放在内部RAM中,有DSP库的汇编FFT函数,还有自己写的几个其他算法函数,Freeze模式只是可以把缓冲的程序固定在cache(不知道理解的对不对)而无法指定特定的几个函数一直在L1P中运行,或是在Freeze之前cache程序无法指定。
再加上项目中的数据量是比较大的,L2已经被占用的差不多,程序无法放到L2中,只能是打L1的主意了。
是不是我对cache的功能不够了解,是不是在使能cache的情况下,可以指定特定几个函数在L1P中运行,或是指定数据在L1D中。我在cmd中试过,也更改过FFT的汇编,都是无效的,应该是这种方式都是会按地址访问的,所以无法运行。
2、
我在如下wiki地址找到了你说的rcsl库,不知道 是不是你说的这个库,也是好久没的更新过了。
processors.wiki.ti.com/.../QuickStartOMAPL1x_rCSL
另外,在最新的processor_sdk_rtos_omapl138_4_02_00_09这个软件包中,找到了一个csl的库,这个库是使用makefile进行管理的,而不是CCS软件。
..\pdk_omapl138_1_0_3\packages\ti\csl
user3688025 说:是不是我对cache的功能不够了解,是不是在使能cache的情况下,可以指定特定几个函数在L1P中运行,或是指定数据在L1D中。我在cmd中试过,也更改过FFT的汇编,都是无效的,应该是这种方式都是会按地址访问的,所以无法运行。
再看一下cache freeze和memory overlay,这两个是不同的方法。你直接在cmd里改到L1,当然不行了,连boot都起不来。默认是Cache,你boot时往Cache空间搬数据,这时连地址都没有,当然不会成功。
user3688025 说:我在如下wiki地址找到了你说的rcsl库,不知道 是不是你说的这个库,也是好久没的更新过了。
processors.wiki.ti.com/.../QuickStartOMAPL1x_rCSL
另外,在最新的processor_sdk_rtos_omapl138_4_02_00_09这个软件包中,找到了一个csl的库,这个库是使用makefile进行管理的,而不是CCS软件。
..\pdk_omapl138_1_0_3\packages\ti\csl
这个跟当前Cache使用问题无关。我说了忽略文内对CSL API调用的相关部分,关注Cache工作原理。
按之前的方式使用时,程序会跑飞
你现在的wiki方式,编译不通过。
void CacheDisable(void)
{
HWREG(SOC_CACHE_0_REGS + DSPCACHE_L1PCFG) =
HWREG(SOC_CACHE_0_REGS + DSPCACHE_L1PCFG) & 0xfffffff8;
HWREG(SOC_CACHE_0_REGS + DSPCACHE_L1DCFG) =
HWREG(SOC_CACHE_0_REGS + DSPCACHE_L1DCFG) & 0xfffffff8;
HWREG(SOC_CACHE_0_REGS + DSPCACHE_L2CFG) =
HWREG(SOC_CACHE_0_REGS + DSPCACHE_L2CFG) & 0xfffffff8;
}