复旦微 zynq amp cpu0 唤醒启动cpu1

1 配置多核amp工程,参考上一篇文章

https://blog.youkuaiyun.com/yangchenglin927/article/details/136057534

2 在cpu0的main函数中增加唤醒代码 active_cpu1();

/*
 * helloworld.c: simple test application
 *
 * This application configures UART 16550 to baud rate 9600.
 * PS7 UART (JFM_QL_PS) is not initialized by this application, since
 * bootrom/bsp configures it to baud rate 115200
 *
 * ------------------------------------------------
 * | UART TYPE   BAUD RATE                        |
 * ------------------------------------------------
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bsp)
 */

#include <stdio.h>
#include "platform.h"
#include "fmsh_common.h"
#include "ps_init.h"
#include "fmsh_print.h"
#include "fmsh_ps_parameters.h"


void active_cpu1()
{
  FMSH_WriteReg(FPS_SLCR_BASEADDR,0x008,0xDF0D767BU);//unlock
  //*(u32*)(0xE0026440)=0x2000000;//写入cpu1 的代码入口地址
  *(u32*)(0xE0026440)=0x2004100;//写入cpu1 的resetHandler地址
  asm("sev");//通过指令唤醒cpu1
  FMSH_WriteReg(FPS_SLCR_BASEADDR,0x004,0xDF0D767BU);//lock
}
void active_cpu2()
{
  FMSH_WriteReg(FPS_SLCR_BASEADDR,0x008,0xDF0D767BU);//unlock
  *(u32*)(0xE0026448)=0x3000000;//写入cpu2 的代码入口地址
  asm("sev");//通过指令唤醒cpu2
  FMSH_WriteReg(FPS_SLCR_BASEADDR,0x004,0xDF0D767BU);//lock
}
void active_cpu3()
{
  FMSH_WriteReg(FPS_SLCR_BASEADDR,0x008,0xDF0D767BU);//unlock
  *(u32*)(0xE0026450)=0x4000000;//写入cpu3 的代码入口地址
  asm("sev");//通过指令唤醒cpu3
  FMSH_WriteReg(FPS_SLCR_BASEADDR,0x004,0xDF0D767BU);//lock
}
int main()
{
    init_platform();

    //while(1){
      fmsh_print("Hello World00000\n\r");
      delay_ms(500);
      fmsh_print("Hello World00001\n\r");
      delay_ms(500);
      fmsh_print("Hello World00000\n\r");
      delay_ms(500);
      fmsh_print("Hello World00000\n\r");
      delay_ms(500);
      
    //}
    active_cpu1();
    
    delay_ms(3000);
    
    active_cpu2();

    return 0;
}

3 打包 boot.bin,几个注意事项见下图。

需要被唤醒的 cpu cpu1需要用 bin 文件,手动指定 代码加载地址和代码入口地址,见下图:

设置生成bin文件:

这里注意选择apu 0,这样cpu1就不会主动唤醒了,而是等待被cpu0唤醒。

Startup地址:

代码load地址就是 icf 文件中分配的代码起始地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值