changeset 340:e8841d3c6db5

mk20dx256vlh7 working! - Interrupt vector table position fix (affected everything in the firmware) - Added fault debug messages - Fixed usbMuxUart
author Jacob Alexander <haata@kiibohd.com>
date Sat, 13 Jun 2015 20:42:12 -0700
parents 2f415c0b4b28
children 66eccdd9ced5
files Bootloader/CMakeLists.txt Debug/print/print.c Lib/mk20dx.c Lib/mk20dx256vlh7.ld Output/uartOut/arm/uart_serial.c Output/usbMuxUart/output_com.c Output/usbMuxUart/output_com.h main.c
diffstat 8 files changed, 85 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- 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}
+)
 
 
 
--- 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
 }
--- 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 <inttypes.h>
+#include <debug.h>
+#else
+#include <print.h>
+#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++ )
--- 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*)
--- 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
 }
 
--- 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 )
 {
--- 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 );
 
--- 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 <led.h>
 #include <print.h>
 
+extern volatile uint32_t systick_millis_count;
 
 
 // ----- Functions -----