Arm 在Zynq上使用多核
直到今天我还在单核上编程,现在我需要在多核上运行代码。 我研究了大约一周,对此有一些问题 顺便说一下,我正在使用Zynq 702、Arm DS-5和Dstream。当我使用运行在Core0上的现有代码时,我正在尝试实现这一点Arm 在Zynq上使用多核,arm,multicore,zynq,Arm,Multicore,Zynq,直到今天我还在单核上编程,现在我需要在多核上运行代码。 我研究了大约一周,对此有一些问题 顺便说一下,我正在使用Zynq 702、Arm DS-5和Dstream。当我使用运行在Core0上的现有代码时,我正在尝试实现这一点 我真的没有在core1上做什么,只是连接到它,只是想观察它跳到0xFFFFF0和这个地址的值。我没有设置任何以core1为目标的中断处理程序。我唯一的“观察”情况可以吗?或者我真的需要设置一些配置?如何以最简单的方式实现这一点 我连接到core1并观察其状态,同时我的程
我真的没有在core1上做什么,只是连接到它,只是想观察它跳到0xFFFFF0和这个地址的值。我没有设置任何以core1为目标的中断处理程序。我唯一的“观察”情况可以吗?或者我真的需要设置一些配置?如何以最简单的方式实现这一点
我连接到core1并观察其状态,同时我的程序继续在core0上运行。顺便说一下,core1上没有运行的应用程序。。它上升到地址0x300,在这个地址有一个WFE命令,紧接着是一个B(ranch)命令,它再次分支到0x300。这就像一个循环,我的代码在WFE命令上停留约0.5秒,跳转到下一条指令B并再次分支到WFE 我认为core1应该在执行WFE命令后保持在那里,除非我发送一个事件,而不是执行下面的B(ranch)命令,对吗?如果是这样,这是否意味着core1会定期从某个地方获取evets? 将板与Dstream调试器连接是否会导致事件
如果我设置了地址0xFFFFF0的值,是什么使core1跳转到0xFFFFF0的地址,当core1处于WFE/WFI状态时,一个简单的SEV命令就足够了吗?
如果0xFFFFF0的值为0x00000000,那么会发生什么情况?Core1是否再次返回调用WFE/WFI?或者其他什么?如果core1处于WFE循环(状态),core0上的SEV cmd会唤醒core1。如果输入WFE,则进入待机状态,SEV为唤醒,来自SCU的请求也可以进行唤醒(对于MP系统中的缓存一致性操作) 注: APU复位后,core1处于WFE状态,执行从0xFFFFFE00到0xFFFFF0的代码 启动后,core1处于WFE状态。如果core1获得SEV,它将跳转到存储在0xFFFFF0的地址。如果在SEV之后更新目标地址,则core1将返回WFE状态。这是因为0xFFFFF0具有WFE指令的地址 正确的“启动顺序”是:
;System Manager addr is 0xFFD08000
LDR r0, =0xFFD080C4 ;cpu1startaddr
MOV r1, #0x02000000 ;start addr from linker script
STR r1, [r0]
;Reset Manager add is 0xFFD05000
LDR r0, =0xFFD05010 ;MPU Module Reset Register
MOV r1, #0
STR r1, [r0] ; write 0 to power_on cpu1