# HG changeset patch # User Jacob Alexander # Date 1434253332 25200 # Node ID e8841d3c6db5ba46497aaa5e26a79b47902103b4 # Parent 2f415c0b4b28390afdeaaa06e4473aa58ea18655 mk20dx256vlh7 working! - Interrupt vector table position fix (affected everything in the firmware) - Added fault debug messages - Fixed usbMuxUart diff -r 2f415c0b4b28 -r e8841d3c6db5 Bootloader/CMakeLists.txt --- a/Bootloader/CMakeLists.txt Tue Jun 09 10:02:05 2015 -0700 +++ b/Bootloader/CMakeLists.txt Sat Jun 13 20:42:12 2015 -0700 @@ -91,7 +91,10 @@ ### # Directory Includes # -include_directories( ${CMAKE_SOURCE_DIR}/../Lib ) +include_directories ( + ${CMAKE_SOURCE_DIR}/../Lib + ${CMAKE_SOURCE_DIR} +) diff -r 2f415c0b4b28 -r e8841d3c6db5 Debug/print/print.c --- a/Debug/print/print.c Tue Jun 09 10:02:05 2015 -0700 +++ b/Debug/print/print.c Sat Jun 13 20:42:12 2015 -0700 @@ -64,7 +64,7 @@ { Output_putchar( c ); } -#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) // ARM +#elif defined(_mk20dx128_) || defined(_mk20dx128vlf5_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM Output_putstr( (char*)s ); #endif } diff -r 2f415c0b4b28 -r e8841d3c6db5 Lib/mk20dx.c --- a/Lib/mk20dx.c Tue Jun 09 10:02:05 2015 -0700 +++ b/Lib/mk20dx.c Sat Jun 13 20:42:12 2015 -0700 @@ -31,6 +31,14 @@ // ----- Includes ----- +// Debug Includes +#if defined(_bootloader_) +#include +#include +#else +#include +#endif + // Local Includes #include "mk20dx.h" @@ -62,6 +70,7 @@ // NVIC - Default ISR void fault_isr() { + print("Fault!"); while ( 1 ) { // keep polling some communication while in fault @@ -87,12 +96,47 @@ } +// NVIC - Non-Maskable Interrupt ISR +void nmi_default_isr() +{ + print("NMI!"); +} + + +// NVIC - Hard Fault ISR +void hard_fault_default_isr() +{ + print("Hard Fault!"); +} + + +// NVIC - Memory Manager Fault ISR +void memmanage_fault_default_isr() +{ + print("Memory Manager Fault!"); +} + + +// NVIC - Bus Fault ISR +void bus_fault_default_isr() +{ + print("Bus Fault!"); +} + + +// NVIC - Usage Fault ISR +void usage_fault_default_isr() +{ + print("Usage Fault!"); +} + + // 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 +438,7 @@ // 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 +547,7 @@ 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 +588,10 @@ // 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++ ) diff -r 2f415c0b4b28 -r e8841d3c6db5 Lib/mk20dx256vlh7.ld --- a/Lib/mk20dx256vlh7.ld Tue Jun 09 10:02:05 2015 -0700 +++ b/Lib/mk20dx256vlh7.ld Sat Jun 13 20:42:12 2015 -0700 @@ -40,8 +40,7 @@ { .text : { - . = 0; - KEEP(* (.vectors)) + . = 0; KEEP(* (.vectors)) /* MUST BE AT 0 */ *(.startup*) . = 0x400; KEEP(* (.flashconfig)) /* MUST BE AT 0x400 */ *(.text*) diff -r 2f415c0b4b28 -r e8841d3c6db5 Output/uartOut/arm/uart_serial.c --- a/Output/uartOut/arm/uart_serial.c Tue Jun 09 10:02:05 2015 -0700 +++ b/Output/uartOut/arm/uart_serial.c Sat Jun 13 20:42:12 2015 -0700 @@ -113,8 +113,7 @@ // Cleanup available = UART_D; UART_CFIFO = UART_CFIFO_RXFLUSH; - sei(); - return; + goto done; } // Read UART0 into buffer until FIFO is empty @@ -143,6 +142,7 @@ } } +done: sei(); // Re-enable Interrupts } diff -r 2f415c0b4b28 -r e8841d3c6db5 Output/usbMuxUart/output_com.c --- a/Output/usbMuxUart/output_com.c Tue Jun 09 10:02:05 2015 -0700 +++ b/Output/usbMuxUart/output_com.c Sat Jun 13 20:42:12 2015 -0700 @@ -229,6 +229,21 @@ } +// Ignores the given key status update +// Used to prevent fall-through, this is the None keyword in KLL +void Output_noneSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ) +{ + // Display capability name + if ( stateType == 0xFF && state == 0xFF ) + { + print("Output_noneSend()"); + return; + } + + // Nothing to do, because that's the point :P +} + + // Sends a System Control code to the USB Output buffer void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ) { diff -r 2f415c0b4b28 -r e8841d3c6db5 Output/usbMuxUart/output_com.h --- a/Output/usbMuxUart/output_com.h Tue Jun 09 10:02:05 2015 -0700 +++ b/Output/usbMuxUart/output_com.h Sat Jun 13 20:42:12 2015 -0700 @@ -36,7 +36,7 @@ // Max size of key buffer needed for NKRO // Boot mode uses only the first 6 bytes -#define USB_NKRO_BITFIELD_SIZE_KEYS 26 +#define USB_NKRO_BITFIELD_SIZE_KEYS 27 #define USB_BOOT_MAX_KEYS 6 @@ -51,9 +51,10 @@ USBKeyChangeState_MainKeys = 0x02, USBKeyChangeState_SecondaryKeys = 0x04, USBKeyChangeState_TertiaryKeys = 0x08, - USBKeyChangeState_System = 0x10, - USBKeyChangeState_Consumer = 0x20, - USBKeyChangeState_All = 0x3F, + USBKeyChangeState_QuartiaryKeys = 0x10, + USBKeyChangeState_System = 0x20, + USBKeyChangeState_Consumer = 0x40, + USBKeyChangeState_All = 0x7F, } USBKeyChangeState; @@ -87,6 +88,7 @@ // ----- Capabilities ----- void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); +void Output_noneSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); diff -r 2f415c0b4b28 -r e8841d3c6db5 main.c --- a/main.c Tue Jun 09 10:02:05 2015 -0700 +++ b/main.c Sat Jun 13 20:42:12 2015 -0700 @@ -33,6 +33,7 @@ #include #include +extern volatile uint32_t systick_millis_count; // ----- Functions -----