mpsoc系列的复位与zynq 7000系列不太一样,7000是通过slcr寄存器来实现软件复位,MPSOC是通过CRL_APB
实际复位代码如下
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xil_io.h"
#define MPSOC_RESET_REASON_REG 0xFF5E0220 //16bit
#define MPSOC_RESET_CTRL_REG 0xFF5E0218 //寄存器RESET_CTRL
#define MPSOC_RESET_VALUE 0x10 //复位bit4 (Width=8)
void PsSoftwareReset(void)
{
Xil_Out8(MPSOC_RESET_CTRL_REG, MPSOC_RESET_VALUE); //复位
}
void getResetReason(void)
{
int status;
status = Xil_In16(MPSOC_RESET_REASON_REG);
xil_printf("\n\rResetReason = 0x%.8X\n\r", status);
if(status & 0x40)
xil_printf("6 Software Debugger Reset\n\r");
if(status & 0x20)
xil_printf("5 Software System Reset\n\r");
if(status & 0x10)
xil_printf("4 External System Reset\n\r");
if(status & 0x08)
xil_printf("3 PS-only Reset\n\r");
if(status & 0x04)
xil_printf("2 Internal System Reset\n\r");
if(status & 0x02)
xil_printf("1 A sys

本文详细介绍了MPSOC系列中复位机制的独特之处,通过CRL_APB寄存器实现软件复位的过程,并展示了如何使用示例代码操作。着重讲解了getResetReason函数的作用,以及在不同复位情况下的识别。
最低0.47元/天 解锁文章
715

被折叠的 条评论
为什么被折叠?



