完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好:
我想在C6678 EVM板启动的IBL代码中完成MPAX寄存器的配置,使同一块逻辑地址通过MPAX地址映射到不同的物理地址。但从MPAX的demo上来看: H_Value = 0x90000017 ; if (coreNum == 0) L_Value = 0x8100003f ; if (coreNum == 1) L_Value = 0x8110003f ; if (coreNum == 2) L_Value = 0x8120003f ; if (coreNum == 3) L_Value = 0x8130003f ; if (coreNum == 4) L_Value = 0x8140003f ; if (coreNum == 5) L_Value = 0x8150003f ; if (coreNum == 6) L_Value = 0x8160003f ; if (coreNum == 7) L_Value = 0x8170003f ; 虽然其高32位是一样的,但低32位的值是根据每个core的不同而不同的,就拿MPAX4来说吧,对于每个核同样地址是0x08000028,但其实是不同的物理地址?这句话对不对? 如果需要在IBL代码中完成MPAX寄存器的配置,该怎么办? 谢谢 |
|
相关推荐
8个回答
|
|
这里对于每个core来说看到的虚拟地址是从0x9000 0000开始的16MB,但是在实际的DDR上对于core0实际的物理地址是0x0 8100 0000,对于core1实际的物理地址是0x0 8110 0000,实际是对DDR分了8个16MB的区域,分别映射给每个核
|
|
|
|
cmh9 发表于 2018-6-19 03:01 Adam, 您好!从上面的代码可以看出,用if语句对每个core的MPAX寄存器都进行了配置。 那么我的问题是以上代码是否可以把它加在IBL代码里面?也就是C6678上电后就执行IBL代码,完成八个核的MPAX寄存器的配置? 但我知道,IBL代码只有core0才执行吧?core1~7处于idle状态,所以我的疑惑在这个地方,因为core1~7处于idle状态,所以无法完成core1~7的MPAX寄存器的配置啊? 谢谢 |
|
|
|
fanlu705 发表于 2018-6-19 03:10 MPAX寄存器是每个核私有的寄存器,每个核只能配置自己的MPAX,这样core0就没有办法去配置其他核的这个寄存器。 |
|
|
|
Adam: 您好,C6678上电后8个核都会执行RBL代码吧,执行完成后core1~7处于idle状态,core0接着执行IBL。 那么我如果在RBL代码中完成八个核各自的MPAX寄存器的配置,这样是否可行?如果可行,是否有编译RBL代码的相关资料及烧写方法? 还有个问题哈,非常期待您的解答: 既然您说MPAX寄存器是每个核的私有寄存器,那么为什么我使用软仿真的话,修改core0的MPAX寄存器的值(比如修改地址为0x08000028的 MPAX5),从其余几个核看这个寄存器(0x08000028 MPAX5)也是我修改后的值,按理说只有共享区域才会出现这种情况啊?如果是私有寄存器的话,我只修改了core 0的MPAX5寄存器的值,按理说对其它几个核的MPAX5寄存器的值应该没什么影响吧?这是否和GEL有关? 谢谢! |
|
|
|
fanlu705 发表于 2018-6-19 03:30 我觉得在IBL中修改其他核的MPAX寄存器不大可行,可以在每个自己的代码起来之后自己去修改自己的MPAX寄存器。 软仿真的现象跟实际硬件并不完全一致,MPAX寄存器是每个核自己的私有的寄存器,不可能一个核修改了,另一个核也跟着改变。 |
|
|
|
cmh9 发表于 2018-6-19 03:37 Adam, 您好,那就是说软仿真的现象跟实际硬件不完全一致的原因和gel无关哈? 我的根本目的是要将同一个.out对于每个core放在不同的DDR空间中,而这样需要在.cmd中使用相同的逻辑地址,由此需要配置MPAX寄存器将同一逻辑地址对于每个核映射到不同的物理地址,(就像LL2 SRAM一样,在.cmd中使用相同的地址0x00800000,对于每个核实际load的是不同的地址,如core n,0x1n800000)这就需要在实际代码跑起来之前完成MPAX寄存器的配置。 我想出一种方法不知是否可行,请指教: 在 C:timcsdk_2_01_02_06toolsboot_loaderexamplespcie路径下有几个pcie boot的demo,其中hello world是一个多核启动的例子,我可以参照这个demo,添加8个核配置各自的MPAX寄存器的代码,然后将其编译成一个镜像数组头文件,然后将其copy到linux PC端传递到C6678进行多核启动并完成各自核的MPAX寄存器的配置。配置完成后将magic address清0,等待新的镜像传输过来。新的镜像也就是我实际想要跑的代码了,这样就可以实现在跑实际代码之前完成MPAX寄存器的配置。由于这个时候我已经将MPAX寄存器配置好了,所以将新的镜像传到这个MPAX配置的逻辑地址实际上每个core各自都有一份这样的镜像了,然后每个核就可以在各自的空间跑自己的代码。 这样可以吗? 谢谢您的指点! |
|
|
|
fanlu705 发表于 2018-6-19 03:46 你好, 我看了描述,蛮清楚的,你可以试验一下。 关于你这样做的目的我还没有完全明白,如果你希望使用相同out的话,load到DDR上的一个共享空间就可以了,为什么要load到每个核单独的空间。 谢谢 |
|
|
|
cmh9 发表于 2018-6-19 04:04 Adam, 您好! 因为将同一个.out如果load到同一个共享空间,八个核都在这块空间上跑,我担心会有访问冲突的问题,尤其是各自核的私有变量不能放在同一块共享空间吧,当然如果各自核的私有变量可以考虑load到Local L2 SRAM。 如果我这样做的话让各自核在各自的私有DDR空间里面跑自己的代码,可以避免这种问题,感觉更安全一些。 我考虑过直接放在LL2 SRAM里面,主要是这块空间不够大,只有512KB,而在工程里移植一些算法的话,最后编译出的.out会比较大,LL2 SRAM可能就不够用了,所以考虑使用更大的空间DDR来存放.out。 谢谢您 |
|
|
|
只有小组成员才能发言,加入小组>>
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
404 浏览 0 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
930 浏览 1 评论
537 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
413 浏览 1 评论
969 浏览 0 评论
63浏览 3评论
CC3100BOOST使用CC3200lunchXL进行烧录
912浏览 2评论
156浏览 2评论
198浏览 2评论
176浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 20:48 , Processed in 0.887145 second(s), Total 93, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号