1 配置多核amp工程,参考上一篇文章
https://blog.csdn.net/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 的代码入口地址asm("sev");//通过指令唤醒cpu1FMSH_WriteReg(FPS_SLCR_BASEADDR,0x004,0xDF0D767BU);//lock
}
void active_cpu2()
{FMSH_WriteReg(FPS_SLCR_BASEADDR,0x008,0xDF0D767BU);//unlock*(u32*)(0xE0026448)=0x3000000;//写入cpu2 的代码入口地址asm("sev");//通过指令唤醒cpu2FMSH_WriteReg(FPS_SLCR_BASEADDR,0x004,0xDF0D767BU);//lock
}
void active_cpu3()
{FMSH_WriteReg(FPS_SLCR_BASEADDR,0x008,0xDF0D767BU);//unlock*(u32*)(0xE0026450)=0x4000000;//写入cpu3 的代码入口地址asm("sev");//通过指令唤醒cpu3FMSH_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 文件中分配的代码起始地址。