From ec8d487264ac58ebaa00cf99675528e85c6113d0 Mon Sep 17 00:00:00 2001
From: WXK <287788329@qq.com>
Date: 星期三, 13 八月 2025 09:56:46 +0800
Subject: [PATCH] boot开发完成

---
 dualboots_Gai_youhua/keil/customboot/Objects/customboot.htm |  852 +++++++++++++++++++++++---------------------------------
 1 files changed, 357 insertions(+), 495 deletions(-)

diff --git a/dualboots_Gai_youhua/keil/customboot/Objects/customboot.htm b/dualboots_Gai_youhua/keil/customboot/Objects/customboot.htm
index 957da6e..82f53d6 100644
--- a/dualboots_Gai_youhua/keil/customboot/Objects/customboot.htm
+++ b/dualboots_Gai_youhua/keil/customboot/Objects/customboot.htm
@@ -3,11 +3,11 @@
 <title>Static Call Graph - [.\Objects\customboot.axf]</title></head>
 <body><HR>
 <H1>Static Call Graph for image .\Objects\customboot.axf</H1><HR>
-<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 6140002: Last Updated: Fri Nov  1 16:14:49 2024
+<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 6140002: Last Updated: Tue Aug 12 11:01:03 2025
 <BR><P>
-<H3>Maximum Stack Usage =        352 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
+<H3>Maximum Stack Usage =        168 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
 Call chain for Maximum Stack Depth:</H3>
-main &rArr; Main_Menu &rArr; SerialDownload &rArr; Ymodem_Receive &rArr; flash_write_nbytes &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
+main &rArr; flash_read &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
 <P>
 <H3>
 Mutually Recursive functions
@@ -54,11 +54,8 @@
  <LI><a href="#[22]">WAKEUP_IRQHandler</a> from startup_mk800x.o(.text.Default_Handler) referenced from startup_mk800x.o(RESET)
  <LI><a href="#[13]">WDT_IRQHandler</a> from mk_wdt.o(.text.WDT_IRQHandler) referenced from startup_mk800x.o(RESET)
  <LI><a href="#[27]">__main</a> from entry.o(.ARM.Collect$$$$00000000) referenced from startup_mk800x.o(.text.start_main_asm)
- <LI><a href="#[25]">flash_dma_callback</a> from mk_flash.o(.text.flash_dma_callback) referenced from mk_flash.o(.text.flash_dma_callback)
- <LI><a href="#[25]">flash_dma_callback</a> from mk_flash.o(.text.flash_dma_callback) referenced from mk_flash.o(.text.flash_read)
- <LI><a href="#[25]">flash_dma_callback</a> from mk_flash.o(.text.flash_dma_callback) referenced from mk_flash.o(.text.flash_write)
- <LI><a href="#[26]">flash_dma_write_nbytes_callback</a> from mk_flash.o(.text.flash_dma_write_nbytes_callback) referenced from mk_flash.o(.text.flash_dma_write_nbytes_callback)
- <LI><a href="#[26]">flash_dma_write_nbytes_callback</a> from mk_flash.o(.text.flash_dma_write_nbytes_callback) referenced from mk_flash.o(.text.flash_write_nbytes)
+ <LI><a href="#[25]">clock_attach</a> from mk_clock.o(.text.clock_attach) referenced from board.o(.text.board_clock_run)
+ <LI><a href="#[26]">flash_dma_callback</a> from mk_flash.o(.text.flash_dma_callback) referenced from mk_flash.o(.text.flash_read)
  <LI><a href="#[24]">main</a> from customboot.o(.text.main) referenced from entry9a.o(.ARM.Collect$$$$0000000B)
  <LI><a href="#[28]">uart_dma_callback</a> from mk_uart.o(.text.uart_dma_callback) referenced from mk_uart.o(.text.uart_send)
 </UL>
@@ -69,70 +66,81 @@
 <P><STRONG><a name="[27]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(.text.start_main_asm)
 </UL>
-<P><STRONG><a name="[6b]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry4.o(.ARM.Collect$$$$00000003))
+<P><STRONG><a name="[63]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry4.o(.ARM.Collect$$$$00000003))
 
 <P><STRONG><a name="[29]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
 <BR><BR>[Calls]<UL><LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
 </UL>
 
-<P><STRONG><a name="[2b]"></a>__main_after_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
+<P><STRONG><a name="[2e]"></a>__main_after_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
 <BR><BR>[Called By]<UL><LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
 </UL>
 
-<P><STRONG><a name="[6c]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
+<P><STRONG><a name="[64]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
 
-<P><STRONG><a name="[6d]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
+<P><STRONG><a name="[65]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
 
-<P><STRONG><a name="[6e]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
+<P><STRONG><a name="[66]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
 
-<P><STRONG><a name="[6f]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
+<P><STRONG><a name="[67]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
 
-<P><STRONG><a name="[70]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
+<P><STRONG><a name="[68]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
 
-<P><STRONG><a name="[2f]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text))
+<P><STRONG><a name="[56]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text))
 <BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidiv
 </UL>
-<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_sector_erase
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_block_erase
-<LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Int2Str
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_quad_mode
 </UL>
 
-<P><STRONG><a name="[30]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
-<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
-</UL>
-<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-<LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Int2Str
+<P><STRONG><a name="[69]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
+
+<P><STRONG><a name="[51]"></a>__aeabi_memcpy</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
 </UL>
 
-<P><STRONG><a name="[43]"></a>__aeabi_memcpy</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text))
-<BR><BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-</UL>
+<P><STRONG><a name="[6a]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
 
-<P><STRONG><a name="[71]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
-
-<P><STRONG><a name="[2d]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text))
+<P><STRONG><a name="[5d]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text))
 <BR><BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Main_Menu
