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.
2.2.3 Local Reset
In addition to module reset described in the previous section, the C66x core can be reset using a special
local reset. When local reset is asserted, the internal memories (L1P, L1D, and L2) for the core are still
accessible. The local reset resets only the corresponding C66x core, not the rest of the chip. Local reset is
intended to be used by the watchdog timers to reset the C66x core in the event of an error. The
procedures for asserting and de-asserting local reset are as follows (Y denotes the module domain
number):
1. Set MDCTL[Y].LRSTZ to 0x0 to assert local reset.
2. Set MDCTL[Y].LRSTZ to 0x1 to de-assert local reset. The C66x core immediately executes program
instructions after reset is de-asserted. Note that the boot sequence does not re-occur unless there is a
device-level reset. Execution of code previously in L2 begins execution.
红字的这部分,究竟是解复位阻止了C66x core在复位之后立刻执行指令,还是说C66x core在复位之后,立刻执行指令是被解能了,必须由解复位使能后,才可以允许C66x core执行指令?
问题二,在local reset之后,按照文档,C66x core应该是从L2的最后一个字处获取入口地址,那么如果我在local reset之前将新的入口地址填入,是否能在local reset之后触发C66x core从新的入口地址执行指令?是否我还需要在de-assert之后再向C66 core发送一个IPC中断?
问题三,在核0local reset之后是否会影响pll?pll是否还保持local reset之前的配置?因为我看到《TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Data Manual》Table 7-7 Clock Domains中,pll controller是不参与LPSC的。
我参考了ti\mcsdk_2_01_02_06\tools\boot_loader\examples\pcie\pcieboot_localreset\src\pcieboot_localreset.c
和
ti\mcsdk_2_01_02_06\tools\boot_loader\examples\pcie\linux_host_loader\pciedemo.c
中的代码,前者的方法很巧妙但是无法触发,后者我看到都是需要在assert之后de-assert的,但是没有发ipc中断。
你好,感谢回复,我确实要实现0核的在线更新。
我遇到的整个问题是这样的,要实现从nor flash加载启动多核程序,其中0核上要跑一个带有RTOS的镜像文件,这个应用程序编译出来接近九兆,用bootloader工具打包后接近两兆,烧写上去有50%概率加载不成功,仿真器attach上去发现程序跑飞。但是从nor flash加载几百k的小文件是能够100%加载成功的,所以我就希望先写一个小程序从flash上加载起来,然后参考bootROM源代码手动把包括0核在内的所有核的镜像文件都搬运到内存的对应位置并通过发送ipc中断启动其他核,最后核0在线更新。
目前的疑惑是,标红的部分“Execution of code previously in L2 begins execution.”,似乎是说在local reset之后C66 core是从复位前执行的代码开始执行,而不是从magic address执行,我尝试了在核1启动后local reset核0,结果核0并没有启动,不知道是不是我理解的这个原因。
后来我通过函数指针的方式,直接将程序跳转到核0的镜像文件入口地址执行,大部分时间是成功的,但也偶尔会有失败的情况。
我现在希望尝试您贴的那个帖子的方法,但是需要核0进入idle,再由其他核发送IPC中断,触发核0从magic address启动,我执行了asm(" idle");命令使核0进入idle,但是在核1上向核0发ipc中断却似乎无法唤醒核0,在此之前我也使能了全局中断。不知是为什么无法唤醒,是还需要做什么吗?