完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
4 个讨论
|
|
Bootloader源码已经固化在ROM里了,可以在反汇编窗口里从地址0x20B00000开始查看。bootloader文档里有说明。
The ROM Boot Loader (RBL) is software code that resides in the on-chip read only memory (ROM) to assist the customer in transferring and executing their application code. The start address of the RBL is 0x20B00000 |
|
|
|
|
|
vuywsdfwf 发表于 2018-7-25 07:05 core0~7上电都会执行这个Bootloader程序吗? |
|
|
|
|
|
我没有找到有关core1~core7相关更加详细的信息。 在多核启动中,首先由core0根据sw3~sw6的配置来确定使用什么方式启动。假设使用spi nor flash这种方式,那么bootloader会从flash读取core0的代码到Local L2 SRAM里面,并且开始执行core0的用户代码。core0就开始负责从flash搬运core1~core7的代码到各自的Local L2 SRAM里面,并且设置其它各核的BOOT_MAGIC_ADDRESS,然后发送一个IPC中断启动其它核开始执行。 我又了解到,core1~core7从一开始就默认执行IDLE指令,当它们接收到IPC中断时会跳出这个IDLE指令, 并且读取BOOT_MAGIC_ADDRESS,开始开始执行自己的用户代码。 下面是我从bootloader中看到的启动代码,不知道我的理解对不对? 所以我认为core0~core7上电的时候应该是这样的,所有的核一开始的PC地址指向0x20B00000 (bootloaderde 的启动代码), 并且开始执行bootloader的代码。 bootloader根据各核的dnum来区别core0与其他核, 如果是core0则完成上面所述的启动流程;如果是core1~core7的话, 那么就设置并使能IPC中断,并且进入IDLE指令,等待中断core0的IPC中断,当接收到core0的IPC中断后,读取BOOT_MAGIC_ADDRESS,开始执行BOOT_MAGIC_ADDRESS指向的代码,就是c_init00()。 然后多核启动完成。 /**************************************************************************************** * FUNCTION PURPOSE: Boot for non-zero cores **************************************************************************************** * DESCRIPTION: Secondary cores simply clear their boot address register and idle. * Once woken they branch to the address in their boot address register ****************************************************************************************/#pragma FUNC_NEVER_RETURNS(nysh_sec_core_boot)void nysh_sec_core_boot (void)[ void (*fp)(void); UINT32 i; magicAddr = 0; /* The ROM disabled the cache, but it can become enabled during * the boot process, so flush and invalidate are used */ hwFlushCache (); do [ nysh_sleep (); // core1 ~ core7 设置并使能IPC中断,并且进入IDLE指令,等待中断 hwInvalidateCache ((UINT32) &magicAddr); // 读取BOOT_MAGIC_ADDRESS ] while (magicAddr == 0); fp = (void (*)())magicAddr; i = 0; do [ chipKickUnlock(); DEVICE_REG_BOOT_COMPLETE = (1 << DNUM); /* Boot complete bit */ chipKickLock(); i += 1; ] while ((i < DEVICE_MAX_BC_RETRY) && ((DEVICE_REG_BOOT_COMPLETE & (1 << DNUM)) == 0)); /* */ /* */ (*fp)(); // 开始执行各核的代码, _c_int00();] /* nysh_sec_core_boot */ |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
293 浏览 1 评论
503 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
735 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
632 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1102 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
215浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
173浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
42浏览 13评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
146浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
150浏览 12评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 22:21 , Processed in 0.894578 second(s), Total 50, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号