Main keyboard app

Disassembled Function Overview

/ (fcn) vector_table 244
|   vector_table ();
|           0x08004000      .dword 0x20001da0                          ; initial stack pointer
|           0x08004004      .dword 0x0800a809
|           0x08004008      .dword 0x08009d35 ; NMI_Handler            ; just returns
|           0x0800400c      .dword 0x08009d37 ; HardFault_Handler
|           0x08004010      .dword 0x08009d39 ; MemManage_Handler
|           0x08004014      .dword 0x08009d3b ; BusFault_Handler
|           0x08004018      .dword 0x08009d3d ; UsageFault_Handler
|           0x0800401c      .dword 0x00000000
|           0x08004020      .dword 0x00000000
|           0x08004024      .dword 0x00000000
|           0x08004028      .dword 0x00000000
|           0x0800402c      .dword 0x08009d3f ; SVC_Handler            ; just returns
|           0x08004030      .dword 0x08009d41 ; DebugMon_Handler       ; just returns
|           0x08004034      .dword 0x00000000
|           0x08004038      .dword 0x08009d43 ; PendSV_Handler         ; just returns
|           0x0800403c      .dword 0x08009d45 ; SysTick_Handler        ; just returns
|           0x08004040      .dword 0x0800a825 ; WWDG_IRQHandler
|           0x08004044      .dword 0x0800a829 ; PVD_IRQHandler
|           0x08004048      .dword 0x0800a82d ; TAMPER_STAMP_IRQHandler
|           0x0800404c      .dword 0x0800a831 ; RTC_WKUP_IRQHandler
|           0x08004050      .dword 0x0800a835 ; FLASH_IRQHandler
|           0x08004054      .dword 0x0800a839 ; RCC_IRQHandler
|           0x08004058      .dword 0x08009df1 ; EXTI0_IRQHandler       ; implemented
|           0x0800405c      .dword 0x0800a83d ; EXTI1_IRQHandler
|           0x08004060      .dword 0x0800a841 ; EXTI2_IRQHandler
|           0x08004064      .dword 0x0800a845 ; EXTI3_IRQHandler
|           0x08004068      .dword 0x0800a849 ; EXTI4_IRQHandler
|           0x0800406c      .dword 0x0800a84d ; DMA1_Channel1_IRQHandler
|           0x08004070      .dword 0x08009e77 ; DMA1_Channel2_IRQHandler ; implemented
|           0x08004074      .dword 0x0800a851 ; DMA1_Channel3_IRQHandler
|           0x08004078      .dword 0x0800a855 ; DMA1_Channel4_IRQHandler
|           0x0800407c      .dword 0x0800a859 ; DMA1_Channel5_IRQHandler
|           0x08004080      .dword 0x0800a85d ; DMA1_Channel6_IRQHandler
|           0x08004084      .dword 0x08009e0d ; DMA1_Channel7_IRQHandler
|           0x08004088      .dword 0x0800a861 ; ADC1_IRQHandler
|           0x0800408c      .dword 0x0800a865 ; USB_HP_IRQHandler
|           0x08004090      .dword 0x08009d47 ; USB_LP_IRQHandler      ; implemented
|           0x08004094      .dword 0x0800a869 ; DAC_IRQHandler
|           0x08004098      .dword 0x0800a86d ; COMP_IRQHandler
|           0x0800409c      .dword 0x08009d85 ; EXTI9_5_IRQHandler     ; implemented
|           0x080040a0      .dword 0x0800a871 ; LCD_IRQHandler
|           0x080040a4      .dword 0x0800a875 ; TIM9_IRQHandler
|           0x080040a8      .dword 0x0800a879 ; TIM10_IRQHandler
|           0x080040ac      .dword 0x0800a87d ; TIM11_IRQHandler
|           0x080040b0      .dword 0x0800a881 ; TIM2_IRQHandler
|           0x080040b4      .dword 0x0800a885 ; TIM3_IRQHandler
|           0x080040b8      .dword 0x08009ed9 ; TIM4_IRQHandler        ; implemented
|           0x080040bc      .dword 0x0800a889 ; I2C1_EV_IRQHandler
|           0x080040c0      .dword 0x0800a88d ; I2C1_ER_IRQHandler
|           0x080040c4      .dword 0x0800a891 ; I2C2_EV_IRQHandler
|           0x080040c8      .dword 0x0800a895 ; I2C2_ER_IRQHandler
|           0x080040cc      .dword 0x0800a899 ; SPI1_IRQHandler
|           0x080040d0      .dword 0x0800a89d ; SPI2_IRQHandler
|           0x080040d4      .dword 0x0800a8a1 ; USART1_IRQHandler
|           0x080040d8      .dword 0x08009e35 ; USART2_IRQHandler      ; implemented
|           0x080040dc      .dword 0x08009e97 ; USART3_IRQHandler      ; implemented
|           0x080040e0      .dword 0x08009d53 ; EXTI15_10_IRQHandler   ; implemented
|           0x080040e4      .dword 0x0800a8a5 ; RTC_Alarm_IRQHandler
|           0x080040e8      .dword 0x08009d4b ; USB_FS_WKUP_IRQHandler ; implemented
|           0x080040ec      .dword 0x0800a8a9 ; TIM6_IRQHandler
|           0x080040f0      .dword 0x0800a8ad ; TIM7_IRQHandler
|           ;-- KBD_Init:
/ (fcn) _KBD_Init 140
|       Caller: main
|   _KBD_Init ();
|              ; CALL XREF from 0x0800a7ec (main)
|           0x080040f4      38b5           push {r3, r4, r5, lr}
|           0x080040f6      00f0e7f8       bl _NVIC_NoSubPriorityGroups ; no subpriority groups => 16 interrupt group priorities
|           0x080040fa      00f058f8       bl _Peripherals_Config
|           0x080040fe      00f0e7f8       bl _GPIO_Config
|           0x08004102      00f0d8f9       bl _MatrixColumns_Set       ; columns: output, rows: input
|           0x08004106      01f0faff       bl init_vars
|           0x0800410a      dff8a028       ldr.w r2, [0x080049ac]      ; [0x80049ac:4]=0x8080100 ; all zeroes ; src
|           0x0800410e      4621           movs r1, 0x46               ; 'F' ; 70 ; size
|           0x08004110      dff8900b       ldr.w r0, [0x08004ca4]      ; [0x8004ca4:4]=0x200004f8 ; dst .data
|           0x08004114      02f0c8fb       bl _KBD_LoadLayout          ; load custom KEY_LAYOUT
|           0x08004118      dff88c2b       ldr.w r2, [0x08004ca8]      ; [0x8004ca8:4]=0x8080146 ; all zeroes
|           0x0800411c      4621           movs r1, 0x46               ; 'F' ; 70
|           0x0800411e      dff88c0b       ldr.w r0, [0x08004cac]      ; [0x8004cac:4]=0x20000540
|           0x08004122      02f0c1fb       bl _KBD_LoadLayout          ; load custom KEY_LAYOUT_FN
|           0x08004126      02f0cdfa       bl _KBD_LoadLayoutAndPWRFlags
|           0x0800412a      00f029f8       bl _TIM4_Update_Flag_1      ; check if loaded byte matches init value of some variable
|           0x0800412e      dff88c4b       ldr.w r4, [0x08004cbc]      ; [0x8004cbc:4]=0x20000768
|           0x08004132      94f83000       ldrb.w r0, [r4, 0x30]       ; 1, previously loaded from eeprom
|           0x08004136      0028           cmp r0, 0
|       ,=< 0x08004138      02d1           bne 0x8004140
|       |   0x0800413a      0120           movs r0, 1                  ; 1 ; set that byte to 1 if it isn't already
|       |   0x0800413c      84f83000       strb.w r0, [r4, 0x30]
|       |      ; JMP XREF from 0x08004138 (_KBD_Init)
|       `-> 0x08004140      02f0f2fa       bl init_some_10_struct2     ; more initialization
|           0x08004144      02f043fb       bl _KBD_LoadSyncCode        ; more init stuff in the bss
|           0x08004148      0a22           movs r2, 0xa                ; 10
|           0x0800414a      0021           movs r1, 0
|           0x0800414c      dff8600b       ldr.w r0, [0x08004cb0]      ; [0x8004cb0:4]=0x20001944
|           0x08004150      02f00efc       bl memset                   ; fill 0x20001944 - 0x20001944+0xa with 0 ; void *memset(void *s, int c, size_t n)
|           0x08004154      2622           movs r2, 0x26               ; '&' ; 38
|           0x08004156      0021           movs r1, 0
|           0x08004158      dff8580b       ldr.w r0, [0x08004cb4]      ; [0x8004cb4:4]=0x200018cc
|           0x0800415c      02f008fc       bl memset                   ; fill 0x200018cc - 0x200018cc+0x26 with 0 ; void *memset(void *s, int c, size_t n)
|           0x08004160      dff8545b       ldr.w r5, [0x08004cb8]      ; [0x8004cb8:4]=0x200017a8
|           0x08004164      2846           mov r0, r5
|           0x08004166      01f0a1ff       bl _KBD_DefaultsLoad
|           0x0800416a      2946           mov r1, r5
|           0x0800416c      94f83000       ldrb.w r0, [r4, 0x30]
|           0x08004170      02f008fc       bl _KBD_LayoutInit
|           0x08004174      02f05ef8       bl _TIM4_Disable
|           0x08004178      bde83140       pop.w {r0, r4, r5, lr}
\       ,=< 0x0800417c      02f0aabb       b.w _TIM4_Config
\       |   ;-- TIM4_Update_Flag_1:
/ (fcn) _TIM4_Update_Flag_1 46
|       Caller: _KBD_Init _Parse_Matrix _KBD_PWRManage
|   _TIM4_Update_Flag_1 ();
|       |      ; CALL XREF from 0x0800412a (_KBD_Init)
|       |      ; CALL XREF from 0x080083e0 (_Parse_Matrix)
|       |      ; CALL XREF from 0x08008e16 (_KBD_PWRManage)
|       |      ; CALL XREF from 0x08008e6a (_KBD_PWRManage)
|       |      ; CALL XREF from 0x08008eb2 (_KBD_PWRManage)
|       |   0x08004180      dff8340b       ldr.w r0, [0x08004cb8]      ; [0x8004cb8:4]=0x200017a8
|       |   0x08004184      dff8341b       ldr.w r1, [0x08004cbc]      ; [0x8004cbc:4]=0x20000768
|       |   0x08004188      c97d           ldrb r1, [r1, 0x17]
|       |   0x0800418a      0029           cmp r1, 0
|      ,==< 0x0800418c      03d0           beq 0x8004196
|      ||   0x0800418e      0021           movs r1, 0
|      ||   0x08004190      80f8ed10       strb.w r1, [r0, 0xed]
|      ||   0x08004194      7047           bx lr
|      ||      ; JMP XREF from 0x0800418c (_TIM4_Update_Flag_1)
|      `--> 0x08004196      90f8ee10       ldrb.w r1, [r0, 0xee]
|       |   0x0800419a      0129           cmp r1, 1                   ; 1
|      ,==< 0x0800419c      03d1           bne 0x80041a6
|      ||   0x0800419e      0021           movs r1, 0
|      ||   0x080041a0      80f8ed10       strb.w r1, [r0, 0xed]
|      ||   0x080041a4      7047           bx lr
|      ||      ; JMP XREF from 0x0800419c (_TIM4_Update_Flag_1)
|      `--> 0x080041a6      0121           movs r1, 1                  ; 1
|       |   0x080041a8      80f8ed10       strb.w r1, [r0, 0xed]
\       |   0x080041ac      7047           bx lr
\       |   ;-- Peripherals_Config:
/ (fcn) _Peripherals_Config 190
|       Caller: _KBD_Init _KBD_PWRManage
|   _Peripherals_Config ();
|       |      ; CALL XREF from 0x080040fa (_KBD_Init)
|       |      ; CALL XREF from 0x08008de0 (_KBD_PWRManage)
|       |   0x080041ae      80b5           push {r7, lr}
|       |   0x080041b0      02f078fc       bl RCC_DeInit
|       |   0x080041b4      0120           movs r0, 1                  ; 1
|       |   0x080041b6      02f08dfc       bl RCC_HSEConfig            ; enable HSE oscillator
|       |   0x080041ba      02f090fc       bl RCC_WaitForHSEStartUp
|       |   0x080041be      0120           movs r0, 1                  ; 1
|       |   0x080041c0      02f0b7fd       bl FLASH_ReadAccess64Cmd    ; enable 64bit access mode
|       |   0x080041c4      0120           movs r0, 1                  ; 1
|       |   0x080041c6      02f0a7fd       bl FLASH_PrefetchBufferCmd  ; enable prefetch
|       |   0x080041ca      0120           movs r0, 1                  ; 1
|       |   0x080041cc      02f09cfd       bl FLASH_SetLatency         ; set 0 wait state?
|       |   0x080041d0      0121           movs r1, 1                  ; 1
|       |   0x080041d2      4ff08050       mov.w r0, 0x10000000
|       |   0x080041d6      02f042fd       bl RCC_APB1PeriphClockCmd   ; enable power interface clk
|       |   0x080041da      4ff40060       mov.w r0, 0x800             ; 2048
|       |   0x080041de      02f063fe       bl PWR_VoltageScalingConfig ; set it to 01=1.8V range1
|       |      ; JMP XREF from 0x080041ea (_Peripherals_Config)
|      .--> 0x080041e2      1020           movs r0, 0x10               ; 16
|      :|   0x080041e4      02f07dfe       bl PWR_GetFlagStatus
|      :|   0x080041e8      0028           cmp r0, 0
|      `==< 0x080041ea      fad1           bne 0x80041e2
|       |   0x080041ec      0020           movs r0, 0
|       |   0x080041ee      02f0b8fc       bl RCC_HCLKConfig           ; leave sysclk undevided
|       |   0x080041f2      4ff48060       mov.w r0, 0x400             ; 1024
|       |   0x080041f6      02f0c2fc       bl RCC_PCLK2Config          ; high and low speed clks undevided?
|       |   0x080041fa      4ff48060       mov.w r0, 0x400             ; 1024 ; devide APB low speed prescaler by 2
|       |   0x080041fe      02f0b7fc       bl RCC_PCLK1Config
|       |   0x08004202      8022           movs r2, 0x80               ; 128 ; PLL clk out = PLLVCO/3;
|       |   0x08004204      0821           movs r1, 8                  ; 8 ; PLLVCO = PLL clk entry x 6
|       |   0x08004206      0120           movs r0, 1                  ; 1 ; PLL clk enty is HSE
|       |   0x08004208      02f097fc       bl RCC_PLLConfig
|       |   0x0800420c      0120           movs r0, 1                  ; 1
|       |   0x0800420e      02f099fc       bl RCC_PLLCmd               ; enable main pll (uses bitband regions alias)
|       |      ; JMP XREF from 0x0800421a (_Peripherals_Config)
|      .--> 0x08004212      3920           movs r0, 0x39               ; '9' ; 57
|      :|   0x08004214      02f044fd       bl RCC_GetFlagStatus        ; 0x39 to check if PLL is locked. wait untill locked
|      :|   0x08004218      0028           cmp r0, 0
|      `==< 0x0800421a      fad0           beq 0x8004212
|       |   0x0800421c      0320           movs r0, 3                  ; 3
|       |   0x0800421e      02f094fc       bl RCC_SYSCLKConfig         ; use PLL as sysclk source
|       |      ; JMP XREF from 0x08004228 (_Peripherals_Config)
|      .--> 0x08004222      02f099fc       bl RCC_GetSYSCLKSource
|      :|   0x08004226      0c28           cmp r0, 0xc                 ; 12 ; wait until PLL is selected as sysclk source
|      `==< 0x08004228      fbd1           bne 0x8004222
|       |   0x0800422a      6ff00400       mvn r0, 4
|       |   0x0800422e      02f09cfe       bl SysTick_CLKSourceConfig  ; set systick clk source to AHB/8
|       |   0x08004232      0121           movs r1, 1                  ; 1
|       |   0x08004234      0846           mov r0, r1
|       |   0x08004236      02f0fcfc       bl RCC_AHBPeriphClockCmd    ; enable GPIOA clk
|       |   0x0800423a      0121           movs r1, 1                  ; 1
|       |   0x0800423c      0220           movs r0, 2                  ; 2
|       |   0x0800423e      02f0f8fc       bl RCC_AHBPeriphClockCmd    ; enable GPIOB clk
|       |   0x08004242      0121           movs r1, 1                  ; 1
|       |   0x08004244      0420           movs r0, 4                  ; 4
|       |   0x08004246      02f0f4fc       bl RCC_AHBPeriphClockCmd    ; enable GPIOC clk
|       |   0x0800424a      0121           movs r1, 1                  ; 1
|       |   0x0800424c      0420           movs r0, 4                  ; 4
|       |   0x0800424e      02f006fd       bl RCC_APB1PeriphClockCmd   ; enable TIM4 clk
|       |   0x08004252      0121           movs r1, 1                  ; 1
|       |   0x08004254      0846           mov r0, r1
|       |   0x08004256      02f0f7fc       bl RCC_APB2PeriphClockCmd   ; enable system config ctrl clk
|       |   0x0800425a      0020           movs r0, 0
|       |   0x0800425c      02f062fc       bl RCC_HSICmd               ; disable Hight speed internal oscillator HSI
|       |   0x08004260      0020           movs r0, 0
|       |   0x08004262      02f05cfc       bl RCC_MSICmd               ; disable internal multispeed oscillator MSI
|       |   0x08004266      0020           movs r0, 0
\       |   0x08004268      bde80240       pop.w {r1, lr}
       ,==< 0x0800426c      02f05dbc       b.w RCC_LSEConfig           ; disable LSE
\      ||   ;-- KBD_UseHSIClock:
/ (fcn) _KBD_UseHSIClock 88
|       Caller: _KBD_LowPowerMode
|   _KBD_UseHSIClock ();
|      ||      ; CALL XREF from 0x08006640 (_KBD_LowPowerMode)
|      ||   0x08004270      80b5           push {r7, lr}
|      ||   0x08004272      02f017fc       bl RCC_DeInit
|      ||   0x08004276      0120           movs r0, 1                  ; 1
|      ||   0x08004278      02f054fc       bl RCC_HSICmd               ; enable HSI oscillator
|      ||      ; JMP XREF from 0x08004284 (_KBD_UseHSIClock)
|     .---> 0x0800427c      2120           movs r0, 0x21               ; '!' ; 33
|     :||   0x0800427e      02f00ffd       bl RCC_GetFlagStatus        ; Wait for HSIRDY
|     :||   0x08004282      0028           cmp r0, 0
|     `===< 0x08004284      fad0           beq 0x800427c
|      ||   0x08004286      0120           movs r0, 1                  ; 1
|      ||   0x08004288      02f05ffc       bl RCC_SYSCLKConfig         ; HSI oscillator used as system clock
|      ||   0x0800428c      4ff44040       mov.w r0, 0xc000            ; MSI clk range 6 around 4.194 MHz
|      ||   0x08004290      02f03efc       bl RCC_MSIRangeConfig
|      ||   0x08004294      0121           movs r1, 1                  ; 1
|      ||   0x08004296      0720           movs r0, 7                  ; 7
|      ||   0x08004298      02f0cbfc       bl RCC_AHBPeriphClockCmd    ; enable GPIO A/B/C clks
|      ||   0x0800429c      0121           movs r1, 1                  ; 1
|      ||   0x0800429e      4ff08050       mov.w r0, 0x10000000
|      ||   0x080042a2      02f0dcfc       bl RCC_APB1PeriphClockCmd   ; Power interface clock enable
|      ||   0x080042a6      0121           movs r1, 1                  ; 1
|      ||   0x080042a8      0846           mov r0, r1
|      ||   0x080042aa      02f0cdfc       bl RCC_APB2PeriphClockCmd   ; enable system config ctrl clk
|      ||   0x080042ae      0020           movs r0, 0
|      ||   0x080042b0      02f03bfc       bl RCC_LSEConfig            ; disable LSE
|      ||   0x080042b4      0020           movs r0, 0
|      ||   0x080042b6      02f00dfc       bl RCC_HSEConfig            ; disable HSE
|      ||   0x080042ba      3120           movs r0, 0x31               ; '1' ; 49
|      ||   0x080042bc      02f0f0fc       bl RCC_GetFlagStatus        ; Get HSERDY status
|      ||   0x080042c0      0028           cmp r0, 0
|     ,===< 0x080042c2      00d0           beq 0x80042c6
|    ||||      ; JMP XREF from 0x080042c4 (_KBD_UseHSIClock)
|    `===-> 0x080042c4      fee7           b 0x80042c4                 ; infinite loop if HSE is ready
|     |||      ; JMP XREF from 0x080042c2 (_KBD_UseHSIClock)
\     `---> 0x080042c6      01bd           pop {r0, pc}
\      ||   ;-- NVIC_NoSubPriorityGroups:
/ (fcn) _NVIC_NoSubPriorityGroups 8
|       Caller: _KBD_Init
|   _NVIC_NoSubPriorityGroups ();
|      ||      ; CALL XREF from 0x080040f6 (_KBD_Init)
|      ||   0x080042c8      4ff44070       mov.w r0, 0x300             ; 768
\     ,===< 0x080042cc      02f01abe       b.w NVIC_PriorityGroupConfig
\     |||   ;-- GPIO_Config:
/ (fcn) _GPIO_Config 264
|       Caller: _KBD_Init
|   _GPIO_Config ();
|     |||   0x080042d0      30b5           push {r4, r5, lr}           ; configure GPIO ports and associated EXTl
|     |||   0x080042d2      83b0           sub sp, 0xc
|     |||   0x080042d4      dff8840a       ldr.w r0, [0x08004d5c]      ; [0x8004d5c:4]=0x20000718
|     |||   0x080042d8      8188           ldrh r1, [r0, 4]            ; 0x400 pin 10
|     |||   0x080042da      0091           str r1, [sp]
|     |||   0x080042dc      0121           movs r1, 1                  ; 1 ; mode
|     |||   0x080042de      8df80410       strb.w r1, [sp, 4]
|     |||   0x080042e2      0021           movs r1, 0                  ; otype
|     |||   0x080042e4      8df80610       strb.w r1, [sp, 6]
|     |||   0x080042e8      0321           movs r1, 3                  ; 3 ; speed
|     |||   0x080042ea      8df80510       strb.w r1, [sp, 5]
|     |||   0x080042ee      00a9           add r1, sp, 0
|     |||   0x080042f0      0068           ldr r0, [r0]                ; 0x40020000 GPIOA
|     |||   0x080042f2      02f053fe       bl GPIO_Init
|     |||   0x080042f6      dff8684a       ldr.w r4, [0x08004d60]      ; [0x8004d60:4]=0x20000710
|     |||   0x080042fa      a088           ldrh r0, [r4, 4]            ; 0x8000
|     |||   0x080042fc      0090           str r0, [sp]
|     |||   0x080042fe      0020           movs r0, 0                  ; mode
|     |||   0x08004300      8df80400       strb.w r0, [sp, 4]
|     |||   0x08004304      0120           movs r0, 1                  ; 1 ; speed and pupd
|     |||   0x08004306      8df80700       strb.w r0, [sp, 7]
|     |||   0x0800430a      8df80500       strb.w r0, [sp, 5]
|     |||   0x0800430e      00a9           add r1, sp, 0
|     |||   0x08004310      2068           ldr r0, [r4]                ; 0x40020400 GPIOB
|     |||   0x08004312      02f043fe       bl GPIO_Init
|     |||   0x08004316      e179           ldrb r1, [r4, 7]            ; 0xf EXTl15
|     |||   0x08004318      a079           ldrb r0, [r4, 6]            ; 1 PB[x]
|     |||   0x0800431a      02f09bfe       bl SYSCFG_EXTILineConfig
|     |||   0x0800431e      dff8440a       ldr.w r0, [0x08004d64]      ; [0x8004d64:4]=0x20000700
|     |||   0x08004322      8188           ldrh r1, [r0, 4]            ; 2 pin 1
|     |||   0x08004324      0091           str r1, [sp]
|     |||   0x08004326      0121           movs r1, 1                  ; 1
|     |||   0x08004328      8df80410       strb.w r1, [sp, 4]
|     |||   0x0800432c      0021           movs r1, 0
|     |||   0x0800432e      8df80610       strb.w r1, [sp, 6]
|     |||   0x08004332      0321           movs r1, 3                  ; 3
|     |||   0x08004334      8df80510       strb.w r1, [sp, 5]
|     |||   0x08004338      00a9           add r1, sp, 0
|     |||   0x0800433a      0068           ldr r0, [r0]                ; 0x40020000 GPIOA
|     |||   0x0800433c      02f02efe       bl GPIO_Init
|     |||   0x08004340      dff8ac4a       ldr.w r4, [0x08004df0]      ; [0x8004df0:4]=0x20000708
|     |||   0x08004344      a088           ldrh r0, [r4, 4]            ; 0x8000
|     |||   0x08004346      0090           str r0, [sp]
|     |||   0x08004348      0120           movs r0, 1                  ; 1
|     |||   0x0800434a      8df80400       strb.w r0, [sp, 4]          ; mode
|     |||   0x0800434e      0020           movs r0, 0
|     |||   0x08004350      8df80600       strb.w r0, [sp, 6]          ; otype
|     |||   0x08004354      0320           movs r0, 3                  ; 3
|     |||   0x08004356      8df80500       strb.w r0, [sp, 5]          ; speed
|     |||   0x0800435a      00a9           add r1, sp, 0
|     |||   0x0800435c      2068           ldr r0, [r4]                ; 0x40020800 GPIOC
|     |||   0x0800435e      02f01dfe       bl GPIO_Init
|     |||   0x08004362      a188           ldrh r1, [r4, 4]            ; 0x8000
|     |||   0x08004364      2068           ldr r0, [r4]                ; 0x40020800 GPIOC
|     |||   0x08004366      02f05afe       bl GPIO_ResetBits           ; reset GPIOC:15
|     |||   0x0800436a      0024           movs r4, 0
|    ,====< 0x0800436c      14e0           b 0x8004398
|    ||||      ; JMP XREF from 0x0800439a (_GPIO_Config)
|   .-----> 0x0800436e      dff8840a       ldr.w r0, [0x08004df4]      ; [0x8004df4:4]=0x20000588
|   :||||   0x08004372      00ebc401       add.w r1, r0, r4, lsl 3
|   :||||   0x08004376      8988           ldrh r1, [r1, 4]
|   :||||   0x08004378      0091           str r1, [sp]
|   :||||   0x0800437a      0121           movs r1, 1                  ; 1
|   :||||   0x0800437c      8df80410       strb.w r1, [sp, 4]
|   :||||   0x08004380      0021           movs r1, 0
|   :||||   0x08004382      8df80610       strb.w r1, [sp, 6]
|   :||||   0x08004386      0321           movs r1, 3                  ; 3
|   :||||   0x08004388      8df80510       strb.w r1, [sp, 5]
|   :||||   0x0800438c      00a9           add r1, sp, 0
|   :||||   0x0800438e      50f83400       ldr.w r0, [r0, r4, lsl 3]
|   :||||   0x08004392      02f003fe       bl GPIO_Init
|   :||||   0x08004396      641c           adds r4, r4, 1
|   :||||      ; JMP XREF from 0x0800436c (_GPIO_Config)
|   :`----> 0x08004398      0e2c           cmp r4, 0xe                 ; 14
|   `=====< 0x0800439a      e8db           blt 0x800436e
|     |||   0x0800439c      0024           movs r4, 0
|    ,====< 0x0800439e      18e0           b 0x80043d2
|    ||||      ; JMP XREF from 0x080043d4 (_GPIO_Config)
|   .-----> 0x080043a0      dff8540a       ldr.w r0, [0x08004df8]      ; [0x8004df8:4]=0x20000628
|   :||||   0x080043a4      00ebc405       add.w r5, r0, r4, lsl 3
|   :||||   0x080043a8      a988           ldrh r1, [r5, 4]
|   :||||   0x080043aa      0091           str r1, [sp]
|   :||||   0x080043ac      0021           movs r1, 0
|   :||||   0x080043ae      8df80410       strb.w r1, [sp, 4]
|   :||||   0x080043b2      0221           movs r1, 2                  ; 2
|   :||||   0x080043b4      8df80710       strb.w r1, [sp, 7]
|   :||||   0x080043b8      0321           movs r1, 3                  ; 3
|   :||||   0x080043ba      8df80510       strb.w r1, [sp, 5]
|   :||||   0x080043be      00a9           add r1, sp, 0
|   :||||   0x080043c0      50f83400       ldr.w r0, [r0, r4, lsl 3]
|   :||||   0x080043c4      02f0eafd       bl GPIO_Init
|   :||||   0x080043c8      e979           ldrb r1, [r5, 7]            ; EXTl number
|   :||||   0x080043ca      a879           ldrb r0, [r5, 6]            ; port
|   :||||   0x080043cc      02f042fe       bl SYSCFG_EXTILineConfig
|   :||||   0x080043d0      641c           adds r4, r4, 1
|   :||||      ; JMP XREF from 0x0800439e (_GPIO_Config)
|   :`----> 0x080043d2      052c           cmp r4, 5                   ; 5
|   `=====< 0x080043d4      e4db           blt 0x80043a0
\     |||   0x080043d6      37bd           pop {r0, r1, r2, r4, r5, pc}
\     |||   ;-- GPIO_HighSpeedSet:
/ (fcn) _GPIO_HighSpeedSet 222
|       Caller: _KBD_PWRManage
|   _GPIO_HighSpeedSet ();
|     |||      ; CALL XREF from 0x08008de8 (_KBD_PWRManage)
|     |||   0x080043d8      30b5           push {r4, r5, lr}
|     |||   0x080043da      83b0           sub sp, 0xc                 ; Li-Ion charger pin
|     |||   0x080043dc      dff88049       ldr.w r4, [0x08004d60]      ; [0x8004d60:4]=0x20000710
|     |||   0x080043e0      a088           ldrh r0, [r4, 4]
|     |||   0x080043e2      0090           str r0, [sp]
|     |||   0x080043e4      0020           movs r0, 0
|     |||   0x080043e6      8df80400       strb.w r0, [sp, 4]
|     |||   0x080043ea      0120           movs r0, 1                  ; 1 ; low speed
|     |||   0x080043ec      8df80700       strb.w r0, [sp, 7]
|     |||   0x080043f0      8df80500       strb.w r0, [sp, 5]
|     |||   0x080043f4      00a9           add r1, sp, 0
|     |||   0x080043f6      2068           ldr r0, [r4]
|     |||   0x080043f8      02f0d0fd       bl GPIO_Init
|     |||   0x080043fc      e179           ldrb r1, [r4, 7]
|     |||   0x080043fe      a079           ldrb r0, [r4, 6]
|     |||   0x08004400      02f028fe       bl SYSCFG_EXTILineConfig    ; BLE P1_0
|     |||   0x08004404      dff85c09       ldr.w r0, [0x08004d64]      ; [0x8004d64:4]=0x20000700
|     |||   0x08004408      8188           ldrh r1, [r0, 4]
|     |||   0x0800440a      0091           str r1, [sp]
|     |||   0x0800440c      0121           movs r1, 1                  ; 1
|     |||   0x0800440e      8df80410       strb.w r1, [sp, 4]
|     |||   0x08004412      0021           movs r1, 0
|     |||   0x08004414      8df80610       strb.w r1, [sp, 6]
|     |||   0x08004418      0321           movs r1, 3                  ; 3 ; high speed
|     |||   0x0800441a      8df80510       strb.w r1, [sp, 5]
|     |||   0x0800441e      00a9           add r1, sp, 0
|     |||   0x08004420      0068           ldr r0, [r0]
|     |||   0x08004422      02f0bbfd       bl GPIO_Init
|     |||   0x08004426      dff8c809       ldr.w r0, [0x08004df0]      ; [0x8004df0:4]=0x20000708 ; LED WKUP2
|     |||   0x0800442a      8188           ldrh r1, [r0, 4]
|     |||   0x0800442c      0091           str r1, [sp]
|     |||   0x0800442e      0121           movs r1, 1                  ; 1
|     |||   0x08004430      8df80410       strb.w r1, [sp, 4]
|     |||   0x08004434      0021           movs r1, 0
|     |||   0x08004436      8df80610       strb.w r1, [sp, 6]
|     |||   0x0800443a      0321           movs r1, 3                  ; 3 ; high speed
|     |||   0x0800443c      8df80510       strb.w r1, [sp, 5]
|     |||   0x08004440      00a9           add r1, sp, 0
|     |||   0x08004442      0068           ldr r0, [r0]
|     |||   0x08004444      02f0aafd       bl GPIO_Init
|     |||   0x08004448      0024           movs r4, 0
|    ,====< 0x0800444a      14e0           b 0x8004476
|    ||||      ; JMP XREF from 0x08004478 (_GPIO_HighSpeedSet)
|   .-----> 0x0800444c      dff8a409       ldr.w r0, [0x08004df4]      ; [0x8004df4:4]=0x20000588 ; columns
|   :||||   0x08004450      00ebc401       add.w r1, r0, r4, lsl 3
|   :||||   0x08004454      8988           ldrh r1, [r1, 4]
|   :||||   0x08004456      0091           str r1, [sp]
|   :||||   0x08004458      0121           movs r1, 1                  ; 1
|   :||||   0x0800445a      8df80410       strb.w r1, [sp, 4]
|   :||||   0x0800445e      0021           movs r1, 0
|   :||||   0x08004460      8df80610       strb.w r1, [sp, 6]
|   :||||   0x08004464      0321           movs r1, 3                  ; 3
|   :||||   0x08004466      8df80510       strb.w r1, [sp, 5]
|   :||||   0x0800446a      00a9           add r1, sp, 0
|   :||||   0x0800446c      50f83400       ldr.w r0, [r0, r4, lsl 3]
|   :||||   0x08004470      02f094fd       bl GPIO_Init
|   :||||   0x08004474      641c           adds r4, r4, 1
|   :||||      ; JMP XREF from 0x0800444a (_GPIO_HighSpeedSet)
|   :`----> 0x08004476      0e2c           cmp r4, 0xe                 ; 14
|   `=====< 0x08004478      e8db           blt 0x800444c
|     |||   0x0800447a      0024           movs r4, 0
|    ,====< 0x0800447c      18e0           b 0x80044b0
|    ||||      ; JMP XREF from 0x080044b2 (_GPIO_HighSpeedSet)
|   .-----> 0x0800447e      dff87809       ldr.w r0, [0x08004df8]      ; [0x8004df8:4]=0x20000628 ; rows
|   :||||   0x08004482      00ebc405       add.w r5, r0, r4, lsl 3
|   :||||   0x08004486      a988           ldrh r1, [r5, 4]
|   :||||   0x08004488      0091           str r1, [sp]
|   :||||   0x0800448a      0021           movs r1, 0
|   :||||   0x0800448c      8df80410       strb.w r1, [sp, 4]
|   :||||   0x08004490      0221           movs r1, 2                  ; 2
|   :||||   0x08004492      8df80710       strb.w r1, [sp, 7]
|   :||||   0x08004496      0321           movs r1, 3                  ; 3 ; high speed
|   :||||   0x08004498      8df80510       strb.w r1, [sp, 5]
|   :||||   0x0800449c      00a9           add r1, sp, 0
|   :||||   0x0800449e      50f83400       ldr.w r0, [r0, r4, lsl 3]
|   :||||   0x080044a2      02f07bfd       bl GPIO_Init
|   :||||   0x080044a6      e979           ldrb r1, [r5, 7]
|   :||||   0x080044a8      a879           ldrb r0, [r5, 6]
|   :||||   0x080044aa      02f0d3fd       bl SYSCFG_EXTILineConfig
|   :||||   0x080044ae      641c           adds r4, r4, 1
|   :||||      ; JMP XREF from 0x0800447c (_GPIO_HighSpeedSet)
|   :`----> 0x080044b0      052c           cmp r4, 5                   ; 5
|   `=====< 0x080044b2      e4db           blt 0x800447e
\     |||   0x080044b4      37bd           pop {r0, r1, r2, r4, r5, pc}
\     |||   ;-- MatrixColumns_Set:
/ (fcn) _MatrixColumns_Set 32
|       Caller: _KBD_StateUpdate _KBD_Init _KBD_PWRManage _KBD_IdleFlagsUpdate
|   _MatrixColumns_Set ();
|     |||      ; CALL XREF from 0x08004102 (_KBD_Init)
|     |||      ; CALL XREF from 0x080086a0 (_KBD_StateUpdate)
|     |||      ; CALL XREF from 0x080087fa (_KBD_IdleFlagsUpdate)
|     |||      ; CALL XREF from 0x08008df0 (_KBD_PWRManage)
|     |||   0x080044b6      10b5           push {r4, lr}               ; set port pins: ADDR:BITS_TO_SET
|     |||   0x080044b8      0024           movs r4, 0                  ; 14 pins to set in total, see 0x20000588
|    ,====< 0x080044ba      09e0           b 0x80044d0
|    ||||      ; JMP XREF from 0x080044d2 (_MatrixColumns_Set)
|   .-----> 0x080044bc      dff83409       ldr.w r0, [0x08004df4]      ; [0x8004df4:4]=0x20000588
|   :||||   0x080044c0      00ebc401       add.w r1, r0, r4, lsl 3
|   :||||   0x080044c4      8988           ldrh r1, [r1, 4]
|   :||||   0x080044c6      50f83400       ldr.w r0, [r0, r4, lsl 3]
|   :||||   0x080044ca      02f0a6fd       bl GPIO_SetBits
|   :||||   0x080044ce      641c           adds r4, r4, 1
|   :||||      ; JMP XREF from 0x080044ba (_MatrixColumns_Set)
|   :`----> 0x080044d0      0e2c           cmp r4, 0xe                 ; 14
|   `=====< 0x080044d2      f3db           blt 0x80044bc
\     |||   0x080044d4      10bd           pop {r4, pc}
\     |||   ;-- KBD_WKUPInterruptsEnable_2:
/ (fcn) _KBD_WKUPInterruptsEnable_2 310
|       Caller: _KBD_PWRManage
|   _KBD_WKUPInterruptsEnable_2 ();
|     |||      ; CALL XREF from 0x08008dec (_KBD_PWRManage)
|     |||   0x080044d6      e0b5           push {r5, r6, r7, lr}
|     |||   0x080044d8      4ff40040       mov.w r0, 0x8000
|     |||   0x080044dc      02f00bfe       bl EXTI_ClearITPendingBit
|     |||   0x080044e0      4ff40040       mov.w r0, 0x8000
|     |||   0x080044e4      0190           str r0, [sp, 4]
|     |||   0x080044e6      0020           movs r0, 0
|     |||   0x080044e8      8df80800       strb.w r0, [sp, 8]
|     |||   0x080044ec      1020           movs r0, 0x10               ; 16
|     |||   0x080044ee      8df80900       strb.w r0, [sp, 9]
|     |||   0x080044f2      0120           movs r0, 1                  ; 1
|     |||   0x080044f4      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x080044f8      01a8           add r0, sp, 4
|     |||   0x080044fa      02f0bffd       bl EXTI_Init
|     |||   0x080044fe      4ff40070       mov.w r0, 0x200             ; 512
|     |||   0x08004502      02f0f8fd       bl EXTI_ClearITPendingBit
|     |||   0x08004506      4ff40070       mov.w r0, 0x200             ; 512
|     |||   0x0800450a      0190           str r0, [sp, 4]
|     |||   0x0800450c      0020           movs r0, 0
|     |||   0x0800450e      8df80800       strb.w r0, [sp, 8]
|     |||   0x08004512      1020           movs r0, 0x10               ; 16
|     |||   0x08004514      8df80900       strb.w r0, [sp, 9]
|     |||   0x08004518      0120           movs r0, 1                  ; 1
|     |||   0x0800451a      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x0800451e      01a8           add r0, sp, 4
|     |||   0x08004520      02f0acfd       bl EXTI_Init
|     |||   0x08004524      4ff48070       mov.w r0, 0x100             ; 256
|     |||   0x08004528      02f0e5fd       bl EXTI_ClearITPendingBit
|     |||   0x0800452c      4ff48070       mov.w r0, 0x100             ; 256
|     |||   0x08004530      0190           str r0, [sp, 4]
|     |||   0x08004532      0020           movs r0, 0
|     |||   0x08004534      8df80800       strb.w r0, [sp, 8]
|     |||   0x08004538      1020           movs r0, 0x10               ; 16
|     |||   0x0800453a      8df80900       strb.w r0, [sp, 9]
|     |||   0x0800453e      0120           movs r0, 1                  ; 1
|     |||   0x08004540      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x08004544      01a8           add r0, sp, 4
|     |||   0x08004546      02f099fd       bl EXTI_Init
|     |||   0x0800454a      8020           movs r0, 0x80               ; 128
|     |||   0x0800454c      02f0d3fd       bl EXTI_ClearITPendingBit
|     |||   0x08004550      8020           movs r0, 0x80               ; 128
|     |||   0x08004552      0190           str r0, [sp, 4]
|     |||   0x08004554      0020           movs r0, 0
|     |||   0x08004556      8df80800       strb.w r0, [sp, 8]
|     |||   0x0800455a      1020           movs r0, 0x10               ; 16
|     |||   0x0800455c      8df80900       strb.w r0, [sp, 9]
|     |||   0x08004560      0120           movs r0, 1                  ; 1
|     |||   0x08004562      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x08004566      01a8           add r0, sp, 4
|     |||   0x08004568      02f088fd       bl EXTI_Init
|     |||   0x0800456c      4020           movs r0, 0x40               ; '@' ; 64
|     |||   0x0800456e      02f0c2fd       bl EXTI_ClearITPendingBit
|     |||   0x08004572      4020           movs r0, 0x40               ; '@' ; 64
|     |||   0x08004574      0190           str r0, [sp, 4]
|     |||   0x08004576      0020           movs r0, 0
|     |||   0x08004578      8df80800       strb.w r0, [sp, 8]
|     |||   0x0800457c      1020           movs r0, 0x10               ; 16
|     |||   0x0800457e      8df80900       strb.w r0, [sp, 9]
|     |||   0x08004582      0120           movs r0, 1                  ; 1
|     |||   0x08004584      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x08004588      01a8           add r0, sp, 4
|     |||   0x0800458a      02f077fd       bl EXTI_Init
|     |||   0x0800458e      0120           movs r0, 1                  ; 1
|     |||   0x08004590      02f0b1fd       bl EXTI_ClearITPendingBit
|     |||   0x08004594      0120           movs r0, 1                  ; 1
|     |||   0x08004596      0190           str r0, [sp, 4]
|     |||   0x08004598      0020           movs r0, 0
|     |||   0x0800459a      8df80800       strb.w r0, [sp, 8]
|     |||   0x0800459e      1020           movs r0, 0x10               ; 16
|     |||   0x080045a0      8df80900       strb.w r0, [sp, 9]
|     |||   0x080045a4      0120           movs r0, 1                  ; 1
|     |||   0x080045a6      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x080045aa      01a8           add r0, sp, 4
|     |||   0x080045ac      02f066fd       bl EXTI_Init
|     |||   0x080045b0      0620           movs r0, 6                  ; 6
|     |||   0x080045b2      8df80000       strb.w r0, [sp]
|     |||   0x080045b6      0020           movs r0, 0
|     |||   0x080045b8      8df80100       strb.w r0, [sp, 1]
|     |||   0x080045bc      0f20           movs r0, 0xf                ; 15
|     |||   0x080045be      8df80200       strb.w r0, [sp, 2]
|     |||   0x080045c2      0120           movs r0, 1                  ; 1
|     |||   0x080045c4      8df80300       strb.w r0, [sp, 3]
|     |||   0x080045c8      00a8           add r0, sp, 0
|     |||   0x080045ca      02f0a0fc       bl NVIC_Init
|     |||   0x080045ce      1720           movs r0, 0x17               ; 23
|     |||   0x080045d0      8df80000       strb.w r0, [sp]
|     |||   0x080045d4      0020           movs r0, 0
|     |||   0x080045d6      8df80100       strb.w r0, [sp, 1]
|     |||   0x080045da      0f20           movs r0, 0xf                ; 15
|     |||   0x080045dc      8df80200       strb.w r0, [sp, 2]
|     |||   0x080045e0      0120           movs r0, 1                  ; 1
|     |||   0x080045e2      8df80300       strb.w r0, [sp, 3]
|     |||   0x080045e6      00a8           add r0, sp, 0
|     |||   0x080045e8      02f091fc       bl NVIC_Init
|     |||   0x080045ec      2820           movs r0, 0x28               ; '(' ; 40
|     |||   0x080045ee      8df80000       strb.w r0, [sp]
|     |||   0x080045f2      0020           movs r0, 0
|     |||   0x080045f4      8df80100       strb.w r0, [sp, 1]
|     |||   0x080045f8      0f20           movs r0, 0xf                ; 15
|     |||   0x080045fa      8df80200       strb.w r0, [sp, 2]
|     |||   0x080045fe      0120           movs r0, 1                  ; 1
|     |||   0x08004600      8df80300       strb.w r0, [sp, 3]
|     |||   0x08004604      00a8           add r0, sp, 0
|     |||   0x08004606      02f082fc       bl NVIC_Init
\     |||   0x0800460a      07bd           pop {r0, r1, r2, pc}
\     |||   ;-- KBD_USBPlugCheck:
/ (fcn) _KBD_USBPlugCheck 42
|       Caller: _KBD_PWRManage
|   _KBD_USBPlugCheck ();
|     |||      ; CALL XREF from 0x08008d9e (_KBD_PWRManage)
|     |||   0x0800460c      80b5           push {r7, lr}
|     |||   0x0800460e      dff85007       ldr.w r0, [0x08004d60]      ; [0x8004d60:4]=0x20000710
|     |||   0x08004612      8188           ldrh r1, [r0, 4]
|     |||   0x08004614      0068           ldr r0, [r0]
|     |||   0x08004616      02f0f2fc       bl GPIO_ReadInputDataBit
|     |||   0x0800461a      dff8a016       ldr.w r1, [0x08004cbc]      ; [0x8004cbc:4]=0x20000768
|     |||   0x0800461e      0a7e           ldrb r2, [r1, 0x18]
|     |||   0x08004620      9042           cmp r0, r2
|    ,====< 0x08004622      07d0           beq 0x8004634
|    ||||   0x08004624      0876           strb r0, [r1, 0x18]         ; Update USB_Plugged flag
|    ||||   0x08004626      0128           cmp r0, 1                   ; 1
|   ,=====< 0x08004628      02d1           bne 0x8004630
|   |||||   0x0800462a      0020           movs r0, 0
|   |||||   0x0800462c      c875           strb r0, [r1, 0x17]         ; update PWR_SaveMode flag
|   |||||   0x0800462e      01bd           pop {r0, pc}
|   |||||      ; JMP XREF from 0x08004628 (_KBD_USBPlugCheck)
|   `-----> 0x08004630      0120           movs r0, 1                  ; 1
|    ||||   0x08004632      c875           strb r0, [r1, 0x17]
|    ||||      ; JMP XREF from 0x08004622 (_KBD_USBPlugCheck)
\    `----> 0x08004634      01bd           pop {r0, pc}
\     |||   ;-- USB_PA11_12_Config:
/ (fcn) _USB_PA11_12_Config 186
|       Caller: _KBD_PWRManage
|   _USB_PA11_12_Config ();
|     |||      ; CALL XREF from 0x08008da8 (_KBD_PWRManage)
|     |||   0x08004636      30b5           push {r4, r5, lr}
|     |||   0x08004638      83b0           sub sp, 0xc
|     |||   0x0800463a      dff8a84b       ldr.w r4, [0x080051e4]      ; [0x80051e4:4]=0x200006e8
|     |||   0x0800463e      a088           ldrh r0, [r4, 4]            ; Port A pin 11
|     |||   0x08004640      0090           str r0, [sp]
|     |||   0x08004642      0120           movs r0, 1                  ; 1 ; output
|     |||   0x08004644      8df80400       strb.w r0, [sp, 4]
|     |||   0x08004648      0020           movs r0, 0                  ; otype
|     |||   0x0800464a      8df80600       strb.w r0, [sp, 6]
|     |||   0x0800464e      0220           movs r0, 2                  ; 2 ; speed
|     |||   0x08004650      8df80500       strb.w r0, [sp, 5]
|     |||   0x08004654      00a9           add r1, sp, 0
|     |||   0x08004656      2068           ldr r0, [r4]
|     |||   0x08004658      02f0a0fc       bl GPIO_Init
|     |||   0x0800465c      208a           ldrh r0, [r4, 0x10]         ; pin 12
|     |||   0x0800465e      0090           str r0, [sp]
|     |||   0x08004660      0020           movs r0, 0
|     |||   0x08004662      8df80400       strb.w r0, [sp, 4]          ; input
|     |||   0x08004666      8df80700       strb.w r0, [sp, 7]          ; pupd
|     |||   0x0800466a      0220           movs r0, 2                  ; 2 ; speed
|     |||   0x0800466c      8df80500       strb.w r0, [sp, 5]
|     |||   0x08004670      00a9           add r1, sp, 0
|     |||   0x08004672      e068           ldr r0, [r4, 0xc]
|     |||   0x08004674      02f092fc       bl GPIO_Init
|     |||   0x08004678      0122           movs r2, 1                  ; 1
|     |||   0x0800467a      a188           ldrh r1, [r4, 4]
|     |||   0x0800467c      2068           ldr r0, [r4]
|     |||   0x0800467e      02f0d0fc       bl GPIO_WriteBit            ; do a write 1 test, Input pin should mirror output pin
|     |||   0x08004682      1420           movs r0, 0x14               ; 20
|     |||   0x08004684      02f058fd       bl _Wait_AHBby8
|     |||   0x08004688      218a           ldrh r1, [r4, 0x10]
|     |||   0x0800468a      e068           ldr r0, [r4, 0xc]
|     |||   0x0800468c      02f0b7fc       bl GPIO_ReadInputDataBit
|     |||   0x08004690      0546           mov r5, r0
|     |||   0x08004692      0022           movs r2, 0
|     |||   0x08004694      a188           ldrh r1, [r4, 4]
|     |||   0x08004696      2068           ldr r0, [r4]
|     |||   0x08004698      02f0c3fc       bl GPIO_WriteBit            ; do a write 0 test
|     |||   0x0800469c      1420           movs r0, 0x14               ; 20
|     |||   0x0800469e      02f04bfd       bl _Wait_AHBby8
|     |||   0x080046a2      218a           ldrh r1, [r4, 0x10]
|     |||   0x080046a4      e068           ldr r0, [r4, 0xc]
|     |||   0x080046a6      02f0aafc       bl GPIO_ReadInputDataBit
|     |||   0x080046aa      012d           cmp r5, 1                   ; 1
|    ,====< 0x080046ac      01d1           bne 0x80046b2
|    ||||   0x080046ae      0028           cmp r0, 0
|   ,=====< 0x080046b0      1ad0           beq 0x80046e8
|   |||||      ; JMP XREF from 0x080046ac (_USB_PA11_12_Config)
|   |`----> 0x080046b2      a088           ldrh r0, [r4, 4]
|   | |||   0x080046b4      0090           str r0, [sp]
|   | |||   0x080046b6      0020           movs r0, 0
|   | |||   0x080046b8      8df80400       strb.w r0, [sp, 4]
|   | |||   0x080046bc      8df80700       strb.w r0, [sp, 7]
|   | |||   0x080046c0      0220           movs r0, 2                  ; 2
|   | |||   0x080046c2      8df80500       strb.w r0, [sp, 5]
|   | |||   0x080046c6      00a9           add r1, sp, 0
|   | |||   0x080046c8      2068           ldr r0, [r4]
|   | |||   0x080046ca      02f067fc       bl GPIO_Init                ; set portA pin 11 as an input instead of an output
|   | |||   0x080046ce      a188           ldrh r1, [r4, 4]
|   | |||   0x080046d0      2068           ldr r0, [r4]
|   | |||   0x080046d2      02f094fc       bl GPIO_ReadInputDataBit
|   | |||   0x080046d6      0546           mov r5, r0
|   | |||   0x080046d8      218a           ldrh r1, [r4, 0x10]
|   | |||   0x080046da      e068           ldr r0, [r4, 0xc]
|   | |||   0x080046dc      02f08ffc       bl GPIO_ReadInputDataBit
|   | |||   0x080046e0      012d           cmp r5, 1                   ; 1
|   |,====< 0x080046e2      01d0           beq 0x80046e8
|   |||||   0x080046e4      0128           cmp r0, 1                   ; 1
|  ,======< 0x080046e6      01d1           bne 0x80046ec
|  ||||||      ; JMP XREF from 0x080046b0 (_USB_PA11_12_Config)
|  ||||||      ; JMP XREF from 0x080046e2 (_USB_PA11_12_Config)
|  |``----> 0x080046e8      0020           movs r0, 0
|  |  |||   0x080046ea      3ebd           pop {r1, r2, r3, r4, r5, pc}
|  |  |||      ; JMP XREF from 0x080046e6 (_USB_PA11_12_Config)
|  `------> 0x080046ec      0120           movs r0, 1                  ; 1
\     |||   0x080046ee      3ebd           pop {r1, r2, r3, r4, r5, pc}
\     |||   ;-- USB_DisconnectPinConfig:
/ (fcn) _USB_DisconnectPinConfig 52
|       Caller: _KBD_PWRManage
|   _USB_DisconnectPinConfig ();
|     |||      ; CALL XREF from 0x08008e1a (_KBD_PWRManage)
|     |||   0x080046f0      1cb5           push {r2, r3, r4, lr}       ; see hw_config.c Set_System()
|     |||   0x080046f2      dff86846       ldr.w r4, [0x08004d5c]      ; [0x8004d5c:4]=0x20000718
|     |||   0x080046f6      a088           ldrh r0, [r4, 4]            ; Port A pin 10
|     |||   0x080046f8      0090           str r0, [sp]
|     |||   0x080046fa      0120           movs r0, 1                  ; 1 ; mode
|     |||   0x080046fc      8df80400       strb.w r0, [sp, 4]
|     |||   0x08004700      0020           movs r0, 0                  ; otype
|     |||   0x08004702      adf80600       strh.w r0, [sp, 6]
|     |||   0x08004706      0120           movs r0, 1                  ; 1 ; speed low speed
|     |||   0x08004708      8df80500       strb.w r0, [sp, 5]
|     |||   0x0800470c      00a9           add r1, sp, 0
|     |||   0x0800470e      2068           ldr r0, [r4]
|     |||   0x08004710      02f044fc       bl GPIO_Init
|     |||   0x08004714      a088           ldrh r0, [r4, 4]
|     |||   0x08004716      2168           ldr r1, [r4]
|     |||   0x08004718      4883           strh r0, [r1, 0x1a]
|     |||   0x0800471a      4ff41670       mov.w r0, 0x258             ; 600
|     |||   0x0800471e      02f0f1fc       bl _Wait
\     |||   0x08004722      13bd           pop {r0, r1, r4, pc}
\     |||   ;-- USB_Interrupts_Config:
/ (fcn) _USB_Interrupts_Config 96
|       Caller: _KBD_PWRManage
|   _USB_Interrupts_Config ();
|     |||      ; CALL XREF from 0x08008e1e (_KBD_PWRManage)
|     |||   0x08004724      e0b5           push {r5, r6, r7, lr}       ; see hw_config.c
|     |||   0x08004726      4ff48020       mov.w r0, 0x40000           ; EXTl_Line18 connected to the USB device FS Wakeup from suspend event
|     |||   0x0800472a      02f0e4fc       bl EXTI_ClearITPendingBit
|     |||   0x0800472e      4ff48020       mov.w r0, 0x40000
|     |||   0x08004732      0190           str r0, [sp, 4]
|     |||   0x08004734      0820           movs r0, 8                  ; 8 ; EXTI_Trigger_Rising
|     |||   0x08004736      8df80900       strb.w r0, [sp, 9]
|     |||   0x0800473a      0120           movs r0, 1                  ; 1 ; Enable
|     |||   0x0800473c      8df80a00       strb.w r0, [sp, 0xa]
|     |||   0x08004740      01a8           add r0, sp, 4
|     |||   0x08004742      02f09bfc       bl EXTI_Init
|     |||   0x08004746      4ff4a060       mov.w r0, 0x500             ; 1280 ; NVIC_PriorityGroup_2: 2,2
|     |||   0x0800474a      02f0dbfb       bl NVIC_PriorityGroupConfig
|     |||   0x0800474e      1420           movs r0, 0x14               ; 20 ; USB_LP_IRQn
|     |||   0x08004750      8df80000       strb.w r0, [sp]
|     |||   0x08004754      0220           movs r0, 2                  ; 2 ; Preemption priority 2
|     |||   0x08004756      8df80100       strb.w r0, [sp, 1]
|     |||   0x0800475a      0020           movs r0, 0                  ; subpriority 0
|     |||   0x0800475c      8df80200       strb.w r0, [sp, 2]
|     |||   0x08004760      0120           movs r0, 1                  ; 1 ; enable
|     |||   0x08004762      8df80300       strb.w r0, [sp, 3]
|     |||   0x08004766      00a8           add r0, sp, 0
|     |||   0x08004768      02f0d1fb       bl NVIC_Init
|     |||   0x0800476c      2a20           movs r0, 0x2a               ; '*' ; 42 ; USB_FS_WKUP_IRQn USB FS wakeup through EXTl interrupt
|     |||   0x0800476e      8df80000       strb.w r0, [sp]
|     |||   0x08004772      0120           movs r0, 1                  ; 1
|     |||   0x08004774      8df80100       strb.w r0, [sp, 1]          ; prememption priority1, subpriority 0
|     |||   0x08004778      8df80300       strb.w r0, [sp, 3]          ; enable
|     |||   0x0800477c      00a8           add r0, sp, 0
|     |||   0x0800477e      02f0c6fb       bl NVIC_Init
\     |||   0x08004782      07bd           pop {r0, r1, r2, pc}
\     |||   ;-- USB_Set_USBClock:
/ (fcn) _USB_Set_USBClock 10
|       Caller: _KBD_PWRManage
|   _USB_Set_USBClock ();
|     |||      ; CALL XREF from 0x08008e22 (_KBD_PWRManage)
|     |||   0x08004784      0121           movs r1, 1                  ; 1 ; see hw_config.c
|     |||   0x08004786      4ff40000       mov.w r0, 0x800000
\    ,====< 0x0800478a      02f068ba       b.w RCC_APB1PeriphClockCmd
/ (fcn) IntToUnicode 48
|       Caller: USB_Get_SerialNum
|   IntToUnicode ();
|    ||||      ; JMP XREF from 0x08004cfe (USB_Get_SerialNum)
|    ||||      ; CALL XREF from 0x08004cee (USB_Get_SerialNum)
|   .-----> 0x0800478e      30b4           push {r4, r5}               ; r2: size, r1: where to store it, r0: number to convert
|   :||||   0x08004790      0023           movs r3, 0
|  ,======< 0x08004792      09e0           b 0x80047a8
|  |:||||      ; JMP XREF from 0x080047b0 (IntToUnicode)
| .-------> 0x08004794      3734           adds r4, 0x37
| :|:||||   0x08004796      01f81340       strb.w r4, [r1, r3, lsl 1]
| :|:||||      ; JMP XREF from 0x080047b8 (IntToUnicode)
| --------> 0x0800479a      0001           lsls r0, r0, 4
| :|:||||   0x0800479c      0024           movs r4, 0
| :|:||||   0x0800479e      01eb4305       add.w r5, r1, r3, lsl 1
| :|:||||   0x080047a2      6c70           strb r4, [r5, 1]
| :|:||||   0x080047a4      5b1c           adds r3, r3, 1
| :|:||||   0x080047a6      dbb2           uxtb r3, r3
| :|:||||      ; JMP XREF from 0x08004792 (IntToUnicode)
| :`------> 0x080047a8      9342           cmp r3, r2
| :,======< 0x080047aa      06da           bge 0x80047ba
| :|:||||   0x080047ac      040f           lsrs r4, r0, 0x1c
| :|:||||   0x080047ae      0a2c           cmp r4, 0xa                 ; 10
| `=======< 0x080047b0      f0d2           bhs 0x8004794
|  |:||||   0x080047b2      3034           adds r4, 0x30
|  |:||||   0x080047b4      01f81340       strb.w r4, [r1, r3, lsl 1]
| ========< 0x080047b8      efe7           b 0x800479a
|  |:||||      ; JMP XREF from 0x080047aa (IntToUnicode)
|  `------> 0x080047ba      30bc           pop {r4, r5}
\   :||||   0x080047bc      7047           bx lr
/ (fcn) fcn.080047be 174
|       Caller: fcn.08008ade
|   fcn.080047be ();
|   :||||      ; CALL XREF from 0x08008bd4 (fcn.08008ade)
|   :||||   0x080047be      30b4           push {r4, r5}
|   :||||   0x080047c0      85b0           sub sp, 0x14
|   :||||   0x080047c2      ca24           movs r4, 0xca               ; 202
|   :||||   0x080047c4      0470           strb r4, [r0]
|   :||||   0x080047c6      0424           movs r4, 4                  ; 4
|   :||||   0x080047c8      4470           strb r4, [r0, 1]
|   :||||   0x080047ca      0124           movs r4, 1                  ; 1
|   :||||   0x080047cc      8df80040       strb.w r4, [sp]
|   :||||   0x080047d0      00ac           add r4, sp, 0
|   :||||   0x080047d2      6170           strb r1, [r4, 1]
|   :||||   0x080047d4      a270           strb r2, [r4, 2]
|   :||||   0x080047d6      e370           strb r3, [r4, 3]
|   :||||   0x080047d8      0799           ldr r1, [sp, 0x1c]
|   :||||   0x080047da      2171           strb r1, [r4, 4]
|   :||||   0x080047dc      0221           movs r1, 2                  ; 2
|   :||||   0x080047de      6171           strb r1, [r4, 5]
|   :||||   0x080047e0      0899           ldr r1, [sp, 0x20]
|   :||||   0x080047e2      a171           strb r1, [r4, 6]
|   :||||   0x080047e4      0999           ldr r1, [sp, 0x24]
|   :||||   0x080047e6      8df80710       strb.w r1, [sp, 7]
|   :||||   0x080047ea      0a99           ldr r1, [sp, 0x28]
|   :||||   0x080047ec      8df80810       strb.w r1, [sp, 8]
|   :||||   0x080047f0      0b99           ldr r1, [sp, 0x2c]
|   :||||   0x080047f2      8df80910       strb.w r1, [sp, 9]
|   :||||   0x080047f6      0321           movs r1, 3                  ; 3
|   :||||   0x080047f8      8df80a10       strb.w r1, [sp, 0xa]
|   :||||   0x080047fc      0c99           ldr r1, [sp, 0x30]
|   :||||   0x080047fe      8df80b10       strb.w r1, [sp, 0xb]
|   :||||   0x08004802      0d99           ldr r1, [sp, 0x34]
|   :||||   0x08004804      8df80c10       strb.w r1, [sp, 0xc]
|   :||||   0x08004808      0e99           ldr r1, [sp, 0x38]
|   :||||   0x0800480a      8df80d10       strb.w r1, [sp, 0xd]
|   :||||   0x0800480e      0f99           ldr r1, [sp, 0x3c]
|   :||||   0x08004810      8df80e10       strb.w r1, [sp, 0xe]
|   :||||   0x08004814      0421           movs r1, 4                  ; 4
|   :||||   0x08004816      8df80f10       strb.w r1, [sp, 0xf]
|   :||||   0x0800481a      1099           ldr r1, [sp, 0x40]
|   :||||   0x0800481c      8df81010       strb.w r1, [sp, 0x10]
|   :||||   0x08004820      1199           ldr r1, [sp, 0x44]
|   :||||   0x08004822      8df81110       strb.w r1, [sp, 0x11]
|   :||||   0x08004826      1299           ldr r1, [sp, 0x48]
|   :||||   0x08004828      8df81210       strb.w r1, [sp, 0x12]
|   :||||   0x0800482c      1399           ldr r1, [sp, 0x4c]
|   :||||   0x0800482e      8df81310       strb.w r1, [sp, 0x13]
|   :||||   0x08004832      0021           movs r1, 0
|  ,======< 0x08004834      10e0           b 0x8004858
|  |:||||      ; JMP XREF from 0x0800485c (fcn.080047be)
| .-------> 0x08004836      01eb8102       add.w r2, r1, r1, lsl 2
| :|:||||   0x0800483a      1318           adds r3, r2, r0
| :|:||||   0x0800483c      155d           ldrb r5, [r2, r4]
| :|:||||   0x0800483e      9d70           strb r5, [r3, 2]
| :|:||||   0x08004840      00ad           add r5, sp, 0
| :|:||||   0x08004842      5219           adds r2, r2, r5
| :|:||||   0x08004844      5578           ldrb r5, [r2, 1]
| :|:||||   0x08004846      dd70           strb r5, [r3, 3]
| :|:||||   0x08004848      9578           ldrb r5, [r2, 2]
| :|:||||   0x0800484a      1d71           strb r5, [r3, 4]
| :|:||||   0x0800484c      d578           ldrb r5, [r2, 3]
| :|:||||   0x0800484e      5d71           strb r5, [r3, 5]
| :|:||||   0x08004850      1279           ldrb r2, [r2, 4]
| :|:||||   0x08004852      9a71           strb r2, [r3, 6]
| :|:||||   0x08004854      491c           adds r1, r1, 1
| :|:||||   0x08004856      c9b2           uxtb r1, r1
| :|:||||      ; JMP XREF from 0x08004834 (fcn.080047be)
| :`------> 0x08004858      4278           ldrb r2, [r0, 1]
| : :||||   0x0800485a      9142           cmp r1, r2
| `=======< 0x0800485c      ebdb           blt 0x8004836
|   :||||   0x0800485e      02eb8200       add.w r0, r2, r2, lsl 2
|   :||||   0x08004862      801c           adds r0, r0, 2
|   :||||   0x08004864      c0b2           uxtb r0, r0
|   :||||   0x08004866      05b0           add sp, 0x14
|   :||||   0x08004868      30bc           pop {r4, r5}
\   :||||   0x0800486a      7047           bx lr
\   :||||   ;-- LED_BLEStyleUpdate:
/ (fcn) _LED_BLEStyleUpdate 316
|       Caller: _BLE_CMDSend _MSG_HandleBLECMD
|   _LED_BLEStyleUpdate ();
|   :||||      ; XREFS: CALL 0x08004a5a  CALL 0x08004b2a  CALL 0x08004b9e  CALL 0x08004c12  CALL 0x08004c86  CALL 0x08005af6  
|   :||||   0x0800486c      30b4           push {r4, r5}
|   :||||   0x0800486e      8db0           sub sp, 0x34                ; '4'
|   :||||   0x08004870      ca24           movs r4, 0xca               ; 202
|   :||||   0x08004872      0470           strb r4, [r0]
|   :||||   0x08004874      0a24           movs r4, 0xa                ; 10
|   :||||   0x08004876      4470           strb r4, [r0, 1]
|   :||||   0x08004878      0024           movs r4, 0
|   :||||   0x0800487a      8df80040       strb.w r4, [sp]
|   :||||   0x0800487e      00ac           add r4, sp, 0
|   :||||   0x08004880      6170           strb r1, [r4, 1]
|   :||||   0x08004882      0df10105       add.w r5, sp, 1
|   :||||   0x08004886      6a70           strb r2, [r5, 1]
|   :||||   0x08004888      ab70           strb r3, [r5, 2]
|   :||||   0x0800488a      0f99           ldr r1, [sp, 0x3c]
|   :||||   0x0800488c      e970           strb r1, [r5, 3]
|   :||||   0x0800488e      0121           movs r1, 1                  ; 1
|   :||||   0x08004890      2971           strb r1, [r5, 4]
|   :||||   0x08004892      1099           ldr r1, [sp, 0x40]
|   :||||   0x08004894      6971           strb r1, [r5, 5]
|   :||||   0x08004896      1199           ldr r1, [sp, 0x44]
|   :||||   0x08004898      a971           strb r1, [r5, 6]
|   :||||   0x0800489a      1299           ldr r1, [sp, 0x48]
|   :||||   0x0800489c      e971           strb r1, [r5, 7]
|   :||||   0x0800489e      1399           ldr r1, [sp, 0x4c]
|   :||||   0x080048a0      2972           strb r1, [r5, 8]
|   :||||   0x080048a2      0221           movs r1, 2                  ; 2
|   :||||   0x080048a4      6972           strb r1, [r5, 9]
|   :||||   0x080048a6      1499           ldr r1, [sp, 0x50]
|   :||||   0x080048a8      a972           strb r1, [r5, 0xa]
|   :||||   0x080048aa      1599           ldr r1, [sp, 0x54]
|   :||||   0x080048ac      e972           strb r1, [r5, 0xb]
|   :||||   0x080048ae      1699           ldr r1, [sp, 0x58]
|   :||||   0x080048b0      2973           strb r1, [r5, 0xc]
|   :||||   0x080048b2      1799           ldr r1, [sp, 0x5c]
|   :||||   0x080048b4      6973           strb r1, [r5, 0xd]
|   :||||   0x080048b6      0321           movs r1, 3                  ; 3
|   :||||   0x080048b8      a973           strb r1, [r5, 0xe]
|   :||||   0x080048ba      1899           ldr r1, [sp, 0x60]
|   :||||   0x080048bc      e973           strb r1, [r5, 0xf]
|   :||||   0x080048be      1999           ldr r1, [sp, 0x64]
|   :||||   0x080048c0      2974           strb r1, [r5, 0x10]
|   :||||   0x080048c2      1a99           ldr r1, [sp, 0x68]
|   :||||   0x080048c4      6974           strb r1, [r5, 0x11]
|   :||||   0x080048c6      1b99           ldr r1, [sp, 0x6c]
|   :||||   0x080048c8      a974           strb r1, [r5, 0x12]
|   :||||   0x080048ca      0421           movs r1, 4                  ; 4
|   :||||   0x080048cc      e974           strb r1, [r5, 0x13]
|   :||||   0x080048ce      1c99           ldr r1, [sp, 0x70]
|   :||||   0x080048d0      2975           strb r1, [r5, 0x14]
|   :||||   0x080048d2      1d99           ldr r1, [sp, 0x74]
|   :||||   0x080048d4      6975           strb r1, [r5, 0x15]
|   :||||   0x080048d6      1e99           ldr r1, [sp, 0x78]
|   :||||   0x080048d8      a975           strb r1, [r5, 0x16]
|   :||||   0x080048da      1f99           ldr r1, [sp, 0x7c]
|   :||||   0x080048dc      e975           strb r1, [r5, 0x17]
|   :||||   0x080048de      0c21           movs r1, 0xc                ; 12
|   :||||   0x080048e0      2976           strb r1, [r5, 0x18]
|   :||||   0x080048e2      2099           ldr r1, [sp, 0x80]
|   :||||   0x080048e4      6976           strb r1, [r5, 0x19]
|   :||||   0x080048e6      2199           ldr r1, [sp, 0x84]
|   :||||   0x080048e8      a976           strb r1, [r5, 0x1a]
|   :||||   0x080048ea      2299           ldr r1, [sp, 0x88]
|   :||||   0x080048ec      e976           strb r1, [r5, 0x1b]
|   :||||   0x080048ee      2399           ldr r1, [sp, 0x8c]
|   :||||   0x080048f0      2977           strb r1, [r5, 0x1c]
|   :||||   0x080048f2      2f21           movs r1, 0x2f               ; '/' ; 47
|   :||||   0x080048f4      6977           strb r1, [r5, 0x1d]
|   :||||   0x080048f6      2499           ldr r1, [sp, 0x90]
|   :||||   0x080048f8      a977           strb r1, [r5, 0x1e]
|   :||||   0x080048fa      2599           ldr r1, [sp, 0x94]
|   :||||   0x080048fc      e977           strb r1, [r5, 0x1f]
|   :||||   0x080048fe      2699           ldr r1, [sp, 0x98]
|   :||||   0x08004900      84f82110       strb.w r1, [r4, 0x21]
|   :||||   0x08004904      0df12102       add.w r2, sp, 0x21
|   :||||   0x08004908      2799           ldr r1, [sp, 0x9c]
|   :||||   0x0800490a      5170           strb r1, [r2, 1]
|   :||||   0x0800490c      0b21           movs r1, 0xb                ; 11
|   :||||   0x0800490e      9170           strb r1, [r2, 2]
|   :||||   0x08004910      ff21           movs r1, 0xff               ; 255
|   :||||   0x08004912      d170           strb r1, [r2, 3]
|   :||||   0x08004914      0023           movs r3, 0
|   :||||   0x08004916      1371           strb r3, [r2, 4]
|   :||||   0x08004918      5371           strb r3, [r2, 5]
|   :||||   0x0800491a      0123           movs r3, 1                  ; 1
|   :||||   0x0800491c      9371           strb r3, [r2, 6]
|   :||||   0x0800491e      0a23           movs r3, 0xa                ; 10
|   :||||   0x08004920      d371           strb r3, [r2, 7]
|   :||||   0x08004922      dff89833       ldr.w r3, [0x08004cbc]      ; [0x8004cbc:4]=0x20000768
|   :||||   0x08004926      93f86530       ldrb.w r3, [r3, 0x65]       ; 0x200007cd BLE_COMP_MODE
|   :||||   0x0800492a      002b           cmp r3, 0
|  ,======< 0x0800492c      04d1           bne 0x8004938
|  |:||||   0x0800492e      0023           movs r3, 0
|  |:||||   0x08004930      1372           strb r3, [r2, 8]            ; normal mode: 00 ff 00
|  |:||||   0x08004932      5172           strb r1, [r2, 9]
|  |:||||   0x08004934      9372           strb r3, [r2, 0xa]
| ,=======< 0x08004936      03e0           b 0x8004940
| ||:||||      ; JMP XREF from 0x0800492c (_LED_BLEStyleUpdate)
| |`------> 0x08004938      1172           strb r1, [r2, 8]            ; compatibility mode: ff ff 00
| | :||||   0x0800493a      5172           strb r1, [r2, 9]
| | :||||   0x0800493c      0023           movs r3, 0
| | :||||   0x0800493e      9372           strb r3, [r2, 0xa]
| | :||||      ; JMP XREF from 0x08004936 (_LED_BLEStyleUpdate)
| `-------> 0x08004940      0123           movs r3, 1                  ; 1
|   :||||   0x08004942      d372           strb r3, [r2, 0xb]
|   :||||   0x08004944      1d23           movs r3, 0x1d               ; 29
|   :||||   0x08004946      1373           strb r3, [r2, 0xc]
|   :||||   0x08004948      db4b           ldr r3, [0x08004cb8]        ; [0x8004cb8:4]=0x200017a8
|   :||||   0x0800494a      93f8ee30       ldrb.w r3, [r3, 0xee]       ; 0x20001896 AUTO_PWROFF
|   :||||   0x0800494e      012b           cmp r3, 1                   ; 1
|  ,======< 0x08004950      01d1           bne 0x8004956
|  |:||||   0x08004952      5173           strb r1, [r2, 0xd]          ; auto power off: ff
| ,=======< 0x08004954      01e0           b 0x800495a
| ||:||||      ; JMP XREF from 0x08004950 (_LED_BLEStyleUpdate)
| |`------> 0x08004956      0025           movs r5, 0
| | :||||   0x08004958      5573           strb r5, [r2, 0xd]          ; no auto power off: 00
| | :||||      ; JMP XREF from 0x08004954 (_LED_BLEStyleUpdate)
| `-------> 0x0800495a      012b           cmp r3, 1                   ; 1
|  ,======< 0x0800495c      02d1           bne 0x8004964
|  |:||||   0x0800495e      0021           movs r1, 0
|  |:||||   0x08004960      9173           strb r1, [r2, 0xe]          ; auto power off: 00
| ,=======< 0x08004962      00e0           b 0x8004966
| ||:||||      ; JMP XREF from 0x0800495c (_LED_BLEStyleUpdate)
| |`------> 0x08004964      9173           strb r1, [r2, 0xe]          ; no auto power off: ff
| | :||||      ; JMP XREF from 0x08004962 (_LED_BLEStyleUpdate)
| `-------> 0x08004966      0021           movs r1, 0
|   :||||   0x08004968      d173           strb r1, [r2, 0xf]
|   :||||   0x0800496a      0121           movs r1, 1                  ; 1
|   :||||   0x0800496c      1174           strb r1, [r2, 0x10]
|   :||||   0x0800496e      0021           movs r1, 0
|  ,======< 0x08004970      10e0           b 0x8004994
|  |:||||      ; JMP XREF from 0x08004998 (_LED_BLEStyleUpdate)
| .-------> 0x08004972      01eb8102       add.w r2, r1, r1, lsl 2
| :|:||||   0x08004976      1318           adds r3, r2, r0
| :|:||||   0x08004978      155d           ldrb r5, [r2, r4]
| :|:||||   0x0800497a      9d70           strb r5, [r3, 2]
| :|:||||   0x0800497c      00ad           add r5, sp, 0
| :|:||||   0x0800497e      5219           adds r2, r2, r5
| :|:||||   0x08004980      5578           ldrb r5, [r2, 1]
| :|:||||   0x08004982      dd70           strb r5, [r3, 3]
| :|:||||   0x08004984      9578           ldrb r5, [r2, 2]
| :|:||||   0x08004986      1d71           strb r5, [r3, 4]
| :|:||||   0x08004988      d578           ldrb r5, [r2, 3]
| :|:||||   0x0800498a      5d71           strb r5, [r3, 5]
| :|:||||   0x0800498c      1279           ldrb r2, [r2, 4]
| :|:||||   0x0800498e      9a71           strb r2, [r3, 6]
| :|:||||   0x08004990      491c           adds r1, r1, 1
| :|:||||   0x08004992      c9b2           uxtb r1, r1
| :|:||||      ; JMP XREF from 0x08004970 (_LED_BLEStyleUpdate)
| :`------> 0x08004994      4278           ldrb r2, [r0, 1]
| : :||||   0x08004996      9142           cmp r1, r2
| `=======< 0x08004998      ebdb           blt 0x8004972
|   :||||   0x0800499a      02eb8200       add.w r0, r2, r2, lsl 2
|   :||||   0x0800499e      801c           adds r0, r0, 2
|   :||||   0x080049a0      c0b2           uxtb r0, r0
|   :||||   0x080049a2      0db0           add sp, 0x34
|   :||||   0x080049a4      30bc           pop {r4, r5}
\   :||||   0x080049a6      7047           bx lr
    :||||   0x080049a8      0000           movs r0, r0
    :||||   0x080049aa      0000           movs r0, r0
    :||||      ; DATA XREF from 0x0800410a (_KBD_Init)
    :||||   0x080049ac      .dword 0x08080100
|   :||||   ;-- BLE_CMDSend:
/ (fcn) _BLE_CMDSend 756
|       Caller: _KBD_KeyStrokeHandle
|   _BLE_CMDSend ();
|   :||||      ; CALL XREF from 0x0800870c (_KBD_KeyStrokeHandle)
|   :||||   0x080049b0      30b5           push {r4, r5, lr}
|   :||||   0x080049b2      99b0           sub sp, 0x64                ; 'd'
|   :||||   0x080049b4      0025           movs r5, 0
|   :||||   0x080049b6      0228           cmp r0, 2                   ; 2 ; BLE_OFF
|  ,======< 0x080049b8      08d0           beq 0x80049cc
|  |:||||   0x080049ba      0328           cmp r0, 3                   ; 3 ; BLE_SAVE_HOST
| ,=======< 0x080049bc      5ad0           beq 0x8004a74
| ||:||||   0x080049be      0428           cmp r0, 4                   ; 4 ; BLE_CONNECT_HOST
| ========< 0x080049c0      70d0           beq 0x8004aa4
| ||:||||   0x080049c2      0728           cmp r0, 7                   ; 7 ; BLE_BROADCAST
| ========< 0x080049c4      0cd0           beq 0x80049e0
| ||:||||   0x080049c6      0c28           cmp r0, 0xc                 ; 12 ; BLE_COMP_MODE
| ========< 0x080049c8      60d0           beq 0x8004a8c
| ========< 0x080049ca      69e1           b 0x8004ca0
| ||:||||      ; JMP XREF from 0x080049b8 (_BLE_CMDSend)
| |`------> 0x080049cc      0220           movs r0, 2                  ; 2
| | :||||   0x080049ce      0190           str r0, [sp, 4]
| | :||||   0x080049d0      2846           mov r0, r5
| | :||||   0x080049d2      0090           str r0, [sp]
| | :||||   0x080049d4      0346           mov r3, r0
| | :||||   0x080049d6      0222           movs r2, 2                  ; 2
| | :||||   0x080049d8      0621           movs r1, 6                  ; 6
| | :||||   0x080049da      00f0e1fe       bl _MSG_CMDPrepareOrSend
| |,======< 0x080049de      5fe1           b 0x8004ca0
| ||:||||      ; JMP XREF from 0x080049c4 (_BLE_CMDSend)
| --------> 0x080049e0      0220           movs r0, 2                  ; 2
| ||:||||   0x080049e2      0190           str r0, [sp, 4]
| ||:||||   0x080049e4      2846           mov r0, r5
| ||:||||   0x080049e6      0090           str r0, [sp]
| ||:||||   0x080049e8      0346           mov r3, r0
| ||:||||   0x080049ea      0722           movs r2, 7                  ; 7
| ||:||||   0x080049ec      0621           movs r1, 6                  ; 6
| ||:||||   0x080049ee      00f0d7fe       bl _MSG_CMDPrepareOrSend
| ||:||||   0x080049f2      dff83048       ldr.w r4, [0x08005224]      ; [0x8005224:4]=0x200008d4
| ||:||||   0x080049f6      0220           movs r0, 2                  ; 2
| ||:||||   0x080049f8      1890           str r0, [sp, 0x60]
| ||:||||   0x080049fa      2846           mov r0, r5
| ||:||||   0x080049fc      1790           str r0, [sp, 0x5c]
| ||:||||   0x080049fe      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004a00      1690           str r0, [sp, 0x58]
| ||:||||   0x08004a02      2846           mov r0, r5
| ||:||||   0x08004a04      1590           str r0, [sp, 0x54]
| ||:||||   0x08004a06      0220           movs r0, 2                  ; 2
| ||:||||   0x08004a08      1490           str r0, [sp, 0x50]
| ||:||||   0x08004a0a      2846           mov r0, r5
| ||:||||   0x08004a0c      1390           str r0, [sp, 0x4c]
| ||:||||   0x08004a0e      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004a10      1290           str r0, [sp, 0x48]
| ||:||||   0x08004a12      2846           mov r0, r5
| ||:||||   0x08004a14      1190           str r0, [sp, 0x44]
| ||:||||   0x08004a16      0120           movs r0, 1                  ; 1
| ||:||||   0x08004a18      1090           str r0, [sp, 0x40]
| ||:||||   0x08004a1a      2846           mov r0, r5
| ||:||||   0x08004a1c      0f90           str r0, [sp, 0x3c]
| ||:||||   0x08004a1e      0e90           str r0, [sp, 0x38]
| ||:||||   0x08004a20      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004a22      0d90           str r0, [sp, 0x34]
| ||:||||   0x08004a24      0120           movs r0, 1                  ; 1
| ||:||||   0x08004a26      0c90           str r0, [sp, 0x30]
| ||:||||   0x08004a28      2846           mov r0, r5
| ||:||||   0x08004a2a      0b90           str r0, [sp, 0x2c]
| ||:||||   0x08004a2c      0a90           str r0, [sp, 0x28]
| ||:||||   0x08004a2e      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004a30      0990           str r0, [sp, 0x24]
| ||:||||   0x08004a32      0120           movs r0, 1                  ; 1
| ||:||||   0x08004a34      0890           str r0, [sp, 0x20]
| ||:||||   0x08004a36      2846           mov r0, r5
| ||:||||   0x08004a38      0790           str r0, [sp, 0x1c]
| ||:||||   0x08004a3a      0690           str r0, [sp, 0x18]
| ||:||||   0x08004a3c      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004a3e      0590           str r0, [sp, 0x14]
| ||:||||   0x08004a40      0120           movs r0, 1                  ; 1
| ||:||||   0x08004a42      0490           str r0, [sp, 0x10]
| ||:||||   0x08004a44      2846           mov r0, r5
| ||:||||   0x08004a46      0390           str r0, [sp, 0xc]
| ||:||||   0x08004a48      0290           str r0, [sp, 8]
| ||:||||   0x08004a4a      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004a4c      0190           str r0, [sp, 4]
| ||:||||   0x08004a4e      0120           movs r0, 1                  ; 1
| ||:||||   0x08004a50      0090           str r0, [sp]
| ||:||||   0x08004a52      2b46           mov r3, r5
| ||:||||   0x08004a54      ff22           movs r2, 0xff               ; 255
| ||:||||   0x08004a56      1146           mov r1, r2
| ||:||||   0x08004a58      2046           mov r0, r4
| ||:||||   0x08004a5a      fff707ff       bl _LED_BLEStyleUpdate
| ||:||||   0x08004a5e      0546           mov r5, r0
| ||:||||   0x08004a60      0320           movs r0, 3                  ; 3
| ||:||||   0x08004a62      0190           str r0, [sp, 4]
| ||:||||   0x08004a64      0095           str r5, [sp]
| ||:||||   0x08004a66      2346           mov r3, r4
| ||:||||   0x08004a68      0b22           movs r2, 0xb                ; 11
| ||:||||   0x08004a6a      0921           movs r1, 9                  ; 9
| ||:||||   0x08004a6c      0020           movs r0, 0
| ||:||||   0x08004a6e      00f097fe       bl _MSG_CMDPrepareOrSend
| ========< 0x08004a72      15e1           b 0x8004ca0
| ||:||||      ; JMP XREF from 0x080049bc (_BLE_CMDSend)
| `-------> 0x08004a74      0220           movs r0, 2                  ; 2
|  |:||||   0x08004a76      0190           str r0, [sp, 4]
|  |:||||   0x08004a78      0120           movs r0, 1                  ; 1
|  |:||||   0x08004a7a      0090           str r0, [sp]
|  |:||||   0x08004a7c      dff8a83a       ldr.w r3, [0x08005528]      ; [0x8005528:4]=0x2000192c
|  |:||||   0x08004a80      0322           movs r2, 3                  ; 3
|  |:||||   0x08004a82      0621           movs r1, 6                  ; 6
|  |:||||   0x08004a84      2846           mov r0, r5
|  |:||||   0x08004a86      00f08bfe       bl _MSG_CMDPrepareOrSend
| ,=======< 0x08004a8a      09e1           b 0x8004ca0
| ||:||||      ; JMP XREF from 0x080049c8 (_BLE_CMDSend)
| --------> 0x08004a8c      0220           movs r0, 2                  ; 2
| ||:||||   0x08004a8e      0190           str r0, [sp, 4]
| ||:||||   0x08004a90      0120           movs r0, 1                  ; 1
| ||:||||   0x08004a92      0090           str r0, [sp]
| ||:||||   0x08004a94      dff8903a       ldr.w r3, [0x08005528]      ; [0x8005528:4]=0x2000192c
| ||:||||   0x08004a98      0c22           movs r2, 0xc                ; 12
| ||:||||   0x08004a9a      0621           movs r1, 6                  ; 6
| ||:||||   0x08004a9c      2846           mov r0, r5
| ||:||||   0x08004a9e      00f07ffe       bl _MSG_CMDPrepareOrSend
| ========< 0x08004aa2      fde0           b 0x8004ca0
| ||:||||      ; JMP XREF from 0x080049c0 (_BLE_CMDSend)
| --------> 0x08004aa4      dff8804a       ldr.w r4, [0x08005528]      ; [0x8005528:4]=0x2000192c
| ||:||||   0x08004aa8      0220           movs r0, 2                  ; 2
| ||:||||   0x08004aaa      0190           str r0, [sp, 4]             ; 2 for BLE 3 for LED
| ||:||||   0x08004aac      0120           movs r0, 1                  ; 1
| ||:||||   0x08004aae      0090           str r0, [sp]                ; MSG_SIZE
| ||:||||   0x08004ab0      2346           mov r3, r4                  ; data
| ||:||||   0x08004ab2      0422           movs r2, 4                  ; 4 ; BLE_CONNECT_HOST
| ||:||||   0x08004ab4      0621           movs r1, 6                  ; 6 ; MSGTYPE_BLE
| ||:||||   0x08004ab6      2846           mov r0, r5                  ; no ACK
| ||:||||   0x08004ab8      00f072fe       bl _MSG_CMDPrepareOrSend
| ||:||||   0x08004abc      2078           ldrb r0, [r4]
| ||:||||   0x08004abe      0128           cmp r0, 1                   ; 1
| ========< 0x08004ac0      37d1           bne 0x8004b32
| ||:||||   0x08004ac2      0220           movs r0, 2                  ; 2
| ||:||||   0x08004ac4      1890           str r0, [sp, 0x60]
| ||:||||   0x08004ac6      2846           mov r0, r5
| ||:||||   0x08004ac8      1790           str r0, [sp, 0x5c]
| ||:||||   0x08004aca      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004acc      1690           str r0, [sp, 0x58]
| ||:||||   0x08004ace      2846           mov r0, r5
| ||:||||   0x08004ad0      1590           str r0, [sp, 0x54]
| ||:||||   0x08004ad2      0120           movs r0, 1                  ; 1
| ||:||||   0x08004ad4      1490           str r0, [sp, 0x50]
| ||:||||   0x08004ad6      2846           mov r0, r5
| ||:||||   0x08004ad8      1390           str r0, [sp, 0x4c]
| ||:||||   0x08004ada      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004adc      1290           str r0, [sp, 0x48]
| ||:||||   0x08004ade      2846           mov r0, r5
| ||:||||   0x08004ae0      1190           str r0, [sp, 0x44]
| ||:||||   0x08004ae2      0120           movs r0, 1                  ; 1
| ||:||||   0x08004ae4      1090           str r0, [sp, 0x40]
| ||:||||   0x08004ae6      2846           mov r0, r5
| ||:||||   0x08004ae8      0f90           str r0, [sp, 0x3c]
| ||:||||   0x08004aea      0e90           str r0, [sp, 0x38]
| ||:||||   0x08004aec      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004aee      0d90           str r0, [sp, 0x34]
| ||:||||   0x08004af0      0120           movs r0, 1                  ; 1
| ||:||||   0x08004af2      0c90           str r0, [sp, 0x30]
| ||:||||   0x08004af4      2846           mov r0, r5
| ||:||||   0x08004af6      0b90           str r0, [sp, 0x2c]
| ||:||||   0x08004af8      0a90           str r0, [sp, 0x28]
| ||:||||   0x08004afa      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004afc      0990           str r0, [sp, 0x24]
| ||:||||   0x08004afe      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b00      0890           str r0, [sp, 0x20]
| ||:||||   0x08004b02      2846           mov r0, r5
| ||:||||   0x08004b04      0790           str r0, [sp, 0x1c]
| ||:||||   0x08004b06      0690           str r0, [sp, 0x18]
| ||:||||   0x08004b08      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b0a      0590           str r0, [sp, 0x14]
| ||:||||   0x08004b0c      0220           movs r0, 2                  ; 2
| ||:||||   0x08004b0e      0490           str r0, [sp, 0x10]
| ||:||||   0x08004b10      2846           mov r0, r5
| ||:||||   0x08004b12      0390           str r0, [sp, 0xc]
| ||:||||   0x08004b14      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b16      0290           str r0, [sp, 8]
| ||:||||   0x08004b18      2846           mov r0, r5
| ||:||||   0x08004b1a      0190           str r0, [sp, 4]
| ||:||||   0x08004b1c      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b1e      0090           str r0, [sp]
| ||:||||   0x08004b20      2b46           mov r3, r5
| ||:||||   0x08004b22      ff22           movs r2, 0xff               ; 255
| ||:||||   0x08004b24      1146           mov r1, r2
| ||:||||   0x08004b26      dff8fc06       ldr.w r0, [0x08005224]      ; [0x8005224:4]=0x200008d4
| ||:||||   0x08004b2a      fff79ffe       bl _LED_BLEStyleUpdate
| ||:||||   0x08004b2e      0546           mov r5, r0
| ========< 0x08004b30      ace0           b 0x8004c8c
| ||:||||      ; JMP XREF from 0x08004ac0 (_BLE_CMDSend)
| --------> 0x08004b32      0228           cmp r0, 2                   ; 2
| ========< 0x08004b34      37d1           bne 0x8004ba6
| ||:||||   0x08004b36      0220           movs r0, 2                  ; 2
| ||:||||   0x08004b38      1890           str r0, [sp, 0x60]
| ||:||||   0x08004b3a      2846           mov r0, r5
| ||:||||   0x08004b3c      1790           str r0, [sp, 0x5c]
| ||:||||   0x08004b3e      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b40      1690           str r0, [sp, 0x58]
| ||:||||   0x08004b42      2846           mov r0, r5
| ||:||||   0x08004b44      1590           str r0, [sp, 0x54]
| ||:||||   0x08004b46      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b48      1490           str r0, [sp, 0x50]
| ||:||||   0x08004b4a      2846           mov r0, r5
| ||:||||   0x08004b4c      1390           str r0, [sp, 0x4c]
| ||:||||   0x08004b4e      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b50      1290           str r0, [sp, 0x48]
| ||:||||   0x08004b52      2846           mov r0, r5
| ||:||||   0x08004b54      1190           str r0, [sp, 0x44]
| ||:||||   0x08004b56      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b58      1090           str r0, [sp, 0x40]
| ||:||||   0x08004b5a      2846           mov r0, r5
| ||:||||   0x08004b5c      0f90           str r0, [sp, 0x3c]
| ||:||||   0x08004b5e      0e90           str r0, [sp, 0x38]
| ||:||||   0x08004b60      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b62      0d90           str r0, [sp, 0x34]
| ||:||||   0x08004b64      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b66      0c90           str r0, [sp, 0x30]
| ||:||||   0x08004b68      2846           mov r0, r5
| ||:||||   0x08004b6a      0b90           str r0, [sp, 0x2c]
| ||:||||   0x08004b6c      0a90           str r0, [sp, 0x28]
| ||:||||   0x08004b6e      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b70      0990           str r0, [sp, 0x24]
| ||:||||   0x08004b72      0220           movs r0, 2                  ; 2
| ||:||||   0x08004b74      0890           str r0, [sp, 0x20]
| ||:||||   0x08004b76      2846           mov r0, r5
| ||:||||   0x08004b78      0790           str r0, [sp, 0x1c]
| ||:||||   0x08004b7a      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b7c      0690           str r0, [sp, 0x18]
| ||:||||   0x08004b7e      2846           mov r0, r5
| ||:||||   0x08004b80      0590           str r0, [sp, 0x14]
| ||:||||   0x08004b82      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b84      0490           str r0, [sp, 0x10]
| ||:||||   0x08004b86      2846           mov r0, r5
| ||:||||   0x08004b88      0390           str r0, [sp, 0xc]
| ||:||||   0x08004b8a      0290           str r0, [sp, 8]
| ||:||||   0x08004b8c      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004b8e      0190           str r0, [sp, 4]
| ||:||||   0x08004b90      0120           movs r0, 1                  ; 1
| ||:||||   0x08004b92      0090           str r0, [sp]
| ||:||||   0x08004b94      2b46           mov r3, r5
| ||:||||   0x08004b96      ff22           movs r2, 0xff               ; 255
| ||:||||   0x08004b98      1146           mov r1, r2
| ||:||||   0x08004b9a      dff88806       ldr.w r0, [0x08005224]      ; [0x8005224:4]=0x200008d4
| ||:||||   0x08004b9e      fff765fe       bl _LED_BLEStyleUpdate
| ||:||||   0x08004ba2      0546           mov r5, r0
| ========< 0x08004ba4      72e0           b 0x8004c8c
| ||:||||      ; JMP XREF from 0x08004b34 (_BLE_CMDSend)
| --------> 0x08004ba6      0328           cmp r0, 3                   ; 3
| ========< 0x08004ba8      37d1           bne 0x8004c1a
| ||:||||   0x08004baa      0220           movs r0, 2                  ; 2
| ||:||||   0x08004bac      1890           str r0, [sp, 0x60]
| ||:||||   0x08004bae      2846           mov r0, r5
| ||:||||   0x08004bb0      1790           str r0, [sp, 0x5c]
| ||:||||   0x08004bb2      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004bb4      1690           str r0, [sp, 0x58]
| ||:||||   0x08004bb6      2846           mov r0, r5
| ||:||||   0x08004bb8      1590           str r0, [sp, 0x54]
| ||:||||   0x08004bba      0120           movs r0, 1                  ; 1
| ||:||||   0x08004bbc      1490           str r0, [sp, 0x50]
| ||:||||   0x08004bbe      2846           mov r0, r5
| ||:||||   0x08004bc0      1390           str r0, [sp, 0x4c]
| ||:||||   0x08004bc2      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004bc4      1290           str r0, [sp, 0x48]
| ||:||||   0x08004bc6      2846           mov r0, r5
| ||:||||   0x08004bc8      1190           str r0, [sp, 0x44]
| ||:||||   0x08004bca      0120           movs r0, 1                  ; 1
| ||:||||   0x08004bcc      1090           str r0, [sp, 0x40]
| ||:||||   0x08004bce      2846           mov r0, r5
| ||:||||   0x08004bd0      0f90           str r0, [sp, 0x3c]
| ||:||||   0x08004bd2      0e90           str r0, [sp, 0x38]
| ||:||||   0x08004bd4      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004bd6      0d90           str r0, [sp, 0x34]
| ||:||||   0x08004bd8      0220           movs r0, 2                  ; 2
| ||:||||   0x08004bda      0c90           str r0, [sp, 0x30]
| ||:||||   0x08004bdc      2846           mov r0, r5
| ||:||||   0x08004bde      0b90           str r0, [sp, 0x2c]
| ||:||||   0x08004be0      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004be2      0a90           str r0, [sp, 0x28]
| ||:||||   0x08004be4      2846           mov r0, r5
| ||:||||   0x08004be6      0990           str r0, [sp, 0x24]
| ||:||||   0x08004be8      0120           movs r0, 1                  ; 1
| ||:||||   0x08004bea      0890           str r0, [sp, 0x20]
| ||:||||   0x08004bec      2846           mov r0, r5
| ||:||||   0x08004bee      0790           str r0, [sp, 0x1c]
| ||:||||   0x08004bf0      0690           str r0, [sp, 0x18]
| ||:||||   0x08004bf2      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004bf4      0590           str r0, [sp, 0x14]
| ||:||||   0x08004bf6      0120           movs r0, 1                  ; 1
| ||:||||   0x08004bf8      0490           str r0, [sp, 0x10]
| ||:||||   0x08004bfa      2846           mov r0, r5
| ||:||||   0x08004bfc      0390           str r0, [sp, 0xc]
| ||:||||   0x08004bfe      0290           str r0, [sp, 8]
| ||:||||   0x08004c00      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c02      0190           str r0, [sp, 4]
| ||:||||   0x08004c04      0120           movs r0, 1                  ; 1
| ||:||||   0x08004c06      0090           str r0, [sp]
| ||:||||   0x08004c08      2b46           mov r3, r5
| ||:||||   0x08004c0a      ff22           movs r2, 0xff               ; 255
| ||:||||   0x08004c0c      1146           mov r1, r2
| ||:||||   0x08004c0e      dff81406       ldr.w r0, [0x08005224]      ; [0x8005224:4]=0x200008d4
| ||:||||   0x08004c12      fff72bfe       bl _LED_BLEStyleUpdate
| ||:||||   0x08004c16      0546           mov r5, r0
| ========< 0x08004c18      38e0           b 0x8004c8c
| ||:||||      ; JMP XREF from 0x08004ba8 (_BLE_CMDSend)
| --------> 0x08004c1a      0428           cmp r0, 4                   ; 4
| ========< 0x08004c1c      36d1           bne 0x8004c8c
| ||:||||   0x08004c1e      0220           movs r0, 2                  ; 2
| ||:||||   0x08004c20      1890           str r0, [sp, 0x60]
| ||:||||   0x08004c22      2846           mov r0, r5
| ||:||||   0x08004c24      1790           str r0, [sp, 0x5c]
| ||:||||   0x08004c26      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c28      1690           str r0, [sp, 0x58]
| ||:||||   0x08004c2a      2846           mov r0, r5
| ||:||||   0x08004c2c      1590           str r0, [sp, 0x54]
| ||:||||   0x08004c2e      0120           movs r0, 1                  ; 1
| ||:||||   0x08004c30      1490           str r0, [sp, 0x50]
| ||:||||   0x08004c32      2846           mov r0, r5
| ||:||||   0x08004c34      1390           str r0, [sp, 0x4c]
| ||:||||   0x08004c36      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c38      1290           str r0, [sp, 0x48]
| ||:||||   0x08004c3a      2846           mov r0, r5
| ||:||||   0x08004c3c      1190           str r0, [sp, 0x44]
| ||:||||   0x08004c3e      0120           movs r0, 1                  ; 1
| ||:||||   0x08004c40      1090           str r0, [sp, 0x40]
| ||:||||   0x08004c42      2846           mov r0, r5
| ||:||||   0x08004c44      0f90           str r0, [sp, 0x3c]
| ||:||||   0x08004c46      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c48      0e90           str r0, [sp, 0x38]
| ||:||||   0x08004c4a      2846           mov r0, r5
| ||:||||   0x08004c4c      0d90           str r0, [sp, 0x34]
| ||:||||   0x08004c4e      0220           movs r0, 2                  ; 2
| ||:||||   0x08004c50      0c90           str r0, [sp, 0x30]
| ||:||||   0x08004c52      2846           mov r0, r5
| ||:||||   0x08004c54      0b90           str r0, [sp, 0x2c]
| ||:||||   0x08004c56      0a90           str r0, [sp, 0x28]
| ||:||||   0x08004c58      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c5a      0990           str r0, [sp, 0x24]
| ||:||||   0x08004c5c      0120           movs r0, 1                  ; 1
| ||:||||   0x08004c5e      0890           str r0, [sp, 0x20]
| ||:||||   0x08004c60      2846           mov r0, r5
| ||:||||   0x08004c62      0790           str r0, [sp, 0x1c]
| ||:||||   0x08004c64      0690           str r0, [sp, 0x18]
| ||:||||   0x08004c66      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c68      0590           str r0, [sp, 0x14]
| ||:||||   0x08004c6a      0120           movs r0, 1                  ; 1
| ||:||||   0x08004c6c      0490           str r0, [sp, 0x10]
| ||:||||   0x08004c6e      2846           mov r0, r5
| ||:||||   0x08004c70      0390           str r0, [sp, 0xc]
| ||:||||   0x08004c72      0290           str r0, [sp, 8]
| ||:||||   0x08004c74      ff20           movs r0, 0xff               ; 255
| ||:||||   0x08004c76      0190           str r0, [sp, 4]
| ||:||||   0x08004c78      0120           movs r0, 1                  ; 1
| ||:||||   0x08004c7a      0090           str r0, [sp]
| ||:||||   0x08004c7c      2b46           mov r3, r5
| ||:||||   0x08004c7e      ff22           movs r2, 0xff               ; 255
| ||:||||   0x08004c80      1146           mov r1, r2
| ||:||||   0x08004c82      dff8a005       ldr.w r0, [0x08005224]      ; [0x8005224:4]=0x200008d4
| ||:||||   0x08004c86      fff7f1fd       bl _LED_BLEStyleUpdate
| ||:||||   0x08004c8a      0546           mov r5, r0
| ||:||||      ; JMP XREF from 0x08004b30 (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x08004ba4 (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x08004c18 (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x08004c1c (_BLE_CMDSend)
| --------> 0x08004c8c      0320           movs r0, 3                  ; 3
| ||:||||   0x08004c8e      0190           str r0, [sp, 4]
| ||:||||   0x08004c90      0095           str r5, [sp]
| ||:||||   0x08004c92      dff89035       ldr.w r3, [0x08005224]      ; [0x8005224:4]=0x200008d4
| ||:||||   0x08004c96      0b22           movs r2, 0xb                ; 11
| ||:||||   0x08004c98      0921           movs r1, 9                  ; 9
| ||:||||   0x08004c9a      0020           movs r0, 0
| ||:||||   0x08004c9c      00f080fd       bl _MSG_CMDPrepareOrSend
| ||:||||      ; JMP XREF from 0x080049ca (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x080049de (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x08004a72 (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x08004a8a (_BLE_CMDSend)
| ||:||||      ; JMP XREF from 0x08004aa2 (_BLE_CMDSend)
| ``------> 0x08004ca0      19b0           add sp, 0x64
\   :||||   0x08004ca2      30bd           pop {r4, r5, pc}
    :||||      ; DATA XREF from 0x08004110 (_KBD_Init)
    :||||   0x08004ca4      .dword 0x200004f8
    :||||      ; DATA XREF from 0x08004118 (_KBD_Init)
    :||||   0x08004ca8      .dword 0x08080146
    :||||      ; DATA XREF from 0x0800411e (_KBD_Init)
    :||||   0x08004cac      .dword 0x20000540
    :||||      ; DATA XREF from 0x0800414c (_KBD_Init)
    :||||   0x08004cb0      .dword 0x20001944
    :||||      ; DATA XREF from 0x08004158 (_KBD_Init)
    :||||   0x08004cb4      .dword 0x200018cc
    :||||      ; DATA XREF from 0x08004160 (_KBD_Init)
    :||||      ; DATA XREF from 0x08004180 (_TIM4_Update_Flag_1)
    :||||      ; DATA XREF from 0x08004948 (_LED_BLEStyleUpdate)
    :||||   0x08004cb8      .dword 0x200017a8
    :||||      ; DATA XREF from 0x0800412e (_KBD_Init)
    :||||      ; DATA XREF from 0x08004184 (_TIM4_Update_Flag_1)
    :||||      ; DATA XREF from 0x0800461a (_KBD_USBPlugCheck)
    :||||      ; DATA XREF from 0x08004922 (_LED_BLEStyleUpdate)
    :||||   0x08004cbc      .dword 0x20000768
|   :||||   ;-- MCU_UIDLoad:
/ (fcn) _MCU_UIDLoad 22
|       Caller: _MSG_HandleSystemCMD
|   _MCU_UIDLoad ();
|   :||||      ; CALL XREF from 0x0800559e (_MSG_HandleSystemCMD)
|   :||||   0x08004cc0      dff8a007       ldr.w r0, [0x08005464]      ; [0x8005464:4]=0x20000768 ; store device's UID in memory
|   :||||   0x08004cc4      dff8d41a       ldr.w r1, [0x0800579c]      ; [0x800579c:4]=0x1ff80050
|   :||||   0x08004cc8      0a68           ldr r2, [r1]
|   :||||   0x08004cca      8263           str r2, [r0, 0x38]
|   :||||   0x08004ccc      4a68           ldr r2, [r1, 4]
|   :||||   0x08004cce      c263           str r2, [r0, 0x3c]
|   :||||   0x08004cd0      4969           ldr r1, [r1, 0x14]
|   :||||   0x08004cd2      0164           str r1, [r0, 0x40]
\   :||||   0x08004cd4      7047           bx lr
/ (fcn) USB_Get_SerialNum 44
|       Caller: USB_Port_Init
|   USB_Get_SerialNum ();
|   :||||      ; CALL XREF from 0x08009a56 (USB_Port_Init)
|   :||||   0x08004cd6      38b5           push {r3, r4, r5, lr}       ; Generate a 12 char string using the MCU UID
|   :||||   0x08004cd8      dff8c00a       ldr.w r0, [0x0800579c]      ; [0x800579c:4]=0x1ff80050
|   :||||   0x08004cdc      4468           ldr r4, [r0, 4]
|   :||||   0x08004cde      0168           ldr r1, [r0]
|   :||||   0x08004ce0      4069           ldr r0, [r0, 0x14]
|   :||||   0x08004ce2      4018           adds r0, r0, r1
|  ,======< 0x08004ce4      0cd0           beq 0x8004d00
|  |:||||   0x08004ce6      dff8685b       ldr.w r5, [0x08005850]      ; [0x8005850:4]=0x800a584
|  |:||||   0x08004cea      0822           movs r2, 8                  ; 8
|  |:||||   0x08004cec      a91c           adds r1, r5, 2
|  |:||||   0x08004cee      fff74efd       bl IntToUnicode
|  |:||||   0x08004cf2      0422           movs r2, 4                  ; 4
|  |:||||   0x08004cf4      05f11201       add.w r1, r5, 0x12
|  |:||||   0x08004cf8      2046           mov r0, r4
|  |:||||   0x08004cfa      bde83840       pop.w {r3, r4, r5, lr}
|  |`=====< 0x08004cfe      46e5           b IntToUnicode
|  | ||||      ; JMP XREF from 0x08004ce4 (USB_Get_SerialNum)
\  `------> 0x08004d00      31bd           pop {r0, r4, r5, pc}
/ (fcn) USB_Cable_Config 20
|       Caller: USB_PowerOn USB_PowerOff
|   USB_Cable_Config ();
|    ||||      ; CALL XREF from 0x080090c8 (USB_PowerOn)
|    ||||      ; CALL XREF from 0x080090fc (USB_PowerOff)
|    ||||   0x08004d02      164a           ldr r2, [0x08004d5c]        ; [0x8004d5c:4]=0x20000718 ; Sets or resets USB D+ (PA10)
|    ||||   0x08004d04      9188           ldrh r1, [r2, 4]            ; PortA pin 10
|    ||||   0x08004d06      1268           ldr r2, [r2]
|    ||||   0x08004d08      0028           cmp r0, 0
|    ||||   0x08004d0a      1046           mov r0, r2
|   ,=====< 0x08004d0c      01d0           beq 0x8004d12
|  ,======< 0x08004d0e      02f084b9       b.w GPIO_SetBits
|  ||||||      ; JMP XREF from 0x08004d0c (USB_Cable_Config)
\ ,=`-----> 0x08004d12      02f084b9       b.w GPIO_ResetBits
\ || ||||   ;-- USB_SendKeyStroke:
/ (fcn) _USB_SendKeyStroke 68
|       Caller: _KBD_KeyStrokeHandle
|   _USB_SendKeyStroke ();
| || ||||      ; CALL XREF from 0x0800872e (_KBD_KeyStrokeHandle)
| || ||||   0x08004d16      38b5           push {r3, r4, r5, lr}
| || ||||   0x08004d18      0446           mov r4, r0
| || ||||   0x08004d1a      0020           movs r0, 0
| || ||||   0x08004d1c      dff8341b       ldr.w r1, [0x08005854]      ; [0x8005854:4]=0x20000764
| || ||||   0x08004d20      0870           strb r0, [r1]
| || ||||   0x08004d22      1e22           movs r2, 0x1e               ; 30
| || ||||   0x08004d24      04f1a801       add.w r1, r4, 0xa8          ; 0x20001850
| || ||||   0x08004d28      8220           movs r0, 0x82               ; 130 ; EP2_IN
| || ||||   0x08004d2a      02f02dfa       bl USB_SIL_Write
| || ||||   0x08004d2e      0220           movs r0, 2                  ; 2 ; ENDP2
| || ||||   0x08004d30      02f0a6fa       bl USB_SetEPTxValid
| || ||||   0x08004d34      04f1d005       add.w r5, r4, 0xd0
| || ||||   0x08004d38      6878           ldrb r0, [r5, 1]
| || ||||   0x08004d3a      0028           cmp r0, 0
| ||,=====< 0x08004d3c      0cd0           beq 0x8004d58
| |||||||   0x08004d3e      0122           movs r2, 1                  ; 1
| |||||||   0x08004d40      04f1d001       add.w r1, r4, 0xd0          ; 0x20001878
| |||||||   0x08004d44      8320           movs r0, 0x83               ; 131 ; EP3_OUT
| |||||||   0x08004d46      02f01ffa       bl USB_SIL_Write
| |||||||   0x08004d4a      0320           movs r0, 3                  ; 3 ; ENDP3
| |||||||   0x08004d4c      02f098fa       bl USB_SetEPTxValid
| |||||||   0x08004d50      0020           movs r0, 0
| |||||||   0x08004d52      6870           strb r0, [r5, 1]
| |||||||   0x08004d54      84f8d000       strb.w r0, [r4, 0xd0]
| |||||||      ; JMP XREF from 0x08004d3c (_USB_SendKeyStroke)
\ ||`-----> 0x08004d58      31bd           pop {r0, r4, r5, pc}
  || ||||   0x08004d5a      0000           movs r0, r0
  || ||||      ; DATA XREF from 0x080042d4 (_GPIO_Config)
  || ||||      ; DATA XREF from 0x080046f2 (_USB_DisconnectPinConfig)
  || ||||      ; DATA XREF from 0x08004d02 (USB_Cable_Config)
  || ||||   0x08004d5c      .dword 0x20000718
  || ||||      ; DATA XREF from 0x080042f6 (_GPIO_Config)
  || ||||      ; DATA XREF from 0x080043dc (_GPIO_HighSpeedSet)
  || ||||      ; DATA XREF from 0x0800460e (_KBD_USBPlugCheck)
  || ||||   0x08004d60      .dword 0x20000710
  || ||||      ; DATA XREF from 0x0800431e (_GPIO_Config)
  || ||||      ; DATA XREF from 0x08004404 (_GPIO_HighSpeedSet)
  || ||||   0x08004d64      .dword 0x20000700
| || ||||   ;-- BLE_KeyPress_Something:
/ (fcn) _BLE_KeyPress_Something 134
|       Caller: _KBD_KeyStrokeHandle
|   _BLE_KeyPress_Something ();
| || ||||      ; CALL XREF from 0x0800875a (_KBD_KeyStrokeHandle)
| || ||||      ; CALL XREF from 0x08008768 (_KBD_KeyStrokeHandle)
| || ||||   0x08004d68      7cb5           push {r2, r3, r4, r5, r6, lr}
| || ||||   0x08004d6a      dff8f846       ldr.w r4, [0x08005464]      ; [0x8005464:4]=0x20000768
| || ||||   0x08004d6e      04f14405       add.w r5, r4, 0x44
| || ||||   0x08004d72      297d           ldrb r1, [r5, 0x14]         ; 0x200007c0
| || ||||   0x08004d74      04f12002       add.w r2, r4, 0x20
| || ||||   0x08004d78      d278           ldrb r2, [r2, 3]            ; 0x2000078b
| || ||||   0x08004d7a      94f82030       ldrb.w r3, [r4, 0x20]       ; 0x20000788
| || ||||   0x08004d7e      1340           ands r3, r2
| || ||||   0x08004d80      81f00106       eor r6, r1, 1
| || ||||   0x08004d84      3342           tst r3, r6
| ||,=====< 0x08004d86      1bd0           beq 0x8004dc0
| |||||||   0x08004d88      0021           movs r1, 0
| |||||||   0x08004d8a      84f82010       strb.w r1, [r4, 0x20]
| |||||||   0x08004d8e      2975           strb r1, [r5, 0x14]
| |||||||   0x08004d90      00f1c803       add.w r3, r0, 0xc8
| |||||||   0x08004d94      94f84400       ldrb.w r0, [r4, 0x44]       ; 0x200007ac
| |||||||   0x08004d98      0128           cmp r0, 1                   ; 1
| ========< 0x08004d9a      07d1           bne 0x8004dac
| |||||||   0x08004d9c      0822           movs r2, 8                  ; 8
| |||||||   0x08004d9e      0621           movs r1, 6                  ; 6
| |||||||   0x08004da0      0020           movs r0, 0
| |||||||   0x08004da2      02b0           add sp, 8
| |||||||   0x08004da4      bde87040       pop.w {r4, r5, r6, lr}
| ========< 0x08004da8      01f010b8       b.w _MSG_HandleMacroCMD
| |||||||      ; JMP XREF from 0x08004d9a (_BLE_KeyPress_Something)
| --------> 0x08004dac      0220           movs r0, 2                  ; 2
| |||||||   0x08004dae      0190           str r0, [sp, 4]
| |||||||   0x08004db0      0820           movs r0, 8                  ; 8
| |||||||   0x08004db2      0090           str r0, [sp]
| |||||||   0x08004db4      0122           movs r2, 1                  ; 1
| |||||||   0x08004db6      0721           movs r1, 7                  ; 7
| |||||||   0x08004db8      0020           movs r0, 0
| |||||||   0x08004dba      00f0f1fc       bl _MSG_CMDPrepareOrSend
| |||||||   0x08004dbe      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x08004d86 (_BLE_KeyPress_Something)
| ||`-----> 0x08004dc0      1142           tst r1, r2
| ||,=====< 0x08004dc2      0fd0           beq 0x8004de4
| |||||||   0x08004dc4      0220           movs r0, 2                  ; 2
| |||||||   0x08004dc6      0190           str r0, [sp, 4]
| |||||||   0x08004dc8      0820           movs r0, 8                  ; 8
| |||||||   0x08004dca      0090           str r0, [sp]
| |||||||   0x08004dcc      04f26c73       addw r3, r4, 0x76c          ; 0x20000ed4
| |||||||   0x08004dd0      0122           movs r2, 1                  ; 1
| |||||||   0x08004dd2      0721           movs r1, 7                  ; 7
| |||||||   0x08004dd4      0020           movs r0, 0
| |||||||   0x08004dd6      00f0e3fc       bl _MSG_CMDPrepareOrSend
| |||||||   0x08004dda      0020           movs r0, 0
| |||||||   0x08004ddc      84f82000       strb.w r0, [r4, 0x20]
| |||||||   0x08004de0      2875           strb r0, [r5, 0x14]
| |||||||   0x08004de2      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x08004dc2 (_BLE_KeyPress_Something)
| ||`-----> 0x08004de4      0020           movs r0, 0
| || ||||   0x08004de6      84f82000       strb.w r0, [r4, 0x20]
| || ||||   0x08004dea      2875           strb r0, [r5, 0x14]
\ || ||||   0x08004dec      73bd           pop {r0, r1, r4, r5, r6, pc}
  || ||||   0x08004dee      0000           movs r0, r0
  || ||||      ; DATA XREF from 0x08004340 (_GPIO_Config)
  || ||||      ; DATA XREF from 0x08004426 (_GPIO_HighSpeedSet)
  || ||||   0x08004df0      .dword 0x20000708
  || ||||      ; DATA XREF from 0x0800436e (_GPIO_Config)
  || ||||      ; DATA XREF from 0x0800444c (_GPIO_HighSpeedSet)
  || ||||      ; DATA XREF from 0x080044bc (_MatrixColumns_Set)
  || ||||   0x08004df4      .dword 0x20000588
  || ||||      ; DATA XREF from 0x080043a0 (_GPIO_Config)
  || ||||      ; DATA XREF from 0x0800447e (_GPIO_HighSpeedSet)
  || ||||   0x08004df8      .dword 0x20000628
| || ||||   ;-- BLE_P1_0Set:
/ (fcn) _BLE_P1_0Set 34
|       Caller: _BLE_StateUpdate
|   _BLE_P1_0Set ();
| || ||||      ; CALL XREF from 0x08008c54 (_BLE_StateUpdate)
| || ||||   0x08004dfc      10b5           push {r4, lr}
| || ||||   0x08004dfe      dff8584a       ldr.w r4, [0x08005858]      ; [0x8005858:4]=0x20000700
| || ||||   0x08004e02      a188           ldrh r1, [r4, 4]
| || ||||   0x08004e04      2068           ldr r0, [r4]
| || ||||   0x08004e06      02f001f9       bl GPIO_ReadOutputDataBit
| || ||||   0x08004e0a      0028           cmp r0, 0
| ||,=====< 0x08004e0c      06d1           bne 0x8004e1c
| |||||||   0x08004e0e      0122           movs r2, 1                  ; 1
| |||||||   0x08004e10      a188           ldrh r1, [r4, 4]
| |||||||   0x08004e12      2068           ldr r0, [r4]
| |||||||   0x08004e14      bde81040       pop.w {r4, lr}
| ========< 0x08004e18      02f003b9       b.w GPIO_WriteBit
| |||||||      ; JMP XREF from 0x08004e0c (_BLE_P1_0Set)
\ ||`-----> 0x08004e1c      10bd           pop {r4, pc}
\ || ||||   ;-- BLE_P1_0Reset:
/ (fcn) _BLE_P1_0Reset 34
|       Caller: _BLE_StateUpdate
|   _BLE_P1_0Reset ();
| || ||||      ; CALL XREF from 0x08008c50 (_BLE_StateUpdate)
| || ||||      ; CALL XREF from 0x08008c86 (_BLE_StateUpdate)
| || ||||   0x08004e1e      10b5           push {r4, lr}
| || ||||   0x08004e20      dff8344a       ldr.w r4, [0x08005858]      ; [0x8005858:4]=0x20000700
| || ||||   0x08004e24      a188           ldrh r1, [r4, 4]
| || ||||   0x08004e26      2068           ldr r0, [r4]
| || ||||   0x08004e28      02f0f0f8       bl GPIO_ReadOutputDataBit
| || ||||   0x08004e2c      0128           cmp r0, 1                   ; 1
| ||,=====< 0x08004e2e      06d1           bne 0x8004e3e
| |||||||   0x08004e30      0022           movs r2, 0
| |||||||   0x08004e32      a188           ldrh r1, [r4, 4]
| |||||||   0x08004e34      2068           ldr r0, [r4]
| |||||||   0x08004e36      bde81040       pop.w {r4, lr}
| ========< 0x08004e3a      02f0f2b8       b.w GPIO_WriteBit
| |||||||      ; JMP XREF from 0x08004e2e (_BLE_P1_0Reset)
\ ||`-----> 0x08004e3e      10bd           pop {r4, pc}
\ || ||||   ;-- LED_WakeUpCmd:
/ (fcn) _LED_WakeUpCmd 54
|       Caller: _LED_CMDSend _MSG_HandleSystemCMD _MSG_HandleLEDStyleCMD _LED_StateUpdate
|               fcn.08008a4c _MSG_CMDPrepareOrSend
|   _LED_WakeUpCmd ();
| || ||||      ; XREFS: CALL 0x08005378  CALL 0x0800543a  CALL 0x08005644  CALL 0x08005802  CALL 0x08005c10  CALL 0x08008880  CALL 0x080088ba  CALL 0x08008972  CALL 0x080089ee  
| || ||||      ; XREFS: CALL 0x08008ac8  
| || ||||   0x08004e40      10b5           push {r4, lr}
| || ||||   0x08004e42      dff8184a       ldr.w r4, [0x0800585c]      ; [0x800585c:4]=0x20000708
| || ||||   0x08004e46      a188           ldrh r1, [r4, 4]            ; pin 15
| || ||||   0x08004e48      2368           ldr r3, [r4]                ; Port C
| || ||||   0x08004e4a      0028           cmp r0, 0
| ||,=====< 0x08004e4c      04d0           beq 0x8004e58
| |||||||   0x08004e4e      0122           movs r2, 1                  ; 1
| |||||||   0x08004e50      1846           mov r0, r3
| |||||||   0x08004e52      02f0e6f8       bl GPIO_WriteBit
| ========< 0x08004e56      03e0           b 0x8004e60
| |||||||      ; JMP XREF from 0x08004e4c (_LED_WakeUpCmd)
| ||`-----> 0x08004e58      0022           movs r2, 0
| || ||||   0x08004e5a      1846           mov r0, r3
| || ||||   0x08004e5c      02f0e1f8       bl GPIO_WriteBit
| || ||||      ; JMP XREF from 0x08004e56 (_LED_WakeUpCmd)
| --------> 0x08004e60      a188           ldrh r1, [r4, 4]
| || ||||   0x08004e62      2068           ldr r0, [r4]
| || ||||   0x08004e64      02f0d2f8       bl GPIO_ReadOutputDataBit   ; check if pin was set to 1
| || ||||   0x08004e68      0128           cmp r0, 1                   ; 1
| ||,=====< 0x08004e6a      03d1           bne 0x8004e74
| |||||||   0x08004e6c      0020           movs r0, 0
| |||||||   0x08004e6e      dff8f415       ldr.w r1, [0x08005464]      ; [0x8005464:4]=0x20000768 ; clear LED_MCU_Asleep flag
| |||||||   0x08004e72      c876           strb r0, [r1, 0x1b]
| |||||||      ; JMP XREF from 0x08004e6a (_LED_WakeUpCmd)
\ ||`-----> 0x08004e74      10bd           pop {r4, pc}
\ || ||||   ;-- USART2_IOInit:
/ (fcn) _USART2_IOInit 64
|       Caller: _USART2_Setup
|   _USART2_IOInit ();
| || ||||      ; CALL XREF from 0x08005022 (_USART2_Setup)
| || ||||   0x08004e76      1cb5           push {r2, r3, r4, lr}
| || ||||   0x08004e78      0c20           movs r0, 0xc                ; 12 ; Pins 2 and 3
| || ||||   0x08004e7a      0090           str r0, [sp]
| || ||||   0x08004e7c      0220           movs r0, 2                  ; 2 ; alternate function mode
| || ||||   0x08004e7e      8df80400       strb.w r0, [sp, 4]
| || ||||   0x08004e82      0020           movs r0, 0                  ; very low speed
| || ||||   0x08004e84      8df80600       strb.w r0, [sp, 6]
| || ||||   0x08004e88      0120           movs r0, 1                  ; 1 ; GPIO_OType_OD
| || ||||   0x08004e8a      8df80700       strb.w r0, [sp, 7]
| || ||||   0x08004e8e      0020           movs r0, 0                  ; GPIO_PuPd_NOPULL
| || ||||   0x08004e90      8df80500       strb.w r0, [sp, 5]
| || ||||   0x08004e94      dff8204b       ldr.w r4, [0x080059b8]      ; [0x80059b8:4]=0x40020000 ; PortA
| || ||||   0x08004e98      00a9           add r1, sp, 0
| || ||||   0x08004e9a      2046           mov r0, r4
| || ||||   0x08004e9c      02f07ef8       bl GPIO_Init
| || ||||   0x08004ea0      0722           movs r2, 7                  ; 7
| || ||||   0x08004ea2      0221           movs r1, 2                  ; 2
| || ||||   0x08004ea4      2046           mov r0, r4
| || ||||   0x08004ea6      02f0c2f8       bl GPIO_PinAFConfig         ; Pin 2: USART alternate function mapping USART2_TX
| || ||||   0x08004eaa      0722           movs r2, 7                  ; 7
| || ||||   0x08004eac      0321           movs r1, 3                  ; 3
| || ||||   0x08004eae      2046           mov r0, r4
| || ||||   0x08004eb0      02f0bdf8       bl GPIO_PinAFConfig         ; pin 3 usart alternate funtion mapping USART2_RX
\ || ||||   0x08004eb4      13bd           pop {r0, r1, r4, pc}
\ || ||||   ;-- USART2_ClockEnable:
/ (fcn) _USART2_ClockEnable 10
|       Caller: _USART2_Setup
|   _USART2_ClockEnable ();
| || ||||      ; CALL XREF from 0x08005026 (_USART2_Setup)
| || ||||   0x08004eb6      0121           movs r1, 1                  ; 1
| || ||||   0x08004eb8      4ff40030       mov.w r0, 0x20000           ; USART 2 clock enable
\ ||,=====< 0x08004ebc      01f0cfbe       b.w RCC_APB1PeriphClockCmd
\ |||||||   ;-- USART2_Init:
/ (fcn) _USART2_Init 146
|       Caller: _USART2_Setup
|   _USART2_Init ();
| |||||||      ; CALL XREF from 0x0800502a (_USART2_Setup)
| |||||||   0x08004ec0      10b5           push {r4, lr}
| |||||||   0x08004ec2      86b0           sub sp, 0x18
| |||||||   0x08004ec4      dff8f44a       ldr.w r4, [0x080059bc]      ; [0x80059bc:4]=0x40004400 ; USART2
| |||||||   0x08004ec8      2046           mov r0, r4
| |||||||   0x08004eca      02f09ffa       bl USART_DeInit             ; reset USART2
| |||||||   0x08004ece      4ff41640       mov.w r0, 0x9600
| |||||||   0x08004ed2      0190           str r0, [sp, 4]             ; BaudRate 38400
| |||||||   0x08004ed4      0020           movs r0, 0
| |||||||   0x08004ed6      0290           str r0, [sp, 8]             ; USART_WordLength_8b
| |||||||   0x08004ed8      adf80c00       strh.w r0, [sp, 0xc]        ; USART_StopBits_1
| |||||||   0x08004edc      adf81000       strh.w r0, [sp, 0x10]       ; USART_Parity_No
| |||||||   0x08004ee0      0c20           movs r0, 0xc                ; 12 ; USART_Mode_Rx|USART_Mode_Tx
| |||||||   0x08004ee2      adf80e00       strh.w r0, [sp, 0xe]
| |||||||   0x08004ee6      01a9           add r1, sp, 4
| |||||||   0x08004ee8      2046           mov r0, r4
| |||||||   0x08004eea      02f0dcfa       bl USART_Init
| |||||||   0x08004eee      0122           movs r2, 1                  ; 1
| |||||||   0x08004ef0      40f22661       movw r1, 0x626              ; 1574
| |||||||   0x08004ef4      2046           mov r0, r4
| |||||||   0x08004ef6      02f04dfb       bl USART_ITConfig           ; Enable USART_IT_TC: transmission complete interrupt
| |||||||   0x08004efa      0122           movs r2, 1                  ; 1
| |||||||   0x08004efc      40f22441       movw r1, 0x424              ; 1060
| |||||||   0x08004f00      2046           mov r0, r4
| |||||||   0x08004f02      02f047fb       bl USART_ITConfig           ; enable USART_IT_IDLE: idle line detection interrupt
| |||||||   0x08004f06      4ff48060       mov.w r0, 0x400             ; 1024
| |||||||   0x08004f0a      01f0fbff       bl NVIC_PriorityGroupConfig ; NVIC_PriorityGroup_3: 3,1
| |||||||   0x08004f0e      2620           movs r0, 0x26               ; '&' ; 38 ; USART2_IRQn usart2 global interrupt
| |||||||   0x08004f10      8df80000       strb.w r0, [sp]
| |||||||   0x08004f14      0220           movs r0, 2                  ; 2 ; priority
| |||||||   0x08004f16      8df80100       strb.w r0, [sp, 1]
| |||||||   0x08004f1a      0120           movs r0, 1                  ; 1 ; subpriority
| |||||||   0x08004f1c      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08004f20      8df80300       strb.w r0, [sp, 3]          ; enable
| |||||||   0x08004f24      00a8           add r0, sp, 0
| |||||||   0x08004f26      01f0f2ff       bl NVIC_Init                ; enable interrupt
| |||||||   0x08004f2a      0122           movs r2, 1                  ; 1
| |||||||   0x08004f2c      4021           movs r1, 0x40               ; '@' ; 64
| |||||||   0x08004f2e      2046           mov r0, r4
| |||||||   0x08004f30      02f026fb       bl USART_DMACmd             ; enable USART2 Rx DMA interface USART_DMAReq_Rx
| |||||||   0x08004f34      0122           movs r2, 1                  ; 1
| |||||||   0x08004f36      8021           movs r1, 0x80               ; 128
| |||||||   0x08004f38      2046           mov r0, r4
| |||||||   0x08004f3a      02f021fb       bl USART_DMACmd             ; enable USART2 Tx DMA interface USART_DMAReq_Tx
| |||||||   0x08004f3e      0121           movs r1, 1                  ; 1
| |||||||   0x08004f40      2046           mov r0, r4
| |||||||   0x08004f42      02f00dfb       bl USART_Cmd                ; enable USART2
| |||||||   0x08004f46      4021           movs r1, 0x40               ; '@' ; 64
| |||||||   0x08004f48      2046           mov r0, r4
| |||||||   0x08004f4a      02f040fb       bl USART_ClearFlag          ; clear USART_FLAG_TC transmission complete pending flag
| |||||||   0x08004f4e      06b0           add sp, 0x18
\ |||||||   0x08004f50      10bd           pop {r4, pc}
\ |||||||   ;-- DMA1_ClockEnable_2:
/ (fcn) _DMA1_ClockEnable_2 10
|       Caller: _USART2_Setup
|   _DMA1_ClockEnable_2 ();
| |||||||      ; CALL XREF from 0x0800502e (_USART2_Setup)
| |||||||   0x08004f52      0121           movs r1, 1                  ; 1
| |||||||   0x08004f54      4ff08070       mov.w r0, 0x1000000
\ ========< 0x08004f58      01f06bbe       b.w RCC_AHBPeriphClockCmd
\ |||||||   ;-- USART2_DMAInit:
/ (fcn) _USART2_DMAInit 194
|   _USART2_DMAInit ();
| |||||||      ; JMP XREF from 0x08005036 (_USART2_Setup)
| --------> 0x08004f5c      2de9f041       push.w {r4, r5, r6, r7, r8, lr}
| |||||||   0x08004f60      8cb0           sub sp, 0x30                ; '0'
| |||||||   0x08004f62      1120           movs r0, 0x11               ; 17 ; DMA1_Channel7_IRQn
| |||||||      ; DATA XREF from 0x08004e00 (_BLE_P1_0Set)
| |||||||   0x08004f64      8df80000       strb.w r0, [sp]
| |||||||   0x08004f68      0320           movs r0, 3                  ; 3 ; priority
| |||||||   0x08004f6a      8df80100       strb.w r0, [sp, 1]
| |||||||   0x08004f6e      0220           movs r0, 2                  ; 2 ; subpriority
| |||||||   0x08004f70      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08004f74      0120           movs r0, 1                  ; 1 ; enable
| |||||||   0x08004f76      8df80300       strb.w r0, [sp, 3]
| |||||||   0x08004f7a      00a8           add r0, sp, 0
| |||||||   0x08004f7c      01f0c7ff       bl NVIC_Init                ; enable dma1 channel 7 global interrupt
| |||||||   0x08004f80      dff81478       ldr.w r7, [0x08005798]      ; [0x8005798:4]=0x40026080 ; DMA channel 7
| |||||||   0x08004f84      3846           mov r0, r7
| |||||||   0x08004f86      02f051fb       bl DMA_DeInit               ; reset dma1channel7
| |||||||   0x08004f8a      dff8348a       ldr.w r8, [0x080059c0]      ; [0x80059c0:4]=0x40004404 ; USART2 DMA_PeripheralBaseAddr = USART_DR
| |||||||   0x08004f8e      cdf80480       str.w r8, [sp, 4]
| |||||||   0x08004f92      0020           movs r0, 0
| |||||||   0x08004f94      0790           str r0, [sp, 0x1c]          ; DMA_PeripheralDataSize_Byte
| |||||||   0x08004f96      0890           str r0, [sp, 0x20]          ; DMA_MemoryDataSize_Byte
| |||||||   0x08004f98      0590           str r0, [sp, 0x14]          ; DMA_PeripheralInc_Disable
| |||||||   0x08004f9a      8020           movs r0, 0x80               ; 128
| |||||||   0x08004f9c      0690           str r0, [sp, 0x18]          ; DMA_MemoryInc_Enable
| |||||||   0x08004f9e      0020           movs r0, 0
| |||||||   0x08004fa0      0990           str r0, [sp, 0x24]          ; DMA_Mode_Normal
| |||||||   0x08004fa2      0b90           str r0, [sp, 0x2c]          ; DMA_M2M_Disable
| |||||||   0x08004fa4      4ff48074       mov.w r4, 0x100             ; 256
| |||||||   0x08004fa8      0494           str r4, [sp, 0x10]          ; DMA_BufferSize = 256
| |||||||   0x08004faa      dff8b854       ldr.w r5, [0x08005464]      ; [0x8005464:4]=0x20000768
| |||||||   0x08004fae      05f16c00       add.w r0, r5, 0x6c
| |||||||   0x08004fb2      0290           str r0, [sp, 8]             ; DMA_MemoryBaseAddr = 0x200007d4
| |||||||   0x08004fb4      1020           movs r0, 0x10               ; 16
| |||||||   0x08004fb6      0390           str r0, [sp, 0xc]           ; DMA_DIR_PeripheralDST
| |||||||   0x08004fb8      4ff40056       mov.w r6, 0x2000
| |||||||   0x08004fbc      0a96           str r6, [sp, 0x28]          ; DMA_Priority_High
| |||||||   0x08004fbe      01a9           add r1, sp, 4
| |||||||   0x08004fc0      3846           mov r0, r7
| |||||||   0x08004fc2      02f0a9fb       bl DMA_Init                 ; configure DMA1 Channel7
| |||||||   0x08004fc6      0122           movs r2, 1                  ; 1
| |||||||   0x08004fc8      0221           movs r1, 2                  ; 2
| |||||||   0x08004fca      3846           mov r0, r7
| |||||||   0x08004fcc      02f0cdfb       bl DMA_ITConfig             ; enable DMA_IT_TC transfer complete
| |||||||   0x08004fd0      dff8f079       ldr.w r7, [0x080059c4]      ; [0x80059c4:4]=0x4002606c ; DMA channel 6
| |||||||   0x08004fd4      3846           mov r0, r7
| |||||||   0x08004fd6      02f029fb       bl DMA_DeInit               ; reset DMA1 Channel6
| |||||||   0x08004fda      cdf80480       str.w r8, [sp, 4]
| |||||||   0x08004fde      0020           movs r0, 0
| |||||||   0x08004fe0      0790           str r0, [sp, 0x1c]
| |||||||   0x08004fe2      0890           str r0, [sp, 0x20]
| |||||||   0x08004fe4      0590           str r0, [sp, 0x14]
| |||||||   0x08004fe6      8020           movs r0, 0x80               ; 128
| |||||||   0x08004fe8      0690           str r0, [sp, 0x18]
| |||||||   0x08004fea      0020           movs r0, 0
| |||||||   0x08004fec      0990           str r0, [sp, 0x24]
| |||||||   0x08004fee      0b90           str r0, [sp, 0x2c]
| |||||||   0x08004ff0      0494           str r4, [sp, 0x10]          ; DMA_BufferSize = 0
| |||||||   0x08004ff2      05f26c40       addw r0, r5, 0x46c
| |||||||   0x08004ff6      0290           str r0, [sp, 8]             ; DMA_MemoryBaseAddr = 0x20000bd4
| |||||||   0x08004ff8      0020           movs r0, 0
| |||||||   0x08004ffa      0390           str r0, [sp, 0xc]           ; DMA_DIR_PeripheralSRC
| |||||||   0x08004ffc      0a96           str r6, [sp, 0x28]          ; DMA_Priority_Low
| |||||||   0x08004ffe      01a9           add r1, sp, 4
| |||||||   0x08005000      3846           mov r0, r7
| |||||||   0x08005002      02f089fb       bl DMA_Init                 ; configure DMA1 Channel6
| |||||||   0x08005006      0122           movs r2, 1                  ; 1
| |||||||   0x08005008      0221           movs r1, 2                  ; 2
| |||||||   0x0800500a      3846           mov r0, r7
| |||||||   0x0800500c      02f0adfb       bl DMA_ITConfig             ; enable DMA_IT_TC transfer complete
| |||||||   0x08005010      0121           movs r1, 1                  ; 1
| |||||||   0x08005012      3846           mov r0, r7
| |||||||   0x08005014      02f09bfb       bl DMA_Cmd                  ; enable DMA1 Channel6
| |||||||   0x08005018      0cb0           add sp, 0x30
\ |||||||   0x0800501a      bde8f081       pop.w {r4, r5, r6, r7, r8, pc}
  |||||||   0x0800501e      0000           movs r0, r0
\ |||||||   ;-- USART2_Setup:
/ (fcn) _USART2_Setup 218
|       Caller: _KBD_PWRManage
|   _USART2_Setup ();
| |||||||      ; CALL XREF from 0x08008df4 (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008e62 (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008e8a (_KBD_PWRManage)
| |||||||   0x08005020      80b5           push {r7, lr}
| |||||||   0x08005022      fff728ff       bl _USART2_IOInit
| |||||||   0x08005026      fff746ff       bl _USART2_ClockEnable
| |||||||   0x0800502a      fff749ff       bl _USART2_Init
| |||||||   0x0800502e      fff790ff       bl _DMA1_ClockEnable_2
| |||||||   0x08005032      bde80140       pop.w {r0, lr}
\ ========< 0x08005036      91e7           b _USART2_DMAInit
\ |||||||   ;-- USART3_ClockEnable:
/ (fcn) _USART3_ClockEnable 10
|       Caller: _USART3_Setup
|   _USART3_ClockEnable ();
| |||||||      ; CALL XREF from 0x080051d0 (_USART3_Setup)
| |||||||   0x08005038      0121           movs r1, 1                  ; 1
| |||||||   0x0800503a      4ff48020       mov.w r0, 0x40000           ; USART 3 clock enable
\ ========< 0x0800503e      01f00ebe       b.w RCC_APB1PeriphClockCmd
\ |||||||   ;-- DMA1_ClockEnable:
/ (fcn) _DMA1_ClockEnable 10
|       Caller: _USART3_Setup
|   _DMA1_ClockEnable ();
| |||||||      ; CALL XREF from 0x080051d8 (_USART3_Setup)
| |||||||   0x08005042      0121           movs r1, 1                  ; 1 ; DMA1 clock enable
| |||||||   0x08005044      4ff08070       mov.w r0, 0x1000000
\ ========< 0x08005048      01f0f3bd       b.w RCC_AHBPeriphClockCmd
\ |||||||   ;-- USART3_Init:
/ (fcn) _USART3_Init 200
|       Caller: _USART3_Setup
|   _USART3_Init ();
| |||||||      ; CALL XREF from 0x080051d4 (_USART3_Setup)
| |||||||   0x0800504c      10b5           push {r4, lr}
| |||||||   0x0800504e      88b0           sub sp, 0x20
| |||||||   0x08005050      4ff44060       mov.w r0, 0xc00             ; 3072 ; pins 10 and 11
| |||||||   0x08005054      0190           str r0, [sp, 4]
| |||||||   0x08005056      0220           movs r0, 2                  ; 2 ; af mode
| |||||||   0x08005058      8df80800       strb.w r0, [sp, 8]
| |||||||   0x0800505c      0020           movs r0, 0
| |||||||   0x0800505e      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x08005062      0120           movs r0, 1                  ; 1
| |||||||   0x08005064      8df80b00       strb.w r0, [sp, 0xb]
| |||||||   0x08005068      0320           movs r0, 3                  ; 3 ; pullup/pulldown at the same time?
| |||||||   0x0800506a      8df80900       strb.w r0, [sp, 9]
| |||||||   0x0800506e      dff85849       ldr.w r4, [0x080059c8]      ; [0x80059c8:4]=0x40020400 ; PortB
| |||||||   0x08005072      01a9           add r1, sp, 4
| |||||||   0x08005074      2046           mov r0, r4
| |||||||   0x08005076      01f091ff       bl GPIO_Init
| |||||||   0x0800507a      0722           movs r2, 7                  ; 7
| |||||||   0x0800507c      0a21           movs r1, 0xa                ; 10
| |||||||   0x0800507e      2046           mov r0, r4
| |||||||   0x08005080      01f0d5ff       bl GPIO_PinAFConfig         ; pin 10 usart3 af tx
| |||||||   0x08005084      0722           movs r2, 7                  ; 7
| |||||||   0x08005086      0b21           movs r1, 0xb                ; 11
| |||||||   0x08005088      2046           mov r0, r4
| |||||||   0x0800508a      01f0d0ff       bl GPIO_PinAFConfig         ; pin 11 usart3 af rx
| |||||||   0x0800508e      4ff41640       mov.w r0, 0x9600
| |||||||   0x08005092      0390           str r0, [sp, 0xc]
| |||||||   0x08005094      0020           movs r0, 0
| |||||||   0x08005096      0490           str r0, [sp, 0x10]
| |||||||   0x08005098      adf81400       strh.w r0, [sp, 0x14]
| |||||||   0x0800509c      adf81800       strh.w r0, [sp, 0x18]
| |||||||   0x080050a0      0c20           movs r0, 0xc                ; 12
| |||||||   0x080050a2      adf81600       strh.w r0, [sp, 0x16]
| |||||||   0x080050a6      dff8384b       ldr.w r4, [0x08005be0]      ; [0x8005be0:4]=0x40004800 ; USART3
| |||||||   0x080050aa      03a9           add r1, sp, 0xc
| |||||||   0x080050ac      2046           mov r0, r4
| |||||||   0x080050ae      02f0faf9       bl USART_Init
| |||||||   0x080050b2      0122           movs r2, 1                  ; 1
| |||||||   0x080050b4      40f22661       movw r1, 0x626              ; 1574
| |||||||   0x080050b8      2046           mov r0, r4
| |||||||   0x080050ba      02f06bfa       bl USART_ITConfig
| |||||||   0x080050be      0122           movs r2, 1                  ; 1
| |||||||   0x080050c0      40f22441       movw r1, 0x424              ; 1060
| |||||||   0x080050c4      2046           mov r0, r4
| |||||||   0x080050c6      02f065fa       bl USART_ITConfig
| |||||||   0x080050ca      4ff48060       mov.w r0, 0x400             ; 1024
| |||||||   0x080050ce      01f019ff       bl NVIC_PriorityGroupConfig
| |||||||   0x080050d2      2720           movs r0, 0x27               ; ''' ; 39
| |||||||   0x080050d4      8df80000       strb.w r0, [sp]
| |||||||   0x080050d8      0120           movs r0, 1                  ; 1
| |||||||   0x080050da      8df80100       strb.w r0, [sp, 1]
| |||||||   0x080050de      8df80200       strb.w r0, [sp, 2]
| |||||||   0x080050e2      8df80300       strb.w r0, [sp, 3]
| |||||||   0x080050e6      00a8           add r0, sp, 0
| |||||||   0x080050e8      01f011ff       bl NVIC_Init
| |||||||   0x080050ec      0122           movs r2, 1                  ; 1
| |||||||   0x080050ee      4021           movs r1, 0x40               ; '@' ; 64
| |||||||   0x080050f0      2046           mov r0, r4
| |||||||   0x080050f2      02f045fa       bl USART_DMACmd
| |||||||   0x080050f6      0122           movs r2, 1                  ; 1
| |||||||   0x080050f8      8021           movs r1, 0x80               ; 128
| |||||||   0x080050fa      2046           mov r0, r4
| |||||||   0x080050fc      02f040fa       bl USART_DMACmd
| |||||||   0x08005100      0121           movs r1, 1                  ; 1
| |||||||   0x08005102      2046           mov r0, r4
| |||||||   0x08005104      02f02cfa       bl USART_Cmd
| |||||||   0x08005108      4021           movs r1, 0x40               ; '@' ; 64
| |||||||   0x0800510a      2046           mov r0, r4
| |||||||   0x0800510c      02f05ffa       bl USART_ClearFlag
| |||||||   0x08005110      08b0           add sp, 0x20
\ |||||||   0x08005112      10bd           pop {r4, pc}
\ |||||||   ;-- USART3_DMAInit:
/ (fcn) _USART3_DMAInit 186
|   _USART3_DMAInit ();
| |||||||      ; JMP XREF from 0x080051e0 (_USART3_Setup)
| --------> 0x08005114      f0b5           push {r4, r5, r6, r7, lr}
| |||||||   0x08005116      8db0           sub sp, 0x34                ; '4'
| |||||||   0x08005118      0c20           movs r0, 0xc                ; 12
| |||||||   0x0800511a      8df80000       strb.w r0, [sp]
| |||||||   0x0800511e      0320           movs r0, 3                  ; 3
| |||||||   0x08005120      8df80100       strb.w r0, [sp, 1]
| |||||||   0x08005124      0220           movs r0, 2                  ; 2
| |||||||   0x08005126      8df80200       strb.w r0, [sp, 2]
| |||||||   0x0800512a      0120           movs r0, 1                  ; 1
| |||||||   0x0800512c      8df80300       strb.w r0, [sp, 3]
| |||||||   0x08005130      00a8           add r0, sp, 0
| |||||||   0x08005132      01f0ecfe       bl NVIC_Init
| |||||||   0x08005136      dff8ac6a       ldr.w r6, [0x08005be4]      ; [0x8005be4:4]=0x4002601c ; DMA channel2
| |||||||   0x0800513a      3046           mov r0, r6
| |||||||   0x0800513c      02f076fa       bl DMA_DeInit
| |||||||   0x08005140      dff8a47a       ldr.w r7, [0x08005be8]      ; [0x8005be8:4]=0x40004804 ; USART3
| |||||||   0x08005144      0197           str r7, [sp, 4]
| |||||||   0x08005146      0020           movs r0, 0
| |||||||   0x08005148      0790           str r0, [sp, 0x1c]
| |||||||   0x0800514a      0890           str r0, [sp, 0x20]
| |||||||   0x0800514c      0590           str r0, [sp, 0x14]
| |||||||   0x0800514e      8020           movs r0, 0x80               ; 128
| |||||||   0x08005150      0690           str r0, [sp, 0x18]
| |||||||   0x08005152      0020           movs r0, 0
| |||||||   0x08005154      0990           str r0, [sp, 0x24]
| |||||||   0x08005156      0b90           str r0, [sp, 0x2c]
| |||||||   0x08005158      4ff48074       mov.w r4, 0x100             ; 256
| |||||||   0x0800515c      0494           str r4, [sp, 0x10]
| |||||||   0x0800515e      dff88c0a       ldr.w r0, [0x08005bec]      ; [0x8005bec:4]=0x200016a8
| |||||||   0x08005162      0290           str r0, [sp, 8]
| |||||||   0x08005164      1020           movs r0, 0x10               ; 16
| |||||||   0x08005166      0390           str r0, [sp, 0xc]
| |||||||   0x08005168      4ff40055       mov.w r5, 0x2000
| |||||||   0x0800516c      0a95           str r5, [sp, 0x28]
| |||||||   0x0800516e      01a9           add r1, sp, 4
| |||||||   0x08005170      3046           mov r0, r6
| |||||||   0x08005172      02f0d1fa       bl DMA_Init
| |||||||   0x08005176      0122           movs r2, 1                  ; 1
| |||||||   0x08005178      0221           movs r1, 2                  ; 2
| |||||||   0x0800517a      3046           mov r0, r6
| |||||||   0x0800517c      02f0f5fa       bl DMA_ITConfig
| |||||||   0x08005180      dff86c6a       ldr.w r6, [0x08005bf0]      ; [0x8005bf0:4]=0x40026030 ; DMA
| |||||||   0x08005184      0021           movs r1, 0
| |||||||   0x08005186      3046           mov r0, r6
| |||||||   0x08005188      02f0e1fa       bl DMA_Cmd
| |||||||   0x0800518c      3046           mov r0, r6
| |||||||   0x0800518e      02f04dfa       bl DMA_DeInit
| |||||||   0x08005192      0197           str r7, [sp, 4]
| |||||||   0x08005194      0020           movs r0, 0
| |||||||   0x08005196      0790           str r0, [sp, 0x1c]
| |||||||   0x08005198      0890           str r0, [sp, 0x20]
| |||||||   0x0800519a      0590           str r0, [sp, 0x14]
| |||||||   0x0800519c      8020           movs r0, 0x80               ; 128
| |||||||   0x0800519e      0690           str r0, [sp, 0x18]
| |||||||   0x080051a0      0020           movs r0, 0
| |||||||   0x080051a2      0990           str r0, [sp, 0x24]
| |||||||   0x080051a4      0b90           str r0, [sp, 0x2c]
| |||||||   0x080051a6      0494           str r4, [sp, 0x10]
| |||||||   0x080051a8      dff8480a       ldr.w r0, [0x08005bf4]      ; [0x8005bf4:4]=0x200009d4
| |||||||   0x080051ac      0290           str r0, [sp, 8]
| |||||||   0x080051ae      0020           movs r0, 0
| |||||||   0x080051b0      0390           str r0, [sp, 0xc]
| |||||||   0x080051b2      0a95           str r5, [sp, 0x28]
| |||||||   0x080051b4      01a9           add r1, sp, 4
| |||||||   0x080051b6      3046           mov r0, r6
| |||||||   0x080051b8      02f0aefa       bl DMA_Init
| |||||||   0x080051bc      2046           mov r0, r4
| |||||||   0x080051be      02f0defa       bl DMA_ClearFlag
| |||||||   0x080051c2      0121           movs r1, 1                  ; 1
| |||||||   0x080051c4      3046           mov r0, r6
| |||||||   0x080051c6      02f0c2fa       bl DMA_Cmd
| |||||||   0x080051ca      0db0           add sp, 0x34
\ |||||||   0x080051cc      f0bd           pop {r4, r5, r6, r7, pc}
\ |||||||   ;-- USART3_Setup:
/ (fcn) _USART3_Setup 206
|       Caller: _KBD_PWRManage
|   _USART3_Setup ();
| |||||||      ; CALL XREF from 0x08008df8 (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008e66 (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008e8e (_KBD_PWRManage)
| |||||||   0x080051ce      80b5           push {r7, lr}
| |||||||   0x080051d0      fff732ff       bl _USART3_ClockEnable
| |||||||   0x080051d4      fff73aff       bl _USART3_Init
| |||||||   0x080051d8      fff733ff       bl _DMA1_ClockEnable
| |||||||   0x080051dc      bde80140       pop.w {r0, lr}
\ ========< 0x080051e0      98e7           b _USART3_DMAInit
  |||||||   0x080051e2      0000           movs r0, r0
  |||||||      ; DATA XREF from 0x0800463a (_USB_PA11_12_Config)
  |||||||   0x080051e4      .dword 0x200006e8
| |||||||   ;-- LED_C_CMDSend:
/ (fcn) _LED_C_CMDSend 60
|       Caller: _LED_StateUpdate
|   _LED_C_CMDSend ();
| |||||||      ; CALL XREF from 0x08008a1a (_LED_StateUpdate)
| |||||||   0x080051e8      38b5           push {r3, r4, r5, lr}
| |||||||   0x080051ea      0446           mov r4, r0
| |||||||   0x080051ec      0920           movs r0, 9                  ; 9
| |||||||   0x080051ee      8df80000       strb.w r0, [sp]
| |||||||   0x080051f2      0220           movs r0, 2                  ; 2
| |||||||   0x080051f4      8df80100       strb.w r0, [sp, 1]
| |||||||   0x080051f8      0c20           movs r0, 0xc                ; 12
| |||||||   0x080051fa      8df80200       strb.w r0, [sp, 2]
| |||||||   0x080051fe      dff8ec59       ldr.w r5, [0x08005bec]      ; [0x8005bec:4]=0x200016a8
| |||||||   0x08005202      0322           movs r2, 3                  ; 3 ; copy msg header to tx buffer
| |||||||   0x08005204      00a9           add r1, sp, 0
| |||||||   0x08005206      2846           mov r0, r5
| |||||||   0x08005208      02f0f8fa       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x0800520c      ec70           strb r4, [r5, 3]            ; copy payload to tx buffer
| |||||||   0x0800520e      dff8d449       ldr.w r4, [0x08005be4]      ; [0x8005be4:4]=0x4002601c ; DMA channel2
| |||||||   0x08005212      0421           movs r1, 4                  ; 4
| |||||||   0x08005214      2046           mov r0, r4
| |||||||   0x08005216      02f0a6fa       bl DMA_SetCurrDataCounter
| |||||||   0x0800521a      0121           movs r1, 1                  ; 1
| |||||||   0x0800521c      2046           mov r0, r4
| |||||||   0x0800521e      02f096fa       bl DMA_Cmd
\ |||||||   0x08005222      31bd           pop {r0, r4, r5, pc}
  |||||||      ; XREFS: DATA 0x080049f2  DATA 0x08004b26  DATA 0x08004b9a  DATA 0x08004c0e  DATA 0x08004c82  DATA 0x08004c92  
  |||||||   0x08005224      .dword 0x200008d4
| |||||||   ;-- LED_CMDSend:
/ (fcn) _LED_CMDSend 572
|       Caller: _LED_StateUpdate
|   _LED_CMDSend ();
| |||||||      ; CALL XREF from 0x080088a2 (_LED_StateUpdate)
| |||||||   0x08005228      70b5           push {r4, r5, r6, lr}
| |||||||   0x0800522a      90b0           sub sp, 0x40                ; '@'
| |||||||   0x0800522c      0920           movs r0, 9                  ; 9
| |||||||   0x0800522e      8df80800       strb.w r0, [sp, 8]
| |||||||   0x08005232      8c4c           ldr r4, [0x08005464]        ; [0x8005464:4]=0x20000768
| |||||||   0x08005234      2079           ldrb r0, [r4, 4]            ; 0x2000076c
| |||||||   0x08005236      0028           cmp r0, 0
| ========< 0x08005238      00f0ca80       beq.w 0x80053d0
| |||||||   0x0800523c      0020           movs r0, 0
| |||||||   0x0800523e      2071           strb r0, [r4, 4]
| |||||||   0x08005240      dff8a859       ldr.w r5, [0x08005bec]      ; [0x8005bec:4]=0x200016a8
| |||||||   0x08005244      607f           ldrb r0, [r4, 0x1d]         ; 0x20000785
| |||||||   0x08005246      0128           cmp r0, 1                   ; 1
| ========< 0x08005248      40f0b280       bne.w 0x80053b0
| |||||||   0x0800524c      0720           movs r0, 7                  ; 7
| |||||||   0x0800524e      8df80900       strb.w r0, [sp, 9]
| |||||||   0x08005252      0b20           movs r0, 0xb                ; 11
| |||||||   0x08005254      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x08005258      0322           movs r2, 3                  ; 3
| |||||||   0x0800525a      02a9           add r1, sp, 8
| |||||||   0x0800525c      2846           mov r0, r5
| |||||||   0x0800525e      02f0cdfa       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x08005262      ca20           movs r0, 0xca               ; 202
| |||||||   0x08005264      e870           strb r0, [r5, 3]
| |||||||   0x08005266      0a20           movs r0, 0xa                ; 10
| |||||||   0x08005268      2871           strb r0, [r5, 4]
| |||||||   0x0800526a      0020           movs r0, 0
| |||||||   0x0800526c      8df80c00       strb.w r0, [sp, 0xc]
| |||||||   0x08005270      ff21           movs r1, 0xff               ; 255
| |||||||   0x08005272      03a8           add r0, sp, 0xc
| |||||||   0x08005274      4170           strb r1, [r0, 1]
| |||||||   0x08005276      0df10d02       add.w r2, sp, 0xd
| |||||||   0x0800527a      0023           movs r3, 0
| |||||||   0x0800527c      5370           strb r3, [r2, 1]
| |||||||   0x0800527e      9370           strb r3, [r2, 2]
| |||||||   0x08005280      0123           movs r3, 1                  ; 1
| |||||||   0x08005282      d370           strb r3, [r2, 3]
| |||||||   0x08005284      2f23           movs r3, 0x2f               ; '/' ; 47
| |||||||   0x08005286      1371           strb r3, [r2, 4]
| |||||||   0x08005288      0023           movs r3, 0
| |||||||   0x0800528a      5371           strb r3, [r2, 5]
| |||||||   0x0800528c      9171           strb r1, [r2, 6]
| |||||||   0x0800528e      d371           strb r3, [r2, 7]
| |||||||   0x08005290      0223           movs r3, 2                  ; 2
| |||||||   0x08005292      1372           strb r3, [r2, 8]
| |||||||   0x08005294      0c23           movs r3, 0xc                ; 12
| |||||||   0x08005296      5372           strb r3, [r2, 9]
| |||||||   0x08005298      0023           movs r3, 0
| |||||||   0x0800529a      9372           strb r3, [r2, 0xa]
| |||||||   0x0800529c      d172           strb r1, [r2, 0xb]
| |||||||   0x0800529e      1373           strb r3, [r2, 0xc]
| |||||||   0x080052a0      0123           movs r3, 1                  ; 1
| |||||||   0x080052a2      5373           strb r3, [r2, 0xd]
| |||||||   0x080052a4      9373           strb r3, [r2, 0xe]
| |||||||   0x080052a6      d173           strb r1, [r2, 0xf]
| |||||||   0x080052a8      0023           movs r3, 0
| |||||||   0x080052aa      1374           strb r3, [r2, 0x10]
| |||||||   0x080052ac      5374           strb r3, [r2, 0x11]
| |||||||   0x080052ae      0123           movs r3, 1                  ; 1
| |||||||   0x080052b0      9374           strb r3, [r2, 0x12]
| |||||||   0x080052b2      0223           movs r3, 2                  ; 2
| |||||||   0x080052b4      d374           strb r3, [r2, 0x13]
| |||||||   0x080052b6      1175           strb r1, [r2, 0x14]
| |||||||   0x080052b8      0023           movs r3, 0
| |||||||   0x080052ba      5375           strb r3, [r2, 0x15]
| |||||||   0x080052bc      9375           strb r3, [r2, 0x16]
| |||||||   0x080052be      0123           movs r3, 1                  ; 1
| |||||||   0x080052c0      d375           strb r3, [r2, 0x17]
| |||||||   0x080052c2      0323           movs r3, 3                  ; 3
| |||||||   0x080052c4      1376           strb r3, [r2, 0x18]
| |||||||   0x080052c6      5176           strb r1, [r2, 0x19]
| |||||||   0x080052c8      0023           movs r3, 0
| |||||||   0x080052ca      9376           strb r3, [r2, 0x1a]
| |||||||   0x080052cc      d376           strb r3, [r2, 0x1b]
| |||||||   0x080052ce      0123           movs r3, 1                  ; 1
| |||||||   0x080052d0      1377           strb r3, [r2, 0x1c]
| |||||||   0x080052d2      0423           movs r3, 4                  ; 4
| |||||||   0x080052d4      5377           strb r3, [r2, 0x1d]
| |||||||   0x080052d6      9177           strb r1, [r2, 0x1e]
| |||||||   0x080052d8      0023           movs r3, 0
| |||||||   0x080052da      d377           strb r3, [r2, 0x1f]
| |||||||   0x080052dc      1a46           mov r2, r3
| |||||||   0x080052de      80f82120       strb.w r2, [r0, 0x21]
| |||||||   0x080052e2      0df12d02       add.w r2, sp, 0x2d
| |||||||   0x080052e6      0123           movs r3, 1                  ; 1
| |||||||   0x080052e8      5370           strb r3, [r2, 1]
| |||||||   0x080052ea      0b23           movs r3, 0xb                ; 11
| |||||||   0x080052ec      9370           strb r3, [r2, 2]
| |||||||   0x080052ee      d170           strb r1, [r2, 3]
| |||||||   0x080052f0      0023           movs r3, 0
| |||||||   0x080052f2      1371           strb r3, [r2, 4]
| |||||||   0x080052f4      5371           strb r3, [r2, 5]
| |||||||   0x080052f6      0123           movs r3, 1                  ; 1
| |||||||   0x080052f8      9371           strb r3, [r2, 6]
| |||||||   0x080052fa      0a23           movs r3, 0xa                ; 10
| |||||||   0x080052fc      d371           strb r3, [r2, 7]
| |||||||   0x080052fe      94f86530       ldrb.w r3, [r4, 0x65]       ; 0x200007cd
| |||||||   0x08005302      002b           cmp r3, 0
| ========< 0x08005304      04d1           bne 0x8005310
| |||||||   0x08005306      0023           movs r3, 0
| |||||||   0x08005308      1372           strb r3, [r2, 8]
| |||||||   0x0800530a      5172           strb r1, [r2, 9]
| |||||||   0x0800530c      9372           strb r3, [r2, 0xa]
| ========< 0x0800530e      03e0           b 0x8005318
| |||||||      ; JMP XREF from 0x08005304 (_LED_CMDSend)
| --------> 0x08005310      1172           strb r1, [r2, 8]
| |||||||   0x08005312      5172           strb r1, [r2, 9]
| |||||||   0x08005314      0023           movs r3, 0
| |||||||   0x08005316      9372           strb r3, [r2, 0xa]
| |||||||      ; JMP XREF from 0x0800530e (_LED_CMDSend)
| --------> 0x08005318      0123           movs r3, 1                  ; 1
| |||||||   0x0800531a      d372           strb r3, [r2, 0xb]
| |||||||   0x0800531c      1d23           movs r3, 0x1d               ; 29
| |||||||   0x0800531e      1373           strb r3, [r2, 0xc]
| |||||||   0x08005320      dff8a43a       ldr.w r3, [0x08005dc8]      ; [0x8005dc8:4]=0x200017a8
| |||||||   0x08005324      93f8ee30       ldrb.w r3, [r3, 0xee]       ; 0x20001896
| |||||||   0x08005328      012b           cmp r3, 1                   ; 1
| ========< 0x0800532a      01d1           bne 0x8005330
| |||||||   0x0800532c      5173           strb r1, [r2, 0xd]
| ========< 0x0800532e      01e0           b 0x8005334
| |||||||      ; JMP XREF from 0x0800532a (_LED_CMDSend)
| --------> 0x08005330      0026           movs r6, 0
| |||||||   0x08005332      5673           strb r6, [r2, 0xd]
| |||||||      ; JMP XREF from 0x0800532e (_LED_CMDSend)
| --------> 0x08005334      012b           cmp r3, 1                   ; 1
| ========< 0x08005336      02d1           bne 0x800533e
| |||||||   0x08005338      0021           movs r1, 0
| |||||||   0x0800533a      9173           strb r1, [r2, 0xe]
| ========< 0x0800533c      00e0           b 0x8005340
| |||||||      ; JMP XREF from 0x08005336 (_LED_CMDSend)
| --------> 0x0800533e      9173           strb r1, [r2, 0xe]
| |||||||      ; JMP XREF from 0x0800533c (_LED_CMDSend)
| --------> 0x08005340      0021           movs r1, 0
| |||||||   0x08005342      d173           strb r1, [r2, 0xf]
| |||||||   0x08005344      0121           movs r1, 1                  ; 1
| |||||||   0x08005346      1174           strb r1, [r2, 0x10]
| |||||||   0x08005348      0021           movs r1, 0
| ========< 0x0800534a      0fe0           b 0x800536c
| |||||||      ; JMP XREF from 0x0800536e (_LED_CMDSend)
| --------> 0x0800534c      01eb8102       add.w r2, r1, r1, lsl 2
| |||||||   0x08005350      5319           adds r3, r2, r5
| |||||||   0x08005352      165c           ldrb r6, [r2, r0]
| |||||||   0x08005354      5e71           strb r6, [r3, 5]
| |||||||   0x08005356      03ae           add r6, sp, 0xc
| |||||||   0x08005358      9219           adds r2, r2, r6
| |||||||   0x0800535a      5678           ldrb r6, [r2, 1]
| |||||||   0x0800535c      9e71           strb r6, [r3, 6]
| |||||||   0x0800535e      9678           ldrb r6, [r2, 2]
| |||||||   0x08005360      de71           strb r6, [r3, 7]
| |||||||   0x08005362      d678           ldrb r6, [r2, 3]
| |||||||   0x08005364      1e72           strb r6, [r3, 8]
| |||||||   0x08005366      1279           ldrb r2, [r2, 4]
| |||||||   0x08005368      5a72           strb r2, [r3, 9]
| |||||||   0x0800536a      491c           adds r1, r1, 1
| |||||||      ; JMP XREF from 0x0800534a (_LED_CMDSend)
| --------> 0x0800536c      0a29           cmp r1, 0xa                 ; 10
| ========< 0x0800536e      eddb           blt 0x800534c
| |||||||   0x08005370      e07e           ldrb r0, [r4, 0x1b]
| |||||||   0x08005372      0028           cmp r0, 0
| ========< 0x08005374      05d0           beq 0x8005382
| |||||||   0x08005376      0120           movs r0, 1                  ; 1
| |||||||   0x08005378      fff762fd       bl _LED_WakeUpCmd
| |||||||   0x0800537c      c820           movs r0, 0xc8               ; 200
| |||||||   0x0800537e      01f0c1fe       bl _Wait
| |||||||      ; JMP XREF from 0x08005374 (_LED_CMDSend)
| --------> 0x08005382      dff86058       ldr.w r5, [0x08005be4]      ; [0x8005be4:4]=0x4002601c ; DMA channel2
| |||||||   0x08005386      3721           movs r1, 0x37               ; '7' ; 55
| |||||||   0x08005388      2846           mov r0, r5
| |||||||   0x0800538a      02f0ecf9       bl DMA_SetCurrDataCounter
| |||||||   0x0800538e      0121           movs r1, 1                  ; 1
| |||||||   0x08005390      2846           mov r0, r5
| |||||||   0x08005392      02f0dcf9       bl DMA_Cmd
| |||||||   0x08005396      0020           movs r0, 0
| |||||||   0x08005398      6070           strb r0, [r4, 1]
| |||||||   0x0800539a      a070           strb r0, [r4, 2]
| |||||||   0x0800539c      0220           movs r0, 2                  ; 2
| |||||||   0x0800539e      0190           str r0, [sp, 4]
| |||||||   0x080053a0      0020           movs r0, 0
| |||||||   0x080053a2      0090           str r0, [sp]
| |||||||   0x080053a4      0346           mov r3, r0
| |||||||   0x080053a6      0622           movs r2, 6                  ; 6
| |||||||   0x080053a8      1146           mov r1, r2
| |||||||   0x080053aa      00f0f9f9       bl _MSG_CMDPrepareOrSend
| ========< 0x080053ae      57e0           b 0x8005460
| |||||||      ; JMP XREF from 0x08005248 (_LED_CMDSend)
| --------> 0x080053b0      2078           ldrb r0, [r4]
| |||||||   0x080053b2      e870           strb r0, [r5, 3]
| |||||||   0x080053b4      0320           movs r0, 3                  ; 3
| |||||||   0x080053b6      0190           str r0, [sp, 4]
| |||||||   0x080053b8      0120           movs r0, 1                  ; 1
| |||||||   0x080053ba      0090           str r0, [sp]
| |||||||   0x080053bc      eb1c           adds r3, r5, 3
| |||||||   0x080053be      0246           mov r2, r0
| |||||||   0x080053c0      0921           movs r1, 9                  ; 9
| |||||||   0x080053c2      0020           movs r0, 0
| |||||||   0x080053c4      00f0ecf9       bl _MSG_CMDPrepareOrSend
| |||||||   0x080053c8      0020           movs r0, 0
| |||||||   0x080053ca      6070           strb r0, [r4, 1]
| |||||||   0x080053cc      a070           strb r0, [r4, 2]
| ========< 0x080053ce      47e0           b 0x8005460
| |||||||      ; JMP XREF from 0x08005238 (_LED_CMDSend)
| --------> 0x080053d0      6078           ldrb r0, [r4, 1]
| |||||||   0x080053d2      e178           ldrb r1, [r4, 3]
| |||||||   0x080053d4      0843           orrs r0, r1
| |||||||   0x080053d6      a178           ldrb r1, [r4, 2]
| |||||||   0x080053d8      0843           orrs r0, r1
| ========< 0x080053da      41d0           beq 0x8005460
| |||||||   0x080053dc      0520           movs r0, 5                  ; 5
| |||||||   0x080053de      8df80900       strb.w r0, [sp, 9]
| |||||||   0x080053e2      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x080053e6      dff80458       ldr.w r5, [0x08005bec]      ; [0x8005bec:4]=0x200016a8
| |||||||   0x080053ea      0322           movs r2, 3                  ; 3
| |||||||   0x080053ec      02a9           add r1, sp, 8
| |||||||   0x080053ee      2846           mov r0, r5
| |||||||   0x080053f0      02f004fa       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x080053f4      6078           ldrb r0, [r4, 1]
| |||||||   0x080053f6      0028           cmp r0, 0
| ========< 0x080053f8      04d0           beq 0x8005404
| |||||||   0x080053fa      0120           movs r0, 1                  ; 1
| |||||||   0x080053fc      e870           strb r0, [r5, 3]
| |||||||   0x080053fe      0020           movs r0, 0
| |||||||   0x08005400      6070           strb r0, [r4, 1]
| ========< 0x08005402      01e0           b 0x8005408
| |||||||      ; JMP XREF from 0x080053f8 (_LED_CMDSend)
| --------> 0x08005404      0020           movs r0, 0
| |||||||   0x08005406      e870           strb r0, [r5, 3]
| |||||||      ; JMP XREF from 0x08005402 (_LED_CMDSend)
| --------> 0x08005408      e078           ldrb r0, [r4, 3]
| |||||||   0x0800540a      0028           cmp r0, 0
| ========< 0x0800540c      04d0           beq 0x8005418
| |||||||   0x0800540e      0120           movs r0, 1                  ; 1
| |||||||   0x08005410      2871           strb r0, [r5, 4]
| |||||||   0x08005412      0020           movs r0, 0
| |||||||   0x08005414      e070           strb r0, [r4, 3]
| ========< 0x08005416      01e0           b 0x800541c
| |||||||      ; JMP XREF from 0x0800540c (_LED_CMDSend)
| --------> 0x08005418      0020           movs r0, 0
| |||||||   0x0800541a      2871           strb r0, [r5, 4]
| |||||||      ; JMP XREF from 0x08005416 (_LED_CMDSend)
| --------> 0x0800541c      a078           ldrb r0, [r4, 2]
| |||||||   0x0800541e      0028           cmp r0, 0
| ========< 0x08005420      04d0           beq 0x800542c
| |||||||   0x08005422      0120           movs r0, 1                  ; 1
| |||||||   0x08005424      6871           strb r0, [r5, 5]
| |||||||   0x08005426      0020           movs r0, 0
| |||||||   0x08005428      a070           strb r0, [r4, 2]
| ========< 0x0800542a      01e0           b 0x8005430
| |||||||      ; JMP XREF from 0x08005420 (_LED_CMDSend)
| --------> 0x0800542c      0020           movs r0, 0
| |||||||   0x0800542e      6871           strb r0, [r5, 5]
| |||||||      ; JMP XREF from 0x0800542a (_LED_CMDSend)
| --------> 0x08005430      a871           strb r0, [r5, 6]
| |||||||   0x08005432      e07e           ldrb r0, [r4, 0x1b]
| |||||||   0x08005434      0028           cmp r0, 0
| ========< 0x08005436      07d0           beq 0x8005448
| |||||||   0x08005438      0120           movs r0, 1                  ; 1
| |||||||   0x0800543a      fff701fd       bl _LED_WakeUpCmd
| |||||||   0x0800543e      0020           movs r0, 0
| |||||||   0x08005440      e076           strb r0, [r4, 0x1b]
| |||||||   0x08005442      c820           movs r0, 0xc8               ; 200
| |||||||   0x08005444      01f05efe       bl _Wait
| |||||||      ; JMP XREF from 0x08005436 (_LED_CMDSend)
| --------> 0x08005448      dff89857       ldr.w r5, [0x08005be4]      ; [0x8005be4:4]=0x4002601c ; DMA channel2
| |||||||   0x0800544c      0721           movs r1, 7                  ; 7
| |||||||   0x0800544e      2846           mov r0, r5
| |||||||   0x08005450      02f089f9       bl DMA_SetCurrDataCounter
| |||||||   0x08005454      0121           movs r1, 1                  ; 1
| |||||||   0x08005456      2846           mov r0, r5
| |||||||   0x08005458      02f079f9       bl DMA_Cmd
| |||||||   0x0800545c      0120           movs r0, 1                  ; 1
| |||||||   0x0800545e      a071           strb r0, [r4, 6]
| |||||||      ; JMP XREF from 0x080053ae (_LED_CMDSend)
| |||||||      ; JMP XREF from 0x080053ce (_LED_CMDSend)
| |||||||      ; JMP XREF from 0x080053da (_LED_CMDSend)
| --------> 0x08005460      10b0           add sp, 0x40
\ |||||||   0x08005462      70bd           pop {r4, r5, r6, pc}
  |||||||      ; DATA XREF from 0x08004cc0 (_MCU_UIDLoad)
  |||||||      ; DATA XREF from 0x08004d6a (_BLE_KeyPress_Something)
  |||||||      ; DATA XREF from 0x08004e6e (_LED_WakeUpCmd)
  |||||||      ; DATA XREF from 0x08004faa (_USART2_DMAInit)
  |||||||      ; DATA XREF from 0x08005232 (_LED_CMDSend)
  |||||||   0x08005464      .dword 0x20000768
| |||||||   ;-- LED_KeyPosBSSend:
/ (fcn) _LED_KeyPosBSSend 118
|       Caller: _LED_StateUpdate
|   _LED_KeyPosBSSend ();
| |||||||      ; CALL XREF from 0x080089ca (_LED_StateUpdate)
| |||||||   0x08005468      38b5           push {r3, r4, r5, lr}
| |||||||   0x0800546a      0920           movs r0, 9                  ; 9
| |||||||   0x0800546c      8df80000       strb.w r0, [sp]
| |||||||   0x08005470      0b20           movs r0, 0xb                ; 11
| |||||||   0x08005472      8df80100       strb.w r0, [sp, 1]
| |||||||   0x08005476      9df80200       ldrb.w r0, [sp, 2]
| |||||||   0x0800547a      00f08000       and r0, r0, 0x80
| |||||||   0x0800547e      40f00700       orr r0, r0, 7
| |||||||   0x08005482      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08005486      dff86407       ldr.w r0, [0x08005bec]      ; [0x8005bec:4]=0x200016a8
| |||||||   0x0800548a      dff81c4c       ldr.w r4, [0x080060a8]      ; [0x80060a8:4]=0x20001950
| |||||||   0x0800548e      2178           ldrb r1, [r4]               ; copy KEYPOS_BS to LED DMA Tx buffer
| |||||||   0x08005490      c170           strb r1, [r0, 3]
| |||||||   0x08005492      6178           ldrb r1, [r4, 1]
| |||||||   0x08005494      0171           strb r1, [r0, 4]
| |||||||   0x08005496      a178           ldrb r1, [r4, 2]
| |||||||   0x08005498      4171           strb r1, [r0, 5]
| |||||||   0x0800549a      e178           ldrb r1, [r4, 3]
| |||||||   0x0800549c      8171           strb r1, [r0, 6]
| |||||||   0x0800549e      2179           ldrb r1, [r4, 4]
| |||||||   0x080054a0      c171           strb r1, [r0, 7]
| |||||||   0x080054a2      6179           ldrb r1, [r4, 5]
| |||||||   0x080054a4      0172           strb r1, [r0, 8]
| |||||||   0x080054a6      a179           ldrb r1, [r4, 6]
| |||||||   0x080054a8      4172           strb r1, [r0, 9]
| |||||||   0x080054aa      e179           ldrb r1, [r4, 7]
| |||||||   0x080054ac      8172           strb r1, [r0, 0xa]
| |||||||   0x080054ae      217a           ldrb r1, [r4, 8]
| |||||||   0x080054b0      c172           strb r1, [r0, 0xb]
| |||||||   0x080054b2      617a           ldrb r1, [r4, 9]
| |||||||   0x080054b4      0173           strb r1, [r0, 0xc]
| |||||||   0x080054b6      0322           movs r2, 3                  ; 3 ; copy msg header to buffer
| |||||||   0x080054b8      00a9           add r1, sp, 0
| |||||||   0x080054ba      02f09ff9       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x080054be      dff82457       ldr.w r5, [0x08005be4]      ; [0x8005be4:4]=0x4002601c ; DMA channel2
| |||||||   0x080054c2      0d21           movs r1, 0xd                ; 13
| |||||||   0x080054c4      2846           mov r0, r5
| |||||||   0x080054c6      02f04ef9       bl DMA_SetCurrDataCounter
| |||||||   0x080054ca      0121           movs r1, 1                  ; 1
| |||||||   0x080054cc      2846           mov r0, r5
| |||||||   0x080054ce      02f03ef9       bl DMA_Cmd
| |||||||   0x080054d2      0a22           movs r2, 0xa                ; 10 ; clear KEYPOS_BS
| |||||||   0x080054d4      0021           movs r1, 0
| |||||||   0x080054d6      2046           mov r0, r4
| |||||||   0x080054d8      01f04afa       bl memset                   ; void *memset(void *s, int c, size_t n)
\ |||||||   0x080054dc      31bd           pop {r0, r4, r5, pc}
\ |||||||   ;-- USART2_RxMemInit:
/ (fcn) _USART2_RxMemInit 74
|       Caller: USART2_IRQHandler
|   _USART2_RxMemInit ();
| |||||||      ; CALL XREF from 0x08009e66 (USART2_IRQHandler)
| |||||||   0x080054de      70b5           push {r4, r5, r6, lr}
| |||||||   0x080054e0      dff8e044       ldr.w r4, [0x080059c4]      ; [0x80059c4:4]=0x4002606c ; DMA1 channel 6
| |||||||   0x080054e4      0021           movs r1, 0
| |||||||   0x080054e6      2046           mov r0, r4
| |||||||   0x080054e8      02f031f9       bl DMA_Cmd                  ; disable DMA1_Channel6
| |||||||   0x080054ec      4ff48010       mov.w r0, 0x100000
| |||||||   0x080054f0      02f045f9       bl DMA_ClearFlag            ; DMA1_Channel6 global interrupt clear
| |||||||   0x080054f4      4ff48070       mov.w r0, 0x100             ; 256 ; Number of data to transfer is 0x100
| |||||||   0x080054f8      6060           str r0, [r4, 4]
| |||||||   0x080054fa      dff8685c       ldr.w r5, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x080054fe      05f26c46       addw r6, r5, 0x46c
| |||||||   0x08005502      0246           mov r2, r0
| |||||||   0x08005504      3146           mov r1, r6
| |||||||   0x08005506      05f26c50       addw r0, r5, 0x56c
| |||||||   0x0800550a      02f077f9       bl memcpy                   ; copy 0x20000bd4-cd3 to 0x20000cd4-dd3 ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x0800550e      4ff48072       mov.w r2, 0x100             ; 256
| |||||||   0x08005512      0021           movs r1, 0
| |||||||   0x08005514      3046           mov r0, r6
| |||||||   0x08005516      01f02bfa       bl memset                   ; clear the memory region  0x20000bd4-cd3 ; void *memset(void *s, int c, size_t n)
| |||||||   0x0800551a      0121           movs r1, 1                  ; 1
| |||||||   0x0800551c      2046           mov r0, r4
| |||||||   0x0800551e      02f016f9       bl DMA_Cmd                  ; enable DMA1_Channel6
| |||||||   0x08005522      0120           movs r0, 1                  ; 1
| |||||||   0x08005524      e874           strb r0, [r5, 0x13]         ; set some sort of flag at 0x2000077b
\ |||||||   0x08005526      70bd           pop {r4, r5, r6, pc}
  |||||||      ; DATA XREF from 0x08004a7c (_BLE_CMDSend)
  |||||||      ; DATA XREF from 0x08004a94 (_BLE_CMDSend)
  |||||||      ; DATA XREF from 0x08004aa4 (_BLE_CMDSend)
  |||||||   0x08005528      .dword 0x2000192c
| |||||||   ;-- USART3_RxMemInit:
/ (fcn) _USART3_RxMemInit 74
|       Caller: USART3_IRQHandler
|   _USART3_RxMemInit ();
| |||||||      ; CALL XREF from 0x08009ec8 (USART3_IRQHandler)
| |||||||   0x0800552c      70b5           push {r4, r5, r6, lr}
| |||||||   0x0800552e      dff8c046       ldr.w r4, [0x08005bf0]      ; [0x8005bf0:4]=0x40026030 ; DMA1_Channel3
| |||||||   0x08005532      0021           movs r1, 0
| |||||||   0x08005534      2046           mov r0, r4
| |||||||   0x08005536      02f00af9       bl DMA_Cmd                  ; disable channel
| |||||||   0x0800553a      4ff48070       mov.w r0, 0x100             ; 256
| |||||||   0x0800553e      02f01ef9       bl DMA_ClearFlag            ; channel 3 global clear
| |||||||   0x08005542      4ff48070       mov.w r0, 0x100             ; 256
| |||||||   0x08005546      6060           str r0, [r4, 4]             ; Number of data to copy is 0x100
| |||||||   0x08005548      dff8185c       ldr.w r5, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x0800554c      05f51b76       add.w r6, r5, 0x26c
| |||||||   0x08005550      0246           mov r2, r0
| |||||||   0x08005552      3146           mov r1, r6
| |||||||   0x08005554      05f55b70       add.w r0, r5, 0x36c
| |||||||   0x08005558      02f050f9       bl memcpy                   ; copy 0x200009d4-ad3 to 0x200000ad4-bd3 ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x0800555c      4ff48072       mov.w r2, 0x100             ; 256
| |||||||   0x08005560      0021           movs r1, 0
| |||||||   0x08005562      3046           mov r0, r6
| |||||||   0x08005564      01f004fa       bl memset                   ; clear 0x200009d4-ad3 ; void *memset(void *s, int c, size_t n)
| |||||||   0x08005568      0121           movs r1, 1                  ; 1
| |||||||   0x0800556a      2046           mov r0, r4
| |||||||   0x0800556c      02f0eff8       bl DMA_Cmd                  ; enable DMA1_Channel3
| |||||||   0x08005570      0120           movs r0, 1                  ; 1
| |||||||   0x08005572      2875           strb r0, [r5, 0x14]         ; set flag
\ |||||||   0x08005574      70bd           pop {r4, r5, r6, pc}
\ |||||||   ;-- MSG_HandleSystemCMD:
/ (fcn) _MSG_HandleSystemCMD 480
|   _MSG_HandleSystemCMD ();
| |||||||      ; JMP XREF from 0x08006000 (_MSG_Handle)
| --------> 0x08005576      10b5           push {r4, lr}
| |||||||   0x08005578      84b0           sub sp, 0x10
| |||||||   0x0800557a      1c46           mov r4, r3
| |||||||   0x0800557c      0129           cmp r1, 1                   ; 1 ; SYSTEM_GET_ID
| ========< 0x0800557e      0bd0           beq 0x8005598
| |||||||   0x08005580      0529           cmp r1, 5                   ; 5 ; SYSTEM_GET_FW_VER
| ========< 0x08005582      41d0           beq 0x8005608
| |||||||   0x08005584      0829           cmp r1, 8                   ; 8 ; SYSTEM_IS_SYNC_CODE
| ========< 0x08005586      00f07f80       beq.w 0x8005688
| |||||||   0x0800558a      0929           cmp r1, 9                   ; 9 ; SYSTEM_SET_SYNC_CODE
| ========< 0x0800558c      00f0b180       beq.w 0x80056f2
| |||||||   0x08005590      0a29           cmp r1, 0xa                 ; 10
| ========< 0x08005592      00f0d880       beq.w 0x8005746
| |||||||   0x08005596      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x0800557e (_MSG_HandleSystemCMD)
| --------> 0x08005598      0028           cmp r0, 0
| ========< 0x0800559a      40f0db80       bne.w 0x8005754
| |||||||   0x0800559e      fff78ffb       bl _MCU_UIDLoad
| |||||||   0x080055a2      0120           movs r0, 1                  ; 1
| |||||||   0x080055a4      2070           strb r0, [r4]
| |||||||   0x080055a6      0220           movs r0, 2                  ; 2
| |||||||   0x080055a8      6070           strb r0, [r4, 1]
| |||||||   0x080055aa      dff8b81b       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x080055ae      0831           adds r1, 8
| |||||||   0x080055b0      086b           ldr r0, [r1, 0x30]
| |||||||   0x080055b2      a070           strb r0, [r4, 2]
| |||||||   0x080055b4      086b           ldr r0, [r1, 0x30]
| |||||||   0x080055b6      000a           lsrs r0, r0, 8
| |||||||   0x080055b8      e070           strb r0, [r4, 3]
| |||||||   0x080055ba      086b           ldr r0, [r1, 0x30]
| |||||||   0x080055bc      000c           lsrs r0, r0, 0x10
| |||||||   0x080055be      2071           strb r0, [r4, 4]
| |||||||   0x080055c0      086b           ldr r0, [r1, 0x30]
| |||||||   0x080055c2      000e           lsrs r0, r0, 0x18
| |||||||   0x080055c4      6071           strb r0, [r4, 5]
| |||||||   0x080055c6      486b           ldr r0, [r1, 0x34]
| |||||||   0x080055c8      a071           strb r0, [r4, 6]
| |||||||   0x080055ca      486b           ldr r0, [r1, 0x34]
| |||||||   0x080055cc      000a           lsrs r0, r0, 8
| |||||||   0x080055ce      e071           strb r0, [r4, 7]
| |||||||   0x080055d0      486b           ldr r0, [r1, 0x34]
| |||||||   0x080055d2      000c           lsrs r0, r0, 0x10
| |||||||   0x080055d4      2072           strb r0, [r4, 8]
| |||||||   0x080055d6      486b           ldr r0, [r1, 0x34]
| |||||||   0x080055d8      000e           lsrs r0, r0, 0x18
| |||||||   0x080055da      6072           strb r0, [r4, 9]
| |||||||   0x080055dc      886b           ldr r0, [r1, 0x38]
| |||||||   0x080055de      a072           strb r0, [r4, 0xa]
| |||||||   0x080055e0      886b           ldr r0, [r1, 0x38]
| |||||||   0x080055e2      000a           lsrs r0, r0, 8
| |||||||   0x080055e4      e072           strb r0, [r4, 0xb]
| |||||||   0x080055e6      886b           ldr r0, [r1, 0x38]
| |||||||   0x080055e8      000c           lsrs r0, r0, 0x10
| |||||||   0x080055ea      2073           strb r0, [r4, 0xc]
| |||||||   0x080055ec      886b           ldr r0, [r1, 0x38]
| |||||||   0x080055ee      000e           lsrs r0, r0, 0x18
| |||||||   0x080055f0      6073           strb r0, [r4, 0xd]
| |||||||   0x080055f2      0220           movs r0, 2                  ; 2
| |||||||   0x080055f4      0190           str r0, [sp, 4]
| |||||||   0x080055f6      0e20           movs r0, 0xe                ; 14
| |||||||   0x080055f8      0090           str r0, [sp]
| |||||||   0x080055fa      2346           mov r3, r4
| |||||||   0x080055fc      0122           movs r2, 1                  ; 1
| |||||||   0x080055fe      0221           movs r1, 2                  ; 2
| |||||||   0x08005600      1046           mov r0, r2
| |||||||   0x08005602      00f0cdf8       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005606      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x08005582 (_MSG_HandleSystemCMD)
| --------> 0x08005608      0028           cmp r0, 0
| ========< 0x0800560a      2ed1           bne 0x800566a
| |||||||   0x0800560c      2078           ldrb r0, [r4]
| |||||||   0x0800560e      8df80800       strb.w r0, [sp, 8]
| |||||||   0x08005612      0128           cmp r0, 1                   ; 1
| ========< 0x08005614      0dd1           bne 0x8005632
| |||||||   0x08005616      0020           movs r0, 0
| |||||||   0x08005618      6070           strb r0, [r4, 1]
| |||||||   0x0800561a      0e20           movs r0, 0xe                ; 14
| |||||||   0x0800561c      a070           strb r0, [r4, 2]
| |||||||   0x0800561e      0220           movs r0, 2                  ; 2
| |||||||   0x08005620      0190           str r0, [sp, 4]
| |||||||   0x08005622      0320           movs r0, 3                  ; 3
| |||||||   0x08005624      0090           str r0, [sp]
| |||||||   0x08005626      0522           movs r2, 5                  ; 5
| |||||||   0x08005628      0221           movs r1, 2                  ; 2
| |||||||   0x0800562a      0120           movs r0, 1                  ; 1
| |||||||   0x0800562c      00f0b8f8       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005630      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x08005614 (_MSG_HandleSystemCMD)
| --------> 0x08005632      0228           cmp r0, 2                   ; 2
| ========< 0x08005634      40f08e80       bne.w 0x8005754
| |||||||   0x08005638      dff8940b       ldr.w r0, [0x080061d0]      ; [0x80061d0:4]=0x20000770
| |||||||   0x0800563c      c07c           ldrb r0, [r0, 0x13]
| |||||||   0x0800563e      0028           cmp r0, 0
| ========< 0x08005640      05d0           beq 0x800564e
| |||||||   0x08005642      0120           movs r0, 1                  ; 1
| |||||||   0x08005644      fff7fcfb       bl _LED_WakeUpCmd
| |||||||   0x08005648      c820           movs r0, 0xc8               ; 200
| |||||||   0x0800564a      01f05bfd       bl _Wait
| |||||||      ; JMP XREF from 0x08005640 (_MSG_HandleSystemCMD)
| --------> 0x0800564e      0220           movs r0, 2                  ; 2
| |||||||   0x08005650      8df80800       strb.w r0, [sp, 8]
| |||||||   0x08005654      0320           movs r0, 3                  ; 3
| |||||||   0x08005656      0190           str r0, [sp, 4]
| |||||||   0x08005658      0120           movs r0, 1                  ; 1
| |||||||   0x0800565a      0090           str r0, [sp]
| |||||||   0x0800565c      02ab           add r3, sp, 8
| |||||||   0x0800565e      0522           movs r2, 5                  ; 5
| |||||||   0x08005660      0221           movs r1, 2                  ; 2
| |||||||   0x08005662      0020           movs r0, 0
| |||||||   0x08005664      00f09cf8       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005668      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x0800560a (_MSG_HandleSystemCMD)
| --------> 0x0800566a      6078           ldrb r0, [r4, 1]
| |||||||   0x0800566c      a070           strb r0, [r4, 2]
| |||||||   0x0800566e      2078           ldrb r0, [r4]
| |||||||   0x08005670      6070           strb r0, [r4, 1]
| |||||||   0x08005672      0220           movs r0, 2                  ; 2
| |||||||   0x08005674      2070           strb r0, [r4]
| |||||||   0x08005676      0190           str r0, [sp, 4]
| |||||||   0x08005678      0320           movs r0, 3                  ; 3
| |||||||   0x0800567a      0090           str r0, [sp]
| |||||||   0x0800567c      0522           movs r2, 5                  ; 5
| |||||||   0x0800567e      0221           movs r1, 2                  ; 2
| |||||||   0x08005680      0120           movs r0, 1                  ; 1
| |||||||   0x08005682      00f08df8       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005686      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x08005586 (_MSG_HandleSystemCMD)
| --------> 0x08005688      0028           cmp r0, 0
| ========< 0x0800568a      63d1           bne 0x8005754
| |||||||   0x0800568c      dff8d41a       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005690      2078           ldrb r0, [r4]
| |||||||   0x08005692      6278           ldrb r2, [r4, 1]
| |||||||   0x08005694      40ea0220       orr.w r0, r0, r2, lsl 8
| |||||||   0x08005698      a278           ldrb r2, [r4, 2]
| |||||||   0x0800569a      40ea0240       orr.w r0, r0, r2, lsl 16
| |||||||   0x0800569e      e278           ldrb r2, [r4, 3]
| |||||||   0x080056a0      40ea0260       orr.w r0, r0, r2, lsl 24
| |||||||   0x080056a4      8a68           ldr r2, [r1, 8]
| |||||||   0x080056a6      9042           cmp r0, r2
| ========< 0x080056a8      18d1           bne 0x80056dc
| |||||||   0x080056aa      2079           ldrb r0, [r4, 4]
| |||||||   0x080056ac      6279           ldrb r2, [r4, 5]
| |||||||   0x080056ae      40ea0220       orr.w r0, r0, r2, lsl 8
| |||||||   0x080056b2      a279           ldrb r2, [r4, 6]
| |||||||   0x080056b4      40ea0240       orr.w r0, r0, r2, lsl 16
| |||||||   0x080056b8      e279           ldrb r2, [r4, 7]
| |||||||   0x080056ba      40ea0260       orr.w r0, r0, r2, lsl 24
| |||||||   0x080056be      0831           adds r1, 8
| |||||||   0x080056c0      4968           ldr r1, [r1, 4]
| |||||||   0x080056c2      8842           cmp r0, r1
| ========< 0x080056c4      0ad1           bne 0x80056dc
| |||||||   0x080056c6      0020           movs r0, 0
| |||||||   0x080056c8      2070           strb r0, [r4]
| |||||||   0x080056ca      0220           movs r0, 2                  ; 2
| |||||||   0x080056cc      0190           str r0, [sp, 4]
| |||||||   0x080056ce      0120           movs r0, 1                  ; 1
| |||||||   0x080056d0      0090           str r0, [sp]
| |||||||   0x080056d2      0822           movs r2, 8                  ; 8
| |||||||   0x080056d4      0221           movs r1, 2                  ; 2
| |||||||   0x080056d6      00f063f8       bl _MSG_CMDPrepareOrSend
| |||||||   0x080056da      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x080056a8 (_MSG_HandleSystemCMD)
| |||||||      ; JMP XREF from 0x080056c4 (_MSG_HandleSystemCMD)
| --------> 0x080056dc      0120           movs r0, 1                  ; 1
| |||||||   0x080056de      2070           strb r0, [r4]
| |||||||   0x080056e0      0220           movs r0, 2                  ; 2
| |||||||   0x080056e2      0190           str r0, [sp, 4]
| |||||||   0x080056e4      0120           movs r0, 1                  ; 1
| |||||||   0x080056e6      0090           str r0, [sp]
| |||||||   0x080056e8      0822           movs r2, 8                  ; 8
| |||||||   0x080056ea      0221           movs r1, 2                  ; 2
| |||||||   0x080056ec      00f058f8       bl _MSG_CMDPrepareOrSend
| |||||||   0x080056f0      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x0800558c (_MSG_HandleSystemCMD)
| --------> 0x080056f2      0028           cmp r0, 0
| ========< 0x080056f4      2ed1           bne 0x8005754
| |||||||   0x080056f6      2078           ldrb r0, [r4]
| |||||||   0x080056f8      6178           ldrb r1, [r4, 1]
| |||||||   0x080056fa      40ea0120       orr.w r0, r0, r1, lsl 8
| |||||||   0x080056fe      a178           ldrb r1, [r4, 2]
| |||||||   0x08005700      40ea0140       orr.w r0, r0, r1, lsl 16
| |||||||   0x08005704      e178           ldrb r1, [r4, 3]
| |||||||   0x08005706      40ea0160       orr.w r0, r0, r1, lsl 24
| |||||||   0x0800570a      dff8581a       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x0800570e      8860           str r0, [r1, 8]
| |||||||   0x08005710      0831           adds r1, 8
| |||||||   0x08005712      2279           ldrb r2, [r4, 4]
| |||||||   0x08005714      6379           ldrb r3, [r4, 5]
| |||||||   0x08005716      42ea0322       orr.w r2, r2, r3, lsl 8
| |||||||   0x0800571a      a379           ldrb r3, [r4, 6]
| |||||||   0x0800571c      42ea0342       orr.w r2, r2, r3, lsl 16
| |||||||   0x08005720      e379           ldrb r3, [r4, 7]
| |||||||   0x08005722      42ea0362       orr.w r2, r2, r3, lsl 24
| |||||||   0x08005726      4a60           str r2, [r1, 4]
| |||||||   0x08005728      1146           mov r1, r2
| |||||||   0x0800572a      01f060f8       bl _KBD_StoreSyncCode
| |||||||   0x0800572e      0020           movs r0, 0
| |||||||   0x08005730      2070           strb r0, [r4]
| |||||||   0x08005732      0220           movs r0, 2                  ; 2
| |||||||   0x08005734      0190           str r0, [sp, 4]
| |||||||   0x08005736      0120           movs r0, 1                  ; 1
| |||||||   0x08005738      0090           str r0, [sp]
| |||||||   0x0800573a      2346           mov r3, r4
| |||||||   0x0800573c      0922           movs r2, 9                  ; 9
| |||||||   0x0800573e      0221           movs r1, 2                  ; 2
| |||||||   0x08005740      00f02ef8       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005744      1fbd           pop {r0, r1, r2, r3, r4, pc}
| |||||||      ; JMP XREF from 0x08005592 (_MSG_HandleSystemCMD)
| --------> 0x08005746      0128           cmp r0, 1                   ; 1
| ========< 0x08005748      04d1           bne 0x8005754
| |||||||   0x0800574a      2078           ldrb r0, [r4]
| |||||||   0x0800574c      dff8141a       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005750      81f86800       strb.w r0, [r1, 0x68]
| |||||||      ; JMP XREF from 0x0800559a (_MSG_HandleSystemCMD)
| |||||||      ; JMP XREF from 0x08005634 (_MSG_HandleSystemCMD)
| |||||||      ; JMP XREF from 0x0800568a (_MSG_HandleSystemCMD)
| |||||||      ; JMP XREF from 0x080056f4 (_MSG_HandleSystemCMD)
| |||||||      ; JMP XREF from 0x08005748 (_MSG_HandleSystemCMD)
\ --------> 0x08005754      1fbd           pop {r0, r1, r2, r3, r4, pc}
\ |||||||   ;-- BLE_SendMSG:
/ (fcn) _BLE_SendMSG 36
|       Caller: _BLE_StateUpdate
|   _BLE_SendMSG ();
| |||||||      ; CALL XREF from 0x08008caa (_BLE_StateUpdate)
| |||||||   0x08005756      38b5           push {r3, r4, r5, lr}
| |||||||   0x08005758      0446           mov r4, r0
| |||||||   0x0800575a      2146           mov r1, r4
| |||||||   0x0800575c      dff8280b       ldr.w r0, [0x08006288]      ; [0x8006288:4]=0x200007d4
| |||||||   0x08005760      02f08cf8       bl _BLE_DMATxBufferFill
| |||||||   0x08005764      994d           ldr r5, [0x080059cc]        ; [0x80059cc:4]=0x40026080 ; DMA channel7
| |||||||   0x08005766      2146           mov r1, r4
| |||||||   0x08005768      2846           mov r0, r5
| |||||||   0x0800576a      01f0fcff       bl DMA_SetCurrDataCounter
| |||||||   0x0800576e      0121           movs r1, 1                  ; 1
| |||||||   0x08005770      2846           mov r0, r5
| |||||||   0x08005772      bde83440       pop.w {r2, r4, r5, lr}
\ ========< 0x08005776      01f0eabf       b.w DMA_Cmd
\ |||||||   ;-- BLE_IsMSGPending:
/ (fcn) _BLE_IsMSGPending 26
|       Caller: _KBD_StateUpdate _BLE_StateUpdate
|   _BLE_IsMSGPending ();
| |||||||      ; CALL XREF from 0x08008674 (_KBD_StateUpdate)
| |||||||      ; CALL XREF from 0x08008c3e (_BLE_StateUpdate)
| |||||||      ; CALL XREF from 0x08008ca0 (_BLE_StateUpdate)
| |||||||   0x0800577a      80b5           push {r7, lr}
| |||||||   0x0800577c      02f0c2f8       bl _BLE_MSGGetPendingTransferSize
| |||||||   0x08005780      0146           mov r1, r0
| |||||||   0x08005782      491e           subs r1, r1, 1              ; convert size to 0 if empty or 1 otherwise
| |||||||   0x08005784      8941           sbcs r1, r1
| |||||||   0x08005786      c943           mvns r1, r1
| |||||||   0x08005788      c90f           lsrs r1, r1, 0x1f
| |||||||   0x0800578a      dff8f82a       ldr.w r2, [0x08006284]      ; [0x8006284:4]=0x20000768
| |||||||   0x0800578e      82f85510       strb.w r1, [r2, 0x55]       ; 0x200007bd
\ |||||||   0x08005792      02bd           pop {r1, pc}
  |||||||   0x08005794      0000           movs r0, r0
  |||||||   0x08005796      0000           movs r0, r0
  |||||||      ; DATA XREF from 0x08004f80 (_USART2_DMAInit)
  |||||||   0x08005798      .dword 0x40026080
  |||||||      ; DATA XREF from 0x08004cc4 (_MCU_UIDLoad)
  |||||||      ; DATA XREF from 0x08004cd8 (USB_Get_SerialNum)
  |||||||   0x0800579c      .dword 0x1ff80050
| |||||||   ;-- MSG_CMDPrepareOrSend:
/ (fcn) _MSG_CMDPrepareOrSend 174
|       Caller: _MSG_HandleMacroCMD fcn.08008ade _MSG_HandleKeyboardCMD _LED_CMDSend _MSG_HandleBLECMD
|               _MSG_HandleSystemCMD _MSG_HandleLEDStyleCMD _LED_StateUpdate _BLE_KeyPress_Something
|               _BLE_CMDSend
|   _MSG_CMDPrepareOrSend ();
| |||||||      ; XREFS: CALL 0x080049da  CALL 0x080049ee  CALL 0x08004a6e  CALL 0x08004a86  CALL 0x08004a9e  CALL 0x08004ab8  CALL 0x08004c9c  CALL 0x08004dba  CALL 0x08004dd6  
| |||||||      ; XREFS: CALL 0x080053aa  CALL 0x080053c4  CALL 0x08005602  CALL 0x0800562c  CALL 0x08005664  CALL 0x08005682  CALL 0x080056d6  CALL 0x080056ec  CALL 0x08005740  
| |||||||      ; XREFS: CALL 0x08005906  CALL 0x08005932  CALL 0x0800594c  CALL 0x080059b2  CALL 0x08005b08  CALL 0x08005b32  CALL 0x08005bc6  CALL 0x08005c4e  CALL 0x08005c6c  
| |||||||      ; XREFS: CALL 0x08005c90  CALL 0x08005caa  CALL 0x08005cc4  CALL 0x08005ce0  CALL 0x08005d02  CALL 0x08005d1c  CALL 0x08005d34  CALL 0x08005d4e  CALL 0x08005d68  
| |||||||      ; XREFS: CALL 0x08005d82  CALL 0x08005d9c  CALL 0x08005e02  CALL 0x08005e1e  CALL 0x08005e3e  CALL 0x08005e76  CALL 0x08005f32  CALL 0x08005fc0  CALL 0x080088f2  
| |||||||      ; XREFS: CALL 0x08008928  CALL 0x08008940  CALL 0x080089a4  CALL 0x08008a3e  CALL 0x08008be6  
| |||||||   0x080057a0      70b5           push {r4, r5, r6, lr}       ; r0: MSG_ACK, r1: MSG_TYPE, r2: MSG_CMD, r3: 0 or data address
| |||||||   0x080057a2      82b0           sub sp, 8
| |||||||   0x080057a4      1d46           mov r5, r3
| |||||||   0x080057a6      01f03f01       and r1, r1, 0x3f
| |||||||   0x080057aa      8df80010       strb.w r1, [sp]             ; MSG_TYPE
| |||||||   0x080057ae      069c           ldr r4, [sp, 0x18]
| |||||||   0x080057b0      611c           adds r1, r4, 1
| |||||||   0x080057b2      8df80110       strb.w r1, [sp, 1]          ; MSG_SIZE + 1
| |||||||   0x080057b6      9df80210       ldrb.w r1, [sp, 2]
| |||||||   0x080057ba      01f07f01       and r1, r1, 0x7f
| |||||||   0x080057be      41eac010       orr.w r0, r1, r0, lsl 7
| |||||||   0x080057c2      8df80200       strb.w r0, [sp, 2]
| |||||||   0x080057c6      9df80200       ldrb.w r0, [sp, 2]
| |||||||   0x080057ca      62f30600       bfi r0, r2, 0, 7
| |||||||   0x080057ce      8df80200       strb.w r0, [sp, 2]          ; (MSG_ACK << 7) + MSG_CMD
| |||||||   0x080057d2      0798           ldr r0, [sp, 0x1c]          ; CMD
| |||||||   0x080057d4      0228           cmp r0, 2                   ; 2
| ========< 0x080057d6      0ad1           bne 0x80057ee               ; jump if CMD != 2
| |||||||   0x080057d8      0321           movs r1, 3                  ; 3
| |||||||   0x080057da      00a8           add r0, sp, 0
| |||||||   0x080057dc      02f014f8       bl _BLE_TxBufferFill        ; fill in msg header
| |||||||   0x080057e0      002c           cmp r4, 0
| ========< 0x080057e2      33d0           beq 0x800584c
| |||||||   0x080057e4      2146           mov r1, r4
| |||||||   0x080057e6      2846           mov r0, r5
| |||||||   0x080057e8      02f00ef8       bl _BLE_TxBufferFill        ; fill in msg data
| |||||||   0x080057ec      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x080057d6 (_MSG_CMDPrepareOrSend)
| --------> 0x080057ee      0328           cmp r0, 3                   ; 3
| ========< 0x080057f0      2cd1           bne 0x800584c               ; jump if CMD != 3
| |||||||   0x080057f2      dff87009       ldr.w r0, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x080057f6      c17e           ldrb r1, [r0, 0x1b]         ; 0x20000783
| |||||||   0x080057f8      0029           cmp r1, 0
| ========< 0x080057fa      07d0           beq 0x800580c               ; jump if LED MCU is not asleep
| |||||||   0x080057fc      0021           movs r1, 0
| |||||||   0x080057fe      c176           strb r1, [r0, 0x1b]
| |||||||   0x08005800      0120           movs r0, 1                  ; 1
| |||||||   0x08005802      fff71dfb       bl _LED_WakeUpCmd
| |||||||   0x08005806      c820           movs r0, 0xc8               ; 200
| |||||||   0x08005808      01f07cfc       bl _Wait
| |||||||      ; JMP XREF from 0x080057fa (_MSG_CMDPrepareOrSend)
| --------> 0x0800580c      0020           movs r0, 0
| |||||||   0x0800580e      dff8dc63       ldr.w r6, [0x08005bec]      ; [0x8005bec:4]=0x200016a8
| ========< 0x08005812      04e0           b 0x800581e
| |||||||      ; JMP XREF from 0x08005820 (_MSG_CMDPrepareOrSend)
| --------> 0x08005814      415d           ldrb r1, [r0, r5]           ; fill payload bytes in LED_TxBuffer ?
| |||||||   0x08005816      8219           adds r2, r0, r6
| |||||||   0x08005818      d170           strb r1, [r2, 3]
| |||||||   0x0800581a      401c           adds r0, r0, 1
| |||||||   0x0800581c      c0b2           uxtb r0, r0
| |||||||      ; JMP XREF from 0x08005812 (_MSG_CMDPrepareOrSend)
| --------> 0x0800581e      a042           cmp r0, r4
| ========< 0x08005820      f8db           blt 0x8005814
| |||||||   0x08005822      0322           movs r2, 3                  ; 3 ; clear MSG Header in LED_TxBuffer
| |||||||   0x08005824      0021           movs r1, 0
| |||||||   0x08005826      3046           mov r0, r6
| |||||||   0x08005828      01f0a2f8       bl memset                   ; void *memset(void *s, int c, size_t n)
| |||||||   0x0800582c      0322           movs r2, 3                  ; 3 ; copy new MSG Header to LED_TxBuffer
| |||||||   0x0800582e      00a9           add r1, sp, 0
| |||||||   0x08005830      3046           mov r0, r6
| |||||||   0x08005832      01f0e3ff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||   0x08005836      dff8ac53       ldr.w r5, [0x08005be4]      ; [0x8005be4:4]=0x4002601c ; DMA channel2
| |||||||   0x0800583a      e11c           adds r1, r4, 3
| |||||||   0x0800583c      89b2           uxth r1, r1
| |||||||   0x0800583e      2846           mov r0, r5
| |||||||   0x08005840      01f091ff       bl DMA_SetCurrDataCounter
| |||||||   0x08005844      0121           movs r1, 1                  ; 1
| |||||||   0x08005846      2846           mov r0, r5
| |||||||   0x08005848      01f081ff       bl DMA_Cmd                  ; enable DMA1 Channel2
| |||||||      ; JMP XREF from 0x080057e2 (_MSG_CMDPrepareOrSend)
| |||||||      ; JMP XREF from 0x080057f0 (_MSG_CMDPrepareOrSend)
\ --------> 0x0800584c      73bd           pop {r0, r1, r4, r5, r6, pc}
  |||||||   0x0800584e      0000           movs r0, r0
  |||||||      ; DATA XREF from 0x08004ce6 (USB_Get_SerialNum)
  |||||||   0x08005850      .dword 0x0800a584
  |||||||      ; DATA XREF from 0x08004d1c (_USB_SendKeyStroke)
  |||||||   0x08005854      .dword 0x20000764
  |||||||      ; DATA XREF from 0x08004e20 (_BLE_P1_0Reset)
  |||||||   0x08005858      .dword 0x20000700
  |||||||      ; DATA XREF from 0x08004e42 (_LED_WakeUpCmd)
  |||||||   0x0800585c      .dword 0x20000708
| |||||||   ;-- MSG_HandleKeyboardCMD:
/ (fcn) _MSG_HandleKeyboardCMD 344
|   _MSG_HandleKeyboardCMD ();
| |||||||      ; JMP XREF from 0x0800602e (_MSG_Handle)
| --------> 0x08005860      7cb5           push {r2, r3, r4, r5, r6, lr}
| |||||||   0x08005862      1c46           mov r4, r3
| |||||||   0x08005864      0229           cmp r1, 2                   ; 2 ; KEYBOARD_MODE_dl_user_layout
| ========< 0x08005866      07d0           beq 0x8005878
| ========< 0x08005868      c0f0a580       blo.w 0x80059b6             ; KEYBOARD_MODE_key
| |||||||   0x0800586c      0429           cmp r1, 4                   ; 4 ; KEYBOARD_MODE_get_layout_id
| ========< 0x0800586e      63d0           beq 0x8005938
| ========< 0x08005870      4cd3           blo 0x800590c               ; KEYBOARD_MODE_set_layout_id
| |||||||   0x08005872      0529           cmp r1, 5                   ; 5 ; KEYBOARD_MODE_up_user_layout
| ========< 0x08005874      6dd0           beq 0x8005952
| |||||||   0x08005876      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x08005866 (_MSG_HandleKeyboardCMD)
| --------> 0x08005878      0020           movs r0, 0
| ========< 0x0800587a      12e0           b 0x80058a2
| |||||||      ; JMP XREF from 0x0800589e (_MSG_HandleKeyboardCMD)
| --------> 0x0800587c      0e21           movs r1, 0xe                ; 14
| |||||||   0x0800587e      4143           muls r1, r0, r1
| |||||||   0x08005880      5a18           adds r2, r3, r1
| |||||||   0x08005882      1219           adds r2, r2, r4
| |||||||   0x08005884      1579           ldrb r5, [r2, 4]
| |||||||   0x08005886      dff8046a       ldr.w r6, [0x0800628c]      ; [0x800628c:4]=0x200004f8
| |||||||   0x0800588a      8e19           adds r6, r1, r6
| |||||||   0x0800588c      9d55           strb r5, [r3, r6]
| |||||||   0x0800588e      92f84a20       ldrb.w r2, [r2, 0x4a]
| |||||||   0x08005892      dff8fc59       ldr.w r5, [0x08006290]      ; [0x8006290:4]=0x20000540
| |||||||   0x08005896      4919           adds r1, r1, r5
| |||||||   0x08005898      5a54           strb r2, [r3, r1]
| |||||||   0x0800589a      5b1c           adds r3, r3, 1
| |||||||      ; JMP XREF from 0x080058a8 (_MSG_HandleKeyboardCMD)
| --------> 0x0800589c      0e2b           cmp r3, 0xe                 ; 14
| ========< 0x0800589e      eddb           blt 0x800587c
| |||||||   0x080058a0      401c           adds r0, r0, 1
| |||||||      ; JMP XREF from 0x0800587a (_MSG_HandleKeyboardCMD)
| --------> 0x080058a2      0528           cmp r0, 5                   ; 5
| ========< 0x080058a4      01da           bge 0x80058aa
| |||||||   0x080058a6      0023           movs r3, 0
| ========< 0x080058a8      f8e7           b 0x800589c
| |||||||      ; JMP XREF from 0x080058a4 (_MSG_HandleKeyboardCMD)
| --------> 0x080058aa      dff8b858       ldr.w r5, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x080058ae      05f12c06       add.w r6, r5, 0x2c
| |||||||   0x080058b2      8020           movs r0, 0x80               ; 128
| |||||||   0x080058b4      3071           strb r0, [r6, 4]
| |||||||   0x080058b6      dff81015       ldr.w r1, [0x08005dc8]      ; [0x8005dc8:4]=0x200017a8
| |||||||   0x080058ba      01f063f8       bl _KBD_LayoutInit
| |||||||   0x080058be      2078           ldrb r0, [r4]
| |||||||   0x080058c0      6178           ldrb r1, [r4, 1]
| |||||||   0x080058c2      40ea0120       orr.w r0, r0, r1, lsl 8
| |||||||   0x080058c6      a178           ldrb r1, [r4, 2]
| |||||||   0x080058c8      40ea0140       orr.w r0, r0, r1, lsl 16
| |||||||   0x080058cc      e178           ldrb r1, [r4, 3]
| |||||||   0x080058ce      40ea0160       orr.w r0, r0, r1, lsl 24
| |||||||   0x080058d2      e862           str r0, [r5, 0x2c]
| |||||||   0x080058d4      00f008ff       bl _EEPROM_Write_Struct_1
| |||||||   0x080058d8      dff8b829       ldr.w r2, [0x08006294]      ; [0x8006294:4]=0x8080100 ; DATA EEPROM
| |||||||   0x080058dc      4621           movs r1, 0x46               ; 'F' ; 70
| |||||||   0x080058de      dff8ac09       ldr.w r0, [0x0800628c]      ; [0x800628c:4]=0x200004f8
| |||||||   0x080058e2      00f0c8ff       bl _KBD_StoreLayout
| |||||||   0x080058e6      dff8b029       ldr.w r2, [0x08006298]      ; [0x8006298:4]=0x8080146
| |||||||   0x080058ea      4621           movs r1, 0x46               ; 'F' ; 70
| |||||||   0x080058ec      dff8a009       ldr.w r0, [0x08006290]      ; [0x8006290:4]=0x20000540
| |||||||   0x080058f0      00f0c1ff       bl _KBD_StoreLayout
| |||||||   0x080058f4      3079           ldrb r0, [r6, 4]
| |||||||   0x080058f6      2070           strb r0, [r4]
| |||||||   0x080058f8      0220           movs r0, 2                  ; 2
| |||||||   0x080058fa      0190           str r0, [sp, 4]
| |||||||   0x080058fc      0120           movs r0, 1                  ; 1
| |||||||   0x080058fe      0090           str r0, [sp]
| |||||||   0x08005900      2346           mov r3, r4
| |||||||   0x08005902      0222           movs r2, 2                  ; 2
| |||||||   0x08005904      0721           movs r1, 7                  ; 7
| |||||||   0x08005906      fff74bff       bl _MSG_CMDPrepareOrSend
| |||||||   0x0800590a      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x08005870 (_MSG_HandleKeyboardCMD)
| --------> 0x0800590c      2078           ldrb r0, [r4]
| |||||||   0x0800590e      dff85458       ldr.w r5, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005912      05f12c06       add.w r6, r5, 0x2c
| |||||||   0x08005916      3071           strb r0, [r6, 4]
| |||||||   0x08005918      dff8ac14       ldr.w r1, [0x08005dc8]      ; [0x8005dc8:4]=0x200017a8
| |||||||   0x0800591c      01f032f8       bl _KBD_LayoutInit
| |||||||   0x08005920      00f0e2fe       bl _EEPROM_Write_Struct_1
| |||||||   0x08005924      0220           movs r0, 2                  ; 2
| |||||||   0x08005926      0190           str r0, [sp, 4]
| |||||||   0x08005928      0120           movs r0, 1                  ; 1
| |||||||   0x0800592a      0090           str r0, [sp]
| |||||||   0x0800592c      2346           mov r3, r4
| |||||||   0x0800592e      0322           movs r2, 3                  ; 3
| |||||||   0x08005930      0721           movs r1, 7                  ; 7
| |||||||   0x08005932      fff735ff       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005936      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x0800586e (_MSG_HandleKeyboardCMD)
| --------> 0x08005938      dff86009       ldr.w r0, [0x0800629c]      ; [0x800629c:4]=0x20000794
| |||||||   0x0800593c      0079           ldrb r0, [r0, 4]
| |||||||   0x0800593e      2070           strb r0, [r4]
| |||||||   0x08005940      0220           movs r0, 2                  ; 2
| |||||||   0x08005942      0190           str r0, [sp, 4]
| |||||||   0x08005944      0120           movs r0, 1                  ; 1
| |||||||   0x08005946      0090           str r0, [sp]
| |||||||   0x08005948      0422           movs r2, 4                  ; 4
| |||||||   0x0800594a      0721           movs r1, 7                  ; 7
| |||||||   0x0800594c      fff728ff       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005950      73bd           pop {r0, r1, r4, r5, r6, pc}
| |||||||      ; JMP XREF from 0x08005874 (_MSG_HandleKeyboardCMD)
| --------> 0x08005952      dff81058       ldr.w r5, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005956      e86a           ldr r0, [r5, 0x2c]
| |||||||   0x08005958      2070           strb r0, [r4]
| |||||||   0x0800595a      e86a           ldr r0, [r5, 0x2c]
| |||||||   0x0800595c      000a           lsrs r0, r0, 8
| |||||||   0x0800595e      6070           strb r0, [r4, 1]
| |||||||   0x08005960      e86a           ldr r0, [r5, 0x2c]
| |||||||   0x08005962      000c           lsrs r0, r0, 0x10
| |||||||   0x08005964      a070           strb r0, [r4, 2]
| |||||||   0x08005966      e86a           ldr r0, [r5, 0x2c]
| |||||||   0x08005968      000e           lsrs r0, r0, 0x18
| |||||||   0x0800596a      e070           strb r0, [r4, 3]
| |||||||   0x0800596c      0020           movs r0, 0
| ========< 0x0800596e      14e0           b 0x800599a
| |||||||      ; JMP XREF from 0x08005996 (_MSG_HandleKeyboardCMD)
| --------> 0x08005970      0e21           movs r1, 0xe                ; 14
| |||||||   0x08005972      01fb0032       mla r2, r1, r0, r3
| |||||||   0x08005976      d2b2           uxtb r2, r2
| |||||||   0x08005978      1219           adds r2, r2, r4
| |||||||   0x0800597a      4143           muls r1, r0, r1
| |||||||   0x0800597c      dff80c59       ldr.w r5, [0x0800628c]      ; [0x800628c:4]=0x200004f8
| |||||||   0x08005980      4d19           adds r5, r1, r5
| |||||||   0x08005982      5d5d           ldrb r5, [r3, r5]
| |||||||   0x08005984      1571           strb r5, [r2, 4]
| |||||||   0x08005986      dff80859       ldr.w r5, [0x08006290]      ; [0x8006290:4]=0x20000540
| |||||||   0x0800598a      4919           adds r1, r1, r5
| |||||||   0x0800598c      595c           ldrb r1, [r3, r1]
| |||||||   0x0800598e      82f84a10       strb.w r1, [r2, 0x4a]
| |||||||   0x08005992      5b1c           adds r3, r3, 1
| |||||||      ; JMP XREF from 0x080059a0 (_MSG_HandleKeyboardCMD)
| --------> 0x08005994      0e2b           cmp r3, 0xe                 ; 14
| ========< 0x08005996      ebdb           blt 0x8005970
| |||||||   0x08005998      401c           adds r0, r0, 1
| |||||||      ; JMP XREF from 0x0800596e (_MSG_HandleKeyboardCMD)
| --------> 0x0800599a      0528           cmp r0, 5                   ; 5
| ========< 0x0800599c      01da           bge 0x80059a2
| |||||||   0x0800599e      0023           movs r3, 0
| ========< 0x080059a0      f8e7           b 0x8005994
| |||||||      ; JMP XREF from 0x0800599c (_MSG_HandleKeyboardCMD)
| --------> 0x080059a2      0220           movs r0, 2                  ; 2
| |||||||   0x080059a4      0190           str r0, [sp, 4]
| |||||||   0x080059a6      9020           movs r0, 0x90               ; 144
| |||||||   0x080059a8      0090           str r0, [sp]
| |||||||   0x080059aa      2346           mov r3, r4
| |||||||   0x080059ac      0522           movs r2, 5                  ; 5
| |||||||   0x080059ae      0721           movs r1, 7                  ; 7
| |||||||   0x080059b0      0120           movs r0, 1                  ; 1
| |||||||   0x080059b2      fff7f5fe       bl _MSG_CMDPrepareOrSend
| |||||||      ; JMP XREF from 0x08005868 (_MSG_HandleKeyboardCMD)
\ --------> 0x080059b6      73bd           pop {r0, r1, r4, r5, r6, pc}
  |||||||      ; DATA XREF from 0x08004e94 (_USART2_IOInit)
  |||||||   0x080059b8      .dword 0x40020000
  |||||||      ; DATA XREF from 0x08004ec4 (_USART2_Init)
  |||||||   0x080059bc      .dword 0x40004400
  |||||||      ; DATA XREF from 0x08004f8a (_USART2_DMAInit)
  |||||||   0x080059c0      .dword 0x40004404
  |||||||      ; DATA XREF from 0x08004fd0 (_USART2_DMAInit)
  |||||||      ; DATA XREF from 0x080054e0 (_USART2_RxMemInit)
  |||||||   0x080059c4      .dword 0x4002606c
  |||||||      ; DATA XREF from 0x0800506e (_USART3_Init)
  |||||||   0x080059c8      .dword 0x40020400
  |||||||      ; DATA XREF from 0x08005764 (_BLE_SendMSG)
  |||||||   0x080059cc      .dword 0x40026080
| |||||||   ;-- MSG_HandleBLECMD:
/ (fcn) _MSG_HandleBLECMD 528
|   _MSG_HandleBLECMD ();
| |||||||      ; JMP XREF from 0x08006018 (_MSG_Handle)
| --------> 0x080059d0      70b5           push {r4, r5, r6, lr}
| |||||||   0x080059d2      9eb0           sub sp, 0x78                ; 'x'
| |||||||   0x080059d4      0646           mov r6, r0
| |||||||   0x080059d6      1d46           mov r5, r3
| |||||||   0x080059d8      0629           cmp r1, 6                   ; 6 ; BLE_HOST_LIST_QUERY
| ========< 0x080059da      14d0           beq 0x8005a06
| |||||||   0x080059dc      0729           cmp r1, 7                   ; 7 ; BLE_BROADCAST
| ========< 0x080059de      00f09680       beq.w 0x8005b0e
| |||||||   0x080059e2      0c29           cmp r1, 0xc                 ; 12 ; BLE_COMP_MODE
| ========< 0x080059e4      00f09880       beq.w 0x8005b18
| |||||||   0x080059e8      0d29           cmp r1, 0xd                 ; 13
| ========< 0x080059ea      00f0a580       beq.w 0x8005b38
| |||||||   0x080059ee      0e29           cmp r1, 0xe                 ; 14
| ========< 0x080059f0      00f0f080       beq.w 0x8005bd4
| |||||||   0x080059f4      2a29           cmp r1, 0x2a                ; '*' ; 42
| ========< 0x080059f6      40f0f180       bne.w 0x8005bdc
| |||||||   0x080059fa      0120           movs r0, 1                  ; 1
| |||||||   0x080059fc      dff86417       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005a00      81f85600       strb.w r0, [r1, 0x56]
| ========< 0x08005a04      eae0           b 0x8005bdc
| |||||||      ; JMP XREF from 0x080059da (_MSG_HandleBLECMD)
| --------> 0x08005a06      dff85c47       ldr.w r4, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005a0a      607f           ldrb r0, [r4, 0x1d]
| |||||||   0x08005a0c      0028           cmp r0, 0
| ========< 0x08005a0e      00f0e580       beq.w 0x8005bdc
| |||||||   0x08005a12      3220           movs r0, 0x32               ; '2' ; 50
| |||||||   0x08005a14      01f076fb       bl _Wait
| |||||||   0x08005a18      0120           movs r0, 1                  ; 1
| |||||||   0x08005a1a      6077           strb r0, [r4, 0x1d]
| |||||||   0x08005a1c      012e           cmp r6, 1                   ; 1
| ========< 0x08005a1e      40f0dd80       bne.w 0x8005bdc
| |||||||   0x08005a22      6878           ldrb r0, [r5, 1]
| |||||||   0x08005a24      aa78           ldrb r2, [r5, 2]
| |||||||   0x08005a26      511e           subs r1, r2, 1
| |||||||   0x08005a28      8941           sbcs r1, r1
| |||||||   0x08005a2a      c943           mvns r1, r1
| |||||||   0x08005a2c      c90f           lsrs r1, r1, 0x1f
| |||||||   0x08005a2e      04f15602       add.w r2, r4, 0x56
| |||||||   0x08005a32      d173           strb r1, [r2, 0xf]
| |||||||   0x08005a34      0021           movs r1, 0
| ========< 0x08005a36      0ce0           b 0x8005a52
| |||||||      ; JMP XREF from 0x08005a54 (_MSG_HandleBLECMD)
| --------> 0x08005a38      01eb8102       add.w r2, r1, r1, lsl 2
| |||||||   0x08005a3c      19ab           add r3, sp, 0x64
| |||||||   0x08005a3e      d154           strb r1, [r2, r3]
| |||||||   0x08005a40      d218           adds r2, r2, r3
| |||||||   0x08005a42      ff23           movs r3, 0xff               ; 255
| |||||||   0x08005a44      5370           strb r3, [r2, 1]
| |||||||   0x08005a46      0023           movs r3, 0
| |||||||   0x08005a48      9370           strb r3, [r2, 2]
| |||||||   0x08005a4a      d370           strb r3, [r2, 3]
| |||||||   0x08005a4c      0123           movs r3, 1                  ; 1
| |||||||   0x08005a4e      1371           strb r3, [r2, 4]
| |||||||   0x08005a50      491c           adds r1, r1, 1
| |||||||      ; JMP XREF from 0x08005a36 (_MSG_HandleBLECMD)
| --------> 0x08005a52      0429           cmp r1, 4                   ; 4
| ========< 0x08005a54      f0db           blt 0x8005a38
| |||||||   0x08005a56      0028           cmp r0, 0
| ========< 0x08005a58      0dd0           beq 0x8005a76
| |||||||   0x08005a5a      0428           cmp r0, 4                   ; 4
| ========< 0x08005a5c      0bda           bge 0x8005a76
| |||||||   0x08005a5e      00eb8000       add.w r0, r0, r0, lsl 2
| |||||||   0x08005a62      19a9           add r1, sp, 0x64
| |||||||      ; DATA XREF from 0x08005850 (MSG_CMDPrepareOrSend + 176)
| |||||||   0x08005a64      4018           adds r0, r0, r1
| |||||||   0x08005a66      0021           movs r1, 0
| |||||||   0x08005a68      00f8041c       strb r1, [r0, -0x4]
| |||||||   0x08005a6c      001f           subs r0, r0, 4
| |||||||   0x08005a6e      ff21           movs r1, 0xff               ; 255
| |||||||   0x08005a70      4170           strb r1, [r0, 1]
| |||||||   0x08005a72      0021           movs r1, 0
| |||||||   0x08005a74      8170           strb r1, [r0, 2]
| |||||||      ; JMP XREF from 0x08005a58 (_MSG_HandleBLECMD)
| |||||||      ; JMP XREF from 0x08005a5c (_MSG_HandleBLECMD)
| --------> 0x08005a76      04f5b674       add.w r4, r4, 0x16c
| |||||||   0x08005a7a      19a8           add r0, sp, 0x64
| |||||||   0x08005a7c      0221           movs r1, 2                  ; 2
| |||||||   0x08005a7e      1891           str r1, [sp, 0x60]
| |||||||   0x08005a80      0021           movs r1, 0
| |||||||   0x08005a82      1791           str r1, [sp, 0x5c]
| |||||||   0x08005a84      ff21           movs r1, 0xff               ; 255
| |||||||   0x08005a86      1691           str r1, [sp, 0x58]
| |||||||   0x08005a88      0021           movs r1, 0
| |||||||   0x08005a8a      1591           str r1, [sp, 0x54]
| |||||||   0x08005a8c      0221           movs r1, 2                  ; 2
| |||||||   0x08005a8e      1491           str r1, [sp, 0x50]
| |||||||   0x08005a90      0021           movs r1, 0
| |||||||   0x08005a92      1391           str r1, [sp, 0x4c]
| |||||||   0x08005a94      ff21           movs r1, 0xff               ; 255
| |||||||   0x08005a96      1291           str r1, [sp, 0x48]
| |||||||   0x08005a98      0021           movs r1, 0
| |||||||   0x08005a9a      1191           str r1, [sp, 0x44]
| |||||||   0x08005a9c      0121           movs r1, 1                  ; 1
| |||||||   0x08005a9e      1091           str r1, [sp, 0x40]
| |||||||   0x08005aa0      9df87610       ldrb.w r1, [sp, 0x76]
| |||||||   0x08005aa4      0f91           str r1, [sp, 0x3c]
| |||||||   0x08005aa6      9df87510       ldrb.w r1, [sp, 0x75]
| |||||||   0x08005aaa      0e91           str r1, [sp, 0x38]
| |||||||   0x08005aac      9df87410       ldrb.w r1, [sp, 0x74]
| |||||||   0x08005ab0      0d91           str r1, [sp, 0x34]
| |||||||   0x08005ab2      0121           movs r1, 1                  ; 1
| |||||||   0x08005ab4      0c91           str r1, [sp, 0x30]
| |||||||   0x08005ab6      9df87110       ldrb.w r1, [sp, 0x71]
| |||||||   0x08005aba      0b91           str r1, [sp, 0x2c]
| |||||||   0x08005abc      9df87010       ldrb.w r1, [sp, 0x70]
| |||||||   0x08005ac0      0a91           str r1, [sp, 0x28]
| |||||||   0x08005ac2      c17a           ldrb r1, [r0, 0xb]
| |||||||   0x08005ac4      0991           str r1, [sp, 0x24]
| |||||||   0x08005ac6      0121           movs r1, 1                  ; 1
| |||||||   0x08005ac8      0891           str r1, [sp, 0x20]
| |||||||   0x08005aca      9df86c10       ldrb.w r1, [sp, 0x6c]
| |||||||   0x08005ace      0791           str r1, [sp, 0x1c]
| |||||||   0x08005ad0      9df86b10       ldrb.w r1, [sp, 0x6b]
| |||||||   0x08005ad4      0691           str r1, [sp, 0x18]
| |||||||   0x08005ad6      8179           ldrb r1, [r0, 6]
| |||||||   0x08005ad8      0591           str r1, [sp, 0x14]
| |||||||   0x08005ada      0121           movs r1, 1                  ; 1
| |||||||   0x08005adc      0491           str r1, [sp, 0x10]
| |||||||   0x08005ade      c178           ldrb r1, [r0, 3]
| |||||||   0x08005ae0      0391           str r1, [sp, 0xc]
| |||||||   0x08005ae2      8178           ldrb r1, [r0, 2]
| |||||||   0x08005ae4      0291           str r1, [sp, 8]
| |||||||   0x08005ae6      4078           ldrb r0, [r0, 1]
| |||||||   0x08005ae8      0190           str r0, [sp, 4]
| |||||||   0x08005aea      0120           movs r0, 1                  ; 1
| |||||||   0x08005aec      0090           str r0, [sp]
| |||||||   0x08005aee      0023           movs r3, 0
| |||||||   0x08005af0      ff22           movs r2, 0xff               ; 255
| |||||||   0x08005af2      1146           mov r1, r2
| |||||||   0x08005af4      2046           mov r0, r4
| |||||||   0x08005af6      fef7b9fe       bl _LED_BLEStyleUpdate
| |||||||   0x08005afa      0321           movs r1, 3                  ; 3
| |||||||   0x08005afc      0191           str r1, [sp, 4]
| |||||||   0x08005afe      0090           str r0, [sp]
| |||||||   0x08005b00      2346           mov r3, r4
| |||||||   0x08005b02      0b22           movs r2, 0xb                ; 11
| |||||||   0x08005b04      0921           movs r1, 9                  ; 9
| |||||||   0x08005b06      0020           movs r0, 0
| |||||||   0x08005b08      fff74afe       bl _MSG_CMDPrepareOrSend
| ========< 0x08005b0c      66e0           b 0x8005bdc
| |||||||      ; JMP XREF from 0x080059de (_MSG_HandleBLECMD)
| --------> 0x08005b0e      0120           movs r0, 1                  ; 1
| |||||||   0x08005b10      dff85016       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005b14      4877           strb r0, [r1, 0x1d]
| ========< 0x08005b16      61e0           b 0x8005bdc
| |||||||      ; JMP XREF from 0x080059e4 (_MSG_HandleBLECMD)
| --------> 0x08005b18      012e           cmp r6, 1                   ; 1
| ========< 0x08005b1a      5fd1           bne 0x8005bdc
| |||||||   0x08005b1c      40f2d660       movw r0, 0x6d6              ; 1750
| |||||||   0x08005b20      01f0f0fa       bl _Wait
| |||||||   0x08005b24      0220           movs r0, 2                  ; 2
| |||||||   0x08005b26      0190           str r0, [sp, 4]
| |||||||   0x08005b28      0020           movs r0, 0
| |||||||   0x08005b2a      0090           str r0, [sp]
| |||||||   0x08005b2c      0346           mov r3, r0
| |||||||   0x08005b2e      0622           movs r2, 6                  ; 6
| |||||||   0x08005b30      1146           mov r1, r2
| |||||||   0x08005b32      fff735fe       bl _MSG_CMDPrepareOrSend
| ========< 0x08005b36      51e0           b 0x8005bdc
| |||||||      ; JMP XREF from 0x080059ea (_MSG_HandleBLECMD)
| --------> 0x08005b38      002e           cmp r6, 0
| ========< 0x08005b3a      4fd1           bne 0x8005bdc
| |||||||   0x08005b3c      0021           movs r1, 0
| |||||||   0x08005b3e      ff23           movs r3, 0xff               ; 255
| ========< 0x08005b40      0fe0           b 0x8005b62
| |||||||      ; JMP XREF from 0x08005b66 (_MSG_HandleBLECMD)
| --------> 0x08005b42      4a1c           adds r2, r1, 1
| |||||||   0x08005b44      01eb8104       add.w r4, r1, r1, lsl 2
| |||||||   0x08005b48      2254           strb r2, [r4, r0]
| |||||||   0x08005b4a      01eb8100       add.w r0, r1, r1, lsl 2
| |||||||   0x08005b4e      02a9           add r1, sp, 8
| |||||||   0x08005b50      4018           adds r0, r0, r1
| |||||||   0x08005b52      0021           movs r1, 0
| |||||||   0x08005b54      4170           strb r1, [r0, 1]
| |||||||   0x08005b56      8370           strb r3, [r0, 2]
| |||||||   0x08005b58      c170           strb r1, [r0, 3]
| |||||||   0x08005b5a      0221           movs r1, 2                  ; 2
| |||||||   0x08005b5c      0171           strb r1, [r0, 4]
| |||||||   0x08005b5e      1146           mov r1, r2
| |||||||   0x08005b60      c9b2           uxtb r1, r1
| |||||||      ; JMP XREF from 0x08005b40 (_MSG_HandleBLECMD)
| --------> 0x08005b62      02a8           add r0, sp, 8
| |||||||   0x08005b64      0a29           cmp r1, 0xa                 ; 10
| ========< 0x08005b66      ecdb           blt 0x8005b42
| |||||||   0x08005b68      2921           movs r1, 0x29               ; ')' ; 41
| |||||||   0x08005b6a      80f83210       strb.w r1, [r0, 0x32]
| |||||||   0x08005b6e      0df13a01       add.w r1, sp, 0x3a
| |||||||   0x08005b72      0022           movs r2, 0
| |||||||   0x08005b74      4a70           strb r2, [r1, 1]
| |||||||   0x08005b76      8b70           strb r3, [r1, 2]
| |||||||   0x08005b78      ca70           strb r2, [r1, 3]
| |||||||   0x08005b7a      0222           movs r2, 2                  ; 2
| |||||||   0x08005b7c      0a71           strb r2, [r1, 4]
| |||||||   0x08005b7e      ca21           movs r1, 0xca               ; 202
| |||||||   0x08005b80      2970           strb r1, [r5]
| |||||||   0x08005b82      0b21           movs r1, 0xb                ; 11
| |||||||   0x08005b84      6970           strb r1, [r5, 1]
| |||||||   0x08005b86      0021           movs r1, 0
| ========< 0x08005b88      0fe0           b 0x8005baa
| |||||||      ; JMP XREF from 0x08005bac (_MSG_HandleBLECMD)
| --------> 0x08005b8a      01eb8102       add.w r2, r1, r1, lsl 2
| |||||||   0x08005b8e      5319           adds r3, r2, r5
| |||||||   0x08005b90      145c           ldrb r4, [r2, r0]
| |||||||   0x08005b92      9c70           strb r4, [r3, 2]
| |||||||   0x08005b94      02ac           add r4, sp, 8
| |||||||   0x08005b96      1219           adds r2, r2, r4
| |||||||   0x08005b98      5478           ldrb r4, [r2, 1]
| |||||||   0x08005b9a      dc70           strb r4, [r3, 3]
| |||||||   0x08005b9c      9478           ldrb r4, [r2, 2]
| |||||||   0x08005b9e      1c71           strb r4, [r3, 4]
| |||||||   0x08005ba0      d478           ldrb r4, [r2, 3]
| |||||||   0x08005ba2      5c71           strb r4, [r3, 5]
| |||||||   0x08005ba4      1279           ldrb r2, [r2, 4]
| |||||||   0x08005ba6      9a71           strb r2, [r3, 6]
| |||||||   0x08005ba8      491c           adds r1, r1, 1
| |||||||      ; JMP XREF from 0x08005b88 (_MSG_HandleBLECMD)
| --------> 0x08005baa      0b29           cmp r1, 0xb                 ; 11
| ========< 0x08005bac      eddb           blt 0x8005b8a
| |||||||   0x08005bae      0320           movs r0, 3                  ; 3
| |||||||   0x08005bb0      0190           str r0, [sp, 4]
| |||||||   0x08005bb2      6878           ldrb r0, [r5, 1]
| |||||||   0x08005bb4      00eb8000       add.w r0, r0, r0, lsl 2
| |||||||   0x08005bb8      801c           adds r0, r0, 2
| |||||||   0x08005bba      c0b2           uxtb r0, r0
| |||||||   0x08005bbc      0090           str r0, [sp]
| |||||||   0x08005bbe      2b46           mov r3, r5
| |||||||   0x08005bc0      0b22           movs r2, 0xb                ; 11
| |||||||   0x08005bc2      0921           movs r1, 9                  ; 9
| |||||||   0x08005bc4      0020           movs r0, 0
| |||||||   0x08005bc6      fff7ebfd       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005bca      0220           movs r0, 2                  ; 2
| |||||||   0x08005bcc      dff89415       ldr.w r1, [0x08006164]      ; [0x8006164:4]=0x20000768
| |||||||   0x08005bd0      4877           strb r0, [r1, 0x1d]
| ========< 0x08005bd2      03e0           b 0x8005bdc
| |||||||      ; JMP XREF from 0x080059f0 (_MSG_HandleBLECMD)
| --------> 0x08005bd4      0120           movs r0, 1                  ; 1
| |||||||   0x08005bd6      dff84c1b       ldr.w r1, [0x08006724]      ; [0x8006724:4]=0x200007be
| |||||||   0x08005bda      8873           strb r0, [r1, 0xe]
| |||||||      ; XREFS: JMP 0x080059f6  JMP 0x08005a04  JMP 0x08005a0e  JMP 0x08005a1e  JMP 0x08005b0c  JMP 0x08005b16  JMP 0x08005b1a  JMP 0x08005b36  JMP 0x08005b3a  
| |||||||      ; XREFS: JMP 0x08005bd2  
| --------> 0x08005bdc      1eb0           add sp, 0x78
\ |||||||   0x08005bde      70bd           pop {r4, r5, r6, pc}
  |||||||      ; DATA XREF from 0x080050a6 (_USART3_Init)
  |||||||   0x08005be0      .dword 0x40004800
  |||||||      ; XREFS: DATA 0x08005136  DATA 0x0800520e  DATA 0x08005382  DATA 0x08005448  DATA 0x080054be  DATA 0x08005836  DATA 0x08005be0  
  |||||||   0x08005be4      .dword 0x4002601c
  |||||||      ; DATA XREF from 0x08005140 (_USART3_DMAInit)
  |||||||   0x08005be8      .dword 0x40004804
  |||||||      ; DATA XREF from 0x0800515e (_USART3_DMAInit)
  |||||||      ; DATA XREF from 0x08005240 (_LED_CMDSend)
  |||||||      ; DATA XREF from 0x080053e6 (_LED_CMDSend)
  |||||||      ; DATA XREF from 0x08005486 (_LED_KeyPosBSSend)
  |||||||      ; DATA XREF from 0x0800580e (_MSG_CMDPrepareOrSend)
  |||||||   0x08005bec      .dword 0x200016a8
  |||||||      ; DATA XREF from 0x08005180 (_USART3_DMAInit)
  |||||||      ; DATA XREF from 0x0800552e (_USART3_RxMemInit)
  |||||||   0x08005bf0      .dword 0x40026030
  |||||||      ; DATA XREF from 0x080051a8 (_USART3_DMAInit)
  |||||||   0x08005bf4      .dword 0x200009d4
| |||||||   ;-- MSG_HandleLEDStyleCMD:
/ (fcn) _MSG_HandleLEDStyleCMD 462
|   _MSG_HandleLEDStyleCMD ();
| |||||||      ; JMP XREF from 0x08006044 (_MSG_Handle)
| --------> 0x08005bf8      2de9fc41       push.w {r2, r3, r4, r5, r6, r7, r8, lr}
| |||||||      ; DATA XREF from 0x08005be8 (MSG_HandleBLECMD + 536)
| |||||||   0x08005bfc      0446           mov r4, r0
| |||||||   0x08005bfe      8846           mov r8, r1
| |||||||   0x08005c00      1546           mov r5, r2
| |||||||   0x08005c02      1e46           mov r6, r3
| |||||||   0x08005c04      dff87c76       ldr.w r7, [0x08006284]      ; [0x8006284:4]=0x20000768
| |||||||   0x08005c08      f87e           ldrb r0, [r7, 0x1b]
| |||||||   0x08005c0a      0028           cmp r0, 0
| ========< 0x08005c0c      07d0           beq 0x8005c1e
| |||||||   0x08005c0e      0120           movs r0, 1                  ; 1
| |||||||   0x08005c10      fff716f9       bl _LED_WakeUpCmd
| |||||||   0x08005c14      0020           movs r0, 0
| |||||||   0x08005c16      f876           strb r0, [r7, 0x1b]
| |||||||   0x08005c18      c820           movs r0, 0xc8               ; 200
| |||||||   0x08005c1a      01f073fa       bl _Wait
| |||||||      ; JMP XREF from 0x08005c0c (_MSG_HandleLEDStyleCMD)
| --------> 0x08005c1e      4046           mov r0, r8
| |||||||   0x08005c20      401e           subs r0, r0, 1
| |||||||   0x08005c22      0928           cmp r0, 9                   ; 9
| ========< 0x08005c24      00f2bc80       bhi.w 0x8005da0
| |||||||   0x08005c28      dfe800f0       tbb [0x08005c30]
| |||||||   0x08005c2c      0529           cmp r1, 5                   ; 5
| |||||||   0x08005c2e      42ba           rev16 r2, r0
| |||||||   0x08005c30      5f64           str r7, [r3, 0x44]
| |||||||   0x08005c32      ba6e           ldr r2, [r7, 0x68]
| |||||||   0x08005c34      87a1           adr r1, 0x21c               ; 0x8005e54
| |||||||   0x08005c36      002c           cmp r4, 0
| ========< 0x08005c38      0cd1           bne 0x8005c54
| |||||||   0x08005c3a      3078           ldrb r0, [r6]
| |||||||   0x08005c3c      3870           strb r0, [r7]
| |||||||   0x08005c3e      0320           movs r0, 3                  ; 3
| |||||||   0x08005c40      0190           str r0, [sp, 4]
| |||||||   0x08005c42      0120           movs r0, 1                  ; 1
| |||||||   0x08005c44      0090           str r0, [sp]
| |||||||   0x08005c46      3346           mov r3, r6
| |||||||   0x08005c48      0246           mov r2, r0
| |||||||   0x08005c4a      0921           movs r1, 9                  ; 9
| |||||||   0x08005c4c      0020           movs r0, 0
| |||||||   0x08005c4e      fff7a7fd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005c52      a5e0           b 0x8005da0
| |||||||      ; JMP XREF from 0x08005c38 (_MSG_HandleLEDStyleCMD)
| --------> 0x08005c54      012c           cmp r4, 1                   ; 1
| ========< 0x08005c56      40f0a380       bne.w 0x8005da0
| |||||||   0x08005c5a      3078           ldrb r0, [r6]
| |||||||   0x08005c5c      3870           strb r0, [r7]
| |||||||   0x08005c5e      0220           movs r0, 2                  ; 2
| |||||||   0x08005c60      0190           str r0, [sp, 4]
| |||||||   0x08005c62      0120           movs r0, 1                  ; 1
| |||||||   0x08005c64      0090           str r0, [sp]
| |||||||   0x08005c66      3346           mov r3, r6
| |||||||   0x08005c68      0246           mov r2, r0
| |||||||   0x08005c6a      0921           movs r1, 9                  ; 9
| |||||||   0x08005c6c      fff798fd       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005c70      3878           ldrb r0, [r7]
| |||||||   0x08005c72      0028           cmp r0, 0
| ========< 0x08005c74      00f09480       beq.w 0x8005da0
| |||||||   0x08005c78      0120           movs r0, 1                  ; 1
| |||||||   0x08005c7a      b871           strb r0, [r7, 6]
| ========< 0x08005c7c      90e0           b 0x8005da0
| |||||||   0x08005c7e      002c           cmp r4, 0
| ========< 0x08005c80      09d1           bne 0x8005c96
| |||||||   0x08005c82      0320           movs r0, 3                  ; 3
| |||||||   0x08005c84      0190           str r0, [sp, 4]
| |||||||   0x08005c86      0090           str r0, [sp]
| |||||||   0x08005c88      3346           mov r3, r6
| |||||||   0x08005c8a      0222           movs r2, 2                  ; 2
| |||||||   0x08005c8c      0921           movs r1, 9                  ; 9
| |||||||   0x08005c8e      0020           movs r0, 0
| |||||||   0x08005c90      fff786fd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005c94      84e0           b 0x8005da0
| |||||||      ; JMP XREF from 0x08005c80 (_MSG_HandleLEDStyleCMD)
| --------> 0x08005c96      012c           cmp r4, 1                   ; 1
| ========< 0x08005c98      40f08280       bne.w 0x8005da0
| |||||||   0x08005c9c      0220           movs r0, 2                  ; 2
| |||||||   0x08005c9e      0190           str r0, [sp, 4]
| |||||||   0x08005ca0      0120           movs r0, 1                  ; 1
| |||||||   0x08005ca2      0090           str r0, [sp]
| |||||||   0x08005ca4      3346           mov r3, r6
| |||||||   0x08005ca6      0222           movs r2, 2                  ; 2
| |||||||   0x08005ca8      0921           movs r1, 9                  ; 9
| |||||||   0x08005caa      fff779fd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005cae      77e0           b 0x8005da0
| |||||||   0x08005cb0      002c           cmp r4, 0
| ========< 0x08005cb2      0ad1           bne 0x8005cca
| |||||||   0x08005cb4      0320           movs r0, 3                  ; 3
| |||||||   0x08005cb6      0190           str r0, [sp, 4]
| |||||||   0x08005cb8      d620           movs r0, 0xd6               ; 214
| |||||||   0x08005cba      0090           str r0, [sp]
| |||||||   0x08005cbc      3346           mov r3, r6
| |||||||   0x08005cbe      0322           movs r2, 3                  ; 3
| |||||||   0x08005cc0      0921           movs r1, 9                  ; 9
| |||||||   0x08005cc2      0020           movs r0, 0
| |||||||   0x08005cc4      fff76cfd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005cc8      6ae0           b 0x8005da0
| |||||||      ; JMP XREF from 0x08005cb2 (_MSG_HandleLEDStyleCMD)
| --------> 0x08005cca      012c           cmp r4, 1                   ; 1
| ========< 0x08005ccc      68d1           bne 0x8005da0
| |||||||   0x08005cce      3078           ldrb r0, [r6]
| |||||||   0x08005cd0      3870           strb r0, [r7]
| |||||||   0x08005cd2      0220           movs r0, 2                  ; 2
| |||||||   0x08005cd4      0190           str r0, [sp, 4]
| |||||||   0x08005cd6      0120           movs r0, 1                  ; 1
| |||||||   0x08005cd8      0090           str r0, [sp]
| |||||||   0x08005cda      3346           mov r3, r6
| |||||||   0x08005cdc      0322           movs r2, 3                  ; 3
| |||||||   0x08005cde      0921           movs r1, 9                  ; 9
| |||||||   0x08005ce0      fff75efd       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005ce4      0120           movs r0, 1                  ; 1
| |||||||   0x08005ce6      b871           strb r0, [r7, 6]
| ========< 0x08005ce8      5ae0           b 0x8005da0
| |||||||   0x08005cea      012c           cmp r4, 1                   ; 1
| ========< 0x08005cec      58d1           bne 0x8005da0
| |||||||   0x08005cee      3078           ldrb r0, [r6]
| |||||||   0x08005cf0      3870           strb r0, [r7]
| ========< 0x08005cf2      55e0           b 0x8005da0
| |||||||   0x08005cf4      0320           movs r0, 3                  ; 3
| |||||||   0x08005cf6      0190           str r0, [sp, 4]
| |||||||   0x08005cf8      0095           str r5, [sp]
| |||||||   0x08005cfa      3346           mov r3, r6
| |||||||   0x08005cfc      0622           movs r2, 6                  ; 6
| |||||||   0x08005cfe      0921           movs r1, 9                  ; 9
| |||||||   0x08005d00      0020           movs r0, 0
| |||||||   0x08005d02      fff74dfd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005d06      4be0           b 0x8005da0
| |||||||   0x08005d08      002c           cmp r4, 0
| ========< 0x08005d0a      0ad1           bne 0x8005d22
| |||||||   0x08005d0c      0320           movs r0, 3                  ; 3
| |||||||   0x08005d0e      0190           str r0, [sp, 4]
| |||||||   0x08005d10      0120           movs r0, 1                  ; 1
| |||||||   0x08005d12      0090           str r0, [sp]
| |||||||   0x08005d14      0023           movs r3, 0
| |||||||   0x08005d16      0822           movs r2, 8                  ; 8
| |||||||   0x08005d18      0921           movs r1, 9                  ; 9
| |||||||   0x08005d1a      1846           mov r0, r3
| |||||||   0x08005d1c      fff740fd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005d20      3ee0           b 0x8005da0
| |||||||      ; JMP XREF from 0x08005d0a (_MSG_HandleLEDStyleCMD)
| --------> 0x08005d22      012c           cmp r4, 1                   ; 1
| ========< 0x08005d24      3cd1           bne 0x8005da0
| |||||||   0x08005d26      0220           movs r0, 2                  ; 2
| |||||||   0x08005d28      0190           str r0, [sp, 4]
| |||||||   0x08005d2a      0120           movs r0, 1                  ; 1
| |||||||   0x08005d2c      0090           str r0, [sp]
| |||||||   0x08005d2e      3346           mov r3, r6
| |||||||   0x08005d30      0822           movs r2, 8                  ; 8
| |||||||   0x08005d32      0921           movs r1, 9                  ; 9
| |||||||   0x08005d34      fff734fd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005d38      32e0           b 0x8005da0
| |||||||   0x08005d3a      002c           cmp r4, 0
| ========< 0x08005d3c      0ad1           bne 0x8005d54
| |||||||   0x08005d3e      0320           movs r0, 3                  ; 3
| |||||||   0x08005d40      0190           str r0, [sp, 4]
| |||||||   0x08005d42      0120           movs r0, 1                  ; 1
| |||||||   0x08005d44      0090           str r0, [sp]
| |||||||   0x08005d46      0023           movs r3, 0
| |||||||   0x08005d48      0922           movs r2, 9                  ; 9
| |||||||   0x08005d4a      1146           mov r1, r2
| |||||||   0x08005d4c      1846           mov r0, r3
| |||||||   0x08005d4e      fff727fd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005d52      25e0           b 0x8005da0
| |||||||      ; JMP XREF from 0x08005d3c (_MSG_HandleLEDStyleCMD)
| --------> 0x08005d54      012c           cmp r4, 1                   ; 1
| ========< 0x08005d56      23d1           bne 0x8005da0
| |||||||   0x08005d58      0220           movs r0, 2                  ; 2
| |||||||   0x08005d5a      0190           str r0, [sp, 4]
| |||||||   0x08005d5c      d620           movs r0, 0xd6               ; 214
| |||||||   0x08005d5e      0090           str r0, [sp]
| |||||||   0x08005d60      3346           mov r3, r6
| |||||||   0x08005d62      0922           movs r2, 9                  ; 9
| |||||||   0x08005d64      1146           mov r1, r2
| |||||||   0x08005d66      0120           movs r0, 1                  ; 1
| |||||||   0x08005d68      fff71afd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005d6c      18e0           b 0x8005da0
| |||||||   0x08005d6e      002c           cmp r4, 0
| ========< 0x08005d70      0ad1           bne 0x8005d88
| |||||||   0x08005d72      0320           movs r0, 3                  ; 3
| |||||||   0x08005d74      0190           str r0, [sp, 4]
| |||||||   0x08005d76      0120           movs r0, 1                  ; 1
| |||||||   0x08005d78      0090           str r0, [sp]
| |||||||   0x08005d7a      0023           movs r3, 0
| |||||||   0x08005d7c      0a22           movs r2, 0xa                ; 10
| |||||||   0x08005d7e      0921           movs r1, 9                  ; 9
| |||||||   0x08005d80      1846           mov r0, r3
| |||||||   0x08005d82      fff70dfd       bl _MSG_CMDPrepareOrSend
| ========< 0x08005d86      0be0           b 0x8005da0
| |||||||      ; JMP XREF from 0x08005d70 (_MSG_HandleLEDStyleCMD)
| --------> 0x08005d88      012c           cmp r4, 1                   ; 1
| ========< 0x08005d8a      09d1           bne 0x8005da0
| |||||||   0x08005d8c      0220           movs r0, 2                  ; 2
| |||||||   0x08005d8e      0190           str r0, [sp, 4]
| |||||||   0x08005d90      0420           movs r0, 4                  ; 4
| |||||||   0x08005d92      0090           str r0, [sp]
| |||||||   0x08005d94      3346           mov r3, r6
| |||||||   0x08005d96      0a22           movs r2, 0xa                ; 10
| |||||||   0x08005d98      0921           movs r1, 9                  ; 9
| |||||||   0x08005d9a      0120           movs r0, 1                  ; 1
| |||||||   0x08005d9c      fff700fd       bl _MSG_CMDPrepareOrSend
| |||||||      ; XREFS: JMP 0x08005c24  JMP 0x08005c52  JMP 0x08005c56  JMP 0x08005c74  JMP 0x08005c7c  JMP 0x08005c94  JMP 0x08005c98  JMP 0x08005cae  JMP 0x08005cc8  
| |||||||      ; XREFS: JMP 0x08005ccc  JMP 0x08005ce8  JMP 0x08005cec  JMP 0x08005cf2  JMP 0x08005d06  JMP 0x08005d20  JMP 0x08005d24  JMP 0x08005d38  JMP 0x08005d52  
| |||||||      ; XREFS: JMP 0x08005d56  JMP 0x08005d6c  JMP 0x08005d86  JMP 0x08005d8a  
| --------> 0x08005da0      b8f10b0f       cmp.w r8, 0xb               ; 11
| ========< 0x08005da4      0dd0           beq 0x8005dc2
| |||||||   0x08005da6      012c           cmp r4, 1                   ; 1
| ========< 0x08005da8      0bd1           bne 0x8005dc2
| |||||||   0x08005daa      3878           ldrb r0, [r7]
| |||||||   0x08005dac      0028           cmp r0, 0
| ========< 0x08005dae      08d1           bne 0x8005dc2
| |||||||   0x08005db0      787f           ldrb r0, [r7, 0x1d]
| |||||||   0x08005db2      0128           cmp r0, 1                   ; 1
| ========< 0x08005db4      05d0           beq 0x8005dc2
| |||||||   0x08005db6      97f86100       ldrb.w r0, [r7, 0x61]
| |||||||   0x08005dba      0028           cmp r0, 0
| ========< 0x08005dbc      01d1           bne 0x8005dc2
| |||||||   0x08005dbe      0020           movs r0, 0
| |||||||   0x08005dc0      b871           strb r0, [r7, 6]
| |||||||      ; JMP XREF from 0x08005da4 (_MSG_HandleLEDStyleCMD)
| |||||||      ; JMP XREF from 0x08005da8 (_MSG_HandleLEDStyleCMD)
| |||||||      ; JMP XREF from 0x08005dae (_MSG_HandleLEDStyleCMD)
| |||||||      ; JMP XREF from 0x08005db4 (_MSG_HandleLEDStyleCMD)
| |||||||      ; JMP XREF from 0x08005dbc (_MSG_HandleLEDStyleCMD)
\ --------> 0x08005dc2      bde8f381       pop.w {r0, r1, r4, r5, r6, r7, r8, pc}
  |||||||   0x08005dc6      0000           movs r0, r0
  |||||||      ; DATA XREF from 0x08005320 (_LED_CMDSend)
  |||||||      ; DATA XREF from 0x080058b6 (_MSG_HandleKeyboardCMD)
  |||||||      ; DATA XREF from 0x08005918 (_MSG_HandleKeyboardCMD)
  |||||||   0x08005dc8      .dword 0x200017a8
| |||||||   ;-- MSG_HandleMacroCMD:
/ (fcn) _MSG_HandleMacroCMD 514
|   _MSG_HandleMacroCMD ();
| |||||||      ; JMP XREF from 0x08004da8 (_BLE_KeyPress_Something)
| |||||||      ; JMP XREF from 0x0800605a (_MSG_Handle)
| --------> 0x08005dcc      2de9fc41       push.w {r2, r3, r4, r5, r6, r7, r8, lr} ; probably not this function name
| |||||||   0x08005dd0      1c46           mov r4, r3
| |||||||   0x08005dd2      491e           subs r1, r1, 1
| |||||||   0x08005dd4      0529           cmp r1, 5                   ; 5
| ========< 0x08005dd6      00f2f880       bhi.w 0x8005fca
| |||||||   0x08005dda      dfe801f0       tbb [0x08005de0]
| |||||||   0x08005dde      0315           asrs r3, r0, 0x14
| |||||||   0x08005de0      235b           ldrh r3, [r4, r4]
| |||||||   0x08005de2      b03f           subs r7, 0xb0
| |||||||   0x08005de4      df4d           ldr r5, [0x08006164]        ; [0x8006164:4]=0x20000768
| |||||||   0x08005de6      0120           movs r0, 1                  ; 1
| |||||||   0x08005de8      85f84400       strb.w r0, [r5, 0x44]
| |||||||   0x08005dec      0020           movs r0, 0
| |||||||   0x08005dee      05f14401       add.w r1, r5, 0x44
| |||||||   0x08005df2      4870           strb r0, [r1, 1]
| |||||||   0x08005df4      2070           strb r0, [r4]
| |||||||   0x08005df6      0220           movs r0, 2                  ; 2
| |||||||   0x08005df8      0190           str r0, [sp, 4]
| |||||||   0x08005dfa      0120           movs r0, 1                  ; 1
| |||||||   0x08005dfc      0090           str r0, [sp]
| |||||||   0x08005dfe      0246           mov r2, r0
| |||||||   0x08005e00      0521           movs r1, 5                  ; 5
| |||||||   0x08005e02      fff7cdfc       bl _MSG_CMDPrepareOrSend
| ========< 0x08005e06      e0e0           b 0x8005fca
| |||||||   0x08005e08      0020           movs r0, 0
| |||||||   0x08005e0a      d649           ldr r1, [0x08006164]        ; [0x8006164:4]=0x20000768
| |||||||   0x08005e0c      81f84400       strb.w r0, [r1, 0x44]
| |||||||   0x08005e10      2070           strb r0, [r4]
| |||||||   0x08005e12      0220           movs r0, 2                  ; 2
| |||||||   0x08005e14      0190           str r0, [sp, 4]
| |||||||   0x08005e16      0120           movs r0, 1                  ; 1
| |||||||   0x08005e18      0090           str r0, [sp]
| |||||||   0x08005e1a      0222           movs r2, 2                  ; 2
| |||||||   0x08005e1c      0521           movs r1, 5                  ; 5
| |||||||   0x08005e1e      fff7bffc       bl _MSG_CMDPrepareOrSend
| ========< 0x08005e22      d2e0           b 0x8005fca
| |||||||   0x08005e24      cf4d           ldr r5, [0x08006164]        ; [0x8006164:4]=0x20000768
| |||||||   0x08005e26      95f84400       ldrb.w r0, [r5, 0x44]
| |||||||   0x08005e2a      0128           cmp r0, 1                   ; 1
| ========< 0x08005e2c      40f0cd80       bne.w 0x8005fca
| |||||||   0x08005e30      0220           movs r0, 2                  ; 2
| |||||||   0x08005e32      0190           str r0, [sp, 4]
| |||||||   0x08005e34      0820           movs r0, 8                  ; 8
| |||||||   0x08005e36      0090           str r0, [sp]
| |||||||   0x08005e38      0322           movs r2, 3                  ; 3
| |||||||   0x08005e3a      0521           movs r1, 5                  ; 5
| |||||||   0x08005e3c      0020           movs r0, 0
| |||||||   0x08005e3e      fff7affc       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005e42      05f14400       add.w r0, r5, 0x44
| |||||||   0x08005e46      4178           ldrb r1, [r0, 1]
| |||||||   0x08005e48      491c           adds r1, r1, 1
| |||||||   0x08005e4a      4170           strb r1, [r0, 1]
| |||||||   0x08005e4c      c9b2           uxtb r1, r1
| |||||||   0x08005e4e      2929           cmp r1, 0x29                ; ')' ; 41
| ========< 0x08005e50      c0f2bb80       blt.w 0x8005fca
| |||||||      ; DATA XREF from 0x08005c34 (_MSG_HandleLEDStyleCMD)
| |||||||   0x08005e54      0020           movs r0, 0
| |||||||   0x08005e56      85f84400       strb.w r0, [r5, 0x44]
| ========< 0x08005e5a      b6e0           b 0x8005fca
| |||||||   0x08005e5c      c14d           ldr r5, [0x08006164]        ; [0x8006164:4]=0x20000768
| |||||||   0x08005e5e      95f84400       ldrb.w r0, [r5, 0x44]
| |||||||   0x08005e62      0128           cmp r0, 1                   ; 1
| ========< 0x08005e64      40f0b180       bne.w 0x8005fca
| |||||||   0x08005e68      0220           movs r0, 2                  ; 2
| |||||||   0x08005e6a      0190           str r0, [sp, 4]
| |||||||   0x08005e6c      0820           movs r0, 8                  ; 8
| |||||||   0x08005e6e      0090           str r0, [sp]
| |||||||   0x08005e70      0622           movs r2, 6                  ; 6
| |||||||   0x08005e72      0521           movs r1, 5                  ; 5
| |||||||   0x08005e74      0020           movs r0, 0
| |||||||   0x08005e76      fff793fc       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005e7a      05f14400       add.w r0, r5, 0x44
| |||||||   0x08005e7e      4178           ldrb r1, [r0, 1]
| |||||||   0x08005e80      491c           adds r1, r1, 1
| |||||||   0x08005e82      4170           strb r1, [r0, 1]
| |||||||   0x08005e84      c9b2           uxtb r1, r1
| |||||||   0x08005e86      2929           cmp r1, 0x29                ; ')' ; 41
| ========< 0x08005e88      c0f29f80       blt.w 0x8005fca
| |||||||   0x08005e8c      0020           movs r0, 0
| |||||||   0x08005e8e      85f84400       strb.w r0, [r5, 0x44]
| ========< 0x08005e92      9ae0           b 0x8005fca
| |||||||   0x08005e94      b34d           ldr r5, [0x08006164]        ; [0x8006164:4]=0x20000768
| |||||||   0x08005e96      0420           movs r0, 4                  ; 4
| |||||||   0x08005e98      85f84400       strb.w r0, [r5, 0x44]
| |||||||   0x08005e9c      2678           ldrb r6, [r4]
| |||||||   0x08005e9e      6078           ldrb r0, [r4, 1]
| |||||||   0x08005ea0      a178           ldrb r1, [r4, 2]
| |||||||   0x08005ea2      e278           ldrb r2, [r4, 3]
| |||||||   0x08005ea4      2379           ldrb r3, [r4, 4]
| |||||||   0x08005ea6      42ea0322       orr.w r2, r2, r3, lsl 8
| |||||||   0x08005eaa      6379           ldrb r3, [r4, 5]
| |||||||   0x08005eac      42ea0342       orr.w r2, r2, r3, lsl 16
| |||||||   0x08005eb0      a379           ldrb r3, [r4, 6]
| |||||||   0x08005eb2      42ea0367       orr.w r7, r2, r3, lsl 24
| |||||||   0x08005eb6      e379           ldrb r3, [r4, 7]
| |||||||   0x08005eb8      152b           cmp r3, 0x15                ; 21
| ========< 0x08005eba      80f28680       bge.w 0x8005fca
| |||||||   0x08005ebe      9422           movs r2, 0x94               ; 148
| |||||||   0x08005ec0      7243           muls r2, r6, r2
| |||||||   0x08005ec2      dff864ca       ldr.w ip, [0x08006928]      ; [0x8006928:4]=0x20000edc
| |||||||   0x08005ec6      4ff0000e       mov.w lr, 0
| |||||||   0x08005eca      02f80ce0       strb.w lr, [r2, ip]
| |||||||   0x08005ece      6244           add r2, ip
| |||||||   0x08005ed0      1673           strb r6, [r2, 0xc]
| |||||||   0x08005ed2      5073           strb r0, [r2, 0xd]
| |||||||   0x08005ed4      9173           strb r1, [r2, 0xe]
| |||||||   0x08005ed6      1761           str r7, [r2, 0x10]
| |||||||   0x08005ed8      1375           strb r3, [r2, 0x14]
| |||||||   0x08005eda      7046           mov r0, lr
| ========< 0x08005edc      1be0           b 0x8005f16
| |||||||      ; JMP XREF from 0x08005f18 (_MSG_HandleMacroCMD)
| --------> 0x08005ede      0627           movs r7, 6                  ; 6
| |||||||   0x08005ee0      07fb0027       mla r7, r7, r0, r2
| |||||||   0x08005ee4      00eb800c       add.w ip, r0, r0, lsl 2
| |||||||   0x08005ee8      a444           add ip, r4
| |||||||   0x08005eea      9cf808e0       ldrb.w lr, [ip, 8]
| |||||||   0x08005eee      87f81ce0       strb.w lr, [r7, 0x1c]
| |||||||   0x08005ef2      9cf809e0       ldrb.w lr, [ip, 9]
| |||||||   0x08005ef6      9cf80a80       ldrb.w r8, [ip, 0xa]
| |||||||   0x08005efa      4eea082e       orr.w lr, lr, r8, lsl 8
| |||||||   0x08005efe      a7f81ee0       strh.w lr, [r7, 0x1e]
| |||||||   0x08005f02      9cf80be0       ldrb.w lr, [ip, 0xb]
| |||||||   0x08005f06      9cf80cc0       ldrb.w ip, [ip, 0xc]
| |||||||   0x08005f0a      4eea0c2c       orr.w ip, lr, ip, lsl 8
| |||||||   0x08005f0e      a7f820c0       strh.w ip, [r7, 0x20]
| |||||||   0x08005f12      401c           adds r0, r0, 1
| |||||||   0x08005f14      c0b2           uxtb r0, r0
| |||||||      ; JMP XREF from 0x08005edc (_MSG_HandleMacroCMD)
| --------> 0x08005f16      9842           cmp r0, r3
| ========< 0x08005f18      e1db           blt 0x8005ede
| |||||||   0x08005f1a      2246           mov r2, r4
| |||||||   0x08005f1c      3046           mov r0, r6
| |||||||   0x08005f1e      00f07efc       bl _EEPROM_Write_Something3
| |||||||   0x08005f22      2670           strb r6, [r4]
| |||||||   0x08005f24      0220           movs r0, 2                  ; 2
| |||||||   0x08005f26      0190           str r0, [sp, 4]
| |||||||   0x08005f28      0120           movs r0, 1                  ; 1
| |||||||   0x08005f2a      0090           str r0, [sp]
| |||||||   0x08005f2c      2346           mov r3, r4
| |||||||   0x08005f2e      0422           movs r2, 4                  ; 4
| |||||||   0x08005f30      0521           movs r1, 5                  ; 5
| |||||||   0x08005f32      fff735fc       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005f36      0020           movs r0, 0
| |||||||   0x08005f38      85f84400       strb.w r0, [r5, 0x44]
| ========< 0x08005f3c      45e0           b 0x8005fca
| |||||||   0x08005f3e      894d           ldr r5, [0x08006164]        ; [0x8006164:4]=0x20000768
| |||||||      ; JMP XREF from 0x08005f00 (_MSG_HandleMacroCMD)
| |||||||   0x08005f40      0520           movs r0, 5                  ; 5
| |||||||   0x08005f42      85f84400       strb.w r0, [r5, 0x44]
| |||||||   0x08005f46      2678           ldrb r6, [r4]
| |||||||   0x08005f48      2670           strb r6, [r4]
| |||||||   0x08005f4a      9422           movs r2, 0x94               ; 148
| |||||||   0x08005f4c      dff8d8c9       ldr.w ip, [0x08006928]      ; [0x8006928:4]=0x20000edc
| |||||||   0x08005f50      02fb06c0       mla r0, r2, r6, ip
| |||||||   0x08005f54      417b           ldrb r1, [r0, 0xd]
| |||||||   0x08005f56      6170           strb r1, [r4, 1]
| |||||||   0x08005f58      817b           ldrb r1, [r0, 0xe]
| |||||||   0x08005f5a      a170           strb r1, [r4, 2]
| |||||||   0x08005f5c      0169           ldr r1, [r0, 0x10]
| |||||||   0x08005f5e      e170           strb r1, [r4, 3]
| |||||||   0x08005f60      0169           ldr r1, [r0, 0x10]
| |||||||   0x08005f62      090a           lsrs r1, r1, 8
| |||||||   0x08005f64      2171           strb r1, [r4, 4]
| |||||||   0x08005f66      0169           ldr r1, [r0, 0x10]
| |||||||   0x08005f68      090c           lsrs r1, r1, 0x10
| |||||||   0x08005f6a      6171           strb r1, [r4, 5]
| |||||||   0x08005f6c      0169           ldr r1, [r0, 0x10]
| |||||||   0x08005f6e      090e           lsrs r1, r1, 0x18
| |||||||   0x08005f70      a171           strb r1, [r4, 6]
| |||||||   0x08005f72      0021           movs r1, 0
| |||||||   0x08005f74      0627           movs r7, 6                  ; 6
| ========< 0x08005f76      12e0           b 0x8005f9e
| |||||||      ; JMP XREF from 0x08005fa2 (_MSG_HandleMacroCMD)
| --------> 0x08005f78      07fb0102       mla r2, r7, r1, r0
| |||||||   0x08005f7c      01eb8103       add.w r3, r1, r1, lsl 2
| |||||||   0x08005f80      1b19           adds r3, r3, r4
| |||||||   0x08005f82      167f           ldrb r6, [r2, 0x1c]
| |||||||   0x08005f84      1e72           strb r6, [r3, 8]
| |||||||   0x08005f86      d68b           ldrh r6, [r2, 0x1e]
| |||||||   0x08005f88      5e72           strb r6, [r3, 9]
| |||||||   0x08005f8a      d68b           ldrh r6, [r2, 0x1e]
| |||||||   0x08005f8c      360a           lsrs r6, r6, 8
| |||||||   0x08005f8e      9e72           strb r6, [r3, 0xa]
| |||||||   0x08005f90      168c           ldrh r6, [r2, 0x20]
| |||||||   0x08005f92      de72           strb r6, [r3, 0xb]
| |||||||   0x08005f94      128c           ldrh r2, [r2, 0x20]
| |||||||   0x08005f96      120a           lsrs r2, r2, 8
| |||||||   0x08005f98      1a73           strb r2, [r3, 0xc]
| |||||||   0x08005f9a      491c           adds r1, r1, 1
| |||||||   0x08005f9c      c9b2           uxtb r1, r1
| |||||||      ; JMP XREF from 0x08005f76 (_MSG_HandleMacroCMD)
| --------> 0x08005f9e      027d           ldrb r2, [r0, 0x14]
| |||||||   0x08005fa0      9142           cmp r1, r2
| ========< 0x08005fa2      e9db           blt 0x8005f78
| |||||||   0x08005fa4      1146           mov r1, r2
| |||||||   0x08005fa6      e171           strb r1, [r4, 7]
| |||||||   0x08005fa8      0221           movs r1, 2                  ; 2
| |||||||   0x08005faa      0191           str r1, [sp, 4]
| |||||||   0x08005fac      007d           ldrb r0, [r0, 0x14]
| |||||||   0x08005fae      00eb8000       add.w r0, r0, r0, lsl 2
| |||||||   0x08005fb2      0830           adds r0, 8
| |||||||   0x08005fb4      c0b2           uxtb r0, r0
| |||||||   0x08005fb6      0090           str r0, [sp]
| |||||||   0x08005fb8      2346           mov r3, r4
| |||||||   0x08005fba      0522           movs r2, 5                  ; 5
| |||||||   0x08005fbc      1146           mov r1, r2
| |||||||   0x08005fbe      0120           movs r0, 1                  ; 1
| |||||||   0x08005fc0      fff7eefb       bl _MSG_CMDPrepareOrSend
| |||||||   0x08005fc4      0020           movs r0, 0
| |||||||   0x08005fc6      85f84400       strb.w r0, [r5, 0x44]
| |||||||      ; XREFS: JMP 0x08005dd6  JMP 0x08005e06  JMP 0x08005e22  JMP 0x08005e2c  JMP 0x08005e50  JMP 0x08005e5a  JMP 0x08005e64  JMP 0x08005e88  JMP 0x08005e92  
| |||||||      ; XREFS: JMP 0x08005eba  JMP 0x08005f3c  
\ --------> 0x08005fca      bde8f381       pop.w {r0, r1, r4, r5, r6, r7, r8, pc}
\ |||||||   ;-- MSG_Handle:
/ (fcn) _MSG_Handle 146
|   _MSG_Handle ();
| |||||||      ; JMP XREF from 0x080060a4 (_MSG_Get)
| --------> 0x08005fce      18b4           push {r3, r4}
| |||||||   0x08005fd0      0278           ldrb r2, [r0]
| |||||||   0x08005fd2      02f03f02       and r2, r2, 0x3f
| |||||||   0x08005fd6      022a           cmp r2, 2                   ; 2 ; MSGTYPE_SYSTEM
| ========< 0x08005fd8      08d0           beq 0x8005fec
| |||||||   0x08005fda      052a           cmp r2, 5                   ; 5 ; MSGTYPE_MACRO
| ========< 0x08005fdc      33d0           beq 0x8006046
| |||||||   0x08005fde      062a           cmp r2, 6                   ; 6 ; MSGTYPE_BLE
| ========< 0x08005fe0      10d0           beq 0x8006004
| |||||||   0x08005fe2      072a           cmp r2, 7                   ; 7 ; MSGTYPE_KEYBOARD
| ========< 0x08005fe4      19d0           beq 0x800601a
| |||||||   0x08005fe6      092a           cmp r2, 9                   ; 9 ; MSGTYPE_LEDSTYLE
| ========< 0x08005fe8      22d0           beq 0x8006030
| ========< 0x08005fea      37e0           b 0x800605c
| |||||||      ; JMP XREF from 0x08005fd8 (_MSG_Handle)
| --------> 0x08005fec      8478           ldrb r4, [r0, 2]
| |||||||   0x08005fee      0b46           mov r3, r1                  ; data
| |||||||   0x08005ff0      4078           ldrb r0, [r0, 1]
| |||||||   0x08005ff2      421e           subs r2, r0, 1              ; size
| |||||||   0x08005ff4      d2b2           uxtb r2, r2
| |||||||   0x08005ff6      04f07f01       and r1, r4, 0x7f            ; cmd
| |||||||   0x08005ffa      e009           lsrs r0, r4, 7              ; ack
| |||||||   0x08005ffc      01b0           add sp, 4
| |||||||   0x08005ffe      10bc           pop {r4}
| ========< 0x08006000      fff7b9ba       b.w _MSG_HandleSystemCMD
| |||||||      ; JMP XREF from 0x08005fe0 (_MSG_Handle)
| --------> 0x08006004      8478           ldrb r4, [r0, 2]
| |||||||   0x08006006      0b46           mov r3, r1
| |||||||   0x08006008      4078           ldrb r0, [r0, 1]
| |||||||   0x0800600a      421e           subs r2, r0, 1
| |||||||   0x0800600c      d2b2           uxtb r2, r2
| |||||||   0x0800600e      04f07f01       and r1, r4, 0x7f
| |||||||   0x08006012      e009           lsrs r0, r4, 7
| |||||||   0x08006014      01b0           add sp, 4
| |||||||   0x08006016      10bc           pop {r4}
| ========< 0x08006018      dae4           b _MSG_HandleBLECMD
| |||||||      ; JMP XREF from 0x08005fe4 (_MSG_Handle)
| --------> 0x0800601a      8478           ldrb r4, [r0, 2]
| |||||||   0x0800601c      0b46           mov r3, r1
| |||||||   0x0800601e      4078           ldrb r0, [r0, 1]
| |||||||   0x08006020      421e           subs r2, r0, 1
| |||||||   0x08006022      d2b2           uxtb r2, r2
| |||||||   0x08006024      04f07f01       and r1, r4, 0x7f
| |||||||   0x08006028      e009           lsrs r0, r4, 7
| |||||||   0x0800602a      01b0           add sp, 4
| |||||||   0x0800602c      10bc           pop {r4}
| ========< 0x0800602e      17e4           b _MSG_HandleKeyboardCMD
| |||||||      ; JMP XREF from 0x08005fe8 (_MSG_Handle)
| --------> 0x08006030      8478           ldrb r4, [r0, 2]
| |||||||   0x08006032      0b46           mov r3, r1
| |||||||   0x08006034      4078           ldrb r0, [r0, 1]
| |||||||   0x08006036      421e           subs r2, r0, 1
| |||||||   0x08006038      d2b2           uxtb r2, r2
| |||||||   0x0800603a      04f07f01       and r1, r4, 0x7f
| |||||||   0x0800603e      e009           lsrs r0, r4, 7
| |||||||   0x08006040      01b0           add sp, 4
| |||||||   0x08006042      10bc           pop {r4}
| ========< 0x08006044      d8e5           b _MSG_HandleLEDStyleCMD
| |||||||      ; JMP XREF from 0x08005fdc (_MSG_Handle)
| --------> 0x08006046      8478           ldrb r4, [r0, 2]
| |||||||   0x08006048      0b46           mov r3, r1
| |||||||   0x0800604a      4078           ldrb r0, [r0, 1]
| |||||||   0x0800604c      421e           subs r2, r0, 1
| |||||||   0x0800604e      d2b2           uxtb r2, r2
| |||||||   0x08006050      04f07f01       and r1, r4, 0x7f
| |||||||   0x08006054      e009           lsrs r0, r4, 7
| |||||||   0x08006056      01b0           add sp, 4
| |||||||   0x08006058      10bc           pop {r4}
| ========< 0x0800605a      b7e6           b _MSG_HandleMacroCMD
| |||||||      ; JMP XREF from 0x08005fea (_MSG_Handle)
| --------> 0x0800605c      11bc           pop {r0, r4}
\ |||||||   0x0800605e      7047           bx lr
\ |||||||   ;-- MSG_Get:
/ (fcn) _MSG_Get 70
|       Caller: _KBD_MSGReceive
|   _MSG_Get ();
| |||||||      ; CALL XREF from 0x08008cee (_KBD_MSGReceive)
| |||||||   0x08006060      80b5           push {r7, lr}               ; copies LED or BT Rx packets to MSG_Buffer for parsing
| |||||||   0x08006062      0228           cmp r0, 2                   ; 2 ; copy BT_RxBuffer
| ========< 0x08006064      0ad1           bne 0x800607c
| |||||||   0x08006066      dff8c408       ldr.w r0, [0x0800692c]      ; [0x800692c:4]=0x20000768
| |||||||   0x0800606a      4ff48072       mov.w r2, 0x100             ; 256
| |||||||   0x0800606e      00f26c51       addw r1, r0, 0x56c
| |||||||   0x08006072      00f26c60       addw r0, r0, 0x66c
| |||||||   0x08006076      01f0c1fb       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| ========< 0x0800607a      0be0           b 0x8006094
| |||||||      ; JMP XREF from 0x08006064 (_MSG_Get)
| --------> 0x0800607c      0328           cmp r0, 3                   ; 3 ; copy LED_RxBuffer
| ========< 0x0800607e      09d1           bne 0x8006094
| |||||||   0x08006080      dff8a808       ldr.w r0, [0x0800692c]      ; [0x800692c:4]=0x20000768
| |||||||   0x08006084      4ff48072       mov.w r2, 0x100             ; 256
| |||||||   0x08006088      00f55b71       add.w r1, r0, 0x36c
| |||||||   0x0800608c      00f26c60       addw r0, r0, 0x66c
| |||||||   0x08006090      01f0b4fb       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| |||||||      ; JMP XREF from 0x0800607a (_MSG_Get)
| |||||||      ; JMP XREF from 0x0800607e (_MSG_Get)
| --------> 0x08006094      dff89408       ldr.w r0, [0x0800692c]      ; [0x800692c:4]=0x20000768
| |||||||   0x08006098      00f26f61       addw r1, r0, 0x66f          ; 0x20000dd7
| |||||||   0x0800609c      00f26c60       addw r0, r0, 0x66c          ; 0x20000dd4
| |||||||   0x080060a0      bde80440       pop.w {r2, lr}
\ ========< 0x080060a4      93e7           b _MSG_Handle
  |||||||   0x080060a6      0000           movs r0, r0
  |||||||      ; DATA XREF from 0x0800548a (_LED_KeyPosBSSend)
  |||||||   0x080060a8      .dword 0x20001950
| |||||||   ;-- KBD_DefaultsLoad:
/ (fcn) _KBD_DefaultsLoad 82
|       Caller: _KBD_Init
|   _KBD_DefaultsLoad ();
| |||||||      ; CALL XREF from 0x08004166 (_KBD_Init)
| |||||||   0x080060ac      38b5           push {r3, r4, r5, lr}
| |||||||   0x080060ae      0446           mov r4, r0
| |||||||   0x080060b0      0020           movs r0, 0
| |||||||   0x080060b2      84f8d200       strb.w r0, [r4, 0xd2]
| |||||||   0x080060b6      04f2d205       addw r5, r4, 0xd2
| |||||||   0x080060ba      6870           strb r0, [r5, 1]
| |||||||   0x080060bc      dff87008       ldr.w r0, [0x08006930]      ; [0x8006930:4]=0x20000000 ; default layout location
| |||||||   0x080060c0      c4f8a000       str.w r0, [r4, 0xa0]
| |||||||   0x080060c4      dff86c08       ldr.w r0, [0x08006934]      ; [0x8006934:4]=0x20000390
| |||||||   0x080060c8      c4f8a400       str.w r0, [r4, 0xa4]
| |||||||   0x080060cc      0420           movs r0, 4                  ; 4 ; default Fn row
| |||||||   0x080060ce      e870           strb r0, [r5, 3]
| |||||||   0x080060d0      0b20           movs r0, 0xb                ; 11 ; default Fn column
| |||||||   0x080060d2      2871           strb r0, [r5, 4]
| |||||||   0x080060d4      0522           movs r2, 5                  ; 5
| |||||||   0x080060d6      0021           movs r1, 0
| |||||||   0x080060d8      04f18c00       add.w r0, r4, 0x8c          ; maybe clears Row_X_BitSet where X:1-3
| |||||||   0x080060dc      00f048fc       bl memset                   ; void *memset(void *s, int c, size_t n)
| |||||||   0x080060e0      0522           movs r2, 5                  ; 5
| |||||||   0x080060e2      0021           movs r1, 0
| |||||||   0x080060e4      04f19600       add.w r0, r4, 0x96
| |||||||   0x080060e8      00f042fc       bl memset                   ; clear Row_X_BiteSet2 ; void *memset(void *s, int c, size_t n)
| |||||||   0x080060ec      0020           movs r0, 0
| |||||||   0x080060ee      e871           strb r0, [r5, 7]
| |||||||   0x080060f0      2872           strb r0, [r5, 8]
| |||||||   0x080060f2      c4f8e400       str.w r0, [r4, 0xe4]        ; clear TIM4_??
| |||||||   0x080060f6      0120           movs r0, 1                  ; 1
| |||||||   0x080060f8      84f8ed00       strb.w r0, [r4, 0xed]
\ |||||||   0x080060fc      31bd           pop {r0, r4, r5, pc}
/ (fcn) init_vars 100
|       Caller: _KBD_Init
|   init_vars ();
| |||||||      ; CALL XREF from 0x08004106 (_KBD_Init)
| |||||||   0x080060fe      dff82c08       ldr.w r0, [0x0800692c]      ; [0x800692c:4]=0x20000768
| |||||||   0x08006102      411c           adds r1, r0, 1
| |||||||   0x08006104      0022           movs r2, 0
| |||||||   0x08006106      4a70           strb r2, [r1, 1]
| |||||||   0x08006108      4270           strb r2, [r0, 1]
| |||||||   0x0800610a      0a75           strb r2, [r1, 0x14]
| |||||||   0x0800610c      8a74           strb r2, [r1, 0x12]
| |||||||   0x0800610e      ca74           strb r2, [r1, 0x13]
| |||||||   0x08006110      0122           movs r2, 1                  ; 1
| |||||||   0x08006112      ca75           strb r2, [r1, 0x17]
| |||||||   0x08006114      0022           movs r2, 0
| |||||||   0x08006116      8a75           strb r2, [r1, 0x16]
| |||||||   0x08006118      0122           movs r2, 1                  ; 1
| |||||||   0x0800611a      0a76           strb r2, [r1, 0x18]
| |||||||   0x0800611c      0022           movs r2, 0
| |||||||   0x0800611e      ca76           strb r2, [r1, 0x1b]
| |||||||   0x08006120      0122           movs r2, 1                  ; 1
| |||||||   0x08006122      8a76           strb r2, [r1, 0x1a]
| |||||||   0x08006124      0022           movs r2, 0
| |||||||   0x08006126      ca77           strb r2, [r1, 0x1f]
| |||||||   0x08006128      80f82120       strb.w r2, [r0, 0x21]
| |||||||   0x0800612c      0122           movs r2, 1                  ; 1
| |||||||   0x0800612e      80f82320       strb.w r2, [r0, 0x23]
| |||||||   0x08006132      0022           movs r2, 0
| |||||||   0x08006134      4262           str r2, [r0, 0x24]
| |||||||   0x08006136      4a76           strb r2, [r1, 0x19]
| |||||||   0x08006138      0a77           strb r2, [r1, 0x1c]
| |||||||   0x0800613a      00f12401       add.w r1, r0, 0x24
| |||||||   0x0800613e      0a71           strb r2, [r1, 4]
| |||||||   0x08006140      00f14402       add.w r2, r0, 0x44
| |||||||   0x08006144      0023           movs r3, 0
| |||||||   0x08006146      9360           str r3, [r2, 8]
| |||||||   0x08006148      d360           str r3, [r2, 0xc]
| |||||||   0x0800614a      0123           movs r3, 1                  ; 1
| |||||||   0x0800614c      0b73           strb r3, [r1, 0xc]
| |||||||   0x0800614e      0021           movs r1, 0
| |||||||   0x08006150      80f86610       strb.w r1, [r0, 0x66]
| |||||||   0x08006154      1946           mov r1, r3
| |||||||   0x08006156      d177           strb r1, [r2, 0x1f]
| |||||||   0x08006158      0021           movs r1, 0
| |||||||   0x0800615a      9177           strb r1, [r2, 0x1e]
| |||||||   0x0800615c      80f84410       strb.w r1, [r0, 0x44]
\ |||||||   0x08006160      7047           bx lr
  |||||||   0x08006162      0000           movs r0, r0
  |||||||      ; XREFS: DATA 0x080054fa  DATA 0x08005548  DATA 0x080055aa  DATA 0x0800568c  DATA 0x0800570a  DATA 0x0800574c  DATA 0x080057f2  DATA 0x080058aa  DATA 0x0800590e  
  |||||||      ; XREFS: DATA 0x08005952  DATA 0x080059fc  DATA 0x08005a06  DATA 0x08005b10  DATA 0x08005bcc  DATA 0x08005de4  DATA 0x08005e0a  DATA 0x08005e24  DATA 0x08005e5c  
  |||||||      ; XREFS: DATA 0x08005e94  DATA 0x08005f3e  
  |||||||   0x08006164      .dword 0x20000768
| |||||||   ;-- TIM4_LFreqConfig:
/ (fcn) _TIM4_LFreqConfig 104
|       Caller: _TIM4_Config
|   _TIM4_LFreqConfig ();
| |||||||      ; CALL XREF from 0x080068f0 (_TIM4_Config)
| |||||||   0x08006168      1fb5           push {r0, r1, r2, r3, r4, lr}
| |||||||   0x0800616a      dff8cc47       ldr.w r4, [0x08006938]      ; [0x8006938:4]=0x40000800 ; TIM4
| |||||||   0x0800616e      2046           mov r0, r4
| |||||||   0x08006170      01f0d8fb       bl _Periphs_Reset           ; reset timer 4
| |||||||   0x08006174      2046           mov r0, r4
| |||||||   0x08006176      01f0abfc       bl TIM_InternalClockConfig
| |||||||   0x0800617a      40f2e730       movw r0, 0x3e7              ; 999 ; TIM_TimeBaseInitStruct->TIM_Period
| |||||||   0x0800617e      0290           str r0, [sp, 8]
| |||||||   0x08006180      1f20           movs r0, 0x1f               ; 31 ; TIM_Prescaler divide CK_PSC by 32
| |||||||   0x08006182      adf80400       strh.w r0, [sp, 4]
| |||||||   0x08006186      0020           movs r0, 0
| |||||||   0x08006188      adf80c00       strh.w r0, [sp, 0xc]        ; TIM_ClockDivision
| |||||||   0x0800618c      adf80600       strh.w r0, [sp, 6]          ; TIM_CounterMode
| |||||||   0x08006190      01a9           add r1, sp, 4
| |||||||   0x08006192      2046           mov r0, r4
| |||||||   0x08006194      01f03dfc       bl TIM_TimeBaseInit
| |||||||   0x08006198      0121           movs r1, 1                  ; 1
| |||||||   0x0800619a      2046           mov r0, r4
| |||||||   0x0800619c      01f086fc       bl TIM_ClearFlag            ; clear update interrupt flag
| |||||||   0x080061a0      0122           movs r2, 1                  ; 1
| |||||||   0x080061a2      1146           mov r1, r2
| |||||||   0x080061a4      2046           mov r0, r4
| |||||||   0x080061a6      01f075fc       bl TIM_ITConfig             ; enable TIM update Interrupt
| |||||||   0x080061aa      4ff48060       mov.w r0, 0x400             ; 1024 ; NVIC_PriorityGroup_2, 2bits for subpriorities
| |||||||   0x080061ae      00f0a9fe       bl NVIC_PriorityGroupConfig
| |||||||   0x080061b2      1e20           movs r0, 0x1e               ; 30 ; NVIC_InitStruct->NVIC_IRQChannel
| |||||||   0x080061b4      8df80000       strb.w r0, [sp]
| |||||||   0x080061b8      0020           movs r0, 0                  ; NVIC_IRQChannelPreemptionPriority
| |||||||   0x080061ba      8df80100       strb.w r0, [sp, 1]
| |||||||   0x080061be      0120           movs r0, 1                  ; 1
| |||||||   0x080061c0      8df80200       strb.w r0, [sp, 2]          ; NVIC_IRQChannelSubPriority
| |||||||   0x080061c4      8df80300       strb.w r0, [sp, 3]          ; NVIC_IRQChannelCmd (Enable)
| |||||||   0x080061c8      00a8           add r0, sp, 0
| |||||||   0x080061ca      00f0a0fe       bl NVIC_Init                ; Initialize the NVIC peripheral
\ |||||||   0x080061ce      1fbd           pop {r0, r1, r2, r3, r4, pc}
  |||||||      ; DATA XREF from 0x08005638 (_MSG_HandleSystemCMD)
  |||||||   0x080061d0      .dword 0x20000770
| |||||||   ;-- TIM4_HFreqConfig:
/ (fcn) _TIM4_HFreqConfig 96
|       Caller: _TIM4_Config
|   _TIM4_HFreqConfig ();
| |||||||      ; CALL XREF from 0x080068fa (_TIM4_Config)
| |||||||   0x080061d4      1fb5           push {r0, r1, r2, r3, r4, lr}
| |||||||   0x080061d6      dff86047       ldr.w r4, [0x08006938]      ; [0x8006938:4]=0x40000800 ; TIM4
| |||||||   0x080061da      2046           mov r0, r4
| |||||||   0x080061dc      01f0a2fb       bl _Periphs_Reset
| |||||||   0x080061e0      2046           mov r0, r4
| |||||||   0x080061e2      01f075fc       bl TIM_InternalClockConfig
| |||||||   0x080061e6      40f2e730       movw r0, 0x3e7              ; 999
| |||||||   0x080061ea      0290           str r0, [sp, 8]
| |||||||   0x080061ec      0020           movs r0, 0                  ; Prescaler = 0; don't devide CK_PSC
| |||||||   0x080061ee      0190           str r0, [sp, 4]
| |||||||   0x080061f0      adf80c00       strh.w r0, [sp, 0xc]
| |||||||   0x080061f4      01a9           add r1, sp, 4
| |||||||   0x080061f6      2046           mov r0, r4
| |||||||   0x080061f8      01f00bfc       bl TIM_TimeBaseInit
| |||||||   0x080061fc      0121           movs r1, 1                  ; 1
| |||||||   0x080061fe      2046           mov r0, r4
| |||||||   0x08006200      01f054fc       bl TIM_ClearFlag
| |||||||   0x08006204      0122           movs r2, 1                  ; 1
| |||||||   0x08006206      1146           mov r1, r2
| |||||||   0x08006208      2046           mov r0, r4
| |||||||   0x0800620a      01f043fc       bl TIM_ITConfig
| |||||||   0x0800620e      4ff48060       mov.w r0, 0x400             ; 1024
| |||||||   0x08006212      00f077fe       bl NVIC_PriorityGroupConfig
| |||||||   0x08006216      1e20           movs r0, 0x1e               ; 30
| |||||||   0x08006218      8df80000       strb.w r0, [sp]
| |||||||   0x0800621c      0020           movs r0, 0
| |||||||   0x0800621e      8df80100       strb.w r0, [sp, 1]
| |||||||   0x08006222      0120           movs r0, 1                  ; 1
| |||||||   0x08006224      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08006228      8df80300       strb.w r0, [sp, 3]
| |||||||   0x0800622c      00a8           add r0, sp, 0
| |||||||   0x0800622e      00f06efe       bl NVIC_Init
\ |||||||   0x08006232      1fbd           pop {r0, r1, r2, r3, r4, pc}
\ |||||||   ;-- TIM4_Disable:
/ (fcn) _TIM4_Disable 36
|       Caller: _KBD_Init
|   _TIM4_Disable ();
| |||||||      ; JMP XREF from 0x08006908 (_TIM4_Disable_Wrapper)
| |||||||      ; CALL XREF from 0x08004174 (_KBD_Init)
| --------> 0x08006234      10b5           push {r4, lr}
| |||||||   0x08006236      dff80047       ldr.w r4, [0x08006938]      ; [0x8006938:4]=0x40000800
| |||||||   0x0800623a      0121           movs r1, 1                  ; 1
| |||||||   0x0800623c      2046           mov r0, r4
| |||||||   0x0800623e      01f035fc       bl TIM_ClearFlag            ; clear update interrupt flag in TIM4_SR
| |||||||   0x08006242      0022           movs r2, 0
| |||||||   0x08006244      0121           movs r1, 1                  ; 1
| |||||||   0x08006246      2046           mov r0, r4
| |||||||   0x08006248      01f024fc       bl TIM_ITConfig             ; disable update interrupts
| |||||||   0x0800624c      0021           movs r1, 0
| |||||||   0x0800624e      2046           mov r0, r4
| |||||||   0x08006250      bde81040       pop.w {r4, lr}
\ ========< 0x08006254      01f012bc       b.w TIM_Cmd                 ; disable TIM4 (CEN bit to 0)
\ |||||||   ;-- TIM4_Enable:
/ (fcn) _TIM4_Enable 44
|   _TIM4_Enable ();
| |||||||      ; JMP XREF from 0x08006902 (_TIM4_Config)
| --------> 0x08006258      10b5           push {r4, lr}
| |||||||   0x0800625a      dff8dc46       ldr.w r4, [0x08006938]      ; [0x8006938:4]=0x40000800
| |||||||   0x0800625e      0121           movs r1, 1                  ; 1
| |||||||   0x08006260      2046           mov r0, r4
| |||||||   0x08006262      01f021fc       bl TIM_GenerateEvent        ; generate update
| |||||||   0x08006266      0121           movs r1, 1                  ; 1
| |||||||   0x08006268      2046           mov r0, r4
| |||||||   0x0800626a      01f01ffc       bl TIM_ClearFlag            ; clear update interrupt flag in TIM4_SR
| |||||||   0x0800626e      0122           movs r2, 1                  ; 1
| |||||||   0x08006270      1146           mov r1, r2
| |||||||   0x08006272      2046           mov r0, r4
| |||||||   0x08006274      01f00efc       bl TIM_ITConfig             ; enable update interrupt
| |||||||   0x08006278      0121           movs r1, 1                  ; 1
| |||||||   0x0800627a      2046           mov r0, r4
| |||||||   0x0800627c      bde81040       pop.w {r4, lr}
\ ========< 0x08006280      01f0fcbb       b.w TIM_Cmd                 ; enable TIM4
  |||||||      ; DATA XREF from 0x0800578a (_BLE_IsMSGPending)
  |||||||      ; DATA XREF from 0x08005c04 (_MSG_HandleLEDStyleCMD)
  |||||||   0x08006284      .dword 0x20000768
  |||||||      ; DATA XREF from 0x0800575c (_BLE_SendMSG)
  |||||||   0x08006288      .dword 0x200007d4
  |||||||      ; DATA XREF from 0x08005886 (_MSG_HandleKeyboardCMD)
  |||||||      ; DATA XREF from 0x080058de (_MSG_HandleKeyboardCMD)
  |||||||      ; DATA XREF from 0x0800597c (_MSG_HandleKeyboardCMD)
  |||||||   0x0800628c      .dword 0x200004f8
  |||||||      ; DATA XREF from 0x08005892 (_MSG_HandleKeyboardCMD)
  |||||||      ; DATA XREF from 0x080058ec (_MSG_HandleKeyboardCMD)
  |||||||      ; DATA XREF from 0x08005986 (_MSG_HandleKeyboardCMD)
  |||||||   0x08006290      .dword 0x20000540
  |||||||      ; DATA XREF from 0x080058d8 (_MSG_HandleKeyboardCMD)
  |||||||   0x08006294      .dword 0x08080100
  |||||||      ; DATA XREF from 0x080058e6 (_MSG_HandleKeyboardCMD)
  |||||||   0x08006298      .dword 0x08080146
  |||||||      ; DATA XREF from 0x08005938 (_MSG_HandleKeyboardCMD)
  |||||||   0x0800629c      .dword 0x20000794
| |||||||   ;-- Periph_LowPowerMode:
/ (fcn) _Periph_LowPowerMode 122
|       Caller: _KBD_LowPowerMode
|   _Periph_LowPowerMode ();
| |||||||      ; CALL XREF from 0x0800667a (_KBD_LowPowerMode)
| |||||||   0x080062a0      70b5           push {r4, r5, r6, lr}
| |||||||   0x080062a2      0446           mov r4, r0
| |||||||   0x080062a4      0d46           mov r5, r1
| |||||||   0x080062a6      1646           mov r6, r2
| |||||||   0x080062a8      00f0fcfb       bl RCC_DeInit
| |||||||   0x080062ac      0020           movs r0, 0
| |||||||   0x080062ae      00f02bfd       bl FLASH_SetLatency
| |||||||   0x080062b2      0020           movs r0, 0
| |||||||   0x080062b4      00f030fd       bl FLASH_PrefetchBufferCmd
| |||||||   0x080062b8      0020           movs r0, 0
| |||||||   0x080062ba      00f03afd       bl FLASH_ReadAccess64Cmd
| |||||||   0x080062be      0120           movs r0, 1                  ; 1
| |||||||   0x080062c0      00f044fd       bl FLASH_SLEEPPowerDownCmd
| |||||||   0x080062c4      0121           movs r1, 1                  ; 1
| |||||||   0x080062c6      4ff08050       mov.w r0, 0x10000000
| |||||||   0x080062ca      00f0c8fc       bl RCC_APB1PeriphClockCmd
| |||||||   0x080062ce      4ff4c050       mov.w r0, 0x1800
| |||||||   0x080062d2      00f0e9fd       bl PWR_VoltageScalingConfig
| |||||||      ; JMP XREF from 0x080062de (_Periph_LowPowerMode)
| --------> 0x080062d6      1020           movs r0, 0x10               ; 16
| |||||||   0x080062d8      00f003fe       bl PWR_GetFlagStatus
| |||||||   0x080062dc      0028           cmp r0, 0
| ========< 0x080062de      fad1           bne 0x80062d6
| |||||||   0x080062e0      2046           mov r0, r4
| |||||||   0x080062e2      00f015fc       bl RCC_MSIRangeConfig
| |||||||   0x080062e6      0020           movs r0, 0
| |||||||   0x080062e8      00f02ffc       bl RCC_SYSCLKConfig
| |||||||      ; JMP XREF from 0x080062f2 (_Periph_LowPowerMode)
| --------> 0x080062ec      00f034fc       bl RCC_GetSYSCLKSource
| |||||||   0x080062f0      0028           cmp r0, 0
| ========< 0x080062f2      fbd1           bne 0x80062ec
| |||||||   0x080062f4      2846           mov r0, r5
| |||||||   0x080062f6      00f034fc       bl RCC_HCLKConfig
| |||||||   0x080062fa      0020           movs r0, 0
| |||||||   0x080062fc      00f012fc       bl RCC_HSICmd
| |||||||   0x08006300      0020           movs r0, 0
| |||||||   0x08006302      00f0e7fb       bl RCC_HSEConfig
| |||||||   0x08006306      002e           cmp r6, 0
| ========< 0x08006308      02d1           bne 0x8006310
| |||||||   0x0800630a      0020           movs r0, 0
| |||||||   0x0800630c      00f00dfc       bl RCC_LSEConfig
| |||||||      ; JMP XREF from 0x08006308 (_Periph_LowPowerMode)
| --------> 0x08006310      0020           movs r0, 0
| |||||||   0x08006312      bde87040       pop.w {r4, r5, r6, lr}
\ ========< 0x08006316      00f00dbc       b.w RCC_LSICmd
\ |||||||   ;-- KBD_WKUPInterruptsEnable:
/ (fcn) _KBD_WKUPInterruptsEnable 310
|       Caller: _KBD_LowPowerMode
|   _KBD_WKUPInterruptsEnable ();
| |||||||      ; CALL XREF from 0x0800665a (_KBD_LowPowerMode)
| |||||||   0x0800631a      e0b5           push {r5, r6, r7, lr}
| |||||||   0x0800631c      4ff40040       mov.w r0, 0x8000
| |||||||   0x08006320      00f0e9fe       bl EXTI_ClearITPendingBit
| |||||||   0x08006324      4ff40040       mov.w r0, 0x8000
| |||||||   0x08006328      0190           str r0, [sp, 4]
| |||||||   0x0800632a      0020           movs r0, 0
| |||||||   0x0800632c      8df80800       strb.w r0, [sp, 8]
| |||||||   0x08006330      1020           movs r0, 0x10               ; 16
| |||||||   0x08006332      8df80900       strb.w r0, [sp, 9]
| |||||||   0x08006336      0120           movs r0, 1                  ; 1
| |||||||   0x08006338      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x0800633c      01a8           add r0, sp, 4
| |||||||   0x0800633e      00f09dfe       bl EXTI_Init
| |||||||   0x08006342      4ff40070       mov.w r0, 0x200             ; 512
| |||||||   0x08006346      00f0d6fe       bl EXTI_ClearITPendingBit
| |||||||   0x0800634a      4ff40070       mov.w r0, 0x200             ; 512
| |||||||   0x0800634e      0190           str r0, [sp, 4]
| |||||||   0x08006350      0020           movs r0, 0
| |||||||   0x08006352      8df80800       strb.w r0, [sp, 8]
| |||||||   0x08006356      1020           movs r0, 0x10               ; 16
| |||||||   0x08006358      8df80900       strb.w r0, [sp, 9]
| |||||||   0x0800635c      0120           movs r0, 1                  ; 1
| |||||||   0x0800635e      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x08006362      01a8           add r0, sp, 4
| |||||||   0x08006364      00f08afe       bl EXTI_Init
| |||||||   0x08006368      4ff48070       mov.w r0, 0x100             ; 256
| |||||||   0x0800636c      00f0c3fe       bl EXTI_ClearITPendingBit
| |||||||   0x08006370      4ff48070       mov.w r0, 0x100             ; 256
| |||||||   0x08006374      0190           str r0, [sp, 4]
| |||||||   0x08006376      0020           movs r0, 0
| |||||||   0x08006378      8df80800       strb.w r0, [sp, 8]
| |||||||   0x0800637c      1020           movs r0, 0x10               ; 16
| |||||||   0x0800637e      8df80900       strb.w r0, [sp, 9]
| |||||||   0x08006382      0120           movs r0, 1                  ; 1
| |||||||   0x08006384      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x08006388      01a8           add r0, sp, 4
| |||||||   0x0800638a      00f077fe       bl EXTI_Init
| |||||||   0x0800638e      8020           movs r0, 0x80               ; 128
| |||||||   0x08006390      00f0b1fe       bl EXTI_ClearITPendingBit
| |||||||   0x08006394      8020           movs r0, 0x80               ; 128
| |||||||   0x08006396      0190           str r0, [sp, 4]
| |||||||   0x08006398      0020           movs r0, 0
| |||||||   0x0800639a      8df80800       strb.w r0, [sp, 8]
| |||||||   0x0800639e      1020           movs r0, 0x10               ; 16
| |||||||   0x080063a0      8df80900       strb.w r0, [sp, 9]
| |||||||   0x080063a4      0120           movs r0, 1                  ; 1
| |||||||   0x080063a6      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x080063aa      01a8           add r0, sp, 4
| |||||||   0x080063ac      00f066fe       bl EXTI_Init
| |||||||   0x080063b0      4020           movs r0, 0x40               ; '@' ; 64
| |||||||   0x080063b2      00f0a0fe       bl EXTI_ClearITPendingBit
| |||||||   0x080063b6      4020           movs r0, 0x40               ; '@' ; 64
| |||||||   0x080063b8      0190           str r0, [sp, 4]
| |||||||   0x080063ba      0020           movs r0, 0
| |||||||   0x080063bc      8df80800       strb.w r0, [sp, 8]
| |||||||   0x080063c0      1020           movs r0, 0x10               ; 16
| |||||||   0x080063c2      8df80900       strb.w r0, [sp, 9]
| |||||||   0x080063c6      0120           movs r0, 1                  ; 1
| |||||||   0x080063c8      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x080063cc      01a8           add r0, sp, 4
| |||||||   0x080063ce      00f055fe       bl EXTI_Init
| |||||||   0x080063d2      0120           movs r0, 1                  ; 1
| |||||||   0x080063d4      00f08ffe       bl EXTI_ClearITPendingBit
| |||||||   0x080063d8      0120           movs r0, 1                  ; 1
| |||||||   0x080063da      0190           str r0, [sp, 4]
| |||||||   0x080063dc      0020           movs r0, 0
| |||||||   0x080063de      8df80800       strb.w r0, [sp, 8]
| |||||||   0x080063e2      1020           movs r0, 0x10               ; 16
| |||||||   0x080063e4      8df80900       strb.w r0, [sp, 9]
| |||||||   0x080063e8      0120           movs r0, 1                  ; 1
| |||||||   0x080063ea      8df80a00       strb.w r0, [sp, 0xa]
| |||||||   0x080063ee      01a8           add r0, sp, 4
| |||||||   0x080063f0      00f044fe       bl EXTI_Init
| |||||||   0x080063f4      0620           movs r0, 6                  ; 6
| |||||||   0x080063f6      8df80000       strb.w r0, [sp]
| |||||||   0x080063fa      0020           movs r0, 0
| |||||||   0x080063fc      8df80100       strb.w r0, [sp, 1]
| |||||||   0x08006400      0f20           movs r0, 0xf                ; 15
| |||||||   0x08006402      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08006406      0120           movs r0, 1                  ; 1
| |||||||   0x08006408      8df80300       strb.w r0, [sp, 3]
| |||||||   0x0800640c      00a8           add r0, sp, 0
| |||||||   0x0800640e      00f07efd       bl NVIC_Init
| |||||||   0x08006412      1720           movs r0, 0x17               ; 23
| |||||||   0x08006414      8df80000       strb.w r0, [sp]
| |||||||   0x08006418      0020           movs r0, 0
| |||||||   0x0800641a      8df80100       strb.w r0, [sp, 1]
| |||||||   0x0800641e      0f20           movs r0, 0xf                ; 15
| |||||||   0x08006420      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08006424      0120           movs r0, 1                  ; 1
| |||||||   0x08006426      8df80300       strb.w r0, [sp, 3]
| |||||||   0x0800642a      00a8           add r0, sp, 0
| |||||||   0x0800642c      00f06ffd       bl NVIC_Init
| |||||||   0x08006430      2820           movs r0, 0x28               ; '(' ; 40
| |||||||   0x08006432      8df80000       strb.w r0, [sp]
| |||||||   0x08006436      0020           movs r0, 0
| |||||||   0x08006438      8df80100       strb.w r0, [sp, 1]
| |||||||   0x0800643c      0f20           movs r0, 0xf                ; 15
| |||||||   0x0800643e      8df80200       strb.w r0, [sp, 2]
| |||||||   0x08006442      0120           movs r0, 1                  ; 1
| |||||||   0x08006444      8df80300       strb.w r0, [sp, 3]
| |||||||   0x08006448      00a8           add r0, sp, 0
| |||||||   0x0800644a      00f060fd       bl NVIC_Init
\ |||||||   0x0800644e      07bd           pop {r0, r1, r2, pc}
\ |||||||   ;-- GPIO_VeryLowSpeedSet:
/ (fcn) _GPIO_VeryLowSpeedSet 494
|       Caller: _KBD_LowPowerMode
|   _GPIO_VeryLowSpeedSet ();
| |||||||      ; CALL XREF from 0x08006656 (_KBD_LowPowerMode)
| |||||||   0x08006450      f0b5           push {r4, r5, r6, r7, lr}
| |||||||   0x08006452      83b0           sub sp, 0xc
| |||||||   0x08006454      0120           movs r0, 1                  ; 1 ; pin 0
| |||||||   0x08006456      0090           str r0, [sp]
| |||||||   0x08006458      0020           movs r0, 0
| |||||||   0x0800645a      8df80400       strb.w r0, [sp, 4]
| |||||||   0x0800645e      8df80600       strb.w r0, [sp, 6]
| |||||||   0x08006462      0220           movs r0, 2                  ; 2
| |||||||   0x08006464      8df80700       strb.w r0, [sp, 7]
| |||||||   0x08006468      0020           movs r0, 0                  ; very low speed
| |||||||   0x0800646a      8df80500       strb.w r0, [sp, 5]
| |||||||   0x0800646e      dff8cc44       ldr.w r4, [0x0800693c]      ; [0x800693c:4]=0x40020000 ; PortA
| |||||||   0x08006472      00a9           add r1, sp, 0
| |||||||   0x08006474      2046           mov r0, r4
| |||||||   0x08006476      00f091fd       bl GPIO_Init
| |||||||   0x0800647a      4ff47070       mov.w r0, 0x3c0             ; 960 ; pins 6,7,8,9
| |||||||   0x0800647e      0090           str r0, [sp]
| |||||||   0x08006480      0020           movs r0, 0
| |||||||   0x08006482      8df80400       strb.w r0, [sp, 4]
| |||||||   0x08006486      8df80600       strb.w r0, [sp, 6]
| |||||||   0x0800648a      0220           movs r0, 2                  ; 2
| |||||||   0x0800648c      8df80700       strb.w r0, [sp, 7]
| |||||||   0x08006490      0020           movs r0, 0
| |||||||   0x08006492      8df80500       strb.w r0, [sp, 5]
| |||||||   0x08006496      dff8a854       ldr.w r5, [0x08006940]      ; [0x8006940:4]=0x40020400 ; PortB
| |||||||   0x0800649a      00a9           add r1, sp, 0
| |||||||   0x0800649c      2846           mov r0, r5
| |||||||   0x0800649e      00f07dfd       bl GPIO_Init
| |||||||   0x080064a2      48f2e030       movw r0, 0x83e0             ; pins 5,6,7,8,9,15
| |||||||   0x080064a6      0090           str r0, [sp]
| |||||||   0x080064a8      0120           movs r0, 1                  ; 1
| |||||||   0x080064aa      8df80400       strb.w r0, [sp, 4]
| |||||||   0x080064ae      0020           movs r0, 0
| |||||||   0x080064b0      adf80600       strh.w r0, [sp, 6]
| |||||||   0x080064b4      8df80500       strb.w r0, [sp, 5]
| |||||||   0x080064b8      00a9           add r1, sp, 0
| |||||||   0x080064ba      2046           mov r0, r4                  ; Port A
| |||||||   0x080064bc      00f06efd       bl GPIO_Init
| |||||||   0x080064c0      47f23b00       movw r0, 0x703b             ; pins 0,1,3,4,5,12,13,14
| |||||||   0x080064c4      0090           str r0, [sp]
| |||||||   0x080064c6      0120           movs r0, 1                  ; 1
| |||||||   0x080064c8      8df80400       strb.w r0, [sp, 4]
| |||||||   0x080064cc      0020           movs r0, 0
| |||||||   0x080064ce      adf80600       strh.w r0, [sp, 6]
| |||||||   0x080064d2      8df80500       strb.w r0, [sp, 5]
| |||||||   0x080064d6      00a9           add r1, sp, 0
| |||||||   0x080064d8      2846           mov r0, r5                  ; Port B
| |||||||   0x080064da      00f05ffd       bl GPIO_Init
| |||||||   0x080064de      2020           movs r0, 0x20               ; 32 ; set PA column pins
| |||||||   0x080064e0      2083           strh r0, [r4, 0x18]         ; GPIO_BSRR
| |||||||   0x080064e2      4020           movs r0, 0x40               ; '@' ; 64
| |||||||   0x080064e4      2083           strh r0, [r4, 0x18]
| |||||||   0x080064e6      8020           movs r0, 0x80               ; 128
| |||||||   0x080064e8      2083           strh r0, [r4, 0x18]
| |||||||   0x080064ea      4ff48070       mov.w r0, 0x100             ; 256
| |||||||   0x080064ee      2083           strh r0, [r4, 0x18]
| |||||||   0x080064f0      4ff40070       mov.w r0, 0x200             ; 512
| |||||||   0x080064f4      2083           strh r0, [r4, 0x18]
| |||||||   0x080064f6      4ff40046       mov.w r6, 0x8000
| |||||||   0x080064fa      2683           strh r6, [r4, 0x18]
| |||||||   0x080064fc      0120           movs r0, 1                  ; 1 ; set PB column pins
| |||||||   0x080064fe      2883           strh r0, [r5, 0x18]
| |||||||   0x08006500      0220           movs r0, 2                  ; 2
| |||||||   0x08006502      2883           strh r0, [r5, 0x18]
| |||||||   0x08006504      0820           movs r0, 8                  ; 8
| |||||||   0x08006506      2883           strh r0, [r5, 0x18]
| |||||||   0x08006508      1020           movs r0, 0x10               ; 16
| |||||||   0x0800650a      2883           strh r0, [r5, 0x18]
| |||||||   0x0800650c      2020           movs r0, 0x20               ; 32
| |||||||   0x0800650e      2883           strh r0, [r5, 0x18]
| |||||||   0x08006510      4ff48050       mov.w r0, 0x1000
| |||||||   0x08006514      2883           strh r0, [r5, 0x18]
| |||||||   0x08006516      4ff40050       mov.w r0, 0x2000
| |||||||   0x0800651a      2883           strh r0, [r5, 0x18]
| |||||||   0x0800651c      4ff48040       mov.w r0, 0x4000
| |||||||   0x08006520      2883           strh r0, [r5, 0x18]
| |||||||   0x08006522      dff82074       ldr.w r7, [0x08006944]      ; [0x8006944:4]=0x20000710
| |||||||   0x08006526      b888           ldrh r0, [r7, 4]            ; PortB pin 15
| |||||||   0x08006528      0090           str r0, [sp]
| |||||||   0x0800652a      0020           movs r0, 0
| |||||||   0x0800652c      8df80400       strb.w r0, [sp, 4]
| |||||||   0x08006530      0120           movs r0, 1                  ; 1 ; low speed
| |||||||   0x08006532      8df80700       strb.w r0, [sp, 7]
| |||||||   0x08006536      8df80500       strb.w r0, [sp, 5]
| |||||||   0x0800653a      00a9           add r1, sp, 0
| |||||||   0x0800653c      3868           ldr r0, [r7]
| |||||||   0x0800653e      00f02dfd       bl GPIO_Init
| |||||||   0x08006542      f979           ldrb r1, [r7, 7]
| |||||||   0x08006544      b879           ldrb r0, [r7, 6]
| |||||||   0x08006546      00f085fd       bl SYSCFG_EXTILineConfig
| |||||||   0x0800654a      4ff4c050       mov.w r0, 0x1800            ; pins 11,12
| |||||||   0x0800654e      0090           str r0, [sp]
| |||||||   0x08006550      0020           movs r0, 0
| |||||||   0x08006552      8df80400       strb.w r0, [sp, 4]
| |||||||   0x08006556      8df80600       strb.w r0, [sp, 6]
| |||||||   0x0800655a      0220           movs r0, 2                  ; 2
| |||||||   0x0800655c      8df80700       strb.w r0, [sp, 7]
| |||||||   0x08006560      0020           movs r0, 0                  ; very low speed
| |||||||   0x08006562      8df80500       strb.w r0, [sp, 5]
| |||||||   0x08006566      00a9           add r1, sp, 0
| |||||||   0x08006568      2046           mov r0, r4                  ; Port A
| |||||||   0x0800656a      00f017fd       bl GPIO_Init
| |||||||   0x0800656e      4ff48060       mov.w r0, 0x400             ; 1024 ; pin 10
| |||||||   0x08006572      0090           str r0, [sp]
| |||||||   0x08006574      0020           movs r0, 0
| |||||||   0x08006576      8df80400       strb.w r0, [sp, 4]
| |||||||   0x0800657a      8df80600       strb.w r0, [sp, 6]
| |||||||   0x0800657e      0220           movs r0, 2                  ; 2
| |||||||   0x08006580      8df80700       strb.w r0, [sp, 7]
| |||||||   0x08006584      0020           movs r0, 0
| |||||||   0x08006586      8df80500       strb.w r0, [sp, 5]
| |||||||   0x0800658a      00a9           add r1, sp, 0
| |||||||   0x0800658c      2046           mov r0, r4                  ; Port A
| |||||||   0x0800658e      00f005fd       bl GPIO_Init
| |||||||   0x08006592      0096           str r6, [sp]                ; pin 15
| |||||||   0x08006594      0120           movs r0, 1                  ; 1
| |||||||   0x08006596      8df80400       strb.w r0, [sp, 4]
| |||||||   0x0800659a      0020           movs r0, 0
| |||||||   0x0800659c      8df80600       strb.w r0, [sp, 6]
| |||||||   0x080065a0      0120           movs r0, 1                  ; 1
| |||||||   0x080065a2      8df80700       strb.w r0, [sp, 7]
| |||||||   0x080065a6      0020           movs r0, 0
| |||||||   0x080065a8      8df80500       strb.w r0, [sp, 5]
| |||||||   0x080065ac      dff89863       ldr.w r6, [0x08006948]      ; [0x8006948:4]=0x40020800 ; PortC
| |||||||   0x080065b0      00a9           add r1, sp, 0
| |||||||   0x080065b2      3046           mov r0, r6
| |||||||   0x080065b4      00f0f2fc       bl GPIO_Init
| |||||||   0x080065b8      1020           movs r0, 0x10               ; 16
| |||||||   0x080065ba      0090           str r0, [sp]
| |||||||   0x080065bc      0020           movs r0, 0
| |||||||   0x080065be      8df80400       strb.w r0, [sp, 4]
| |||||||   0x080065c2      8df80600       strb.w r0, [sp, 6]
| |||||||   0x080065c6      0220           movs r0, 2                  ; 2
| |||||||   0x080065c8      8df80700       strb.w r0, [sp, 7]
| |||||||   0x080065cc      0020           movs r0, 0
| |||||||   0x080065ce      8df80500       strb.w r0, [sp, 5]
| |||||||   0x080065d2      00a9           add r1, sp, 0
| |||||||   0x080065d4      2046           mov r0, r4
| |||||||   0x080065d6      00f0e1fc       bl GPIO_Init
| |||||||   0x080065da      0220           movs r0, 2                  ; 2
| |||||||   0x080065dc      0090           str r0, [sp]
| |||||||   0x080065de      0120           movs r0, 1                  ; 1
| |||||||   0x080065e0      8df80400       strb.w r0, [sp, 4]
| |||||||   0x080065e4      0020           movs r0, 0
| |||||||   0x080065e6      8df80600       strb.w r0, [sp, 6]
| |||||||   0x080065ea      0220           movs r0, 2                  ; 2
| |||||||   0x080065ec      8df80700       strb.w r0, [sp, 7]
| |||||||   0x080065f0      0020           movs r0, 0
| |||||||   0x080065f2      8df80500       strb.w r0, [sp, 5]
| |||||||   0x080065f6      00a9           add r1, sp, 0
| |||||||   0x080065f8      2046           mov r0, r4                  ; port A
| |||||||   0x080065fa      00f0cffc       bl GPIO_Init
| |||||||   0x080065fe      0220           movs r0, 2                  ; 2
| |||||||   0x08006600      6083           strh r0, [r4, 0x1a]
| |||||||   0x08006602      4ff4c040       mov.w r0, 0x6000
| |||||||   0x08006606      0090           str r0, [sp]
| |||||||   0x08006608      0320           movs r0, 3                  ; 3
| |||||||   0x0800660a      8df80400       strb.w r0, [sp, 4]
| |||||||   0x0800660e      0020           movs r0, 0
| |||||||   0x08006610      adf80600       strh.w r0, [sp, 6]
| |||||||   0x08006614      8df80500       strb.w r0, [sp, 5]
| |||||||   0x08006618      00a9           add r1, sp, 0
| |||||||   0x0800661a      3046           mov r0, r6                  ; port C
| |||||||   0x0800661c      00f0befc       bl GPIO_Init
| |||||||   0x08006620      0420           movs r0, 4                  ; 4
| |||||||   0x08006622      0090           str r0, [sp]
| |||||||   0x08006624      0320           movs r0, 3                  ; 3
| |||||||   0x08006626      8df80400       strb.w r0, [sp, 4]
| |||||||   0x0800662a      0020           movs r0, 0
| |||||||   0x0800662c      adf80600       strh.w r0, [sp, 6]
| |||||||   0x08006630      8df80500       strb.w r0, [sp, 5]
| |||||||   0x08006634      00a9           add r1, sp, 0
| |||||||   0x08006636      2846           mov r0, r5                  ; port B
| |||||||   0x08006638      00f0b0fc       bl GPIO_Init
\ |||||||   0x0800663c      f7bd           pop {r0, r1, r2, r4, r5, r6, r7, pc}
\ |||||||   ;-- KBD_LowPowerMode:
/ (fcn) _KBD_LowPowerMode 90
|       Caller: _KBD_PWRManage
|   _KBD_LowPowerMode ();
| |||||||      ; CALL XREF from 0x08008e40 (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008e82 (_KBD_PWRManage)
| |||||||   0x0800663e      80b5           push {r7, lr}
| |||||||   0x08006640      fdf716fe       bl _KBD_UseHSIClock
| |||||||   0x08006644      4ff40060       mov.w r0, 0x800             ; 2048 ; 1.8V range
| |||||||   0x08006648      00f02efc       bl PWR_VoltageScalingConfig
| |||||||      ; JMP XREF from 0x08006654 (_KBD_LowPowerMode)
| --------> 0x0800664c      1020           movs r0, 0x10               ; 16
| |||||||   0x0800664e      00f048fc       bl PWR_GetFlagStatus
| |||||||   0x08006652      0028           cmp r0, 0
| ========< 0x08006654      fad1           bne 0x800664c
| |||||||   0x08006656      fff7fbfe       bl _GPIO_VeryLowSpeedSet
| |||||||   0x0800665a      fff75efe       bl _KBD_WKUPInterruptsEnable
| |||||||   0x0800665e      0020           movs r0, 0
| |||||||   0x08006660      00f01cfc       bl PWR_PVDCmd
| |||||||   0x08006664      0120           movs r0, 1                  ; 1
| |||||||   0x08006666      00f01cfc       bl PWR_UltraLowPowerCmd
| |||||||   0x0800666a      0020           movs r0, 0
| |||||||   0x0800666c      dff8dc12       ldr.w r1, [0x0800694c]      ; [0x800694c:4]=0xe000e010 ; SysTick timer STK_CTRL
| |||||||   0x08006670      0860           str r0, [r1]
| |||||||   0x08006672      0246           mov r2, r0
| |||||||   0x08006674      0146           mov r1, r0
| |||||||   0x08006676      4ff40040       mov.w r0, 0x8000
| |||||||   0x0800667a      fff711fe       bl _Periph_LowPowerMode
| |||||||   0x0800667e      0121           movs r1, 1                  ; 1
| |||||||   0x08006680      0420           movs r0, 4                  ; 4
| |||||||   0x08006682      00f0ecfa       bl RCC_APB1PeriphClockCmd
| |||||||   0x08006686      0120           movs r0, 1                  ; 1
| |||||||   0x08006688      00f017fc       bl PWR_EnterLowPowerRunMode
| |||||||      ; JMP XREF from 0x08006694 (_KBD_LowPowerMode)
| --------> 0x0800668c      2020           movs r0, 0x20               ; 32
| |||||||   0x0800668e      00f028fc       bl PWR_GetFlagStatus
| |||||||   0x08006692      0028           cmp r0, 0
| ========< 0x08006694      fad0           beq 0x800668c
\ |||||||   0x08006696      01bd           pop {r0, pc}
\ |||||||   ;-- KBD_StoreAutoPWROffFlag:
/ (fcn) _KBD_StoreAutoPWROffFlag 44
|       Caller: _Parse_Matrix
|   _KBD_StoreAutoPWROffFlag ();
| |||||||      ; CALL XREF from 0x080083e4 (_Parse_Matrix)
| |||||||   0x08006698      80b5           push {r7, lr}
| |||||||   0x0800669a      0420           movs r0, 4                  ; 4
| |||||||   0x0800669c      8df80000       strb.w r0, [sp]
| |||||||   0x080066a0      00f061fb       bl FLASH_Unlock
| |||||||   0x080066a4      41f60270       movw r0, 0x1f02
| |||||||   0x080066a8      00f0bafb       bl FLASH_ClearFlag
| |||||||   0x080066ac      a848           ldr r0, [0x08006950]        ; [0x8006950:4]=0x200017a8
| |||||||   0x080066ae      90f8ee10       ldrb.w r1, [r0, 0xee]       ; 0x20001896 AUTO_PWROFF flag
| |||||||   0x080066b2      a848           ldr r0, [0x08006954]        ; [0x8006954:4]=0x8080010
| |||||||   0x080066b4      00f075fb       bl DATA_EEPROM_FastProgramByte
| |||||||   0x080066b8      8df80000       strb.w r0, [sp]
| |||||||   0x080066bc      bde80140       pop.w {r0, lr}
\ ========< 0x080066c0      00f05dbb       b.w FLASH_Lock
\ |||||||   ;-- KBD_LoadLayoutAndPWRFlags:
/ (fcn) _KBD_LoadLayoutAndPWRFlags 36
|       Caller: _KBD_Init
|   _KBD_LoadLayoutAndPWRFlags ();
| |||||||      ; CALL XREF from 0x08004126 (_KBD_Init)
| |||||||   0x080066c4      80b5           push {r7, lr}
| |||||||   0x080066c6      00f04efb       bl FLASH_Unlock
| |||||||   0x080066ca      9848           ldr r0, [0x0800692c]        ; [0x800692c:4]=0x20000768
| |||||||   0x080066cc      a249           ldr r1, [0x08006958]        ; [0x8006958:4]=0x8080000 ; first byte is 1 rest is 0s
| |||||||   0x080066ce      0a78           ldrb r2, [r1]
| |||||||   0x080066d0      80f83020       strb.w r2, [r0, 0x30]       ; 0x20000798 layout selector
| |||||||   0x080066d4      4a68           ldr r2, [r1, 4]
| |||||||   0x080066d6      c262           str r2, [r0, 0x2c]
| |||||||   0x080066d8      087c           ldrb r0, [r1, 0x10]
| |||||||   0x080066da      9d49           ldr r1, [0x08006950]        ; [0x8006950:4]=0x200017a8
| |||||||   0x080066dc      81f8ee00       strb.w r0, [r1, 0xee]       ; 0x20001896 AUTO_PWROFF
| |||||||   0x080066e0      bde80140       pop.w {r0, lr}
\ ========< 0x080066e4      00f04bbb       b.w FLASH_Lock              ; continue to locking eeprom
\ |||||||   ;-- EEPROM_Write_Struct_1:
/ (fcn) _EEPROM_Write_Struct_1 58
|       Caller: fcn.08008ade _MSG_HandleKeyboardCMD
|   _EEPROM_Write_Struct_1 ();
| |||||||      ; CALL XREF from 0x080058d4 (_MSG_HandleKeyboardCMD)
| |||||||      ; CALL XREF from 0x08005920 (_MSG_HandleKeyboardCMD)
| |||||||      ; CALL XREF from 0x08008b64 (fcn.08008ade)
| |||||||   0x080066e8      10b5           push {r4, lr}
| |||||||   0x080066ea      82b0           sub sp, 8
| |||||||   0x080066ec      0420           movs r0, 4                  ; 4
| |||||||   0x080066ee      8df80000       strb.w r0, [sp]
| |||||||   0x080066f2      00f038fb       bl FLASH_Unlock
| |||||||   0x080066f6      41f60270       movw r0, 0x1f02
| |||||||   0x080066fa      00f091fb       bl FLASH_ClearFlag
| |||||||   0x080066fe      8b4c           ldr r4, [0x0800692c]        ; [0x800692c:4]=0x20000768
| |||||||   0x08006700      94f83010       ldrb.w r1, [r4, 0x30]
| |||||||   0x08006704      9448           ldr r0, [0x08006958]        ; [0x8006958:4]=0x8080000
| |||||||   0x08006706      00f04cfb       bl DATA_EEPROM_FastProgramByte ; Save KEY_LAYOUT_SELECTOR
| |||||||   0x0800670a      8df80000       strb.w r0, [sp]
| |||||||   0x0800670e      e16a           ldr r1, [r4, 0x2c]
| |||||||   0x08006710      9248           ldr r0, [0x0800695c]        ; [0x800695c:4]=0x8080004
| |||||||   0x08006712      00f06ffb       bl DATA_EEPROM_FastProgramWord
| |||||||   0x08006716      8df80000       strb.w r0, [sp]
| |||||||   0x0800671a      bde81340       pop.w {r0, r1, r4, lr}
\ ========< 0x0800671e      00f02ebb       b.w FLASH_Lock
  |||||||   0x08006722      0000           movs r0, r0
  |||||||      ; DATA XREF from 0x08005bd6 (_MSG_HandleBLECMD)
  |||||||   0x08006724      .dword 0x200007be
/ (fcn) init_some_10_struct2 166
|       Caller: _KBD_Init
|   init_some_10_struct2 ();
| |||||||      ; CALL XREF from 0x08004140 (_KBD_Init)
| |||||||   0x08006728      70b5           push {r4, r5, r6, lr}
| |||||||   0x0800672a      a2b0           sub sp, 0x88
| |||||||   0x0800672c      0420           movs r0, 4                  ; 4
| |||||||   0x0800672e      8df80000       strb.w r0, [sp]
| |||||||   0x08006732      00f018fb       bl FLASH_Unlock
| |||||||   0x08006736      0020           movs r0, 0
| ========< 0x08006738      19e0           b 0x800676e
| |||||||      ; JMP XREF from 0x0800676a (init_some_10_struct2)
| --------> 0x0800673a      02eb4203       add.w r3, r2, r2, lsl 1
| |||||||   0x0800673e      01eb4303       add.w r3, r1, r3, lsl 1
| |||||||   0x08006742      02eb8204       add.w r4, r2, r2, lsl 2
| |||||||   0x08006746      01ad           add r5, sp, 4
| |||||||   0x08006748      6419           adds r4, r4, r5
| |||||||   0x0800674a      257a           ldrb r5, [r4, 8]
| |||||||   0x0800674c      1d77           strb r5, [r3, 0x1c]
| |||||||   0x0800674e      657a           ldrb r5, [r4, 9]
| |||||||   0x08006750      a67a           ldrb r6, [r4, 0xa]
| |||||||   0x08006752      45ea0625       orr.w r5, r5, r6, lsl 8
| |||||||   0x08006756      dd83           strh r5, [r3, 0x1e]
| |||||||   0x08006758      e57a           ldrb r5, [r4, 0xb]
| |||||||   0x0800675a      247b           ldrb r4, [r4, 0xc]
| |||||||   0x0800675c      45ea0424       orr.w r4, r5, r4, lsl 8
| |||||||   0x08006760      1c84           strh r4, [r3, 0x20]
| |||||||   0x08006762      521c           adds r2, r2, 1
| |||||||   0x08006764      d2b2           uxtb r2, r2
| |||||||      ; JMP XREF from 0x080067c4 (init_some_10_struct2)
| --------> 0x08006766      0b7d           ldrb r3, [r1, 0x14]
| |||||||   0x08006768      9a42           cmp r2, r3
| ========< 0x0800676a      e6db           blt 0x800673a
| |||||||   0x0800676c      401c           adds r0, r0, 1
| |||||||      ; JMP XREF from 0x08006738 (init_some_10_struct2)
| --------> 0x0800676e      0a28           cmp r0, 0xa                 ; 10
| ========< 0x08006770      29da           bge 0x80067c6
| |||||||   0x08006772      0021           movs r1, 0
| |||||||   0x08006774      01aa           add r2, sp, 4
| |||||||   0x08006776      7a4c           ldr r4, [0x08006960]        ; [0x8006960:4]=0x8080400 ; all zeroes
| ========< 0x08006778      04e0           b 0x8006784
| |||||||      ; JMP XREF from 0x08006786 (init_some_10_struct2)
| --------> 0x0800677a      01ebc013       add.w r3, r1, r0, lsl 7     ; zero out reserved portion of stack in this loop
| |||||||   0x0800677e      e35c           ldrb r3, [r4, r3]
| |||||||   0x08006780      8b54           strb r3, [r1, r2]
| |||||||   0x08006782      491c           adds r1, r1, 1
| |||||||      ; JMP XREF from 0x08006778 (init_some_10_struct2)
| --------> 0x08006784      8029           cmp r1, 0x80                ; 128
| ========< 0x08006786      f8db           blt 0x800677a
| |||||||   0x08006788      9421           movs r1, 0x94               ; 148
| |||||||   0x0800678a      01fb00f3       mul r3, r1, r0
| |||||||   0x0800678e      6649           ldr r1, [0x08006928]        ; [0x8006928:4]=0x20000edc
| |||||||      ; JMP XREF from 0x08006f8c (SysTick_CLKSourceConfig + 34)
| |||||||   0x08006790      0024           movs r4, 0
| |||||||   0x08006792      5c54           strb r4, [r3, r1]
| |||||||   0x08006794      5918           adds r1, r3, r1
| |||||||   0x08006796      9df80430       ldrb.w r3, [sp, 4]
| |||||||   0x0800679a      0b73           strb r3, [r1, 0xc]
| |||||||   0x0800679c      5378           ldrb r3, [r2, 1]
| |||||||   0x0800679e      4b73           strb r3, [r1, 0xd]
| |||||||   0x080067a0      9df80630       ldrb.w r3, [sp, 6]
| |||||||   0x080067a4      8b73           strb r3, [r1, 0xe]
| |||||||   0x080067a6      9df80730       ldrb.w r3, [sp, 7]
| |||||||   0x080067aa      1479           ldrb r4, [r2, 4]
| |||||||   0x080067ac      43ea0423       orr.w r3, r3, r4, lsl 8
| |||||||   0x080067b0      5479           ldrb r4, [r2, 5]
| |||||||   0x080067b2      43ea0443       orr.w r3, r3, r4, lsl 16
| |||||||   0x080067b6      9479           ldrb r4, [r2, 6]
| |||||||   0x080067b8      43ea0463       orr.w r3, r3, r4, lsl 24
| |||||||   0x080067bc      0b61           str r3, [r1, 0x10]
| |||||||   0x080067be      d279           ldrb r2, [r2, 7]
| |||||||   0x080067c0      0a75           strb r2, [r1, 0x14]
| |||||||   0x080067c2      0022           movs r2, 0
| ========< 0x080067c4      cfe7           b 0x8006766
| |||||||      ; JMP XREF from 0x08006770 (init_some_10_struct2)
| --------> 0x080067c6      00f0dafa       bl FLASH_Lock
| |||||||   0x080067ca      22b0           add sp, 0x88
\ |||||||   0x080067cc      70bd           pop {r4, r5, r6, pc}
\ |||||||   ;-- KBD_LoadSyncCode:
/ (fcn) _KBD_LoadSyncCode 32
|       Caller: _KBD_Init
|   _KBD_LoadSyncCode ();
| |||||||      ; CALL XREF from 0x08004144 (_KBD_Init)
| |||||||   0x080067ce      80b5           push {r7, lr}
| |||||||   0x080067d0      0420           movs r0, 4                  ; 4
| |||||||   0x080067d2      8df80000       strb.w r0, [sp]
| |||||||   0x080067d6      00f0c6fa       bl FLASH_Unlock
| |||||||   0x080067da      5448           ldr r0, [0x0800692c]        ; [0x800692c:4]=0x20000768
| |||||||   0x080067dc      6149           ldr r1, [0x08006964]        ; [0x8006964:4]=0x8080008
| |||||||   0x080067de      0a68           ldr r2, [r1]
| |||||||   0x080067e0      8260           str r2, [r0, 8]             ; 0x20000770
| |||||||   0x080067e2      4968           ldr r1, [r1, 4]
| |||||||   0x080067e4      c160           str r1, [r0, 0xc]           ; 0x20000774
| |||||||   0x080067e6      bde80140       pop.w {r0, lr}
\ ========< 0x080067ea      00f0c8ba       b.w FLASH_Lock
\ |||||||   ;-- KBD_StoreSyncCode:
/ (fcn) _KBD_StoreSyncCode 48
|       Caller: _MSG_HandleSystemCMD
|   _KBD_StoreSyncCode ();
| |||||||      ; CALL XREF from 0x0800572a (_MSG_HandleSystemCMD)
| |||||||   0x080067ee      38b5           push {r3, r4, r5, lr}
| |||||||   0x080067f0      0446           mov r4, r0
| |||||||   0x080067f2      0d46           mov r5, r1
| |||||||   0x080067f4      0420           movs r0, 4                  ; 4
| |||||||   0x080067f6      8df80000       strb.w r0, [sp]
| |||||||   0x080067fa      00f0b4fa       bl FLASH_Unlock
| |||||||   0x080067fe      2146           mov r1, r4
| |||||||   0x08006800      5848           ldr r0, [0x08006964]        ; [0x8006964:4]=0x8080008
| |||||||   0x08006802      00f0f7fa       bl DATA_EEPROM_FastProgramWord
| |||||||   0x08006806      8df80000       strb.w r0, [sp]
| |||||||   0x0800680a      2946           mov r1, r5
| |||||||   0x0800680c      5648           ldr r0, [0x08006968]        ; [0x8006968:4]=0x808000c
| |||||||   0x0800680e      00f0f1fa       bl DATA_EEPROM_FastProgramWord
| |||||||   0x08006812      8df80000       strb.w r0, [sp]
| |||||||   0x08006816      bde83140       pop.w {r0, r4, r5, lr}
\ ========< 0x0800681a      00f0b0ba       b.w FLASH_Lock
\ |||||||   ;-- EEPROM_Write_Something3:
/ (fcn) _EEPROM_Write_Something3 88
|       Caller: _MSG_HandleMacroCMD
|   _EEPROM_Write_Something3 ();
| |||||||      ; CALL XREF from 0x08005f1e (_MSG_HandleMacroCMD)
| |||||||   0x0800681e      f8b5           push {r3, r4, r5, r6, r7, lr}
| |||||||   0x08006820      0446           mov r4, r0
| |||||||   0x08006822      0e46           mov r6, r1
| |||||||   0x08006824      1546           mov r5, r2
| |||||||   0x08006826      0420           movs r0, 4                  ; 4
| |||||||   0x08006828      8df80000       strb.w r0, [sp]
| |||||||   0x0800682c      03eb8300       add.w r0, r3, r3, lsl 2
| |||||||   0x08006830      00f10807       add.w r7, r0, 8
| |||||||   0x08006834      ffb2           uxtb r7, r7
| |||||||   0x08006836      00f096fa       bl FLASH_Unlock
| |||||||   0x0800683a      002e           cmp r6, 0
| ========< 0x0800683c      08d1           bne 0x8006850
| |||||||   0x0800683e      0021           movs r1, 0
| |||||||   0x08006840      4a48           ldr r0, [0x0800696c]        ; [0x800696c:4]=0x8080402
| |||||||   0x08006842      00ebc410       add.w r0, r0, r4, lsl 7
| |||||||   0x08006846      00f0acfa       bl DATA_EEPROM_FastProgramByte
| |||||||   0x0800684a      8df80000       strb.w r0, [sp]
| |||||||   0x0800684e      f1bd           pop {r0, r4, r5, r6, r7, pc}
| |||||||      ; JMP XREF from 0x0800683c (_EEPROM_Write_Something3)
| --------> 0x08006850      0026           movs r6, 0
| ========< 0x08006852      0ae0           b 0x800686a
| |||||||      ; JMP XREF from 0x0800686c (_EEPROM_Write_Something3)
| --------> 0x08006854      715d           ldrb r1, [r6, r5]
| |||||||   0x08006856      06ebc410       add.w r0, r6, r4, lsl 7
| |||||||   0x0800685a      414a           ldr r2, [0x08006960]        ; [0x8006960:4]=0x8080400
| |||||||   0x0800685c      1018           adds r0, r2, r0
| |||||||   0x0800685e      00f0a0fa       bl DATA_EEPROM_FastProgramByte
| |||||||   0x08006862      8df80000       strb.w r0, [sp]
| |||||||   0x08006866      761c           adds r6, r6, 1
| |||||||   0x08006868      f6b2           uxtb r6, r6
| |||||||      ; JMP XREF from 0x08006852 (_EEPROM_Write_Something3)
| --------> 0x0800686a      be42           cmp r6, r7
| ========< 0x0800686c      f2db           blt 0x8006854
| |||||||   0x0800686e      bde8f140       pop.w {r0, r4, r5, r6, r7, lr}
\ ========< 0x08006872      00f084ba       b.w FLASH_Lock
\ |||||||   ;-- KBD_StoreLayout:
/ (fcn) _KBD_StoreLayout 50
|       Caller: _MSG_HandleKeyboardCMD
|   _KBD_StoreLayout ();
| |||||||      ; CALL XREF from 0x080058e2 (_MSG_HandleKeyboardCMD)
| |||||||      ; CALL XREF from 0x080058f0 (_MSG_HandleKeyboardCMD)
| |||||||   0x08006876      f8b5           push {r3, r4, r5, r6, r7, lr}
| |||||||   0x08006878      0446           mov r4, r0
| |||||||   0x0800687a      0d46           mov r5, r1
| |||||||   0x0800687c      1646           mov r6, r2
| |||||||   0x0800687e      0420           movs r0, 4                  ; 4
| |||||||   0x08006880      8df80000       strb.w r0, [sp]
| |||||||   0x08006884      00f06ffa       bl FLASH_Unlock
| |||||||   0x08006888      0027           movs r7, 0
| ========< 0x0800688a      07e0           b 0x800689c
| |||||||      ; JMP XREF from 0x0800689e (_KBD_StoreLayout)
| --------> 0x0800688c      395d           ldrb r1, [r7, r4]
| |||||||   0x0800688e      b819           adds r0, r7, r6
| |||||||   0x08006890      00f087fa       bl DATA_EEPROM_FastProgramByte
| |||||||   0x08006894      8df80000       strb.w r0, [sp]
| |||||||   0x08006898      7f1c           adds r7, r7, 1
| |||||||   0x0800689a      ffb2           uxtb r7, r7
| |||||||      ; JMP XREF from 0x0800688a (_KBD_StoreLayout)
| --------> 0x0800689c      af42           cmp r7, r5
| ========< 0x0800689e      f5db           blt 0x800688c
| |||||||   0x080068a0      bde8f140       pop.w {r0, r4, r5, r6, r7, lr}
\ ========< 0x080068a4      00f06bba       b.w FLASH_Lock
\ |||||||   ;-- KBD_LoadLayout:
/ (fcn) _KBD_LoadLayout 44
|       Caller: _KBD_Init
|   _KBD_LoadLayout ();
| |||||||      ; CALL XREF from 0x08004114 (_KBD_Init)
| |||||||      ; CALL XREF from 0x08004122 (_KBD_Init)
| |||||||   0x080068a8      70b5           push {r4, r5, r6, lr}
| |||||||   0x080068aa      82b0           sub sp, 8
| |||||||   0x080068ac      0446           mov r4, r0
| |||||||   0x080068ae      0d46           mov r5, r1
| |||||||   0x080068b0      1646           mov r6, r2
| |||||||   0x080068b2      0420           movs r0, 4                  ; 4
| |||||||   0x080068b4      8df80000       strb.w r0, [sp]
| |||||||   0x080068b8      00f055fa       bl FLASH_Unlock
| |||||||   0x080068bc      0020           movs r0, 0
| ========< 0x080068be      03e0           b 0x80068c8
| |||||||      ; JMP XREF from 0x080068ca (_KBD_LoadLayout)
| --------> 0x080068c0      815d           ldrb r1, [r0, r6]
| |||||||   0x080068c2      0155           strb r1, [r0, r4]
| |||||||   0x080068c4      401c           adds r0, r0, 1
| |||||||   0x080068c6      c0b2           uxtb r0, r0
| |||||||      ; JMP XREF from 0x080068be (_KBD_LoadLayout)
| --------> 0x080068c8      a842           cmp r0, r5
| ========< 0x080068ca      f9db           blt 0x80068c0
| |||||||   0x080068cc      bde87340       pop.w {r0, r1, r4, r5, r6, lr}
\ ========< 0x080068d0      00f055ba       b.w FLASH_Lock              ; continue to part where we lock eeprom
\ |||||||   ;-- TIM4_Config:
/ (fcn) _TIM4_Config 52
|       Caller: _KBD_PWRManage
|   _TIM4_Config ();
| |||||||      ; JMP XREF from 0x0800417c (_KBD_Init)
| |||||||      ; CALL XREF from 0x08008e12 (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008e5e (_KBD_PWRManage)
| |||||||      ; CALL XREF from 0x08008ea8 (_KBD_PWRManage)
| ||||||`-> 0x080068d4      80b5           push {r7, lr}
| ||||||    0x080068d6      1548           ldr r0, [0x0800692c]        ; [0x800692c:4]=0x20000768
| ||||||    0x080068d8      90f84a10       ldrb.w r1, [r0, 0x4a]       ; return if func was run before
| ||||||    0x080068dc      0029           cmp r1, 0
| ||||||,=< 0x080068de      12d1           bne 0x8006906
| |||||||   0x080068e0      0121           movs r1, 1                  ; 1
| |||||||   0x080068e2      80f84a10       strb.w r1, [r0, 0x4a]
| |||||||   0x080068e6      0021           movs r1, 0
| |||||||   0x080068e8      c164           str r1, [r0, 0x4c]          ; 0x200007b4
| |||||||   0x080068ea      007f           ldrb r0, [r0, 0x1c]         ; 0: low freq, 2: high freq, else: default config
| |||||||   0x080068ec      0028           cmp r0, 0
| ========< 0x080068ee      02d1           bne 0x80068f6
| |||||||   0x080068f0      fff73afc       bl _TIM4_LFreqConfig
| ========< 0x080068f4      03e0           b 0x80068fe
| |||||||      ; JMP XREF from 0x080068ee (_TIM4_Config)
| --------> 0x080068f6      0228           cmp r0, 2                   ; 2
| ========< 0x080068f8      01d1           bne 0x80068fe
| |||||||   0x080068fa      fff76bfc       bl _TIM4_HFreqConfig
| |||||||      ; JMP XREF from 0x080068f4 (_TIM4_Config)
| |||||||      ; JMP XREF from 0x080068f8 (_TIM4_Config)
| --------> 0x080068fe      bde80140       pop.w {r0, lr}
| ========< 0x08006902      fff7a9bc       b.w _TIM4_Enable
| |||||||      ; JMP XREF from 0x080068de (_TIM4_Config)
\ ||||||`-> 0x08006906      01bd           pop {r0, pc}
\ ||||||    ;-- TIM4_Disable_Wrapper:
/ (fcn) _TIM4_Disable_Wrapper 4
|       Caller: _KBD_PWRManage
|   _TIM4_Disable_Wrapper ();
| ||||||       ; CALL XREF from 0x08008e0e (_KBD_PWRManage)
| ||||||       ; CALL XREF from 0x08008e5a (_KBD_PWRManage)
| ||||||       ; CALL XREF from 0x08008ea4 (_KBD_PWRManage)
\ ========< 0x08006908      fff794bc       b.w _TIM4_Disable
\ ||||||    ;-- TIM4_GetIntCounter:
/ (fcn) _TIM4_GetIntCounter 6
|       Caller: fcn.08008d0c _Parse_Matrix
|   _TIM4_GetIntCounter ();
| ||||||       ; JMP XREF from 0x08008ee8 (_TIM4_GetIntCounter_Wrapper)
| ||||||       ; CALL XREF from 0x08007e88 (_Parse_Matrix)
| ||||||       ; CALL XREF from 0x08008d46 (fcn.08008d0c)
| ||||||    0x0800690c      0748           ldr r0, [0x0800692c]        ; [0x800692c:4]=0x20000768
| ||||||    0x0800690e      c06d           ldr r0, [r0, 0x5c]
\ ||||||    0x08006910      7047           bx lr
/ (fcn) update_some_flags 20
|       Caller: _KBD_PWRManage
|   update_some_flags ();
| ||||||       ; CALL XREF from 0x08008eae (_KBD_PWRManage)
| ||||||    0x08006912      0649           ldr r1, [0x0800692c]        ; [0x800692c:4]=0x20000768
| ||||||    0x08006914      81f86100       strb.w r0, [r1, 0x61]       ; 0x200007c9
| ||||||    0x08006918      0120           movs r0, 1                  ; 1
| ||||||    0x0800691a      81f86200       strb.w r0, [r1, 0x62]
| ||||||    0x0800691e      0c49           ldr r1, [0x08006950]        ; [0x8006950:4]=0x200017a8
| ||||||    0x08006920      81f8d400       strb.w r0, [r1, 0xd4]
\ ||||||    0x08006924      7047           bx lr
  ||||||    0x08006926      0000           movs r0, r0
  ||||||       ; DATA XREF from 0x08005ec2 (_MSG_HandleMacroCMD)
  ||||||       ; DATA XREF from 0x08005f4c (_MSG_HandleMacroCMD)
  ||||||       ; DATA XREF from 0x0800678e (init_some_10_struct2)
  ||||||    0x08006928      .dword 0x20000edc
  ||||||       ; XREFS: DATA 0x08006066  DATA 0x08006080  DATA 0x08006094  DATA 0x080066ca  DATA 0x080066fe  DATA 0x080067da  DATA 0x080068d6  DATA 0x0800690c  DATA 0x08006912  
  ||||||    0x0800692c      .dword 0x20000768
  ||||||       ; DATA XREF from 0x080060bc (_KBD_DefaultsLoad)
  ||||||    0x08006930      .dword 0x20000000
  ||||||       ; DATA XREF from 0x080060c4 (_KBD_DefaultsLoad)
  ||||||    0x08006934      .dword 0x20000390
  ||||||       ; DATA XREF from 0x0800616a (_TIM4_LFreqConfig)
  ||||||       ; DATA XREF from 0x080061d6 (_TIM4_HFreqConfig)
  ||||||       ; DATA XREF from 0x08006236 (_TIM4_Disable)
  ||||||       ; DATA XREF from 0x0800625a (_TIM4_Enable)
  ||||||    0x08006938      .dword 0x40000800
  ||||||       ; DATA XREF from 0x0800646e (_GPIO_VeryLowSpeedSet)
  ||||||    0x0800693c      .dword 0x40020000
  ||||||       ; DATA XREF from 0x08006496 (_GPIO_VeryLowSpeedSet)
  ||||||    0x08006940      .dword 0x40020400
  ||||||       ; DATA XREF from 0x08006522 (_GPIO_VeryLowSpeedSet)
  ||||||    0x08006944      .dword 0x20000710
  ||||||       ; DATA XREF from 0x080065ac (_GPIO_VeryLowSpeedSet)
  ||||||    0x08006948      .dword 0x40020800
  ||||||       ; DATA XREF from 0x0800666c (_KBD_LowPowerMode)
  ||||||    0x0800694c      .dword 0xe000e010
  ||||||       ; DATA XREF from 0x080066ac (_KBD_StoreAutoPWROffFlag)
  ||||||       ; DATA XREF from 0x080066da (_KBD_LoadLayoutAndPWRFlags)
  ||||||       ; DATA XREF from 0x0800691e (update_some_flags)
  ||||||    0x08006950      .dword 0x200017a8
  ||||||       ; DATA XREF from 0x080066b2 (_KBD_StoreAutoPWROffFlag)
  ||||||    0x08006954      .dword 0x08080010
  ||||||       ; DATA XREF from 0x080066cc (_KBD_LoadLayoutAndPWRFlags)
  ||||||       ; DATA XREF from 0x08006704 (_EEPROM_Write_Struct_1)
  ||||||    0x08006958      .dword 0x08080000
  ||||||       ; DATA XREF from 0x08006710 (_EEPROM_Write_Struct_1)
  ||||||    0x0800695c      .dword 0x08080004
  ||||||       ; DATA XREF from 0x08006776 (init_some_10_struct2)
  ||||||       ; DATA XREF from 0x0800685a (_EEPROM_Write_Something3)
  ||||||    0x08006960      .dword 0x08080400
  ||||||       ; DATA XREF from 0x080067dc (_KBD_LoadSyncCode)
  ||||||       ; DATA XREF from 0x08006800 (_KBD_StoreSyncCode)
  ||||||    0x08006964      .dword 0x08080008
  ||||||       ; DATA XREF from 0x0800680c (_KBD_StoreSyncCode)
  ||||||    0x08006968      .dword 0x0808000c
  ||||||       ; DATA XREF from 0x08006840 (_EEPROM_Write_Something3)
  ||||||    0x0800696c      .dword 0x08080402
/ (fcn) memset 20
|       Caller: TIM_InternalClockConfig _KBD_Init _LED_KeyPosBSSend _USART2_RxMemInit _KBD_IdleFlagsUpdate
|               clear_some_arrays _Parse_Matrix _KBD_DefaultsLoad _USART3_RxMemInit _MSG_CMDPrepareOrSend
|   memset ();
| ||||||       ; XREFS: JMP 0x0800694c  JMP 0x08007f2a  CALL 0x08004150  CALL 0x0800415c  CALL 0x080054d8  CALL 0x08005516  CALL 0x08005564  CALL 0x08005828  CALL 0x080060dc  
| ||||||       ; XREFS: CALL 0x080060e8  CALL 0x08007f18  CALL 0x08008564  CALL 0x0800856e  CALL 0x08008578  CALL 0x08008806  
| ||||||.-> 0x08006970      10b5           push {r4, lr}               ; r0: s, r1: char, r2: size
| ||||||:   0x08006972      0446           mov r4, r0
| ||||||:   0x08006974      1046           mov r0, r2
| ||||||:   0x08006976      0a46           mov r2, r1
| ||||||:   0x08006978      0146           mov r1, r0
| ||||||:   0x0800697a      2046           mov r0, r4
| ||||||:   0x0800697c      01f0aef8       bl _memset                  ; void *memset(void *s, int c, size_t n)
| ||||||:   0x08006980      2046           mov r0, r4
\ ||||||:   0x08006982      10bd           pop {r4, pc}
\ ||||||:   ;-- KBD_LayoutInit:
/ (fcn) _KBD_LayoutInit 278
|       Caller: _KBD_Init fcn.08008ade _MSG_HandleKeyboardCMD
|   _KBD_LayoutInit ();
| ||||||:      ; CALL XREF from 0x08004170 (_KBD_Init)
| ||||||:      ; CALL XREF from 0x080058ba (_MSG_HandleKeyboardCMD)
| ||||||:      ; CALL XREF from 0x0800591c (_MSG_HandleKeyboardCMD)
| ||||||:      ; CALL XREF from 0x08008b60 (fcn.08008ade)
| ||||||:   0x08006984      2de9f041       push.w {r4, r5, r6, r7, r8, lr} ; always called with r0: [0x20000798], r1: 0x200017a8
| ||||||:   0x08006988      0023           movs r3, 0
| ||||||:   0x0800698a      444c           ldr r4, [0x08006a9c]        ; [0x8006a9c:4]=0x20000000
| ||||||:   0x0800698c      c1f8a040       str.w r4, [r1, 0xa0]        ; 0x20001848
| ||||||:   0x08006990      04f56475       add.w r5, r4, 0x390
| ||||||:   0x08006994      01f1a006       add.w r6, r1, 0xa0
| ||||||:   0x08006998      7560           str r5, [r6, 4]             ; 0x2000184c
| ||||||:   0x0800699a      0128           cmp r0, 1                   ; 1
| ========< 0x0800699c      04d1           bne 0x80069a8
| ||||||:   0x0800699e      2246           mov r2, r4
| ||||||:   0x080069a0      c1f8a040       str.w r4, [r1, 0xa0]
| ||||||:   0x080069a4      7560           str r5, [r6, 4]
| ========< 0x080069a6      1ce0           b 0x80069e2
| ||||||:      ; JMP XREF from 0x0800699c (_KBD_LayoutInit)
| --------> 0x080069a8      0228           cmp r0, 2                   ; 2
| ========< 0x080069aa      07d1           bne 0x80069bc
| ||||||:   0x080069ac      04f57672       add.w r2, r4, 0x3d8
| ||||||:   0x080069b0      c1f8a020       str.w r2, [r1, 0xa0]
| ||||||:   0x080069b4      04f22040       addw r0, r4, 0x420
| ||||||:   0x080069b8      7060           str r0, [r6, 4]
| ========< 0x080069ba      12e0           b 0x80069e2
| ||||||:      ; JMP XREF from 0x080069aa (_KBD_LayoutInit)
| --------> 0x080069bc      0328           cmp r0, 3                   ; 3
| ========< 0x080069be      07d1           bne 0x80069d0
| ||||||:   0x080069c0      04f26842       addw r2, r4, 0x468
| ||||||:   0x080069c4      c1f8a020       str.w r2, [r1, 0xa0]
| ||||||:   0x080069c8      04f2b040       addw r0, r4, 0x4b0
| ||||||:   0x080069cc      7060           str r0, [r6, 4]
| ========< 0x080069ce      08e0           b 0x80069e2
| ||||||:      ; JMP XREF from 0x080069be (_KBD_LayoutInit)
| --------> 0x080069d0      8028           cmp r0, 0x80                ; 128
| ========< 0x080069d2      06d1           bne 0x80069e2
| ||||||:   0x080069d4      04f2f842       addw r2, r4, 0x4f8
| ||||||:   0x080069d8      c1f8a020       str.w r2, [r1, 0xa0]
| ||||||:   0x080069dc      04f24050       addw r0, r4, 0x540
| ||||||:   0x080069e0      7060           str r0, [r6, 4]
| ||||||:      ; JMP XREF from 0x080069a6 (_KBD_LayoutInit)
| ||||||:      ; JMP XREF from 0x080069ba (_KBD_LayoutInit)
| ||||||:      ; JMP XREF from 0x080069ce (_KBD_LayoutInit)
| ||||||:      ; JMP XREF from 0x080069d2 (_KBD_LayoutInit)
| --------> 0x080069e2      1846           mov r0, r3
| ========< 0x080069e4      18e0           b 0x8006a18
| ||||||:      ; JMP XREF from 0x08006a14 (_KBD_LayoutInit)
| --------> 0x080069e6      c7ebc708       rsb r8, r7, r7, lsl 3       ; 0, 7, 14, 21, 28
| ||||||:   0x080069ea      02eb4808       add.w r8, r2, r8, lsl 1     ; 0x20000000||3d8||468||4f8 + (0, 14, 28, 42, 56)
| ||||||:   0x080069ee      1cf808c0       ldrb.w ip, [ip, r8]         ; ip is the column
| ||||||:   0x080069f2      bcf1fe0f       cmp.w ip, 0xfe              ; 254 ; 0xfe marks the location of the Fn key
| ========< 0x080069f6      06d1           bne 0x8006a06
| ||||||:   0x080069f8      0123           movs r3, 1                  ; 1 ; Fn key found in this layout
| ||||||:   0x080069fa      81f8d500       strb.w r0, [r1, 0xd5]       ; 0x2000187d, r0 is the row
| ||||||:   0x080069fe      01f1d50c       add.w ip, r1, 0xd5
| ||||||:   0x08006a02      8cf801e0       strb.w lr, [ip, 1]          ; 0x2000187e, lr is the column
| ||||||:      ; JMP XREF from 0x080069f6 (_KBD_LayoutInit)
| --------> 0x08006a06      0ef1010e       add.w lr, lr, 1
| ||||||:      ; JMP XREF from 0x08006a24 (_KBD_LayoutInit)
| --------> 0x08006a0a      5ffa8efe       uxtb.w lr, lr
| ||||||:   0x08006a0e      f446           mov ip, lr
| ||||||:   0x08006a10      bcf10e0f       cmp.w ip, 0xe               ; 14
| ========< 0x08006a14      e7db           blt 0x80069e6               ; loop from 0 to e-1
| ||||||:   0x08006a16      401c           adds r0, r0, 1
| ||||||:      ; JMP XREF from 0x080069e4 (_KBD_LayoutInit)
| --------> 0x08006a18      c0b2           uxtb r0, r0
| ||||||:   0x08006a1a      0746           mov r7, r0
| ||||||:   0x08006a1c      052f           cmp r7, 5                   ; 5
| ========< 0x08006a1e      02da           bge 0x8006a26               ; loop from 0 to 5-1
| ||||||:   0x08006a20      4ff0000e       mov.w lr, 0
| ========< 0x08006a24      f1e7           b 0x8006a0a
| ||||||:      ; JMP XREF from 0x08006a1e (_KBD_LayoutInit)
| --------> 0x08006a26      002b           cmp r3, 0                   ; wasn't Fn key found in this layout?
| ========< 0x08006a28      0ad1           bne 0x8006a40
| ||||||:   0x08006a2a      2246           mov r2, r4                  ; use 0x2.000-390 as default layout
| ||||||:   0x08006a2c      c1f8a040       str.w r4, [r1, 0xa0]
| ||||||:   0x08006a30      7560           str r5, [r6, 4]
| ||||||:   0x08006a32      0420           movs r0, 4                  ; 4 ; store default rowXcol of Fn key
| ||||||:   0x08006a34      81f8d500       strb.w r0, [r1, 0xd5]
| ||||||:   0x08006a38      0b20           movs r0, 0xb                ; 11
| ||||||:   0x08006a3a      01f1d503       add.w r3, r1, 0xd5
| ||||||:   0x08006a3e      5870           strb r0, [r3, 1]
| ||||||:      ; JMP XREF from 0x08006a28 (_KBD_LayoutInit)
| --------> 0x08006a40      0020           movs r0, 0
| ========< 0x08006a42      22e0           b 0x8006a8a
| ||||||:      ; JMP XREF from 0x08006a86 (_KBD_LayoutInit)
| --------> 0x08006a44      c3ebc305       rsb r5, r3, r3, lsl 3       ; 0, 7, 14, 21, 28
| ||||||:   0x08006a48      02eb4505       add.w r5, r2, r5, lsl 1     ; 0x20000000||3d8||468||4f8 + (0, 14, 28, 42, 56)
| ||||||:   0x08006a4c      775d           ldrb r7, [r6, r5]           ; r6 is the column
| ||||||:   0x08006a4e      fe2f           cmp r7, 0xfe                ; 254 ; 0xfe marks Fn key location
| ========< 0x08006a50      09d1           bne 0x8006a66
| ||||||:   0x08006a52      134f           ldr r7, [0x08006aa0]        ; [0x8006aa0:4]=0x20000768
| ||||||:   0x08006a54      87f83100       strb.w r0, [r7, 0x31]       ; 0x20000799, r0: row
| ||||||:   0x08006a58      3137           adds r7, 0x31
| ||||||:   0x08006a5a      7c70           strb r4, [r7, 1]            ; 0x2000079a, r4: column
| ||||||:   0x08006a5c      81f8d500       strb.w r0, [r1, 0xd5]       ; 0x2000187d
| ||||||:   0x08006a60      01f1d507       add.w r7, r1, 0xd5
| ||||||:   0x08006a64      7c70           strb r4, [r7, 1]            ; 0x2000187e
| ||||||:      ; JMP XREF from 0x08006a50 (_KBD_LayoutInit)
| --------> 0x08006a66      755d           ldrb r5, [r6, r5]
| ||||||:   0x08006a68      fa2d           cmp r5, 0xfa                ; 250 ; 0xfa marks Anne key location
| ========< 0x08006a6a      08d1           bne 0x8006a7e
| ||||||:   0x08006a6c      0c4f           ldr r7, [0x08006aa0]        ; [0x8006aa0:4]=0x20000768
| ||||||:   0x08006a6e      07f23105       addw r5, r7, 0x31
| ||||||:   0x08006a72      a870           strb r0, [r5, 2]            ; 0x2000079b
| ||||||:   0x08006a74      ec70           strb r4, [r5, 3]            ; 0x2000079c
| ||||||:   0x08006a76      01f2d505       addw r5, r1, 0xd5
| ||||||:   0x08006a7a      a870           strb r0, [r5, 2]            ; 0x2000187f
| ||||||:   0x08006a7c      ec70           strb r4, [r5, 3]            ; 0x20001880
| ||||||:      ; JMP XREF from 0x08006a6a (_KBD_LayoutInit)
| --------> 0x08006a7e      641c           adds r4, r4, 1
| ||||||:      ; JMP XREF from 0x08006a94 (_KBD_LayoutInit)
| --------> 0x08006a80      e4b2           uxtb r4, r4
| ||||||:   0x08006a82      2646           mov r6, r4
| ||||||:   0x08006a84      0e2e           cmp r6, 0xe                 ; 14
| ========< 0x08006a86      dddb           blt 0x8006a44               ; loop over columns
| ||||||:   0x08006a88      401c           adds r0, r0, 1
| ||||||:      ; JMP XREF from 0x08006a42 (_KBD_LayoutInit)
| --------> 0x08006a8a      c0b2           uxtb r0, r0
| ||||||:   0x08006a8c      0346           mov r3, r0
| ||||||:   0x08006a8e      052b           cmp r3, 5                   ; 5
| ========< 0x08006a90      01da           bge 0x8006a96               ; loop over rows
| ||||||:   0x08006a92      0024           movs r4, 0
| ========< 0x08006a94      f4e7           b 0x8006a80
| ||||||:      ; JMP XREF from 0x08006a90 (_KBD_LayoutInit)
\ --------> 0x08006a96      bde8f081       pop.w {r4, r5, r6, r7, r8, pc}
  ||||||:   0x08006a9a      0000           movs r0, r0
  ||||||:      ; DATA XREF from 0x0800698a (_KBD_LayoutInit)
  ||||||:   0x08006a9c      .dword 0x20000000
  ||||||:      ; DATA XREF from 0x08006a52 (_KBD_LayoutInit)
  ||||||:      ; DATA XREF from 0x08006a6c (_KBD_LayoutInit)
  ||||||:   0x08006aa0      .dword 0x20000768
/ (fcn) RCC_DeInit 48
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_UseHSIClock
|   RCC_DeInit ();
| ||||||:      ; CALL XREF from 0x080041b0 (_Peripherals_Config)
| ||||||:      ; CALL XREF from 0x08004272 (_KBD_UseHSIClock)
| ||||||:      ; CALL XREF from 0x080062a8 (_Periph_LowPowerMode)
| ||||||:   0x08006aa4      8548           ldr r0, [0x08006cbc]        ; [0x8006cbc:4]=0x40023800
| ||||||:   0x08006aa6      0168           ldr r1, [r0]                ; read RCC_CR
| ||||||:   0x08006aa8      41f48071       orr r1, r1, 0x100           ; set MSION bit: enable MSI oscillator
| ||||||:   0x08006aac      0160           str r1, [r0]
| ||||||:   0x08006aae      8168           ldr r1, [r0, 8]             ; load RCC_CFGR
| ||||||:   0x08006ab0      834a           ldr r2, [0x08006cc0]        ; [0x8006cc0:4]=0x88ffc00c
| ||||||:   0x08006ab2      1140           ands r1, r2
| ||||||:   0x08006ab4      8160           str r1, [r0, 8]
| ||||||:   0x08006ab6      0168           ldr r1, [r0]
| ||||||:   0x08006ab8      824a           ldr r2, [0x08006cc4]        ; [0x8006cc4:4]=0xeefefffe
| ||||||:   0x08006aba      1140           ands r1, r2
| ||||||:   0x08006abc      0160           str r1, [r0]
| ||||||:   0x08006abe      0168           ldr r1, [r0]
| ||||||:   0x08006ac0      21f48021       bic r1, r1, 0x40000
| ||||||:   0x08006ac4      0160           str r1, [r0]                ; HSE=0 no oscillator bypass in RCC_CR
| ||||||:   0x08006ac6      8168           ldr r1, [r0, 8]
| ||||||:   0x08006ac8      21f47d01       bic r1, r1, 0xfd0000
| ||||||:   0x08006acc      8160           str r1, [r0, 8]
| ||||||:   0x08006ace      0021           movs r1, 0
| ||||||:   0x08006ad0      c160           str r1, [r0, 0xc]
\ ||||||:   0x08006ad2      7047           bx lr
/ (fcn) RCC_HSEConfig 10
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_UseHSIClock
|   RCC_HSEConfig ();
| ||||||:      ; CALL XREF from 0x080041b6 (_Peripherals_Config)
| ||||||:      ; CALL XREF from 0x080042b6 (_KBD_UseHSIClock)
| ||||||:      ; CALL XREF from 0x08006302 (_Periph_LowPowerMode)
| ||||||:   0x08006ad4      7c49           ldr r1, [0x08006cc8]        ; [0x8006cc8:4]=0x40023802 ; r0: state
| ||||||:   0x08006ad6      0022           movs r2, 0
| ||||||:   0x08006ad8      0a70           strb r2, [r1]
| ||||||:   0x08006ada      0870           strb r0, [r1]
\ ||||||:   0x08006adc      7047           bx lr
/ (fcn) RCC_WaitForHSEStartUp 50
|       Caller: _Peripherals_Config
|   RCC_WaitForHSEStartUp ();
| ||||||:      ; CALL XREF from 0x080041ba (_Peripherals_Config)
| ||||||:   0x08006ade      10b5           push {r4, lr}               ; Wait for HSE oscillator to become Rdy; return error on timeout
| ||||||:   0x08006ae0      82b0           sub sp, 8
| ||||||:   0x08006ae2      0020           movs r0, 0
| ||||||:   0x08006ae4      0090           str r0, [sp]
| ||||||:   0x08006ae6      0446           mov r4, r0
| ||||||:      ; JMP XREF from 0x08006afe (RCC_WaitForHSEStartUp)
| --------> 0x08006ae8      3120           movs r0, 0x31               ; '1' ; 49 ; leads to checking the HSERDY flag in RCC_CR (HSE clk stable)
| ||||||:   0x08006aea      00f0d9f8       bl RCC_GetFlagStatus
| ||||||:   0x08006aee      0099           ldr r1, [sp]
| ||||||:   0x08006af0      491c           adds r1, r1, 1
| ||||||:   0x08006af2      0091           str r1, [sp]
| ||||||:   0x08006af4      0099           ldr r1, [sp]
| ||||||:   0x08006af6      b1f5a04f       cmp.w r1, 0x5000            ; HSE_STARTUP_TIMEOUT
| ========< 0x08006afa      01d0           beq 0x8006b00
| ||||||:   0x08006afc      0028           cmp r0, 0
| ========< 0x08006afe      f3d0           beq 0x8006ae8
| ||||||:      ; JMP XREF from 0x08006afa (RCC_WaitForHSEStartUp)
| --------> 0x08006b00      3120           movs r0, 0x31               ; '1' ; 49
| ||||||:   0x08006b02      00f0cdf8       bl RCC_GetFlagStatus
| ||||||:   0x08006b06      0028           cmp r0, 0
| ========< 0x08006b08      00d0           beq 0x8006b0c
| ||||||:   0x08006b0a      0124           movs r4, 1                  ; 1
| ||||||:      ; JMP XREF from 0x08006b08 (RCC_WaitForHSEStartUp)
| --------> 0x08006b0c      2046           mov r0, r4
\ ||||||:   0x08006b0e      16bd           pop {r1, r2, r4, pc}
/ (fcn) RCC_MSIRangeConfig 14
|       Caller: _Periph_LowPowerMode _KBD_UseHSIClock
|   RCC_MSIRangeConfig ();
| ||||||:      ; CALL XREF from 0x08004290 (_KBD_UseHSIClock)
| ||||||:      ; CALL XREF from 0x080062e2 (_Periph_LowPowerMode)
| ||||||:   0x08006b10      6e49           ldr r1, [0x08006ccc]        ; [0x8006ccc:4]=0x40023804 ; RCC_ICSCR ; r0 contains range to set
| ||||||:   0x08006b12      0a68           ldr r2, [r1]
| ||||||:   0x08006b14      22f46042       bic r2, r2, 0xe000
| ||||||:   0x08006b18      1043           orrs r0, r2
| ||||||:   0x08006b1a      0860           str r0, [r1]
\ ||||||:   0x08006b1c      7047           bx lr
/ (fcn) RCC_MSICmd 6
|       Caller: _Peripherals_Config
|   RCC_MSICmd ();
| ||||||:      ; CALL XREF from 0x08004262 (_Peripherals_Config)
| ||||||:   0x08006b1e      6c49           ldr r1, [0x08006cd0]        ; [0x8006cd0:4]=0x42470020
| ||||||:   0x08006b20      0860           str r0, [r1]
\ ||||||:   0x08006b22      7047           bx lr
/ (fcn) RCC_HSICmd 6
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_UseHSIClock
|   RCC_HSICmd ();
| ||||||:      ; CALL XREF from 0x0800425c (_Peripherals_Config)
| ||||||:      ; CALL XREF from 0x08004278 (_KBD_UseHSIClock)
| ||||||:      ; CALL XREF from 0x080062fc (_Periph_LowPowerMode)
| ||||||:   0x08006b24      6b49           ldr r1, [0x08006cd4]        ; [0x8006cd4:4]=0x42470000 ; HSI location in bitband region enable/disable
| ||||||:   0x08006b26      0860           str r0, [r1]
\ ||||||:   0x08006b28      7047           bx lr
/ (fcn) RCC_LSEConfig 10
|       Caller: _Periph_LowPowerMode _KBD_UseHSIClock
|   RCC_LSEConfig ();
| ||||||:      ; JMP XREF from 0x0800426c (Peripherals_Config + 190)
| ||||||:      ; CALL XREF from 0x080042b0 (_KBD_UseHSIClock)
| ||||||:      ; CALL XREF from 0x0800630c (_Periph_LowPowerMode)
| |||||`--> 0x08006b2a      6b49           ldr r1, [0x08006cd8]        ; [0x8006cd8:4]=0x40023835 ; part of RCC_CSR
| ||||| :   0x08006b2c      0022           movs r2, 0
| ||||| :   0x08006b2e      0a70           strb r2, [r1]
| ||||| :   0x08006b30      0870           strb r0, [r1]
\ ||||| :   0x08006b32      7047           bx lr
/ (fcn) RCC_LSICmd 6
|   RCC_LSICmd ();
| ||||| :      ; JMP XREF from 0x08006316 (_Periph_LowPowerMode)
| --------> 0x08006b34      6949           ldr r1, [0x08006cdc]        ; [0x8006cdc:4]=0x42470680
| ||||| :   0x08006b36      0860           str r0, [r1]
\ ||||| :   0x08006b38      7047           bx lr
/ (fcn) RCC_PLLConfig 10
|       Caller: _Peripherals_Config
|   RCC_PLLConfig ();
| ||||| :      ; CALL XREF from 0x08004208 (_Peripherals_Config)
| ||||| :   0x08006b3a      0843           orrs r0, r1
| ||||| :   0x08006b3c      1043           orrs r0, r2
| ||||| :   0x08006b3e      6849           ldr r1, [0x08006ce0]        ; [0x8006ce0:4]=0x4002380a
| ||||| :   0x08006b40      0870           strb r0, [r1]
\ ||||| :   0x08006b42      7047           bx lr
/ (fcn) RCC_PLLCmd 6
|       Caller: _Peripherals_Config
|   RCC_PLLCmd ();
| ||||| :      ; CALL XREF from 0x0800420e (_Peripherals_Config)
| ||||| :   0x08006b44      6749           ldr r1, [0x08006ce4]        ; [0x8006ce4:4]=0x42470060 ; Uses the pllon bit location in the bitband region, see stm32l1xx_rcc.c
| ||||| :   0x08006b46      0860           str r0, [r1]                ; see stm32l1xx_rcc.c ; enable/disable
\ ||||| :   0x08006b48      7047           bx lr
/ (fcn) RCC_SYSCLKConfig 14
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_UseHSIClock
|   RCC_SYSCLKConfig ();
| ||||| :      ; CALL XREF from 0x0800421e (_Peripherals_Config)
| ||||| :      ; CALL XREF from 0x08004288 (_KBD_UseHSIClock)
| ||||| :      ; CALL XREF from 0x080062e8 (_Periph_LowPowerMode)
| ||||| :   0x08006b4a      6749           ldr r1, [0x08006ce8]        ; [0x8006ce8:4]=0x40023808
| ||||| :   0x08006b4c      0a68           ldr r2, [r1]
| ||||| :   0x08006b4e      9208           lsrs r2, r2, 2              ; clear sw[1:0] bits in RCC_CFGR
| ||||| :   0x08006b50      50ea8200       orrs.w r0, r0, r2, lsl 2    ; select sysclk using value in r0
| ||||| :   0x08006b54      0860           str r0, [r1]
\ ||||| :   0x08006b56      7047           bx lr
/ (fcn) RCC_GetSYSCLKSource 10
|       Caller: _Peripherals_Config _Periph_LowPowerMode
|   RCC_GetSYSCLKSource ();
| ||||| :      ; CALL XREF from 0x08004222 (_Peripherals_Config)
| ||||| :      ; CALL XREF from 0x080062ec (_Periph_LowPowerMode)
| ||||| :   0x08006b58      6348           ldr r0, [0x08006ce8]        ; [0x8006ce8:4]=0x40023808
| ||||| :   0x08006b5a      0068           ldr r0, [r0]
| ||||| :   0x08006b5c      00f00c00       and r0, r0, 0xc
\ ||||| :   0x08006b60      7047           bx lr
/ (fcn) RCC_HCLKConfig 14
|       Caller: _Peripherals_Config _Periph_LowPowerMode
|   RCC_HCLKConfig ();
| ||||| :      ; CALL XREF from 0x080041ee (_Peripherals_Config)
| ||||| :      ; CALL XREF from 0x080062f6 (_Periph_LowPowerMode)
| ||||| :   0x08006b62      6149           ldr r1, [0x08006ce8]        ; [0x8006ce8:4]=0x40023808 ; RCC_CFGR define the AHB clk devider
| ||||| :   0x08006b64      0a68           ldr r2, [r1]
| ||||| :   0x08006b66      22f0f002       bic r2, r2, 0xf0
| ||||| :   0x08006b6a      1043           orrs r0, r2
| ||||| :   0x08006b6c      0860           str r0, [r1]
\ ||||| :   0x08006b6e      7047           bx lr
/ (fcn) RCC_PCLK1Config 14
|       Caller: _Peripherals_Config
|   RCC_PCLK1Config ();
| ||||| :   0x08006b70      5d49           ldr r1, [0x08006ce8]        ; [0x8006ce8:4]=0x40023808 ; define the APB1 clk devider
| ||||| :   0x08006b72      0a68           ldr r2, [r1]
| ||||| :   0x08006b74      22f4e062       bic r2, r2, 0x700
| ||||| :   0x08006b78      1043           orrs r0, r2
| ||||| :   0x08006b7a      0860           str r0, [r1]
\ ||||| :   0x08006b7c      7047           bx lr
/ (fcn) RCC_PCLK2Config 16
|       Caller: _Peripherals_Config
|   RCC_PCLK2Config ();
| ||||| :      ; CALL XREF from 0x080041f6 (_Peripherals_Config)
| ||||| :   0x08006b7e      5a49           ldr r1, [0x08006ce8]        ; [0x8006ce8:4]=0x40023808 ; define APB2 clk devider
| ||||| :   0x08006b80      0a68           ldr r2, [r1]
| ||||| :   0x08006b82      22f46052       bic r2, r2, 0x3800
| ||||| :   0x08006b86      42eac000       orr.w r0, r2, r0, lsl 3
| ||||| :   0x08006b8a      0860           str r0, [r1]
\ ||||| :   0x08006b8c      7047           bx lr
/ (fcn) RCC_GetClocksFreq 164
|       Caller: USART_Init
|   RCC_GetClocksFreq ();
| ||||| :      ; CALL XREF from 0x080074e2 (USART_Init)
| ||||| :   0x08006b8e      30b4           push {r4, r5}
| ||||| :   0x08006b90      4e49           ldr r1, [0x08006ccc]        ; [0x8006ccc:4]=0x40023804
| ||||| :   0x08006b92      4a68           ldr r2, [r1, 4]
| ||||| :   0x08006b94      12f00c02       ands r2, r2, 0xc
| |||||,==< 0x08006b98      06d0           beq 0x8006ba8
| ||||||:   0x08006b9a      042a           cmp r2, 4                   ; 4
| ========< 0x08006b9c      0dd0           beq 0x8006bba
| ||||||:   0x08006b9e      082a           cmp r2, 8                   ; 8
| ========< 0x08006ba0      0bd0           beq 0x8006bba
| ||||||:   0x08006ba2      0c2a           cmp r2, 0xc                 ; 12
| ========< 0x08006ba4      0cd0           beq 0x8006bc0
| ========< 0x08006ba6      1de0           b 0x8006be4
| ||||||:      ; JMP XREF from 0x08006b98 (RCC_GetClocksFreq)
| |||||`--> 0x08006ba8      0122           movs r2, 1                  ; 1
| ||||| :   0x08006baa      0b68           ldr r3, [r1]
| ||||| :   0x08006bac      c3f34233       ubfx r3, r3, 0xd, 3
| ||||| :   0x08006bb0      5b1c           adds r3, r3, 1
| ||||| :   0x08006bb2      9a40           lsls r2, r3
| ||||| :   0x08006bb4      d203           lsls r2, r2, 0xf
| ||||| :   0x08006bb6      0260           str r2, [r0]
| |||||,==< 0x08006bb8      1ce0           b 0x8006bf4
| ||||||:      ; JMP XREF from 0x08006b9c (RCC_GetClocksFreq)
| ||||||:      ; JMP XREF from 0x08006ba0 (RCC_GetClocksFreq)
| --------> 0x08006bba      4c4a           ldr r2, [0x08006cec]        ; [0x8006cec:4]=0xf42400
| ||||||:   0x08006bbc      0260           str r2, [r0]
| ========< 0x08006bbe      19e0           b 0x8006bf4
| ||||||:      ; JMP XREF from 0x08006ba4 (RCC_GetClocksFreq)
| --------> 0x08006bc0      4a68           ldr r2, [r1, 4]
| ||||||:   0x08006bc2      02f47012       and r2, r2, 0x3c0000
| ||||||:   0x08006bc6      4b68           ldr r3, [r1, 4]
| ||||||:   0x08006bc8      03f44003       and r3, r3, 0xc00000
| ||||||:   0x08006bcc      920c           lsrs r2, r2, 0x12
| ||||||:   0x08006bce      484c           ldr r4, [0x08006cf0]        ; [0x8006cf0:4]=0x20000694
| ||||||:   0x08006bd0      125d           ldrb r2, [r2, r4]
| ||||||:   0x08006bd2      9b0d           lsrs r3, r3, 0x16
| ||||||:   0x08006bd4      5b1c           adds r3, r3, 1
| ||||||:   0x08006bd6      4c68           ldr r4, [r1, 4]
| ||||||:   0x08006bd8      444d           ldr r5, [0x08006cec]        ; [0x8006cec:4]=0xf42400
| ||||||:   0x08006bda      6a43           muls r2, r5, r2
| ||||||:   0x08006bdc      b2fbf3f2       udiv r2, r2, r3
| ||||||:   0x08006be0      0260           str r2, [r0]
| ========< 0x08006be2      07e0           b 0x8006bf4
| ||||||:      ; JMP XREF from 0x08006ba6 (RCC_GetClocksFreq)
| --------> 0x08006be4      0122           movs r2, 1                  ; 1
| ||||||:   0x08006be6      0b68           ldr r3, [r1]
| ||||||:   0x08006be8      c3f34233       ubfx r3, r3, 0xd, 3
| ||||||:   0x08006bec      5b1c           adds r3, r3, 1
| ||||||:   0x08006bee      9a40           lsls r2, r3
| ||||||:   0x08006bf0      d203           lsls r2, r2, 0xf
| ||||||:   0x08006bf2      0260           str r2, [r0]
| ||||||:      ; JMP XREF from 0x08006bb8 (RCC_GetClocksFreq)
| ||||||:      ; JMP XREF from 0x08006bbe (RCC_GetClocksFreq)
| ||||||:      ; JMP XREF from 0x08006be2 (RCC_GetClocksFreq)
| -----`--> 0x08006bf4      4a68           ldr r2, [r1, 4]
| ||||| :   0x08006bf6      02f0f003       and r3, r2, 0xf0
| ||||| :   0x08006bfa      3d4a           ldr r2, [0x08006cf0]        ; [0x8006cf0:4]=0x20000694
| ||||| :   0x08006bfc      02eb1313       add.w r3, r2, r3, lsr 4
| ||||| :   0x08006c00      1b7b           ldrb r3, [r3, 0xc]
| ||||| :   0x08006c02      0468           ldr r4, [r0]
| ||||| :   0x08006c04      24fa03f3       lsr.w r3, r4, r3
| ||||| :   0x08006c08      4360           str r3, [r0, 4]
| ||||| :   0x08006c0a      4c68           ldr r4, [r1, 4]
| ||||| :   0x08006c0c      04f4e064       and r4, r4, 0x700
| ||||| :   0x08006c10      02eb1424       add.w r4, r2, r4, lsr 8
| ||||| :   0x08006c14      247b           ldrb r4, [r4, 0xc]
| ||||| :   0x08006c16      e340           lsrs r3, r4
| ||||| :   0x08006c18      8360           str r3, [r0, 8]
| ||||| :   0x08006c1a      4968           ldr r1, [r1, 4]
| ||||| :   0x08006c1c      01f46051       and r1, r1, 0x3800
| ||||| :   0x08006c20      02ebd121       add.w r1, r2, r1, lsr 11
| ||||| :   0x08006c24      097b           ldrb r1, [r1, 0xc]
| ||||| :   0x08006c26      4268           ldr r2, [r0, 4]
| ||||| :   0x08006c28      22fa01f1       lsr.w r1, r2, r1
| ||||| :   0x08006c2c      c160           str r1, [r0, 0xc]
| ||||| :   0x08006c2e      30bc           pop {r4, r5}
\ ||||| :   0x08006c30      7047           bx lr
/ (fcn) RCC_AHBPeriphClockCmd 22
|       Caller: _Peripherals_Config _KBD_UseHSIClock
|   RCC_AHBPeriphClockCmd ();
| ||||| :      ; XREFS: JMP 0x08004f58  JMP 0x08005048  CALL 0x08004236  CALL 0x0800423e  CALL 0x08004246  CALL 0x08004298  
| --------> 0x08006c32      304a           ldr r2, [0x08006cf4]        ; [0x8006cf4:4]=0x4002381c ; r1: state, r0: gpio port
| ||||| :   0x08006c34      0029           cmp r1, 0
| ||||| :   0x08006c36      1168           ldr r1, [r2]
| |||||,==< 0x08006c38      02d0           beq 0x8006c40
| ||||||:   0x08006c3a      0843           orrs r0, r1
| ||||||:   0x08006c3c      1060           str r0, [r2]
| ||||||:   0x08006c3e      7047           bx lr
| ||||||:      ; JMP XREF from 0x08006c38 (RCC_AHBPeriphClockCmd)
| |||||`--> 0x08006c40      21ea0000       bic.w r0, r1, r0
| ||||| :   0x08006c44      1060           str r0, [r2]
\ ||||| :   0x08006c46      7047           bx lr
/ (fcn) RCC_APB2PeriphClockCmd 22
|       Caller: _Peripherals_Config _KBD_UseHSIClock
|   RCC_APB2PeriphClockCmd ();
| ||||| :      ; CALL XREF from 0x08004256 (_Peripherals_Config)
| ||||| :      ; CALL XREF from 0x080042aa (_KBD_UseHSIClock)
| ||||| :   0x08006c48      2b4a           ldr r2, [0x08006cf8]        ; [0x8006cf8:4]=0x40023820 ; RCC_APB2ENR r1: state, r0: clk
| ||||| :   0x08006c4a      0029           cmp r1, 0
| ||||| :   0x08006c4c      1168           ldr r1, [r2]
| |||||,==< 0x08006c4e      02d0           beq 0x8006c56
| ||||||:   0x08006c50      0843           orrs r0, r1                 ; enable
| ||||||:   0x08006c52      1060           str r0, [r2]
| ||||||:   0x08006c54      7047           bx lr
| ||||||:      ; JMP XREF from 0x08006c4e (RCC_APB2PeriphClockCmd)
| |||||`--> 0x08006c56      21ea0000       bic.w r0, r1, r0            ; disable
| ||||| :   0x08006c5a      1060           str r0, [r2]
\ ||||| :   0x08006c5c      7047           bx lr
/ (fcn) RCC_APB1PeriphClockCmd 22
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_UseHSIClock _KBD_LowPowerMode
|   RCC_APB1PeriphClockCmd ();
| ||||| :      ; XREFS: JMP 0x0800478a  JMP 0x08004ebc  JMP 0x0800503e  JMP 0x080090c0  CALL 0x080041d6  CALL 0x0800424e  CALL 0x080042a2  CALL 0x080062ca  CALL 0x08006682  
| --``-.--> 0x08006c5e      274a           ldr r2, [0x08006cfc]        ; [0x8006cfc:4]=0x40023824 ; RCC_APB1ENR r1: state, r0: clk
| ||  |::   0x08006c60      0029           cmp r1, 0
| ||  |::   0x08006c62      1168           ldr r1, [r2]
| || ,====< 0x08006c64      02d0           beq 0x8006c6c
| || ||::   0x08006c66      0843           orrs r0, r1                 ; enable clk
| || ||::   0x08006c68      1060           str r0, [r2]
| || ||::   0x08006c6a      7047           bx lr
| || ||::      ; JMP XREF from 0x08006c64 (RCC_APB1PeriphClockCmd)
| || `----> 0x08006c6c      21ea0000       bic.w r0, r1, r0            ; disable clk
| ||  |::   0x08006c70      1060           str r0, [r2]
\ ||  |::   0x08006c72      7047           bx lr
/ (fcn) RCC_APB2PeriphResetCmd 22
|       Caller: _Periphs_Reset USART_DeInit
|   RCC_APB2PeriphResetCmd ();
| ||  |::      ; XREFS: JMP 0x08007428  JMP 0x080079d8  JMP 0x080079f2  JMP 0x08007a0c  CALL 0x0800741a  CALL 0x080079cc  CALL 0x080079e6  CALL 0x08007a00  
| --..----> 0x08006c74      224a           ldr r2, [0x08006d00]        ; [0x8006d00:4]=0x40023814
| ||::|::   0x08006c76      0029           cmp r1, 0
| ||::|::   0x08006c78      1168           ldr r1, [r2]
| ========< 0x08006c7a      02d0           beq 0x8006c82
| ||::|::   0x08006c7c      0843           orrs r0, r1
| ||::|::   0x08006c7e      1060           str r0, [r2]
| ||::|::   0x08006c80      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006c7a (RCC_APB2PeriphResetCmd)
| --------> 0x08006c82      21ea0000       bic.w r0, r1, r0
| ||::|::   0x08006c86      1060           str r0, [r2]
\ ||::|::   0x08006c88      7047           bx lr
/ (fcn) RCC_APB1PeriphResetCmd 22
|       Caller: _Periphs_Reset USART_DeInit
|   RCC_APB1PeriphResetCmd ();
| ||::|::      ; XREFS: JMP 0x08007446  JMP 0x08007464  JMP 0x08007482  JMP 0x080074a0  JMP 0x0800793c  JMP 0x08007956  JMP 0x08007970  JMP 0x0800798a  JMP 0x080079a4  
| ||::|::      ; XREFS: JMP 0x080079be  CALL 0x08007438  CALL 0x08007456  CALL 0x08007474  CALL 0x08007492  CALL 0x08007930  CALL 0x0800794a  CALL 0x08007964  CALL 0x0800797e  
| ||::|::      ; XREFS: CALL 0x08007998  CALL 0x080079b2  
| --------> 0x08006c8a      1e4a           ldr r2, [0x08006d04]        ; [0x8006d04:4]=0x40023818 ; RCC_APB1RSTR r1: state, r0: bit to update
| ||::|::   0x08006c8c      0029           cmp r1, 0
| ||::|::   0x08006c8e      1168           ldr r1, [r2]
| ========< 0x08006c90      02d0           beq 0x8006c98
| ||::|::   0x08006c92      0843           orrs r0, r1
| ||::|::   0x08006c94      1060           str r0, [r2]
| ||::|::   0x08006c96      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006c90 (RCC_APB1PeriphResetCmd)
| --------> 0x08006c98      21ea0000       bic.w r0, r1, r0            ; 0 has no effect
| ||::|::   0x08006c9c      1060           str r0, [r2]
\ ||::|::   0x08006c9e      7047           bx lr
/ (fcn) RCC_GetFlagStatus 28
|       Caller: _Peripherals_Config _KBD_UseHSIClock RCC_WaitForHSEStartUp
|   RCC_GetFlagStatus ();
| ||::|::      ; CALL XREF from 0x08004214 (_Peripherals_Config)
| ||::|::      ; CALL XREF from 0x0800427e (_KBD_UseHSIClock)
| ||::|::      ; CALL XREF from 0x080042bc (_KBD_UseHSIClock)
| ||::|::      ; CALL XREF from 0x08006aea (RCC_WaitForHSEStartUp)
| ||::|::      ; CALL XREF from 0x08006b02 (RCC_WaitForHSEStartUp)
| ||::|::   0x08006ca0      0649           ldr r1, [0x08006cbc]        ; [0x8006cbc:4]=0x40023800 ; performs shifts to find which bit to check. r0 defines which clk register
| ||::|::   0x08006ca2      4209           lsrs r2, r0, 5
| ||::|::   0x08006ca4      012a           cmp r2, 1                   ; 1
| ========< 0x08006ca6      01d1           bne 0x8006cac
| ||::|::   0x08006ca8      0968           ldr r1, [r1]
| ========< 0x08006caa      00e0           b 0x8006cae
| ||::|::      ; JMP XREF from 0x08006ca6 (RCC_GetFlagStatus)
| --------> 0x08006cac      496b           ldr r1, [r1, 0x34]
| ||::|::      ; JMP XREF from 0x08006caa (RCC_GetFlagStatus)
| --------> 0x08006cae      00f01f00       and r0, r0, 0x1f
| ||::|::   0x08006cb2      21fa00f0       lsr.w r0, r1, r0
| ||::|::   0x08006cb6      00f00100       and r0, r0, 1
\ ||::|::   0x08006cba      7047           bx lr
  ||::|::      ; DATA XREF from 0x08006aa4 (RCC_DeInit)
  ||::|::      ; DATA XREF from 0x08006ca0 (RCC_GetFlagStatus)
  ||::|::   0x08006cbc      .dword 0x40023800
  ||::|::      ; DATA XREF from 0x08006ab0 (RCC_DeInit)
  ||::|::   0x08006cc0      .dword 0x88ffc00c
  ||::|::      ; DATA XREF from 0x08006ab8 (RCC_DeInit)
  ||::|::   0x08006cc4      .dword 0xeefefffe
  ||::|::      ; DATA XREF from 0x08006ad4 (RCC_HSEConfig)
  ||::|::   0x08006cc8      .dword 0x40023802
  ||::|::      ; DATA XREF from 0x08006b10 (RCC_MSIRangeConfig)
  ||::|::      ; DATA XREF from 0x08006b90 (RCC_GetClocksFreq)
  ||::|::   0x08006ccc      .dword 0x40023804
  ||::|::      ; DATA XREF from 0x08006b1e (RCC_MSICmd)
  ||::|::   0x08006cd0      .dword 0x42470020
  ||::|::      ; DATA XREF from 0x08006b24 (RCC_HSICmd)
  ||::|::   0x08006cd4      .dword 0x42470000
  ||::|::      ; DATA XREF from 0x08006b2a (RCC_LSEConfig)
  ||::|::   0x08006cd8      .dword 0x40023835
  ||::|::      ; DATA XREF from 0x08006b34 (RCC_LSICmd)
  ||::|::   0x08006cdc      .dword 0x42470680
  ||::|::      ; DATA XREF from 0x08006b3e (RCC_PLLConfig)
  ||::|::   0x08006ce0      .dword 0x4002380a
  ||::|::      ; DATA XREF from 0x08006b44 (RCC_PLLCmd)
  ||::|::   0x08006ce4      .dword 0x42470060
  ||::|::      ; DATA XREF from 0x08006b4a (RCC_SYSCLKConfig)
  ||::|::      ; DATA XREF from 0x08006b58 (RCC_GetSYSCLKSource)
  ||::|::      ; DATA XREF from 0x08006b62 (RCC_HCLKConfig)
  ||::|::      ; DATA XREF from 0x08006b70 (RCC_PCLK1Config)
  ||::|::      ; DATA XREF from 0x08006b7e (RCC_PCLK2Config)
  ||::|::   0x08006ce8      .dword 0x40023808
  ||::|::      ; DATA XREF from 0x08006bba (RCC_GetClocksFreq)
  ||::|::      ; DATA XREF from 0x08006bd8 (RCC_GetClocksFreq)
  ||::|::   0x08006cec      .dword 0x00f42400
  ||::|::      ; DATA XREF from 0x08006bce (RCC_GetClocksFreq)
  ||::|::      ; DATA XREF from 0x08006bfa (RCC_GetClocksFreq)
  ||::|::   0x08006cf0      .dword 0x20000694
  ||::|::      ; DATA XREF from 0x08006c32 (RCC_AHBPeriphClockCmd)
  ||::|::   0x08006cf4      .dword 0x4002381c
  ||::|::      ; DATA XREF from 0x08006c48 (RCC_APB2PeriphClockCmd)
  ||::|::   0x08006cf8      .dword 0x40023820
  ||::|::      ; DATA XREF from 0x08006c5e (RCC_APB1PeriphClockCmd)
  ||::|::   0x08006cfc      .dword 0x40023824
  ||::|::      ; DATA XREF from 0x08006c74 (RCC_APB2PeriphResetCmd)
  ||::|::   0x08006d00      .dword 0x40023814
  ||::|::      ; DATA XREF from 0x08006c8a (RCC_APB1PeriphResetCmd)
  ||::|::   0x08006d04      .dword 0x40023818
/ (fcn) FLASH_SetLatency 16
|       Caller: _Peripherals_Config _Periph_LowPowerMode
|   FLASH_SetLatency ();
| ||::|::      ; CALL XREF from 0x080041cc (_Peripherals_Config)
| ||::|::      ; CALL XREF from 0x080062ae (_Periph_LowPowerMode)
| ||::|::   0x08006d08      dff84011       ldr.w r1, [0x08006e4c]      ; [0x8006e4c:4]=0x40023c00
| ||::|::   0x08006d0c      0a68           ldr r2, [r1]
| ||::|::   0x08006d0e      5208           lsrs r2, r2, 1
| ||::|::   0x08006d10      50ea4200       orrs.w r0, r0, r2, lsl 1    ; set 0wait mode if prefetch enabled?
| ||::|::   0x08006d14      0860           str r0, [r1]
\ ||::|::   0x08006d16      7047           bx lr
/ (fcn) FLASH_PrefetchBufferCmd 26
|       Caller: _Peripherals_Config _Periph_LowPowerMode
|   FLASH_PrefetchBufferCmd ();
| ||::|::      ; CALL XREF from 0x080041c6 (_Peripherals_Config)
| ||::|::      ; CALL XREF from 0x080062b4 (_Periph_LowPowerMode)
| ||::|::   0x08006d18      dff83011       ldr.w r1, [0x08006e4c]      ; [0x8006e4c:4]=0x40023c00
| ||::|::   0x08006d1c      0028           cmp r0, 0
| ||::|::   0x08006d1e      0868           ldr r0, [r1]
| ========< 0x08006d20      03d0           beq 0x8006d2a
| ||::|::   0x08006d22      40f00200       orr r0, r0, 2               ; enable prefetch
| ||::|::   0x08006d26      0860           str r0, [r1]
| ||::|::   0x08006d28      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006d20 (FLASH_PrefetchBufferCmd)
| --------> 0x08006d2a      20f00200       bic r0, r0, 2               ; disable prefetch
| ||::|::   0x08006d2e      0860           str r0, [r1]
\ ||::|::   0x08006d30      7047           bx lr
/ (fcn) FLASH_ReadAccess64Cmd 26
|       Caller: _Peripherals_Config _Periph_LowPowerMode
|   FLASH_ReadAccess64Cmd ();
| ||::|::      ; CALL XREF from 0x080041c0 (_Peripherals_Config)
| ||::|::      ; CALL XREF from 0x080062ba (_Periph_LowPowerMode)
| ||::|::   0x08006d32      dff81811       ldr.w r1, [0x08006e4c]      ; [0x8006e4c:4]=0x40023c00
| ||::|::   0x08006d36      0028           cmp r0, 0
| ||::|::   0x08006d38      0868           ldr r0, [r1]
| ========< 0x08006d3a      03d0           beq 0x8006d44
| ||::|::   0x08006d3c      40f00400       orr r0, r0, 4               ; 64bit access
| ||::|::   0x08006d40      0860           str r0, [r1]
| ||::|::   0x08006d42      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006d3a (FLASH_ReadAccess64Cmd)
| --------> 0x08006d44      20f00400       bic r0, r0, 4               ; 32bit access
| ||::|::   0x08006d48      0860           str r0, [r1]
\ ||::|::   0x08006d4a      7047           bx lr
/ (fcn) FLASH_SLEEPPowerDownCmd 26
|       Caller: _Periph_LowPowerMode
|   FLASH_SLEEPPowerDownCmd ();
| ||::|::      ; CALL XREF from 0x080062c0 (_Periph_LowPowerMode)
| ||::|::   0x08006d4c      dff8fc10       ldr.w r1, [0x08006e4c]      ; [0x8006e4c:4]=0x40023c00
| ||::|::   0x08006d50      0028           cmp r0, 0
| ||::|::   0x08006d52      0868           ldr r0, [r1]
| ========< 0x08006d54      03d0           beq 0x8006d5e
| ||::|::   0x08006d56      40f00800       orr r0, r0, 8
| ||::|::   0x08006d5a      0860           str r0, [r1]
| ||::|::   0x08006d5c      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006d54 (FLASH_SLEEPPowerDownCmd)
| --------> 0x08006d5e      20f00800       bic r0, r0, 8
| ||::|::   0x08006d62      0860           str r0, [r1]
\ ||::|::   0x08006d64      7047           bx lr
/ (fcn) FLASH_Unlock 24
|       Caller: _EEPROM_Write_Struct_1 _KBD_LoadSyncCode _EEPROM_Write_Something3 _KBD_StoreSyncCode
|               _KBD_StoreLayout _KBD_LoadLayoutAndPWRFlags _KBD_StoreAutoPWROffFlag _KBD_LoadLayout
|               init_some_10_struct2
|   FLASH_Unlock ();
| ||::|::      ; XREFS: CALL 0x080066a0  CALL 0x080066c6  CALL 0x080066f2  CALL 0x08006732  CALL 0x080067d6  CALL 0x080067fa  CALL 0x08006836  CALL 0x08006884  CALL 0x080068b8  
| ||::|::   0x08006d66      dff8e800       ldr.w r0, [0x08006e50]      ; [0x8006e50:4]=0x40023c04 ; FLASH_PECR
| ||::|::   0x08006d6a      0168           ldr r1, [r0]
| ||::|::   0x08006d6c      c907           lsls r1, r1, 0x1f
| ========< 0x08006d6e      05d5           bpl 0x8006d7c
| ||::|::   0x08006d70      dff8e010       ldr.w r1, [0x08006e54]      ; [0x8006e54:4]=0x89abcdef ; PEKEY1
| ||::|::   0x08006d74      8160           str r1, [r0, 8]
| ||::|::   0x08006d76      dff8e010       ldr.w r1, [0x08006e58]      ; [0x8006e58:4]=0x2030405 ; PEKEY2
| ||::|::   0x08006d7a      8160           str r1, [r0, 8]
| ||::|::      ; JMP XREF from 0x08006d6e (FLASH_Unlock)
\ --------> 0x08006d7c      7047           bx lr
/ (fcn) FLASH_Lock 14
|       Caller: init_some_10_struct2
|   FLASH_Lock ();
| ||::|::      ; XREFS: JMP 0x080066c0  JMP 0x080066e4  JMP 0x0800671e  JMP 0x080067ea  JMP 0x0800681a  JMP 0x08006872  JMP 0x080068a4  JMP 0x080068d0  CALL 0x080067c6  
| --------> 0x08006d7e      dff8d000       ldr.w r0, [0x08006e50]      ; [0x8006e50:4]=0x40023c04 ; FLASH_PECR
| ||::|::   0x08006d82      0168           ldr r1, [r0]
| ||::|::   0x08006d84      41f00101       orr r1, r1, 1               ; lock FLASH_PECR and eeprom
| ||::|::   0x08006d88      0160           str r1, [r0]
\ ||::|::   0x08006d8a      7047           bx lr
/ (fcn) DATA_EEPROM_EraseWord 22
|       Caller: DATA_EEPROM_FastProgramByte
|   DATA_EEPROM_EraseWord ();
| ||::|::      ; CALL XREF from 0x08006dd8 (DATA_EEPROM_FastProgramByte)
| ||::|::   0x08006d8c      10b5           push {r4, lr}               ; check if this the correct funtion name
| ||::|::   0x08006d8e      0446           mov r4, r0
| ||::|::   0x08006d90      4ff40040       mov.w r0, 0x8000
| ||::|::   0x08006d94      00f064f8       bl FLASH_WaitForLastOperation
| ||::|::   0x08006d98      0428           cmp r0, 4                   ; 4
| ========< 0x08006d9a      01d1           bne 0x8006da0
| ||::|::   0x08006d9c      0021           movs r1, 0
| ||::|::   0x08006d9e      2160           str r1, [r4]
| ||::|::      ; JMP XREF from 0x08006d9a (DATA_EEPROM_EraseWord)
\ --------> 0x08006da0      10bd           pop {r4, pc}
/ (fcn) DATA_EEPROM_FastProgramByte 82
|       Caller: _EEPROM_Write_Struct_1 _KBD_StoreLayout _EEPROM_Write_Something3 _KBD_StoreAutoPWROffFlag
|   DATA_EEPROM_FastProgramByte ();
| ||::|::      ; CALL XREF from 0x080066b4 (_KBD_StoreAutoPWROffFlag)
| ||::|::      ; CALL XREF from 0x08006706 (_EEPROM_Write_Struct_1)
| ||::|::      ; CALL XREF from 0x08006846 (_EEPROM_Write_Something3)
| ||::|::      ; CALL XREF from 0x0800685e (_EEPROM_Write_Something3)
| ||::|::      ; CALL XREF from 0x08006890 (_KBD_StoreLayout)
| ||::|::   0x08006da2      70b5           push {r4, r5, r6, lr}
| ||::|::   0x08006da4      0446           mov r4, r0
| ||::|::   0x08006da6      0d46           mov r5, r1
| ||::|::   0x08006da8      4ff40040       mov.w r0, 0x8000
| ||::|::   0x08006dac      00f058f8       bl FLASH_WaitForLastOperation
| ||::|::   0x08006db0      0428           cmp r0, 4                   ; 4
| ========< 0x08006db2      1ed1           bne 0x8006df2
| ||::|::   0x08006db4      dff89800       ldr.w r0, [0x08006e50]      ; [0x8006e50:4]=0x40023c04
| ||::|::   0x08006db8      0168           ldr r1, [r0]
| ||::|::   0x08006dba      21f48071       bic r1, r1, 0x100
| ||::|::   0x08006dbe      0160           str r1, [r0]
| ||::|::   0x08006dc0      002d           cmp r5, 0
| ========< 0x08006dc2      05d0           beq 0x8006dd0
| ||::|::   0x08006dc4      2570           strb r5, [r4]
| ||::|::   0x08006dc6      4ff40040       mov.w r0, 0x8000
| ||::|::   0x08006dca      bde87040       pop.w {r4, r5, r6, lr}
| ========< 0x08006dce      47e0           b FLASH_WaitForLastOperation
| ||::|::      ; JMP XREF from 0x08006dc2 (DATA_EEPROM_FastProgramByte)
| --------> 0x08006dd0      a508           lsrs r5, r4, 2
| ||::|::   0x08006dd2      ad00           lsls r5, r5, 2
| ||::|::   0x08006dd4      2e68           ldr r6, [r5]
| ||::|::   0x08006dd6      2846           mov r0, r5
| ||::|::   0x08006dd8      fff7d8ff       bl DATA_EEPROM_EraseWord
| ||::|::   0x08006ddc      ff20           movs r0, 0xff               ; 255
| ||::|::   0x08006dde      04f00301       and r1, r4, 3
| ||::|::   0x08006de2      c900           lsls r1, r1, 3
| ||::|::   0x08006de4      8840           lsls r0, r1
| ||::|::   0x08006de6      26ea0001       bic.w r1, r6, r0
| ||::|::   0x08006dea      2846           mov r0, r5
| ||::|::   0x08006dec      bde87040       pop.w {r4, r5, r6, lr}
| ========< 0x08006df0      00e0           b DATA_EEPROM_FastProgramWord
| ||::|::      ; JMP XREF from 0x08006db2 (DATA_EEPROM_FastProgramByte)
\ --------> 0x08006df2      70bd           pop {r4, r5, r6, pc}
/ (fcn) DATA_EEPROM_FastProgramWord 44
|       Caller: _KBD_StoreSyncCode _EEPROM_Write_Struct_1
|   DATA_EEPROM_FastProgramWord ();
| ||::|::      ; JMP XREF from 0x08006df0 (DATA_EEPROM_FastProgramByte)
| ||::|::      ; CALL XREF from 0x08006712 (_EEPROM_Write_Struct_1)
| ||::|::      ; CALL XREF from 0x08006802 (_KBD_StoreSyncCode)
| ||::|::      ; CALL XREF from 0x0800680e (_KBD_StoreSyncCode)
| --------> 0x08006df4      38b5           push {r3, r4, r5, lr}
| ||::|::   0x08006df6      0446           mov r4, r0
| ||::|::   0x08006df8      0d46           mov r5, r1
| ||::|::   0x08006dfa      4ff40040       mov.w r0, 0x8000
| ||::|::   0x08006dfe      00f02ff8       bl FLASH_WaitForLastOperation
| ||::|::   0x08006e02      0428           cmp r0, 4                   ; 4
| ========< 0x08006e04      0bd1           bne 0x8006e1e
| ||::|::   0x08006e06      dff84800       ldr.w r0, [0x08006e50]      ; [0x8006e50:4]=0x40023c04
| ||::|::   0x08006e0a      0168           ldr r1, [r0]
| ||::|::   0x08006e0c      21f48071       bic r1, r1, 0x100
| ||::|::   0x08006e10      0160           str r1, [r0]
| ||::|::   0x08006e12      2560           str r5, [r4]
| ||::|::   0x08006e14      4ff40040       mov.w r0, 0x8000
| ||::|::   0x08006e18      bde83240       pop.w {r1, r4, r5, lr}
| ========< 0x08006e1c      20e0           b FLASH_WaitForLastOperation
| ||::|::      ; JMP XREF from 0x08006e04 (DATA_EEPROM_FastProgramWord)
\ --------> 0x08006e1e      32bd           pop {r1, r4, r5, pc}
/ (fcn) FLASH_ClearFlag 6
|       Caller: _EEPROM_Write_Struct_1 _KBD_StoreAutoPWROffFlag
|   FLASH_ClearFlag ();
| ||::|::      ; CALL XREF from 0x080066a8 (_KBD_StoreAutoPWROffFlag)
| ||::|::      ; CALL XREF from 0x080066fa (_EEPROM_Write_Struct_1)
| ||::|::   0x08006e20      0e49           ldr r1, [0x08006e5c]        ; [0x8006e5c:4]=0x40023c18
| ||::|::   0x08006e22      0860           str r0, [r1]
\ ||::|::   0x08006e24      7047           bx lr
/ (fcn) FLASH_GetStatus 36
|       Caller: FLASH_WaitForLastOperation
|   FLASH_GetStatus ();
| ||::|::      ; CALL XREF from 0x08006e6c (FLASH_WaitForLastOperation)
| ||::|::      ; CALL XREF from 0x08006e76 (FLASH_WaitForLastOperation)
| ||::|::   0x08006e26      0420           movs r0, 4                  ; 4 ; ret 1: busy, 2: write err, 3: other err
| ||::|::   0x08006e28      0c49           ldr r1, [0x08006e5c]        ; [0x8006e5c:4]=0x40023c18 ; FLASH_SR
| ||::|::   0x08006e2a      0a68           ldr r2, [r1]
| ||::|::   0x08006e2c      d207           lsls r2, r2, 0x1f           ; BSY bit ?
| ========< 0x08006e2e      01d5           bpl 0x8006e34
| ||::|::   0x08006e30      0120           movs r0, 1                  ; 1
| ||::|::   0x08006e32      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006e2e (FLASH_GetStatus)
| --------> 0x08006e34      0a68           ldr r2, [r1]
| ||::|::   0x08006e36      d205           lsls r2, r2, 0x17           ; WRPERR bit ?
| ========< 0x08006e38      01d5           bpl 0x8006e3e
| ||::|::   0x08006e3a      0220           movs r0, 2                  ; 2
| ||::|::   0x08006e3c      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006e38 (FLASH_GetStatus)
| --------> 0x08006e3e      0968           ldr r1, [r1]
| ||::|::   0x08006e40      11f4f05f       tst.w r1, 0x1e00            ; PGAERR, SIZERR, OPTVERR bits
| ========< 0x08006e44      00d0           beq 0x8006e48
| ||::|::   0x08006e46      0320           movs r0, 3                  ; 3
| ||::|::      ; JMP XREF from 0x08006e44 (FLASH_GetStatus)
\ --------> 0x08006e48      7047           bx lr
  ||::|::   0x08006e4a      0000           movs r0, r0
  ||::|::      ; DATA XREF from 0x08006d08 (FLASH_SetLatency)
  ||::|::      ; DATA XREF from 0x08006d18 (FLASH_PrefetchBufferCmd)
  ||::|::      ; DATA XREF from 0x08006d32 (FLASH_ReadAccess64Cmd)
  ||::|::      ; DATA XREF from 0x08006d4c (FLASH_SLEEPPowerDownCmd)
  ||::|::   0x08006e4c      .dword 0x40023c00
  ||::|::      ; DATA XREF from 0x08006d66 (FLASH_Unlock)
  ||::|::      ; DATA XREF from 0x08006d7e (FLASH_Lock)
  ||::|::      ; DATA XREF from 0x08006db4 (DATA_EEPROM_FastProgramByte)
  ||::|::      ; DATA XREF from 0x08006e06 (DATA_EEPROM_FastProgramWord)
  ||::|::   0x08006e50      .dword 0x40023c04
  ||::|::      ; DATA XREF from 0x08006d70 (FLASH_Unlock)
  ||::|::   0x08006e54      .dword 0x89abcdef
  ||::|::      ; DATA XREF from 0x08006d76 (FLASH_Unlock)
  ||::|::   0x08006e58      .dword 0x02030405
  ||::|::      ; DATA XREF from 0x08006e20 (FLASH_ClearFlag)
  ||::|::      ; DATA XREF from 0x08006e28 (FLASH_GetStatus)
  ||::|::   0x08006e5c      .dword 0x40023c18
/ (fcn) FLASH_WaitForLastOperation 60
|       Caller: DATA_EEPROM_FastProgramByte DATA_EEPROM_EraseWord DATA_EEPROM_FastProgramWord
|   FLASH_WaitForLastOperation ();
| ||::|::      ; JMP XREF from 0x08006dce (DATA_EEPROM_FastProgramByte)
| ||::|::      ; JMP XREF from 0x08006e1c (DATA_EEPROM_FastProgramWord)
| ||::|::      ; CALL XREF from 0x08006d94 (DATA_EEPROM_EraseWord)
| ||::|::      ; CALL XREF from 0x08006dac (DATA_EEPROM_FastProgramByte)
| --------> 0x08006e60      10b5           push {r4, lr}
| ||::|::   0x08006e62      82b0           sub sp, 8
| ||::|::   0x08006e64      0446           mov r4, r0
| ||::|::   0x08006e66      0420           movs r0, 4                  ; 4
| ||::|::   0x08006e68      8df80000       strb.w r0, [sp]
| ||::|::   0x08006e6c      fff7dbff       bl FLASH_GetStatus
| ||::|::   0x08006e70      8df80000       strb.w r0, [sp]             ; store status
| ========< 0x08006e74      04e0           b 0x8006e80
| ||::|::      ; JMP XREF from 0x08006e8a (FLASH_WaitForLastOperation)
| --------> 0x08006e76      fff7d6ff       bl FLASH_GetStatus
| ||::|::   0x08006e7a      8df80000       strb.w r0, [sp]
| ||::|::   0x08006e7e      641e           subs r4, r4, 1
| ||::|::      ; JMP XREF from 0x08006e74 (FLASH_WaitForLastOperation)
| --------> 0x08006e80      9df80000       ldrb.w r0, [sp]
| ||::|::   0x08006e84      0128           cmp r0, 1                   ; 1 ; is flash busy?
| ========< 0x08006e86      01d1           bne 0x8006e8c
| ||::|::   0x08006e88      002c           cmp r4, 0
| ========< 0x08006e8a      f4d1           bne 0x8006e76
| ||::|::      ; JMP XREF from 0x08006e86 (FLASH_WaitForLastOperation)
| --------> 0x08006e8c      002c           cmp r4, 0
| ========< 0x08006e8e      02d1           bne 0x8006e96
| ||::|::   0x08006e90      0520           movs r0, 5                  ; 5
| ||::|::   0x08006e92      8df80000       strb.w r0, [sp]
| ||::|::      ; JMP XREF from 0x08006e8e (FLASH_WaitForLastOperation)
| --------> 0x08006e96      9df80000       ldrb.w r0, [sp]
\ ||::|::   0x08006e9a      16bd           pop {r1, r2, r4, pc}
/ (fcn) PWR_PVDCmd 6
|       Caller: _KBD_LowPowerMode
|   PWR_PVDCmd ();
| ||::|::      ; CALL XREF from 0x08006660 (_KBD_LowPowerMode)
| ||::|::   0x08006e9c      1649           ldr r1, [0x08006ef8]        ; [0x8006ef8:4]=0x420e0010
| ||::|::   0x08006e9e      0860           str r0, [r1]
\ ||::|::   0x08006ea0      7047           bx lr
/ (fcn) PWR_UltraLowPowerCmd 6
|       Caller: _KBD_LowPowerMode
|   PWR_UltraLowPowerCmd ();
| ||::|::      ; CALL XREF from 0x08006666 (_KBD_LowPowerMode)
| ||::|::   0x08006ea2      1649           ldr r1, [0x08006efc]        ; [0x8006efc:4]=0x420e0024
| ||::|::   0x08006ea4      0860           str r0, [r1]
\ ||::|::   0x08006ea6      7047           bx lr
/ (fcn) PWR_VoltageScalingConfig 18
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_LowPowerMode
|   PWR_VoltageScalingConfig ();
| ||::|::      ; CALL XREF from 0x080041de (_Peripherals_Config)
| ||::|::      ; CALL XREF from 0x080062d2 (_Periph_LowPowerMode)
| ||::|::      ; CALL XREF from 0x08006648 (_KBD_LowPowerMode)
| ||::|::   0x08006ea8      1249           ldr r1, [0x08006ef4]        ; [0x8006ef4:4]=0x40007000
| ||::|::   0x08006eaa      0a68           ldr r2, [r1]
| ||::|::   0x08006eac      22f4c052       bic r2, r2, 0x1800
| ||::|::   0x08006eb0      1043           orrs r0, r2
| ||::|::   0x08006eb2      20f00c00       bic r0, r0, 0xc             ; avoid clearing wakeup and standby flags
| ||::|::   0x08006eb6      0860           str r0, [r1]
\ ||::|::   0x08006eb8      7047           bx lr
/ (fcn) PWR_EnterLowPowerRunMode 40
|       Caller: _KBD_PWRManage _KBD_LowPowerMode
|   PWR_EnterLowPowerRunMode ();
| ||::|::      ; CALL XREF from 0x08006688 (_KBD_LowPowerMode)
| ||::|::      ; CALL XREF from 0x08008dd2 (_KBD_PWRManage)
| ||::|::   0x08006eba      0e49           ldr r1, [0x08006ef4]        ; [0x8006ef4:4]=0x40007000
| ||::|::   0x08006ebc      0028           cmp r0, 0
| ||::|::   0x08006ebe      0868           ldr r0, [r1]
| ========< 0x08006ec0      07d0           beq 0x8006ed2
| ||::|::   0x08006ec2      40f00100       orr r0, r0, 1
| ||::|::   0x08006ec6      0860           str r0, [r1]
| ||::|::   0x08006ec8      0868           ldr r0, [r1]
| ||::|::   0x08006eca      40f48040       orr r0, r0, 0x4000
| ||::|::   0x08006ece      0860           str r0, [r1]
| ||::|::   0x08006ed0      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006ec0 (PWR_EnterLowPowerRunMode)
| --------> 0x08006ed2      20f48040       bic r0, r0, 0x4000
| ||::|::   0x08006ed6      0860           str r0, [r1]
| ||::|::   0x08006ed8      0868           ldr r0, [r1]
| ||::|::   0x08006eda      4008           lsrs r0, r0, 1
| ||::|::   0x08006edc      4000           lsls r0, r0, 1
| ||::|::   0x08006ede      0860           str r0, [r1]
\ ||::|::   0x08006ee0      7047           bx lr
/ (fcn) PWR_GetFlagStatus 16
|       Caller: _Peripherals_Config _Periph_LowPowerMode _KBD_PWRManage _KBD_LowPowerMode
|   PWR_GetFlagStatus ();
| ||::|::      ; CALL XREF from 0x080041e4 (_Peripherals_Config)
| ||::|::      ; CALL XREF from 0x080062d8 (_Periph_LowPowerMode)
| ||::|::      ; CALL XREF from 0x0800664e (_KBD_LowPowerMode)
| ||::|::      ; CALL XREF from 0x0800668e (_KBD_LowPowerMode)
| ||::|::      ; CALL XREF from 0x08008dd8 (_KBD_PWRManage)
| ||::|::   0x08006ee2      0021           movs r1, 0
| ||::|::   0x08006ee4      064a           ldr r2, [0x08006f00]        ; [0x8006f00:4]=0x40007004 ; PWR_CSR
| ||::|::   0x08006ee6      1268           ldr r2, [r2]
| ||::|::   0x08006ee8      0242           tst r2, r0
| ========< 0x08006eea      00d0           beq 0x8006eee
| ||::|::   0x08006eec      0121           movs r1, 1                  ; 1
| ||::|::      ; JMP XREF from 0x08006eea (PWR_GetFlagStatus)
| --------> 0x08006eee      0846           mov r0, r1
\ ||::|::   0x08006ef0      7047           bx lr
  ||::|::   0x08006ef2      0000           movs r0, r0
  ||::|::      ; DATA XREF from 0x08006ea8 (PWR_VoltageScalingConfig)
  ||::|::      ; DATA XREF from 0x08006eba (PWR_EnterLowPowerRunMode)
  ||::|::   0x08006ef4      .dword 0x40007000
  ||::|::      ; DATA XREF from 0x08006e9c (PWR_PVDCmd)
  ||::|::   0x08006ef8      .dword 0x420e0010
  ||::|::      ; DATA XREF from 0x08006ea2 (PWR_UltraLowPowerCmd)
  ||::|::   0x08006efc      .dword 0x420e0024
  ||::|::      ; DATA XREF from 0x08006ee4 (PWR_GetFlagStatus)
  ||::|::   0x08006f00      .dword 0x40007004
/ (fcn) NVIC_PriorityGroupConfig 10
|       Caller: _USART2_Init _TIM4_LFreqConfig _USB_Interrupts_Config _USB_Interrupts_Disable
|               _TIM4_HFreqConfig _USART3_Init
|   NVIC_PriorityGroupConfig ();
| ||::|::      ; XREFS: JMP 0x080042cc  CALL 0x0800474a  CALL 0x08004f0a  CALL 0x080050ce  CALL 0x080061ae  CALL 0x08006212  CALL 0x08009076  
| ||::`---> 0x08006f04      1f49           ldr r1, [0x08006f84]        ; [0x8006f84:4]=0x5fa0000 ; Must write 0x5fa or the operation will be ignored
| ||:: ::   0x08006f06      0843           orrs r0, r1
| ||:: ::   0x08006f08      1f49           ldr r1, [0x08006f88]        ; [0x8006f88:4]=0xe000ed0c ; SCB_AIRCR
| ||:: ::   0x08006f0a      0860           str r0, [r1]
\ ||:: ::   0x08006f0c      7047           bx lr
/ (fcn) NVIC_Init 92
|       Caller: _USART2_DMAInit _USB_Interrupts_Config _TIM4_LFreqConfig _USART2_Init _USB_Interrupts_Disable
|               _TIM4_HFreqConfig _KBD_WKUPInterruptsEnable _USART3_Init _USART3_DMAInit
|               _KBD_WKUPInterruptsEnable_2
|   NVIC_Init ();
| ||:: ::      ; XREFS: CALL 0x080045ca  CALL 0x080045e8  CALL 0x08004606  CALL 0x08004768  CALL 0x0800477e  CALL 0x08004f26  CALL 0x08004f7c  CALL 0x080050e8  CALL 0x08005132  
| ||:: ::      ; XREFS: CALL 0x080061ca  CALL 0x0800622e  CALL 0x0800640e  CALL 0x0800642c  CALL 0x0800644a  CALL 0x0800908e  CALL 0x080090a6  
| ||:: ::   0x08006f0e      70b4           push {r4, r5, r6}
| ||:: ::   0x08006f10      0378           ldrb r3, [r0]
| ||:: ::   0x08006f12      1a46           mov r2, r3
| ||:: ::   0x08006f14      0121           movs r1, 1                  ; 1
| ||:: ::   0x08006f16      c478           ldrb r4, [r0, 3]
| ||:: ::   0x08006f18      002c           cmp r4, 0
| ||::,===< 0x08006f1a      1cd0           beq 0x8006f56
| ||::|::   0x08006f1c      1a4b           ldr r3, [0x08006f88]        ; [0x8006f88:4]=0xe000ed0c
| ||::|::   0x08006f1e      1b68           ldr r3, [r3]
| ||::|::   0x08006f20      03f4e063       and r3, r3, 0x700
| ||::|::   0x08006f24      c3f5e063       rsb.w r3, r3, 0x700
| ||::|::   0x08006f28      1b0a           lsrs r3, r3, 8
| ||::|::   0x08006f2a      4478           ldrb r4, [r0, 1]
| ||::|::   0x08006f2c      c3f10405       rsb.w r5, r3, 4
| ||::|::   0x08006f30      ac40           lsls r4, r5
| ||::|::   0x08006f32      8578           ldrb r5, [r0, 2]
| ||::|::   0x08006f34      0f26           movs r6, 0xf                ; 15
| ||::|::   0x08006f36      46fa03f3       asr.w r3, r6, r3
| ||::|::   0x08006f3a      2b40           ands r3, r5
| ||::|::   0x08006f3c      2343           orrs r3, r4
| ||::|::   0x08006f3e      1b01           lsls r3, r3, 4
| ||::|::   0x08006f40      124c           ldr r4, [0x08006f8c]        ; [0x8006f8c:4]=0xe000e400
| ||::|::   0x08006f42      1355           strb r3, [r2, r4]
| ||::|::   0x08006f44      0078           ldrb r0, [r0]
| ||::|::   0x08006f46      00f01f02       and r2, r0, 0x1f
| ||::|::   0x08006f4a      9140           lsls r1, r2
| ||::|::   0x08006f4c      4011           asrs r0, r0, 5
| ||::|::   0x08006f4e      104a           ldr r2, [0x08006f90]        ; [0x8006f90:4]=0xe000e100
| ||::|::   0x08006f50      42f82010       str.w r1, [r2, r0, lsl 2]
| ========< 0x08006f54      07e0           b 0x8006f66
| ||::|::      ; JMP XREF from 0x08006f1a (NVIC_Init)
| ||::`---> 0x08006f56      03f01f00       and r0, r3, 0x1f
| ||:: ::   0x08006f5a      01fa00f0       lsl.w r0, r1, r0
| ||:: ::   0x08006f5e      5111           asrs r1, r2, 5
| ||:: ::   0x08006f60      0c4a           ldr r2, [0x08006f94]        ; [0x8006f94:4]=0xe000e180
| ||:: ::   0x08006f62      42f82100       str.w r0, [r2, r1, lsl 2]
| ||:: ::      ; JMP XREF from 0x08006f54 (NVIC_Init)
| --------> 0x08006f66      70bc           pop {r4, r5, r6}
\ ||:: ::   0x08006f68      7047           bx lr
/ (fcn) SysTick_CLKSourceConfig 24
|       Caller: _Peripherals_Config _Wait_AHBby8
|   SysTick_CLKSourceConfig ();
| ||:: ::      ; CALL XREF from 0x0800422e (_Peripherals_Config)
| ||:: ::      ; CALL XREF from 0x08007144 (_Wait_AHBby8)
| ||:: ::   0x08006f6a      0b49           ldr r1, [0x08006f98]        ; [0x8006f98:4]=0xe000e010
| ||:: ::   0x08006f6c      0428           cmp r0, 4                   ; 4
| ||:: ::   0x08006f6e      0868           ldr r0, [r1]
| ||::,===< 0x08006f70      03d1           bne 0x8006f7a
| ||::|::   0x08006f72      40f00400       orr r0, r0, 4               ; systick clk source is processor clk (AHB)
| ||::|::   0x08006f76      0860           str r0, [r1]
| ||::|::   0x08006f78      7047           bx lr
| ||::|::      ; JMP XREF from 0x08006f70 (SysTick_CLKSourceConfig)
| ||::`---> 0x08006f7a      20f00400       bic r0, r0, 4               ; systick clk source is AHB/8
| ||:: ::   0x08006f7e      0860           str r0, [r1]
\ ||:: ::   0x08006f80      7047           bx lr
  ||:: ::   0x08006f82      0000           movs r0, r0
  ||:: ::      ; DATA XREF from 0x08006f04 (NVIC_PriorityGroupConfig)
  ||:: ::   0x08006f84      .dword 0x05fa0000
  ||:: ::      ; DATA XREF from 0x08006f08 (NVIC_PriorityGroupConfig)
  ||:: ::      ; DATA XREF from 0x08006f1c (NVIC_Init)
  ||:: ::   0x08006f88      .dword 0xe000ed0c
  ||:: ::      ; DATA XREF from 0x08006f40 (NVIC_Init)
  ||:: ::   0x08006f8c      .dword 0xe000e400
  ||:: ::      ; DATA XREF from 0x08006f4e (NVIC_Init)
  ||:: ::   0x08006f90      .dword 0xe000e100
  ||:: ::      ; DATA XREF from 0x08006f60 (NVIC_Init)
  ||:: ::   0x08006f94      .dword 0xe000e180
  ||:: ::      ; DATA XREF from 0x08006f6a (SysTick_CLKSourceConfig)
  ||:: ::   0x08006f98      .dword 0xe000e010
/ (fcn) GPIO_Init 98
|       Caller: _GPIO_HighSpeedSet _GPIO_Config _GPIO_VeryLowSpeedSet _USB_DisconnectPinConfig
|               _USART2_IOInit _USART3_Init _USB_PA11_12_Config
|   GPIO_Init ();
| ||:: ::      ; XREFS: CALL 0x080042f2  CALL 0x08004312  CALL 0x0800433c  CALL 0x0800435e  CALL 0x08004392  CALL 0x080043c4  CALL 0x080043f8  CALL 0x08004422  CALL 0x08004444  
| ||:: ::      ; XREFS: CALL 0x08004470  CALL 0x080044a2  CALL 0x08004658  CALL 0x08004674  CALL 0x080046ca  CALL 0x08004710  CALL 0x08004e9c  CALL 0x08005076  CALL 0x08006476  
| ||:: ::      ; XREFS: CALL 0x0800649e  CALL 0x080064bc  CALL 0x080064da  CALL 0x0800653e  CALL 0x0800656a  CALL 0x0800658e  CALL 0x080065b4  CALL 0x080065d6  CALL 0x080065fa  
| ||:: ::      ; XREFS: CALL 0x0800661c  CALL 0x08006638  
| ||:: ::   0x08006f9c      f0b4           push {r4, r5, r6, r7}
| ||:: ::      ; JMP XREF from 0x08006f9a (SysTick_CLKSourceConfig + 48)
| ||:: ::   0x08006f9e      0022           movs r2, 0
| ||::,===< 0x08006fa0      29e0           b 0x8006ff6
| ||::|::      ; JMP XREF from 0x08006ff8 (GPIO_Init)
| --------> 0x08006fa2      0123           movs r3, 1                  ; 1
| ||::|::   0x08006fa4      9340           lsls r3, r2
| ||::|::   0x08006fa6      0c68           ldr r4, [r1]
| ||::|::   0x08006fa8      1c40           ands r4, r3
| ||::|::   0x08006faa      9c42           cmp r4, r3
| ========< 0x08006fac      22d1           bne 0x8006ff4
| ||::|::   0x08006fae      0668           ldr r6, [r0]
| ||::|::   0x08006fb0      5400           lsls r4, r2, 1
| ||::|::   0x08006fb2      0325           movs r5, 3                  ; 3
| ||::|::   0x08006fb4      a540           lsls r5, r4
| ||::|::   0x08006fb6      ed43           mvns r5, r5
| ||::|::   0x08006fb8      2e40           ands r6, r5
| ||::|::   0x08006fba      0f79           ldrb r7, [r1, 4]
| ||::|::      ; JMP XREF from 0x08006f98 (SysTick_CLKSourceConfig + 46)
| ||::|::   0x08006fbc      a740           lsls r7, r4
| ||::|::   0x08006fbe      3e43           orrs r6, r7
| ||::|::   0x08006fc0      0660           str r6, [r0]
| ||::|::   0x08006fc2      0e79           ldrb r6, [r1, 4]
| ||::|::   0x08006fc4      012e           cmp r6, 1                   ; 1
| ========< 0x08006fc6      01d0           beq 0x8006fcc
| ||::|::   0x08006fc8      022e           cmp r6, 2                   ; 2
| ========< 0x08006fca      0cd1           bne 0x8006fe6
| ||::|::      ; JMP XREF from 0x08006fc6 (GPIO_Init)
| --------> 0x08006fcc      8668           ldr r6, [r0, 8]
| ||::|::   0x08006fce      2e40           ands r6, r5
| ||::|::   0x08006fd0      4f79           ldrb r7, [r1, 5]
| ||::|::   0x08006fd2      a740           lsls r7, r4
| ||::|::   0x08006fd4      3e43           orrs r6, r7
| ||::|::   0x08006fd6      8660           str r6, [r0, 8]
| ||::|::   0x08006fd8      8688           ldrh r6, [r0, 4]
| ||::|::   0x08006fda      26ea0303       bic.w r3, r6, r3
| ||::|::   0x08006fde      8e79           ldrb r6, [r1, 6]
| ||::|::   0x08006fe0      9640           lsls r6, r2
| ||::|::   0x08006fe2      3343           orrs r3, r6
| ||::|::   0x08006fe4      8380           strh r3, [r0, 4]
| ||::|::      ; JMP XREF from 0x08006fca (GPIO_Init)
| --------> 0x08006fe6      c368           ldr r3, [r0, 0xc]
| ||::|::   0x08006fe8      2b40           ands r3, r5
| ||::|::   0x08006fea      cd79           ldrb r5, [r1, 7]
| ||::|::   0x08006fec      05fa04f4       lsl.w r4, r5, r4
| ||::|::   0x08006ff0      2343           orrs r3, r4
| ||::|::   0x08006ff2      c360           str r3, [r0, 0xc]
| ||::|::      ; JMP XREF from 0x08006fac (GPIO_Init)
| --------> 0x08006ff4      521c           adds r2, r2, 1
| ||::|::      ; JMP XREF from 0x08006fa0 (GPIO_Init)
| ||::`---> 0x08006ff6      102a           cmp r2, 0x10                ; 16
| ========< 0x08006ff8      d3d3           blo 0x8006fa2
| ||:: ::   0x08006ffa      f0bc           pop {r4, r5, r6, r7}
\ ||:: ::   0x08006ffc      7047           bx lr
/ (fcn) GPIO_ReadInputDataBit 14
|       Caller: _KBD_USBPlugCheck _Scan_Matrix _USB_PA11_12_Config
|   GPIO_ReadInputDataBit ();
| ||:: ::      ; XREFS: CALL 0x08004616  CALL 0x0800468c  CALL 0x080046a6  CALL 0x080046d2  CALL 0x080046dc  CALL 0x08007caa  
| ||:: ::   0x08006ffe      0022           movs r2, 0                  ; GPIO_ReadInputDataBit  ??
| ||:: ::   0x08007000      008a           ldrh r0, [r0, 0x10]
| ||:: ::   0x08007002      0842           tst r0, r1
| ||::,===< 0x08007004      00d0           beq 0x8007008
| ||::|::   0x08007006      0122           movs r2, 1                  ; 1
| ||::|::      ; JMP XREF from 0x08007004 (GPIO_ReadInputDataBit)
| ||::`---> 0x08007008      1046           mov r0, r2
\ ||:: ::   0x0800700a      7047           bx lr
/ (fcn) GPIO_ReadOutputDataBit 14
|       Caller: _BLE_P1_0Reset _LED_WakeUpCmd _BLE_P1_0Set
|   GPIO_ReadOutputDataBit ();
| ||:: ::      ; CALL XREF from 0x08004e06 (_BLE_P1_0Set)
| ||:: ::      ; CALL XREF from 0x08004e28 (_BLE_P1_0Reset)
| ||:: ::      ; CALL XREF from 0x08004e64 (_LED_WakeUpCmd)
| ||:: ::   0x0800700c      0022           movs r2, 0                  ; GPIO_ReadOutputDataBit
| ||:: ::   0x0800700e      808a           ldrh r0, [r0, 0x14]
| ||:: ::   0x08007010      0842           tst r0, r1
| ||::,===< 0x08007012      00d0           beq 0x8007016
| ||::|::   0x08007014      0122           movs r2, 1                  ; 1
| ||::|::      ; JMP XREF from 0x08007012 (GPIO_ReadOutputDataBit)
| ||::`---> 0x08007016      1046           mov r0, r2
\ ||:: ::   0x08007018      7047           bx lr
/ (fcn) GPIO_SetBits 4
|       Caller: _Scan_Matrix _MatrixColumns_Set
|   GPIO_SetBits ();
| ||:: ::      ; JMP XREF from 0x08004d0e (USB_Cable_Config)
| ||:: ::      ; CALL XREF from 0x080044ca (_MatrixColumns_Set)
| ||:: ::      ; CALL XREF from 0x08007c44 (_Scan_Matrix)
| |`------> 0x0800701a      0183           strh r1, [r0, 0x18]
\ | :: ::   0x0800701c      7047           bx lr
/ (fcn) GPIO_ResetBits 4
|       Caller: _Scan_Matrix _GPIO_Config
|   GPIO_ResetBits ();
| | :: ::      ; JMP XREF from 0x08004d12 (USB_Cable_Config)
| | :: ::      ; CALL XREF from 0x08004366 (_GPIO_Config)
| | :: ::      ; CALL XREF from 0x08007c1c (_Scan_Matrix)
| | :: ::      ; CALL XREF from 0x08007c30 (_Scan_Matrix)
| `-------> 0x0800701e      4183           strh r1, [r0, 0x1a]
\   :: ::   0x08007020      7047           bx lr
/ (fcn) GPIO_WriteBit 12
|       Caller: _LED_WakeUpCmd _USB_PA11_12_Config
|   GPIO_WriteBit ();
|   :: ::      ; XREFS: JMP 0x08004e18  JMP 0x08004e3a  CALL 0x0800467e  CALL 0x08004698  CALL 0x08004e52  CALL 0x08004e5c  
| --------> 0x08007022      002a           cmp r2, 0
|   ::,===< 0x08007024      01d0           beq 0x800702a
|   ::|::   0x08007026      0183           strh r1, [r0, 0x18]
|   ::|::   0x08007028      7047           bx lr
|   ::|::      ; JMP XREF from 0x08007024 (GPIO_WriteBit)
|   ::`---> 0x0800702a      4183           strh r1, [r0, 0x1a]
\   :: ::   0x0800702c      7047           bx lr
/ (fcn) GPIO_PinAFConfig 38
|       Caller: _USART3_Init _USART2_IOInit
|   GPIO_PinAFConfig ();
|   :: ::      ; CALL XREF from 0x08004ea6 (_USART2_IOInit)
|   :: ::      ; CALL XREF from 0x08004eb0 (_USART2_IOInit)
|   :: ::      ; CALL XREF from 0x08005080 (_USART3_Init)
|   :: ::      ; CALL XREF from 0x0800508a (_USART3_Init)
|   :: ::   0x0800702e      10b4           push {r4}
|   :: ::   0x08007030      cb10           asrs r3, r1, 3
|   :: ::   0x08007032      00eb8300       add.w r0, r0, r3, lsl 2
|   :: ::   0x08007036      01f00701       and r1, r1, 7
|   :: ::   0x0800703a      8900           lsls r1, r1, 2
|   :: ::   0x0800703c      036a           ldr r3, [r0, 0x20]
|   :: ::   0x0800703e      0f24           movs r4, 0xf                ; 15
|   :: ::   0x08007040      8c40           lsls r4, r1
|   :: ::   0x08007042      a343           bics r3, r4
|   :: ::   0x08007044      0362           str r3, [r0, 0x20]
|   :: ::   0x08007046      036a           ldr r3, [r0, 0x20]
|   :: ::   0x08007048      02fa01f1       lsl.w r1, r2, r1
|   :: ::   0x0800704c      1943           orrs r1, r3
|   :: ::   0x0800704e      0162           str r1, [r0, 0x20]
|   :: ::   0x08007050      10bc           pop {r4}
\   :: ::   0x08007052      7047           bx lr
/ (fcn) SYSCFG_EXTILineConfig 36
|       Caller: _GPIO_HighSpeedSet _GPIO_Config _GPIO_VeryLowSpeedSet
|   SYSCFG_EXTILineConfig ();
|   :: ::      ; CALL XREF from 0x0800431a (_GPIO_Config)
|   :: ::      ; CALL XREF from 0x080043cc (_GPIO_Config)
|   :: ::      ; CALL XREF from 0x08004400 (_GPIO_HighSpeedSet)
|   :: ::      ; CALL XREF from 0x080044aa (_GPIO_HighSpeedSet)
|   :: ::      ; CALL XREF from 0x08006546 (_GPIO_VeryLowSpeedSet)
|   :: ::   0x08007054      30b4           push {r4, r5}               ; r1,r0: which port:pin to assign to which EXTI line
|   :: ::   0x08007056      01f00302       and r2, r1, 3
|   :: ::   0x0800705a      9200           lsls r2, r2, 2
|   :: ::   0x0800705c      21f00301       bic r1, r1, 3
|   :: ::   0x08007060      054b           ldr r3, [0x08007078]        ; [0x8007078:4]=0x40010008 ; SYSCFG_EXTICR1
|   :: ::   0x08007062      cc58           ldr r4, [r1, r3]
|   :: ::   0x08007064      0f25           movs r5, 0xf                ; 15
|   :: ::   0x08007066      9540           lsls r5, r2
|   :: ::   0x08007068      ac43           bics r4, r5
|   :: ::   0x0800706a      cc50           str r4, [r1, r3]
|   :: ::   0x0800706c      cc58           ldr r4, [r1, r3]
|   :: ::   0x0800706e      9040           lsls r0, r2
|   :: ::   0x08007070      2043           orrs r0, r4
|   :: ::   0x08007072      c850           str r0, [r1, r3]
|   :: ::   0x08007074      30bc           pop {r4, r5}
\   :: ::   0x08007076      7047           bx lr
    :: ::      ; DATA XREF from 0x08007060 (SYSCFG_EXTILineConfig)
    :: ::   0x08007078      .dword 0x40010008
/ (fcn) EXTI_Init 106
|       Caller: _USB_Interrupts_Config _USB_Interrupts_Disable _KBD_WKUPInterruptsEnable _KBD_WKUPInterruptsEnable_2
|   EXTI_Init ();
|   :: ::      ; XREFS: CALL 0x080044fa  CALL 0x08004520  CALL 0x08004546  CALL 0x08004568  CALL 0x0800458a  CALL 0x080045ac  CALL 0x08004742  CALL 0x0800633e  CALL 0x08006364  
|   :: ::      ; XREFS: CALL 0x0800638a  CALL 0x080063ac  CALL 0x080063ce  CALL 0x080063f0  CALL 0x0800906e  
|   :: ::   0x0800707c      30b4           push {r4, r5}
|   :: ::   0x0800707e      0168           ldr r1, [r0]
|   :: ::   0x08007080      cb43           mvns r3, r1
|   :: ::   0x08007082      1e49           ldr r1, [0x080070fc]        ; [0x80070fc:4]=0x40010400 ; EXTI1
|   :: ::   0x08007084      8279           ldrb r2, [r0, 6]
|   :: ::   0x08007086      002a           cmp r2, 0
|   ::,===< 0x08007088      26d0           beq 0x80070d8
|   ::|::   0x0800708a      0a46           mov r2, r1
|   ::|::   0x0800708c      1468           ldr r4, [r2]
|   ::|::   0x0800708e      2340           ands r3, r4
|   ::|::   0x08007090      1360           str r3, [r2]
|   ::|::   0x08007092      5368           ldr r3, [r2, 4]
|   ::|::   0x08007094      0468           ldr r4, [r0]
|   ::|::   0x08007096      a343           bics r3, r4
|   ::|::   0x08007098      5360           str r3, [r2, 4]
|   ::|::   0x0800709a      0379           ldrb r3, [r0, 4]
|   ::|::   0x0800709c      cc18           adds r4, r1, r3
|   ::|::   0x0800709e      2368           ldr r3, [r4]
|   ::|::   0x080070a0      0568           ldr r5, [r0]
|   ::|::   0x080070a2      2b43           orrs r3, r5
|   ::|::   0x080070a4      2360           str r3, [r4]
|   ::|::   0x080070a6      9368           ldr r3, [r2, 8]
|   ::|::   0x080070a8      0468           ldr r4, [r0]
|   ::|::   0x080070aa      a343           bics r3, r4
|   ::|::   0x080070ac      9360           str r3, [r2, 8]
|   ::|::   0x080070ae      d368           ldr r3, [r2, 0xc]
|   ::|::   0x080070b0      0468           ldr r4, [r0]
|   ::|::   0x080070b2      a343           bics r3, r4
|   ::|::   0x080070b4      d360           str r3, [r2, 0xc]
|   ::|::   0x080070b6      4379           ldrb r3, [r0, 5]
|   ::|::   0x080070b8      0568           ldr r5, [r0]
|   ::|::   0x080070ba      102b           cmp r3, 0x10                ; 16
|  ,======< 0x080070bc      07d1           bne 0x80070ce
|  |::|::   0x080070be      9168           ldr r1, [r2, 8]
|  |::|::   0x080070c0      2943           orrs r1, r5
|  |::|::   0x080070c2      9160           str r1, [r2, 8]
|  |::|::   0x080070c4      d168           ldr r1, [r2, 0xc]
|  |::|::   0x080070c6      0068           ldr r0, [r0]
|  |::|::   0x080070c8      0843           orrs r0, r1
|  |::|::   0x080070ca      d060           str r0, [r2, 0xc]
| ,=======< 0x080070cc      09e0           b 0x80070e2
| ||::|::      ; JMP XREF from 0x080070bc (EXTI_Init)
| |`------> 0x080070ce      cc18           adds r4, r1, r3
| | ::|::   0x080070d0      2068           ldr r0, [r4]
| | ::|::   0x080070d2      2843           orrs r0, r5
| | ::|::   0x080070d4      2060           str r0, [r4]
| |,======< 0x080070d6      04e0           b 0x80070e2
| ||::|::      ; JMP XREF from 0x08007088 (EXTI_Init)
| ||::`---> 0x080070d8      0079           ldrb r0, [r0, 4]
| ||:: ::   0x080070da      0c18           adds r4, r1, r0
| ||:: ::   0x080070dc      2068           ldr r0, [r4]
| ||:: ::   0x080070de      1840           ands r0, r3
| ||:: ::   0x080070e0      2060           str r0, [r4]
| ||:: ::      ; JMP XREF from 0x080070cc (EXTI_Init)
| ||:: ::      ; JMP XREF from 0x080070d6 (EXTI_Init)
| ``------> 0x080070e2      30bc           pop {r4, r5}
\   :: ::   0x080070e4      7047           bx lr
/ (fcn) EXTI_GetITStatus 16
|       Caller: EXTI15_10_IRQHandler EXTI9_5_IRQHandler EXTI0_IRQHandler
|   EXTI_GetITStatus ();
|   :: ::      ; XREFS: CALL 0x08009d58  CALL 0x08009d6c  CALL 0x08009d8a  CALL 0x08009da6  CALL 0x08009dc0  CALL 0x08009dd8  CALL 0x08009df4  
|   :: ::   0x080070e6      0021           movs r1, 0                  ; should check this is the correct funtion name
|   :: ::   0x080070e8      054a           ldr r2, [0x08007100]        ; [0x8007100:4]=0x40010414
|   :: ::   0x080070ea      1268           ldr r2, [r2]
|   :: ::   0x080070ec      0242           tst r2, r0
|   ::,===< 0x080070ee      00d0           beq 0x80070f2
|   ::|::   0x080070f0      0121           movs r1, 1                  ; 1
|   ::|::      ; JMP XREF from 0x080070ee (EXTI_GetITStatus)
|   ::`---> 0x080070f2      0846           mov r0, r1
\   :: ::   0x080070f4      7047           bx lr
/ (fcn) EXTI_ClearITPendingBit 6
|       Caller: EXTI9_5_IRQHandler EXTI15_10_IRQHandler _USB_Interrupts_Config _USB_Interrupts_Disable
|               _KBD_WKUPInterruptsEnable EXTI0_IRQHandler _KBD_WKUPInterruptsEnable_2
|   EXTI_ClearITPendingBit ();
|   :: ::      ; XREFS: JMP 0x08009d4e  CALL 0x080044dc  CALL 0x08004502  CALL 0x08004528  CALL 0x0800454c  CALL 0x0800456e  CALL 0x08004590  CALL 0x0800472a  CALL 0x08006320  
|   :: ::      ; XREFS: CALL 0x08006346  CALL 0x0800636c  CALL 0x08006390  CALL 0x080063b2  CALL 0x080063d4  CALL 0x08009056  CALL 0x08009d64  CALL 0x08009d78  CALL 0x08009d96  
|   :: ::      ; XREFS: CALL 0x08009db2  CALL 0x08009dca  CALL 0x08009de2  
|   ::.---> 0x080070f6      0249           ldr r1, [0x08007100]        ; [0x8007100:4]=0x40010414
|   :::::   0x080070f8      0860           str r0, [r1]
\   :::::   0x080070fa      7047           bx lr
    :::::      ; DATA XREF from 0x08007082 (EXTI_Init)
    :::::   0x080070fc      .dword 0x40010400
    :::::      ; DATA XREF from 0x080070e8 (EXTI_GetITStatus)
    :::::      ; DATA XREF from 0x080070f6 (EXTI_ClearITPendingBit)
    :::::   0x08007100      .dword 0x40010414
|   :::::   ;-- Wait:
/ (fcn) _Wait 52
|       Caller: _LED_CMDSend _MSG_HandleBLECMD _MSG_HandleSystemCMD _MSG_HandleLEDStyleCMD
|               _USB_DisconnectPinConfig _MSG_CMDPrepareOrSend
|   _Wait ();
|   :::::      ; XREFS: CALL 0x0800471e  CALL 0x0800537e  CALL 0x08005444  CALL 0x0800564a  CALL 0x08005808  CALL 0x08005a14  CALL 0x08005b20  CALL 0x08005c1a  
|   :::::   0x08007104      1749           ldr r1, [0x08007164]        ; [0x8007164:4]=0xe000e010 ; STK_CTRL
|   :::::   0x08007106      184a           ldr r2, [0x08007168]        ; [0x8007168:4]=0x20000768
|   :::::   0x08007108      127f           ldrb r2, [r2, 0x1c]         ; 0x20000784
|   :::::   0x0800710a      002a           cmp r2, 0
|  ,======< 0x0800710c      04d1           bne 0x8007118               ; jump if TIM4 is in high freq mode
|  |:::::   0x0800710e      4ff47a62       mov.w r2, 0xfa0             ; 4000
|  |:::::   0x08007112      5043           muls r0, r2, r0             ; multiply count value by 4000
|  |:::::   0x08007114      4860           str r0, [r1, 4]             ; STK_LOAD value
| ,=======< 0x08007116      02e0           b 0x800711e
| ||:::::      ; JMP XREF from 0x0800710c (_Wait)
| |`------> 0x08007118      7d22           movs r2, 0x7d               ; '}' ; 125
| | :::::   0x0800711a      5043           muls r0, r2, r0             ; multiply count value by 125
| | :::::   0x0800711c      4860           str r0, [r1, 4]             ; STK_LOAD value
| | :::::      ; JMP XREF from 0x08007116 (_Wait)
| `-------> 0x0800711e      0020           movs r0, 0
|   :::::   0x08007120      8860           str r0, [r1, 8]             ; STK_VAL clear the systick counter
|   :::::   0x08007122      0120           movs r0, 1                  ; 1
|   :::::   0x08007124      0860           str r0, [r1]                ; enable systick counter without asserting SysTick exception request
|   :::::      ; JMP XREF from 0x0800712e (_Wait)
|  .------> 0x08007126      0868           ldr r0, [r1]                ; loop until systick counter have counted back to 0
|  ::::::   0x08007128      00f00110       and r0, r0, 0x10001         ; which will happen when COUNTFLAG is set in STK_CTRL
|  ::::::   0x0800712c      0128           cmp r0, 1                   ; 1
|  `======< 0x0800712e      fad0           beq 0x8007126
|   :::::   0x08007130      0020           movs r0, 0
|   :::::   0x08007132      0860           str r0, [r1]                ; disable counter
|   :::::   0x08007134      8860           str r0, [r1, 8]             ; clear counter
\   :::::   0x08007136      7047           bx lr
\   :::::   ;-- Wait_AHBby8:
/ (fcn) _Wait_AHBby8 42
|       Caller: _Scan_Matrix _USB_PA11_12_Config
|   _Wait_AHBby8 ();
|   :::::      ; CALL XREF from 0x08004684 (_USB_PA11_12_Config)
|   :::::      ; CALL XREF from 0x0800469e (_USB_PA11_12_Config)
|   :::::      ; CALL XREF from 0x08007c54 (_Scan_Matrix)
|   :::::   0x08007138      10b5           push {r4, lr}
|   :::::   0x0800713a      0a4c           ldr r4, [0x08007164]        ; [0x8007164:4]=0xe000e010
|   :::::   0x0800713c      8000           lsls r0, r0, 2              ; multiply by 4
|   :::::   0x0800713e      6060           str r0, [r4, 4]             ; STK_LOAD value
|   :::::   0x08007140      6ff00400       mvn r0, 4
|   :::::   0x08007144      fff711ff       bl SysTick_CLKSourceConfig  ; set systick clk source to AHB/8
|   :::::   0x08007148      0020           movs r0, 0
|   :::::   0x0800714a      a060           str r0, [r4, 8]             ; STK_VAL clear the systick counter
|   :::::   0x0800714c      0120           movs r0, 1                  ; 1
|   :::::   0x0800714e      2060           str r0, [r4]                ; enable systick counter without asserting SysTick exception request
|   :::::      ; JMP XREF from 0x08007158 (_Wait_AHBby8)
|  .------> 0x08007150      2068           ldr r0, [r4]                ; loop until systick counter have counted back to 0
|  ::::::   0x08007152      00f00110       and r0, r0, 0x10001         ; which will happen when COUNTFLAG is set in STK_CTRL
|  ::::::   0x08007156      0128           cmp r0, 1                   ; 1
|  `======< 0x08007158      fad0           beq 0x8007150
|   :::::   0x0800715a      0020           movs r0, 0
|   :::::   0x0800715c      2060           str r0, [r4]                ; disable counter
|   :::::   0x0800715e      a060           str r0, [r4, 8]             ; clear counter
\   :::::   0x08007160      10bd           pop {r4, pc}
    :::::   0x08007162      0000           movs r0, r0
    :::::      ; DATA XREF from 0x08007104 (_Wait)
    :::::      ; DATA XREF from 0x0800713a (_Wait_AHBby8)
   ,======< 0x08007164      .dword 0xe000e010
   |:::::      ; DATA XREF from 0x08007106 (_Wait)
   |:::::   0x08007168      .dword 0x20000768
/ (fcn) USB_SIL_Init 20
|       Caller: USB_Port_Init
|   USB_SIL_Init ();
|  |:::::      ; CALL XREF from 0x08009a66 (USB_Port_Init)
|  |:::::   0x0800716c      0448           ldr r0, [0x08007180]        ; [0x8007180:4]=0x40005c40 ; USB registers USB_CNTR
|  |:::::   0x0800716e      0021           movs r1, 0
|  |:::::   0x08007170      4160           str r1, [r0, 4]
|  |:::::   0x08007172      4ff43f41       mov.w r1, 0xbf00
|  |:::::   0x08007176      034a           ldr r2, [0x08007184]        ; [0x8007184:4]=0x20001990 ; wInterrupt_Mask
|  |:::::   0x08007178      1180           strh r1, [r2]
|  |:::::   0x0800717a      0160           str r1, [r0]
|  |:::::   0x0800717c      0020           movs r0, 0
\  |:::::   0x0800717e      7047           bx lr
   |:::::      ; DATA XREF from 0x0800716c (USB_SIL_Init)
   |:::::   0x08007180      .dword 0x40005c40
   |:::::      ; DATA XREF from 0x08007176 (USB_SIL_Init)
   |:::::   0x08007184      .dword 0x20001990
/ (fcn) USB_SIL_Write 42
|       Caller: _USB_SendKeyStroke
|   USB_SIL_Write ();
|  |:::::      ; JMP XREF from 0x08007164 (Wait_AHBby8 + 44)
|  |:::::      ; CALL XREF from 0x08004d2a (_USB_SendKeyStroke)
|  |:::::      ; CALL XREF from 0x08004d46 (_USB_SendKeyStroke)
|  `------> 0x08007188      70b5           push {r4, r5, r6, lr}
|   :::::   0x0800718a      0c46           mov r4, r1
|   :::::   0x0800718c      1546           mov r5, r2
|   :::::   0x0800718e      00f07f06       and r6, r0, 0x7f
|   :::::   0x08007192      3046           mov r0, r6
|   :::::      ; JMP XREF from 0x08006f90 (SysTick_CLKSourceConfig + 38)
|   :::::   0x08007194      00f0e0f8       bl USB_GetEPTxAddr
|   :::::   0x08007198      0146           mov r1, r0
|   :::::   0x0800719a      2a46           mov r2, r5
|   :::::   0x0800719c      92b2           uxth r2, r2
|   :::::   0x0800719e      2046           mov r0, r4
|   :::::   0x080071a0      00f0cffc       bl USB_UserToPMABufferCopy
|   :::::   0x080071a4      2946           mov r1, r5
|   :::::   0x080071a6      89b2           uxth r1, r1
|   :::::   0x080071a8      3046           mov r0, r6
|   :::::   0x080071aa      00f0ebf8       bl USB_SetEPTxCount
|   :::::   0x080071ae      0020           movs r0, 0
\   :::::   0x080071b0      70bd           pop {r4, r5, r6, pc}
/ (fcn) USB_SIL_Read 36
|       Caller: _USB_EP1_OUT_Callback _USB_EP2_OUT_Callback
|   USB_SIL_Read ();
|   :::::      ; CALL XREF from 0x0800a6b8 (_USB_EP1_OUT_Callback)
|   :::::      ; CALL XREF from 0x0800a70e (_USB_EP2_OUT_Callback)
|   :::::   0x080071b2      70b5           push {r4, r5, r6, lr}
|   :::::   0x080071b4      0c46           mov r4, r1
|   :::::   0x080071b6      00f07f05       and r5, r0, 0x7f
|   :::::   0x080071ba      2846           mov r0, r5
|   :::::   0x080071bc      00f008f9       bl USB_GetEPRxCount
|   :::::   0x080071c0      0646           mov r6, r0
|   :::::   0x080071c2      2846           mov r0, r5
|   :::::   0x080071c4      00f0d4f8       bl USB_GetEPRxAddr
|   :::::   0x080071c8      0146           mov r1, r0
|   :::::   0x080071ca      3246           mov r2, r6
|   :::::   0x080071cc      2046           mov r0, r4
|   :::::   0x080071ce      00f0cefc       bl USB_PMAToUserBufferCopy
|   :::::   0x080071d2      3046           mov r0, r6
\   :::::   0x080071d4      70bd           pop {r4, r5, r6, pc}
/ (fcn) zero_fill_bss 34
|   zero_fill_bss ();
|   :::::      ; JMP XREF from 0x080071f4 (zero_fill_bss)
|  .------> 0x080071d6      50f8041b       ldr r1, [r0], 4             ; [r0]: size, [r0+4]: start address
| ,=======< 0x080071da      61b1           cbz r1, 0x80071f6
| |::::::   0x080071dc      50f8042b       ldr r2, [r0], 4
| |::::::   0x080071e0      d307           lsls r3, r2, 0x1f           ; does LSB = 1?
| ========< 0x080071e2      44bf           itt mi
| |::::::      ; JMP XREF from 0x080071e2 (zero_fill_bss)
| --------> 0x080071e4      a9f10103       sub.w r3, sb, 1
| |::::::   0x080071e8      9a18           adds r2, r3, r2
| |::::::      ; JMP XREF from 0x080071f2 (zero_fill_bss)
| --------> 0x080071ea      0023           movs r3, 0
| |::::::   0x080071ec      42f8043b       str r3, [r2], 4
| |::::::   0x080071f0      091f           subs r1, r1, 4
| ========< 0x080071f2      fad1           bne 0x80071ea
| |`======< 0x080071f4      efe7           b zero_fill_bss
| | :::::      ; JMP XREF from 0x080071da (zero_fill_bss)
\ `-------> 0x080071f6      7047           bx lr
/ (fcn) USB_SetBTABLE 14
|       Caller: USB_Port_Reset
|   USB_SetBTABLE ();
|   :::::      ; CALL XREF from 0x08009a8a (USB_Port_Reset)
|   :::::   0x080071f8      4ff6f871       movw r1, 0xfff8
|   :::::   0x080071fc      0840           ands r0, r1
|   :::::   0x080071fe      dff8e811       ldr.w r1, [0x080073e8]      ; [0x80073e8:4]=0x40005c50
|   :::::   0x08007202      0860           str r0, [r1]
\   :::::   0x08007204      7047           bx lr
/ (fcn) USB_SetEPType 26
|       Caller: USB_Port_Reset
|   USB_SetEPType ();
|   :::::      ; CALL XREF from 0x08009a94 (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009ace (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009b0c (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009b4c (USB_Port_Reset)
|   :::::   0x08007206      10b4           push {r4}
|   :::::   0x08007208      dff8e021       ldr.w r2, [0x080073ec]      ; [0x80073ec:4]=0x40005c00
|   :::::   0x0800720c      52f82030       ldr.w r3, [r2, r0, lsl 2]   ; this lsl 2 doesn't seem to be in this function in the lib
|   :::::   0x08007210      48f68f14       movw r4, 0x898f
|   :::::   0x08007214      2340           ands r3, r4
|   :::::   0x08007216      1943           orrs r1, r3
|   :::::   0x08007218      42f82010       str.w r1, [r2, r0, lsl 2]
|   :::::   0x0800721c      10bc           pop {r4}
\   :::::   0x0800721e      7047           bx lr
/ (fcn) USB_SetEPTxStatus 48
|       Caller: USB_Port_Reset USB_Standard_ClearFeature
|   USB_SetEPTxStatus ();
|   :::::      ; CALL XREF from 0x080093ac (USB_Standard_ClearFeature)
|   :::::      ; CALL XREF from 0x08009a9c (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009ae6 (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009b26 (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009b66 (USB_Port_Reset)
|   :::::   0x08007220      10b4           push {r4}                   ; check this is the correct func or lib
|   :::::   0x08007222      dff8c821       ldr.w r2, [0x080073ec]      ; [0x80073ec:4]=0x40005c00
|   :::::   0x08007226      52f82030       ldr.w r3, [r2, r0, lsl 2]
|   :::::   0x0800722a      48f6bf74       movw r4, 0x8fbf
|   :::::   0x0800722e      2340           ands r3, r4
|   :::::   0x08007230      cc06           lsls r4, r1, 0x1b
|  ,======< 0x08007232      01d5           bpl 0x8007238
|  |:::::   0x08007234      83f01003       eor r3, r3, 0x10
|  |:::::      ; JMP XREF from 0x08007232 (USB_SetEPTxStatus)
|  `------> 0x08007238      8906           lsls r1, r1, 0x1a
|  ,======< 0x0800723a      01d5           bpl 0x8007240
|  |:::::   0x0800723c      83f02003       eor r3, r3, 0x20
|  |:::::      ; JMP XREF from 0x0800723a (USB_SetEPTxStatus)
|  `------> 0x08007240      43f40041       orr r1, r3, 0x8000
|   :::::   0x08007244      41f08001       orr r1, r1, 0x80
|   :::::   0x08007248      42f82010       str.w r1, [r2, r0, lsl 2]
|   :::::   0x0800724c      10bc           pop {r4}
\   :::::   0x0800724e      7047           bx lr
/ (fcn) USB_SetEPRxStatus 48
|       Caller: USB_Port_Reset
|   USB_SetEPRxStatus ();
|   :::::      ; JMP XREF from 0x0800a6fa (_USB_EP1_OUT_Callback)
|   :::::      ; JMP XREF from 0x0800a750 (_USB_EP2_OUT_Callback)
|   :::::      ; CALL XREF from 0x08009b02 (USB_Port_Reset)
|   :::::      ; CALL XREF from 0x08009b42 (USB_Port_Reset)
| ..------> 0x08007250      10b4           push {r4}                   ; check this is the correct func or lib
| :::::::   0x08007252      dff89821       ldr.w r2, [0x080073ec]      ; [0x80073ec:4]=0x40005c00
| :::::::   0x08007256      52f82030       ldr.w r3, [r2, r0, lsl 2]
| :::::::   0x0800725a      4bf68f74       movw r4, 0xbf8f
| :::::::   0x0800725e      2340           ands r3, r4
| :::::::   0x08007260      cc04           lsls r4, r1, 0x13
| ========< 0x08007262      01d5           bpl 0x8007268
| :::::::   0x08007264      83f48053       eor r3, r3, 0x1000
| :::::::      ; JMP XREF from 0x08007262 (USB_SetEPRxStatus)
| --------> 0x08007268      8904           lsls r1, r1, 0x12
| ========< 0x0800726a      01d5           bpl 0x8007270
| :::::::   0x0800726c      83f40053       eor r3, r3, 0x2000
| :::::::      ; JMP XREF from 0x0800726a (USB_SetEPRxStatus)
| --------> 0x08007270      43f40041       orr r1, r3, 0x8000
| :::::::   0x08007274      41f08001       orr r1, r1, 0x80
| :::::::   0x08007278      42f82010       str.w r1, [r2, r0, lsl 2]
| :::::::   0x0800727c      10bc           pop {r4}
\ :::::::   0x0800727e      7047           bx lr
/ (fcn) USB_SetEPTxValid 32
|       Caller: _USB_SendKeyStroke
|   USB_SetEPTxValid ();
| :::::::      ; CALL XREF from 0x08004d30 (_USB_SendKeyStroke)
| :::::::      ; CALL XREF from 0x08004d4c (_USB_SendKeyStroke)
| :::::::   0x08007280      dff86811       ldr.w r1, [0x080073ec]      ; [0x80073ec:4]=0x40005c00 ; check func name
| :::::::   0x08007284      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x08007288      48f6bf73       movw r3, 0x8fbf
| :::::::   0x0800728c      1a40           ands r2, r3
| :::::::   0x0800728e      82f03002       eor r2, r2, 0x30
| :::::::   0x08007292      42f40042       orr r2, r2, 0x8000
| :::::::   0x08007296      42f08002       orr r2, r2, 0x80
| :::::::   0x0800729a      41f82020       str.w r2, [r1, r0, lsl 2]
\ :::::::   0x0800729e      7047           bx lr
/ (fcn) USB_SetEPRxValid 32
|       Caller: USB_Port_Reset
|   USB_SetEPRxValid ();
| :::::::      ; CALL XREF from 0x08009ac4 (USB_Port_Reset)
| :::::::   0x080072a0      dff84811       ldr.w r1, [0x080073ec]      ; [0x80073ec:4]=0x40005c00 ; check function
| :::::::   0x080072a4      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x080072a8      4bf68f73       movw r3, 0xbf8f
| :::::::   0x080072ac      1a40           ands r2, r3
| :::::::   0x080072ae      82f44052       eor r2, r2, 0x3000
| :::::::   0x080072b2      42f40042       orr r2, r2, 0x8000
| :::::::   0x080072b6      42f08002       orr r2, r2, 0x80
| :::::::   0x080072ba      41f82020       str.w r2, [r1, r0, lsl 2]
\ :::::::   0x080072be      7047           bx lr
/ (fcn) USB_ClearEP_KIND 28
|       Caller: USB_Port_Reset
|   USB_ClearEP_KIND ();
| :::::::      ; CALL XREF from 0x08009ab2 (USB_Port_Reset)
| :::::::   0x080072c0      dff82811       ldr.w r1, [0x080073ec]      ; [0x80073ec:4]=0x40005c00
| :::::::   0x080072c4      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x080072c8      48f68f63       movw r3, 0x8e8f
| :::::::   0x080072cc      1a40           ands r2, r3
| :::::::   0x080072ce      42f40042       orr r2, r2, 0x8000
| :::::::   0x080072d2      42f08002       orr r2, r2, 0x80
| :::::::   0x080072d6      41f82020       str.w r2, [r1, r0, lsl 2]
\ :::::::   0x080072da      7047           bx lr
/ (fcn) USB_ClearDTOG_RX 36
|       Caller: USB_Standard_ClearFeature
|   USB_ClearDTOG_RX ();
| :::::::      ; CALL XREF from 0x080093e6 (USB_Standard_ClearFeature)
| :::::::   0x080072dc      dff80c11       ldr.w r1, [0x080073ec]      ; [0x80073ec:4]=0x40005c00
| :::::::   0x080072e0      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x080072e4      5204           lsls r2, r2, 0x11
| ========< 0x080072e6      0ad5           bpl 0x80072fe
| :::::::   0x080072e8      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x080072ec      48f68f73       movw r3, 0x8f8f
| :::::::   0x080072f0      1a40           ands r2, r3
| :::::::   0x080072f2      42f44042       orr r2, r2, 0xc000
| :::::::   0x080072f6      42f08002       orr r2, r2, 0x80
| :::::::   0x080072fa      41f82020       str.w r2, [r1, r0, lsl 2]
| :::::::      ; JMP XREF from 0x080072e6 (USB_ClearDTOG_RX)
\ --------> 0x080072fe      7047           bx lr
/ (fcn) USB_ClearDTOG_TX 36
|       Caller: USB_Standard_ClearFeature
|   USB_ClearDTOG_TX ();
| :::::::      ; CALL XREF from 0x080093a4 (USB_Standard_ClearFeature)
| :::::::   0x08007300      dff8e810       ldr.w r1, [0x080073ec]      ; [0x80073ec:4]=0x40005c00
| :::::::   0x08007304      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x08007308      5206           lsls r2, r2, 0x19
| ========< 0x0800730a      0ad5           bpl 0x8007322
| :::::::   0x0800730c      51f82020       ldr.w r2, [r1, r0, lsl 2]
| :::::::   0x08007310      48f68f73       movw r3, 0x8f8f
| :::::::   0x08007314      1a40           ands r2, r3
| :::::::   0x08007316      42f40042       orr r2, r2, 0x8000
| :::::::   0x0800731a      42f0c002       orr r2, r2, 0xc0
| :::::::   0x0800731e      41f82020       str.w r2, [r1, r0, lsl 2]
| :::::::      ; JMP XREF from 0x0800730a (USB_ClearDTOG_TX)
\ --------> 0x08007322      7047           bx lr
/ (fcn) USB_SetEPTxAddr 26
|       Caller: USB_Port_Reset
|   USB_SetEPTxAddr ();
| :::::::      ; CALL XREF from 0x08009aac (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009ad6 (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009b16 (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009b56 (USB_Port_Reset)
| :::::::   0x08007324      dff8c020       ldr.w r2, [0x080073e8]      ; [0x80073e8:4]=0x40005c50
| :::::::   0x08007328      1268           ldr r2, [r2]
| :::::::   0x0800732a      92b2           uxth r2, r2
| :::::::   0x0800732c      02ebc000       add.w r0, r2, r0, lsl 3
| :::::::   0x08007330      dff8bc20       ldr.w r2, [0x080073f0]      ; [0x80073f0:4]=0x40006000
| :::::::   0x08007334      4908           lsrs r1, r1, 1
| :::::::   0x08007336      4900           lsls r1, r1, 1
| :::::::   0x08007338      42f81010       str.w r1, [r2, r0, lsl 1]
\ :::::::   0x0800733c      7047           bx lr
/ (fcn) USB_SetEPRxAddr 26
|       Caller: USB_Port_Reset
|   USB_SetEPRxAddr ();
| :::::::      ; CALL XREF from 0x08009aa4 (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009af0 (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009b30 (USB_Port_Reset)
| :::::::   0x0800733e      dff8a820       ldr.w r2, [0x080073e8]      ; [0x80073e8:4]=0x40005c50
| :::::::   0x08007342      1268           ldr r2, [r2]
| :::::::   0x08007344      92b2           uxth r2, r2
| :::::::   0x08007346      02ebc000       add.w r0, r2, r0, lsl 3
| :::::::   0x0800734a      dff8a820       ldr.w r2, [0x080073f4]      ; [0x80073f4:4]=0x40006008
| :::::::   0x0800734e      4908           lsrs r1, r1, 1
| :::::::   0x08007350      4900           lsls r1, r1, 1
| :::::::   0x08007352      42f81010       str.w r1, [r2, r0, lsl 1]
\ :::::::   0x08007356      7047           bx lr
/ (fcn) USB_GetEPTxAddr 24
|       Caller: USB_SIL_Write USB_DataStageIn
|   USB_GetEPTxAddr ();
| :::::::      ; CALL XREF from 0x08007194 (USB_SIL_Write)
| :::::::      ; CALL XREF from 0x080095d0 (USB_DataStageIn)
| :::::::   0x08007358      dff88c10       ldr.w r1, [0x080073e8]      ; [0x80073e8:4]=0x40005c50
| :::::::   0x0800735c      0968           ldr r1, [r1]
| :::::::   0x0800735e      89b2           uxth r1, r1
| :::::::   0x08007360      01ebc000       add.w r0, r1, r0, lsl 3
| :::::::   0x08007364      dff88810       ldr.w r1, [0x080073f0]      ; [0x80073f0:4]=0x40006000
| :::::::   0x08007368      51f81000       ldr.w r0, [r1, r0, lsl 1]
| :::::::   0x0800736c      80b2           uxth r0, r0
\ :::::::   0x0800736e      7047           bx lr
/ (fcn) USB_GetEPRxAddr 20
|       Caller: USB_SIL_Read USB_DataStageOut
|   USB_GetEPRxAddr ();
| :::::::      ; CALL XREF from 0x080071c4 (USB_SIL_Read)
| :::::::      ; CALL XREF from 0x080094f8 (USB_DataStageOut)
| :::::::   0x08007370      1d49           ldr r1, [0x080073e8]        ; [0x80073e8:4]=0x40005c50
| :::::::   0x08007372      0968           ldr r1, [r1]
| :::::::   0x08007374      89b2           uxth r1, r1
| :::::::   0x08007376      01ebc000       add.w r0, r1, r0, lsl 3
| :::::::   0x0800737a      1e49           ldr r1, [0x080073f4]        ; [0x80073f4:4]=0x40006008
| :::::::   0x0800737c      51f81000       ldr.w r0, [r1, r0, lsl 1]
| :::::::   0x08007380      80b2           uxth r0, r0
\ :::::::   0x08007382      7047           bx lr
/ (fcn) USB_SetEPTxCount 18
|       Caller: USB_SIL_Write USB_DataStageIn USB_Port_Reset USB_DataStageOut
|   USB_SetEPTxCount ();
| :::::::      ; XREFS: CALL 0x080071aa  CALL 0x0800951a  CALL 0x080095e2  CALL 0x08009ade  CALL 0x08009b1e  CALL 0x08009b5e  
| :::::::   0x08007384      184a           ldr r2, [0x080073e8]        ; [0x80073e8:4]=0x40005c50
| :::::::   0x08007386      1268           ldr r2, [r2]
| :::::::   0x08007388      92b2           uxth r2, r2
| :::::::   0x0800738a      02ebc000       add.w r0, r2, r0, lsl 3
| :::::::   0x0800738e      1a4a           ldr r2, [0x080073f8]        ; [0x80073f8:4]=0x40006004
| :::::::   0x08007390      42f81010       str.w r1, [r2, r0, lsl 1]
\ :::::::   0x08007394      7047           bx lr
/ (fcn) USB_SetEPRxCount 58
|       Caller: USB_Post0_Process USB_Port_Reset USB_Standard_ClearFeature
|   USB_SetEPRxCount ();
| :::::::      ; CALL XREF from 0x080093d2 (USB_Standard_ClearFeature)
| :::::::      ; CALL XREF from 0x080099a8 (USB_Out0_Process)
| :::::::      ; CALL XREF from 0x08009abe (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009af8 (USB_Port_Reset)
| :::::::      ; CALL XREF from 0x08009b38 (USB_Port_Reset)
| :::::::   0x08007396      144a           ldr r2, [0x080073e8]        ; [0x80073e8:4]=0x40005c50
| :::::::   0x08007398      1268           ldr r2, [r2]
| :::::::   0x0800739a      92b2           uxth r2, r2
| :::::::   0x0800739c      02ebc000       add.w r0, r2, r0, lsl 3
| :::::::   0x080073a0      164a           ldr r2, [0x080073fc]        ; [0x80073fc:4]=0x4000600c
| :::::::   0x080073a2      02eb4000       add.w r0, r2, r0, lsl 1
| :::::::   0x080073a6      3f29           cmp r1, 0x3f                ; '?' ; 63
| ========< 0x080073a8      0adb           blt 0x80073c0
| :::::::   0x080073aa      4a09           lsrs r2, r1, 5
| :::::::   0x080073ac      1f23           movs r3, 0x1f               ; 31
| :::::::   0x080073ae      1942           tst r1, r3
| ========< 0x080073b0      00d1           bne 0x80073b4
| :::::::   0x080073b2      521e           subs r2, r2, 1
| :::::::      ; JMP XREF from 0x080073b0 (USB_SetEPRxCount)
| --------> 0x080073b4      92b2           uxth r2, r2
| :::::::   0x080073b6      9102           lsls r1, r2, 0xa
| :::::::   0x080073b8      41f40041       orr r1, r1, 0x8000
| :::::::   0x080073bc      0160           str r1, [r0]
| :::::::   0x080073be      7047           bx lr
| :::::::      ; JMP XREF from 0x080073a8 (USB_SetEPRxCount)
| --------> 0x080073c0      4a08           lsrs r2, r1, 1
| :::::::   0x080073c2      c907           lsls r1, r1, 0x1f
| ========< 0x080073c4      00d5           bpl 0x80073c8
| :::::::   0x080073c6      521c           adds r2, r2, 1
| :::::::      ; JMP XREF from 0x080073c4 (USB_SetEPRxCount)
| --------> 0x080073c8      92b2           uxth r2, r2
| :::::::   0x080073ca      9102           lsls r1, r2, 0xa
| :::::::   0x080073cc      0160           str r1, [r0]
\ :::::::   0x080073ce      7047           bx lr
/ (fcn) USB_GetEPRxCount 22
|       Caller: USB_SIL_Read
|   USB_GetEPRxCount ();
| :::::::      ; CALL XREF from 0x080071bc (USB_SIL_Read)
| :::::::   0x080073d0      0549           ldr r1, [0x080073e8]        ; [0x80073e8:4]=0x40005c50
| :::::::   0x080073d2      0968           ldr r1, [r1]
| :::::::   0x080073d4      89b2           uxth r1, r1
| :::::::   0x080073d6      01ebc000       add.w r0, r1, r0, lsl 3
| :::::::   0x080073da      0849           ldr r1, [0x080073fc]        ; [0x80073fc:4]=0x4000600c
| :::::::   0x080073dc      51f81000       ldr.w r0, [r1, r0, lsl 1]
| :::::::   0x080073e0      8005           lsls r0, r0, 0x16
| :::::::   0x080073e2      800d           lsrs r0, r0, 0x16
\ :::::::   0x080073e4      7047           bx lr
  :::::::   0x080073e6      0000           movs r0, r0
  :::::::      ; XREFS: DATA 0x08007324  DATA 0x0800733e  DATA 0x08007358  DATA 0x08007370  DATA 0x08007384  DATA 0x08007396  DATA 0x080073d0  
  :::::::   0x080073e8      .dword 0x40005c50
  :::::::      ; XREFS: DATA 0x08007208  DATA 0x08007222  DATA 0x08007252  DATA 0x08007280  DATA 0x080072a0  DATA 0x080072c0  DATA 0x080072dc  DATA 0x08007300  
  :::::::   0x080073ec      .dword 0x40005c00
  :::::::      ; DATA XREF from 0x08007330 (USB_SetEPTxAddr)
  :::::::      ; DATA XREF from 0x08007364 (USB_GetEPTxAddr)
  :::::::   0x080073f0      .dword 0x40006000
  :::::::      ; DATA XREF from 0x0800734a (USB_SetEPRxAddr)
  :::::::      ; DATA XREF from 0x0800737a (USB_GetEPRxAddr)
  :::::::   0x080073f4      .dword 0x40006008
  :::::::      ; DATA XREF from 0x0800738e (USB_SetEPTxCount)
  :::::::   0x080073f8      .dword 0x40006004
  :::::::      ; DATA XREF from 0x080073a0 (USB_SetEPRxCount)
  :::::::      ; DATA XREF from 0x080073da (USB_GetEPRxCount)
  :::::::   0x080073fc      .dword 0x4000600c
/ (fcn) USB_ByteSwap 12
|       Caller: USB_Setup0_Process
|   USB_ByteSwap ();
| :::::::      ; CALL XREF from 0x080098d2 (USB_Setup0_Process)
| :::::::      ; CALL XREF from 0x080098e0 (USB_Setup0_Process)
| :::::::   0x08007400      0146           mov r1, r0
| :::::::   0x08007402      c9b2           uxtb r1, r1
| :::::::   0x08007404      0902           lsls r1, r1, 8
| :::::::   0x08007406      41ea1020       orr.w r0, r1, r0, lsr 8
\ :::::::   0x0800740a      7047           bx lr
/ (fcn) USART_DeInit 154
|       Caller: _USART2_Init
|   USART_DeInit ();
| :::::::      ; CALL XREF from 0x08004eca (_USART2_Init)
| :::::::   0x0800740c      80b5           push {r7, lr}
| :::::::   0x0800740e      4f49           ldr r1, [0x0800754c]        ; [0x800754c:4]=0x40013800 ; USART1
| :::::::   0x08007410      8842           cmp r0, r1
| ========< 0x08007412      0bd1           bne 0x800742c
| :::::::   0x08007414      0121           movs r1, 1                  ; 1
| :::::::   0x08007416      4ff48040       mov.w r0, 0x4000
| :::::::   0x0800741a      fff72bfc       bl RCC_APB2PeriphResetCmd
| :::::::   0x0800741e      0021           movs r1, 0
| :::::::   0x08007420      4ff48040       mov.w r0, 0x4000
| :::::::   0x08007424      bde80440       pop.w {r2, lr}
| ========< 0x08007428      fff724bc       b.w RCC_APB2PeriphResetCmd
| :::::::      ; JMP XREF from 0x08007412 (USART_DeInit)
| --------> 0x0800742c      4849           ldr r1, [0x08007550]        ; [0x8007550:4]=0x40004400 ; USART2
| :::::::   0x0800742e      8842           cmp r0, r1
| ========< 0x08007430      0bd1           bne 0x800744a
| :::::::   0x08007432      0121           movs r1, 1                  ; 1
| :::::::   0x08007434      4ff40030       mov.w r0, 0x20000
| :::::::   0x08007438      fff727fc       bl RCC_APB1PeriphResetCmd
| :::::::   0x0800743c      0021           movs r1, 0
| :::::::   0x0800743e      4ff40030       mov.w r0, 0x20000
| :::::::   0x08007442      bde80440       pop.w {r2, lr}
| ========< 0x08007446      fff720bc       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x08007430 (USART_DeInit)
| --------> 0x0800744a      4249           ldr r1, [0x08007554]        ; [0x8007554:4]=0x40004800 ; USART3
| :::::::   0x0800744c      8842           cmp r0, r1
| ========< 0x0800744e      0bd1           bne 0x8007468
| :::::::   0x08007450      0121           movs r1, 1                  ; 1
| :::::::   0x08007452      4ff48020       mov.w r0, 0x40000
| :::::::   0x08007456      fff718fc       bl RCC_APB1PeriphResetCmd
| :::::::   0x0800745a      0021           movs r1, 0
| :::::::   0x0800745c      4ff48020       mov.w r0, 0x40000
| :::::::   0x08007460      bde80440       pop.w {r2, lr}
| ========< 0x08007464      fff711bc       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x0800744e (USART_DeInit)
| --------> 0x08007468      3b49           ldr r1, [0x08007558]        ; [0x8007558:4]=0x40004c00 ; USART4
| :::::::   0x0800746a      8842           cmp r0, r1
| ========< 0x0800746c      0bd1           bne 0x8007486
| :::::::   0x0800746e      0121           movs r1, 1                  ; 1
| :::::::   0x08007470      4ff40020       mov.w r0, 0x80000
| :::::::   0x08007474      fff709fc       bl RCC_APB1PeriphResetCmd
| :::::::   0x08007478      0021           movs r1, 0
| :::::::   0x0800747a      4ff40020       mov.w r0, 0x80000
| :::::::   0x0800747e      bde80440       pop.w {r2, lr}
| ========< 0x08007482      fff702bc       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x0800746c (USART_DeInit)
| --------> 0x08007486      3549           ldr r1, [0x0800755c]        ; [0x800755c:4]=0x40005000 ; USART5
| :::::::   0x08007488      8842           cmp r0, r1
| ========< 0x0800748a      0bd1           bne 0x80074a4
| :::::::   0x0800748c      0121           movs r1, 1                  ; 1
| :::::::   0x0800748e      4ff48010       mov.w r0, 0x100000
| :::::::   0x08007492      fff7fafb       bl RCC_APB1PeriphResetCmd
| :::::::   0x08007496      0021           movs r1, 0
| :::::::   0x08007498      4ff48010       mov.w r0, 0x100000
| :::::::   0x0800749c      bde80440       pop.w {r2, lr}
| ========< 0x080074a0      fff7f3bb       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x0800748a (USART_DeInit)
\ --------> 0x080074a4      01bd           pop {r0, pc}
/ (fcn) USART_Init 164
|       Caller: _USART2_Init _USART3_Init
|   USART_Init ();
| :::::::      ; CALL XREF from 0x08004eea (_USART2_Init)
| :::::::      ; CALL XREF from 0x080050ae (_USART3_Init)
| :::::::   0x080074a6      30b5           push {r4, r5, lr}           ; check if this is correct func name
| :::::::   0x080074a8      85b0           sub sp, 0x14
| :::::::   0x080074aa      0446           mov r4, r0
| :::::::   0x080074ac      0d46           mov r5, r1
| :::::::   0x080074ae      208a           ldrh r0, [r4, 0x10]
| :::::::   0x080074b0      4cf6ff71       movw r1, 0xcfff
| :::::::   0x080074b4      0840           ands r0, r1
| :::::::   0x080074b6      e988           ldrh r1, [r5, 6]
| :::::::   0x080074b8      0843           orrs r0, r1
| :::::::   0x080074ba      2082           strh r0, [r4, 0x10]
| :::::::   0x080074bc      a089           ldrh r0, [r4, 0xc]
| :::::::   0x080074be      4ef6f311       movw r1, 0xe9f3
| :::::::   0x080074c2      0840           ands r0, r1
| :::::::   0x080074c4      a988           ldrh r1, [r5, 4]
| :::::::   0x080074c6      0843           orrs r0, r1
| :::::::   0x080074c8      2989           ldrh r1, [r5, 8]
| :::::::   0x080074ca      0843           orrs r0, r1
| :::::::   0x080074cc      6989           ldrh r1, [r5, 0xa]
| :::::::   0x080074ce      0843           orrs r0, r1
| :::::::   0x080074d0      a081           strh r0, [r4, 0xc]
| :::::::   0x080074d2      a08a           ldrh r0, [r4, 0x14]
| :::::::   0x080074d4      4ff6ff41       movw r1, 0xfcff
| :::::::   0x080074d8      0840           ands r0, r1
| :::::::   0x080074da      a989           ldrh r1, [r5, 0xc]
| :::::::   0x080074dc      0843           orrs r0, r1
| :::::::   0x080074de      a082           strh r0, [r4, 0x14]
| :::::::   0x080074e0      00a8           add r0, sp, 0
| :::::::   0x080074e2      fff754fb       bl RCC_GetClocksFreq
| :::::::   0x080074e6      1948           ldr r0, [0x0800754c]        ; [0x800754c:4]=0x40013800
| :::::::   0x080074e8      8442           cmp r4, r0
| ========< 0x080074ea      01d1           bne 0x80074f0
| :::::::   0x080074ec      0398           ldr r0, [sp, 0xc]
| ========< 0x080074ee      00e0           b 0x80074f2
| :::::::      ; JMP XREF from 0x080074ea (USART_Init)
| --------> 0x080074f0      0298           ldr r0, [sp, 8]
| :::::::      ; JMP XREF from 0x080074ee (USART_Init)
| --------> 0x080074f2      2968           ldr r1, [r5]
| :::::::   0x080074f4      1922           movs r2, 0x19               ; 25
| :::::::   0x080074f6      5043           muls r0, r2, r0
| :::::::   0x080074f8      a289           ldrh r2, [r4, 0xc]
| :::::::   0x080074fa      1204           lsls r2, r2, 0x10
| ========< 0x080074fc      03d5           bpl 0x8007506
| :::::::   0x080074fe      4900           lsls r1, r1, 1
| :::::::   0x08007500      b0fbf1f1       udiv r1, r0, r1
| ========< 0x08007504      02e0           b 0x800750c
| :::::::      ; JMP XREF from 0x080074fc (USART_Init)
| --------> 0x08007506      8900           lsls r1, r1, 2
| :::::::   0x08007508      b0fbf1f1       udiv r1, r0, r1
| :::::::      ; JMP XREF from 0x08007504 (USART_Init)
| --------> 0x0800750c      6420           movs r0, 0x64               ; 'd' ; 100
| :::::::   0x0800750e      b1fbf0f0       udiv r0, r1, r0
| :::::::   0x08007512      0001           lsls r0, r0, 4
| :::::::   0x08007514      0209           lsrs r2, r0, 4
| :::::::   0x08007516      6423           movs r3, 0x64               ; 'd' ; 100
| :::::::   0x08007518      03fb1211       mls r1, r3, r2, r1
| :::::::   0x0800751c      a289           ldrh r2, [r4, 0xc]
| :::::::   0x0800751e      1204           lsls r2, r2, 0x10
| ========< 0x08007520      08d5           bpl 0x8007534
| :::::::   0x08007522      c900           lsls r1, r1, 3
| :::::::   0x08007524      3231           adds r1, 0x32
| :::::::   0x08007526      1a46           mov r2, r3
| :::::::   0x08007528      b1fbf2f1       udiv r1, r1, r2
| :::::::   0x0800752c      01f00701       and r1, r1, 7
| :::::::   0x08007530      0843           orrs r0, r1
| ========< 0x08007532      07e0           b 0x8007544
| :::::::      ; JMP XREF from 0x08007520 (USART_Init)
| --------> 0x08007534      0901           lsls r1, r1, 4
| :::::::   0x08007536      3231           adds r1, 0x32
| :::::::   0x08007538      1a46           mov r2, r3
| :::::::   0x0800753a      b1fbf2f1       udiv r1, r1, r2
| :::::::   0x0800753e      01f00f01       and r1, r1, 0xf
| :::::::   0x08007542      0843           orrs r0, r1
| :::::::      ; JMP XREF from 0x08007532 (USART_Init)
| --------> 0x08007544      2081           strh r0, [r4, 8]
| :::::::   0x08007546      05b0           add sp, 0x14
\ :::::::   0x08007548      30bd           pop {r4, r5, pc}
  :::::::   0x0800754a      0000           movs r0, r0
  :::::::      ; DATA XREF from 0x0800740e (USART_DeInit)
  :::::::      ; DATA XREF from 0x080074e6 (USART_Init)
  :::::::   0x0800754c      .dword 0x40013800
  :::::::      ; DATA XREF from 0x0800742c (USART_DeInit)
  :::::::   0x08007550      .dword 0x40004400
  :::::::      ; DATA XREF from 0x0800744a (USART_DeInit)
  :::::::   0x08007554      .dword 0x40004800
  :::::::      ; DATA XREF from 0x08007468 (USART_DeInit)
  :::::::      ; DATA XREF from 0x08007554 (USART_Init + 174)
  :::::::   0x08007558      .dword 0x40004c00
  :::::::      ; DATA XREF from 0x08007486 (USART_DeInit)
  :::::::      ; DATA XREF from 0x08007558 (USART_Init + 178)
  :::::::   0x0800755c      .dword 0x40005000
/ (fcn) USART_Cmd 24
|       Caller: _USART2_Init _USART3_Init
|   USART_Cmd ();
| :::::::      ; CALL XREF from 0x08004f42 (_USART2_Init)
| :::::::      ; CALL XREF from 0x08005104 (_USART3_Init)
| :::::::   0x08007560      0029           cmp r1, 0
| :::::::   0x08007562      8189           ldrh r1, [r0, 0xc]
| ========< 0x08007564      03d0           beq 0x800756e
| :::::::   0x08007566      41f40051       orr r1, r1, 0x2000
| :::::::   0x0800756a      8181           strh r1, [r0, 0xc]
| :::::::   0x0800756c      7047           bx lr
| :::::::      ; JMP XREF from 0x08007564 (USART_Cmd)
| --------> 0x0800756e      4df6ff72       movw r2, 0xdfff
| :::::::   0x08007572      1140           ands r1, r2
| :::::::   0x08007574      8181           strh r1, [r0, 0xc]
\ :::::::   0x08007576      7047           bx lr
/ (fcn) USART_ReceiveData 8
|   USART_ReceiveData ();
| :::::::      ; JMP XREF from 0x08009e70 (USART2_IRQHandler)
| :::::::      ; JMP XREF from 0x08009ed2 (USART3_IRQHandler)
| --------> 0x08007578      8088           ldrh r0, [r0, 4]            ; load half from USART_DR
| :::::::   0x0800757a      c005           lsls r0, r0, 0x17
| :::::::   0x0800757c      c00d           lsrs r0, r0, 0x17
\ :::::::   0x0800757e      7047           bx lr
/ (fcn) USART_DMACmd 20
|       Caller: _USART2_Init _USART3_Init
|   USART_DMACmd ();
| :::::::      ; CALL XREF from 0x08004f30 (_USART2_Init)
| :::::::      ; CALL XREF from 0x08004f3a (_USART2_Init)
| :::::::      ; CALL XREF from 0x080050f2 (_USART3_Init)
| :::::::      ; CALL XREF from 0x080050fc (_USART3_Init)
| :::::::   0x08007580      002a           cmp r2, 0
| :::::::   0x08007582      828a           ldrh r2, [r0, 0x14]
| ========< 0x08007584      02d0           beq 0x800758c
| :::::::   0x08007586      1143           orrs r1, r2
| :::::::   0x08007588      8182           strh r1, [r0, 0x14]
| :::::::   0x0800758a      7047           bx lr
| :::::::      ; JMP XREF from 0x08007584 (USART_DMACmd)
| --------> 0x0800758c      22ea0101       bic.w r1, r2, r1
| :::::::   0x08007590      8182           strh r1, [r0, 0x14]
\ :::::::   0x08007592      7047           bx lr
/ (fcn) USART_ITConfig 58
|       Caller: _USART2_Init _USART3_Init
|   USART_ITConfig ();
| :::::::      ; CALL XREF from 0x08004ef6 (_USART2_Init)
| :::::::      ; CALL XREF from 0x08004f02 (_USART2_Init)
| :::::::      ; CALL XREF from 0x080050ba (_USART3_Init)
| :::::::      ; CALL XREF from 0x080050c6 (_USART3_Init)
| :::::::   0x08007594      10b4           push {r4}
| :::::::   0x08007596      0b46           mov r3, r1
| :::::::   0x08007598      dbb2           uxtb r3, r3
| :::::::   0x0800759a      5b09           lsrs r3, r3, 5
| :::::::   0x0800759c      0124           movs r4, 1                  ; 1
| :::::::   0x0800759e      01f01f01       and r1, r1, 0x1f
| :::::::   0x080075a2      04fa01f1       lsl.w r1, r4, r1
| :::::::   0x080075a6      012b           cmp r3, 1                   ; 1
| ========< 0x080075a8      01d1           bne 0x80075ae
| :::::::   0x080075aa      0c30           adds r0, 0xc
| ========< 0x080075ac      04e0           b 0x80075b8
| :::::::      ; JMP XREF from 0x080075a8 (USART_ITConfig)
| --------> 0x080075ae      022b           cmp r3, 2                   ; 2
| ========< 0x080075b0      01d1           bne 0x80075b6
| :::::::   0x080075b2      1030           adds r0, 0x10
| ========< 0x080075b4      00e0           b 0x80075b8
| :::::::      ; JMP XREF from 0x080075b0 (USART_ITConfig)
| --------> 0x080075b6      1430           adds r0, 0x14
| :::::::      ; JMP XREF from 0x080075ac (USART_ITConfig)
| :::::::      ; JMP XREF from 0x080075b4 (USART_ITConfig)
| --------> 0x080075b8      002a           cmp r2, 0
| :::::::   0x080075ba      0268           ldr r2, [r0]
| ========< 0x080075bc      02d0           beq 0x80075c4
| :::::::   0x080075be      1143           orrs r1, r2
| :::::::   0x080075c0      0160           str r1, [r0]
| ========< 0x080075c2      02e0           b 0x80075ca
| :::::::      ; JMP XREF from 0x080075bc (USART_ITConfig)
| --------> 0x080075c4      22ea0101       bic.w r1, r2, r1
| :::::::   0x080075c8      0160           str r1, [r0]
| :::::::      ; JMP XREF from 0x080075c2 (USART_ITConfig)
| --------> 0x080075ca      10bc           pop {r4}
\ :::::::   0x080075cc      7047           bx lr
/ (fcn) USART_ClearFlag 6
|       Caller: _USART2_Init _USART3_Init USART3_IRQHandler USART2_IRQHandler
|   USART_ClearFlag ();
| :::::::      ; CALL XREF from 0x08004f4a (_USART2_Init)
| :::::::      ; CALL XREF from 0x0800510c (_USART3_Init)
| :::::::      ; CALL XREF from 0x08009e4c (USART2_IRQHandler)
| :::::::      ; CALL XREF from 0x08009eae (USART3_IRQHandler)
| :::::::   0x080075ce      c943           mvns r1, r1
| :::::::   0x080075d0      0180           strh r1, [r0]
\ :::::::   0x080075d2      7047           bx lr
/ (fcn) USART_GetITStatus 72
|       Caller: USART3_IRQHandler USART2_IRQHandler
|   USART_GetITStatus ();
| :::::::      ; CALL XREF from 0x08009e40 (USART2_IRQHandler)
| :::::::      ; CALL XREF from 0x08009e5e (USART2_IRQHandler)
| :::::::      ; CALL XREF from 0x08009ea2 (USART3_IRQHandler)
| :::::::      ; CALL XREF from 0x08009ec0 (USART3_IRQHandler)
| :::::::   0x080075d4      30b4           push {r4, r5}
| :::::::   0x080075d6      0a46           mov r2, r1
| :::::::   0x080075d8      0021           movs r1, 0
| :::::::   0x080075da      1346           mov r3, r2
| :::::::   0x080075dc      dbb2           uxtb r3, r3
| :::::::   0x080075de      5b09           lsrs r3, r3, 5
| :::::::   0x080075e0      0124           movs r4, 1                  ; 1
| :::::::   0x080075e2      02f01f05       and r5, r2, 0x1f
| :::::::   0x080075e6      04fa05f5       lsl.w r5, r4, r5
| :::::::   0x080075ea      012b           cmp r3, 1                   ; 1
| ========< 0x080075ec      02d1           bne 0x80075f4
| :::::::   0x080075ee      8389           ldrh r3, [r0, 0xc]
| :::::::   0x080075f0      2b40           ands r3, r5
| ========< 0x080075f2      06e0           b 0x8007602
| :::::::      ; JMP XREF from 0x080075ec (USART_GetITStatus)
| --------> 0x080075f4      022b           cmp r3, 2                   ; 2
| ========< 0x080075f6      02d1           bne 0x80075fe
| :::::::   0x080075f8      038a           ldrh r3, [r0, 0x10]
| :::::::   0x080075fa      2b40           ands r3, r5
| ========< 0x080075fc      01e0           b 0x8007602
| :::::::      ; JMP XREF from 0x080075f6 (USART_GetITStatus)
| --------> 0x080075fe      838a           ldrh r3, [r0, 0x14]
| :::::::   0x08007600      2b40           ands r3, r5
| :::::::      ; JMP XREF from 0x080075f2 (USART_GetITStatus)
| :::::::      ; JMP XREF from 0x080075fc (USART_GetITStatus)
| --------> 0x08007602      120a           lsrs r2, r2, 8
| :::::::   0x08007604      04fa02f2       lsl.w r2, r4, r2
| :::::::   0x08007608      0088           ldrh r0, [r0]
| :::::::   0x0800760a      1040           ands r0, r2
| :::::::   0x0800760c      002b           cmp r3, 0
| ========< 0x0800760e      02d0           beq 0x8007616
| :::::::   0x08007610      0028           cmp r0, 0
| ========< 0x08007612      00d0           beq 0x8007616
| :::::::   0x08007614      2146           mov r1, r4
| :::::::      ; JMP XREF from 0x0800760e (USART_GetITStatus)
| :::::::      ; JMP XREF from 0x08007612 (USART_GetITStatus)
| --------> 0x08007616      0846           mov r0, r1
| :::::::   0x08007618      30bc           pop {r4, r5}
\ :::::::   0x0800761a      7047           bx lr
/ (fcn) USART_ClearITPendingBit 16
|       Caller: USART3_IRQHandler USART2_IRQHandler
|   USART_ClearITPendingBit ();
| :::::::      ; CALL XREF from 0x08009e54 (USART2_IRQHandler)
| :::::::      ; CALL XREF from 0x08009eb6 (USART3_IRQHandler)
| :::::::   0x0800761c      0122           movs r2, 1                  ; 1
| :::::::   0x0800761e      090a           lsrs r1, r1, 8
| :::::::   0x08007620      02fa01f1       lsl.w r1, r2, r1
| :::::::   0x08007624      89b2           uxth r1, r1
| :::::::   0x08007626      c943           mvns r1, r1
| :::::::   0x08007628      0180           strh r1, [r0]
\ :::::::   0x0800762a      7047           bx lr
/ (fcn) DMA_DeInit 236
|       Caller: _USART3_DMAInit _USART2_DMAInit
|   DMA_DeInit ();
| :::::::      ; CALL XREF from 0x08004f86 (_USART2_DMAInit)
| :::::::      ; CALL XREF from 0x08004fd6 (_USART2_DMAInit)
| :::::::      ; CALL XREF from 0x0800513c (_USART3_DMAInit)
| :::::::      ; CALL XREF from 0x0800518e (_USART3_DMAInit)
| :::::::   0x0800762c      0168           ldr r1, [r0]                ; check if this is the correct funtion name
| :::::::   0x0800762e      4ff6fe72       movw r2, 0xfffe
| :::::::   0x08007632      1140           ands r1, r2
| :::::::   0x08007634      0160           str r1, [r0]
| :::::::   0x08007636      0021           movs r1, 0
| :::::::   0x08007638      0160           str r1, [r0]
| :::::::   0x0800763a      4160           str r1, [r0, 4]
| :::::::   0x0800763c      8160           str r1, [r0, 8]
| :::::::   0x0800763e      c160           str r1, [r0, 0xc]
| :::::::   0x08007640      5e49           ldr r1, [0x080077bc]        ; [0x80077bc:4]=0x40026008
| :::::::   0x08007642      8842           cmp r0, r1
| ========< 0x08007644      05d1           bne 0x8007652
| :::::::   0x08007646      5e48           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x08007648      0168           ldr r1, [r0]
| :::::::   0x0800764a      41f00f01       orr r1, r1, 0xf
| :::::::   0x0800764e      0160           str r1, [r0]
| :::::::   0x08007650      7047           bx lr
| :::::::      ; JMP XREF from 0x08007644 (DMA_DeInit)
| --------> 0x08007652      5c49           ldr r1, [0x080077c4]        ; [0x80077c4:4]=0x4002601c
| :::::::   0x08007654      8842           cmp r0, r1
| ========< 0x08007656      05d1           bne 0x8007664
| :::::::   0x08007658      5948           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x0800765a      0168           ldr r1, [r0]
| :::::::   0x0800765c      41f0f001       orr r1, r1, 0xf0
| :::::::   0x08007660      0160           str r1, [r0]
| :::::::   0x08007662      7047           bx lr
| :::::::      ; JMP XREF from 0x08007656 (DMA_DeInit)
| --------> 0x08007664      5849           ldr r1, [0x080077c8]        ; [0x80077c8:4]=0x40026030
| :::::::   0x08007666      8842           cmp r0, r1
| ========< 0x08007668      05d1           bne 0x8007676
| :::::::   0x0800766a      5548           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x0800766c      0168           ldr r1, [r0]
| :::::::   0x0800766e      41f47061       orr r1, r1, 0xf00
| :::::::   0x08007672      0160           str r1, [r0]
| :::::::   0x08007674      7047           bx lr
| :::::::      ; JMP XREF from 0x08007668 (DMA_DeInit)
| --------> 0x08007676      5549           ldr r1, [0x080077cc]        ; [0x80077cc:4]=0x40026044
| :::::::   0x08007678      8842           cmp r0, r1
| ========< 0x0800767a      05d1           bne 0x8007688
| :::::::   0x0800767c      5048           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x0800767e      0168           ldr r1, [r0]
| :::::::   0x08007680      41f47041       orr r1, r1, 0xf000
| :::::::   0x08007684      0160           str r1, [r0]
| :::::::   0x08007686      7047           bx lr
| :::::::      ; JMP XREF from 0x0800767a (DMA_DeInit)
| --------> 0x08007688      5149           ldr r1, [0x080077d0]        ; [0x80077d0:4]=0x40026058
| :::::::   0x0800768a      8842           cmp r0, r1
| ========< 0x0800768c      05d1           bne 0x800769a
| :::::::   0x0800768e      4c48           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x08007690      0168           ldr r1, [r0]
| :::::::   0x08007692      41f47021       orr r1, r1, 0xf0000
| :::::::   0x08007696      0160           str r1, [r0]
| :::::::   0x08007698      7047           bx lr
| :::::::      ; JMP XREF from 0x0800768c (DMA_DeInit)
| --------> 0x0800769a      4e49           ldr r1, [0x080077d4]        ; [0x80077d4:4]=0x4002606c
| :::::::   0x0800769c      8842           cmp r0, r1
| ========< 0x0800769e      05d1           bne 0x80076ac
| :::::::   0x080076a0      4748           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x080076a2      0168           ldr r1, [r0]
| :::::::   0x080076a4      41f47001       orr r1, r1, 0xf00000
| :::::::   0x080076a8      0160           str r1, [r0]
| :::::::   0x080076aa      7047           bx lr
| :::::::      ; JMP XREF from 0x0800769e (DMA_DeInit)
| --------> 0x080076ac      4a49           ldr r1, [0x080077d8]        ; [0x80077d8:4]=0x40026080
| :::::::   0x080076ae      8842           cmp r0, r1
| ========< 0x080076b0      05d1           bne 0x80076be
| :::::::   0x080076b2      4348           ldr r0, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x080076b4      0168           ldr r1, [r0]
| :::::::   0x080076b6      41f07061       orr r1, r1, 0xf000000
| :::::::   0x080076ba      0160           str r1, [r0]
| :::::::   0x080076bc      7047           bx lr
| :::::::      ; JMP XREF from 0x080076b0 (DMA_DeInit)
| --------> 0x080076be      4749           ldr r1, [0x080077dc]        ; [0x80077dc:4]=0x40026408
| :::::::   0x080076c0      8842           cmp r0, r1
| ========< 0x080076c2      05d1           bne 0x80076d0
| :::::::   0x080076c4      4648           ldr r0, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x080076c6      0168           ldr r1, [r0]
| :::::::   0x080076c8      41f00f01       orr r1, r1, 0xf
| :::::::   0x080076cc      0160           str r1, [r0]
| :::::::   0x080076ce      7047           bx lr
| :::::::      ; JMP XREF from 0x080076c2 (DMA_DeInit)
| --------> 0x080076d0      4449           ldr r1, [0x080077e4]        ; [0x80077e4:4]=0x4002641c
| :::::::   0x080076d2      8842           cmp r0, r1
| ========< 0x080076d4      05d1           bne 0x80076e2
| :::::::   0x080076d6      4248           ldr r0, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x080076d8      0168           ldr r1, [r0]
| :::::::   0x080076da      41f0f001       orr r1, r1, 0xf0
| :::::::   0x080076de      0160           str r1, [r0]
| :::::::   0x080076e0      7047           bx lr
| :::::::      ; JMP XREF from 0x080076d4 (DMA_DeInit)
| --------> 0x080076e2      4149           ldr r1, [0x080077e8]        ; [0x80077e8:4]=0x40026430
| :::::::   0x080076e4      8842           cmp r0, r1
| ========< 0x080076e6      05d1           bne 0x80076f4
| :::::::   0x080076e8      3d48           ldr r0, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x080076ea      0168           ldr r1, [r0]
| :::::::   0x080076ec      41f47061       orr r1, r1, 0xf00
| :::::::   0x080076f0      0160           str r1, [r0]
| :::::::   0x080076f2      7047           bx lr
| :::::::      ; JMP XREF from 0x080076e6 (DMA_DeInit)
| --------> 0x080076f4      3d49           ldr r1, [0x080077ec]        ; [0x80077ec:4]=0x40026444
| :::::::   0x080076f6      8842           cmp r0, r1
| ========< 0x080076f8      05d1           bne 0x8007706
| :::::::   0x080076fa      3948           ldr r0, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x080076fc      0168           ldr r1, [r0]
| :::::::   0x080076fe      41f47041       orr r1, r1, 0xf000
| :::::::   0x08007702      0160           str r1, [r0]
| :::::::   0x08007704      7047           bx lr
| :::::::      ; JMP XREF from 0x080076f8 (DMA_DeInit)
| --------> 0x08007706      3a49           ldr r1, [0x080077f0]        ; [0x80077f0:4]=0x40026458
| :::::::   0x08007708      8842           cmp r0, r1
| ========< 0x0800770a      04d1           bne 0x8007716
| :::::::   0x0800770c      3448           ldr r0, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x0800770e      0168           ldr r1, [r0]
| :::::::   0x08007710      41f47021       orr r1, r1, 0xf0000
| :::::::   0x08007714      0160           str r1, [r0]
| :::::::      ; JMP XREF from 0x0800770a (DMA_DeInit)
\ --------> 0x08007716      7047           bx lr
/ (fcn) DMA_Init 54
|       Caller: _USART3_DMAInit _USART2_DMAInit
|   DMA_Init ();
| :::::::      ; CALL XREF from 0x08004fc2 (_USART2_DMAInit)
| :::::::      ; CALL XREF from 0x08005002 (_USART2_DMAInit)
| :::::::      ; CALL XREF from 0x08005172 (_USART3_DMAInit)
| :::::::      ; CALL XREF from 0x080051b8 (_USART3_DMAInit)
| :::::::   0x08007718      0268           ldr r2, [r0]
| :::::::   0x0800771a      6ff30e12       bfc r2, 4, 0xb
| :::::::   0x0800771e      8b68           ldr r3, [r1, 8]
| :::::::   0x08007720      1a43           orrs r2, r3
| :::::::   0x08007722      0b6a           ldr r3, [r1, 0x20]
| :::::::   0x08007724      1a43           orrs r2, r3
| :::::::   0x08007726      0b69           ldr r3, [r1, 0x10]
| :::::::   0x08007728      1a43           orrs r2, r3
| :::::::   0x0800772a      4b69           ldr r3, [r1, 0x14]
| :::::::   0x0800772c      1a43           orrs r2, r3
| :::::::   0x0800772e      8b69           ldr r3, [r1, 0x18]
| :::::::   0x08007730      1a43           orrs r2, r3
| :::::::   0x08007732      cb69           ldr r3, [r1, 0x1c]
| :::::::   0x08007734      1a43           orrs r2, r3
| :::::::   0x08007736      4b6a           ldr r3, [r1, 0x24]
| :::::::   0x08007738      1a43           orrs r2, r3
| :::::::   0x0800773a      8b6a           ldr r3, [r1, 0x28]
| :::::::   0x0800773c      1a43           orrs r2, r3
| :::::::   0x0800773e      0260           str r2, [r0]
| :::::::   0x08007740      ca68           ldr r2, [r1, 0xc]
| :::::::   0x08007742      4260           str r2, [r0, 4]
| :::::::   0x08007744      0a68           ldr r2, [r1]
| :::::::   0x08007746      8260           str r2, [r0, 8]
| :::::::   0x08007748      4968           ldr r1, [r1, 4]
| :::::::   0x0800774a      c160           str r1, [r0, 0xc]
\ :::::::   0x0800774c      7047           bx lr
/ (fcn) DMA_Cmd 24
|       Caller: _USART2_DMAInit _LED_C_CMDSend _LED_KeyPosBSSend _LED_CMDSend DMA1_Channel7_IRQHandler
|               _USART2_RxMemInit _USART3_RxMemInit _USART3_DMAInit _MSG_CMDPrepareOrSend
|   DMA_Cmd ();
| :::::::      ; XREFS: JMP 0x08005776  JMP 0x08009e90  CALL 0x08005014  CALL 0x08005188  CALL 0x080051c6  CALL 0x0800521e  CALL 0x08005392  CALL 0x08005458  CALL 0x080054ce  
| :::::::      ; XREFS: CALL 0x080054e8  CALL 0x0800551e  CALL 0x08005536  CALL 0x0800556c  CALL 0x08005848  CALL 0x08009e26  
| --------> 0x0800774e      0029           cmp r1, 0                   ; is this this funtion?
| :::::::   0x08007750      0168           ldr r1, [r0]
| ========< 0x08007752      03d0           beq 0x800775c
| :::::::   0x08007754      41f00101       orr r1, r1, 1
| :::::::   0x08007758      0160           str r1, [r0]
| :::::::   0x0800775a      7047           bx lr
| :::::::      ; JMP XREF from 0x08007752 (DMA_Cmd)
| --------> 0x0800775c      4ff6fe72       movw r2, 0xfffe
| :::::::   0x08007760      1140           ands r1, r2
| :::::::   0x08007762      0160           str r1, [r0]
\ :::::::   0x08007764      7047           bx lr
/ (fcn) DMA_SetCurrDataCounter 4
|       Caller: _LED_CMDSend _MSG_CMDPrepareOrSend _LED_C_CMDSend _LED_KeyPosBSSend _BLE_SendMSG
|   DMA_SetCurrDataCounter ();
| :::::::      ; XREFS: CALL 0x08005216  CALL 0x0800538a  CALL 0x08005450  CALL 0x080054c6  CALL 0x0800576a  CALL 0x08005840  
| :::::::   0x08007766      4160           str r1, [r0, 4]             ; is this this funtion?
\ :::::::   0x08007768      7047           bx lr
/ (fcn) DMA_ITConfig 20
|       Caller: _USART3_DMAInit _USART2_DMAInit
|   DMA_ITConfig ();
| :::::::      ; CALL XREF from 0x08004fcc (_USART2_DMAInit)
| :::::::      ; CALL XREF from 0x0800500c (_USART2_DMAInit)
| :::::::      ; CALL XREF from 0x0800517c (_USART3_DMAInit)
| :::::::   0x0800776a      002a           cmp r2, 0                   ; is this this function?
| :::::::   0x0800776c      0268           ldr r2, [r0]
| ========< 0x0800776e      02d0           beq 0x8007776
| :::::::   0x08007770      1143           orrs r1, r2
| :::::::   0x08007772      0160           str r1, [r0]
| :::::::   0x08007774      7047           bx lr
| :::::::      ; JMP XREF from 0x0800776e (DMA_ITConfig)
| --------> 0x08007776      22ea0101       bic.w r1, r2, r1
| :::::::   0x0800777a      0160           str r1, [r0]
\ :::::::   0x0800777c      7047           bx lr
/ (fcn) DMA_ClearFlag 16
|       Caller: _USART3_RxMemInit _USART3_DMAInit _USART2_RxMemInit
|   DMA_ClearFlag ();
| :::::::      ; CALL XREF from 0x080051be (_USART3_DMAInit)
| :::::::      ; CALL XREF from 0x080054f0 (_USART2_RxMemInit)
| :::::::      ; CALL XREF from 0x0800553e (_USART3_RxMemInit)
| :::::::   0x0800777e      c100           lsls r1, r0, 3
| ========< 0x08007780      02d4           bmi 0x8007788
| :::::::   0x08007782      0f49           ldr r1, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x08007784      0860           str r0, [r1]
| :::::::   0x08007786      7047           bx lr
| :::::::      ; JMP XREF from 0x08007780 (DMA_ClearFlag)
| --------> 0x08007788      1549           ldr r1, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x0800778a      0860           str r0, [r1]
\ :::::::   0x0800778c      7047           bx lr
/ (fcn) DMA_GetITStatus 26
|       Caller: DMA1_Channel2_IRQHandler DMA1_Channel7_IRQHandler
|   DMA_GetITStatus ();
| :::::::      ; CALL XREF from 0x08009e12 (DMA1_Channel7_IRQHandler)
| :::::::      ; CALL XREF from 0x08009e7a (DMA1_Channel2_IRQHandler)
| :::::::   0x0800778e      0021           movs r1, 0
| :::::::   0x08007790      c200           lsls r2, r0, 3
| ========< 0x08007792      02d4           bmi 0x800779a
| :::::::   0x08007794      174a           ldr r2, [0x080077f4]        ; [0x80077f4:4]=0x40026000
| :::::::   0x08007796      1268           ldr r2, [r2]
| ========< 0x08007798      01e0           b 0x800779e
| :::::::      ; JMP XREF from 0x08007792 (DMA_GetITStatus)
| --------> 0x0800779a      174a           ldr r2, [0x080077f8]        ; [0x80077f8:4]=0x40026400
| :::::::   0x0800779c      1268           ldr r2, [r2]
| :::::::      ; JMP XREF from 0x08007798 (DMA_GetITStatus)
| --------> 0x0800779e      0242           tst r2, r0
| ========< 0x080077a0      00d0           beq 0x80077a4
| :::::::   0x080077a2      0121           movs r1, 1                  ; 1
| :::::::      ; JMP XREF from 0x080077a0 (DMA_GetITStatus)
| --------> 0x080077a4      0846           mov r0, r1
\ :::::::   0x080077a6      7047           bx lr
/ (fcn) DMA_ClearITPendingBit 16
|       Caller: DMA1_Channel2_IRQHandler DMA1_Channel7_IRQHandler
|   DMA_ClearITPendingBit ();
| :::::::      ; CALL XREF from 0x08009e1e (DMA1_Channel7_IRQHandler)
| :::::::      ; CALL XREF from 0x08009e84 (DMA1_Channel2_IRQHandler)
| :::::::   0x080077a8      c100           lsls r1, r0, 3
| ========< 0x080077aa      02d4           bmi 0x80077b2
| :::::::   0x080077ac      0449           ldr r1, [0x080077c0]        ; [0x80077c0:4]=0x40026004
| :::::::   0x080077ae      0860           str r0, [r1]
| :::::::   0x080077b0      7047           bx lr
| :::::::      ; JMP XREF from 0x080077aa (DMA_ClearITPendingBit)
| --------> 0x080077b2      0b49           ldr r1, [0x080077e0]        ; [0x80077e0:4]=0x40026404
| :::::::   0x080077b4      0860           str r0, [r1]
\ :::::::   0x080077b6      7047           bx lr
  :::::::   0x080077b8      0000           movs r0, r0
  :::::::   0x080077ba      0000           movs r0, r0
  :::::::      ; DATA XREF from 0x08007640 (DMA_DeInit)
  :::::::   0x080077bc      .dword 0x40026008
  :::::::      ; XREFS: DATA 0x08007646  DATA 0x08007658  DATA 0x0800766a  DATA 0x0800767c  DATA 0x0800768e  DATA 0x080076a0  DATA 0x080076b2  DATA 0x08007782  DATA 0x080077ac  
  :::::::   0x080077c0      .dword 0x40026004
  :::::::      ; DATA XREF from 0x08007652 (DMA_DeInit)
  :::::::   0x080077c4      .dword 0x4002601c
  :::::::      ; DATA XREF from 0x08007664 (DMA_DeInit)
  :::::::   0x080077c8      .dword 0x40026030
  :::::::      ; DATA XREF from 0x08007676 (DMA_DeInit)
  :::::::   0x080077cc      .dword 0x40026044
  :::::::      ; DATA XREF from 0x08007688 (DMA_DeInit)
  :::::::   0x080077d0      .dword 0x40026058
  :::::::      ; DATA XREF from 0x0800769a (DMA_DeInit)
  :::::::   0x080077d4      .dword 0x4002606c
  :::::::      ; DATA XREF from 0x080076ac (DMA_DeInit)
  :::::::   0x080077d8      .dword 0x40026080
  :::::::      ; DATA XREF from 0x080076be (DMA_DeInit)
  :::::::   0x080077dc      .dword 0x40026408
  :::::::      ; XREFS: DATA 0x080076c4  DATA 0x080076d6  DATA 0x080076e8  DATA 0x080076fa  DATA 0x0800770c  DATA 0x08007788  DATA 0x080077b2  
  :::::::   0x080077e0      .dword 0x40026404
  :::::::      ; DATA XREF from 0x080076d0 (DMA_DeInit)
  :::::::   0x080077e4      .dword 0x4002641c
  :::::::      ; DATA XREF from 0x080076e2 (DMA_DeInit)
  :::::::   0x080077e8      .dword 0x40026430
  :::::::      ; DATA XREF from 0x080076f4 (DMA_DeInit)
  :::::::   0x080077ec      .dword 0x40026444
  :::::::      ; DATA XREF from 0x08007706 (DMA_DeInit)
  :::::::   0x080077f0      .dword 0x40026458
  :::::::      ; DATA XREF from 0x08007794 (DMA_GetITStatus)
  :::::::   0x080077f4      .dword 0x40026000
  :::::::      ; DATA XREF from 0x0800779a (DMA_GetITStatus)
  :::::::   0x080077f8      .dword 0x40026400
/ (fcn) memcpy 12
|       Caller: USB_PMAToUserBufferCopy _LED_C_CMDSend _LED_KeyPosBSSend _BLE_DMATxBufferFill
|               _LED_CMDSend _BLE_TxBufferFill _USART2_RxMemInit _USART3_RxMemInit _MSG_Get
|               _MSG_CMDPrepareOrSend
|   memcpy ();
| :::::::      ; XREFS: CALL 0x08005208  CALL 0x0800525e  CALL 0x080053f0  CALL 0x080054ba  CALL 0x0800550a  CALL 0x08005558  CALL 0x08005832  CALL 0x08006076  CALL 0x08006090  
| :::::::      ; XREFS: CALL 0x08007858  CALL 0x08007862  CALL 0x0800786e  CALL 0x080078e0  CALL 0x080078ec  CALL 0x080078f8  
| :::::::   0x080077fc      10b5           push {r4, lr}               ; r0: dst base, r1: src base, r2: size
| :::::::   0x080077fe      0446           mov r4, r0
| :::::::   0x08007800      00f0c4f9       bl _memcpy                  ; void *memcpy(void *s1, const void *s2, size_t n)
| :::::::   0x08007804      2046           mov r0, r4
\ :::::::   0x08007806      10bd           pop {r4, pc}
\ :::::::   ;-- BLE_TxBufferFill:
/ (fcn) _BLE_TxBufferFill 116
|       Caller: _MSG_CMDPrepareOrSend
|   _BLE_TxBufferFill ();
| :::::::      ; CALL XREF from 0x080057dc (_MSG_CMDPrepareOrSend)
| :::::::      ; CALL XREF from 0x080057e8 (_MSG_CMDPrepareOrSend)
| :::::::   0x08007808      f8b5           push {r3, r4, r5, r6, r7, lr}
| :::::::   0x0800780a      0446           mov r4, r0
| :::::::   0x0800780c      444d           ldr r5, [0x08007920]        ; [0x8007920:4]=0x200014a4
| :::::::   0x0800780e      2a88           ldrh r2, [r5]
| :::::::   0x08007810      1046           mov r0, r2
| :::::::   0x08007812      6b88           ldrh r3, [r5, 2]
| :::::::   0x08007814      03f50076       add.w r6, r3, 0x200
| :::::::   0x08007818      361a           subs r6, r6, r0
| :::::::   0x0800781a      761e           subs r6, r6, 1
| :::::::   0x0800781c      03f50073       add.w r3, r3, 0x200
| :::::::   0x08007820      9b1a           subs r3, r3, r2
| :::::::   0x08007822      5b1e           subs r3, r3, 1
| :::::::   0x08007824      3712           asrs r7, r6, 8
| :::::::   0x08007826      06ebd756       add.w r6, r6, r7, lsr 23
| :::::::   0x0800782a      7612           asrs r6, r6, 9
| :::::::   0x0800782c      a3eb4623       sub.w r3, r3, r6, lsl 9
| :::::::   0x08007830      9bb2           uxth r3, r3
| :::::::   0x08007832      8b42           cmp r3, r1
| ========< 0x08007834      20d3           blo 0x8007878
| :::::::   0x08007836      0b18           adds r3, r1, r0
| :::::::   0x08007838      8a18           adds r2, r1, r2
| :::::::   0x0800783a      1e12           asrs r6, r3, 8
| :::::::   0x0800783c      03ebd653       add.w r3, r3, r6, lsr 23
| :::::::   0x08007840      5b12           asrs r3, r3, 9
| :::::::   0x08007842      a2eb4326       sub.w r6, r2, r3, lsl 9
| :::::::   0x08007846      b6b2           uxth r6, r6
| :::::::   0x08007848      4319           adds r3, r0, r5
| :::::::   0x0800784a      b042           cmp r0, r6
| ========< 0x0800784c      0cdb           blt 0x8007868
| :::::::   0x0800784e      8f1b           subs r7, r1, r6
| :::::::   0x08007850      bfb2           uxth r7, r7
| :::::::   0x08007852      3a46           mov r2, r7
| :::::::   0x08007854      2146           mov r1, r4
| :::::::   0x08007856      181d           adds r0, r3, 4
| :::::::   0x08007858      fff7d0ff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| :::::::   0x0800785c      3246           mov r2, r6
| :::::::   0x0800785e      3919           adds r1, r7, r4
| :::::::   0x08007860      281d           adds r0, r5, 4
| :::::::   0x08007862      fff7cbff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| ========< 0x08007866      04e0           b 0x8007872
| :::::::      ; JMP XREF from 0x0800784c (_BLE_TxBufferFill)
| --------> 0x08007868      0a46           mov r2, r1
| :::::::   0x0800786a      2146           mov r1, r4
| :::::::   0x0800786c      181d           adds r0, r3, 4
| :::::::   0x0800786e      fff7c5ff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| :::::::      ; JMP XREF from 0x08007866 (_BLE_TxBufferFill)
| --------> 0x08007872      2e80           strh r6, [r5]
| :::::::   0x08007874      0120           movs r0, 1                  ; 1
| :::::::   0x08007876      f2bd           pop {r1, r4, r5, r6, r7, pc}
| :::::::      ; JMP XREF from 0x08007834 (_BLE_TxBufferFill)
| --------> 0x08007878      0020           movs r0, 0
\ :::::::   0x0800787a      f2bd           pop {r1, r4, r5, r6, r7, pc}
\ :::::::   ;-- BLE_DMATxBufferFill:
/ (fcn) _BLE_DMATxBufferFill 136
|       Caller: _BLE_SendMSG
|   _BLE_DMATxBufferFill ();
| :::::::      ; CALL XREF from 0x08005760 (_BLE_SendMSG)
| :::::::   0x0800787c      2de9f041       push.w {r4, r5, r6, r7, r8, lr}
| :::::::   0x08007880      0446           mov r4, r0
| :::::::   0x08007882      0e46           mov r6, r1
| :::::::   0x08007884      264d           ldr r5, [0x08007920]        ; [0x8007920:4]=0x200014a4
| :::::::   0x08007886      6988           ldrh r1, [r5, 2]
| :::::::   0x08007888      0846           mov r0, r1
| :::::::   0x0800788a      2a88           ldrh r2, [r5]
| :::::::   0x0800788c      02f50073       add.w r3, r2, 0x200
| :::::::   0x08007890      1b1a           subs r3, r3, r0
| :::::::   0x08007892      02f50072       add.w r2, r2, 0x200
| :::::::   0x08007896      521a           subs r2, r2, r1
| :::::::   0x08007898      1f12           asrs r7, r3, 8
| :::::::   0x0800789a      03ebd753       add.w r3, r3, r7, lsr 23
| :::::::   0x0800789e      5b12           asrs r3, r3, 9
| :::::::   0x080078a0      a2eb4322       sub.w r2, r2, r3, lsl 9
| :::::::   0x080078a4      92b2           uxth r2, r2
| :::::::   0x080078a6      002a           cmp r2, 0
| ========< 0x080078a8      01d1           bne 0x80078ae               ; jump if MSGSIZE != 0
| :::::::   0x080078aa      0020           movs r0, 0
| ========< 0x080078ac      28e0           b 0x8007900
| :::::::      ; JMP XREF from 0x080078a8 (_BLE_DMATxBufferFill)
| --------> 0x080078ae      b242           cmp r2, r6
| ========< 0x080078b0      00da           bge 0x80078b4
| :::::::   0x080078b2      1646           mov r6, r2
| :::::::      ; JMP XREF from 0x080078b0 (_BLE_DMATxBufferFill)
| --------> 0x080078b4      3346           mov r3, r6
| :::::::   0x080078b6      9a42           cmp r2, r3
| ========< 0x080078b8      21db           blt 0x80078fe
| :::::::   0x080078ba      1a18           adds r2, r3, r0
| :::::::   0x080078bc      7118           adds r1, r6, r1
| :::::::   0x080078be      1312           asrs r3, r2, 8
| :::::::   0x080078c0      02ebd352       add.w r2, r2, r3, lsr 23
| :::::::   0x080078c4      5212           asrs r2, r2, 9
| :::::::   0x080078c6      a1eb4227       sub.w r7, r1, r2, lsl 9
| :::::::   0x080078ca      bfb2           uxth r7, r7
| :::::::   0x080078cc      4119           adds r1, r0, r5
| :::::::   0x080078ce      b842           cmp r0, r7
| ========< 0x080078d0      0fdb           blt 0x80078f2
| :::::::   0x080078d2      a6eb0708       sub.w r8, r6, r7
| :::::::   0x080078d6      1ffa88f8       uxth.w r8, r8
| :::::::   0x080078da      4246           mov r2, r8
| :::::::   0x080078dc      091d           adds r1, r1, 4
| :::::::   0x080078de      2046           mov r0, r4
| :::::::   0x080078e0      fff78cff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| :::::::   0x080078e4      3a46           mov r2, r7
| :::::::   0x080078e6      291d           adds r1, r5, 4
| :::::::   0x080078e8      08eb0400       add.w r0, r8, r4
| :::::::   0x080078ec      fff786ff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| ========< 0x080078f0      04e0           b 0x80078fc
| :::::::      ; JMP XREF from 0x080078d0 (_BLE_DMATxBufferFill)
| --------> 0x080078f2      3246           mov r2, r6
| :::::::   0x080078f4      091d           adds r1, r1, 4
| :::::::   0x080078f6      2046           mov r0, r4
| :::::::   0x080078f8      fff780ff       bl memcpy                   ; void *memcpy(void *s1, const void *s2, size_t n)
| :::::::      ; JMP XREF from 0x080078f0 (_BLE_DMATxBufferFill)
| --------> 0x080078fc      6f80           strh r7, [r5, 2]
| :::::::      ; JMP XREF from 0x080078b8 (_BLE_DMATxBufferFill)
| --------> 0x080078fe      3046           mov r0, r6
| :::::::      ; JMP XREF from 0x080078ac (_BLE_DMATxBufferFill)
\ --------> 0x08007900      bde8f081       pop.w {r4, r5, r6, r7, r8, pc}
\ :::::::   ;-- BLE_MSGGetPendingTransferSize:
/ (fcn) _BLE_MSGGetPendingTransferSize 28
|       Caller: _BLE_IsMSGPending
|   _BLE_MSGGetPendingTransferSize ();
| :::::::      ; CALL XREF from 0x0800577c (_BLE_IsMSGPending)
| :::::::   0x08007904      0648           ldr r0, [0x08007920]        ; [0x8007920:4]=0x200014a4 ; 14a4:new byte counter, 14a6: old counter
| :::::::   0x08007906      0188           ldrh r1, [r0]               ; operations to make sure transfer size is within bounds
| :::::::   0x08007908      01f50071       add.w r1, r1, 0x200
| :::::::   0x0800790c      4088           ldrh r0, [r0, 2]
| :::::::   0x0800790e      081a           subs r0, r1, r0
| :::::::   0x08007910      0112           asrs r1, r0, 8
| :::::::   0x08007912      00ebd151       add.w r1, r0, r1, lsr 23
| :::::::   0x08007916      4912           asrs r1, r1, 9
| :::::::   0x08007918      a0eb4120       sub.w r0, r0, r1, lsl 9
| :::::::   0x0800791c      80b2           uxth r0, r0
\ :::::::   0x0800791e      7047           bx lr
  :::::::      ; DATA XREF from 0x0800780c (_BLE_TxBufferFill)
  :::::::      ; DATA XREF from 0x08007884 (_BLE_DMATxBufferFill)
  :::::::      ; DATA XREF from 0x08007904 (_BLE_MSGGetPendingTransferSize)
  :::::::   0x08007920      .dword 0x200014a4
| :::::::   ;-- Periphs_Reset:
/ (fcn) _Periphs_Reset 238
|       Caller: _TIM4_LFreqConfig _TIM4_HFreqConfig
|   _Periphs_Reset ();
| :::::::      ; CALL XREF from 0x08006170 (_TIM4_LFreqConfig)
| :::::::      ; CALL XREF from 0x080061dc (_TIM4_HFreqConfig)
| :::::::   0x08007924      80b5           push {r7, lr}
| :::::::   0x08007926      b0f1804f       cmp.w r0, 0x40000000        ; is r0 TIM2?
| ========< 0x0800792a      09d1           bne 0x8007940
| :::::::   0x0800792c      0121           movs r1, 1                  ; 1
| :::::::   0x0800792e      0846           mov r0, r1
| :::::::   0x08007930      fff7abf9       bl RCC_APB1PeriphResetCmd
| :::::::   0x08007934      0021           movs r1, 0
| :::::::   0x08007936      0120           movs r0, 1                  ; 1
| :::::::   0x08007938      bde80440       pop.w {r2, lr}
| ========< 0x0800793c      fff7a5b9       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x0800792a (_Periphs_Reset)
| --------> 0x08007940      4649           ldr r1, [0x08007a5c]        ; [0x8007a5c:4]=0x40000400 ; TIM3?
| :::::::   0x08007942      8842           cmp r0, r1
| ========< 0x08007944      09d1           bne 0x800795a
| :::::::   0x08007946      0121           movs r1, 1                  ; 1
| :::::::   0x08007948      0220           movs r0, 2                  ; 2
| :::::::   0x0800794a      fff79ef9       bl RCC_APB1PeriphResetCmd
| :::::::   0x0800794e      0021           movs r1, 0
| :::::::   0x08007950      0220           movs r0, 2                  ; 2
| :::::::   0x08007952      bde80440       pop.w {r2, lr}
| ========< 0x08007956      fff798b9       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x08007944 (_Periphs_Reset)
| --------> 0x0800795a      4149           ldr r1, [0x08007a60]        ; [0x8007a60:4]=0x40000800 ; TIM4?
| :::::::   0x0800795c      8842           cmp r0, r1
| ========< 0x0800795e      09d1           bne 0x8007974
| :::::::   0x08007960      0121           movs r1, 1                  ; 1
| :::::::   0x08007962      0420           movs r0, 4                  ; 4
| :::::::   0x08007964      fff791f9       bl RCC_APB1PeriphResetCmd   ; reset TIM4
| :::::::   0x08007968      0021           movs r1, 0
| :::::::   0x0800796a      0420           movs r0, 4                  ; 4
| :::::::   0x0800796c      bde80440       pop.w {r2, lr}
| ========< 0x08007970      fff78bb9       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x0800795e (_Periphs_Reset)
| --------> 0x08007974      3b49           ldr r1, [0x08007a64]        ; [0x8007a64:4]=0x40000c00
| :::::::   0x08007976      8842           cmp r0, r1
| ========< 0x08007978      09d1           bne 0x800798e
| :::::::   0x0800797a      0121           movs r1, 1                  ; 1
| :::::::   0x0800797c      0820           movs r0, 8                  ; 8
| :::::::   0x0800797e      fff784f9       bl RCC_APB1PeriphResetCmd
| :::::::   0x08007982      0021           movs r1, 0
| :::::::   0x08007984      0820           movs r0, 8                  ; 8
| :::::::   0x08007986      bde80440       pop.w {r2, lr}
| ========< 0x0800798a      fff77eb9       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x08007978 (_Periphs_Reset)
| --------> 0x0800798e      3649           ldr r1, [0x08007a68]        ; [0x8007a68:4]=0x40001000
| :::::::   0x08007990      8842           cmp r0, r1
| ========< 0x08007992      09d1           bne 0x80079a8
| :::::::   0x08007994      0121           movs r1, 1                  ; 1
| :::::::   0x08007996      1020           movs r0, 0x10               ; 16
| :::::::   0x08007998      fff777f9       bl RCC_APB1PeriphResetCmd
| :::::::   0x0800799c      0021           movs r1, 0
| :::::::   0x0800799e      1020           movs r0, 0x10               ; 16
| :::::::   0x080079a0      bde80440       pop.w {r2, lr}
| ========< 0x080079a4      fff771b9       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x08007992 (_Periphs_Reset)
| --------> 0x080079a8      3049           ldr r1, [0x08007a6c]        ; [0x8007a6c:4]=0x40001400
| :::::::   0x080079aa      8842           cmp r0, r1
| ========< 0x080079ac      09d1           bne 0x80079c2
| :::::::   0x080079ae      0121           movs r1, 1                  ; 1
| :::::::   0x080079b0      2020           movs r0, 0x20               ; 32
| :::::::   0x080079b2      fff76af9       bl RCC_APB1PeriphResetCmd
| :::::::   0x080079b6      0021           movs r1, 0
| :::::::   0x080079b8      2020           movs r0, 0x20               ; 32
| :::::::   0x080079ba      bde80440       pop.w {r2, lr}
| ========< 0x080079be      fff764b9       b.w RCC_APB1PeriphResetCmd
| :::::::      ; JMP XREF from 0x080079ac (_Periphs_Reset)
| --------> 0x080079c2      2b49           ldr r1, [0x08007a70]        ; [0x8007a70:4]=0x40010800
| :::::::   0x080079c4      8842           cmp r0, r1
| ========< 0x080079c6      09d1           bne 0x80079dc
| :::::::   0x080079c8      0121           movs r1, 1                  ; 1
| :::::::   0x080079ca      0420           movs r0, 4                  ; 4
| :::::::   0x080079cc      fff752f9       bl RCC_APB2PeriphResetCmd
| :::::::   0x080079d0      0021           movs r1, 0
| :::::::   0x080079d2      0420           movs r0, 4                  ; 4
| :::::::   0x080079d4      bde80440       pop.w {r2, lr}
| ========< 0x080079d8      fff74cb9       b.w RCC_APB2PeriphResetCmd
| :::::::      ; JMP XREF from 0x080079c6 (_Periphs_Reset)
| --------> 0x080079dc      2549           ldr r1, [0x08007a74]        ; [0x8007a74:4]=0x40010c00
| :::::::   0x080079de      8842           cmp r0, r1
| ========< 0x080079e0      09d1           bne 0x80079f6
| :::::::   0x080079e2      0121           movs r1, 1                  ; 1
| :::::::   0x080079e4      0820           movs r0, 8                  ; 8
| :::::::   0x080079e6      fff745f9       bl RCC_APB2PeriphResetCmd
| :::::::   0x080079ea      0021           movs r1, 0
| :::::::   0x080079ec      0820           movs r0, 8                  ; 8
| :::::::   0x080079ee      bde80440       pop.w {r2, lr}
| ::`=====< 0x080079f2      fff73fb9       b.w RCC_APB2PeriphResetCmd
| :: ::::      ; JMP XREF from 0x080079e0 (_Periphs_Reset)
| --------> 0x080079f6      2049           ldr r1, [0x08007a78]        ; [0x8007a78:4]=0x40011000
| :: ::::   0x080079f8      8842           cmp r0, r1
| ::,=====< 0x080079fa      09d1           bne 0x8007a10
| ::|::::   0x080079fc      0121           movs r1, 1                  ; 1
| ::|::::   0x080079fe      1020           movs r0, 0x10               ; 16
| ::|::::   0x08007a00      fff738f9       bl RCC_APB2PeriphResetCmd
| ::|::::   0x08007a04      0021           movs r1, 0
| ::|::::   0x08007a06      1020           movs r0, 0x10               ; 16
| ::|::::   0x08007a08      bde80440       pop.w {r2, lr}
| ::|`====< 0x08007a0c      fff732b9       b.w RCC_APB2PeriphResetCmd
| ::| :::      ; JMP XREF from 0x080079fa (_Periphs_Reset)
\ ::`-----> 0x08007a10      01bd           pop {r0, pc}
/ (fcn) TIM_TimeBaseInit 74
|       Caller: _TIM4_LFreqConfig _TIM4_HFreqConfig
|   TIM_TimeBaseInit ();
| ::  :::      ; CALL XREF from 0x08006194 (_TIM4_LFreqConfig)
| ::  :::      ; CALL XREF from 0x080061f8 (_TIM4_HFreqConfig)
| ::  :::   0x08007a12      0288           ldrh r2, [r0]
| ::  :::   0x08007a14      b0f1804f       cmp.w r0, 0x40000000
| :: ,====< 0x08007a18      08d0           beq 0x8007a2c
| :: |:::   0x08007a1a      104b           ldr r3, [0x08007a5c]        ; [0x8007a5c:4]=0x40000400
| :: |:::   0x08007a1c      9842           cmp r0, r3
| ::,=====< 0x08007a1e      05d0           beq 0x8007a2c
| ::||:::   0x08007a20      0f4b           ldr r3, [0x08007a60]        ; [0x8007a60:4]=0x40000800
| ::||:::   0x08007a22      9842           cmp r0, r3
| ========< 0x08007a24      02d0           beq 0x8007a2c
| ::||:::   0x08007a26      0f4b           ldr r3, [0x08007a64]        ; [0x8007a64:4]=0x40000c00
| ::||:::   0x08007a28      9842           cmp r0, r3
| ========< 0x08007a2a      04d1           bne 0x8007a36
| ::||:::      ; JMP XREF from 0x08007a18 (TIM_TimeBaseInit)
| ::||:::      ; JMP XREF from 0x08007a1e (TIM_TimeBaseInit)
| ::||:::      ; JMP XREF from 0x08007a24 (TIM_TimeBaseInit)
| --``----> 0x08007a2c      4ff68f73       movw r3, 0xff8f
| ::  :::   0x08007a30      1a40           ands r2, r3
| ::  :::   0x08007a32      4b88           ldrh r3, [r1, 2]
| ::  :::   0x08007a34      1a43           orrs r2, r3
| ::  :::      ; JMP XREF from 0x08007a2a (TIM_TimeBaseInit)
| --------> 0x08007a36      0c4b           ldr r3, [0x08007a68]        ; [0x8007a68:4]=0x40001000
| ::  :::   0x08007a38      9842           cmp r0, r3
| :: ,====< 0x08007a3a      07d0           beq 0x8007a4c
| :: |:::   0x08007a3c      0b4b           ldr r3, [0x08007a6c]        ; [0x8007a6c:4]=0x40001400
| :: |:::   0x08007a3e      9842           cmp r0, r3
| ::,=====< 0x08007a40      04d0           beq 0x8007a4c
| ::||:::   0x08007a42      4ff6ff43       movw r3, 0xfcff
| ::||:::   0x08007a46      1a40           ands r2, r3
| ::||:::   0x08007a48      0b89           ldrh r3, [r1, 8]
| ::||:::   0x08007a4a      1a43           orrs r2, r3
| ::||:::      ; JMP XREF from 0x08007a3a (TIM_TimeBaseInit)
| ::||:::      ; JMP XREF from 0x08007a40 (TIM_TimeBaseInit)
| ::``----> 0x08007a4c      0280           strh r2, [r0]               ; TIMx_CR1
| ::  :::   0x08007a4e      4a68           ldr r2, [r1, 4]
| ::  :::   0x08007a50      c262           str r2, [r0, 0x2c]          ; TIMx_ARR
| ::  :::   0x08007a52      0988           ldrh r1, [r1]
| ::  :::   0x08007a54      0185           strh r1, [r0, 0x28]         ; TIMx_PSC
| ::  :::   0x08007a56      0121           movs r1, 1                  ; 1
| ::  :::   0x08007a58      8182           strh r1, [r0, 0x14]         ; TIMx_EGR
\ ::  :::   0x08007a5a      7047           bx lr
  ::  :::      ; DATA XREF from 0x08007940 (_Periphs_Reset)
  ::  :::      ; DATA XREF from 0x08007a1a (TIM_TimeBaseInit)
  ::  :::   0x08007a5c      .dword 0x40000400
  ::  :::      ; DATA XREF from 0x0800795a (_Periphs_Reset)
  ::  :::      ; DATA XREF from 0x08007a20 (TIM_TimeBaseInit)
  ::  :::   0x08007a60      .dword 0x40000800
  ::  :::      ; DATA XREF from 0x08007974 (_Periphs_Reset)
  ::  :::      ; DATA XREF from 0x08007a26 (TIM_TimeBaseInit)
  ::  :::   0x08007a64      .dword 0x40000c00
  ::  :::      ; DATA XREF from 0x0800798e (_Periphs_Reset)
  ::  :::      ; DATA XREF from 0x08007a36 (TIM_TimeBaseInit)
  ::  :::   0x08007a68      .dword 0x40001000
  ::  :::      ; DATA XREF from 0x080079a8 (_Periphs_Reset)
  ::  :::      ; DATA XREF from 0x08007a3c (TIM_TimeBaseInit)
  ::  :::   0x08007a6c      .dword 0x40001400
  ::  :::      ; DATA XREF from 0x080079c2 (_Periphs_Reset)
  ::  :::   0x08007a70      .dword 0x40010800
  ::  :::      ; DATA XREF from 0x080079dc (_Periphs_Reset)
  ::  :::   0x08007a74      .dword 0x40010c00
  ::  :::      ; DATA XREF from 0x080079f6 (_Periphs_Reset)
  ::  :::   0x08007a78      .dword 0x40011000
/ (fcn) TIM_Cmd 24
|   TIM_Cmd ();
| ::  :::      ; JMP XREF from 0x08006254 (_TIM4_Disable)
| ::  :::      ; JMP XREF from 0x08006280 (_TIM4_Enable)
| --------> 0x08007a7c      0029           cmp r1, 0
| ::  :::   0x08007a7e      0188           ldrh r1, [r0]
| :: ,====< 0x08007a80      03d0           beq 0x8007a8a
| :: |:::   0x08007a82      41f00101       orr r1, r1, 1
| :: |:::   0x08007a86      0180           strh r1, [r0]
| :: |:::   0x08007a88      7047           bx lr
| :: |:::      ; JMP XREF from 0x08007a80 (TIM_Cmd)
| :: `----> 0x08007a8a      4ff6fe72       movw r2, 0xfffe
| ::  :::   0x08007a8e      1140           ands r1, r2
| ::  :::   0x08007a90      0180           strh r1, [r0]
\ ::  :::   0x08007a92      7047           bx lr
/ (fcn) TIM_ITConfig 20
|       Caller: _TIM4_LFreqConfig _TIM4_Enable _TIM4_HFreqConfig _TIM4_Disable
|   TIM_ITConfig ();
| ::  :::      ; CALL XREF from 0x080061a6 (_TIM4_LFreqConfig)
| ::  :::      ; CALL XREF from 0x0800620a (_TIM4_HFreqConfig)
| ::  :::      ; CALL XREF from 0x08006248 (_TIM4_Disable)
| ::  :::      ; CALL XREF from 0x08006274 (_TIM4_Enable)
| ::  :::   0x08007a94      002a           cmp r2, 0                   ; r1: bit to update, r2: state
| ::  :::   0x08007a96      8289           ldrh r2, [r0, 0xc]
| :: ,====< 0x08007a98      02d0           beq 0x8007aa0
| :: |:::   0x08007a9a      1143           orrs r1, r2
| :: |:::   0x08007a9c      8181           strh r1, [r0, 0xc]
| :: |:::   0x08007a9e      7047           bx lr
| :: |:::      ; JMP XREF from 0x08007a98 (TIM_ITConfig)
| :: `----> 0x08007aa0      22ea0101       bic.w r1, r2, r1
| ::  :::   0x08007aa4      8181           strh r1, [r0, 0xc]
\ ::  :::   0x08007aa6      7047           bx lr
/ (fcn) TIM_GenerateEvent 4
|       Caller: _TIM4_Enable
|   TIM_GenerateEvent ();
| ::  :::      ; CALL XREF from 0x08006262 (_TIM4_Enable)
| ::  :::   0x08007aa8      8182           strh r1, [r0, 0x14]         ; TIMx_EGR clear counter and generate update
\ ::  :::   0x08007aaa      7047           bx lr
/ (fcn) TIM_ClearFlag 6
|       Caller: _TIM4_LFreqConfig _TIM4_Enable _TIM4_HFreqConfig _TIM4_Disable
|   TIM_ClearFlag ();
| ::  :::      ; CALL XREF from 0x0800619c (_TIM4_LFreqConfig)
| ::  :::      ; CALL XREF from 0x08006200 (_TIM4_HFreqConfig)
| ::  :::      ; CALL XREF from 0x0800623e (_TIM4_Disable)
| ::  :::      ; CALL XREF from 0x0800626a (_TIM4_Enable)
| ::  :::   0x08007aac      c943           mvns r1, r1
| ::  :::   0x08007aae      0182           strh r1, [r0, 0x10]
\ ::  :::   0x08007ab0      7047           bx lr
/ (fcn) TIM_GetITStatus 24
|       Caller: TIM4_IRQHandler
|   TIM_GetITStatus ();
| ::  :::      ; CALL XREF from 0x08009ee0 (TIM4_IRQHandler)
| ::  :::   0x08007ab2      0022           movs r2, 0
| ::  :::   0x08007ab4      038a           ldrh r3, [r0, 0x10]
| ::  :::   0x08007ab6      0b40           ands r3, r1
| ::  :::   0x08007ab8      8089           ldrh r0, [r0, 0xc]
| ::  :::   0x08007aba      0840           ands r0, r1
| ::  :::   0x08007abc      002b           cmp r3, 0
| :: ,====< 0x08007abe      02d0           beq 0x8007ac6
| :: |:::   0x08007ac0      0028           cmp r0, 0
| ::,=====< 0x08007ac2      00d0           beq 0x8007ac6
| ::||:::   0x08007ac4      0122           movs r2, 1                  ; 1
| ::||:::      ; JMP XREF from 0x08007abe (TIM_GetITStatus)
| ::||:::      ; JMP XREF from 0x08007ac2 (TIM_GetITStatus)
| ::``----> 0x08007ac6      1046           mov r0, r2
\ ::  :::   0x08007ac8      7047           bx lr
/ (fcn) TIM_ClearITPendingBit 6
|       Caller: TIM4_IRQHandler
|   TIM_ClearITPendingBit ();
| ::  :::      ; CALL XREF from 0x08009eec (TIM4_IRQHandler)
| ::  :::   0x08007aca      c943           mvns r1, r1
| ::  :::   0x08007acc      0182           strh r1, [r0, 0x10]
\ ::  :::   0x08007ace      7047           bx lr
/ (fcn) TIM_InternalClockConfig 12
|       Caller: _TIM4_LFreqConfig _TIM4_HFreqConfig
|   TIM_InternalClockConfig ();
| ::  :::      ; CALL XREF from 0x08006176 (_TIM4_LFreqConfig)
| ::  :::      ; CALL XREF from 0x080061e2 (_TIM4_HFreqConfig)
| ::  :::   0x08007ad0      0189           ldrh r1, [r0, 8]            ; Disable slave mode to clock the prescaler directly with the internal clock
| ::  :::   0x08007ad2      4ff6f872       movw r2, 0xfff8
| ::  :::   0x08007ad6      1140           ands r1, r2
| ::  :::   0x08007ad8      0181           strh r1, [r0, 8]
\ ::  :::   0x08007ada      7047           bx lr
\ ::  :::   ;-- memset:
/ (fcn) _memset 102
|       Caller: memset
|   _memset ();
| ::  :::      ; CALL XREF from 0x0800697c (memset)
| ::  :::   0x08007adc      62f30f22       bfi r2, r2, 8, 8            ; fills range [r0, r0+r1] with r2
| ::  :::   0x08007ae0      62f31f42       bfi r2, r2, 0x10, 0x10
| ::  :::   0x08007ae4      4018           adds r0, r0, r1
| ::  :::   0x08007ae6      10f00303       ands r3, r0, 3
| :: ,====< 0x08007aea      08d0           beq 0x8007afe
| :: |:::   0x08007aec      c91a           subs r1, r1, r3
| ::,=====< 0x08007aee      1fd3           blo 0x8007b30
| ::||:::   0x08007af0      db07           lsls r3, r3, 0x1f
| ========< 0x08007af2      48bf           it mi
| ::||:::      ; JMP XREF from 0x08007af2 (_memset)
| --------> 0x08007af4      00f8012d       strb r2, [r0, -0x1]!
| ========< 0x08007af8      28bf           it hs
| ::||:::      ; JMP XREF from 0x08007af8 (_memset)
| --------> 0x08007afa      20f8022d       strh r2, [r0, -0x2]!
| ::||:::      ; JMP XREF from 0x08007aea (_memset)
| ::|`----> 0x08007afe      1300           movs r3, r2
| ::| :::   0x08007b00      30b4           push {r4, r5}
| ::| :::   0x08007b02      1446           mov r4, r2
| ::| :::   0x08007b04      1546           mov r5, r2
| ::| :::      ; JMP XREF from 0x08007b0e (_memset)
| ::|.----> 0x08007b06      1039           subs r1, 0x10
| ========< 0x08007b08      28bf           it hs
| ::|::::      ; JMP XREF from 0x08007b08 (_memset)
| --------> 0x08007b0a      20e93c00       stmdb r0!, {r2, r3, r4, r5}
| ::|`====< 0x08007b0e      fad8           bhi 0x8007b06
| ::| :::   0x08007b10      4907           lsls r1, r1, 0x1d
| ::|,====< 0x08007b12      28bf           it hs
| ::||:::      ; JMP XREF from 0x08007b12 (_memset)
| ::|`----> 0x08007b14      20e90c00       stmdb r0!, {r2, r3}
| ::|,====< 0x08007b18      48bf           it mi
| ::||:::      ; JMP XREF from 0x08007b18 (_memset)
| ::|`----> 0x08007b1a      40f8042d       str r2, [r0, -0x4]!
| ::| :::   0x08007b1e      8900           lsls r1, r1, 2
| ::|,====< 0x08007b20      28bf           it hs
| ::||:::      ; JMP XREF from 0x08007b20 (_memset)
| ::|`----> 0x08007b22      20f8022d       strh r2, [r0, -0x2]!
| ::|,====< 0x08007b26      48bf           it mi
| ::||:::      ; JMP XREF from 0x08007b26 (_memset)
| ::|`----> 0x08007b28      00f8012d       strb r2, [r0, -0x1]!
| ::| :::   0x08007b2c      30bc           pop {r4, r5}
| ::| :::   0x08007b2e      7047           bx lr
| ::| :::      ; JMP XREF from 0x08007aee (_memset)
| ::`-----> 0x08007b30      c918           adds r1, r1, r3
| :: ,====< 0x08007b32      18bf           it ne
| :: |:::      ; JMP XREF from 0x08007b32 (_memset)
| :: `----> 0x08007b34      00f8012d       strb r2, [r0, -0x1]!
| ::  :::   0x08007b38      cb07           lsls r3, r1, 0x1f
| :: ,====< 0x08007b3a      28bf           it hs
| :: |:::      ; JMP XREF from 0x08007b3a (_memset)
| :: `----> 0x08007b3c      00f8012d       strb r2, [r0, -0x1]!
\ ::  :::   0x08007b40      7047           bx lr
/ (fcn) USB_UserToPMABufferCopy 44
|       Caller: USB_SIL_Write USB_DataStageIn
|   USB_UserToPMABufferCopy ();
| ::  :::      ; CALL XREF from 0x080071a0 (USB_SIL_Write)
| ::  :::      ; CALL XREF from 0x080095da (USB_DataStageIn)
| ::  :::   0x08007b42      10b4           push {r4}                   ; check func
| ::  :::   0x08007b44      4900           lsls r1, r1, 1
| ::  :::   0x08007b46      01f18041       add.w r1, r1, 0x40000000
| ::  :::   0x08007b4a      01f5c041       add.w r1, r1, 0x6000
| ::  :::   0x08007b4e      521c           adds r2, r2, 1
| ::  :::   0x08007b50      5210           asrs r2, r2, 1
| :: ,====< 0x08007b52      09e0           b 0x8007b68
| :: |:::      ; JMP XREF from 0x08007b68 (USB_UserToPMABufferCopy)
| ::.-----> 0x08007b54      10f8013b       ldrb r3, [r0], 1
| :::|:::   0x08007b58      10f8014b       ldrb r4, [r0], 1
| :::|:::   0x08007b5c      43ea0423       orr.w r3, r3, r4, lsl 8
| :::|:::   0x08007b60      21f8023b       strh r3, [r1], 2
| :::|:::   0x08007b64      891c           adds r1, r1, 2
| :::|:::   0x08007b66      521e           subs r2, r2, 1
| ::||:::      ; JMP XREF from 0x08007b52 (USB_UserToPMABufferCopy)
| ::``----> 0x08007b68      f4d1           bne 0x8007b54
| ::  :::   0x08007b6a      10bc           pop {r4}
\ ::  :::   0x08007b6c      7047           bx lr
/ (fcn) USB_PMAToUserBufferCopy 30
|       Caller: USB_SIL_Read USB_DataStageOut
|   USB_PMAToUserBufferCopy ();
| ::  :::      ; CALL XREF from 0x080071ce (USB_SIL_Read)
| ::  :::      ; CALL XREF from 0x08009502 (USB_DataStageOut)
| ::  :::   0x08007b6e      4900           lsls r1, r1, 1
| ::  :::   0x08007b70      01f18041       add.w r1, r1, 0x40000000
| ::  :::   0x08007b74      01f5c041       add.w r1, r1, 0x6000
| ::  :::   0x08007b78      521c           adds r2, r2, 1
| ::  :::   0x08007b7a      5210           asrs r2, r2, 1
| :: ,====< 0x08007b7c      04e0           b 0x8007b88
| :: |:::      ; JMP XREF from 0x08007b88 (USB_PMAToUserBufferCopy)
| ::.-----> 0x08007b7e      51f8043b       ldr r3, [r1], 4
| :::|:::   0x08007b82      20f8023b       strh r3, [r0], 2
| :::|:::   0x08007b86      521e           subs r2, r2, 1
| ::||:::      ; JMP XREF from 0x08007b7c (USB_PMAToUserBufferCopy)
| ::``----> 0x08007b88      f9d1           bne 0x8007b7e
\ ::  :::   0x08007b8a      7047           bx lr
\ ::  :::   ;-- memcpy:
/ (fcn) _memcpy 118
|       Caller: memcpy
|   _memcpy ();
| ::  :::      ; CALL XREF from 0x08007800 (memcpy)
| :: ,====< 0x08007b8c      62b3           cbz r2, 0x8007be8           ; copy r2 bytes from mem start @r1 into mem start @r0
| :: |:::   0x08007b8e      8b07           lsls r3, r1, 0x1e
| ::,=====< 0x08007b90      08d0           beq 0x8007ba4
| ::||:::      ; JMP XREF from 0x08007ba2 (_memcpy)
| --------> 0x08007b92      521e           subs r2, r2, 1
| ::||:::   0x08007b94      11f8013b       ldrb r3, [r1], 1
| ::||:::   0x08007b98      00f8013b       strb r3, [r0], 1
| ========< 0x08007b9c      00f02480       beq.w 0x8007be8
| ::||:::   0x08007ba0      8b07           lsls r3, r1, 0x1e
| ========< 0x08007ba2      f6d1           bne 0x8007b92
| ::||:::      ; JMP XREF from 0x08007b90 (_memcpy)
| ::`-----> 0x08007ba4      8307           lsls r3, r0, 0x1e
| ::,=====< 0x08007ba6      40f02080       bne.w 0x8007bea
| ::||:::   0x08007baa      00bf           nop
| ::||:::   0x08007bac      103a           subs r2, 0x10
| ========< 0x08007bae      07d3           blo 0x8007bc0
| ::||:::   0x08007bb0      30b4           push {r4, r5}
| ::||:::      ; JMP XREF from 0x08007bbc (_memcpy)
| --------> 0x08007bb2      b1e83810       ldm.w r1!, {r3, r4, r5, ip}
| ::||:::   0x08007bb6      103a           subs r2, 0x10
| ::||:::   0x08007bb8      a0e83810       stm.w r0!, {r3, r4, r5, ip}
| ========< 0x08007bbc      f9d2           bhs 0x8007bb2
| ::||:::   0x08007bbe      30bc           pop {r4, r5}
| ::||:::      ; JMP XREF from 0x08007bae (_memcpy)
| --------> 0x08007bc0      5307           lsls r3, r2, 0x1d
| ========< 0x08007bc2      24bf           itt hs
| ::||:::      ; JMP XREF from 0x08007bc2 (_memcpy)
| --------> 0x08007bc4      b1e80810       ldm.w r1!, {r3, ip}
| ::||:::   0x08007bc8      a0e80810       stm.w r0!, {r3, ip}
| ::||:::      ; JMP XREF from 0x08007c00 (_memcpy)
| --------> 0x08007bcc      44bf           itt mi
| ::||:::      ; JMP XREF from 0x08007bcc (_memcpy)
| --------> 0x08007bce      51f8043b       ldr r3, [r1], 4
| ::||:::   0x08007bd2      40f8043b       str r3, [r0], 4
| ::||:::   0x08007bd6      d207           lsls r2, r2, 0x1f
| ========< 0x08007bd8      24bf           itt hs
| ::||:::      ; JMP XREF from 0x08007bd8 (_memcpy)
| --------> 0x08007bda      31f8022b       ldrh r2, [r1], 2
| ::||:::   0x08007bde      20f8022b       strh r2, [r0], 2
| ========< 0x08007be2      44bf           itt mi
| ::||:::      ; JMP XREF from 0x08007be2 (_memcpy)
| --------> 0x08007be4      0b78           ldrb r3, [r1]
| ::||:::   0x08007be6      0370           strb r3, [r0]
| ::||:::      ; JMP XREF from 0x08007b8c (_memcpy)
| ::||:::      ; JMP XREF from 0x08007b9c (_memcpy)
| ---`----> 0x08007be8      7047           bx lr
| ::| :::      ; JMP XREF from 0x08007ba6 (_memcpy)
| ::`-----> 0x08007bea      083a           subs r2, 8
| :: ,====< 0x08007bec      07d3           blo 0x8007bfe
| :: |:::      ; JMP XREF from 0x08007bfc (_memcpy)
| ::.-----> 0x08007bee      b1e80810       ldm.w r1!, {r3, ip}
| :::|:::   0x08007bf2      083a           subs r2, 8
| :::|:::   0x08007bf4      40f8043b       str r3, [r0], 4
| :::|:::   0x08007bf8      40f804cb       str ip, [r0], 4
| ::`=====< 0x08007bfc      f7d2           bhs 0x8007bee
| :: |:::      ; JMP XREF from 0x08007bec (_memcpy)
| :: `----> 0x08007bfe      5307           lsls r3, r2, 0x1d
\ ========< 0x08007c00      e4e7           b 0x8007bcc
  ::  :::   0x08007c02      0000           movs r0, r0
\ ::  :::   ;-- Scan_Matrix:
/ (fcn) _Scan_Matrix 226
|       Caller: _KBD_StateUpdate
|   _Scan_Matrix ();
| ::  :::      ; CALL XREF from 0x08008652 (_KBD_StateUpdate)
| ::  :::   0x08007c04      2de9f843       push.w {r3, r4, r5, r6, r7, r8, sb, lr}
| ::  :::   0x08007c08      0446           mov r4, r0
| ::  :::   0x08007c0a      0026           movs r6, 0
| ::  :::   0x08007c0c      dff87459       ldr.w r5, [0x08008584]      ; [0x8008584:4]=0x20000588
| :: ,====< 0x08007c10      07e0           b 0x8007c22
| :: |:::      ; JMP XREF from 0x08007c24 (_Scan_Matrix)
| ::.-----> 0x08007c12      05ebc600       add.w r0, r5, r6, lsl 3
| :::|:::   0x08007c16      8188           ldrh r1, [r0, 4]
| :::|:::   0x08007c18      55f83600       ldr.w r0, [r5, r6, lsl 3]
| :::|:::   0x08007c1c      fff7fff9       bl GPIO_ResetBits           ; loop to reset matirix columns
| :::|:::   0x08007c20      761c           adds r6, r6, 1
| :::|:::      ; JMP XREF from 0x08007c10 (_Scan_Matrix)
| :::`----> 0x08007c22      0e2e           cmp r6, 0xe                 ; 14
| ::`=====< 0x08007c24      f5db           blt 0x8007c12
| ::  :::   0x08007c26      0026           movs r6, 0
| :: ,====< 0x08007c28      05e0           b 0x8007c36
| :: |:::      ; JMP XREF from 0x08007c92 (_Scan_Matrix)
| ::.-----> 0x08007c2a      b988           ldrh r1, [r7, 4]
| :::|:::   0x08007c2c      55f83600       ldr.w r0, [r5, r6, lsl 3]
| :::|:::   0x08007c30      fff7f5f9       bl GPIO_ResetBits           ; reset the just scanned column
| :::|:::   0x08007c34      761c           adds r6, r6, 1
| :::|:::      ; JMP XREF from 0x08007c28 (_Scan_Matrix)
| :::`----> 0x08007c36      0e2e           cmp r6, 0xe                 ; 14
| :::,====< 0x08007c38      53da           bge 0x8007ce2
| :::|:::   0x08007c3a      05ebc607       add.w r7, r5, r6, lsl 3
| :::|:::   0x08007c3e      b988           ldrh r1, [r7, 4]
| :::|:::   0x08007c40      55f83600       ldr.w r0, [r5, r6, lsl 3]
| :::|:::   0x08007c44      fff7e9f9       bl GPIO_SetBits             ; set columns one by one
| :::|:::   0x08007c48      dff83c09       ldr.w r0, [0x08008588]      ; [0x8008588:4]=0x20000768
| :::|:::   0x08007c4c      007f           ldrb r0, [r0, 0x1c]
| :::|:::   0x08007c4e      0028           cmp r0, 0                   ; is TIM4_Mode = 0 (low frequency)? wait 10
| ========< 0x08007c50      02d1           bne 0x8007c58
| :::|:::   0x08007c52      0a20           movs r0, 0xa                ; 10
| :::|:::   0x08007c54      fff770fa       bl _Wait_AHBby8
| :::|:::      ; JMP XREF from 0x08007c50 (_Scan_Matrix)
| --------> 0x08007c58      4ff00008       mov.w r8, 0
| ========< 0x08007c5c      17e0           b 0x8007c8e
| :::|:::      ; JMP XREF from 0x08007cb4 (_Scan_Matrix)
| --------> 0x08007c5e      3018           adds r0, r6, r0             ; r0 has the key's location in the keymap (70 bytes)
| :::|:::   0x08007c60      90f84610       ldrb.w r1, [r0, 0x46]       ; load content from of key from the next 70bytes array
| :::|:::   0x08007c64      491c           adds r1, r1, 1              ; value in that location is incremented and compared to 2
| :::|:::   0x08007c66      80f84610       strb.w r1, [r0, 0x46]
| :::|:::   0x08007c6a      c9b2           uxtb r1, r1
| :::|:::   0x08007c6c      0229           cmp r1, 2                   ; 2 ; continue if <2: debouncing probably
| ========< 0x08007c6e      0cdb           blt 0x8007c8a
| :::|:::   0x08007c70      04eb4800       add.w r0, r4, r8, lsl 1     ; 17a8+ r8*2
| :::|:::   0x08007c74      b0f88c10       ldrh.w r1, [r0, 0x8c]       ; load half word that represents nth row and clear the column'th bit
| :::|:::   0x08007c78      0122           movs r2, 1                  ; 1
| :::|:::   0x08007c7a      b240           lsls r2, r6
| :::|:::   0x08007c7c      9143           bics r1, r2
| :::|:::   0x08007c7e      a0f88c10       strh.w r1, [r0, 0x8c]
| :::|:::   0x08007c82      0020           movs r0, 0
| :::|:::   0x08007c84      09eb0401       add.w r1, sb, r4
| :::|:::   0x08007c88      7054           strb r0, [r6, r1]           ; clear byte corresponding to pressed key in the keymap
| :::|:::      ; JMP XREF from 0x08007c6e (_Scan_Matrix)
| :::|:::      ; JMP XREF from 0x08007cc0 (_Scan_Matrix)
| :::|:::      ; JMP XREF from 0x08007ce0 (_Scan_Matrix)
| --------> 0x08007c8a      08f10108       add.w r8, r8, 1
| :::|:::      ; JMP XREF from 0x08007c5c (_Scan_Matrix)
| --------> 0x08007c8e      b8f1050f       cmp.w r8, 5                 ; 5
| ::`=====< 0x08007c92      cada           bge 0x8007c2a
| :: |:::   0x08007c94      c8ebc800       rsb r0, r8, r8, lsl 3       ; r8*8-r8: 0, 7, 14, 21, 28
| :: |:::   0x08007c98      4fea4009       lsl.w sb, r0, 1             ; r0*2:   0, 14, 28, 42, 56
| :: |:::   0x08007c9c      dff8ec08       ldr.w r0, [0x0800858c]      ; [0x800858c:4]=0x20000628
| :: |:::   0x08007ca0      00ebc801       add.w r1, r0, r8, lsl 3     ; all these shifts are to get next port:pin combination
| :: |:::   0x08007ca4      8988           ldrh r1, [r1, 4]
| :: |:::   0x08007ca6      50f83800       ldr.w r0, [r0, r8, lsl 3]
| :: |:::   0x08007caa      fff7a8f9       bl GPIO_ReadInputDataBit    ; read input rows 1 by one
| :: |:::   0x08007cae      0128           cmp r0, 1                   ; 1
| :: |:::   0x08007cb0      09eb0400       add.w r0, sb, r4            ; r4 has the 0x200017a8 : r0 has the key's location in the keymap
| ========< 0x08007cb4      d3d1           bne 0x8007c5e
| :: |:::   0x08007cb6      315c           ldrb r1, [r6, r0]
| :: |:::   0x08007cb8      491c           adds r1, r1, 1              ; increment the pressed key counter @ColumnxRow
| :: |:::   0x08007cba      3154           strb r1, [r6, r0]
| :: |:::   0x08007cbc      c9b2           uxtb r1, r1
| :: |:::   0x08007cbe      0229           cmp r1, 2                   ; 2 ; or is this the debouncing part
| ========< 0x08007cc0      e3db           blt 0x8007c8a
| :: |:::   0x08007cc2      04eb4800       add.w r0, r4, r8, lsl 1     ; 17a8+ r8*2
| :: |:::   0x08007cc6      b0f88c10       ldrh.w r1, [r0, 0x8c]       ; load half word that represents nth row and set the column'th bit
| :: |:::   0x08007cca      0122           movs r2, 1                  ; 1 ; those halfs words start at 0x20001834
| :: |:::   0x08007ccc      b240           lsls r2, r6
| :: |:::   0x08007cce      1143           orrs r1, r2
| :: |:::   0x08007cd0      a0f88c10       strh.w r1, [r0, 0x8c]
| :: |:::   0x08007cd4      0020           movs r0, 0
| :: |:::   0x08007cd6      09eb0401       add.w r1, sb, r4
| :: |:::   0x08007cda      7118           adds r1, r6, r1
| :: |:::   0x08007cdc      81f84600       strb.w r0, [r1, 0x46]       ; clear byte corresponding to pressed key in the next array of 70 bytes
| ========< 0x08007ce0      d3e7           b 0x8007c8a
| :: |:::      ; JMP XREF from 0x08007c38 (_Scan_Matrix)
\ :: `----> 0x08007ce2      bde8f183       pop.w {r0, r4, r5, r6, r7, r8, sb, pc}
\ ::  :::   ;-- Parse_Matrix:
/ (fcn) _Parse_Matrix 1806
|       Caller: _KBD_StateUpdate
|   _Parse_Matrix ();
| ::  :::      ; CALL XREF from 0x08008658 (_KBD_StateUpdate)
| ::  :::   0x08007ce6      2de9f04f       push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}
| ::  :::   0x08007cea      85b0           sub sp, 0x14
| ::  :::   0x08007cec      0446           mov r4, r0
| ::  :::   0x08007cee      0020           movs r0, 0
| ::  :::   0x08007cf0      0390           str r0, [sp, 0xc]
| ::  :::   0x08007cf2      04f2d205       addw r5, r4, 0xd2
| ::  :::   0x08007cf6      e978           ldrb r1, [r5, 3]            ; row number of Fn key
| ::  :::   0x08007cf8      04eb4101       add.w r1, r4, r1, lsl 1
| ::  :::   0x08007cfc      b1f88c10       ldrh.w r1, [r1, 0x8c]       ; load Row_X_BitSet where X is now 5
| ::  :::   0x08007d00      95f90420       ldrsb.w r2, [r5, 4]         ; initialized to 0xb (Fn at the 12th pos)
| ::  :::   0x08007d04      1141           asrs r1, r2
| ::  :::   0x08007d06      c907           lsls r1, r1, 0x1f
| :: ,====< 0x08007d08      01d5           bpl 0x8007d0e               ; jump if Fn is not pressed
| :: |:::   0x08007d0a      0121           movs r1, 1                  ; 1 ; set to 1 if Fn is pressed
| :: |:::   0x08007d0c      0391           str r1, [sp, 0xc]
| :: |:::      ; JMP XREF from 0x08007d08 (_Parse_Matrix)
| :: `----> 0x08007d0e      6979           ldrb r1, [r5, 5]            ; has the row number of anne key
| ::  :::   0x08007d10      04eb4101       add.w r1, r4, r1, lsl 1
| ::  :::   0x08007d14      b1f88c10       ldrh.w r1, [r1, 0x8c]
| ::  :::   0x08007d18      95f90620       ldrsb.w r2, [r5, 6]         ; has the key's position
| ::  :::   0x08007d1c      1141           asrs r1, r2
| ::  :::   0x08007d1e      c907           lsls r1, r1, 0x1f
| :: ,====< 0x08007d20      00d5           bpl 0x8007d24               ; jump is anne key is not pressed
| :: |:::   0x08007d22      0120           movs r0, 1                  ; 1
| :: |:::      ; JMP XREF from 0x08007d20 (_Parse_Matrix)
| :: `----> 0x08007d24      04f18c06       add.w r6, r4, 0x8c
| ::  :::   0x08007d28      3289           ldrh r2, [r6, 8]            ; load Row_5_BitSet
| ::  :::   0x08007d2a      42f20101       movw r1, 0x2001             ; is ctrl+ctrl pressed
| ::  :::   0x08007d2e      8a42           cmp r2, r1
| :: ,====< 0x08007d30      0bd1           bne 0x8007d4a
| :: |:::   0x08007d32      708a           ldrh r0, [r6, 0x12]
| :: |:::   0x08007d34      9042           cmp r0, r2
| ::,=====< 0x08007d36      00f0fa80       beq.w 0x8007f2e             ; jump if nothing changed (ctrl+ctrl held)
| ::||:::   0x08007d3a      7282           strh r2, [r6, 0x12]         ; 0x20001846; update some flags and return
| ::||:::   0x08007d3c      04f1e001       add.w r1, r4, 0xe0
| ::||:::   0x08007d40      0120           movs r0, 1                  ; 1
| ::||:::   0x08007d42      0872           strb r0, [r1, 8]            ; 0x20001890
| ::||:::   0x08007d44      4872           strb r0, [r1, 9]
| ::||:::   0x08007d46      8872           strb r0, [r1, 0xa]
| ========< 0x08007d48      f1e0           b 0x8007f2e
| ::||:::      ; JMP XREF from 0x08007d30 (_Parse_Matrix)
| ::|`----> 0x08007d4a      0a42           tst r2, r1                  ; is ctrl+ctrl + other keys in the same row pressed
| ::|,====< 0x08007d4c      18d1           bne 0x8007d80
| ::||:::   0x08007d4e      04f1e001       add.w r1, r4, 0xe0
| ::||:::   0x08007d52      4b7a           ldrb r3, [r1, 9]            ; 0x20001891 LAYOUT_CTRL_MODE
| ::||:::   0x08007d54      002b           cmp r3, 0
| ========< 0x08007d56      13d0           beq 0x8007d80               ; do nothing if ctrl+ctrl wasn't pressed before this new combi
| ::||:::   0x08007d58      7282           strh r2, [r6, 0x12]         ; 0x20001846; store Row_5_BitSet
| ::||:::   0x08007d5a      0022           movs r2, 0
| ::||:::   0x08007d5c      4a72           strb r2, [r1, 9]            ; clear flag
| ::||:::   0x08007d5e      dff82878       ldr.w r7, [0x08008588]      ; [0x8008588:4]=0x20000768
| ::||:::   0x08007d62      1146           mov r1, r2
| ::||:::   0x08007d64      07f14c02       add.w r2, r7, 0x4c
| ::||:::   0x08007d68      9176           strb r1, [r2, 0x1a]         ; 0x200007ce clear
| ::||:::   0x08007d6a      07f10108       add.w r8, r7, 1
| ::||:::   0x08007d6e      88f81c10       strb.w r1, [r8, 0x1c]       ; 0x20000785 clear
| ::||:::   0x08007d72      0121           movs r1, 1                  ; 1
| ::||:::   0x08007d74      7970           strb r1, [r7, 1]            ; 0x20000769
| ::||:::   0x08007d76      88f80310       strb.w r1, [r8, 3]          ; 0x2000076c
| ::||:::   0x08007d7a      a970           strb r1, [r5, 2]            ; 0x2000187c
| ::||:::   0x08007d7c      84f8d210       strb.w r1, [r4, 0xd2]       ; 0x2000187a
| ::||:::      ; JMP XREF from 0x08007d4c (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007d56 (_Parse_Matrix)
| ---`----> 0x08007d80      3189           ldrh r1, [r6, 8]            ; Row_5_BitSet
| ::| :::   0x08007d82      40f20442       movw r2, 0x404              ; 1028 ; is alt+alt pressed
| ::| :::   0x08007d86      9142           cmp r1, r2
| ::|,====< 0x08007d88      0ad1           bne 0x8007da0
| ::||:::   0x08007d8a      708a           ldrh r0, [r6, 0x12]
| ::||:::   0x08007d8c      8842           cmp r0, r1
| ========< 0x08007d8e      00f0ce80       beq.w 0x8007f2e             ; jump if nothing changed (alt+alt held)
| ::||:::   0x08007d92      7182           strh r1, [r6, 0x12]         ; 0x20001846
| ::||:::   0x08007d94      687a           ldrb r0, [r5, 9]            ; 0x20001883 if 0 set it to 1; if 1 set it to 0
| ::||:::   0x08007d96      411e           subs r1, r0, 1
| ::||:::   0x08007d98      8941           sbcs r1, r1
| ::||:::   0x08007d9a      c90f           lsrs r1, r1, 0x1f
| ::||:::   0x08007d9c      6972           strb r1, [r5, 9]
| ========< 0x08007d9e      c6e0           b 0x8007f2e
| ::||:::      ; JMP XREF from 0x08007d88 (_Parse_Matrix)
| ::|`----> 0x08007da0      dff8e477       ldr.w r7, [0x08008588]      ; [0x8008588:4]=0x20000768
| ::| :::   0x08007da4      07f10108       add.w r8, r7, 1
| ::| :::   0x08007da8      98f81c10       ldrb.w r1, [r8, 0x1c]       ; 0x20000785
| ::| :::   0x08007dac      0129           cmp r1, 1                   ; 1
| ::|,====< 0x08007dae      0fd1           bne 0x8007dd0               ; jump if Fn is not active
| ::||:::   0x08007db0      7188           ldrh r1, [r6, 2]            ; ROW2_BS
| ::||:::   0x08007db2      01f0f002       and r2, r1, 0xf0
| ::||:::   0x08007db6      f02a           cmp r2, 0xf0                ; 240 ; is any of R,T,Y,U pressed (LED control keys)
| ========< 0x08007db8      0ad1           bne 0x8007dd0
| ::||:::   0x08007dba      b289           ldrh r2, [r6, 0xc]          ; 0x20001840 ROW2_BS_OLD
| ::||:::   0x08007dbc      8a42           cmp r2, r1
| ========< 0x08007dbe      07d0           beq 0x8007dd0               ; jump if the key's state didn't change
| ::||:::   0x08007dc0      0120           movs r0, 1                  ; 1
| ::||:::   0x08007dc2      07f14c01       add.w r1, r7, 0x4c
| ::||:::   0x08007dc6      c876           strb r0, [r1, 0x1b]         ; 0x200007cf
| ::||:::   0x08007dc8      a870           strb r0, [r5, 2]            ; 0x2000187c
| ::||:::   0x08007dca      7088           ldrh r0, [r6, 2]            ; Row_2_BitSet
| ::||:::   0x08007dcc      b081           strh r0, [r6, 0xc]          ; 0x20001840
| ========< 0x08007dce      aee0           b 0x8007f2e
| ::||:::      ; JMP XREF from 0x08007dae (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007db8 (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007dbe (_Parse_Matrix)
| ---`----> 0x08007dd0      0028           cmp r0, 0                   ; r0 is set when anne key is pressed
| ::|,====< 0x08007dd2      00f0af80       beq.w 0x8007f34             ; jump if anne is not pressed
| ::||:::   0x08007dd6      0022           movs r2, 0
| ::||:::   0x08007dd8      4ff0940a       mov.w sl, 0x94              ; 148
| ::||:::   0x08007ddc      dff8b0b7       ldr.w fp, [0x08008590]      ; [0x8008590:4]=0x20000edc
| ========< 0x08007de0      01e0           b 0x8007de6
| ::||:::      ; JMP XREF from 0x08007df4 (_Parse_Matrix)
| --------> 0x08007de2      521c           adds r2, r2, 1
| ::||:::   0x08007de4      d2b2           uxtb r2, r2
| ::||:::      ; JMP XREF from 0x08007de0 (_Parse_Matrix)
| --------> 0x08007de6      052a           cmp r2, 5                   ; 5 ; loop over rows
| ========< 0x08007de8      62da           bge 0x8007eb0
| ::||:::   0x08007dea      0021           movs r1, 0
| ========< 0x08007dec      01e0           b 0x8007df2
| ::||:::      ; JMP XREF from 0x08007e0e (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007e22 (_Parse_Matrix)
| --------> 0x08007dee      491c           adds r1, r1, 1
| ::||:::   0x08007df0      c9b2           uxtb r1, r1
| ::||:::      ; JMP XREF from 0x08007dec (_Parse_Matrix)
| --------> 0x08007df2      0e29           cmp r1, 0xe                 ; 14 ; loop over columns
| ========< 0x08007df4      f5da           bge 0x8007de2
| ::||:::   0x08007df6      1046           mov r0, r2
| ::||:::   0x08007df8      c0ebc003       rsb r3, r0, r0, lsl 3
| ::||:::   0x08007dfc      01eb4303       add.w r3, r1, r3, lsl 1
| ::||:::   0x08007e00      dbb2           uxtb r3, r3                 ; key's position in 70 bytes array
| ::||:::   0x08007e02      04eb4200       add.w r0, r4, r2, lsl 1
| ::||:::   0x08007e06      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; get Row_X_BitSet
| ::||:::   0x08007e0a      0841           asrs r0, r1                 ; get column
| ::||:::   0x08007e0c      c007           lsls r0, r0, 0x1f
| ========< 0x08007e0e      eed5           bpl 0x8007dee               ; continue if key is not pressed
| ::||:::   0x08007e10      4ff00009       mov.w sb, 0
| ========< 0x08007e14      03e0           b 0x8007e1e
| ::||:::      ; JMP XREF from 0x08007e40 (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007e4a (_Parse_Matrix)
| --------> 0x08007e16      09f10109       add.w sb, sb, 1
| ::||:::   0x08007e1a      5ffa89f9       uxtb.w sb, sb
| ::||:::      ; JMP XREF from 0x08007e14 (_Parse_Matrix)
| --------> 0x08007e1e      b9f10a0f       cmp.w sb, 0xa               ; 10
| ========< 0x08007e22      e4da           bge 0x8007dee
| ::||:::   0x08007e24      0afb09f0       mul r0, sl, sb              ; 0x0,94,128,1bc,250,2e4,378,40c,4a0,534
| ::||:::   0x08007e28      00eb0b0e       add.w lr, r0, fp            ; 0x20000edc,f70,1004,1098,112c,11c0,1254,12e8,137c,1410
| ::||:::   0x08007e2c      cdf804e0       str.w lr, [sp, 4]
| ::||:::   0x08007e30      f446           mov ip, lr
| ::||:::   0x08007e32      9cf80ec0       ldrb.w ip, [ip, 0xe]
| ::||:::   0x08007e36      d6f814e0       ldr.w lr, [r6, 0x14]        ; 0x2000184c get KEY_LAYOUT
| ::||:::   0x08007e3a      13f80ee0       ldrb.w lr, [r3, lr]         ; load key's value from layout
| ::||:::   0x08007e3e      f445           cmp ip, lr
| ========< 0x08007e40      e9d1           bne 0x8007e16
| ::||:::   0x08007e42      10f80bc0       ldrb.w ip, [r0, fp]
| ::||:::   0x08007e46      bcf1000f       cmp.w ip, 0
| ========< 0x08007e4a      e4d1           bne 0x8007e16               ; jump if first byte is not 0; continue
| ::||:::   0x08007e4c      07f24606       addw r6, r7, 0x46
| ::||:::   0x08007e50      7178           ldrb r1, [r6, 1]            ; 0x200007af
| ::||:::   0x08007e52      0029           cmp r1, 0
| ========< 0x08007e54      0dd0           beq 0x8007e72
| ::||:::   0x08007e56      0121           movs r1, 1                  ; 1
| ::||:::   0x08007e58      87f84610       strb.w r1, [r7, 0x46]       ; 0x200007ae
| ::||:::   0x08007e5c      0021           movs r1, 0
| ::||:::   0x08007e5e      0b46           mov r3, r1
| ========< 0x08007e60      03e0           b 0x8007e6a
| ::||:::      ; JMP XREF from 0x08007e70 (_Parse_Matrix)
| --------> 0x08007e62      0afb02b2       mla r2, sl, r2, fp          ; 0x20000edc,f70,1004,1098,112c,11c0,1254,12e8,137c,1410
| ::||:::   0x08007e66      1370           strb r3, [r2]               ; clear first byte
| ::||:::   0x08007e68      491c           adds r1, r1, 1
| ::||:::      ; JMP XREF from 0x08007e60 (_Parse_Matrix)
| --------> 0x08007e6a      c9b2           uxtb r1, r1
| ::||:::   0x08007e6c      0a46           mov r2, r1
| ::||:::   0x08007e6e      0a2a           cmp r2, 0xa                 ; 10
| ========< 0x08007e70      f7db           blt 0x8007e62
| ::||:::      ; JMP XREF from 0x08007e54 (_Parse_Matrix)
| --------> 0x08007e72      0121           movs r1, 1                  ; 1
| ::||:::   0x08007e74      00f80b10       strb.w r1, [r0, fp]         ; 0x20000edc,f70,1004,1098,112c,11c0,1254,12e8,137c,1410
| ::||:::   0x08007e78      0021           movs r1, 0
| ::||:::   0x08007e7a      019a           ldr r2, [sp, 4]
| ::||:::   0x08007e7c      5160           str r1, [r2, 4]             ; clear second word
| ::||:::   0x08007e7e      019a           ldr r2, [sp, 4]
| ::||:::   0x08007e80      9160           str r1, [r2, 8]             ; clear 3rd word
| ::||:::   0x08007e82      0121           movs r1, 1                  ; 1
| ::||:::   0x08007e84      00f80b10       strb.w r1, [r0, fp]         ; set first byte
| ::||:::   0x08007e88      fef740fd       bl _TIM4_GetIntCounter
| ::||:::   0x08007e8c      0199           ldr r1, [sp, 4]
| ::||:::   0x08007e8e      8861           str r0, [r1, 0x18]          ; store TIM4_IntCounter at the 24th word
| ::||:::   0x08007e90      0120           movs r0, 1                  ; 1
| ::||:::   0x08007e92      7070           strb r0, [r6, 1]            ; 0x200007af
| ::||:::   0x08007e94      0020           movs r0, 0
| ::||:::   0x08007e96      f864           str r0, [r7, 0x4c]          ; 0x200007b4
| ::||:::   0x08007e98      0120           movs r0, 1                  ; 1
| ::||:::   0x08007e9a      b070           strb r0, [r6, 2]            ; 0x200007b0
| ::||:::   0x08007e9c      86f80390       strb.w sb, [r6, 3]          ; 0x200007b1
| ::||:::   0x08007ea0      f078           ldrb r0, [r6, 3]
| ::||:::   0x08007ea2      0afb00b0       mla r0, sl, r0, fp
| ::||:::   0x08007ea6      c4f8e000       str.w r0, [r4, 0xe0]        ; 0x20001888
| ::||:::   0x08007eaa      0120           movs r0, 1                  ; 1
| ::||:::   0x08007eac      a872           strb r0, [r5, 0xa]          ; 0x20001884
| ========< 0x08007eae      3ee0           b 0x8007f2e
| ::||:::      ; JMP XREF from 0x08007de8 (_Parse_Matrix)
| --------> 0x08007eb0      98f81c00       ldrb.w r0, [r8, 0x1c]       ; 0x20000785
| ::||:::   0x08007eb4      0028           cmp r0, 0
| ========< 0x08007eb6      15d1           bne 0x8007ee4               ; jump if Fn active
| ::||:::   0x08007eb8      6879           ldrb r0, [r5, 5]            ; 0x2000187f
| ::||:::   0x08007eba      04eb4000       add.w r0, r4, r0, lsl 1
| ::||:::   0x08007ebe      b0f89610       ldrh.w r1, [r0, 0x96]       ; get ROW5_BS2
| ::||:::   0x08007ec2      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; get ROW5_BS
| ::||:::   0x08007ec6      8142           cmp r1, r0
| ========< 0x08007ec8      0cd0           beq 0x8007ee4               ; jump if key's state didn't change
| ::||:::   0x08007eca      0120           movs r0, 1                  ; 1
| ::||:::   0x08007ecc      a870           strb r0, [r5, 2]
| ::||:::   0x08007ece      a979           ldrb r1, [r5, 6]
| ::||:::   0x08007ed0      6879           ldrb r0, [r5, 5]
| ::||:::   0x08007ed2      00f08ffa       bl _KBD_KeyPosBSUpdate
| ::||:::   0x08007ed6      6879           ldrb r0, [r5, 5]
| ::||:::   0x08007ed8      04eb4000       add.w r0, r4, r0, lsl 1
| ::||:::   0x08007edc      b0f88c10       ldrh.w r1, [r0, 0x8c]
| ::||:::   0x08007ee0      a0f89610       strh.w r1, [r0, 0x96]
| ::||:::      ; JMP XREF from 0x08007eb6 (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007ec8 (_Parse_Matrix)
| ::||:::      ; JMP XREF from 0x08007f58 (_Parse_Matrix)
| --------> 0x08007ee4      b4f88c00       ldrh.w r0, [r4, 0x8c]       ; return if any of the ROWX_BS is not 0
| ::||:::   0x08007ee8      0028           cmp r0, 0
| ========< 0x08007eea      20d1           bne 0x8007f2e
| ::||:::   0x08007eec      7088           ldrh r0, [r6, 2]
| ::||:::   0x08007eee      0028           cmp r0, 0
| ========< 0x08007ef0      1dd1           bne 0x8007f2e
| ::||:::   0x08007ef2      b088           ldrh r0, [r6, 4]
| ::||:::   0x08007ef4      0028           cmp r0, 0
| ========< 0x08007ef6      1ad1           bne 0x8007f2e
| ::||:::   0x08007ef8      f088           ldrh r0, [r6, 6]
| ::||:::   0x08007efa      0028           cmp r0, 0
| ========< 0x08007efc      17d1           bne 0x8007f2e
| ::||:::   0x08007efe      3089           ldrh r0, [r6, 8]
| ::||:::   0x08007f00      0028           cmp r0, 0
| ========< 0x08007f02      14d1           bne 0x8007f2e
| ::||:::   0x08007f04      0020           movs r0, 0
| ::||:::   0x08007f06      7081           strh r0, [r6, 0xa]          ; clear all ROWX_BS2
| ::||:::   0x08007f08      b081           strh r0, [r6, 0xc]
| ::||:::   0x08007f0a      f081           strh r0, [r6, 0xe]
| ::||:::   0x08007f0c      3082           strh r0, [r6, 0x10]
| ::||:::   0x08007f0e      7082           strh r0, [r6, 0x12]
| ::||:::   0x08007f10      2022           movs r2, 0x20               ; 32 ; clear *_KEYCODE_BS bitsets
| ::||:::   0x08007f12      0146           mov r1, r0
| ::||:::   0x08007f14      04f1a800       add.w r0, r4, 0xa8
| ::||:::   0x08007f18      fef72afd       bl memset                   ; void *memset(void *s, int c, size_t n)
| ::||:::   0x08007f1c      0822           movs r2, 8                  ; 8 ; clear *_KEYCODE_BS2 and KEYCODE_KRO
| ::||:::   0x08007f1e      0021           movs r1, 0
| ::||:::   0x08007f20      04f1c800       add.w r0, r4, 0xc8
| ::||:::   0x08007f24      05b0           add sp, 0x14
| ::||:::   0x08007f26      bde8f04f       pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}
| ::||::`=< 0x08007f2a      fef721bd       b.w memset
| ::||::       ; XREFS: JMP 0x08007d36  JMP 0x08007d48  JMP 0x08007d8e  JMP 0x08007d9e  JMP 0x08007dce  JMP 0x08007eae  JMP 0x08007eea  JMP 0x08007ef0  JMP 0x08007ef6  
| ::||::       ; XREFS: JMP 0x08007efc  JMP 0x08007f02  
| --`-----> 0x08007f2e      05b0           add sp, 0x14
| :: |::    0x08007f30      bde8f08f       pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}
| :: |::       ; JMP XREF from 0x08007dd2 (_Parse_Matrix)
| :: `----> 0x08007f34      0020           movs r0, 0
| ::  ::    0x08007f36      0190           str r0, [sp, 4]
| ::  ::,=< 0x08007f38      0ce0           b 0x8007f54
| ::  ::|      ; JMP XREF from 0x08007fc4 (_Parse_Matrix)
| :: .----> 0x08007f3a      0299           ldr r1, [sp, 8]
| :: :::|   0x08007f3c      4881           strh r0, [r1, 0xa]
| :: :::|   0x08007f3e      98f81c00       ldrb.w r0, [r8, 0x1c]
| :: :::|   0x08007f42      0128           cmp r0, 1                   ; 1
| ::,=====< 0x08007f44      02d0           beq 0x8007f4c
| ::|:::|   0x08007f46      0120           movs r0, 1                  ; 1
| ::|:::|   0x08007f48      84f8d200       strb.w r0, [r4, 0xd2]
| ::|:::|      ; JMP XREF from 0x08007f44 (_Parse_Matrix)
| ::|:::|      ; JMP XREF from 0x08007f6e (_Parse_Matrix)
| --`-----> 0x08007f4c      0198           ldr r0, [sp, 4]             ; inc row iterator
| :: :::|   0x08007f4e      401c           adds r0, r0, 1
| :: :::|   0x08007f50      c0b2           uxtb r0, r0
| :: :::|   0x08007f52      0190           str r0, [sp, 4]
| :: :::|      ; JMP XREF from 0x08007f38 (_Parse_Matrix)
| :: :::`-> 0x08007f54      0198           ldr r0, [sp, 4]
| :: :::    0x08007f56      0528           cmp r0, 5                   ; 5
| ========< 0x08007f58      c4da           bge 0x8007ee4               ; loop over ROW_X_BitSets
| :: :::    0x08007f5a      04eb4000       add.w r0, r4, r0, lsl 1     ; r4: 0x200017a8 + 0,2,4,6,8
| :: :::    0x08007f5e      0090           str r0, [sp]
| :: :::    0x08007f60      8c30           adds r0, 0x8c
| :: :::    0x08007f62      0290           str r0, [sp, 8]
| :: :::    0x08007f64      4089           ldrh r0, [r0, 0xa]          ; get Row_X_BitSet2
| :: :::    0x08007f66      0099           ldr r1, [sp]
| :: :::    0x08007f68      b1f88c10       ldrh.w r1, [r1, 0x8c]       ; get Row_X_BitSet
| :: :::    0x08007f6c      8842           cmp r0, r1                  ; Row_X_BitSet == Row_X_BitSet2?
| ========< 0x08007f6e      edd0           beq 0x8007f4c
| :: :::    0x08007f70      dff82006       ldr.w r0, [0x08008594]      ; [0x8008594:4]=0x20001995
| :: :::    0x08007f74      0178           ldrb r1, [r0]
| :: :::    0x08007f76      491c           adds r1, r1, 1              ; increment some counter
| :: :::    0x08007f78      0170           strb r1, [r0]
| :: :::    0x08007f7a      4ff00009       mov.w sb, 0
| :: :::,=< 0x08007f7e      1ce0           b 0x8007fba
| :: :::|      ; JMP XREF from 0x080082b2 (_Parse_Matrix)
| ::.-----> 0x08007f80      0229           cmp r1, 2                   ; 2
| ========< 0x08007f82      06d1           bne 0x8007f92
| ::::::|   0x08007f84      7069           ldr r0, [r6, 0x14]
| ::::::|   0x08007f86      1af80010       ldrb.w r1, [sl, r0]
| ::::::|   0x08007f8a      04f1c800       add.w r0, r4, 0xc8
| ::::::|   0x08007f8e      00f0adfa       bl _KBD_6KROSlotFill_Maybe
| ::::::|      ; XREFS: JMP 0x08007f82  JMP 0x080080e6  JMP 0x080080fa  JMP 0x0800810e  JMP 0x08008122  JMP 0x08008136  JMP 0x0800816c  JMP 0x08008192  JMP 0x080081b8  
| ::::::|      ; XREFS: JMP 0x080081dc  JMP 0x08008202  JMP 0x08008208  JMP 0x08008234  JMP 0x08008286  JMP 0x080082ae  JMP 0x080082d2  JMP 0x080082fa  JMP 0x08008324  
| ::::::|      ; XREFS: JMP 0x0800834e  JMP 0x08008376  JMP 0x08008398  JMP 0x080083ba  JMP 0x080083c0  JMP 0x080083c8  JMP 0x080083f2  
| --------> 0x08007f92      0098           ldr r0, [sp]                ; 0x200017a8 + 0,2,4,6,8
| ::::::|   0x08007f94      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; get ROWX_BS
| ::::::|   0x08007f98      40fa09f0       asr.w r0, r0, sb            ; get column's bit
| ::::::|   0x08007f9c      c007           lsls r0, r0, 0x1f
| ========< 0x08007f9e      0ad5           bpl 0x8007fb6               ; jump if key released ; continue to next key
| ::::::|   0x08007fa0      98f81c00       ldrb.w r0, [r8, 0x1c]       ; 0x20000785
| ::::::|   0x08007fa4      0028           cmp r0, 0
| ========< 0x08007fa6      06d1           bne 0x8007fb6
| ::::::|   0x08007fa8      0120           movs r0, 1                  ; 1
| ::::::|   0x08007faa      a870           strb r0, [r5, 2]            ; 0x2000187c
| ::::::|   0x08007fac      4946           mov r1, sb                  ; column
| ::::::|   0x08007fae      0198           ldr r0, [sp, 4]             ; row
| ::::::|   0x08007fb0      c0b2           uxtb r0, r0
| ::::::|   0x08007fb2      00f01ffa       bl _KBD_KeyPosBSUpdate      ; set the key's bit in the KEYPOS_BS
| ::::::|      ; XREFS: JMP 0x08007f9e  JMP 0x08007fa6  JMP 0x08007fea  JMP 0x0800824c  JMP 0x08008252  JMP 0x080082b8  
| --------> 0x08007fb6      09f10109       add.w sb, sb, 1             ; inc column iterator
| ::::::|      ; JMP XREF from 0x08007f7e (_Parse_Matrix)
| ::::::`-> 0x08007fba      0098           ldr r0, [sp]                ; 0x200017a8 + 0,2,4,6,8
| ::::::    0x08007fbc      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; Row_X_BitSet
| ::::::    0x08007fc0      b9f10e0f       cmp.w sb, 0xe               ; 14
| :::`====< 0x08007fc4      b9da           bge 0x8007f3a               ; loop over columns
| ::: ::    0x08007fc6      0199           ldr r1, [sp, 4]             ; contains current row
| ::: ::    0x08007fc8      c1ebc102       rsb r2, r1, r1, lsl 3       ; 0,7,14,21,28
| ::: ::    0x08007fcc      09eb420a       add.w sl, sb, r2, lsl 1
| ::: ::    0x08007fd0      5ffa8afa       uxtb.w sl, sl               ; get key's position in a keymap array
| ::: ::    0x08007fd4      40fa09f0       asr.w r0, r0, sb            ; get column's bit
| ::: ::    0x08007fd8      0299           ldr r1, [sp, 8]
| ::: ::    0x08007fda      4989           ldrh r1, [r1, 0xa]          ; get Row_X_BitSet2
| ::: ::    0x08007fdc      41fa09f1       asr.w r1, r1, sb            ; get column's bit
| ::: ::    0x08007fe0      01f00101       and r1, r1, 1               ; get key's old state
| ::: ::    0x08007fe4      00f00102       and r2, r0, 1               ; git key's new state
| ::: ::    0x08007fe8      9142           cmp r1, r2                  ; is this key that has changed between the two sets?
| ========< 0x08007fea      e4d0           beq 0x8007fb6               ; jump if not
| ::: ::    0x08007fec      0399           ldr r1, [sp, 0xc]           ; this byte is set when Fn is active
| ::: ::    0x08007fee      0029           cmp r1, 0
| ::: ::,=< 0x08007ff0      00f02181       beq.w 0x8008236             ; jump to handling regular key press
| ::: ::|   0x08007ff4      04f1c80b       add.w fp, r4, 0xc8          ; 0x20001870
| ::: ::|   0x08007ff8      697a           ldrb r1, [r5, 9]            ; 0x20001883 get FN_LOCK_MODE
| ::: ::|   0x08007ffa      0029           cmp r1, 0
| :::,====< 0x08007ffc      26d1           bne 0x800804c               ; jump to handling FN_LOCK_MODE + key when Fn is active
| :::|::|   0x08007ffe      b069           ldr r0, [r6, 0x18]          ; 0x2000184c get KEY_LAYOUT_FN
| :::|::|   0x08008000      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| :::|::|   0x08008004      2046           mov r0, r4
| :::|::|   0x08008006      00f023fa       bl _KBD_UpdateKeyCodeBitSets
| :::|::|   0x0800800a      0098           ldr r0, [sp]                ; 0x200017a8 + 0,2,4,6,8
| :::|::|   0x0800800c      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; get Row_X_BitSet
| :::|::|   0x08008010      40fa09f0       asr.w r0, r0, sb            ; get column's bit
| :::|::|   0x08008014      00f00102       and r2, r0, 1               ; get key's state
| :::|::|   0x08008018      b069           ldr r0, [r6, 0x18]          ; 0x2000184c get KEY_LAYOUT_FN
| :::|::|   0x0800801a      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| :::|::|   0x0800801e      5846           mov r0, fp                  ; 0x20001870
| :::|::|   0x08008020      00f064fa       bl _KBD_6KROSlotFill_Maybe
| :::|::|   0x08008024      7069           ldr r0, [r6, 0x14]          ; 0x20001848 get KEY_LAYOUT
| :::|::|   0x08008026      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| :::|::|   0x0800802a      b069           ldr r0, [r6, 0x18]          ; 0x2000184c get KEY_LAYOUT_FN
| :::|::|   0x0800802c      1af80000       ldrb.w r0, [sl, r0]         ; load key's value from layout
| :::|::|   0x08008030      8842           cmp r0, r1
| ========< 0x08008032      31d0           beq 0x8008098               ; jump if Fn does not alter key's code
| :::|::|   0x08008034      0022           movs r2, 0                  ; release the key's regular code
| :::|::|   0x08008036      2046           mov r0, r4
| :::|::|   0x08008038      00f00afa       bl _KBD_UpdateKeyCodeBitSets
| :::|::|   0x0800803c      0022           movs r2, 0                  ; release key's regular code
| :::|::|   0x0800803e      7069           ldr r0, [r6, 0x14]          ; 0x20001848 get KEY_LAYOUT
| :::|::|   0x08008040      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| :::|::|   0x08008044      5846           mov r0, fp                  ; 0x20001870
| :::|::|   0x08008046      00f051fa       bl _KBD_6KROSlotFill_Maybe
| ========< 0x0800804a      25e0           b 0x8008098
| :::|::|      ; JMP XREF from 0x08007ffc (_Parse_Matrix)
| :::`----> 0x0800804c      7069           ldr r0, [r6, 0x14]          ; 0x20001848 get KEY_LAYOUT
| ::: ::|   0x0800804e      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| ::: ::|   0x08008052      2046           mov r0, r4
| ::: ::|   0x08008054      00f0fcf9       bl _KBD_UpdateKeyCodeBitSets
| ::: ::|   0x08008058      0098           ldr r0, [sp]                ; 0x200017a8 + 0,2,4,6,8
| ::: ::|   0x0800805a      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; get ROWX_BS
| ::: ::|   0x0800805e      40fa09f0       asr.w r0, r0, sb            ; get column's bit
| ::: ::|   0x08008062      00f00102       and r2, r0, 1               ; get key's state
| ::: ::|   0x08008066      7069           ldr r0, [r6, 0x14]          ; 0x20001848 get KEY_LAYOUT
| ::: ::|   0x08008068      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| ::: ::|   0x0800806c      5846           mov r0, fp                  ; 0x20001870
| ::: ::|   0x0800806e      00f03dfa       bl _KBD_6KROSlotFill_Maybe
| ::: ::|   0x08008072      b069           ldr r0, [r6, 0x18]
| ::: ::|   0x08008074      1af80010       ldrb.w r1, [sl, r0]
| ::: ::|   0x08008078      7069           ldr r0, [r6, 0x14]
| ::: ::|   0x0800807a      1af80000       ldrb.w r0, [sl, r0]
| ::: ::|   0x0800807e      8142           cmp r1, r0
| :::,====< 0x08008080      0ad0           beq 0x8008098               ; jump if Fn does not alter key's code
| :::|::|   0x08008082      0022           movs r2, 0
| :::|::|   0x08008084      2046           mov r0, r4
| :::|::|   0x08008086      00f0e3f9       bl _KBD_UpdateKeyCodeBitSets ; release the key in the keycode bitset
| :::|::|   0x0800808a      0022           movs r2, 0
| :::|::|   0x0800808c      b069           ldr r0, [r6, 0x18]
| :::|::|   0x0800808e      1af80010       ldrb.w r1, [sl, r0]
| :::|::|   0x08008092      5846           mov r0, fp
| :::|::|   0x08008094      00f02afa       bl _KBD_6KROSlotFill_Maybe  ; remove key's Fn code from the 6slots
| :::|::|      ; JMP XREF from 0x08008032 (_Parse_Matrix)
| :::|::|      ; JMP XREF from 0x0800804a (_Parse_Matrix)
| :::|::|      ; JMP XREF from 0x08008080 (_Parse_Matrix)
| ---`----> 0x08008098      b069           ldr r0, [r6, 0x18]          ; 0x2000184c get KEY_LAYOUT_FN
| ::: ::|   0x0800809a      1af80010       ldrb.w r1, [sl, r0]         ; load key's value from layout
| ::: ::|   0x0800809e      0846           mov r0, r1
| ::: ::|   0x080080a0      e328           cmp r0, 0xe3                ; 227
| :::,====< 0x080080a2      08d0           beq 0x80080b6               ; jump if left meta key
| :::|::|   0x080080a4      7269           ldr r2, [r6, 0x14]          ; 0x2000184c get KEY_LAYOUT
| :::|::|   0x080080a6      1af80220       ldrb.w r2, [sl, r2]         ; load key's value from layout
| :::|::|   0x080080aa      e72a           cmp r2, 0xe7                ; 231
| ========< 0x080080ac      03d0           beq 0x80080b6               ; jump if right meta key
| :::|::|   0x080080ae      e328           cmp r0, 0xe3                ; 227
| ========< 0x080080b0      01d0           beq 0x80080b6
| :::|::|   0x080080b2      e72a           cmp r2, 0xe7                ; 231
| ========< 0x080080b4      0ed1           bne 0x80080d4
| :::|::|      ; JMP XREF from 0x080080a2 (_Parse_Matrix)
| :::|::|      ; JMP XREF from 0x080080ac (_Parse_Matrix)
| :::|::|      ; JMP XREF from 0x080080b0 (_Parse_Matrix)
| ---`----> 0x080080b6      0098           ldr r0, [sp]
| ::: ::|   0x080080b8      b0f88c00       ldrh.w r0, [r0, 0x8c]       ; get ROWX_BS
| ::: ::|   0x080080bc      40fa09f0       asr.w r0, r0, sb
| ::: ::|   0x080080c0      c007           lsls r0, r0, 0x1f
| :::,====< 0x080080c2      07d5           bpl 0x80080d4               ; jump if key released
| :::|::|   0x080080c4      0022           movs r2, 0
| :::|::|   0x080080c6      5846           mov r0, fp
| :::|::|   0x080080c8      00f010fa       bl _KBD_6KROSlotFill_Maybe  ; remove key's Fn code from the 6slots
| :::|::|   0x080080cc      e879           ldrb r0, [r5, 7]            ; 0x20001881
| :::|::|   0x080080ce      80f00100       eor r0, r0, 1               ; toggle WIN_LOCK_MODE
| :::|::|   0x080080d2      e871           strb r0, [r5, 7]
| :::|::|      ; JMP XREF from 0x080080b4 (_Parse_Matrix)
| :::|::|      ; JMP XREF from 0x080080c2 (_Parse_Matrix)
| ---`----> 0x080080d4      b069           ldr r0, [r6, 0x18]          ; 0x2000184c get KEY_LAYOUT_FN
| ::: ::|   0x080080d6      1af80000       ldrb.w r0, [sl, r0]         ; load key's value from layout
| ::: ::|   0x080080da      0099           ldr r1, [sp]                ; 0x200017a8 + 0,2,4,6,8
| ::: ::|   0x080080dc      b1f88c10       ldrh.w r1, [r1, 0x8c]       ; get ROWX_BS
| ::: ::|   0x080080e0      41fa09f1       asr.w r1, r1, sb            ; get column's bit
| ::: ::|   0x080080e4      c907           lsls r1, r1, 0x1f
| ========< 0x080080e6      7ff554af       bpl.w 0x8007f92             ; jump if not pressed
| ::: ::|   0x080080ea      fc28           cmp r0, 0xfc                ; 252
| :::,====< 0x080080ec      02d0           beq 0x80080f4               ; jump if LED MOD key
| :::|::|   0x080080ee      baf1150f       cmp.w sl, 0x15              ; 21 ; or this is the 22nd key
| ========< 0x080080f2      03d1           bne 0x80080fc
| :::|::|      ; JMP XREF from 0x080080ec (_Parse_Matrix)
| :::`----> 0x080080f4      0120           movs r0, 1                  ; 1
| ::: ::|   0x080080f6      a870           strb r0, [r5, 2]            ; 0x2000187c
| ::: ::|   0x080080f8      7870           strb r0, [r7, 1]            ; 0x20000769
| ========< 0x080080fa      4ae7           b 0x8007f92
| ::: ::|      ; JMP XREF from 0x080080f2 (_Parse_Matrix)
| --------> 0x080080fc      fd28           cmp r0, 0xfd                ; 253
| :::,====< 0x080080fe      02d0           beq 0x8008106               ; jump if LED Brightness key
| :::|::|   0x08008100      baf1140f       cmp.w sl, 0x14              ; 20 ; or is the 21'st key
| ========< 0x08008104      04d1           bne 0x8008110
| :::|::|      ; JMP XREF from 0x080080fe (_Parse_Matrix)
| :::`----> 0x08008106      0120           movs r0, 1                  ; 1
| ::: ::|   0x08008108      a870           strb r0, [r5, 2]            ; 0x2000187c
| ::: ::|   0x0800810a      88f80100       strb.w r0, [r8, 1]          ; 0x2000076a
| ========< 0x0800810e      40e7           b 0x8007f92
| ::: ::|      ; JMP XREF from 0x08008104 (_Parse_Matrix)
| --------> 0x08008110      fb28           cmp r0, 0xfb                ; 251
| :::,====< 0x08008112      02d0           beq 0x800811a               ; jump if LED Speed key
| :::|::|   0x08008114      baf1130f       cmp.w sl, 0x13              ; 19 ; or is the 20'th key
| ========< 0x08008118      04d1           bne 0x8008124
| :::|::|      ; JMP XREF from 0x08008112 (_Parse_Matrix)
| :::`----> 0x0800811a      0120           movs r0, 1                  ; 1
| ::: ::|   0x0800811c      a870           strb r0, [r5, 2]            ; 0x2000187c
| ::: ::|   0x0800811e      88f80200       strb.w r0, [r8, 2]          ; 0x2000076b
| ========< 0x08008122      36e7           b 0x8007f92
| ::: ::|      ; JMP XREF from 0x08008118 (_Parse_Matrix)
| --------> 0x08008124      f128           cmp r0, 0xf1                ; 241
| :::,====< 0x08008126      02d0           beq 0x800812e               ; jump if LED Backlight key
| :::|::|   0x08008128      baf1120f       cmp.w sl, 0x12              ; 18 ; or is the 19th key
| ========< 0x0800812c      04d1           bne 0x8008138
| :::|::|      ; JMP XREF from 0x08008126 (_Parse_Matrix)
| :::`----> 0x0800812e      0120           movs r0, 1                  ; 1
| ::: ::|   0x08008130      a870           strb r0, [r5, 2]            ; 0x2000187c
| ::: ::|   0x08008132      88f80400       strb.w r0, [r8, 4]          ; 0x2000076d
| ========< 0x08008136      2ce7           b 0x8007f92
| ::: ::|      ; JMP XREF from 0x0800812c (_Parse_Matrix)
| --------> 0x08008138      baf12f0f       cmp.w sl, 0x2f              ; '/' ; 47 ; is the key in the 48'th position (B)
| :::,====< 0x0800813c      13d1           bne 0x8008166
| :::|::|   0x0800813e      98f81c00       ldrb.w r0, [r8, 0x1c]       ; 0x20000785
| :::|::|   0x08008142      0028           cmp r0, 0
| ========< 0x08008144      07d1           bne 0x8008156
| :::|::|   0x08008146      0120           movs r0, 1                  ; 1
| :::|::|   0x08008148      88f81c00       strb.w r0, [r8, 0x1c]
| :::|::|   0x0800814c      7870           strb r0, [r7, 1]            ; 0x20000769
| :::|::|   0x0800814e      88f80300       strb.w r0, [r8, 3]          ; 0x2000076c
| :::|::|   0x08008152      a870           strb r0, [r5, 2]            ; 0x2000187c
| ========< 0x08008154      07e0           b 0x8008166
| :::|::|      ; JMP XREF from 0x08008144 (_Parse_Matrix)
| --------> 0x08008156      0020           movs r0, 0
| :::|::|   0x08008158      88f81c00       strb.w r0, [r8, 0x1c]
| :::|::|   0x0800815c      0120           movs r0, 1                  ; 1
| :::|::|   0x0800815e      7870           strb r0, [r7, 1]
| :::|::|   0x08008160      88f80300       strb.w r0, [r8, 3]
| :::|::|   0x08008164      a870           strb r0, [r5, 2]
| :::|::|      ; JMP XREF from 0x0800813c (_Parse_Matrix)
| :::|::|      ; JMP XREF from 0x08008154 (_Parse_Matrix)
| ---`----> 0x08008166      98f81c00       ldrb.w r0, [r8, 0x1c]
| ::: ::|   0x0800816a      0128           cmp r0, 1                   ; 1
| ========< 0x0800816c      7ff411af       bne.w 0x8007f92             ; jump if Fn is not active
| ::: ::|   0x08008170      baf1010f       cmp.w sl, 1                 ; 1 ; is this the key in the 2nd pos (1)
| :::,====< 0x08008174      0ed1           bne 0x8008194
| :::|::|   0x08008176      0120           movs r0, 1                  ; 1
| :::|::|   0x08008178      87f82100       strb.w r0, [r7, 0x21]       ; 0x20000789
| :::|::|   0x0800817c      88f81f00       strb.w r0, [r8, 0x1f]       ; 0x20000788
| :::|::|   0x08008180      dff81414       ldr.w r1, [0x08008598]      ; [0x8008598:4]=0x2000192c
| :::|::|   0x08008184      0870           strb r0, [r1]
| :::|::|   0x08008186      0320           movs r0, 3                  ; 3
| :::|::|   0x08008188      07f12101       add.w r1, r7, 0x21
| :::|::|   0x0800818c      4870           strb r0, [r1, 1]            ; 0x2000078a
| :::|::|   0x0800818e      0120           movs r0, 1                  ; 1
| :::|::|   0x08008190      6870           strb r0, [r5, 1]            ; 0x2000187b
| ========< 0x08008192      fee6           b 0x8007f92
| :::|::|      ; JMP XREF from 0x08008174 (_Parse_Matrix)
| :::`----> 0x08008194      baf1020f       cmp.w sl, 2                 ; 2 ; is this the key in the 3rd pos (2)
| :::,====< 0x08008198      0fd1           bne 0x80081ba
| :::|::|   0x0800819a      0120           movs r0, 1                  ; 1
| :::|::|   0x0800819c      87f82100       strb.w r0, [r7, 0x21]
| :::|::|   0x080081a0      88f81f00       strb.w r0, [r8, 0x1f]
| :::|::|   0x080081a4      0220           movs r0, 2                  ; 2
| :::|::|   0x080081a6      dff8f013       ldr.w r1, [0x08008598]      ; [0x8008598:4]=0x2000192c
| :::|::|   0x080081aa      0870           strb r0, [r1]
| :::|::|   0x080081ac      0320           movs r0, 3                  ; 3
| :::|::|   0x080081ae      07f12101       add.w r1, r7, 0x21
| :::|::|   0x080081b2      4870           strb r0, [r1, 1]
| :::|::|   0x080081b4      0120           movs r0, 1                  ; 1
| :::|::|   0x080081b6      6870           strb r0, [r5, 1]
| ========< 0x080081b8      ebe6           b 0x8007f92
| :::|::|      ; JMP XREF from 0x08008198 (_Parse_Matrix)
| :::`----> 0x080081ba      baf1030f       cmp.w sl, 3                 ; 3 ; is this the key in the 4th pos (3)
| :::,====< 0x080081be      0ed1           bne 0x80081de
| :::|::|   0x080081c0      0120           movs r0, 1                  ; 1
| :::|::|   0x080081c2      87f82100       strb.w r0, [r7, 0x21]
| :::|::|   0x080081c6      88f81f00       strb.w r0, [r8, 0x1f]
| :::|::|   0x080081ca      0320           movs r0, 3                  ; 3
| :::|::|   0x080081cc      dff8c813       ldr.w r1, [0x08008598]      ; [0x8008598:4]=0x2000192c
| :::|::|   0x080081d0      0870           strb r0, [r1]
| :::|::|   0x080081d2      07f12101       add.w r1, r7, 0x21
| :::|::|   0x080081d6      4870           strb r0, [r1, 1]
| :::|::|   0x080081d8      0120           movs r0, 1                  ; 1
| :::|::|   0x080081da      6870           strb r0, [r5, 1]
| ========< 0x080081dc      d9e6           b 0x8007f92
| :::|::|      ; JMP XREF from 0x080081be (_Parse_Matrix)
| :::`----> 0x080081de      baf1040f       cmp.w sl, 4                 ; 4 ; is this the key in the 5th pos (4)
| :::,====< 0x080081e2      0fd1           bne 0x8008204
| :::|::|   0x080081e4      0120           movs r0, 1                  ; 1
| :::|::|   0x080081e6      87f82100       strb.w r0, [r7, 0x21]
| :::|::|   0x080081ea      88f81f00       strb.w r0, [r8, 0x1f]
| :::|::|   0x080081ee      0420           movs r0, 4                  ; 4
| :::|::|   0x080081f0      dff8a413       ldr.w r1, [0x08008598]      ; [0x8008598:4]=0x2000192c
| :::|::|   0x080081f4      0870           strb r0, [r1]
| :::|::|   0x080081f6      0320           movs r0, 3                  ; 3
| :::|::|   0x080081f8      07f12101       add.w r1, r7, 0x21
| :::|::|   0x080081fc      4870           strb r0, [r1, 1]
| :::|::|   0x080081fe      0120           movs r0, 1                  ; 1
| :::|::|   0x08008200      6870           strb r0, [r5, 1]
| ========< 0x08008202      c6e6           b 0x8007f92
| :::|::|      ; JMP XREF from 0x080081e2 (_Parse_Matrix)
| :::`----> 0x08008204      baf10a0f       cmp.w sl, 0xa               ; 10 ; is this the key in the 11th pos (0)
| ========< 0x08008208      7ff4c3ae       bne.w 0x8007f92
| ::: ::|   0x0800820c      0120           movs r0, 1                  ; 1
| ::: ::|   0x0800820e      87f82100       strb.w r0, [r7, 0x21]
| ::: ::|   0x08008212      88f81f00       strb.w r0, [r8, 0x1f]
| ::: ::|   0x08008216      07f14c00       add.w r0, r7, 0x4c
| ::: ::|   0x0800821a      407e           ldrb r0, [r0, 0x19]         ; 0x200007cd
| ::: ::|   0x0800821c      411e           subs r1, r0, 1              ; toggle BLE_COMP_MODE
| ::: ::|   0x0800821e      8941           sbcs r1, r1
| ::: ::|   0x08008220      c90f           lsrs r1, r1, 0x1f
| ::: ::|   0x08008222      dff87403       ldr.w r0, [0x08008598]      ; [0x8008598:4]=0x2000192c
| ::: ::|   0x08008226      0170           strb r1, [r0]
| ::: ::|   0x08008228      0c20           movs r0, 0xc                ; 12
| ::: ::|   0x0800822a      07f12101       add.w r1, r7, 0x21
| ::: ::|   0x0800822e      4870           strb r0, [r1, 1]            ; 0x2000078a
| ::: ::|   0x08008230      0120           movs r0, 1                  ; 1
| ::: ::|   0x08008232      6870           strb r0, [r5, 1]
| ========< 0x08008234      ade6           b 0x8007f92
| ::: ::|      ; JMP XREF from 0x08007ff0 (_Parse_Matrix)
| ::: ::`-> 0x08008236      98f81c10       ldrb.w r1, [r8, 0x1c]       ; 0x20000785
| ::: ::    0x0800823a      0029           cmp r1, 0
| ::: ::,=< 0x0800823c      38d1           bne 0x80082b0               ; jump if Fn is active
| ::: ::|   0x0800823e      e879           ldrb r0, [r5, 7]            ; 0x20001881
| ::: ::|   0x08008240      0028           cmp r0, 0
| :::,====< 0x08008242      08d0           beq 0x8008256               ; jump if not WIN_LOCK_MODE
| :::|::|   0x08008244      7069           ldr r0, [r6, 0x14]          ; disable win key
| :::|::|   0x08008246      1af80000       ldrb.w r0, [sl, r0]
| :::|::|   0x0800824a      e328           cmp r0, 0xe3                ; 227
| ========< 0x0800824c      3ff4b3ae       beq.w 0x8007fb6
| :::|::|   0x08008250      e728           cmp r0, 0xe7                ; 231
| ========< 0x08008252      3ff4b0ae       beq.w 0x8007fb6
| :::|::|      ; JMP XREF from 0x08008242 (_Parse_Matrix)
| :::`----> 0x08008256      04f1c80b       add.w fp, r4, 0xc8          ; 0x20001870
| ::: ::|   0x0800825a      687a           ldrb r0, [r5, 9]            ; 0x20001883 get FN_LOCK_MODE
| ::: ::|   0x0800825c      0028           cmp r0, 0
| :::,====< 0x0800825e      13d1           bne 0x8008288               ; jump of in Fn lock mode
| :::|::|   0x08008260      7069           ldr r0, [r6, 0x14]
| :::|::|   0x08008262      1af80010       ldrb.w r1, [sl, r0]
| :::|::|   0x08008266      2046           mov r0, r4
| :::|::|   0x08008268      00f0f2f8       bl _KBD_UpdateKeyCodeBitSets
| :::|::|   0x0800826c      0098           ldr r0, [sp]
| :::|::|   0x0800826e      b0f88c00       ldrh.w r0, [r0, 0x8c]
| :::|::|   0x08008272      40fa09f0       asr.w r0, r0, sb
| :::|::|   0x08008276      00f00102       and r2, r0, 1
| :::|::|   0x0800827a      7069           ldr r0, [r6, 0x14]
| :::|::|   0x0800827c      1af80010       ldrb.w r1, [sl, r0]
| :::|::|   0x08008280      5846           mov r0, fp
| :::|::|   0x08008282      00f033f9       bl _KBD_6KROSlotFill_Maybe
| ========< 0x08008286      84e6           b 0x8007f92
| :::|::|      ; JMP XREF from 0x0800825e (_Parse_Matrix)
| :::`----> 0x08008288      b069           ldr r0, [r6, 0x18]
| ::: ::|   0x0800828a      1af80010       ldrb.w r1, [sl, r0]
| ::: ::|   0x0800828e      2046           mov r0, r4
| ::: ::|   0x08008290      00f0def8       bl _KBD_UpdateKeyCodeBitSets
| ::: ::|   0x08008294      0098           ldr r0, [sp]
| ::: ::|   0x08008296      b0f88c00       ldrh.w r0, [r0, 0x8c]
| ::: ::|   0x0800829a      40fa09f0       asr.w r0, r0, sb
| ::: ::|   0x0800829e      00f00102       and r2, r0, 1
| ::: ::|   0x080082a2      b069           ldr r0, [r6, 0x18]
| ::: ::|   0x080082a4      1af80010       ldrb.w r1, [sl, r0]
| ::: ::|   0x080082a8      5846           mov r0, fp
| ::: ::|   0x080082aa      00f01ff9       bl _KBD_6KROSlotFill_Maybe
| ========< 0x080082ae      70e6           b 0x8007f92
| ::: ::|      ; JMP XREF from 0x0800823c (_Parse_Matrix)
| ::: ::`-> 0x080082b0      0129           cmp r1, 1                   ; 1
| ::`=====< 0x080082b2      7ff465ae       bne.w 0x8007f80
| ::  ::    0x080082b6      c007           lsls r0, r0, 0x1f
| ========< 0x080082b8      7ff57dae       bpl.w 0x8007fb6             ; jump if key released
| ::  ::    0x080082bc      baf1000f       cmp.w sl, 0                 ; is this the key in the 1st pos (Esc)
| ::  ::,=< 0x080082c0      08d1           bne 0x80082d4
| ::  ::|   0x080082c2      0020           movs r0, 0
| ::  ::|   0x080082c4      88f81c00       strb.w r0, [r8, 0x1c]       ; 0x20000785
| ::  ::|   0x080082c8      0120           movs r0, 1                  ; 1
| ::  ::|   0x080082ca      7870           strb r0, [r7, 1]            ; 0x20000769
| ::  ::|   0x080082cc      88f80300       strb.w r0, [r8, 3]          ; 0x2000076c
| ::  ::|   0x080082d0      a870           strb r0, [r5, 2]            ; 0x2000187c
| ========< 0x080082d2      5ee6           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x080082c0 (_Parse_Matrix)
| ::  ::`-> 0x080082d4      baf1010f       cmp.w sl, 1                 ; 1 ; is this the key in the 2nd pos (1)
| ::  ::,=< 0x080082d8      10d1           bne 0x80082fc
| ::  ::|   0x080082da      0120           movs r0, 1                  ; 1
| ::  ::|   0x080082dc      87f82100       strb.w r0, [r7, 0x21]       ; 0x20000789
| ::  ::|   0x080082e0      88f81f00       strb.w r0, [r8, 0x1f]       ; 0x20000788
| ::  ::|   0x080082e4      07f22100       addw r0, r7, 0x21
| ::  ::|   0x080082e8      0121           movs r1, 1                  ; 1
| ::  ::|   0x080082ea      8170           strb r1, [r0, 2]            ; 0x2000078b
| ::  ::|   0x080082ec      dff8a822       ldr.w r2, [0x08008598]      ; [0x8008598:4]=0x2000192c
| ::  ::|   0x080082f0      1170           strb r1, [r2]
| ::  ::|   0x080082f2      0421           movs r1, 4                  ; 4
| ::  ::|   0x080082f4      4170           strb r1, [r0, 1]            ; 0x2000078a
| ::  ::|   0x080082f6      0120           movs r0, 1                  ; 1
| ::  ::|   0x080082f8      6870           strb r0, [r5, 1]            ; 0x2000187b
| ========< 0x080082fa      4ae6           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x080082d8 (_Parse_Matrix)
| ::  ::`-> 0x080082fc      baf1020f       cmp.w sl, 2                 ; 2 ; is this the key in the 3rd pos (2)
| ::  ::,=< 0x08008300      11d1           bne 0x8008326
| ::  ::|   0x08008302      0120           movs r0, 1                  ; 1
| ::  ::|   0x08008304      87f82100       strb.w r0, [r7, 0x21]
| ::  ::|   0x08008308      88f81f00       strb.w r0, [r8, 0x1f]
| ::  ::|   0x0800830c      07f22100       addw r0, r7, 0x21
| ::  ::|   0x08008310      0121           movs r1, 1                  ; 1
| ::  ::|   0x08008312      8170           strb r1, [r0, 2]
| ::  ::|   0x08008314      0221           movs r1, 2                  ; 2
| ::  ::|   0x08008316      dff88022       ldr.w r2, [0x08008598]      ; [0x8008598:4]=0x2000192c
| ::  ::|   0x0800831a      1170           strb r1, [r2]
| ::  ::|   0x0800831c      0421           movs r1, 4                  ; 4
| ::  ::|   0x0800831e      4170           strb r1, [r0, 1]
| ::  ::|   0x08008320      0120           movs r0, 1                  ; 1
| ::  ::|   0x08008322      6870           strb r0, [r5, 1]
| ========< 0x08008324      35e6           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x08008300 (_Parse_Matrix)
| ::  ::`-> 0x08008326      baf1030f       cmp.w sl, 3                 ; 3 ; is this the key in the 4th pos (3)
| ::  ::,=< 0x0800832a      11d1           bne 0x8008350
| ::  ::|   0x0800832c      0120           movs r0, 1                  ; 1
| ::  ::|   0x0800832e      87f82100       strb.w r0, [r7, 0x21]
| ::  ::|   0x08008332      88f81f00       strb.w r0, [r8, 0x1f]
| ::  ::|   0x08008336      07f22100       addw r0, r7, 0x21
| ::  ::|   0x0800833a      0121           movs r1, 1                  ; 1
| ::  ::|   0x0800833c      8170           strb r1, [r0, 2]
| ::  ::|   0x0800833e      0321           movs r1, 3                  ; 3
| ::  ::|   0x08008340      dff85422       ldr.w r2, [0x08008598]      ; [0x8008598:4]=0x2000192c
| ::  ::|   0x08008344      1170           strb r1, [r2]
| ::  ::|   0x08008346      0421           movs r1, 4                  ; 4
| ::  ::|   0x08008348      4170           strb r1, [r0, 1]
| ::  ::|   0x0800834a      0120           movs r0, 1                  ; 1
| ::  ::|   0x0800834c      6870           strb r0, [r5, 1]
| ========< 0x0800834e      20e6           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x0800832a (_Parse_Matrix)
| ::  ::`-> 0x08008350      baf1040f       cmp.w sl, 4                 ; 4 ; is this the key in the 5th pos (4)
| ::  ::,=< 0x08008354      10d1           bne 0x8008378
| ::  ::|   0x08008356      0120           movs r0, 1                  ; 1
| ::  ::|   0x08008358      87f82100       strb.w r0, [r7, 0x21]
| ::  ::|   0x0800835c      88f81f00       strb.w r0, [r8, 0x1f]
| ::  ::|   0x08008360      07f22100       addw r0, r7, 0x21
| ::  ::|   0x08008364      0121           movs r1, 1                  ; 1
| ::  ::|   0x08008366      8170           strb r1, [r0, 2]
| ::  ::|   0x08008368      0421           movs r1, 4                  ; 4
| ::  ::|   0x0800836a      dff82c22       ldr.w r2, [0x08008598]      ; [0x8008598:4]=0x2000192c
| ::  ::|   0x0800836e      1170           strb r1, [r2]
| ::  ::|   0x08008370      4170           strb r1, [r0, 1]
| ::  ::|   0x08008372      0120           movs r0, 1                  ; 1
| ::  ::|   0x08008374      6870           strb r0, [r5, 1]
| ========< 0x08008376      0ce6           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x08008354 (_Parse_Matrix)
| ::  ::`-> 0x08008378      baf10c0f       cmp.w sl, 0xc               ; 12 ; is this the key in the 13th pos (+)
| ::  ::,=< 0x0800837c      0dd1           bne 0x800839a
| ::  ::|   0x0800837e      0120           movs r0, 1                  ; 1
| ::  ::|   0x08008380      87f82100       strb.w r0, [r7, 0x21]
| ::  ::|   0x08008384      88f81f00       strb.w r0, [r8, 0x1f]
| ::  ::|   0x08008388      07f22100       addw r0, r7, 0x21
| ::  ::|   0x0800838c      0721           movs r1, 7                  ; 7
| ::  ::|   0x0800838e      4170           strb r1, [r0, 1]            ; 0x2000078a
| ::  ::|   0x08008390      0121           movs r1, 1                  ; 1
| ::  ::|   0x08008392      8170           strb r1, [r0, 2]
| ::  ::|   0x08008394      0846           mov r0, r1
| ::  ::|   0x08008396      6870           strb r0, [r5, 1]
| ========< 0x08008398      fbe5           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x0800837c (_Parse_Matrix)
| ::  ::`-> 0x0800839a      baf10b0f       cmp.w sl, 0xb               ; 11 ; is this the key in the 12th pos (-)
| ::  ::,=< 0x0800839e      0dd1           bne 0x80083bc
| ::  ::|   0x080083a0      0120           movs r0, 1                  ; 1
| ::  ::|   0x080083a2      87f82100       strb.w r0, [r7, 0x21]
| ::  ::|   0x080083a6      88f81f00       strb.w r0, [r8, 0x1f]
| ::  ::|   0x080083aa      07f22100       addw r0, r7, 0x21
| ::  ::|   0x080083ae      0221           movs r1, 2                  ; 2
| ::  ::|   0x080083b0      4170           strb r1, [r0, 1]
| ::  ::|   0x080083b2      0021           movs r1, 0
| ::  ::|   0x080083b4      8170           strb r1, [r0, 2]            ; 0x2000078b
| ::  ::|   0x080083b6      0120           movs r0, 1                  ; 1
| ::  ::|   0x080083b8      6870           strb r0, [r5, 1]
| ========< 0x080083ba      eae5           b 0x8007f92
| ::  ::|      ; JMP XREF from 0x0800839e (_Parse_Matrix)
| ::  ::`-> 0x080083bc      baf10a0f       cmp.w sl, 0xa               ; 10 ; is this the key in the 11th pos (0)
| ========< 0x080083c0      3ff4e7ad       beq.w 0x8007f92
| ::  ::    0x080083c4      baf11d0f       cmp.w sl, 0x1d              ; 29 ; is this the key in the 30th pos (A)
| ========< 0x080083c8      7ff4e3ad       bne.w 0x8007f92
| ::  ::    0x080083cc      04f1e001       add.w r1, r4, 0xe0
| ::  ::    0x080083d0      887b           ldrb r0, [r1, 0xe]          ; 0x20001896
| ::  ::    0x080083d2      401c           adds r0, r0, 1
| ::  ::    0x080083d4      8873           strb r0, [r1, 0xe]
| ::  ::    0x080083d6      c0b2           uxtb r0, r0
| ::  ::    0x080083d8      0228           cmp r0, 2                   ; 2 ; toggle auto power off mode (A key in BLE mode)
| ::  ::,=< 0x080083da      01db           blt 0x80083e0
| ::  ::|   0x080083dc      0020           movs r0, 0
| ::  ::|   0x080083de      8873           strb r0, [r1, 0xe]
| ::  ::|      ; JMP XREF from 0x080083da (_Parse_Matrix)
| ::  ::`-> 0x080083e0      fbf7cefe       bl _TIM4_Update_Flag_1
| ::  ::    0x080083e4      fef758f9       bl _KBD_StoreAutoPWROffFlag
| ::  ::    0x080083e8      0120           movs r0, 1                  ; 1
| ::  ::    0x080083ea      7870           strb r0, [r7, 1]            ; 0x20000769
| ::  ::    0x080083ec      88f80300       strb.w r0, [r8, 3]          ; 0x2000076c
| ::  ::    0x080083f0      a870           strb r0, [r5, 2]            ; 0x2000187c
\ ========< 0x080083f2      cee5           b 0x8007f92
\ ::  ::    ;-- KBD_KeyPosBSUpdate:
/ (fcn) _KBD_KeyPosBSUpdate 56
|       Caller: _Parse_Matrix
|   _KBD_KeyPosBSUpdate ();
| ::  ::       ; CALL XREF from 0x08007ed2 (_Parse_Matrix)
| ::  ::       ; CALL XREF from 0x08007fb2 (_Parse_Matrix)
| ::  ::    0x080083f4      30b4           push {r4, r5}               ; r0: row, r1: column
| ::  ::    0x080083f6      c0ebc002       rsb r2, r0, r0, lsl 3       ; 0,7,14,21,28
| ::  ::    0x080083fa      01eb4200       add.w r0, r1, r2, lsl 1     ; get key's position in the 70 bytes array
| ::  ::    0x080083fe      c0b2           uxtb r0, r0
| ::  ::    0x08008400      8110           asrs r1, r0, 2              ; position/4
| ::  ::    0x08008402      00eb5171       add.w r1, r0, r1, lsr 29    ; always going to be r0
| ::  ::    0x08008406      c910           asrs r1, r1, 3              ; get key's position % 8
| ::  ::    0x08008408      0a46           mov r2, r1
| ::  ::    0x0800840a      d2b2           uxtb r2, r2
| ::  ::    0x0800840c      dff88c31       ldr.w r3, [0x0800859c]      ; [0x800859c:4]=0x20001950
| ::  ::    0x08008410      d45c           ldrb r4, [r2, r3]           ; load byte corresponding to pos%8
| ::  ::    0x08008412      0125           movs r5, 1                  ; 1
| ::  ::    0x08008414      a0ebc101       sub.w r1, r0, r1, lsl 3
| ::  ::    0x08008418      05fa01f1       lsl.w r1, r5, r1            ; get key's position in the 8bit bitset
| ::  ::    0x0800841c      2143           orrs r1, r4                 ; set it to 1
| ::  ::    0x0800841e      d154           strb r1, [r2, r3]
| ::  ::    0x08008420      2946           mov r1, r5
| ::  ::    0x08008422      dff86421       ldr.w r2, [0x08008588]      ; [0x8008588:4]=0x20000768
| ::  ::    0x08008426      5175           strb r1, [r2, 0x15]         ; 0x200077d
| ::  ::    0x08008428      30bc           pop {r4, r5}
\ ::  ::    0x0800842a      7047           bx lr
/ (fcn) fcn.0800842c 36
|       Caller: _KBD_Macro_Something2
|   fcn.0800842c ();
| ::  ::       ; CALL XREF from 0x08008fae (_KBD_Macro_Something2)
| ::  ::       ; CALL XREF from 0x0800900c (_KBD_Macro_Something2)
| ::  ::    0x0800842c      30b4           push {r4, r5}
| ::  ::    0x0800842e      cb10           asrs r3, r1, 3
| ::  ::    0x08008430      1c5c           ldrb r4, [r3, r0]
| ::  ::    0x08008432      0125           movs r5, 1                  ; 1
| ::  ::    0x08008434      01f00701       and r1, r1, 7
| ::  ::    0x08008438      05fa01f1       lsl.w r1, r5, r1
| ::  ::    0x0800843c      002a           cmp r2, 0
| ::  ::,=< 0x0800843e      02d0           beq 0x8008446
| ::  ::|   0x08008440      2143           orrs r1, r4
| ::  ::|   0x08008442      1954           strb r1, [r3, r0]
| :: ,====< 0x08008444      02e0           b 0x800844c
| :: |::|      ; JMP XREF from 0x0800843e (fcn.0800842c)
| :: |::`-> 0x08008446      24ea0101       bic.w r1, r4, r1
| :: |::    0x0800844a      1954           strb r1, [r3, r0]
| :: |::       ; JMP XREF from 0x08008444 (fcn.0800842c)
| :: `----> 0x0800844c      30bc           pop {r4, r5}
\ ::  ::    0x0800844e      7047           bx lr
\ ::  ::    ;-- KBD_UpdateKeyCodeBitSets:
/ (fcn) _KBD_UpdateKeyCodeBitSets 156
|       Caller: _Parse_Matrix
|   _KBD_UpdateKeyCodeBitSets ();
| ::  ::       ; XREFS: CALL 0x08008006  CALL 0x08008038  CALL 0x08008054  CALL 0x08008086  CALL 0x08008268  CALL 0x08008290  
| ::  ::    0x08008450      70b4           push {r4, r5, r6}           ; r0: 0x200017a8, r1: a key's USB UsageID code in current layout r2: key state
| ::  ::    0x08008452      0b46           mov r3, r1
| ::  ::    0x08008454      a1f1e004       sub.w r4, r1, 0xe0
| ::  ::    0x08008458      082c           cmp r4, 8                   ; 8 ; modifier keys are e0-e7
| ::  ::,=< 0x0800845a      11d2           bhs 0x8008480               ; jump if not a modifier key
| ::  ::|   0x0800845c      0124           movs r4, 1                  ; 1
| ::  ::|   0x0800845e      01f00f01       and r1, r1, 0xf             ; e0-e7 => 0-7
| ::  ::|   0x08008462      04fa01f1       lsl.w r1, r4, r1
| ::  ::|   0x08008466      90f8a840       ldrb.w r4, [r0, 0xa8]       ; 0x20001850
| ::  ::|   0x0800846a      002a           cmp r2, 0
| :: ,====< 0x0800846c      03d0           beq 0x8008476               ; jump if key was released
| :: |::|   0x0800846e      2143           orrs r1, r4                 ; set the modifiers bit in that byte if it was pressed
| :: |::|   0x08008470      80f8a810       strb.w r1, [r0, 0xa8]
| ::,=====< 0x08008474      19e0           b 0x80084aa
| ::||::|      ; JMP XREF from 0x0800846c (_KBD_UpdateKeyCodeBitSets)
| ::|`----> 0x08008476      24ea0101       bic.w r1, r4, r1            ; clear the modifiers bit in that byte if it was released
| ::| ::|   0x0800847a      80f8a810       strb.w r1, [r0, 0xa8]
| ::|,====< 0x0800847e      14e0           b 0x80084aa
| ::||::|      ; JMP XREF from 0x0800845a (_KBD_UpdateKeyCodeBitSets)
| ::||::`-> 0x08008480      e02b           cmp r3, 0xe0                ; 224
| ::||::,=< 0x08008482      12da           bge 0x80084aa               ; jump if a media key
| ::||::|   0x08008484      00ebe305       add.w r5, r0, r3, asr 3     ; 0x200017a8 + keycode/8
| ::||::|   0x08008488      95f8a960       ldrb.w r6, [r5, 0xa9]       ; byte in 0x20001851 array
| ::||::|   0x0800848c      0124           movs r4, 1                  ; 1
| ::||::|   0x0800848e      01f00701       and r1, r1, 7
| ::||::|   0x08008492      04fa01f1       lsl.w r1, r4, r1
| ::||::|   0x08008496      002a           cmp r2, 0
| ========< 0x08008498      03d0           beq 0x80084a2               ; jump if key was released
| ::||::|   0x0800849a      3143           orrs r1, r6
| ::||::|   0x0800849c      85f8a910       strb.w r1, [r5, 0xa9]       ; set bit corresponding to keycode/8
| ========< 0x080084a0      03e0           b 0x80084aa
| ::||::|      ; JMP XREF from 0x08008498 (_KBD_UpdateKeyCodeBitSets)
| --------> 0x080084a2      26ea0101       bic.w r1, r6, r1            ; clear bit corresponding to keycode/8
| ::||::|   0x080084a6      85f8a910       strb.w r1, [r5, 0xa9]
| ::||::|      ; JMP XREF from 0x08008474 (_KBD_UpdateKeyCodeBitSets)
| ::||::|      ; JMP XREF from 0x0800847e (_KBD_UpdateKeyCodeBitSets)
| ::||::|      ; JMP XREF from 0x08008482 (_KBD_UpdateKeyCodeBitSets)
| ::||::|      ; JMP XREF from 0x080084a0 (_KBD_UpdateKeyCodeBitSets)
| --``--`-> 0x080084aa      802b           cmp r3, 0x80                ; 128 ; volume up
| ::  ::,=< 0x080084ac      03d0           beq 0x80084b6
| ::  ::|   0x080084ae      812b           cmp r3, 0x81                ; 129 ; volume down
| :: ,====< 0x080084b0      01d0           beq 0x80084b6
| :: |::|   0x080084b2      7f2b           cmp r3, 0x7f                ; 127 ; mute
| ::,=====< 0x080084b4      18d1           bne 0x80084e8
| ::||::|      ; JMP XREF from 0x080084ac (_KBD_UpdateKeyCodeBitSets)
| ::||::|      ; JMP XREF from 0x080084b0 (_KBD_UpdateKeyCodeBitSets)
| ::|`--`-> 0x080084b6      0021           movs r1, 0
| ::| ::    0x080084b8      80f8d010       strb.w r1, [r0, 0xd0]       ; 0x20001878
| ::| ::    0x080084bc      002a           cmp r2, 0                   ; is key released
| ::| ::,=< 0x080084be      13d0           beq 0x80084e8
| ::| ::|   0x080084c0      802b           cmp r3, 0x80                ; 128
| ::|,====< 0x080084c2      03d1           bne 0x80084cc
| ::||::|   0x080084c4      0121           movs r1, 1                  ; 1
| ::||::|   0x080084c6      80f8d010       strb.w r1, [r0, 0xd0]
| ========< 0x080084ca      0ae0           b 0x80084e2
| ::||::|      ; JMP XREF from 0x080084c2 (_KBD_UpdateKeyCodeBitSets)
| ::|`----> 0x080084cc      812b           cmp r3, 0x81                ; 129
| ::|,====< 0x080084ce      03d1           bne 0x80084d8
| ::||::|   0x080084d0      0221           movs r1, 2                  ; 2
| ::||::|   0x080084d2      80f8d010       strb.w r1, [r0, 0xd0]
| ========< 0x080084d6      04e0           b 0x80084e2
| ::||::|      ; JMP XREF from 0x080084ce (_KBD_UpdateKeyCodeBitSets)
| ::|`----> 0x080084d8      7f2b           cmp r3, 0x7f                ; 127
| ::|,====< 0x080084da      02d1           bne 0x80084e2
| ::||::|   0x080084dc      0421           movs r1, 4                  ; 4
| ::||::|   0x080084de      80f8d010       strb.w r1, [r0, 0xd0]
| ::||::|      ; JMP XREF from 0x080084ca (_KBD_UpdateKeyCodeBitSets)
| ::||::|      ; JMP XREF from 0x080084d6 (_KBD_UpdateKeyCodeBitSets)
| ::||::|      ; JMP XREF from 0x080084da (_KBD_UpdateKeyCodeBitSets)
| ---`----> 0x080084e2      0121           movs r1, 1                  ; 1
| ::| ::|   0x080084e4      80f8d110       strb.w r1, [r0, 0xd1]
| ::| ::|      ; JMP XREF from 0x080084b4 (_KBD_UpdateKeyCodeBitSets)
| ::| ::|      ; JMP XREF from 0x080084be (_KBD_UpdateKeyCodeBitSets)
| ::`---`-> 0x080084e8      70bc           pop {r4, r5, r6}
\ ::  ::    0x080084ea      7047           bx lr
\ ::  ::    ;-- KBD_6KROSlotFill_Maybe:
/ (fcn) _KBD_6KROSlotFill_Maybe 112
|       Caller: _KBD_Macro_Something2 _Parse_Matrix
|   _KBD_6KROSlotFill_Maybe ();
| ::  ::       ; XREFS: CALL 0x08007f8e  CALL 0x08008020  CALL 0x08008046  CALL 0x0800806e  CALL 0x08008094  CALL 0x080080c8  CALL 0x08008282  CALL 0x080082aa  CALL 0x08008f9c  
| ::  ::       ; XREFS: CALL 0x08008ffa  
| ::  ::    0x080084ec      a1f1e003       sub.w r3, r1, 0xe0          ; r0: 0x20001870, r1: a key's USB UsageID code in current layout r2: key state
| ::  ::    0x080084f0      082b           cmp r3, 8                   ; 8
| ::  ::,=< 0x080084f2      0ed2           bhs 0x8008512               ; jump if not a modifier key
| ::  ::|   0x080084f4      0123           movs r3, 1                  ; 1
| ::  ::|   0x080084f6      01f00f01       and r1, r1, 0xf             ; e0-e7 => 0-7
| ::  ::|   0x080084fa      03fa01f1       lsl.w r1, r3, r1
| ::  ::|   0x080084fe      0378           ldrb r3, [r0]
| ::  ::|   0x08008500      002a           cmp r2, 0
| :: ,====< 0x08008502      02d0           beq 0x800850a               ; jump if key released
| :: |::|   0x08008504      1943           orrs r1, r3
| :: |::|   0x08008506      0170           strb r1, [r0]               ; set modifiers bit in byte
| :: |::|   0x08008508      7047           bx lr
| :: |::|      ; JMP XREF from 0x08008502 (_KBD_6KROSlotFill_Maybe)
| :: `----> 0x0800850a      23ea0101       bic.w r1, r3, r1
| ::  ::|   0x0800850e      0170           strb r1, [r0]               ; clear modifier's bit in byte
| ::  ::|   0x08008510      7047           bx lr
| ::  ::|      ; JMP XREF from 0x080084f2 (_KBD_6KROSlotFill_Maybe)
| ::  ::`-> 0x08008512      e029           cmp r1, 0xe0                ; 224
| ::  ::,=< 0x08008514      21da           bge 0x800855a               ; return if media key
| ::  ::|   0x08008516      002a           cmp r2, 0
| :: ,====< 0x08008518      10d0           beq 0x800853c               ; jump if key released
| :: |::|   0x0800851a      0022           movs r2, 0
| ::,=====< 0x0800851c      01e0           b 0x8008522
| ::||::|      ; JMP XREF from 0x08008530 (_KBD_6KROSlotFill_Maybe)
| --------> 0x0800851e      521c           adds r2, r2, 1
| ::||::|   0x08008520      d2b2           uxtb r2, r2
| ::||::|      ; JMP XREF from 0x0800851c (_KBD_6KROSlotFill_Maybe)
| ::`-----> 0x08008522      062a           cmp r2, 6                   ; 6
| ::,=====< 0x08008524      05da           bge 0x8008532
| ::||::|   0x08008526      1318           adds r3, r2, r0             ; 0x20001870 + 0,1,2,3,4,5
| ::||::|   0x08008528      9b78           ldrb r3, [r3, 2]            ; loop through the 6 keycode slots to find the next empty one
| ::||::|   0x0800852a      002b           cmp r3, 0
| ========< 0x0800852c      01d0           beq 0x8008532               ; jump if empty
| ::||::|   0x0800852e      8b42           cmp r3, r1
| ========< 0x08008530      f5d1           bne 0x800851e
| ::||::|      ; JMP XREF from 0x08008524 (_KBD_6KROSlotFill_Maybe)
| ::||::|      ; JMP XREF from 0x0800852c (_KBD_6KROSlotFill_Maybe)
| --`-----> 0x08008532      062a           cmp r2, 6                   ; 6
| ::,=====< 0x08008534      11da           bge 0x800855a
| ::||::|   0x08008536      1018           adds r0, r2, r0
| ::||::|   0x08008538      8170           strb r1, [r0, 2]            ; store current key's code in the free slot
| ::||::|   0x0800853a      7047           bx lr
| ::||::|      ; JMP XREF from 0x08008518 (_KBD_6KROSlotFill_Maybe)
| ::|`----> 0x0800853c      0022           movs r2, 0
| ::|,====< 0x0800853e      01e0           b 0x8008544
| ::||::|      ; JMP XREF from 0x0800854e (_KBD_6KROSlotFill_Maybe)
| --------> 0x08008540      521c           adds r2, r2, 1
| ::||::|   0x08008542      d2b2           uxtb r2, r2
| ::||::|      ; JMP XREF from 0x0800853e (_KBD_6KROSlotFill_Maybe)
| ::|`----> 0x08008544      062a           cmp r2, 6                   ; 6
| ::|,====< 0x08008546      03da           bge 0x8008550
| ::||::|   0x08008548      1318           adds r3, r2, r0             ; 0x20001870 + 0,1,2,3,4,5
| ::||::|   0x0800854a      9b78           ldrb r3, [r3, 2]            ; loop through the 6 keycode slots
| ::||::|   0x0800854c      8b42           cmp r3, r1                  ; check if key was pressed previously
| ========< 0x0800854e      f7d1           bne 0x8008540
| ::||::|      ; JMP XREF from 0x08008546 (_KBD_6KROSlotFill_Maybe)
| ::|`----> 0x08008550      062a           cmp r2, 6                   ; 6
| ::|,====< 0x08008552      02da           bge 0x800855a
| ::||::|   0x08008554      0021           movs r1, 0                  ; clear that keycode if it was pressed previously
| ::||::|   0x08008556      1018           adds r0, r2, r0
| ::||::|   0x08008558      8170           strb r1, [r0, 2]
| ::||::|      ; JMP XREF from 0x08008514 (_KBD_6KROSlotFill_Maybe)
| ::||::|      ; JMP XREF from 0x08008534 (_KBD_6KROSlotFill_Maybe)
| ::||::|      ; JMP XREF from 0x08008552 (_KBD_6KROSlotFill_Maybe)
\ ::``--`-> 0x0800855a      7047           bx lr
/ (fcn) clear_some_arrays 40
|       Caller: _KBD_PWRManage
|   clear_some_arrays ();
| ::  ::       ; CALL XREF from 0x08008e6e (_KBD_PWRManage)
| ::  ::       ; CALL XREF from 0x08008eb6 (_KBD_PWRManage)
| ::  ::    0x0800855c      80b5           push {r7, lr}
| ::  ::    0x0800855e      2622           movs r2, 0x26               ; '&' ; 38
| ::  ::    0x08008560      0021           movs r1, 0
| ::  ::    0x08008562      0f48           ldr r0, [0x080085a0]        ; [0x80085a0:4]=0x200018cc
| ::  ::    0x08008564      fef704fa       bl memset                   ; void *memset(void *s, int c, size_t n)
| ::  ::    0x08008568      0a22           movs r2, 0xa                ; 10
| ::  ::    0x0800856a      0021           movs r1, 0
| ::  ::    0x0800856c      0d48           ldr r0, [0x080085a4]        ; [0x80085a4:4]=0x20001938
| ::  ::    0x0800856e      fef7fff9       bl memset                   ; void *memset(void *s, int c, size_t n)
| ::  ::    0x08008572      0a22           movs r2, 0xa                ; 10
| ::  ::    0x08008574      0021           movs r1, 0
| ::  ::    0x08008576      0c48           ldr r0, [0x080085a8]        ; [0x80085a8:4]=0x20001944
| ::  ::    0x08008578      fef7faf9       bl memset                   ; void *memset(void *s, int c, size_t n)
| ::  ::    0x0800857c      0120           movs r0, 1                  ; 1
| ::  ::    0x0800857e      0b49           ldr r1, [0x080085ac]        ; [0x80085ac:4]=0x20001994
| ::  ::    0x08008580      0870           strb r0, [r1]
\ ::  ::    0x08008582      01bd           pop {r0, pc}
  ::  ::       ; DATA XREF from 0x08007c0c (_Scan_Matrix)
  ::  ::    0x08008584      .dword 0x20000588
  ::  ::       ; DATA XREF from 0x08007c48 (_Scan_Matrix)
  ::  ::       ; DATA XREF from 0x08007d5e (_Parse_Matrix)
  ::  ::       ; DATA XREF from 0x08007da0 (_Parse_Matrix)
  ::  ::       ; DATA XREF from 0x08008422 (_KBD_KeyPosBSUpdate)
  ::  ::    0x08008588      .dword 0x20000768
  ::  ::       ; DATA XREF from 0x08007c9c (_Scan_Matrix)
  ::  ::    0x0800858c      .dword 0x20000628
  ::  ::       ; DATA XREF from 0x08007ddc (_Parse_Matrix)
  ::  ::    0x08008590      .dword 0x20000edc
  ::  ::       ; DATA XREF from 0x08007f70 (_Parse_Matrix)
  ::  ::    0x08008594      .dword 0x20001995
  ::  ::       ; XREFS: DATA 0x08008180  DATA 0x080081a6  DATA 0x080081cc  DATA 0x080081f0  DATA 0x08008222  DATA 0x080082ec  DATA 0x08008316  DATA 0x08008340  DATA 0x0800836a  
  ::  ::    0x08008598      .dword 0x2000192c
  ::  ::       ; DATA XREF from 0x0800840c (_KBD_KeyPosBSUpdate)
  ::  ::    0x0800859c      .dword 0x20001950
  ::  ::       ; DATA XREF from 0x08008562 (clear_some_arrays)
  ::  ::    0x080085a0      .dword 0x200018cc
  ::  ::       ; DATA XREF from 0x0800856c (clear_some_arrays)
  ::  ::    0x080085a4      .dword 0x20001938
  ::  ::       ; DATA XREF from 0x08008576 (clear_some_arrays)
  ::  ::    0x080085a8      .dword 0x20001944
  ::  ::       ; DATA XREF from 0x0800857e (clear_some_arrays)
  ::  ::    0x080085ac      .dword 0x20001994
/ (fcn) main_loop 100
|       Caller: main
|   main_loop ();
| ::  ::       ; CALL XREF from 0x0800a7f0 (main)
| ::  ::    0x080085b0      10b5           push {r4, lr}
| ::  ::    0x080085b2      dff81449       ldr.w r4, [0x08008ec8]      ; [0x8008ec8:4]=0x200018a4
| ::  ::    0x080085b6      0020           movs r0, 0
| ::  ::    0x080085b8      2080           strh r0, [r4]
| ::  ::    0x080085ba      a080           strh r0, [r4, 4]
| ::  ::    0x080085bc      2081           strh r0, [r4, 8]
| ::  ::    0x080085be      a081           strh r0, [r4, 0xc]
| ::  ::    0x080085c0      2082           strh r0, [r4, 0x10]
| ::  ::    0x080085c2      a082           strh r0, [r4, 0x14]
| ::  ::    0x080085c4      2083           strh r0, [r4, 0x18]
| ::  ::       ; JMP XREF from 0x08008612 (main_loop)
| ::  ::.-> 0x080085c6      2046           mov r0, r4
| ::  :::   0x080085c8      00f024f8       bl _KBD_StateUpdate
| ::  :::   0x080085cc      201d           adds r0, r4, 4
| ::  :::   0x080085ce      00f074f8       bl _KBD_KeyStrokeHandle
| ::  :::   0x080085d2      04f11c00       add.w r0, r4, 0x1c
| ::  :::   0x080085d6      00f0e4f8       bl _KBD_IdleFlagsUpdate
| ::  :::   0x080085da      04f10800       add.w r0, r4, 8
| ::  :::   0x080085de      00f01cf9       bl _LED_StateUpdate
| ::  :::   0x080085e2      04f11000       add.w r0, r4, 0x10
| ::  :::   0x080085e6      00f01bfb       bl _BLE_StateUpdate
| ::  :::   0x080085ea      04f11400       add.w r0, r4, 0x14
| ::  :::   0x080085ee      00f063fb       bl _KBD_MSGReceive
| ::  :::   0x080085f2      04f11800       add.w r0, r4, 0x18
| ::  :::   0x080085f6      00f0bdfb       bl _KBD_PWRManage
| ::  :::   0x080085fa      04f12000       add.w r0, r4, 0x20
| ::  :::   0x080085fe      00f025fa       bl fcn.08008a4c
| ::  :::   0x08008602      04f10c00       add.w r0, r4, 0xc
| ::  :::   0x08008606      00f081fb       bl fcn.08008d0c
| ::  :::   0x0800860a      04f12400       add.w r0, r4, 0x24
| ::  :::   0x0800860e      00f066fa       bl fcn.08008ade
\ ::  ::`=< 0x08008612      d8e7           b 0x80085c6
\ ::  ::    ;-- KBD_StateUpdate:
/ (fcn) _KBD_StateUpdate 166
|       Caller: main_loop
|   _KBD_StateUpdate ();
| ::  ::       ; CALL XREF from 0x080085c8 (main_loop)
| ::  ::    0x08008614      38b5           push {r3, r4, r5, lr}
| ::  ::    0x08008616      0446           mov r4, r0
| ::  ::    0x08008618      0120           movs r0, 1                  ; 1
| ::  ::    0x0800861a      2188           ldrh r1, [r4]               ; 0 initially
| ::  ::    0x0800861c      0029           cmp r1, 0
| ::  ::,=< 0x0800861e      06d0           beq 0x800862e
| ::  ::|   0x08008620      9029           cmp r1, 0x90                ; 144
| :: ,====< 0x08008622      0ed0           beq 0x8008642
| :: |::|   0x08008624      9229           cmp r1, 0x92                ; 146
| ::,=====< 0x08008626      20d0           beq 0x800866a
| ::||::|   0x08008628      b329           cmp r1, 0xb3                ; 179
| ========< 0x0800862a      3ed0           beq 0x80086aa
| ========< 0x0800862c      41e0           b 0x80086b2
| ::||::|      ; JMP XREF from 0x0800861e (_KBD_StateUpdate)
| ::||::|      ; JMP XREF from 0x080086ac (_KBD_StateUpdate)
| ------`-> 0x0800862e      dff89c08       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::    0x08008632      c17d           ldrb r1, [r0, 0x17]         ; 0 initially
| ::||::    0x08008634      0029           cmp r1, 0
| ::||::,=< 0x08008636      16d0           beq 0x8008666
| ::||::|   0x08008638      807e           ldrb r0, [r0, 0x1a]
| ::||::|   0x0800863a      0228           cmp r0, 2                   ; 2
| ========< 0x0800863c      13d1           bne 0x8008666
| ::||::|   0x0800863e      9020           movs r0, 0x90               ; 144
| ::||::|   0x08008640      2080           strh r0, [r4]
| ::||::|      ; JMP XREF from 0x08008622 (_KBD_StateUpdate)
| ::|`----> 0x08008642      dff88808       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::|   0x08008646      c08b           ldrh r0, [r0, 0x1e]
| ::| ::|   0x08008648      0028           cmp r0, 0
| ::|,====< 0x0800864a      17d0           beq 0x800867c
| ::||::|      ; JMP XREF from 0x0800867a (_KBD_StateUpdate)
| --------> 0x0800864c      dff88058       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::||::|   0x08008650      2846           mov r0, r5
| ::||::|   0x08008652      fff7d7fa       bl _Scan_Matrix
| ::||::|   0x08008656      2846           mov r0, r5
| ::||::|   0x08008658      fff745fb       bl _Parse_Matrix
| ::||::|   0x0800865c      dff86c08       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::|   0x08008660      0021           movs r1, 0
| ::||::|   0x08008662      c183           strh r1, [r0, 0x1e]
| ========< 0x08008664      0de0           b 0x8008682
| ::||::|      ; JMP XREF from 0x08008636 (_KBD_StateUpdate)
| ::||::|      ; JMP XREF from 0x0800863c (_KBD_StateUpdate)
| ------`-> 0x08008666      9220           movs r0, 0x92               ; 146
| ::||::    0x08008668      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008626 (_KBD_StateUpdate)
| ::`-----> 0x0800866a      dff86008       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| :: |::    0x0800866e      c08b           ldrh r0, [r0, 0x1e]         ; an EXTl interrupt counter
| :: |::    0x08008670      0028           cmp r0, 0
| :: |::,=< 0x08008672      03d0           beq 0x800867c               ; return if 0
| :: |::|   0x08008674      fdf781f8       bl _BLE_IsMSGPending
| :: |::|   0x08008678      0028           cmp r0, 0
| ========< 0x0800867a      e7d0           beq 0x800864c
| :: |::|      ; JMP XREF from 0x0800864a (_KBD_StateUpdate)
| :: |::|      ; JMP XREF from 0x08008672 (_KBD_StateUpdate)
| :: `--`-> 0x0800867c      0020           movs r0, 0
| ::  ::    0x0800867e      32bd           pop {r1, r4, r5, pc}
| ::  ::       ; JMP XREF from 0x08008694 (_KBD_StateUpdate)
| ::  ::.-> 0x08008680      491c           adds r1, r1, 1
| ::  :::      ; JMP XREF from 0x08008664 (_KBD_StateUpdate)
| --------> 0x08008682      c9b2           uxtb r1, r1
| ::  :::   0x08008684      0a46           mov r2, r1
| ::  :::   0x08008686      052a           cmp r2, 5                   ; 5
| :: ,====< 0x08008688      07da           bge 0x800869a
| :: |:::   0x0800868a      05eb4202       add.w r2, r5, r2, lsl 1
| :: |:::   0x0800868e      b2f88c20       ldrh.w r2, [r2, 0x8c]
| :: |:::   0x08008692      002a           cmp r2, 0
| :: |::`=< 0x08008694      f4d0           beq 0x8008680
| :: |::    0x08008696      0121           movs r1, 1                  ; 1
| :: |::    0x08008698      c183           strh r1, [r0, 0x1e]
| :: |::       ; JMP XREF from 0x08008688 (_KBD_StateUpdate)
| :: `----> 0x0800869a      c08b           ldrh r0, [r0, 0x1e]
| ::  ::    0x0800869c      0028           cmp r0, 0
| ::  ::,=< 0x0800869e      01d1           bne 0x80086a4
| ::  ::|   0x080086a0      fbf709ff       bl _MatrixColumns_Set
| ::  ::|      ; JMP XREF from 0x0800869e (_KBD_StateUpdate)
| ::  ::`-> 0x080086a4      0020           movs r0, 0
| ::  ::    0x080086a6      b321           movs r1, 0xb3               ; 179
| ::  ::    0x080086a8      2180           strh r1, [r4]
| ::  ::       ; JMP XREF from 0x0800862a (_KBD_StateUpdate)
| --------> 0x080086aa      0028           cmp r0, 0
| ========< 0x080086ac      bfd1           bne 0x800862e
| ::  ::    0x080086ae      0120           movs r0, 1                  ; 1
| ::  ::    0x080086b0      32bd           pop {r1, r4, r5, pc}
| ::  ::       ; JMP XREF from 0x0800862c (_KBD_StateUpdate)
| --------> 0x080086b2      0020           movs r0, 0
| ::  ::    0x080086b4      2080           strh r0, [r4]
| ::  ::    0x080086b6      0320           movs r0, 3                  ; 3
\ ::  ::    0x080086b8      32bd           pop {r1, r4, r5, pc}
\ ::  ::    ;-- KBD_KeyStrokeHandle:
/ (fcn) _KBD_KeyStrokeHandle 232
|       Caller: main_loop
|   _KBD_KeyStrokeHandle ();
| ::  ::       ; CALL XREF from 0x080085ce (main_loop)
| ::  ::    0x080086ba      2de9f843       push.w {r3, r4, r5, r6, r7, r8, sb, lr}
| ::  ::    0x080086be      0446           mov r4, r0
| ::  ::    0x080086c0      2088           ldrh r0, [r4]
| ::  ::    0x080086c2      0028           cmp r0, 0
| ::  ::,=< 0x080086c4      02d0           beq 0x80086cc
| ::  ::|   0x080086c6      c128           cmp r0, 0xc1                ; 193
| :: ,====< 0x080086c8      02d0           beq 0x80086d0
| ::,=====< 0x080086ca      65e0           b 0x8008798
| ::||::|      ; JMP XREF from 0x080086c4 (_KBD_KeyStrokeHandle)
| ::||::|      ; JMP XREF from 0x08008790 (_KBD_KeyStrokeHandle)
| ::||::|      ; JMP XREF from 0x08008796 (_KBD_KeyStrokeHandle)
| ------`-> 0x080086cc      c120           movs r0, 0xc1               ; 193
| ::||::    0x080086ce      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x080086c8 (_KBD_KeyStrokeHandle)
| ::|`----> 0x080086d0      dff8fc57       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::| ::    0x080086d4      05f2d206       addw r6, r5, 0xd2
| ::| ::    0x080086d8      7078           ldrb r0, [r6, 1]            ; 0x2000187b
| ::| ::    0x080086da      05f1e407       add.w r7, r5, 0xe4
| ::| ::    0x080086de      95f8d210       ldrb.w r1, [r5, 0xd2]       ; 0x2000187a
| ::| ::    0x080086e2      0143           orrs r1, r0
| ::| ::    0x080086e4      3a7b           ldrb r2, [r7, 0xc]          ; 0x20001898
| ::| ::    0x080086e6      1143           orrs r1, r2
| ::| ::,=< 0x080086e8      01d1           bne 0x80086ee
| ::| ::|   0x080086ea      0020           movs r0, 0
| ::|,====< 0x080086ec      57e0           b 0x800879e                 ; return if not any of the keyboard's modes
| ::||::|      ; JMP XREF from 0x080086e8 (_KBD_KeyStrokeHandle)
| ::||::`-> 0x080086ee      0021           movs r1, 0
| ::||::    0x080086f0      85f8d210       strb.w r1, [r5, 0xd2]       ; 0x2000187a
| ::||::    0x080086f4      c5f8e410       str.w r1, [r5, 0xe4]        ; 0x2000188c
| ::||::    0x080086f8      dff8d087       ldr.w r8, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::    0x080086fc      08f20509       addw sb, r8, 5
| ::||::    0x08008700      0028           cmp r0, 0
| ::||::,=< 0x08008702      06d0           beq 0x8008712               ; this might be BLE related 0x2000187b
| ::||::|   0x08008704      0846           mov r0, r1
| ::||::|   0x08008706      7070           strb r0, [r6, 1]            ; 0x2000187b clear the flag
| ::||::|   0x08008708      99f81d00       ldrb.w r0, [sb, 0x1d]       ; 0x2000078a
| ::||::|   0x0800870c      fcf750f9       bl _BLE_CMDSend
| ========< 0x08008710      2ce0           b 0x800876c
| ::||::|      ; JMP XREF from 0x08008702 (_KBD_KeyStrokeHandle)
| ::||::`-> 0x08008712      dff8c007       ldr.w r0, [0x08008ed4]      ; [0x8008ed4:4]=0x2000198c
| ::||::    0x08008716      0068           ldr r0, [r0]                ; bDeviceState
| ::||::    0x08008718      0528           cmp r0, 5                   ; 5
| ::||::,=< 0x0800871a      21d1           bne 0x8008760               ; jump if state is not CONFIGURED
| ::||::|   0x0800871c      99f81200       ldrb.w r0, [sb, 0x12]       ; 0x2000077f
| ::||::|   0x08008720      0028           cmp r0, 0
| ========< 0x08008722      1dd0           beq 0x8008760
| ::||::|   0x08008724      99f81500       ldrb.w r0, [sb, 0x15]       ; 0x20000782
| ::||::|   0x08008728      0228           cmp r0, 2                   ; 2
| ========< 0x0800872a      19d1           bne 0x8008760
| ::||::|   0x0800872c      2846           mov r0, r5
| ::||::|   0x0800872e      fcf7f2fa       bl _USB_SendKeyStroke
| ::||::|   0x08008732      08f14400       add.w r0, r8, 0x44
| ::||::|   0x08008736      0121           movs r1, 1                  ; 1
| ::||::|   0x08008738      0175           strb r1, [r0, 0x14]         ; 0x200007c0
| ::||::|   0x0800873a      89f81b10       strb.w r1, [sb, 0x1b]       ; 0x20000788
| ::||::|   0x0800873e      0021           movs r1, 0
| ::||::|   0x08008740      89f81110       strb.w r1, [sb, 0x11]       ; 0x2000077e
| ::||::|   0x08008744      98f84410       ldrb.w r1, [r8, 0x44]       ; 0x200007ac
| ::||::|   0x08008748      0129           cmp r1, 1                   ; 1
| ========< 0x0800874a      03d0           beq 0x8008754
| ::||::|   0x0800874c      99f81810       ldrb.w r1, [sb, 0x18]       ; 0x20000785
| ::||::|   0x08008750      0229           cmp r1, 2                   ; 2
| ========< 0x08008752      01d1           bne 0x8008758
| ::||::|      ; JMP XREF from 0x0800874a (_KBD_KeyStrokeHandle)
| --------> 0x08008754      0021           movs r1, 0
| ::||::|   0x08008756      0175           strb r1, [r0, 0x14]
| ::||::|      ; JMP XREF from 0x08008752 (_KBD_KeyStrokeHandle)
| --------> 0x08008758      2846           mov r0, r5
| ::||::|   0x0800875a      fcf705fb       bl _BLE_KeyPress_Something
| ========< 0x0800875e      05e0           b 0x800876c
| ::||::|      ; JMP XREF from 0x0800871a (_KBD_KeyStrokeHandle)
| ::||::|      ; JMP XREF from 0x08008722 (_KBD_KeyStrokeHandle)
| ::||::|      ; JMP XREF from 0x0800872a (_KBD_KeyStrokeHandle)
| ------`-> 0x08008760      0120           movs r0, 1                  ; 1
| ::||::    0x08008762      89f81b00       strb.w r0, [sb, 0x1b]       ; 0x20000788
| ::||::    0x08008766      2846           mov r0, r5
| ::||::    0x08008768      fcf7fefa       bl _BLE_KeyPress_Something
| ::||::       ; JMP XREF from 0x08008710 (_KBD_KeyStrokeHandle)
| ::||::       ; JMP XREF from 0x0800875e (_KBD_KeyStrokeHandle)
| --------> 0x0800876c      387a           ldrb r0, [r7, 8]            ; 0x20001894
| ::||::    0x0800876e      b178           ldrb r1, [r6, 2]            ; 0x2000187c
| ::||::    0x08008770      81f00101       eor r1, r1, 1
| ::||::    0x08008774      0842           tst r0, r1
| ::||::,=< 0x08008776      03d0           beq 0x8008780
| ::||::|   0x08008778      0120           movs r0, 1                  ; 1
| ::||::|   0x0800877a      b070           strb r0, [r6, 2]
| ::||::|   0x0800877c      88f80500       strb.w r0, [r8, 5]          ; 0x2000076d
| ::||::|      ; JMP XREF from 0x08008776 (_KBD_KeyStrokeHandle)
| ::||::`-> 0x08008780      0020           movs r0, 0
| ::||::    0x08008782      c5f8e400       str.w r0, [r5, 0xe4]        ; 0x2000188c
| ::||::    0x08008786      387b           ldrb r0, [r7, 0xc]          ; 0x20001898
| ::||::    0x08008788      0028           cmp r0, 0
| ::||::,=< 0x0800878a      02d1           bne 0x8008792
| ::||::|   0x0800878c      0120           movs r0, 1                  ; 1
| ::||::|   0x0800878e      f872           strb r0, [r7, 0xb]          ; 0x20001897
| ========< 0x08008790      9ce7           b 0x80086cc
| ::||::|      ; JMP XREF from 0x0800878a (_KBD_KeyStrokeHandle)
| ::||::`-> 0x08008792      0020           movs r0, 0
| ::||::    0x08008794      3873           strb r0, [r7, 0xc]
| ========< 0x08008796      99e7           b 0x80086cc
| ::||::       ; JMP XREF from 0x080086ca (_KBD_KeyStrokeHandle)
| ::`-----> 0x08008798      0020           movs r0, 0
| :: |::    0x0800879a      2080           strh r0, [r4]
| :: |::    0x0800879c      0320           movs r0, 3                  ; 3
| :: |::       ; JMP XREF from 0x080086ec (_KBD_KeyStrokeHandle)
\ :: `----> 0x0800879e      bde8f283       pop.w {r1, r4, r5, r6, r7, r8, sb, pc}
\ ::  ::    ;-- KBD_IdleFlagsUpdate:
/ (fcn) _KBD_IdleFlagsUpdate 120
|       Caller: main_loop
|   _KBD_IdleFlagsUpdate ();
| ::  ::       ; CALL XREF from 0x080085d6 (main_loop)
| ::  ::    0x080087a2      38b5           push {r3, r4, r5, lr}
| ::  ::    0x080087a4      0446           mov r4, r0
| ::  ::    0x080087a6      2088           ldrh r0, [r4]
| ::  ::    0x080087a8      0028           cmp r0, 0
| ::  ::,=< 0x080087aa      03d0           beq 0x80087b4
| ::  ::|   0x080087ac      b0f5977f       cmp.w r0, 0x12e             ; 302
| :: ,====< 0x080087b0      03d0           beq 0x80087ba
| ::,=====< 0x080087b2      2ee0           b 0x8008812
| ::||::|      ; JMP XREF from 0x080087aa (_KBD_IdleFlagsUpdate)
| ::||::|      ; JMP XREF from 0x080087f8 (_KBD_IdleFlagsUpdate)
| ::||::|      ; JMP XREF from 0x08008810 (_KBD_IdleFlagsUpdate)
| ------`-> 0x080087b4      4ff49770       mov.w r0, 0x12e             ; 302
| ::||::    0x080087b8      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x080087b0 (_KBD_IdleFlagsUpdate)
| ::|`----> 0x080087ba      dff81457       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::| ::    0x080087be      95f8ef00       ldrb.w r0, [r5, 0xef]       ; 0x20001897
| ::| ::    0x080087c2      0028           cmp r0, 0
| ::| ::,=< 0x080087c4      01d1           bne 0x80087ca
| ::| ::|   0x080087c6      0020           movs r0, 0
| ::| ::|   0x080087c8      32bd           pop {r1, r4, r5, pc}
| ::| ::|      ; JMP XREF from 0x080087c4 (_KBD_IdleFlagsUpdate)
| ::| ::`-> 0x080087ca      0020           movs r0, 0
| ::| ::    0x080087cc      85f8ef00       strb.w r0, [r5, 0xef]
| ::| ::,=< 0x080087d0      00e0           b 0x80087d4
| ::| ::|      ; JMP XREF from 0x080087e6 (_KBD_IdleFlagsUpdate)
| ::|.----> 0x080087d2      401c           adds r0, r0, 1
| ::|:::|      ; JMP XREF from 0x080087d0 (_KBD_IdleFlagsUpdate)
| ::|:::`-> 0x080087d4      c0b2           uxtb r0, r0
| ::|:::    0x080087d6      0146           mov r1, r0
| ::|:::    0x080087d8      0529           cmp r1, 5                   ; 5 ; loop over rows
| ::|:::,=< 0x080087da      09da           bge 0x80087f0
| ::|:::|   0x080087dc      05eb4101       add.w r1, r5, r1, lsl 1
| ::|:::|   0x080087e0      b1f88c10       ldrh.w r1, [r1, 0x8c]       ; get ROWX_BS
| ::|:::|   0x080087e4      0029           cmp r1, 0
| ::|`====< 0x080087e6      f4d0           beq 0x80087d2               ; jump if no key in row is pressed
| ::| ::|   0x080087e8      0120           movs r0, 1                  ; 1
| ::| ::|   0x080087ea      dff8e016       ldr.w r1, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::|   0x080087ee      c883           strh r0, [r1, 0x1e]         ; 0x20000786 set flag if keys are pressed
| ::| ::|      ; JMP XREF from 0x080087da (_KBD_IdleFlagsUpdate)
| ::| ::`-> 0x080087f0      dff8d806       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::    0x080087f4      c08b           ldrh r0, [r0, 0x1e]
| ::| ::    0x080087f6      0028           cmp r0, 0
| ========< 0x080087f8      dcd1           bne 0x80087b4
| ::| ::    0x080087fa      fbf75cfe       bl _MatrixColumns_Set
| ::| ::    0x080087fe      0822           movs r2, 8                  ; 8
| ::| ::    0x08008800      0021           movs r1, 0
| ::| ::    0x08008802      05f1c800       add.w r0, r5, 0xc8          ; 0x20001870
| ::| ::    0x08008806      fef7b3f8       bl memset                   ; void *memset(void *s, int c, size_t n)
| ::| ::    0x0800880a      0120           movs r0, 1                  ; 1
| ::| ::    0x0800880c      85f8f000       strb.w r0, [r5, 0xf0]       ; 0x20001898
| ========< 0x08008810      d0e7           b 0x80087b4
| ::| ::       ; JMP XREF from 0x080087b2 (_KBD_IdleFlagsUpdate)
| ::`-----> 0x08008812      0020           movs r0, 0
| ::  ::    0x08008814      2080           strh r0, [r4]
| ::  ::    0x08008816      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008818      32bd           pop {r1, r4, r5, pc}
\ ::  ::    ;-- LED_StateUpdate:
/ (fcn) _LED_StateUpdate 562
|       Caller: main_loop
|   _LED_StateUpdate ();
| ::  ::       ; CALL XREF from 0x080085de (main_loop)
| ::  ::    0x0800881a      7cb5           push {r2, r3, r4, r5, r6, lr}
| ::  ::    0x0800881c      0446           mov r4, r0
| ::  ::    0x0800881e      0120           movs r0, 1                  ; 1
| ::  ::    0x08008820      2188           ldrh r1, [r4]
| ::  ::    0x08008822      0029           cmp r1, 0
| ::  ::,=< 0x08008824      11d0           beq 0x800884a
| ::  ::|   0x08008826      40f25712       movw r2, 0x157              ; 343
| ::  ::|   0x0800882a      891a           subs r1, r1, r2
| :: ,====< 0x0800882c      10d0           beq 0x8008850
| :: |::|   0x0800882e      0e39           subs r1, 0xe
| ::,=====< 0x08008830      30d0           beq 0x8008894
| ::||::|   0x08008832      1939           subs r1, 0x19
| ========< 0x08008834      4dd0           beq 0x80088d2
| ::||::|   0x08008836      2c39           subs r1, 0x2c
| ========< 0x08008838      00f0a580       beq.w 0x8008986
| ::||::|   0x0800883c      0939           subs r1, 9
| ========< 0x0800883e      00f0bd80       beq.w 0x80089bc
| ::||::|   0x08008842      1b39           subs r1, 0x1b
| ========< 0x08008844      00f0dd80       beq.w 0x8008a02
| ========< 0x08008848      fce0           b 0x8008a44
| ::||::|      ; XREFS: JMP 0x08008824  JMP 0x080088a6  JMP 0x08008906  JMP 0x0800890c  JMP 0x08008930  JMP 0x08008950  JMP 0x08008958  JMP 0x080089be  JMP 0x080089d2  
| ::||::|      ; XREFS: JMP 0x08008a1e  JMP 0x08008a26  JMP 0x08008a42  
| ------`-> 0x0800884a      40f25710       movw r0, 0x157              ; 343
| ::||::    0x0800884e      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x0800882c (_LED_StateUpdate)
| ::|`----> 0x08008850      dff87c56       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::| ::    0x08008854      95f8d400       ldrb.w r0, [r5, 0xd4]       ; 0x2000187c
| ::| ::    0x08008858      0028           cmp r0, 0
| ::| ::,=< 0x0800885a      00f0d880       beq.w 0x8008a0e
| ::| ::|   0x0800885e      0020           movs r0, 0
| ::| ::|   0x08008860      85f8d400       strb.w r0, [r5, 0xd4]
| ::| ::|   0x08008864      dff86466       ldr.w r6, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::|   0x08008868      7078           ldrb r0, [r6, 1]
| ::| ::|   0x0800886a      b178           ldrb r1, [r6, 2]
| ::| ::|   0x0800886c      0843           orrs r0, r1
| ::| ::|   0x0800886e      f178           ldrb r1, [r6, 3]
| ::| ::|   0x08008870      0843           orrs r0, r1
| ::|,====< 0x08008872      19d0           beq 0x80088a8
| ::||::|   0x08008874      f07e           ldrb r0, [r6, 0x1b]         ; 0x20000783
| ::||::|   0x08008876      0028           cmp r0, 0
| ========< 0x08008878      13d0           beq 0x80088a2
| ::||::|   0x0800887a      0020           movs r0, 0
| ::||::|   0x0800887c      f076           strb r0, [r6, 0x1b]
| ::||::|   0x0800887e      0120           movs r0, 1                  ; 1
| ::||::|   0x08008880      fcf7defa       bl _LED_WakeUpCmd
| ::||::|   0x08008884      c821           movs r1, 0xc8               ; 200
| ::||::|   0x08008886      05f1f400       add.w r0, r5, 0xf4          ; 0x2000189c
| ::||::|   0x0800888a      00f048fb       bl _Timer_Init
| ::||::|   0x0800888e      40f26510       movw r0, 0x165              ; 357
| ::||::|   0x08008892      2080           strh r0, [r4]
| ::||::|      ; JMP XREF from 0x08008830 (_LED_StateUpdate)
| ::`-----> 0x08008894      dff84006       ldr.w r0, [0x08008ed8]      ; [0x8008ed8:4]=0x2000189c
| :: |::|   0x08008898      00f028fb       bl _Timer_Compare
| :: |::|   0x0800889c      0028           cmp r0, 0
| ::,=====< 0x0800889e      00f0b680       beq.w 0x8008a0e
| ::||::|      ; JMP XREF from 0x08008878 (_LED_StateUpdate)
| --------> 0x080088a2      fcf7c1fc       bl _LED_CMDSend
| ========< 0x080088a6      d0e7           b 0x800884a
| ::||::|      ; JMP XREF from 0x08008872 (_LED_StateUpdate)
| ::|`----> 0x080088a8      7079           ldrb r0, [r6, 5]
| ::| ::|   0x080088aa      0028           cmp r0, 0
| ::|,====< 0x080088ac      55d0           beq 0x800895a
| ::||::|   0x080088ae      0020           movs r0, 0
| ::||::|   0x080088b0      7071           strb r0, [r6, 5]
| ::||::|   0x080088b2      f07e           ldrb r0, [r6, 0x1b]
| ::||::|   0x080088b4      0028           cmp r0, 0
| ========< 0x080088b6      2ad0           beq 0x800890e
| ::||::|   0x080088b8      0120           movs r0, 1                  ; 1
| ::||::|   0x080088ba      fcf7c1fa       bl _LED_WakeUpCmd
| ::||::|   0x080088be      0020           movs r0, 0
| ::||::|   0x080088c0      f076           strb r0, [r6, 0x1b]
| ::||::|   0x080088c2      c821           movs r1, 0xc8               ; 200
| ::||::|   0x080088c4      05f1f400       add.w r0, r5, 0xf4
| ::||::|   0x080088c8      00f029fb       bl _Timer_Init
| ::||::|   0x080088cc      4ff4bf70       mov.w r0, 0x17e             ; 382
| ::||::|   0x080088d0      2080           strh r0, [r4]
| ::||::|      ; JMP XREF from 0x08008834 (_LED_StateUpdate)
| --------> 0x080088d2      dff8fc55       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::||::|   0x080088d6      05f1f400       add.w r0, r5, 0xf4
| ::||::|   0x080088da      00f007fb       bl _Timer_Compare
| ::||::|   0x080088de      0028           cmp r0, 0
| ========< 0x080088e0      00f09580       beq.w 0x8008a0e
| ::||::|   0x080088e4      0320           movs r0, 3                  ; 3
| ::||::|   0x080088e6      0190           str r0, [sp, 4]
| ::||::|   0x080088e8      0020           movs r0, 0
| ::||::|   0x080088ea      0090           str r0, [sp]
| ::||::|   0x080088ec      0346           mov r3, r0
| ::||::|   0x080088ee      0122           movs r2, 1                  ; 1
| ::||::|   0x080088f0      0921           movs r1, 9                  ; 9
| ::||::|   0x080088f2      fcf755ff       bl _MSG_CMDPrepareOrSend
| ::||::|   0x080088f6      0120           movs r0, 1                  ; 1
| ::||::|   0x080088f8      dff8d015       ldr.w r1, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::|   0x080088fc      8871           strb r0, [r1, 6]
| ::||::|   0x080088fe      05f1d400       add.w r0, r5, 0xd4
| ::||::|   0x08008902      017e           ldrb r1, [r0, 0x18]
| ::||::|   0x08008904      0029           cmp r1, 0
| ========< 0x08008906      a0d0           beq 0x800884a
| ::||::|   0x08008908      0021           movs r1, 0
| ::||::|   0x0800890a      0176           strb r1, [r0, 0x18]
| ========< 0x0800890c      9de7           b 0x800884a
| ::||::|      ; JMP XREF from 0x080088b6 (_LED_StateUpdate)
| --------> 0x0800890e      b079           ldrb r0, [r6, 6]
| ::||::|   0x08008910      0128           cmp r0, 1                   ; 1
| ========< 0x08008912      0ed1           bne 0x8008932
| ::||::|   0x08008914      0020           movs r0, 0
| ::||::|   0x08008916      3070           strb r0, [r6]
| ::||::|   0x08008918      0320           movs r0, 3                  ; 3
| ::||::|   0x0800891a      0190           str r0, [sp, 4]
| ::||::|   0x0800891c      0120           movs r0, 1                  ; 1
| ::||::|   0x0800891e      0090           str r0, [sp]
| ::||::|   0x08008920      3346           mov r3, r6
| ::||::|   0x08008922      0246           mov r2, r0
| ::||::|   0x08008924      0921           movs r1, 9                  ; 9
| ::||::|   0x08008926      0020           movs r0, 0
| ::||::|   0x08008928      fcf73aff       bl _MSG_CMDPrepareOrSend
| ::||::|   0x0800892c      0020           movs r0, 0
| ::||::|   0x0800892e      b071           strb r0, [r6, 6]
| ========< 0x08008930      8be7           b 0x800884a
| ::||::|      ; JMP XREF from 0x08008912 (_LED_StateUpdate)
| --------> 0x08008932      0320           movs r0, 3                  ; 3
| ::||::|   0x08008934      0190           str r0, [sp, 4]
| ::||::|   0x08008936      0020           movs r0, 0
| ::||::|   0x08008938      0090           str r0, [sp]
| ::||::|   0x0800893a      0346           mov r3, r0
| ::||::|   0x0800893c      0122           movs r2, 1                  ; 1
| ::||::|   0x0800893e      0921           movs r1, 9                  ; 9
| ::||::|   0x08008940      fcf72eff       bl _MSG_CMDPrepareOrSend
| ::||::|   0x08008944      0120           movs r0, 1                  ; 1
| ::||::|   0x08008946      b071           strb r0, [r6, 6]
| ::||::|   0x08008948      05f1d400       add.w r0, r5, 0xd4
| ::||::|   0x0800894c      017e           ldrb r1, [r0, 0x18]
| ::||::|   0x0800894e      0029           cmp r1, 0
| ========< 0x08008950      3ff47baf       beq.w 0x800884a
| ::||::|   0x08008954      0021           movs r1, 0
| ::||::|   0x08008956      0176           strb r1, [r0, 0x18]
| ========< 0x08008958      77e7           b 0x800884a
| ::||::|      ; JMP XREF from 0x080088ac (_LED_StateUpdate)
| ::|`----> 0x0800895a      707d           ldrb r0, [r6, 0x15]
| ::| ::|   0x0800895c      0028           cmp r0, 0
| ::|,====< 0x0800895e      39d0           beq 0x80089d4
| ::||::|   0x08008960      f17e           ldrb r1, [r6, 0x1b]
| ::||::|   0x08008962      05f1d400       add.w r0, r5, 0xd4
| ::||::|   0x08008966      027e           ldrb r2, [r0, 0x18]
| ::||::|   0x08008968      1142           tst r1, r2
| ========< 0x0800896a      2cd0           beq 0x80089c6
| ::||::|   0x0800896c      0021           movs r1, 0
| ::||::|   0x0800896e      0176           strb r1, [r0, 0x18]
| ::||::|   0x08008970      0120           movs r0, 1                  ; 1
| ::||::|   0x08008972      fcf765fa       bl _LED_WakeUpCmd
| ::||::|   0x08008976      c821           movs r1, 0xc8               ; 200
| ::||::|   0x08008978      05f1f400       add.w r0, r5, 0xf4
| ::||::|   0x0800897c      00f0cffa       bl _Timer_Init
| ::||::|   0x08008980      4ff4d570       mov.w r0, 0x1aa             ; 426
| ::||::|   0x08008984      2080           strh r0, [r4]
| ::||::|      ; JMP XREF from 0x08008838 (_LED_StateUpdate)
| --------> 0x08008986      dff84855       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::||::|   0x0800898a      05f1f400       add.w r0, r5, 0xf4
| ::||::|   0x0800898e      00f0adfa       bl _Timer_Compare
| ::||::|   0x08008992      0028           cmp r0, 0
| ========< 0x08008994      3bd0           beq 0x8008a0e
| ::||::|   0x08008996      0320           movs r0, 3                  ; 3
| ::||::|   0x08008998      0190           str r0, [sp, 4]
| ::||::|   0x0800899a      0020           movs r0, 0
| ::||::|   0x0800899c      0090           str r0, [sp]
| ::||::|   0x0800899e      0346           mov r3, r0
| ::||::|   0x080089a0      0122           movs r2, 1                  ; 1
| ::||::|   0x080089a2      0921           movs r1, 9                  ; 9
| ::||::|   0x080089a4      fcf7fcfe       bl _MSG_CMDPrepareOrSend
| ::||::|   0x080089a8      0120           movs r0, 1                  ; 1
| ::||::|   0x080089aa      dff82015       ldr.w r1, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::|   0x080089ae      8871           strb r0, [r1, 6]
| ::||::|   0x080089b0      85f8d400       strb.w r0, [r5, 0xd4]
| ::||::|   0x080089b4      0020           movs r0, 0
| ::||::|   0x080089b6      40f2b311       movw r1, 0x1b3              ; 435
| ::||::|   0x080089ba      2180           strh r1, [r4]
| ::||::|      ; JMP XREF from 0x0800883e (_LED_StateUpdate)
| --------> 0x080089bc      0028           cmp r0, 0
| ========< 0x080089be      7ff444af       bne.w 0x800884a
| ::||::|   0x080089c2      0120           movs r0, 1                  ; 1
| ::||::|   0x080089c4      76bd           pop {r1, r2, r4, r5, r6, pc}
| ::||::|      ; JMP XREF from 0x0800896a (_LED_StateUpdate)
| --------> 0x080089c6      0029           cmp r1, 0
| ========< 0x080089c8      01d1           bne 0x80089ce
| ::||::|   0x080089ca      fcf74dfd       bl _LED_KeyPosBSSend
| ::||::|      ; JMP XREF from 0x080089c8 (_LED_StateUpdate)
| --------> 0x080089ce      0020           movs r0, 0
| ::||::|   0x080089d0      7075           strb r0, [r6, 0x15]
| ========< 0x080089d2      3ae7           b 0x800884a
| ::||::|      ; JMP XREF from 0x0800895e (_LED_StateUpdate)
| ::|`----> 0x080089d4      96f86200       ldrb.w r0, [r6, 0x62]
| ::| ::|   0x080089d8      0028           cmp r0, 0
| ::|,====< 0x080089da      21d0           beq 0x8008a20
| ::||::|   0x080089dc      0020           movs r0, 0
| ::||::|   0x080089de      86f86200       strb.w r0, [r6, 0x62]
| ::||::|   0x080089e2      96f86100       ldrb.w r0, [r6, 0x61]
| ::||::|   0x080089e6      f17e           ldrb r1, [r6, 0x1b]
| ::||::|   0x080089e8      0842           tst r0, r1
| ========< 0x080089ea      12d0           beq 0x8008a12
| ::||::|   0x080089ec      0120           movs r0, 1                  ; 1
| ::||::|   0x080089ee      fcf727fa       bl _LED_WakeUpCmd
| ::||::|   0x080089f2      c821           movs r1, 0xc8               ; 200
| ::||::|   0x080089f4      05f1f400       add.w r0, r5, 0xf4
| ::||::|   0x080089f8      00f091fa       bl _Timer_Init
| ::||::|   0x080089fc      4ff4e770       mov.w r0, 0x1ce             ; 462
| ::||::|   0x08008a00      2080           strh r0, [r4]
| ::||::|      ; JMP XREF from 0x08008844 (_LED_StateUpdate)
| --------> 0x08008a02      dff8d404       ldr.w r0, [0x08008ed8]      ; [0x8008ed8:4]=0x2000189c
| ::||::|   0x08008a06      00f071fa       bl _Timer_Compare
| ::||::|   0x08008a0a      0028           cmp r0, 0
| ========< 0x08008a0c      01d1           bne 0x8008a12
| ::||::|      ; JMP XREF from 0x0800885a (_LED_StateUpdate)
| ::||::|      ; JMP XREF from 0x0800889e (_LED_StateUpdate)
| ::||::|      ; JMP XREF from 0x080088e0 (_LED_StateUpdate)
| ::||::|      ; JMP XREF from 0x08008994 (_LED_StateUpdate)
| --`---`-> 0x08008a0e      0020           movs r0, 0
| :: |::    0x08008a10      76bd           pop {r1, r2, r4, r5, r6, pc}
| :: |::       ; JMP XREF from 0x080089ea (_LED_StateUpdate)
| :: |::       ; JMP XREF from 0x08008a0c (_LED_StateUpdate)
| --------> 0x08008a12      dff8b804       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| :: |::    0x08008a16      90f86100       ldrb.w r0, [r0, 0x61]       ; 0x200007c9
| :: |::    0x08008a1a      fcf7e5fb       bl _LED_C_CMDSend
| ========< 0x08008a1e      14e7           b 0x800884a
| :: |::       ; JMP XREF from 0x080089da (_LED_StateUpdate)
| :: `----> 0x08008a20      96f86700       ldrb.w r0, [r6, 0x67]
| ::  ::    0x08008a24      0028           cmp r0, 0
| ========< 0x08008a26      3ff410af       beq.w 0x800884a
| ::  ::    0x08008a2a      0020           movs r0, 0
| ::  ::    0x08008a2c      86f86700       strb.w r0, [r6, 0x67]
| ::  ::    0x08008a30      0320           movs r0, 3                  ; 3
| ::  ::    0x08008a32      0190           str r0, [sp, 4]
| ::  ::    0x08008a34      0020           movs r0, 0
| ::  ::    0x08008a36      0090           str r0, [sp]
| ::  ::    0x08008a38      0346           mov r3, r0
| ::  ::    0x08008a3a      0a22           movs r2, 0xa                ; 10
| ::  ::    0x08008a3c      0221           movs r1, 2                  ; 2
| ::  ::    0x08008a3e      fcf7affe       bl _MSG_CMDPrepareOrSend
| ========< 0x08008a42      02e7           b 0x800884a
| ::  ::       ; JMP XREF from 0x08008848 (_LED_StateUpdate)
| --------> 0x08008a44      0020           movs r0, 0
| ::  ::    0x08008a46      2080           strh r0, [r4]
| ::  ::    0x08008a48      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008a4a      76bd           pop {r1, r2, r4, r5, r6, pc}
/ (fcn) fcn.08008a4c 146
|       Caller: main_loop
|   fcn.08008a4c ();
| ::  ::    0x08008a4c      38b5           push {r3, r4, r5, lr}
| ::  ::    0x08008a4e      0446           mov r4, r0
| ::  ::    0x08008a50      2088           ldrh r0, [r4]
| ::  ::    0x08008a52      0028           cmp r0, 0
| ::  ::,=< 0x08008a54      06d0           beq 0x8008a64
| ::  ::|   0x08008a56      40f20921       movw r1, 0x209              ; 521
| ::  ::|   0x08008a5a      401a           subs r0, r0, r1
| :: ,====< 0x08008a5c      05d0           beq 0x8008a6a
| :: |::|   0x08008a5e      401f           subs r0, r0, 5
| ::,=====< 0x08008a60      1bd0           beq 0x8008a9a
| ========< 0x08008a62      38e0           b 0x8008ad6
| ::||::|      ; XREFS: JMP 0x08008a54  JMP 0x08008ab2  JMP 0x08008aba  JMP 0x08008ac0  JMP 0x08008ac4  JMP 0x08008ad4  
| ------`-> 0x08008a64      40f20920       movw r0, 0x209              ; 521
| ::||::    0x08008a68      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008a5c (fcn.08008a4c)
| ::|`----> 0x08008a6a      dff86054       ldr.w r5, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::    0x08008a6e      2878           ldrb r0, [r5]
| ::| ::    0x08008a70      0028           cmp r0, 0
| ::| ::,=< 0x08008a72      18d1           bne 0x8008aa6
| ::| ::|   0x08008a74      95f86100       ldrb.w r0, [r5, 0x61]       ; 0x200007c9
| ::| ::|   0x08008a78      e97e           ldrb r1, [r5, 0x1b]         ; 0x20000783
| ::| ::|   0x08008a7a      0843           orrs r0, r1
| ::|,====< 0x08008a7c      13d1           bne 0x8008aa6
| ::||::|   0x08008a7e      687f           ldrb r0, [r5, 0x1d]         ; 0x20000785
| ::||::|   0x08008a80      0128           cmp r0, 1                   ; 1
| ========< 0x08008a82      10d0           beq 0x8008aa6
| ::||::|   0x08008a84      0228           cmp r0, 2                   ; 2
| ========< 0x08008a86      0ed0           beq 0x8008aa6
| ::||::|   0x08008a88      41f28831       movw r1, 0x1388
| ::||::|   0x08008a8c      dff84c04       ldr.w r0, [0x08008edc]      ; [0x8008edc:4]=0x20001968
| ::||::|   0x08008a90      00f045fa       bl _Timer_Init
| ::||::|   0x08008a94      40f20e20       movw r0, 0x20e              ; 526
| ::||::|   0x08008a98      2080           strh r0, [r4]
| ::||::|      ; JMP XREF from 0x08008a60 (fcn.08008a4c)
| ::`-----> 0x08008a9a      dff84004       ldr.w r0, [0x08008edc]      ; [0x8008edc:4]=0x20001968
| :: |::|   0x08008a9e      00f025fa       bl _Timer_Compare
| :: |::|   0x08008aa2      0028           cmp r0, 0
| ::,=====< 0x08008aa4      01d1           bne 0x8008aaa
| ::||::|      ; JMP XREF from 0x08008a72 (fcn.08008a4c)
| ::||::|      ; JMP XREF from 0x08008a7c (fcn.08008a4c)
| ::||::|      ; JMP XREF from 0x08008a82 (fcn.08008a4c)
| ::||::|      ; JMP XREF from 0x08008a86 (fcn.08008a4c)
| ---`--`-> 0x08008aa6      0020           movs r0, 0
| ::| ::    0x08008aa8      32bd           pop {r1, r4, r5, pc}
| ::| ::       ; JMP XREF from 0x08008aa4 (fcn.08008a4c)
| ::`-----> 0x08008aaa      dff82054       ldr.w r5, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::  ::    0x08008aae      2878           ldrb r0, [r5]
| ::  ::    0x08008ab0      0028           cmp r0, 0
| ========< 0x08008ab2      d7d1           bne 0x8008a64
| ::  ::    0x08008ab4      95f86100       ldrb.w r0, [r5, 0x61]
| ::  ::    0x08008ab8      0028           cmp r0, 0
| ========< 0x08008aba      d3d1           bne 0x8008a64
| ::  ::    0x08008abc      687f           ldrb r0, [r5, 0x1d]
| ::  ::    0x08008abe      0128           cmp r0, 1                   ; 1
| ========< 0x08008ac0      d0d0           beq 0x8008a64
| ::  ::    0x08008ac2      0228           cmp r0, 2                   ; 2
| ========< 0x08008ac4      ced0           beq 0x8008a64
| ::  ::    0x08008ac6      0020           movs r0, 0
| ::  ::    0x08008ac8      fcf7baf9       bl _LED_WakeUpCmd           ; put LED MCU to sleep
| ::  ::    0x08008acc      0120           movs r0, 1                  ; 1
| ::  ::    0x08008ace      e876           strb r0, [r5, 0x1b]
| ::  ::    0x08008ad0      0020           movs r0, 0
| ::  ::    0x08008ad2      2870           strb r0, [r5]
| ========< 0x08008ad4      c6e7           b 0x8008a64
| ::  ::       ; JMP XREF from 0x08008a62 (fcn.08008a4c)
| --------> 0x08008ad6      0020           movs r0, 0
| ::  ::    0x08008ad8      2080           strh r0, [r4]
| ::  ::    0x08008ada      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008adc      32bd           pop {r1, r4, r5, pc}
/ (fcn) fcn.08008ade 322
|       Caller: main_loop
|   fcn.08008ade ();
| ::  ::       ; CALL XREF from 0x0800860e (main_loop)
| ::  ::    0x08008ade      f0b5           push {r4, r5, r6, r7, lr}
| ::  ::    0x08008ae0      8fb0           sub sp, 0x3c                ; '<'
| ::  ::    0x08008ae2      0446           mov r4, r0
| ::  ::    0x08008ae4      2088           ldrh r0, [r4]
| ::  ::    0x08008ae6      0028           cmp r0, 0
| ::  ::,=< 0x08008ae8      03d0           beq 0x8008af2
| ::  ::|   0x08008aea      b0f50c7f       cmp.w r0, 0x230             ; 560
| :: ,====< 0x08008aee      03d0           beq 0x8008af8
| ::,=====< 0x08008af0      91e0           b 0x8008c16
| ::||::|      ; JMP XREF from 0x08008ae8 (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008bee (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008bfa (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008c06 (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008c14 (fcn.08008ade)
| ------`-> 0x08008af2      4ff40c70       mov.w r0, 0x230             ; 560
| ::||::    0x08008af6      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008aee (fcn.08008ade)
| ::|`----> 0x08008af8      dff8d453       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::| ::    0x08008afc      05f1d406       add.w r6, r5, 0xd4
| ::| ::    0x08008b00      b07d           ldrb r0, [r6, 0x16]         ; 0x20001892
| ::| ::    0x08008b02      0028           cmp r0, 0
| ::| ::,=< 0x08008b04      01d1           bne 0x8008b0a
| ::| ::|   0x08008b06      0020           movs r0, 0
| ::|,====< 0x08008b08      88e0           b 0x8008c1c
| ::||::|      ; JMP XREF from 0x08008b04 (fcn.08008ade)
| ::||::`-> 0x08008b0a      0020           movs r0, 0
| ::||::    0x08008b0c      b075           strb r0, [r6, 0x16]
| ::||::    0x08008b0e      307d           ldrb r0, [r6, 0x14]         ; 0x20001890
| ::||::    0x08008b10      0028           cmp r0, 0
| ::||::,=< 0x08008b12      6ad0           beq 0x8008bea
| ::||::|   0x08008b14      0020           movs r0, 0
| ::||::|   0x08008b16      3075           strb r0, [r6, 0x14]
| ::||::|   0x08008b18      dff8b073       ldr.w r7, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::|   0x08008b1c      97f83000       ldrb.w r0, [r7, 0x30]       ; 0x20000798
| ::||::|   0x08008b20      97f86610       ldrb.w r1, [r7, 0x66]       ; 0x200007ce
| ::||::|   0x08008b24      0029           cmp r1, 0
| ========< 0x08008b26      02d1           bne 0x8008b2e
| ::||::|   0x08008b28      87f86600       strb.w r0, [r7, 0x66]
| ========< 0x08008b2c      15e0           b 0x8008b5a
| ::||::|      ; JMP XREF from 0x08008b26 (fcn.08008ade)
| --------> 0x08008b2e      0028           cmp r0, 0
| ========< 0x08008b30      05d0           beq 0x8008b3e
| ::||::|   0x08008b32      0328           cmp r0, 3                   ; 3
| ========< 0x08008b34      03da           bge 0x8008b3e
| ::||::|   0x08008b36      401c           adds r0, r0, 1
| ::||::|   0x08008b38      87f83000       strb.w r0, [r7, 0x30]
| ========< 0x08008b3c      0de0           b 0x8008b5a
| ::||::|      ; JMP XREF from 0x08008b30 (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008b34 (fcn.08008ade)
| --------> 0x08008b3e      c11e           subs r1, r0, 3
| ::||::|   0x08008b40      7d29           cmp r1, 0x7d                ; '}' ; 125
| ========< 0x08008b42      03d2           bhs 0x8008b4c
| ::||::|   0x08008b44      8020           movs r0, 0x80               ; 128
| ::||::|   0x08008b46      87f83000       strb.w r0, [r7, 0x30]
| ========< 0x08008b4a      06e0           b 0x8008b5a
| ::||::|      ; JMP XREF from 0x08008b42 (fcn.08008ade)
| --------> 0x08008b4c      8028           cmp r0, 0x80                ; 128
| ========< 0x08008b4e      01da           bge 0x8008b54
| ::||::|   0x08008b50      0028           cmp r0, 0
| ========< 0x08008b52      02d1           bne 0x8008b5a
| ::||::|      ; JMP XREF from 0x08008b4e (fcn.08008ade)
| --------> 0x08008b54      0120           movs r0, 1                  ; 1
| ::||::|   0x08008b56      87f83000       strb.w r0, [r7, 0x30]
| ::||::|      ; JMP XREF from 0x08008b2c (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008b3c (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008b4a (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008b52 (fcn.08008ade)
| --------> 0x08008b5a      2946           mov r1, r5
| ::||::|   0x08008b5c      97f83000       ldrb.w r0, [r7, 0x30]
| ::||::|   0x08008b60      fdf710ff       bl _KBD_LayoutInit
| ::||::|   0x08008b64      fdf7c0fd       bl _EEPROM_Write_Struct_1
| ::||::|   0x08008b68      0da8           add r0, sp, 0x34
| ::||::|   0x08008b6a      0021           movs r1, 0
| ::||::|   0x08008b6c      0160           str r1, [r0]
| ::||::|   0x08008b6e      97f83000       ldrb.w r0, [r7, 0x30]
| ::||::|   0x08008b72      0100           movs r1, r0
| ========< 0x08008b74      07d0           beq 0x8008b86
| ::||::|   0x08008b76      0429           cmp r1, 4                   ; 4
| ========< 0x08008b78      05da           bge 0x8008b86
| ::||::|   0x08008b7a      ff20           movs r0, 0xff               ; 255
| ::||::|   0x08008b7c      0daa           add r2, sp, 0x34
| ::||::|   0x08008b7e      8918           adds r1, r1, r2
| ::||::|   0x08008b80      01f8010c       strb r0, [r1, -0x1]
| ========< 0x08008b84      04e0           b 0x8008b90
| ::||::|      ; JMP XREF from 0x08008b74 (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008b78 (fcn.08008ade)
| --------> 0x08008b86      8029           cmp r1, 0x80                ; 128
| ========< 0x08008b88      02d1           bne 0x8008b90
| ::||::|   0x08008b8a      ff20           movs r0, 0xff               ; 255
| ::||::|   0x08008b8c      8df83700       strb.w r0, [sp, 0x37]
| ::||::|      ; JMP XREF from 0x08008b84 (fcn.08008ade)
| ::||::|      ; JMP XREF from 0x08008b88 (fcn.08008ade)
| --------> 0x08008b90      dff84c73       ldr.w r7, [0x08008ee0]      ; [0x8008ee0:4]=0x200008d4
| ::||::|   0x08008b94      0da8           add r0, sp, 0x34
| ::||::|   0x08008b96      0121           movs r1, 1                  ; 1
| ::||::|   0x08008b98      0c91           str r1, [sp, 0x30]
| ::||::|   0x08008b9a      0021           movs r1, 0
| ::||::|   0x08008b9c      0b91           str r1, [sp, 0x2c]
| ::||::|   0x08008b9e      c178           ldrb r1, [r0, 3]
| ::||::|   0x08008ba0      0a91           str r1, [sp, 0x28]
| ::||::|   0x08008ba2      0021           movs r1, 0
| ::||::|   0x08008ba4      0991           str r1, [sp, 0x24]
| ::||::|   0x08008ba6      0121           movs r1, 1                  ; 1
| ::||::|   0x08008ba8      0891           str r1, [sp, 0x20]
| ::||::|   0x08008baa      0021           movs r1, 0
| ::||::|   0x08008bac      0791           str r1, [sp, 0x1c]
| ::||::|   0x08008bae      9df83610       ldrb.w r1, [sp, 0x36]
| ::||::|   0x08008bb2      0691           str r1, [sp, 0x18]
| ::||::|   0x08008bb4      0021           movs r1, 0
| ::||::|   0x08008bb6      0591           str r1, [sp, 0x14]
| ::||::|   0x08008bb8      0121           movs r1, 1                  ; 1
| ::||::|   0x08008bba      0491           str r1, [sp, 0x10]
| ::||::|   0x08008bbc      0021           movs r1, 0
| ::||::|   0x08008bbe      0391           str r1, [sp, 0xc]
| ::||::|   0x08008bc0      4078           ldrb r0, [r0, 1]
| ::||::|   0x08008bc2      0290           str r0, [sp, 8]
| ::||::|   0x08008bc4      0846           mov r0, r1
| ::||::|   0x08008bc6      0190           str r0, [sp, 4]
| ::||::|   0x08008bc8      0120           movs r0, 1                  ; 1
| ::||::|   0x08008bca      0090           str r0, [sp]
| ::||::|   0x08008bcc      0b46           mov r3, r1
| ::||::|   0x08008bce      9df83420       ldrb.w r2, [sp, 0x34]
| ::||::|   0x08008bd2      3846           mov r0, r7
| ::||::|   0x08008bd4      fbf7f3fd       bl fcn.080047be
| ::||::|   0x08008bd8      0321           movs r1, 3                  ; 3
| ::||::|   0x08008bda      0191           str r1, [sp, 4]
| ::||::|   0x08008bdc      0090           str r0, [sp]
| ::||::|   0x08008bde      3b46           mov r3, r7
| ::||::|   0x08008be0      0b22           movs r2, 0xb                ; 11
| ::||::|   0x08008be2      0921           movs r1, 9                  ; 9
| ::||::|   0x08008be4      0020           movs r0, 0
| ::||::|   0x08008be6      fcf7dbfd       bl _MSG_CMDPrepareOrSend
| ::||::|      ; JMP XREF from 0x08008b12 (fcn.08008ade)
| ::||::`-> 0x08008bea      707e           ldrb r0, [r6, 0x19]
| ::||::    0x08008bec      0028           cmp r0, 0
| ========< 0x08008bee      3ff480af       beq.w 0x8008af2
| ::||::    0x08008bf2      3069           ldr r0, [r6, 0x10]
| ::||::    0x08008bf4      4ef66021       movw r1, 0xea60
| ::||::    0x08008bf8      8842           cmp r0, r1
| ========< 0x08008bfa      fff47aaf       blo.w 0x8008af2
| ::||::    0x08008bfe      dff8cc72       ldr.w r7, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::||::    0x08008c02      3878           ldrb r0, [r7]
| ::||::    0x08008c04      0028           cmp r0, 0
| ========< 0x08008c06      3ff474af       beq.w 0x8008af2
| ::||::    0x08008c0a      0120           movs r0, 1                  ; 1
| ::||::    0x08008c0c      85f8d400       strb.w r0, [r5, 0xd4]
| ::||::    0x08008c10      7871           strb r0, [r7, 5]
| ::||::    0x08008c12      3076           strb r0, [r6, 0x18]
| ========< 0x08008c14      6de7           b 0x8008af2
| ::||::       ; JMP XREF from 0x08008af0 (fcn.08008ade)
| ::`-----> 0x08008c16      0020           movs r0, 0
| :: |::    0x08008c18      2080           strh r0, [r4]
| :: |::    0x08008c1a      0320           movs r0, 3                  ; 3
| :: |::       ; JMP XREF from 0x08008b08 (fcn.08008ade)
| :: `----> 0x08008c1c      0fb0           add sp, 0x3c
\ ::  ::    0x08008c1e      f0bd           pop {r4, r5, r6, r7, pc}
\ ::  ::    ;-- BLE_StateUpdate:
/ (fcn) _BLE_StateUpdate 152
|       Caller: main_loop
|   _BLE_StateUpdate ();
| ::  ::       ; CALL XREF from 0x080085e6 (main_loop)
| ::  ::    0x08008c20      70b5           push {r4, r5, r6, lr}
| ::  ::    0x08008c22      0446           mov r4, r0
| ::  ::    0x08008c24      2088           ldrh r0, [r4]
| ::  ::    0x08008c26      0028           cmp r0, 0
| ::  ::,=< 0x08008c28      06d0           beq 0x8008c38
| ::  ::|   0x08008c2a      4ff43271       mov.w r1, 0x2c8             ; 712
| ::  ::|   0x08008c2e      401a           subs r0, r0, r1
| :: ,====< 0x08008c30      05d0           beq 0x8008c3e
| :: |::|   0x08008c32      2538           subs r0, 0x25
| ::,=====< 0x08008c34      18d0           beq 0x8008c68
| ========< 0x08008c36      3be0           b 0x8008cb0
| ::||::|      ; JMP XREF from 0x08008c28 (_BLE_StateUpdate)
| ::||::|      ; JMP XREF from 0x08008c98 (_BLE_StateUpdate)
| ::||::|      ; JMP XREF from 0x08008ca6 (_BLE_StateUpdate)
| ::||::|      ; JMP XREF from 0x08008cae (_BLE_StateUpdate)
| ------`-> 0x08008c38      4ff43270       mov.w r0, 0x2c8             ; 712
| ::||::    0x08008c3c      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008c30 (_BLE_StateUpdate)
| ::|`----> 0x08008c3e      fcf79cfd       bl _BLE_IsMSGPending
| ::| ::    0x08008c42      0028           cmp r0, 0
| ::| ::,=< 0x08008c44      1dd0           beq 0x8008c82               ; return if MSGSIZE is 0
| ::| ::|   0x08008c46      0020           movs r0, 0
| ::| ::|   0x08008c48      dff88012       ldr.w r1, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::|   0x08008c4c      81f85600       strb.w r0, [r1, 0x56]       ; 0x200007be
| ::| ::|   0x08008c50      fcf7e5f8       bl _BLE_P1_0Reset
| ::| ::|   0x08008c54      fcf7d2f8       bl _BLE_P1_0Set
| ::| ::|   0x08008c58      0521           movs r1, 5                  ; 5
| ::| ::|   0x08008c5a      dff88802       ldr.w r0, [0x08008ee4]      ; [0x8008ee4:4]=0x20001970
| ::| ::|   0x08008c5e      00f05ef9       bl _Timer_Init
| ::| ::|   0x08008c62      40f2ed20       movw r0, 0x2ed              ; 749
| ::| ::|   0x08008c66      2080           strh r0, [r4]
| ::| ::|      ; JMP XREF from 0x08008c34 (_BLE_StateUpdate)
| ::`-----> 0x08008c68      dff87852       ldr.w r5, [0x08008ee4]      ; [0x8008ee4:4]=0x20001970
| ::  ::|   0x08008c6c      dff85c62       ldr.w r6, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::  ::|   0x08008c70      96f85600       ldrb.w r0, [r6, 0x56]
| ::  ::|   0x08008c74      0028           cmp r0, 0
| :: ,====< 0x08008c76      06d1           bne 0x8008c86
| :: |::|   0x08008c78      2846           mov r0, r5
| :: |::|   0x08008c7a      00f037f9       bl _Timer_Compare
| :: |::|   0x08008c7e      0028           cmp r0, 0
| ::,=====< 0x08008c80      01d1           bne 0x8008c86
| ::||::|      ; JMP XREF from 0x08008c44 (_BLE_StateUpdate)
| ::||::`-> 0x08008c82      0020           movs r0, 0
| ::||::    0x08008c84      70bd           pop {r4, r5, r6, pc}
| ::||::       ; JMP XREF from 0x08008c76 (_BLE_StateUpdate)
| ::||::       ; JMP XREF from 0x08008c80 (_BLE_StateUpdate)
| ::``----> 0x08008c86      fcf7caf8       bl _BLE_P1_0Reset
| ::  ::    0x08008c8a      0020           movs r0, 0
| ::  ::    0x08008c8c      86f85600       strb.w r0, [r6, 0x56]
| ::  ::    0x08008c90      2846           mov r0, r5
| ::  ::    0x08008c92      00f02bf9       bl _Timer_Compare
| ::  ::    0x08008c96      0028           cmp r0, 0
| ========< 0x08008c98      ced1           bne 0x8008c38
| ::  ::    0x08008c9a      2846           mov r0, r5
| ::  ::    0x08008c9c      00f046f9       bl _Timer_Clear
| ::  ::    0x08008ca0      fcf76bfd       bl _BLE_IsMSGPending
| ::  ::    0x08008ca4      0028           cmp r0, 0
| ========< 0x08008ca6      c7d0           beq 0x8008c38
| ::  ::    0x08008ca8      c0b2           uxtb r0, r0
| ::  ::    0x08008caa      fcf754fd       bl _BLE_SendMSG
| ========< 0x08008cae      c3e7           b 0x8008c38
| ::  ::       ; JMP XREF from 0x08008c36 (_BLE_StateUpdate)
| --------> 0x08008cb0      0020           movs r0, 0
| ::  ::    0x08008cb2      2080           strh r0, [r4]
| ::  ::    0x08008cb4      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008cb6      70bd           pop {r4, r5, r6, pc}
\ ::  ::    ;-- KBD_MSGReceive:
/ (fcn) _KBD_MSGReceive 84
|       Caller: main_loop
|   _KBD_MSGReceive ();
| ::  ::       ; CALL XREF from 0x080085ee (main_loop)
| ::  ::    0x08008cb8      10b5           push {r4, lr}
| ::  ::    0x08008cba      0446           mov r4, r0
| ::  ::    0x08008cbc      2088           ldrh r0, [r4]
| ::  ::    0x08008cbe      0028           cmp r0, 0
| ::  ::,=< 0x08008cc0      04d0           beq 0x8008ccc
| ::  ::|   0x08008cc2      40f22331       movw r1, 0x323              ; 803
| ::  ::|   0x08008cc6      8842           cmp r0, r1
| :: ,====< 0x08008cc8      03d0           beq 0x8008cd2
| ::,=====< 0x08008cca      1be0           b 0x8008d04
| ::||::|      ; JMP XREF from 0x08008cc0 (_KBD_MSGReceive)
| ::||::|      ; JMP XREF from 0x08008cf2 (_KBD_MSGReceive)
| ::||::|      ; JMP XREF from 0x08008cf6 (_KBD_MSGReceive)
| ------`-> 0x08008ccc      40f22330       movw r0, 0x323              ; 803
| ::||::    0x08008cd0      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008cc8 (_KBD_MSGReceive)
| ::|`----> 0x08008cd2      dff8f801       ldr.w r0, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::    0x08008cd6      017d           ldrb r1, [r0, 0x14]         ; 0x2000077c
| ::| ::    0x08008cd8      c27c           ldrb r2, [r0, 0x13]         ; 0x2000077b
| ::| ::    0x08008cda      51ea0203       orrs.w r3, r1, r2
| ::| ::,=< 0x08008cde      01d1           bne 0x8008ce4               ; jump if a message was received using usart2/3
| ::| ::|   0x08008ce0      0020           movs r0, 0
| ::| ::|   0x08008ce2      10bd           pop {r4, pc}
| ::| ::|      ; JMP XREF from 0x08008cde (_KBD_MSGReceive)
| ::| ::`-> 0x08008ce4      002a           cmp r2, 0
| ::| ::,=< 0x08008ce6      05d0           beq 0x8008cf4               ; jump if it is not a BLE message
| ::| ::|   0x08008ce8      0021           movs r1, 0
| ::| ::|   0x08008cea      c174           strb r1, [r0, 0x13]
| ::| ::|   0x08008cec      0220           movs r0, 2                  ; 2
| ::| ::|   0x08008cee      fdf7b7f9       bl _MSG_Get
| ========< 0x08008cf2      ebe7           b 0x8008ccc
| ::| ::|      ; JMP XREF from 0x08008ce6 (_KBD_MSGReceive)
| ::| ::`-> 0x08008cf4      0029           cmp r1, 0
| ========< 0x08008cf6      e9d0           beq 0x8008ccc               ; jump if it is not a LED message
| ::| ::    0x08008cf8      0021           movs r1, 0
| ::| ::    0x08008cfa      0175           strb r1, [r0, 0x14]
| ::| ::    0x08008cfc      0320           movs r0, 3                  ; 3
| ::| ::    0x08008cfe      fdf7aff9       bl _MSG_Get
| ========< 0x08008d02      e3e7           b 0x8008ccc
| ::| ::       ; JMP XREF from 0x08008cca (_KBD_MSGReceive)
| ::`-----> 0x08008d04      0020           movs r0, 0
| ::  ::    0x08008d06      2080           strh r0, [r4]
| ::  ::    0x08008d08      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008d0a      10bd           pop {r4, pc}
/ (fcn) fcn.08008d0c 104
|       Caller: main_loop
|   fcn.08008d0c ();
| ::  ::       ; CALL XREF from 0x08008606 (main_loop)
| ::  ::    0x08008d0c      38b5           push {r3, r4, r5, lr}
| ::  ::    0x08008d0e      0446           mov r4, r0
| ::  ::    0x08008d10      0120           movs r0, 1                  ; 1
| ::  ::    0x08008d12      2188           ldrh r1, [r4]
| ::  ::    0x08008d14      0029           cmp r1, 0
| ::  ::,=< 0x08008d16      06d0           beq 0x8008d26
| ::  ::|   0x08008d18      40f23d32       movw r2, 0x33d              ; 829
| ::  ::|   0x08008d1c      891a           subs r1, r1, r2
| :: ,====< 0x08008d1e      05d0           beq 0x8008d2c
| :: |::|   0x08008d20      c91f           subs r1, r1, 7
| ::,=====< 0x08008d22      1fd0           beq 0x8008d64
| ========< 0x08008d24      22e0           b 0x8008d6c
| ::||::|      ; JMP XREF from 0x08008d16 (fcn.08008d0c)
| ::||::|      ; JMP XREF from 0x08008d66 (fcn.08008d0c)
| ------`-> 0x08008d26      40f23d30       movw r0, 0x33d              ; 829
| ::||::    0x08008d2a      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008d1e (fcn.08008d0c)
| ::|`----> 0x08008d2c      dff8a051       ldr.w r5, [0x08008ed0]      ; [0x8008ed0:4]=0x200017a8
| ::| ::    0x08008d30      95f8dc00       ldrb.w r0, [r5, 0xdc]       ; 0x20001884
| ::| ::    0x08008d34      0028           cmp r0, 0
| ::| ::,=< 0x08008d36      04d0           beq 0x8008d42
| ::| ::|   0x08008d38      2846           mov r0, r5
| ::| ::|   0x08008d3a      00f0faf8       bl _KBD_Macro_Something
| ::| ::|   0x08008d3e      0028           cmp r0, 0
| ::|,====< 0x08008d40      01d0           beq 0x8008d46
| ::||::|      ; JMP XREF from 0x08008d36 (fcn.08008d0c)
| ::||::`-> 0x08008d42      0020           movs r0, 0
| ::||::    0x08008d44      32bd           pop {r1, r4, r5, pc}
| ::||::       ; JMP XREF from 0x08008d40 (fcn.08008d0c)
| ::|`----> 0x08008d46      fdf7e1fd       bl _TIM4_GetIntCounter
| ::| ::    0x08008d4a      0146           mov r1, r0
| ::| ::    0x08008d4c      2846           mov r0, r5
| ::| ::    0x08008d4e      00f00bf9       bl _KBD_Macro_Something2
| ::| ::    0x08008d52      0128           cmp r0, 1                   ; 1
| ::| ::,=< 0x08008d54      02d1           bne 0x8008d5c
| ::| ::|   0x08008d56      0120           movs r0, 1                  ; 1
| ::| ::|   0x08008d58      85f8d200       strb.w r0, [r5, 0xd2]
| ::| ::|      ; JMP XREF from 0x08008d54 (fcn.08008d0c)
| ::| ::`-> 0x08008d5c      0020           movs r0, 0
| ::| ::    0x08008d5e      4ff45171       mov.w r1, 0x344             ; 836
| ::| ::    0x08008d62      2180           strh r1, [r4]
| ::| ::       ; JMP XREF from 0x08008d22 (fcn.08008d0c)
| ::`-----> 0x08008d64      0028           cmp r0, 0
| ========< 0x08008d66      ded1           bne 0x8008d26
| ::  ::    0x08008d68      0120           movs r0, 1                  ; 1
| ::  ::    0x08008d6a      32bd           pop {r1, r4, r5, pc}
| ::  ::       ; JMP XREF from 0x08008d24 (fcn.08008d0c)
| --------> 0x08008d6c      0020           movs r0, 0
| ::  ::    0x08008d6e      2080           strh r0, [r4]
| ::  ::    0x08008d70      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008d72      32bd           pop {r1, r4, r5, pc}
\ ::  ::    ;-- KBD_PWRManage:
/ (fcn) _KBD_PWRManage 340
|       Caller: main_loop
|   _KBD_PWRManage ();
| ::  ::       ; CALL XREF from 0x080085f6 (main_loop)
| ::  ::    0x08008d74      70b5           push {r4, r5, r6, lr}
| ::  ::    0x08008d76      0446           mov r4, r0                  ; r0=0x200018bc
| ::  ::    0x08008d78      2088           ldrh r0, [r4]
| ::  ::    0x08008d7a      0028           cmp r0, 0
| ::  ::,=< 0x08008d7c      03d0           beq 0x8008d86
| ::  ::|   0x08008d7e      b0f5577f       cmp.w r0, 0x35c             ; 860
| :: ,====< 0x08008d82      03d0           beq 0x8008d8c
| ::,=====< 0x08008d84      9ce0           b 0x8008ec0
| ::||::|      ; JMP XREF from 0x08008d7c (_KBD_PWRManage)
| ::||::|      ; JMP XREF from 0x08008ebe (_KBD_PWRManage)
| ------`-> 0x08008d86      4ff45770       mov.w r0, 0x35c             ; 860
| ::||::    0x08008d8a      2080           strh r0, [r4]
| ::||::       ; JMP XREF from 0x08008d82 (_KBD_PWRManage)
| ::|`----> 0x08008d8c      dff83c51       ldr.w r5, [0x08008ecc]      ; [0x8008ecc:4]=0x20000768
| ::| ::    0x08008d90      05f21706       addw r6, r5, 0x17
| ::| ::    0x08008d94      b078           ldrb r0, [r6, 2]
| ::| ::    0x08008d96      0028           cmp r0, 0
| ::| ::,=< 0x08008d98      01d1           bne 0x8008d9e
| ::| ::|   0x08008d9a      0020           movs r0, 0
| ::| ::|   0x08008d9c      70bd           pop {r4, r5, r6, pc}
| ::| ::|      ; JMP XREF from 0x08008d98 (_KBD_PWRManage)
| ::| ::`-> 0x08008d9e      fbf735fc       bl _KBD_USBPlugCheck
| ::| ::    0x08008da2      e87d           ldrb r0, [r5, 0x17]
| ::| ::    0x08008da4      0028           cmp r0, 0
| ::| ::,=< 0x08008da6      08d0           beq 0x8008dba
| ::| ::|   0x08008da8      fbf745fc       bl _USB_PA11_12_Config
| ::| ::|   0x08008dac      0028           cmp r0, 0
| ::|,====< 0x08008dae      02d0           beq 0x8008db6
| ::||::|   0x08008db0      0220           movs r0, 2                  ; 2
| ::||::|   0x08008db2      f070           strb r0, [r6, 3]
| ========< 0x08008db4      01e0           b 0x8008dba
| ::||::|      ; JMP XREF from 0x08008dae (_KBD_PWRManage)
| ::|`----> 0x08008db6      0120           movs r0, 1                  ; 1
| ::| ::|   0x08008db8      f070           strb r0, [r6, 3]
| ::| ::|      ; JMP XREF from 0x08008da6 (_KBD_PWRManage)
| ::| ::|      ; JMP XREF from 0x08008db4 (_KBD_PWRManage)
| ------`-> 0x08008dba      f078           ldrb r0, [r6, 3]
| ::| ::    0x08008dbc      0228           cmp r0, 2                   ; 2
| ::| ::,=< 0x08008dbe      35d1           bne 0x8008e2c
| ::| ::|   0x08008dc0      e97d           ldrb r1, [r5, 0x17]
| ::| ::|   0x08008dc2      0029           cmp r1, 0
| ::|,====< 0x08008dc4      32d0           beq 0x8008e2c
| ::||::|   0x08008dc6      7079           ldrb r0, [r6, 5]
| ::||::|   0x08008dc8      0228           cmp r0, 2                   ; 2
| ========< 0x08008dca      01d0           beq 0x8008dd0
| ::||::|   0x08008dcc      0128           cmp r0, 1                   ; 1
| ========< 0x08008dce      0bd1           bne 0x8008de8
| ::||::|      ; JMP XREF from 0x08008dca (_KBD_PWRManage)
| --------> 0x08008dd0      0020           movs r0, 0
| ::||::|   0x08008dd2      fef772f8       bl PWR_EnterLowPowerRunMode
| ::||::|      ; JMP XREF from 0x08008dde (_KBD_PWRManage)
| --------> 0x08008dd6      2020           movs r0, 0x20               ; 32
| ::||::|   0x08008dd8      fef783f8       bl PWR_GetFlagStatus
| ::||::|   0x08008ddc      0028           cmp r0, 0
| ========< 0x08008dde      fad1           bne 0x8008dd6
| ::||::|   0x08008de0      fbf7e5f9       bl _Peripherals_Config
| ::||::|   0x08008de4      0020           movs r0, 0
| ::||::|   0x08008de6      7071           strb r0, [r6, 5]
| ::||::|      ; JMP XREF from 0x08008dce (_KBD_PWRManage)
| --------> 0x08008de8      fbf7f6fa       bl _GPIO_HighSpeedSet
| ::||::|   0x08008dec      fbf773fb       bl _KBD_WKUPInterruptsEnable_2
| ::||::|   0x08008df0      fbf761fb       bl _MatrixColumns_Set
| ::||::|   0x08008df4      fcf714f9       bl _USART2_Setup
| ::||::|   0x08008df8      fcf7e9f9       bl _USART3_Setup
| ::||::|   0x08008dfc      05f24a00       addw r0, r5, 0x4a
| ::||::|   0x08008e00      817a           ldrb r1, [r0, 0xa]
| ::||::|   0x08008e02      01f03f01       and r1, r1, 0x3f
| ::||::|   0x08008e06      8172           strb r1, [r0, 0xa]
| ::||::|   0x08008e08      0020           movs r0, 0
| ::||::|   0x08008e0a      85f84a00       strb.w r0, [r5, 0x4a]
| ::||::|   0x08008e0e      fdf77bfd       bl _TIM4_Disable_Wrapper
| ::||::|   0x08008e12      fdf75ffd       bl _TIM4_Config
| ::||::|   0x08008e16      fbf7b3f9       bl _TIM4_Update_Flag_1
| ::||::|   0x08008e1a      fbf769fc       bl _USB_DisconnectPinConfig
| ::||::|   0x08008e1e      fbf781fc       bl _USB_Interrupts_Config
| ::||::|   0x08008e22      fbf7affc       bl _USB_Set_USBClock
| ::||::|   0x08008e26      00f003f9       bl USB_Init
| ========< 0x08008e2a      46e0           b 0x8008eba
| ::||::|      ; JMP XREF from 0x08008dbe (_KBD_PWRManage)
| ::||::|      ; JMP XREF from 0x08008dc4 (_KBD_PWRManage)
| ::|`--`-> 0x08008e2c      0128           cmp r0, 1                   ; 1
| ::| ::,=< 0x08008e2e      21d1           bne 0x8008e74
| ::| ::|   0x08008e30      e87d           ldrb r0, [r5, 0x17]
| ::| ::|   0x08008e32      0028           cmp r0, 0
| ::|,====< 0x08008e34      1ed0           beq 0x8008e74
| ::||::|   0x08008e36      00f039f9       bl _USB_PeriphDisable
| ::||::|   0x08008e3a      7079           ldrb r0, [r6, 5]
| ::||::|   0x08008e3c      0028           cmp r0, 0
| ========< 0x08008e3e      01d1           bne 0x8008e44
| ::||::|   0x08008e40      fdf7fdfb       bl _KBD_LowPowerMode
| ::||::|      ; JMP XREF from 0x08008e3e (_KBD_PWRManage)
| --------> 0x08008e44      0220           movs r0, 2                  ; 2
| ::||::|   0x08008e46      7071           strb r0, [r6, 5]
| ::||::|   0x08008e48      05f24a00       addw r0, r5, 0x4a
| ::||::|   0x08008e4c      817a           ldrb r1, [r0, 0xa]
| ::||::|   0x08008e4e      01f03f01       and r1, r1, 0x3f
| ::||::|   0x08008e52      8172           strb r1, [r0, 0xa]
| ::||::|   0x08008e54      0020           movs r0, 0
| ::||::|   0x08008e56      85f84a00       strb.w r0, [r5, 0x4a]
| ::||::|   0x08008e5a      fdf755fd       bl _TIM4_Disable_Wrapper
| ::||::|   0x08008e5e      fdf739fd       bl _TIM4_Config
| ::||::|   0x08008e62      fcf7ddf8       bl _USART2_Setup
| ::||::|   0x08008e66      fcf7b2f9       bl _USART3_Setup
| ::||::|   0x08008e6a      fbf789f9       bl _TIM4_Update_Flag_1
| ::||::|   0x08008e6e      fff775fb       bl clear_some_arrays
| ========< 0x08008e72      22e0           b 0x8008eba
| ::||::|      ; JMP XREF from 0x08008e2e (_KBD_PWRManage)
| ::||::|      ; JMP XREF from 0x08008e34 (_KBD_PWRManage)
| ::|`--`-> 0x08008e74      0020           movs r0, 0
| ::| ::    0x08008e76      f070           strb r0, [r6, 3]
| ::| ::    0x08008e78      00f018f9       bl _USB_PeriphDisable
| ::| ::    0x08008e7c      7079           ldrb r0, [r6, 5]
| ::| ::    0x08008e7e      0028           cmp r0, 0
| ::| ::,=< 0x08008e80      01d1           bne 0x8008e86
| ::| ::|   0x08008e82      fdf7dcfb       bl _KBD_LowPowerMode
| ::| ::|      ; JMP XREF from 0x08008e80 (_KBD_PWRManage)
| ::| ::`-> 0x08008e86      0220           movs r0, 2                  ; 2
| ::| ::    0x08008e88      7071           strb r0, [r6, 5]
| ::| ::    0x08008e8a      fcf7c9f8       bl _USART2_Setup
| ::| ::    0x08008e8e      fcf79ef9       bl _USART3_Setup
| ::| ::    0x08008e92      05f24a00       addw r0, r5, 0x4a
| ::| ::    0x08008e96      817a           ldrb r1, [r0, 0xa]
| ::| ::    0x08008e98      01f03f01       and r1, r1, 0x3f
| ::| ::    0x08008e9c      8172           strb r1, [r0, 0xa]
| ::| ::    0x08008e9e      0020           movs r0, 0
| ::| ::    0x08008ea0      85f84a00       strb.w r0, [r5, 0x4a]
| ::| ::    0x08008ea4      fdf730fd       bl _TIM4_Disable_Wrapper
| ::| ::    0x08008ea8      fdf714fd       bl _TIM4_Config
| ::| ::    0x08008eac      0020           movs r0, 0
| ::| ::    0x08008eae      fdf730fd       bl update_some_flags
| ::| ::    0x08008eb2      fbf765f9       bl _TIM4_Update_Flag_1
| ::| ::    0x08008eb6      fff751fb       bl clear_some_arrays
| ::| ::       ; JMP XREF from 0x08008e2a (_KBD_PWRManage)
| ::| ::       ; JMP XREF from 0x08008e72 (_KBD_PWRManage)
| --------> 0x08008eba      0020           movs r0, 0
| ::| ::    0x08008ebc      b070           strb r0, [r6, 2]
| ========< 0x08008ebe      62e7           b 0x8008d86
| ::| ::       ; JMP XREF from 0x08008d84 (_KBD_PWRManage)
| ::`-----> 0x08008ec0      0020           movs r0, 0
| ::  ::    0x08008ec2      2080           strh r0, [r4]
| ::  ::    0x08008ec4      0320           movs r0, 3                  ; 3
\ ::  ::    0x08008ec6      70bd           pop {r4, r5, r6, pc}
  ::  ::       ; DATA XREF from 0x080085b2 (main_loop)
  ::  ::    0x08008ec8      .dword 0x200018a4
  ::  ::       ; XREFS: DATA 0x0800862e  DATA 0x08008642  DATA 0x0800865c  DATA 0x0800866a  DATA 0x080086f8  DATA 0x080087ea  DATA 0x080087f0  DATA 0x08008864  DATA 0x080088f8  
  ::  ::       ; XREFS: DATA 0x080089aa  DATA 0x08008a12  DATA 0x08008a6a  DATA 0x08008aaa  DATA 0x08008b18  DATA 0x08008c48  DATA 0x08008c6c  DATA 0x08008cd2  DATA 0x08008d8c  
  ::  ::    0x08008ecc      .dword 0x20000768
  ::  ::       ; XREFS: DATA 0x0800864c  DATA 0x080086d0  DATA 0x080087ba  DATA 0x08008850  DATA 0x080088d2  DATA 0x08008986  DATA 0x08008af8  DATA 0x08008d2c  
  ::  ::    0x08008ed0      .dword 0x200017a8
  ::  ::       ; DATA XREF from 0x08008712 (_KBD_KeyStrokeHandle)
  ::  ::    0x08008ed4      .dword 0x2000198c
  ::  ::       ; DATA XREF from 0x08008894 (_LED_StateUpdate)
  ::  ::       ; DATA XREF from 0x08008a02 (_LED_StateUpdate)
  ::  ::    0x08008ed8      .dword 0x2000189c
  ::  ::       ; DATA XREF from 0x08008a8c (fcn.08008a4c)
  ::  ::       ; DATA XREF from 0x08008a9a (fcn.08008a4c)
  ::  ::    0x08008edc      .dword 0x20001968
  ::  ::       ; DATA XREF from 0x08008b90 (fcn.08008ade)
  ::  ::    0x08008ee0      .dword 0x200008d4
  ::  ::       ; DATA XREF from 0x08008c5a (_BLE_StateUpdate)
  ::  ::       ; DATA XREF from 0x08008c68 (_BLE_StateUpdate)
  ::  ::    0x08008ee4      .dword 0x20001970
| ::  ::    ;-- TIM4_GetIntCounter_Wrapper:
/ (fcn) _TIM4_GetIntCounter_Wrapper 4
|       Caller: _Timer_Init _Timer_Compare
|   _TIM4_GetIntCounter_Wrapper ();
| ::  ::       ; CALL XREF from 0x08008efa (_Timer_Compare)
| ::  ::       ; CALL XREF from 0x08008f24 (_Timer_Init)
\ ::  ::    0x08008ee8      fdf710bd       b.w _TIM4_GetIntCounter
\ ::  ::    ;-- Timer_Compare:
/ (fcn) _Timer_Compare 50
|       Caller: fcn.08008a4c _LED_StateUpdate _BLE_StateUpdate
|   _Timer_Compare ();
| ::  ::       ; XREFS: CALL 0x08008898  CALL 0x080088da  CALL 0x0800898e  CALL 0x08008a06  CALL 0x08008a9e  CALL 0x08008c7a  CALL 0x08008c92  
| ::  ::    0x08008eec      38b5           push {r3, r4, r5, lr}
| ::  ::    0x08008eee      0446           mov r4, r0
| ::  ::    0x08008ef0      6068           ldr r0, [r4, 4]
| ::  ::    0x08008ef2      0028           cmp r0, 0
| ::  ::,=< 0x08008ef4      11d0           beq 0x8008f1a
| ::  ::|   0x08008ef6      6ff00045       mvn r5, 0x80000000
| ::  ::|   0x08008efa      fff7f5ff       bl _TIM4_GetIntCounter_Wrapper
| ::  ::|   0x08008efe      2818           adds r0, r5, r0
| ::  ::|   0x08008f00      2168           ldr r1, [r4]
| ::  ::|   0x08008f02      401a           subs r0, r0, r1
| ::  ::|   0x08008f04      2946           mov r1, r5
| ::  ::|   0x08008f06      b0fbf1f1       udiv r1, r0, r1
| ::  ::|   0x08008f0a      05fb1100       mls r0, r5, r1, r0
| ::  ::|   0x08008f0e      6168           ldr r1, [r4, 4]
| ::  ::|   0x08008f10      8842           cmp r0, r1
| ::  ::|   0x08008f12      8041           sbcs r0, r0
| ::  ::|   0x08008f14      c043           mvns r0, r0
| ::  ::|   0x08008f16      c00f           lsrs r0, r0, 0x1f
| ::  ::|   0x08008f18      32bd           pop {r1, r4, r5, pc}
| ::  ::|      ; JMP XREF from 0x08008ef4 (_Timer_Compare)
| ::  ::`-> 0x08008f1a      0020           movs r0, 0
\ ::  ::    0x08008f1c      32bd           pop {r1, r4, r5, pc}
\ ::  ::    ;-- Timer_Init:
/ (fcn) _Timer_Init 14
|       Caller: fcn.08008a4c _LED_StateUpdate _BLE_StateUpdate
|   _Timer_Init ();
| ::  ::       ; XREFS: CALL 0x0800888a  CALL 0x080088c8  CALL 0x0800897c  CALL 0x080089f8  CALL 0x08008a90  CALL 0x08008c5e  
| ::  ::    0x08008f1e      10b5           push {r4, lr}               ; stores TIM4_IntCounter and another value
| ::  ::    0x08008f20      0446           mov r4, r0
| ::  ::    0x08008f22      6160           str r1, [r4, 4]
| ::  ::    0x08008f24      fff7e0ff       bl _TIM4_GetIntCounter_Wrapper
| ::  ::    0x08008f28      2060           str r0, [r4]
\ ::  ::    0x08008f2a      10bd           pop {r4, pc}
\ ::  ::    ;-- Timer_Clear:
/ (fcn) _Timer_Clear 6
|       Caller: _BLE_StateUpdate
|   _Timer_Clear ();
| ::  ::       ; CALL XREF from 0x08008c9c (_BLE_StateUpdate)
| ::  ::    0x08008f2c      0021           movs r1, 0
| ::  ::    0x08008f2e      4160           str r1, [r0, 4]
\ ::  ::    0x08008f30      7047           bx lr
\ ::  ::    ;-- KBD_Macro_Something:
/ (fcn) _KBD_Macro_Something 54
|       Caller: fcn.08008d0c
|   _KBD_Macro_Something ();
| ::  ::       ; CALL XREF from 0x08008d3a (fcn.08008d0c)
| ::  ::    0x08008f32      30b4           push {r4, r5}
| ::  ::    0x08008f34      0021           movs r1, 0
| ::  ::    0x08008f36      00f1dc02       add.w r2, r0, 0xdc
| ::  ::    0x08008f3a      5368           ldr r3, [r2, 4]             ; 0x20001888
| ::  ::    0x08008f3c      0124           movs r4, 1                  ; 1
| ::  ::    0x08008f3e      93f91450       ldrsb.w r5, [r3, 0x14]
| ::  ::    0x08008f42      ac40           lsls r4, r5
| ::  ::    0x08008f44      641e           subs r4, r4, 1
| ::  ::    0x08008f46      a4b2           uxth r4, r4
| ::  ::    0x08008f48      5d68           ldr r5, [r3, 4]
| ::  ::    0x08008f4a      a542           cmp r5, r4
| ::  ::,=< 0x08008f4c      09d1           bne 0x8008f62
| ::  ::|   0x08008f4e      9b68           ldr r3, [r3, 8]
| ::  ::|   0x08008f50      a342           cmp r3, r4
| :: ,====< 0x08008f52      06d1           bne 0x8008f62
| :: |::|   0x08008f54      0121           movs r1, 1                  ; 1
| :: |::|   0x08008f56      0023           movs r3, 0
| :: |::|   0x08008f58      80f8dc30       strb.w r3, [r0, 0xdc]
| :: |::|   0x08008f5c      1846           mov r0, r3
| :: |::|   0x08008f5e      5268           ldr r2, [r2, 4]
| :: |::|   0x08008f60      1070           strb r0, [r2]
| :: |::|      ; JMP XREF from 0x08008f4c (_KBD_Macro_Something)
| :: |::|      ; JMP XREF from 0x08008f52 (_KBD_Macro_Something)
| :: `--`-> 0x08008f62      0846           mov r0, r1
| ::  ::    0x08008f64      30bc           pop {r4, r5}
\ ::  ::    0x08008f66      7047           bx lr
\ ::  ::    ;-- KBD_Macro_Something2:
/ (fcn) _KBD_Macro_Something2 198
|       Caller: fcn.08008d0c
|   _KBD_Macro_Something2 ();
| ::  ::       ; CALL XREF from 0x08008d4e (fcn.08008d0c)
| ::  ::    0x08008f68      f8b5           push {r3, r4, r5, r6, r7, lr} ; r0: 0x200017a8, r1: TIM4_IntCounter
| ::  ::    0x08008f6a      0446           mov r4, r0
| ::  ::    0x08008f6c      0d46           mov r5, r1
| ::  ::    0x08008f6e      0021           movs r1, 0
| ::  ::    0x08008f70      d4f8e000       ldr.w r0, [r4, 0xe0]        ; 0x20001888
| ::  ::    0x08008f74      0078           ldrb r0, [r0]
| ::  ::    0x08008f76      0028           cmp r0, 0
| ::  ::,=< 0x08008f78      01d1           bne 0x8008f7e
| ::  ::|   0x08008f7a      0846           mov r0, r1
| ::  ::|   0x08008f7c      f2bd           pop {r1, r4, r5, r6, r7, pc}
| ::  ::|      ; JMP XREF from 0x08008f78 (_KBD_Macro_Something2)
| ::  ::`-> 0x08008f7e      0e46           mov r6, r1
| ::  ::,=< 0x08008f80      21e0           b 0x8008fc6
| ::  ::|      ; JMP XREF from 0x08008fe2 (_KBD_Macro_Something2)
| ::  ::|      ; JMP XREF from 0x08008ff0 (_KBD_Macro_Something2)
| ::..----> 0x08008f82      b0f820c0       ldrh.w ip, [r0, 0x20]
| ::::::|   0x08008f86      6344           add r3, ip
| ::::::|   0x08008f88      9d42           cmp r5, r3
| ========< 0x08008f8a      1ad3           blo 0x8008fc2
| ::::::|   0x08008f8c      9268           ldr r2, [r2, 8]
| ::::::|   0x08008f8e      f240           lsrs r2, r6
| ::::::|   0x08008f90      d207           lsls r2, r2, 0x1f
| ========< 0x08008f92      16d4           bmi 0x8008fc2
| ::::::|   0x08008f94      0022           movs r2, 0
| ::::::|   0x08008f96      017f           ldrb r1, [r0, 0x1c]
| ::::::|   0x08008f98      04f1c800       add.w r0, r4, 0xc8          ; 0x20001870
| ::::::|   0x08008f9c      fff7a6fa       bl _KBD_6KROSlotFill_Maybe
| ::::::|   0x08008fa0      0022           movs r2, 0
| ::::::|   0x08008fa2      d4f8e000       ldr.w r0, [r4, 0xe0]        ; 0x20001888
| ::::::|   0x08008fa6      3818           adds r0, r7, r0
| ::::::|   0x08008fa8      017f           ldrb r1, [r0, 0x1c]
| ::::::|   0x08008faa      04f1a800       add.w r0, r4, 0xa8          ; 0x20001850
| ::::::|   0x08008fae      fff73dfa       bl fcn.0800842c
| ::::::|   0x08008fb2      d4f8e000       ldr.w r0, [r4, 0xe0]
| ::::::|   0x08008fb6      8168           ldr r1, [r0, 8]
| ::::::|   0x08008fb8      0122           movs r2, 1                  ; 1
| ::::::|   0x08008fba      b240           lsls r2, r6
| ::::::|   0x08008fbc      1143           orrs r1, r2
| ::::::|   0x08008fbe      8160           str r1, [r0, 8]
| ::::::|   0x08008fc0      0121           movs r1, 1                  ; 1
| ::::::|      ; JMP XREF from 0x08008f8a (_KBD_Macro_Something2)
| ::::::|      ; JMP XREF from 0x08008f92 (_KBD_Macro_Something2)
| ::::::|      ; JMP XREF from 0x08009020 (_KBD_Macro_Something2)
| --------> 0x08008fc2      761c           adds r6, r6, 1
| ::::::|   0x08008fc4      f6b2           uxtb r6, r6
| ::::::|      ; JMP XREF from 0x08008f80 (_KBD_Macro_Something2)
| ::::::`-> 0x08008fc6      d4f8e020       ldr.w r2, [r4, 0xe0]
| ::::::    0x08008fca      107d           ldrb r0, [r2, 0x14]
| ::::::    0x08008fcc      8642           cmp r6, r0
| ::::::,=< 0x08008fce      28da           bge 0x8009022
| ::::::|   0x08008fd0      9369           ldr r3, [r2, 0x18]
| ::::::|   0x08008fd2      06eb4600       add.w r0, r6, r6, lsl 1
| ::::::|   0x08008fd6      4700           lsls r7, r0, 1
| ::::::|   0x08008fd8      b818           adds r0, r7, r2
| ::::::|   0x08008fda      b0f81ec0       ldrh.w ip, [r0, 0x1e]
| ::::::|   0x08008fde      9c44           add ip, r3
| ::::::|   0x08008fe0      6545           cmp r5, ip
| ::`=====< 0x08008fe2      ced3           blo 0x8008f82
| :: :::|   0x08008fe4      d2f804c0       ldr.w ip, [r2, 4]
| :: :::|   0x08008fe8      2cfa06fc       lsr.w ip, ip, r6
| :: :::|   0x08008fec      5feacc7c       lsls.w ip, ip, 0x1f
| :: `====< 0x08008ff0      c7d4           bmi 0x8008f82
| ::  ::|   0x08008ff2      0122           movs r2, 1                  ; 1
| ::  ::|   0x08008ff4      017f           ldrb r1, [r0, 0x1c]
| ::  ::|   0x08008ff6      04f1c800       add.w r0, r4, 0xc8
| ::  ::|   0x08008ffa      fff777fa       bl _KBD_6KROSlotFill_Maybe
| ::  ::|   0x08008ffe      0122           movs r2, 1                  ; 1
| ::  ::|   0x08009000      d4f8e000       ldr.w r0, [r4, 0xe0]
| ::  ::|   0x08009004      3818           adds r0, r7, r0
| ::  ::|   0x08009006      017f           ldrb r1, [r0, 0x1c]
| ::  ::|   0x08009008      04f1a800       add.w r0, r4, 0xa8
| ::  ::|   0x0800900c      fff70efa       bl fcn.0800842c
| ::  ::|   0x08009010      d4f8e000       ldr.w r0, [r4, 0xe0]
| ::  ::|   0x08009014      4168           ldr r1, [r0, 4]
| ::  ::|   0x08009016      0122           movs r2, 1                  ; 1
| ::  ::|   0x08009018      b240           lsls r2, r6
| ::  ::|   0x0800901a      1143           orrs r1, r2
| ::  ::|   0x0800901c      4160           str r1, [r0, 4]
| ::  ::|   0x0800901e      0121           movs r1, 1                  ; 1
| ========< 0x08009020      cfe7           b 0x8008fc2
| ::  ::|      ; JMP XREF from 0x08008fce (_KBD_Macro_Something2)
| ::  ::`-> 0x08009022      0846           mov r0, r1
| ::  ::    0x08009024      401e           subs r0, r0, 1
| ::  ::    0x08009026      8041           sbcs r0, r0
| ::  ::    0x08009028      c043           mvns r0, r0
| ::  ::    0x0800902a      c00f           lsrs r0, r0, 0x1f
\ ::  ::    0x0800902c      f2bd           pop {r1, r4, r5, r6, r7, pc}
  ::  ::    0x0800902e      0000           movs r0, r0
/ (fcn) USB_Init 20
|       Caller: _KBD_PWRManage
|   USB_Init ();
| ::  ::       ; CALL XREF from 0x08008e26 (_KBD_PWRManage)
| ::  ::    0x08009030      0448           ldr r0, [0x08009044]        ; [0x8009044:4]=0x200018f4 ; &Device_Info
| ::  ::    0x08009032      c061           str r0, [r0, 0x1c]
| ::  ::    0x08009034      0221           movs r1, 2                  ; 2
| ::  ::    0x08009036      0172           strb r1, [r0, 8]
| ::  ::    0x08009038      0349           ldr r1, [0x08009048]        ; [0x8009048:4]=0x200005f8 ; &Device_Property
| ::  ::    0x0800903a      0162           str r1, [r0, 0x20]
| ::  ::    0x0800903c      034a           ldr r2, [0x0800904c]        ; [0x800904c:4]=0x20000650 ; &User_Standard_Requests
| ::  ::    0x0800903e      4262           str r2, [r0, 0x24]
| ::  ::    0x08009040      0868           ldr r0, [r1]
\ ::  ::    0x08009042      0047           bx r0                       ; pProperty->Init()
  ::  ::       ; DATA XREF from 0x08009030 (USB_Init)
  ::  ::    0x08009044      .dword 0x200018f4
  ::  ::       ; DATA XREF from 0x08009038 (USB_Init)
  ::  ::    0x08009048      .dword 0x200005f8
  ::  ::       ; DATA XREF from 0x0800903c (USB_Init)
  ::  ::    0x0800904c      .dword 0x20000650
| ::  ::    ;-- USB_Interrupts_Disable:
/ (fcn) _USB_Interrupts_Disable 92
|       Caller: _USB_PeriphDisable
|   _USB_Interrupts_Disable ();
| ::  ::       ; CALL XREF from 0x080090b2 (_USB_PeriphDisable)
| ::  ::    0x08009050      e0b5           push {r5, r6, r7, lr}
| ::  ::    0x08009052      4ff48020       mov.w r0, 0x40000           ; EXTl_Line18 connected to USB FS wakeup event
| ::  ::    0x08009056      fef74ef8       bl EXTI_ClearITPendingBit
| ::  ::    0x0800905a      4ff48020       mov.w r0, 0x40000
| ::  ::    0x0800905e      0190           str r0, [sp, 4]
| ::  ::    0x08009060      0820           movs r0, 8                  ; 8 ; EXTI_Trigger_Rising
| ::  ::    0x08009062      8df80900       strb.w r0, [sp, 9]
| ::  ::    0x08009066      0020           movs r0, 0                  ; disable
| ::  ::    0x08009068      8df80a00       strb.w r0, [sp, 0xa]
| ::  ::    0x0800906c      01a8           add r0, sp, 4
| ::  ::    0x0800906e      fef705f8       bl EXTI_Init
| ::  ::    0x08009072      4ff4a060       mov.w r0, 0x500             ; 1280 ; NVIC_PriorityGroup_2: 2,2
| ::  ::    0x08009076      fdf745ff       bl NVIC_PriorityGroupConfig
| ::  ::    0x0800907a      1420           movs r0, 0x14               ; 20 ; USB_LP_IRQn
| ::  ::    0x0800907c      8df80000       strb.w r0, [sp]
| ::  ::    0x08009080      0220           movs r0, 2                  ; 2 ; Preemption priority 2
| ::  ::    0x08009082      8df80100       strb.w r0, [sp, 1]
| ::  ::    0x08009086      0020           movs r0, 0                  ; subpriority 0
| ::  ::    0x08009088      adf80200       strh.w r0, [sp, 2]
| ::  ::    0x0800908c      00a8           add r0, sp, 0
| ::  ::    0x0800908e      fdf73eff       bl NVIC_Init                ; enable or disable?
| ::  ::    0x08009092      2a20           movs r0, 0x2a               ; '*' ; 42 ; USB_FS_WKUP_IRQn
| ::  ::    0x08009094      8df80000       strb.w r0, [sp]
| ::  ::    0x08009098      0120           movs r0, 1                  ; 1
| ::  ::    0x0800909a      8df80100       strb.w r0, [sp, 1]          ; preemption priority 1 subpriority 0
| ::  ::    0x0800909e      0020           movs r0, 0
| ::  ::    0x080090a0      8df80300       strb.w r0, [sp, 3]          ; disable
| ::  ::    0x080090a4      00a8           add r0, sp, 0
| ::  ::    0x080090a6      fdf732ff       bl NVIC_Init
\ ::  ::    0x080090aa      07bd           pop {r0, r1, r2, pc}
\ ::  ::    ;-- USB_PeriphDisable:
/ (fcn) _USB_PeriphDisable 24
|       Caller: _KBD_PWRManage
|   _USB_PeriphDisable ();
| ::  ::       ; CALL XREF from 0x08008e36 (_KBD_PWRManage)
| ::  ::       ; CALL XREF from 0x08008e78 (_KBD_PWRManage)
| ::  ::    0x080090ac      80b5           push {r7, lr}
| ::  ::    0x080090ae      00f01af8       bl USB_PowerOff
| ::  ::    0x080090b2      fff7cdff       bl _USB_Interrupts_Disable
| ::  ::    0x080090b6      0021           movs r1, 0                  ; disable
| ::  ::    0x080090b8      4ff40000       mov.w r0, 0x800000          ; USB clock
| ::  ::    0x080090bc      bde80440       pop.w {r2, lr}
\ ::  :`==< 0x080090c0      fdf7cdbd       b.w RCC_APB1PeriphClockCmd
/ (fcn) USB_PowerOn 34
|       Caller: USB_Port_Init
|   USB_PowerOn ();
| ::  :        ; CALL XREF from 0x08009a62 (USB_Port_Init)
| ::  :     0x080090c4      80b5           push {r7, lr}
| ::  :     0x080090c6      0120           movs r0, 1                  ; 1
| ::  :     0x080090c8      fbf71bfe       bl USB_Cable_Config
| ::  :     0x080090cc      3a48           ldr r0, [0x080091b8]        ; [0x80091b8:4]=0x40005c40
| ::  :     0x080090ce      0121           movs r1, 1                  ; 1
| ::  :     0x080090d0      0160           str r1, [r0]
| ::  :     0x080090d2      0021           movs r1, 0
| ::  :     0x080090d4      0160           str r1, [r0]
| ::  :     0x080090d6      4160           str r1, [r0, 4]
| ::  :     0x080090d8      4ff4e051       mov.w r1, 0x1c00
| ::  :     0x080090dc      374a           ldr r2, [0x080091bc]        ; [0x80091bc:4]=0x20001990
| ::  :     0x080090de      1180           strh r1, [r2]
| ::  :     0x080090e0      0160           str r1, [r0]
| ::  :     0x080090e2      0020           movs r0, 0
\ ::  :     0x080090e4      02bd           pop {r1, pc}
/ (fcn) USB_PowerOff 34
|       Caller: _USB_PeriphDisable
|   USB_PowerOff ();
| ::  :        ; CALL XREF from 0x080090ae (_USB_PeriphDisable)
| ::  :     0x080090e6      10b5           push {r4, lr}
| ::  :     0x080090e8      334c           ldr r4, [0x080091b8]        ; [0x80091b8:4]=0x40005c40 ; USB_CNTR
| ::  :     0x080090ea      2068           ldr r0, [r4]
| ::  :     0x080090ec      4ff6f771       movw r1, 0xfff7             ; set all bits except FSUSP (Force Suspend)
| ::  :     0x080090f0      0840           ands r0, r1
| ::  :     0x080090f2      2060           str r0, [r4]
| ::  :     0x080090f4      0120           movs r0, 1                  ; 1 ; force usb reset
| ::  :     0x080090f6      2060           str r0, [r4]
| ::  :     0x080090f8      0020           movs r0, 0
| ::  :     0x080090fa      6060           str r0, [r4, 4]             ; clear all bits in USB_ISTR
| ::  :     0x080090fc      fbf701fe       bl USB_Cable_Config         ; software disconnect pin
| ::  :     0x08009100      0320           movs r0, 3                  ; 3
| ::  :     0x08009102      2060           str r0, [r4]                ; powerdown and reset USB peripheral
| ::  :     0x08009104      0020           movs r0, 0
\ ::  :     0x08009106      10bd           pop {r4, pc}
/ (fcn) USB_Resume_Init 20
|       Caller: _USB_Resume
|   USB_Resume_Init ();
| ::  :        ; CALL XREF from 0x08009140 (USB_Resume + 32)
| ::  :        ; CALL XREF from 0x08009150 (USB_Resume + 48)
| ::  :     0x08009108      2b48           ldr r0, [0x080091b8]        ; [0x80091b8:4]=0x40005c40
| ::  :     0x0800910a      0168           ldr r1, [r0]
| ::  :     0x0800910c      4ff6fb72       movw r2, 0xfffb
| ::  :     0x08009110      1140           ands r1, r2
| ::  :     0x08009112      0160           str r1, [r0]
| ::  :     0x08009114      4ff43f41       mov.w r1, 0xbf00
| ::  :     0x08009118      0160           str r1, [r0]
\ ::  :     0x0800911a      7047           bx lr
  ::  :     0x0800911c      0000           movs r0, r0
  ::  :     0x0800911e      0000           movs r0, r0
\ ::  :     ;-- USB_Resume:
/ (fcn) _USB_Resume 26
|       Caller: USB_Istr
|   _USB_Resume ();
| ::  :        ; CALL XREF from 0x08009fce (USB_Istr)
| ::  :        ; CALL XREF from 0x08009fe6 (USB_Istr)
| ::  :        ; CALL XREF from 0x0800a090 (USB_Istr)
| ::  :     0x08009120      10b5           push {r4, lr}               ; see usb_pwr.c
| ::  :     0x08009122      274c           ldr r4, [0x080091c0]        ; [0x80091c0:4]=0x20001978
| ::  :     0x08009124      0728           cmp r0, 7                   ; 7
| ::  : ,=< 0x08009126      00d0           beq 0x800912a
| ::  : |   0x08009128      2070           strb r0, [r4]
| ::  : |      ; JMP XREF from 0x08009126 (_USB_Resume)
| ::  : `-> 0x0800912a      2078           ldrb r0, [r4]
| ::  :     0x0800912c      0528           cmp r0, 5                   ; 5
| ::  : ,=< 0x0800912e      40d8           bhi 0x80091b2
| ::  : |   0x08009130      dfe800f0       tbb [0x08009138]
  ::  : |   0x08009134      030e           lsrs r3, r0, 0x18
  ::  : |   0x08009136      151a           subs r5, r2, r0
  ::  : |   0x08009138      232e           cmp r6, 0x23                ; '#' ; 35
  ::  : |   0x0800913a      6068           ldr r0, [r4, 4]
  ::  : |   0x0800913c      0028           cmp r0, 0
  ::  :,==< 0x0800913e      04d1           bne 0x800914a
  ::  :||   0x08009140      fff7e2ff       bl USB_Resume_Init
  ::  :||   0x08009144      0620           movs r0, 6                  ; 6
  ::  :||   0x08009146      2070           strb r0, [r4]
  ::  :||   0x08009148      10bd           pop {r4, pc}
  ::  :||      ; JMP XREF from 0x0800913e (USB_Resume + 30)
  ::  :`--> 0x0800914a      0520           movs r0, 5                  ; 5
  ::  : |   0x0800914c      2070           strb r0, [r4]
  ::  : |   0x0800914e      10bd           pop {r4, pc}
  ::  : |   0x08009150      fff7daff       bl USB_Resume_Init
  ::  : |   0x08009154      0420           movs r0, 4                  ; 4
  ::  : |   0x08009156      2070           strb r0, [r4]
  ::  : |   0x08009158      0120           movs r0, 1                  ; 1
  ::  : |   0x0800915a      6060           str r0, [r4, 4]
  ::  : |   0x0800915c      10bd           pop {r4, pc}
  ::  : |   0x0800915e      0220           movs r0, 2                  ; 2
  ::  : |   0x08009160      6070           strb r0, [r4, 1]
  ::  : |   0x08009162      0320           movs r0, 3                  ; 3
  ::  : |   0x08009164      2070           strb r0, [r4]
  ::  : |   0x08009166      10bd           pop {r4, pc}
  ::  : |   0x08009168      6078           ldrb r0, [r4, 1]
  ::  : |   0x0800916a      401e           subs r0, r0, 1
  ::  : |   0x0800916c      6070           strb r0, [r4, 1]
  ::  : |   0x0800916e      6078           ldrb r0, [r4, 1]
  ::  : |   0x08009170      0028           cmp r0, 0
  ::  :,==< 0x08009172      20d1           bne 0x80091b6               ; _USB_Resume+0x96
  ::  :||   0x08009174      0420           movs r0, 4                  ; 4
  ::  :||   0x08009176      2070           strb r0, [r4]
  ::  :||   0x08009178      10bd           pop {r4, pc}
  ::  :||   0x0800917a      0f48           ldr r0, [0x080091b8]        ; [0x80091b8:4]=0x40005c40
  ::  :||   0x0800917c      0168           ldr r1, [r0]
  ::  :||   0x0800917e      41f01001       orr r1, r1, 0x10
  ::  :||   0x08009182      89b2           uxth r1, r1
  ::  :||   0x08009184      0160           str r1, [r0]
  ::  :||   0x08009186      0520           movs r0, 5                  ; 5
  ::  :||   0x08009188      2070           strb r0, [r4]
  ::  :||   0x0800918a      0a20           movs r0, 0xa                ; 10
  ::  :||   0x0800918c      6070           strb r0, [r4, 1]
  ::  :||   0x0800918e      10bd           pop {r4, pc}
  ::  :||   0x08009190      6078           ldrb r0, [r4, 1]
  ::  :||   0x08009192      401e           subs r0, r0, 1
  ::  :||   0x08009194      6070           strb r0, [r4, 1]
  ::  :||   0x08009196      6078           ldrb r0, [r4, 1]
  ::  :||   0x08009198      0028           cmp r0, 0
  :: ,====< 0x0800919a      0cd1           bne 0x80091b6               ; _USB_Resume+0x96
  :: |:||   0x0800919c      0648           ldr r0, [0x080091b8]        ; [0x80091b8:4]=0x40005c40
  :: |:||   0x0800919e      0168           ldr r1, [r0]
  :: |:||   0x080091a0      4ff6ef72       movw r2, 0xffef
  :: |:||   0x080091a4      1140           ands r1, r2
  :: |:||   0x080091a6      0160           str r1, [r0]
  :: |:||   0x080091a8      0620           movs r0, 6                  ; 6
  :: |:||   0x080091aa      2070           strb r0, [r4]
  :: |:||   0x080091ac      0020           movs r0, 0
  :: |:||   0x080091ae      6060           str r0, [r4, 4]
  :: |:||   0x080091b0      10bd           pop {r4, pc}
| :: |:||      ; JMP XREF from 0x0800912e (_USB_Resume)
| :: |:|`-> 0x080091b2      0620           movs r0, 6                  ; 6
| :: |:|    0x080091b4      2070           strb r0, [r4]
| :: |:|       ; JMP XREF from 0x08009172 (USB_Resume + 82)
| :: |:|       ; JMP XREF from 0x0800919a (USB_Resume + 122)
\ :: `-`--> 0x080091b6      10bd           pop {r4, pc}
  ::  :        ; DATA XREF from 0x080090cc (USB_PowerOn)
  ::  :        ; DATA XREF from 0x080090e8 (USB_PowerOff)
  ::  :        ; DATA XREF from 0x08009108 (USB_Resume_Init)
  ::  :        ; DATA XREF from 0x0800917a (USB_Resume + 90)
  ::  :        ; DATA XREF from 0x0800919c (USB_Resume + 124)
  ::  :     0x080091b8      .dword 0x40005c40
  ::  :        ; DATA XREF from 0x080090dc (USB_PowerOn)
  ::  :     0x080091bc      .dword 0x20001990
  ::  :        ; DATA XREF from 0x08009122 (_USB_Resume)
  ::  :     0x080091c0      .dword 0x20001978
/ (fcn) USB_Standard_GetConfiguration 36
|   USB_Standard_GetConfiguration ();
| ::  :     0x080091c4      10b5           push {r4, lr}
| ::  :     0x080091c6      dff84448       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x080091ca      0028           cmp r0, 0
| ::  : ,=< 0x080091cc      04d1           bne 0x80091d8
| ::  : |   0x080091ce      0120           movs r0, 1                  ; 1
| ::  : |   0x080091d0      2168           ldr r1, [r4]
| ::  : |   0x080091d2      0882           strh r0, [r1, 0x10]
| ::  : |   0x080091d4      0020           movs r0, 0
| ::  : |   0x080091d6      10bd           pop {r4, pc}
| ::  : |      ; JMP XREF from 0x080091cc (USB_Standard_GetConfiguration)
| ::  : `-> 0x080091d8      dff83408       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| ::  :     0x080091dc      0068           ldr r0, [r0]
| ::  :     0x080091de      0068           ldr r0, [r0]
| ::  :     0x080091e0      8047           blx r0
| ::  :     0x080091e2      2068           ldr r0, [r4]
| ::  :     0x080091e4      0a30           adds r0, 0xa
\ ::  :     0x080091e6      10bd           pop {r4, pc}
/ (fcn) USB_Standard_SetConfiguration 52
|       Caller: USB_NoData_Setup0
|   USB_Standard_SetConfiguration ();
| ::  :        ; CALL XREF from 0x08009624 (USB_NoData_Setup0)
| ::  :     0x080091e8      80b5           push {r7, lr}
| ::  :     0x080091ea      dff82008       ldr.w r0, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x080091ee      0068           ldr r0, [r0]
| ::  :     0x080091f0      c178           ldrb r1, [r0, 3]
| ::  :     0x080091f2      dff82028       ldr.w r2, [0x08009a14]      ; [0x8009a14:4]=0x20000760
| ::  :     0x080091f6      5278           ldrb r2, [r2, 1]
| ::  :     0x080091f8      8a42           cmp r2, r1
| ::  : ,=< 0x080091fa      0dd3           blo 0x8009218
| ::  : |   0x080091fc      8278           ldrb r2, [r0, 2]
| ::  : |   0x080091fe      002a           cmp r2, 0
| ::  :,==< 0x08009200      0ad1           bne 0x8009218
| ::  :||   0x08009202      8288           ldrh r2, [r0, 4]
| ::  :||   0x08009204      002a           cmp r2, 0
| :: ,====< 0x08009206      07d1           bne 0x8009218
| :: |:||   0x08009208      8172           strb r1, [r0, 0xa]
| :: |:||   0x0800920a      dff80408       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| :: |:||   0x0800920e      0068           ldr r0, [r0]
| :: |:||   0x08009210      4068           ldr r0, [r0, 4]
| :: |:||   0x08009212      8047           blx r0
| :: |:||   0x08009214      0020           movs r0, 0
| :: |:||   0x08009216      02bd           pop {r1, pc}
| :: |:||      ; JMP XREF from 0x080091fa (USB_Standard_SetConfiguration)
| :: |:||      ; JMP XREF from 0x08009200 (USB_Standard_SetConfiguration)
| :: |:||      ; JMP XREF from 0x08009206 (USB_Standard_SetConfiguration)
| :: `-``-> 0x08009218      0220           movs r0, 2                  ; 2
\ ::  :     0x0800921a      02bd           pop {r1, pc}
/ (fcn) USB_Standard_GetInterface 36
|   USB_Standard_GetInterface ();
| ::  :     0x0800921c      10b5           push {r4, lr}
| ::  :     0x0800921e      dff8ec47       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x08009222      0028           cmp r0, 0
| ::  : ,=< 0x08009224      04d1           bne 0x8009230
| ::  : |   0x08009226      0120           movs r0, 1                  ; 1
| ::  : |   0x08009228      2168           ldr r1, [r4]
| ::  : |   0x0800922a      0882           strh r0, [r1, 0x10]
| ::  : |   0x0800922c      0020           movs r0, 0
| ::  : |   0x0800922e      10bd           pop {r4, pc}
| ::  : |      ; JMP XREF from 0x08009224 (USB_Standard_GetInterface)
| ::  : `-> 0x08009230      dff8dc07       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| ::  :     0x08009234      0068           ldr r0, [r0]
| ::  :     0x08009236      8068           ldr r0, [r0, 8]
| ::  :     0x08009238      8047           blx r0
| ::  :     0x0800923a      2068           ldr r0, [r4]
| ::  :     0x0800923c      0c30           adds r0, 0xc
\ ::  :     0x0800923e      10bd           pop {r4, pc}
/ (fcn) USB_Standard_SetInterface 76
|       Caller: USB_NoData_Setup0
|   USB_Standard_SetInterface ();
| ::  :        ; CALL XREF from 0x08009688 (USB_NoData_Setup0)
| ::  :     0x08009240      10b5           push {r4, lr}
| ::  :     0x08009242      dff8c847       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x08009246      2068           ldr r0, [r4]
| ::  :     0x08009248      c178           ldrb r1, [r0, 3]
| ::  :     0x0800924a      4079           ldrb r0, [r0, 5]
| ::  :     0x0800924c      dff8c827       ldr.w r2, [0x08009a18]      ; [0x8009a18:4]=0x20001914
| ::  :     0x08009250      1268           ldr r2, [r2]
| ::  :     0x08009252      9269           ldr r2, [r2, 0x18]
| ::  :     0x08009254      9047           blx r2
| ::  :     0x08009256      2168           ldr r1, [r4]
| ::  :     0x08009258      8a7a           ldrb r2, [r1, 0xa]
| ::  :     0x0800925a      002a           cmp r2, 0
| ::  : ,=< 0x0800925c      14d0           beq 0x8009288
| ::  : |   0x0800925e      0028           cmp r0, 0
| ::  :,==< 0x08009260      12d1           bne 0x8009288
| ::  :||   0x08009262      0879           ldrb r0, [r1, 4]
| ::  :||   0x08009264      0028           cmp r0, 0
| :: ,====< 0x08009266      0fd1           bne 0x8009288
| :: |:||   0x08009268      8878           ldrb r0, [r1, 2]
| :: |:||   0x0800926a      0028           cmp r0, 0
| ::,=====< 0x0800926c      0cd1           bne 0x8009288
| ::||:||   0x0800926e      dff8a007       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| ::||:||   0x08009272      0068           ldr r0, [r0]
| ::||:||   0x08009274      c068           ldr r0, [r0, 0xc]
| ::||:||   0x08009276      8047           blx r0
| ::||:||   0x08009278      2068           ldr r0, [r4]
| ::||:||   0x0800927a      4179           ldrb r1, [r0, 5]
| ::||:||   0x0800927c      c172           strb r1, [r0, 0xb]
| ::||:||   0x0800927e      2068           ldr r0, [r4]
| ::||:||   0x08009280      c178           ldrb r1, [r0, 3]
| ::||:||   0x08009282      0173           strb r1, [r0, 0xc]
| ::||:||   0x08009284      0020           movs r0, 0
| ::||:||   0x08009286      10bd           pop {r4, pc}
| ::||:||      ; JMP XREF from 0x0800925c (USB_Standard_SetInterface)
| ::||:||      ; JMP XREF from 0x08009260 (USB_Standard_SetInterface)
| ::||:||      ; JMP XREF from 0x08009266 (USB_Standard_SetInterface)
| ::||:||      ; JMP XREF from 0x0800926c (USB_Standard_SetInterface)
| ::``-``-> 0x08009288      0220           movs r0, 2                  ; 2
\ ::  :     0x0800928a      10bd           pop {r4, pc}
/ (fcn) USB_Class_Data_Setup_Maybe 170
|   USB_Class_Data_Setup_Maybe ();
| ::  :     0x0800928c      10b5           push {r4, lr}
| ::  :     0x0800928e      dff87c17       ldr.w r1, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x08009292      0968           ldr r1, [r1]
| ::  :     0x08009294      0028           cmp r0, 0
| ::  : ,=< 0x08009296      03d1           bne 0x80092a0
| ::  : |   0x08009298      0220           movs r0, 2                  ; 2
| ::  : |   0x0800929a      0882           strh r0, [r1, 0x10]
| ::  : |   0x0800929c      0020           movs r0, 0
| ::  : |   0x0800929e      10bd           pop {r4, pc}
| ::  : |      ; JMP XREF from 0x08009296 (USB_Class_Data_Setup_Maybe)
| ::  : `-> 0x080092a0      dff87847       ldr.w r4, [0x08009a1c]      ; [0x8009a1c:4]=0x20001980
| ::  :     0x080092a4      0020           movs r0, 0
| ::  :     0x080092a6      2080           strh r0, [r4]
| ::  :     0x080092a8      0878           ldrb r0, [r1]
| ::  :     0x080092aa      7f22           movs r2, 0x7f               ; 127
| ::  :     0x080092ac      1042           tst r0, r2
| ::  : ,=< 0x080092ae      1ad1           bne 0x80092e6
| ::  : |   0x080092b0      487a           ldrb r0, [r1, 9]
| ::  : |   0x080092b2      0021           movs r1, 0
| ::  : |   0x080092b4      0246           mov r2, r0
| ::  : |   0x080092b6      9206           lsls r2, r2, 0x1a
| ::  :,==< 0x080092b8      03d5           bpl 0x80092c2
| ::  :||   0x080092ba      41f00201       orr r1, r1, 2
| ::  :||   0x080092be      2170           strb r1, [r4]
| :: ,====< 0x080092c0      00e0           b 0x80092c4
| :: |:||      ; JMP XREF from 0x080092b8 (USB_Class_Data_Setup_Maybe)
| :: |:`--> 0x080092c2      2170           strb r1, [r4]
| :: |: |      ; JMP XREF from 0x080092c0 (USB_Class_Data_Setup_Maybe)
| :: `----> 0x080092c4      2178           ldrb r1, [r4]
| ::  : |   0x080092c6      4006           lsls r0, r0, 0x19
| ::  :,==< 0x080092c8      09d5           bpl 0x80092de
| ::  :||   0x080092ca      41f00100       orr r0, r1, 1
| ::  :||   0x080092ce      2070           strb r0, [r4]
| ::  :||      ; JMP XREF from 0x080092e4 (USB_Class_Data_Setup_Maybe)
| ::  :||      ; JMP XREF from 0x08009312 (USB_Class_Data_Setup_Maybe)
| ::  :||      ; JMP XREF from 0x0800931c (USB_Class_Data_Setup_Maybe)
| ::  :||      ; JMP XREF from 0x08009326 (USB_Class_Data_Setup_Maybe)
| ::  :||      ; JMP XREF from 0x08009330 (USB_Class_Data_Setup_Maybe)
| --..----> 0x080092d0      dff83c07       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| :::::||   0x080092d4      0068           ldr r0, [r0]
| :::::||   0x080092d6      0069           ldr r0, [r0, 0x10]
| :::::||   0x080092d8      8047           blx r0
| :::::||   0x080092da      2046           mov r0, r4
| :::::||   0x080092dc      10bd           pop {r4, pc}
| :::::||      ; JMP XREF from 0x080092c8 (USB_Class_Data_Setup_Maybe)
| :::::`--> 0x080092de      01f0fe00       and r0, r1, 0xfe
| ::::: |   0x080092e2      2070           strb r0, [r4]
| ========< 0x080092e4      f4e7           b 0x80092d0
| ::::: |      ; JMP XREF from 0x080092ae (USB_Class_Data_Setup_Maybe)
| ::::: `-> 0x080092e6      00f07f02       and r2, r0, 0x7f
| :::::     0x080092ea      012a           cmp r2, 1                   ; 1
| ::::: ,=< 0x080092ec      01d1           bne 0x80092f2
| ::::: |   0x080092ee      2046           mov r0, r4
| ::::: |   0x080092f0      10bd           pop {r4, pc}
| ::::: |      ; JMP XREF from 0x080092ec (USB_Class_Data_Setup_Maybe)
| ::::: `-> 0x080092f2      00f07f00       and r0, r0, 0x7f
| :::::     0x080092f6      0228           cmp r0, 2                   ; 2
| ::::: ,=< 0x080092f8      1bd1           bne 0x8009332
| ::::: |   0x080092fa      4879           ldrb r0, [r1, 5]
| ::::: |   0x080092fc      00f00f01       and r1, r0, 0xf
| ::::: |   0x08009300      dff81c27       ldr.w r2, [0x08009a20]      ; [0x8009a20:4]=0x40005c00
| ::::: |   0x08009304      0006           lsls r0, r0, 0x18
| ::::: |   0x08009306      52f82100       ldr.w r0, [r2, r1, lsl 2]
| :::::,==< 0x0800930a      08d5           bpl 0x800931e
| :::::||   0x0800930c      00f03000       and r0, r0, 0x30
| :::::||   0x08009310      1028           cmp r0, 0x10                ; 16
| ========< 0x08009312      ddd1           bne 0x80092d0
| :::::||   0x08009314      0020           movs r0, 0
| :::::||   0x08009316      40f00100       orr r0, r0, 1
| :::::||   0x0800931a      2070           strb r0, [r4]
| ========< 0x0800931c      d8e7           b 0x80092d0
| :::::||      ; JMP XREF from 0x0800930a (USB_Class_Data_Setup_Maybe)
| :::::`--> 0x0800931e      00f44050       and r0, r0, 0x3000
| ::::: |   0x08009322      b0f5805f       cmp.w r0, 0x1000
| ::`=====< 0x08009326      d3d1           bne 0x80092d0
| :: :: |   0x08009328      0020           movs r0, 0
| :: :: |   0x0800932a      40f00100       orr r0, r0, 1
| :: :: |   0x0800932e      2070           strb r0, [r4]
| :: `====< 0x08009330      cee7           b 0x80092d0
| ::  : |      ; JMP XREF from 0x080092f8 (USB_Class_Data_Setup_Maybe)
| ::  : `-> 0x08009332      0020           movs r0, 0
\ ::  :     0x08009334      10bd           pop {r4, pc}
/ (fcn) USB_Standard_ClearFeature 214
|       Caller: USB_NoData_Setup0
|   USB_Standard_ClearFeature ();
| ::  :        ; CALL XREF from 0x08009696 (USB_NoData_Setup0)
| ::  :     0x08009336      f8b5           push {r3, r4, r5, r6, r7, lr}
| ::  :     0x08009338      dff8d006       ldr.w r0, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x0800933c      0068           ldr r0, [r0]
| ::  :     0x0800933e      0178           ldrb r1, [r0]
| ::  :     0x08009340      11f07f01       ands r1, r1, 0x7f
| ::  : ,=< 0x08009344      05d1           bne 0x8009352
| ::  : |   0x08009346      417a           ldrb r1, [r0, 9]
| ::  : |   0x08009348      01f0df01       and r1, r1, 0xdf
| ::  : |   0x0800934c      4172           strb r1, [r0, 9]
| ::  : |   0x0800934e      0020           movs r0, 0
| ::  : |   0x08009350      f2bd           pop {r1, r4, r5, r6, r7, pc}
| ::  : |      ; JMP XREF from 0x08009344 (USB_Standard_ClearFeature)
| ::  : `-> 0x08009352      0229           cmp r1, 2                   ; 2
| ::  : ,=< 0x08009354      58d1           bne 0x8009408
| ::  : |   0x08009356      4188           ldrh r1, [r0, 2]
| ::  : |   0x08009358      0029           cmp r1, 0
| ::  :,==< 0x0800935a      55d1           bne 0x8009408
| ::  :||   0x0800935c      0179           ldrb r1, [r0, 4]
| ::  :||   0x0800935e      0029           cmp r1, 0
| :: ,====< 0x08009360      52d1           bne 0x8009408
| :: |:||   0x08009362      4179           ldrb r1, [r0, 5]
| :: |:||   0x08009364      21f08005       bic r5, r1, 0x80
| :: |:||   0x08009368      dff8b446       ldr.w r4, [0x08009a20]      ; [0x8009a20:4]=0x40005c00
| :: |:||   0x0800936c      0a06           lsls r2, r1, 0x18
| :: |:||   0x0800936e      54f82520       ldr.w r2, [r4, r5, lsl 2]
| ::,=====< 0x08009372      02d5           bpl 0x800937a
| ::||:||   0x08009374      02f03002       and r2, r2, 0x30
| ========< 0x08009378      01e0           b 0x800937e
| ::||:||      ; JMP XREF from 0x08009372 (USB_Standard_ClearFeature)
| ::`-----> 0x0800937a      02f44052       and r2, r2, 0x3000
| :: |:||      ; JMP XREF from 0x08009378 (USB_Standard_ClearFeature)
| --------> 0x0800937e      dff89436       ldr.w r3, [0x08009a14]      ; [0x8009a14:4]=0x20000760
| :: |:||   0x08009382      1b78           ldrb r3, [r3]
| :: |:||   0x08009384      9d42           cmp r5, r3
| ::,=====< 0x08009386      3fd2           bhs 0x8009408
| ::||:||   0x08009388      002a           cmp r2, 0
| ========< 0x0800938a      3dd0           beq 0x8009408
| ::||:||   0x0800938c      807a           ldrb r0, [r0, 0xa]
| ::||:||   0x0800938e      0028           cmp r0, 0
| ========< 0x08009390      3ad0           beq 0x8009408
| ::||:||   0x08009392      0806           lsls r0, r1, 0x18
| ::||:||   0x08009394      54f82500       ldr.w r0, [r4, r5, lsl 2]
| ========< 0x08009398      0bd5           bpl 0x80093b2
| ::||:||   0x0800939a      00f03000       and r0, r0, 0x30
| ::||:||   0x0800939e      1028           cmp r0, 0x10                ; 16
| ========< 0x080093a0      2bd1           bne 0x80093fa
| ::||:||   0x080093a2      2846           mov r0, r5
| ::||:||   0x080093a4      fdf7acff       bl USB_ClearDTOG_TX
| ::||:||   0x080093a8      3021           movs r1, 0x30               ; '0' ; 48
| ::||:||   0x080093aa      2846           mov r0, r5
| ::||:||   0x080093ac      fdf738ff       bl USB_SetEPTxStatus
| ========< 0x080093b0      23e0           b 0x80093fa
| ::||:||      ; JMP XREF from 0x08009398 (USB_Standard_ClearFeature)
| --------> 0x080093b2      00f44050       and r0, r0, 0x3000
| ::||:||   0x080093b6      b0f5805f       cmp.w r0, 0x1000
| ========< 0x080093ba      1ed1           bne 0x80093fa
| ::||:||   0x080093bc      48f28006       movw r6, 0x8080
| ::||:||   0x080093c0      4bf68f77       movw r7, 0xbf8f
| ::||:||   0x080093c4      002d           cmp r5, 0
| ========< 0x080093c6      0dd1           bne 0x80093e4
| ::||:||   0x080093c8      dff85806       ldr.w r0, [0x08009a24]      ; [0x8009a24:4]=0x200005f8
| ::||:||   0x080093cc      90f82c10       ldrb.w r1, [r0, 0x2c]
| ::||:||   0x080093d0      0020           movs r0, 0
| ::||:||   0x080093d2      fdf7e0ff       bl USB_SetEPRxCount
| ::||:||   0x080093d6      2068           ldr r0, [r4]
| ::||:||   0x080093d8      3840           ands r0, r7
| ::||:||   0x080093da      80f44050       eor r0, r0, 0x3000
| ::||:||   0x080093de      3043           orrs r0, r6
| ::||:||   0x080093e0      2060           str r0, [r4]
| ========< 0x080093e2      0ae0           b 0x80093fa
| ::||:||      ; JMP XREF from 0x080093c6 (USB_Standard_ClearFeature)
| --------> 0x080093e4      2846           mov r0, r5
| ::||:||   0x080093e6      fdf779ff       bl USB_ClearDTOG_RX
| ::||:||   0x080093ea      54f82500       ldr.w r0, [r4, r5, lsl 2]
| ::||:||   0x080093ee      3840           ands r0, r7
| ::||:||   0x080093f0      80f44050       eor r0, r0, 0x3000
| ::||:||   0x080093f4      3043           orrs r0, r6
| ::||:||   0x080093f6      44f82500       str.w r0, [r4, r5, lsl 2]
| ::||:||      ; JMP XREF from 0x080093a0 (USB_Standard_ClearFeature)
| ::||:||      ; JMP XREF from 0x080093b0 (USB_Standard_ClearFeature)
| ::||:||      ; JMP XREF from 0x080093ba (USB_Standard_ClearFeature)
| ::||:||      ; JMP XREF from 0x080093e2 (USB_Standard_ClearFeature)
| --------> 0x080093fa      dff81406       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| ::||:||   0x080093fe      0068           ldr r0, [r0]
| ::||:||   0x08009400      4069           ldr r0, [r0, 0x14]
| ::||:||   0x08009402      8047           blx r0
| ::||:||   0x08009404      0020           movs r0, 0
| ::||:||   0x08009406      f2bd           pop {r1, r4, r5, r6, r7, pc}
| ::||:||      ; XREFS: JMP 0x08009354  JMP 0x0800935a  JMP 0x08009360  JMP 0x08009386  JMP 0x0800938a  JMP 0x08009390  
| --``-``-> 0x08009408      0220           movs r0, 2                  ; 2
\ ::  :     0x0800940a      f2bd           pop {r1, r4, r5, r6, r7, pc}
/ (fcn) USB_Standard_SetEndPointFeature 126
|       Caller: USB_NoData_Setup0
|   USB_Standard_SetEndPointFeature ();
| ::  :        ; CALL XREF from 0x080096a0 (USB_NoData_Setup0)
| ::  :     0x0800940c      38b5           push {r3, r4, r5, lr}
| ::  :     0x0800940e      dff8fc05       ldr.w r0, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x08009412      0268           ldr r2, [r0]
| ::  :     0x08009414      5379           ldrb r3, [r2, 5]
| ::  :     0x08009416      23f08000       bic r0, r3, 0x80
| ::  :     0x0800941a      dff80416       ldr.w r1, [0x08009a20]      ; [0x8009a20:4]=0x40005c00
| ::  :     0x0800941e      1c06           lsls r4, r3, 0x18
| ::  :     0x08009420      51f82040       ldr.w r4, [r1, r0, lsl 2]
| ::  : ,=< 0x08009424      02d5           bpl 0x800942c
| ::  : |   0x08009426      04f03004       and r4, r4, 0x30
| ::  :,==< 0x0800942a      01e0           b 0x8009430
| ::  :||      ; JMP XREF from 0x08009424 (USB_Standard_SetEndPointFeature)
| ::  :|`-> 0x0800942c      04f44054       and r4, r4, 0x3000
| ::  :|       ; JMP XREF from 0x0800942a (USB_Standard_SetEndPointFeature)
| ::  :`--> 0x08009430      dff8e055       ldr.w r5, [0x08009a14]      ; [0x8009a14:4]=0x20000760
| ::  :     0x08009434      2d78           ldrb r5, [r5]
| ::  :     0x08009436      a842           cmp r0, r5
| ::  : ,=< 0x08009438      07d2           bhs 0x800944a
| ::  : |   0x0800943a      5588           ldrh r5, [r2, 2]
| ::  : |   0x0800943c      002d           cmp r5, 0
| ::  :,==< 0x0800943e      04d1           bne 0x800944a
| ::  :||   0x08009440      002c           cmp r4, 0
| :: ,====< 0x08009442      02d0           beq 0x800944a
| :: |:||   0x08009444      927a           ldrb r2, [r2, 0xa]
| :: |:||   0x08009446      002a           cmp r2, 0
| ::,=====< 0x08009448      01d1           bne 0x800944e
| ::||:||      ; JMP XREF from 0x08009438 (USB_Standard_SetEndPointFeature)
| ::||:||      ; JMP XREF from 0x0800943e (USB_Standard_SetEndPointFeature)
| ::||:||      ; JMP XREF from 0x08009442 (USB_Standard_SetEndPointFeature)
| ::|`-``-> 0x0800944a      0220           movs r0, 2                  ; 2
| ::| :     0x0800944c      32bd           pop {r1, r4, r5, pc}
| ::| :        ; JMP XREF from 0x08009448 (USB_Standard_SetEndPointFeature)
| ::`-----> 0x0800944e      48f28002       movw r2, 0x8080
| ::  :     0x08009452      1b06           lsls r3, r3, 0x18
| ::  :     0x08009454      51f82030       ldr.w r3, [r1, r0, lsl 2]
| ::  : ,=< 0x08009458      08d5           bpl 0x800946c
| ::  : |   0x0800945a      48f6bf74       movw r4, 0x8fbf
| ::  : |   0x0800945e      2340           ands r3, r4
| ::  : |   0x08009460      83f01003       eor r3, r3, 0x10
| ::  : |   0x08009464      1a43           orrs r2, r3
| ::  : |   0x08009466      41f82020       str.w r2, [r1, r0, lsl 2]
| ::  :,==< 0x0800946a      07e0           b 0x800947c
| ::  :||      ; JMP XREF from 0x08009458 (USB_Standard_SetEndPointFeature)
| ::  :|`-> 0x0800946c      4bf68f74       movw r4, 0xbf8f
| ::  :|    0x08009470      2340           ands r3, r4
| ::  :|    0x08009472      83f48053       eor r3, r3, 0x1000
| ::  :|    0x08009476      1a43           orrs r2, r3
| ::  :|    0x08009478      41f82020       str.w r2, [r1, r0, lsl 2]
| ::  :|       ; JMP XREF from 0x0800946a (USB_Standard_SetEndPointFeature)
| ::  :`--> 0x0800947c      dff89005       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| ::  :     0x08009480      0068           ldr r0, [r0]
| ::  :     0x08009482      8069           ldr r0, [r0, 0x18]
| ::  :     0x08009484      8047           blx r0
| ::  :     0x08009486      0020           movs r0, 0
\ ::  :     0x08009488      32bd           pop {r1, r4, r5, pc}
/ (fcn) USB_Standard_SetDeviceFeature 30
|       Caller: USB_NoData_Setup0
|   USB_Standard_SetDeviceFeature ();
| ::  :        ; CALL XREF from 0x0800965e (USB_NoData_Setup0)
| ::  :     0x0800948a      80b5           push {r7, lr}
| ::  :     0x0800948c      dff87c05       ldr.w r0, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| ::  :     0x08009490      0068           ldr r0, [r0]
| ::  :     0x08009492      417a           ldrb r1, [r0, 9]
| ::  :     0x08009494      41f02001       orr r1, r1, 0x20
| ::  :     0x08009498      4172           strb r1, [r0, 9]
| ::  :     0x0800949a      dff87405       ldr.w r0, [0x08009a10]      ; [0x8009a10:4]=0x20001918
| ::  :     0x0800949e      0068           ldr r0, [r0]
| ::  :     0x080094a0      c069           ldr r0, [r0, 0x1c]
| ::  :     0x080094a2      8047           blx r0
| ::  :     0x080094a4      0020           movs r0, 0
\ ::  :     0x080094a6      02bd           pop {r1, pc}
/ (fcn) USB_Standard_GetDescriptorData 28
|   USB_Standard_GetDescriptorData ();
| ::  :        ; XREFS: JMP 0x08009c6c  JMP 0x08009c72  JMP 0x08009c8a  JMP 0x08009c92  JMP 0x08009c9a  JMP 0x08009ca2  JMP 0x08009caa  JMP 0x08009cb2  JMP 0x08009cba  
| --..-..-> 0x080094a8      dff86025       ldr.w r2, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| :::::::   0x080094ac      1268           ldr r2, [r2]
| :::::::   0x080094ae      538a           ldrh r3, [r2, 0x12]
| :::::::   0x080094b0      0028           cmp r0, 0
| ========< 0x080094b2      04d1           bne 0x80094be
| :::::::   0x080094b4      8888           ldrh r0, [r1, 4]
| :::::::   0x080094b6      c01a           subs r0, r0, r3
| :::::::   0x080094b8      1082           strh r0, [r2, 0x10]
| :::::::   0x080094ba      0020           movs r0, 0
| :::::::   0x080094bc      7047           bx lr
| :::::::      ; JMP XREF from 0x080094b2 (USB_Standard_GetDescriptorData)
| --------> 0x080094be      0868           ldr r0, [r1]
| :::::::   0x080094c0      1818           adds r0, r3, r0
\ :::::::   0x080094c2      7047           bx lr
/ (fcn) USB_DataStageOut 162
|       Caller: USB_Out0_Process
|   USB_DataStageOut ();
| :::::::      ; CALL XREF from 0x0800997a (USB_Out0_Process)
| :::::::   0x080094c4      f8b5           push {r3, r4, r5, r6, r7, lr} ; check func
| :::::::   0x080094c6      dff84445       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| :::::::   0x080094ca      2068           ldr r0, [r4]
| :::::::   0x080094cc      00f11005       add.w r5, r0, 0x10
| :::::::   0x080094d0      2e88           ldrh r6, [r5]
| :::::::   0x080094d2      a968           ldr r1, [r5, 8]
| :::::::   0x080094d4      0800           movs r0, r1
| ========< 0x080094d6      16d0           beq 0x8009506
| :::::::   0x080094d8      002e           cmp r6, 0
| ========< 0x080094da      14d0           beq 0x8009506
| :::::::   0x080094dc      a888           ldrh r0, [r5, 4]
| :::::::   0x080094de      8642           cmp r6, r0
| ========< 0x080094e0      00d9           bls 0x80094e4
| :::::::   0x080094e2      0646           mov r6, r0
| :::::::      ; JMP XREF from 0x080094e0 (USB_DataStageOut)
| --------> 0x080094e4      3046           mov r0, r6
| :::::::   0x080094e6      8847           blx r1
| :::::::   0x080094e8      0746           mov r7, r0
| :::::::   0x080094ea      2888           ldrh r0, [r5]
| :::::::   0x080094ec      801b           subs r0, r0, r6
| :::::::   0x080094ee      2880           strh r0, [r5]
| :::::::   0x080094f0      6888           ldrh r0, [r5, 2]
| :::::::   0x080094f2      3018           adds r0, r6, r0
| :::::::   0x080094f4      6880           strh r0, [r5, 2]
| :::::::   0x080094f6      0020           movs r0, 0
| :::::::   0x080094f8      fdf73aff       bl USB_GetEPRxAddr
| :::::::   0x080094fc      3246           mov r2, r6
| :::::::   0x080094fe      0146           mov r1, r0
| :::::::   0x08009500      3846           mov r0, r7
| :::::::   0x08009502      fef734fb       bl USB_PMAToUserBufferCopy
| :::::::      ; JMP XREF from 0x080094d6 (USB_DataStageOut)
| :::::::      ; JMP XREF from 0x080094da (USB_DataStageOut)
| --------> 0x08009506      2888           ldrh r0, [r5]
| :::::::   0x08009508      0028           cmp r0, 0
| ========< 0x0800950a      0cd0           beq 0x8009526
| :::::::   0x0800950c      4ff44050       mov.w r0, 0x3000
| :::::::   0x08009510      dff81415       ldr.w r1, [0x08009a28]      ; [0x8009a28:4]=0x20001984
| :::::::   0x08009514      0880           strh r0, [r1]
| :::::::   0x08009516      0021           movs r1, 0
| :::::::   0x08009518      0846           mov r0, r1
| :::::::   0x0800951a      fdf733ff       bl USB_SetEPTxCount
| :::::::   0x0800951e      3020           movs r0, 0x30               ; '0' ; 48
| :::::::   0x08009520      dff80815       ldr.w r1, [0x08009a2c]      ; [0x8009a2c:4]=0x20001986
| :::::::   0x08009524      0880           strh r0, [r1]
| :::::::      ; JMP XREF from 0x0800950a (USB_DataStageOut)
| --------> 0x08009526      2888           ldrh r0, [r5]
| :::::::   0x08009528      a988           ldrh r1, [r5, 4]
| :::::::   0x0800952a      8842           cmp r0, r1
| ========< 0x0800952c      03d3           blo 0x8009536
| :::::::   0x0800952e      0320           movs r0, 3                  ; 3
| :::::::   0x08009530      2168           ldr r1, [r4]
| :::::::   0x08009532      0872           strb r0, [r1, 8]
| :::::::   0x08009534      f1bd           pop {r0, r4, r5, r6, r7, pc}
| :::::::      ; JMP XREF from 0x0800952c (USB_DataStageOut)
| --------> 0x08009536      0028           cmp r0, 0
| ========< 0x08009538      03d0           beq 0x8009542
| :::::::   0x0800953a      0520           movs r0, 5                  ; 5
| :::::::   0x0800953c      2168           ldr r1, [r4]
| :::::::   0x0800953e      0872           strb r0, [r1, 8]
| :::::::   0x08009540      f1bd           pop {r0, r4, r5, r6, r7, pc}
| :::::::      ; JMP XREF from 0x08009538 (USB_DataStageOut)
| --------> 0x08009542      0fd1           bne 0x8009564
| :::::::   0x08009544      0620           movs r0, 6                  ; 6
| :::::::   0x08009546      2168           ldr r1, [r4]
| :::::::   0x08009548      0872           strb r0, [r1, 8]
| :::::::   0x0800954a      0020           movs r0, 0
| :::::::   0x0800954c      dff8e014       ldr.w r1, [0x08009a30]      ; [0x8009a30:4]=0x40005c50
| :::::::   0x08009550      0968           ldr r1, [r1]
| :::::::   0x08009552      89b2           uxth r1, r1
| :::::::   0x08009554      dff8dc24       ldr.w r2, [0x08009a34]      ; [0x8009a34:4]=0x40006004
| :::::::   0x08009558      42f81100       str.w r0, [r2, r1, lsl 1]
| :::::::   0x0800955c      3020           movs r0, 0x30               ; '0' ; 48
| :::::::   0x0800955e      dff8cc14       ldr.w r1, [0x08009a2c]      ; [0x8009a2c:4]=0x20001986
| :::::::   0x08009562      0880           strh r0, [r1]
| :::::::      ; JMP XREF from 0x08009542 (USB_DataStageOut)
\ --------> 0x08009564      f1bd           pop {r0, r4, r5, r6, r7, pc}
/ (fcn) USB_DataStageIn 166
|       Caller: USB_In0_Process
|   USB_DataStageIn ();
| :::::::      ; JMP XREF from 0x0800988c (USB_Data_Setup0)
| :::::::      ; CALL XREF from 0x0800991c (USB_In0_Process)
| --------> 0x08009566      2de9f041       push.w {r4, r5, r6, r7, r8, lr} ; check func
| :::::::   0x0800956a      dff8a044       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| :::::::   0x0800956e      2068           ldr r0, [r4]
| :::::::   0x08009570      00f11006       add.w r6, r0, 0x10
| :::::::   0x08009574      3788           ldrh r7, [r6]
| :::::::   0x08009576      002f           cmp r7, 0
| ========< 0x08009578      1cd1           bne 0x80095b4
| :::::::   0x0800957a      007a           ldrb r0, [r0, 8]
| :::::::   0x0800957c      0428           cmp r0, 4                   ; 4
| ========< 0x0800957e      19d1           bne 0x80095b4
| :::::::   0x08009580      dff8a804       ldr.w r0, [0x08009a2c]      ; [0x8009a2c:4]=0x20001986
| :::::::   0x08009584      dff8b014       ldr.w r1, [0x08009a38]      ; [0x8009a38:4]=0x20001996
| :::::::   0x08009588      0a78           ldrb r2, [r1]
| :::::::   0x0800958a      002a           cmp r2, 0
| ========< 0x0800958c      0ed0           beq 0x80095ac
| :::::::   0x0800958e      0022           movs r2, 0
| :::::::   0x08009590      dff89c34       ldr.w r3, [0x08009a30]      ; [0x8009a30:4]=0x40005c50
| :::::::   0x08009594      1b68           ldr r3, [r3]
| :::::::   0x08009596      9bb2           uxth r3, r3
| :::::::   0x08009598      dff89854       ldr.w r5, [0x08009a34]      ; [0x8009a34:4]=0x40006004
| :::::::   0x0800959c      45f81320       str.w r2, [r5, r3, lsl 1]
| :::::::   0x080095a0      3022           movs r2, 0x30               ; '0' ; 48
| :::::::   0x080095a2      0280           strh r2, [r0]
| :::::::   0x080095a4      0425           movs r5, 4                  ; 4
| :::::::   0x080095a6      0020           movs r0, 0
| :::::::   0x080095a8      0870           strb r0, [r1]
| ========< 0x080095aa      2be0           b 0x8009604
| :::::::      ; JMP XREF from 0x0800958c (USB_DataStageIn)
| --------> 0x080095ac      0725           movs r5, 7                  ; 7
| :::::::   0x080095ae      1021           movs r1, 0x10               ; 16
| :::::::   0x080095b0      0180           strh r1, [r0]
| ========< 0x080095b2      27e0           b 0x8009604
| :::::::      ; JMP XREF from 0x08009578 (USB_DataStageIn)
| :::::::      ; JMP XREF from 0x0800957e (USB_DataStageIn)
| --------> 0x080095b4      b088           ldrh r0, [r6, 4]
| :::::::   0x080095b6      b842           cmp r0, r7
| ========< 0x080095b8      01d3           blo 0x80095be
| :::::::   0x080095ba      0425           movs r5, 4                  ; 4
| ========< 0x080095bc      00e0           b 0x80095c0
| :::::::      ; JMP XREF from 0x080095b8 (USB_DataStageIn)
| --------> 0x080095be      0225           movs r5, 2                  ; 2
| :::::::      ; JMP XREF from 0x080095bc (USB_DataStageIn)
| --------> 0x080095c0      8742           cmp r7, r0
| ========< 0x080095c2      00d9           bls 0x80095c6
| :::::::   0x080095c4      0746           mov r7, r0
| :::::::      ; JMP XREF from 0x080095c2 (USB_DataStageIn)
| --------> 0x080095c6      3846           mov r0, r7
| :::::::   0x080095c8      b168           ldr r1, [r6, 8]
| :::::::   0x080095ca      8847           blx r1
| :::::::   0x080095cc      8046           mov r8, r0
| :::::::   0x080095ce      0020           movs r0, 0
| :::::::   0x080095d0      fdf7c2fe       bl USB_GetEPTxAddr
| :::::::   0x080095d4      3a46           mov r2, r7
| :::::::   0x080095d6      0146           mov r1, r0
| :::::::   0x080095d8      4046           mov r0, r8
| :::::::   0x080095da      fef7b2fa       bl USB_UserToPMABufferCopy
| :::::::   0x080095de      3946           mov r1, r7
| :::::::   0x080095e0      0020           movs r0, 0
| :::::::   0x080095e2      fdf7cffe       bl USB_SetEPTxCount
| :::::::   0x080095e6      3088           ldrh r0, [r6]
| :::::::   0x080095e8      c01b           subs r0, r0, r7
| :::::::   0x080095ea      3080           strh r0, [r6]
| :::::::   0x080095ec      7088           ldrh r0, [r6, 2]
| :::::::   0x080095ee      3818           adds r0, r7, r0
| :::::::   0x080095f0      7080           strh r0, [r6, 2]
| :::::::   0x080095f2      3020           movs r0, 0x30               ; '0' ; 48
| :::::::   0x080095f4      dff83414       ldr.w r1, [0x08009a2c]      ; [0x8009a2c:4]=0x20001986
| :::::::   0x080095f8      0880           strh r0, [r1]
| :::::::   0x080095fa      4ff44050       mov.w r0, 0x3000
| :::::::   0x080095fe      dff82814       ldr.w r1, [0x08009a28]      ; [0x8009a28:4]=0x20001984
| :::::::   0x08009602      0880           strh r0, [r1]
| :::::::      ; JMP XREF from 0x080095aa (USB_DataStageIn)
| :::::::      ; JMP XREF from 0x080095b2 (USB_DataStageIn)
| --------> 0x08009604      2068           ldr r0, [r4]
| :::::::   0x08009606      0572           strb r5, [r0, 8]
\ :::::::   0x08009608      bde8f081       pop.w {r4, r5, r6, r7, r8, pc}
/ (fcn) USB_NoData_Setup0 218
|       Caller: USB_Setup0_Process
|   USB_NoData_Setup0 ();
| :::::::      ; CALL XREF from 0x080098fc (USB_Setup0_Process)
| :::::::   0x0800960c      38b5           push {r3, r4, r5, lr}
| :::::::   0x0800960e      0220           movs r0, 2                  ; 2
| :::::::   0x08009610      dff8f843       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| :::::::   0x08009614      2168           ldr r1, [r4]
| :::::::   0x08009616      4d78           ldrb r5, [r1, 1]
| :::::::   0x08009618      0a78           ldrb r2, [r1]
| :::::::   0x0800961a      7f23           movs r3, 0x7f               ; 127
| :::::::   0x0800961c      1a42           tst r2, r3
| ========< 0x0800961e      2dd1           bne 0x800967c
| :::::::   0x08009620      092d           cmp r5, 9                   ; 9
| ========< 0x08009622      02d1           bne 0x800962a
| :::::::   0x08009624      fff7e0fd       bl USB_Standard_SetConfiguration
| ========< 0x08009628      3ce0           b 0x80096a4
| :::::::      ; JMP XREF from 0x08009622 (USB_NoData_Setup0)
| --------> 0x0800962a      052d           cmp r5, 5                   ; 5
| ========< 0x0800962c      0fd1           bne 0x800964e
| :::::::   0x0800962e      c878           ldrb r0, [r1, 3]
| :::::::   0x08009630      8028           cmp r0, 0x80                ; 128
| ========< 0x08009632      08da           bge 0x8009646
| :::::::   0x08009634      8878           ldrb r0, [r1, 2]
| :::::::   0x08009636      0028           cmp r0, 0
| ========< 0x08009638      05d1           bne 0x8009646
| :::::::   0x0800963a      8888           ldrh r0, [r1, 4]
| :::::::   0x0800963c      0028           cmp r0, 0
| ========< 0x0800963e      02d1           bne 0x8009646
| :::::::   0x08009640      887a           ldrb r0, [r1, 0xa]
| :::::::   0x08009642      0028           cmp r0, 0
| ========< 0x08009644      01d0           beq 0x800964a
| :::::::      ; JMP XREF from 0x08009632 (USB_NoData_Setup0)
| :::::::      ; JMP XREF from 0x08009638 (USB_NoData_Setup0)
| :::::::      ; JMP XREF from 0x0800963e (USB_NoData_Setup0)
| --------> 0x08009646      0820           movs r0, 8                  ; 8
| ========< 0x08009648      4ae0           b 0x80096e0
| :::::::      ; JMP XREF from 0x08009644 (USB_NoData_Setup0)
| --------> 0x0800964a      0020           movs r0, 0
| ========< 0x0800964c      2ae0           b 0x80096a4
| :::::::      ; JMP XREF from 0x0800962c (USB_NoData_Setup0)
| --------> 0x0800964e      032d           cmp r5, 3                   ; 3
| ========< 0x08009650      08d1           bne 0x8009664
| :::::::   0x08009652      ca78           ldrb r2, [r1, 3]
| :::::::   0x08009654      012a           cmp r2, 1                   ; 1
| ========< 0x08009656      25d1           bne 0x80096a4
| :::::::   0x08009658      8988           ldrh r1, [r1, 4]
| :::::::   0x0800965a      0029           cmp r1, 0
| ========< 0x0800965c      22d1           bne 0x80096a4
| :::::::   0x0800965e      fff714ff       bl USB_Standard_SetDeviceFeature
| ========< 0x08009662      1fe0           b 0x80096a4
| :::::::      ; JMP XREF from 0x08009650 (USB_NoData_Setup0)
| --------> 0x08009664      012d           cmp r5, 1                   ; 1
| ========< 0x08009666      1dd1           bne 0x80096a4
| :::::::   0x08009668      ca78           ldrb r2, [r1, 3]
| :::::::   0x0800966a      012a           cmp r2, 1                   ; 1
| ========< 0x0800966c      1ad1           bne 0x80096a4
| :::::::   0x0800966e      8a88           ldrh r2, [r1, 4]
| :::::::   0x08009670      002a           cmp r2, 0
| ========< 0x08009672      17d1           bne 0x80096a4
| :::::::   0x08009674      497a           ldrb r1, [r1, 9]
| :::::::   0x08009676      8906           lsls r1, r1, 0x1a
| ========< 0x08009678      0dd4           bmi 0x8009696
| ========< 0x0800967a      13e0           b 0x80096a4
| :::::::      ; JMP XREF from 0x0800961e (USB_NoData_Setup0)
| --------> 0x0800967c      02f07f01       and r1, r2, 0x7f
| :::::::   0x08009680      0129           cmp r1, 1                   ; 1
| ========< 0x08009682      04d1           bne 0x800968e
| :::::::   0x08009684      0b2d           cmp r5, 0xb                 ; 11
| ========< 0x08009686      0dd1           bne 0x80096a4
| :::::::   0x08009688      fff7dafd       bl USB_Standard_SetInterface
| ========< 0x0800968c      0ae0           b 0x80096a4
| :::::::      ; JMP XREF from 0x08009682 (USB_NoData_Setup0)
| --------> 0x0800968e      0229           cmp r1, 2                   ; 2
| ========< 0x08009690      08d1           bne 0x80096a4
| :::::::   0x08009692      012d           cmp r5, 1                   ; 1
| ========< 0x08009694      02d1           bne 0x800969c
| :::::::      ; JMP XREF from 0x08009678 (USB_NoData_Setup0)
| --------> 0x08009696      fff74efe       bl USB_Standard_ClearFeature
| ========< 0x0800969a      03e0           b 0x80096a4
| :::::::      ; JMP XREF from 0x08009694 (USB_NoData_Setup0)
| --------> 0x0800969c      032d           cmp r5, 3                   ; 3
| ========< 0x0800969e      01d1           bne 0x80096a4
| :::::::   0x080096a0      fff7b4fe       bl USB_Standard_SetEndPointFeature
| :::::::      ; XREFS: JMP 0x08009628  JMP 0x0800964c  JMP 0x08009656  JMP 0x0800965c  JMP 0x08009662  JMP 0x08009666  JMP 0x0800966c  JMP 0x08009672  JMP 0x0800967a  
| :::::::      ; XREFS: JMP 0x08009686  JMP 0x0800968c  JMP 0x08009690  JMP 0x0800969a  JMP 0x0800969e  
| --------> 0x080096a4      0028           cmp r0, 0
| ========< 0x080096a6      09d0           beq 0x80096bc
| :::::::   0x080096a8      2846           mov r0, r5
| :::::::   0x080096aa      dff86c13       ldr.w r1, [0x08009a18]      ; [0x8009a18:4]=0x20001914
| :::::::   0x080096ae      0968           ldr r1, [r1]
| :::::::   0x080096b0      4969           ldr r1, [r1, 0x14]
| :::::::   0x080096b2      8847           blx r1
| :::::::   0x080096b4      0328           cmp r0, 3                   ; 3
| ========< 0x080096b6      01d1           bne 0x80096bc
| :::::::   0x080096b8      0920           movs r0, 9                  ; 9
| ========< 0x080096ba      11e0           b 0x80096e0
| :::::::      ; JMP XREF from 0x080096a6 (USB_NoData_Setup0)
| :::::::      ; JMP XREF from 0x080096b6 (USB_NoData_Setup0)
| --------> 0x080096bc      0028           cmp r0, 0
| ========< 0x080096be      01d0           beq 0x80096c4
| :::::::   0x080096c0      0820           movs r0, 8                  ; 8
| ========< 0x080096c2      0de0           b 0x80096e0
| :::::::      ; JMP XREF from 0x080096be (USB_NoData_Setup0)
| --------> 0x080096c4      0620           movs r0, 6                  ; 6
| :::::::   0x080096c6      0021           movs r1, 0
| :::::::   0x080096c8      dff86423       ldr.w r2, [0x08009a30]      ; [0x8009a30:4]=0x40005c50
| :::::::   0x080096cc      1268           ldr r2, [r2]
| :::::::   0x080096ce      92b2           uxth r2, r2
| :::::::   0x080096d0      dff86033       ldr.w r3, [0x08009a34]      ; [0x8009a34:4]=0x40006004
| :::::::   0x080096d4      43f81210       str.w r1, [r3, r2, lsl 1]
| :::::::   0x080096d8      3021           movs r1, 0x30               ; '0' ; 48
| :::::::   0x080096da      dff85023       ldr.w r2, [0x08009a2c]      ; [0x8009a2c:4]=0x20001986
| :::::::   0x080096de      1180           strh r1, [r2]
| :::::::      ; JMP XREF from 0x08009648 (USB_NoData_Setup0)
| :::::::      ; JMP XREF from 0x080096ba (USB_NoData_Setup0)
| :::::::      ; JMP XREF from 0x080096c2 (USB_NoData_Setup0)
| --------> 0x080096e0      2168           ldr r1, [r4]
| :::::::   0x080096e2      0872           strb r0, [r1, 8]
\ :::::::   0x080096e4      31bd           pop {r0, r4, r5, pc}
/ (fcn) USB_Data_Setup0 604
|       Caller: USB_Setup0_Process
|   USB_Data_Setup0 ();
| :::::::      ; CALL XREF from 0x08009902 (USB_Setup0_Process)
| :::::::   0x080096e6      38b5           push {r3, r4, r5, lr}
| :::::::   0x080096e8      dff82043       ldr.w r4, [0x08009a0c]      ; [0x8009a0c:4]=0x20001910
| :::::::   0x080096ec      2068           ldr r0, [r4]
| :::::::   0x080096ee      4178           ldrb r1, [r0, 1]
| :::::::   0x080096f0      0025           movs r5, 0
| :::::::   0x080096f2      0629           cmp r1, 6                   ; 6
| ========< 0x080096f4      16d1           bne 0x8009724
| :::::::   0x080096f6      0178           ldrb r1, [r0]
| :::::::   0x080096f8      7f22           movs r2, 0x7f               ; 127
| :::::::   0x080096fa      1142           tst r1, r2
| ========< 0x080096fc      79d1           bne 0x80097f2
| :::::::   0x080096fe      8078           ldrb r0, [r0, 2]
| :::::::   0x08009700      0128           cmp r0, 1                   ; 1
| ========< 0x08009702      03d1           bne 0x800970c
| :::::::   0x08009704      c448           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x08009706      0068           ldr r0, [r0]
| :::::::   0x08009708      c569           ldr r5, [r0, 0x1c]
| ========< 0x0800970a      72e0           b 0x80097f2
| :::::::      ; JMP XREF from 0x08009702 (USB_Data_Setup0)
| --------> 0x0800970c      0228           cmp r0, 2                   ; 2
| ========< 0x0800970e      03d1           bne 0x8009718
| :::::::   0x08009710      c148           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x08009712      0068           ldr r0, [r0]
| :::::::   0x08009714      056a           ldr r5, [r0, 0x20]
| ========< 0x08009716      6ce0           b 0x80097f2
| :::::::      ; JMP XREF from 0x0800970e (USB_Data_Setup0)
| --------> 0x08009718      0328           cmp r0, 3                   ; 3
| ========< 0x0800971a      6ad1           bne 0x80097f2
| :::::::   0x0800971c      be48           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x0800971e      0068           ldr r0, [r0]
| :::::::   0x08009720      456a           ldr r5, [r0, 0x24]
| ========< 0x08009722      66e0           b 0x80097f2
| :::::::      ; JMP XREF from 0x080096f4 (USB_Data_Setup0)
| --------> 0x08009724      0029           cmp r1, 0
| ========< 0x08009726      40d1           bne 0x80097aa
| :::::::   0x08009728      4288           ldrh r2, [r0, 2]
| :::::::   0x0800972a      002a           cmp r2, 0
| ========< 0x0800972c      3dd1           bne 0x80097aa
| :::::::   0x0800972e      c288           ldrh r2, [r0, 6]
| :::::::   0x08009730      022a           cmp r2, 2                   ; 2
| ========< 0x08009732      3ad1           bne 0x80097aa
| :::::::   0x08009734      0279           ldrb r2, [r0, 4]
| :::::::   0x08009736      002a           cmp r2, 0
| ========< 0x08009738      37d1           bne 0x80097aa
| :::::::   0x0800973a      0178           ldrb r1, [r0]
| :::::::   0x0800973c      7f22           movs r2, 0x7f               ; 127
| :::::::   0x0800973e      1142           tst r1, r2
| ========< 0x08009740      04d1           bne 0x800974c
| :::::::   0x08009742      8288           ldrh r2, [r0, 4]
| :::::::   0x08009744      002a           cmp r2, 0
| ========< 0x08009746      01d1           bne 0x800974c
| :::::::   0x08009748      bc4d           ldr r5, [0x08009a3c]        ; [0x8009a3c:4]=0x800928d
| ========< 0x0800974a      52e0           b 0x80097f2
| :::::::      ; JMP XREF from 0x08009740 (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x08009746 (USB_Data_Setup0)
| --------> 0x0800974c      01f07f02       and r2, r1, 0x7f
| :::::::   0x08009750      012a           cmp r2, 1                   ; 1
| ========< 0x08009752      0dd1           bne 0x8009770
| :::::::   0x08009754      2946           mov r1, r5
| :::::::   0x08009756      4079           ldrb r0, [r0, 5]
| :::::::   0x08009758      af4a           ldr r2, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x0800975a      1268           ldr r2, [r2]
| :::::::   0x0800975c      9269           ldr r2, [r2, 0x18]
| :::::::   0x0800975e      9047           blx r2
| :::::::   0x08009760      0028           cmp r0, 0
| ========< 0x08009762      46d1           bne 0x80097f2
| :::::::   0x08009764      2068           ldr r0, [r4]
| :::::::   0x08009766      807a           ldrb r0, [r0, 0xa]
| :::::::   0x08009768      0028           cmp r0, 0
| ========< 0x0800976a      42d0           beq 0x80097f2
| :::::::   0x0800976c      b34d           ldr r5, [0x08009a3c]        ; [0x8009a3c:4]=0x800928d
| ========< 0x0800976e      40e0           b 0x80097f2
| :::::::      ; JMP XREF from 0x08009752 (USB_Data_Setup0)
| --------> 0x08009770      01f07f01       and r1, r1, 0x7f
| :::::::   0x08009774      0229           cmp r1, 2                   ; 2
| ========< 0x08009776      3cd1           bne 0x80097f2
| :::::::   0x08009778      4079           ldrb r0, [r0, 5]
| :::::::   0x0800977a      00f00f01       and r1, r0, 0xf
| :::::::   0x0800977e      00f07002       and r2, r0, 0x70
| :::::::   0x08009782      a74b           ldr r3, [0x08009a20]        ; [0x8009a20:4]=0x40005c00
| :::::::   0x08009784      0006           lsls r0, r0, 0x18
| :::::::   0x08009786      53f82100       ldr.w r0, [r3, r1, lsl 2]
| ========< 0x0800978a      02d5           bpl 0x8009792
| :::::::   0x0800978c      00f03000       and r0, r0, 0x30
| ========< 0x08009790      01e0           b 0x8009796
| :::::::      ; JMP XREF from 0x0800978a (USB_Data_Setup0)
| --------> 0x08009792      00f44050       and r0, r0, 0x3000
| :::::::      ; JMP XREF from 0x08009790 (USB_Data_Setup0)
| --------> 0x08009796      9f4b           ldr r3, [0x08009a14]        ; [0x8009a14:4]=0x20000760
| :::::::   0x08009798      1b78           ldrb r3, [r3]
| :::::::   0x0800979a      9942           cmp r1, r3
| ========< 0x0800979c      29d2           bhs 0x80097f2
| :::::::   0x0800979e      002a           cmp r2, 0
| ========< 0x080097a0      27d1           bne 0x80097f2
| :::::::   0x080097a2      0028           cmp r0, 0
| ========< 0x080097a4      25d0           beq 0x80097f2
| :::::::   0x080097a6      a54d           ldr r5, [0x08009a3c]        ; [0x8009a3c:4]=0x800928d
| ========< 0x080097a8      23e0           b 0x80097f2
| :::::::      ; JMP XREF from 0x08009726 (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x0800972c (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x08009732 (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x08009738 (USB_Data_Setup0)
| --------> 0x080097aa      0829           cmp r1, 8                   ; 8
| ========< 0x080097ac      05d1           bne 0x80097ba
| :::::::   0x080097ae      0078           ldrb r0, [r0]
| :::::::   0x080097b0      7f21           movs r1, 0x7f               ; 127
| :::::::   0x080097b2      0842           tst r0, r1
| ========< 0x080097b4      1dd1           bne 0x80097f2
| :::::::   0x080097b6      a24d           ldr r5, [0x08009a40]        ; [0x8009a40:4]=0x80091c5
| ========< 0x080097b8      1be0           b 0x80097f2
| :::::::      ; JMP XREF from 0x080097ac (USB_Data_Setup0)
| --------> 0x080097ba      0a29           cmp r1, 0xa                 ; 10
| ========< 0x080097bc      19d1           bne 0x80097f2
| :::::::   0x080097be      0178           ldrb r1, [r0]
| :::::::   0x080097c0      01f07f01       and r1, r1, 0x7f
| :::::::   0x080097c4      0129           cmp r1, 1                   ; 1
| ========< 0x080097c6      14d1           bne 0x80097f2
| :::::::   0x080097c8      817a           ldrb r1, [r0, 0xa]
| :::::::   0x080097ca      0029           cmp r1, 0
| ========< 0x080097cc      11d0           beq 0x80097f2
| :::::::   0x080097ce      4188           ldrh r1, [r0, 2]
| :::::::   0x080097d0      0029           cmp r1, 0
| ========< 0x080097d2      0ed1           bne 0x80097f2
| :::::::   0x080097d4      0179           ldrb r1, [r0, 4]
| :::::::   0x080097d6      0029           cmp r1, 0
| ========< 0x080097d8      0bd1           bne 0x80097f2
| :::::::   0x080097da      c188           ldrh r1, [r0, 6]
| :::::::   0x080097dc      0129           cmp r1, 1                   ; 1
| ========< 0x080097de      08d1           bne 0x80097f2
| :::::::   0x080097e0      2946           mov r1, r5
| :::::::   0x080097e2      4079           ldrb r0, [r0, 5]
| :::::::   0x080097e4      8c4a           ldr r2, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x080097e6      1268           ldr r2, [r2]
| :::::::   0x080097e8      9269           ldr r2, [r2, 0x18]
| :::::::   0x080097ea      9047           blx r2
| :::::::   0x080097ec      0028           cmp r0, 0
| ========< 0x080097ee      00d1           bne 0x80097f2
| :::::::   0x080097f0      944d           ldr r5, [0x08009a44]        ; [0x8009a44:4]=0x800921d
| :::::::      ; XREFS: JMP 0x080096fc  JMP 0x0800970a  JMP 0x08009716  JMP 0x0800971a  JMP 0x08009722  JMP 0x0800974a  JMP 0x08009762  JMP 0x0800976a  JMP 0x0800976e  
| :::::::      ; XREFS: JMP 0x08009776  JMP 0x0800979c  JMP 0x080097a0  JMP 0x080097a4  JMP 0x080097a8  JMP 0x080097b4  JMP 0x080097b8  JMP 0x080097bc  JMP 0x080097c6  
| :::::::      ; XREFS: JMP 0x080097cc  JMP 0x080097d2  JMP 0x080097d8  JMP 0x080097de  JMP 0x080097ee  
| --------> 0x080097f2      2068           ldr r0, [r4]
| :::::::   0x080097f4      2900           movs r1, r5
| ========< 0x080097f6      07d0           beq 0x8009808
| :::::::   0x080097f8      0021           movs r1, 0
| :::::::   0x080097fa      4182           strh r1, [r0, 0x12]
| :::::::   0x080097fc      2068           ldr r0, [r4]
| :::::::   0x080097fe      8561           str r5, [r0, 0x18]
| :::::::   0x08009800      0846           mov r0, r1
| :::::::   0x08009802      a847           blx r5
| :::::::   0x08009804      0020           movs r0, 0
| ========< 0x08009806      06e0           b 0x8009816
| :::::::      ; JMP XREF from 0x080097f6 (USB_Data_Setup0)
| --------> 0x08009808      4078           ldrb r0, [r0, 1]
| :::::::   0x0800980a      8349           ldr r1, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x0800980c      0968           ldr r1, [r1]
| :::::::   0x0800980e      0969           ldr r1, [r1, 0x10]
| :::::::   0x08009810      8847           blx r1
| :::::::   0x08009812      0328           cmp r0, 3                   ; 3
| ========< 0x08009814      06d0           beq 0x8009824
| :::::::      ; JMP XREF from 0x08009806 (USB_Data_Setup0)
| --------> 0x08009816      2368           ldr r3, [r4]
| :::::::   0x08009818      1a8a           ldrh r2, [r3, 0x10]
| :::::::   0x0800981a      1146           mov r1, r2
| :::::::   0x0800981c      4ff6ff75       movw r5, 0xffff
| :::::::   0x08009820      a942           cmp r1, r5
| ========< 0x08009822      03d1           bne 0x800982c
| :::::::      ; JMP XREF from 0x08009814 (USB_Data_Setup0)
| --------> 0x08009824      0920           movs r0, 9                  ; 9
| :::::::   0x08009826      2168           ldr r1, [r4]
| :::::::   0x08009828      0872           strb r0, [r1, 8]
| :::::::   0x0800982a      31bd           pop {r0, r4, r5, pc}
| :::::::      ; JMP XREF from 0x08009822 (USB_Data_Setup0)
| --------> 0x0800982c      0228           cmp r0, 2                   ; 2
| ========< 0x0800982e      01d0           beq 0x8009834
| :::::::   0x08009830      002a           cmp r2, 0
| ========< 0x08009832      02d1           bne 0x800983a
| :::::::      ; JMP XREF from 0x0800982e (USB_Data_Setup0)
| --------> 0x08009834      0820           movs r0, 8                  ; 8
| :::::::   0x08009836      1872           strb r0, [r3, 8]
| :::::::   0x08009838      31bd           pop {r0, r4, r5, pc}
| :::::::      ; JMP XREF from 0x08009832 (USB_Data_Setup0)
| --------> 0x0800983a      1878           ldrb r0, [r3]
| :::::::   0x0800983c      0006           lsls r0, r0, 0x18
| ========< 0x0800983e      26d5           bpl 0x800988e
| :::::::   0x08009840      d888           ldrh r0, [r3, 6]
| :::::::   0x08009842      0090           str r0, [sp]
| :::::::   0x08009844      009d           ldr r5, [sp]
| :::::::   0x08009846      9542           cmp r5, r2
| ========< 0x08009848      02d2           bhs 0x8009850
| :::::::   0x0800984a      0098           ldr r0, [sp]
| :::::::   0x0800984c      1882           strh r0, [r3, 0x10]
| ========< 0x0800984e      15e0           b 0x800987c
| :::::::      ; JMP XREF from 0x08009848 (USB_Data_Setup0)
| --------> 0x08009850      8242           cmp r2, r0
| ========< 0x08009852      13d2           bhs 0x800987c
| :::::::   0x08009854      7048           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x08009856      0068           ldr r0, [r0]
| :::::::   0x08009858      90f82c00       ldrb.w r0, [r0, 0x2c]
| :::::::   0x0800985c      0346           mov r3, r0
| :::::::   0x0800985e      9a42           cmp r2, r3
| ========< 0x08009860      03d2           bhs 0x800986a
| :::::::   0x08009862      0020           movs r0, 0
| :::::::   0x08009864      7449           ldr r1, [0x08009a38]        ; [0x8009a38:4]=0x20001996
| :::::::   0x08009866      0870           strb r0, [r1]
| ========< 0x08009868      08e0           b 0x800987c
| :::::::      ; JMP XREF from 0x08009860 (USB_Data_Setup0)
| --------> 0x0800986a      91fbf0f2       sdiv r2, r1, r0
| :::::::   0x0800986e      00fb1210       mls r0, r0, r2, r1
| :::::::   0x08009872      0028           cmp r0, 0
| ========< 0x08009874      02d1           bne 0x800987c
| :::::::   0x08009876      0120           movs r0, 1                  ; 1
| :::::::   0x08009878      6f49           ldr r1, [0x08009a38]        ; [0x8009a38:4]=0x20001996
| :::::::   0x0800987a      0870           strb r0, [r1]
| :::::::      ; JMP XREF from 0x0800984e (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x08009852 (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x08009868 (USB_Data_Setup0)
| :::::::      ; JMP XREF from 0x08009874 (USB_Data_Setup0)
| --------> 0x0800987c      6648           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x0800987e      0068           ldr r0, [r0]
| :::::::   0x08009880      90f82c00       ldrb.w r0, [r0, 0x2c]
| :::::::   0x08009884      2168           ldr r1, [r4]
| :::::::   0x08009886      8882           strh r0, [r1, 0x14]
| :::::::   0x08009888      bde83140       pop.w {r0, r4, r5, lr}
| ========< 0x0800988c      6be6           b USB_DataStageIn
| :::::::      ; JMP XREF from 0x0800983e (USB_Data_Setup0)
| --------> 0x0800988e      0320           movs r0, 3                  ; 3
| :::::::   0x08009890      1872           strb r0, [r3, 8]
| :::::::   0x08009892      4ff44050       mov.w r0, 0x3000
| :::::::   0x08009896      6449           ldr r1, [0x08009a28]        ; [0x8009a28:4]=0x20001984
| :::::::   0x08009898      0880           strh r0, [r1]
\ :::::::   0x0800989a      31bd           pop {r0, r4, r5, pc}
/ (fcn) USB_Setup0_Process 112
|       Caller: USB_CTR_LP
|   USB_Setup0_Process ();
| :::::::      ; CALL XREF from 0x0800a1b8 (USB_CTR_LP)
| :::::::   0x0800989c      38b5           push {r3, r4, r5, lr}
| :::::::   0x0800989e      6448           ldr r0, [0x08009a30]        ; [0x8009a30:4]=0x40005c50
| :::::::   0x080098a0      0068           ldr r0, [r0]
| :::::::   0x080098a2      80b2           uxth r0, r0
| :::::::   0x080098a4      6849           ldr r1, [0x08009a48]        ; [0x8009a48:4]=0x40006008
| :::::::   0x080098a6      31f81000       ldrh.w r0, [r1, r0, lsl 1]
| :::::::   0x080098aa      4000           lsls r0, r0, 1
| :::::::   0x080098ac      00f18045       add.w r5, r0, 0x40000000
| :::::::   0x080098b0      05f5c045       add.w r5, r5, 0x6000
| :::::::   0x080098b4      554c           ldr r4, [0x08009a0c]        ; [0x8009a0c:4]=0x20001910
| :::::::   0x080098b6      2068           ldr r0, [r4]
| :::::::   0x080098b8      017a           ldrb r1, [r0, 8]
| :::::::   0x080098ba      0929           cmp r1, 9                   ; 9
| ========< 0x080098bc      17d0           beq 0x80098ee
| :::::::   0x080098be      15f8011b       ldrb r1, [r5], 1
| :::::::   0x080098c2      0170           strb r1, [r0]
| :::::::   0x080098c4      15f8010b       ldrb r0, [r5], 1
| :::::::   0x080098c8      2168           ldr r1, [r4]
| :::::::   0x080098ca      4870           strb r0, [r1, 1]
| :::::::   0x080098cc      ad1c           adds r5, r5, 2
| :::::::   0x080098ce      35f8020b       ldrh r0, [r5], 2
| :::::::   0x080098d2      fdf795fd       bl USB_ByteSwap
| :::::::   0x080098d6      2168           ldr r1, [r4]
| :::::::   0x080098d8      4880           strh r0, [r1, 2]
| :::::::   0x080098da      ad1c           adds r5, r5, 2
| :::::::   0x080098dc      35f8020b       ldrh r0, [r5], 2
| :::::::   0x080098e0      fdf78efd       bl USB_ByteSwap
| :::::::   0x080098e4      2168           ldr r1, [r4]
| :::::::   0x080098e6      8880           strh r0, [r1, 4]
| :::::::   0x080098e8      6888           ldrh r0, [r5, 2]
| :::::::   0x080098ea      2168           ldr r1, [r4]
| :::::::   0x080098ec      c880           strh r0, [r1, 6]
| :::::::      ; JMP XREF from 0x080098bc (USB_Setup0_Process)
| --------> 0x080098ee      0120           movs r0, 1                  ; 1
| :::::::   0x080098f0      2168           ldr r1, [r4]
| :::::::   0x080098f2      0872           strb r0, [r1, 8]
| :::::::   0x080098f4      2068           ldr r0, [r4]
| :::::::   0x080098f6      c088           ldrh r0, [r0, 6]
| :::::::   0x080098f8      0028           cmp r0, 0
| ========< 0x080098fa      02d1           bne 0x8009902
| :::::::   0x080098fc      fff786fe       bl USB_NoData_Setup0
| ========< 0x08009900      01e0           b 0x8009906
| :::::::      ; JMP XREF from 0x080098fa (USB_Setup0_Process)
| --------> 0x08009902      fff7f0fe       bl USB_Data_Setup0
| :::::::      ; JMP XREF from 0x08009900 (USB_Setup0_Process)
| --------> 0x08009906      bde83140       pop.w {r0, r4, r5, lr}
\ ========< 0x0800990a      48e0           b 0x800999e                 ; USB_Out0_Process+0x40
/ (fcn) USB_In0_Process 82
|       Caller: USB_CTR_LP
|   USB_In0_Process ();
| :::::::      ; CALL XREF from 0x0800a16a (USB_CTR_LP)
| :::::::   0x0800990c      10b5           push {r4, lr}               ; check func
| :::::::   0x0800990e      3f4c           ldr r4, [0x08009a0c]        ; [0x8009a0c:4]=0x20001910
| :::::::   0x08009910      2068           ldr r0, [r4]
| :::::::   0x08009912      017a           ldrb r1, [r0, 8]
| :::::::   0x08009914      0229           cmp r1, 2                   ; 2
| ========< 0x08009916      01d0           beq 0x800991c
| :::::::   0x08009918      0429           cmp r1, 4                   ; 4
| ========< 0x0800991a      04d1           bne 0x8009926
| :::::::      ; JMP XREF from 0x08009916 (USB_In0_Process)
| --------> 0x0800991c      fff723fe       bl USB_DataStageIn
| :::::::   0x08009920      2068           ldr r0, [r4]
| :::::::   0x08009922      007a           ldrb r0, [r0, 8]
| ========< 0x08009924      16e0           b 0x8009954
| :::::::      ; JMP XREF from 0x0800991a (USB_In0_Process)
| --------> 0x08009926      0629           cmp r1, 6                   ; 6
| ========< 0x08009928      13d1           bne 0x8009952
| :::::::   0x0800992a      4178           ldrb r1, [r0, 1]
| :::::::   0x0800992c      0529           cmp r1, 5                   ; 5
| ========< 0x0800992e      0ad1           bne 0x8009946
| :::::::   0x08009930      0178           ldrb r1, [r0]
| :::::::   0x08009932      7f22           movs r2, 0x7f               ; 127
| :::::::   0x08009934      1142           tst r1, r2
| ========< 0x08009936      06d1           bne 0x8009946
| :::::::   0x08009938      c078           ldrb r0, [r0, 3]
| :::::::   0x0800993a      00f04af8       bl USB_SetDeviceAddress
| :::::::   0x0800993e      3448           ldr r0, [0x08009a10]        ; [0x8009a10:4]=0x20001918
| :::::::   0x08009940      0068           ldr r0, [r0]
| :::::::   0x08009942      006a           ldr r0, [r0, 0x20]
| :::::::   0x08009944      8047           blx r0
| :::::::      ; JMP XREF from 0x0800992e (USB_In0_Process)
| :::::::      ; JMP XREF from 0x08009936 (USB_In0_Process)
| --------> 0x08009946      3448           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x08009948      0068           ldr r0, [r0]
| :::::::   0x0800994a      8068           ldr r0, [r0, 8]
| :::::::   0x0800994c      8047           blx r0
| :::::::   0x0800994e      0820           movs r0, 8                  ; 8
| ========< 0x08009950      00e0           b 0x8009954
| :::::::      ; JMP XREF from 0x08009928 (USB_In0_Process)
| --------> 0x08009952      0820           movs r0, 8                  ; 8
| :::::::      ; JMP XREF from 0x08009924 (USB_In0_Process)
| :::::::      ; JMP XREF from 0x08009950 (USB_In0_Process)
| --------> 0x08009954      2168           ldr r1, [r4]
| :::::::   0x08009956      0872           strb r0, [r1, 8]
| :::::::   0x08009958      bde81040       pop.w {r4, lr}
\ ========< 0x0800995c      1fe0           b 0x800999e                 ; USB_Out0_Process+0x40
/ (fcn) USB_Out0_Process 116
|       Caller: USB_CTR_LP
|   USB_Out0_Process ();
| :::::::      ; CALL XREF from 0x0800a202 (USB_CTR_LP)
| :::::::   0x0800995e      10b5           push {r4, lr}
| :::::::   0x08009960      2a4c           ldr r4, [0x08009a0c]        ; [0x8009a0c:4]=0x20001910
| :::::::   0x08009962      2068           ldr r0, [r4]
| :::::::   0x08009964      007a           ldrb r0, [r0, 8]
| :::::::   0x08009966      0228           cmp r0, 2                   ; 2
| ========< 0x08009968      01d0           beq 0x800996e
| :::::::   0x0800996a      0428           cmp r0, 4                   ; 4
| ========< 0x0800996c      01d1           bne 0x8009972
| :::::::      ; JMP XREF from 0x08009968 (USB_Out0_Process)
| --------> 0x0800996e      0820           movs r0, 8                  ; 8
| ========< 0x08009970      11e0           b 0x8009996
| :::::::      ; JMP XREF from 0x0800996c (USB_Out0_Process)
| --------> 0x08009972      0328           cmp r0, 3                   ; 3
| ========< 0x08009974      01d0           beq 0x800997a
| :::::::   0x08009976      0528           cmp r0, 5                   ; 5
| ========< 0x08009978      04d1           bne 0x8009984
| :::::::      ; JMP XREF from 0x08009974 (USB_Out0_Process)
| --------> 0x0800997a      fff7a3fd       bl USB_DataStageOut
| :::::::   0x0800997e      2068           ldr r0, [r4]
| :::::::   0x08009980      007a           ldrb r0, [r0, 8]
| ========< 0x08009982      08e0           b 0x8009996
| :::::::      ; JMP XREF from 0x08009978 (USB_Out0_Process)
| --------> 0x08009984      0728           cmp r0, 7                   ; 7
| ========< 0x08009986      05d1           bne 0x8009994
| :::::::   0x08009988      2348           ldr r0, [0x08009a18]        ; [0x8009a18:4]=0x20001914
| :::::::   0x0800998a      0068           ldr r0, [r0]
| :::::::   0x0800998c      c068           ldr r0, [r0, 0xc]
| :::::::   0x0800998e      8047           blx r0
| :::::::   0x08009990      0820           movs r0, 8                  ; 8
| ========< 0x08009992      00e0           b 0x8009996
| :::::::      ; JMP XREF from 0x08009986 (USB_Out0_Process)
| --------> 0x08009994      0820           movs r0, 8                  ; 8
| :::::::      ; JMP XREF from 0x08009970 (USB_Out0_Process)
| :::::::      ; JMP XREF from 0x08009982 (USB_Out0_Process)
| :::::::      ; JMP XREF from 0x08009992 (USB_Out0_Process)
| --------> 0x08009996      2168           ldr r1, [r4]
| :::::::   0x08009998      0872           strb r0, [r1, 8]
| :::::::   0x0800999a      bde81040       pop.w {r4, lr}
| :::::::   ;-- USB_Post0_Process:
| :::::::      ; JMP XREF from 0x0800990a (USB_Setup0_Process)
| :::::::      ; JMP XREF from 0x0800995c (USB_In0_Process)
| --------> 0x0800999e      80b5           push {r7, lr}
| :::::::   0x080099a0      2048           ldr r0, [0x08009a24]        ; [0x8009a24:4]=0x200005f8
| :::::::   0x080099a2      90f82c10       ldrb.w r1, [r0, 0x2c]
| :::::::   0x080099a6      0020           movs r0, 0
| :::::::   0x080099a8      fdf7f5fc       bl USB_SetEPRxCount
| :::::::   0x080099ac      1748           ldr r0, [0x08009a0c]        ; [0x8009a0c:4]=0x20001910
| :::::::   0x080099ae      0068           ldr r0, [r0]
| :::::::   0x080099b0      017a           ldrb r1, [r0, 8]
| :::::::   0x080099b2      0829           cmp r1, 8                   ; 8
| ========< 0x080099b4      06d1           bne 0x80099c4
| :::::::   0x080099b6      4ff48051       mov.w r1, 0x1000
| :::::::   0x080099ba      1b4a           ldr r2, [0x08009a28]        ; [0x8009a28:4]=0x20001984
| :::::::   0x080099bc      1180           strh r1, [r2]
| :::::::   0x080099be      1021           movs r1, 0x10               ; 16
| :::::::   0x080099c0      1a4a           ldr r2, [0x08009a2c]        ; [0x8009a2c:4]=0x20001986
| :::::::   0x080099c2      1180           strh r1, [r2]
| :::::::      ; JMP XREF from 0x080099b4 (USB_Out0_Process)
| --------> 0x080099c4      007a           ldrb r0, [r0, 8]
| :::::::   0x080099c6      0928           cmp r0, 9                   ; 9
| ========< 0x080099c8      01d1           bne 0x80099ce
| :::::::   0x080099ca      0120           movs r0, 1                  ; 1
| :::::::   0x080099cc      02bd           pop {r1, pc}
| :::::::      ; JMP XREF from 0x080099c8 (USB_Out0_Process)
| --------> 0x080099ce      0020           movs r0, 0
\ :::::::   0x080099d0      02bd           pop {r1, pc}
/ (fcn) USB_SetDeviceAddress 58
|       Caller: USB_In0_Process USB_Port_Reset
|   USB_SetDeviceAddress ();
| :::::::      ; CALL XREF from 0x0800993a (USB_In0_Process)
| :::::::      ; CALL XREF from 0x08009b6c (USB_Port_Reset)
| :::::::   0x080099d2      70b4           push {r4, r5, r6}
| :::::::   0x080099d4      0f49           ldr r1, [0x08009a14]        ; [0x8009a14:4]=0x20000760
| :::::::   0x080099d6      0978           ldrb r1, [r1]
| :::::::   0x080099d8      0022           movs r2, 0
| :::::::   0x080099da      114c           ldr r4, [0x08009a20]        ; [0x8009a20:4]=0x40005c00
| :::::::   0x080099dc      48f68f76       movw r6, 0x8f8f
| ========< 0x080099e0      0ce0           b 0x80099fc
| :::::::      ; JMP XREF from 0x080099fe (USB_SetDeviceAddress)
| --------> 0x080099e2      1346           mov r3, r2
| :::::::   0x080099e4      dbb2           uxtb r3, r3
| :::::::   0x080099e6      54f82350       ldr.w r5, [r4, r3, lsl 2]
| :::::::   0x080099ea      3540           ands r5, r6
| :::::::   0x080099ec      1d43           orrs r5, r3
| :::::::   0x080099ee      45f40045       orr r5, r5, 0x8000
| :::::::   0x080099f2      45f08005       orr r5, r5, 0x80
| :::::::   0x080099f6      44f82350       str.w r5, [r4, r3, lsl 2]
| :::::::   0x080099fa      521c           adds r2, r2, 1
| :::::::      ; JMP XREF from 0x080099e0 (USB_SetDeviceAddress)
| --------> 0x080099fc      8a42           cmp r2, r1
| ========< 0x080099fe      f0d3           blo 0x80099e2
| :::::::   0x08009a00      40f08000       orr r0, r0, 0x80
| :::::::   0x08009a04      1149           ldr r1, [0x08009a4c]        ; [0x8009a4c:4]=0x40005c4c
| :::::::   0x08009a06      0860           str r0, [r1]
| :::::::   0x08009a08      70bc           pop {r4, r5, r6}
\ :::::::   0x08009a0a      7047           bx lr
  :::::::      ; XREFS: DATA 0x080091c6  DATA 0x080091ea  DATA 0x0800921e  DATA 0x08009242  DATA 0x0800928e  DATA 0x08009338  DATA 0x0800940e  DATA 0x0800948c  DATA 0x080094a8  
  :::::::      ; XREFS: DATA 0x080094c6  DATA 0x0800956a  DATA 0x08009610  DATA 0x080096e8  DATA 0x080098b4  DATA 0x0800990e  DATA 0x08009960  DATA 0x080099ac  
  :::::::   0x08009a0c      .dword 0x20001910
  :::::::      ; XREFS: DATA 0x080091d8  DATA 0x0800920a  DATA 0x08009230  DATA 0x0800926e  DATA 0x080092d0  DATA 0x080093fa  DATA 0x0800947c  DATA 0x0800949a  DATA 0x0800993e  
  :::::::   0x08009a10      .dword 0x20001918
  :::::::      ; DATA XREF from 0x080091f2 (USB_Standard_SetConfiguration)
  :::::::      ; DATA XREF from 0x0800937e (USB_Standard_ClearFeature)
  :::::::      ; DATA XREF from 0x08009430 (USB_Standard_SetEndPointFeature)
  :::::::      ; DATA XREF from 0x08009796 (USB_Data_Setup0)
  :::::::      ; DATA XREF from 0x080099d4 (USB_SetDeviceAddress)
  :::::::   0x08009a14      .dword 0x20000760
  :::::::      ; XREFS: DATA 0x0800924c  DATA 0x080096aa  DATA 0x08009704  DATA 0x08009710  DATA 0x0800971c  DATA 0x08009758  DATA 0x080097e4  DATA 0x0800980a  DATA 0x08009854  
  :::::::      ; XREFS: DATA 0x0800987c  DATA 0x08009946  DATA 0x08009988  
  :::::::   0x08009a18      .dword 0x20001914
  :::::::      ; DATA XREF from 0x080092a0 (USB_Class_Data_Setup_Maybe)
  :::::::   0x08009a1c      .dword 0x20001980
  :::::::      ; DATA XREF from 0x08009300 (USB_Class_Data_Setup_Maybe)
  :::::::      ; DATA XREF from 0x08009368 (USB_Standard_ClearFeature)
  :::::::      ; DATA XREF from 0x0800941a (USB_Standard_SetEndPointFeature)
  :::::::      ; DATA XREF from 0x08009782 (USB_Data_Setup0)
  :::::::      ; DATA XREF from 0x080099da (USB_SetDeviceAddress)
  :::::::   0x08009a20      .dword 0x40005c00
  :::::::      ; DATA XREF from 0x080093c8 (USB_Standard_ClearFeature)
  :::::::      ; DATA XREF from 0x080099a0 (USB_Out0_Process)
  :::::::   0x08009a24      .dword 0x200005f8
  :::::::      ; DATA XREF from 0x08009510 (USB_DataStageOut)
  :::::::      ; DATA XREF from 0x08009896 (USB_Data_Setup0)
  :::::::      ; DATA XREF from 0x080099ba (USB_Out0_Process)
  :::::::   0x08009a28      .dword 0x20001984
  :::::::      ; XREFS: DATA 0x08009520  DATA 0x0800955e  DATA 0x08009580  DATA 0x080095f4  DATA 0x080096da  DATA 0x080099c0  
  :::::::   0x08009a2c      .dword 0x20001986
  :::::::      ; DATA XREF from 0x0800954c (USB_DataStageOut)
  :::::::      ; DATA XREF from 0x08009590 (USB_DataStageIn)
  :::::::      ; DATA XREF from 0x080096c8 (USB_NoData_Setup0)
  :::::::      ; DATA XREF from 0x0800989e (USB_Setup0_Process)
  :::::::   0x08009a30      .dword 0x40005c50
  :::::::      ; DATA XREF from 0x08009554 (USB_DataStageOut)
  :::::::      ; DATA XREF from 0x08009598 (USB_DataStageIn)
  :::::::      ; DATA XREF from 0x080096d0 (USB_NoData_Setup0)
  :::::::   0x08009a34      .dword 0x40006004
  :::::::      ; DATA XREF from 0x08009584 (USB_DataStageIn)
  :::::::      ; DATA XREF from 0x08009864 (USB_Data_Setup0)
  :::::::      ; DATA XREF from 0x08009878 (USB_Data_Setup0)
  :::::::   0x08009a38      .dword 0x20001996
  :::::::      ; DATA XREF from 0x08009748 (USB_Data_Setup0)
  :::::::      ; DATA XREF from 0x0800976c (USB_Data_Setup0)
  :::::::      ; DATA XREF from 0x080097a6 (USB_Data_Setup0)
  :::::::   0x08009a3c      .dword 0x0800928d ; USB_Class_Data_Setup_Maybe
  :::::::      ; DATA XREF from 0x080097b6 (USB_Data_Setup0)
  :::::::   0x08009a40      .dword 0x080091c5 ; USB_Standard_GetConfiguration
  :::::::      ; DATA XREF from 0x080097f0 (USB_Data_Setup0)
  :::::::   0x08009a44      .dword 0x0800921d ; USB_Standard_GetInterface
  :::::::      ; DATA XREF from 0x080098a4 (USB_Setup0_Process)
  :::::::   0x08009a48      .dword 0x40006008
  :::::::      ; DATA XREF from 0x08009a04 (USB_SetDeviceAddress)
  :::::::   0x08009a4c      .dword 0x40005c4c
/ (fcn) USB_User_GetConfiguration 2
|   USB_User_GetConfiguration ();
\ :::::::   0x08009a50      7047           bx lr                       ; this is pUser_Standard_Requests.User_GetConfiguration()
  :::::::   0x08009a52      0000           movs r0, r0
/ (fcn) USB_Port_Init 30
|   USB_Port_Init ();
| :::::::   0x08009a54      80b5           push {r7, lr}               ; see usb_prop.c this is pProperty.Init()
| :::::::   0x08009a56      fbf73ef9       bl USB_Get_SerialNum
| :::::::   0x08009a5a      0020           movs r0, 0
| :::::::   0x08009a5c      a549           ldr r1, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| :::::::   0x08009a5e      0968           ldr r1, [r1]
| :::::::   0x08009a60      8872           strb r0, [r1, 0xa]
| :::::::   0x08009a62      fff72ffb       bl USB_PowerOn
| :::::::   0x08009a66      fdf781fb       bl USB_SIL_Init
| :::::::   0x08009a6a      0020           movs r0, 0
| :::::::   0x08009a6c      a249           ldr r1, [0x08009cf8]        ; [0x8009cf8:4]=0x2000198c
| :::::::   0x08009a6e      0860           str r0, [r1]
\ :::::::   0x08009a70      01bd           pop {r0, pc}
/ (fcn) USB_Port_Reset 262
|   USB_Port_Reset ();
| :::::::   0x08009a72      80b5           push {r7, lr}
| :::::::   0x08009a74      9f48           ldr r0, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| :::::::   0x08009a76      0021           movs r1, 0
| :::::::   0x08009a78      0268           ldr r2, [r0]
| :::::::   0x08009a7a      9172           strb r1, [r2, 0xa]
| :::::::   0x08009a7c      0268           ldr r2, [r0]
| :::::::   0x08009a7e      d172           strb r1, [r2, 0xb]
| :::::::   0x08009a80      9e49           ldr r1, [0x08009cfc]        ; [0x8009cfc:4]=0x800a448
| :::::::   0x08009a82      c979           ldrb r1, [r1, 7]
| :::::::   0x08009a84      0068           ldr r0, [r0]
| :::::::   0x08009a86      4172           strb r1, [r0, 9]
| :::::::   0x08009a88      0020           movs r0, 0
| :::::::   0x08009a8a      fdf7b5fb       bl USB_SetBTABLE
| :::::::   0x08009a8e      4ff40071       mov.w r1, 0x200             ; 512
| :::::::   0x08009a92      0020           movs r0, 0
| :::::::   0x08009a94      fdf7b7fb       bl USB_SetEPType
| :::::::   0x08009a98      1021           movs r1, 0x10               ; 16
| :::::::   0x08009a9a      0020           movs r0, 0
| :::::::   0x08009a9c      fdf7c0fb       bl USB_SetEPTxStatus
| :::::::   0x08009aa0      1821           movs r1, 0x18               ; 24
| :::::::   0x08009aa2      0020           movs r0, 0
| :::::::   0x08009aa4      fdf74bfc       bl USB_SetEPRxAddr
| :::::::   0x08009aa8      5821           movs r1, 0x58               ; 'X' ; 88
| :::::::   0x08009aaa      0020           movs r0, 0
| :::::::   0x08009aac      fdf73afc       bl USB_SetEPTxAddr
| :::::::   0x08009ab0      0020           movs r0, 0
| :::::::   0x08009ab2      fdf705fc       bl USB_ClearEP_KIND
| :::::::   0x08009ab6      9248           ldr r0, [0x08009d00]        ; [0x8009d00:4]=0x200005f8
| :::::::   0x08009ab8      90f82c10       ldrb.w r1, [r0, 0x2c]
| :::::::   0x08009abc      0020           movs r0, 0
| :::::::   0x08009abe      fdf76afc       bl USB_SetEPRxCount
| :::::::   0x08009ac2      0020           movs r0, 0
| :::::::   0x08009ac4      fdf7ecfb       bl USB_SetEPRxValid
| :::::::   0x08009ac8      4ff4c061       mov.w r1, 0x600             ; 1536
| :::::::   0x08009acc      0120           movs r0, 1                  ; 1
| :::::::   0x08009ace      fdf79afb       bl USB_SetEPType
| :::::::   0x08009ad2      9821           movs r1, 0x98               ; 152
| :::::::   0x08009ad4      0120           movs r0, 1                  ; 1
| :::::::   0x08009ad6      fdf725fc       bl USB_SetEPTxAddr
| :::::::   0x08009ada      0821           movs r1, 8                  ; 8
| :::::::   0x08009adc      0120           movs r0, 1                  ; 1
| :::::::   0x08009ade      fdf751fc       bl USB_SetEPTxCount
| :::::::   0x08009ae2      2021           movs r1, 0x20               ; 32
| :::::::   0x08009ae4      0120           movs r0, 1                  ; 1
| :::::::   0x08009ae6      fdf79bfb       bl USB_SetEPTxStatus
| :::::::   0x08009aea      4ff48471       mov.w r1, 0x108             ; 264
| :::::::   0x08009aee      0120           movs r0, 1                  ; 1
| :::::::   0x08009af0      fdf725fc       bl USB_SetEPRxAddr
| :::::::   0x08009af4      0821           movs r1, 8                  ; 8
| :::::::   0x08009af6      0120           movs r0, 1                  ; 1
| :::::::   0x08009af8      fdf74dfc       bl USB_SetEPRxCount
| :::::::   0x08009afc      4ff44051       mov.w r1, 0x3000
| :::::::   0x08009b00      0120           movs r0, 1                  ; 1
| :::::::   0x08009b02      fdf7a5fb       bl USB_SetEPRxStatus
| :::::::   0x08009b06      4ff4c061       mov.w r1, 0x600             ; 1536
| :::::::   0x08009b0a      0220           movs r0, 2                  ; 2
| :::::::   0x08009b0c      fdf77bfb       bl USB_SetEPType
| :::::::   0x08009b10      4ff48871       mov.w r1, 0x110             ; 272
| :::::::   0x08009b14      0220           movs r0, 2                  ; 2
| :::::::   0x08009b16      fdf705fc       bl USB_SetEPTxAddr
| :::::::   0x08009b1a      1e21           movs r1, 0x1e               ; 30
| :::::::   0x08009b1c      0220           movs r0, 2                  ; 2
| :::::::   0x08009b1e      fdf731fc       bl USB_SetEPTxCount
| :::::::   0x08009b22      2021           movs r1, 0x20               ; 32
| :::::::   0x08009b24      0220           movs r0, 2                  ; 2
| :::::::   0x08009b26      fdf77bfb       bl USB_SetEPTxStatus
| :::::::   0x08009b2a      4ff4ac71       mov.w r1, 0x158             ; 344
| :::::::   0x08009b2e      0220           movs r0, 2                  ; 2
| :::::::   0x08009b30      fdf705fc       bl USB_SetEPRxAddr
| :::::::   0x08009b34      0221           movs r1, 2                  ; 2
| :::::::   0x08009b36      0846           mov r0, r1
| :::::::   0x08009b38      fdf72dfc       bl USB_SetEPRxCount
| :::::::   0x08009b3c      4ff44051       mov.w r1, 0x3000
| :::::::   0x08009b40      0220           movs r0, 2                  ; 2
| :::::::   0x08009b42      fdf785fb       bl USB_SetEPRxStatus
| :::::::   0x08009b46      4ff4c061       mov.w r1, 0x600             ; 1536
| :::::::   0x08009b4a      0320           movs r0, 3                  ; 3
| :::::::   0x08009b4c      fdf75bfb       bl USB_SetEPType
| :::::::   0x08009b50      4ff4b471       mov.w r1, 0x168             ; 360
| :::::::   0x08009b54      0320           movs r0, 3                  ; 3
| :::::::   0x08009b56      fdf7e5fb       bl USB_SetEPTxAddr
| :::::::   0x08009b5a      0121           movs r1, 1                  ; 1
| :::::::   0x08009b5c      0320           movs r0, 3                  ; 3
| :::::::   0x08009b5e      fdf711fc       bl USB_SetEPTxCount
| :::::::   0x08009b62      2021           movs r1, 0x20               ; 32
| :::::::   0x08009b64      0320           movs r0, 3                  ; 3
| :::::::   0x08009b66      fdf75bfb       bl USB_SetEPTxStatus
| :::::::   0x08009b6a      0020           movs r0, 0
| :::::::   0x08009b6c      fff731ff       bl USB_SetDeviceAddress
| :::::::   0x08009b70      0120           movs r0, 1                  ; 1
| :::::::   0x08009b72      6149           ldr r1, [0x08009cf8]        ; [0x8009cf8:4]=0x2000198c
| :::::::   0x08009b74      0860           str r0, [r1]
\ :::::::   0x08009b76      01bd           pop {r0, pc}
/ (fcn) USB_Port_SetConfiguration 18
|   USB_Port_SetConfiguration ();
| :::::::   0x08009b78      5e48           ldr r0, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910 ; see usb_prop.c
| :::::::   0x08009b7a      0068           ldr r0, [r0]
| :::::::   0x08009b7c      807a           ldrb r0, [r0, 0xa]
| :::::::   0x08009b7e      0028           cmp r0, 0
| ========< 0x08009b80      02d0           beq 0x8009b88
| :::::::   0x08009b82      0520           movs r0, 5                  ; 5
| :::::::   0x08009b84      5c49           ldr r1, [0x08009cf8]        ; [0x8009cf8:4]=0x2000198c
| :::::::   0x08009b86      0860           str r0, [r1]
| :::::::      ; JMP XREF from 0x08009b80 (USB_Port_SetConfiguration)
\ --------> 0x08009b88      7047           bx lr
/ (fcn) USB_Port_SetDeviceAddress 8
|   USB_Port_SetDeviceAddress ();
| :::::::   0x08009b8a      0420           movs r0, 4                  ; 4
| :::::::   0x08009b8c      5a49           ldr r1, [0x08009cf8]        ; [0x8009cf8:4]=0x2000198c
| :::::::   0x08009b8e      0860           str r0, [r1]
\ :::::::   0x08009b90      7047           bx lr
/ (fcn) USB_Port_Status_In 2
|   USB_Port_Status_In ();
\ :::::::   0x08009b92      7047           bx lr
/ (fcn) USB_Port_Status_Out 2
|   USB_Port_Status_Out ();
\ :::::::   0x08009b94      7047           bx lr
/ (fcn) USB_Port_Data_Setup 152
|   USB_Port_Data_Setup ();
| :::::::   0x08009b96      38b5           push {r3, r4, r5, lr}
| :::::::   0x08009b98      0021           movs r1, 0
| :::::::   0x08009b9a      564a           ldr r2, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| :::::::   0x08009b9c      1368           ldr r3, [r2]
| :::::::   0x08009b9e      1c78           ldrb r4, [r3]
| :::::::   0x08009ba0      0628           cmp r0, 6                   ; 6
| ========< 0x08009ba2      28d1           bne 0x8009bf6
| :::::::   0x08009ba4      04f07f05       and r5, r4, 0x7f
| :::::::   0x08009ba8      012d           cmp r5, 1                   ; 1
| ========< 0x08009baa      24d1           bne 0x8009bf6
| :::::::   0x08009bac      9878           ldrb r0, [r3, 2]
| :::::::   0x08009bae      2228           cmp r0, 0x22                ; '"' ; 34
| ========< 0x08009bb0      0fd1           bne 0x8009bd2
| :::::::   0x08009bb2      5879           ldrb r0, [r3, 5]
| :::::::   0x08009bb4      0028           cmp r0, 0
| ========< 0x08009bb6      03d0           beq 0x8009bc0
| :::::::   0x08009bb8      0228           cmp r0, 2                   ; 2
| ========< 0x08009bba      07d0           beq 0x8009bcc
| ========< 0x08009bbc      03d3           blo 0x8009bc6
| ========< 0x08009bbe      2be0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009bb6 (USB_Port_Data_Setup)
| --------> 0x08009bc0      0ff2d501       addw r1, pc, 0xd5
| ========< 0x08009bc4      28e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009bbc (USB_Port_Data_Setup)
| --------> 0x08009bc6      0ff2c901       addw r1, pc, 0xc9
| ========< 0x08009bca      25e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009bba (USB_Port_Data_Setup)
| --------> 0x08009bcc      0ff2d101       addw r1, pc, 0xd1
| ========< 0x08009bd0      22e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009bb0 (USB_Port_Data_Setup)
| --------> 0x08009bd2      2128           cmp r0, 0x21                ; '!' ; 33
| ========< 0x08009bd4      20d1           bne 0x8009c18
| :::::::   0x08009bd6      5879           ldrb r0, [r3, 5]
| :::::::   0x08009bd8      0028           cmp r0, 0
| ========< 0x08009bda      03d0           beq 0x8009be4
| :::::::   0x08009bdc      0228           cmp r0, 2                   ; 2
| ========< 0x08009bde      07d0           beq 0x8009bf0
| ========< 0x08009be0      03d3           blo 0x8009bea
| ========< 0x08009be2      19e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009bda (USB_Port_Data_Setup)
| --------> 0x08009be4      0ff2c901       addw r1, pc, 0xc9
| ========< 0x08009be8      16e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009be0 (USB_Port_Data_Setup)
| --------> 0x08009bea      0ff2bd01       addw r1, pc, 0xbd
| ========< 0x08009bee      13e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009bde (USB_Port_Data_Setup)
| --------> 0x08009bf0      0ff2c501       addw r1, pc, 0xc5
| ========< 0x08009bf4      10e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009ba2 (USB_Port_Data_Setup)
| :::::::      ; JMP XREF from 0x08009baa (USB_Port_Data_Setup)
| --------> 0x08009bf6      04f07f04       and r4, r4, 0x7f
| :::::::   0x08009bfa      212c           cmp r4, 0x21                ; '!' ; 33
| ========< 0x08009bfc      0cd1           bne 0x8009c18
| :::::::   0x08009bfe      0328           cmp r0, 3                   ; 3
| ========< 0x08009c00      02d0           beq 0x8009c08
| :::::::   0x08009c02      0928           cmp r0, 9                   ; 9
| ========< 0x08009c04      03d0           beq 0x8009c0e
| ========< 0x08009c06      07e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009c00 (USB_Port_Data_Setup)
| --------> 0x08009c08      0ff2d501       addw r1, pc, 0xd5
| ========< 0x08009c0c      04e0           b 0x8009c18
| :::::::      ; JMP XREF from 0x08009c04 (USB_Port_Data_Setup)
| --------> 0x08009c0e      0ff22101       addw r1, pc, 0x21
| :::::::   0x08009c12      0920           movs r0, 9                  ; 9
| :::::::   0x08009c14      3b4c           ldr r4, [0x08009d04]        ; [0x8009d04:4]=0x20001998
| :::::::   0x08009c16      2070           strb r0, [r4]
| :::::::      ; XREFS: JMP 0x08009bbe  JMP 0x08009bc4  JMP 0x08009bca  JMP 0x08009bd0  JMP 0x08009bd4  JMP 0x08009be2  JMP 0x08009be8  JMP 0x08009bee  JMP 0x08009bf4  
| :::::::      ; XREFS: JMP 0x08009bfc  JMP 0x08009c06  JMP 0x08009c0c  
| --------> 0x08009c18      0800           movs r0, r1
| ========< 0x08009c1a      01d1           bne 0x8009c20
| :::::::   0x08009c1c      0220           movs r0, 2                  ; 2
| :::::::   0x08009c1e      32bd           pop {r1, r4, r5, pc}
| :::::::      ; JMP XREF from 0x08009c1a (USB_Port_Data_Setup)
| --------> 0x08009c20      9961           str r1, [r3, 0x18]
| :::::::   0x08009c22      0020           movs r0, 0
| :::::::   0x08009c24      1268           ldr r2, [r2]
| :::::::   0x08009c26      5082           strh r0, [r2, 0x12]
| :::::::   0x08009c28      8847           blx r1                      ; call CopyRoutine (see usb_proc.c)
| :::::::   0x08009c2a      0020           movs r0, 0
\ :::::::   0x08009c2c      32bd           pop {r1, r4, r5, pc}
  :::::::   0x08009c2e      0000           movs r0, r0
/ (fcn) USB_Something 20
|   USB_Something ();
| :::::::   0x08009c30      0028           cmp r0, 0
| ========< 0x08009c32      05d1           bne 0x8009c40
| :::::::   0x08009c34      0220           movs r0, 2                  ; 2
| :::::::   0x08009c36      2f49           ldr r1, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| :::::::   0x08009c38      0968           ldr r1, [r1]
| :::::::   0x08009c3a      0882           strh r0, [r1, 0x10]
| :::::::   0x08009c3c      0020           movs r0, 0
| :::::::   0x08009c3e      7047           bx lr
| :::::::      ; JMP XREF from 0x08009c32 (USB_Something)
| --------> 0x08009c40      3148           ldr r0, [0x08009d08]        ; [0x8009d08:4]=0x20001992
\ :::::::   0x08009c42      7047           bx lr
\ :::::::   ;-- USB_Class_NoData_Setup_Wrapper:
/ (fcn) _USB_Class_NoData_Setup_Wrapper 38
|   _USB_Class_NoData_Setup_Wrapper ();
| :::::::   0x08009c44      2b49           ldr r1, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| :::::::   0x08009c46      0968           ldr r1, [r1]
| :::::::   0x08009c48      0978           ldrb r1, [r1]
| :::::::   0x08009c4a      01f07f02       and r2, r1, 0x7f
| :::::::   0x08009c4e      212a           cmp r2, 0x21                ; '!' ; 33
| ========< 0x08009c50      02d1           bne 0x8009c58
| :::::::   0x08009c52      0b28           cmp r0, 0xb                 ; 11
| ========< 0x08009c54      00d1           bne 0x8009c58
| ========< 0x08009c56      3ce0           b _USB_Class_NoData_Setup
| :::::::      ; JMP XREF from 0x08009c50 (_USB_Class_NoData_Setup_Wrapper)
| :::::::      ; JMP XREF from 0x08009c54 (_USB_Class_NoData_Setup_Wrapper)
| --------> 0x08009c58      01f07f01       and r1, r1, 0x7f
| :::::::   0x08009c5c      2129           cmp r1, 0x21                ; '!' ; 33
| ========< 0x08009c5e      02d1           bne 0x8009c66
| :::::::   0x08009c60      0a28           cmp r0, 0xa                 ; 10
| ========< 0x08009c62      00d1           bne 0x8009c66
| ========< 0x08009c64      35e0           b _USB_Class_NoData_Setup
| :::::::      ; JMP XREF from 0x08009c5e (_USB_Class_NoData_Setup_Wrapper)
| :::::::      ; JMP XREF from 0x08009c62 (_USB_Class_NoData_Setup_Wrapper)
| --------> 0x08009c66      0220           movs r0, 2                  ; 2
\ :::::::   0x08009c68      7047           bx lr
\ :::::::   ;-- USB_GetDescriptor1:
/ (fcn) _USB_GetDescriptor1 6
|   _USB_GetDescriptor1 ();
| :::::::   0x08009c6a      2849           ldr r1, [0x08009d0c]        ; [0x8009d0c:4]=0x20000720
\ ========< 0x08009c6c      fff71cbc       b.w USB_Standard_GetDescriptorData
\ :::::::   ;-- USB_GetDescriptor2:
/ (fcn) _USB_GetDescriptor2 6
|   _USB_GetDescriptor2 ();
| :::::::   0x08009c70      2749           ldr r1, [0x08009d10]        ; [0x8009d10:4]=0x20000728
\ ========< 0x08009c72      fff719bc       b.w USB_Standard_GetDescriptorData
\ :::::::   ;-- USB_Class_Data_Setup:
/ (fcn) _USB_Class_Data_Setup 14
|   _USB_Class_Data_Setup ();
| :::::::   0x08009c76      1f49           ldr r1, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| :::::::   0x08009c78      0968           ldr r1, [r1]
| :::::::   0x08009c7a      c978           ldrb r1, [r1, 3]
| :::::::   0x08009c7c      0429           cmp r1, 4                   ; 4
| ========< 0x08009c7e      01db           blt _USB_GetDescriptor3
| :::::::   0x08009c80      0020           movs r0, 0
\ :::::::   0x08009c82      7047           bx lr
\ :::::::   ;-- USB_GetDescriptor3:
/ (fcn) _USB_GetDescriptor3 10
|   _USB_GetDescriptor3 ();
| :::::::      ; JMP XREF from 0x08009c7e (_USB_Class_Data_Setup)
| --------> 0x08009c84      234a           ldr r2, [0x08009d14]        ; [0x8009d14:4]=0x20000674
| :::::::   0x08009c86      02ebc101       add.w r1, r2, r1, lsl 3
\ ========< 0x08009c8a      fff70dbc       b.w USB_Standard_GetDescriptorData
  :::::::   0x08009c8e      0000           movs r0, r0
\ :::::::   ;-- USB_GetDescriptor4:
/ (fcn) _USB_GetDescriptor4 6
|   _USB_GetDescriptor4 ();
| :::::::   0x08009c90      2149           ldr r1, [0x08009d18]        ; [0x8009d18:4]=0x20000730
\ ========< 0x08009c92      fff709bc       b.w USB_Standard_GetDescriptorData
  :::::::   0x08009c96      0000           movs r0, r0
\ :::::::   ;-- USB_GetDescriptor5:
/ (fcn) _USB_GetDescriptor5 6
|   _USB_GetDescriptor5 ();
| :::::::   0x08009c98      2049           ldr r1, [0x08009d1c]        ; [0x8009d1c:4]=0x20000740
\ ========< 0x08009c9a      fff705bc       b.w USB_Standard_GetDescriptorData
  :::::::   0x08009c9e      0000           movs r0, r0
\ :::::::   ;-- USB_GetDescriptor6:
/ (fcn) _USB_GetDescriptor6 6
|   _USB_GetDescriptor6 ();
| :::::::   0x08009ca0      1f49           ldr r1, [0x08009d20]        ; [0x8009d20:4]=0x20000750
\ ::`=====< 0x08009ca2      fff701bc       b.w USB_Standard_GetDescriptorData
  :: ::::   0x08009ca6      0000           movs r0, r0
\ :: ::::   ;-- USB_GetDescriptor7:
/ (fcn) _USB_GetDescriptor7 6
|   _USB_GetDescriptor7 ();
| :: ::::   0x08009ca8      1e49           ldr r1, [0x08009d24]        ; [0x8009d24:4]=0x20000738
\ :: `====< 0x08009caa      fff7fdbb       b.w USB_Standard_GetDescriptorData
  ::  :::   0x08009cae      0000           movs r0, r0
\ ::  :::   ;-- USB_GetDescriptor8:
/ (fcn) _USB_GetDescriptor8 6
|   _USB_GetDescriptor8 ();
| ::  :::   0x08009cb0      1d49           ldr r1, [0x08009d28]        ; [0x8009d28:4]=0x20000748
\ ::  :`==< 0x08009cb2      fff7f9bb       b.w USB_Standard_GetDescriptorData
  ::  : :   0x08009cb6      0000           movs r0, r0
\ ::  : :   ;-- USB_GetDescriptor9:
/ (fcn) _USB_GetDescriptor9 6
|   _USB_GetDescriptor9 ();
| ::  : :   0x08009cb8      1c49           ldr r1, [0x08009d2c]        ; [0x8009d2c:4]=0x20000758
\ ::  : `=< 0x08009cba      fff7f5bb       b.w USB_Standard_GetDescriptorData
/ (fcn) fcn.08009cbe 20
|   fcn.08009cbe ();
| ::  :     0x08009cbe      0029           cmp r1, 0
| ::  : ,=< 0x08009cc0      01d0           beq 0x8009cc6
| ::  : |   0x08009cc2      0220           movs r0, 2                  ; 2
| ::  : |   0x08009cc4      7047           bx lr
| ::  : |      ; JMP XREF from 0x08009cc0 (fcn.08009cbe)
| ::  : `-> 0x08009cc6      0028           cmp r0, 0
| ::  : ,=< 0x08009cc8      01d0           beq 0x8009cce
| ::  : |   0x08009cca      0220           movs r0, 2                  ; 2
| ::  : |   0x08009ccc      7047           bx lr
| ::  : |      ; JMP XREF from 0x08009cc8 (fcn.08009cbe)
| ::  : `-> 0x08009cce      0020           movs r0, 0
\ ::  :     0x08009cd0      7047           bx lr
\ ::  :     ;-- USB_Class_NoData_Setup:
/ (fcn) _USB_Class_NoData_Setup 14
|   _USB_Class_NoData_Setup ();
| ::  :        ; JMP XREF from 0x08009c56 (_USB_Class_NoData_Setup_Wrapper)
| ::  :        ; JMP XREF from 0x08009c64 (_USB_Class_NoData_Setup_Wrapper)
| --------> 0x08009cd2      0848           ldr r0, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| ::  :     0x08009cd4      0068           ldr r0, [r0]
| ::  :     0x08009cd6      c078           ldrb r0, [r0, 3]
| ::  :     0x08009cd8      1549           ldr r1, [0x08009d30]        ; [0x8009d30:4]=0x20001988
| ::  :     0x08009cda      0860           str r0, [r1]
| ::  :     0x08009cdc      0020           movs r0, 0
\ ::  :     0x08009cde      7047           bx lr
/ (fcn) USB_Something2 20
|   USB_Something2 ();
| ::  :     0x08009ce0      0028           cmp r0, 0
| ::  : ,=< 0x08009ce2      05d1           bne 0x8009cf0
| ::  : |   0x08009ce4      0120           movs r0, 1                  ; 1
| ::  : |   0x08009ce6      0349           ldr r1, [0x08009cf4]        ; [0x8009cf4:4]=0x20001910
| ::  : |   0x08009ce8      0968           ldr r1, [r1]
| ::  : |   0x08009cea      0882           strh r0, [r1, 0x10]
| ::  : |   0x08009cec      0020           movs r0, 0
| ::  : |   0x08009cee      7047           bx lr
| ::  : |      ; JMP XREF from 0x08009ce2 (USB_Something2)
| ::  : `-> 0x08009cf0      0f48           ldr r0, [0x08009d30]        ; [0x8009d30:4]=0x20001988
\ ::  :     0x08009cf2      7047           bx lr
  ::  :        ; XREFS: DATA 0x08009a5c  DATA 0x08009a74  DATA 0x08009b78  DATA 0x08009b9a  DATA 0x08009c36  DATA 0x08009c44  DATA 0x08009c76  DATA 0x08009cd2  DATA 0x08009ce6  
  ::  :     0x08009cf4      .dword 0x20001910
  ::  :        ; DATA XREF from 0x08009a6c (USB_Port_Init)
  ::  :        ; DATA XREF from 0x08009b72 (USB_Port_Reset)
  ::  :        ; DATA XREF from 0x08009b84 (USB_Port_SetConfiguration)
  ::  :        ; DATA XREF from 0x08009b8c (USB_Port_SetDeviceAddress)
  ::  :     0x08009cf8      .dword 0x2000198c
  ::  :        ; DATA XREF from 0x08009a80 (USB_Port_Reset)
  ::  :     0x08009cfc      .dword 0x0800a448
  ::  :        ; DATA XREF from 0x08009ab6 (USB_Port_Reset)
  ::  :     0x08009d00      .dword 0x200005f8
  ::  :        ; DATA XREF from 0x08009c14 (USB_Port_Data_Setup)
  ::  :     0x08009d04      .dword 0x20001998
  ::  :        ; DATA XREF from 0x08009c40 (USB_Something)
  ::  :     0x08009d08      .dword 0x20001992
  ::  :        ; DATA XREF from 0x08009c6a (_USB_GetDescriptor1)
  ::  :     0x08009d0c      .dword 0x20000720
  ::  :        ; DATA XREF from 0x08009c70 (_USB_GetDescriptor2)
  ::  :     0x08009d10      .dword 0x20000728
  ::  :        ; DATA XREF from 0x08009c84 (_USB_GetDescriptor3)
  ::  :     0x08009d14      .dword 0x20000674
  ::  :        ; DATA XREF from 0x08009c90 (_USB_GetDescriptor4)
  ::  :     0x08009d18      .dword 0x20000730
  ::  :        ; DATA XREF from 0x08009c98 (_USB_GetDescriptor5)
  ::  :     0x08009d1c      .dword 0x20000740
  ::  :        ; DATA XREF from 0x08009ca0 (_USB_GetDescriptor6)
  ::  :     0x08009d20      .dword 0x20000750
  ::  :        ; DATA XREF from 0x08009ca8 (_USB_GetDescriptor7)
  ::  :     0x08009d24      .dword 0x20000738
  ::  :        ; DATA XREF from 0x08009cb0 (_USB_GetDescriptor8)
  ::  :     0x08009d28      .dword 0x20000748
  ::  :        ; DATA XREF from 0x08009cb8 (_USB_GetDescriptor9)
  ::  :     0x08009d2c      .dword 0x20000758
  ::  :        ; DATA XREF from 0x08009cd8 (_USB_Class_NoData_Setup)
  ::  :        ; DATA XREF from 0x08009cf0 (USB_Something2)
  ::  :     0x08009d30      .dword 0x20001988
/ (fcn) NMI_Handler 2
|   NMI_Handler ();
\ ::  :     0x08009d34      7047           bx lr
/ (fcn) HardFault_Handler 2
|   HardFault_Handler ();
| ::  : |      ; JMP XREF from 0x08009d36 (HardFault_Handler)
\ ::  : `-> 0x08009d36      fee7           b HardFault_Handler
/ (fcn) MemManage_Handler 2
|   MemManage_Handler ();
| ::  : |      ; JMP XREF from 0x08009d38 (MemManage_Handler)
\ ::  : `-> 0x08009d38      fee7           b MemManage_Handler
/ (fcn) BusFault_Handler 2
|   BusFault_Handler ();
| ::  : |      ; JMP XREF from 0x08009d3a (BusFault_Handler)
\ ::  : `-> 0x08009d3a      fee7           b BusFault_Handler
/ (fcn) UsageFault_Handler 2
|   UsageFault_Handler ();
| ::  : |      ; JMP XREF from 0x08009d3c (UsageFault_Handler)
\ ::  : `-> 0x08009d3c      fee7           b UsageFault_Handler
/ (fcn) SVC_Handler 2
|   SVC_Handler ();
\ ::  :     0x08009d3e      7047           bx lr
/ (fcn) DebugMon_Handler 2
|   DebugMon_Handler ();
\ ::  :     0x08009d40      7047           bx lr
/ (fcn) PendSV_Handler 2
|   PendSV_Handler ();
\ ::  :     0x08009d42      7047           bx lr
/ (fcn) SysTick_Handler 2
|   SysTick_Handler ();
\ ::  :     0x08009d44      7047           bx lr
/ (fcn) USB_LP_IRQHandler 4
|   USB_LP_IRQHandler ();
\ ::  : ,=< 0x08009d46      00f017b9       b.w USB_Istr
/ (fcn) USB_FS_WKUP_IRQHandler 8
|   USB_FS_WKUP_IRQHandler ();
| ::  : |   0x08009d4a      4ff48020       mov.w r0, 0x40000           ; clear interrupt pending bit PR18 (EXTI_PR)
\ ::  `===< 0x08009d4e      fdf7d2b9       b.w EXTI_ClearITPendingBit
/ (fcn) EXTI15_10_IRQHandler 50
|   EXTI15_10_IRQHandler ();
| ::    |   0x08009d52      80b5           push {r7, lr}               ; handler sets a variable USB_Plugged_EXTl
| ::    |   0x08009d54      4ff48060       mov.w r0, 0x400             ; 1024 ; get PR10 status
| ::    |   0x08009d58      fdf7c5f9       bl EXTI_GetITStatus
| ::    |   0x08009d5c      0028           cmp r0, 0
| ::   ,==< 0x08009d5e      03d0           beq 0x8009d68
| ::   ||   0x08009d60      4ff48060       mov.w r0, 0x400             ; 1024
| ::   ||   0x08009d64      fdf7c7f9       bl EXTI_ClearITPendingBit   ; clear it if set
| ::   ||      ; JMP XREF from 0x08009d5e (EXTI15_10_IRQHandler)
| ::   `--> 0x08009d68      4ff40040       mov.w r0, 0x8000
| ::    |   0x08009d6c      fdf7bbf9       bl EXTI_GetITStatus         ; get PR15 status
| ::    |   0x08009d70      0028           cmp r0, 0
| ::   ,==< 0x08009d72      06d0           beq 0x8009d82
| ::   ||   0x08009d74      4ff40040       mov.w r0, 0x8000
| ::   ||   0x08009d78      fdf7bdf9       bl EXTI_ClearITPendingBit   ; clear it if set
| ::   ||   0x08009d7c      0120           movs r0, 1                  ; 1
| ::   ||   0x08009d7e      7749           ldr r1, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009d80      4876           strb r0, [r1, 0x19]         ; 0x20000781
| ::   ||      ; JMP XREF from 0x08009d72 (EXTI15_10_IRQHandler)
\ ::   `--> 0x08009d82      01bd           pop {r0, pc}
/ (fcn) EXTI9_5_IRQHandler 108
|   EXTI9_5_IRQHandler ();
| ::    |   0x08009d84      80b5           push {r7, lr}               ; handler increments a counter
| ::    |   0x08009d86      4ff40070       mov.w r0, 0x200             ; 512 ; PR9
| ::    |   0x08009d8a      fdf7acf9       bl EXTI_GetITStatus
| ::    |   0x08009d8e      0028           cmp r0, 0
| ::   ,==< 0x08009d90      07d0           beq 0x8009da2
| ::   ||   0x08009d92      4ff40070       mov.w r0, 0x200             ; 512
| ::   ||   0x08009d96      fdf7aef9       bl EXTI_ClearITPendingBit
| ::   ||   0x08009d9a      7048           ldr r0, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009d9c      c18b           ldrh r1, [r0, 0x1e]
| ::   ||   0x08009d9e      491c           adds r1, r1, 1
| ::   ||   0x08009da0      c183           strh r1, [r0, 0x1e]
| ::   ||      ; JMP XREF from 0x08009d90 (EXTI9_5_IRQHandler)
| ::   `--> 0x08009da2      4ff48070       mov.w r0, 0x100             ; 256 ; PR8
| ::    |   0x08009da6      fdf79ef9       bl EXTI_GetITStatus
| ::    |   0x08009daa      0028           cmp r0, 0
| ::   ,==< 0x08009dac      07d0           beq 0x8009dbe
| ::   ||   0x08009dae      4ff48070       mov.w r0, 0x100             ; 256
| ::   ||   0x08009db2      fdf7a0f9       bl EXTI_ClearITPendingBit
| ::   ||   0x08009db6      6948           ldr r0, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009db8      c18b           ldrh r1, [r0, 0x1e]
| ::   ||   0x08009dba      491c           adds r1, r1, 1
| ::   ||   0x08009dbc      c183           strh r1, [r0, 0x1e]
| ::   ||      ; JMP XREF from 0x08009dac (EXTI9_5_IRQHandler)
| ::   `--> 0x08009dbe      8020           movs r0, 0x80               ; 128 ; PR7
| ::    |   0x08009dc0      fdf791f9       bl EXTI_GetITStatus
| ::    |   0x08009dc4      0028           cmp r0, 0
| ::   ,==< 0x08009dc6      06d0           beq 0x8009dd6
| ::   ||   0x08009dc8      8020           movs r0, 0x80               ; 128
| ::   ||   0x08009dca      fdf794f9       bl EXTI_ClearITPendingBit
| ::   ||   0x08009dce      6348           ldr r0, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009dd0      c18b           ldrh r1, [r0, 0x1e]
| ::   ||   0x08009dd2      491c           adds r1, r1, 1
| ::   ||   0x08009dd4      c183           strh r1, [r0, 0x1e]
| ::   ||      ; JMP XREF from 0x08009dc6 (EXTI9_5_IRQHandler)
| ::   `--> 0x08009dd6      4020           movs r0, 0x40               ; '@' ; 64 ; PR6
| ::    |   0x08009dd8      fdf785f9       bl EXTI_GetITStatus
| ::    |   0x08009ddc      0028           cmp r0, 0
| ::   ,==< 0x08009dde      06d0           beq 0x8009dee
| ::   ||   0x08009de0      4020           movs r0, 0x40               ; '@' ; 64
| ::   ||   0x08009de2      fdf788f9       bl EXTI_ClearITPendingBit
| ::   ||   0x08009de6      5d48           ldr r0, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009de8      c18b           ldrh r1, [r0, 0x1e]
| ::   ||   0x08009dea      491c           adds r1, r1, 1
| ::   ||   0x08009dec      c183           strh r1, [r0, 0x1e]
| ::   ||      ; JMP XREF from 0x08009dde (EXTI9_5_IRQHandler)
\ ::   `--> 0x08009dee      01bd           pop {r0, pc}
/ (fcn) EXTI0_IRQHandler 28
|   EXTI0_IRQHandler ();
| ::    |   0x08009df0      80b5           push {r7, lr}               ; handler increments same counter as extl9_5_handler
| ::    |   0x08009df2      0120           movs r0, 1                  ; 1 ; PR0
| ::    |   0x08009df4      fdf777f9       bl EXTI_GetITStatus
| ::    |   0x08009df8      0028           cmp r0, 0
| ::   ,==< 0x08009dfa      06d0           beq 0x8009e0a
| ::   ||   0x08009dfc      0120           movs r0, 1                  ; 1
| ::   ||   0x08009dfe      fdf77af9       bl EXTI_ClearITPendingBit
| ::   ||   0x08009e02      5648           ldr r0, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009e04      c18b           ldrh r1, [r0, 0x1e]
| ::   ||   0x08009e06      491c           adds r1, r1, 1
| ::   ||   0x08009e08      c183           strh r1, [r0, 0x1e]
| ::   ||      ; JMP XREF from 0x08009dfa (EXTI0_IRQHandler)
\ ::   `--> 0x08009e0a      01bd           pop {r0, pc}
/ (fcn) DMA1_Channel7_IRQHandler 40
|   DMA1_Channel7_IRQHandler ();
| ::    |   0x08009e0c      80b5           push {r7, lr}
| ::    |   0x08009e0e      4ff00070       mov.w r0, 0x2000000
| ::    |   0x08009e12      fdf7bcfc       bl DMA_GetITStatus          ; get status of DMA1_IT_TC7
| ::    |   0x08009e16      0028           cmp r0, 0
| ::   ,==< 0x08009e18      0bd0           beq 0x8009e32
| ::   ||   0x08009e1a      4ff00070       mov.w r0, 0x2000000
| ::   ||   0x08009e1e      fdf7c3fc       bl DMA_ClearITPendingBit
| ::   ||   0x08009e22      0021           movs r1, 0
| ::   ||   0x08009e24      4e48           ldr r0, [0x08009f60]        ; [0x8009f60:4]=0x40026080
| ::   ||   0x08009e26      fdf792fc       bl DMA_Cmd                  ; disables channel (possibly to update DMA_CNDTRx)
| ::   ||   0x08009e2a      0120           movs r0, 1                  ; 1
| ::   ||   0x08009e2c      4b49           ldr r1, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009e2e      81f86300       strb.w r0, [r1, 0x63]
| ::   ||      ; JMP XREF from 0x08009e18 (DMA1_Channel7_IRQHandler)
\ ::   `--> 0x08009e32      01bd           pop {r0, pc}
/ (fcn) USART2_IRQHandler 66
|   USART2_IRQHandler ();
| ::    |   0x08009e34      38b5           push {r3, r4, r5, lr}
| ::    |   0x08009e36      4b4c           ldr r4, [0x08009f64]        ; [0x8009f64:4]=0x40004400
| ::    |   0x08009e38      40f22665       movw r5, 0x626              ; 1574 ; USART_IT_TC
| ::    |   0x08009e3c      2946           mov r1, r5
| ::    |   0x08009e3e      2046           mov r0, r4
| ::    |   0x08009e40      fdf7c8fb       bl USART_GetITStatus
| ::    |   0x08009e44      0128           cmp r0, 1                   ; 1
| ::   ,==< 0x08009e46      07d1           bne 0x8009e58
| ::   ||   0x08009e48      4021           movs r1, 0x40               ; '@' ; 64
| ::   ||   0x08009e4a      2046           mov r0, r4
| ::   ||   0x08009e4c      fdf7bffb       bl USART_ClearFlag
| ::   ||   0x08009e50      2946           mov r1, r5
| ::   ||   0x08009e52      2046           mov r0, r4
| ::   ||   0x08009e54      fdf7e2fb       bl USART_ClearITPendingBit
| ::   ||      ; JMP XREF from 0x08009e46 (USART2_IRQHandler)
| ::   `--> 0x08009e58      40f22441       movw r1, 0x424              ; 1060 ; USART_IT_IDLE
| ::    |   0x08009e5c      2046           mov r0, r4
| ::    |   0x08009e5e      fdf7b9fb       bl USART_GetITStatus
| ::    |   0x08009e62      0028           cmp r0, 0
| ::   ,==< 0x08009e64      06d0           beq 0x8009e74
| ::   ||   0x08009e66      fbf73afb       bl _USART2_RxMemInit
| ::   ||   0x08009e6a      2046           mov r0, r4
| ::   ||   0x08009e6c      bde83240       pop.w {r1, r4, r5, lr}
| ========< 0x08009e70      fdf782bb       b.w USART_ReceiveData
| ::   ||      ; JMP XREF from 0x08009e64 (USART2_IRQHandler)
\ ::   `--> 0x08009e74      31bd           pop {r0, r4, r5, pc}
/ (fcn) DMA1_Channel2_IRQHandler 30
|   DMA1_Channel2_IRQHandler ();
| ::    |   0x08009e76      80b5           push {r7, lr}
| ::    |   0x08009e78      2020           movs r0, 0x20               ; 32
| ::    |   0x08009e7a      fdf788fc       bl DMA_GetITStatus          ; get status of DMA1_IT_TC2
| ::    |   0x08009e7e      0028           cmp r0, 0
| ::   ,==< 0x08009e80      08d0           beq 0x8009e94
| ::   ||   0x08009e82      2020           movs r0, 0x20               ; 32
| ::   ||   0x08009e84      fdf790fc       bl DMA_ClearITPendingBit
| ::   ||   0x08009e88      0021           movs r1, 0
| ::   ||   0x08009e8a      3748           ldr r0, [0x08009f68]        ; [0x8009f68:4]=0x4002601c
| ::   ||   0x08009e8c      bde80440       pop.w {r2, lr}
\ ========< 0x08009e90      fdf75dbc       b.w DMA_Cmd                 ; disable dma1channel2
  ::   ||      ; JMP XREF from 0x08009e80 (DMA1_Channel2_IRQHandler)
  ::   `--> 0x08009e94      01bd           pop {r0, pc}
/ (fcn) USART3_IRQHandler 66
|   USART3_IRQHandler ();
| ::    |   0x08009e96      38b5           push {r3, r4, r5, lr}
| ::    |   0x08009e98      344c           ldr r4, [0x08009f6c]        ; [0x8009f6c:4]=0x40004800
| ::    |   0x08009e9a      40f22665       movw r5, 0x626              ; 1574 ; USART_IT_TC
| ::    |   0x08009e9e      2946           mov r1, r5
| ::    |   0x08009ea0      2046           mov r0, r4
| ::    |   0x08009ea2      fdf797fb       bl USART_GetITStatus
| ::    |   0x08009ea6      0128           cmp r0, 1                   ; 1
| ::   ,==< 0x08009ea8      07d1           bne 0x8009eba
| ::   ||   0x08009eaa      4021           movs r1, 0x40               ; '@' ; 64
| ::   ||   0x08009eac      2046           mov r0, r4
| ::   ||   0x08009eae      fdf78efb       bl USART_ClearFlag
| ::   ||   0x08009eb2      2946           mov r1, r5
| ::   ||   0x08009eb4      2046           mov r0, r4
| ::   ||   0x08009eb6      fdf7b1fb       bl USART_ClearITPendingBit
| ::   ||      ; JMP XREF from 0x08009ea8 (USART3_IRQHandler)
| ::   `--> 0x08009eba      40f22441       movw r1, 0x424              ; 1060 ; USART_IT_IDLE
| ::    |   0x08009ebe      2046           mov r0, r4
| ::    |   0x08009ec0      fdf788fb       bl USART_GetITStatus
| ::    |   0x08009ec4      0028           cmp r0, 0
| ::   ,==< 0x08009ec6      06d0           beq 0x8009ed6
| ::   ||   0x08009ec8      fbf730fb       bl _USART3_RxMemInit
| ::   ||   0x08009ecc      2046           mov r0, r4
| ::   ||   0x08009ece      bde83240       pop.w {r1, r4, r5, lr}
| ========< 0x08009ed2      fdf751bb       b.w USART_ReceiveData
| ::   ||      ; JMP XREF from 0x08009ec6 (USART3_IRQHandler)
\ ::   `--> 0x08009ed6      31bd           pop {r0, r4, r5, pc}
/ (fcn) TIM4_IRQHandler 130
|   TIM4_IRQHandler ();
| ::    |   0x08009ed8      38b5           push {r3, r4, r5, lr}
| ::    |   0x08009eda      254c           ldr r4, [0x08009f70]        ; [0x8009f70:4]=0x40000800
| ::    |   0x08009edc      0121           movs r1, 1                  ; 1 ; TIM_IT_Update
| ::    |   0x08009ede      2046           mov r0, r4
| ::    |   0x08009ee0      fdf7e7fd       bl TIM_GetITStatus
| ::    |   0x08009ee4      0128           cmp r0, 1                   ; 1
| ::   ,==< 0x08009ee6      37d1           bne 0x8009f58
| ::   ||   0x08009ee8      0121           movs r1, 1                  ; 1
| ::   ||   0x08009eea      2046           mov r0, r4
| ::   ||   0x08009eec      fdf7edfd       bl TIM_ClearITPendingBit
| ::   ||   0x08009ef0      1a48           ldr r0, [0x08009f5c]        ; [0x8009f5c:4]=0x20000768
| ::   ||   0x08009ef2      00f14c01       add.w r1, r0, 0x4c
| ::   ||   0x08009ef6      0a69           ldr r2, [r1, 0x10]
| ::   ||   0x08009ef8      521c           adds r2, r2, 1
| ::   ||   0x08009efa      0a61           str r2, [r1, 0x10]          ; increment counter @ 7c4
| ::   ||   0x08009efc      12f1004f       cmn.w r2, -0x80000000
| ::  ,===< 0x08009f00      01d3           blo 0x8009f06
| ::  |||   0x08009f02      0022           movs r2, 0
| ::  |||   0x08009f04      0a61           str r2, [r1, 0x10]
| ::  |||      ; JMP XREF from 0x08009f00 (TIM4_IRQHandler)
| ::  `---> 0x08009f06      1b4a           ldr r2, [0x08009f74]        ; [0x8009f74:4]=0x200017a8
| ::   ||   0x08009f08      02f1e403       add.w r3, r2, 0xe4
| ::   ||   0x08009f0c      5c7a           ldrb r4, [r3, 9]            ; @1895
| ::   ||   0x08009f0e      002c           cmp r4, 0
| ::  ,===< 0x08009f10      0cd0           beq 0x8009f2c
| ::  |||   0x08009f12      d2f8e440       ldr.w r4, [r2, 0xe4]
| ::  |||   0x08009f16      4ef66025       movw r5, 0xea60
| ::  |||   0x08009f1a      ac42           cmp r4, r5
| :: ,====< 0x08009f1c      06d2           bhs 0x8009f2c
| :: ||||   0x08009f1e      641c           adds r4, r4, 1
| :: ||||   0x08009f20      c2f8e440       str.w r4, [r2, 0xe4]
| :: ||||   0x08009f24      ac42           cmp r4, r5
| ::,=====< 0x08009f26      01d3           blo 0x8009f2c
| ::|||||   0x08009f28      0122           movs r2, 1                  ; 1
| ::|||||   0x08009f2a      9a71           strb r2, [r3, 6]            ; @1892
| ::|||||      ; JMP XREF from 0x08009f10 (TIM4_IRQHandler)
| ::|||||      ; JMP XREF from 0x08009f1c (TIM4_IRQHandler)
| ::|||||      ; JMP XREF from 0x08009f26 (TIM4_IRQHandler)
| ::```---> 0x08009f2c      0a7a           ldrb r2, [r1, 8]            ; 0x200007bc
| ::   ||   0x08009f2e      d209           lsrs r2, r2, 7
| ::  ,===< 0x08009f30      08d0           beq 0x8009f44
| ::  |||   0x08009f32      4a68           ldr r2, [r1, 4]
| ::  |||   0x08009f34      521c           adds r2, r2, 1
| ::  |||   0x08009f36      4a60           str r2, [r1, 4]
| ::  |||   0x08009f38      062a           cmp r2, 6                   ; 6
| :: ,====< 0x08009f3a      03d3           blo 0x8009f44
| :: ||||   0x08009f3c      0122           movs r2, 1                  ; 1
| :: ||||   0x08009f3e      ca72           strb r2, [r1, 0xb]
| :: ||||   0x08009f40      0022           movs r2, 0
| :: ||||   0x08009f42      4a60           str r2, [r1, 4]
| :: ||||      ; JMP XREF from 0x08009f30 (TIM4_IRQHandler)
| :: ||||      ; JMP XREF from 0x08009f3a (TIM4_IRQHandler)
| :: ``---> 0x08009f44      c16c           ldr r1, [r0, 0x4c]          ; 0x200007b4
| ::   ||   0x08009f46      491c           adds r1, r1, 1
| ::   ||   0x08009f48      c164           str r1, [r0, 0x4c]
| ::   ||   0x08009f4a      90f84710       ldrb.w r1, [r0, 0x47]       ; 0x200007af
| ::   ||   0x08009f4e      0029           cmp r1, 0
| ::  ,===< 0x08009f50      02d0           beq 0x8009f58
| ::  |||   0x08009f52      0121           movs r1, 1                  ; 1
| ::  |||   0x08009f54      80f84810       strb.w r1, [r0, 0x48]
| ::  |||      ; JMP XREF from 0x08009ee6 (TIM4_IRQHandler)
| ::  |||      ; JMP XREF from 0x08009f50 (TIM4_IRQHandler)
\ ::  ``--> 0x08009f58      31bd           pop {r0, r4, r5, pc}
  ::    |   0x08009f5a      0000           movs r0, r0
  ::    |      ; XREFS: DATA 0x08009d7e  DATA 0x08009d9a  DATA 0x08009db6  DATA 0x08009dce  DATA 0x08009de6  DATA 0x08009e02  DATA 0x08009e2c  DATA 0x08009ef0  
  ::    |   0x08009f5c      .dword 0x20000768
  ::    |      ; DATA XREF from 0x08009e24 (DMA1_Channel7_IRQHandler)
  ::    |   0x08009f60      .dword 0x40026080
  ::    |      ; DATA XREF from 0x08009e36 (USART2_IRQHandler)
  ::    |   0x08009f64      .dword 0x40004400
  ::    |      ; DATA XREF from 0x08009e8a (DMA1_Channel2_IRQHandler)
  ::    |   0x08009f68      .dword 0x4002601c
  ::    |      ; DATA XREF from 0x08009e98 (USART3_IRQHandler)
  ::    |   0x08009f6c      .dword 0x40004800
  ::    |      ; DATA XREF from 0x08009eda (TIM4_IRQHandler)
  ::    |      ; DATA XREF from 0x08009f6c (TIM4_IRQHandler + 148)
  ::    |   0x08009f70      .dword 0x40000800
  ::    |      ; DATA XREF from 0x08009f06 (TIM4_IRQHandler)
  ::    |   0x08009f74      .dword 0x200017a8
/ (fcn) USB_Istr 288
|   USB_Istr ();
| ::    |      ; JMP XREF from 0x08009d46 (USB_LP_IRQHandler)
| ::    `-> 0x08009f78      f0b5           push {r4, r5, r6, r7, lr}
| ::        0x08009f7a      89b0           sub sp, 0x24                ; '$'
| ::        0x08009f7c      0024           movs r4, 0
| ::        0x08009f7e      464d           ldr r5, [0x0800a098]        ; [0x800a098:4]=0x40005c40
| ::        0x08009f80      464e           ldr r6, [0x0800a09c]        ; [0x800a09c:4]=0x2000195c
| ::        0x08009f82      6868           ldr r0, [r5, 4]
| ::        0x08009f84      7080           strh r0, [r6, 2]
| ::        0x08009f86      464f           ldr r7, [0x0800a0a0]        ; [0x800a0a0:4]=0x20001990
| ::        0x08009f88      7088           ldrh r0, [r6, 2]
| ::        0x08009f8a      3988           ldrh r1, [r7]
| ::        0x08009f8c      0840           ands r0, r1
| ::        0x08009f8e      0004           lsls r0, r0, 0x10
| ::    ,=< 0x08009f90      01d5           bpl 0x8009f96
| ::    |   0x08009f92      00f08df8       bl USB_CTR_LP
| ::    |      ; JMP XREF from 0x08009f90 (USB_Istr)
| ::    `-> 0x08009f96      7088           ldrh r0, [r6, 2]
| ::        0x08009f98      3988           ldrh r1, [r7]
| ::        0x08009f9a      0840           ands r0, r1
| ::        0x08009f9c      4005           lsls r0, r0, 0x15
| ::    ,=< 0x08009f9e      05d5           bpl 0x8009fac
| ::    |   0x08009fa0      4ff6ff30       movw r0, 0xfbff
| ::    |   0x08009fa4      6860           str r0, [r5, 4]
| ::    |   0x08009fa6      3f48           ldr r0, [0x0800a0a4]        ; [0x800a0a4:4]=0x200005f8
| ::    |   0x08009fa8      4068           ldr r0, [r0, 4]
| ::    |   0x08009faa      8047           blx r0
| ::    |      ; JMP XREF from 0x08009f9e (USB_Istr)
| ::    `-> 0x08009fac      7088           ldrh r0, [r6, 2]
| ::        0x08009fae      3988           ldrh r1, [r7]
| ::        0x08009fb0      0840           ands r0, r1
| ::        0x08009fb2      8004           lsls r0, r0, 0x12
| ::    ,=< 0x08009fb4      02d5           bpl 0x8009fbc
| ::    |   0x08009fb6      4df6ff70       movw r0, 0xdfff
| ::    |   0x08009fba      6860           str r0, [r5, 4]
| ::    |      ; JMP XREF from 0x08009fb4 (USB_Istr)
| ::    `-> 0x08009fbc      7088           ldrh r0, [r6, 2]
| ::        0x08009fbe      3988           ldrh r1, [r7]
| ::        0x08009fc0      0840           ands r0, r1
| ::        0x08009fc2      c004           lsls r0, r0, 0x13
| ::    ,=< 0x08009fc4      05d5           bpl 0x8009fd2
| ::    |   0x08009fc6      4ef6ff70       movw r0, 0xefff
| ::    |   0x08009fca      6860           str r0, [r5, 4]
| ::    |   0x08009fcc      2046           mov r0, r4
| ::    |   0x08009fce      fff7a7f8       bl _USB_Resume
| ::    |      ; JMP XREF from 0x08009fc4 (USB_Istr)
| ::    `-> 0x08009fd2      7088           ldrh r0, [r6, 2]
| ::        0x08009fd4      3988           ldrh r1, [r7]
| ::        0x08009fd6      0840           ands r0, r1
| ::        0x08009fd8      0005           lsls r0, r0, 0x14
| ::    ,=< 0x08009fda      09d5           bpl 0x8009ff0
| ::    |   0x08009fdc      3248           ldr r0, [0x0800a0a8]        ; [0x800a0a8:4]=0x20000765
| ::    |   0x08009fde      0078           ldrb r0, [r0]
| ::    |   0x08009fe0      0028           cmp r0, 0
| ::   ,==< 0x08009fe2      02d1           bne 0x8009fea
| ::   ||   0x08009fe4      0220           movs r0, 2                  ; 2
| ::   ||   0x08009fe6      fff79bf8       bl _USB_Resume
| ::   ||      ; JMP XREF from 0x08009fe2 (USB_Istr)
| ::   `--> 0x08009fea      4ff2ff70       movw r0, 0xf7ff
| ::    |   0x08009fee      6860           str r0, [r5, 4]
| ::    |      ; JMP XREF from 0x08009fda (USB_Istr)
| ::    `-> 0x08009ff0      7088           ldrh r0, [r6, 2]
| ::        0x08009ff2      3988           ldrh r1, [r7]
| ::        0x08009ff4      0840           ands r0, r1
| ::        0x08009ff6      8005           lsls r0, r0, 0x16
| ::    ,=< 0x08009ff8      05d5           bpl 0x800a006
| ::    |   0x08009ffa      4ff6ff50       movw r0, 0xfdff
| ::    |   0x08009ffe      6860           str r0, [r5, 4]
| ::    |   0x0800a000      3078           ldrb r0, [r6]
| ::    |   0x0800a002      401c           adds r0, r0, 1
| ::    |   0x0800a004      3070           strb r0, [r6]
| ::    |      ; JMP XREF from 0x08009ff8 (USB_Istr)
| ::    `-> 0x0800a006      7088           ldrh r0, [r6, 2]
| ::        0x0800a008      3988           ldrh r1, [r7]
| ::        0x0800a00a      0840           ands r0, r1
| ::        0x0800a00c      c005           lsls r0, r0, 0x17
| ::    ,=< 0x0800a00e      41d5           bpl 0x800a094
| ::    |   0x0800a010      4ff6ff60       movw r0, 0xfeff
| ::    |   0x0800a014      6860           str r0, [r5, 4]
| ::    |   0x0800a016      a868           ldr r0, [r5, 8]
| ::    |   0x0800a018      0004           lsls r0, r0, 0x10
| ::   ,==< 0x0800a01a      36d5           bpl 0x800a08a
| ::   ||   0x0800a01c      7068           ldr r0, [r6, 4]
| ::   ||   0x0800a01e      401c           adds r0, r0, 1
| ::   ||   0x0800a020      7060           str r0, [r6, 4]
| ::   ||   0x0800a022      7068           ldr r0, [r6, 4]
| ::   ||   0x0800a024      0428           cmp r0, 4                   ; 4
| ::  ,===< 0x0800a026      32d3           blo 0x800a08e
| ::  |||   0x0800a028      2868           ldr r0, [r5]
| ::  |||   0x0800a02a      0007           lsls r0, r0, 0x1c
| :: ,====< 0x0800a02c      2fd4           bmi 0x800a08e
| :: ||||   0x0800a02e      2868           ldr r0, [r5]
| :: ||||   0x0800a030      80b2           uxth r0, r0
| :: ||||   0x0800a032      b060           str r0, [r6, 8]
| :: ||||   0x0800a034      00a9           add r1, sp, 0
| ::,=====< 0x0800a036      06e0           b 0x800a046
| ::|||||      ; JMP XREF from 0x0800a048 (USB_Istr)
| --------> 0x0800a038      1c48           ldr r0, [0x0800a0ac]        ; [0x800a0ac:4]=0x40005c00
| ::|||||   0x0800a03a      50f82400       ldr.w r0, [r0, r4, lsl 2]
| ::|||||   0x0800a03e      80b2           uxth r0, r0
| ::|||||   0x0800a040      41f82400       str.w r0, [r1, r4, lsl 2]
| ::|||||   0x0800a044      641c           adds r4, r4, 1
| ::|||||      ; JMP XREF from 0x0800a036 (USB_Istr)
| ::`-----> 0x0800a046      082c           cmp r4, 8                   ; 8
| ========< 0x0800a048      f6d3           blo 0x800a038
| :: ||||   0x0800a04a      b068           ldr r0, [r6, 8]
| :: ||||   0x0800a04c      40f00100       orr r0, r0, 1
| :: ||||   0x0800a050      b060           str r0, [r6, 8]
| :: ||||   0x0800a052      b068           ldr r0, [r6, 8]
| :: ||||   0x0800a054      80b2           uxth r0, r0
| :: ||||   0x0800a056      2860           str r0, [r5]
| :: ||||   0x0800a058      b068           ldr r0, [r6, 8]
| :: ||||   0x0800a05a      4008           lsrs r0, r0, 1
| :: ||||   0x0800a05c      4000           lsls r0, r0, 1
| :: ||||   0x0800a05e      b060           str r0, [r6, 8]
| :: ||||   0x0800a060      b068           ldr r0, [r6, 8]
| :: ||||   0x0800a062      80b2           uxth r0, r0
| :: ||||   0x0800a064      2860           str r0, [r5]
| :: ||||      ; JMP XREF from 0x0800a06a (USB_Istr)
| ::.-----> 0x0800a066      6868           ldr r0, [r5, 4]
| :::||||   0x0800a068      4005           lsls r0, r0, 0x15
| ::`=====< 0x0800a06a      fcd5           bpl 0x800a066
| :: ||||   0x0800a06c      4ff6ff30       movw r0, 0xfbff
| :: ||||   0x0800a070      6860           str r0, [r5, 4]
| :: ||||   0x0800a072      0024           movs r4, 0
| :: ||||   0x0800a074      0d49           ldr r1, [0x0800a0ac]        ; [0x800a0ac:4]=0x40005c00
| ::,=====< 0x0800a076      06e0           b 0x800a086
| ::|||||      ; JMP XREF from 0x0800a088 (USB_Istr)
| --------> 0x0800a078      00a8           add r0, sp, 0
| ::|||||   0x0800a07a      50f82400       ldr.w r0, [r0, r4, lsl 2]
| ::|||||   0x0800a07e      80b2           uxth r0, r0
| ::|||||   0x0800a080      41f82400       str.w r0, [r1, r4, lsl 2]
| ::|||||   0x0800a084      641c           adds r4, r4, 1
| ::|||||      ; JMP XREF from 0x0800a076 (USB_Istr)
| ::`-----> 0x0800a086      082c           cmp r4, 8                   ; 8
| ========< 0x0800a088      f6d3           blo 0x800a078
| :: ||||      ; JMP XREF from 0x0800a01a (USB_Istr)
| :: ||`--> 0x0800a08a      0020           movs r0, 0
| :: || |   0x0800a08c      7060           str r0, [r6, 4]
| :: || |      ; JMP XREF from 0x0800a026 (USB_Istr)
| :: || |      ; JMP XREF from 0x0800a02c (USB_Istr)
| :: ``---> 0x0800a08e      0720           movs r0, 7                  ; 7
| ::    |   0x0800a090      fff746f8       bl _USB_Resume
| ::    |      ; JMP XREF from 0x0800a00e (USB_Istr)
| ::    `-> 0x0800a094      09b0           add sp, 0x24
\ ::        0x0800a096      f0bd           pop {r4, r5, r6, r7, pc}
  ::           ; DATA XREF from 0x08009f7e (USB_Istr)
  ::        0x0800a098      .dword 0x40005c40
  ::           ; DATA XREF from 0x08009f80 (USB_Istr)
  ::        0x0800a09c      .dword 0x2000195c
  ::           ; DATA XREF from 0x08009f86 (USB_Istr)
  ::        0x0800a0a0      .dword 0x20001990
  ::           ; DATA XREF from 0x08009fa6 (USB_Istr)
  ::        0x0800a0a4      .dword 0x200005f8
  ::           ; DATA XREF from 0x08009fdc (USB_Istr)
  ::        0x0800a0a8      .dword 0x20000765
  ::           ; DATA XREF from 0x0800a038 (USB_Istr)
  ::           ; DATA XREF from 0x0800a074 (USB_Istr)
  ::        0x0800a0ac      .dword 0x40005c00
/ (fcn) USB_CTR_LP 394
|       Caller: USB_Istr
|   USB_CTR_LP ();
| ::           ; CALL XREF from 0x08009f92 (USB_Istr)
| ::        0x0800a0b0      f8b5           push {r3, r4, r5, r6, r7, lr}
| ::        0x0800a0b2      0020           movs r0, 0
| ::        0x0800a0b4      adf80000       strh.w r0, [sp]
| ::        0x0800a0b8      604c           ldr r4, [0x0800a23c]        ; [0x800a23c:4]=0x40005c00
| ::        0x0800a0ba      48f28006       movw r6, 0x8080
| ::        0x0800a0be      4bf6bf77       movw r7, 0xbfbf
| ::    ,=< 0x0800a0c2      29e0           b 0x800a118
| ::    |      ; JMP XREF from 0x0800a12e (USB_CTR_LP)
| ::   .--> 0x0800a0c4      54f82100       ldr.w r0, [r4, r1, lsl 2]
| ::   :|   0x0800a0c8      adf80000       strh.w r0, [sp]
| ::   :|   0x0800a0cc      bdf80000       ldrh.w r0, [sp]
| ::   :|   0x0800a0d0      0004           lsls r0, r0, 0x10
| ::  ,===< 0x0800a0d2      0dd5           bpl 0x800a0f0
| ::  |:|   0x0800a0d4      54f82100       ldr.w r0, [r4, r1, lsl 2]
| ::  |:|   0x0800a0d8      40f68f72       movw r2, 0xf8f              ; 3983
| ::  |:|   0x0800a0dc      1040           ands r0, r2
| ::  |:|   0x0800a0de      44f82100       str.w r0, [r4, r1, lsl 2]
| ::  |:|   0x0800a0e2      2878           ldrb r0, [r5]
| ::  |:|   0x0800a0e4      5649           ldr r1, [0x0800a240]        ; [0x800a240:4]=0x200006cc
| ::  |:|   0x0800a0e6      01eb8000       add.w r0, r1, r0, lsl 2
| ::  |:|   0x0800a0ea      50f8040c       ldr r0, [r0, -0x4]
| ::  |:|   0x0800a0ee      8047           blx r0
| ::  |:|      ; JMP XREF from 0x0800a0d2 (USB_CTR_LP)
| ::  `---> 0x0800a0f0      bdf80000       ldrh.w r0, [sp]
| ::   :|   0x0800a0f4      0006           lsls r0, r0, 0x18
| ::  ,===< 0x0800a0f6      0fd5           bpl 0x800a118
| ::  |:|   0x0800a0f8      2878           ldrb r0, [r5]
| ::  |:|   0x0800a0fa      54f82010       ldr.w r1, [r4, r0, lsl 2]
| ::  |:|   0x0800a0fe      89b2           uxth r1, r1
| ::  |:|   0x0800a100      48f60f72       movw r2, 0x8f0f
| ::  |:|   0x0800a104      1140           ands r1, r2
| ::  |:|   0x0800a106      44f82010       str.w r1, [r4, r0, lsl 2]
| ::  |:|   0x0800a10a      2878           ldrb r0, [r5]
| ::  |:|   0x0800a10c      4d49           ldr r1, [0x0800a244]        ; [0x800a244:4]=0x200006b0
| ::  |:|   0x0800a10e      01eb8000       add.w r0, r1, r0, lsl 2
| ::  |:|   0x0800a112      50f8040c       ldr r0, [r0, -0x4]
| ::  |:|   0x0800a116      8047           blx r0
| ::  |:|      ; JMP XREF from 0x0800a0c2 (USB_CTR_LP)
| ::  |:|      ; JMP XREF from 0x0800a0f6 (USB_CTR_LP)
| ::  |:|      ; JMP XREF from 0x0800a1f6 (USB_CTR_LP)
| :: .`-`-> 0x0800a118      616c           ldr r1, [r4, 0x44]
| :: : :    0x0800a11a      4b48           ldr r0, [0x0800a248]        ; [0x800a248:4]=0x2000195e
| :: : :    0x0800a11c      0180           strh r1, [r0]
| :: : :    0x0800a11e      0904           lsls r1, r1, 0x10
| :: : :,=< 0x0800a120      40f18a80       bpl.w 0x800a238
| :: : :|   0x0800a124      0188           ldrh r1, [r0]
| :: : :|   0x0800a126      11f00f01       ands r1, r1, 0xf
| :: : :|   0x0800a12a      484d           ldr r5, [0x0800a24c]        ; [0x800a24c:4]=0x20001997
| :: : :|   0x0800a12c      2970           strb r1, [r5]
| :: : `==< 0x0800a12e      c9d1           bne 0x800a0c4
| :: :  |   0x0800a130      474d           ldr r5, [0x0800a250]        ; [0x800a250:4]=0x20001984
| :: :  |   0x0800a132      2168           ldr r1, [r4]
| :: :  |   0x0800a134      2980           strh r1, [r5]
| :: :  |   0x0800a136      2988           ldrh r1, [r5]
| :: :  |   0x0800a138      01f03001       and r1, r1, 0x30
| :: :  |   0x0800a13c      6980           strh r1, [r5, 2]
| :: :  |   0x0800a13e      2988           ldrh r1, [r5]
| :: :  |   0x0800a140      01f44051       and r1, r1, 0x3000
| :: :  |   0x0800a144      2980           strh r1, [r5]
| :: :  |   0x0800a146      2168           ldr r1, [r4]
| :: :  |   0x0800a148      89b2           uxth r1, r1
| :: :  |   0x0800a14a      3940           ands r1, r7
| :: :  |   0x0800a14c      81f40051       eor r1, r1, 0x2000
| :: :  |   0x0800a150      81f02001       eor r1, r1, 0x20
| :: :  |   0x0800a154      3143           orrs r1, r6
| :: :  |   0x0800a156      2160           str r1, [r4]
| :: :  |   0x0800a158      0088           ldrh r0, [r0]
| :: :  |   0x0800a15a      c006           lsls r0, r0, 0x1b
| :: :  |   0x0800a15c      2068           ldr r0, [r4]
| :: : ,==< 0x0800a15e      20d4           bmi 0x800a1a2
| :: : ||   0x0800a160      80b2           uxth r0, r0
| :: : ||   0x0800a162      48f60f71       movw r1, 0x8f0f
| :: : ||   0x0800a166      0840           ands r0, r1
| :: : ||   0x0800a168      2060           str r0, [r4]
| :: : ||   0x0800a16a      fff7cffb       bl USB_In0_Process
| :: : ||   0x0800a16e      2068           ldr r0, [r4]
| :: : ||   0x0800a170      80b2           uxth r0, r0
| :: : ||   0x0800a172      3840           ands r0, r7
| :: : ||   0x0800a174      2988           ldrh r1, [r5]
| :: : ||   0x0800a176      c904           lsls r1, r1, 0x13
| :: :,===< 0x0800a178      01d5           bpl 0x800a17e
| :: :|||   0x0800a17a      80f48050       eor r0, r0, 0x1000
| :: :|||      ; JMP XREF from 0x0800a178 (USB_CTR_LP)
| :: :`---> 0x0800a17e      2988           ldrh r1, [r5]
| :: : ||   0x0800a180      8904           lsls r1, r1, 0x12
| :: :,===< 0x0800a182      01d5           bpl 0x800a188
| :: :|||   0x0800a184      80f40050       eor r0, r0, 0x2000
| :: :|||      ; JMP XREF from 0x0800a182 (USB_CTR_LP)
| :: :`---> 0x0800a188      6988           ldrh r1, [r5, 2]
| :: : ||   0x0800a18a      c906           lsls r1, r1, 0x1b
| :: :,===< 0x0800a18c      01d5           bpl 0x800a192
| :: :|||   0x0800a18e      80f01000       eor r0, r0, 0x10
| :: :|||      ; JMP XREF from 0x0800a18c (USB_CTR_LP)
| :: :`---> 0x0800a192      6988           ldrh r1, [r5, 2]
| :: : ||   0x0800a194      8906           lsls r1, r1, 0x1a
| :: :,===< 0x0800a196      01d5           bpl 0x800a19c
| :: :|||   0x0800a198      80f02000       eor r0, r0, 0x20
| :: :|||      ; JMP XREF from 0x0800a196 (USB_CTR_LP)
| :: :`---> 0x0800a19c      3043           orrs r0, r6
| :: : ||   0x0800a19e      2060           str r0, [r4]
| :: : ||   0x0800a1a0      f1bd           pop {r0, r4, r5, r6, r7, pc}
| :: : ||      ; JMP XREF from 0x0800a15e (USB_CTR_LP)
| :: : `--> 0x0800a1a2      adf80000       strh.w r0, [sp]
| :: :  |   0x0800a1a6      bdf80000       ldrh.w r0, [sp]
| :: :  |   0x0800a1aa      0005           lsls r0, r0, 0x14
| :: : ,==< 0x0800a1ac      20d5           bpl 0x800a1f0
| :: : ||   0x0800a1ae      2068           ldr r0, [r4]
| :: : ||   0x0800a1b0      40f68f71       movw r1, 0xf8f              ; 3983
| :: : ||   0x0800a1b4      0840           ands r0, r1
| :: : ||   0x0800a1b6      2060           str r0, [r4]
| :: : ||   0x0800a1b8      fff770fb       bl USB_Setup0_Process
| :: : ||   0x0800a1bc      2068           ldr r0, [r4]
| :: : ||   0x0800a1be      80b2           uxth r0, r0
| :: : ||   0x0800a1c0      3840           ands r0, r7
| :: : ||   0x0800a1c2      2988           ldrh r1, [r5]
| :: : ||   0x0800a1c4      c904           lsls r1, r1, 0x13
| :: :,===< 0x0800a1c6      01d5           bpl 0x800a1cc
| :: :|||   0x0800a1c8      80f48050       eor r0, r0, 0x1000
| :: :|||      ; JMP XREF from 0x0800a1c6 (USB_CTR_LP)
| :: :`---> 0x0800a1cc      2988           ldrh r1, [r5]
| :: : ||   0x0800a1ce      8904           lsls r1, r1, 0x12
| :: :,===< 0x0800a1d0      01d5           bpl 0x800a1d6
| :: :|||   0x0800a1d2      80f40050       eor r0, r0, 0x2000
| :: :|||      ; JMP XREF from 0x0800a1d0 (USB_CTR_LP)
| :: :`---> 0x0800a1d6      6988           ldrh r1, [r5, 2]
| :: : ||   0x0800a1d8      c906           lsls r1, r1, 0x1b
| :: :,===< 0x0800a1da      01d5           bpl 0x800a1e0
| :: :|||   0x0800a1dc      80f01000       eor r0, r0, 0x10
| :: :|||      ; JMP XREF from 0x0800a1da (USB_CTR_LP)
| :: :`---> 0x0800a1e0      6988           ldrh r1, [r5, 2]
| :: : ||   0x0800a1e2      8906           lsls r1, r1, 0x1a
| :: :,===< 0x0800a1e4      01d5           bpl 0x800a1ea
| :: :|||   0x0800a1e6      80f02000       eor r0, r0, 0x20
| :: :|||      ; JMP XREF from 0x0800a1e4 (USB_CTR_LP)
| :: :`---> 0x0800a1ea      3043           orrs r0, r6
| :: : ||   0x0800a1ec      2060           str r0, [r4]
| :: : ||   0x0800a1ee      f1bd           pop {r0, r4, r5, r6, r7, pc}
| :: : ||      ; JMP XREF from 0x0800a1ac (USB_CTR_LP)
| :: : `--> 0x0800a1f0      bdf80000       ldrh.w r0, [sp]
| :: :  |   0x0800a1f4      0004           lsls r0, r0, 0x10
| :: `====< 0x0800a1f6      8fd5           bpl 0x800a118
| ::    |   0x0800a1f8      2068           ldr r0, [r4]
| ::    |   0x0800a1fa      40f68f71       movw r1, 0xf8f              ; 3983
| ::    |   0x0800a1fe      0840           ands r0, r1
| ::    |   0x0800a200      2060           str r0, [r4]
| ::    |   0x0800a202      fff7acfb       bl USB_Out0_Process
| ::    |   0x0800a206      2068           ldr r0, [r4]
| ::    |   0x0800a208      80b2           uxth r0, r0
| ::    |   0x0800a20a      3840           ands r0, r7
| ::    |   0x0800a20c      2988           ldrh r1, [r5]
| ::    |   0x0800a20e      c904           lsls r1, r1, 0x13
| ::   ,==< 0x0800a210      01d5           bpl 0x800a216
| ::   ||   0x0800a212      80f48050       eor r0, r0, 0x1000
| ::   ||      ; JMP XREF from 0x0800a210 (USB_CTR_LP)
| ::   `--> 0x0800a216      2988           ldrh r1, [r5]
| ::    |   0x0800a218      8904           lsls r1, r1, 0x12
| ::   ,==< 0x0800a21a      01d5           bpl 0x800a220
| ::   ||   0x0800a21c      80f40050       eor r0, r0, 0x2000
| ::   ||      ; JMP XREF from 0x0800a21a (USB_CTR_LP)
| ::   `--> 0x0800a220      6988           ldrh r1, [r5, 2]
| ::    |   0x0800a222      c906           lsls r1, r1, 0x1b
| ::   ,==< 0x0800a224      01d5           bpl 0x800a22a
| ::   ||   0x0800a226      80f01000       eor r0, r0, 0x10
| ::   ||      ; JMP XREF from 0x0800a224 (USB_CTR_LP)
| ::   `--> 0x0800a22a      6988           ldrh r1, [r5, 2]
| ::    |   0x0800a22c      8906           lsls r1, r1, 0x1a
| ::   ,==< 0x0800a22e      01d5           bpl 0x800a234
| ::   ||   0x0800a230      80f02000       eor r0, r0, 0x20
| ::   ||      ; JMP XREF from 0x0800a22e (USB_CTR_LP)
| ::   `--> 0x0800a234      3043           orrs r0, r6
| ::    |   0x0800a236      2060           str r0, [r4]
| ::    |      ; JMP XREF from 0x0800a120 (USB_CTR_LP)
\ ::    `-> 0x0800a238      f1bd           pop {r0, r4, r5, r6, r7, pc}
  ::        0x0800a23a      0000           movs r0, r0
  ::           ; DATA XREF from 0x0800a0b8 (USB_CTR_LP)
  ::        0x0800a23c      .dword 0x40005c00
  ::           ; DATA XREF from 0x0800a0e4 (USB_CTR_LP)
  ::        0x0800a240      .dword 0x200006cc
  ::           ; DATA XREF from 0x0800a10c (USB_CTR_LP)
  ::        0x0800a244      .dword 0x200006b0
  ::           ; DATA XREF from 0x0800a11a (USB_CTR_LP)
  ::        0x0800a248      .dword 0x2000195e
  ::           ; DATA XREF from 0x0800a12a (USB_CTR_LP)
  ::        0x0800a24c      .dword 0x20001997
  ::           ; DATA XREF from 0x0800a130 (USB_CTR_LP)
  ::        0x0800a250      .dword 0x20001984
/ (fcn) load_byte_from_flash_region 34
|       Caller: copy_data_to_sram
|   load_byte_from_flash_region ();
| ::           ; CALL XREF from 0x0800a300 (copy_data_to_sram)
| ::           ; CALL XREF from 0x0800a30e (copy_data_to_sram)
| ::           ; CALL XREF from 0x0800a31c (copy_data_to_sram)
| ::           ; CALL XREF from 0x0800a35c (copy_data_to_sram)
| ::           ; CALL XREF from 0x0800a36e (copy_data_to_sram)
| ::        0x0800a254      8168           ldr r1, [r0, 8]             ; 0 gets start:end as parameters if both nil it also gets params to compute data location and size
| ::    ,=< 0x0800a256      07e0           b 0x800a268
| ::    |      ; JMP XREF from 0x0800a26c (load_byte_from_flash_region)
| ::   .--> 0x0800a258      0268           ldr r2, [r0]                ; 0x0800a7bc
| ::   :|   0x0800a25a      1168           ldr r1, [r2]                ; f4
| ::   :|   0x0800a25c      5368           ldr r3, [r2, 4]             ; 1d2
| ::   :|   0x0800a25e      8918           adds r1, r1, r2             ; 0x0800a8b0
| ::   :|   0x0800a260      5b18           adds r3, r3, r1             ; 0x0800aa82
| ::   :|   0x0800a262      c360           str r3, [r0, 0xc]
| ::   :|   0x0800a264      0832           adds r2, 8                  ; 0x0800a7c4
| ::   :|   0x0800a266      0260           str r2, [r0]
| ::   :|      ; JMP XREF from 0x0800a256 (load_byte_from_flash_region)
| ::   :`-> 0x0800a268      c268           ldr r2, [r0, 0xc]           ; 0x0800aa82
| ::   :    0x0800a26a      9142           cmp r1, r2
| ::   `==< 0x0800a26c      f4d0           beq 0x800a258
| ::        0x0800a26e      4a1c           adds r2, r1, 1              ; 0x0800a8b1
| ::        0x0800a270      8260           str r2, [r0, 8]
| ::        0x0800a272      0878           ldrb r0, [r1]
\ ::        0x0800a274      7047           bx lr
/ (fcn) store_byte_in_sram_region 64
|       Caller: copy_data_to_sram
|   store_byte_in_sram_region ();
| ::           ; CALL XREF from 0x0800a34e (copy_data_to_sram)
| ::        0x0800a276      38b5           push {r3, r4, r5, lr}
| ::        0x0800a278      0446           mov r4, r0
| ::        0x0800a27a      0d46           mov r5, r1
| ::        0x0800a27c      a068           ldr r0, [r4, 8]
| ::        0x0800a27e      e168           ldr r1, [r4, 0xc]
| ::        0x0800a280      8842           cmp r0, r1
| ::    ,=< 0x0800a282      12d1           bne 0x800a2aa
| ::    |      ; JMP XREF from 0x0800a2a8 (store_byte_in_sram_region)
| ::   .--> 0x0800a284      2068           ldr r0, [r4]
| ::   :|   0x0800a286      6168           ldr r1, [r4, 4]
| ::   :|   0x0800a288      8842           cmp r0, r1
| ::  ,===< 0x0800a28a      08bf           it eq
| ::  |:|      ; JMP XREF from 0x0800a28a (store_byte_in_sram_region)
| ::  `---> 0x0800a28c      00f0c5f8       bl exit_error               ; void error(int status, int errname, char *format)
| ::   :|   0x0800a290      2068           ldr r0, [r4]
| ::   :|   0x0800a292      227c           ldrb r2, [r4, 0x10]
| ::   :|   0x0800a294      0168           ldr r1, [r0]
| ::  ,===< 0x0800a296      02b1           cbz r2, 0x800a29a
| ::  |:|   0x0800a298      4944           add r1, sb
| ::  |:|      ; JMP XREF from 0x0800a296 (store_byte_in_sram_region)
| ::  `---> 0x0800a29a      a160           str r1, [r4, 8]
| ::   :|   0x0800a29c      4268           ldr r2, [r0, 4]
| ::   :|   0x0800a29e      5218           adds r2, r2, r1
| ::   :|   0x0800a2a0      e260           str r2, [r4, 0xc]
| ::   :|   0x0800a2a2      0830           adds r0, 8
| ::   :|   0x0800a2a4      2060           str r0, [r4]
| ::   :|   0x0800a2a6      9142           cmp r1, r2
| ::   `==< 0x0800a2a8      ecd0           beq 0x800a284
| ::    |      ; JMP XREF from 0x0800a282 (store_byte_in_sram_region)
| ::    `-> 0x0800a2aa      a068           ldr r0, [r4, 8]
| ::        0x0800a2ac      401c           adds r0, r0, 1
| ::        0x0800a2ae      a060           str r0, [r4, 8]
| ::        0x0800a2b0      00f8015d       strb r5, [r0, -0x1]!
\ ::        0x0800a2b4      31bd           pop {r0, r4, r5, pc}
/ (fcn) copy_data_to_sram 356
|   copy_data_to_sram ();
| ::        0x0800a2b6      2de9f041       push.w {r4, r5, r6, r7, r8, lr}
| ::        0x0800a2ba      8ab0           sub sp, 0x28                ; '('
| ::        0x0800a2bc      00f10801       add.w r1, r0, 8             ; 0x0800a7bc
| ::        0x0800a2c0      0591           str r1, [sp, 0x14]
| ::        0x0800a2c2      0168           ldr r1, [r0]                ; 2
| ::        0x0800a2c4      059a           ldr r2, [sp, 0x14]          ; 0x0800a7bc
| ::        0x0800a2c6      4908           lsrs r1, r1, 1              ; 1
| ::        0x0800a2c8      02ebc101       add.w r1, r2, r1, lsl 3     ; 0x0800a7c4
| ::        0x0800a2cc      0691           str r1, [sp, 0x18]
| ::        0x0800a2ce      0021           movs r1, 0
| ::        0x0800a2d0      0791           str r1, [sp, 0x1c]
| ::        0x0800a2d2      0891           str r1, [sp, 0x20]
| ::        0x0800a2d4      0168           ldr r1, [r0]                ; 2
| ::        0x0800a2d6      4908           lsrs r1, r1, 1              ; 1
| ::        0x0800a2d8      00ebc101       add.w r1, r0, r1, lsl 3     ; 0x0800a7bc
| ::        0x0800a2dc      0831           adds r1, 8                  ; 0x0800a7c4
| ::        0x0800a2de      0091           str r1, [sp]
| ::        0x0800a2e0      0179           ldrb r1, [r0, 4]            ; 2
| ::        0x0800a2e2      01f00101       and r1, r1, 1               ; 0
| ::        0x0800a2e6      8df81010       strb.w r1, [sp, 0x10]
| ::        0x0800a2ea      4068           ldr r0, [r0, 4]             ; 2
| ::           ; JMP XREF from 0x0800a8e8 (TIM7_IRQHandler + 60)
| ::        0x0800a2ec      0099           ldr r1, [sp]                ; 0x0800a7c4
| ::        0x0800a2ee      4008           lsrs r0, r0, 1              ; 1
| ::        0x0800a2f0      01ebc000       add.w r0, r1, r0, lsl 3     ; 0x0800a7cc
| ::        0x0800a2f4      0190           str r0, [sp, 4]
| ::        0x0800a2f6      0020           movs r0, 0
| ::        0x0800a2f8      0290           str r0, [sp, 8]
| ::        0x0800a2fa      0390           str r0, [sp, 0xc]
| ::    ,=< 0x0800a2fc      85e0           b 0x800a40a
| ::    |      ; JMP XREF from 0x0800a406 (copy_data_to_sram)
| ::    |      ; JMP XREF from 0x0800a410 (copy_data_to_sram)
| ::  ..--> 0x0800a2fe      05a8           add r0, sp, 0x14            ; 0x20001d74
| ::  ::|   0x0800a300      fff7a8ff       bl load_byte_from_flash_region
| ::  ::|   0x0800a304      0446           mov r4, r0                  ; 10
| ::  ::|   0x0800a306      14f00306       ands r6, r4, 3              ; 0
| :: ,====< 0x0800a30a      03d1           bne 0x800a314
| :: |::|   0x0800a30c      05a8           add r0, sp, 0x14
| :: |::|   0x0800a30e      fff7a1ff       bl load_byte_from_flash_region
| :: |::|   0x0800a312      c61c           adds r6, r0, 3              ; 3d+3=40
| :: |::|      ; JMP XREF from 0x0800a30a (copy_data_to_sram)
| :: `----> 0x0800a314      2509           lsrs r5, r4, 4              ; 1
| ::  ::|   0x0800a316      0f2d           cmp r5, 0xf                 ; 15
| :: ,====< 0x0800a318      1bd1           bne 0x800a352
| :: |::|   0x0800a31a      05a8           add r0, sp, 0x14
| :: |::|   0x0800a31c      fff79aff       bl load_byte_from_flash_region
| :: |::|   0x0800a320      00f10f05       add.w r5, r0, 0xf
| ::,=====< 0x0800a324      15e0           b 0x800a352
| ::||::|      ; JMP XREF from 0x0800a342 (copy_data_to_sram)
| ::||::|      ; JMP XREF from 0x0800a4d0 (bkpt_loop + 176)
| --------> 0x0800a326      0598           ldr r0, [sp, 0x14]
| ::||::|   0x0800a328      0168           ldr r1, [r0]
| ::||::|   0x0800a32a      0818           adds r0, r1, r0
| ::||::|   0x0800a32c      0599           ldr r1, [sp, 0x14]
| ::||::|   0x0800a32e      0790           str r0, [sp, 0x1c]
| ::||::|   0x0800a330      4968           ldr r1, [r1, 4]
| ::||::|   0x0800a332      0818           adds r0, r1, r0
| ::||::|   0x0800a334      0890           str r0, [sp, 0x20]
| ::||::|   0x0800a336      0598           ldr r0, [sp, 0x14]
| ::||::|   0x0800a338      0830           adds r0, 8
| ::||::|   0x0800a33a      0590           str r0, [sp, 0x14]
| ::||::|      ; JMP XREF from 0x0800a354 (copy_data_to_sram)
| --------> 0x0800a33c      0798           ldr r0, [sp, 0x1c]
| ::||::|   0x0800a33e      0899           ldr r1, [sp, 0x20]
| ::||::|   0x0800a340      8842           cmp r0, r1
| ========< 0x0800a342      f0d0           beq 0x800a326
| ::||::|   0x0800a344      401c           adds r0, r0, 1
| ::||::|   0x0800a346      0790           str r0, [sp, 0x1c]
| ::||::|   0x0800a348      10f8011d       ldrb r1, [r0, -0x1]!        ; 0x29 ; loaded from end of file data
| ::||::|   0x0800a34c      00a8           add r0, sp, 0
| ::||::|   0x0800a34e      fff792ff       bl store_byte_in_sram_region
| ::||::|      ; JMP XREF from 0x0800a318 (copy_data_to_sram)
| ::||::|      ; JMP XREF from 0x0800a324 (copy_data_to_sram)
| ::``----> 0x0800a352      761e           subs r6, r6, 1              ; 3f
| ========< 0x0800a354      f2d1           bne 0x800a33c
| ::  ::|   0x0800a356      002d           cmp r5, 0
| :: ,====< 0x0800a358      52d0           beq 0x800a400
| :: |::|   0x0800a35a      05a8           add r0, sp, 0x14
| :: |::|   0x0800a35c      fff77aff       bl load_byte_from_flash_region
| :: |::|   0x0800a360      0646           mov r6, r0                  ; 1
| :: |::|   0x0800a362      a008           lsrs r0, r4, 2
| :: |::|   0x0800a364      00f00300       and r0, r0, 3
| :: |::|   0x0800a368      0328           cmp r0, 3                   ; 3
| ::,=====< 0x0800a36a      04bf           itt eq
| ::||::|      ; JMP XREF from 0x0800a36a (copy_data_to_sram)
| ::`-----> 0x0800a36c      05a8           add r0, sp, 0x14
| :: |::|   0x0800a36e      fff771ff       bl load_byte_from_flash_region
| :: |::|   0x0800a372      ddf80080       ldr.w r8, [sp]
| :: |::|   0x0800a376      0299           ldr r1, [sp, 8]
| :: |::|   0x0800a378      039f           ldr r7, [sp, 0xc]
| :: |::|   0x0800a37a      06eb0020       add.w r0, r6, r0, lsl 8
| ::,=====< 0x0800a37e      08e0           b 0x800a392
| ::||::|      ; JMP XREF from 0x0800a39a (copy_data_to_sram)
| --------> 0x0800a380      a8f10808       sub.w r8, r8, 8
| ::||::|   0x0800a384      801a           subs r0, r0, r2
| ::||::|   0x0800a386      58f8041c       ldr r1, [r8, -0x4]
| ::||::|   0x0800a38a      58f8082c       ldr r2, [r8, -0x8]
| ::||::|   0x0800a38e      8f18           adds r7, r1, r2
| ::||::|   0x0800a390      3946           mov r1, r7
| ::||::|      ; JMP XREF from 0x0800a37e (copy_data_to_sram)
| ::`-----> 0x0800a392      58f8082c       ldr r2, [r8, -0x8]
| :: |::|   0x0800a396      8a1a           subs r2, r1, r2
| :: |::|   0x0800a398      8242           cmp r2, r0
| ========< 0x0800a39a      f1d3           blo 0x800a380
| :: |::|   0x0800a39c      4042           rsbs r0, r0, 0
| :: |::|   0x0800a39e      4418           adds r4, r0, r1
| :: |::|   0x0800a3a0      ae1c           adds r6, r5, 2
| ::,=====< 0x0800a3a2      2dd0           beq 0x800a400
| ::||::|      ; JMP XREF from 0x0800a3fe (copy_data_to_sram)
| --------> 0x0800a3a4      bc42           cmp r4, r7
| ========< 0x0800a3a6      06d1           bne 0x800a3b6
| ::||::|      ; JMP XREF from 0x0800a3b4 (copy_data_to_sram)
| --------> 0x0800a3a8      58f8044b       ldr r4, [r8], 4
| ::||::|   0x0800a3ac      58f8040b       ldr r0, [r8], 4
| ::||::|   0x0800a3b0      0719           adds r7, r0, r4
| ::||::|   0x0800a3b2      bc42           cmp r4, r7
| ========< 0x0800a3b4      f8d0           beq 0x800a3a8
| ::||::|      ; JMP XREF from 0x0800a3a6 (copy_data_to_sram)
| --------> 0x0800a3b6      0298           ldr r0, [sp, 8]
| ::||::|   0x0800a3b8      0399           ldr r1, [sp, 0xc]
| ::||::|   0x0800a3ba      14f8015b       ldrb r5, [r4], 1
| ::||::|   0x0800a3be      8842           cmp r0, r1
| ========< 0x0800a3c0      17d1           bne 0x800a3f2
| ::||::|      ; JMP XREF from 0x0800a3f0 (copy_data_to_sram)
| --------> 0x0800a3c2      0098           ldr r0, [sp]
| ::||::|   0x0800a3c4      0199           ldr r1, [sp, 4]
| ::||::|   0x0800a3c6      8842           cmp r0, r1
| ========< 0x0800a3c8      08bf           it eq
| ::||::|      ; JMP XREF from 0x0800a3c8 (copy_data_to_sram)
| --------> 0x0800a3ca      00f026f8       bl exit_error               ; void error(int status, int errname, char *format)
| ::||::|   0x0800a3ce      0098           ldr r0, [sp]
| ::||::|   0x0800a3d0      0068           ldr r0, [r0]
| ::||::|   0x0800a3d2      9df81010       ldrb.w r1, [sp, 0x10]
| ::||::|   0x0800a3d6      0290           str r0, [sp, 8]
| ========< 0x0800a3d8      09b1           cbz r1, 0x800a3de
| ::||::|   0x0800a3da      4844           add r0, sb
| ::||::|   0x0800a3dc      0290           str r0, [sp, 8]
| ::||::|      ; JMP XREF from 0x0800a3d8 (copy_data_to_sram)
| --------> 0x0800a3de      0099           ldr r1, [sp]
| ::||::|   0x0800a3e0      0298           ldr r0, [sp, 8]
| ::||::|   0x0800a3e2      4968           ldr r1, [r1, 4]
| ::||::|   0x0800a3e4      009a           ldr r2, [sp]
| ::||::|   0x0800a3e6      0918           adds r1, r1, r0
| ::||::|   0x0800a3e8      0832           adds r2, 8
| ::||::|   0x0800a3ea      0391           str r1, [sp, 0xc]
| ::||::|   0x0800a3ec      0092           str r2, [sp]
| ::||::|   0x0800a3ee      8842           cmp r0, r1
| ========< 0x0800a3f0      e7d0           beq 0x800a3c2
| ::||::|      ; JMP XREF from 0x0800a3c0 (copy_data_to_sram)
| --------> 0x0800a3f2      0298           ldr r0, [sp, 8]
| ::||::|   0x0800a3f4      401c           adds r0, r0, 1
| ::||::|   0x0800a3f6      0290           str r0, [sp, 8]
| ::||::|   0x0800a3f8      761e           subs r6, r6, 1
| ::||::|   0x0800a3fa      00f8015d       strb r5, [r0, -0x1]!
| ========< 0x0800a3fe      d1d1           bne 0x800a3a4
| ::||::|      ; JMP XREF from 0x0800a358 (copy_data_to_sram)
| ::||::|      ; JMP XREF from 0x0800a3a2 (copy_data_to_sram)
| ::``----> 0x0800a400      0298           ldr r0, [sp, 8]
| ::  ::|   0x0800a402      0399           ldr r1, [sp, 0xc]
| ::  ::|   0x0800a404      8842           cmp r0, r1
| ::  `===< 0x0800a406      7ff47aaf       bne.w 0x800a2fe
| ::   :|      ; JMP XREF from 0x0800a2fc (copy_data_to_sram)
| ::   :`-> 0x0800a40a      0198           ldr r0, [sp, 4]             ; 0x0800a7cc
| ::   :    0x0800a40c      0099           ldr r1, [sp]                ; 0x0800a7c4
| ::   :    0x0800a40e      8142           cmp r1, r0
| ::   `==< 0x0800a410      7ff475af       bne.w 0x800a2fe
| ::        0x0800a414      0ab0           add sp, 0x28
\ ::        0x0800a416      bde8f081       pop.w {r4, r5, r6, r7, r8, pc}
/ (fcn) exit_error 6
|       Caller: copy_data_to_sram store_byte_in_sram_region
|   exit_error ();
| ::           ; CALL XREF from 0x0800a28c (store_byte_in_sram_region)
| ::           ; CALL XREF from 0x0800a3ca (copy_data_to_sram)
| ::        0x0800a41a      0120           movs r0, 1                  ; 1
\ ::    ,=< 0x0800a41c      00f000b8       b.w bkpt_loop
/ (fcn) bkpt_loop 16
|       Caller: exit
|   bkpt_loop ();
| ::    |      ; JMP XREF from 0x0800a41c (exit_error)
| ::    |      ; CALL XREF from 0x0800a800 (exit)
| ::    `-> 0x0800a420      80b5           push {r7, lr}               ; never returns
| ::        0x0800a422      c046           mov r8, r8
| ::        0x0800a424      c046           mov r8, r8
| ::        0x0800a426      024a           ldr r2, [0x0800a430]        ; [0x800a430:4]=0x20026
| ::           ; JMP XREF from 0x0800a42e (bkpt_loop)
| ::    .-> 0x0800a428      1100           movs r1, r2
| ::    :   0x0800a42a      1820           movs r0, 0x18               ; 24
| ::    :   0x0800a42c      abbe           bkpt 0xab
\ ::    `=< 0x0800a42e      fbe7           b 0x800a428
  ::           ; DATA XREF from 0x0800a426 (bkpt_loop)
  ::        0x0800a430      .dword 0x00020026
  ::        0x0800a434 hex length=252 delta=0
0x0800a434  1201 0002 0000 0040 8304 1057 0002 0102  .......@...W....
0x0800a444  0301 0000 0902 6200 0301 00c0 c809 0400  ......b.........
0x0800a454  0002 0300 0000 0921 1001 2101 221b 0007  .......!..!."...
0x0800a464  0501 0308 000a 0705 8103 0800 0a09 0401  ................
0x0800a474  0002 0301 0100 0921 1001 2101 223d 0007  .......!..!."=..
0x0800a484  0502 0302 000a 0705 8203 1e00 0a09 0402  ................
0x0800a494  0001 0300 0000 0921 1001 2101 2221 0007  .......!..!."!..
0x0800a4a4  0583 0301 000a 0000 0501 0906 a101 7501  ..............u.
0x0800a4b4  9505 0508 1901 2905 1500 2501 9102 7503  ......)...%...u.
0x0800a4c4  9501 9103 7501 9508 0507 19e0 29e7 1500  ....u.......)...
0x0800a4d4  2501 8102 7501 95e8 0507 1500 2501 1900  %...u.......%...
0x0800a4e4  29dd 8102 c000 0000 0501 0900 a101 1500  )...............
0x0800a4f4  25ff 1901 2908 7508 9508 8102 1901 2908  %...).u.......).
0x0800a504  9102 c000 050c 0901 a101 1500 2501 09e9  ............%...
0x0800a514  09ea 7501 9502 8106 09e2 7501 9501 8106  ..u.......u.....
0x0800a524  9505 8107 c000 0000 0403 0904            ............

  ::        0x0800a530 hex length=112 delta=0
0x0800a530  2603 5300 5400 4d00 6900 6300 7200 6f00  &.S.T.M.i.c.r.o.
0x0800a540  6500 6c00 6500 6300 7400 7200 6f00 6e00  e.l.e.c.t.r.o.n.
0x0800a550  6900 6300 7300 0000 2a03 6f00 6200 6900  i.c.s...*.o.b.i.
0x0800a560  6e00 7300 2000 6100 6e00 6e00 6500 2000  n.s. .a.n.n.e. .
0x0800a570  6b00 6500 7900 6200 6f00 6100 7200 6400  k.e.y.b.o.a.r.d.
0x0800a580  2000 0000 1a03 5300 5400 4d00 3300 3200   .....S.T.M.3.2.
0x0800a590  0000 0000 0000 0000 0000 0000 0000 0000  ................

/ (fcn) SystemInit 60
|   SystemInit ();
| ::           ; JMP XREF from 0x0800a952 (TIM7_IRQHandler + 166)
| ::        0x0800a5a0      80b5           push {r7, lr}               ; configure system clocks
| ::        0x0800a5a2      3c48           ldr r0, [0x0800a694]        ; [0x800a694:4]=0x40023800 ; RCC_CR
| ::        0x0800a5a4      0168           ldr r1, [r0]
| ::        0x0800a5a6      41f48071       orr r1, r1, 0x100
| ::        0x0800a5aa      0160           str r1, [r0]
| ::        0x0800a5ac      8168           ldr r1, [r0, 8]
| ::        0x0800a5ae      3a4a           ldr r2, [0x0800a698]        ; [0x800a698:4]=0x88ffc00c
| ::        0x0800a5b0      1140           ands r1, r2
| ::        0x0800a5b2      8160           str r1, [r0, 8]
| ::        0x0800a5b4      0168           ldr r1, [r0]
| ::        0x0800a5b6      394a           ldr r2, [0x0800a69c]        ; [0x800a69c:4]=0xeefefffe
| ::        0x0800a5b8      1140           ands r1, r2
| ::        0x0800a5ba      0160           str r1, [r0]
| ::        0x0800a5bc      0168           ldr r1, [r0]
| ::        0x0800a5be      21f48021       bic r1, r1, 0x40000
| ::        0x0800a5c2      0160           str r1, [r0]
| ::        0x0800a5c4      8168           ldr r1, [r0, 8]
| ::        0x0800a5c6      21f47d01       bic r1, r1, 0xfd0000
| ::        0x0800a5ca      8160           str r1, [r0, 8]
| ::        0x0800a5cc      0021           movs r1, 0
| ::        0x0800a5ce      c160           str r1, [r0, 0xc]
| ::        0x0800a5d0      00f004f8       bl SetSysClock
| ::        0x0800a5d4      3248           ldr r0, [0x0800a6a0]        ; [0x800a6a0:4]=0x8004000 vector_table ; FLASH_BASE
| ::        0x0800a5d6      3349           ldr r1, [0x0800a6a4]        ; [0x800a6a4:4]=0xe000ed08 ; SCB_VTOR register
| ::        0x0800a5d8      0860           str r0, [r1]                ; do vector table relocation
\ ::        0x0800a5da      01bd           pop {r0, pc}
/ (fcn) SetSysClock 182
|       Caller: SystemInit
|   SetSysClock ();
| ::           ; CALL XREF from 0x0800a5d0 (SystemInit)
| ::        0x0800a5dc      82b0           sub sp, 8
| ::        0x0800a5de      0020           movs r0, 0
| ::        0x0800a5e0      0190           str r0, [sp, 4]
| ::        0x0800a5e2      0090           str r0, [sp]
| ::        0x0800a5e4      2b48           ldr r0, [0x0800a694]        ; [0x800a694:4]=0x40023800
| ::        0x0800a5e6      0168           ldr r1, [r0]
| ::        0x0800a5e8      41f48031       orr r1, r1, 0x10000
| ::        0x0800a5ec      0160           str r1, [r0]
| ::           ; JMP XREF from 0x0800a608 (SetSysClock)
| ::    .-> 0x0800a5ee      0168           ldr r1, [r0]
| ::    :   0x0800a5f0      01f40031       and r1, r1, 0x20000
| ::    :   0x0800a5f4      0091           str r1, [sp]
| ::    :   0x0800a5f6      0199           ldr r1, [sp, 4]
| ::    :   0x0800a5f8      491c           adds r1, r1, 1
| ::    :   0x0800a5fa      0191           str r1, [sp, 4]
| ::    :   0x0800a5fc      0099           ldr r1, [sp]
| ::    :   0x0800a5fe      0029           cmp r1, 0
| ::   ,==< 0x0800a600      03d1           bne 0x800a60a
| ::   |:   0x0800a602      0199           ldr r1, [sp, 4]
| ::   |:   0x0800a604      b1f5a04f       cmp.w r1, 0x5000
| ::   |`=< 0x0800a608      f1d1           bne 0x800a5ee
| ::   |       ; JMP XREF from 0x0800a600 (SetSysClock)
| ::   `--> 0x0800a60a      0168           ldr r1, [r0]
| ::        0x0800a60c      490c           lsrs r1, r1, 0x11
| ::        0x0800a60e      01f00101       and r1, r1, 1
| ::        0x0800a612      0091           str r1, [sp]
| ::        0x0800a614      0099           ldr r1, [sp]
| ::        0x0800a616      0129           cmp r1, 1                   ; 1
| ::    ,=< 0x0800a618      39d1           bne 0x800a68e
| ::    |   0x0800a61a      2349           ldr r1, [0x0800a6a8]        ; [0x800a6a8:4]=0x40023c00
| ::    |   0x0800a61c      0a68           ldr r2, [r1]
| ::    |   0x0800a61e      42f00402       orr r2, r2, 4
| ::    |   0x0800a622      0a60           str r2, [r1]
| ::    |   0x0800a624      0a68           ldr r2, [r1]
| ::    |   0x0800a626      42f00202       orr r2, r2, 2
| ::    |   0x0800a62a      0a60           str r2, [r1]
| ::    |   0x0800a62c      0a68           ldr r2, [r1]
| ::    |   0x0800a62e      42f00102       orr r2, r2, 1
| ::    |   0x0800a632      0a60           str r2, [r1]
| ::    |   0x0800a634      416a           ldr r1, [r0, 0x24]
| ::    |   0x0800a636      41f08051       orr r1, r1, 0x10000000
| ::    |   0x0800a63a      4162           str r1, [r0, 0x24]
| ::    |   0x0800a63c      1b49           ldr r1, [0x0800a6ac]        ; [0x800a6ac:4]=0x40007000
| ::    |   0x0800a63e      4ff40062       mov.w r2, 0x800             ; 2048
| ::    |   0x0800a642      0a60           str r2, [r1]
| ::    |      ; JMP XREF from 0x0800a648 (SetSysClock)
| ::   .--> 0x0800a644      4a68           ldr r2, [r1, 4]
| ::   :|   0x0800a646      d206           lsls r2, r2, 0x1b
| ::   `==< 0x0800a648      fcd4           bmi 0x800a644
| ::    |   0x0800a64a      8168           ldr r1, [r0, 8]
| ::    |   0x0800a64c      8160           str r1, [r0, 8]
| ::    |   0x0800a64e      8168           ldr r1, [r0, 8]
| ::    |   0x0800a650      8160           str r1, [r0, 8]
| ::    |   0x0800a652      8168           ldr r1, [r0, 8]
| ::    |   0x0800a654      8160           str r1, [r0, 8]
| ::    |   0x0800a656      8168           ldr r1, [r0, 8]
| ::    |   0x0800a658      21f47d01       bic r1, r1, 0xfd0000
| ::    |   0x0800a65c      8160           str r1, [r0, 8]
| ::    |   0x0800a65e      8168           ldr r1, [r0, 8]
| ::    |   0x0800a660      41f40901       orr r1, r1, 0x890000
| ::    |   0x0800a664      8160           str r1, [r0, 8]
| ::    |   0x0800a666      0168           ldr r1, [r0]
| ::    |   0x0800a668      41f08071       orr r1, r1, 0x1000000
| ::    |   0x0800a66c      0160           str r1, [r0]
| ::    |      ; JMP XREF from 0x0800a672 (SetSysClock)
| ::   .--> 0x0800a66e      0168           ldr r1, [r0]
| ::   :|   0x0800a670      8901           lsls r1, r1, 6
| ::   `==< 0x0800a672      fcd5           bpl 0x800a66e
| ::    |   0x0800a674      8168           ldr r1, [r0, 8]
| ::    |   0x0800a676      8908           lsrs r1, r1, 2
| ::    |   0x0800a678      8900           lsls r1, r1, 2
| ::    |   0x0800a67a      8160           str r1, [r0, 8]
| ::    |   0x0800a67c      8168           ldr r1, [r0, 8]
| ::    |   0x0800a67e      41f00301       orr r1, r1, 3
| ::    |   0x0800a682      8160           str r1, [r0, 8]
| ::    |      ; JMP XREF from 0x0800a68c (SetSysClock)
| ::   .--> 0x0800a684      8168           ldr r1, [r0, 8]
| ::   :|   0x0800a686      01f00c01       and r1, r1, 0xc
| ::   :|   0x0800a68a      0c29           cmp r1, 0xc                 ; 12
| ::   `==< 0x0800a68c      fad1           bne 0x800a684
| ::    |      ; JMP XREF from 0x0800a618 (SetSysClock)
| ::    `-> 0x0800a68e      02b0           add sp, 8
\ ::        0x0800a690      7047           bx lr
  ::        0x0800a692      0000           movs r0, r0
  ::           ; DATA XREF from 0x0800a5a2 (SystemInit)
  ::           ; DATA XREF from 0x0800a5e4 (SetSysClock)
  ::        0x0800a694      .dword 0x40023800                          ; RCC: reset and clock control memory
  ::           ; DATA XREF from 0x0800a5ae (SystemInit)
  ::        0x0800a698      .dword 0x88ffc00c                          ; Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], MCOSEL[2:0] and MCOPRE[2:0] bits
  ::           ; DATA XREF from 0x0800a5b6 (SystemInit)
  ::        0x0800a69c      .dword 0xeefefffe                          ; Reset HSION, HSEON, CSSON and PLLON bits
  ::           ; DATA XREF from 0x0800a5d4 (SystemInit)
  ::        0x0800a6a0      .dword 0x08004000 ; vector_table
  ::           ; DATA XREF from 0x0800a5d6 (SystemInit)
  ::        0x0800a6a4      .dword 0xe000ed08                          ; SCB_VTOR register
  ::           ; DATA XREF from 0x0800a61a (SetSysClock)
  ::        0x0800a6a8      .dword 0x40023c00                          ; FLASH_ACR
  ::           ; DATA XREF from 0x0800a63c (SetSysClock)
  ::        0x0800a6ac      .dword 0x40007000                          ; PWR_CR
| ::        ;-- USB_EP1_OUT_Callback:
/ (fcn) _USB_EP1_OUT_Callback 78
|   _USB_EP1_OUT_Callback ();
| ::        0x0800a6b0      10b5           push {r4, lr}               ; see usb_endp.c
| ::        0x0800a6b2      2c4c           ldr r4, [0x0800a764]        ; [0x800a764:4]=0x2000191c
| ::        0x0800a6b4      2146           mov r1, r4
| ::        0x0800a6b6      0120           movs r0, 1                  ; 1 ; EP1_OUT
| ::        0x0800a6b8      fcf77bfd       bl USB_SIL_Read
| ::        0x0800a6bc      2078           ldrb r0, [r4]
| ::        0x0800a6be      8107           lsls r1, r0, 0x1e
| ::    ,=< 0x0800a6c0      0ad5           bpl 0x800a6d8
| ::    |   0x0800a6c2      2948           ldr r0, [0x0800a768]        ; [0x800a768:4]=0x20000768
| ::    |   0x0800a6c4      0121           movs r1, 1                  ; 1
| ::    |   0x0800a6c6      80f86110       strb.w r1, [r0, 0x61]
| ::    |   0x0800a6ca      6130           adds r0, 0x61
| ::    |   0x0800a6cc      4170           strb r1, [r0, 1]
| ::    |   0x0800a6ce      0846           mov r0, r1
| ::    |   0x0800a6d0      2649           ldr r1, [0x0800a76c]        ; [0x800a76c:4]=0x200017a8
| ::    |   0x0800a6d2      81f8d400       strb.w r0, [r1, 0xd4]
| ::   ,==< 0x0800a6d6      0be0           b 0x800a6f0
| ::   ||      ; JMP XREF from 0x0800a6c0 (_USB_EP1_OUT_Callback)
| ::  ,=`-> 0x0800a6d8      0ad4           bmi 0x800a6f0
| ::  ||    0x0800a6da      2348           ldr r0, [0x0800a768]        ; [0x800a768:4]=0x20000768
| ::  ||    0x0800a6dc      0021           movs r1, 0
| ::  ||    0x0800a6de      80f86110       strb.w r1, [r0, 0x61]
| ::  ||    0x0800a6e2      0121           movs r1, 1                  ; 1
| ::  ||    0x0800a6e4      6130           adds r0, 0x61
| ::  ||    0x0800a6e6      4170           strb r1, [r0, 1]
| ::  ||    0x0800a6e8      0846           mov r0, r1
| ::  ||    0x0800a6ea      2049           ldr r1, [0x0800a76c]        ; [0x800a76c:4]=0x200017a8
| ::  ||    0x0800a6ec      81f8d400       strb.w r0, [r1, 0xd4]
| ::  ||       ; JMP XREF from 0x0800a6d6 (_USB_EP1_OUT_Callback)
| ::  ||       ; JMP XREF from 0x0800a6d8 (_USB_EP1_OUT_Callback)
| ::  ``--> 0x0800a6f0      4ff44051       mov.w r1, 0x3000
| ::        0x0800a6f4      0120           movs r0, 1                  ; 1
| ::           ; JMP XREF from 0x0800a8f4 (TIM7_IRQHandler + 72)
| ::        0x0800a6f6      bde81040       pop.w {r4, lr}
\ `=======< 0x0800a6fa      fcf7a9bd       b.w USB_SetEPRxStatus
/ (fcn) USB_Something5 8
|   USB_Something5 ();
|  :        0x0800a6fe      0120           movs r0, 1                  ; 1 ; (*pEpInt_OUT[EPindex-1])(); or IN
|  :        0x0800a700      1b49           ldr r1, [0x0800a770]        ; [0x800a770:4]=0x20000764
|  :        0x0800a702      0870           strb r0, [r1]
\  :        0x0800a704      7047           bx lr
\  :        ;-- USB_EP2_OUT_Callback:
/ (fcn) _USB_EP2_OUT_Callback 78
|   _USB_EP2_OUT_Callback ();
|  :        0x0800a706      10b5           push {r4, lr}               ; see usb_endp.c
|  :        0x0800a708      164c           ldr r4, [0x0800a764]        ; [0x800a764:4]=0x2000191c
|  :        0x0800a70a      2146           mov r1, r4
|  :        0x0800a70c      0220           movs r0, 2                  ; 2
|  :        0x0800a70e      fcf750fd       bl USB_SIL_Read
|  :        0x0800a712      2078           ldrb r0, [r4]
|  :        0x0800a714      8107           lsls r1, r0, 0x1e
|  :    ,=< 0x0800a716      0ad5           bpl 0x800a72e
|  :    |   0x0800a718      1348           ldr r0, [0x0800a768]        ; [0x800a768:4]=0x20000768
|  :    |   0x0800a71a      0121           movs r1, 1                  ; 1
|  :    |   0x0800a71c      80f86110       strb.w r1, [r0, 0x61]
|  :    |   0x0800a720      6130           adds r0, 0x61
|  :    |   0x0800a722      4170           strb r1, [r0, 1]
|  :    |   0x0800a724      0846           mov r0, r1
|  :    |   0x0800a726      1149           ldr r1, [0x0800a76c]        ; [0x800a76c:4]=0x200017a8
|  :    |   0x0800a728      81f8d400       strb.w r0, [r1, 0xd4]
|  :   ,==< 0x0800a72c      0be0           b 0x800a746
|  :   ||      ; JMP XREF from 0x0800a716 (_USB_EP2_OUT_Callback)
|  :  ,=`-> 0x0800a72e      0ad4           bmi 0x800a746
|  :  ||    0x0800a730      0d48           ldr r0, [0x0800a768]        ; [0x800a768:4]=0x20000768
|  :  ||    0x0800a732      0021           movs r1, 0
|  :  ||    0x0800a734      80f86110       strb.w r1, [r0, 0x61]
|  :  ||    0x0800a738      0121           movs r1, 1                  ; 1
|  :  ||    0x0800a73a      6130           adds r0, 0x61
|  :  ||    0x0800a73c      4170           strb r1, [r0, 1]
|  :  ||    0x0800a73e      0846           mov r0, r1
|  :  ||    0x0800a740      0a49           ldr r1, [0x0800a76c]        ; [0x800a76c:4]=0x200017a8
|  :  ||    0x0800a742      81f8d400       strb.w r0, [r1, 0xd4]
|  :  ||       ; JMP XREF from 0x0800a72c (_USB_EP2_OUT_Callback)
|  :  ||       ; JMP XREF from 0x0800a72e (_USB_EP2_OUT_Callback)
|  :  ``--> 0x0800a746      4ff44051       mov.w r1, 0x3000
|  :        0x0800a74a      0220           movs r0, 2                  ; 2
|  :        0x0800a74c      bde81040       pop.w {r4, lr}
\  `======< 0x0800a750      fcf77ebd       b.w USB_SetEPRxStatus
/ (fcn) USB_Something3 8
|   USB_Something3 ();
|           0x0800a754      0120           movs r0, 1                  ; 1 ; (*pEpInt_OUT[EPindex-1])(); or IN
|           0x0800a756      0649           ldr r1, [0x0800a770]        ; [0x800a770:4]=0x20000764
|           0x0800a758      0870           strb r0, [r1]
\           0x0800a75a      7047           bx lr
/ (fcn) USB_Something4 8
|   USB_Something4 ();
|           0x0800a75c      0120           movs r0, 1                  ; 1 ; (*pEpInt_OUT[EPindex-1])(); or IN
|           0x0800a75e      0449           ldr r1, [0x0800a770]        ; [0x800a770:4]=0x20000764
|           0x0800a760      0870           strb r0, [r1]
\           0x0800a762      7047           bx lr
               ; DATA XREF from 0x0800a6b2 (_USB_EP1_OUT_Callback)
               ; DATA XREF from 0x0800a708 (_USB_EP2_OUT_Callback)
            0x0800a764      .dword 0x2000191c
               ; DATA XREF from 0x0800a6c2 (_USB_EP1_OUT_Callback)
               ; DATA XREF from 0x0800a6da (_USB_EP1_OUT_Callback)
               ; DATA XREF from 0x0800a718 (_USB_EP2_OUT_Callback)
               ; DATA XREF from 0x0800a730 (_USB_EP2_OUT_Callback)
            0x0800a768      .dword 0x20000768
               ; DATA XREF from 0x0800a6d0 (_USB_EP1_OUT_Callback)
               ; DATA XREF from 0x0800a6ea (_USB_EP1_OUT_Callback)
               ; DATA XREF from 0x0800a726 (_USB_EP2_OUT_Callback)
               ; DATA XREF from 0x0800a740 (_USB_EP2_OUT_Callback)
            0x0800a76c      .dword 0x200017a8
               ; DATA XREF from 0x0800a700 (USB_Something5)
               ; DATA XREF from 0x0800a756 (USB_Something3)
               ; DATA XREF from 0x0800a75e (USB_Something4)
            0x0800a770      .dword 0x20000764
            0x0800a774      7047           bx lr
            0x0800a776      0000           movs r0, r0
/ (fcn) initialize_memory_regions 32
|       Caller: _main2
|   initialize_memory_regions ();
|              ; CALL XREF from 0x0800a7d4 (_main2)
|           0x0800a778      10b5           push {r4, lr}
|           0x0800a77a      0749           ldr r1, [0x0800a798]        ; [0x800a798:4]=8
|           0x0800a77c      7944           add r1, pc
|           0x0800a77e      1831           adds r1, 0x18               ; r1 = 0x0800A7A0 0x0800a7b0
|           0x0800a780      064c           ldr r4, [0x0800a79c]        ; [0x800a79c:4]=48
|           0x0800a782      7c44           add r4, pc
|           0x0800a784      1634           adds r4, 0x16               ; r4 = 0x0800A7CC
|       ,=< 0x0800a786      04e0           b 0x800a792
|       |      ; JMP XREF from 0x0800a794 (initialize_memory_regions)
|      .--> 0x0800a788      0a68           ldr r2, [r1]                ; r2 = 0xffffca37 0xfffffb07
|      :|   0x0800a78a      081d           adds r0, r1, 4              ; r0 = 0x0800A7A4 0x0800a7b4
|      :|   0x0800a78c      5118           adds r1, r2, r1             ; r1 = 0x080071D7 0x0800a2b7
|      :|   0x0800a78e      8847           blx r1
|      :|   0x0800a790      0146           mov r1, r0
|      :|      ; JMP XREF from 0x0800a786 (initialize_memory_regions)
|      :`-> 0x0800a792      a142           cmp r1, r4
|      `==< 0x0800a794      f8d1           bne 0x800a788
\           0x0800a796      10bd           pop {r4, pc}
               ; DATA XREF from 0x0800a77a (initialize_memory_regions)
            0x0800a798      .dword 0x00000008
               ; DATA XREF from 0x0800a780 (initialize_memory_regions)
            0x0800a79c      .dword 0x00000030
            0x0800a7a0      .dword 0xffffca37                          ; leads to zero_fill_bss function
            0x0800a7a4      .dword 0x00001234                          ; size of sram section to zero out
            0x0800a7a8      .dword 0x20000768                          ; it's start address: 0x20000768-0x2000199c
            0x0800a7ac      .dword 0x00000000
            0x0800a7b0      .dword 0xfffffb07                          ; leads to copy_data_to_sram funtion
            0x0800a7b4      .dword 0x00000002
            0x0800a7b8      .dword 0x00000002
            0x0800a7bc      .dword 0x000000f4                          ; data at the end of file is f4 bytes from here
            0x0800a7c0      .dword 0x000001d2                          ; size of that data
            0x0800a7c4      .dword 0x20000000                          ; start of sram region where to store that data
            0x0800a7c8      .dword 0x00000766                          ; end of sram region containing data
|           ;-- main2:
/ (fcn) _main2 26
|       Caller: _main
|   _main2 ();
|              ; CALL XREF from 0x0800a820 (_main)
|           0x0800a7cc      00f00bf8       bl return_one               ; set r0 = 1
|           0x0800a7d0      0028           cmp r0, 0
|       ,=< 0x0800a7d2      01d0           beq 0x800a7d8
|       |   0x0800a7d4      fff7d0ff       bl initialize_memory_regions
|       |      ; JMP XREF from 0x0800a7d2 (_main2)
|       `-> 0x0800a7d8      0020           movs r0, 0
|           0x0800a7da      c046           mov r8, r8
|           0x0800a7dc      c046           mov r8, r8
|           0x0800a7de      00f004f8       bl main
\           0x0800a7e2      00f009f8       bl exit                     ; void exit(int status)
/ (fcn) return_one 4
|       Caller: _main2
|   return_one ();
|              ; CALL XREF from 0x0800a7cc (_main2)
|           0x0800a7e6      0120           movs r0, 1                  ; 1
\           0x0800a7e8      7047           bx lr
/ (fcn) main 14
|       Caller: _main2
|   main ();
|              ; CALL XREF from 0x0800a7de (_main2)
|           0x0800a7ea      80b5           push {r7, lr}
|           0x0800a7ec      f9f782fc       bl _KBD_Init
|           0x0800a7f0      fdf7defe       bl main_loop
|           0x0800a7f4      0020           movs r0, 0
\           0x0800a7f6      02bd           pop {r1, pc}
/ (fcn) exit 16
|       Caller: _main2
|   exit ();
|              ; CALL XREF from 0x0800a7e2 (_main2)
|       ,=< 0x0800a7f8      00f000b8       b.w 0x800a7fc
|       |      ; JMP XREF from 0x0800a7f8 (exit)
|       `-> 0x0800a7fc      0746           mov r7, r0
|              ; JMP XREF from 0x0800a804 (exit)
|       .-> 0x0800a7fe      3846           mov r0, r7
|       :   0x0800a800      fff70efe       bl bkpt_loop                ; function has infinite loop with a bkpt 0xab
|       `=< 0x0800a804      fbe7           b 0x800a7fe
\           0x0800a806      0000           movs r0, r0
            0x0800a808      0148           ldr r0, [0x0800a810]        ; [0x800a810:4]=0x800a5a1 ; load SystemInit address
            0x0800a80a      8047           blx r0
            0x0800a80c      0148           ldr r0, [0x0800a814]        ; [0x800a814:4]=0x800a819 ; load _main address
            0x0800a80e      0047           bx r0
               ; DATA XREF from 0x0800a808 (exit + 16)
            0x0800a810      .dword 0x0800a5a1 ; SystemInit
               ; DATA XREF from 0x0800a80c (exit + 20)
            0x0800a814      .dword 0x0800a819 ; main
|           ;-- main:
/ (fcn) _main 12
|   _main ();
|           0x0800a818      c046           mov r8, r8                  ; jumped into from reset handler
|           0x0800a81a      c046           mov r8, r8
|           0x0800a81c      c046           mov r8, r8
|           0x0800a81e      c046           mov r8, r8
\           0x0800a820      fff7d4ff       bl _main2                   ; call _main2()
/ (fcn) WWDG_IRQHandler 4
|   WWDG_IRQHandler ();
|       |      ; JMP XREF from 0x0800a824 (WWDG_IRQHandler)
\       `-> 0x0800a824      fff7febf       b.w WWDG_IRQHandler
/ (fcn) PVD_IRQHandler 4
|   PVD_IRQHandler ();
|       |      ; JMP XREF from 0x0800a828 (PVD_IRQHandler)
\       `-> 0x0800a828      fff7febf       b.w PVD_IRQHandler
/ (fcn) TAMPER_STAMP_IRQHandler 4
|   TAMPER_STAMP_IRQHandler ();
|       |      ; JMP XREF from 0x0800a82c (TAMPER_STAMP_IRQHandler)
\       `-> 0x0800a82c      fff7febf       b.w TAMPER_STAMP_IRQHandler
/ (fcn) RTC_WKUP_IRQHandler 4
|   RTC_WKUP_IRQHandler ();
|       |      ; JMP XREF from 0x0800a830 (RTC_WKUP_IRQHandler)
\       `-> 0x0800a830      fff7febf       b.w RTC_WKUP_IRQHandler
/ (fcn) FLASH_IRQHandler 4
|   FLASH_IRQHandler ();
|       |      ; JMP XREF from 0x0800a834 (FLASH_IRQHandler)
\       `-> 0x0800a834      fff7febf       b.w FLASH_IRQHandler
/ (fcn) RCC_IRQHandler 4
|   RCC_IRQHandler ();
|       |      ; JMP XREF from 0x0800a838 (RCC_IRQHandler)
\       `-> 0x0800a838      fff7febf       b.w RCC_IRQHandler
/ (fcn) EXTI1_IRQHandler 4
|   EXTI1_IRQHandler ();
|       |      ; JMP XREF from 0x0800a83c (EXTI1_IRQHandler)
\       `-> 0x0800a83c      fff7febf       b.w EXTI1_IRQHandler
/ (fcn) EXTI2_IRQHandler 4
|   EXTI2_IRQHandler ();
|       |      ; JMP XREF from 0x0800a840 (EXTI2_IRQHandler)
\       `-> 0x0800a840      fff7febf       b.w EXTI2_IRQHandler
/ (fcn) EXTI3_IRQHandler 4
|   EXTI3_IRQHandler ();
|       |      ; JMP XREF from 0x0800a844 (EXTI3_IRQHandler)
\       `-> 0x0800a844      fff7febf       b.w EXTI3_IRQHandler
/ (fcn) EXTI4_IRQHandler 4
|   EXTI4_IRQHandler ();
|       |      ; JMP XREF from 0x0800a848 (EXTI4_IRQHandler)
\       `-> 0x0800a848      fff7febf       b.w EXTI4_IRQHandler
/ (fcn) DMA1_Channel1_IRQHandler 4
|   DMA1_Channel1_IRQHandler ();
|       |      ; JMP XREF from 0x0800a84c (DMA1_Channel1_IRQHandler)
\       `-> 0x0800a84c      fff7febf       b.w DMA1_Channel1_IRQHandler
/ (fcn) DMA1_Channel3_IRQHandler 4
|   DMA1_Channel3_IRQHandler ();
|       |      ; JMP XREF from 0x0800a850 (DMA1_Channel3_IRQHandler)
\       `-> 0x0800a850      fff7febf       b.w DMA1_Channel3_IRQHandler
/ (fcn) DMA1_Channel4_IRQHandler 4
|   DMA1_Channel4_IRQHandler ();
|       |      ; JMP XREF from 0x0800a854 (DMA1_Channel4_IRQHandler)
\       `-> 0x0800a854      fff7febf       b.w DMA1_Channel4_IRQHandler
/ (fcn) DMA1_Channel5_IRQHandler 4
|   DMA1_Channel5_IRQHandler ();
|       |      ; JMP XREF from 0x0800a858 (DMA1_Channel5_IRQHandler)
\       `-> 0x0800a858      fff7febf       b.w DMA1_Channel5_IRQHandler
/ (fcn) DMA1_Channel6_IRQHandler 4
|   DMA1_Channel6_IRQHandler ();
|       |      ; JMP XREF from 0x0800a85c (DMA1_Channel6_IRQHandler)
\       `-> 0x0800a85c      fff7febf       b.w DMA1_Channel6_IRQHandler
/ (fcn) ADC1_IRQHandler 4
|   ADC1_IRQHandler ();
|       |      ; JMP XREF from 0x0800a860 (ADC1_IRQHandler)
\       `-> 0x0800a860      fff7febf       b.w ADC1_IRQHandler
/ (fcn) USB_HP_IRQHandler 4
|   USB_HP_IRQHandler ();
|       |      ; JMP XREF from 0x0800a864 (USB_HP_IRQHandler)
\       `-> 0x0800a864      fff7febf       b.w USB_HP_IRQHandler
/ (fcn) DAC_IRQHandler 4
|   DAC_IRQHandler ();
|       |      ; JMP XREF from 0x0800a868 (DAC_IRQHandler)
\       `-> 0x0800a868      fff7febf       b.w DAC_IRQHandler
/ (fcn) COMP_IRQHandler 4
|   COMP_IRQHandler ();
|       |      ; JMP XREF from 0x0800a86c (COMP_IRQHandler)
\       `-> 0x0800a86c      fff7febf       b.w COMP_IRQHandler
/ (fcn) LCD_IRQHandler 4
|   LCD_IRQHandler ();
|       |      ; JMP XREF from 0x0800a870 (LCD_IRQHandler)
\       `-> 0x0800a870      fff7febf       b.w LCD_IRQHandler
/ (fcn) TIM9_IRQHandler 4
|   TIM9_IRQHandler ();
|       |      ; JMP XREF from 0x0800a874 (TIM9_IRQHandler)
\       `-> 0x0800a874      fff7febf       b.w TIM9_IRQHandler
/ (fcn) TIM10_IRQHandler 4
|   TIM10_IRQHandler ();
|       |      ; JMP XREF from 0x0800a878 (TIM10_IRQHandler)
\       `-> 0x0800a878      fff7febf       b.w TIM10_IRQHandler
/ (fcn) TIM11_IRQHandler 4
|   TIM11_IRQHandler ();
|       |      ; JMP XREF from 0x0800a87c (TIM11_IRQHandler)
\       `-> 0x0800a87c      fff7febf       b.w TIM11_IRQHandler
/ (fcn) TIM2_IRQHandler 4
|   TIM2_IRQHandler ();
|       |      ; JMP XREF from 0x0800a880 (TIM2_IRQHandler)
\       `-> 0x0800a880      fff7febf       b.w TIM2_IRQHandler
/ (fcn) TIM3_IRQHandler 4
|   TIM3_IRQHandler ();
|       |      ; JMP XREF from 0x0800a884 (TIM3_IRQHandler)
\       `-> 0x0800a884      fff7febf       b.w TIM3_IRQHandler
/ (fcn) I2C1_EV_IRQHandler 4
|   I2C1_EV_IRQHandler ();
|       |      ; JMP XREF from 0x0800a888 (I2C1_EV_IRQHandler)
\       `-> 0x0800a888      fff7febf       b.w I2C1_EV_IRQHandler
/ (fcn) I2C1_ER_IRQHandler 4
|   I2C1_ER_IRQHandler ();
|       |      ; JMP XREF from 0x0800a88c (I2C1_ER_IRQHandler)
\       `-> 0x0800a88c      fff7febf       b.w I2C1_ER_IRQHandler
/ (fcn) I2C2_EV_IRQHandler 4
|   I2C2_EV_IRQHandler ();
|       |      ; JMP XREF from 0x0800a890 (I2C2_EV_IRQHandler)
\       `-> 0x0800a890      fff7febf       b.w I2C2_EV_IRQHandler
/ (fcn) I2C2_ER_IRQHandler 4
|   I2C2_ER_IRQHandler ();
|       |      ; JMP XREF from 0x0800a894 (I2C2_ER_IRQHandler)
\       `-> 0x0800a894      fff7febf       b.w I2C2_ER_IRQHandler
/ (fcn) SPI1_IRQHandler 4
|   SPI1_IRQHandler ();
|       |      ; JMP XREF from 0x0800a898 (SPI1_IRQHandler)
\       `-> 0x0800a898      fff7febf       b.w SPI1_IRQHandler
/ (fcn) SPI2_IRQHandler 4
|   SPI2_IRQHandler ();
|       |      ; JMP XREF from 0x0800a89c (SPI2_IRQHandler)
\       `-> 0x0800a89c      fff7febf       b.w SPI2_IRQHandler
/ (fcn) USART1_IRQHandler 4
|   USART1_IRQHandler ();
|       |      ; JMP XREF from 0x0800a8a0 (USART1_IRQHandler)
\       `-> 0x0800a8a0      fff7febf       b.w USART1_IRQHandler
/ (fcn) RTC_Alarm_IRQHandler 4
|   RTC_Alarm_IRQHandler ();
|       |      ; JMP XREF from 0x0800a8a4 (RTC_Alarm_IRQHandler)
\       `-> 0x0800a8a4      fff7febf       b.w RTC_Alarm_IRQHandler
/ (fcn) TIM6_IRQHandler 4
|   TIM6_IRQHandler ();
|       |      ; JMP XREF from 0x0800a8a8 (TIM6_IRQHandler)
\       `-> 0x0800a8a8      fff7febf       b.w TIM6_IRQHandler
/ (fcn) TIM7_IRQHandler 4
|   TIM7_IRQHandler ();
|       |      ; JMP XREF from 0x0800a8ac (TIM7_IRQHandler)
\       `-> 0x0800a8ac      fff7febf       b.w TIM7_IRQHandler
            0x0800a8b0 hex length=466 delta=0
0x0800a8b0  103d 291e 1f20 2122 2324 2526 272d 2e2a  .=).. !"#$%&'-.*
0x0800a8c0  2b14 1a08 1517 1c18 0c12 132f 3031 3904  +........../019.
0x0800a8d0  1607 090a 0b0d 0e0f 3334 0028 e11d 1b06  ........34.(....
0x0800a8e0  1905 1110 3637 3800 00e5 e0e3 e200 002c  ....678........,
0x0800a8f0  0001 f003 ffe6 fefa e400 01f5 ff11 f9ff  ................
0x0800a900  21f9 0839 1c0b 353a 3b3c 3d3e 3f40 4142  !..9..5:;<=>?@AB
0x0800a910  4344 4590 031c 0e52 08f1 fbfd fc52 4748  CDE....R.....RGH
0x0800a920  4a4d 4639 5051 4f90 0311 065f 4b4e 9003  JMF9PQO...._KN..
0x0800a930  1ef0 9003 ff02 494c 9003 fd23 d803 2252  ......IL...#.."R
0x0800a940  4862 fa48 1167 f225 fe90 1d20 0482 4c48  Hb.H.g.%... ..LH
0x0800a950  f002 25e6 e465 fe90 3d68 04b3 e2e3 d8f5  ..%..e..=h......
0x0800a960  2820 d148 f181 0250 0102 4020 0852 4008  ( .H...P..@ .R@.
0x0800a970  2280 0750 0204 0240 0108 5202 0853 0010  "..P...@..R..S..
0x0800a980  0852 2008 3131 1108 5201 0852 0208 4280  .R .11..R..R..B.
0x0800a990  2052 0838 5210 0821 3710 0355 9a00 0873   R.8R..!7..U...s
0x0800a9a0  0410 0393 9b00 0895 0412 9704 1003 459c  ..............E.
0x0800a9b0  0008 bf04 126b 0412 7104 1277 0421 3362  .....k..q..w.!3b
0x0800a9c0  4078 3001 0201 0908 2001 0101 0808 2002  @x0..... ..... .
0x0800a9d0  8000 0107 0811 1122 0670 217f 1251 5412  .......".p!..QT.
0x0800a9e0  794c f305 519a 0412 8b1c 1003 2ca5 0008  yL..Q.......,...
0x0800a9f0  042c 1230 0812 2608 1258 0812 2a08 1284  .,.0..&..X..*...
0x0800aa00  0812 1a08 4008 0304 0608 0c10 1820 3000  ....@........ 0.
0x0800aa10  0120 0201 0203 0404 f00c 0106 0708 09ff  . ..............
0x0800aa20  a600 0855 a700 085d a75c 12b1 1c12 0718  ...U...].\......
0x0800aa30  f202 751c 3510 5403 080b 000a 001c 7310  ..u.5.T.......s.
0x0800aa40  0c0c 352f 8608 3030 0200 8001 0f24 11a5  ..5/..00.....$..
0x0800aa50  1003 34a4 0008 1217 1248 0812 6208 12ac  ..4......H..b...
0x0800aa60  0812 3d08 127a 0812 0908 12ec 0812 1b08  ..=..z..........
0x0800aa70  525a 1012 08c4 1221 0852 9a10 1604 1503  RZ.....!.R......
0x0800aa80  0101                                     ..