-<LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IAP_JumpTo
+</UL>
+
+<P><STRONG><a name="[2c]"></a>__aeabi_memset</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_memset$wrapper
+<LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
+</UL>
+
+<P><STRONG><a name="[6b]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+
+<P><STRONG><a name="[6c]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+
+<P><STRONG><a name="[2b]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
+</UL>
+
+<P><STRONG><a name="[62]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
+</UL>
+
+<P><STRONG><a name="[6d]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+
+<P><STRONG><a name="[2d]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
 </UL>
 
 <P><STRONG><a name="[2a]"></a>__scatterload</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text))
-<BR><BR>[Calls]<UL><LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main_after_scatterload
+<BR><BR>[Calls]<UL><LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main_after_scatterload
 </UL>
 <BR>[Called By]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
 </UL>
 
-<P><STRONG><a name="[72]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
+<P><STRONG><a name="[6e]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
 
-<P><STRONG><a name="[73]"></a>__decompress</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __dczerorl.o(.text), UNUSED)
+<P><STRONG><a name="[6f]"></a>__decompress</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, __dczerorl.o(.text), UNUSED)
 
-<P><STRONG><a name="[74]"></a>__decompress0</STRONG> (Thumb, 58 bytes, Stack size unknown bytes, __dczerorl.o(.text), UNUSED)
+<P><STRONG><a name="[70]"></a>__decompress0</STRONG> (Thumb, 58 bytes, Stack size unknown bytes, __dczerorl.o(.text), UNUSED)
 
 <P><STRONG><a name="[6]"></a>BOD_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, mk_misc.o(.text.BOD_IRQHandler))
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
@@ -140,13 +148,7 @@
 <P><STRONG><a name="[20]"></a>CALIB_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, mk_calib.o(.text.CALIB_IRQHandler))
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[42]"></a>Cal_CRC16</STRONG> (Thumb, 308 bytes, Stack size 24 bytes, ymodem.o(.text.Cal_CRC16))
-<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = Cal_CRC16
-</UL>
-<BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-</UL>
-
-<P><STRONG><a name="[c]"></a>DMA_IRQHandler</STRONG> (Thumb, 112 bytes, Stack size 24 bytes, mk_dma.o(.text.DMA_IRQHandler))
+<P><STRONG><a name="[c]"></a>DMA_IRQHandler</STRONG> (Thumb, 104 bytes, Stack size 24 bytes, mk_dma.o(.text.DMA_IRQHandler))
 <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = DMA_IRQHandler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
@@ -167,7 +169,7 @@
 <P><STRONG><a name="[e]"></a>AES_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, startup_mk800x.o(.text.Default_Handler))
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[75]"></a>Default_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, startup_mk800x.o(.text.Default_Handler), UNUSED)
+<P><STRONG><a name="[71]"></a>Default_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, startup_mk800x.o(.text.Default_Handler), UNUSED)
 
 <P><STRONG><a name="[2]"></a>HardFault_Handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, startup_mk800x.o(.text.Default_Handler))
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
@@ -231,63 +233,14 @@
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[d]"></a>GPIO_IRQHandler</STRONG> (Thumb, 380 bytes, Stack size 24 bytes, mk_gpio.o(.text.GPIO_IRQHandler))
+<P><STRONG><a name="[d]"></a>GPIO_IRQHandler</STRONG> (Thumb, 56 bytes, Stack size 24 bytes, mk_gpio.o(.text.GPIO_IRQHandler))
 <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = GPIO_IRQHandler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[2c]"></a>IAP_JumpTo</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, menu.o(.text.IAP_JumpTo))
-<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = IAP_JumpTo
-</UL>
-<BR>[Calls]<UL><LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy8
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-</UL>
-
-<P><STRONG><a name="[2e]"></a>Int2Str</STRONG> (Thumb, 464 bytes, Stack size 40 bytes, menu.o(.text.Int2Str))
-<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = Int2Str &rArr; __aeabi_uidivmod
-</UL>
-<BR>[Calls]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
-</UL>
-<BR>[Called By]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialDownload
-</UL>
-
-<P><STRONG><a name="[31]"></a>InvCipher</STRONG> (Thumb, 640 bytes, Stack size 56 bytes, aes.o(.text.InvCipher))
-<BR><BR>[Stack]<UL><LI>Max Depth = 116<LI>Call Chain = InvCipher &rArr; InvMixColumn
-</UL>
-<BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;InvMixColumn
-</UL>
-<BR>[Called By]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecrypt
-</UL>
-
-<P><STRONG><a name="[32]"></a>InvMixColumn</STRONG> (Thumb, 256 bytes, Stack size 60 bytes, aes.o(.text.InvMixColumn))
-<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = InvMixColumn
-</UL>
-<BR>[Called By]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;InvCipher
-</UL>
-
-<P><STRONG><a name="[46]"></a>KeyExpansion</STRONG> (Thumb, 356 bytes, Stack size 60 bytes, aes.o(.text.KeyExpansion))
-<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = KeyExpansion
-</UL>
-<BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecInit
-</UL>
-
-<P><STRONG><a name="[33]"></a>Main_Menu</STRONG> (Thumb, 128 bytes, Stack size 24 bytes, menu.o(.text.Main_Menu))
-<BR><BR>[Stack]<UL><LI>Max Depth = 304<LI>Call Chain = Main_Menu &rArr; SerialDownload &rArr; Ymodem_Receive &rArr; flash_write_nbytes &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
-<LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy8
-<LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialDownload
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-</UL>
-
 <P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 32 bytes, Stack size 0 bytes, startup_mk800x.o(.text.Reset_Handler))
