123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- /*==================================================================================================
- * Project : RTD AUTOSAR 4.4
- * Platform : CORTEXM
- * Peripheral :
- * Dependencies : none
- *
- * Autosar Version : 4.4.0
- * Autosar Revision : ASR_REL_4_4_REV_0000
- * Autosar Conf.Variant :
- * SW Version : 1.0.0
- * Build Version : S32K1_RTD_1_0_0_HF01_D2109_ASR_REL_4_4_REV_0000_20210907
- *
- * (c) Copyright 2020-2021 NXP Semiconductors
- * All Rights Reserved.
- *
- * NXP Confidential. This software is owned or controlled by NXP and may only be
- * used strictly in accordance with the applicable license terms. By expressly
- * accepting such terms or by downloading, installing, activating and/or otherwise
- * using the software, you are agreeing that you have read, and that you agree to
- * comply with and are bound by, such license terms. If you do not agree to be
- * bound by the applicable license terms, then you may not retain, install,
- * activate or otherwise use the software.
- ==================================================================================================*/
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "Platform_Types.h"
- #include "Mcal.h"
- #ifdef __ICCARM__
- #pragma default_function_attributes = @ ".systeminit"
- #else
- __attribute__ ((section (".systeminit")))
- #endif
- #ifdef __ICCARM__
- #pragma default_function_attributes = @ ".systeminit"
- #else
- __attribute__ ((section (".systeminit")))
- #endif
- void NMI_Handler(void) __attribute__ ((weak)); /* NMI Handler */
- void HardFault_Handler(void) __attribute__ ((weak)); /* Hard Fault Handler */
- void MemManage_Handler(void) __attribute__ ((weak)); /* Reserved */
- void BusFault_Handler(void) __attribute__ ((weak)); /* Bus Fault Handler */
- void UsageFault_Handler(void) __attribute__ ((weak)); /* Usage Fault Handler */
- void DebugMon_Handler(void) __attribute__ ((weak)); /* Debug Monitor Handler */
- void PendSV_Handler(void) __attribute__ ((weak)); /* PendSV Handler */
- void SysTick_Handler(void) __attribute__ ((weak)); /* SysTick Handler */
- void undefined_handler(void); /* Undefined Handler */
- #ifdef MCAL_ENABLE_USER_MODE_SUPPORT
- void SVCHandler_main(uint32 * svc_args);
- void Suspend_Interrupts(void);
- void Resume_Interrupts(void);
- #endif
- #ifdef MCAL_ENABLE_USER_MODE_SUPPORT
- #ifndef __ICCARM__
- /* Define the SVC handler in assembly, to ensure there is no extra PUSH instruction at the beginning of the C handler.*/
- ASM_KEYWORD(".globl SVC_Handler");
- ASM_KEYWORD(".weak SVC_Handler");
- ASM_KEYWORD("SVC_Handler:");
- /*Load in R0 the stack pointer (depneding on context from which SVC is called)*/
- ASM_KEYWORD("tst lr, #4");
- ASM_KEYWORD("ite eq");
- ASM_KEYWORD("mrseq r0, MSP");
- ASM_KEYWORD("mrsne r0, PSP");
- /* stack pointer is passed to SVCHandler_main, it will be used to extract the parameter given to svc call*/
- ASM_KEYWORD("b SVCHandler_main");
- #else
- void SVC_Handler(void) __attribute__((naked, weak));
- void SVC_Handler(void)
- {
- ASM_KEYWORD("tst lr, #4\n"\
- "ite eq\n" \
- "mrseq r0, MSP\n" \
- "mrsne r0, PSP\n");
- /* stack pointer is passed to SVCHandler_main, it will be used to extract the parameter given to svc call*/
- ASM_KEYWORD("b SVCHandler_main");
- }
- #endif
- #endif
- void NMI_Handler(void)
- {
- while(TRUE){};
- }
- void HardFault_Handler(void)
- {
- while(TRUE){};
- }
- void MemManage_Handler(void)
- {
- while(TRUE){};
- }
- void BusFault_Handler(void)
- {
- while(TRUE){};
- }
- void UsageFault_Handler(void)
- {
- while(TRUE){};
- }
- #ifndef MCAL_ENABLE_USER_MODE_SUPPORT
- void SVC_Handler(void) __attribute__ ((weak)); /* SVCall Handler */
- void SVC_Handler(void)
- {
- while(TRUE){};
- }
- #else
- void SVCHandler_main(uint32 * svc_args)
- {
- uint32 svc_number; /* Stack contains: * r0, r1, r2, r3, r12, r14, the return address and xPSR */
- /* First argument (r0) is svc_args[0] */
- /* svc_args[6] = SP + 0x18 PC(r15) */
- /* ((char *)svc_args[6])[-2]; = first two bytes, lsb, of the instruction which caused the SVC */
- /* this will nto work if optimization compiler options are changed*/
- svc_number = ((uint8 *)svc_args[6])[-2];
- switch(svc_number)
- {
- case 1:
- /* Handle SVC 01*/
- ASM_KEYWORD("mov r0, #0x1"); /* Set User mode for Thread mode */
- ASM_KEYWORD("msr CONTROL, r0");
- break;
- case 0:
- /* Handle SVC 00*/
- ASM_KEYWORD("mov r0, #0x0"); /* Set Supervisor mode for Thread mode */
- ASM_KEYWORD("msr CONTROL, r0");
- break;
- case 2:
- /* Handle SVC 02*/
- Resume_Interrupts();
- break;
- case 3:
- /* Handle SVC 03*/
- Suspend_Interrupts();
- break;
- default:
- /* Unknown SVC*/
- break;
- }
- }
- void Suspend_Interrupts(void)
- {
- ASM_KEYWORD("push {r0}");
- ASM_KEYWORD("mov r0, #0x10");
- ASM_KEYWORD(" msr BASEPRI, r0");
- ASM_KEYWORD("pop {r0}");
- }
- void Resume_Interrupts(void)
- {
- ASM_KEYWORD("push {r0}");
- ASM_KEYWORD("mov r0, #0x0");
- ASM_KEYWORD("msr BASEPRI, r0");
- ASM_KEYWORD("pop {r0}");
- }
- #endif
- void DebugMon_Handler(void)
- {
- while(TRUE){};
- }
- void PendSV_Handler(void)
- {
- while(TRUE){};
- }
- void SysTick_Handler(void)
- {
- while(TRUE){};
- }
- void undefined_handler(void)
- {
- while(TRUE){};
- }
- #ifdef __ICCARM__
- #pragma default_function_attributes =
- #endif
- #ifdef __cplusplus
- }
- #endif
|