- Interrupt vector table position fix (affected everything in the firmware) - Added fault debug messages - Fixed usbMuxUartbringup
@@ -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 | |||
} |
@@ -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 ); | |||
@@ -33,6 +33,7 @@ | |||
#include <led.h> | |||
#include <print.h> | |||
extern volatile uint32_t systick_millis_count; | |||
// ----- Functions ----- |