-<BR><BR>[Calls]<UL><LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;start_main_asm
-<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit
+<BR><BR>[Calls]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;start_main_asm
+<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SystemInit
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
@@ -296,51 +249,20 @@
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[3a]"></a>Send_Byte</STRONG> (Thumb, 10 bytes, Stack size 8 bytes, ymodem.o(.text.Send_Byte))
-<BR><BR>[Stack]<UL><LI>Max Depth = 136<LI>Call Chain = Send_Byte &rArr; SerialPutChar &rArr; uart_send &rArr; dma_transfer
+<P><STRONG><a name="[31]"></a>SerialPutChar</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, mk_uart.o(.text.SerialPutChar))
+<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = SerialPutChar &rArr; uart_send &rArr; dma_transfer
 </UL>
-<BR>[Calls]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialPutChar
+<BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
 </UL>
-<BR>[Called By]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialDownload
+<BR>[Called By]<UL><LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_PutString
 </UL>
 
-<P><STRONG><a name="[34]"></a>SerialDownload</STRONG> (Thumb, 168 bytes, Stack size 32 bytes, menu.o(.text.SerialDownload))
-<BR><BR>[Stack]<UL><LI>Max Depth = 280<LI>Call Chain = SerialDownload &rArr; Ymodem_Receive &rArr; flash_write_nbytes &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[33]"></a>Serial_PutString</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_uart.o(.text.Serial_PutString))
+<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = Serial_PutString &rArr; SerialPutChar &rArr; uart_send &rArr; dma_transfer
 </UL>
-<BR>[Calls]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_PutString
-<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Send_Byte
-<LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Int2Str
-</UL>
-<BR>[Called By]<UL><LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Main_Menu
-</UL>
-
-<P><STRONG><a name="[41]"></a>SerialKeyPressed</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, mk_uart.o(.text.SerialKeyPressed))
-<BR><BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-</UL>
-
-<P><STRONG><a name="[3b]"></a>SerialPutChar</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, mk_uart.o(.text.SerialPutChar))
-<BR><BR>[Stack]<UL><LI>Max Depth = 128<LI>Call Chain = SerialPutChar &rArr; uart_send &rArr; dma_transfer
-</UL>
-<BR>[Calls]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
-</UL>
-<BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Send_Byte
-</UL>
-
-<P><STRONG><a name="[3d]"></a>Serial_PutString</STRONG> (Thumb, 56 bytes, Stack size 24 bytes, mk_uart.o(.text.Serial_PutString))
-<BR><BR>[Stack]<UL><LI>Max Depth = 136<LI>Call Chain = Serial_PutString &rArr; uart_send &rArr; dma_transfer
-</UL>
-<BR>[Calls]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
+<BR>[Calls]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialPutChar
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-<LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialDownload
-</UL>
-
-<P><STRONG><a name="[45]"></a>Str2Int</STRONG> (Thumb, 1330 bytes, Stack size 20 bytes, ymodem.o(.text.Str2Int))
-<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = Str2Int
-</UL>
-<BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
 </UL>
 
 <P><STRONG><a name="[5]"></a>SysTick_Handler</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, mk_misc.o(.text.SysTick_Handler))
@@ -348,519 +270,459 @@
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[38]"></a>SystemInit</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, system_mk800x.o(.text.SystemInit))
+<P><STRONG><a name="[2f]"></a>SystemInit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, system_mk800x.o(.text.SystemInit))
 <BR><BR>[Called By]<UL><LI><a href="#[0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Reset_Handler
 </UL>
 
-<P><STRONG><a name="[19]"></a>TIMER2_IRQHandler</STRONG> (Thumb, 32 bytes, Stack size 16 bytes, mk_dual_timer.o(.text.TIMER2_IRQHandler))
+<P><STRONG><a name="[19]"></a>TIMER2_IRQHandler</STRONG> (Thumb, 28 bytes, Stack size 16 bytes, mk_dual_timer.o(.text.TIMER2_IRQHandler))
 <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = TIMER2_IRQHandler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[1a]"></a>TIMER3_IRQHandler</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, mk_dual_timer.o(.text.TIMER3_IRQHandler))
+<P><STRONG><a name="[1a]"></a>TIMER3_IRQHandler</STRONG> (Thumb, 32 bytes, Stack size 16 bytes, mk_dual_timer.o(.text.TIMER3_IRQHandler))
 <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = TIMER3_IRQHandler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
 <P><STRONG><a name="[1e]"></a>UART0_IRQHandler</STRONG> (Thumb, 10 bytes, Stack size 8 bytes, mk_uart.o(.text.UART0_IRQHandler))
-<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = UART0_IRQHandler &rArr; uart_irq_handler
+<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = UART0_IRQHandler &rArr; uart_irq_handler &rArr; uart_state_clear
 </UL>
-<BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_irq_handler
+<BR>[Calls]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_irq_handler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
 <P><STRONG><a name="[1f]"></a>UART1_IRQHandler</STRONG> (Thumb, 10 bytes, Stack size 8 bytes, mk_uart.o(.text.UART1_IRQHandler))
-<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = UART1_IRQHandler &rArr; uart_irq_handler
+<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = UART1_IRQHandler &rArr; uart_irq_handler &rArr; uart_state_clear
 </UL>
-<BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_irq_handler
+<BR>[Calls]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_irq_handler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[13]"></a>WDT_IRQHandler</STRONG> (Thumb, 32 bytes, Stack size 16 bytes, mk_wdt.o(.text.WDT_IRQHandler))
+<P><STRONG><a name="[13]"></a>WDT_IRQHandler</STRONG> (Thumb, 28 bytes, Stack size 16 bytes, mk_wdt.o(.text.WDT_IRQHandler))
 <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = WDT_IRQHandler
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> startup_mk800x.o(RESET)
 </UL>
