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的upp,b通道发送,a通道接收,然后数据处理。 我为了加快数据处理,修改了CMD文件,使用的是创龙的开发板和CMD文件,原来是分配在DDR上运行,我想放在L2RAM上运行,其中栈和堆的大小我都修改尝试过,如图若分配在DSPL2RAM o = 0x00800000 l = 0x00040000 上时,a通道中断能触发,但是数据都是初始化时的状态为0,就像没有收到数据。 如果分配到SHDSPL2RAM o = 0x11800000 l = 0x00040000 /* 256KB L2 共享内置 RAM */ 通道A数据收到显示正常。 这是为什么? 看论讨说DSPL2RAM和SHDSPL2RAM是同一快。 但是速度不一样,DSPL2RAM》 SHDSPL2RAM, 我为了速度快,想直接在DSPL2RAM上运行。 如有demo,请方便给你链接。 谢谢
-stack 0x00001000
-heap 0x00001000
MEMORY
{
/****************************************************************************/
/* */
/* DSP 专有内存区域 */
/* */
/****************************************************************************/
DSPL2ROM o = 0x00700000 l = 0x00100000 /* 1MB L2 DSP 本地 ROM (DSP ROM Bootloader) */
DSPL2RAM o = 0x00800000 l = 0x00040000 /* 256kB L2 DSP 本地 RAM */
DSPL1PRAM o = 0x00E00000 l = 0x00008000 /* 32kB L1 DSP 本地程序 RAM */
DSPL1DRAM o = 0x00F00000 l = 0x00008000 /* 32kB L1 DSP 本地数据 RAM */
/****************************************************************************/
/* */
/* 公共内存区域 */
/* */
/****************************************************************************/
SHDSPL2ROM o = 0x11700000 l = 0x00100000 /* 1MB L2 共享内置 ROM */
SHDSPL2RAM o = 0x11800000 l = 0x00040000 /* 256KB L2 共享内置 RAM */
SHDSPL1PRAM o = 0x11E00000 l = 0x00008000 /* 32KB L1 共享内置程序 RAM */
SHDSPL1DRAM o = 0x11F00000 l = 0x00008000 /* 32KB L1 共享内置数据 RAM */
EMIFACS0 o = 0x40000000 l = 0x20000000 /* 512MB SDRAM (CS0) */
EMIFACS2 o = 0x60000000 l = 0x02000000 /* 32MB 异步 (CS2) */
EMIFACS3 o = 0x62000000 l = 0x02000000 /* 32MB 异步 (CS3) */
EMIFACS4 o = 0x64000000 l = 0x02000000 /* 32MB 异步 (CS4) */
EMIFACS5 o = 0x66000000 l = 0x02000000 /* 32MB 异步 (CS5) */
SHRAM o = 0x80000000 l = 0x00020000 /* 128KB 共享 RAM */
DDR2 o = 0xC0001000 l = 0x08000000 /* 128MB DDR2 分配给 DSP */
EntryPoint o = 0xC0000000 l = 0x00000800 /* 2 KB C 语言入口点 */
Vector o = 0xC0000800 l = 0x00000800 /* 2 KB 中断向量表 */
/****************************************************************************/
/* 外设内存区域 */
/* */
/****************************************************************************/
SYSCFG0 o = 0x01C14000 l = 0x00001000 /* 4K SYSCFG0 */
uPP o = 0x01E16000 l = 0x00001000 /* 4K uPP */
GPIO o = 0x01E26000 l = 0x00001000 /* 4K GPIO */
McBSP1 o = 0x01D11000 l = 0x00000800 /* 2K McBSP1 */
}
SECTIONS
{
.text:_c_int00 > DSPL2RAM /* 可执行代码 C 程序入口点*/
.text > DSPL2RAM /* 可执行代码 */
.stack > DSPL2RAM /* 软件系统栈 */
.bss > DSPL2RAM /* 未初始化全局及静态变量 */
.cio > DSPL2RAM /* C 输入输出缓存 */
".vectors" > DSPL2RAM /* 中断向量表 */
.const > DSPL2RAM /* 常量 */
.data > DSPL2RAM /* 已初始化全局及静态变量 */
.switch > DSPL2RAM /* 跳转表 */
.sysmem > DSPL2RAM /* 动态内存分配区域 */
.far > DSPL2RAM /* 远程全局及静态变量 */
.args > DSPL2RAM
.ppinfo > DSPL2RAM
.ppdata > DSPL2RAM
/* TI-ABI 或 COFF */
.pinit > DSPL2RAM /* C++ 结构表 */
.cinit > DSPL2RAM /* 初始化表 */
/* EABI */
.binit > DSPL2RAM
.init_array > DSPL2RAM
.neardata > DSPL2RAM
.fardata > DSPL2RAM
.rodata > DSPL2RAM
.c6xabi.exidx > DSPL2RAM
.c6xabi.extab > DSPL2RAM
/* DDR2 */
.buffer > DSPL2RAM
/* 外设 */
.Reg_SYSCFG0 > DSPL2RAM
.Reg_uPP > DSPL2RAM
.Reg_GPIO > DSPL2RAM
.Reg_McBSP1 > DSPL2RAM
}
如图若分配在DSPL2RAM o = 0x00800000 l = 0x00040000 上时,a通道中断能触发,但是数据都是初始化时的状态为0,就像没有收到数据。 如果分配到SHDSPL2RAM o = 0x11800000 l = 0x00040000 /* 256KB L2 共享内置 RAM */ 通道A数据收到显示正常。 这是为什么?
0x11800000是全局地地址空间,uPP及外部master是从这个空间访问DSP CPU上的RAM的空间的。
0x00800000是DSP核的视角。
看论讨说DSPL2RAM和SHDSPL2RAM是同一快。 但是速度不一样
同一块,速度一样。只是DSP CPU访问的地址与外部master访问的地址空间不一样,简单都从0x11800000访问也是一样的。