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

C6678启动的问题

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

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

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

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

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

Anna:

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

Zhan Xiang:

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

King Wang:

回复 Zhan Xiang:

你好,我也补充一点。

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

xiangzhong kong:

回复 Zhan Xiang:

Zhan Xiang您好,

感谢您的回复。

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

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

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

Zhan Xiang:

回复 xiangzhong kong:

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

xiangzhong kong:

回复 Zhan Xiang:

您好,

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

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

Zhan Xiang:

回复 xiangzhong kong:

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

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

xiangzhong kong:

回复 Zhan Xiang:

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

xiangzhong kong:

回复 King Wang:

King Wang您好,

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

不知道理解的对不对.

King Wang:

回复 xiangzhong kong:

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

赞(0)
未经允许不得转载:TI中文支持网 » C6678启动的问题
分享到: 更多 (0)