-<P><STRONG><a name="[3c]"></a>Ymodem_Receive</STRONG> (Thumb, 812 bytes, Stack size 32 bytes, ymodem.o(.text.Ymodem_Receive))
-<BR><BR>[Stack]<UL><LI>Max Depth = 248<LI>Call Chain = Ymodem_Receive &rArr; flash_write_nbytes &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[35]"></a>board_clock_run</STRONG> (Thumb, 100 bytes, Stack size 24 bytes, board.o(.text.board_clock_run))
+<BR><BR>[Stack]<UL><LI>Max Depth = 88<LI>Call Chain = board_clock_run &rArr; sys_timer_open &rArr; clock_get_frequency &rArr; clock_get_apb_clk_freq &rArr; clock_get_ahb_clk_freq
 </UL>
-<BR>[Calls]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecrypt
-<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecInit
-<LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialPutChar
-<LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialKeyPressed
-<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-<LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
-<LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Str2Int
-<LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Cal_CRC16
-</UL>
-<BR>[Called By]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialDownload
-</UL>
-
-<P><STRONG><a name="[40]"></a>aesDecInit</STRONG> (Thumb, 196 bytes, Stack size 24 bytes, aes.o(.text.aesDecInit))
-<BR><BR>[Stack]<UL><LI>Max Depth = 84<LI>Call Chain = aesDecInit &rArr; KeyExpansion
-</UL>
-<BR>[Calls]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;KeyExpansion
-</UL>
-<BR>[Called By]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecrypt
-<LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-</UL>
-
-<P><STRONG><a name="[44]"></a>aesDecrypt</STRONG> (Thumb, 308 bytes, Stack size 40 bytes, aes.o(.text.aesDecrypt))
-<BR><BR>[Stack]<UL><LI>Max Depth = 156<LI>Call Chain = aesDecrypt &rArr; InvCipher &rArr; InvMixColumn
-</UL>
-<BR>[Calls]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecInit
-<LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;InvCipher
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-</UL>
-
-<P><STRONG><a name="[47]"></a>board_clock_run</STRONG> (Thumb, 104 bytes, Stack size 16 bytes, board.o(.text.board_clock_run))
-<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = board_clock_run &rArr; sys_timer_open &rArr; dual_timer_open
-</UL>
-<BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_set_divider
-<LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_attach
-<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
-<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_start
-<LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_open
-<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_close
-<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_check
-<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
-<LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_tick_start
+<BR>[Calls]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_set_divider
+<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
+<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_start
+<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_open
+<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_close
+<LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_check
+<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
+<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_tick_start
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[66]"></a>board_configure</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, board.o(.text.board_configure))
+<P><STRONG><a name="[5b]"></a>board_configure</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, board.o(.text.board_configure))
 <BR><BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[50]"></a>board_pins_config</STRONG> (Thumb, 38 bytes, Stack size 8 bytes, pin_config.o(.text.board_pins_config))
-<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = board_pins_config
-</UL>
-<BR>[Calls]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;io_pin_mux_set
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+<P><STRONG><a name="[39]"></a>calib_check</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_calib.o(.text.calib_check))
+<BR><BR>[Called By]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[4b]"></a>calib_check</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_calib.o(.text.calib_check))
-<BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
-</UL>
-
-<P><STRONG><a name="[52]"></a>calib_chip</STRONG> (Thumb, 296 bytes, Stack size 16 bytes, mk_calib.o(.text.calib_chip))
+<P><STRONG><a name="[3e]"></a>calib_chip</STRONG> (Thumb, 296 bytes, Stack size 16 bytes, mk_calib.o(.text.calib_chip))
 <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = calib_chip
 </UL>
-<BR>[Calls]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
-<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mk_chip_id
+<BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
+<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;mk_chip_id
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[4c]"></a>calib_close</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, mk_calib.o(.text.calib_close))
+<P><STRONG><a name="[3a]"></a>calib_close</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, mk_calib.o(.text.calib_close))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = calib_close
 </UL>
-<BR>[Calls]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_disable
+<BR>[Calls]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_disable
 </UL>
-<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<BR>[Called By]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[49]"></a>calib_open</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_calib.o(.text.calib_open))
+<P><STRONG><a name="[37]"></a>calib_open</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_calib.o(.text.calib_open))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = calib_open
 </UL>
-<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
+<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
+<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
 </UL>
-<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<BR>[Called By]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[4a]"></a>calib_start</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_calib.o(.text.calib_start))
-<BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<P><STRONG><a name="[38]"></a>calib_start</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_calib.o(.text.calib_start))
+<BR><BR>[Called By]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[48]"></a>clock_attach</STRONG> (Thumb, 240 bytes, Stack size 8 bytes, mk_clock.o(.text.clock_attach))
-<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = clock_attach
+<P><STRONG><a name="[25]"></a>clock_attach</STRONG> (Thumb, 188 bytes, Stack size 16 bytes, mk_clock.o(.text.clock_attach))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = clock_attach
 </UL>
-<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<BR>[Calls]<UL><LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_xtal38m4_injection_set
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> board.o(.text.board_clock_run)
+</UL>
+<P><STRONG><a name="[41]"></a>clock_disable</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_disable))
+<BR><BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_close
+<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_close
+<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_close
 </UL>
 
-<P><STRONG><a name="[55]"></a>clock_disable</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_disable))
-<BR><BR>[Called By]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wdt_close
-<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_close
+<P><STRONG><a name="[3f]"></a>clock_enable</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_enable))
+<BR><BR>[Called By]<UL><LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_open
+<LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_chip
+<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_open
+<LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_open
 </UL>
 
