ZYNQ的AMP模式下,重启CPU1后的引导

ZYNQ的AMP模式下,一种可以在线调试的重启CPU1的方法

问题背景

ZYNQ的AMP模式开发中,常常会需要对CPU1进行software Reset ,reset之后的引导是一个比较麻烦的问题。

按照官方手册的介绍,software Reset之后,CPU1会跳到0x00地址处执行。正常工作的情况下,0x00处加载的是FSBL的代码,由BSP中的boot.s来实现CPU ID的识别和代码跳转。当需要XSDK通过JTAG在线调试时,FSBL并不会加载,此时0x00处的代码未知,若对CPU1执行Reset,将无法正确实现跳转。

解决思路

按照XAPP1079的处理方式,在POR复位整个系统时,bootrom会使CPU1进入WFE状态,不断检查0xFFFFFFF0处的值是否为0,若不为0则跳转到该值指示的地址执行。所以此时只需向0xFFFFFFF0写入CPU1的代码起始地址并发送sev即可实现CPU1的重新引导。
遗憾的是,Software Reset会使CPU1直接从0x00处执行,并不会走bootrom进入WFE状态。所以思路是模仿bootrom的这一套流程,在Reset CPU1之前,通过用户代码向0x00等区域写入跳转代码,实现重启后进入WFE状态的功能。

具体办法

//重启CPU1之前执行,为进入WFE做准备
void CPU1_WfePre() {
   
   
    //向0xFFFFFF00起始的地址写入WFE指令
    Xil_Out32(0xFFFFFF00, 0xe3e0000f);
    Xil_Out32(0xFFFFFF04, 0xe3a01000);
    Xil_Out32(0xFFFFFF08, 0xe5801000);
    Xil_Out32(0xFFFFFF0C, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值