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.

C6678启动的问题

       我理解的启动流程: 每个核有独立的中断相关寄存器。启动的时候,先初始化core0(主核),其他core(从核)执行空指令,并处于等待IPC中断的状态。主核执行一系列初始化(core相关初始化,SMP操作系统的相关初始化),完成之后,给从核发送启动IPC,从核接受IPC并响应,然后执行从核的相关初始化。

在从核执行空指令,并处于等待主核发送IPC中断的状态时,可能有两种情况。

1.此时,从核还没有做任何初始化,包括IER也没有初始化(还是reset之后的默认值,这个默认值是禁止所有可屏蔽中断的)。如果是的话,这里有一个问题:从核在reset之后IER是禁止所有可屏 蔽中断的,包括IPC,那么它怎么去发现并响应主核发送的启动IPC呢?

2.此时,从核的相关中断控制已经初始化,并使能了中断,这样的话,从核可以响应主核发来的IPC,然后跳出空指令,开始执行。如果这样的话,我也有一个问题:从核的相关中断初始化是在什么时候做的呢?

看了相关文档,没能理解清楚,请给予详细解答。

  • 上电执行bootloader程序,加载好相关的应用配置。

  • 每个core在启动时都会执行bootloader,core0会做初始化外设,并做数据接收和搬移,其他core在进入idle之前会初始化相关的中断,保证可以响应IPC

  • 你好,我也补充一点。

    bootloader是固化在DSP的ROM里面的,当DSP启动后,会自动从这里的读取代码然后执行。这里执行的代码是固化的不可更改的,这段代码的作用就是根据DSP的pin配置方式对核进行初始化(比如PLL等)和完成不同模式的Boot处理。

  • Zhan Xiang您好,

    感谢您的回复。

    我的理解是:启动时,每个核不会同时执行bootloader吧,也就是说bootloader的执行应该是有个顺序的。core0先执行bootloader,做初始化(这个时候其他核是不执行bootloader的);在core0做完相关初始化之后,发送IPC到其他核,然后其他核响应这个IPC执行bootloader的属于自己的代码。

    而您的意思是说,每个核在上电之后同时执行bootloader中属于自己的代码?

    不知道是不是我理解错了。

  • 所有执行统一份代码,只是在执行的时候通过DNUM来去做区分,所以core0初始化其他外设的同时,其他core都会执行相关的代码映射IPC中断

  • 您好,

    1.“其他core都会执行相关的代码映射IPC中断”,这一句是什么意思?

    2.所有核同时执行bootloader?而不是core0去触发其他核执行bootloader?是这样吗?

  • 1. 每个core都会配置自己的中断映射关系,从而可以响应IPC中断

    2. bootloader是固化在ROM中的代码,所有和core在DSP复位后,都会从Boot ROM处开始执行,只是core0会进行数据接收和搬移,而其他core则执行idle指令等待IPC中断。

  • 每个核配置自己的中断映射关系,这个操作是在哪个阶段做的?

  • King Wang您好,

    我理解的您的意思是:bootloader是ROM中自带的代码?而不是要用户自己编写?

    不知道理解的对不对.

  • 是的,ROM代码是DSP出厂时就固化在里面了,用户无法更改。DSP Boot时,每个核都会去取这段代码,然后按照核ID不同进入不同的分支,具体就是Core0执行Boot,其余核在初始化自己后,配置相应的寄存器,然后进入IDLE,等待Core0的IPC中断。

  • 大家好,

    我最近在尝试C6678的多核多工程烧写(core0、core1各一个工程,core2-7一个工程),采用二次引导。这个过程有两个问题:

    1、多核烧写时,core1-7的程序由core0进行DMA搬移,目前是在各个核的L2上操作,即core0 boot后,将其他核的程序搬移到对应核的L2。这样一来,这些L2还能在应用程序里使用吗?目前至少需要用L2存放接收到的数据(基本用400KB左右),用于算法处理。尝试过,貌似不可以。

    2、Boot时,core1-7核的搬移在secondbootspi工程里做还是在Core0的应用程序里做好?当前在secondbootspi工程里做过小程序测试,能启动正常。

    另外,多工程的多核烧写,哪里有具体的资料不?目前感觉资料很乱啊。

    谢谢。