-<P><STRONG><a name="[53]"></a>clock_enable</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_enable))
-<BR><BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
-<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_open
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_open
-<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_chip
-<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_open
-<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_open
+<P><STRONG><a name="[47]"></a>clock_get_frequency</STRONG> (Thumb, 82 bytes, Stack size 8 bytes, mk_clock.o(.text.clock_get_frequency))
+<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = clock_get_frequency &rArr; clock_get_apb_clk_freq &rArr; clock_get_ahb_clk_freq
+</UL>
+<BR>[Calls]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_sys_clk_freq
+<LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_apb_clk_freq
+<LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_ahb_clk_freq
+</UL>
+<BR>[Called By]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
 </UL>
 
-<P><STRONG><a name="[6a]"></a>clock_get_frequency</STRONG> (Thumb, 272 bytes, Stack size 8 bytes, mk_clock.o(.text.clock_get_frequency))
-<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = clock_get_frequency
-</UL>
-<BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
+<P><STRONG><a name="[3b]"></a>clock_set_divider</STRONG> (Thumb, 96 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_set_divider))
+<BR><BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[4d]"></a>clock_set_divider</STRONG> (Thumb, 100 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_set_divider))
-<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_open
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<P><STRONG><a name="[43]"></a>clock_xtal38m4_injection_set</STRONG> (Thumb, 60 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_xtal38m4_injection_set))
+<BR><BR>[Called By]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_attach
 </UL>
 
-<P><STRONG><a name="[57]"></a>delay_ms</STRONG> (Thumb, 14 bytes, Stack size 8 bytes, menu.o(.text.delay_ms))
-<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = delay_ms
-</UL>
-<BR>[Calls]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+<P><STRONG><a name="[36]"></a>delay_us</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, mk_misc.o(.text.delay_us))
+<BR><BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
+<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[35]"></a>delay_us</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, mk_misc.o(.text.delay_us))
-<BR><BR>[Called By]<UL><LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_open
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_write_nbytes_callback
-<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
-<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_ms
-<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Main_Menu
-</UL>
-
-<P><STRONG><a name="[58]"></a>dma_open</STRONG> (Thumb, 224 bytes, Stack size 24 bytes, mk_dma.o(.text.dma_open))
+<P><STRONG><a name="[48]"></a>dma_open</STRONG> (Thumb, 220 bytes, Stack size 24 bytes, mk_dma.o(.text.dma_open))
 <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = dma_open
 </UL>
-<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
+<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
+<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
 </UL>
-<BR>[Called By]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
-<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<BR>[Called By]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
 </UL>
 
-<P><STRONG><a name="[5f]"></a>dma_transfer</STRONG> (Thumb, 80 bytes, Stack size 24 bytes, mk_dma.o(.text.dma_transfer))
+<P><STRONG><a name="[4e]"></a>dma_transfer</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, mk_dma.o(.text.dma_transfer))
 <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = dma_transfer
 </UL>
-<BR>[Called By]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
-<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
-<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_write_nbytes_callback
-<LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_callback
+<BR>[Called By]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_callback
 </UL>
 
-<P><STRONG><a name="[68]"></a>dual_timer_get</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, mk_dual_timer.o(.text.dual_timer_get))
-<BR><BR>[Called By]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
+<P><STRONG><a name="[5e]"></a>dual_timer_get</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, mk_dual_timer.o(.text.dual_timer_get))
+<BR><BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
 </UL>
 
-<P><STRONG><a name="[59]"></a>dual_timer_open</STRONG> (Thumb, 208 bytes, Stack size 24 bytes, mk_dual_timer.o(.text.dual_timer_open))
+<P><STRONG><a name="[49]"></a>dual_timer_open</STRONG> (Thumb, 204 bytes, Stack size 24 bytes, mk_dual_timer.o(.text.dual_timer_open))
 <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = dual_timer_open
 </UL>
-<BR>[Calls]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
+<BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
 </UL>
-<BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
+<BR>[Called By]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
 </UL>
 
-<P><STRONG><a name="[69]"></a>dual_timer_start</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, mk_dual_timer.o(.text.dual_timer_start))
-<BR><BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
+<P><STRONG><a name="[5f]"></a>dual_timer_start</STRONG> (Thumb, 24 bytes, Stack size 0 bytes, mk_dual_timer.o(.text.dual_timer_start))
+<BR><BR>[Called By]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_open
 </UL>
 
