CCS加载数据到DSP指定位置

时间:2024-03-13 14:14:32

CMD文件中先指定各个段的位置,例如我们想把数组a放在evm6678l的DDR3中,通过查询手册可知,DDR3的起始地址在0x80000000处:

CCS加载数据到DSP指定位置

因此才CMD文件中加:

-c
-heap 0x41000
-stack 0xa000
/* Memory Map */
MEMORY
{
    L1PSRAM (RWX) : org = 0x0E00000, len = 0x7FFF
    L1DSRAM (RWX) : org = 0x0F00000, len = 0x7FFF
    L2SRAM (RWX) : org = 0x0800000, len = 0x080000
    MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000
    DDR3 (RWX) : org = 0x80000000,len = 0x10000000
}
SECTIONS
{
    .csl_vect > MSMCSRAM
    .text > MSMCSRAM
    GROUP (NEAR_DP)
    {
    .neardata
    .rodata
    .bss
    } load > MSMCSRAM
    .stack > MSMCSRAM
    .cinit > MSMCSRAM
    .cio > MSMCSRAM
    .const > MSMCSRAM
    .data > MSMCSRAM
    .switch > MSMCSRAM
    .sysmem > MSMCSRAM
    .far > MSMCSRAM
    .testMem > MSMCSRAM
    .fardata > MSMCSRAM
    platform_lib > MSMCSRAM
    .a > DDR3
}

heap和stack尽量设置大一点,否则如果用fopen打开文件指针会溢出。

CMD的最后一行分配a字段是在DDR3处,现在在main.c文件中指定我们数组a的位置:

CCS加载数据到DSP指定位置

这两行代码在main.c的最开始处写上,说明定义的数组a是在定义在DDR3中的。接下来是生成我们需要加载的数据,CCS默认的数据格式是.dat。因此我们创建一个dat文件写入:

CCS加载数据到DSP指定位置

对第一行进行解释:

CCS数据文件文件头格式:
文件类型        数据类型        起始地址        数据页号        数据长度

文件类型:固定为16510;
数据类型:取值1-4,对应类型为:十六进制、整数、长整数和浮点数;
起始地址:十六进制,数据存放的内存缓冲区首地址;
数据页号:十六进制,指明数据取自哪个数据页;1代表是数据,0代表是程序
数据长度:十六进制,指明数据块长度,以WORD为单位。

这里我们文件类型是1651,数据类型是浮点数因此是4,起始地址在DDR3的首地址,因此用16进制表示就是80000000,数据页号我们默认写为1,表示存放的是数据;长度就是有多少个数,这里为10个,写为16进制就是A。

DEBUG下:选择load memory

CCS加载数据到DSP指定位置

勾选使用头文件信息设置起始地址与数据长度。

finish后在Memory Browser输入0X80000000就可以看见存储的第一个数据,可以根据不同的格式进行显示