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");//通过指令唤醒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 文件中分配的代码起始地址。