-<P><STRONG><a name="[5a]"></a>flash_block_erase</STRONG> (Thumb, 308 bytes, Stack size 32 bytes, mk_flash.o(.text.flash_block_erase))
-<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = flash_block_erase &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[4a]"></a>flash_check_busy</STRONG> (Thumb, 120 bytes, Stack size 32 bytes, mk_flash.o(.text.flash_check_busy))
+<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = flash_check_busy &rArr; flash_read_status &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
-</UL>
-<BR>[Called By]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-</UL>
-
-<P><STRONG><a name="[5e]"></a>flash_check_busy</STRONG> (Thumb, 244 bytes, Stack size 32 bytes, mk_flash.o(.text.flash_check_busy))
-<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = flash_check_busy &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-</UL>
-<BR>[Called By]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-<LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-</UL>
-
-<P><STRONG><a name="[36]"></a>flash_erase</STRONG> (Thumb, 336 bytes, Stack size 48 bytes, mk_flash.o(.text.flash_erase))
-<BR><BR>[Stack]<UL><LI>Max Depth = 160<LI>Call Chain = flash_erase &rArr; flash_sector_erase &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_sector_erase
-<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
-<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_block_erase
-<LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Main_Menu
-</UL>
-
-<P><STRONG><a name="[61]"></a>flash_open</STRONG> (Thumb, 664 bytes, Stack size 40 bytes, mk_flash.o(.text.flash_open))
-<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = flash_open &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
-<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_set_divider
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
+<BR>[Calls]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_mem_cmd
+<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read_status
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[62]"></a>flash_read</STRONG> (Thumb, 592 bytes, Stack size 96 bytes, mk_flash.o(.text.flash_read))
-<BR><BR>[Stack]<UL><LI>Max Depth = 144<LI>Call Chain = flash_read &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[50]"></a>flash_open</STRONG> (Thumb, 388 bytes, Stack size 24 bytes, mk_flash.o(.text.flash_open))
+<BR><BR>[Stack]<UL><LI>Max Depth = 144<LI>Call Chain = flash_open &rArr; flash_write_quad_mode &rArr; flash_wait_done &rArr; flash_read_status &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
-<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
+<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
+<LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_set_divider
+<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
+<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_quad_mode
+<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_mem_cmd
+<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_status
+<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_reset_cmd
+<LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[60]"></a>flash_sector_erase</STRONG> (Thumb, 312 bytes, Stack size 32 bytes, mk_flash.o(.text.flash_sector_erase))
-<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = flash_sector_erase &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[54]"></a>flash_read</STRONG> (Thumb, 388 bytes, Stack size 80 bytes, mk_flash.o(.text.flash_read))
+<BR><BR>[Stack]<UL><LI>Max Depth = 160<LI>Call Chain = flash_read &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
-</UL>
-<BR>[Called By]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-</UL>
-
-<P><STRONG><a name="[63]"></a>flash_write</STRONG> (Thumb, 572 bytes, Stack size 104 bytes, mk_flash.o(.text.flash_write))
-<BR><BR>[Stack]<UL><LI>Max Depth = 184<LI>Call Chain = flash_write &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
-<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
+<BR>[Calls]<UL><LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
+<LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
+<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_mem_cmd
+<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_state_update
+<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_reset_cmd
+<LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
+<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[37]"></a>flash_write_nbytes</STRONG> (Thumb, 1980 bytes, Stack size 136 bytes, mk_flash.o(.text.flash_write_nbytes))
-<BR><BR>[Stack]<UL><LI>Max Depth = 216<LI>Call Chain = flash_write_nbytes &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[59]"></a>gpio_close</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, mk_gpio.o(.text.gpio_close))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = gpio_close
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
-<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
+<BR>[Calls]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_disable
 </UL>
-<BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Ymodem_Receive
-<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Main_Menu
+<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[64]"></a>gpio_open</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_gpio.o(.text.gpio_open))
+<P><STRONG><a name="[5a]"></a>gpio_open</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_gpio.o(.text.gpio_open))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = gpio_open
 </UL>
-<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
+<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
+<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
 </UL>
 <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
 </UL>
 
-<P><STRONG><a name="[51]"></a>io_pin_mux_set</STRONG> (Thumb, 80 bytes, Stack size 0 bytes, mk_io.o(.text.io_pin_mux_set))
-<BR><BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_pins_config
+<P><STRONG><a name="[24]"></a>main</STRONG> (Thumb, 272 bytes, Stack size 8 bytes, customboot.o(.text.main))
+<BR><BR>[Stack]<UL><LI>Max Depth = 168<LI>Call Chain = main &rArr; flash_read &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
 </UL>
-
-<P><STRONG><a name="[24]"></a>main</STRONG> (Thumb, 536 bytes, Stack size 48 bytes, customboot.o(.text.main))
-<BR><BR>[Stack]<UL><LI>Max Depth = 352<LI>Call Chain = main &rArr; Main_Menu &rArr; SerialDownload &rArr; Ymodem_Receive &rArr; flash_write_nbytes &rArr; flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecrypt
-<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;aesDecInit
-<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_open
-<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_PutString
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_erase
-<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
-<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wdt_close
-<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_chip
-<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_open
-<LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy8
-<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_pins_config
-<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_configure
-<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
-<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_ms
-<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Main_Menu
-<LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IAP_JumpTo
+<BR>[Calls]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_close
+<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_PutString
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
+<LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_chip
+<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_open
+<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_close
+<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy8
+<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_configure
+<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
 </UL>
-<P><STRONG><a name="[54]"></a>mk_chip_id</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, mk_misc.o(.text.mk_chip_id))
-<BR><BR>[Called By]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_chip
+<P><STRONG><a name="[40]"></a>mk_chip_id</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, mk_misc.o(.text.mk_chip_id))
+<BR><BR>[Called By]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_chip
 </UL>
 
-<P><STRONG><a name="[56]"></a>reset_module</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, mk_reset.o(.text.reset_module))
-<BR><BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
-<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_open
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_open
-<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_open
+<P><STRONG><a name="[42]"></a>reset_module</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, mk_reset.o(.text.reset_module))
+<BR><BR>[Called By]<UL><LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;calib_open
+<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;gpio_open
 </UL>
 
-<P><STRONG><a name="[39]"></a>start_main_asm</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, startup_mk800x.o(.text.start_main_asm))
+<P><STRONG><a name="[30]"></a>start_main_asm</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, startup_mk800x.o(.text.start_main_asm))
 <BR><BR>[Called By]<UL><LI><a href="#[0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Reset_Handler
 </UL>
 
-<P><STRONG><a name="[4e]"></a>sys_tick_start</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, mk_misc.o(.text.sys_tick_start))
+<P><STRONG><a name="[3c]"></a>sys_tick_start</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, mk_misc.o(.text.sys_tick_start))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = sys_tick_start
 </UL>
-<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<BR>[Called By]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[5b]"></a>sys_timer_get</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, mk_misc.o(.text.sys_timer_get))
+<P><STRONG><a name="[58]"></a>sys_timer_get</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, mk_misc.o(.text.sys_timer_get))
 <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = sys_timer_get
 </UL>
