From 319b3a68ee64d8549524b53fba2934e94c07d19e Mon Sep 17 00:00:00 2001 From: Joshua Drake Date: Tue, 23 Apr 2024 01:27:55 -0500 Subject: Added files that were forgotten in previous commits. --- mcc_generated_files/traps.c | 122 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 mcc_generated_files/traps.c (limited to 'mcc_generated_files/traps.c') diff --git a/mcc_generated_files/traps.c b/mcc_generated_files/traps.c new file mode 100644 index 0000000..65b5ccf --- /dev/null +++ b/mcc_generated_files/traps.c @@ -0,0 +1,122 @@ +/** + System Traps Generated Driver File + + @Company: + Microchip Technology Inc. + + @File Name: + traps.h + + @Summary: + This is the generated driver implementation file for handling traps + using PIC24 / dsPIC33 / PIC32MM MCUs + + @Description: + This source file provides implementations for PIC24 / dsPIC33 / PIC32MM MCUs traps. + Generation Information : + Product Revision : PIC24 / dsPIC33 / PIC32MM MCUs - 1.171.4 + Device : PIC24FV16KM202 + The generated drivers are tested against the following: + Compiler : XC16 v2.10 + MPLAB : MPLAB X v6.05 +*/ +/* + (c) 2020 Microchip Technology Inc. and its subsidiaries. You may use this + software and any derivatives exclusively with Microchip products. + + THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER + EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED + WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A + PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION + WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION. + + IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, + INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND + WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS + BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE + FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN + ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, + THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. + + MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE + TERMS. +*/ + +/** + Section: Includes +*/ +#include +#include "traps.h" + +#define ERROR_HANDLER __attribute__((interrupt,no_auto_psv)) +#define FAILSAFE_STACK_GUARDSIZE 8 + +/** + * a private place to store the error code if we run into a severe error + */ +static uint16_t TRAPS_error_code = -1; + +/** + * Halts + * + * @param code error code + */ +void __attribute__((weak)) TRAPS_halt_on_error(uint16_t code) +{ + TRAPS_error_code = code; +#ifdef __DEBUG + __builtin_software_breakpoint(); + /* If we are in debug mode, cause a software breakpoint in the debugger */ +#endif + while(1); + +} + +/** + * Sets the stack pointer to a backup area of memory, in case we run into + * a stack error (in which case we can't really trust the stack pointer) + */ +inline static void use_failsafe_stack(void) +{ + static uint8_t failsafe_stack[32]; + asm volatile ( + " mov %[pstack], W15\n" + : + : [pstack]"r"(failsafe_stack) + ); +/* Controls where the stack pointer limit is, relative to the end of the + * failsafe stack + */ + SPLIM = (uint16_t)(((uint8_t *)failsafe_stack) + sizeof(failsafe_stack) + - FAILSAFE_STACK_GUARDSIZE); +} + +/** Oscillator Fail Trap vector**/ +void ERROR_HANDLER _OscillatorFail(void) +{ + INTCON1bits.OSCFAIL = 0; //Clear the trap flag + TRAPS_halt_on_error(TRAPS_OSC_FAIL); +} +/** Stack Error Trap Vector**/ +void ERROR_HANDLER _StackError(void) +{ + /* We use a failsafe stack: the presence of a stack-pointer error + * means that we cannot trust the stack to operate correctly unless + * we set the stack pointer to a safe place. + */ + use_failsafe_stack(); + INTCON1bits.STKERR = 0; //Clear the trap flag + TRAPS_halt_on_error(TRAPS_STACK_ERR); +} +/** Address Error Trap Vector**/ +void ERROR_HANDLER _AddressError(void) +{ + INTCON1bits.ADDRERR = 0; //Clear the trap flag + TRAPS_halt_on_error(TRAPS_ADDRESS_ERR); +} +/** Math Error Trap Vector**/ +void ERROR_HANDLER _MathError(void) +{ + INTCON1bits.MATHERR = 0; //Clear the trap flag + TRAPS_halt_on_error(TRAPS_MATH_ERR); +} -- cgit v1.2.3