You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							84 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
	
	
							84 lines
						
					
					
						
							2.6 KiB
						
					
					
				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
 |