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

TMS320C6678: 6678多核多镜像问题

Part Number:TMS320C6678

你好,多核多镜像问题;分为以下步骤:

1,核0运行 将核1的程序按照mxp格式将各个段挑选出来按照重定位到ddr的运行地址空间;

2,boot magic addr地址填入核1的程序入口地址;

3,进行软复位寄存器配置;并给核1发送ipc中断;在线挂仿真器调试,核0无法唤起核1执行;

调试过程:

将核0核1设置为一组,核0上载核0的.out,核1上载核1的.out;运行核0,核0发送ipc中断后,没有唤起核1运行;

因为核1程序中有ddr 0x90000000 写11 ,ipc中断后,没有看到ddr 0x90000000 值的变化 ;

基本配置:

核1的magic地址核IPc中断按照下面的定义填入

// CorePac0-7 IPC 触发寄存器(IPCGRx)
#define IPCGR_0_REGS (*((volatile unsigned int *)(0x02620240)))
#define IPCGR_1_REGS (*((volatile unsigned int *)(0x02620244)))
#define IPCGR_2_REGS (*((volatile unsigned int *)(0x02620248)))
#define IPCGR_3_REGS (*((volatile unsigned int *)(0x0262024C)))
#define IPCGR_4_REGS (*((volatile unsigned int *)(0x02620250)))
#define IPCGR_5_REGS (*((volatile unsigned int *)(0x02620254)))
#define IPCGR_6_REGS (*((volatile unsigned int *)(0x02620258)))
#define IPCGR_7_REGS (*((volatile unsigned int *)(0x0262025C)))

// 核0~核7 魔术地址(L2地址后4字节)
#define CORE_0_MAGIC_ADDR (*((volatile unsigned int *)(0X1087FFFC)))
#define CORE_1_MAGIC_ADDR (*((volatile unsigned int *)(0X1187FFFC)))
#define CORE_2_MAGIC_ADDR (*((volatile unsigned int *)(0X1287FFFC)))
#define CORE_3_MAGIC_ADDR (*((volatile unsigned int *)(0X1387FFFC)))
#define CORE_4_MAGIC_ADDR (*((volatile unsigned int *)(0X1487FFFC)))
#define CORE_5_MAGIC_ADDR (*((volatile unsigned int *)(0X1587FFFC)))
#define CORE_6_MAGIC_ADDR (*((volatile unsigned int *)(0X1687FFFC)))
#define CORE_7_MAGIC_ADDR (*((volatile unsigned int *)(0X1787FFFC)))

// 寄存器锁
#define KICK0 (*((volatile unsigned int *)(0x02620038)))
#define KICK1 (*((volatile unsigned int *)(0x0262003C)))

#define KICK0_UNLOCK (0x83E70B13)
#define KICK1_UNLOCK (0x95A4F1E0)
#define KICK_LOCK (0x1)

Shine:

请问MXP格式是什么格式?用哪个工具生成的?

用仿真器跟踪一下,核0有正确加载核1代码吗?

,

feifei zhang:

mxp就是各个段的size,运行时目的地址,整个程序的入口地址

,

feifei zhang:

上面的问题已经解决:

还有一个问题,就是6678通过寄存器可以对单个内核软复位吗

6678手册中有个CPU local reset

比如,通过核0程序中独立的寄存器复位核1 这个寄存器要如何设置

因为没找到手册中单独对某一个核复位的配置方法

谢谢

,

feifei zhang:

这个软复位是复位寄存器RSTCTRL和RSTCFG这两个寄存器在那个核配置,就对那个核复位吗

,

Shine:

可以通过配置MDCTL[Y].LRSTZ来复位。请参考下面的PSC文档。2.2.3 Local Resethttps://www.ti.com/lit/ug/sprugv4c/sprugv4c.pdf

,

feifei zhang:

我按照你的方法将 MDCTL[16].LRSTZ=0

然后核1就一直处于in reset

怎么再次唤醒核1呀

 MDCTL[16].LRSTZ=1也是无法唤醒核1

好像一直处于in reset状态了

,

Shine:

请问是用核0去唤醒核1的吗?

,

feifei zhang:

是的,仿真器配的这个寄存器是在in reset

唤醒后是runing  寄存器读出来状态也对,可是就跑不起来核1

、而且再次对核1复位,核0也挂了

,

feifei zhang:

寄存器是这样配的

本地复位核1

=0x1000

唤醒核1

=0x303

仿真器确实看到核1处于runing了

可是核1就是没跑起来.而且再次复位核1,核0也挂了

,

Shine:

请查看一下MDSTATy寄存器位LRST是不是为1了?

另外,我看到文档里"Execution of code previously in L2 begins execution"这句话,请问core1的代码时从L2开始执行的吗?

,

feifei zhang:

这个我也注意到了,我是在ddr执行的

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 6678多核多镜像问题
分享到: 更多 (0)