mk20dx256vlh7 working!
- Interrupt vector table position fix (affected everything in the firmware) - Added fault debug messages - Fixed usbMuxUart
This commit is contained in:
		
							parent
							
								
									e708a42d80
								
							
						
					
					
						commit
						03f60df94d
					
				
					 8 changed files with 85 additions and 18 deletions
				
			
		|  | @ -91,7 +91,10 @@ endforeach() | |||
| ### | ||||
| # Directory Includes | ||||
| # | ||||
| include_directories( ${CMAKE_SOURCE_DIR}/../Lib ) | ||||
| include_directories ( | ||||
| 	${CMAKE_SOURCE_DIR}/../Lib | ||||
| 	${CMAKE_SOURCE_DIR} | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -64,7 +64,7 @@ void _print( const char* s ) | |||
| 	{ | ||||
| 		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 | ||||
| } | ||||
|  |  | |||
							
								
								
									
										63
									
								
								Lib/mk20dx.c
									
										
									
									
									
								
							
							
						
						
									
										63
									
								
								Lib/mk20dx.c
									
										
									
									
									
								
							|  | @ -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 @@ void ResetHandler(); | |||
| // NVIC - Default ISR
 | ||||
| void fault_isr() | ||||
| { | ||||
| 	print("Fault!"); | ||||
| 	while ( 1 ) | ||||
| 	{ | ||||
| 		// keep polling some communication while in fault
 | ||||
|  | @ -87,12 +96,47 @@ void systick_default_isr() | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| // 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 @@ 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 +547,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 +588,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++ ) | ||||
|  |  | |||
|  | @ -40,8 +40,7 @@ SECTIONS | |||
| { | ||||
| 	.text : | ||||
| 	{ | ||||
| 		. = 0; | ||||
| 		KEEP(* (.vectors)) | ||||
| 		. = 0; KEEP(* (.vectors)) /* MUST BE AT 0 */ | ||||
| 		*(.startup*) | ||||
| 		. = 0x400; KEEP(* (.flashconfig)) /* MUST BE AT 0x400 */ | ||||
| 		*(.text*) | ||||
|  |  | |||
|  | @ -113,8 +113,7 @@ void uart2_status_isr() | |||
| 			// 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 @@ void uart2_status_isr() | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| done: | ||||
| 	sei(); // Re-enable Interrupts
 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -229,6 +229,21 @@ void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t * | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| // 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 ) | ||||
| { | ||||
|  |  | |||
|  | @ -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 @@ typedef enum USBKeyChangeState { | |||
| 	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 @@ extern          uint8_t  Output_DebugMode; // 0 - Debug disabled, 1 - Debug enab | |||
| // ----- 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 ); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										1
									
								
								main.c
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								main.c
									
										
									
									
									
								
							|  | @ -33,6 +33,7 @@ | |||
| #include <led.h> | ||||
| #include <print.h> | ||||
| 
 | ||||
| extern volatile uint32_t systick_millis_count; | ||||
| 
 | ||||
| 
 | ||||
| // ----- Functions -----
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jacob Alexander
						Jacob Alexander