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
@ -91,7 +91,10 @@ endforeach()
|
|||||||
###
|
###
|
||||||
# Directory Includes
|
# 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 );
|
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 );
|
Output_putstr( (char*)s );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
63
Lib/mk20dx.c
63
Lib/mk20dx.c
@ -31,6 +31,14 @@
|
|||||||
|
|
||||||
// ----- Includes -----
|
// ----- Includes -----
|
||||||
|
|
||||||
|
// Debug Includes
|
||||||
|
#if defined(_bootloader_)
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <debug.h>
|
||||||
|
#else
|
||||||
|
#include <print.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// Local Includes
|
// Local Includes
|
||||||
#include "mk20dx.h"
|
#include "mk20dx.h"
|
||||||
|
|
||||||
@ -62,6 +70,7 @@ void ResetHandler();
|
|||||||
// NVIC - Default ISR
|
// NVIC - Default ISR
|
||||||
void fault_isr()
|
void fault_isr()
|
||||||
{
|
{
|
||||||
|
print("Fault!");
|
||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
// keep polling some communication while in fault
|
// 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
|
// NVIC - Default ISR/Vector Linking
|
||||||
void nmi_isr() __attribute__ ((weak, alias("unused_isr")));
|
void nmi_isr() __attribute__ ((weak, alias("nmi_default_isr")));
|
||||||
void hard_fault_isr() __attribute__ ((weak, alias("unused_isr")));
|
void hard_fault_isr() __attribute__ ((weak, alias("hard_fault_default_isr")));
|
||||||
void memmanage_fault_isr() __attribute__ ((weak, alias("unused_isr")));
|
void memmanage_fault_isr() __attribute__ ((weak, alias("memmanage_fault_default_isr")));
|
||||||
void bus_fault_isr() __attribute__ ((weak, alias("unused_isr")));
|
void bus_fault_isr() __attribute__ ((weak, alias("bus_fault_default_isr")));
|
||||||
void usage_fault_isr() __attribute__ ((weak, alias("unused_isr")));
|
void usage_fault_isr() __attribute__ ((weak, alias("usage_fault_default_isr")));
|
||||||
void svcall_isr() __attribute__ ((weak, alias("unused_isr")));
|
void svcall_isr() __attribute__ ((weak, alias("unused_isr")));
|
||||||
void debugmonitor_isr() __attribute__ ((weak, alias("unused_isr")));
|
void debugmonitor_isr() __attribute__ ((weak, alias("unused_isr")));
|
||||||
void pendablesrvreq_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/microcontrollers/doc/app_note/AN4507.pdf
|
||||||
// http://cache.freescale.com/files/32bit/doc/ref_manual/K20P64M72SF1RM.pdf (28.34.6)
|
// 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
|
0xBE, // Flash security byte FSEC
|
||||||
0x03, // Flash nonvolatile option byte FOPT
|
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;
|
SIM_SCGC6 = SIM_SCGC6_FTM0 | SIM_SCGC6_FTM1 | SIM_SCGC6_ADC0 | SIM_SCGC6_FTFL;
|
||||||
#if defined(_mk20dx128_)
|
#if defined(_mk20dx128_)
|
||||||
SIM_SCGC6 |= SIM_SCGC6_RTC;
|
SIM_SCGC6 |= SIM_SCGC6_RTC;
|
||||||
#elif defined(_mk20dx256_)
|
#elif defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
|
||||||
SIM_SCGC3 = SIM_SCGC3_ADC1 | SIM_SCGC3_FTM2;
|
SIM_SCGC3 = SIM_SCGC3_ADC1 | SIM_SCGC3_FTM2;
|
||||||
SIM_SCGC6 |= SIM_SCGC6_RTC;
|
SIM_SCGC6 |= SIM_SCGC6_RTC;
|
||||||
#endif
|
#endif
|
||||||
@ -544,7 +588,10 @@ void ResetHandler()
|
|||||||
|
|
||||||
// Teensy 3.0 and 3.1 and Kiibohd-dfu (mk20dx256vlh7)
|
// Teensy 3.0 and 3.1 and Kiibohd-dfu (mk20dx256vlh7)
|
||||||
#else
|
#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
|
// default all interrupts to medium priority level
|
||||||
for ( unsigned int i = 0; i < NVIC_NUM_INTERRUPTS; i++ )
|
for ( unsigned int i = 0; i < NVIC_NUM_INTERRUPTS; i++ )
|
||||||
|
@ -40,8 +40,7 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
. = 0;
|
. = 0; KEEP(* (.vectors)) /* MUST BE AT 0 */
|
||||||
KEEP(* (.vectors))
|
|
||||||
*(.startup*)
|
*(.startup*)
|
||||||
. = 0x400; KEEP(* (.flashconfig)) /* MUST BE AT 0x400 */
|
. = 0x400; KEEP(* (.flashconfig)) /* MUST BE AT 0x400 */
|
||||||
*(.text*)
|
*(.text*)
|
||||||
|
@ -113,8 +113,7 @@ void uart2_status_isr()
|
|||||||
// Cleanup
|
// Cleanup
|
||||||
available = UART_D;
|
available = UART_D;
|
||||||
UART_CFIFO = UART_CFIFO_RXFLUSH;
|
UART_CFIFO = UART_CFIFO_RXFLUSH;
|
||||||
sei();
|
goto done;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read UART0 into buffer until FIFO is empty
|
// Read UART0 into buffer until FIFO is empty
|
||||||
@ -143,6 +142,7 @@ void uart2_status_isr()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
sei(); // Re-enable Interrupts
|
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
|
// Sends a System Control code to the USB Output buffer
|
||||||
void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args )
|
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
|
// Max size of key buffer needed for NKRO
|
||||||
// Boot mode uses only the first 6 bytes
|
// 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
|
#define USB_BOOT_MAX_KEYS 6
|
||||||
|
|
||||||
|
|
||||||
@ -51,9 +51,10 @@ typedef enum USBKeyChangeState {
|
|||||||
USBKeyChangeState_MainKeys = 0x02,
|
USBKeyChangeState_MainKeys = 0x02,
|
||||||
USBKeyChangeState_SecondaryKeys = 0x04,
|
USBKeyChangeState_SecondaryKeys = 0x04,
|
||||||
USBKeyChangeState_TertiaryKeys = 0x08,
|
USBKeyChangeState_TertiaryKeys = 0x08,
|
||||||
USBKeyChangeState_System = 0x10,
|
USBKeyChangeState_QuartiaryKeys = 0x10,
|
||||||
USBKeyChangeState_Consumer = 0x20,
|
USBKeyChangeState_System = 0x20,
|
||||||
USBKeyChangeState_All = 0x3F,
|
USBKeyChangeState_Consumer = 0x40,
|
||||||
|
USBKeyChangeState_All = 0x7F,
|
||||||
} USBKeyChangeState;
|
} USBKeyChangeState;
|
||||||
|
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ extern uint8_t Output_DebugMode; // 0 - Debug disabled, 1 - Debug enab
|
|||||||
// ----- Capabilities -----
|
// ----- Capabilities -----
|
||||||
|
|
||||||
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
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_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user