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