-<BR>[Calls]<UL><LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_get
+<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_get
 </UL>
-<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_sector_erase
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
-<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_block_erase
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_write_nbytes_callback
-<LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_callback
+<BR>[Called By]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_status
+<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
 </UL>
 
-<P><STRONG><a name="[4f]"></a>sys_timer_open</STRONG> (Thumb, 80 bytes, Stack size 40 bytes, mk_misc.o(.text.sys_timer_open))
-<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = sys_timer_open &rArr; dual_timer_open
+<P><STRONG><a name="[3d]"></a>sys_timer_open</STRONG> (Thumb, 76 bytes, Stack size 40 bytes, mk_misc.o(.text.sys_timer_open))
+<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = sys_timer_open &rArr; clock_get_frequency &rArr; clock_get_apb_clk_freq &rArr; clock_get_ahb_clk_freq
 </UL>
-<BR>[Calls]<UL><LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_frequency
-<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_start
-<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_open
+<BR>[Calls]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_frequency
+<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_start
+<LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dual_timer_open
+<LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
 </UL>
-<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
+<BR>[Called By]<UL><LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;board_clock_run
 </UL>
 
-<P><STRONG><a name="[3f]"></a>uart_irq_handler</STRONG> (Thumb, 536 bytes, Stack size 32 bytes, mk_uart.o(.text.uart_irq_handler))
-<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = uart_irq_handler
+<P><STRONG><a name="[5c]"></a>uart_close</STRONG> (Thumb, 128 bytes, Stack size 16 bytes, mk_uart.o(.text.uart_close))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = uart_close
+</UL>
+<BR>[Calls]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_disable
+</UL>
+<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+</UL>
+
+<P><STRONG><a name="[34]"></a>uart_irq_handler</STRONG> (Thumb, 376 bytes, Stack size 32 bytes, mk_uart.o(.text.uart_irq_handler))
+<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = uart_irq_handler &rArr; uart_state_clear
+</UL>
+<BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_state_clear
 </UL>
 <BR>[Called By]<UL><LI><a href="#[1f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_IRQHandler
 <LI><a href="#[1e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_IRQHandler
 </UL>
 
-<P><STRONG><a name="[67]"></a>uart_open</STRONG> (Thumb, 396 bytes, Stack size 40 bytes, mk_uart.o(.text.uart_open))
-<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = uart_open
+<P><STRONG><a name="[32]"></a>uart_send</STRONG> (Thumb, 340 bytes, Stack size 72 bytes, mk_uart.o(.text.uart_send))
+<BR><BR>[Stack]<UL><LI>Max Depth = 96<LI>Call Chain = uart_send &rArr; dma_transfer
 </UL>
-<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;reset_module
-<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_set_divider
-<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_enable
-<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
+<BR>[Calls]<UL><LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
+<LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
+<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_state_set
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_state_clear
+<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
 </UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+<BR>[Called By]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialPutChar
 </UL>
 
-<P><STRONG><a name="[3e]"></a>uart_send</STRONG> (Thumb, 720 bytes, Stack size 88 bytes, mk_uart.o(.text.uart_send))
-<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = uart_send &rArr; dma_transfer
-</UL>
-<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
-<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_open
-</UL>
-<BR>[Called By]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Serial_PutString
-<LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SerialPutChar
-</UL>
+<P><STRONG><a name="[72]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
 
-<P><STRONG><a name="[65]"></a>wdt_close</STRONG> (Thumb, 80 bytes, Stack size 16 bytes, mk_wdt.o(.text.wdt_close))
-<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = wdt_close
-</UL>
-<BR>[Calls]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_disable
-</UL>
-<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
-</UL>
+<P><STRONG><a name="[73]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
 
-<P><STRONG><a name="[76]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
-
-<P><STRONG><a name="[77]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
-
-<P><STRONG><a name="[78]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
+<P><STRONG><a name="[74]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
 <P>
 <H3>
 Local Symbols
 </H3>
-<P><STRONG><a name="[25]"></a>flash_dma_callback</STRONG> (Thumb, 292 bytes, Stack size 24 bytes, mk_flash.o(.text.flash_dma_callback))
-<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = flash_dma_callback &rArr; flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[44]"></a>clock_get_ahb_clk_freq</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_clock.o(.text.clock_get_ahb_clk_freq))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = clock_get_ahb_clk_freq
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<BR>[Calls]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_sys_clk_freq
 </UL>
-<BR>[Address Reference Count : 3]<UL><LI> mk_flash.o(.text.flash_write)
-<LI> mk_flash.o(.text.flash_dma_callback)
-<LI> mk_flash.o(.text.flash_read)
-</UL>
-<P><STRONG><a name="[26]"></a>flash_dma_write_nbytes_callback</STRONG> (Thumb, 448 bytes, Stack size 24 bytes, mk_flash.o(.text.flash_dma_write_nbytes_callback))
-<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = flash_dma_write_nbytes_callback &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
-<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-</UL>
-<BR>[Address Reference Count : 2]<UL><LI> mk_flash.o(.text.flash_write_nbytes)
-<LI> mk_flash.o(.text.flash_dma_write_nbytes_callback)
-</UL>
-<P><STRONG><a name="[5d]"></a>flash_wait_done</STRONG> (Thumb, 96 bytes, Stack size 32 bytes, mk_flash.o(.text.flash_wait_done))
-<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = flash_wait_done &rArr; flash_write_cmd &rArr; sys_timer_get
-</UL>
-<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
-<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
-<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
-</UL>
-<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_sector_erase
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_block_erase
+<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_frequency
+<LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_apb_clk_freq
 </UL>
 
