X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Lib%2Fmk20dx.c;h=ec6908c7ae0d043b7cc759027e1d81d81114851c;hb=20b62afb9a05a64b1f15c6329866600913775eea;hp=1fa3e1510719b8a7c5740bc12ef08c8a8f129ab1;hpb=26b0a7e10de3626916b99a70321e05b317db38b8;p=kiibohd-controller.git diff --git a/Lib/mk20dx.c b/Lib/mk20dx.c index 1fa3e15..ec6908c 100644 --- a/Lib/mk20dx.c +++ b/Lib/mk20dx.c @@ -31,6 +31,14 @@ // ----- Includes ----- +// Debug Includes +#if defined(_bootloader_) +#include +#include +#else +#include +#endif + // Local Includes #include "mk20dx.h" @@ -62,6 +70,7 @@ void ResetHandler(); // NVIC - Default ISR void fault_isr() { + print("Fault!" NL ); while ( 1 ) { // keep polling some communication while in fault @@ -87,12 +96,60 @@ void systick_default_isr() } +// NVIC - Non-Maskable Interrupt ISR +void nmi_default_isr() +{ + print("NMI!" NL ); +} + + +// NVIC - Hard Fault ISR +void hard_fault_default_isr() +{ + print("Hard Fault! SCB_HFSR: "); + printHex32( SCB_HFSR ); + print( NL ); + SOFTWARE_RESET(); +} + + +// NVIC - Memory Manager Fault ISR +void memmanage_fault_default_isr() +{ + print("Memory Manager Fault! SCB_CFSR: "); + printHex32( SCB_CFSR ); + print(" SCB_MMAR: "); + printHex32( SCB_MMAR ); + print( NL ); +} + + +// NVIC - Bus Fault ISR +void bus_fault_default_isr() +{ + print("Bus Fault! SCB_CFSR: "); + printHex32( SCB_CFSR ); + print(" SCB_BFAR: "); + printHex32( SCB_BFAR ); + print( NL ); +} + + +// NVIC - Usage Fault ISR +void usage_fault_default_isr() +{ + print("Usage Fault! SCB_CFSR: "); + printHex32( SCB_CFSR ); + print( NL ); +} + + // NVIC - Default ISR/Vector Linking -void nmi_isr() __attribute__ ((weak, alias("unused_isr"))); -void hard_fault_isr() __attribute__ ((weak, alias("unused_isr"))); -void memmanage_fault_isr() __attribute__ ((weak, alias("unused_isr"))); -void bus_fault_isr() __attribute__ ((weak, alias("unused_isr"))); -void usage_fault_isr() __attribute__ ((weak, alias("unused_isr"))); +void nmi_isr() __attribute__ ((weak, alias("nmi_default_isr"))); +void hard_fault_isr() __attribute__ ((weak, alias("hard_fault_default_isr"))); +void memmanage_fault_isr() __attribute__ ((weak, alias("memmanage_fault_default_isr"))); +void bus_fault_isr() __attribute__ ((weak, alias("bus_fault_default_isr"))); +void usage_fault_isr() __attribute__ ((weak, alias("usage_fault_default_isr"))); void svcall_isr() __attribute__ ((weak, alias("unused_isr"))); void debugmonitor_isr() __attribute__ ((weak, alias("unused_isr"))); void pendablesrvreq_isr() __attribute__ ((weak, alias("unused_isr"))); @@ -394,7 +451,7 @@ const uint8_t flashconfigbytes[16] = { // http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4507.pdf // http://cache.freescale.com/files/32bit/doc/ref_manual/K20P64M72SF1RM.pdf (28.34.6) // - 0xFF, 0xFF, 0xFF, 0xFF, // Program Flash Protection Bytes FPROT0-3 // XXX TODO PROTECT + 0xFF, 0xFF, 0xFF, 0xFE, // Program Flash Protection Bytes FPROT0-3 0xBE, // Flash security byte FSEC 0x03, // Flash nonvolatile option byte FOPT @@ -503,7 +560,7 @@ void ResetHandler() SIM_SCGC6 = SIM_SCGC6_FTM0 | SIM_SCGC6_FTM1 | SIM_SCGC6_ADC0 | SIM_SCGC6_FTFL; #if defined(_mk20dx128_) SIM_SCGC6 |= SIM_SCGC6_RTC; -#elif defined(_mk20dx256_) +#elif defined(_mk20dx256_) || defined(_mk20dx256vlh7_) SIM_SCGC3 = SIM_SCGC3_ADC1 | SIM_SCGC3_FTM2; SIM_SCGC6 |= SIM_SCGC6_RTC; #endif @@ -544,7 +601,10 @@ void ResetHandler() // Teensy 3.0 and 3.1 and Kiibohd-dfu (mk20dx256vlh7) #else - SCB_VTOR = 0; // use vector table in flash +#if defined(_mk20dx128_) || defined(_mk20dx256_) + // use vector table in flash + SCB_VTOR = 0; +#endif // default all interrupts to medium priority level for ( unsigned int i = 0; i < NVIC_NUM_INTERRUPTS; i++ )