// ----- Includes -----
+// Debug Includes
+#if defined(_bootloader_)
+#include <inttypes.h>
+#include <debug.h>
+#else
+#include <print.h>
+#endif
+
// Local Includes
#include "mk20dx.h"
// NVIC - Default ISR
void fault_isr()
{
+ print("Fault!");
while ( 1 )
{
// keep polling some communication while in fault
}
+// 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")));
// 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
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
// 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++ )
}
+// 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 )
{
// 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
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;
// ----- 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 );