mbed fix for Infinity
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								=====================
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Without linker script patch it doesn't place vector table in final binary.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								And clock is configured to 48MHz using internal clock reference and FLL multiplication.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Fix SystemInit: clock setup for internal clock. Inifinity has no external Xtal.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/cmsis_nvic.c
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Fix NVIC vector address of firmware 0x1000 instead of 0x0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/MK20D5.ld
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Fix memory map for Infinity bootloader
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Flash starts at 0x1000
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        No flash config bytes sector
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								USBDevice/USBDevice/USBHAL_KL25Z.cpp
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Fix USB clock setup, see below.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								2015/01/04  Based on mbed-sdk @2f63fa7d78a26.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Kinetis USB config
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								==================
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Clock source: Internal reference clock wth FLL
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SIM_SOPT[USBSRC] = 1(MCGPLLCLK/MCGFLLCLK)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SIM_SOPT[PLLSEL] = 0(MCGFLLCLK)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Clock dividor:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SIM_CLKDIV2[USBDIV] = 0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SIM_CLKDIV2[USBFAC] = 0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Clock enable:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    SIM_SCGC4[USBOTG] = 1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Infinity bootloader change
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								==========================
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								After @2c7542e(2015/01) Infinity bootloader doesn't disable watchdog timer and keyboard firmware has to do it itself.  mbed disables watchdog in startup sequence but unfortunately timer is timed out bofore that.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								We have to do that in earlier phase of mbed startup sequence.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mbed starup sequence files:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_M20D5.s
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Infinity booloader change commit:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								https://github.com/kiibohd/controller/commit/2c7542e2e7f0b8a99edf563dc53164fe1a439483
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								discussion:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								https://geekhack.org/index.php?topic=41989.msg1686616#msg1686616
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								WORKAROUND
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								----------
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Call SystemInit early in Reset_Handler.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								$ diff -u ../../mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s mbed-infinity
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								--- ../../mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s      2015-03-22 10:33:22.779866000 +0900
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+++ mbed-infinity/startup_MK20D5.s      2015-03-22 10:32:56.483866000 +0900
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@@ -147,6 +147,8 @@
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *      __etext: End of code section, i.e., begin of data sections to copy from.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *      __data_start__/__data_end__: RAM address range that data should be
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  *      copied to. Both must be aligned to 4 bytes boundary.  */
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+    ldr    r0, =SystemInit
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								+    blx    r0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     ldr    r1, =__etext
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     ldr    r2, =__data_start__
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@@ -161,8 +163,6 @@
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 .Lflash_to_ram_loop_end:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-    ldr    r0, =SystemInit
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-    blx    r0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     ldr    r0, =_start
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     bx    r0
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								     .pool