Browse Source

mk20dx256vlh7 working!

- Interrupt vector table position fix (affected everything in the firmware)
- Added fault debug messages
- Fixed usbMuxUart
bringup
Jacob Alexander 9 years ago
parent
commit
03f60df94d

+ 4
- 1
Bootloader/CMakeLists.txt View File

### ###
# Directory Includes # Directory Includes
# #
include_directories( ${CMAKE_SOURCE_DIR}/../Lib )
include_directories (
${CMAKE_SOURCE_DIR}/../Lib
${CMAKE_SOURCE_DIR}
)







+ 1
- 1
Debug/print/print.c View File

{ {
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
} }

+ 55
- 8
Lib/mk20dx.c View File



// ----- 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"


// 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
} }




// 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 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 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")));
// 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
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


// 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++ )

+ 1
- 2
Lib/mk20dx256vlh7.ld View File

{ {
.text : .text :
{ {
. = 0;
KEEP(* (.vectors))
. = 0; KEEP(* (.vectors)) /* MUST BE AT 0 */
*(.startup*) *(.startup*)
. = 0x400; KEEP(* (.flashconfig)) /* MUST BE AT 0x400 */ . = 0x400; KEEP(* (.flashconfig)) /* MUST BE AT 0x400 */
*(.text*) *(.text*)

+ 2
- 2
Output/uartOut/arm/uart_serial.c View File

// Cleanup // Cleanup
available = UART_D; available = UART_D;
UART_CFIFO = UART_CFIFO_RXFLUSH; UART_CFIFO = UART_CFIFO_RXFLUSH;
sei();
return;
goto done;
} }


// Read UART0 into buffer until FIFO is empty // Read UART0 into buffer until FIFO is empty
} }
} }


done:
sei(); // Re-enable Interrupts sei(); // Re-enable Interrupts
} }



+ 15
- 0
Output/usbMuxUart/output_com.c View File

} }




// 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 )
{ {

+ 6
- 4
Output/usbMuxUart/output_com.h View File



// 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




USBKeyChangeState_MainKeys = 0x02, USBKeyChangeState_MainKeys = 0x02,
USBKeyChangeState_SecondaryKeys = 0x04, USBKeyChangeState_SecondaryKeys = 0x04,
USBKeyChangeState_TertiaryKeys = 0x08, 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; } USBKeyChangeState;




// ----- 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 );



+ 1
- 0
main.c View File

#include <led.h> #include <led.h>
#include <print.h> #include <print.h>


extern volatile uint32_t systick_millis_count;




// ----- Functions ----- // ----- Functions -----