TI中文支持网
TI专业的中文技术问题搜集分享网站

ARM侧加载DSP裸核程序流程问题

有一个裸核加载DSP程序的问题困扰了几天,麻烦帮忙看下!

这周我写了一个ARM侧加载DSP0代码的程序,K2EVM-HK开发板上电ARM侧跑起来,从/home目录下读取dsp.hex文件,将内容写入到DSP0的L2中(目前所有代码都放置在L2中),然后让DSP0跑起来往MSAM中写一段数据。用仿真器可以看到代码已经写入L2中,但是貌似DSP0没有跑起来。

对DSP的操作如下:

//下载程序前的复位DSP

static void localRestDsp(void)

{

    // assert DSP local reset

    P_MDCTL15 &= ~ P_MDCTL_LRST_DEASSERT;

    P_MDCTL15 &= 0xFFFFFFE0;

    P_MDCTL15 |= P_MDCTL_NEXT_SWRSTDISABLE | P_MDCTL_RESETISO_ENABLE;

 

    P_PDCTL8  |= 1;

 

    usleep(10000);

    P_PTCMD |= (1 << 8);

    usleep(10000);

}

 

//下载程序后的使能DSP工作,其中dsp_cinit_addr是DSP代码的cinit地址

static void enableDsp(unsigned long dsp_cinit_addr)

{

    P_BOOTCFG_KICK0 = 0x83E70B13;

    P_BOOTCFG_KICK1 = 0x95A4F1E0;

 

    P_BOOTCFG_DSP_BOOT_ADDR0 = (unsigned long) dsp_cinit_addr;

 

    P_BOOTCFG_KICK0 = 0;

    P_BOOTCFG_KICK1 = 0;

 

    // de-assert DSP local reset

    P_MDCTL15 = P_MDCTL_RESETISO_ENABLE | P_MDCTL_LRST_DEASSERT | P_MDCTL_NEXT_ENABLE;

    P_PDCTL8  = 1;

 

    usleep(10000);

    P_PTCMD |= (1 << 8);

}

其中相关宏定义如下:

#define P_PTCMD                     *(unsigned int *)(ppsc+0x120)  //0x02350120

#define P_PDCTL8                    *(unsigned int *)(ppsc+0x320)  //0x02350320   DSP0

#define P_MDCTL15                   *(unsigned int *)(ppsc+0xA3C)  //0x0235083C   DSP0

 

#define P_MDCTL_RESETISO_NO         0x0

#define P_MDCTL_RESETISO_ENABLE     0x100

#define P_MDCTL_LRST_ASSERT         0x0

#define P_MDCTL_LRST_DEASSERT       0x10

#define P_MDCTL_NEXT_SWRSTDISABLE   0x0

#define P_MDCTL_NEXT_ENABLE         0x3

 

#define P_BOOTCFG_KICK0             *(unsigned int *)(pbootCfg+0x38)  //0x02620038      // 83E70B13

#define P_BOOTCFG_KICK1             *(unsigned int *)(pbootCfg+0x3C)  //0x0262003C      // 95A4F1E0

 

#define P_BOOTCFG_DSP_BOOT_ADDR0    *(unsigned int *)(pbootCfg+0x40)  //0x02620040

有以下几个问题:

1.  考虑到以后会有对已经运行的DSP下载程序的操作,我现在的代码是先reset DSP0,然后再enable DSP0,假如想达到这个目的,是否是通过PTCMD、MDCTL、PDCTL进行操作即可?

2. DSP的BOOT地址,是不是填写c_int地址,DSP_BOOT_ADDR0寄存器内容是填写DSP的相对地址,还是整个SOC的绝对地址?

3. 上面ARM侧加载DSP裸核程序的流程是不是有问题,假如有问题正确的流程应该是什么样的,有没有示例参考?

HG:

建议你用示例程序debug一下,ti官网提供了很多demo。

Aquarius:

回复 HG:

可否提供个针对性的例子,我找了些,但没有太针对性的示例,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » ARM侧加载DSP裸核程序流程问题
分享到: 更多 (0)