-<P><STRONG><a name="[5c]"></a>flash_write_cmd</STRONG> (Thumb, 268 bytes, Stack size 40 bytes, mk_flash.o(.text.flash_write_cmd))
-<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = flash_write_cmd &rArr; sys_timer_get
+<P><STRONG><a name="[46]"></a>clock_get_apb_clk_freq</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, mk_clock.o(.text.clock_get_apb_clk_freq))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = clock_get_apb_clk_freq &rArr; clock_get_ahb_clk_freq
 </UL>
-<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
+<BR>[Calls]<UL><LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_ahb_clk_freq
 </UL>
-<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_nbytes
-<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write
-<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_sector_erase
-<LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
-<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
-<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
-<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_block_erase
-<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
-<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_write_nbytes_callback
-<LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_callback
+<BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_frequency
 </UL>
 
-<P><STRONG><a name="[28]"></a>uart_dma_callback</STRONG> (Thumb, 292 bytes, Stack size 32 bytes, mk_uart.o(.text.uart_dma_callback))
-<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = uart_dma_callback
+<P><STRONG><a name="[45]"></a>clock_get_sys_clk_freq</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, mk_clock.o(.text.clock_get_sys_clk_freq))
+<BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_frequency
+<LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;clock_get_ahb_clk_freq
+</UL>
+
+<P><STRONG><a name="[26]"></a>flash_dma_callback</STRONG> (Thumb, 216 bytes, Stack size 24 bytes, mk_flash.o(.text.flash_dma_callback))
+<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = flash_dma_callback &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;dma_transfer
+<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_reset_cmd
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> mk_flash.o(.text.flash_read)
+</UL>
+<P><STRONG><a name="[4b]"></a>flash_read_status</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, mk_flash.o(.text.flash_read_status))
+<BR><BR>[Stack]<UL><LI>Max Depth = 88<LI>Call Chain = flash_read_status &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_status
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
+<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
+</UL>
+
+<P><STRONG><a name="[4f]"></a>flash_reset_cmd</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, mk_flash.o(.text.flash_reset_cmd))
+<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = flash_reset_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_status
+</UL>
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_callback
+</UL>
+
+<P><STRONG><a name="[55]"></a>flash_state_update</STRONG> (Thumb, 72 bytes, Stack size 16 bytes, mk_flash.o(.text.flash_state_update))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = flash_state_update
+</UL>
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+</UL>
+
+<P><STRONG><a name="[57]"></a>flash_wait_done</STRONG> (Thumb, 40 bytes, Stack size 16 bytes, mk_flash.o(.text.flash_wait_done))
+<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = flash_wait_done &rArr; flash_read_status &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
+<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_us
+<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read_status
+</UL>
+<BR>[Called By]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_quad_mode
+</UL>
+
+<P><STRONG><a name="[52]"></a>flash_wait_status</STRONG> (Thumb, 56 bytes, Stack size 24 bytes, mk_flash.o(.text.flash_wait_status))
+<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sys_timer_get
+</UL>
+<BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_mem_cmd
+<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_reset_cmd
+<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read_status
+</UL>
+
+<P><STRONG><a name="[4d]"></a>flash_write_cmd</STRONG> (Thumb, 208 bytes, Stack size 48 bytes, mk_flash.o(.text.flash_write_cmd))
+<BR><BR>[Stack]<UL><LI>Max Depth = 80<LI>Call Chain = flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_status
+</UL>
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_quad_mode
+<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read_status
+<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_dma_callback
+</UL>
+
+<P><STRONG><a name="[4c]"></a>flash_write_mem_cmd</STRONG> (Thumb, 40 bytes, Stack size 8 bytes, mk_flash.o(.text.flash_write_mem_cmd))
+<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = flash_write_mem_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_status
+</UL>
+<BR>[Called By]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_read
+<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_check_busy
+</UL>
+
+<P><STRONG><a name="[53]"></a>flash_write_quad_mode</STRONG> (Thumb, 116 bytes, Stack size 16 bytes, mk_flash.o(.text.flash_write_quad_mode))
+<BR><BR>[Stack]<UL><LI>Max Depth = 120<LI>Call Chain = flash_write_quad_mode &rArr; flash_wait_done &rArr; flash_read_status &rArr; flash_write_cmd &rArr; flash_wait_status &rArr; sys_timer_get
+</UL>
+<BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_write_cmd
+<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_wait_done
+<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidiv
+</UL>
+<BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;flash_open
+</UL>
+
+<P><STRONG><a name="[28]"></a>uart_dma_callback</STRONG> (Thumb, 200 bytes, Stack size 24 bytes, mk_uart.o(.text.uart_dma_callback))
+<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = uart_dma_callback &rArr; uart_state_clear
+</UL>
+<BR>[Calls]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_state_clear
 </UL>
 <BR>[Address Reference Count : 1]<UL><LI> mk_uart.o(.text.uart_send)
-</UL><P>
+</UL>
+<P><STRONG><a name="[60]"></a>uart_state_clear</STRONG> (Thumb, 56 bytes, Stack size 8 bytes, mk_uart.o(.text.uart_state_clear))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = uart_state_clear
+</UL>
+<BR>[Called By]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
+<LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_irq_handler
+<LI><a href="#[28]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_dma_callback
+</UL>
+
+<P><STRONG><a name="[61]"></a>uart_state_set</STRONG> (Thumb, 96 bytes, Stack size 16 bytes, mk_uart.o(.text.uart_state_set))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = uart_state_set
+</UL>
+<BR>[Called By]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;uart_send
+</UL>
+<P>
 <H3>
 Undefined Global Symbols
 </H3><HR></body></html>

--
Gitblit v1.9.3