2022-04-08 14:46:35 +00:00
|
|
|
|
/*!
|
|
|
|
|
* Copyright (c) 2015, Freescale Semiconductor, Inc.
|
|
|
|
|
* Copyright 2016-2018 NXP
|
|
|
|
|
*
|
|
|
|
|
* ile
|
|
|
|
|
*
|
|
|
|
|
* This is the source file for the Panic module.
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*! *********************************************************************************
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
* Include
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
********************************************************************************** */
|
|
|
|
|
#include "fsl_common.h"
|
|
|
|
|
#include "fsl_component_panic.h"
|
|
|
|
|
#if (defined(PANIC_ENABLE_LOG) && (PANIC_ENABLE_LOG > 0U))
|
|
|
|
|
#include "fsl_debug_console.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/*! *********************************************************************************
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
* Private memory declarations
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
********************************************************************************** */
|
|
|
|
|
#if (defined(PANIC_ENABLE_LOG) && (PANIC_ENABLE_LOG > 0U))
|
|
|
|
|
static panic_data_t panic_data;
|
|
|
|
|
#endif
|
|
|
|
|
/*! *********************************************************************************
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
* Private macros
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
********************************************************************************** */
|
|
|
|
|
#if defined(__IAR_SYSTEMS_ICC__)
|
|
|
|
|
/* __get_LR() declaration not included to avoid issues with different versions of IAR compiler */
|
|
|
|
|
#elif defined(__GNUC__)
|
|
|
|
|
#define __get_LR() __builtin_return_address(0)
|
|
|
|
|
#elif defined(__CC_ARM) || defined(__ARMCC_VERSION)
|
|
|
|
|
#if (__ARMCC_VERSION >= 6010050)
|
|
|
|
|
#define __get_LR() __builtin_return_address(0)
|
|
|
|
|
#else
|
|
|
|
|
#define __get_LR() __return_address()
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
/*! *********************************************************************************
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
* Public functions
|
|
|
|
|
*************************************************************************************
|
|
|
|
|
********************************************************************************** */
|
|
|
|
|
|
|
|
|
|
/*! *********************************************************************************
|
|
|
|
|
* \brief This function will halt the system
|
|
|
|
|
*
|
|
|
|
|
* \param[in] id Description of the param2 in parameter
|
|
|
|
|
* \param[in] location address where the Panic occurred
|
|
|
|
|
* \param[in] extra1 parameter to be stored in Panic structure
|
|
|
|
|
* \param[in] extra2 parameter to be stored in Panic structure
|
|
|
|
|
*
|
|
|
|
|
********************************************************************************** */
|
|
|
|
|
|
|
|
|
|
void panic(panic_id_t id, uint32_t location, uint32_t extra1, uint32_t extra2)
|
|
|
|
|
{
|
|
|
|
|
#if (defined(PANIC_ENABLE_LOG) && (PANIC_ENABLE_LOG > 0U))
|
|
|
|
|
panic_data.id = id;
|
|
|
|
|
panic_data.location = location;
|
|
|
|
|
panic_data.extra1 = extra1;
|
|
|
|
|
panic_data.extra2 = extra2;
|
|
|
|
|
panic_data.linkRegister = (uint32_t)((uint32_t *)__get_LR());
|
|
|
|
|
panic_data.cpsr_contents = 0;
|
|
|
|
|
|
2022-08-24 15:30:23 +00:00
|
|
|
|
(void)PRINTF("System Panic happen:\r\n");
|
|
|
|
|
(void)PRINTF("Panic id: 0x%x\r\n", id);
|
|
|
|
|
(void)PRINTF("Panic location: 0x%x\r\n", location);
|
|
|
|
|
(void)PRINTF("Panic extra1: 0x%x\r\n", extra1);
|
|
|
|
|
(void)PRINTF("Panic extra2: 0x%x\r\n", extra2);
|
|
|
|
|
(void)PRINTF("Panic linkRegister: 0x%x\r\n", panic_data.linkRegister);
|
2022-04-08 14:46:35 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
(void)DisableGlobalIRQ(); /* disable interrupts */
|
|
|
|
|
|
|
|
|
|
/* infinite loop just to ensure this routine never returns */
|
|
|
|
|
for (;;)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|