summaryrefslogtreecommitdiff
path: root/firmware/memory_chip_gone/Debug/memory_chip_gone.list
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/memory_chip_gone/Debug/memory_chip_gone.list')
-rw-r--r--firmware/memory_chip_gone/Debug/memory_chip_gone.list21728
1 files changed, 21728 insertions, 0 deletions
diff --git a/firmware/memory_chip_gone/Debug/memory_chip_gone.list b/firmware/memory_chip_gone/Debug/memory_chip_gone.list
new file mode 100644
index 0000000..01ef641
--- /dev/null
+++ b/firmware/memory_chip_gone/Debug/memory_chip_gone.list
@@ -0,0 +1,21728 @@
+
+memory_chip_gone.elf: file format elf32-littlearm
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .isr_vector 0000013c 08000000 08000000 00001000 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 1 .text 00007a78 0800013c 0800013c 0000113c 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 .rodata 0000026c 08007bb4 08007bb4 00008bb4 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 .ARM 00000008 08007e20 08007e20 00008e20 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 4 .init_array 00000004 08007e28 08007e28 00008e28 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 5 .fini_array 00000004 08007e2c 08007e2c 00008e2c 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 6 .data 00000024 20000008 08007e30 00009008 2**2
+ CONTENTS, ALLOC, LOAD, DATA
+ 7 BLE_DRIVER_CONTEXT 0000003d 2000002c 08007e54 0000902c 2**2
+ CONTENTS, ALLOC, LOAD, DATA
+ 8 SYSTEM_DRIVER_CONTEXT 00000011 2000006c 08007e91 0000906c 2**2
+ CONTENTS, ALLOC, LOAD, DATA
+ 9 .bss 00000324 20000080 08007ea2 00009080 2**2
+ ALLOC
+ 10 ._user_heap_stack 00000604 200003a4 08007ea2 000093a4 2**0
+ ALLOC
+ 11 .ARM.attributes 00000030 00000000 00000000 00009a67 2**0
+ CONTENTS, READONLY
+ 12 MAPPING_TABLE 00000028 20030000 20030000 0000a000 2**2
+ ALLOC
+ 13 MB_MEM1 000001bb 20030028 20030028 0000a000 2**2
+ ALLOC
+ 14 .MB_MEM2 00000883 200301e4 08007ea2 000091e4 2**2
+ CONTENTS, ALLOC, LOAD, DATA
+ 15 .debug_info 000262b1 00000000 00000000 00009a97 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 16 .debug_abbrev 000053bb 00000000 00000000 0002fd48 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 17 .debug_aranges 00002470 00000000 00000000 00035108 2**3
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 18 .debug_rnglists 00001bc3 00000000 00000000 00037578 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 19 .debug_macro 0002ad32 00000000 00000000 0003913b 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 20 .debug_line 00025a3c 00000000 00000000 00063e6d 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 21 .debug_str 000f314c 00000000 00000000 000898a9 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 22 .comment 00000043 00000000 00000000 0017c9f5 2**0
+ CONTENTS, READONLY
+ 23 .debug_frame 000097bc 00000000 00000000 0017ca38 2**2
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 24 .debug_line_str 00000068 00000000 00000000 001861f4 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+
+Disassembly of section .text:
+
+0800013c <__do_global_dtors_aux>:
+ 800013c: b510 push {r4, lr}
+ 800013e: 4c05 ldr r4, [pc, #20] @ (8000154 <__do_global_dtors_aux+0x18>)
+ 8000140: 7823 ldrb r3, [r4, #0]
+ 8000142: b933 cbnz r3, 8000152 <__do_global_dtors_aux+0x16>
+ 8000144: 4b04 ldr r3, [pc, #16] @ (8000158 <__do_global_dtors_aux+0x1c>)
+ 8000146: b113 cbz r3, 800014e <__do_global_dtors_aux+0x12>
+ 8000148: 4804 ldr r0, [pc, #16] @ (800015c <__do_global_dtors_aux+0x20>)
+ 800014a: f3af 8000 nop.w
+ 800014e: 2301 movs r3, #1
+ 8000150: 7023 strb r3, [r4, #0]
+ 8000152: bd10 pop {r4, pc}
+ 8000154: 20000080 .word 0x20000080
+ 8000158: 00000000 .word 0x00000000
+ 800015c: 08007b9c .word 0x08007b9c
+
+08000160 <frame_dummy>:
+ 8000160: b508 push {r3, lr}
+ 8000162: 4b03 ldr r3, [pc, #12] @ (8000170 <frame_dummy+0x10>)
+ 8000164: b11b cbz r3, 800016e <frame_dummy+0xe>
+ 8000166: 4903 ldr r1, [pc, #12] @ (8000174 <frame_dummy+0x14>)
+ 8000168: 4803 ldr r0, [pc, #12] @ (8000178 <frame_dummy+0x18>)
+ 800016a: f3af 8000 nop.w
+ 800016e: bd08 pop {r3, pc}
+ 8000170: 00000000 .word 0x00000000
+ 8000174: 20000084 .word 0x20000084
+ 8000178: 08007b9c .word 0x08007b9c
+
+0800017c <strlen>:
+ 800017c: 4603 mov r3, r0
+ 800017e: f813 2b01 ldrb.w r2, [r3], #1
+ 8000182: 2a00 cmp r2, #0
+ 8000184: d1fb bne.n 800017e <strlen+0x2>
+ 8000186: 1a18 subs r0, r3, r0
+ 8000188: 3801 subs r0, #1
+ 800018a: 4770 bx lr
+
+0800018c <APPD_EnableCPU2>:
+/* USER CODE END APPD_Init */
+ return;
+}
+
+void APPD_EnableCPU2( void )
+{
+ 800018c: b5b0 push {r4, r5, r7, lr}
+ 800018e: b088 sub sp, #32
+ 8000190: af00 add r7, sp, #0
+/* USER CODE BEGIN APPD_EnableCPU2 */
+ SHCI_C2_DEBUG_Init_Cmd_Packet_t DebugCmdPacket =
+ 8000192: 4b0b ldr r3, [pc, #44] @ (80001c0 <APPD_EnableCPU2+0x34>)
+ 8000194: 1d3c adds r4, r7, #4
+ 8000196: 461d mov r5, r3
+ 8000198: cd0f ldmia r5!, {r0, r1, r2, r3}
+ 800019a: c40f stmia r4!, {r0, r1, r2, r3}
+ 800019c: e895 0007 ldmia.w r5, {r0, r1, r2}
+ 80001a0: c403 stmia r4!, {r0, r1}
+ 80001a2: 8022 strh r2, [r4, #0]
+ 80001a4: 3402 adds r4, #2
+ 80001a6: 0c13 lsrs r3, r2, #16
+ 80001a8: 7023 strb r3, [r4, #0]
+ NBR_OF_TRACES_CONFIG_PARAMETERS,
+ NBR_OF_GENERAL_CONFIG_PARAMETERS}
+ };
+
+ /**< Traces channel initialization */
+ TL_TRACES_Init( );
+ 80001aa: f006 f9c5 bl 8006538 <TL_TRACES_Init>
+
+ /** GPIO DEBUG Initialization */
+ SHCI_C2_DEBUG_Init( &DebugCmdPacket );
+ 80001ae: 1d3b adds r3, r7, #4
+ 80001b0: 4618 mov r0, r3
+ 80001b2: f005 fc52 bl 8005a5a <SHCI_C2_DEBUG_Init>
+
+/* USER CODE END APPD_EnableCPU2 */
+ return;
+ 80001b6: bf00 nop
+}
+ 80001b8: 3720 adds r7, #32
+ 80001ba: 46bd mov sp, r7
+ 80001bc: bdb0 pop {r4, r5, r7, pc}
+ 80001be: bf00 nop
+ 80001c0: 08007bb4 .word 0x08007bb4
+
+080001c4 <LL_C2_PWR_SetPowerMode>:
+ *
+ * (*) Not available on devices STM32WB15xx, STM32WB10xx, STM32WB1Mxx
+ * @retval None
+ */
+__STATIC_INLINE void LL_C2_PWR_SetPowerMode(uint32_t LowPowerMode)
+{
+ 80001c4: b480 push {r7}
+ 80001c6: b083 sub sp, #12
+ 80001c8: af00 add r7, sp, #0
+ 80001ca: 6078 str r0, [r7, #4]
+ MODIFY_REG(PWR->C2CR1, PWR_C2CR1_LPMS, LowPowerMode);
+ 80001cc: 4b07 ldr r3, [pc, #28] @ (80001ec <LL_C2_PWR_SetPowerMode+0x28>)
+ 80001ce: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
+ 80001d2: f023 0207 bic.w r2, r3, #7
+ 80001d6: 4905 ldr r1, [pc, #20] @ (80001ec <LL_C2_PWR_SetPowerMode+0x28>)
+ 80001d8: 687b ldr r3, [r7, #4]
+ 80001da: 4313 orrs r3, r2
+ 80001dc: f8c1 3080 str.w r3, [r1, #128] @ 0x80
+}
+ 80001e0: bf00 nop
+ 80001e2: 370c adds r7, #12
+ 80001e4: 46bd mov sp, r7
+ 80001e6: f85d 7b04 ldr.w r7, [sp], #4
+ 80001ea: 4770 bx lr
+ 80001ec: 58000400 .word 0x58000400
+
+080001f0 <LL_EXTI_EnableIT_32_63>:
+ * @arg @ref LL_EXTI_LINE_ALL_32_63
+ * (*) value not defined in all devices
+ * @retval None
+ */
+__STATIC_INLINE void LL_EXTI_EnableIT_32_63(uint32_t ExtiLine)
+{
+ 80001f0: b480 push {r7}
+ 80001f2: b083 sub sp, #12
+ 80001f4: af00 add r7, sp, #0
+ 80001f6: 6078 str r0, [r7, #4]
+ SET_BIT(EXTI->IMR2, ExtiLine);
+ 80001f8: 4b06 ldr r3, [pc, #24] @ (8000214 <LL_EXTI_EnableIT_32_63+0x24>)
+ 80001fa: f8d3 2090 ldr.w r2, [r3, #144] @ 0x90
+ 80001fe: 4905 ldr r1, [pc, #20] @ (8000214 <LL_EXTI_EnableIT_32_63+0x24>)
+ 8000200: 687b ldr r3, [r7, #4]
+ 8000202: 4313 orrs r3, r2
+ 8000204: f8c1 3090 str.w r3, [r1, #144] @ 0x90
+}
+ 8000208: bf00 nop
+ 800020a: 370c adds r7, #12
+ 800020c: 46bd mov sp, r7
+ 800020e: f85d 7b04 ldr.w r7, [sp], #4
+ 8000212: 4770 bx lr
+ 8000214: 58000800 .word 0x58000800
+
+08000218 <LL_RCC_HSE_SetCapacitorTuning>:
+ * @rmtoll HSECR HSETUNE LL_RCC_HSE_SetCapacitorTuning
+ * @param Value Between Min_Data = 0 and Max_Data = 63
+ * @retval None
+ */
+__STATIC_INLINE void LL_RCC_HSE_SetCapacitorTuning(uint32_t Value)
+{
+ 8000218: b480 push {r7}
+ 800021a: b083 sub sp, #12
+ 800021c: af00 add r7, sp, #0
+ 800021e: 6078 str r0, [r7, #4]
+ WRITE_REG(RCC->HSECR, HSE_CONTROL_UNLOCK_KEY);
+ 8000220: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8000224: 4a0a ldr r2, [pc, #40] @ (8000250 <LL_RCC_HSE_SetCapacitorTuning+0x38>)
+ 8000226: f8c3 209c str.w r2, [r3, #156] @ 0x9c
+ MODIFY_REG(RCC->HSECR, RCC_HSECR_HSETUNE, Value << RCC_HSECR_HSETUNE_Pos);
+ 800022a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800022e: f8d3 309c ldr.w r3, [r3, #156] @ 0x9c
+ 8000232: f423 527c bic.w r2, r3, #16128 @ 0x3f00
+ 8000236: 687b ldr r3, [r7, #4]
+ 8000238: 021b lsls r3, r3, #8
+ 800023a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800023e: 4313 orrs r3, r2
+ 8000240: f8c1 309c str.w r3, [r1, #156] @ 0x9c
+}
+ 8000244: bf00 nop
+ 8000246: 370c adds r7, #12
+ 8000248: 46bd mov sp, r7
+ 800024a: f85d 7b04 ldr.w r7, [sp], #4
+ 800024e: 4770 bx lr
+ 8000250: cafecafe .word 0xcafecafe
+
+08000254 <LL_RCC_SetClkAfterWakeFromStop>:
+ * @arg @ref LL_RCC_STOP_WAKEUPCLOCK_MSI
+ * @arg @ref LL_RCC_STOP_WAKEUPCLOCK_HSI
+ * @retval None
+ */
+__STATIC_INLINE void LL_RCC_SetClkAfterWakeFromStop(uint32_t Clock)
+{
+ 8000254: b480 push {r7}
+ 8000256: b083 sub sp, #12
+ 8000258: af00 add r7, sp, #0
+ 800025a: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CFGR, RCC_CFGR_STOPWUCK, Clock);
+ 800025c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8000260: 689b ldr r3, [r3, #8]
+ 8000262: f423 4200 bic.w r2, r3, #32768 @ 0x8000
+ 8000266: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800026a: 687b ldr r3, [r7, #4]
+ 800026c: 4313 orrs r3, r2
+ 800026e: 608b str r3, [r1, #8]
+}
+ 8000270: bf00 nop
+ 8000272: 370c adds r7, #12
+ 8000274: 46bd mov sp, r7
+ 8000276: f85d 7b04 ldr.w r7, [sp], #4
+ 800027a: 4770 bx lr
+
+0800027c <LL_DBGMCU_GetDeviceID>:
+ * @note For STM32WBxxxx devices, the device ID is 0x495
+ * @rmtoll DBGMCU_IDCODE DEV_ID LL_DBGMCU_GetDeviceID
+ * @retval Values between Min_Data=0x00 and Max_Data=0xFFF (ex: device ID is 0x495)
+ */
+__STATIC_INLINE uint32_t LL_DBGMCU_GetDeviceID(void)
+{
+ 800027c: b480 push {r7}
+ 800027e: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_DEV_ID));
+ 8000280: 4b04 ldr r3, [pc, #16] @ (8000294 <LL_DBGMCU_GetDeviceID+0x18>)
+ 8000282: 681b ldr r3, [r3, #0]
+ 8000284: f3c3 030b ubfx r3, r3, #0, #12
+}
+ 8000288: 4618 mov r0, r3
+ 800028a: 46bd mov sp, r7
+ 800028c: f85d 7b04 ldr.w r7, [sp], #4
+ 8000290: 4770 bx lr
+ 8000292: bf00 nop
+ 8000294: e0042000 .word 0xe0042000
+
+08000298 <LL_DBGMCU_GetRevisionID>:
+ * @note This field indicates the revision of the device.
+ * @rmtoll DBGMCU_IDCODE REV_ID LL_DBGMCU_GetRevisionID
+ * @retval Values between Min_Data=0x00 and Max_Data=0xFFFF
+ */
+__STATIC_INLINE uint32_t LL_DBGMCU_GetRevisionID(void)
+{
+ 8000298: b480 push {r7}
+ 800029a: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(DBGMCU->IDCODE, DBGMCU_IDCODE_REV_ID) >> DBGMCU_IDCODE_REV_ID_Pos);
+ 800029c: 4b04 ldr r3, [pc, #16] @ (80002b0 <LL_DBGMCU_GetRevisionID+0x18>)
+ 800029e: 681b ldr r3, [r3, #0]
+ 80002a0: 0c1b lsrs r3, r3, #16
+ 80002a2: b29b uxth r3, r3
+}
+ 80002a4: 4618 mov r0, r3
+ 80002a6: 46bd mov sp, r7
+ 80002a8: f85d 7b04 ldr.w r7, [sp], #4
+ 80002ac: 4770 bx lr
+ 80002ae: bf00 nop
+ 80002b0: e0042000 .word 0xe0042000
+
+080002b4 <LL_LPM_EnableSleep>:
+ * @brief Processor uses sleep as its low power mode
+ * @rmtoll SCB_SCR SLEEPDEEP LL_LPM_EnableSleep
+ * @retval None
+ */
+__STATIC_INLINE void LL_LPM_EnableSleep(void)
+{
+ 80002b4: b480 push {r7}
+ 80002b6: af00 add r7, sp, #0
+ /* Clear SLEEPDEEP bit of Cortex System Control Register */
+ CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
+ 80002b8: 4b05 ldr r3, [pc, #20] @ (80002d0 <LL_LPM_EnableSleep+0x1c>)
+ 80002ba: 691b ldr r3, [r3, #16]
+ 80002bc: 4a04 ldr r2, [pc, #16] @ (80002d0 <LL_LPM_EnableSleep+0x1c>)
+ 80002be: f023 0304 bic.w r3, r3, #4
+ 80002c2: 6113 str r3, [r2, #16]
+}
+ 80002c4: bf00 nop
+ 80002c6: 46bd mov sp, r7
+ 80002c8: f85d 7b04 ldr.w r7, [sp], #4
+ 80002cc: 4770 bx lr
+ 80002ce: bf00 nop
+ 80002d0: e000ed00 .word 0xe000ed00
+
+080002d4 <LL_RTC_EnableWriteProtection>:
+ * @rmtoll WPR KEY LL_RTC_EnableWriteProtection
+ * @param RTCx RTC Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_RTC_EnableWriteProtection(RTC_TypeDef *RTCx)
+{
+ 80002d4: b480 push {r7}
+ 80002d6: b083 sub sp, #12
+ 80002d8: af00 add r7, sp, #0
+ 80002da: 6078 str r0, [r7, #4]
+ WRITE_REG(RTCx->WPR, RTC_WRITE_PROTECTION_DISABLE);
+ 80002dc: 687b ldr r3, [r7, #4]
+ 80002de: 22ff movs r2, #255 @ 0xff
+ 80002e0: 625a str r2, [r3, #36] @ 0x24
+}
+ 80002e2: bf00 nop
+ 80002e4: 370c adds r7, #12
+ 80002e6: 46bd mov sp, r7
+ 80002e8: f85d 7b04 ldr.w r7, [sp], #4
+ 80002ec: 4770 bx lr
+
+080002ee <LL_RTC_DisableWriteProtection>:
+ * @rmtoll WPR KEY LL_RTC_DisableWriteProtection
+ * @param RTCx RTC Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_RTC_DisableWriteProtection(RTC_TypeDef *RTCx)
+{
+ 80002ee: b480 push {r7}
+ 80002f0: b083 sub sp, #12
+ 80002f2: af00 add r7, sp, #0
+ 80002f4: 6078 str r0, [r7, #4]
+ WRITE_REG(RTCx->WPR, RTC_WRITE_PROTECTION_ENABLE_1);
+ 80002f6: 687b ldr r3, [r7, #4]
+ 80002f8: 22ca movs r2, #202 @ 0xca
+ 80002fa: 625a str r2, [r3, #36] @ 0x24
+ WRITE_REG(RTCx->WPR, RTC_WRITE_PROTECTION_ENABLE_2);
+ 80002fc: 687b ldr r3, [r7, #4]
+ 80002fe: 2253 movs r2, #83 @ 0x53
+ 8000300: 625a str r2, [r3, #36] @ 0x24
+}
+ 8000302: bf00 nop
+ 8000304: 370c adds r7, #12
+ 8000306: 46bd mov sp, r7
+ 8000308: f85d 7b04 ldr.w r7, [sp], #4
+ 800030c: 4770 bx lr
+
+0800030e <LL_RTC_WAKEUP_SetClock>:
+ * @arg @ref LL_RTC_WAKEUPCLOCK_CKSPRE
+ * @arg @ref LL_RTC_WAKEUPCLOCK_CKSPRE_WUT
+ * @retval None
+ */
+__STATIC_INLINE void LL_RTC_WAKEUP_SetClock(RTC_TypeDef *RTCx, uint32_t WakeupClock)
+{
+ 800030e: b480 push {r7}
+ 8000310: b083 sub sp, #12
+ 8000312: af00 add r7, sp, #0
+ 8000314: 6078 str r0, [r7, #4]
+ 8000316: 6039 str r1, [r7, #0]
+ MODIFY_REG(RTCx->CR, RTC_CR_WUCKSEL, WakeupClock);
+ 8000318: 687b ldr r3, [r7, #4]
+ 800031a: 689b ldr r3, [r3, #8]
+ 800031c: f023 0207 bic.w r2, r3, #7
+ 8000320: 683b ldr r3, [r7, #0]
+ 8000322: 431a orrs r2, r3
+ 8000324: 687b ldr r3, [r7, #4]
+ 8000326: 609a str r2, [r3, #8]
+}
+ 8000328: bf00 nop
+ 800032a: 370c adds r7, #12
+ 800032c: 46bd mov sp, r7
+ 800032e: f85d 7b04 ldr.w r7, [sp], #4
+ 8000332: 4770 bx lr
+
+08000334 <MX_APPE_Config>:
+
+/* USER CODE END PFP */
+
+/* Functions Definition ------------------------------------------------------*/
+void MX_APPE_Config(void)
+{
+ 8000334: b580 push {r7, lr}
+ 8000336: af00 add r7, sp, #0
+ /**
+ * The OPTVERR flag is wrongly set at power on
+ * It shall be cleared before using any HAL_FLASH_xxx() api
+ */
+ __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
+ 8000338: 4b04 ldr r3, [pc, #16] @ (800034c <MX_APPE_Config+0x18>)
+ 800033a: f44f 4200 mov.w r2, #32768 @ 0x8000
+ 800033e: 611a str r2, [r3, #16]
+
+ /**
+ * Reset some configurations so that the system behave in the same way
+ * when either out of nReset or Power On
+ */
+ Reset_Device();
+ 8000340: f000 f824 bl 800038c <Reset_Device>
+
+ /* Configure HSE Tuning */
+ Config_HSE();
+ 8000344: f000 f829 bl 800039a <Config_HSE>
+
+ return;
+ 8000348: bf00 nop
+}
+ 800034a: bd80 pop {r7, pc}
+ 800034c: 58004000 .word 0x58004000
+
+08000350 <MX_APPE_Init>:
+
+void MX_APPE_Init(void)
+{
+ 8000350: b580 push {r7, lr}
+ 8000352: af00 add r7, sp, #0
+ System_Init(); /**< System initialization */
+ 8000354: f000 f835 bl 80003c2 <System_Init>
+
+ SystemPower_Config(); /**< Configure the system Power Mode */
+ 8000358: f000 f84e bl 80003f8 <SystemPower_Config>
+
+ HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
+ 800035c: 4903 ldr r1, [pc, #12] @ (800036c <MX_APPE_Init+0x1c>)
+ 800035e: 2000 movs r0, #0
+ 8000360: f000 fcc6 bl 8000cf0 <HW_TS_Init>
+
+/* USER CODE BEGIN APPE_Init_1 */
+
+/* USER CODE END APPE_Init_1 */
+ appe_Tl_Init(); /* Initialize all transport layers */
+ 8000364: f000 f856 bl 8000414 <appe_Tl_Init>
+ */
+/* USER CODE BEGIN APPE_Init_2 */
+
+/* USER CODE END APPE_Init_2 */
+
+ return;
+ 8000368: bf00 nop
+}
+ 800036a: bd80 pop {r7, pc}
+ 800036c: 200001cc .word 0x200001cc
+
+08000370 <Init_Smps>:
+
+void Init_Smps(void)
+{
+ 8000370: b480 push {r7}
+ 8000372: af00 add r7, sp, #0
+ LL_PWR_SMPS_SetStartupCurrent(LL_PWR_SMPS_STARTUP_CURRENT_80MA);
+ LL_PWR_SMPS_SetOutputVoltageLevel(LL_PWR_SMPS_OUTPUT_VOLTAGE_1V40);
+ LL_PWR_SMPS_Enable();
+#endif /* CFG_USE_SMPS != 0 */
+
+ return;
+ 8000374: bf00 nop
+}
+ 8000376: 46bd mov sp, r7
+ 8000378: f85d 7b04 ldr.w r7, [sp], #4
+ 800037c: 4770 bx lr
+
+0800037e <Init_Exti>:
+
+void Init_Exti(void)
+{
+ 800037e: b580 push {r7, lr}
+ 8000380: af00 add r7, sp, #0
+ /* Enable IPCC(36), HSEM(38) wakeup interrupts on CPU1 */
+ LL_EXTI_EnableIT_32_63(LL_EXTI_LINE_36 | LL_EXTI_LINE_38);
+ 8000382: 2050 movs r0, #80 @ 0x50
+ 8000384: f7ff ff34 bl 80001f0 <LL_EXTI_EnableIT_32_63>
+
+ return;
+ 8000388: bf00 nop
+}
+ 800038a: bd80 pop {r7, pc}
+
+0800038c <Reset_Device>:
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static void Reset_Device(void)
+{
+ 800038c: b480 push {r7}
+ 800038e: af00 add r7, sp, #0
+ Reset_BackupDomain();
+
+ Reset_IPCC();
+#endif /* CFG_HW_RESET_BY_FW == 1 */
+
+ return;
+ 8000390: bf00 nop
+}
+ 8000392: 46bd mov sp, r7
+ 8000394: f85d 7b04 ldr.w r7, [sp], #4
+ 8000398: 4770 bx lr
+
+0800039a <Config_HSE>:
+ return;
+}
+#endif /* CFG_HW_RESET_BY_FW == 1 */
+
+static void Config_HSE(void)
+{
+ 800039a: b580 push {r7, lr}
+ 800039c: b082 sub sp, #8
+ 800039e: af00 add r7, sp, #0
+ OTP_ID0_t * p_otp;
+
+ /**
+ * Read HSE_Tuning from OTP
+ */
+ p_otp = (OTP_ID0_t *) OTP_Read(0);
+ 80003a0: 2000 movs r0, #0
+ 80003a2: f006 f95d bl 8006660 <OTP_Read>
+ 80003a6: 6078 str r0, [r7, #4]
+ if (p_otp)
+ 80003a8: 687b ldr r3, [r7, #4]
+ 80003aa: 2b00 cmp r3, #0
+ 80003ac: d005 beq.n 80003ba <Config_HSE+0x20>
+ {
+ LL_RCC_HSE_SetCapacitorTuning(p_otp->hse_tuning);
+ 80003ae: 687b ldr r3, [r7, #4]
+ 80003b0: 799b ldrb r3, [r3, #6]
+ 80003b2: 4618 mov r0, r3
+ 80003b4: f7ff ff30 bl 8000218 <LL_RCC_HSE_SetCapacitorTuning>
+ }
+
+ return;
+ 80003b8: bf00 nop
+ 80003ba: bf00 nop
+}
+ 80003bc: 3708 adds r7, #8
+ 80003be: 46bd mov sp, r7
+ 80003c0: bd80 pop {r7, pc}
+
+080003c2 <System_Init>:
+
+static void System_Init(void)
+{
+ 80003c2: b580 push {r7, lr}
+ 80003c4: af00 add r7, sp, #0
+ Init_Smps();
+ 80003c6: f7ff ffd3 bl 8000370 <Init_Smps>
+
+ Init_Exti();
+ 80003ca: f7ff ffd8 bl 800037e <Init_Exti>
+
+ Init_Rtc();
+ 80003ce: f000 f803 bl 80003d8 <Init_Rtc>
+
+ return;
+ 80003d2: bf00 nop
+}
+ 80003d4: bd80 pop {r7, pc}
+ ...
+
+080003d8 <Init_Rtc>:
+
+static void Init_Rtc(void)
+{
+ 80003d8: b580 push {r7, lr}
+ 80003da: af00 add r7, sp, #0
+ /* Disable RTC registers write protection */
+ LL_RTC_DisableWriteProtection(RTC);
+ 80003dc: 4805 ldr r0, [pc, #20] @ (80003f4 <Init_Rtc+0x1c>)
+ 80003de: f7ff ff86 bl 80002ee <LL_RTC_DisableWriteProtection>
+
+ LL_RTC_WAKEUP_SetClock(RTC, CFG_RTC_WUCKSEL_DIVIDER);
+ 80003e2: 2100 movs r1, #0
+ 80003e4: 4803 ldr r0, [pc, #12] @ (80003f4 <Init_Rtc+0x1c>)
+ 80003e6: f7ff ff92 bl 800030e <LL_RTC_WAKEUP_SetClock>
+
+ /* Enable RTC registers write protection */
+ LL_RTC_EnableWriteProtection(RTC);
+ 80003ea: 4802 ldr r0, [pc, #8] @ (80003f4 <Init_Rtc+0x1c>)
+ 80003ec: f7ff ff72 bl 80002d4 <LL_RTC_EnableWriteProtection>
+
+ return;
+ 80003f0: bf00 nop
+}
+ 80003f2: bd80 pop {r7, pc}
+ 80003f4: 40002800 .word 0x40002800
+
+080003f8 <SystemPower_Config>:
+ *
+ * @param None
+ * @retval None
+ */
+static void SystemPower_Config(void)
+{
+ 80003f8: b580 push {r7, lr}
+ 80003fa: af00 add r7, sp, #0
+ /**
+ * Select HSI as system clock source after Wake Up from Stop mode
+ */
+ LL_RCC_SetClkAfterWakeFromStop(LL_RCC_STOP_WAKEUPCLOCK_HSI);
+ 80003fc: f44f 4000 mov.w r0, #32768 @ 0x8000
+ 8000400: f7ff ff28 bl 8000254 <LL_RCC_SetClkAfterWakeFromStop>
+
+ /* Initialize low power manager */
+ UTIL_LPM_Init();
+ 8000404: f007 f880 bl 8007508 <UTIL_LPM_Init>
+ /* Initialize the CPU2 reset value before starting CPU2 with C2BOOT */
+ LL_C2_PWR_SetPowerMode(LL_PWR_MODE_SHUTDOWN);
+ 8000408: 2004 movs r0, #4
+ 800040a: f7ff fedb bl 80001c4 <LL_C2_PWR_SetPowerMode>
+ * Enable USB power
+ */
+ HAL_PWREx_EnableVddUSB();
+#endif /* CFG_USB_INTERFACE_ENABLE != 0 */
+
+ return;
+ 800040e: bf00 nop
+}
+ 8000410: bd80 pop {r7, pc}
+ ...
+
+08000414 <appe_Tl_Init>:
+
+static void appe_Tl_Init(void)
+{
+ 8000414: b580 push {r7, lr}
+ 8000416: b088 sub sp, #32
+ 8000418: af00 add r7, sp, #0
+ TL_MM_Config_t tl_mm_config;
+ SHCI_TL_HciInitConf_t SHci_Tl_Init_Conf;
+ /**< Reference table initialization */
+ TL_Init();
+ 800041a: f005 fed3 bl 80061c4 <TL_Init>
+
+ /**< System channel initialization */
+ UTIL_SEQ_RegTask(1<< CFG_TASK_SYSTEM_HCI_ASYNCH_EVT_ID, UTIL_SEQ_RFU, shci_user_evt_proc);
+ 800041e: 4a11 ldr r2, [pc, #68] @ (8000464 <appe_Tl_Init+0x50>)
+ 8000420: 2100 movs r1, #0
+ 8000422: 2004 movs r0, #4
+ 8000424: f007 fa34 bl 8007890 <UTIL_SEQ_RegTask>
+ SHci_Tl_Init_Conf.p_cmdbuffer = (uint8_t*)&SystemCmdBuffer;
+ 8000428: 4b0f ldr r3, [pc, #60] @ (8000468 <appe_Tl_Init+0x54>)
+ 800042a: 603b str r3, [r7, #0]
+ SHci_Tl_Init_Conf.StatusNotCallBack = APPE_SysStatusNot;
+ 800042c: 4b0f ldr r3, [pc, #60] @ (800046c <appe_Tl_Init+0x58>)
+ 800042e: 607b str r3, [r7, #4]
+ shci_init(APPE_SysUserEvtRx, (void*) &SHci_Tl_Init_Conf);
+ 8000430: 463b mov r3, r7
+ 8000432: 4619 mov r1, r3
+ 8000434: 480e ldr r0, [pc, #56] @ (8000470 <appe_Tl_Init+0x5c>)
+ 8000436: f005 fd87 bl 8005f48 <shci_init>
+
+ /**< Memory Manager channel initialization */
+ tl_mm_config.p_BleSpareEvtBuffer = BleSpareEvtBuffer;
+ 800043a: 4b0e ldr r3, [pc, #56] @ (8000474 <appe_Tl_Init+0x60>)
+ 800043c: 60bb str r3, [r7, #8]
+ tl_mm_config.p_SystemSpareEvtBuffer = SystemSpareEvtBuffer;
+ 800043e: 4b0e ldr r3, [pc, #56] @ (8000478 <appe_Tl_Init+0x64>)
+ 8000440: 60fb str r3, [r7, #12]
+ tl_mm_config.p_AsynchEvtPool = EvtPool;
+ 8000442: 4b0e ldr r3, [pc, #56] @ (800047c <appe_Tl_Init+0x68>)
+ 8000444: 613b str r3, [r7, #16]
+ tl_mm_config.AsynchEvtPoolSize = POOL_SIZE;
+ 8000446: f240 533c movw r3, #1340 @ 0x53c
+ 800044a: 617b str r3, [r7, #20]
+ TL_MM_Init(&tl_mm_config);
+ 800044c: f107 0308 add.w r3, r7, #8
+ 8000450: 4618 mov r0, r3
+ 8000452: f005 fffd bl 8006450 <TL_MM_Init>
+
+ TL_Enable();
+ 8000456: f005 feaf bl 80061b8 <TL_Enable>
+
+ return;
+ 800045a: bf00 nop
+}
+ 800045c: 3720 adds r7, #32
+ 800045e: 46bd mov sp, r7
+ 8000460: bd80 pop {r7, pc}
+ 8000462: bf00 nop
+ 8000464: 08005f81 .word 0x08005f81
+ 8000468: 20030734 .word 0x20030734
+ 800046c: 08000481 .word 0x08000481
+ 8000470: 08000499 .word 0x08000499
+ 8000474: 2003094c .word 0x2003094c
+ 8000478: 20030840 .word 0x20030840
+ 800047c: 200301f8 .word 0x200301f8
+
+08000480 <APPE_SysStatusNot>:
+
+static void APPE_SysStatusNot(SHCI_TL_CmdStatus_t status)
+{
+ 8000480: b480 push {r7}
+ 8000482: b083 sub sp, #12
+ 8000484: af00 add r7, sp, #0
+ 8000486: 4603 mov r3, r0
+ 8000488: 71fb strb r3, [r7, #7]
+ UNUSED(status);
+ return;
+ 800048a: bf00 nop
+}
+ 800048c: 370c adds r7, #12
+ 800048e: 46bd mov sp, r7
+ 8000490: f85d 7b04 ldr.w r7, [sp], #4
+ 8000494: 4770 bx lr
+ ...
+
+08000498 <APPE_SysUserEvtRx>:
+ * The buffer shall not be released
+ * (eg ((tSHCI_UserEvtRxParam*)pPayload)->status shall be set to SHCI_TL_UserEventFlow_Disable)
+ * When the status is not filled, the buffer is released by default
+ */
+static void APPE_SysUserEvtRx(void * pPayload)
+{
+ 8000498: b580 push {r7, lr}
+ 800049a: b088 sub sp, #32
+ 800049c: af00 add r7, sp, #0
+ 800049e: 6078 str r0, [r7, #4]
+ TL_AsynchEvt_t *p_sys_event;
+ WirelessFwInfo_t WirelessInfo;
+
+ p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+ 80004a0: 687b ldr r3, [r7, #4]
+ 80004a2: 685b ldr r3, [r3, #4]
+ 80004a4: 330b adds r3, #11
+ 80004a6: 61fb str r3, [r7, #28]
+
+ switch(p_sys_event->subevtcode)
+ 80004a8: 69fb ldr r3, [r7, #28]
+ 80004aa: 881b ldrh r3, [r3, #0]
+ 80004ac: b29b uxth r3, r3
+ 80004ae: f5a3 4312 sub.w r3, r3, #37376 @ 0x9200
+ 80004b2: 2b07 cmp r3, #7
+ 80004b4: d81f bhi.n 80004f6 <APPE_SysUserEvtRx+0x5e>
+ 80004b6: a201 add r2, pc, #4 @ (adr r2, 80004bc <APPE_SysUserEvtRx+0x24>)
+ 80004b8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
+ 80004bc: 080004dd .word 0x080004dd
+ 80004c0: 080004ef .word 0x080004ef
+ 80004c4: 080004f7 .word 0x080004f7
+ 80004c8: 080004f7 .word 0x080004f7
+ 80004cc: 080004f7 .word 0x080004f7
+ 80004d0: 080004f7 .word 0x080004f7
+ 80004d4: 080004f7 .word 0x080004f7
+ 80004d8: 080004f7 .word 0x080004f7
+ {
+ case SHCI_SUB_EVT_CODE_READY:
+ /* Read the firmware version of both the wireless firmware and the FUS */
+ SHCI_GetWirelessFwInfo(&WirelessInfo);
+ 80004dc: f107 030c add.w r3, r7, #12
+ 80004e0: 4618 mov r0, r3
+ 80004e2: f005 fae7 bl 8005ab4 <SHCI_GetWirelessFwInfo>
+ APP_DBG_MSG("Wireless Firmware version %d.%d.%d\n", WirelessInfo.VersionMajor, WirelessInfo.VersionMinor, WirelessInfo.VersionSub);
+ APP_DBG_MSG("Wireless Firmware build %d\n", WirelessInfo.VersionReleaseType);
+ APP_DBG_MSG("FUS version %d.%d.%d\n", WirelessInfo.FusVersionMajor, WirelessInfo.FusVersionMinor, WirelessInfo.FusVersionSub);
+
+ APP_DBG_MSG(">>== SHCI_SUB_EVT_CODE_READY\n\r");
+ APPE_SysEvtReadyProcessing(pPayload);
+ 80004e6: 6878 ldr r0, [r7, #4]
+ 80004e8: f000 f81b bl 8000522 <APPE_SysEvtReadyProcessing>
+ break;
+ 80004ec: e004 b.n 80004f8 <APPE_SysUserEvtRx+0x60>
+
+ case SHCI_SUB_EVT_ERROR_NOTIF:
+ APP_DBG_MSG(">>== SHCI_SUB_EVT_ERROR_NOTIF \n\r");
+ APPE_SysEvtError(pPayload);
+ 80004ee: 6878 ldr r0, [r7, #4]
+ 80004f0: f000 f806 bl 8000500 <APPE_SysEvtError>
+ break;
+ 80004f4: e000 b.n 80004f8 <APPE_SysUserEvtRx+0x60>
+ case SHCI_SUB_EVT_NVM_END_ERASE:
+ APP_DBG_MSG(">>== SHCI_SUB_EVT_NVM_END_ERASE\n\r");
+ break;
+
+ default:
+ break;
+ 80004f6: bf00 nop
+ }
+
+ return;
+ 80004f8: bf00 nop
+}
+ 80004fa: 3720 adds r7, #32
+ 80004fc: 46bd mov sp, r7
+ 80004fe: bd80 pop {r7, pc}
+
+08000500 <APPE_SysEvtError>:
+ * @param ErrorCode : errorCode detected by the M0 firmware
+ *
+ * @retval None
+ */
+static void APPE_SysEvtError(void * pPayload)
+{
+ 8000500: b480 push {r7}
+ 8000502: b085 sub sp, #20
+ 8000504: af00 add r7, sp, #0
+ 8000506: 6078 str r0, [r7, #4]
+ TL_AsynchEvt_t *p_sys_event;
+ SCHI_SystemErrCode_t *p_sys_error_code;
+
+ p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+ 8000508: 687b ldr r3, [r7, #4]
+ 800050a: 685b ldr r3, [r3, #4]
+ 800050c: 330b adds r3, #11
+ 800050e: 60fb str r3, [r7, #12]
+ p_sys_error_code = (SCHI_SystemErrCode_t*) p_sys_event->payload;
+ 8000510: 68fb ldr r3, [r7, #12]
+ 8000512: 3302 adds r3, #2
+ 8000514: 60bb str r3, [r7, #8]
+ }
+ else
+ {
+ APP_DBG_MSG(">>== SHCI_SUB_EVT_ERROR_NOTIF WITH REASON - BLE ERROR \n");
+ }
+ return;
+ 8000516: bf00 nop
+}
+ 8000518: 3714 adds r7, #20
+ 800051a: 46bd mov sp, r7
+ 800051c: f85d 7b04 ldr.w r7, [sp], #4
+ 8000520: 4770 bx lr
+
+08000522 <APPE_SysEvtReadyProcessing>:
+
+static void APPE_SysEvtReadyProcessing(void * pPayload)
+{
+ 8000522: b580 push {r7, lr}
+ 8000524: b08a sub sp, #40 @ 0x28
+ 8000526: af00 add r7, sp, #0
+ 8000528: 6078 str r0, [r7, #4]
+ TL_AsynchEvt_t *p_sys_event;
+ SHCI_C2_Ready_Evt_t *p_sys_ready_event;
+
+ SHCI_C2_CONFIG_Cmd_Param_t config_param = {0};
+ 800052a: f107 0308 add.w r3, r7, #8
+ 800052e: 2200 movs r2, #0
+ 8000530: 601a str r2, [r3, #0]
+ 8000532: 605a str r2, [r3, #4]
+ 8000534: 609a str r2, [r3, #8]
+ 8000536: 60da str r2, [r3, #12]
+ uint32_t RevisionID=0;
+ 8000538: 2300 movs r3, #0
+ 800053a: 627b str r3, [r7, #36] @ 0x24
+ uint32_t DeviceID=0;
+ 800053c: 2300 movs r3, #0
+ 800053e: 623b str r3, [r7, #32]
+
+ p_sys_event = (TL_AsynchEvt_t*)(((tSHCI_UserEvtRxParam*)pPayload)->pckt->evtserial.evt.payload);
+ 8000540: 687b ldr r3, [r7, #4]
+ 8000542: 685b ldr r3, [r3, #4]
+ 8000544: 330b adds r3, #11
+ 8000546: 61fb str r3, [r7, #28]
+ p_sys_ready_event = (SHCI_C2_Ready_Evt_t*) p_sys_event->payload;
+ 8000548: 69fb ldr r3, [r7, #28]
+ 800054a: 3302 adds r3, #2
+ 800054c: 61bb str r3, [r7, #24]
+
+ if (p_sys_ready_event->sysevt_ready_rsp == WIRELESS_FW_RUNNING)
+ 800054e: 69bb ldr r3, [r7, #24]
+ 8000550: 781b ldrb r3, [r3, #0]
+ 8000552: 2b00 cmp r3, #0
+ 8000554: d11d bne.n 8000592 <APPE_SysEvtReadyProcessing+0x70>
+ * The wireless firmware is running on the CPU2
+ */
+ APP_DBG_MSG(">>== WIRELESS_FW_RUNNING \n");
+
+ /* Traces channel initialization */
+ APPD_EnableCPU2();
+ 8000556: f7ff fe19 bl 800018c <APPD_EnableCPU2>
+
+ /* Enable all events Notification */
+ config_param.PayloadCmdSize = SHCI_C2_CONFIG_PAYLOAD_CMD_SIZE;
+ 800055a: 230f movs r3, #15
+ 800055c: 723b strb r3, [r7, #8]
+ config_param.EvtMask1 = SHCI_C2_CONFIG_EVTMASK1_BIT0_ERROR_NOTIF_ENABLE
+ 800055e: 237f movs r3, #127 @ 0x7f
+ 8000560: 72bb strb r3, [r7, #10]
+ * @brief Return the device revision identifier
+ * @note This field indicates the revision of the device.
+ * @rmtoll DBGMCU_IDCODE REV_ID LL_DBGMCU_GetRevisionID
+ * @retval Values between Min_Data=0x00 and Max_Data=0xFFFF
+ */
+ RevisionID = LL_DBGMCU_GetRevisionID();
+ 8000562: f7ff fe99 bl 8000298 <LL_DBGMCU_GetRevisionID>
+ 8000566: 6278 str r0, [r7, #36] @ 0x24
+
+ APP_DBG_MSG(">>== DBGMCU_GetRevisionID= %lx \n\r", RevisionID);
+
+ config_param.RevisionID = (uint16_t)RevisionID;
+ 8000568: 6a7b ldr r3, [r7, #36] @ 0x24
+ 800056a: b29b uxth r3, r3
+ 800056c: 82bb strh r3, [r7, #20]
+
+ DeviceID = LL_DBGMCU_GetDeviceID();
+ 800056e: f7ff fe85 bl 800027c <LL_DBGMCU_GetDeviceID>
+ 8000572: 6238 str r0, [r7, #32]
+ APP_DBG_MSG(">>== DBGMCU_GetDeviceID= %lx \n\r", DeviceID);
+ config_param.DeviceID = (uint16_t)DeviceID;
+ 8000574: 6a3b ldr r3, [r7, #32]
+ 8000576: b29b uxth r3, r3
+ 8000578: 82fb strh r3, [r7, #22]
+ (void)SHCI_C2_Config(&config_param);
+ 800057a: f107 0308 add.w r3, r7, #8
+ 800057e: 4618 mov r0, r3
+ 8000580: f005 fa82 bl 8005a88 <SHCI_C2_Config>
+
+ APP_BLE_Init();
+ 8000584: f006 f976 bl 8006874 <APP_BLE_Init>
+ UTIL_LPM_SetOffMode(1U << CFG_LPM_APP, UTIL_LPM_ENABLE);
+ 8000588: 2100 movs r1, #0
+ 800058a: 2001 movs r0, #1
+ 800058c: f006 ffce bl 800752c <UTIL_LPM_SetOffMode>
+ else
+ {
+ APP_DBG_MSG(">>== SHCI_SUB_EVT_CODE_READY - UNEXPECTED CASE \n\r");
+ }
+
+ return;
+ 8000590: e007 b.n 80005a2 <APPE_SysEvtReadyProcessing+0x80>
+ else if (p_sys_ready_event->sysevt_ready_rsp == FUS_FW_RUNNING)
+ 8000592: 69bb ldr r3, [r7, #24]
+ 8000594: 781b ldrb r3, [r3, #0]
+ 8000596: 2b01 cmp r3, #1
+ 8000598: d103 bne.n 80005a2 <APPE_SysEvtReadyProcessing+0x80>
+ ((tSHCI_UserEvtRxParam*)pPayload)->status = SHCI_TL_UserEventFlow_Disable;
+ 800059a: 687b ldr r3, [r7, #4]
+ 800059c: 2200 movs r2, #0
+ 800059e: 701a strb r2, [r3, #0]
+ return;
+ 80005a0: bf00 nop
+ 80005a2: bf00 nop
+}
+ 80005a4: 3728 adds r7, #40 @ 0x28
+ 80005a6: 46bd mov sp, r7
+ 80005a8: bd80 pop {r7, pc}
+
+080005aa <HAL_Delay>:
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+void HAL_Delay(uint32_t Delay)
+{
+ 80005aa: b580 push {r7, lr}
+ 80005ac: b084 sub sp, #16
+ 80005ae: af00 add r7, sp, #0
+ 80005b0: 6078 str r0, [r7, #4]
+ uint32_t tickstart = HAL_GetTick();
+ 80005b2: f001 f9f7 bl 80019a4 <HAL_GetTick>
+ 80005b6: 60b8 str r0, [r7, #8]
+ uint32_t wait = Delay;
+ 80005b8: 687b ldr r3, [r7, #4]
+ 80005ba: 60fb str r3, [r7, #12]
+
+ /* Add a freq to guarantee minimum wait */
+ if (wait < HAL_MAX_DELAY)
+ 80005bc: 68fb ldr r3, [r7, #12]
+ 80005be: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
+ 80005c2: d00a beq.n 80005da <HAL_Delay+0x30>
+ {
+ wait += HAL_GetTickFreq();
+ 80005c4: f001 fa06 bl 80019d4 <HAL_GetTickFreq>
+ 80005c8: 4603 mov r3, r0
+ 80005ca: 461a mov r2, r3
+ 80005cc: 68fb ldr r3, [r7, #12]
+ 80005ce: 4413 add r3, r2
+ 80005d0: 60fb str r3, [r7, #12]
+ }
+
+ while ((HAL_GetTick() - tickstart) < wait)
+ 80005d2: e002 b.n 80005da <HAL_Delay+0x30>
+ {
+ /************************************************************************************
+ * ENTER SLEEP MODE
+ ***********************************************************************************/
+ LL_LPM_EnableSleep(); /**< Clear SLEEPDEEP bit of Cortex System Control Register */
+ 80005d4: f7ff fe6e bl 80002b4 <LL_LPM_EnableSleep>
+ */
+ #if defined (__CC_ARM) || defined (__ARMCC_VERSION)
+ __force_stores();
+ #endif /* __ARMCC_VERSION */
+
+ __WFI();
+ 80005d8: bf30 wfi
+ while ((HAL_GetTick() - tickstart) < wait)
+ 80005da: f001 f9e3 bl 80019a4 <HAL_GetTick>
+ 80005de: 4602 mov r2, r0
+ 80005e0: 68bb ldr r3, [r7, #8]
+ 80005e2: 1ad3 subs r3, r2, r3
+ 80005e4: 68fa ldr r2, [r7, #12]
+ 80005e6: 429a cmp r2, r3
+ 80005e8: d8f4 bhi.n 80005d4 <HAL_Delay+0x2a>
+ }
+}
+ 80005ea: bf00 nop
+ 80005ec: bf00 nop
+ 80005ee: 3710 adds r7, #16
+ 80005f0: 46bd mov sp, r7
+ 80005f2: bd80 pop {r7, pc}
+
+080005f4 <MX_APPE_Process>:
+
+void MX_APPE_Process(void)
+{
+ 80005f4: b580 push {r7, lr}
+ 80005f6: af00 add r7, sp, #0
+ /* USER CODE BEGIN MX_APPE_Process_1 */
+
+ /* USER CODE END MX_APPE_Process_1 */
+ UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
+ 80005f8: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
+ 80005fc: f006 ffc6 bl 800758c <UTIL_SEQ_Run>
+ /* USER CODE BEGIN MX_APPE_Process_2 */
+
+ /* USER CODE END MX_APPE_Process_2 */
+}
+ 8000600: bf00 nop
+ 8000602: bd80 pop {r7, pc}
+
+08000604 <UTIL_SEQ_Idle>:
+
+void UTIL_SEQ_Idle(void)
+{
+ 8000604: b480 push {r7}
+ 8000606: af00 add r7, sp, #0
+#if (CFG_LPM_SUPPORTED == 1)
+ UTIL_LPM_EnterLowPower();
+#endif /* CFG_LPM_SUPPORTED == 1 */
+ return;
+ 8000608: bf00 nop
+}
+ 800060a: 46bd mov sp, r7
+ 800060c: f85d 7b04 ldr.w r7, [sp], #4
+ 8000610: 4770 bx lr
+
+08000612 <shci_notify_asynch_evt>:
+
+void shci_notify_asynch_evt(void* pdata)
+{
+ 8000612: b580 push {r7, lr}
+ 8000614: b082 sub sp, #8
+ 8000616: af00 add r7, sp, #0
+ 8000618: 6078 str r0, [r7, #4]
+ UTIL_SEQ_SetTask(1<<CFG_TASK_SYSTEM_HCI_ASYNCH_EVT_ID, CFG_SCH_PRIO_0);
+ 800061a: 2100 movs r1, #0
+ 800061c: 2004 movs r0, #4
+ 800061e: f007 f959 bl 80078d4 <UTIL_SEQ_SetTask>
+ return;
+ 8000622: bf00 nop
+}
+ 8000624: 3708 adds r7, #8
+ 8000626: 46bd mov sp, r7
+ 8000628: bd80 pop {r7, pc}
+
+0800062a <shci_cmd_resp_release>:
+
+void shci_cmd_resp_release(uint32_t flag)
+{
+ 800062a: b580 push {r7, lr}
+ 800062c: b082 sub sp, #8
+ 800062e: af00 add r7, sp, #0
+ 8000630: 6078 str r0, [r7, #4]
+ UTIL_SEQ_SetEvt(1<< CFG_IDLEEVT_SYSTEM_HCI_CMD_EVT_RSP_ID);
+ 8000632: 2002 movs r0, #2
+ 8000634: f007 f9ba bl 80079ac <UTIL_SEQ_SetEvt>
+ return;
+ 8000638: bf00 nop
+}
+ 800063a: 3708 adds r7, #8
+ 800063c: 46bd mov sp, r7
+ 800063e: bd80 pop {r7, pc}
+
+08000640 <shci_cmd_resp_wait>:
+
+void shci_cmd_resp_wait(uint32_t timeout)
+{
+ 8000640: b580 push {r7, lr}
+ 8000642: b082 sub sp, #8
+ 8000644: af00 add r7, sp, #0
+ 8000646: 6078 str r0, [r7, #4]
+ UTIL_SEQ_WaitEvt(1<< CFG_IDLEEVT_SYSTEM_HCI_CMD_EVT_RSP_ID);
+ 8000648: 2002 movs r0, #2
+ 800064a: f007 f9cf bl 80079ec <UTIL_SEQ_WaitEvt>
+ return;
+ 800064e: bf00 nop
+}
+ 8000650: 3708 adds r7, #8
+ 8000652: 46bd mov sp, r7
+ 8000654: bd80 pop {r7, pc}
+ ...
+
+08000658 <LL_EXTI_EnableIT_0_31>:
+{
+ 8000658: b480 push {r7}
+ 800065a: b083 sub sp, #12
+ 800065c: af00 add r7, sp, #0
+ 800065e: 6078 str r0, [r7, #4]
+ SET_BIT(EXTI->IMR1, ExtiLine);
+ 8000660: 4b06 ldr r3, [pc, #24] @ (800067c <LL_EXTI_EnableIT_0_31+0x24>)
+ 8000662: f8d3 2080 ldr.w r2, [r3, #128] @ 0x80
+ 8000666: 4905 ldr r1, [pc, #20] @ (800067c <LL_EXTI_EnableIT_0_31+0x24>)
+ 8000668: 687b ldr r3, [r7, #4]
+ 800066a: 4313 orrs r3, r2
+ 800066c: f8c1 3080 str.w r3, [r1, #128] @ 0x80
+}
+ 8000670: bf00 nop
+ 8000672: 370c adds r7, #12
+ 8000674: 46bd mov sp, r7
+ 8000676: f85d 7b04 ldr.w r7, [sp], #4
+ 800067a: 4770 bx lr
+ 800067c: 58000800 .word 0x58000800
+
+08000680 <LL_EXTI_EnableRisingTrig_0_31>:
+ * @arg @ref LL_EXTI_LINE_31 (*)
+ * (*) value not defined in all devices
+ * @retval None
+ */
+__STATIC_INLINE void LL_EXTI_EnableRisingTrig_0_31(uint32_t ExtiLine)
+{
+ 8000680: b480 push {r7}
+ 8000682: b083 sub sp, #12
+ 8000684: af00 add r7, sp, #0
+ 8000686: 6078 str r0, [r7, #4]
+ SET_BIT(EXTI->RTSR1, ExtiLine);
+ 8000688: 4b05 ldr r3, [pc, #20] @ (80006a0 <LL_EXTI_EnableRisingTrig_0_31+0x20>)
+ 800068a: 681a ldr r2, [r3, #0]
+ 800068c: 4904 ldr r1, [pc, #16] @ (80006a0 <LL_EXTI_EnableRisingTrig_0_31+0x20>)
+ 800068e: 687b ldr r3, [r7, #4]
+ 8000690: 4313 orrs r3, r2
+ 8000692: 600b str r3, [r1, #0]
+
+}
+ 8000694: bf00 nop
+ 8000696: 370c adds r7, #12
+ 8000698: 46bd mov sp, r7
+ 800069a: f85d 7b04 ldr.w r7, [sp], #4
+ 800069e: 4770 bx lr
+ 80006a0: 58000800 .word 0x58000800
+
+080006a4 <ReadRtcSsrValue>:
+ * reliability of the value
+ * @param None
+ * @retval SSR value read
+ */
+static uint32_t ReadRtcSsrValue(void)
+{
+ 80006a4: b480 push {r7}
+ 80006a6: b083 sub sp, #12
+ 80006a8: af00 add r7, sp, #0
+ uint32_t first_read;
+ uint32_t second_read;
+
+ first_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+ 80006aa: 4b0d ldr r3, [pc, #52] @ (80006e0 <ReadRtcSsrValue+0x3c>)
+ 80006ac: 6a9b ldr r3, [r3, #40] @ 0x28
+ 80006ae: b29b uxth r3, r3
+ 80006b0: 607b str r3, [r7, #4]
+
+ second_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+ 80006b2: 4b0b ldr r3, [pc, #44] @ (80006e0 <ReadRtcSsrValue+0x3c>)
+ 80006b4: 6a9b ldr r3, [r3, #40] @ 0x28
+ 80006b6: b29b uxth r3, r3
+ 80006b8: 603b str r3, [r7, #0]
+
+ while(first_read != second_read)
+ 80006ba: e005 b.n 80006c8 <ReadRtcSsrValue+0x24>
+ {
+ first_read = second_read;
+ 80006bc: 683b ldr r3, [r7, #0]
+ 80006be: 607b str r3, [r7, #4]
+
+ second_read = (uint32_t)(READ_BIT(RTC->SSR, RTC_SSR_SS));
+ 80006c0: 4b07 ldr r3, [pc, #28] @ (80006e0 <ReadRtcSsrValue+0x3c>)
+ 80006c2: 6a9b ldr r3, [r3, #40] @ 0x28
+ 80006c4: b29b uxth r3, r3
+ 80006c6: 603b str r3, [r7, #0]
+ while(first_read != second_read)
+ 80006c8: 687a ldr r2, [r7, #4]
+ 80006ca: 683b ldr r3, [r7, #0]
+ 80006cc: 429a cmp r2, r3
+ 80006ce: d1f5 bne.n 80006bc <ReadRtcSsrValue+0x18>
+ }
+
+ return second_read;
+ 80006d0: 683b ldr r3, [r7, #0]
+}
+ 80006d2: 4618 mov r0, r3
+ 80006d4: 370c adds r7, #12
+ 80006d6: 46bd mov sp, r7
+ 80006d8: f85d 7b04 ldr.w r7, [sp], #4
+ 80006dc: 4770 bx lr
+ 80006de: bf00 nop
+ 80006e0: 40002800 .word 0x40002800
+
+080006e4 <LinkTimerAfter>:
+ * @param TimerID: The ID of the Timer
+ * @param RefTimerID: The ID of the Timer to be linked after
+ * @retval None
+ */
+static void LinkTimerAfter(uint8_t TimerID, uint8_t RefTimerID)
+{
+ 80006e4: b480 push {r7}
+ 80006e6: b085 sub sp, #20
+ 80006e8: af00 add r7, sp, #0
+ 80006ea: 4603 mov r3, r0
+ 80006ec: 460a mov r2, r1
+ 80006ee: 71fb strb r3, [r7, #7]
+ 80006f0: 4613 mov r3, r2
+ 80006f2: 71bb strb r3, [r7, #6]
+ uint8_t next_id;
+
+ next_id = aTimerContext[RefTimerID].NextID;
+ 80006f4: 79ba ldrb r2, [r7, #6]
+ 80006f6: 491d ldr r1, [pc, #116] @ (800076c <LinkTimerAfter+0x88>)
+ 80006f8: 4613 mov r3, r2
+ 80006fa: 005b lsls r3, r3, #1
+ 80006fc: 4413 add r3, r2
+ 80006fe: 00db lsls r3, r3, #3
+ 8000700: 440b add r3, r1
+ 8000702: 3315 adds r3, #21
+ 8000704: 781b ldrb r3, [r3, #0]
+ 8000706: 73fb strb r3, [r7, #15]
+
+ if(next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 8000708: 7bfb ldrb r3, [r7, #15]
+ 800070a: 2b06 cmp r3, #6
+ 800070c: d009 beq.n 8000722 <LinkTimerAfter+0x3e>
+ {
+ aTimerContext[next_id].PreviousID = TimerID;
+ 800070e: 7bfa ldrb r2, [r7, #15]
+ 8000710: 4916 ldr r1, [pc, #88] @ (800076c <LinkTimerAfter+0x88>)
+ 8000712: 4613 mov r3, r2
+ 8000714: 005b lsls r3, r3, #1
+ 8000716: 4413 add r3, r2
+ 8000718: 00db lsls r3, r3, #3
+ 800071a: 440b add r3, r1
+ 800071c: 3314 adds r3, #20
+ 800071e: 79fa ldrb r2, [r7, #7]
+ 8000720: 701a strb r2, [r3, #0]
+ }
+ aTimerContext[TimerID].NextID = next_id;
+ 8000722: 79fa ldrb r2, [r7, #7]
+ 8000724: 4911 ldr r1, [pc, #68] @ (800076c <LinkTimerAfter+0x88>)
+ 8000726: 4613 mov r3, r2
+ 8000728: 005b lsls r3, r3, #1
+ 800072a: 4413 add r3, r2
+ 800072c: 00db lsls r3, r3, #3
+ 800072e: 440b add r3, r1
+ 8000730: 3315 adds r3, #21
+ 8000732: 7bfa ldrb r2, [r7, #15]
+ 8000734: 701a strb r2, [r3, #0]
+ aTimerContext[TimerID].PreviousID = RefTimerID ;
+ 8000736: 79fa ldrb r2, [r7, #7]
+ 8000738: 490c ldr r1, [pc, #48] @ (800076c <LinkTimerAfter+0x88>)
+ 800073a: 4613 mov r3, r2
+ 800073c: 005b lsls r3, r3, #1
+ 800073e: 4413 add r3, r2
+ 8000740: 00db lsls r3, r3, #3
+ 8000742: 440b add r3, r1
+ 8000744: 3314 adds r3, #20
+ 8000746: 79ba ldrb r2, [r7, #6]
+ 8000748: 701a strb r2, [r3, #0]
+ aTimerContext[RefTimerID].NextID = TimerID;
+ 800074a: 79ba ldrb r2, [r7, #6]
+ 800074c: 4907 ldr r1, [pc, #28] @ (800076c <LinkTimerAfter+0x88>)
+ 800074e: 4613 mov r3, r2
+ 8000750: 005b lsls r3, r3, #1
+ 8000752: 4413 add r3, r2
+ 8000754: 00db lsls r3, r3, #3
+ 8000756: 440b add r3, r1
+ 8000758: 3315 adds r3, #21
+ 800075a: 79fa ldrb r2, [r7, #7]
+ 800075c: 701a strb r2, [r3, #0]
+
+ return;
+ 800075e: bf00 nop
+}
+ 8000760: 3714 adds r7, #20
+ 8000762: 46bd mov sp, r7
+ 8000764: f85d 7b04 ldr.w r7, [sp], #4
+ 8000768: 4770 bx lr
+ 800076a: bf00 nop
+ 800076c: 2000009c .word 0x2000009c
+
+08000770 <LinkTimerBefore>:
+ * @param TimerID: The ID of the Timer
+ * @param RefTimerID: The ID of the Timer to be linked before
+ * @retval None
+ */
+static void LinkTimerBefore(uint8_t TimerID, uint8_t RefTimerID)
+{
+ 8000770: b480 push {r7}
+ 8000772: b085 sub sp, #20
+ 8000774: af00 add r7, sp, #0
+ 8000776: 4603 mov r3, r0
+ 8000778: 460a mov r2, r1
+ 800077a: 71fb strb r3, [r7, #7]
+ 800077c: 4613 mov r3, r2
+ 800077e: 71bb strb r3, [r7, #6]
+ uint8_t previous_id;
+
+ if(RefTimerID != CurrentRunningTimerID)
+ 8000780: 4b29 ldr r3, [pc, #164] @ (8000828 <LinkTimerBefore+0xb8>)
+ 8000782: 781b ldrb r3, [r3, #0]
+ 8000784: b2db uxtb r3, r3
+ 8000786: 79ba ldrb r2, [r7, #6]
+ 8000788: 429a cmp r2, r3
+ 800078a: d032 beq.n 80007f2 <LinkTimerBefore+0x82>
+ {
+ previous_id = aTimerContext[RefTimerID].PreviousID;
+ 800078c: 79ba ldrb r2, [r7, #6]
+ 800078e: 4927 ldr r1, [pc, #156] @ (800082c <LinkTimerBefore+0xbc>)
+ 8000790: 4613 mov r3, r2
+ 8000792: 005b lsls r3, r3, #1
+ 8000794: 4413 add r3, r2
+ 8000796: 00db lsls r3, r3, #3
+ 8000798: 440b add r3, r1
+ 800079a: 3314 adds r3, #20
+ 800079c: 781b ldrb r3, [r3, #0]
+ 800079e: 73fb strb r3, [r7, #15]
+
+ aTimerContext[previous_id].NextID = TimerID;
+ 80007a0: 7bfa ldrb r2, [r7, #15]
+ 80007a2: 4922 ldr r1, [pc, #136] @ (800082c <LinkTimerBefore+0xbc>)
+ 80007a4: 4613 mov r3, r2
+ 80007a6: 005b lsls r3, r3, #1
+ 80007a8: 4413 add r3, r2
+ 80007aa: 00db lsls r3, r3, #3
+ 80007ac: 440b add r3, r1
+ 80007ae: 3315 adds r3, #21
+ 80007b0: 79fa ldrb r2, [r7, #7]
+ 80007b2: 701a strb r2, [r3, #0]
+ aTimerContext[TimerID].NextID = RefTimerID;
+ 80007b4: 79fa ldrb r2, [r7, #7]
+ 80007b6: 491d ldr r1, [pc, #116] @ (800082c <LinkTimerBefore+0xbc>)
+ 80007b8: 4613 mov r3, r2
+ 80007ba: 005b lsls r3, r3, #1
+ 80007bc: 4413 add r3, r2
+ 80007be: 00db lsls r3, r3, #3
+ 80007c0: 440b add r3, r1
+ 80007c2: 3315 adds r3, #21
+ 80007c4: 79ba ldrb r2, [r7, #6]
+ 80007c6: 701a strb r2, [r3, #0]
+ aTimerContext[TimerID].PreviousID = previous_id ;
+ 80007c8: 79fa ldrb r2, [r7, #7]
+ 80007ca: 4918 ldr r1, [pc, #96] @ (800082c <LinkTimerBefore+0xbc>)
+ 80007cc: 4613 mov r3, r2
+ 80007ce: 005b lsls r3, r3, #1
+ 80007d0: 4413 add r3, r2
+ 80007d2: 00db lsls r3, r3, #3
+ 80007d4: 440b add r3, r1
+ 80007d6: 3314 adds r3, #20
+ 80007d8: 7bfa ldrb r2, [r7, #15]
+ 80007da: 701a strb r2, [r3, #0]
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ 80007dc: 79ba ldrb r2, [r7, #6]
+ 80007de: 4913 ldr r1, [pc, #76] @ (800082c <LinkTimerBefore+0xbc>)
+ 80007e0: 4613 mov r3, r2
+ 80007e2: 005b lsls r3, r3, #1
+ 80007e4: 4413 add r3, r2
+ 80007e6: 00db lsls r3, r3, #3
+ 80007e8: 440b add r3, r1
+ 80007ea: 3314 adds r3, #20
+ 80007ec: 79fa ldrb r2, [r7, #7]
+ 80007ee: 701a strb r2, [r3, #0]
+ {
+ aTimerContext[TimerID].NextID = RefTimerID;
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ }
+
+ return;
+ 80007f0: e014 b.n 800081c <LinkTimerBefore+0xac>
+ aTimerContext[TimerID].NextID = RefTimerID;
+ 80007f2: 79fa ldrb r2, [r7, #7]
+ 80007f4: 490d ldr r1, [pc, #52] @ (800082c <LinkTimerBefore+0xbc>)
+ 80007f6: 4613 mov r3, r2
+ 80007f8: 005b lsls r3, r3, #1
+ 80007fa: 4413 add r3, r2
+ 80007fc: 00db lsls r3, r3, #3
+ 80007fe: 440b add r3, r1
+ 8000800: 3315 adds r3, #21
+ 8000802: 79ba ldrb r2, [r7, #6]
+ 8000804: 701a strb r2, [r3, #0]
+ aTimerContext[RefTimerID].PreviousID = TimerID;
+ 8000806: 79ba ldrb r2, [r7, #6]
+ 8000808: 4908 ldr r1, [pc, #32] @ (800082c <LinkTimerBefore+0xbc>)
+ 800080a: 4613 mov r3, r2
+ 800080c: 005b lsls r3, r3, #1
+ 800080e: 4413 add r3, r2
+ 8000810: 00db lsls r3, r3, #3
+ 8000812: 440b add r3, r1
+ 8000814: 3314 adds r3, #20
+ 8000816: 79fa ldrb r2, [r7, #7]
+ 8000818: 701a strb r2, [r3, #0]
+ return;
+ 800081a: bf00 nop
+}
+ 800081c: 3714 adds r7, #20
+ 800081e: 46bd mov sp, r7
+ 8000820: f85d 7b04 ldr.w r7, [sp], #4
+ 8000824: 4770 bx lr
+ 8000826: bf00 nop
+ 8000828: 2000012c .word 0x2000012c
+ 800082c: 2000009c .word 0x2000009c
+
+08000830 <linkTimer>:
+ * @brief Insert a Timer in the list
+ * @param TimerID: The ID of the Timer
+ * @retval None
+ */
+static uint16_t linkTimer(uint8_t TimerID)
+{
+ 8000830: b580 push {r7, lr}
+ 8000832: b084 sub sp, #16
+ 8000834: af00 add r7, sp, #0
+ 8000836: 4603 mov r3, r0
+ 8000838: 71fb strb r3, [r7, #7]
+ uint32_t time_left;
+ uint16_t time_elapsed;
+ uint8_t timer_id_lookup;
+ uint8_t next_id;
+
+ if(CurrentRunningTimerID == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 800083a: 4b4e ldr r3, [pc, #312] @ (8000974 <linkTimer+0x144>)
+ 800083c: 781b ldrb r3, [r3, #0]
+ 800083e: b2db uxtb r3, r3
+ 8000840: 2b06 cmp r3, #6
+ 8000842: d118 bne.n 8000876 <linkTimer+0x46>
+ {
+ /**
+ * No timer in the list
+ */
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ 8000844: 4b4b ldr r3, [pc, #300] @ (8000974 <linkTimer+0x144>)
+ 8000846: 781b ldrb r3, [r3, #0]
+ 8000848: b2da uxtb r2, r3
+ 800084a: 4b4b ldr r3, [pc, #300] @ (8000978 <linkTimer+0x148>)
+ 800084c: 701a strb r2, [r3, #0]
+ CurrentRunningTimerID = TimerID;
+ 800084e: 4a49 ldr r2, [pc, #292] @ (8000974 <linkTimer+0x144>)
+ 8000850: 79fb ldrb r3, [r7, #7]
+ 8000852: 7013 strb r3, [r2, #0]
+ aTimerContext[TimerID].NextID = CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER;
+ 8000854: 79fa ldrb r2, [r7, #7]
+ 8000856: 4949 ldr r1, [pc, #292] @ (800097c <linkTimer+0x14c>)
+ 8000858: 4613 mov r3, r2
+ 800085a: 005b lsls r3, r3, #1
+ 800085c: 4413 add r3, r2
+ 800085e: 00db lsls r3, r3, #3
+ 8000860: 440b add r3, r1
+ 8000862: 3315 adds r3, #21
+ 8000864: 2206 movs r2, #6
+ 8000866: 701a strb r2, [r3, #0]
+
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ 8000868: 4b45 ldr r3, [pc, #276] @ (8000980 <linkTimer+0x150>)
+ 800086a: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
+ 800086e: 601a str r2, [r3, #0]
+ time_elapsed = 0;
+ 8000870: 2300 movs r3, #0
+ 8000872: 81fb strh r3, [r7, #14]
+ 8000874: e078 b.n 8000968 <linkTimer+0x138>
+ }
+ else
+ {
+ time_elapsed = ReturnTimeElapsed();
+ 8000876: f000 f909 bl 8000a8c <ReturnTimeElapsed>
+ 800087a: 4603 mov r3, r0
+ 800087c: 81fb strh r3, [r7, #14]
+
+ /**
+ * update count of the timer to be linked
+ */
+ aTimerContext[TimerID].CountLeft += time_elapsed;
+ 800087e: 79fa ldrb r2, [r7, #7]
+ 8000880: 493e ldr r1, [pc, #248] @ (800097c <linkTimer+0x14c>)
+ 8000882: 4613 mov r3, r2
+ 8000884: 005b lsls r3, r3, #1
+ 8000886: 4413 add r3, r2
+ 8000888: 00db lsls r3, r3, #3
+ 800088a: 440b add r3, r1
+ 800088c: 3308 adds r3, #8
+ 800088e: 6819 ldr r1, [r3, #0]
+ 8000890: 89fb ldrh r3, [r7, #14]
+ 8000892: 79fa ldrb r2, [r7, #7]
+ 8000894: 4419 add r1, r3
+ 8000896: 4839 ldr r0, [pc, #228] @ (800097c <linkTimer+0x14c>)
+ 8000898: 4613 mov r3, r2
+ 800089a: 005b lsls r3, r3, #1
+ 800089c: 4413 add r3, r2
+ 800089e: 00db lsls r3, r3, #3
+ 80008a0: 4403 add r3, r0
+ 80008a2: 3308 adds r3, #8
+ 80008a4: 6019 str r1, [r3, #0]
+ time_left = aTimerContext[TimerID].CountLeft;
+ 80008a6: 79fa ldrb r2, [r7, #7]
+ 80008a8: 4934 ldr r1, [pc, #208] @ (800097c <linkTimer+0x14c>)
+ 80008aa: 4613 mov r3, r2
+ 80008ac: 005b lsls r3, r3, #1
+ 80008ae: 4413 add r3, r2
+ 80008b0: 00db lsls r3, r3, #3
+ 80008b2: 440b add r3, r1
+ 80008b4: 3308 adds r3, #8
+ 80008b6: 681b ldr r3, [r3, #0]
+ 80008b8: 60bb str r3, [r7, #8]
+
+ /**
+ * Search for index where the new timer shall be linked
+ */
+ if(aTimerContext[CurrentRunningTimerID].CountLeft <= time_left)
+ 80008ba: 4b2e ldr r3, [pc, #184] @ (8000974 <linkTimer+0x144>)
+ 80008bc: 781b ldrb r3, [r3, #0]
+ 80008be: b2db uxtb r3, r3
+ 80008c0: 4619 mov r1, r3
+ 80008c2: 4a2e ldr r2, [pc, #184] @ (800097c <linkTimer+0x14c>)
+ 80008c4: 460b mov r3, r1
+ 80008c6: 005b lsls r3, r3, #1
+ 80008c8: 440b add r3, r1
+ 80008ca: 00db lsls r3, r3, #3
+ 80008cc: 4413 add r3, r2
+ 80008ce: 3308 adds r3, #8
+ 80008d0: 681b ldr r3, [r3, #0]
+ 80008d2: 68ba ldr r2, [r7, #8]
+ 80008d4: 429a cmp r2, r3
+ 80008d6: d337 bcc.n 8000948 <linkTimer+0x118>
+ {
+ /**
+ * Search for the ID after the first one
+ */
+ timer_id_lookup = CurrentRunningTimerID;
+ 80008d8: 4b26 ldr r3, [pc, #152] @ (8000974 <linkTimer+0x144>)
+ 80008da: 781b ldrb r3, [r3, #0]
+ 80008dc: 737b strb r3, [r7, #13]
+ next_id = aTimerContext[timer_id_lookup].NextID;
+ 80008de: 7b7a ldrb r2, [r7, #13]
+ 80008e0: 4926 ldr r1, [pc, #152] @ (800097c <linkTimer+0x14c>)
+ 80008e2: 4613 mov r3, r2
+ 80008e4: 005b lsls r3, r3, #1
+ 80008e6: 4413 add r3, r2
+ 80008e8: 00db lsls r3, r3, #3
+ 80008ea: 440b add r3, r1
+ 80008ec: 3315 adds r3, #21
+ 80008ee: 781b ldrb r3, [r3, #0]
+ 80008f0: 733b strb r3, [r7, #12]
+ while((next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[next_id].CountLeft <= time_left))
+ 80008f2: e013 b.n 800091c <linkTimer+0xec>
+ {
+ timer_id_lookup = aTimerContext[timer_id_lookup].NextID;
+ 80008f4: 7b7a ldrb r2, [r7, #13]
+ 80008f6: 4921 ldr r1, [pc, #132] @ (800097c <linkTimer+0x14c>)
+ 80008f8: 4613 mov r3, r2
+ 80008fa: 005b lsls r3, r3, #1
+ 80008fc: 4413 add r3, r2
+ 80008fe: 00db lsls r3, r3, #3
+ 8000900: 440b add r3, r1
+ 8000902: 3315 adds r3, #21
+ 8000904: 781b ldrb r3, [r3, #0]
+ 8000906: 737b strb r3, [r7, #13]
+ next_id = aTimerContext[timer_id_lookup].NextID;
+ 8000908: 7b7a ldrb r2, [r7, #13]
+ 800090a: 491c ldr r1, [pc, #112] @ (800097c <linkTimer+0x14c>)
+ 800090c: 4613 mov r3, r2
+ 800090e: 005b lsls r3, r3, #1
+ 8000910: 4413 add r3, r2
+ 8000912: 00db lsls r3, r3, #3
+ 8000914: 440b add r3, r1
+ 8000916: 3315 adds r3, #21
+ 8000918: 781b ldrb r3, [r3, #0]
+ 800091a: 733b strb r3, [r7, #12]
+ while((next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[next_id].CountLeft <= time_left))
+ 800091c: 7b3b ldrb r3, [r7, #12]
+ 800091e: 2b06 cmp r3, #6
+ 8000920: d00b beq.n 800093a <linkTimer+0x10a>
+ 8000922: 7b3a ldrb r2, [r7, #12]
+ 8000924: 4915 ldr r1, [pc, #84] @ (800097c <linkTimer+0x14c>)
+ 8000926: 4613 mov r3, r2
+ 8000928: 005b lsls r3, r3, #1
+ 800092a: 4413 add r3, r2
+ 800092c: 00db lsls r3, r3, #3
+ 800092e: 440b add r3, r1
+ 8000930: 3308 adds r3, #8
+ 8000932: 681b ldr r3, [r3, #0]
+ 8000934: 68ba ldr r2, [r7, #8]
+ 8000936: 429a cmp r2, r3
+ 8000938: d2dc bcs.n 80008f4 <linkTimer+0xc4>
+ }
+
+ /**
+ * Link after the ID
+ */
+ LinkTimerAfter(TimerID, timer_id_lookup);
+ 800093a: 7b7a ldrb r2, [r7, #13]
+ 800093c: 79fb ldrb r3, [r7, #7]
+ 800093e: 4611 mov r1, r2
+ 8000940: 4618 mov r0, r3
+ 8000942: f7ff fecf bl 80006e4 <LinkTimerAfter>
+ 8000946: e00f b.n 8000968 <linkTimer+0x138>
+ else
+ {
+ /**
+ * Link before the first ID
+ */
+ LinkTimerBefore(TimerID, CurrentRunningTimerID);
+ 8000948: 4b0a ldr r3, [pc, #40] @ (8000974 <linkTimer+0x144>)
+ 800094a: 781b ldrb r3, [r3, #0]
+ 800094c: b2da uxtb r2, r3
+ 800094e: 79fb ldrb r3, [r7, #7]
+ 8000950: 4611 mov r1, r2
+ 8000952: 4618 mov r0, r3
+ 8000954: f7ff ff0c bl 8000770 <LinkTimerBefore>
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ 8000958: 4b06 ldr r3, [pc, #24] @ (8000974 <linkTimer+0x144>)
+ 800095a: 781b ldrb r3, [r3, #0]
+ 800095c: b2da uxtb r2, r3
+ 800095e: 4b06 ldr r3, [pc, #24] @ (8000978 <linkTimer+0x148>)
+ 8000960: 701a strb r2, [r3, #0]
+ CurrentRunningTimerID = TimerID;
+ 8000962: 4a04 ldr r2, [pc, #16] @ (8000974 <linkTimer+0x144>)
+ 8000964: 79fb ldrb r3, [r7, #7]
+ 8000966: 7013 strb r3, [r2, #0]
+ }
+ }
+
+ return time_elapsed;
+ 8000968: 89fb ldrh r3, [r7, #14]
+}
+ 800096a: 4618 mov r0, r3
+ 800096c: 3710 adds r7, #16
+ 800096e: 46bd mov sp, r7
+ 8000970: bd80 pop {r7, pc}
+ 8000972: bf00 nop
+ 8000974: 2000012c .word 0x2000012c
+ 8000978: 2000012d .word 0x2000012d
+ 800097c: 2000009c .word 0x2000009c
+ 8000980: 20000130 .word 0x20000130
+
+08000984 <UnlinkTimer>:
+ * @param TimerID: The ID of the Timer
+ * @param RequestReadSSR: Request to read the SSR register or not
+ * @retval None
+ */
+static void UnlinkTimer(uint8_t TimerID, RequestReadSSR_t RequestReadSSR)
+{
+ 8000984: b480 push {r7}
+ 8000986: b085 sub sp, #20
+ 8000988: af00 add r7, sp, #0
+ 800098a: 4603 mov r3, r0
+ 800098c: 460a mov r2, r1
+ 800098e: 71fb strb r3, [r7, #7]
+ 8000990: 4613 mov r3, r2
+ 8000992: 71bb strb r3, [r7, #6]
+ uint8_t previous_id;
+ uint8_t next_id;
+
+ if(TimerID == CurrentRunningTimerID)
+ 8000994: 4b39 ldr r3, [pc, #228] @ (8000a7c <UnlinkTimer+0xf8>)
+ 8000996: 781b ldrb r3, [r3, #0]
+ 8000998: b2db uxtb r3, r3
+ 800099a: 79fa ldrb r2, [r7, #7]
+ 800099c: 429a cmp r2, r3
+ 800099e: d111 bne.n 80009c4 <UnlinkTimer+0x40>
+ {
+ PreviousRunningTimerID = CurrentRunningTimerID;
+ 80009a0: 4b36 ldr r3, [pc, #216] @ (8000a7c <UnlinkTimer+0xf8>)
+ 80009a2: 781b ldrb r3, [r3, #0]
+ 80009a4: b2da uxtb r2, r3
+ 80009a6: 4b36 ldr r3, [pc, #216] @ (8000a80 <UnlinkTimer+0xfc>)
+ 80009a8: 701a strb r2, [r3, #0]
+ CurrentRunningTimerID = aTimerContext[TimerID].NextID;
+ 80009aa: 79fa ldrb r2, [r7, #7]
+ 80009ac: 4935 ldr r1, [pc, #212] @ (8000a84 <UnlinkTimer+0x100>)
+ 80009ae: 4613 mov r3, r2
+ 80009b0: 005b lsls r3, r3, #1
+ 80009b2: 4413 add r3, r2
+ 80009b4: 00db lsls r3, r3, #3
+ 80009b6: 440b add r3, r1
+ 80009b8: 3315 adds r3, #21
+ 80009ba: 781b ldrb r3, [r3, #0]
+ 80009bc: b2da uxtb r2, r3
+ 80009be: 4b2f ldr r3, [pc, #188] @ (8000a7c <UnlinkTimer+0xf8>)
+ 80009c0: 701a strb r2, [r3, #0]
+ 80009c2: e03e b.n 8000a42 <UnlinkTimer+0xbe>
+ }
+ else
+ {
+ previous_id = aTimerContext[TimerID].PreviousID;
+ 80009c4: 79fa ldrb r2, [r7, #7]
+ 80009c6: 492f ldr r1, [pc, #188] @ (8000a84 <UnlinkTimer+0x100>)
+ 80009c8: 4613 mov r3, r2
+ 80009ca: 005b lsls r3, r3, #1
+ 80009cc: 4413 add r3, r2
+ 80009ce: 00db lsls r3, r3, #3
+ 80009d0: 440b add r3, r1
+ 80009d2: 3314 adds r3, #20
+ 80009d4: 781b ldrb r3, [r3, #0]
+ 80009d6: 73fb strb r3, [r7, #15]
+ next_id = aTimerContext[TimerID].NextID;
+ 80009d8: 79fa ldrb r2, [r7, #7]
+ 80009da: 492a ldr r1, [pc, #168] @ (8000a84 <UnlinkTimer+0x100>)
+ 80009dc: 4613 mov r3, r2
+ 80009de: 005b lsls r3, r3, #1
+ 80009e0: 4413 add r3, r2
+ 80009e2: 00db lsls r3, r3, #3
+ 80009e4: 440b add r3, r1
+ 80009e6: 3315 adds r3, #21
+ 80009e8: 781b ldrb r3, [r3, #0]
+ 80009ea: 73bb strb r3, [r7, #14]
+
+ aTimerContext[previous_id].NextID = aTimerContext[TimerID].NextID;
+ 80009ec: 79f9 ldrb r1, [r7, #7]
+ 80009ee: 7bfa ldrb r2, [r7, #15]
+ 80009f0: 4824 ldr r0, [pc, #144] @ (8000a84 <UnlinkTimer+0x100>)
+ 80009f2: 460b mov r3, r1
+ 80009f4: 005b lsls r3, r3, #1
+ 80009f6: 440b add r3, r1
+ 80009f8: 00db lsls r3, r3, #3
+ 80009fa: 4403 add r3, r0
+ 80009fc: 3315 adds r3, #21
+ 80009fe: 781b ldrb r3, [r3, #0]
+ 8000a00: b2d8 uxtb r0, r3
+ 8000a02: 4920 ldr r1, [pc, #128] @ (8000a84 <UnlinkTimer+0x100>)
+ 8000a04: 4613 mov r3, r2
+ 8000a06: 005b lsls r3, r3, #1
+ 8000a08: 4413 add r3, r2
+ 8000a0a: 00db lsls r3, r3, #3
+ 8000a0c: 440b add r3, r1
+ 8000a0e: 3315 adds r3, #21
+ 8000a10: 4602 mov r2, r0
+ 8000a12: 701a strb r2, [r3, #0]
+ if(next_id != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 8000a14: 7bbb ldrb r3, [r7, #14]
+ 8000a16: 2b06 cmp r3, #6
+ 8000a18: d013 beq.n 8000a42 <UnlinkTimer+0xbe>
+ {
+ aTimerContext[next_id].PreviousID = aTimerContext[TimerID].PreviousID;
+ 8000a1a: 79f9 ldrb r1, [r7, #7]
+ 8000a1c: 7bba ldrb r2, [r7, #14]
+ 8000a1e: 4819 ldr r0, [pc, #100] @ (8000a84 <UnlinkTimer+0x100>)
+ 8000a20: 460b mov r3, r1
+ 8000a22: 005b lsls r3, r3, #1
+ 8000a24: 440b add r3, r1
+ 8000a26: 00db lsls r3, r3, #3
+ 8000a28: 4403 add r3, r0
+ 8000a2a: 3314 adds r3, #20
+ 8000a2c: 781b ldrb r3, [r3, #0]
+ 8000a2e: b2d8 uxtb r0, r3
+ 8000a30: 4914 ldr r1, [pc, #80] @ (8000a84 <UnlinkTimer+0x100>)
+ 8000a32: 4613 mov r3, r2
+ 8000a34: 005b lsls r3, r3, #1
+ 8000a36: 4413 add r3, r2
+ 8000a38: 00db lsls r3, r3, #3
+ 8000a3a: 440b add r3, r1
+ 8000a3c: 3314 adds r3, #20
+ 8000a3e: 4602 mov r2, r0
+ 8000a40: 701a strb r2, [r3, #0]
+ }
+
+ /**
+ * Timer is out of the list
+ */
+ aTimerContext[TimerID].TimerIDStatus = TimerID_Created;
+ 8000a42: 79fa ldrb r2, [r7, #7]
+ 8000a44: 490f ldr r1, [pc, #60] @ (8000a84 <UnlinkTimer+0x100>)
+ 8000a46: 4613 mov r3, r2
+ 8000a48: 005b lsls r3, r3, #1
+ 8000a4a: 4413 add r3, r2
+ 8000a4c: 00db lsls r3, r3, #3
+ 8000a4e: 440b add r3, r1
+ 8000a50: 330c adds r3, #12
+ 8000a52: 2201 movs r2, #1
+ 8000a54: 701a strb r2, [r3, #0]
+
+ if((CurrentRunningTimerID == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (RequestReadSSR == SSR_Read_Requested))
+ 8000a56: 4b09 ldr r3, [pc, #36] @ (8000a7c <UnlinkTimer+0xf8>)
+ 8000a58: 781b ldrb r3, [r3, #0]
+ 8000a5a: b2db uxtb r3, r3
+ 8000a5c: 2b06 cmp r3, #6
+ 8000a5e: d107 bne.n 8000a70 <UnlinkTimer+0xec>
+ 8000a60: 79bb ldrb r3, [r7, #6]
+ 8000a62: 2b00 cmp r3, #0
+ 8000a64: d104 bne.n 8000a70 <UnlinkTimer+0xec>
+ {
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ 8000a66: 4b08 ldr r3, [pc, #32] @ (8000a88 <UnlinkTimer+0x104>)
+ 8000a68: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
+ 8000a6c: 601a str r2, [r3, #0]
+ }
+
+ return;
+ 8000a6e: bf00 nop
+ 8000a70: bf00 nop
+}
+ 8000a72: 3714 adds r7, #20
+ 8000a74: 46bd mov sp, r7
+ 8000a76: f85d 7b04 ldr.w r7, [sp], #4
+ 8000a7a: 4770 bx lr
+ 8000a7c: 2000012c .word 0x2000012c
+ 8000a80: 2000012d .word 0x2000012d
+ 8000a84: 2000009c .word 0x2000009c
+ 8000a88: 20000130 .word 0x20000130
+
+08000a8c <ReturnTimeElapsed>:
+ * since the time the timer has been started
+ * @param None
+ * @retval Time expired in Ticks
+ */
+static uint16_t ReturnTimeElapsed(void)
+{
+ 8000a8c: b580 push {r7, lr}
+ 8000a8e: b082 sub sp, #8
+ 8000a90: af00 add r7, sp, #0
+ uint32_t return_value;
+ uint32_t wrap_counter;
+
+ if(SSRValueOnLastSetup != SSR_FORBIDDEN_VALUE)
+ 8000a92: 4b1a ldr r3, [pc, #104] @ (8000afc <ReturnTimeElapsed+0x70>)
+ 8000a94: 681b ldr r3, [r3, #0]
+ 8000a96: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
+ 8000a9a: d026 beq.n 8000aea <ReturnTimeElapsed+0x5e>
+ {
+ return_value = ReadRtcSsrValue(); /**< Read SSR register first */
+ 8000a9c: f7ff fe02 bl 80006a4 <ReadRtcSsrValue>
+ 8000aa0: 6078 str r0, [r7, #4]
+
+ if (SSRValueOnLastSetup >= return_value)
+ 8000aa2: 4b16 ldr r3, [pc, #88] @ (8000afc <ReturnTimeElapsed+0x70>)
+ 8000aa4: 681b ldr r3, [r3, #0]
+ 8000aa6: 687a ldr r2, [r7, #4]
+ 8000aa8: 429a cmp r2, r3
+ 8000aaa: d805 bhi.n 8000ab8 <ReturnTimeElapsed+0x2c>
+ {
+ return_value = SSRValueOnLastSetup - return_value;
+ 8000aac: 4b13 ldr r3, [pc, #76] @ (8000afc <ReturnTimeElapsed+0x70>)
+ 8000aae: 681a ldr r2, [r3, #0]
+ 8000ab0: 687b ldr r3, [r7, #4]
+ 8000ab2: 1ad3 subs r3, r2, r3
+ 8000ab4: 607b str r3, [r7, #4]
+ 8000ab6: e00a b.n 8000ace <ReturnTimeElapsed+0x42>
+ }
+ else
+ {
+ wrap_counter = SynchPrescalerUserConfig - return_value;
+ 8000ab8: 4b11 ldr r3, [pc, #68] @ (8000b00 <ReturnTimeElapsed+0x74>)
+ 8000aba: 881b ldrh r3, [r3, #0]
+ 8000abc: 461a mov r2, r3
+ 8000abe: 687b ldr r3, [r7, #4]
+ 8000ac0: 1ad3 subs r3, r2, r3
+ 8000ac2: 603b str r3, [r7, #0]
+ return_value = SSRValueOnLastSetup + wrap_counter;
+ 8000ac4: 4b0d ldr r3, [pc, #52] @ (8000afc <ReturnTimeElapsed+0x70>)
+ 8000ac6: 681b ldr r3, [r3, #0]
+ 8000ac8: 683a ldr r2, [r7, #0]
+ 8000aca: 4413 add r3, r2
+ 8000acc: 607b str r3, [r7, #4]
+
+ /**
+ * At this stage, ReturnValue holds the number of ticks counted by SSR
+ * Need to translate in number of ticks counted by the Wakeuptimer
+ */
+ return_value = return_value*AsynchPrescalerUserConfig;
+ 8000ace: 4b0d ldr r3, [pc, #52] @ (8000b04 <ReturnTimeElapsed+0x78>)
+ 8000ad0: 781b ldrb r3, [r3, #0]
+ 8000ad2: 461a mov r2, r3
+ 8000ad4: 687b ldr r3, [r7, #4]
+ 8000ad6: fb02 f303 mul.w r3, r2, r3
+ 8000ada: 607b str r3, [r7, #4]
+ return_value = return_value >> WakeupTimerDivider;
+ 8000adc: 4b0a ldr r3, [pc, #40] @ (8000b08 <ReturnTimeElapsed+0x7c>)
+ 8000ade: 781b ldrb r3, [r3, #0]
+ 8000ae0: 461a mov r2, r3
+ 8000ae2: 687b ldr r3, [r7, #4]
+ 8000ae4: 40d3 lsrs r3, r2
+ 8000ae6: 607b str r3, [r7, #4]
+ 8000ae8: e001 b.n 8000aee <ReturnTimeElapsed+0x62>
+ }
+ else
+ {
+ return_value = 0;
+ 8000aea: 2300 movs r3, #0
+ 8000aec: 607b str r3, [r7, #4]
+ }
+
+ return (uint16_t)return_value;
+ 8000aee: 687b ldr r3, [r7, #4]
+ 8000af0: b29b uxth r3, r3
+}
+ 8000af2: 4618 mov r0, r3
+ 8000af4: 3708 adds r7, #8
+ 8000af6: 46bd mov sp, r7
+ 8000af8: bd80 pop {r7, pc}
+ 8000afa: bf00 nop
+ 8000afc: 20000130 .word 0x20000130
+ 8000b00: 20000138 .word 0x20000138
+ 8000b04: 20000136 .word 0x20000136
+ 8000b08: 20000135 .word 0x20000135
+
+08000b0c <RestartWakeupCounter>:
+ * It assumes all condition are met to be allowed to write the wakeup counter
+ * @param Value: Value to be written in the counter
+ * @retval None
+ */
+static void RestartWakeupCounter(uint16_t Value)
+{
+ 8000b0c: b580 push {r7, lr}
+ 8000b0e: b082 sub sp, #8
+ 8000b10: af00 add r7, sp, #0
+ 8000b12: 4603 mov r3, r0
+ 8000b14: 80fb strh r3, [r7, #6]
+ * The wakeuptimer has been disabled in the calling function to reduce the time to poll the WUTWF
+ * FLAG when the new value will have to be written
+ * __HAL_RTC_WAKEUPTIMER_DISABLE(&hrtc);
+ */
+
+ if(Value == 0)
+ 8000b16: 88fb ldrh r3, [r7, #6]
+ 8000b18: 2b00 cmp r3, #0
+ 8000b1a: d108 bne.n 8000b2e <RestartWakeupCounter+0x22>
+ {
+ SSRValueOnLastSetup = ReadRtcSsrValue();
+ 8000b1c: f7ff fdc2 bl 80006a4 <ReadRtcSsrValue>
+ 8000b20: 4603 mov r3, r0
+ 8000b22: 4a21 ldr r2, [pc, #132] @ (8000ba8 <RestartWakeupCounter+0x9c>)
+ 8000b24: 6013 str r3, [r2, #0]
+
+ /**
+ * Simulate that the Timer expired
+ */
+ HAL_NVIC_SetPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID);
+ 8000b26: 2003 movs r0, #3
+ 8000b28: f001 f8dd bl 8001ce6 <HAL_NVIC_SetPendingIRQ>
+ __HAL_RTC_WAKEUPTIMER_ENABLE(&hrtc); /**< Enable the Wakeup Timer */
+
+ HW_TS_RTC_CountUpdated_AppNot();
+ }
+
+ return ;
+ 8000b2c: e039 b.n 8000ba2 <RestartWakeupCounter+0x96>
+ if((Value > 1) ||(WakeupTimerDivider != 1))
+ 8000b2e: 88fb ldrh r3, [r7, #6]
+ 8000b30: 2b01 cmp r3, #1
+ 8000b32: d803 bhi.n 8000b3c <RestartWakeupCounter+0x30>
+ 8000b34: 4b1d ldr r3, [pc, #116] @ (8000bac <RestartWakeupCounter+0xa0>)
+ 8000b36: 781b ldrb r3, [r3, #0]
+ 8000b38: 2b01 cmp r3, #1
+ 8000b3a: d002 beq.n 8000b42 <RestartWakeupCounter+0x36>
+ Value -= 1;
+ 8000b3c: 88fb ldrh r3, [r7, #6]
+ 8000b3e: 3b01 subs r3, #1
+ 8000b40: 80fb strh r3, [r7, #6]
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_WUTWF) == RESET);
+ 8000b42: bf00 nop
+ 8000b44: 4b1a ldr r3, [pc, #104] @ (8000bb0 <RestartWakeupCounter+0xa4>)
+ 8000b46: 681b ldr r3, [r3, #0]
+ 8000b48: 68db ldr r3, [r3, #12]
+ 8000b4a: f003 0304 and.w r3, r3, #4
+ 8000b4e: 2b00 cmp r3, #0
+ 8000b50: d0f8 beq.n 8000b44 <RestartWakeupCounter+0x38>
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ 8000b52: 4b17 ldr r3, [pc, #92] @ (8000bb0 <RestartWakeupCounter+0xa4>)
+ 8000b54: 681b ldr r3, [r3, #0]
+ 8000b56: 68db ldr r3, [r3, #12]
+ 8000b58: b2da uxtb r2, r3
+ 8000b5a: 4b15 ldr r3, [pc, #84] @ (8000bb0 <RestartWakeupCounter+0xa4>)
+ 8000b5c: 681b ldr r3, [r3, #0]
+ 8000b5e: f462 6290 orn r2, r2, #1152 @ 0x480
+ 8000b62: 60da str r2, [r3, #12]
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ 8000b64: 4b13 ldr r3, [pc, #76] @ (8000bb4 <RestartWakeupCounter+0xa8>)
+ 8000b66: f44f 2200 mov.w r2, #524288 @ 0x80000
+ 8000b6a: 60da str r2, [r3, #12]
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ 8000b6c: 2003 movs r0, #3
+ 8000b6e: f001 f8c8 bl 8001d02 <HAL_NVIC_ClearPendingIRQ>
+ MODIFY_REG(RTC->WUTR, RTC_WUTR_WUT, Value);
+ 8000b72: 4b11 ldr r3, [pc, #68] @ (8000bb8 <RestartWakeupCounter+0xac>)
+ 8000b74: 695b ldr r3, [r3, #20]
+ 8000b76: 0c1b lsrs r3, r3, #16
+ 8000b78: 041b lsls r3, r3, #16
+ 8000b7a: 88fa ldrh r2, [r7, #6]
+ 8000b7c: 490e ldr r1, [pc, #56] @ (8000bb8 <RestartWakeupCounter+0xac>)
+ 8000b7e: 4313 orrs r3, r2
+ 8000b80: 614b str r3, [r1, #20]
+ SSRValueOnLastSetup = ReadRtcSsrValue();
+ 8000b82: f7ff fd8f bl 80006a4 <ReadRtcSsrValue>
+ 8000b86: 4603 mov r3, r0
+ 8000b88: 4a07 ldr r2, [pc, #28] @ (8000ba8 <RestartWakeupCounter+0x9c>)
+ 8000b8a: 6013 str r3, [r2, #0]
+ __HAL_RTC_WAKEUPTIMER_ENABLE(&hrtc); /**< Enable the Wakeup Timer */
+ 8000b8c: 4b08 ldr r3, [pc, #32] @ (8000bb0 <RestartWakeupCounter+0xa4>)
+ 8000b8e: 681b ldr r3, [r3, #0]
+ 8000b90: 689a ldr r2, [r3, #8]
+ 8000b92: 4b07 ldr r3, [pc, #28] @ (8000bb0 <RestartWakeupCounter+0xa4>)
+ 8000b94: 681b ldr r3, [r3, #0]
+ 8000b96: f442 6280 orr.w r2, r2, #1024 @ 0x400
+ 8000b9a: 609a str r2, [r3, #8]
+ HW_TS_RTC_CountUpdated_AppNot();
+ 8000b9c: f3af 8000 nop.w
+ return ;
+ 8000ba0: bf00 nop
+}
+ 8000ba2: 3708 adds r7, #8
+ 8000ba4: 46bd mov sp, r7
+ 8000ba6: bd80 pop {r7, pc}
+ 8000ba8: 20000130 .word 0x20000130
+ 8000bac: 20000135 .word 0x20000135
+ 8000bb0: 200001cc .word 0x200001cc
+ 8000bb4: 58000800 .word 0x58000800
+ 8000bb8: 40002800 .word 0x40002800
+
+08000bbc <RescheduleTimerList>:
+ * 2) Setup the wakeuptimer
+ * @param None
+ * @retval None
+ */
+static void RescheduleTimerList(void)
+{
+ 8000bbc: b580 push {r7, lr}
+ 8000bbe: b084 sub sp, #16
+ 8000bc0: af00 add r7, sp, #0
+
+ /**
+ * The wakeuptimer is disabled now to reduce the time to poll the WUTWF
+ * FLAG when the new value will have to be written
+ */
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ 8000bc2: 4b45 ldr r3, [pc, #276] @ (8000cd8 <RescheduleTimerList+0x11c>)
+ 8000bc4: 689b ldr r3, [r3, #8]
+ 8000bc6: f403 6380 and.w r3, r3, #1024 @ 0x400
+ 8000bca: f5b3 6f80 cmp.w r3, #1024 @ 0x400
+ 8000bce: d107 bne.n 8000be0 <RescheduleTimerList+0x24>
+ {
+ /**
+ * Wait for the flag to be back to 0 when the wakeup timer is enabled
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_WUTWF) == SET);
+ 8000bd0: bf00 nop
+ 8000bd2: 4b42 ldr r3, [pc, #264] @ (8000cdc <RescheduleTimerList+0x120>)
+ 8000bd4: 681b ldr r3, [r3, #0]
+ 8000bd6: 68db ldr r3, [r3, #12]
+ 8000bd8: f003 0304 and.w r3, r3, #4
+ 8000bdc: 2b00 cmp r3, #0
+ 8000bde: d1f8 bne.n 8000bd2 <RescheduleTimerList+0x16>
+ }
+ __HAL_RTC_WAKEUPTIMER_DISABLE(&hrtc); /**< Disable the Wakeup Timer */
+ 8000be0: 4b3e ldr r3, [pc, #248] @ (8000cdc <RescheduleTimerList+0x120>)
+ 8000be2: 681b ldr r3, [r3, #0]
+ 8000be4: 689a ldr r2, [r3, #8]
+ 8000be6: 4b3d ldr r3, [pc, #244] @ (8000cdc <RescheduleTimerList+0x120>)
+ 8000be8: 681b ldr r3, [r3, #0]
+ 8000bea: f422 6280 bic.w r2, r2, #1024 @ 0x400
+ 8000bee: 609a str r2, [r3, #8]
+
+ localTimerID = CurrentRunningTimerID;
+ 8000bf0: 4b3b ldr r3, [pc, #236] @ (8000ce0 <RescheduleTimerList+0x124>)
+ 8000bf2: 781b ldrb r3, [r3, #0]
+ 8000bf4: 73fb strb r3, [r7, #15]
+
+ /**
+ * Calculate what will be the value to write in the wakeuptimer
+ */
+ timecountleft = aTimerContext[localTimerID].CountLeft;
+ 8000bf6: 7bfa ldrb r2, [r7, #15]
+ 8000bf8: 493a ldr r1, [pc, #232] @ (8000ce4 <RescheduleTimerList+0x128>)
+ 8000bfa: 4613 mov r3, r2
+ 8000bfc: 005b lsls r3, r3, #1
+ 8000bfe: 4413 add r3, r2
+ 8000c00: 00db lsls r3, r3, #3
+ 8000c02: 440b add r3, r1
+ 8000c04: 3308 adds r3, #8
+ 8000c06: 681b ldr r3, [r3, #0]
+ 8000c08: 60bb str r3, [r7, #8]
+
+ /**
+ * Read how much has been counted
+ */
+ time_elapsed = ReturnTimeElapsed();
+ 8000c0a: f7ff ff3f bl 8000a8c <ReturnTimeElapsed>
+ 8000c0e: 4603 mov r3, r0
+ 8000c10: 80fb strh r3, [r7, #6]
+
+ if(timecountleft < time_elapsed )
+ 8000c12: 88fb ldrh r3, [r7, #6]
+ 8000c14: 68ba ldr r2, [r7, #8]
+ 8000c16: 429a cmp r2, r3
+ 8000c18: d205 bcs.n 8000c26 <RescheduleTimerList+0x6a>
+ {
+ /**
+ * There is no tick left to count
+ */
+ wakeup_timer_value = 0;
+ 8000c1a: 2300 movs r3, #0
+ 8000c1c: 81bb strh r3, [r7, #12]
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ 8000c1e: 4b32 ldr r3, [pc, #200] @ (8000ce8 <RescheduleTimerList+0x12c>)
+ 8000c20: 2201 movs r2, #1
+ 8000c22: 701a strb r2, [r3, #0]
+ 8000c24: e04d b.n 8000cc2 <RescheduleTimerList+0x106>
+ }
+ else
+ {
+ if(timecountleft > (time_elapsed + MaxWakeupTimerSetup))
+ 8000c26: 88fb ldrh r3, [r7, #6]
+ 8000c28: 4a30 ldr r2, [pc, #192] @ (8000cec <RescheduleTimerList+0x130>)
+ 8000c2a: 8812 ldrh r2, [r2, #0]
+ 8000c2c: b292 uxth r2, r2
+ 8000c2e: 4413 add r3, r2
+ 8000c30: 461a mov r2, r3
+ 8000c32: 68bb ldr r3, [r7, #8]
+ 8000c34: 4293 cmp r3, r2
+ 8000c36: d906 bls.n 8000c46 <RescheduleTimerList+0x8a>
+ {
+ /**
+ * The number of tick left is greater than the Wakeuptimer maximum value
+ */
+ wakeup_timer_value = MaxWakeupTimerSetup;
+ 8000c38: 4b2c ldr r3, [pc, #176] @ (8000cec <RescheduleTimerList+0x130>)
+ 8000c3a: 881b ldrh r3, [r3, #0]
+ 8000c3c: 81bb strh r3, [r7, #12]
+
+ WakeupTimerLimitation = WakeupTimerValue_Overpassed;
+ 8000c3e: 4b2a ldr r3, [pc, #168] @ (8000ce8 <RescheduleTimerList+0x12c>)
+ 8000c40: 2200 movs r2, #0
+ 8000c42: 701a strb r2, [r3, #0]
+ 8000c44: e03d b.n 8000cc2 <RescheduleTimerList+0x106>
+ }
+ else
+ {
+ wakeup_timer_value = timecountleft - time_elapsed;
+ 8000c46: 68bb ldr r3, [r7, #8]
+ 8000c48: b29a uxth r2, r3
+ 8000c4a: 88fb ldrh r3, [r7, #6]
+ 8000c4c: 1ad3 subs r3, r2, r3
+ 8000c4e: 81bb strh r3, [r7, #12]
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ 8000c50: 4b25 ldr r3, [pc, #148] @ (8000ce8 <RescheduleTimerList+0x12c>)
+ 8000c52: 2201 movs r2, #1
+ 8000c54: 701a strb r2, [r3, #0]
+ }
+
+ /**
+ * update ticks left to be counted for each timer
+ */
+ while(localTimerID != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 8000c56: e034 b.n 8000cc2 <RescheduleTimerList+0x106>
+ {
+ if (aTimerContext[localTimerID].CountLeft < time_elapsed)
+ 8000c58: 7bfa ldrb r2, [r7, #15]
+ 8000c5a: 4922 ldr r1, [pc, #136] @ (8000ce4 <RescheduleTimerList+0x128>)
+ 8000c5c: 4613 mov r3, r2
+ 8000c5e: 005b lsls r3, r3, #1
+ 8000c60: 4413 add r3, r2
+ 8000c62: 00db lsls r3, r3, #3
+ 8000c64: 440b add r3, r1
+ 8000c66: 3308 adds r3, #8
+ 8000c68: 681a ldr r2, [r3, #0]
+ 8000c6a: 88fb ldrh r3, [r7, #6]
+ 8000c6c: 429a cmp r2, r3
+ 8000c6e: d20a bcs.n 8000c86 <RescheduleTimerList+0xca>
+ {
+ aTimerContext[localTimerID].CountLeft = 0;
+ 8000c70: 7bfa ldrb r2, [r7, #15]
+ 8000c72: 491c ldr r1, [pc, #112] @ (8000ce4 <RescheduleTimerList+0x128>)
+ 8000c74: 4613 mov r3, r2
+ 8000c76: 005b lsls r3, r3, #1
+ 8000c78: 4413 add r3, r2
+ 8000c7a: 00db lsls r3, r3, #3
+ 8000c7c: 440b add r3, r1
+ 8000c7e: 3308 adds r3, #8
+ 8000c80: 2200 movs r2, #0
+ 8000c82: 601a str r2, [r3, #0]
+ 8000c84: e013 b.n 8000cae <RescheduleTimerList+0xf2>
+ }
+ else
+ {
+ aTimerContext[localTimerID].CountLeft -= time_elapsed;
+ 8000c86: 7bfa ldrb r2, [r7, #15]
+ 8000c88: 4916 ldr r1, [pc, #88] @ (8000ce4 <RescheduleTimerList+0x128>)
+ 8000c8a: 4613 mov r3, r2
+ 8000c8c: 005b lsls r3, r3, #1
+ 8000c8e: 4413 add r3, r2
+ 8000c90: 00db lsls r3, r3, #3
+ 8000c92: 440b add r3, r1
+ 8000c94: 3308 adds r3, #8
+ 8000c96: 6819 ldr r1, [r3, #0]
+ 8000c98: 88fb ldrh r3, [r7, #6]
+ 8000c9a: 7bfa ldrb r2, [r7, #15]
+ 8000c9c: 1ac9 subs r1, r1, r3
+ 8000c9e: 4811 ldr r0, [pc, #68] @ (8000ce4 <RescheduleTimerList+0x128>)
+ 8000ca0: 4613 mov r3, r2
+ 8000ca2: 005b lsls r3, r3, #1
+ 8000ca4: 4413 add r3, r2
+ 8000ca6: 00db lsls r3, r3, #3
+ 8000ca8: 4403 add r3, r0
+ 8000caa: 3308 adds r3, #8
+ 8000cac: 6019 str r1, [r3, #0]
+ }
+ localTimerID = aTimerContext[localTimerID].NextID;
+ 8000cae: 7bfa ldrb r2, [r7, #15]
+ 8000cb0: 490c ldr r1, [pc, #48] @ (8000ce4 <RescheduleTimerList+0x128>)
+ 8000cb2: 4613 mov r3, r2
+ 8000cb4: 005b lsls r3, r3, #1
+ 8000cb6: 4413 add r3, r2
+ 8000cb8: 00db lsls r3, r3, #3
+ 8000cba: 440b add r3, r1
+ 8000cbc: 3315 adds r3, #21
+ 8000cbe: 781b ldrb r3, [r3, #0]
+ 8000cc0: 73fb strb r3, [r7, #15]
+ while(localTimerID != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 8000cc2: 7bfb ldrb r3, [r7, #15]
+ 8000cc4: 2b06 cmp r3, #6
+ 8000cc6: d1c7 bne.n 8000c58 <RescheduleTimerList+0x9c>
+ }
+
+ /**
+ * Write next count
+ */
+ RestartWakeupCounter(wakeup_timer_value);
+ 8000cc8: 89bb ldrh r3, [r7, #12]
+ 8000cca: 4618 mov r0, r3
+ 8000ccc: f7ff ff1e bl 8000b0c <RestartWakeupCounter>
+
+ return ;
+ 8000cd0: bf00 nop
+}
+ 8000cd2: 3710 adds r7, #16
+ 8000cd4: 46bd mov sp, r7
+ 8000cd6: bd80 pop {r7, pc}
+ 8000cd8: 40002800 .word 0x40002800
+ 8000cdc: 200001cc .word 0x200001cc
+ 8000ce0: 2000012c .word 0x2000012c
+ 8000ce4: 2000009c .word 0x2000009c
+ 8000ce8: 20000134 .word 0x20000134
+ 8000cec: 2000013a .word 0x2000013a
+
+08000cf0 <HW_TS_Init>:
+
+ return;
+}
+
+void HW_TS_Init(HW_TS_InitMode_t TimerInitMode, RTC_HandleTypeDef *phrtc)
+{
+ 8000cf0: b580 push {r7, lr}
+ 8000cf2: b088 sub sp, #32
+ 8000cf4: af00 add r7, sp, #0
+ 8000cf6: 4603 mov r3, r0
+ 8000cf8: 6039 str r1, [r7, #0]
+ 8000cfa: 71fb strb r3, [r7, #7]
+ uint8_t loop;
+ uint32_t localmaxwakeuptimersetup;
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( &hrtc );
+ 8000cfc: 4b5e ldr r3, [pc, #376] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000cfe: 681b ldr r3, [r3, #0]
+ 8000d00: 22ca movs r2, #202 @ 0xca
+ 8000d02: 625a str r2, [r3, #36] @ 0x24
+ 8000d04: 4b5c ldr r3, [pc, #368] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000d06: 681b ldr r3, [r3, #0]
+ 8000d08: 2253 movs r2, #83 @ 0x53
+ 8000d0a: 625a str r2, [r3, #36] @ 0x24
+
+ SET_BIT(RTC->CR, RTC_CR_BYPSHAD);
+ 8000d0c: 4b5b ldr r3, [pc, #364] @ (8000e7c <HW_TS_Init+0x18c>)
+ 8000d0e: 689b ldr r3, [r3, #8]
+ 8000d10: 4a5a ldr r2, [pc, #360] @ (8000e7c <HW_TS_Init+0x18c>)
+ 8000d12: f043 0320 orr.w r3, r3, #32
+ 8000d16: 6093 str r3, [r2, #8]
+
+ /**
+ * Readout the user config
+ */
+ WakeupTimerDivider = (4 - ((uint32_t)(READ_BIT(RTC->CR, RTC_CR_WUCKSEL))));
+ 8000d18: 4b58 ldr r3, [pc, #352] @ (8000e7c <HW_TS_Init+0x18c>)
+ 8000d1a: 689b ldr r3, [r3, #8]
+ 8000d1c: b2db uxtb r3, r3
+ 8000d1e: f003 0307 and.w r3, r3, #7
+ 8000d22: b2db uxtb r3, r3
+ 8000d24: f1c3 0304 rsb r3, r3, #4
+ 8000d28: b2da uxtb r2, r3
+ 8000d2a: 4b55 ldr r3, [pc, #340] @ (8000e80 <HW_TS_Init+0x190>)
+ 8000d2c: 701a strb r2, [r3, #0]
+
+ AsynchPrescalerUserConfig = (uint8_t)(READ_BIT(RTC->PRER, RTC_PRER_PREDIV_A) >> (uint32_t)POSITION_VAL(RTC_PRER_PREDIV_A)) + 1;
+ 8000d2e: 4b53 ldr r3, [pc, #332] @ (8000e7c <HW_TS_Init+0x18c>)
+ 8000d30: 691b ldr r3, [r3, #16]
+ 8000d32: f403 03fe and.w r3, r3, #8323072 @ 0x7f0000
+ 8000d36: f44f 02fe mov.w r2, #8323072 @ 0x7f0000
+ 8000d3a: 613a str r2, [r7, #16]
+ uint32_t result;
+
+#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
+ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \
+ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) )
+ __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
+ 8000d3c: 693a ldr r2, [r7, #16]
+ 8000d3e: fa92 f2a2 rbit r2, r2
+ 8000d42: 60fa str r2, [r7, #12]
+ result |= value & 1U;
+ s--;
+ }
+ result <<= s; /* shift when v's highest bits are zero */
+#endif
+ return result;
+ 8000d44: 68fa ldr r2, [r7, #12]
+ 8000d46: 617a str r2, [r7, #20]
+ optimisations using the logic "value was passed to __builtin_clz, so it
+ is non-zero".
+ ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a
+ single CLZ instruction.
+ */
+ if (value == 0U)
+ 8000d48: 697a ldr r2, [r7, #20]
+ 8000d4a: 2a00 cmp r2, #0
+ 8000d4c: d101 bne.n 8000d52 <HW_TS_Init+0x62>
+ {
+ return 32U;
+ 8000d4e: 2220 movs r2, #32
+ 8000d50: e003 b.n 8000d5a <HW_TS_Init+0x6a>
+ }
+ return __builtin_clz(value);
+ 8000d52: 697a ldr r2, [r7, #20]
+ 8000d54: fab2 f282 clz r2, r2
+ 8000d58: b2d2 uxtb r2, r2
+ 8000d5a: 40d3 lsrs r3, r2
+ 8000d5c: b2db uxtb r3, r3
+ 8000d5e: 3301 adds r3, #1
+ 8000d60: b2da uxtb r2, r3
+ 8000d62: 4b48 ldr r3, [pc, #288] @ (8000e84 <HW_TS_Init+0x194>)
+ 8000d64: 701a strb r2, [r3, #0]
+
+ SynchPrescalerUserConfig = (uint16_t)(READ_BIT(RTC->PRER, RTC_PRER_PREDIV_S)) + 1;
+ 8000d66: 4b45 ldr r3, [pc, #276] @ (8000e7c <HW_TS_Init+0x18c>)
+ 8000d68: 691b ldr r3, [r3, #16]
+ 8000d6a: b29b uxth r3, r3
+ 8000d6c: f3c3 030e ubfx r3, r3, #0, #15
+ 8000d70: b29b uxth r3, r3
+ 8000d72: 3301 adds r3, #1
+ 8000d74: b29a uxth r2, r3
+ 8000d76: 4b44 ldr r3, [pc, #272] @ (8000e88 <HW_TS_Init+0x198>)
+ 8000d78: 801a strh r2, [r3, #0]
+
+ /**
+ * Margin is taken to avoid wrong calculation when the wrap around is there and some
+ * application interrupts may have delayed the reading
+ */
+ localmaxwakeuptimersetup = ((((SynchPrescalerUserConfig - 1)*AsynchPrescalerUserConfig) - CFG_HW_TS_RTC_HANDLER_MAX_DELAY) >> WakeupTimerDivider);
+ 8000d7a: 4b43 ldr r3, [pc, #268] @ (8000e88 <HW_TS_Init+0x198>)
+ 8000d7c: 881b ldrh r3, [r3, #0]
+ 8000d7e: 3b01 subs r3, #1
+ 8000d80: 4a40 ldr r2, [pc, #256] @ (8000e84 <HW_TS_Init+0x194>)
+ 8000d82: 7812 ldrb r2, [r2, #0]
+ 8000d84: fb02 f303 mul.w r3, r2, r3
+ 8000d88: f5a3 73a0 sub.w r3, r3, #320 @ 0x140
+ 8000d8c: 4a3c ldr r2, [pc, #240] @ (8000e80 <HW_TS_Init+0x190>)
+ 8000d8e: 7812 ldrb r2, [r2, #0]
+ 8000d90: 40d3 lsrs r3, r2
+ 8000d92: 61bb str r3, [r7, #24]
+
+ if(localmaxwakeuptimersetup >= 0xFFFF)
+ 8000d94: 69bb ldr r3, [r7, #24]
+ 8000d96: f64f 72fe movw r2, #65534 @ 0xfffe
+ 8000d9a: 4293 cmp r3, r2
+ 8000d9c: d904 bls.n 8000da8 <HW_TS_Init+0xb8>
+ {
+ MaxWakeupTimerSetup = 0xFFFF;
+ 8000d9e: 4b3b ldr r3, [pc, #236] @ (8000e8c <HW_TS_Init+0x19c>)
+ 8000da0: f64f 72ff movw r2, #65535 @ 0xffff
+ 8000da4: 801a strh r2, [r3, #0]
+ 8000da6: e003 b.n 8000db0 <HW_TS_Init+0xc0>
+ }
+ else
+ {
+ MaxWakeupTimerSetup = (uint16_t)localmaxwakeuptimersetup;
+ 8000da8: 69bb ldr r3, [r7, #24]
+ 8000daa: b29a uxth r2, r3
+ 8000dac: 4b37 ldr r3, [pc, #220] @ (8000e8c <HW_TS_Init+0x19c>)
+ 8000dae: 801a strh r2, [r3, #0]
+ }
+
+ /**
+ * Configure EXTI module
+ */
+ LL_EXTI_EnableRisingTrig_0_31(RTC_EXTI_LINE_WAKEUPTIMER_EVENT);
+ 8000db0: f44f 2000 mov.w r0, #524288 @ 0x80000
+ 8000db4: f7ff fc64 bl 8000680 <LL_EXTI_EnableRisingTrig_0_31>
+ LL_EXTI_EnableIT_0_31(RTC_EXTI_LINE_WAKEUPTIMER_EVENT);
+ 8000db8: f44f 2000 mov.w r0, #524288 @ 0x80000
+ 8000dbc: f7ff fc4c bl 8000658 <LL_EXTI_EnableIT_0_31>
+
+ if(TimerInitMode == hw_ts_InitMode_Full)
+ 8000dc0: 79fb ldrb r3, [r7, #7]
+ 8000dc2: 2b00 cmp r3, #0
+ 8000dc4: d13d bne.n 8000e42 <HW_TS_Init+0x152>
+ {
+ WakeupTimerLimitation = WakeupTimerValue_LargeEnough;
+ 8000dc6: 4b32 ldr r3, [pc, #200] @ (8000e90 <HW_TS_Init+0x1a0>)
+ 8000dc8: 2201 movs r2, #1
+ 8000dca: 701a strb r2, [r3, #0]
+ SSRValueOnLastSetup = SSR_FORBIDDEN_VALUE;
+ 8000dcc: 4b31 ldr r3, [pc, #196] @ (8000e94 <HW_TS_Init+0x1a4>)
+ 8000dce: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
+ 8000dd2: 601a str r2, [r3, #0]
+
+ /**
+ * Initialize the timer server
+ */
+ for(loop = 0; loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; loop++)
+ 8000dd4: 2300 movs r3, #0
+ 8000dd6: 77fb strb r3, [r7, #31]
+ 8000dd8: e00c b.n 8000df4 <HW_TS_Init+0x104>
+ {
+ aTimerContext[loop].TimerIDStatus = TimerID_Free;
+ 8000dda: 7ffa ldrb r2, [r7, #31]
+ 8000ddc: 492e ldr r1, [pc, #184] @ (8000e98 <HW_TS_Init+0x1a8>)
+ 8000dde: 4613 mov r3, r2
+ 8000de0: 005b lsls r3, r3, #1
+ 8000de2: 4413 add r3, r2
+ 8000de4: 00db lsls r3, r3, #3
+ 8000de6: 440b add r3, r1
+ 8000de8: 330c adds r3, #12
+ 8000dea: 2200 movs r2, #0
+ 8000dec: 701a strb r2, [r3, #0]
+ for(loop = 0; loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; loop++)
+ 8000dee: 7ffb ldrb r3, [r7, #31]
+ 8000df0: 3301 adds r3, #1
+ 8000df2: 77fb strb r3, [r7, #31]
+ 8000df4: 7ffb ldrb r3, [r7, #31]
+ 8000df6: 2b05 cmp r3, #5
+ 8000df8: d9ef bls.n 8000dda <HW_TS_Init+0xea>
+ }
+
+ CurrentRunningTimerID = CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER; /**< Set ID to non valid value */
+ 8000dfa: 4b28 ldr r3, [pc, #160] @ (8000e9c <HW_TS_Init+0x1ac>)
+ 8000dfc: 2206 movs r2, #6
+ 8000dfe: 701a strb r2, [r3, #0]
+
+ __HAL_RTC_WAKEUPTIMER_DISABLE(&hrtc); /**< Disable the Wakeup Timer */
+ 8000e00: 4b1d ldr r3, [pc, #116] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e02: 681b ldr r3, [r3, #0]
+ 8000e04: 689a ldr r2, [r3, #8]
+ 8000e06: 4b1c ldr r3, [pc, #112] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e08: 681b ldr r3, [r3, #0]
+ 8000e0a: f422 6280 bic.w r2, r2, #1024 @ 0x400
+ 8000e0e: 609a str r2, [r3, #8]
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ 8000e10: 4b19 ldr r3, [pc, #100] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e12: 681b ldr r3, [r3, #0]
+ 8000e14: 68db ldr r3, [r3, #12]
+ 8000e16: b2da uxtb r2, r3
+ 8000e18: 4b17 ldr r3, [pc, #92] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e1a: 681b ldr r3, [r3, #0]
+ 8000e1c: f462 6290 orn r2, r2, #1152 @ 0x480
+ 8000e20: 60da str r2, [r3, #12]
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ 8000e22: 4b1f ldr r3, [pc, #124] @ (8000ea0 <HW_TS_Init+0x1b0>)
+ 8000e24: f44f 2200 mov.w r2, #524288 @ 0x80000
+ 8000e28: 60da str r2, [r3, #12]
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ 8000e2a: 2003 movs r0, #3
+ 8000e2c: f000 ff69 bl 8001d02 <HAL_NVIC_ClearPendingIRQ>
+ __HAL_RTC_WAKEUPTIMER_ENABLE_IT(&hrtc, RTC_IT_WUT); /**< Enable interrupt in RTC module */
+ 8000e30: 4b11 ldr r3, [pc, #68] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e32: 681b ldr r3, [r3, #0]
+ 8000e34: 689a ldr r2, [r3, #8]
+ 8000e36: 4b10 ldr r3, [pc, #64] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e38: 681b ldr r3, [r3, #0]
+ 8000e3a: f442 4280 orr.w r2, r2, #16384 @ 0x4000
+ 8000e3e: 609a str r2, [r3, #8]
+ 8000e40: e009 b.n 8000e56 <HW_TS_Init+0x166>
+ }
+ else
+ {
+ if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_WUTF) != RESET)
+ 8000e42: 4b0d ldr r3, [pc, #52] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e44: 681b ldr r3, [r3, #0]
+ 8000e46: 68db ldr r3, [r3, #12]
+ 8000e48: f403 6380 and.w r3, r3, #1024 @ 0x400
+ 8000e4c: 2b00 cmp r3, #0
+ 8000e4e: d002 beq.n 8000e56 <HW_TS_Init+0x166>
+ {
+ /**
+ * Simulate that the Timer expired
+ */
+ HAL_NVIC_SetPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID);
+ 8000e50: 2003 movs r0, #3
+ 8000e52: f000 ff48 bl 8001ce6 <HAL_NVIC_SetPendingIRQ>
+ }
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( &hrtc );
+ 8000e56: 4b08 ldr r3, [pc, #32] @ (8000e78 <HW_TS_Init+0x188>)
+ 8000e58: 681b ldr r3, [r3, #0]
+ 8000e5a: 22ff movs r2, #255 @ 0xff
+ 8000e5c: 625a str r2, [r3, #36] @ 0x24
+
+ HAL_NVIC_SetPriority(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID, CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO, CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO); /**< Set NVIC priority */
+ 8000e5e: 2200 movs r2, #0
+ 8000e60: 2103 movs r1, #3
+ 8000e62: 2003 movs r0, #3
+ 8000e64: f000 fefd bl 8001c62 <HAL_NVIC_SetPriority>
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+ 8000e68: 2003 movs r0, #3
+ 8000e6a: f000 ff14 bl 8001c96 <HAL_NVIC_EnableIRQ>
+
+ return;
+ 8000e6e: bf00 nop
+}
+ 8000e70: 3720 adds r7, #32
+ 8000e72: 46bd mov sp, r7
+ 8000e74: bd80 pop {r7, pc}
+ 8000e76: bf00 nop
+ 8000e78: 200001cc .word 0x200001cc
+ 8000e7c: 40002800 .word 0x40002800
+ 8000e80: 20000135 .word 0x20000135
+ 8000e84: 20000136 .word 0x20000136
+ 8000e88: 20000138 .word 0x20000138
+ 8000e8c: 2000013a .word 0x2000013a
+ 8000e90: 20000134 .word 0x20000134
+ 8000e94: 20000130 .word 0x20000130
+ 8000e98: 2000009c .word 0x2000009c
+ 8000e9c: 2000012c .word 0x2000012c
+ 8000ea0: 58000800 .word 0x58000800
+
+08000ea4 <HW_TS_Create>:
+
+HW_TS_ReturnStatus_t HW_TS_Create(uint32_t TimerProcessID, uint8_t *pTimerId, HW_TS_Mode_t TimerMode, HW_TS_pTimerCb_t pftimeout_handler)
+{
+ 8000ea4: b480 push {r7}
+ 8000ea6: b08b sub sp, #44 @ 0x2c
+ 8000ea8: af00 add r7, sp, #0
+ 8000eaa: 60f8 str r0, [r7, #12]
+ 8000eac: 60b9 str r1, [r7, #8]
+ 8000eae: 603b str r3, [r7, #0]
+ 8000eb0: 4613 mov r3, r2
+ 8000eb2: 71fb strb r3, [r7, #7]
+ HW_TS_ReturnStatus_t localreturnstatus;
+ uint8_t loop = 0;
+ 8000eb4: 2300 movs r3, #0
+ 8000eb6: f887 3026 strb.w r3, [r7, #38] @ 0x26
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8000eba: f3ef 8310 mrs r3, PRIMASK
+ 8000ebe: 61fb str r3, [r7, #28]
+ return(result);
+ 8000ec0: 69fb ldr r3, [r7, #28]
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 8000ec2: 623b str r3, [r7, #32]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8000ec4: b672 cpsid i
+}
+ 8000ec6: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ while((loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[loop].TimerIDStatus != TimerID_Free))
+ 8000ec8: e004 b.n 8000ed4 <HW_TS_Create+0x30>
+ {
+ loop++;
+ 8000eca: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
+ 8000ece: 3301 adds r3, #1
+ 8000ed0: f887 3026 strb.w r3, [r7, #38] @ 0x26
+ while((loop < CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER) && (aTimerContext[loop].TimerIDStatus != TimerID_Free))
+ 8000ed4: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
+ 8000ed8: 2b05 cmp r3, #5
+ 8000eda: d80c bhi.n 8000ef6 <HW_TS_Create+0x52>
+ 8000edc: f897 2026 ldrb.w r2, [r7, #38] @ 0x26
+ 8000ee0: 492c ldr r1, [pc, #176] @ (8000f94 <HW_TS_Create+0xf0>)
+ 8000ee2: 4613 mov r3, r2
+ 8000ee4: 005b lsls r3, r3, #1
+ 8000ee6: 4413 add r3, r2
+ 8000ee8: 00db lsls r3, r3, #3
+ 8000eea: 440b add r3, r1
+ 8000eec: 330c adds r3, #12
+ 8000eee: 781b ldrb r3, [r3, #0]
+ 8000ef0: b2db uxtb r3, r3
+ 8000ef2: 2b00 cmp r3, #0
+ 8000ef4: d1e9 bne.n 8000eca <HW_TS_Create+0x26>
+ }
+
+ if(loop != CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 8000ef6: f897 3026 ldrb.w r3, [r7, #38] @ 0x26
+ 8000efa: 2b06 cmp r3, #6
+ 8000efc: d038 beq.n 8000f70 <HW_TS_Create+0xcc>
+ {
+ aTimerContext[loop].TimerIDStatus = TimerID_Created;
+ 8000efe: f897 2026 ldrb.w r2, [r7, #38] @ 0x26
+ 8000f02: 4924 ldr r1, [pc, #144] @ (8000f94 <HW_TS_Create+0xf0>)
+ 8000f04: 4613 mov r3, r2
+ 8000f06: 005b lsls r3, r3, #1
+ 8000f08: 4413 add r3, r2
+ 8000f0a: 00db lsls r3, r3, #3
+ 8000f0c: 440b add r3, r1
+ 8000f0e: 330c adds r3, #12
+ 8000f10: 2201 movs r2, #1
+ 8000f12: 701a strb r2, [r3, #0]
+ 8000f14: 6a3b ldr r3, [r7, #32]
+ 8000f16: 61bb str r3, [r7, #24]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8000f18: 69bb ldr r3, [r7, #24]
+ 8000f1a: f383 8810 msr PRIMASK, r3
+}
+ 8000f1e: bf00 nop
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ aTimerContext[loop].TimerProcessID = TimerProcessID;
+ 8000f20: f897 2026 ldrb.w r2, [r7, #38] @ 0x26
+ 8000f24: 491b ldr r1, [pc, #108] @ (8000f94 <HW_TS_Create+0xf0>)
+ 8000f26: 4613 mov r3, r2
+ 8000f28: 005b lsls r3, r3, #1
+ 8000f2a: 4413 add r3, r2
+ 8000f2c: 00db lsls r3, r3, #3
+ 8000f2e: 440b add r3, r1
+ 8000f30: 3310 adds r3, #16
+ 8000f32: 68fa ldr r2, [r7, #12]
+ 8000f34: 601a str r2, [r3, #0]
+ aTimerContext[loop].TimerMode = TimerMode;
+ 8000f36: f897 2026 ldrb.w r2, [r7, #38] @ 0x26
+ 8000f3a: 4916 ldr r1, [pc, #88] @ (8000f94 <HW_TS_Create+0xf0>)
+ 8000f3c: 4613 mov r3, r2
+ 8000f3e: 005b lsls r3, r3, #1
+ 8000f40: 4413 add r3, r2
+ 8000f42: 00db lsls r3, r3, #3
+ 8000f44: 440b add r3, r1
+ 8000f46: 330d adds r3, #13
+ 8000f48: 79fa ldrb r2, [r7, #7]
+ 8000f4a: 701a strb r2, [r3, #0]
+ aTimerContext[loop].pTimerCallBack = pftimeout_handler;
+ 8000f4c: f897 2026 ldrb.w r2, [r7, #38] @ 0x26
+ 8000f50: 4910 ldr r1, [pc, #64] @ (8000f94 <HW_TS_Create+0xf0>)
+ 8000f52: 4613 mov r3, r2
+ 8000f54: 005b lsls r3, r3, #1
+ 8000f56: 4413 add r3, r2
+ 8000f58: 00db lsls r3, r3, #3
+ 8000f5a: 440b add r3, r1
+ 8000f5c: 683a ldr r2, [r7, #0]
+ 8000f5e: 601a str r2, [r3, #0]
+ *pTimerId = loop;
+ 8000f60: 68bb ldr r3, [r7, #8]
+ 8000f62: f897 2026 ldrb.w r2, [r7, #38] @ 0x26
+ 8000f66: 701a strb r2, [r3, #0]
+
+ localreturnstatus = hw_ts_Successful;
+ 8000f68: 2300 movs r3, #0
+ 8000f6a: f887 3027 strb.w r3, [r7, #39] @ 0x27
+ 8000f6e: e008 b.n 8000f82 <HW_TS_Create+0xde>
+ 8000f70: 6a3b ldr r3, [r7, #32]
+ 8000f72: 617b str r3, [r7, #20]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8000f74: 697b ldr r3, [r7, #20]
+ 8000f76: f383 8810 msr PRIMASK, r3
+}
+ 8000f7a: bf00 nop
+ {
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ localreturnstatus = hw_ts_Failed;
+ 8000f7c: 2301 movs r3, #1
+ 8000f7e: f887 3027 strb.w r3, [r7, #39] @ 0x27
+ }
+
+ return(localreturnstatus);
+ 8000f82: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
+}
+ 8000f86: 4618 mov r0, r3
+ 8000f88: 372c adds r7, #44 @ 0x2c
+ 8000f8a: 46bd mov sp, r7
+ 8000f8c: f85d 7b04 ldr.w r7, [sp], #4
+ 8000f90: 4770 bx lr
+ 8000f92: bf00 nop
+ 8000f94: 2000009c .word 0x2000009c
+
+08000f98 <HW_TS_Stop>:
+
+ return;
+}
+
+void HW_TS_Stop(uint8_t timer_id)
+{
+ 8000f98: b580 push {r7, lr}
+ 8000f9a: b086 sub sp, #24
+ 8000f9c: af00 add r7, sp, #0
+ 8000f9e: 4603 mov r3, r0
+ 8000fa0: 71fb strb r3, [r7, #7]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8000fa2: f3ef 8310 mrs r3, PRIMASK
+ 8000fa6: 60fb str r3, [r7, #12]
+ return(result);
+ 8000fa8: 68fb ldr r3, [r7, #12]
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 8000faa: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8000fac: b672 cpsid i
+}
+ 8000fae: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ HAL_NVIC_DisableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Disable NVIC */
+ 8000fb0: 2003 movs r0, #3
+ 8000fb2: f000 fe7e bl 8001cb2 <HAL_NVIC_DisableIRQ>
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( &hrtc );
+ 8000fb6: 4b34 ldr r3, [pc, #208] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8000fb8: 681b ldr r3, [r3, #0]
+ 8000fba: 22ca movs r2, #202 @ 0xca
+ 8000fbc: 625a str r2, [r3, #36] @ 0x24
+ 8000fbe: 4b32 ldr r3, [pc, #200] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8000fc0: 681b ldr r3, [r3, #0]
+ 8000fc2: 2253 movs r2, #83 @ 0x53
+ 8000fc4: 625a str r2, [r3, #36] @ 0x24
+
+ if(aTimerContext[timer_id].TimerIDStatus == TimerID_Running)
+ 8000fc6: 79fa ldrb r2, [r7, #7]
+ 8000fc8: 4930 ldr r1, [pc, #192] @ (800108c <HW_TS_Stop+0xf4>)
+ 8000fca: 4613 mov r3, r2
+ 8000fcc: 005b lsls r3, r3, #1
+ 8000fce: 4413 add r3, r2
+ 8000fd0: 00db lsls r3, r3, #3
+ 8000fd2: 440b add r3, r1
+ 8000fd4: 330c adds r3, #12
+ 8000fd6: 781b ldrb r3, [r3, #0]
+ 8000fd8: b2db uxtb r3, r3
+ 8000fda: 2b02 cmp r3, #2
+ 8000fdc: d142 bne.n 8001064 <HW_TS_Stop+0xcc>
+ {
+ UnlinkTimer(timer_id, SSR_Read_Requested);
+ 8000fde: 79fb ldrb r3, [r7, #7]
+ 8000fe0: 2100 movs r1, #0
+ 8000fe2: 4618 mov r0, r3
+ 8000fe4: f7ff fcce bl 8000984 <UnlinkTimer>
+ localcurrentrunningtimerid = CurrentRunningTimerID;
+ 8000fe8: 4b29 ldr r3, [pc, #164] @ (8001090 <HW_TS_Stop+0xf8>)
+ 8000fea: 781b ldrb r3, [r3, #0]
+ 8000fec: 74fb strb r3, [r7, #19]
+
+ if(localcurrentrunningtimerid == CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER)
+ 8000fee: 7cfb ldrb r3, [r7, #19]
+ 8000ff0: 2b06 cmp r3, #6
+ 8000ff2: d12f bne.n 8001054 <HW_TS_Stop+0xbc>
+ */
+
+ /**
+ * Disable the timer
+ */
+ if((READ_BIT(RTC->CR, RTC_CR_WUTE) == (RTC_CR_WUTE)) == SET)
+ 8000ff4: 4b27 ldr r3, [pc, #156] @ (8001094 <HW_TS_Stop+0xfc>)
+ 8000ff6: 689b ldr r3, [r3, #8]
+ 8000ff8: f403 6380 and.w r3, r3, #1024 @ 0x400
+ 8000ffc: f5b3 6f80 cmp.w r3, #1024 @ 0x400
+ 8001000: d107 bne.n 8001012 <HW_TS_Stop+0x7a>
+ {
+ /**
+ * Wait for the flag to be back to 0 when the wakeup timer is enabled
+ */
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_WUTWF) == SET);
+ 8001002: bf00 nop
+ 8001004: 4b20 ldr r3, [pc, #128] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8001006: 681b ldr r3, [r3, #0]
+ 8001008: 68db ldr r3, [r3, #12]
+ 800100a: f003 0304 and.w r3, r3, #4
+ 800100e: 2b00 cmp r3, #0
+ 8001010: d1f8 bne.n 8001004 <HW_TS_Stop+0x6c>
+ }
+ __HAL_RTC_WAKEUPTIMER_DISABLE(&hrtc); /**< Disable the Wakeup Timer */
+ 8001012: 4b1d ldr r3, [pc, #116] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8001014: 681b ldr r3, [r3, #0]
+ 8001016: 689a ldr r2, [r3, #8]
+ 8001018: 4b1b ldr r3, [pc, #108] @ (8001088 <HW_TS_Stop+0xf0>)
+ 800101a: 681b ldr r3, [r3, #0]
+ 800101c: f422 6280 bic.w r2, r2, #1024 @ 0x400
+ 8001020: 609a str r2, [r3, #8]
+
+ while(__HAL_RTC_WAKEUPTIMER_GET_FLAG(&hrtc, RTC_FLAG_WUTWF) == RESET);
+ 8001022: bf00 nop
+ 8001024: 4b18 ldr r3, [pc, #96] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8001026: 681b ldr r3, [r3, #0]
+ 8001028: 68db ldr r3, [r3, #12]
+ 800102a: f003 0304 and.w r3, r3, #4
+ 800102e: 2b00 cmp r3, #0
+ 8001030: d0f8 beq.n 8001024 <HW_TS_Stop+0x8c>
+ * It takes 2 RTCCLK between the time the WUTE bit is disabled and the
+ * time the timer is disabled. The WUTWF bit somehow guarantee the system is stable
+ * Otherwise, when the timer is periodic with 1 Tick, it may generate an extra interrupt in between
+ * due to the autoreload feature
+ */
+ __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF); /**< Clear flag in RTC module */
+ 8001032: 4b15 ldr r3, [pc, #84] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8001034: 681b ldr r3, [r3, #0]
+ 8001036: 68db ldr r3, [r3, #12]
+ 8001038: b2da uxtb r2, r3
+ 800103a: 4b13 ldr r3, [pc, #76] @ (8001088 <HW_TS_Stop+0xf0>)
+ 800103c: 681b ldr r3, [r3, #0]
+ 800103e: f462 6290 orn r2, r2, #1152 @ 0x480
+ 8001042: 60da str r2, [r3, #12]
+ __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG(); /**< Clear flag in EXTI module */
+ 8001044: 4b14 ldr r3, [pc, #80] @ (8001098 <HW_TS_Stop+0x100>)
+ 8001046: f44f 2200 mov.w r2, #524288 @ 0x80000
+ 800104a: 60da str r2, [r3, #12]
+ HAL_NVIC_ClearPendingIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Clear pending bit in NVIC */
+ 800104c: 2003 movs r0, #3
+ 800104e: f000 fe58 bl 8001d02 <HAL_NVIC_ClearPendingIRQ>
+ 8001052: e007 b.n 8001064 <HW_TS_Stop+0xcc>
+ }
+ else if(PreviousRunningTimerID != localcurrentrunningtimerid)
+ 8001054: 4b11 ldr r3, [pc, #68] @ (800109c <HW_TS_Stop+0x104>)
+ 8001056: 781b ldrb r3, [r3, #0]
+ 8001058: b2db uxtb r3, r3
+ 800105a: 7cfa ldrb r2, [r7, #19]
+ 800105c: 429a cmp r2, r3
+ 800105e: d001 beq.n 8001064 <HW_TS_Stop+0xcc>
+ {
+ RescheduleTimerList();
+ 8001060: f7ff fdac bl 8000bbc <RescheduleTimerList>
+ }
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( &hrtc );
+ 8001064: 4b08 ldr r3, [pc, #32] @ (8001088 <HW_TS_Stop+0xf0>)
+ 8001066: 681b ldr r3, [r3, #0]
+ 8001068: 22ff movs r2, #255 @ 0xff
+ 800106a: 625a str r2, [r3, #36] @ 0x24
+
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+ 800106c: 2003 movs r0, #3
+ 800106e: f000 fe12 bl 8001c96 <HAL_NVIC_EnableIRQ>
+ 8001072: 697b ldr r3, [r7, #20]
+ 8001074: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8001076: 68bb ldr r3, [r7, #8]
+ 8001078: f383 8810 msr PRIMASK, r3
+}
+ 800107c: bf00 nop
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ return;
+ 800107e: bf00 nop
+}
+ 8001080: 3718 adds r7, #24
+ 8001082: 46bd mov sp, r7
+ 8001084: bd80 pop {r7, pc}
+ 8001086: bf00 nop
+ 8001088: 200001cc .word 0x200001cc
+ 800108c: 2000009c .word 0x2000009c
+ 8001090: 2000012c .word 0x2000012c
+ 8001094: 40002800 .word 0x40002800
+ 8001098: 58000800 .word 0x58000800
+ 800109c: 2000012d .word 0x2000012d
+
+080010a0 <HW_TS_Start>:
+
+void HW_TS_Start(uint8_t timer_id, uint32_t timeout_ticks)
+{
+ 80010a0: b580 push {r7, lr}
+ 80010a2: b086 sub sp, #24
+ 80010a4: af00 add r7, sp, #0
+ 80010a6: 4603 mov r3, r0
+ 80010a8: 6039 str r1, [r7, #0]
+ 80010aa: 71fb strb r3, [r7, #7]
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ uint32_t primask_bit;
+#endif
+
+ if(aTimerContext[timer_id].TimerIDStatus == TimerID_Running)
+ 80010ac: 79fa ldrb r2, [r7, #7]
+ 80010ae: 493b ldr r1, [pc, #236] @ (800119c <HW_TS_Start+0xfc>)
+ 80010b0: 4613 mov r3, r2
+ 80010b2: 005b lsls r3, r3, #1
+ 80010b4: 4413 add r3, r2
+ 80010b6: 00db lsls r3, r3, #3
+ 80010b8: 440b add r3, r1
+ 80010ba: 330c adds r3, #12
+ 80010bc: 781b ldrb r3, [r3, #0]
+ 80010be: b2db uxtb r3, r3
+ 80010c0: 2b02 cmp r3, #2
+ 80010c2: d103 bne.n 80010cc <HW_TS_Start+0x2c>
+ {
+ HW_TS_Stop( timer_id );
+ 80010c4: 79fb ldrb r3, [r7, #7]
+ 80010c6: 4618 mov r0, r3
+ 80010c8: f7ff ff66 bl 8000f98 <HW_TS_Stop>
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80010cc: f3ef 8310 mrs r3, PRIMASK
+ 80010d0: 60fb str r3, [r7, #12]
+ return(result);
+ 80010d2: 68fb ldr r3, [r7, #12]
+ }
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 80010d4: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80010d6: b672 cpsid i
+}
+ 80010d8: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+#endif
+
+ HAL_NVIC_DisableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Disable NVIC */
+ 80010da: 2003 movs r0, #3
+ 80010dc: f000 fde9 bl 8001cb2 <HAL_NVIC_DisableIRQ>
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE( &hrtc );
+ 80010e0: 4b2f ldr r3, [pc, #188] @ (80011a0 <HW_TS_Start+0x100>)
+ 80010e2: 681b ldr r3, [r3, #0]
+ 80010e4: 22ca movs r2, #202 @ 0xca
+ 80010e6: 625a str r2, [r3, #36] @ 0x24
+ 80010e8: 4b2d ldr r3, [pc, #180] @ (80011a0 <HW_TS_Start+0x100>)
+ 80010ea: 681b ldr r3, [r3, #0]
+ 80010ec: 2253 movs r2, #83 @ 0x53
+ 80010ee: 625a str r2, [r3, #36] @ 0x24
+
+ aTimerContext[timer_id].TimerIDStatus = TimerID_Running;
+ 80010f0: 79fa ldrb r2, [r7, #7]
+ 80010f2: 492a ldr r1, [pc, #168] @ (800119c <HW_TS_Start+0xfc>)
+ 80010f4: 4613 mov r3, r2
+ 80010f6: 005b lsls r3, r3, #1
+ 80010f8: 4413 add r3, r2
+ 80010fa: 00db lsls r3, r3, #3
+ 80010fc: 440b add r3, r1
+ 80010fe: 330c adds r3, #12
+ 8001100: 2202 movs r2, #2
+ 8001102: 701a strb r2, [r3, #0]
+
+ aTimerContext[timer_id].CountLeft = timeout_ticks;
+ 8001104: 79fa ldrb r2, [r7, #7]
+ 8001106: 4925 ldr r1, [pc, #148] @ (800119c <HW_TS_Start+0xfc>)
+ 8001108: 4613 mov r3, r2
+ 800110a: 005b lsls r3, r3, #1
+ 800110c: 4413 add r3, r2
+ 800110e: 00db lsls r3, r3, #3
+ 8001110: 440b add r3, r1
+ 8001112: 3308 adds r3, #8
+ 8001114: 683a ldr r2, [r7, #0]
+ 8001116: 601a str r2, [r3, #0]
+ aTimerContext[timer_id].CounterInit = timeout_ticks;
+ 8001118: 79fa ldrb r2, [r7, #7]
+ 800111a: 4920 ldr r1, [pc, #128] @ (800119c <HW_TS_Start+0xfc>)
+ 800111c: 4613 mov r3, r2
+ 800111e: 005b lsls r3, r3, #1
+ 8001120: 4413 add r3, r2
+ 8001122: 00db lsls r3, r3, #3
+ 8001124: 440b add r3, r1
+ 8001126: 3304 adds r3, #4
+ 8001128: 683a ldr r2, [r7, #0]
+ 800112a: 601a str r2, [r3, #0]
+
+ time_elapsed = linkTimer(timer_id);
+ 800112c: 79fb ldrb r3, [r7, #7]
+ 800112e: 4618 mov r0, r3
+ 8001130: f7ff fb7e bl 8000830 <linkTimer>
+ 8001134: 4603 mov r3, r0
+ 8001136: 827b strh r3, [r7, #18]
+
+ localcurrentrunningtimerid = CurrentRunningTimerID;
+ 8001138: 4b1a ldr r3, [pc, #104] @ (80011a4 <HW_TS_Start+0x104>)
+ 800113a: 781b ldrb r3, [r3, #0]
+ 800113c: 747b strb r3, [r7, #17]
+
+ if(PreviousRunningTimerID != localcurrentrunningtimerid)
+ 800113e: 4b1a ldr r3, [pc, #104] @ (80011a8 <HW_TS_Start+0x108>)
+ 8001140: 781b ldrb r3, [r3, #0]
+ 8001142: b2db uxtb r3, r3
+ 8001144: 7c7a ldrb r2, [r7, #17]
+ 8001146: 429a cmp r2, r3
+ 8001148: d002 beq.n 8001150 <HW_TS_Start+0xb0>
+ {
+ RescheduleTimerList();
+ 800114a: f7ff fd37 bl 8000bbc <RescheduleTimerList>
+ 800114e: e013 b.n 8001178 <HW_TS_Start+0xd8>
+ }
+ else
+ {
+ aTimerContext[timer_id].CountLeft -= time_elapsed;
+ 8001150: 79fa ldrb r2, [r7, #7]
+ 8001152: 4912 ldr r1, [pc, #72] @ (800119c <HW_TS_Start+0xfc>)
+ 8001154: 4613 mov r3, r2
+ 8001156: 005b lsls r3, r3, #1
+ 8001158: 4413 add r3, r2
+ 800115a: 00db lsls r3, r3, #3
+ 800115c: 440b add r3, r1
+ 800115e: 3308 adds r3, #8
+ 8001160: 6819 ldr r1, [r3, #0]
+ 8001162: 8a7b ldrh r3, [r7, #18]
+ 8001164: 79fa ldrb r2, [r7, #7]
+ 8001166: 1ac9 subs r1, r1, r3
+ 8001168: 480c ldr r0, [pc, #48] @ (800119c <HW_TS_Start+0xfc>)
+ 800116a: 4613 mov r3, r2
+ 800116c: 005b lsls r3, r3, #1
+ 800116e: 4413 add r3, r2
+ 8001170: 00db lsls r3, r3, #3
+ 8001172: 4403 add r3, r0
+ 8001174: 3308 adds r3, #8
+ 8001176: 6019 str r1, [r3, #0]
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE( &hrtc );
+ 8001178: 4b09 ldr r3, [pc, #36] @ (80011a0 <HW_TS_Start+0x100>)
+ 800117a: 681b ldr r3, [r3, #0]
+ 800117c: 22ff movs r2, #255 @ 0xff
+ 800117e: 625a str r2, [r3, #36] @ 0x24
+
+ HAL_NVIC_EnableIRQ(CFG_HW_TS_RTC_WAKEUP_HANDLER_ID); /**< Enable NVIC */
+ 8001180: 2003 movs r0, #3
+ 8001182: f000 fd88 bl 8001c96 <HAL_NVIC_EnableIRQ>
+ 8001186: 697b ldr r3, [r7, #20]
+ 8001188: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 800118a: 68bb ldr r3, [r7, #8]
+ 800118c: f383 8810 msr PRIMASK, r3
+}
+ 8001190: bf00 nop
+
+#if (CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION == 1)
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+#endif
+
+ return;
+ 8001192: bf00 nop
+}
+ 8001194: 3718 adds r7, #24
+ 8001196: 46bd mov sp, r7
+ 8001198: bd80 pop {r7, pc}
+ 800119a: bf00 nop
+ 800119c: 2000009c .word 0x2000009c
+ 80011a0: 200001cc .word 0x200001cc
+ 80011a4: 2000012c .word 0x2000012c
+ 80011a8: 2000012d .word 0x2000012d
+
+080011ac <LL_RCC_LSE_SetDriveCapability>:
+{
+ 80011ac: b480 push {r7}
+ 80011ae: b083 sub sp, #12
+ 80011b0: af00 add r7, sp, #0
+ 80011b2: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->BDCR, RCC_BDCR_LSEDRV, LSEDrive);
+ 80011b4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80011b8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 80011bc: f023 0218 bic.w r2, r3, #24
+ 80011c0: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80011c4: 687b ldr r3, [r7, #4]
+ 80011c6: 4313 orrs r3, r2
+ 80011c8: f8c1 3090 str.w r3, [r1, #144] @ 0x90
+}
+ 80011cc: bf00 nop
+ 80011ce: 370c adds r7, #12
+ 80011d0: 46bd mov sp, r7
+ 80011d2: f85d 7b04 ldr.w r7, [sp], #4
+ 80011d6: 4770 bx lr
+
+080011d8 <LL_AHB2_GRP1_EnableClock>:
+ * @arg @ref LL_AHB2_GRP1_PERIPH_AES1 (*)
+ * @note (*) Not supported by all the devices
+ * @retval None
+ */
+__STATIC_INLINE void LL_AHB2_GRP1_EnableClock(uint32_t Periphs)
+{
+ 80011d8: b480 push {r7}
+ 80011da: b085 sub sp, #20
+ 80011dc: af00 add r7, sp, #0
+ 80011de: 6078 str r0, [r7, #4]
+ __IO uint32_t tmpreg;
+ SET_BIT(RCC->AHB2ENR, Periphs);
+ 80011e0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80011e4: 6cda ldr r2, [r3, #76] @ 0x4c
+ 80011e6: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80011ea: 687b ldr r3, [r7, #4]
+ 80011ec: 4313 orrs r3, r2
+ 80011ee: 64cb str r3, [r1, #76] @ 0x4c
+ /* Delay after an RCC peripheral clock enabling */
+ tmpreg = READ_BIT(RCC->AHB2ENR, Periphs);
+ 80011f0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80011f4: 6cda ldr r2, [r3, #76] @ 0x4c
+ 80011f6: 687b ldr r3, [r7, #4]
+ 80011f8: 4013 ands r3, r2
+ 80011fa: 60fb str r3, [r7, #12]
+ (void)tmpreg;
+ 80011fc: 68fb ldr r3, [r7, #12]
+}
+ 80011fe: bf00 nop
+ 8001200: 3714 adds r7, #20
+ 8001202: 46bd mov sp, r7
+ 8001204: f85d 7b04 ldr.w r7, [sp], #4
+ 8001208: 4770 bx lr
+ ...
+
+0800120c <main>:
+/**
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void)
+{
+ 800120c: b580 push {r7, lr}
+ 800120e: af00 add r7, sp, #0
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+ 8001210: f000 fb5a bl 80018c8 <HAL_Init>
+ /* Config code for STM32_WPAN (HSE Tuning must be done before system clock configuration) */
+ MX_APPE_Config();
+ 8001214: f7ff f88e bl 8000334 <MX_APPE_Config>
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+ 8001218: f000 f81e bl 8001258 <SystemClock_Config>
+
+ /* Configure the peripherals common clocks */
+ PeriphCommonClock_Config();
+ 800121c: f000 f878 bl 8001310 <PeriphCommonClock_Config>
+
+ /* IPCC initialisation */
+ MX_IPCC_Init();
+ 8001220: f000 f8d4 bl 80013cc <MX_IPCC_Init>
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ 8001224: f000 f94e bl 80014c4 <MX_GPIO_Init>
+ MX_I2C1_Init();
+ 8001228: f000 f892 bl 8001350 <MX_I2C1_Init>
+ MX_RTC_Init();
+ 800122c: f000 f8ea bl 8001404 <MX_RTC_Init>
+ MX_RF_Init();
+ 8001230: f000 f8e0 bl 80013f4 <MX_RF_Init>
+
+
+ /* USER CODE END 2 */
+
+ /* Init code for STM32_WPAN */
+ MX_APPE_Init();
+ 8001234: f7ff f88c bl 8000350 <MX_APPE_Init>
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+ /* USER CODE END WHILE */
+ MX_APPE_Process();
+ 8001238: f7ff f9dc bl 80005f4 <MX_APPE_Process>
+
+ /* USER CODE BEGIN 3 */
+ HAL_Delay(5000);
+ 800123c: f241 3088 movw r0, #5000 @ 0x1388
+ 8001240: f7ff f9b3 bl 80005aa <HAL_Delay>
+ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
+ 8001244: 4b03 ldr r3, [pc, #12] @ (8001254 <main+0x48>)
+ 8001246: 221f movs r2, #31
+ 8001248: 619a str r2, [r3, #24]
+ HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
+ 800124a: 2001 movs r0, #1
+ 800124c: f001 f8ea bl 8002424 <HAL_PWREx_EnterSTOP2Mode>
+ MX_APPE_Process();
+ 8001250: bf00 nop
+ 8001252: e7f1 b.n 8001238 <main+0x2c>
+ 8001254: 58000400 .word 0x58000400
+
+08001258 <SystemClock_Config>:
+/**
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void)
+{
+ 8001258: b580 push {r7, lr}
+ 800125a: b09a sub sp, #104 @ 0x68
+ 800125c: af00 add r7, sp, #0
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ 800125e: f107 0320 add.w r3, r7, #32
+ 8001262: 2248 movs r2, #72 @ 0x48
+ 8001264: 2100 movs r1, #0
+ 8001266: 4618 mov r0, r3
+ 8001268: f006 fc5d bl 8007b26 <memset>
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+ 800126c: 1d3b adds r3, r7, #4
+ 800126e: 2200 movs r2, #0
+ 8001270: 601a str r2, [r3, #0]
+ 8001272: 605a str r2, [r3, #4]
+ 8001274: 609a str r2, [r3, #8]
+ 8001276: 60da str r2, [r3, #12]
+ 8001278: 611a str r2, [r3, #16]
+ 800127a: 615a str r2, [r3, #20]
+ 800127c: 619a str r2, [r3, #24]
+
+ /** Configure LSE Drive Capability
+ */
+ HAL_PWR_EnableBkUpAccess();
+ 800127e: f001 f8b3 bl 80023e8 <HAL_PWR_EnableBkUpAccess>
+ __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_MEDIUMHIGH);
+ 8001282: 2010 movs r0, #16
+ 8001284: f7ff ff92 bl 80011ac <LL_RCC_LSE_SetDriveCapability>
+
+ /** Configure the main internal regulator output voltage
+ */
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
+ 8001288: 4b20 ldr r3, [pc, #128] @ (800130c <SystemClock_Config+0xb4>)
+ 800128a: 681b ldr r3, [r3, #0]
+ 800128c: f423 63c0 bic.w r3, r3, #1536 @ 0x600
+ 8001290: 4a1e ldr r2, [pc, #120] @ (800130c <SystemClock_Config+0xb4>)
+ 8001292: f443 7300 orr.w r3, r3, #512 @ 0x200
+ 8001296: 6013 str r3, [r2, #0]
+ 8001298: 4b1c ldr r3, [pc, #112] @ (800130c <SystemClock_Config+0xb4>)
+ 800129a: 681b ldr r3, [r3, #0]
+ 800129c: f403 63c0 and.w r3, r3, #1536 @ 0x600
+ 80012a0: 603b str r3, [r7, #0]
+ 80012a2: 683b ldr r3, [r7, #0]
+
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE
+ 80012a4: 2307 movs r3, #7
+ 80012a6: 623b str r3, [r7, #32]
+ |RCC_OSCILLATORTYPE_LSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ 80012a8: f44f 3380 mov.w r3, #65536 @ 0x10000
+ 80012ac: 627b str r3, [r7, #36] @ 0x24
+ RCC_OscInitStruct.LSEState = RCC_LSE_ON;
+ 80012ae: 2301 movs r3, #1
+ 80012b0: 62bb str r3, [r7, #40] @ 0x28
+ RCC_OscInitStruct.HSIState = RCC_HSI_ON;
+ 80012b2: f44f 7380 mov.w r3, #256 @ 0x100
+ 80012b6: 62fb str r3, [r7, #44] @ 0x2c
+ RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
+ 80012b8: 2340 movs r3, #64 @ 0x40
+ 80012ba: 633b str r3, [r7, #48] @ 0x30
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
+ 80012bc: 2300 movs r3, #0
+ 80012be: 64fb str r3, [r7, #76] @ 0x4c
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ 80012c0: f107 0320 add.w r3, r7, #32
+ 80012c4: 4618 mov r0, r3
+ 80012c6: f001 fc37 bl 8002b38 <HAL_RCC_OscConfig>
+ 80012ca: 4603 mov r3, r0
+ 80012cc: 2b00 cmp r3, #0
+ 80012ce: d001 beq.n 80012d4 <SystemClock_Config+0x7c>
+ {
+ Error_Handler();
+ 80012d0: f000 f924 bl 800151c <Error_Handler>
+ }
+
+ /** Configure the SYSCLKSource, HCLK, PCLK1 and PCLK2 clocks dividers
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK4|RCC_CLOCKTYPE_HCLK2
+ 80012d4: 236f movs r3, #111 @ 0x6f
+ 80012d6: 607b str r3, [r7, #4]
+ |RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
+ 80012d8: 2302 movs r3, #2
+ 80012da: 60bb str r3, [r7, #8]
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV16;
+ 80012dc: 23b0 movs r3, #176 @ 0xb0
+ 80012de: 60fb str r3, [r7, #12]
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+ 80012e0: 2300 movs r3, #0
+ 80012e2: 613b str r3, [r7, #16]
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+ 80012e4: 2300 movs r3, #0
+ 80012e6: 617b str r3, [r7, #20]
+ RCC_ClkInitStruct.AHBCLK2Divider = RCC_SYSCLK_DIV1;
+ 80012e8: 2300 movs r3, #0
+ 80012ea: 61bb str r3, [r7, #24]
+ RCC_ClkInitStruct.AHBCLK4Divider = RCC_SYSCLK_DIV1;
+ 80012ec: 2300 movs r3, #0
+ 80012ee: 61fb str r3, [r7, #28]
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ 80012f0: 1d3b adds r3, r7, #4
+ 80012f2: 2101 movs r1, #1
+ 80012f4: 4618 mov r0, r3
+ 80012f6: f001 ff93 bl 8003220 <HAL_RCC_ClockConfig>
+ 80012fa: 4603 mov r3, r0
+ 80012fc: 2b00 cmp r3, #0
+ 80012fe: d001 beq.n 8001304 <SystemClock_Config+0xac>
+ {
+ Error_Handler();
+ 8001300: f000 f90c bl 800151c <Error_Handler>
+ }
+}
+ 8001304: bf00 nop
+ 8001306: 3768 adds r7, #104 @ 0x68
+ 8001308: 46bd mov sp, r7
+ 800130a: bd80 pop {r7, pc}
+ 800130c: 58000400 .word 0x58000400
+
+08001310 <PeriphCommonClock_Config>:
+/**
+ * @brief Peripherals Common Clock Configuration
+ * @retval None
+ */
+void PeriphCommonClock_Config(void)
+{
+ 8001310: b580 push {r7, lr}
+ 8001312: b094 sub sp, #80 @ 0x50
+ 8001314: af00 add r7, sp, #0
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+ 8001316: 463b mov r3, r7
+ 8001318: 2250 movs r2, #80 @ 0x50
+ 800131a: 2100 movs r1, #0
+ 800131c: 4618 mov r0, r3
+ 800131e: f006 fc02 bl 8007b26 <memset>
+
+ /** Initializes the peripherals clock
+ */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SMPS|RCC_PERIPHCLK_RFWAKEUP;
+ 8001322: f44f 5340 mov.w r3, #12288 @ 0x3000
+ 8001326: 603b str r3, [r7, #0]
+ PeriphClkInitStruct.RFWakeUpClockSelection = RCC_RFWKPCLKSOURCE_HSE_DIV1024;
+ 8001328: f44f 4340 mov.w r3, #49152 @ 0xc000
+ 800132c: 647b str r3, [r7, #68] @ 0x44
+ PeriphClkInitStruct.SmpsClockSelection = RCC_SMPSCLKSOURCE_HSE;
+ 800132e: 2302 movs r3, #2
+ 8001330: 64bb str r3, [r7, #72] @ 0x48
+ PeriphClkInitStruct.SmpsDivSelection = RCC_SMPSCLKDIV_RANGE0;
+ 8001332: 2300 movs r3, #0
+ 8001334: 64fb str r3, [r7, #76] @ 0x4c
+
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+ 8001336: 463b mov r3, r7
+ 8001338: 4618 mov r0, r3
+ 800133a: f002 fb82 bl 8003a42 <HAL_RCCEx_PeriphCLKConfig>
+ 800133e: 4603 mov r3, r0
+ 8001340: 2b00 cmp r3, #0
+ 8001342: d001 beq.n 8001348 <PeriphCommonClock_Config+0x38>
+ {
+ Error_Handler();
+ 8001344: f000 f8ea bl 800151c <Error_Handler>
+ }
+ /* USER CODE BEGIN Smps */
+
+ /* USER CODE END Smps */
+}
+ 8001348: bf00 nop
+ 800134a: 3750 adds r7, #80 @ 0x50
+ 800134c: 46bd mov sp, r7
+ 800134e: bd80 pop {r7, pc}
+
+08001350 <MX_I2C1_Init>:
+ * @brief I2C1 Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_I2C1_Init(void)
+{
+ 8001350: b580 push {r7, lr}
+ 8001352: af00 add r7, sp, #0
+ /* USER CODE END I2C1_Init 0 */
+
+ /* USER CODE BEGIN I2C1_Init 1 */
+
+ /* USER CODE END I2C1_Init 1 */
+ hi2c1.Instance = I2C1;
+ 8001354: 4b1b ldr r3, [pc, #108] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 8001356: 4a1c ldr r2, [pc, #112] @ (80013c8 <MX_I2C1_Init+0x78>)
+ 8001358: 601a str r2, [r3, #0]
+ hi2c1.Init.Timing = 0x00000508;
+ 800135a: 4b1a ldr r3, [pc, #104] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 800135c: f44f 62a1 mov.w r2, #1288 @ 0x508
+ 8001360: 605a str r2, [r3, #4]
+ hi2c1.Init.OwnAddress1 = 0;
+ 8001362: 4b18 ldr r3, [pc, #96] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 8001364: 2200 movs r2, #0
+ 8001366: 609a str r2, [r3, #8]
+ hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
+ 8001368: 4b16 ldr r3, [pc, #88] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 800136a: 2201 movs r2, #1
+ 800136c: 60da str r2, [r3, #12]
+ hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
+ 800136e: 4b15 ldr r3, [pc, #84] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 8001370: 2200 movs r2, #0
+ 8001372: 611a str r2, [r3, #16]
+ hi2c1.Init.OwnAddress2 = 0;
+ 8001374: 4b13 ldr r3, [pc, #76] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 8001376: 2200 movs r2, #0
+ 8001378: 615a str r2, [r3, #20]
+ hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
+ 800137a: 4b12 ldr r3, [pc, #72] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 800137c: 2200 movs r2, #0
+ 800137e: 619a str r2, [r3, #24]
+ hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
+ 8001380: 4b10 ldr r3, [pc, #64] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 8001382: 2200 movs r2, #0
+ 8001384: 61da str r2, [r3, #28]
+ hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
+ 8001386: 4b0f ldr r3, [pc, #60] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 8001388: 2200 movs r2, #0
+ 800138a: 621a str r2, [r3, #32]
+ if (HAL_I2C_Init(&hi2c1) != HAL_OK)
+ 800138c: 480d ldr r0, [pc, #52] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 800138e: f000 fe73 bl 8002078 <HAL_I2C_Init>
+ 8001392: 4603 mov r3, r0
+ 8001394: 2b00 cmp r3, #0
+ 8001396: d001 beq.n 800139c <MX_I2C1_Init+0x4c>
+ {
+ Error_Handler();
+ 8001398: f000 f8c0 bl 800151c <Error_Handler>
+ }
+
+ /** Configure Analogue filter
+ */
+ if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
+ 800139c: 2100 movs r1, #0
+ 800139e: 4809 ldr r0, [pc, #36] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 80013a0: f000 ff05 bl 80021ae <HAL_I2CEx_ConfigAnalogFilter>
+ 80013a4: 4603 mov r3, r0
+ 80013a6: 2b00 cmp r3, #0
+ 80013a8: d001 beq.n 80013ae <MX_I2C1_Init+0x5e>
+ {
+ Error_Handler();
+ 80013aa: f000 f8b7 bl 800151c <Error_Handler>
+ }
+
+ /** Configure Digital filter
+ */
+ if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
+ 80013ae: 2100 movs r1, #0
+ 80013b0: 4804 ldr r0, [pc, #16] @ (80013c4 <MX_I2C1_Init+0x74>)
+ 80013b2: f000 ff47 bl 8002244 <HAL_I2CEx_ConfigDigitalFilter>
+ 80013b6: 4603 mov r3, r0
+ 80013b8: 2b00 cmp r3, #0
+ 80013ba: d001 beq.n 80013c0 <MX_I2C1_Init+0x70>
+ {
+ Error_Handler();
+ 80013bc: f000 f8ae bl 800151c <Error_Handler>
+ }
+ /* USER CODE BEGIN I2C1_Init 2 */
+
+ /* USER CODE END I2C1_Init 2 */
+
+}
+ 80013c0: bf00 nop
+ 80013c2: bd80 pop {r7, pc}
+ 80013c4: 2000013c .word 0x2000013c
+ 80013c8: 40005400 .word 0x40005400
+
+080013cc <MX_IPCC_Init>:
+ * @brief IPCC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_IPCC_Init(void)
+{
+ 80013cc: b580 push {r7, lr}
+ 80013ce: af00 add r7, sp, #0
+ /* USER CODE END IPCC_Init 0 */
+
+ /* USER CODE BEGIN IPCC_Init 1 */
+
+ /* USER CODE END IPCC_Init 1 */
+ hipcc.Instance = IPCC;
+ 80013d0: 4b06 ldr r3, [pc, #24] @ (80013ec <MX_IPCC_Init+0x20>)
+ 80013d2: 4a07 ldr r2, [pc, #28] @ (80013f0 <MX_IPCC_Init+0x24>)
+ 80013d4: 601a str r2, [r3, #0]
+ if (HAL_IPCC_Init(&hipcc) != HAL_OK)
+ 80013d6: 4805 ldr r0, [pc, #20] @ (80013ec <MX_IPCC_Init+0x20>)
+ 80013d8: f000 ff80 bl 80022dc <HAL_IPCC_Init>
+ 80013dc: 4603 mov r3, r0
+ 80013de: 2b00 cmp r3, #0
+ 80013e0: d001 beq.n 80013e6 <MX_IPCC_Init+0x1a>
+ {
+ Error_Handler();
+ 80013e2: f000 f89b bl 800151c <Error_Handler>
+ }
+ /* USER CODE BEGIN IPCC_Init 2 */
+
+ /* USER CODE END IPCC_Init 2 */
+
+}
+ 80013e6: bf00 nop
+ 80013e8: bd80 pop {r7, pc}
+ 80013ea: bf00 nop
+ 80013ec: 20000190 .word 0x20000190
+ 80013f0: 58000c00 .word 0x58000c00
+
+080013f4 <MX_RF_Init>:
+ * @brief RF Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RF_Init(void)
+{
+ 80013f4: b480 push {r7}
+ 80013f6: af00 add r7, sp, #0
+ /* USER CODE END RF_Init 1 */
+ /* USER CODE BEGIN RF_Init 2 */
+
+ /* USER CODE END RF_Init 2 */
+
+}
+ 80013f8: bf00 nop
+ 80013fa: 46bd mov sp, r7
+ 80013fc: f85d 7b04 ldr.w r7, [sp], #4
+ 8001400: 4770 bx lr
+ ...
+
+08001404 <MX_RTC_Init>:
+ * @brief RTC Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_RTC_Init(void)
+{
+ 8001404: b580 push {r7, lr}
+ 8001406: b086 sub sp, #24
+ 8001408: af00 add r7, sp, #0
+
+ /* USER CODE BEGIN RTC_Init 0 */
+
+ /* USER CODE END RTC_Init 0 */
+
+ RTC_TimeTypeDef sTime = {0};
+ 800140a: 1d3b adds r3, r7, #4
+ 800140c: 2200 movs r2, #0
+ 800140e: 601a str r2, [r3, #0]
+ 8001410: 605a str r2, [r3, #4]
+ 8001412: 609a str r2, [r3, #8]
+ 8001414: 60da str r2, [r3, #12]
+ 8001416: 611a str r2, [r3, #16]
+ RTC_DateTypeDef sDate = {0};
+ 8001418: 2300 movs r3, #0
+ 800141a: 603b str r3, [r7, #0]
+
+ /* USER CODE END RTC_Init 1 */
+
+ /** Initialize RTC Only
+ */
+ hrtc.Instance = RTC;
+ 800141c: 4b27 ldr r3, [pc, #156] @ (80014bc <MX_RTC_Init+0xb8>)
+ 800141e: 4a28 ldr r2, [pc, #160] @ (80014c0 <MX_RTC_Init+0xbc>)
+ 8001420: 601a str r2, [r3, #0]
+ hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
+ 8001422: 4b26 ldr r3, [pc, #152] @ (80014bc <MX_RTC_Init+0xb8>)
+ 8001424: 2200 movs r2, #0
+ 8001426: 605a str r2, [r3, #4]
+ hrtc.Init.AsynchPrediv = CFG_RTC_ASYNCH_PRESCALER;
+ 8001428: 4b24 ldr r3, [pc, #144] @ (80014bc <MX_RTC_Init+0xb8>)
+ 800142a: 220f movs r2, #15
+ 800142c: 609a str r2, [r3, #8]
+ hrtc.Init.SynchPrediv = CFG_RTC_SYNCH_PRESCALER;
+ 800142e: 4b23 ldr r3, [pc, #140] @ (80014bc <MX_RTC_Init+0xb8>)
+ 8001430: f647 72ff movw r2, #32767 @ 0x7fff
+ 8001434: 60da str r2, [r3, #12]
+ hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
+ 8001436: 4b21 ldr r3, [pc, #132] @ (80014bc <MX_RTC_Init+0xb8>)
+ 8001438: 2200 movs r2, #0
+ 800143a: 611a str r2, [r3, #16]
+ hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
+ 800143c: 4b1f ldr r3, [pc, #124] @ (80014bc <MX_RTC_Init+0xb8>)
+ 800143e: 2200 movs r2, #0
+ 8001440: 619a str r2, [r3, #24]
+ hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
+ 8001442: 4b1e ldr r3, [pc, #120] @ (80014bc <MX_RTC_Init+0xb8>)
+ 8001444: 2200 movs r2, #0
+ 8001446: 61da str r2, [r3, #28]
+ hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
+ 8001448: 4b1c ldr r3, [pc, #112] @ (80014bc <MX_RTC_Init+0xb8>)
+ 800144a: 2200 movs r2, #0
+ 800144c: 615a str r2, [r3, #20]
+ if (HAL_RTC_Init(&hrtc) != HAL_OK)
+ 800144e: 481b ldr r0, [pc, #108] @ (80014bc <MX_RTC_Init+0xb8>)
+ 8001450: f002 fd7e bl 8003f50 <HAL_RTC_Init>
+ 8001454: 4603 mov r3, r0
+ 8001456: 2b00 cmp r3, #0
+ 8001458: d001 beq.n 800145e <MX_RTC_Init+0x5a>
+ {
+ Error_Handler();
+ 800145a: f000 f85f bl 800151c <Error_Handler>
+
+ /* USER CODE END Check_RTC_BKUP */
+
+ /** Initialize RTC and set the Time and Date
+ */
+ sTime.Hours = 0x0;
+ 800145e: 2300 movs r3, #0
+ 8001460: 713b strb r3, [r7, #4]
+ sTime.Minutes = 0x0;
+ 8001462: 2300 movs r3, #0
+ 8001464: 717b strb r3, [r7, #5]
+ sTime.Seconds = 0x0;
+ 8001466: 2300 movs r3, #0
+ 8001468: 71bb strb r3, [r7, #6]
+ sTime.SubSeconds = 0x0;
+ 800146a: 2300 movs r3, #0
+ 800146c: 60bb str r3, [r7, #8]
+ sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
+ 800146e: 2300 movs r3, #0
+ 8001470: 613b str r3, [r7, #16]
+ sTime.StoreOperation = RTC_STOREOPERATION_RESET;
+ 8001472: 2300 movs r3, #0
+ 8001474: 617b str r3, [r7, #20]
+ if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
+ 8001476: 1d3b adds r3, r7, #4
+ 8001478: 2201 movs r2, #1
+ 800147a: 4619 mov r1, r3
+ 800147c: 480f ldr r0, [pc, #60] @ (80014bc <MX_RTC_Init+0xb8>)
+ 800147e: f002 fdef bl 8004060 <HAL_RTC_SetTime>
+ 8001482: 4603 mov r3, r0
+ 8001484: 2b00 cmp r3, #0
+ 8001486: d001 beq.n 800148c <MX_RTC_Init+0x88>
+ {
+ Error_Handler();
+ 8001488: f000 f848 bl 800151c <Error_Handler>
+ }
+ sDate.WeekDay = RTC_WEEKDAY_MONDAY;
+ 800148c: 2301 movs r3, #1
+ 800148e: 703b strb r3, [r7, #0]
+ sDate.Month = RTC_MONTH_JANUARY;
+ 8001490: 2301 movs r3, #1
+ 8001492: 707b strb r3, [r7, #1]
+ sDate.Date = 0x1;
+ 8001494: 2301 movs r3, #1
+ 8001496: 70bb strb r3, [r7, #2]
+ sDate.Year = 0x0;
+ 8001498: 2300 movs r3, #0
+ 800149a: 70fb strb r3, [r7, #3]
+
+ if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
+ 800149c: 463b mov r3, r7
+ 800149e: 2201 movs r2, #1
+ 80014a0: 4619 mov r1, r3
+ 80014a2: 4806 ldr r0, [pc, #24] @ (80014bc <MX_RTC_Init+0xb8>)
+ 80014a4: f002 fe7b bl 800419e <HAL_RTC_SetDate>
+ 80014a8: 4603 mov r3, r0
+ 80014aa: 2b00 cmp r3, #0
+ 80014ac: d001 beq.n 80014b2 <MX_RTC_Init+0xae>
+ {
+ Error_Handler();
+ 80014ae: f000 f835 bl 800151c <Error_Handler>
+ }
+ /* USER CODE BEGIN RTC_Init 2 */
+
+ /* USER CODE END RTC_Init 2 */
+
+}
+ 80014b2: bf00 nop
+ 80014b4: 3718 adds r7, #24
+ 80014b6: 46bd mov sp, r7
+ 80014b8: bd80 pop {r7, pc}
+ 80014ba: bf00 nop
+ 80014bc: 200001cc .word 0x200001cc
+ 80014c0: 40002800 .word 0x40002800
+
+080014c4 <MX_GPIO_Init>:
+ * @brief GPIO Initialization Function
+ * @param None
+ * @retval None
+ */
+static void MX_GPIO_Init(void)
+{
+ 80014c4: b580 push {r7, lr}
+ 80014c6: b086 sub sp, #24
+ 80014c8: af00 add r7, sp, #0
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ 80014ca: 1d3b adds r3, r7, #4
+ 80014cc: 2200 movs r2, #0
+ 80014ce: 601a str r2, [r3, #0]
+ 80014d0: 605a str r2, [r3, #4]
+ 80014d2: 609a str r2, [r3, #8]
+ 80014d4: 60da str r2, [r3, #12]
+ 80014d6: 611a str r2, [r3, #16]
+ /* USER CODE BEGIN MX_GPIO_Init_1 */
+
+ /* USER CODE END MX_GPIO_Init_1 */
+
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ 80014d8: 2004 movs r0, #4
+ 80014da: f7ff fe7d bl 80011d8 <LL_AHB2_GRP1_EnableClock>
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ 80014de: 2001 movs r0, #1
+ 80014e0: f7ff fe7a bl 80011d8 <LL_AHB2_GRP1_EnableClock>
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ 80014e4: 2002 movs r0, #2
+ 80014e6: f7ff fe77 bl 80011d8 <LL_AHB2_GRP1_EnableClock>
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4|GPIO_PIN_5, GPIO_PIN_SET);
+ 80014ea: 2201 movs r2, #1
+ 80014ec: 2130 movs r1, #48 @ 0x30
+ 80014ee: 480a ldr r0, [pc, #40] @ (8001518 <MX_GPIO_Init+0x54>)
+ 80014f0: f000 fd86 bl 8002000 <HAL_GPIO_WritePin>
+
+ /*Configure GPIO pins : PB4 PB5 */
+ GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
+ 80014f4: 2330 movs r3, #48 @ 0x30
+ 80014f6: 607b str r3, [r7, #4]
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ 80014f8: 2301 movs r3, #1
+ 80014fa: 60bb str r3, [r7, #8]
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ 80014fc: 2301 movs r3, #1
+ 80014fe: 60fb str r3, [r7, #12]
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ 8001500: 2300 movs r3, #0
+ 8001502: 613b str r3, [r7, #16]
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ 8001504: 1d3b adds r3, r7, #4
+ 8001506: 4619 mov r1, r3
+ 8001508: 4803 ldr r0, [pc, #12] @ (8001518 <MX_GPIO_Init+0x54>)
+ 800150a: f000 fc09 bl 8001d20 <HAL_GPIO_Init>
+
+ /* USER CODE BEGIN MX_GPIO_Init_2 */
+
+ /* USER CODE END MX_GPIO_Init_2 */
+}
+ 800150e: bf00 nop
+ 8001510: 3718 adds r7, #24
+ 8001512: 46bd mov sp, r7
+ 8001514: bd80 pop {r7, pc}
+ 8001516: bf00 nop
+ 8001518: 48000400 .word 0x48000400
+
+0800151c <Error_Handler>:
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void)
+{
+ 800151c: b480 push {r7}
+ 800151e: af00 add r7, sp, #0
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8001520: b672 cpsid i
+}
+ 8001522: bf00 nop
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while (1)
+ 8001524: bf00 nop
+ 8001526: e7fd b.n 8001524 <Error_Handler+0x8>
+
+08001528 <LL_RCC_EnableRTC>:
+ * @brief Enable RTC
+ * @rmtoll BDCR RTCEN LL_RCC_EnableRTC
+ * @retval None
+ */
+__STATIC_INLINE void LL_RCC_EnableRTC(void)
+{
+ 8001528: b480 push {r7}
+ 800152a: af00 add r7, sp, #0
+ SET_BIT(RCC->BDCR, RCC_BDCR_RTCEN);
+ 800152c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001530: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8001534: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8001538: f443 4300 orr.w r3, r3, #32768 @ 0x8000
+ 800153c: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 8001540: bf00 nop
+ 8001542: 46bd mov sp, r7
+ 8001544: f85d 7b04 ldr.w r7, [sp], #4
+ 8001548: 4770 bx lr
+
+0800154a <LL_AHB2_GRP1_EnableClock>:
+{
+ 800154a: b480 push {r7}
+ 800154c: b085 sub sp, #20
+ 800154e: af00 add r7, sp, #0
+ 8001550: 6078 str r0, [r7, #4]
+ SET_BIT(RCC->AHB2ENR, Periphs);
+ 8001552: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001556: 6cda ldr r2, [r3, #76] @ 0x4c
+ 8001558: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800155c: 687b ldr r3, [r7, #4]
+ 800155e: 4313 orrs r3, r2
+ 8001560: 64cb str r3, [r1, #76] @ 0x4c
+ tmpreg = READ_BIT(RCC->AHB2ENR, Periphs);
+ 8001562: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001566: 6cda ldr r2, [r3, #76] @ 0x4c
+ 8001568: 687b ldr r3, [r7, #4]
+ 800156a: 4013 ands r3, r2
+ 800156c: 60fb str r3, [r7, #12]
+ (void)tmpreg;
+ 800156e: 68fb ldr r3, [r7, #12]
+}
+ 8001570: bf00 nop
+ 8001572: 3714 adds r7, #20
+ 8001574: 46bd mov sp, r7
+ 8001576: f85d 7b04 ldr.w r7, [sp], #4
+ 800157a: 4770 bx lr
+
+0800157c <LL_AHB3_GRP1_EnableClock>:
+ * @arg @ref LL_AHB3_GRP1_PERIPH_FLASH
+ * @note (*) Not supported by all the devices
+ * @retval None
+ */
+__STATIC_INLINE void LL_AHB3_GRP1_EnableClock(uint32_t Periphs)
+{
+ 800157c: b480 push {r7}
+ 800157e: b085 sub sp, #20
+ 8001580: af00 add r7, sp, #0
+ 8001582: 6078 str r0, [r7, #4]
+ __IO uint32_t tmpreg;
+ SET_BIT(RCC->AHB3ENR, Periphs);
+ 8001584: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001588: 6d1a ldr r2, [r3, #80] @ 0x50
+ 800158a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800158e: 687b ldr r3, [r7, #4]
+ 8001590: 4313 orrs r3, r2
+ 8001592: 650b str r3, [r1, #80] @ 0x50
+ /* Delay after an RCC peripheral clock enabling */
+ tmpreg = READ_BIT(RCC->AHB3ENR, Periphs);
+ 8001594: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001598: 6d1a ldr r2, [r3, #80] @ 0x50
+ 800159a: 687b ldr r3, [r7, #4]
+ 800159c: 4013 ands r3, r2
+ 800159e: 60fb str r3, [r7, #12]
+ (void)tmpreg;
+ 80015a0: 68fb ldr r3, [r7, #12]
+}
+ 80015a2: bf00 nop
+ 80015a4: 3714 adds r7, #20
+ 80015a6: 46bd mov sp, r7
+ 80015a8: f85d 7b04 ldr.w r7, [sp], #4
+ 80015ac: 4770 bx lr
+
+080015ae <LL_APB1_GRP1_EnableClock>:
+ * @arg @ref LL_APB1_GRP1_PERIPH_LPTIM1
+ * @note (*) Not supported by all the devices
+ * @retval None
+ */
+__STATIC_INLINE void LL_APB1_GRP1_EnableClock(uint32_t Periphs)
+{
+ 80015ae: b480 push {r7}
+ 80015b0: b085 sub sp, #20
+ 80015b2: af00 add r7, sp, #0
+ 80015b4: 6078 str r0, [r7, #4]
+ __IO uint32_t tmpreg;
+ SET_BIT(RCC->APB1ENR1, Periphs);
+ 80015b6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80015ba: 6d9a ldr r2, [r3, #88] @ 0x58
+ 80015bc: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80015c0: 687b ldr r3, [r7, #4]
+ 80015c2: 4313 orrs r3, r2
+ 80015c4: 658b str r3, [r1, #88] @ 0x58
+ /* Delay after an RCC peripheral clock enabling */
+ tmpreg = READ_BIT(RCC->APB1ENR1, Periphs);
+ 80015c6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80015ca: 6d9a ldr r2, [r3, #88] @ 0x58
+ 80015cc: 687b ldr r3, [r7, #4]
+ 80015ce: 4013 ands r3, r2
+ 80015d0: 60fb str r3, [r7, #12]
+ (void)tmpreg;
+ 80015d2: 68fb ldr r3, [r7, #12]
+}
+ 80015d4: bf00 nop
+ 80015d6: 3714 adds r7, #20
+ 80015d8: 46bd mov sp, r7
+ 80015da: f85d 7b04 ldr.w r7, [sp], #4
+ 80015de: 4770 bx lr
+
+080015e0 <HAL_MspInit>:
+/* USER CODE END 0 */
+/**
+ * Initializes the Global MSP.
+ */
+void HAL_MspInit(void)
+{
+ 80015e0: b580 push {r7, lr}
+ 80015e2: af00 add r7, sp, #0
+
+ /* USER CODE BEGIN MspInit 0 */
+
+ /* USER CODE END MspInit 0 */
+
+ __HAL_RCC_HSEM_CLK_ENABLE();
+ 80015e4: f44f 2000 mov.w r0, #524288 @ 0x80000
+ 80015e8: f7ff ffc8 bl 800157c <LL_AHB3_GRP1_EnableClock>
+
+ /* System interrupt init*/
+
+ /* Peripheral interrupt init */
+ /* HSEM_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(HSEM_IRQn, 0, 0);
+ 80015ec: 2200 movs r2, #0
+ 80015ee: 2100 movs r1, #0
+ 80015f0: 202e movs r0, #46 @ 0x2e
+ 80015f2: f000 fb36 bl 8001c62 <HAL_NVIC_SetPriority>
+ HAL_NVIC_EnableIRQ(HSEM_IRQn);
+ 80015f6: 202e movs r0, #46 @ 0x2e
+ 80015f8: f000 fb4d bl 8001c96 <HAL_NVIC_EnableIRQ>
+
+ /* USER CODE BEGIN MspInit 1 */
+
+ /* USER CODE END MspInit 1 */
+}
+ 80015fc: bf00 nop
+ 80015fe: bd80 pop {r7, pc}
+
+08001600 <HAL_I2C_MspInit>:
+ * This function configures the hardware resources used in this example
+ * @param hi2c: I2C handle pointer
+ * @retval None
+ */
+void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
+{
+ 8001600: b580 push {r7, lr}
+ 8001602: b09c sub sp, #112 @ 0x70
+ 8001604: af00 add r7, sp, #0
+ 8001606: 6078 str r0, [r7, #4]
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ 8001608: f107 035c add.w r3, r7, #92 @ 0x5c
+ 800160c: 2200 movs r2, #0
+ 800160e: 601a str r2, [r3, #0]
+ 8001610: 605a str r2, [r3, #4]
+ 8001612: 609a str r2, [r3, #8]
+ 8001614: 60da str r2, [r3, #12]
+ 8001616: 611a str r2, [r3, #16]
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+ 8001618: f107 030c add.w r3, r7, #12
+ 800161c: 2250 movs r2, #80 @ 0x50
+ 800161e: 2100 movs r1, #0
+ 8001620: 4618 mov r0, r3
+ 8001622: f006 fa80 bl 8007b26 <memset>
+ if(hi2c->Instance==I2C1)
+ 8001626: 687b ldr r3, [r7, #4]
+ 8001628: 681b ldr r3, [r3, #0]
+ 800162a: 4a16 ldr r2, [pc, #88] @ (8001684 <HAL_I2C_MspInit+0x84>)
+ 800162c: 4293 cmp r3, r2
+ 800162e: d125 bne.n 800167c <HAL_I2C_MspInit+0x7c>
+
+ /* USER CODE END I2C1_MspInit 0 */
+
+ /** Initializes the peripherals clock
+ */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_I2C1;
+ 8001630: 2304 movs r3, #4
+ 8001632: 60fb str r3, [r7, #12]
+ PeriphClkInitStruct.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
+ 8001634: f44f 3340 mov.w r3, #196608 @ 0x30000
+ 8001638: 62fb str r3, [r7, #44] @ 0x2c
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+ 800163a: f107 030c add.w r3, r7, #12
+ 800163e: 4618 mov r0, r3
+ 8001640: f002 f9ff bl 8003a42 <HAL_RCCEx_PeriphCLKConfig>
+ 8001644: 4603 mov r3, r0
+ 8001646: 2b00 cmp r3, #0
+ 8001648: d001 beq.n 800164e <HAL_I2C_MspInit+0x4e>
+ {
+ Error_Handler();
+ 800164a: f7ff ff67 bl 800151c <Error_Handler>
+ }
+
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ 800164e: 2002 movs r0, #2
+ 8001650: f7ff ff7b bl 800154a <LL_AHB2_GRP1_EnableClock>
+ /**I2C1 GPIO Configuration
+ PB6 ------> I2C1_SCL
+ PB7 ------> I2C1_SDA
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
+ 8001654: 23c0 movs r3, #192 @ 0xc0
+ 8001656: 65fb str r3, [r7, #92] @ 0x5c
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
+ 8001658: 2312 movs r3, #18
+ 800165a: 663b str r3, [r7, #96] @ 0x60
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ 800165c: 2300 movs r3, #0
+ 800165e: 667b str r3, [r7, #100] @ 0x64
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ 8001660: 2300 movs r3, #0
+ 8001662: 66bb str r3, [r7, #104] @ 0x68
+ GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
+ 8001664: 2304 movs r3, #4
+ 8001666: 66fb str r3, [r7, #108] @ 0x6c
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ 8001668: f107 035c add.w r3, r7, #92 @ 0x5c
+ 800166c: 4619 mov r1, r3
+ 800166e: 4806 ldr r0, [pc, #24] @ (8001688 <HAL_I2C_MspInit+0x88>)
+ 8001670: f000 fb56 bl 8001d20 <HAL_GPIO_Init>
+
+ /* Peripheral clock enable */
+ __HAL_RCC_I2C1_CLK_ENABLE();
+ 8001674: f44f 1000 mov.w r0, #2097152 @ 0x200000
+ 8001678: f7ff ff99 bl 80015ae <LL_APB1_GRP1_EnableClock>
+
+ /* USER CODE END I2C1_MspInit 1 */
+
+ }
+
+}
+ 800167c: bf00 nop
+ 800167e: 3770 adds r7, #112 @ 0x70
+ 8001680: 46bd mov sp, r7
+ 8001682: bd80 pop {r7, pc}
+ 8001684: 40005400 .word 0x40005400
+ 8001688: 48000400 .word 0x48000400
+
+0800168c <HAL_IPCC_MspInit>:
+ * This function configures the hardware resources used in this example
+ * @param hipcc: IPCC handle pointer
+ * @retval None
+ */
+void HAL_IPCC_MspInit(IPCC_HandleTypeDef* hipcc)
+{
+ 800168c: b580 push {r7, lr}
+ 800168e: b082 sub sp, #8
+ 8001690: af00 add r7, sp, #0
+ 8001692: 6078 str r0, [r7, #4]
+ if(hipcc->Instance==IPCC)
+ 8001694: 687b ldr r3, [r7, #4]
+ 8001696: 681b ldr r3, [r3, #0]
+ 8001698: 4a0d ldr r2, [pc, #52] @ (80016d0 <HAL_IPCC_MspInit+0x44>)
+ 800169a: 4293 cmp r3, r2
+ 800169c: d113 bne.n 80016c6 <HAL_IPCC_MspInit+0x3a>
+ {
+ /* USER CODE BEGIN IPCC_MspInit 0 */
+
+ /* USER CODE END IPCC_MspInit 0 */
+ /* Peripheral clock enable */
+ __HAL_RCC_IPCC_CLK_ENABLE();
+ 800169e: f44f 1080 mov.w r0, #1048576 @ 0x100000
+ 80016a2: f7ff ff6b bl 800157c <LL_AHB3_GRP1_EnableClock>
+ /* IPCC interrupt Init */
+ HAL_NVIC_SetPriority(IPCC_C1_RX_IRQn, 0, 0);
+ 80016a6: 2200 movs r2, #0
+ 80016a8: 2100 movs r1, #0
+ 80016aa: 202c movs r0, #44 @ 0x2c
+ 80016ac: f000 fad9 bl 8001c62 <HAL_NVIC_SetPriority>
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ 80016b0: 202c movs r0, #44 @ 0x2c
+ 80016b2: f000 faf0 bl 8001c96 <HAL_NVIC_EnableIRQ>
+ HAL_NVIC_SetPriority(IPCC_C1_TX_IRQn, 0, 0);
+ 80016b6: 2200 movs r2, #0
+ 80016b8: 2100 movs r1, #0
+ 80016ba: 202d movs r0, #45 @ 0x2d
+ 80016bc: f000 fad1 bl 8001c62 <HAL_NVIC_SetPriority>
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+ 80016c0: 202d movs r0, #45 @ 0x2d
+ 80016c2: f000 fae8 bl 8001c96 <HAL_NVIC_EnableIRQ>
+
+ /* USER CODE END IPCC_MspInit 1 */
+
+ }
+
+}
+ 80016c6: bf00 nop
+ 80016c8: 3708 adds r7, #8
+ 80016ca: 46bd mov sp, r7
+ 80016cc: bd80 pop {r7, pc}
+ 80016ce: bf00 nop
+ 80016d0: 58000c00 .word 0x58000c00
+
+080016d4 <HAL_RTC_MspInit>:
+ * This function configures the hardware resources used in this example
+ * @param hrtc: RTC handle pointer
+ * @retval None
+ */
+void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
+{
+ 80016d4: b580 push {r7, lr}
+ 80016d6: b096 sub sp, #88 @ 0x58
+ 80016d8: af00 add r7, sp, #0
+ 80016da: 6078 str r0, [r7, #4]
+ RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
+ 80016dc: f107 0308 add.w r3, r7, #8
+ 80016e0: 2250 movs r2, #80 @ 0x50
+ 80016e2: 2100 movs r1, #0
+ 80016e4: 4618 mov r0, r3
+ 80016e6: f006 fa1e bl 8007b26 <memset>
+ if(hrtc->Instance==RTC)
+ 80016ea: 687b ldr r3, [r7, #4]
+ 80016ec: 681b ldr r3, [r3, #0]
+ 80016ee: 4a0e ldr r2, [pc, #56] @ (8001728 <HAL_RTC_MspInit+0x54>)
+ 80016f0: 4293 cmp r3, r2
+ 80016f2: d115 bne.n 8001720 <HAL_RTC_MspInit+0x4c>
+
+ /* USER CODE END RTC_MspInit 0 */
+
+ /** Initializes the peripherals clock
+ */
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
+ 80016f4: f44f 6300 mov.w r3, #2048 @ 0x800
+ 80016f8: 60bb str r3, [r7, #8]
+ PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
+ 80016fa: f44f 7380 mov.w r3, #256 @ 0x100
+ 80016fe: 64bb str r3, [r7, #72] @ 0x48
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
+ 8001700: f107 0308 add.w r3, r7, #8
+ 8001704: 4618 mov r0, r3
+ 8001706: f002 f99c bl 8003a42 <HAL_RCCEx_PeriphCLKConfig>
+ 800170a: 4603 mov r3, r0
+ 800170c: 2b00 cmp r3, #0
+ 800170e: d001 beq.n 8001714 <HAL_RTC_MspInit+0x40>
+ {
+ Error_Handler();
+ 8001710: f7ff ff04 bl 800151c <Error_Handler>
+ }
+
+ /* Peripheral clock enable */
+ __HAL_RCC_RTC_ENABLE();
+ 8001714: f7ff ff08 bl 8001528 <LL_RCC_EnableRTC>
+ __HAL_RCC_RTCAPB_CLK_ENABLE();
+ 8001718: f44f 6080 mov.w r0, #1024 @ 0x400
+ 800171c: f7ff ff47 bl 80015ae <LL_APB1_GRP1_EnableClock>
+
+ /* USER CODE END RTC_MspInit 1 */
+
+ }
+
+}
+ 8001720: bf00 nop
+ 8001722: 3758 adds r7, #88 @ 0x58
+ 8001724: 46bd mov sp, r7
+ 8001726: bd80 pop {r7, pc}
+ 8001728: 40002800 .word 0x40002800
+
+0800172c <NMI_Handler>:
+/******************************************************************************/
+/**
+ * @brief This function handles Non maskable interrupt.
+ */
+void NMI_Handler(void)
+{
+ 800172c: b480 push {r7}
+ 800172e: af00 add r7, sp, #0
+ /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
+
+ /* USER CODE END NonMaskableInt_IRQn 0 */
+ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
+ while (1)
+ 8001730: bf00 nop
+ 8001732: e7fd b.n 8001730 <NMI_Handler+0x4>
+
+08001734 <HardFault_Handler>:
+
+/**
+ * @brief This function handles Hard fault interrupt.
+ */
+void HardFault_Handler(void)
+{
+ 8001734: b480 push {r7}
+ 8001736: af00 add r7, sp, #0
+ /* USER CODE BEGIN HardFault_IRQn 0 */
+
+ /* USER CODE END HardFault_IRQn 0 */
+ while (1)
+ 8001738: bf00 nop
+ 800173a: e7fd b.n 8001738 <HardFault_Handler+0x4>
+
+0800173c <MemManage_Handler>:
+
+/**
+ * @brief This function handles Memory management fault.
+ */
+void MemManage_Handler(void)
+{
+ 800173c: b480 push {r7}
+ 800173e: af00 add r7, sp, #0
+ /* USER CODE BEGIN MemoryManagement_IRQn 0 */
+
+ /* USER CODE END MemoryManagement_IRQn 0 */
+ while (1)
+ 8001740: bf00 nop
+ 8001742: e7fd b.n 8001740 <MemManage_Handler+0x4>
+
+08001744 <BusFault_Handler>:
+
+/**
+ * @brief This function handles Prefetch fault, memory access fault.
+ */
+void BusFault_Handler(void)
+{
+ 8001744: b480 push {r7}
+ 8001746: af00 add r7, sp, #0
+ /* USER CODE BEGIN BusFault_IRQn 0 */
+
+ /* USER CODE END BusFault_IRQn 0 */
+ while (1)
+ 8001748: bf00 nop
+ 800174a: e7fd b.n 8001748 <BusFault_Handler+0x4>
+
+0800174c <UsageFault_Handler>:
+
+/**
+ * @brief This function handles Undefined instruction or illegal state.
+ */
+void UsageFault_Handler(void)
+{
+ 800174c: b480 push {r7}
+ 800174e: af00 add r7, sp, #0
+ /* USER CODE BEGIN UsageFault_IRQn 0 */
+
+ /* USER CODE END UsageFault_IRQn 0 */
+ while (1)
+ 8001750: bf00 nop
+ 8001752: e7fd b.n 8001750 <UsageFault_Handler+0x4>
+
+08001754 <SVC_Handler>:
+
+/**
+ * @brief This function handles System service call via SWI instruction.
+ */
+void SVC_Handler(void)
+{
+ 8001754: b480 push {r7}
+ 8001756: af00 add r7, sp, #0
+
+ /* USER CODE END SVCall_IRQn 0 */
+ /* USER CODE BEGIN SVCall_IRQn 1 */
+
+ /* USER CODE END SVCall_IRQn 1 */
+}
+ 8001758: bf00 nop
+ 800175a: 46bd mov sp, r7
+ 800175c: f85d 7b04 ldr.w r7, [sp], #4
+ 8001760: 4770 bx lr
+
+08001762 <DebugMon_Handler>:
+
+/**
+ * @brief This function handles Debug monitor.
+ */
+void DebugMon_Handler(void)
+{
+ 8001762: b480 push {r7}
+ 8001764: af00 add r7, sp, #0
+
+ /* USER CODE END DebugMonitor_IRQn 0 */
+ /* USER CODE BEGIN DebugMonitor_IRQn 1 */
+
+ /* USER CODE END DebugMonitor_IRQn 1 */
+}
+ 8001766: bf00 nop
+ 8001768: 46bd mov sp, r7
+ 800176a: f85d 7b04 ldr.w r7, [sp], #4
+ 800176e: 4770 bx lr
+
+08001770 <PendSV_Handler>:
+
+/**
+ * @brief This function handles Pendable request for system service.
+ */
+void PendSV_Handler(void)
+{
+ 8001770: b480 push {r7}
+ 8001772: af00 add r7, sp, #0
+
+ /* USER CODE END PendSV_IRQn 0 */
+ /* USER CODE BEGIN PendSV_IRQn 1 */
+
+ /* USER CODE END PendSV_IRQn 1 */
+}
+ 8001774: bf00 nop
+ 8001776: 46bd mov sp, r7
+ 8001778: f85d 7b04 ldr.w r7, [sp], #4
+ 800177c: 4770 bx lr
+
+0800177e <SysTick_Handler>:
+
+/**
+ * @brief This function handles System tick timer.
+ */
+void SysTick_Handler(void)
+{
+ 800177e: b580 push {r7, lr}
+ 8001780: af00 add r7, sp, #0
+ /* USER CODE BEGIN SysTick_IRQn 0 */
+
+ /* USER CODE END SysTick_IRQn 0 */
+ HAL_IncTick();
+ 8001782: f000 f8fb bl 800197c <HAL_IncTick>
+ /* USER CODE BEGIN SysTick_IRQn 1 */
+
+ /* USER CODE END SysTick_IRQn 1 */
+}
+ 8001786: bf00 nop
+ 8001788: bd80 pop {r7, pc}
+
+0800178a <IPCC_C1_RX_IRQHandler>:
+
+/**
+ * @brief This function handles IPCC RX occupied interrupt.
+ */
+void IPCC_C1_RX_IRQHandler(void)
+{
+ 800178a: b580 push {r7, lr}
+ 800178c: af00 add r7, sp, #0
+ /* USER CODE BEGIN IPCC_C1_RX_IRQn 0 */
+
+ /* USER CODE END IPCC_C1_RX_IRQn 0 */
+ HAL_IPCC_RX_IRQHandler(&hipcc);
+ 800178e: f005 fd01 bl 8007194 <HW_IPCC_Rx_Handler>
+ /* USER CODE BEGIN IPCC_C1_RX_IRQn 1 */
+
+ /* USER CODE END IPCC_C1_RX_IRQn 1 */
+}
+ 8001792: bf00 nop
+ 8001794: bd80 pop {r7, pc}
+
+08001796 <IPCC_C1_TX_IRQHandler>:
+
+/**
+ * @brief This function handles IPCC TX free interrupt.
+ */
+void IPCC_C1_TX_IRQHandler(void)
+{
+ 8001796: b580 push {r7, lr}
+ 8001798: af00 add r7, sp, #0
+ /* USER CODE BEGIN IPCC_C1_TX_IRQn 0 */
+
+ /* USER CODE END IPCC_C1_TX_IRQn 0 */
+ HAL_IPCC_TX_IRQHandler(&hipcc);
+ 800179a: f005 fd31 bl 8007200 <HW_IPCC_Tx_Handler>
+ /* USER CODE BEGIN IPCC_C1_TX_IRQn 1 */
+
+ /* USER CODE END IPCC_C1_TX_IRQn 1 */
+}
+ 800179e: bf00 nop
+ 80017a0: bd80 pop {r7, pc}
+
+080017a2 <HSEM_IRQHandler>:
+
+/**
+ * @brief This function handles HSEM global interrupt.
+ */
+void HSEM_IRQHandler(void)
+{
+ 80017a2: b580 push {r7, lr}
+ 80017a4: af00 add r7, sp, #0
+ /* USER CODE BEGIN HSEM_IRQn 0 */
+
+ /* USER CODE END HSEM_IRQn 0 */
+ HAL_HSEM_IRQHandler();
+ 80017a6: f000 fc43 bl 8002030 <HAL_HSEM_IRQHandler>
+ /* USER CODE BEGIN HSEM_IRQn 1 */
+
+ /* USER CODE END HSEM_IRQn 1 */
+}
+ 80017aa: bf00 nop
+ 80017ac: bd80 pop {r7, pc}
+ ...
+
+080017b0 <SystemInit>:
+ * @brief Setup the microcontroller system.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ 80017b0: b480 push {r7}
+ 80017b2: af00 add r7, sp, #0
+ SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;
+#endif /* USER_VECT_TAB_ADDRESS */
+
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << (10UL * 2UL)) | (3UL << (11UL * 2UL))); /* set CP10 and CP11 Full Access */
+ 80017b4: 4b24 ldr r3, [pc, #144] @ (8001848 <SystemInit+0x98>)
+ 80017b6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 80017ba: 4a23 ldr r2, [pc, #140] @ (8001848 <SystemInit+0x98>)
+ 80017bc: f443 0370 orr.w r3, r3, #15728640 @ 0xf00000
+ 80017c0: f8c2 3088 str.w r3, [r2, #136] @ 0x88
+#endif /* FPU */
+
+ /* Reset the RCC clock configuration to the default reset state ------------*/
+ /* Set MSION bit */
+ RCC->CR |= RCC_CR_MSION;
+ 80017c4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80017c8: 681b ldr r3, [r3, #0]
+ 80017ca: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80017ce: f043 0301 orr.w r3, r3, #1
+ 80017d2: 6013 str r3, [r2, #0]
+
+ /* Reset CFGR register */
+ RCC->CFGR = 0x00070000U;
+ 80017d4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80017d8: f44f 22e0 mov.w r2, #458752 @ 0x70000
+ 80017dc: 609a str r2, [r3, #8]
+
+ /* Reset PLLSAI1ON, PLLON, HSECSSON, HSEON, HSION, and MSIPLLON bits */
+ RCC->CR &= (uint32_t)0xFAF6FEFBU;
+ 80017de: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80017e2: 681a ldr r2, [r3, #0]
+ 80017e4: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80017e8: 4b18 ldr r3, [pc, #96] @ (800184c <SystemInit+0x9c>)
+ 80017ea: 4013 ands r3, r2
+ 80017ec: 600b str r3, [r1, #0]
+
+ /*!< Reset LSI1 and LSI2 bits */
+ RCC->CSR &= (uint32_t)0xFFFFFFFAU;
+ 80017ee: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80017f2: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 80017f6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80017fa: f023 0305 bic.w r3, r3, #5
+ 80017fe: f8c2 3094 str.w r3, [r2, #148] @ 0x94
+
+ /*!< Reset HSI48ON bit */
+ RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
+ 8001802: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001806: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
+ 800180a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 800180e: f023 0301 bic.w r3, r3, #1
+ 8001812: f8c2 3098 str.w r3, [r2, #152] @ 0x98
+
+ /* Reset PLLCFGR register */
+ RCC->PLLCFGR = 0x22041000U;
+ 8001816: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800181a: 4a0d ldr r2, [pc, #52] @ (8001850 <SystemInit+0xa0>)
+ 800181c: 60da str r2, [r3, #12]
+
+#if defined(STM32WB55xx) || defined(STM32WB5Mxx)
+ /* Reset PLLSAI1CFGR register */
+ RCC->PLLSAI1CFGR = 0x22041000U;
+ 800181e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8001822: 4a0b ldr r2, [pc, #44] @ (8001850 <SystemInit+0xa0>)
+ 8001824: 611a str r2, [r3, #16]
+#endif /* STM32WB55xx || STM32WB5Mxx */
+
+ /* Reset HSEBYP bit */
+ RCC->CR &= 0xFFFBFFFFU;
+ 8001826: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800182a: 681b ldr r3, [r3, #0]
+ 800182c: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8001830: f423 2380 bic.w r3, r3, #262144 @ 0x40000
+ 8001834: 6013 str r3, [r2, #0]
+
+ /* Disable all interrupts */
+ RCC->CIER = 0x00000000;
+ 8001836: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800183a: 2200 movs r2, #0
+ 800183c: 619a str r2, [r3, #24]
+}
+ 800183e: bf00 nop
+ 8001840: 46bd mov sp, r7
+ 8001842: f85d 7b04 ldr.w r7, [sp], #4
+ 8001846: 4770 bx lr
+ 8001848: e000ed00 .word 0xe000ed00
+ 800184c: faf6fefb .word 0xfaf6fefb
+ 8001850: 22041000 .word 0x22041000
+
+08001854 <CopyDataInit>:
+ bl LoopCopyDataInit
+.endm
+
+.section .text.data_initializers
+CopyDataInit:
+ ldr r4, [r2, r3]
+ 8001854: 58d4 ldr r4, [r2, r3]
+ str r4, [r0, r3]
+ 8001856: 50c4 str r4, [r0, r3]
+ adds r3, r3, #4
+ 8001858: 3304 adds r3, #4
+
+0800185a <LoopCopyDataInit>:
+
+LoopCopyDataInit:
+ adds r4, r0, r3
+ 800185a: 18c4 adds r4, r0, r3
+ cmp r4, r1
+ 800185c: 428c cmp r4, r1
+ bcc CopyDataInit
+ 800185e: d3f9 bcc.n 8001854 <CopyDataInit>
+ bx lr
+ 8001860: 4770 bx lr
+
+08001862 <FillZerobss>:
+
+FillZerobss:
+ str r3, [r0]
+ 8001862: 6003 str r3, [r0, #0]
+ adds r0, r0, #4
+ 8001864: 3004 adds r0, #4
+
+08001866 <LoopFillZerobss>:
+
+LoopFillZerobss:
+ cmp r0, r1
+ 8001866: 4288 cmp r0, r1
+ bcc FillZerobss
+ 8001868: d3fb bcc.n 8001862 <FillZerobss>
+ bx lr
+ 800186a: 4770 bx lr
+
+0800186c <Reset_Handler>:
+
+ .section .text.Reset_Handler
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+ ldr r0, =_estack
+ 800186c: 480c ldr r0, [pc, #48] @ (80018a0 <LoopForever+0x2>)
+ mov sp, r0 /* set stack pointer */
+ 800186e: 4685 mov sp, r0
+/* Call the clock system initialization function.*/
+ bl SystemInit
+ 8001870: f7ff ff9e bl 80017b0 <SystemInit>
+
+/* Copy the data segment initializers from flash to SRAM */
+ INIT_DATA _sdata, _edata, _sidata
+ 8001874: 480b ldr r0, [pc, #44] @ (80018a4 <LoopForever+0x6>)
+ 8001876: 490c ldr r1, [pc, #48] @ (80018a8 <LoopForever+0xa>)
+ 8001878: 4a0c ldr r2, [pc, #48] @ (80018ac <LoopForever+0xe>)
+ 800187a: 2300 movs r3, #0
+ 800187c: f7ff ffed bl 800185a <LoopCopyDataInit>
+ INIT_DATA _sMB_MEM2, _eMB_MEM2, _siMB_MEM2
+ 8001880: 480b ldr r0, [pc, #44] @ (80018b0 <LoopForever+0x12>)
+ 8001882: 490c ldr r1, [pc, #48] @ (80018b4 <LoopForever+0x16>)
+ 8001884: 4a0c ldr r2, [pc, #48] @ (80018b8 <LoopForever+0x1a>)
+ 8001886: 2300 movs r3, #0
+ 8001888: f7ff ffe7 bl 800185a <LoopCopyDataInit>
+
+/* Zero fill the bss segments. */
+ INIT_BSS _sbss, _ebss
+ 800188c: 480b ldr r0, [pc, #44] @ (80018bc <LoopForever+0x1e>)
+ 800188e: 490c ldr r1, [pc, #48] @ (80018c0 <LoopForever+0x22>)
+ 8001890: 2300 movs r3, #0
+ 8001892: f7ff ffe8 bl 8001866 <LoopFillZerobss>
+
+/* Call static constructors */
+ bl __libc_init_array
+ 8001896: f006 f94f bl 8007b38 <__libc_init_array>
+/* Call the application s entry point.*/
+ bl main
+ 800189a: f7ff fcb7 bl 800120c <main>
+
+0800189e <LoopForever>:
+
+LoopForever:
+ b LoopForever
+ 800189e: e7fe b.n 800189e <LoopForever>
+ ldr r0, =_estack
+ 80018a0: 20030000 .word 0x20030000
+ INIT_DATA _sdata, _edata, _sidata
+ 80018a4: 20000008 .word 0x20000008
+ 80018a8: 2000002c .word 0x2000002c
+ 80018ac: 08007e30 .word 0x08007e30
+ INIT_DATA _sMB_MEM2, _eMB_MEM2, _siMB_MEM2
+ 80018b0: 200301e4 .word 0x200301e4
+ 80018b4: 20030a67 .word 0x20030a67
+ 80018b8: 08007ea2 .word 0x08007ea2
+ INIT_BSS _sbss, _ebss
+ 80018bc: 20000080 .word 0x20000080
+ 80018c0: 200003a4 .word 0x200003a4
+
+080018c4 <ADC1_IRQHandler>:
+ * @retval None
+*/
+ .section .text.Default_Handler,"ax",%progbits
+Default_Handler:
+Infinite_Loop:
+ b Infinite_Loop
+ 80018c4: e7fe b.n 80018c4 <ADC1_IRQHandler>
+ ...
+
+080018c8 <HAL_Init>:
+ * need to ensure that the SysTick time base is always set to 1 millisecond
+ * to have correct HAL operation.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_Init(void)
+{
+ 80018c8: b580 push {r7, lr}
+ 80018ca: b082 sub sp, #8
+ 80018cc: af00 add r7, sp, #0
+ HAL_StatusTypeDef status = HAL_OK;
+ 80018ce: 2300 movs r3, #0
+ 80018d0: 71fb strb r3, [r7, #7]
+#if (DATA_CACHE_ENABLE == 0U)
+ __HAL_FLASH_DATA_CACHE_DISABLE();
+#endif /* DATA_CACHE_ENABLE */
+
+#if (PREFETCH_ENABLE != 0U)
+ __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
+ 80018d2: 4b0c ldr r3, [pc, #48] @ (8001904 <HAL_Init+0x3c>)
+ 80018d4: 681b ldr r3, [r3, #0]
+ 80018d6: 4a0b ldr r2, [pc, #44] @ (8001904 <HAL_Init+0x3c>)
+ 80018d8: f443 7380 orr.w r3, r3, #256 @ 0x100
+ 80018dc: 6013 str r3, [r2, #0]
+#endif /* PREFETCH_ENABLE */
+
+ /* Set Interrupt Group Priority */
+ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
+ 80018de: 2003 movs r0, #3
+ 80018e0: f000 f9b4 bl 8001c4c <HAL_NVIC_SetPriorityGrouping>
+
+ /* Use SysTick as time base source and configure 1ms tick (default clock after Reset is MSI) */
+ if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ 80018e4: 200f movs r0, #15
+ 80018e6: f000 f80f bl 8001908 <HAL_InitTick>
+ 80018ea: 4603 mov r3, r0
+ 80018ec: 2b00 cmp r3, #0
+ 80018ee: d002 beq.n 80018f6 <HAL_Init+0x2e>
+ {
+ status = HAL_ERROR;
+ 80018f0: 2301 movs r3, #1
+ 80018f2: 71fb strb r3, [r7, #7]
+ 80018f4: e001 b.n 80018fa <HAL_Init+0x32>
+ }
+ else
+ {
+ /* Init the low level hardware */
+ HAL_MspInit();
+ 80018f6: f7ff fe73 bl 80015e0 <HAL_MspInit>
+ }
+
+ /* Return function status */
+ return status;
+ 80018fa: 79fb ldrb r3, [r7, #7]
+}
+ 80018fc: 4618 mov r0, r3
+ 80018fe: 3708 adds r7, #8
+ 8001900: 46bd mov sp, r7
+ 8001902: bd80 pop {r7, pc}
+ 8001904: 58004000 .word 0x58004000
+
+08001908 <HAL_InitTick>:
+ * implementation in user file.
+ * @param TickPriority Tick interrupt priority.
+ * @retval HAL status
+ */
+__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
+{
+ 8001908: b580 push {r7, lr}
+ 800190a: b084 sub sp, #16
+ 800190c: af00 add r7, sp, #0
+ 800190e: 6078 str r0, [r7, #4]
+ HAL_StatusTypeDef status = HAL_OK;
+ 8001910: 2300 movs r3, #0
+ 8001912: 73fb strb r3, [r7, #15]
+
+ if ((uint32_t)uwTickFreq != 0U)
+ 8001914: 4b17 ldr r3, [pc, #92] @ (8001974 <HAL_InitTick+0x6c>)
+ 8001916: 781b ldrb r3, [r3, #0]
+ 8001918: 2b00 cmp r3, #0
+ 800191a: d024 beq.n 8001966 <HAL_InitTick+0x5e>
+ {
+ /*Configure the SysTick to have interrupt in 1ms time basis*/
+ if (HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / (1000U / (uint32_t)uwTickFreq)) == 0U)
+ 800191c: f001 fe2c bl 8003578 <HAL_RCC_GetHCLKFreq>
+ 8001920: 4602 mov r2, r0
+ 8001922: 4b14 ldr r3, [pc, #80] @ (8001974 <HAL_InitTick+0x6c>)
+ 8001924: 781b ldrb r3, [r3, #0]
+ 8001926: 4619 mov r1, r3
+ 8001928: f44f 737a mov.w r3, #1000 @ 0x3e8
+ 800192c: fbb3 f3f1 udiv r3, r3, r1
+ 8001930: fbb2 f3f3 udiv r3, r2, r3
+ 8001934: 4618 mov r0, r3
+ 8001936: f000 f9ca bl 8001cce <HAL_SYSTICK_Config>
+ 800193a: 4603 mov r3, r0
+ 800193c: 2b00 cmp r3, #0
+ 800193e: d10f bne.n 8001960 <HAL_InitTick+0x58>
+ {
+ /* Configure the SysTick IRQ priority */
+ if (TickPriority < (1UL << __NVIC_PRIO_BITS))
+ 8001940: 687b ldr r3, [r7, #4]
+ 8001942: 2b0f cmp r3, #15
+ 8001944: d809 bhi.n 800195a <HAL_InitTick+0x52>
+ {
+ HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
+ 8001946: 2200 movs r2, #0
+ 8001948: 6879 ldr r1, [r7, #4]
+ 800194a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
+ 800194e: f000 f988 bl 8001c62 <HAL_NVIC_SetPriority>
+ uwTickPrio = TickPriority;
+ 8001952: 4a09 ldr r2, [pc, #36] @ (8001978 <HAL_InitTick+0x70>)
+ 8001954: 687b ldr r3, [r7, #4]
+ 8001956: 6013 str r3, [r2, #0]
+ 8001958: e007 b.n 800196a <HAL_InitTick+0x62>
+ }
+ else
+ {
+ status = HAL_ERROR;
+ 800195a: 2301 movs r3, #1
+ 800195c: 73fb strb r3, [r7, #15]
+ 800195e: e004 b.n 800196a <HAL_InitTick+0x62>
+ }
+ }
+ else
+ {
+ status = HAL_ERROR;
+ 8001960: 2301 movs r3, #1
+ 8001962: 73fb strb r3, [r7, #15]
+ 8001964: e001 b.n 800196a <HAL_InitTick+0x62>
+ }
+ }
+ else
+ {
+ status = HAL_ERROR;
+ 8001966: 2301 movs r3, #1
+ 8001968: 73fb strb r3, [r7, #15]
+ }
+
+ /* Return function status */
+ return status;
+ 800196a: 7bfb ldrb r3, [r7, #15]
+}
+ 800196c: 4618 mov r0, r3
+ 800196e: 3710 adds r7, #16
+ 8001970: 46bd mov sp, r7
+ 8001972: bd80 pop {r7, pc}
+ 8001974: 20000010 .word 0x20000010
+ 8001978: 2000000c .word 0x2000000c
+
+0800197c <HAL_IncTick>:
+ * @note This function is declared as __weak to be overwritten in case of other
+ * implementations in user file.
+ * @retval None
+ */
+__weak void HAL_IncTick(void)
+{
+ 800197c: b480 push {r7}
+ 800197e: af00 add r7, sp, #0
+ uwTick += (uint32_t)uwTickFreq;
+ 8001980: 4b06 ldr r3, [pc, #24] @ (800199c <HAL_IncTick+0x20>)
+ 8001982: 781b ldrb r3, [r3, #0]
+ 8001984: 461a mov r2, r3
+ 8001986: 4b06 ldr r3, [pc, #24] @ (80019a0 <HAL_IncTick+0x24>)
+ 8001988: 681b ldr r3, [r3, #0]
+ 800198a: 4413 add r3, r2
+ 800198c: 4a04 ldr r2, [pc, #16] @ (80019a0 <HAL_IncTick+0x24>)
+ 800198e: 6013 str r3, [r2, #0]
+}
+ 8001990: bf00 nop
+ 8001992: 46bd mov sp, r7
+ 8001994: f85d 7b04 ldr.w r7, [sp], #4
+ 8001998: 4770 bx lr
+ 800199a: bf00 nop
+ 800199c: 20000010 .word 0x20000010
+ 80019a0: 200001f0 .word 0x200001f0
+
+080019a4 <HAL_GetTick>:
+ * @note This function is declared as __weak to be overwritten in case of other
+ * implementations in user file.
+ * @retval tick value
+ */
+__weak uint32_t HAL_GetTick(void)
+{
+ 80019a4: b480 push {r7}
+ 80019a6: af00 add r7, sp, #0
+ return uwTick;
+ 80019a8: 4b03 ldr r3, [pc, #12] @ (80019b8 <HAL_GetTick+0x14>)
+ 80019aa: 681b ldr r3, [r3, #0]
+}
+ 80019ac: 4618 mov r0, r3
+ 80019ae: 46bd mov sp, r7
+ 80019b0: f85d 7b04 ldr.w r7, [sp], #4
+ 80019b4: 4770 bx lr
+ 80019b6: bf00 nop
+ 80019b8: 200001f0 .word 0x200001f0
+
+080019bc <HAL_GetTickPrio>:
+/**
+ * @brief This function returns a tick priority.
+ * @retval tick priority
+ */
+uint32_t HAL_GetTickPrio(void)
+{
+ 80019bc: b480 push {r7}
+ 80019be: af00 add r7, sp, #0
+ return uwTickPrio;
+ 80019c0: 4b03 ldr r3, [pc, #12] @ (80019d0 <HAL_GetTickPrio+0x14>)
+ 80019c2: 681b ldr r3, [r3, #0]
+}
+ 80019c4: 4618 mov r0, r3
+ 80019c6: 46bd mov sp, r7
+ 80019c8: f85d 7b04 ldr.w r7, [sp], #4
+ 80019cc: 4770 bx lr
+ 80019ce: bf00 nop
+ 80019d0: 2000000c .word 0x2000000c
+
+080019d4 <HAL_GetTickFreq>:
+ * @brief Return tick frequency.
+ * @retval Tick frequency.
+ * Value of @ref HAL_TickFreqTypeDef.
+ */
+HAL_TickFreqTypeDef HAL_GetTickFreq(void)
+{
+ 80019d4: b480 push {r7}
+ 80019d6: af00 add r7, sp, #0
+ return uwTickFreq;
+ 80019d8: 4b03 ldr r3, [pc, #12] @ (80019e8 <HAL_GetTickFreq+0x14>)
+ 80019da: 781b ldrb r3, [r3, #0]
+}
+ 80019dc: 4618 mov r0, r3
+ 80019de: 46bd mov sp, r7
+ 80019e0: f85d 7b04 ldr.w r7, [sp], #4
+ 80019e4: 4770 bx lr
+ 80019e6: bf00 nop
+ 80019e8: 20000010 .word 0x20000010
+
+080019ec <__NVIC_SetPriorityGrouping>:
+ In case of a conflict between priority grouping and available
+ priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
+ \param [in] PriorityGroup Priority grouping field.
+ */
+__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
+{
+ 80019ec: b480 push {r7}
+ 80019ee: b085 sub sp, #20
+ 80019f0: af00 add r7, sp, #0
+ 80019f2: 6078 str r0, [r7, #4]
+ uint32_t reg_value;
+ uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
+ 80019f4: 687b ldr r3, [r7, #4]
+ 80019f6: f003 0307 and.w r3, r3, #7
+ 80019fa: 60fb str r3, [r7, #12]
+
+ reg_value = SCB->AIRCR; /* read old register configuration */
+ 80019fc: 4b0c ldr r3, [pc, #48] @ (8001a30 <__NVIC_SetPriorityGrouping+0x44>)
+ 80019fe: 68db ldr r3, [r3, #12]
+ 8001a00: 60bb str r3, [r7, #8]
+ reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
+ 8001a02: 68ba ldr r2, [r7, #8]
+ 8001a04: f64f 03ff movw r3, #63743 @ 0xf8ff
+ 8001a08: 4013 ands r3, r2
+ 8001a0a: 60bb str r3, [r7, #8]
+ reg_value = (reg_value |
+ ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
+ (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
+ 8001a0c: 68fb ldr r3, [r7, #12]
+ 8001a0e: 021a lsls r2, r3, #8
+ ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
+ 8001a10: 68bb ldr r3, [r7, #8]
+ 8001a12: 4313 orrs r3, r2
+ reg_value = (reg_value |
+ 8001a14: f043 63bf orr.w r3, r3, #100139008 @ 0x5f80000
+ 8001a18: f443 3300 orr.w r3, r3, #131072 @ 0x20000
+ 8001a1c: 60bb str r3, [r7, #8]
+ SCB->AIRCR = reg_value;
+ 8001a1e: 4a04 ldr r2, [pc, #16] @ (8001a30 <__NVIC_SetPriorityGrouping+0x44>)
+ 8001a20: 68bb ldr r3, [r7, #8]
+ 8001a22: 60d3 str r3, [r2, #12]
+}
+ 8001a24: bf00 nop
+ 8001a26: 3714 adds r7, #20
+ 8001a28: 46bd mov sp, r7
+ 8001a2a: f85d 7b04 ldr.w r7, [sp], #4
+ 8001a2e: 4770 bx lr
+ 8001a30: e000ed00 .word 0xe000ed00
+
+08001a34 <__NVIC_GetPriorityGrouping>:
+ \brief Get Priority Grouping
+ \details Reads the priority grouping field from the NVIC Interrupt Controller.
+ \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).
+ */
+__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)
+{
+ 8001a34: b480 push {r7}
+ 8001a36: af00 add r7, sp, #0
+ return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
+ 8001a38: 4b04 ldr r3, [pc, #16] @ (8001a4c <__NVIC_GetPriorityGrouping+0x18>)
+ 8001a3a: 68db ldr r3, [r3, #12]
+ 8001a3c: 0a1b lsrs r3, r3, #8
+ 8001a3e: f003 0307 and.w r3, r3, #7
+}
+ 8001a42: 4618 mov r0, r3
+ 8001a44: 46bd mov sp, r7
+ 8001a46: f85d 7b04 ldr.w r7, [sp], #4
+ 8001a4a: 4770 bx lr
+ 8001a4c: e000ed00 .word 0xe000ed00
+
+08001a50 <__NVIC_EnableIRQ>:
+ \details Enables a device specific interrupt in the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
+ */
+__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
+{
+ 8001a50: b480 push {r7}
+ 8001a52: b083 sub sp, #12
+ 8001a54: af00 add r7, sp, #0
+ 8001a56: 4603 mov r3, r0
+ 8001a58: 71fb strb r3, [r7, #7]
+ if ((int32_t)(IRQn) >= 0)
+ 8001a5a: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001a5e: 2b00 cmp r3, #0
+ 8001a60: db0b blt.n 8001a7a <__NVIC_EnableIRQ+0x2a>
+ {
+ __COMPILER_BARRIER();
+ NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ 8001a62: 79fb ldrb r3, [r7, #7]
+ 8001a64: f003 021f and.w r2, r3, #31
+ 8001a68: 4907 ldr r1, [pc, #28] @ (8001a88 <__NVIC_EnableIRQ+0x38>)
+ 8001a6a: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001a6e: 095b lsrs r3, r3, #5
+ 8001a70: 2001 movs r0, #1
+ 8001a72: fa00 f202 lsl.w r2, r0, r2
+ 8001a76: f841 2023 str.w r2, [r1, r3, lsl #2]
+ __COMPILER_BARRIER();
+ }
+}
+ 8001a7a: bf00 nop
+ 8001a7c: 370c adds r7, #12
+ 8001a7e: 46bd mov sp, r7
+ 8001a80: f85d 7b04 ldr.w r7, [sp], #4
+ 8001a84: 4770 bx lr
+ 8001a86: bf00 nop
+ 8001a88: e000e100 .word 0xe000e100
+
+08001a8c <__NVIC_DisableIRQ>:
+ \details Disables a device specific interrupt in the NVIC interrupt controller.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
+ */
+__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
+{
+ 8001a8c: b480 push {r7}
+ 8001a8e: b083 sub sp, #12
+ 8001a90: af00 add r7, sp, #0
+ 8001a92: 4603 mov r3, r0
+ 8001a94: 71fb strb r3, [r7, #7]
+ if ((int32_t)(IRQn) >= 0)
+ 8001a96: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001a9a: 2b00 cmp r3, #0
+ 8001a9c: db12 blt.n 8001ac4 <__NVIC_DisableIRQ+0x38>
+ {
+ NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ 8001a9e: 79fb ldrb r3, [r7, #7]
+ 8001aa0: f003 021f and.w r2, r3, #31
+ 8001aa4: 490a ldr r1, [pc, #40] @ (8001ad0 <__NVIC_DisableIRQ+0x44>)
+ 8001aa6: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001aaa: 095b lsrs r3, r3, #5
+ 8001aac: 2001 movs r0, #1
+ 8001aae: fa00 f202 lsl.w r2, r0, r2
+ 8001ab2: 3320 adds r3, #32
+ 8001ab4: f841 2023 str.w r2, [r1, r3, lsl #2]
+ __ASM volatile ("dsb 0xF":::"memory");
+ 8001ab8: f3bf 8f4f dsb sy
+}
+ 8001abc: bf00 nop
+ __ASM volatile ("isb 0xF":::"memory");
+ 8001abe: f3bf 8f6f isb sy
+}
+ 8001ac2: bf00 nop
+ __DSB();
+ __ISB();
+ }
+}
+ 8001ac4: bf00 nop
+ 8001ac6: 370c adds r7, #12
+ 8001ac8: 46bd mov sp, r7
+ 8001aca: f85d 7b04 ldr.w r7, [sp], #4
+ 8001ace: 4770 bx lr
+ 8001ad0: e000e100 .word 0xe000e100
+
+08001ad4 <__NVIC_SetPendingIRQ>:
+ \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
+ */
+__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
+{
+ 8001ad4: b480 push {r7}
+ 8001ad6: b083 sub sp, #12
+ 8001ad8: af00 add r7, sp, #0
+ 8001ada: 4603 mov r3, r0
+ 8001adc: 71fb strb r3, [r7, #7]
+ if ((int32_t)(IRQn) >= 0)
+ 8001ade: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001ae2: 2b00 cmp r3, #0
+ 8001ae4: db0c blt.n 8001b00 <__NVIC_SetPendingIRQ+0x2c>
+ {
+ NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ 8001ae6: 79fb ldrb r3, [r7, #7]
+ 8001ae8: f003 021f and.w r2, r3, #31
+ 8001aec: 4907 ldr r1, [pc, #28] @ (8001b0c <__NVIC_SetPendingIRQ+0x38>)
+ 8001aee: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001af2: 095b lsrs r3, r3, #5
+ 8001af4: 2001 movs r0, #1
+ 8001af6: fa00 f202 lsl.w r2, r0, r2
+ 8001afa: 3340 adds r3, #64 @ 0x40
+ 8001afc: f841 2023 str.w r2, [r1, r3, lsl #2]
+ }
+}
+ 8001b00: bf00 nop
+ 8001b02: 370c adds r7, #12
+ 8001b04: 46bd mov sp, r7
+ 8001b06: f85d 7b04 ldr.w r7, [sp], #4
+ 8001b0a: 4770 bx lr
+ 8001b0c: e000e100 .word 0xe000e100
+
+08001b10 <__NVIC_ClearPendingIRQ>:
+ \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
+ \param [in] IRQn Device specific interrupt number.
+ \note IRQn must not be negative.
+ */
+__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
+{
+ 8001b10: b480 push {r7}
+ 8001b12: b083 sub sp, #12
+ 8001b14: af00 add r7, sp, #0
+ 8001b16: 4603 mov r3, r0
+ 8001b18: 71fb strb r3, [r7, #7]
+ if ((int32_t)(IRQn) >= 0)
+ 8001b1a: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001b1e: 2b00 cmp r3, #0
+ 8001b20: db0c blt.n 8001b3c <__NVIC_ClearPendingIRQ+0x2c>
+ {
+ NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
+ 8001b22: 79fb ldrb r3, [r7, #7]
+ 8001b24: f003 021f and.w r2, r3, #31
+ 8001b28: 4907 ldr r1, [pc, #28] @ (8001b48 <__NVIC_ClearPendingIRQ+0x38>)
+ 8001b2a: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001b2e: 095b lsrs r3, r3, #5
+ 8001b30: 2001 movs r0, #1
+ 8001b32: fa00 f202 lsl.w r2, r0, r2
+ 8001b36: 3360 adds r3, #96 @ 0x60
+ 8001b38: f841 2023 str.w r2, [r1, r3, lsl #2]
+ }
+}
+ 8001b3c: bf00 nop
+ 8001b3e: 370c adds r7, #12
+ 8001b40: 46bd mov sp, r7
+ 8001b42: f85d 7b04 ldr.w r7, [sp], #4
+ 8001b46: 4770 bx lr
+ 8001b48: e000e100 .word 0xe000e100
+
+08001b4c <__NVIC_SetPriority>:
+ \param [in] IRQn Interrupt number.
+ \param [in] priority Priority to set.
+ \note The priority cannot be set for every processor exception.
+ */
+__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
+{
+ 8001b4c: b480 push {r7}
+ 8001b4e: b083 sub sp, #12
+ 8001b50: af00 add r7, sp, #0
+ 8001b52: 4603 mov r3, r0
+ 8001b54: 6039 str r1, [r7, #0]
+ 8001b56: 71fb strb r3, [r7, #7]
+ if ((int32_t)(IRQn) >= 0)
+ 8001b58: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001b5c: 2b00 cmp r3, #0
+ 8001b5e: db0a blt.n 8001b76 <__NVIC_SetPriority+0x2a>
+ {
+ NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ 8001b60: 683b ldr r3, [r7, #0]
+ 8001b62: b2da uxtb r2, r3
+ 8001b64: 490c ldr r1, [pc, #48] @ (8001b98 <__NVIC_SetPriority+0x4c>)
+ 8001b66: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001b6a: 0112 lsls r2, r2, #4
+ 8001b6c: b2d2 uxtb r2, r2
+ 8001b6e: 440b add r3, r1
+ 8001b70: f883 2300 strb.w r2, [r3, #768] @ 0x300
+ }
+ else
+ {
+ SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ }
+}
+ 8001b74: e00a b.n 8001b8c <__NVIC_SetPriority+0x40>
+ SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
+ 8001b76: 683b ldr r3, [r7, #0]
+ 8001b78: b2da uxtb r2, r3
+ 8001b7a: 4908 ldr r1, [pc, #32] @ (8001b9c <__NVIC_SetPriority+0x50>)
+ 8001b7c: 79fb ldrb r3, [r7, #7]
+ 8001b7e: f003 030f and.w r3, r3, #15
+ 8001b82: 3b04 subs r3, #4
+ 8001b84: 0112 lsls r2, r2, #4
+ 8001b86: b2d2 uxtb r2, r2
+ 8001b88: 440b add r3, r1
+ 8001b8a: 761a strb r2, [r3, #24]
+}
+ 8001b8c: bf00 nop
+ 8001b8e: 370c adds r7, #12
+ 8001b90: 46bd mov sp, r7
+ 8001b92: f85d 7b04 ldr.w r7, [sp], #4
+ 8001b96: 4770 bx lr
+ 8001b98: e000e100 .word 0xe000e100
+ 8001b9c: e000ed00 .word 0xe000ed00
+
+08001ba0 <NVIC_EncodePriority>:
+ \param [in] PreemptPriority Preemptive priority value (starting from 0).
+ \param [in] SubPriority Subpriority value (starting from 0).
+ \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority().
+ */
+__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
+{
+ 8001ba0: b480 push {r7}
+ 8001ba2: b089 sub sp, #36 @ 0x24
+ 8001ba4: af00 add r7, sp, #0
+ 8001ba6: 60f8 str r0, [r7, #12]
+ 8001ba8: 60b9 str r1, [r7, #8]
+ 8001baa: 607a str r2, [r7, #4]
+ uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
+ 8001bac: 68fb ldr r3, [r7, #12]
+ 8001bae: f003 0307 and.w r3, r3, #7
+ 8001bb2: 61fb str r3, [r7, #28]
+ uint32_t PreemptPriorityBits;
+ uint32_t SubPriorityBits;
+
+ PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
+ 8001bb4: 69fb ldr r3, [r7, #28]
+ 8001bb6: f1c3 0307 rsb r3, r3, #7
+ 8001bba: 2b04 cmp r3, #4
+ 8001bbc: bf28 it cs
+ 8001bbe: 2304 movcs r3, #4
+ 8001bc0: 61bb str r3, [r7, #24]
+ SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
+ 8001bc2: 69fb ldr r3, [r7, #28]
+ 8001bc4: 3304 adds r3, #4
+ 8001bc6: 2b06 cmp r3, #6
+ 8001bc8: d902 bls.n 8001bd0 <NVIC_EncodePriority+0x30>
+ 8001bca: 69fb ldr r3, [r7, #28]
+ 8001bcc: 3b03 subs r3, #3
+ 8001bce: e000 b.n 8001bd2 <NVIC_EncodePriority+0x32>
+ 8001bd0: 2300 movs r3, #0
+ 8001bd2: 617b str r3, [r7, #20]
+
+ return (
+ ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
+ 8001bd4: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
+ 8001bd8: 69bb ldr r3, [r7, #24]
+ 8001bda: fa02 f303 lsl.w r3, r2, r3
+ 8001bde: 43da mvns r2, r3
+ 8001be0: 68bb ldr r3, [r7, #8]
+ 8001be2: 401a ands r2, r3
+ 8001be4: 697b ldr r3, [r7, #20]
+ 8001be6: 409a lsls r2, r3
+ ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
+ 8001be8: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff
+ 8001bec: 697b ldr r3, [r7, #20]
+ 8001bee: fa01 f303 lsl.w r3, r1, r3
+ 8001bf2: 43d9 mvns r1, r3
+ 8001bf4: 687b ldr r3, [r7, #4]
+ 8001bf6: 400b ands r3, r1
+ ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
+ 8001bf8: 4313 orrs r3, r2
+ );
+}
+ 8001bfa: 4618 mov r0, r3
+ 8001bfc: 3724 adds r7, #36 @ 0x24
+ 8001bfe: 46bd mov sp, r7
+ 8001c00: f85d 7b04 ldr.w r7, [sp], #4
+ 8001c04: 4770 bx lr
+ ...
+
+08001c08 <SysTick_Config>:
+ \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
+ function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
+ must contain a vendor-specific implementation of this function.
+ */
+__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
+{
+ 8001c08: b580 push {r7, lr}
+ 8001c0a: b082 sub sp, #8
+ 8001c0c: af00 add r7, sp, #0
+ 8001c0e: 6078 str r0, [r7, #4]
+ if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
+ 8001c10: 687b ldr r3, [r7, #4]
+ 8001c12: 3b01 subs r3, #1
+ 8001c14: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000
+ 8001c18: d301 bcc.n 8001c1e <SysTick_Config+0x16>
+ {
+ return (1UL); /* Reload value impossible */
+ 8001c1a: 2301 movs r3, #1
+ 8001c1c: e00f b.n 8001c3e <SysTick_Config+0x36>
+ }
+
+ SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
+ 8001c1e: 4a0a ldr r2, [pc, #40] @ (8001c48 <SysTick_Config+0x40>)
+ 8001c20: 687b ldr r3, [r7, #4]
+ 8001c22: 3b01 subs r3, #1
+ 8001c24: 6053 str r3, [r2, #4]
+ NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
+ 8001c26: 210f movs r1, #15
+ 8001c28: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff
+ 8001c2c: f7ff ff8e bl 8001b4c <__NVIC_SetPriority>
+ SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
+ 8001c30: 4b05 ldr r3, [pc, #20] @ (8001c48 <SysTick_Config+0x40>)
+ 8001c32: 2200 movs r2, #0
+ 8001c34: 609a str r2, [r3, #8]
+ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
+ 8001c36: 4b04 ldr r3, [pc, #16] @ (8001c48 <SysTick_Config+0x40>)
+ 8001c38: 2207 movs r2, #7
+ 8001c3a: 601a str r2, [r3, #0]
+ SysTick_CTRL_TICKINT_Msk |
+ SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
+ return (0UL); /* Function successful */
+ 8001c3c: 2300 movs r3, #0
+}
+ 8001c3e: 4618 mov r0, r3
+ 8001c40: 3708 adds r7, #8
+ 8001c42: 46bd mov sp, r7
+ 8001c44: bd80 pop {r7, pc}
+ 8001c46: bf00 nop
+ 8001c48: e000e010 .word 0xe000e010
+
+08001c4c <HAL_NVIC_SetPriorityGrouping>:
+ * @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible.
+ * The pending IRQ priority will be managed only by the subpriority.
+ * @retval None
+ */
+void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
+{
+ 8001c4c: b580 push {r7, lr}
+ 8001c4e: b082 sub sp, #8
+ 8001c50: af00 add r7, sp, #0
+ 8001c52: 6078 str r0, [r7, #4]
+ /* Check the parameters */
+ assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
+
+ /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
+ NVIC_SetPriorityGrouping(PriorityGroup);
+ 8001c54: 6878 ldr r0, [r7, #4]
+ 8001c56: f7ff fec9 bl 80019ec <__NVIC_SetPriorityGrouping>
+}
+ 8001c5a: bf00 nop
+ 8001c5c: 3708 adds r7, #8
+ 8001c5e: 46bd mov sp, r7
+ 8001c60: bd80 pop {r7, pc}
+
+08001c62 <HAL_NVIC_SetPriority>:
+ * This parameter can be a value between 0 and 15
+ * A lower priority value indicates a higher priority.
+ * @retval None
+ */
+void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
+{
+ 8001c62: b580 push {r7, lr}
+ 8001c64: b086 sub sp, #24
+ 8001c66: af00 add r7, sp, #0
+ 8001c68: 4603 mov r3, r0
+ 8001c6a: 60b9 str r1, [r7, #8]
+ 8001c6c: 607a str r2, [r7, #4]
+ 8001c6e: 73fb strb r3, [r7, #15]
+
+ /* Check the parameters */
+ assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
+ assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
+
+ prioritygroup = NVIC_GetPriorityGrouping();
+ 8001c70: f7ff fee0 bl 8001a34 <__NVIC_GetPriorityGrouping>
+ 8001c74: 6178 str r0, [r7, #20]
+
+ NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
+ 8001c76: 687a ldr r2, [r7, #4]
+ 8001c78: 68b9 ldr r1, [r7, #8]
+ 8001c7a: 6978 ldr r0, [r7, #20]
+ 8001c7c: f7ff ff90 bl 8001ba0 <NVIC_EncodePriority>
+ 8001c80: 4602 mov r2, r0
+ 8001c82: f997 300f ldrsb.w r3, [r7, #15]
+ 8001c86: 4611 mov r1, r2
+ 8001c88: 4618 mov r0, r3
+ 8001c8a: f7ff ff5f bl 8001b4c <__NVIC_SetPriority>
+}
+ 8001c8e: bf00 nop
+ 8001c90: 3718 adds r7, #24
+ 8001c92: 46bd mov sp, r7
+ 8001c94: bd80 pop {r7, pc}
+
+08001c96 <HAL_NVIC_EnableIRQ>:
+ * This parameter can be an enumerator of IRQn_Type enumeration
+ * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32wbxxxx.h))
+ * @retval None
+ */
+void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
+{
+ 8001c96: b580 push {r7, lr}
+ 8001c98: b082 sub sp, #8
+ 8001c9a: af00 add r7, sp, #0
+ 8001c9c: 4603 mov r3, r0
+ 8001c9e: 71fb strb r3, [r7, #7]
+ /* Check the parameters */
+ assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
+
+ /* Enable interrupt */
+ NVIC_EnableIRQ(IRQn);
+ 8001ca0: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001ca4: 4618 mov r0, r3
+ 8001ca6: f7ff fed3 bl 8001a50 <__NVIC_EnableIRQ>
+}
+ 8001caa: bf00 nop
+ 8001cac: 3708 adds r7, #8
+ 8001cae: 46bd mov sp, r7
+ 8001cb0: bd80 pop {r7, pc}
+
+08001cb2 <HAL_NVIC_DisableIRQ>:
+ * This parameter can be an enumerator of IRQn_Type enumeration
+ * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32wbxxxx.h))
+ * @retval None
+ */
+void HAL_NVIC_DisableIRQ(IRQn_Type IRQn)
+{
+ 8001cb2: b580 push {r7, lr}
+ 8001cb4: b082 sub sp, #8
+ 8001cb6: af00 add r7, sp, #0
+ 8001cb8: 4603 mov r3, r0
+ 8001cba: 71fb strb r3, [r7, #7]
+ /* Check the parameters */
+ assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
+
+ /* Disable interrupt */
+ NVIC_DisableIRQ(IRQn);
+ 8001cbc: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001cc0: 4618 mov r0, r3
+ 8001cc2: f7ff fee3 bl 8001a8c <__NVIC_DisableIRQ>
+}
+ 8001cc6: bf00 nop
+ 8001cc8: 3708 adds r7, #8
+ 8001cca: 46bd mov sp, r7
+ 8001ccc: bd80 pop {r7, pc}
+
+08001cce <HAL_SYSTICK_Config>:
+ * @param TicksNumb Specifies the ticks Number of ticks between two interrupts.
+ * @retval status: - 0 Function succeeded.
+ * - 1 Function failed.
+ */
+uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
+{
+ 8001cce: b580 push {r7, lr}
+ 8001cd0: b082 sub sp, #8
+ 8001cd2: af00 add r7, sp, #0
+ 8001cd4: 6078 str r0, [r7, #4]
+ return SysTick_Config(TicksNumb);
+ 8001cd6: 6878 ldr r0, [r7, #4]
+ 8001cd8: f7ff ff96 bl 8001c08 <SysTick_Config>
+ 8001cdc: 4603 mov r3, r0
+}
+ 8001cde: 4618 mov r0, r3
+ 8001ce0: 3708 adds r7, #8
+ 8001ce2: 46bd mov sp, r7
+ 8001ce4: bd80 pop {r7, pc}
+
+08001ce6 <HAL_NVIC_SetPendingIRQ>:
+ * This parameter can be an enumerator of IRQn_Type enumeration
+ * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32wbxxxx.h))
+ * @retval None
+ */
+void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
+{
+ 8001ce6: b580 push {r7, lr}
+ 8001ce8: b082 sub sp, #8
+ 8001cea: af00 add r7, sp, #0
+ 8001cec: 4603 mov r3, r0
+ 8001cee: 71fb strb r3, [r7, #7]
+ /* Check the parameters */
+ assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
+
+ /* Set interrupt pending */
+ NVIC_SetPendingIRQ(IRQn);
+ 8001cf0: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001cf4: 4618 mov r0, r3
+ 8001cf6: f7ff feed bl 8001ad4 <__NVIC_SetPendingIRQ>
+}
+ 8001cfa: bf00 nop
+ 8001cfc: 3708 adds r7, #8
+ 8001cfe: 46bd mov sp, r7
+ 8001d00: bd80 pop {r7, pc}
+
+08001d02 <HAL_NVIC_ClearPendingIRQ>:
+ * This parameter can be an enumerator of IRQn_Type enumeration
+ * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32wbxxxx.h))
+ * @retval None
+ */
+void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)
+{
+ 8001d02: b580 push {r7, lr}
+ 8001d04: b082 sub sp, #8
+ 8001d06: af00 add r7, sp, #0
+ 8001d08: 4603 mov r3, r0
+ 8001d0a: 71fb strb r3, [r7, #7]
+ /* Check the parameters */
+ assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
+
+ /* Clear pending interrupt */
+ NVIC_ClearPendingIRQ(IRQn);
+ 8001d0c: f997 3007 ldrsb.w r3, [r7, #7]
+ 8001d10: 4618 mov r0, r3
+ 8001d12: f7ff fefd bl 8001b10 <__NVIC_ClearPendingIRQ>
+}
+ 8001d16: bf00 nop
+ 8001d18: 3708 adds r7, #8
+ 8001d1a: 46bd mov sp, r7
+ 8001d1c: bd80 pop {r7, pc}
+ ...
+
+08001d20 <HAL_GPIO_Init>:
+ * @param GPIO_Init pointer to a GPIO_InitTypeDef structure that contains
+ * the configuration information for the specified GPIO peripheral.
+ * @retval None
+ */
+void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
+{
+ 8001d20: b480 push {r7}
+ 8001d22: b087 sub sp, #28
+ 8001d24: af00 add r7, sp, #0
+ 8001d26: 6078 str r0, [r7, #4]
+ 8001d28: 6039 str r1, [r7, #0]
+ uint32_t position = 0x00u;
+ 8001d2a: 2300 movs r3, #0
+ 8001d2c: 617b str r3, [r7, #20]
+ assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
+ assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
+ assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
+
+ /* Configure the port pins */
+ while (((GPIO_Init->Pin) >> position) != 0x00u)
+ 8001d2e: e14c b.n 8001fca <HAL_GPIO_Init+0x2aa>
+ {
+ /* Get current io position */
+ iocurrent = (GPIO_Init->Pin) & (1uL << position);
+ 8001d30: 683b ldr r3, [r7, #0]
+ 8001d32: 681a ldr r2, [r3, #0]
+ 8001d34: 2101 movs r1, #1
+ 8001d36: 697b ldr r3, [r7, #20]
+ 8001d38: fa01 f303 lsl.w r3, r1, r3
+ 8001d3c: 4013 ands r3, r2
+ 8001d3e: 60fb str r3, [r7, #12]
+
+ if (iocurrent != 0x00u)
+ 8001d40: 68fb ldr r3, [r7, #12]
+ 8001d42: 2b00 cmp r3, #0
+ 8001d44: f000 813e beq.w 8001fc4 <HAL_GPIO_Init+0x2a4>
+ {
+ /*--------------------- GPIO Mode Configuration ------------------------*/
+ /* In case of Output or Alternate function mode selection */
+ if (((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF))
+ 8001d48: 683b ldr r3, [r7, #0]
+ 8001d4a: 685b ldr r3, [r3, #4]
+ 8001d4c: f003 0303 and.w r3, r3, #3
+ 8001d50: 2b01 cmp r3, #1
+ 8001d52: d005 beq.n 8001d60 <HAL_GPIO_Init+0x40>
+ 8001d54: 683b ldr r3, [r7, #0]
+ 8001d56: 685b ldr r3, [r3, #4]
+ 8001d58: f003 0303 and.w r3, r3, #3
+ 8001d5c: 2b02 cmp r3, #2
+ 8001d5e: d130 bne.n 8001dc2 <HAL_GPIO_Init+0xa2>
+ {
+ /* Check the Speed parameter */
+ assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
+ /* Configure the IO Speed */
+ temp = GPIOx->OSPEEDR;
+ 8001d60: 687b ldr r3, [r7, #4]
+ 8001d62: 689b ldr r3, [r3, #8]
+ 8001d64: 613b str r3, [r7, #16]
+ temp &= ~(GPIO_OSPEEDR_OSPEED0 << (position * 2u));
+ 8001d66: 697b ldr r3, [r7, #20]
+ 8001d68: 005b lsls r3, r3, #1
+ 8001d6a: 2203 movs r2, #3
+ 8001d6c: fa02 f303 lsl.w r3, r2, r3
+ 8001d70: 43db mvns r3, r3
+ 8001d72: 693a ldr r2, [r7, #16]
+ 8001d74: 4013 ands r3, r2
+ 8001d76: 613b str r3, [r7, #16]
+ temp |= (GPIO_Init->Speed << (position * 2u));
+ 8001d78: 683b ldr r3, [r7, #0]
+ 8001d7a: 68da ldr r2, [r3, #12]
+ 8001d7c: 697b ldr r3, [r7, #20]
+ 8001d7e: 005b lsls r3, r3, #1
+ 8001d80: fa02 f303 lsl.w r3, r2, r3
+ 8001d84: 693a ldr r2, [r7, #16]
+ 8001d86: 4313 orrs r3, r2
+ 8001d88: 613b str r3, [r7, #16]
+ GPIOx->OSPEEDR = temp;
+ 8001d8a: 687b ldr r3, [r7, #4]
+ 8001d8c: 693a ldr r2, [r7, #16]
+ 8001d8e: 609a str r2, [r3, #8]
+
+ /* Configure the IO Output Type */
+ temp = GPIOx->OTYPER;
+ 8001d90: 687b ldr r3, [r7, #4]
+ 8001d92: 685b ldr r3, [r3, #4]
+ 8001d94: 613b str r3, [r7, #16]
+ temp &= ~(GPIO_OTYPER_OT0 << position) ;
+ 8001d96: 2201 movs r2, #1
+ 8001d98: 697b ldr r3, [r7, #20]
+ 8001d9a: fa02 f303 lsl.w r3, r2, r3
+ 8001d9e: 43db mvns r3, r3
+ 8001da0: 693a ldr r2, [r7, #16]
+ 8001da2: 4013 ands r3, r2
+ 8001da4: 613b str r3, [r7, #16]
+ temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
+ 8001da6: 683b ldr r3, [r7, #0]
+ 8001da8: 685b ldr r3, [r3, #4]
+ 8001daa: 091b lsrs r3, r3, #4
+ 8001dac: f003 0201 and.w r2, r3, #1
+ 8001db0: 697b ldr r3, [r7, #20]
+ 8001db2: fa02 f303 lsl.w r3, r2, r3
+ 8001db6: 693a ldr r2, [r7, #16]
+ 8001db8: 4313 orrs r3, r2
+ 8001dba: 613b str r3, [r7, #16]
+ GPIOx->OTYPER = temp;
+ 8001dbc: 687b ldr r3, [r7, #4]
+ 8001dbe: 693a ldr r2, [r7, #16]
+ 8001dc0: 605a str r2, [r3, #4]
+ }
+
+ /* Activate the Pull-up or Pull down resistor for the current IO */
+ if ((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
+ 8001dc2: 683b ldr r3, [r7, #0]
+ 8001dc4: 685b ldr r3, [r3, #4]
+ 8001dc6: f003 0303 and.w r3, r3, #3
+ 8001dca: 2b03 cmp r3, #3
+ 8001dcc: d017 beq.n 8001dfe <HAL_GPIO_Init+0xde>
+ {
+ temp = GPIOx->PUPDR;
+ 8001dce: 687b ldr r3, [r7, #4]
+ 8001dd0: 68db ldr r3, [r3, #12]
+ 8001dd2: 613b str r3, [r7, #16]
+ temp &= ~(GPIO_PUPDR_PUPD0 << (position * 2U));
+ 8001dd4: 697b ldr r3, [r7, #20]
+ 8001dd6: 005b lsls r3, r3, #1
+ 8001dd8: 2203 movs r2, #3
+ 8001dda: fa02 f303 lsl.w r3, r2, r3
+ 8001dde: 43db mvns r3, r3
+ 8001de0: 693a ldr r2, [r7, #16]
+ 8001de2: 4013 ands r3, r2
+ 8001de4: 613b str r3, [r7, #16]
+ temp |= ((GPIO_Init->Pull) << (position * 2U));
+ 8001de6: 683b ldr r3, [r7, #0]
+ 8001de8: 689a ldr r2, [r3, #8]
+ 8001dea: 697b ldr r3, [r7, #20]
+ 8001dec: 005b lsls r3, r3, #1
+ 8001dee: fa02 f303 lsl.w r3, r2, r3
+ 8001df2: 693a ldr r2, [r7, #16]
+ 8001df4: 4313 orrs r3, r2
+ 8001df6: 613b str r3, [r7, #16]
+ GPIOx->PUPDR = temp;
+ 8001df8: 687b ldr r3, [r7, #4]
+ 8001dfa: 693a ldr r2, [r7, #16]
+ 8001dfc: 60da str r2, [r3, #12]
+ }
+
+ /* In case of Alternate function mode selection */
+ if ((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
+ 8001dfe: 683b ldr r3, [r7, #0]
+ 8001e00: 685b ldr r3, [r3, #4]
+ 8001e02: f003 0303 and.w r3, r3, #3
+ 8001e06: 2b02 cmp r3, #2
+ 8001e08: d123 bne.n 8001e52 <HAL_GPIO_Init+0x132>
+ /* Check the Alternate function parameters */
+ assert_param(IS_GPIO_AF_INSTANCE(GPIOx));
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3u];
+ 8001e0a: 697b ldr r3, [r7, #20]
+ 8001e0c: 08da lsrs r2, r3, #3
+ 8001e0e: 687b ldr r3, [r7, #4]
+ 8001e10: 3208 adds r2, #8
+ 8001e12: f853 3022 ldr.w r3, [r3, r2, lsl #2]
+ 8001e16: 613b str r3, [r7, #16]
+ temp &= ~(0xFu << ((position & 0x07u) * 4u));
+ 8001e18: 697b ldr r3, [r7, #20]
+ 8001e1a: f003 0307 and.w r3, r3, #7
+ 8001e1e: 009b lsls r3, r3, #2
+ 8001e20: 220f movs r2, #15
+ 8001e22: fa02 f303 lsl.w r3, r2, r3
+ 8001e26: 43db mvns r3, r3
+ 8001e28: 693a ldr r2, [r7, #16]
+ 8001e2a: 4013 ands r3, r2
+ 8001e2c: 613b str r3, [r7, #16]
+ temp |= ((GPIO_Init->Alternate) << ((position & 0x07u) * 4u));
+ 8001e2e: 683b ldr r3, [r7, #0]
+ 8001e30: 691a ldr r2, [r3, #16]
+ 8001e32: 697b ldr r3, [r7, #20]
+ 8001e34: f003 0307 and.w r3, r3, #7
+ 8001e38: 009b lsls r3, r3, #2
+ 8001e3a: fa02 f303 lsl.w r3, r2, r3
+ 8001e3e: 693a ldr r2, [r7, #16]
+ 8001e40: 4313 orrs r3, r2
+ 8001e42: 613b str r3, [r7, #16]
+ GPIOx->AFR[position >> 3u] = temp;
+ 8001e44: 697b ldr r3, [r7, #20]
+ 8001e46: 08da lsrs r2, r3, #3
+ 8001e48: 687b ldr r3, [r7, #4]
+ 8001e4a: 3208 adds r2, #8
+ 8001e4c: 6939 ldr r1, [r7, #16]
+ 8001e4e: f843 1022 str.w r1, [r3, r2, lsl #2]
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ 8001e52: 687b ldr r3, [r7, #4]
+ 8001e54: 681b ldr r3, [r3, #0]
+ 8001e56: 613b str r3, [r7, #16]
+ temp &= ~(GPIO_MODER_MODE0 << (position * 2u));
+ 8001e58: 697b ldr r3, [r7, #20]
+ 8001e5a: 005b lsls r3, r3, #1
+ 8001e5c: 2203 movs r2, #3
+ 8001e5e: fa02 f303 lsl.w r3, r2, r3
+ 8001e62: 43db mvns r3, r3
+ 8001e64: 693a ldr r2, [r7, #16]
+ 8001e66: 4013 ands r3, r2
+ 8001e68: 613b str r3, [r7, #16]
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2u));
+ 8001e6a: 683b ldr r3, [r7, #0]
+ 8001e6c: 685b ldr r3, [r3, #4]
+ 8001e6e: f003 0203 and.w r2, r3, #3
+ 8001e72: 697b ldr r3, [r7, #20]
+ 8001e74: 005b lsls r3, r3, #1
+ 8001e76: fa02 f303 lsl.w r3, r2, r3
+ 8001e7a: 693a ldr r2, [r7, #16]
+ 8001e7c: 4313 orrs r3, r2
+ 8001e7e: 613b str r3, [r7, #16]
+ GPIOx->MODER = temp;
+ 8001e80: 687b ldr r3, [r7, #4]
+ 8001e82: 693a ldr r2, [r7, #16]
+ 8001e84: 601a str r2, [r3, #0]
+
+ /*--------------------- EXTI Mode Configuration ------------------------*/
+ /* Configure the External Interrupt or event for the current IO */
+ if ((GPIO_Init->Mode & EXTI_MODE) != 0x00u)
+ 8001e86: 683b ldr r3, [r7, #0]
+ 8001e88: 685b ldr r3, [r3, #4]
+ 8001e8a: f403 3340 and.w r3, r3, #196608 @ 0x30000
+ 8001e8e: 2b00 cmp r3, #0
+ 8001e90: f000 8098 beq.w 8001fc4 <HAL_GPIO_Init+0x2a4>
+ {
+ temp = SYSCFG->EXTICR[position >> 2u];
+ 8001e94: 4a54 ldr r2, [pc, #336] @ (8001fe8 <HAL_GPIO_Init+0x2c8>)
+ 8001e96: 697b ldr r3, [r7, #20]
+ 8001e98: 089b lsrs r3, r3, #2
+ 8001e9a: 3302 adds r3, #2
+ 8001e9c: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 8001ea0: 613b str r3, [r7, #16]
+ temp &= ~(0x0FuL << (4u * (position & 0x03u)));
+ 8001ea2: 697b ldr r3, [r7, #20]
+ 8001ea4: f003 0303 and.w r3, r3, #3
+ 8001ea8: 009b lsls r3, r3, #2
+ 8001eaa: 220f movs r2, #15
+ 8001eac: fa02 f303 lsl.w r3, r2, r3
+ 8001eb0: 43db mvns r3, r3
+ 8001eb2: 693a ldr r2, [r7, #16]
+ 8001eb4: 4013 ands r3, r2
+ 8001eb6: 613b str r3, [r7, #16]
+ temp |= (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u)));
+ 8001eb8: 687b ldr r3, [r7, #4]
+ 8001eba: f1b3 4f90 cmp.w r3, #1207959552 @ 0x48000000
+ 8001ebe: d019 beq.n 8001ef4 <HAL_GPIO_Init+0x1d4>
+ 8001ec0: 687b ldr r3, [r7, #4]
+ 8001ec2: 4a4a ldr r2, [pc, #296] @ (8001fec <HAL_GPIO_Init+0x2cc>)
+ 8001ec4: 4293 cmp r3, r2
+ 8001ec6: d013 beq.n 8001ef0 <HAL_GPIO_Init+0x1d0>
+ 8001ec8: 687b ldr r3, [r7, #4]
+ 8001eca: 4a49 ldr r2, [pc, #292] @ (8001ff0 <HAL_GPIO_Init+0x2d0>)
+ 8001ecc: 4293 cmp r3, r2
+ 8001ece: d00d beq.n 8001eec <HAL_GPIO_Init+0x1cc>
+ 8001ed0: 687b ldr r3, [r7, #4]
+ 8001ed2: 4a48 ldr r2, [pc, #288] @ (8001ff4 <HAL_GPIO_Init+0x2d4>)
+ 8001ed4: 4293 cmp r3, r2
+ 8001ed6: d007 beq.n 8001ee8 <HAL_GPIO_Init+0x1c8>
+ 8001ed8: 687b ldr r3, [r7, #4]
+ 8001eda: 4a47 ldr r2, [pc, #284] @ (8001ff8 <HAL_GPIO_Init+0x2d8>)
+ 8001edc: 4293 cmp r3, r2
+ 8001ede: d101 bne.n 8001ee4 <HAL_GPIO_Init+0x1c4>
+ 8001ee0: 2304 movs r3, #4
+ 8001ee2: e008 b.n 8001ef6 <HAL_GPIO_Init+0x1d6>
+ 8001ee4: 2307 movs r3, #7
+ 8001ee6: e006 b.n 8001ef6 <HAL_GPIO_Init+0x1d6>
+ 8001ee8: 2303 movs r3, #3
+ 8001eea: e004 b.n 8001ef6 <HAL_GPIO_Init+0x1d6>
+ 8001eec: 2302 movs r3, #2
+ 8001eee: e002 b.n 8001ef6 <HAL_GPIO_Init+0x1d6>
+ 8001ef0: 2301 movs r3, #1
+ 8001ef2: e000 b.n 8001ef6 <HAL_GPIO_Init+0x1d6>
+ 8001ef4: 2300 movs r3, #0
+ 8001ef6: 697a ldr r2, [r7, #20]
+ 8001ef8: f002 0203 and.w r2, r2, #3
+ 8001efc: 0092 lsls r2, r2, #2
+ 8001efe: 4093 lsls r3, r2
+ 8001f00: 693a ldr r2, [r7, #16]
+ 8001f02: 4313 orrs r3, r2
+ 8001f04: 613b str r3, [r7, #16]
+ SYSCFG->EXTICR[position >> 2u] = temp;
+ 8001f06: 4938 ldr r1, [pc, #224] @ (8001fe8 <HAL_GPIO_Init+0x2c8>)
+ 8001f08: 697b ldr r3, [r7, #20]
+ 8001f0a: 089b lsrs r3, r3, #2
+ 8001f0c: 3302 adds r3, #2
+ 8001f0e: 693a ldr r2, [r7, #16]
+ 8001f10: f841 2023 str.w r2, [r1, r3, lsl #2]
+
+ /* Clear Rising Falling edge configuration */
+ temp = EXTI->RTSR1;
+ 8001f14: 4b39 ldr r3, [pc, #228] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f16: 681b ldr r3, [r3, #0]
+ 8001f18: 613b str r3, [r7, #16]
+ temp &= ~(iocurrent);
+ 8001f1a: 68fb ldr r3, [r7, #12]
+ 8001f1c: 43db mvns r3, r3
+ 8001f1e: 693a ldr r2, [r7, #16]
+ 8001f20: 4013 ands r3, r2
+ 8001f22: 613b str r3, [r7, #16]
+ if ((GPIO_Init->Mode & TRIGGER_RISING) != 0x00u)
+ 8001f24: 683b ldr r3, [r7, #0]
+ 8001f26: 685b ldr r3, [r3, #4]
+ 8001f28: f403 1380 and.w r3, r3, #1048576 @ 0x100000
+ 8001f2c: 2b00 cmp r3, #0
+ 8001f2e: d003 beq.n 8001f38 <HAL_GPIO_Init+0x218>
+ {
+ temp |= iocurrent;
+ 8001f30: 693a ldr r2, [r7, #16]
+ 8001f32: 68fb ldr r3, [r7, #12]
+ 8001f34: 4313 orrs r3, r2
+ 8001f36: 613b str r3, [r7, #16]
+ }
+ EXTI->RTSR1 = temp;
+ 8001f38: 4a30 ldr r2, [pc, #192] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f3a: 693b ldr r3, [r7, #16]
+ 8001f3c: 6013 str r3, [r2, #0]
+
+ temp = EXTI->FTSR1;
+ 8001f3e: 4b2f ldr r3, [pc, #188] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f40: 685b ldr r3, [r3, #4]
+ 8001f42: 613b str r3, [r7, #16]
+ temp &= ~(iocurrent);
+ 8001f44: 68fb ldr r3, [r7, #12]
+ 8001f46: 43db mvns r3, r3
+ 8001f48: 693a ldr r2, [r7, #16]
+ 8001f4a: 4013 ands r3, r2
+ 8001f4c: 613b str r3, [r7, #16]
+ if ((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00u)
+ 8001f4e: 683b ldr r3, [r7, #0]
+ 8001f50: 685b ldr r3, [r3, #4]
+ 8001f52: f403 1300 and.w r3, r3, #2097152 @ 0x200000
+ 8001f56: 2b00 cmp r3, #0
+ 8001f58: d003 beq.n 8001f62 <HAL_GPIO_Init+0x242>
+ {
+ temp |= iocurrent;
+ 8001f5a: 693a ldr r2, [r7, #16]
+ 8001f5c: 68fb ldr r3, [r7, #12]
+ 8001f5e: 4313 orrs r3, r2
+ 8001f60: 613b str r3, [r7, #16]
+ }
+ EXTI->FTSR1 = temp;
+ 8001f62: 4a26 ldr r2, [pc, #152] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f64: 693b ldr r3, [r7, #16]
+ 8001f66: 6053 str r3, [r2, #4]
+
+ /* Clear EXTI line configuration */
+ temp = EXTI->IMR1;
+ 8001f68: 4b24 ldr r3, [pc, #144] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f6a: f8d3 3080 ldr.w r3, [r3, #128] @ 0x80
+ 8001f6e: 613b str r3, [r7, #16]
+ temp &= ~(iocurrent);
+ 8001f70: 68fb ldr r3, [r7, #12]
+ 8001f72: 43db mvns r3, r3
+ 8001f74: 693a ldr r2, [r7, #16]
+ 8001f76: 4013 ands r3, r2
+ 8001f78: 613b str r3, [r7, #16]
+ if ((GPIO_Init->Mode & EXTI_IT) != 0x00u)
+ 8001f7a: 683b ldr r3, [r7, #0]
+ 8001f7c: 685b ldr r3, [r3, #4]
+ 8001f7e: f403 3380 and.w r3, r3, #65536 @ 0x10000
+ 8001f82: 2b00 cmp r3, #0
+ 8001f84: d003 beq.n 8001f8e <HAL_GPIO_Init+0x26e>
+ {
+ temp |= iocurrent;
+ 8001f86: 693a ldr r2, [r7, #16]
+ 8001f88: 68fb ldr r3, [r7, #12]
+ 8001f8a: 4313 orrs r3, r2
+ 8001f8c: 613b str r3, [r7, #16]
+ }
+ EXTI->IMR1 = temp;
+ 8001f8e: 4a1b ldr r2, [pc, #108] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f90: 693b ldr r3, [r7, #16]
+ 8001f92: f8c2 3080 str.w r3, [r2, #128] @ 0x80
+
+ temp = EXTI->EMR1;
+ 8001f96: 4b19 ldr r3, [pc, #100] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001f98: f8d3 3084 ldr.w r3, [r3, #132] @ 0x84
+ 8001f9c: 613b str r3, [r7, #16]
+ temp &= ~(iocurrent);
+ 8001f9e: 68fb ldr r3, [r7, #12]
+ 8001fa0: 43db mvns r3, r3
+ 8001fa2: 693a ldr r2, [r7, #16]
+ 8001fa4: 4013 ands r3, r2
+ 8001fa6: 613b str r3, [r7, #16]
+ if ((GPIO_Init->Mode & EXTI_EVT) != 0x00u)
+ 8001fa8: 683b ldr r3, [r7, #0]
+ 8001faa: 685b ldr r3, [r3, #4]
+ 8001fac: f403 3300 and.w r3, r3, #131072 @ 0x20000
+ 8001fb0: 2b00 cmp r3, #0
+ 8001fb2: d003 beq.n 8001fbc <HAL_GPIO_Init+0x29c>
+ {
+ temp |= iocurrent;
+ 8001fb4: 693a ldr r2, [r7, #16]
+ 8001fb6: 68fb ldr r3, [r7, #12]
+ 8001fb8: 4313 orrs r3, r2
+ 8001fba: 613b str r3, [r7, #16]
+ }
+ EXTI->EMR1 = temp;
+ 8001fbc: 4a0f ldr r2, [pc, #60] @ (8001ffc <HAL_GPIO_Init+0x2dc>)
+ 8001fbe: 693b ldr r3, [r7, #16]
+ 8001fc0: f8c2 3084 str.w r3, [r2, #132] @ 0x84
+ }
+ }
+
+ position++;
+ 8001fc4: 697b ldr r3, [r7, #20]
+ 8001fc6: 3301 adds r3, #1
+ 8001fc8: 617b str r3, [r7, #20]
+ while (((GPIO_Init->Pin) >> position) != 0x00u)
+ 8001fca: 683b ldr r3, [r7, #0]
+ 8001fcc: 681a ldr r2, [r3, #0]
+ 8001fce: 697b ldr r3, [r7, #20]
+ 8001fd0: fa22 f303 lsr.w r3, r2, r3
+ 8001fd4: 2b00 cmp r3, #0
+ 8001fd6: f47f aeab bne.w 8001d30 <HAL_GPIO_Init+0x10>
+ }
+}
+ 8001fda: bf00 nop
+ 8001fdc: bf00 nop
+ 8001fde: 371c adds r7, #28
+ 8001fe0: 46bd mov sp, r7
+ 8001fe2: f85d 7b04 ldr.w r7, [sp], #4
+ 8001fe6: 4770 bx lr
+ 8001fe8: 40010000 .word 0x40010000
+ 8001fec: 48000400 .word 0x48000400
+ 8001ff0: 48000800 .word 0x48000800
+ 8001ff4: 48000c00 .word 0x48000c00
+ 8001ff8: 48001000 .word 0x48001000
+ 8001ffc: 58000800 .word 0x58000800
+
+08002000 <HAL_GPIO_WritePin>:
+ * @arg GPIO_PIN_RESET: to clear the port pin
+ * @arg GPIO_PIN_SET: to set the port pin
+ * @retval None
+ */
+void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
+{
+ 8002000: b480 push {r7}
+ 8002002: b083 sub sp, #12
+ 8002004: af00 add r7, sp, #0
+ 8002006: 6078 str r0, [r7, #4]
+ 8002008: 460b mov r3, r1
+ 800200a: 807b strh r3, [r7, #2]
+ 800200c: 4613 mov r3, r2
+ 800200e: 707b strb r3, [r7, #1]
+ /* Check the parameters */
+ assert_param(IS_GPIO_PIN(GPIO_Pin));
+ assert_param(IS_GPIO_PIN_ACTION(PinState));
+
+ if (PinState != GPIO_PIN_RESET)
+ 8002010: 787b ldrb r3, [r7, #1]
+ 8002012: 2b00 cmp r3, #0
+ 8002014: d003 beq.n 800201e <HAL_GPIO_WritePin+0x1e>
+ {
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
+ 8002016: 887a ldrh r2, [r7, #2]
+ 8002018: 687b ldr r3, [r7, #4]
+ 800201a: 619a str r2, [r3, #24]
+ }
+ else
+ {
+ GPIOx->BRR = (uint32_t)GPIO_Pin;
+ }
+}
+ 800201c: e002 b.n 8002024 <HAL_GPIO_WritePin+0x24>
+ GPIOx->BRR = (uint32_t)GPIO_Pin;
+ 800201e: 887a ldrh r2, [r7, #2]
+ 8002020: 687b ldr r3, [r7, #4]
+ 8002022: 629a str r2, [r3, #40] @ 0x28
+}
+ 8002024: bf00 nop
+ 8002026: 370c adds r7, #12
+ 8002028: 46bd mov sp, r7
+ 800202a: f85d 7b04 ldr.w r7, [sp], #4
+ 800202e: 4770 bx lr
+
+08002030 <HAL_HSEM_IRQHandler>:
+/**
+ * @brief This function handles HSEM interrupt request
+ * @retval None
+ */
+void HAL_HSEM_IRQHandler(void)
+{
+ 8002030: b580 push {r7, lr}
+ 8002032: b082 sub sp, #8
+ 8002034: af00 add r7, sp, #0
+ uint32_t statusreg;
+ /* Get the list of masked freed semaphores*/
+ statusreg = HSEM_COMMON->MISR;
+ 8002036: 4b0a ldr r3, [pc, #40] @ (8002060 <HAL_HSEM_IRQHandler+0x30>)
+ 8002038: 68db ldr r3, [r3, #12]
+ 800203a: 607b str r3, [r7, #4]
+
+ /*Disable Interrupts*/
+ HSEM_COMMON->IER &= ~((uint32_t)statusreg);
+ 800203c: 4b08 ldr r3, [pc, #32] @ (8002060 <HAL_HSEM_IRQHandler+0x30>)
+ 800203e: 681a ldr r2, [r3, #0]
+ 8002040: 687b ldr r3, [r7, #4]
+ 8002042: 43db mvns r3, r3
+ 8002044: 4906 ldr r1, [pc, #24] @ (8002060 <HAL_HSEM_IRQHandler+0x30>)
+ 8002046: 4013 ands r3, r2
+ 8002048: 600b str r3, [r1, #0]
+
+ /*Clear Flags*/
+ HSEM_COMMON->ICR = ((uint32_t)statusreg);
+ 800204a: 4a05 ldr r2, [pc, #20] @ (8002060 <HAL_HSEM_IRQHandler+0x30>)
+ 800204c: 687b ldr r3, [r7, #4]
+ 800204e: 6053 str r3, [r2, #4]
+
+ /* Call FreeCallback */
+ HAL_HSEM_FreeCallback(statusreg);
+ 8002050: 6878 ldr r0, [r7, #4]
+ 8002052: f000 f807 bl 8002064 <HAL_HSEM_FreeCallback>
+}
+ 8002056: bf00 nop
+ 8002058: 3708 adds r7, #8
+ 800205a: 46bd mov sp, r7
+ 800205c: bd80 pop {r7, pc}
+ 800205e: bf00 nop
+ 8002060: 58001500 .word 0x58001500
+
+08002064 <HAL_HSEM_FreeCallback>:
+ * @brief Semaphore Released Callback.
+ * @param SemMask: Mask of Released semaphores
+ * @retval None
+ */
+__weak void HAL_HSEM_FreeCallback(uint32_t SemMask)
+{
+ 8002064: b480 push {r7}
+ 8002066: b083 sub sp, #12
+ 8002068: af00 add r7, sp, #0
+ 800206a: 6078 str r0, [r7, #4]
+ UNUSED(SemMask);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_HSEM_FreeCallback can be implemented in the user file
+ */
+}
+ 800206c: bf00 nop
+ 800206e: 370c adds r7, #12
+ 8002070: 46bd mov sp, r7
+ 8002072: f85d 7b04 ldr.w r7, [sp], #4
+ 8002076: 4770 bx lr
+
+08002078 <HAL_I2C_Init>:
+ * @param hi2c Pointer to a I2C_HandleTypeDef structure that contains
+ * the configuration information for the specified I2C.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c)
+{
+ 8002078: b580 push {r7, lr}
+ 800207a: b082 sub sp, #8
+ 800207c: af00 add r7, sp, #0
+ 800207e: 6078 str r0, [r7, #4]
+ /* Check the I2C handle allocation */
+ if (hi2c == NULL)
+ 8002080: 687b ldr r3, [r7, #4]
+ 8002082: 2b00 cmp r3, #0
+ 8002084: d101 bne.n 800208a <HAL_I2C_Init+0x12>
+ {
+ return HAL_ERROR;
+ 8002086: 2301 movs r3, #1
+ 8002088: e08d b.n 80021a6 <HAL_I2C_Init+0x12e>
+ assert_param(IS_I2C_OWN_ADDRESS2(hi2c->Init.OwnAddress2));
+ assert_param(IS_I2C_OWN_ADDRESS2_MASK(hi2c->Init.OwnAddress2Masks));
+ assert_param(IS_I2C_GENERAL_CALL(hi2c->Init.GeneralCallMode));
+ assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode));
+
+ if (hi2c->State == HAL_I2C_STATE_RESET)
+ 800208a: 687b ldr r3, [r7, #4]
+ 800208c: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
+ 8002090: b2db uxtb r3, r3
+ 8002092: 2b00 cmp r3, #0
+ 8002094: d106 bne.n 80020a4 <HAL_I2C_Init+0x2c>
+ {
+ /* Allocate lock resource and initialize it */
+ hi2c->Lock = HAL_UNLOCKED;
+ 8002096: 687b ldr r3, [r7, #4]
+ 8002098: 2200 movs r2, #0
+ 800209a: f883 2040 strb.w r2, [r3, #64] @ 0x40
+
+ /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */
+ hi2c->MspInitCallback(hi2c);
+#else
+ /* Init the low level hardware : GPIO, CLOCK, CORTEX...etc */
+ HAL_I2C_MspInit(hi2c);
+ 800209e: 6878 ldr r0, [r7, #4]
+ 80020a0: f7ff faae bl 8001600 <HAL_I2C_MspInit>
+#endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
+ }
+
+ hi2c->State = HAL_I2C_STATE_BUSY;
+ 80020a4: 687b ldr r3, [r7, #4]
+ 80020a6: 2224 movs r2, #36 @ 0x24
+ 80020a8: f883 2041 strb.w r2, [r3, #65] @ 0x41
+
+ /* Disable the selected I2C peripheral */
+ __HAL_I2C_DISABLE(hi2c);
+ 80020ac: 687b ldr r3, [r7, #4]
+ 80020ae: 681b ldr r3, [r3, #0]
+ 80020b0: 681a ldr r2, [r3, #0]
+ 80020b2: 687b ldr r3, [r7, #4]
+ 80020b4: 681b ldr r3, [r3, #0]
+ 80020b6: f022 0201 bic.w r2, r2, #1
+ 80020ba: 601a str r2, [r3, #0]
+
+ /*---------------------------- I2Cx TIMINGR Configuration ------------------*/
+ /* Configure I2Cx: Frequency range */
+ hi2c->Instance->TIMINGR = hi2c->Init.Timing & TIMING_CLEAR_MASK;
+ 80020bc: 687b ldr r3, [r7, #4]
+ 80020be: 685a ldr r2, [r3, #4]
+ 80020c0: 687b ldr r3, [r7, #4]
+ 80020c2: 681b ldr r3, [r3, #0]
+ 80020c4: f022 6270 bic.w r2, r2, #251658240 @ 0xf000000
+ 80020c8: 611a str r2, [r3, #16]
+
+ /*---------------------------- I2Cx OAR1 Configuration ---------------------*/
+ /* Disable Own Address1 before set the Own Address1 configuration */
+ hi2c->Instance->OAR1 &= ~I2C_OAR1_OA1EN;
+ 80020ca: 687b ldr r3, [r7, #4]
+ 80020cc: 681b ldr r3, [r3, #0]
+ 80020ce: 689a ldr r2, [r3, #8]
+ 80020d0: 687b ldr r3, [r7, #4]
+ 80020d2: 681b ldr r3, [r3, #0]
+ 80020d4: f422 4200 bic.w r2, r2, #32768 @ 0x8000
+ 80020d8: 609a str r2, [r3, #8]
+
+ /* Configure I2Cx: Own Address1 and ack own address1 mode */
+ if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT)
+ 80020da: 687b ldr r3, [r7, #4]
+ 80020dc: 68db ldr r3, [r3, #12]
+ 80020de: 2b01 cmp r3, #1
+ 80020e0: d107 bne.n 80020f2 <HAL_I2C_Init+0x7a>
+ {
+ hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | hi2c->Init.OwnAddress1);
+ 80020e2: 687b ldr r3, [r7, #4]
+ 80020e4: 689a ldr r2, [r3, #8]
+ 80020e6: 687b ldr r3, [r7, #4]
+ 80020e8: 681b ldr r3, [r3, #0]
+ 80020ea: f442 4200 orr.w r2, r2, #32768 @ 0x8000
+ 80020ee: 609a str r2, [r3, #8]
+ 80020f0: e006 b.n 8002100 <HAL_I2C_Init+0x88>
+ }
+ else /* I2C_ADDRESSINGMODE_10BIT */
+ {
+ hi2c->Instance->OAR1 = (I2C_OAR1_OA1EN | I2C_OAR1_OA1MODE | hi2c->Init.OwnAddress1);
+ 80020f2: 687b ldr r3, [r7, #4]
+ 80020f4: 689a ldr r2, [r3, #8]
+ 80020f6: 687b ldr r3, [r7, #4]
+ 80020f8: 681b ldr r3, [r3, #0]
+ 80020fa: f442 4204 orr.w r2, r2, #33792 @ 0x8400
+ 80020fe: 609a str r2, [r3, #8]
+ }
+
+ /*---------------------------- I2Cx CR2 Configuration ----------------------*/
+ /* Configure I2Cx: Addressing Master mode */
+ if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_10BIT)
+ 8002100: 687b ldr r3, [r7, #4]
+ 8002102: 68db ldr r3, [r3, #12]
+ 8002104: 2b02 cmp r3, #2
+ 8002106: d108 bne.n 800211a <HAL_I2C_Init+0xa2>
+ {
+ SET_BIT(hi2c->Instance->CR2, I2C_CR2_ADD10);
+ 8002108: 687b ldr r3, [r7, #4]
+ 800210a: 681b ldr r3, [r3, #0]
+ 800210c: 685a ldr r2, [r3, #4]
+ 800210e: 687b ldr r3, [r7, #4]
+ 8002110: 681b ldr r3, [r3, #0]
+ 8002112: f442 6200 orr.w r2, r2, #2048 @ 0x800
+ 8002116: 605a str r2, [r3, #4]
+ 8002118: e007 b.n 800212a <HAL_I2C_Init+0xb2>
+ }
+ else
+ {
+ /* Clear the I2C ADD10 bit */
+ CLEAR_BIT(hi2c->Instance->CR2, I2C_CR2_ADD10);
+ 800211a: 687b ldr r3, [r7, #4]
+ 800211c: 681b ldr r3, [r3, #0]
+ 800211e: 685a ldr r2, [r3, #4]
+ 8002120: 687b ldr r3, [r7, #4]
+ 8002122: 681b ldr r3, [r3, #0]
+ 8002124: f422 6200 bic.w r2, r2, #2048 @ 0x800
+ 8002128: 605a str r2, [r3, #4]
+ }
+ /* Enable the AUTOEND by default, and enable NACK (should be disable only during Slave process */
+ hi2c->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK);
+ 800212a: 687b ldr r3, [r7, #4]
+ 800212c: 681b ldr r3, [r3, #0]
+ 800212e: 685b ldr r3, [r3, #4]
+ 8002130: 687a ldr r2, [r7, #4]
+ 8002132: 6812 ldr r2, [r2, #0]
+ 8002134: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000
+ 8002138: f443 4300 orr.w r3, r3, #32768 @ 0x8000
+ 800213c: 6053 str r3, [r2, #4]
+
+ /*---------------------------- I2Cx OAR2 Configuration ---------------------*/
+ /* Disable Own Address2 before set the Own Address2 configuration */
+ hi2c->Instance->OAR2 &= ~I2C_DUALADDRESS_ENABLE;
+ 800213e: 687b ldr r3, [r7, #4]
+ 8002140: 681b ldr r3, [r3, #0]
+ 8002142: 68da ldr r2, [r3, #12]
+ 8002144: 687b ldr r3, [r7, #4]
+ 8002146: 681b ldr r3, [r3, #0]
+ 8002148: f422 4200 bic.w r2, r2, #32768 @ 0x8000
+ 800214c: 60da str r2, [r3, #12]
+
+ /* Configure I2Cx: Dual mode and Own Address2 */
+ hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2 | \
+ 800214e: 687b ldr r3, [r7, #4]
+ 8002150: 691a ldr r2, [r3, #16]
+ 8002152: 687b ldr r3, [r7, #4]
+ 8002154: 695b ldr r3, [r3, #20]
+ 8002156: ea42 0103 orr.w r1, r2, r3
+ (hi2c->Init.OwnAddress2Masks << 8));
+ 800215a: 687b ldr r3, [r7, #4]
+ 800215c: 699b ldr r3, [r3, #24]
+ 800215e: 021a lsls r2, r3, #8
+ hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2 | \
+ 8002160: 687b ldr r3, [r7, #4]
+ 8002162: 681b ldr r3, [r3, #0]
+ 8002164: 430a orrs r2, r1
+ 8002166: 60da str r2, [r3, #12]
+
+ /*---------------------------- I2Cx CR1 Configuration ----------------------*/
+ /* Configure I2Cx: Generalcall and NoStretch mode */
+ hi2c->Instance->CR1 = (hi2c->Init.GeneralCallMode | hi2c->Init.NoStretchMode);
+ 8002168: 687b ldr r3, [r7, #4]
+ 800216a: 69d9 ldr r1, [r3, #28]
+ 800216c: 687b ldr r3, [r7, #4]
+ 800216e: 6a1a ldr r2, [r3, #32]
+ 8002170: 687b ldr r3, [r7, #4]
+ 8002172: 681b ldr r3, [r3, #0]
+ 8002174: 430a orrs r2, r1
+ 8002176: 601a str r2, [r3, #0]
+
+ /* Enable the selected I2C peripheral */
+ __HAL_I2C_ENABLE(hi2c);
+ 8002178: 687b ldr r3, [r7, #4]
+ 800217a: 681b ldr r3, [r3, #0]
+ 800217c: 681a ldr r2, [r3, #0]
+ 800217e: 687b ldr r3, [r7, #4]
+ 8002180: 681b ldr r3, [r3, #0]
+ 8002182: f042 0201 orr.w r2, r2, #1
+ 8002186: 601a str r2, [r3, #0]
+
+ hi2c->ErrorCode = HAL_I2C_ERROR_NONE;
+ 8002188: 687b ldr r3, [r7, #4]
+ 800218a: 2200 movs r2, #0
+ 800218c: 645a str r2, [r3, #68] @ 0x44
+ hi2c->State = HAL_I2C_STATE_READY;
+ 800218e: 687b ldr r3, [r7, #4]
+ 8002190: 2220 movs r2, #32
+ 8002192: f883 2041 strb.w r2, [r3, #65] @ 0x41
+ hi2c->PreviousState = I2C_STATE_NONE;
+ 8002196: 687b ldr r3, [r7, #4]
+ 8002198: 2200 movs r2, #0
+ 800219a: 631a str r2, [r3, #48] @ 0x30
+ hi2c->Mode = HAL_I2C_MODE_NONE;
+ 800219c: 687b ldr r3, [r7, #4]
+ 800219e: 2200 movs r2, #0
+ 80021a0: f883 2042 strb.w r2, [r3, #66] @ 0x42
+
+ return HAL_OK;
+ 80021a4: 2300 movs r3, #0
+}
+ 80021a6: 4618 mov r0, r3
+ 80021a8: 3708 adds r7, #8
+ 80021aa: 46bd mov sp, r7
+ 80021ac: bd80 pop {r7, pc}
+
+080021ae <HAL_I2CEx_ConfigAnalogFilter>:
+ * the configuration information for the specified I2Cx peripheral.
+ * @param AnalogFilter New state of the Analog filter.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter)
+{
+ 80021ae: b480 push {r7}
+ 80021b0: b083 sub sp, #12
+ 80021b2: af00 add r7, sp, #0
+ 80021b4: 6078 str r0, [r7, #4]
+ 80021b6: 6039 str r1, [r7, #0]
+ /* Check the parameters */
+ assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance));
+ assert_param(IS_I2C_ANALOG_FILTER(AnalogFilter));
+
+ if (hi2c->State == HAL_I2C_STATE_READY)
+ 80021b8: 687b ldr r3, [r7, #4]
+ 80021ba: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
+ 80021be: b2db uxtb r3, r3
+ 80021c0: 2b20 cmp r3, #32
+ 80021c2: d138 bne.n 8002236 <HAL_I2CEx_ConfigAnalogFilter+0x88>
+ {
+ /* Process Locked */
+ __HAL_LOCK(hi2c);
+ 80021c4: 687b ldr r3, [r7, #4]
+ 80021c6: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
+ 80021ca: 2b01 cmp r3, #1
+ 80021cc: d101 bne.n 80021d2 <HAL_I2CEx_ConfigAnalogFilter+0x24>
+ 80021ce: 2302 movs r3, #2
+ 80021d0: e032 b.n 8002238 <HAL_I2CEx_ConfigAnalogFilter+0x8a>
+ 80021d2: 687b ldr r3, [r7, #4]
+ 80021d4: 2201 movs r2, #1
+ 80021d6: f883 2040 strb.w r2, [r3, #64] @ 0x40
+
+ hi2c->State = HAL_I2C_STATE_BUSY;
+ 80021da: 687b ldr r3, [r7, #4]
+ 80021dc: 2224 movs r2, #36 @ 0x24
+ 80021de: f883 2041 strb.w r2, [r3, #65] @ 0x41
+
+ /* Disable the selected I2C peripheral */
+ __HAL_I2C_DISABLE(hi2c);
+ 80021e2: 687b ldr r3, [r7, #4]
+ 80021e4: 681b ldr r3, [r3, #0]
+ 80021e6: 681a ldr r2, [r3, #0]
+ 80021e8: 687b ldr r3, [r7, #4]
+ 80021ea: 681b ldr r3, [r3, #0]
+ 80021ec: f022 0201 bic.w r2, r2, #1
+ 80021f0: 601a str r2, [r3, #0]
+
+ /* Reset I2Cx ANOFF bit */
+ hi2c->Instance->CR1 &= ~(I2C_CR1_ANFOFF);
+ 80021f2: 687b ldr r3, [r7, #4]
+ 80021f4: 681b ldr r3, [r3, #0]
+ 80021f6: 681a ldr r2, [r3, #0]
+ 80021f8: 687b ldr r3, [r7, #4]
+ 80021fa: 681b ldr r3, [r3, #0]
+ 80021fc: f422 5280 bic.w r2, r2, #4096 @ 0x1000
+ 8002200: 601a str r2, [r3, #0]
+
+ /* Set analog filter bit*/
+ hi2c->Instance->CR1 |= AnalogFilter;
+ 8002202: 687b ldr r3, [r7, #4]
+ 8002204: 681b ldr r3, [r3, #0]
+ 8002206: 6819 ldr r1, [r3, #0]
+ 8002208: 687b ldr r3, [r7, #4]
+ 800220a: 681b ldr r3, [r3, #0]
+ 800220c: 683a ldr r2, [r7, #0]
+ 800220e: 430a orrs r2, r1
+ 8002210: 601a str r2, [r3, #0]
+
+ __HAL_I2C_ENABLE(hi2c);
+ 8002212: 687b ldr r3, [r7, #4]
+ 8002214: 681b ldr r3, [r3, #0]
+ 8002216: 681a ldr r2, [r3, #0]
+ 8002218: 687b ldr r3, [r7, #4]
+ 800221a: 681b ldr r3, [r3, #0]
+ 800221c: f042 0201 orr.w r2, r2, #1
+ 8002220: 601a str r2, [r3, #0]
+
+ hi2c->State = HAL_I2C_STATE_READY;
+ 8002222: 687b ldr r3, [r7, #4]
+ 8002224: 2220 movs r2, #32
+ 8002226: f883 2041 strb.w r2, [r3, #65] @ 0x41
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(hi2c);
+ 800222a: 687b ldr r3, [r7, #4]
+ 800222c: 2200 movs r2, #0
+ 800222e: f883 2040 strb.w r2, [r3, #64] @ 0x40
+
+ return HAL_OK;
+ 8002232: 2300 movs r3, #0
+ 8002234: e000 b.n 8002238 <HAL_I2CEx_ConfigAnalogFilter+0x8a>
+ }
+ else
+ {
+ return HAL_BUSY;
+ 8002236: 2302 movs r3, #2
+ }
+}
+ 8002238: 4618 mov r0, r3
+ 800223a: 370c adds r7, #12
+ 800223c: 46bd mov sp, r7
+ 800223e: f85d 7b04 ldr.w r7, [sp], #4
+ 8002242: 4770 bx lr
+
+08002244 <HAL_I2CEx_ConfigDigitalFilter>:
+ * the configuration information for the specified I2Cx peripheral.
+ * @param DigitalFilter Coefficient of digital noise filter between Min_Data=0x00 and Max_Data=0x0F.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter)
+{
+ 8002244: b480 push {r7}
+ 8002246: b085 sub sp, #20
+ 8002248: af00 add r7, sp, #0
+ 800224a: 6078 str r0, [r7, #4]
+ 800224c: 6039 str r1, [r7, #0]
+
+ /* Check the parameters */
+ assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance));
+ assert_param(IS_I2C_DIGITAL_FILTER(DigitalFilter));
+
+ if (hi2c->State == HAL_I2C_STATE_READY)
+ 800224e: 687b ldr r3, [r7, #4]
+ 8002250: f893 3041 ldrb.w r3, [r3, #65] @ 0x41
+ 8002254: b2db uxtb r3, r3
+ 8002256: 2b20 cmp r3, #32
+ 8002258: d139 bne.n 80022ce <HAL_I2CEx_ConfigDigitalFilter+0x8a>
+ {
+ /* Process Locked */
+ __HAL_LOCK(hi2c);
+ 800225a: 687b ldr r3, [r7, #4]
+ 800225c: f893 3040 ldrb.w r3, [r3, #64] @ 0x40
+ 8002260: 2b01 cmp r3, #1
+ 8002262: d101 bne.n 8002268 <HAL_I2CEx_ConfigDigitalFilter+0x24>
+ 8002264: 2302 movs r3, #2
+ 8002266: e033 b.n 80022d0 <HAL_I2CEx_ConfigDigitalFilter+0x8c>
+ 8002268: 687b ldr r3, [r7, #4]
+ 800226a: 2201 movs r2, #1
+ 800226c: f883 2040 strb.w r2, [r3, #64] @ 0x40
+
+ hi2c->State = HAL_I2C_STATE_BUSY;
+ 8002270: 687b ldr r3, [r7, #4]
+ 8002272: 2224 movs r2, #36 @ 0x24
+ 8002274: f883 2041 strb.w r2, [r3, #65] @ 0x41
+
+ /* Disable the selected I2C peripheral */
+ __HAL_I2C_DISABLE(hi2c);
+ 8002278: 687b ldr r3, [r7, #4]
+ 800227a: 681b ldr r3, [r3, #0]
+ 800227c: 681a ldr r2, [r3, #0]
+ 800227e: 687b ldr r3, [r7, #4]
+ 8002280: 681b ldr r3, [r3, #0]
+ 8002282: f022 0201 bic.w r2, r2, #1
+ 8002286: 601a str r2, [r3, #0]
+
+ /* Get the old register value */
+ tmpreg = hi2c->Instance->CR1;
+ 8002288: 687b ldr r3, [r7, #4]
+ 800228a: 681b ldr r3, [r3, #0]
+ 800228c: 681b ldr r3, [r3, #0]
+ 800228e: 60fb str r3, [r7, #12]
+
+ /* Reset I2Cx DNF bits [11:8] */
+ tmpreg &= ~(I2C_CR1_DNF);
+ 8002290: 68fb ldr r3, [r7, #12]
+ 8002292: f423 6370 bic.w r3, r3, #3840 @ 0xf00
+ 8002296: 60fb str r3, [r7, #12]
+
+ /* Set I2Cx DNF coefficient */
+ tmpreg |= DigitalFilter << 8U;
+ 8002298: 683b ldr r3, [r7, #0]
+ 800229a: 021b lsls r3, r3, #8
+ 800229c: 68fa ldr r2, [r7, #12]
+ 800229e: 4313 orrs r3, r2
+ 80022a0: 60fb str r3, [r7, #12]
+
+ /* Store the new register value */
+ hi2c->Instance->CR1 = tmpreg;
+ 80022a2: 687b ldr r3, [r7, #4]
+ 80022a4: 681b ldr r3, [r3, #0]
+ 80022a6: 68fa ldr r2, [r7, #12]
+ 80022a8: 601a str r2, [r3, #0]
+
+ __HAL_I2C_ENABLE(hi2c);
+ 80022aa: 687b ldr r3, [r7, #4]
+ 80022ac: 681b ldr r3, [r3, #0]
+ 80022ae: 681a ldr r2, [r3, #0]
+ 80022b0: 687b ldr r3, [r7, #4]
+ 80022b2: 681b ldr r3, [r3, #0]
+ 80022b4: f042 0201 orr.w r2, r2, #1
+ 80022b8: 601a str r2, [r3, #0]
+
+ hi2c->State = HAL_I2C_STATE_READY;
+ 80022ba: 687b ldr r3, [r7, #4]
+ 80022bc: 2220 movs r2, #32
+ 80022be: f883 2041 strb.w r2, [r3, #65] @ 0x41
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(hi2c);
+ 80022c2: 687b ldr r3, [r7, #4]
+ 80022c4: 2200 movs r2, #0
+ 80022c6: f883 2040 strb.w r2, [r3, #64] @ 0x40
+
+ return HAL_OK;
+ 80022ca: 2300 movs r3, #0
+ 80022cc: e000 b.n 80022d0 <HAL_I2CEx_ConfigDigitalFilter+0x8c>
+ }
+ else
+ {
+ return HAL_BUSY;
+ 80022ce: 2302 movs r3, #2
+ }
+}
+ 80022d0: 4618 mov r0, r3
+ 80022d2: 3714 adds r7, #20
+ 80022d4: 46bd mov sp, r7
+ 80022d6: f85d 7b04 ldr.w r7, [sp], #4
+ 80022da: 4770 bx lr
+
+080022dc <HAL_IPCC_Init>:
+ * @brief Initialize the IPCC peripheral.
+ * @param hipcc IPCC handle
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_IPCC_Init(IPCC_HandleTypeDef *hipcc)
+{
+ 80022dc: b580 push {r7, lr}
+ 80022de: b084 sub sp, #16
+ 80022e0: af00 add r7, sp, #0
+ 80022e2: 6078 str r0, [r7, #4]
+ HAL_StatusTypeDef err = HAL_OK;
+ 80022e4: 2300 movs r3, #0
+ 80022e6: 73fb strb r3, [r7, #15]
+
+ /* Check the IPCC handle allocation */
+ if (hipcc != NULL)
+ 80022e8: 687b ldr r3, [r7, #4]
+ 80022ea: 2b00 cmp r3, #0
+ 80022ec: d01e beq.n 800232c <HAL_IPCC_Init+0x50>
+ {
+ /* Check the parameters */
+ assert_param(IS_IPCC_ALL_INSTANCE(hipcc->Instance));
+
+ IPCC_CommonTypeDef *currentInstance = IPCC_C1;
+ 80022ee: 4b13 ldr r3, [pc, #76] @ (800233c <HAL_IPCC_Init+0x60>)
+ 80022f0: 60bb str r3, [r7, #8]
+
+ if (hipcc->State == HAL_IPCC_STATE_RESET)
+ 80022f2: 687b ldr r3, [r7, #4]
+ 80022f4: f893 3038 ldrb.w r3, [r3, #56] @ 0x38
+ 80022f8: b2db uxtb r3, r3
+ 80022fa: 2b00 cmp r3, #0
+ 80022fc: d102 bne.n 8002304 <HAL_IPCC_Init+0x28>
+ {
+ /* Init the low level hardware : CLOCK, NVIC */
+ HAL_IPCC_MspInit(hipcc);
+ 80022fe: 6878 ldr r0, [r7, #4]
+ 8002300: f7ff f9c4 bl 800168c <HAL_IPCC_MspInit>
+ }
+
+ /* Reset all registers of the current cpu to default state */
+ IPCC_Reset_Register(currentInstance);
+ 8002304: 68b8 ldr r0, [r7, #8]
+ 8002306: f000 f85b bl 80023c0 <IPCC_Reset_Register>
+
+ /* Activate the interrupts */
+ currentInstance->CR |= (IPCC_CR_RXOIE | IPCC_CR_TXFIE);
+ 800230a: 68bb ldr r3, [r7, #8]
+ 800230c: 681b ldr r3, [r3, #0]
+ 800230e: f043 1201 orr.w r2, r3, #65537 @ 0x10001
+ 8002312: 68bb ldr r3, [r7, #8]
+ 8002314: 601a str r2, [r3, #0]
+
+ /* Clear callback pointers */
+ IPCC_SetDefaultCallbacks(hipcc);
+ 8002316: 6878 ldr r0, [r7, #4]
+ 8002318: f000 f82c bl 8002374 <IPCC_SetDefaultCallbacks>
+
+ /* Reset all callback notification request */
+ hipcc->callbackRequest = 0;
+ 800231c: 687b ldr r3, [r7, #4]
+ 800231e: 2200 movs r2, #0
+ 8002320: 635a str r2, [r3, #52] @ 0x34
+
+ hipcc->State = HAL_IPCC_STATE_READY;
+ 8002322: 687b ldr r3, [r7, #4]
+ 8002324: 2201 movs r2, #1
+ 8002326: f883 2038 strb.w r2, [r3, #56] @ 0x38
+ 800232a: e001 b.n 8002330 <HAL_IPCC_Init+0x54>
+ }
+ else
+ {
+ err = HAL_ERROR;
+ 800232c: 2301 movs r3, #1
+ 800232e: 73fb strb r3, [r7, #15]
+ }
+
+ return err;
+ 8002330: 7bfb ldrb r3, [r7, #15]
+}
+ 8002332: 4618 mov r0, r3
+ 8002334: 3710 adds r7, #16
+ 8002336: 46bd mov sp, r7
+ 8002338: bd80 pop {r7, pc}
+ 800233a: bf00 nop
+ 800233c: 58000c00 .word 0x58000c00
+
+08002340 <HAL_IPCC_RxCallback>:
+ * @arg IPCC_CHANNEL_5: IPCC Channel 5
+ * @arg IPCC_CHANNEL_6: IPCC Channel 6
+ * @param ChannelDir Channel direction
+ */
+__weak void HAL_IPCC_RxCallback(IPCC_HandleTypeDef *hipcc, uint32_t ChannelIndex, IPCC_CHANNELDirTypeDef ChannelDir)
+{
+ 8002340: b480 push {r7}
+ 8002342: b085 sub sp, #20
+ 8002344: af00 add r7, sp, #0
+ 8002346: 60f8 str r0, [r7, #12]
+ 8002348: 60b9 str r1, [r7, #8]
+ 800234a: 4613 mov r3, r2
+ 800234c: 71fb strb r3, [r7, #7]
+ UNUSED(ChannelDir);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_IPCC_RxCallback can be implemented in the user file
+ */
+}
+ 800234e: bf00 nop
+ 8002350: 3714 adds r7, #20
+ 8002352: 46bd mov sp, r7
+ 8002354: f85d 7b04 ldr.w r7, [sp], #4
+ 8002358: 4770 bx lr
+
+0800235a <HAL_IPCC_TxCallback>:
+ * @arg IPCC_CHANNEL_5: IPCC Channel 5
+ * @arg IPCC_CHANNEL_6: IPCC Channel 6
+ * @param ChannelDir Channel direction
+ */
+__weak void HAL_IPCC_TxCallback(IPCC_HandleTypeDef *hipcc, uint32_t ChannelIndex, IPCC_CHANNELDirTypeDef ChannelDir)
+{
+ 800235a: b480 push {r7}
+ 800235c: b085 sub sp, #20
+ 800235e: af00 add r7, sp, #0
+ 8002360: 60f8 str r0, [r7, #12]
+ 8002362: 60b9 str r1, [r7, #8]
+ 8002364: 4613 mov r3, r2
+ 8002366: 71fb strb r3, [r7, #7]
+ UNUSED(ChannelDir);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_IPCC_TxCallback can be implemented in the user file
+ */
+}
+ 8002368: bf00 nop
+ 800236a: 3714 adds r7, #20
+ 800236c: 46bd mov sp, r7
+ 800236e: f85d 7b04 ldr.w r7, [sp], #4
+ 8002372: 4770 bx lr
+
+08002374 <IPCC_SetDefaultCallbacks>:
+/**
+ * @brief Reset all callbacks of the handle to NULL.
+ * @param hipcc IPCC handle
+ */
+void IPCC_SetDefaultCallbacks(IPCC_HandleTypeDef *hipcc)
+{
+ 8002374: b480 push {r7}
+ 8002376: b085 sub sp, #20
+ 8002378: af00 add r7, sp, #0
+ 800237a: 6078 str r0, [r7, #4]
+ uint32_t i;
+ /* Set all callbacks to default */
+ for (i = 0; i < IPCC_CHANNEL_NUMBER; i++)
+ 800237c: 2300 movs r3, #0
+ 800237e: 60fb str r3, [r7, #12]
+ 8002380: e00f b.n 80023a2 <IPCC_SetDefaultCallbacks+0x2e>
+ {
+ hipcc->ChannelCallbackRx[i] = HAL_IPCC_RxCallback;
+ 8002382: 687a ldr r2, [r7, #4]
+ 8002384: 68fb ldr r3, [r7, #12]
+ 8002386: 009b lsls r3, r3, #2
+ 8002388: 4413 add r3, r2
+ 800238a: 4a0b ldr r2, [pc, #44] @ (80023b8 <IPCC_SetDefaultCallbacks+0x44>)
+ 800238c: 605a str r2, [r3, #4]
+ hipcc->ChannelCallbackTx[i] = HAL_IPCC_TxCallback;
+ 800238e: 687a ldr r2, [r7, #4]
+ 8002390: 68fb ldr r3, [r7, #12]
+ 8002392: 3306 adds r3, #6
+ 8002394: 009b lsls r3, r3, #2
+ 8002396: 4413 add r3, r2
+ 8002398: 4a08 ldr r2, [pc, #32] @ (80023bc <IPCC_SetDefaultCallbacks+0x48>)
+ 800239a: 605a str r2, [r3, #4]
+ for (i = 0; i < IPCC_CHANNEL_NUMBER; i++)
+ 800239c: 68fb ldr r3, [r7, #12]
+ 800239e: 3301 adds r3, #1
+ 80023a0: 60fb str r3, [r7, #12]
+ 80023a2: 68fb ldr r3, [r7, #12]
+ 80023a4: 2b05 cmp r3, #5
+ 80023a6: d9ec bls.n 8002382 <IPCC_SetDefaultCallbacks+0xe>
+ }
+}
+ 80023a8: bf00 nop
+ 80023aa: bf00 nop
+ 80023ac: 3714 adds r7, #20
+ 80023ae: 46bd mov sp, r7
+ 80023b0: f85d 7b04 ldr.w r7, [sp], #4
+ 80023b4: 4770 bx lr
+ 80023b6: bf00 nop
+ 80023b8: 08002341 .word 0x08002341
+ 80023bc: 0800235b .word 0x0800235b
+
+080023c0 <IPCC_Reset_Register>:
+/**
+ * @brief Reset IPCC register to default value for the concerned instance.
+ * @param Instance pointer to register
+ */
+void IPCC_Reset_Register(IPCC_CommonTypeDef *Instance)
+{
+ 80023c0: b480 push {r7}
+ 80023c2: b083 sub sp, #12
+ 80023c4: af00 add r7, sp, #0
+ 80023c6: 6078 str r0, [r7, #4]
+ /* Disable RX and TX interrupts */
+ Instance->CR = 0x00000000U;
+ 80023c8: 687b ldr r3, [r7, #4]
+ 80023ca: 2200 movs r2, #0
+ 80023cc: 601a str r2, [r3, #0]
+
+ /* Mask RX and TX interrupts */
+ Instance->MR = (IPCC_ALL_TX_BUF | IPCC_ALL_RX_BUF);
+ 80023ce: 687b ldr r3, [r7, #4]
+ 80023d0: f04f 123f mov.w r2, #4128831 @ 0x3f003f
+ 80023d4: 605a str r2, [r3, #4]
+
+ /* Clear RX status */
+ Instance->SCR = IPCC_ALL_RX_BUF;
+ 80023d6: 687b ldr r3, [r7, #4]
+ 80023d8: 223f movs r2, #63 @ 0x3f
+ 80023da: 609a str r2, [r3, #8]
+}
+ 80023dc: bf00 nop
+ 80023de: 370c adds r7, #12
+ 80023e0: 46bd mov sp, r7
+ 80023e2: f85d 7b04 ldr.w r7, [sp], #4
+ 80023e6: 4770 bx lr
+
+080023e8 <HAL_PWR_EnableBkUpAccess>:
+ * @note LSEON bit that switches on and off the LSE crystal belongs as well to the
+ * back-up domain.
+ * @retval None
+ */
+void HAL_PWR_EnableBkUpAccess(void)
+{
+ 80023e8: b480 push {r7}
+ 80023ea: af00 add r7, sp, #0
+ SET_BIT(PWR->CR1, PWR_CR1_DBP);
+ 80023ec: 4b05 ldr r3, [pc, #20] @ (8002404 <HAL_PWR_EnableBkUpAccess+0x1c>)
+ 80023ee: 681b ldr r3, [r3, #0]
+ 80023f0: 4a04 ldr r2, [pc, #16] @ (8002404 <HAL_PWR_EnableBkUpAccess+0x1c>)
+ 80023f2: f443 7380 orr.w r3, r3, #256 @ 0x100
+ 80023f6: 6013 str r3, [r2, #0]
+}
+ 80023f8: bf00 nop
+ 80023fa: 46bd mov sp, r7
+ 80023fc: f85d 7b04 ldr.w r7, [sp], #4
+ 8002400: 4770 bx lr
+ 8002402: bf00 nop
+ 8002404: 58000400 .word 0x58000400
+
+08002408 <HAL_PWREx_GetVoltageRange>:
+/**
+ * @brief Return Voltage Scaling Range.
+ * @retval VOS bit field (PWR_REGULATOR_VOLTAGE_RANGE1 or PWR_REGULATOR_VOLTAGE_RANGE2)
+ */
+uint32_t HAL_PWREx_GetVoltageRange(void)
+{
+ 8002408: b480 push {r7}
+ 800240a: af00 add r7, sp, #0
+ return (PWR->CR1 & PWR_CR1_VOS);
+ 800240c: 4b04 ldr r3, [pc, #16] @ (8002420 <HAL_PWREx_GetVoltageRange+0x18>)
+ 800240e: 681b ldr r3, [r3, #0]
+ 8002410: f403 63c0 and.w r3, r3, #1536 @ 0x600
+}
+ 8002414: 4618 mov r0, r3
+ 8002416: 46bd mov sp, r7
+ 8002418: f85d 7b04 ldr.w r7, [sp], #4
+ 800241c: 4770 bx lr
+ 800241e: bf00 nop
+ 8002420: 58000400 .word 0x58000400
+
+08002424 <HAL_PWREx_EnterSTOP2Mode>:
+ * @arg @ref PWR_STOPENTRY_WFI Enter Stop mode with WFI instruction
+ * @arg @ref PWR_STOPENTRY_WFE Enter Stop mode with WFE instruction
+ * @retval None
+ */
+void HAL_PWREx_EnterSTOP2Mode(uint8_t STOPEntry)
+{
+ 8002424: b480 push {r7}
+ 8002426: b083 sub sp, #12
+ 8002428: af00 add r7, sp, #0
+ 800242a: 4603 mov r3, r0
+ 800242c: 71fb strb r3, [r7, #7]
+ /* Check the parameter */
+ assert_param(IS_PWR_STOP_ENTRY(STOPEntry));
+
+ /* Set Stop mode 2 */
+ MODIFY_REG(PWR->CR1, PWR_CR1_LPMS, PWR_LOWPOWERMODE_STOP2);
+ 800242e: 4b11 ldr r3, [pc, #68] @ (8002474 <HAL_PWREx_EnterSTOP2Mode+0x50>)
+ 8002430: 681b ldr r3, [r3, #0]
+ 8002432: f023 0307 bic.w r3, r3, #7
+ 8002436: 4a0f ldr r2, [pc, #60] @ (8002474 <HAL_PWREx_EnterSTOP2Mode+0x50>)
+ 8002438: f043 0302 orr.w r3, r3, #2
+ 800243c: 6013 str r3, [r2, #0]
+
+ /* Set SLEEPDEEP bit of Cortex System Control Register */
+ SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
+ 800243e: 4b0e ldr r3, [pc, #56] @ (8002478 <HAL_PWREx_EnterSTOP2Mode+0x54>)
+ 8002440: 691b ldr r3, [r3, #16]
+ 8002442: 4a0d ldr r2, [pc, #52] @ (8002478 <HAL_PWREx_EnterSTOP2Mode+0x54>)
+ 8002444: f043 0304 orr.w r3, r3, #4
+ 8002448: 6113 str r3, [r2, #16]
+
+ /* Select Stop mode entry --------------------------------------------------*/
+ if (STOPEntry == PWR_STOPENTRY_WFI)
+ 800244a: 79fb ldrb r3, [r7, #7]
+ 800244c: 2b01 cmp r3, #1
+ 800244e: d101 bne.n 8002454 <HAL_PWREx_EnterSTOP2Mode+0x30>
+ {
+ /* Request Wait For Interrupt */
+ __WFI();
+ 8002450: bf30 wfi
+ 8002452: e002 b.n 800245a <HAL_PWREx_EnterSTOP2Mode+0x36>
+ }
+ else
+ {
+ /* Request Wait For Event */
+ __SEV();
+ 8002454: bf40 sev
+ __WFE();
+ 8002456: bf20 wfe
+ __WFE();
+ 8002458: bf20 wfe
+ }
+
+ /* Reset SLEEPDEEP bit of Cortex System Control Register */
+ CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
+ 800245a: 4b07 ldr r3, [pc, #28] @ (8002478 <HAL_PWREx_EnterSTOP2Mode+0x54>)
+ 800245c: 691b ldr r3, [r3, #16]
+ 800245e: 4a06 ldr r2, [pc, #24] @ (8002478 <HAL_PWREx_EnterSTOP2Mode+0x54>)
+ 8002460: f023 0304 bic.w r3, r3, #4
+ 8002464: 6113 str r3, [r2, #16]
+}
+ 8002466: bf00 nop
+ 8002468: 370c adds r7, #12
+ 800246a: 46bd mov sp, r7
+ 800246c: f85d 7b04 ldr.w r7, [sp], #4
+ 8002470: 4770 bx lr
+ 8002472: bf00 nop
+ 8002474: 58000400 .word 0x58000400
+ 8002478: e000ed00 .word 0xe000ed00
+
+0800247c <LL_RCC_HSE_IsEnabledDiv2>:
+{
+ 800247c: b480 push {r7}
+ 800247e: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CR, RCC_CR_HSEPRE) == (RCC_CR_HSEPRE)) ? 1UL : 0UL);
+ 8002480: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002484: 681b ldr r3, [r3, #0]
+ 8002486: f403 1380 and.w r3, r3, #1048576 @ 0x100000
+ 800248a: f5b3 1f80 cmp.w r3, #1048576 @ 0x100000
+ 800248e: d101 bne.n 8002494 <LL_RCC_HSE_IsEnabledDiv2+0x18>
+ 8002490: 2301 movs r3, #1
+ 8002492: e000 b.n 8002496 <LL_RCC_HSE_IsEnabledDiv2+0x1a>
+ 8002494: 2300 movs r3, #0
+}
+ 8002496: 4618 mov r0, r3
+ 8002498: 46bd mov sp, r7
+ 800249a: f85d 7b04 ldr.w r7, [sp], #4
+ 800249e: 4770 bx lr
+
+080024a0 <LL_RCC_HSE_Enable>:
+{
+ 80024a0: b480 push {r7}
+ 80024a2: af00 add r7, sp, #0
+ SET_BIT(RCC->CR, RCC_CR_HSEON);
+ 80024a4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80024a8: 681b ldr r3, [r3, #0]
+ 80024aa: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80024ae: f443 3380 orr.w r3, r3, #65536 @ 0x10000
+ 80024b2: 6013 str r3, [r2, #0]
+}
+ 80024b4: bf00 nop
+ 80024b6: 46bd mov sp, r7
+ 80024b8: f85d 7b04 ldr.w r7, [sp], #4
+ 80024bc: 4770 bx lr
+
+080024be <LL_RCC_HSE_Disable>:
+{
+ 80024be: b480 push {r7}
+ 80024c0: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CR, RCC_CR_HSEON);
+ 80024c2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80024c6: 681b ldr r3, [r3, #0]
+ 80024c8: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80024cc: f423 3380 bic.w r3, r3, #65536 @ 0x10000
+ 80024d0: 6013 str r3, [r2, #0]
+}
+ 80024d2: bf00 nop
+ 80024d4: 46bd mov sp, r7
+ 80024d6: f85d 7b04 ldr.w r7, [sp], #4
+ 80024da: 4770 bx lr
+
+080024dc <LL_RCC_HSE_IsReady>:
+{
+ 80024dc: b480 push {r7}
+ 80024de: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)) ? 1UL : 0UL);
+ 80024e0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80024e4: 681b ldr r3, [r3, #0]
+ 80024e6: f403 3300 and.w r3, r3, #131072 @ 0x20000
+ 80024ea: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
+ 80024ee: d101 bne.n 80024f4 <LL_RCC_HSE_IsReady+0x18>
+ 80024f0: 2301 movs r3, #1
+ 80024f2: e000 b.n 80024f6 <LL_RCC_HSE_IsReady+0x1a>
+ 80024f4: 2300 movs r3, #0
+}
+ 80024f6: 4618 mov r0, r3
+ 80024f8: 46bd mov sp, r7
+ 80024fa: f85d 7b04 ldr.w r7, [sp], #4
+ 80024fe: 4770 bx lr
+
+08002500 <LL_RCC_HSI_Enable>:
+{
+ 8002500: b480 push {r7}
+ 8002502: af00 add r7, sp, #0
+ SET_BIT(RCC->CR, RCC_CR_HSION);
+ 8002504: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002508: 681b ldr r3, [r3, #0]
+ 800250a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 800250e: f443 7380 orr.w r3, r3, #256 @ 0x100
+ 8002512: 6013 str r3, [r2, #0]
+}
+ 8002514: bf00 nop
+ 8002516: 46bd mov sp, r7
+ 8002518: f85d 7b04 ldr.w r7, [sp], #4
+ 800251c: 4770 bx lr
+
+0800251e <LL_RCC_HSI_Disable>:
+{
+ 800251e: b480 push {r7}
+ 8002520: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CR, RCC_CR_HSION);
+ 8002522: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002526: 681b ldr r3, [r3, #0]
+ 8002528: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 800252c: f423 7380 bic.w r3, r3, #256 @ 0x100
+ 8002530: 6013 str r3, [r2, #0]
+}
+ 8002532: bf00 nop
+ 8002534: 46bd mov sp, r7
+ 8002536: f85d 7b04 ldr.w r7, [sp], #4
+ 800253a: 4770 bx lr
+
+0800253c <LL_RCC_HSI_IsReady>:
+{
+ 800253c: b480 push {r7}
+ 800253e: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CR, RCC_CR_HSIRDY) == (RCC_CR_HSIRDY)) ? 1UL : 0UL);
+ 8002540: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002544: 681b ldr r3, [r3, #0]
+ 8002546: f403 6380 and.w r3, r3, #1024 @ 0x400
+ 800254a: f5b3 6f80 cmp.w r3, #1024 @ 0x400
+ 800254e: d101 bne.n 8002554 <LL_RCC_HSI_IsReady+0x18>
+ 8002550: 2301 movs r3, #1
+ 8002552: e000 b.n 8002556 <LL_RCC_HSI_IsReady+0x1a>
+ 8002554: 2300 movs r3, #0
+}
+ 8002556: 4618 mov r0, r3
+ 8002558: 46bd mov sp, r7
+ 800255a: f85d 7b04 ldr.w r7, [sp], #4
+ 800255e: 4770 bx lr
+
+08002560 <LL_RCC_HSI_SetCalibTrimming>:
+{
+ 8002560: b480 push {r7}
+ 8002562: b083 sub sp, #12
+ 8002564: af00 add r7, sp, #0
+ 8002566: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->ICSCR, RCC_ICSCR_HSITRIM, Value << RCC_ICSCR_HSITRIM_Pos);
+ 8002568: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800256c: 685b ldr r3, [r3, #4]
+ 800256e: f023 42fe bic.w r2, r3, #2130706432 @ 0x7f000000
+ 8002572: 687b ldr r3, [r7, #4]
+ 8002574: 061b lsls r3, r3, #24
+ 8002576: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800257a: 4313 orrs r3, r2
+ 800257c: 604b str r3, [r1, #4]
+}
+ 800257e: bf00 nop
+ 8002580: 370c adds r7, #12
+ 8002582: 46bd mov sp, r7
+ 8002584: f85d 7b04 ldr.w r7, [sp], #4
+ 8002588: 4770 bx lr
+
+0800258a <LL_RCC_HSI48_Enable>:
+{
+ 800258a: b480 push {r7}
+ 800258c: af00 add r7, sp, #0
+ SET_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON);
+ 800258e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002592: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
+ 8002596: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 800259a: f043 0301 orr.w r3, r3, #1
+ 800259e: f8c2 3098 str.w r3, [r2, #152] @ 0x98
+}
+ 80025a2: bf00 nop
+ 80025a4: 46bd mov sp, r7
+ 80025a6: f85d 7b04 ldr.w r7, [sp], #4
+ 80025aa: 4770 bx lr
+
+080025ac <LL_RCC_HSI48_Disable>:
+{
+ 80025ac: b480 push {r7}
+ 80025ae: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CRRCR, RCC_CRRCR_HSI48ON);
+ 80025b0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80025b4: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
+ 80025b8: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80025bc: f023 0301 bic.w r3, r3, #1
+ 80025c0: f8c2 3098 str.w r3, [r2, #152] @ 0x98
+}
+ 80025c4: bf00 nop
+ 80025c6: 46bd mov sp, r7
+ 80025c8: f85d 7b04 ldr.w r7, [sp], #4
+ 80025cc: 4770 bx lr
+
+080025ce <LL_RCC_HSI48_IsReady>:
+{
+ 80025ce: b480 push {r7}
+ 80025d0: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CRRCR, RCC_CRRCR_HSI48RDY) == (RCC_CRRCR_HSI48RDY)) ? 1UL : 0UL);
+ 80025d2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80025d6: f8d3 3098 ldr.w r3, [r3, #152] @ 0x98
+ 80025da: f003 0302 and.w r3, r3, #2
+ 80025de: 2b02 cmp r3, #2
+ 80025e0: d101 bne.n 80025e6 <LL_RCC_HSI48_IsReady+0x18>
+ 80025e2: 2301 movs r3, #1
+ 80025e4: e000 b.n 80025e8 <LL_RCC_HSI48_IsReady+0x1a>
+ 80025e6: 2300 movs r3, #0
+}
+ 80025e8: 4618 mov r0, r3
+ 80025ea: 46bd mov sp, r7
+ 80025ec: f85d 7b04 ldr.w r7, [sp], #4
+ 80025f0: 4770 bx lr
+
+080025f2 <LL_RCC_LSE_Enable>:
+{
+ 80025f2: b480 push {r7}
+ 80025f4: af00 add r7, sp, #0
+ SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);
+ 80025f6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80025fa: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 80025fe: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8002602: f043 0301 orr.w r3, r3, #1
+ 8002606: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 800260a: bf00 nop
+ 800260c: 46bd mov sp, r7
+ 800260e: f85d 7b04 ldr.w r7, [sp], #4
+ 8002612: 4770 bx lr
+
+08002614 <LL_RCC_LSE_Disable>:
+{
+ 8002614: b480 push {r7}
+ 8002616: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);
+ 8002618: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800261c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8002620: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8002624: f023 0301 bic.w r3, r3, #1
+ 8002628: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 800262c: bf00 nop
+ 800262e: 46bd mov sp, r7
+ 8002630: f85d 7b04 ldr.w r7, [sp], #4
+ 8002634: 4770 bx lr
+
+08002636 <LL_RCC_LSE_EnableBypass>:
+{
+ 8002636: b480 push {r7}
+ 8002638: af00 add r7, sp, #0
+ SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
+ 800263a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800263e: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8002642: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8002646: f043 0304 orr.w r3, r3, #4
+ 800264a: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 800264e: bf00 nop
+ 8002650: 46bd mov sp, r7
+ 8002652: f85d 7b04 ldr.w r7, [sp], #4
+ 8002656: 4770 bx lr
+
+08002658 <LL_RCC_LSE_DisableBypass>:
+{
+ 8002658: b480 push {r7}
+ 800265a: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);
+ 800265c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002660: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8002664: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8002668: f023 0304 bic.w r3, r3, #4
+ 800266c: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 8002670: bf00 nop
+ 8002672: 46bd mov sp, r7
+ 8002674: f85d 7b04 ldr.w r7, [sp], #4
+ 8002678: 4770 bx lr
+
+0800267a <LL_RCC_LSE_IsReady>:
+{
+ 800267a: b480 push {r7}
+ 800267c: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)) ? 1UL : 0UL);
+ 800267e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002682: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8002686: f003 0302 and.w r3, r3, #2
+ 800268a: 2b02 cmp r3, #2
+ 800268c: d101 bne.n 8002692 <LL_RCC_LSE_IsReady+0x18>
+ 800268e: 2301 movs r3, #1
+ 8002690: e000 b.n 8002694 <LL_RCC_LSE_IsReady+0x1a>
+ 8002692: 2300 movs r3, #0
+}
+ 8002694: 4618 mov r0, r3
+ 8002696: 46bd mov sp, r7
+ 8002698: f85d 7b04 ldr.w r7, [sp], #4
+ 800269c: 4770 bx lr
+
+0800269e <LL_RCC_LSI1_Enable>:
+{
+ 800269e: b480 push {r7}
+ 80026a0: af00 add r7, sp, #0
+ SET_BIT(RCC->CSR, RCC_CSR_LSI1ON);
+ 80026a2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80026a6: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 80026aa: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80026ae: f043 0301 orr.w r3, r3, #1
+ 80026b2: f8c2 3094 str.w r3, [r2, #148] @ 0x94
+}
+ 80026b6: bf00 nop
+ 80026b8: 46bd mov sp, r7
+ 80026ba: f85d 7b04 ldr.w r7, [sp], #4
+ 80026be: 4770 bx lr
+
+080026c0 <LL_RCC_LSI1_Disable>:
+{
+ 80026c0: b480 push {r7}
+ 80026c2: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CSR, RCC_CSR_LSI1ON);
+ 80026c4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80026c8: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 80026cc: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80026d0: f023 0301 bic.w r3, r3, #1
+ 80026d4: f8c2 3094 str.w r3, [r2, #148] @ 0x94
+}
+ 80026d8: bf00 nop
+ 80026da: 46bd mov sp, r7
+ 80026dc: f85d 7b04 ldr.w r7, [sp], #4
+ 80026e0: 4770 bx lr
+
+080026e2 <LL_RCC_LSI1_IsReady>:
+{
+ 80026e2: b480 push {r7}
+ 80026e4: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CSR, RCC_CSR_LSI1RDY) == (RCC_CSR_LSI1RDY)) ? 1UL : 0UL);
+ 80026e6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80026ea: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 80026ee: f003 0302 and.w r3, r3, #2
+ 80026f2: 2b02 cmp r3, #2
+ 80026f4: d101 bne.n 80026fa <LL_RCC_LSI1_IsReady+0x18>
+ 80026f6: 2301 movs r3, #1
+ 80026f8: e000 b.n 80026fc <LL_RCC_LSI1_IsReady+0x1a>
+ 80026fa: 2300 movs r3, #0
+}
+ 80026fc: 4618 mov r0, r3
+ 80026fe: 46bd mov sp, r7
+ 8002700: f85d 7b04 ldr.w r7, [sp], #4
+ 8002704: 4770 bx lr
+
+08002706 <LL_RCC_LSI2_Enable>:
+{
+ 8002706: b480 push {r7}
+ 8002708: af00 add r7, sp, #0
+ SET_BIT(RCC->CSR, RCC_CSR_LSI2ON);
+ 800270a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800270e: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 8002712: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8002716: f043 0304 orr.w r3, r3, #4
+ 800271a: f8c2 3094 str.w r3, [r2, #148] @ 0x94
+}
+ 800271e: bf00 nop
+ 8002720: 46bd mov sp, r7
+ 8002722: f85d 7b04 ldr.w r7, [sp], #4
+ 8002726: 4770 bx lr
+
+08002728 <LL_RCC_LSI2_Disable>:
+{
+ 8002728: b480 push {r7}
+ 800272a: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CSR, RCC_CSR_LSI2ON);
+ 800272c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002730: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 8002734: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8002738: f023 0304 bic.w r3, r3, #4
+ 800273c: f8c2 3094 str.w r3, [r2, #148] @ 0x94
+}
+ 8002740: bf00 nop
+ 8002742: 46bd mov sp, r7
+ 8002744: f85d 7b04 ldr.w r7, [sp], #4
+ 8002748: 4770 bx lr
+
+0800274a <LL_RCC_LSI2_IsReady>:
+{
+ 800274a: b480 push {r7}
+ 800274c: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CSR, RCC_CSR_LSI2RDY) == (RCC_CSR_LSI2RDY)) ? 1UL : 0UL);
+ 800274e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002752: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 8002756: f003 0308 and.w r3, r3, #8
+ 800275a: 2b08 cmp r3, #8
+ 800275c: d101 bne.n 8002762 <LL_RCC_LSI2_IsReady+0x18>
+ 800275e: 2301 movs r3, #1
+ 8002760: e000 b.n 8002764 <LL_RCC_LSI2_IsReady+0x1a>
+ 8002762: 2300 movs r3, #0
+}
+ 8002764: 4618 mov r0, r3
+ 8002766: 46bd mov sp, r7
+ 8002768: f85d 7b04 ldr.w r7, [sp], #4
+ 800276c: 4770 bx lr
+
+0800276e <LL_RCC_LSI2_SetTrimming>:
+{
+ 800276e: b480 push {r7}
+ 8002770: b083 sub sp, #12
+ 8002772: af00 add r7, sp, #0
+ 8002774: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CSR, RCC_CSR_LSI2TRIM, Value << RCC_CSR_LSI2TRIM_Pos);
+ 8002776: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800277a: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 800277e: f423 6270 bic.w r2, r3, #3840 @ 0xf00
+ 8002782: 687b ldr r3, [r7, #4]
+ 8002784: 021b lsls r3, r3, #8
+ 8002786: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800278a: 4313 orrs r3, r2
+ 800278c: f8c1 3094 str.w r3, [r1, #148] @ 0x94
+}
+ 8002790: bf00 nop
+ 8002792: 370c adds r7, #12
+ 8002794: 46bd mov sp, r7
+ 8002796: f85d 7b04 ldr.w r7, [sp], #4
+ 800279a: 4770 bx lr
+
+0800279c <LL_RCC_MSI_Enable>:
+{
+ 800279c: b480 push {r7}
+ 800279e: af00 add r7, sp, #0
+ SET_BIT(RCC->CR, RCC_CR_MSION);
+ 80027a0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80027a4: 681b ldr r3, [r3, #0]
+ 80027a6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80027aa: f043 0301 orr.w r3, r3, #1
+ 80027ae: 6013 str r3, [r2, #0]
+}
+ 80027b0: bf00 nop
+ 80027b2: 46bd mov sp, r7
+ 80027b4: f85d 7b04 ldr.w r7, [sp], #4
+ 80027b8: 4770 bx lr
+
+080027ba <LL_RCC_MSI_Disable>:
+{
+ 80027ba: b480 push {r7}
+ 80027bc: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CR, RCC_CR_MSION);
+ 80027be: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80027c2: 681b ldr r3, [r3, #0]
+ 80027c4: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80027c8: f023 0301 bic.w r3, r3, #1
+ 80027cc: 6013 str r3, [r2, #0]
+}
+ 80027ce: bf00 nop
+ 80027d0: 46bd mov sp, r7
+ 80027d2: f85d 7b04 ldr.w r7, [sp], #4
+ 80027d6: 4770 bx lr
+
+080027d8 <LL_RCC_MSI_IsReady>:
+{
+ 80027d8: b480 push {r7}
+ 80027da: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CR, RCC_CR_MSIRDY) == (RCC_CR_MSIRDY)) ? 1UL : 0UL);
+ 80027dc: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80027e0: 681b ldr r3, [r3, #0]
+ 80027e2: f003 0302 and.w r3, r3, #2
+ 80027e6: 2b02 cmp r3, #2
+ 80027e8: d101 bne.n 80027ee <LL_RCC_MSI_IsReady+0x16>
+ 80027ea: 2301 movs r3, #1
+ 80027ec: e000 b.n 80027f0 <LL_RCC_MSI_IsReady+0x18>
+ 80027ee: 2300 movs r3, #0
+}
+ 80027f0: 4618 mov r0, r3
+ 80027f2: 46bd mov sp, r7
+ 80027f4: f85d 7b04 ldr.w r7, [sp], #4
+ 80027f8: 4770 bx lr
+
+080027fa <LL_RCC_MSI_SetRange>:
+{
+ 80027fa: b480 push {r7}
+ 80027fc: b083 sub sp, #12
+ 80027fe: af00 add r7, sp, #0
+ 8002800: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CR, RCC_CR_MSIRANGE, Range);
+ 8002802: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002806: 681b ldr r3, [r3, #0]
+ 8002808: f023 02f0 bic.w r2, r3, #240 @ 0xf0
+ 800280c: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8002810: 687b ldr r3, [r7, #4]
+ 8002812: 4313 orrs r3, r2
+ 8002814: 600b str r3, [r1, #0]
+}
+ 8002816: bf00 nop
+ 8002818: 370c adds r7, #12
+ 800281a: 46bd mov sp, r7
+ 800281c: f85d 7b04 ldr.w r7, [sp], #4
+ 8002820: 4770 bx lr
+
+08002822 <LL_RCC_MSI_GetRange>:
+{
+ 8002822: b480 push {r7}
+ 8002824: b083 sub sp, #12
+ 8002826: af00 add r7, sp, #0
+ uint32_t msiRange = READ_BIT(RCC->CR, RCC_CR_MSIRANGE);
+ 8002828: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800282c: 681b ldr r3, [r3, #0]
+ 800282e: f003 03f0 and.w r3, r3, #240 @ 0xf0
+ 8002832: 607b str r3, [r7, #4]
+ if (msiRange > LL_RCC_MSIRANGE_11)
+ 8002834: 687b ldr r3, [r7, #4]
+ 8002836: 2bb0 cmp r3, #176 @ 0xb0
+ 8002838: d901 bls.n 800283e <LL_RCC_MSI_GetRange+0x1c>
+ msiRange = LL_RCC_MSIRANGE_11;
+ 800283a: 23b0 movs r3, #176 @ 0xb0
+ 800283c: 607b str r3, [r7, #4]
+ return msiRange;
+ 800283e: 687b ldr r3, [r7, #4]
+}
+ 8002840: 4618 mov r0, r3
+ 8002842: 370c adds r7, #12
+ 8002844: 46bd mov sp, r7
+ 8002846: f85d 7b04 ldr.w r7, [sp], #4
+ 800284a: 4770 bx lr
+
+0800284c <LL_RCC_MSI_SetCalibTrimming>:
+{
+ 800284c: b480 push {r7}
+ 800284e: b083 sub sp, #12
+ 8002850: af00 add r7, sp, #0
+ 8002852: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->ICSCR, RCC_ICSCR_MSITRIM, Value << RCC_ICSCR_MSITRIM_Pos);
+ 8002854: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002858: 685b ldr r3, [r3, #4]
+ 800285a: f423 427f bic.w r2, r3, #65280 @ 0xff00
+ 800285e: 687b ldr r3, [r7, #4]
+ 8002860: 021b lsls r3, r3, #8
+ 8002862: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8002866: 4313 orrs r3, r2
+ 8002868: 604b str r3, [r1, #4]
+}
+ 800286a: bf00 nop
+ 800286c: 370c adds r7, #12
+ 800286e: 46bd mov sp, r7
+ 8002870: f85d 7b04 ldr.w r7, [sp], #4
+ 8002874: 4770 bx lr
+
+08002876 <LL_RCC_SetSysClkSource>:
+{
+ 8002876: b480 push {r7}
+ 8002878: b083 sub sp, #12
+ 800287a: af00 add r7, sp, #0
+ 800287c: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source);
+ 800287e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002882: 689b ldr r3, [r3, #8]
+ 8002884: f023 0203 bic.w r2, r3, #3
+ 8002888: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800288c: 687b ldr r3, [r7, #4]
+ 800288e: 4313 orrs r3, r2
+ 8002890: 608b str r3, [r1, #8]
+}
+ 8002892: bf00 nop
+ 8002894: 370c adds r7, #12
+ 8002896: 46bd mov sp, r7
+ 8002898: f85d 7b04 ldr.w r7, [sp], #4
+ 800289c: 4770 bx lr
+
+0800289e <LL_RCC_GetSysClkSource>:
+{
+ 800289e: b480 push {r7}
+ 80028a0: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS));
+ 80028a2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80028a6: 689b ldr r3, [r3, #8]
+ 80028a8: f003 030c and.w r3, r3, #12
+}
+ 80028ac: 4618 mov r0, r3
+ 80028ae: 46bd mov sp, r7
+ 80028b0: f85d 7b04 ldr.w r7, [sp], #4
+ 80028b4: 4770 bx lr
+
+080028b6 <LL_RCC_SetAHBPrescaler>:
+{
+ 80028b6: b480 push {r7}
+ 80028b8: b083 sub sp, #12
+ 80028ba: af00 add r7, sp, #0
+ 80028bc: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler);
+ 80028be: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80028c2: 689b ldr r3, [r3, #8]
+ 80028c4: f023 02f0 bic.w r2, r3, #240 @ 0xf0
+ 80028c8: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80028cc: 687b ldr r3, [r7, #4]
+ 80028ce: 4313 orrs r3, r2
+ 80028d0: 608b str r3, [r1, #8]
+}
+ 80028d2: bf00 nop
+ 80028d4: 370c adds r7, #12
+ 80028d6: 46bd mov sp, r7
+ 80028d8: f85d 7b04 ldr.w r7, [sp], #4
+ 80028dc: 4770 bx lr
+
+080028de <LL_C2_RCC_SetAHBPrescaler>:
+{
+ 80028de: b480 push {r7}
+ 80028e0: b083 sub sp, #12
+ 80028e2: af00 add r7, sp, #0
+ 80028e4: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->EXTCFGR, RCC_EXTCFGR_C2HPRE, Prescaler);
+ 80028e6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80028ea: f8d3 3108 ldr.w r3, [r3, #264] @ 0x108
+ 80028ee: f023 02f0 bic.w r2, r3, #240 @ 0xf0
+ 80028f2: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80028f6: 687b ldr r3, [r7, #4]
+ 80028f8: 4313 orrs r3, r2
+ 80028fa: f8c1 3108 str.w r3, [r1, #264] @ 0x108
+}
+ 80028fe: bf00 nop
+ 8002900: 370c adds r7, #12
+ 8002902: 46bd mov sp, r7
+ 8002904: f85d 7b04 ldr.w r7, [sp], #4
+ 8002908: 4770 bx lr
+
+0800290a <LL_RCC_SetAHB4Prescaler>:
+{
+ 800290a: b480 push {r7}
+ 800290c: b083 sub sp, #12
+ 800290e: af00 add r7, sp, #0
+ 8002910: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->EXTCFGR, RCC_EXTCFGR_SHDHPRE, Prescaler >> 4);
+ 8002912: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002916: f8d3 3108 ldr.w r3, [r3, #264] @ 0x108
+ 800291a: f023 020f bic.w r2, r3, #15
+ 800291e: 687b ldr r3, [r7, #4]
+ 8002920: 091b lsrs r3, r3, #4
+ 8002922: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8002926: 4313 orrs r3, r2
+ 8002928: f8c1 3108 str.w r3, [r1, #264] @ 0x108
+}
+ 800292c: bf00 nop
+ 800292e: 370c adds r7, #12
+ 8002930: 46bd mov sp, r7
+ 8002932: f85d 7b04 ldr.w r7, [sp], #4
+ 8002936: 4770 bx lr
+
+08002938 <LL_RCC_SetAPB1Prescaler>:
+{
+ 8002938: b480 push {r7}
+ 800293a: b083 sub sp, #12
+ 800293c: af00 add r7, sp, #0
+ 800293e: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler);
+ 8002940: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002944: 689b ldr r3, [r3, #8]
+ 8002946: f423 62e0 bic.w r2, r3, #1792 @ 0x700
+ 800294a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800294e: 687b ldr r3, [r7, #4]
+ 8002950: 4313 orrs r3, r2
+ 8002952: 608b str r3, [r1, #8]
+}
+ 8002954: bf00 nop
+ 8002956: 370c adds r7, #12
+ 8002958: 46bd mov sp, r7
+ 800295a: f85d 7b04 ldr.w r7, [sp], #4
+ 800295e: 4770 bx lr
+
+08002960 <LL_RCC_SetAPB2Prescaler>:
+{
+ 8002960: b480 push {r7}
+ 8002962: b083 sub sp, #12
+ 8002964: af00 add r7, sp, #0
+ 8002966: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler);
+ 8002968: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800296c: 689b ldr r3, [r3, #8]
+ 800296e: f423 5260 bic.w r2, r3, #14336 @ 0x3800
+ 8002972: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8002976: 687b ldr r3, [r7, #4]
+ 8002978: 4313 orrs r3, r2
+ 800297a: 608b str r3, [r1, #8]
+}
+ 800297c: bf00 nop
+ 800297e: 370c adds r7, #12
+ 8002980: 46bd mov sp, r7
+ 8002982: f85d 7b04 ldr.w r7, [sp], #4
+ 8002986: 4770 bx lr
+
+08002988 <LL_RCC_GetAHBPrescaler>:
+{
+ 8002988: b480 push {r7}
+ 800298a: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE));
+ 800298c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002990: 689b ldr r3, [r3, #8]
+ 8002992: f003 03f0 and.w r3, r3, #240 @ 0xf0
+}
+ 8002996: 4618 mov r0, r3
+ 8002998: 46bd mov sp, r7
+ 800299a: f85d 7b04 ldr.w r7, [sp], #4
+ 800299e: 4770 bx lr
+
+080029a0 <LL_RCC_GetAHB4Prescaler>:
+{
+ 80029a0: b480 push {r7}
+ 80029a2: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->EXTCFGR, RCC_EXTCFGR_SHDHPRE) << 4);
+ 80029a4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80029a8: f8d3 3108 ldr.w r3, [r3, #264] @ 0x108
+ 80029ac: 011b lsls r3, r3, #4
+ 80029ae: f003 03f0 and.w r3, r3, #240 @ 0xf0
+}
+ 80029b2: 4618 mov r0, r3
+ 80029b4: 46bd mov sp, r7
+ 80029b6: f85d 7b04 ldr.w r7, [sp], #4
+ 80029ba: 4770 bx lr
+
+080029bc <LL_RCC_PLL_Enable>:
+ * @brief Enable PLL
+ * @rmtoll CR PLLON LL_RCC_PLL_Enable
+ * @retval None
+ */
+__STATIC_INLINE void LL_RCC_PLL_Enable(void)
+{
+ 80029bc: b480 push {r7}
+ 80029be: af00 add r7, sp, #0
+ SET_BIT(RCC->CR, RCC_CR_PLLON);
+ 80029c0: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80029c4: 681b ldr r3, [r3, #0]
+ 80029c6: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80029ca: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
+ 80029ce: 6013 str r3, [r2, #0]
+}
+ 80029d0: bf00 nop
+ 80029d2: 46bd mov sp, r7
+ 80029d4: f85d 7b04 ldr.w r7, [sp], #4
+ 80029d8: 4770 bx lr
+
+080029da <LL_RCC_PLL_Disable>:
+ * @note Cannot be disabled if the PLL clock is used as the system clock
+ * @rmtoll CR PLLON LL_RCC_PLL_Disable
+ * @retval None
+ */
+__STATIC_INLINE void LL_RCC_PLL_Disable(void)
+{
+ 80029da: b480 push {r7}
+ 80029dc: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CR, RCC_CR_PLLON);
+ 80029de: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80029e2: 681b ldr r3, [r3, #0]
+ 80029e4: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80029e8: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000
+ 80029ec: 6013 str r3, [r2, #0]
+}
+ 80029ee: bf00 nop
+ 80029f0: 46bd mov sp, r7
+ 80029f2: f85d 7b04 ldr.w r7, [sp], #4
+ 80029f6: 4770 bx lr
+
+080029f8 <LL_RCC_PLL_IsReady>:
+ * @brief Check if PLL Ready
+ * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void)
+{
+ 80029f8: b480 push {r7}
+ 80029fa: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY)) ? 1UL : 0UL);
+ 80029fc: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002a00: 681b ldr r3, [r3, #0]
+ 8002a02: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
+ 8002a06: f1b3 7f00 cmp.w r3, #33554432 @ 0x2000000
+ 8002a0a: d101 bne.n 8002a10 <LL_RCC_PLL_IsReady+0x18>
+ 8002a0c: 2301 movs r3, #1
+ 8002a0e: e000 b.n 8002a12 <LL_RCC_PLL_IsReady+0x1a>
+ 8002a10: 2300 movs r3, #0
+}
+ 8002a12: 4618 mov r0, r3
+ 8002a14: 46bd mov sp, r7
+ 8002a16: f85d 7b04 ldr.w r7, [sp], #4
+ 8002a1a: 4770 bx lr
+
+08002a1c <LL_RCC_PLL_GetN>:
+ * @brief Get Main PLL multiplication factor for VCO
+ * @rmtoll PLLCFGR PLLN LL_RCC_PLL_GetN
+ * @retval Between 6 and 127
+ */
+__STATIC_INLINE uint32_t LL_RCC_PLL_GetN(void)
+{
+ 8002a1c: b480 push {r7}
+ 8002a1e: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos);
+ 8002a20: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002a24: 68db ldr r3, [r3, #12]
+ 8002a26: 0a1b lsrs r3, r3, #8
+ 8002a28: f003 037f and.w r3, r3, #127 @ 0x7f
+}
+ 8002a2c: 4618 mov r0, r3
+ 8002a2e: 46bd mov sp, r7
+ 8002a30: f85d 7b04 ldr.w r7, [sp], #4
+ 8002a34: 4770 bx lr
+
+08002a36 <LL_RCC_PLL_GetR>:
+ * @arg @ref LL_RCC_PLLR_DIV_6
+ * @arg @ref LL_RCC_PLLR_DIV_7
+ * @arg @ref LL_RCC_PLLR_DIV_8
+ */
+__STATIC_INLINE uint32_t LL_RCC_PLL_GetR(void)
+{
+ 8002a36: b480 push {r7}
+ 8002a38: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLR));
+ 8002a3a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002a3e: 68db ldr r3, [r3, #12]
+ 8002a40: f003 4360 and.w r3, r3, #3758096384 @ 0xe0000000
+}
+ 8002a44: 4618 mov r0, r3
+ 8002a46: 46bd mov sp, r7
+ 8002a48: f85d 7b04 ldr.w r7, [sp], #4
+ 8002a4c: 4770 bx lr
+
+08002a4e <LL_RCC_PLL_GetDivider>:
+ * @arg @ref LL_RCC_PLLM_DIV_6
+ * @arg @ref LL_RCC_PLLM_DIV_7
+ * @arg @ref LL_RCC_PLLM_DIV_8
+ */
+__STATIC_INLINE uint32_t LL_RCC_PLL_GetDivider(void)
+{
+ 8002a4e: b480 push {r7}
+ 8002a50: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLM));
+ 8002a52: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002a56: 68db ldr r3, [r3, #12]
+ 8002a58: f003 0370 and.w r3, r3, #112 @ 0x70
+}
+ 8002a5c: 4618 mov r0, r3
+ 8002a5e: 46bd mov sp, r7
+ 8002a60: f85d 7b04 ldr.w r7, [sp], #4
+ 8002a64: 4770 bx lr
+
+08002a66 <LL_RCC_PLL_GetMainSource>:
+ * @arg @ref LL_RCC_PLLSOURCE_MSI
+ * @arg @ref LL_RCC_PLLSOURCE_HSI
+ * @arg @ref LL_RCC_PLLSOURCE_HSE
+ */
+__STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void)
+{
+ 8002a66: b480 push {r7}
+ 8002a68: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->PLLCFGR, RCC_PLLCFGR_PLLSRC));
+ 8002a6a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002a6e: 68db ldr r3, [r3, #12]
+ 8002a70: f003 0303 and.w r3, r3, #3
+}
+ 8002a74: 4618 mov r0, r3
+ 8002a76: 46bd mov sp, r7
+ 8002a78: f85d 7b04 ldr.w r7, [sp], #4
+ 8002a7c: 4770 bx lr
+
+08002a7e <LL_RCC_IsActiveFlag_HPRE>:
+ * @brief Check if HCLK1 prescaler flag value has been applied or not
+ * @rmtoll CFGR HPREF LL_RCC_IsActiveFlag_HPRE
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_HPRE(void)
+{
+ 8002a7e: b480 push {r7}
+ 8002a80: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CFGR, RCC_CFGR_HPREF) == (RCC_CFGR_HPREF)) ? 1UL : 0UL);
+ 8002a82: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002a86: 689b ldr r3, [r3, #8]
+ 8002a88: f403 3380 and.w r3, r3, #65536 @ 0x10000
+ 8002a8c: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
+ 8002a90: d101 bne.n 8002a96 <LL_RCC_IsActiveFlag_HPRE+0x18>
+ 8002a92: 2301 movs r3, #1
+ 8002a94: e000 b.n 8002a98 <LL_RCC_IsActiveFlag_HPRE+0x1a>
+ 8002a96: 2300 movs r3, #0
+}
+ 8002a98: 4618 mov r0, r3
+ 8002a9a: 46bd mov sp, r7
+ 8002a9c: f85d 7b04 ldr.w r7, [sp], #4
+ 8002aa0: 4770 bx lr
+
+08002aa2 <LL_RCC_IsActiveFlag_C2HPRE>:
+ * @brief Check if HCLK2 prescaler flag value has been applied or not
+ * @rmtoll EXTCFGR C2HPREF LL_RCC_IsActiveFlag_C2HPRE
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_C2HPRE(void)
+{
+ 8002aa2: b480 push {r7}
+ 8002aa4: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->EXTCFGR, RCC_EXTCFGR_C2HPREF) == (RCC_EXTCFGR_C2HPREF)) ? 1UL : 0UL);
+ 8002aa6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002aaa: f8d3 3108 ldr.w r3, [r3, #264] @ 0x108
+ 8002aae: f403 3300 and.w r3, r3, #131072 @ 0x20000
+ 8002ab2: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
+ 8002ab6: d101 bne.n 8002abc <LL_RCC_IsActiveFlag_C2HPRE+0x1a>
+ 8002ab8: 2301 movs r3, #1
+ 8002aba: e000 b.n 8002abe <LL_RCC_IsActiveFlag_C2HPRE+0x1c>
+ 8002abc: 2300 movs r3, #0
+}
+ 8002abe: 4618 mov r0, r3
+ 8002ac0: 46bd mov sp, r7
+ 8002ac2: f85d 7b04 ldr.w r7, [sp], #4
+ 8002ac6: 4770 bx lr
+
+08002ac8 <LL_RCC_IsActiveFlag_SHDHPRE>:
+ * @brief Check if HCLK4 prescaler flag value has been applied or not
+ * @rmtoll EXTCFGR SHDHPREF LL_RCC_IsActiveFlag_SHDHPRE
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_SHDHPRE(void)
+{
+ 8002ac8: b480 push {r7}
+ 8002aca: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->EXTCFGR, RCC_EXTCFGR_SHDHPREF) == (RCC_EXTCFGR_SHDHPREF)) ? 1UL : 0UL);
+ 8002acc: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002ad0: f8d3 3108 ldr.w r3, [r3, #264] @ 0x108
+ 8002ad4: f403 3380 and.w r3, r3, #65536 @ 0x10000
+ 8002ad8: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
+ 8002adc: d101 bne.n 8002ae2 <LL_RCC_IsActiveFlag_SHDHPRE+0x1a>
+ 8002ade: 2301 movs r3, #1
+ 8002ae0: e000 b.n 8002ae4 <LL_RCC_IsActiveFlag_SHDHPRE+0x1c>
+ 8002ae2: 2300 movs r3, #0
+}
+ 8002ae4: 4618 mov r0, r3
+ 8002ae6: 46bd mov sp, r7
+ 8002ae8: f85d 7b04 ldr.w r7, [sp], #4
+ 8002aec: 4770 bx lr
+
+08002aee <LL_RCC_IsActiveFlag_PPRE1>:
+ * @brief Check if PLCK1 prescaler flag value has been applied or not
+ * @rmtoll CFGR PPRE1F LL_RCC_IsActiveFlag_PPRE1
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PPRE1(void)
+{
+ 8002aee: b480 push {r7}
+ 8002af0: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1F) == (RCC_CFGR_PPRE1F)) ? 1UL : 0UL);
+ 8002af2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002af6: 689b ldr r3, [r3, #8]
+ 8002af8: f403 3300 and.w r3, r3, #131072 @ 0x20000
+ 8002afc: f5b3 3f00 cmp.w r3, #131072 @ 0x20000
+ 8002b00: d101 bne.n 8002b06 <LL_RCC_IsActiveFlag_PPRE1+0x18>
+ 8002b02: 2301 movs r3, #1
+ 8002b04: e000 b.n 8002b08 <LL_RCC_IsActiveFlag_PPRE1+0x1a>
+ 8002b06: 2300 movs r3, #0
+}
+ 8002b08: 4618 mov r0, r3
+ 8002b0a: 46bd mov sp, r7
+ 8002b0c: f85d 7b04 ldr.w r7, [sp], #4
+ 8002b10: 4770 bx lr
+
+08002b12 <LL_RCC_IsActiveFlag_PPRE2>:
+ * @brief Check if PLCK2 prescaler flag value has been applied or not
+ * @rmtoll CFGR PPRE2F LL_RCC_IsActiveFlag_PPRE2
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_RCC_IsActiveFlag_PPRE2(void)
+{
+ 8002b12: b480 push {r7}
+ 8002b14: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2F) == (RCC_CFGR_PPRE2F)) ? 1UL : 0UL);
+ 8002b16: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8002b1a: 689b ldr r3, [r3, #8]
+ 8002b1c: f403 2380 and.w r3, r3, #262144 @ 0x40000
+ 8002b20: f5b3 2f80 cmp.w r3, #262144 @ 0x40000
+ 8002b24: d101 bne.n 8002b2a <LL_RCC_IsActiveFlag_PPRE2+0x18>
+ 8002b26: 2301 movs r3, #1
+ 8002b28: e000 b.n 8002b2c <LL_RCC_IsActiveFlag_PPRE2+0x1a>
+ 8002b2a: 2300 movs r3, #0
+}
+ 8002b2c: 4618 mov r0, r3
+ 8002b2e: 46bd mov sp, r7
+ 8002b30: f85d 7b04 ldr.w r7, [sp], #4
+ 8002b34: 4770 bx lr
+ ...
+
+08002b38 <HAL_RCC_OscConfig>:
+ * @note The PLL is not disabled when used as system clock.
+ * @note The PLL source is not updated when used as PLLSAI1 clock source.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
+{
+ 8002b38: b590 push {r4, r7, lr}
+ 8002b3a: b08d sub sp, #52 @ 0x34
+ 8002b3c: af00 add r7, sp, #0
+ 8002b3e: 6078 str r0, [r7, #4]
+ uint32_t tickstart;
+
+ /* Check Null pointer */
+ if (RCC_OscInitStruct == NULL)
+ 8002b40: 687b ldr r3, [r7, #4]
+ 8002b42: 2b00 cmp r3, #0
+ 8002b44: d101 bne.n 8002b4a <HAL_RCC_OscConfig+0x12>
+ {
+ return HAL_ERROR;
+ 8002b46: 2301 movs r3, #1
+ 8002b48: e363 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+
+ /* Check the parameters */
+ assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
+
+ /*----------------------------- MSI Configuration --------------------------*/
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_MSI) == RCC_OSCILLATORTYPE_MSI)
+ 8002b4a: 687b ldr r3, [r7, #4]
+ 8002b4c: 681b ldr r3, [r3, #0]
+ 8002b4e: f003 0320 and.w r3, r3, #32
+ 8002b52: 2b00 cmp r3, #0
+ 8002b54: f000 808d beq.w 8002c72 <HAL_RCC_OscConfig+0x13a>
+ assert_param(IS_RCC_MSI(RCC_OscInitStruct->MSIState));
+ assert_param(IS_RCC_MSICALIBRATION_VALUE(RCC_OscInitStruct->MSICalibrationValue));
+ assert_param(IS_RCC_MSI_CLOCK_RANGE(RCC_OscInitStruct->MSIClockRange));
+
+ /* When the MSI is used as system clock it will not be disabled */
+ const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
+ 8002b58: f7ff fea1 bl 800289e <LL_RCC_GetSysClkSource>
+ 8002b5c: 62f8 str r0, [r7, #44] @ 0x2c
+ const uint32_t temp_plloscsrc = __HAL_RCC_GET_PLL_OSCSOURCE();
+ 8002b5e: f7ff ff82 bl 8002a66 <LL_RCC_PLL_GetMainSource>
+ 8002b62: 62b8 str r0, [r7, #40] @ 0x28
+ if ((temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_MSI) ||
+ 8002b64: 6afb ldr r3, [r7, #44] @ 0x2c
+ 8002b66: 2b00 cmp r3, #0
+ 8002b68: d005 beq.n 8002b76 <HAL_RCC_OscConfig+0x3e>
+ 8002b6a: 6afb ldr r3, [r7, #44] @ 0x2c
+ 8002b6c: 2b0c cmp r3, #12
+ 8002b6e: d147 bne.n 8002c00 <HAL_RCC_OscConfig+0xc8>
+ ((temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (temp_plloscsrc == RCC_PLLSOURCE_MSI)))
+ 8002b70: 6abb ldr r3, [r7, #40] @ 0x28
+ 8002b72: 2b01 cmp r3, #1
+ 8002b74: d144 bne.n 8002c00 <HAL_RCC_OscConfig+0xc8>
+ {
+ if (RCC_OscInitStruct->MSIState == RCC_MSI_OFF)
+ 8002b76: 687b ldr r3, [r7, #4]
+ 8002b78: 69db ldr r3, [r3, #28]
+ 8002b7a: 2b00 cmp r3, #0
+ 8002b7c: d101 bne.n 8002b82 <HAL_RCC_OscConfig+0x4a>
+ {
+ return HAL_ERROR;
+ 8002b7e: 2301 movs r3, #1
+ 8002b80: e347 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ else
+ {
+ /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
+ must be correctly programmed according to the frequency of the AHB4 clock
+ and the supply voltage of the device. */
+ if (RCC_OscInitStruct->MSIClockRange > __HAL_RCC_GET_MSI_RANGE())
+ 8002b82: 687b ldr r3, [r7, #4]
+ 8002b84: 6a5c ldr r4, [r3, #36] @ 0x24
+ 8002b86: f7ff fe4c bl 8002822 <LL_RCC_MSI_GetRange>
+ 8002b8a: 4603 mov r3, r0
+ 8002b8c: 429c cmp r4, r3
+ 8002b8e: d914 bls.n 8002bba <HAL_RCC_OscConfig+0x82>
+ {
+ /* First increase number of wait states update if necessary */
+ if (RCC_SetFlashLatencyFromMSIRange(RCC_OscInitStruct->MSIClockRange) != HAL_OK)
+ 8002b90: 687b ldr r3, [r7, #4]
+ 8002b92: 6a5b ldr r3, [r3, #36] @ 0x24
+ 8002b94: 4618 mov r0, r3
+ 8002b96: f000 fd03 bl 80035a0 <RCC_SetFlashLatencyFromMSIRange>
+ 8002b9a: 4603 mov r3, r0
+ 8002b9c: 2b00 cmp r3, #0
+ 8002b9e: d001 beq.n 8002ba4 <HAL_RCC_OscConfig+0x6c>
+ {
+ return HAL_ERROR;
+ 8002ba0: 2301 movs r3, #1
+ 8002ba2: e336 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+
+ /* Selects the Multiple Speed oscillator (MSI) clock range .*/
+ __HAL_RCC_MSI_RANGE_CONFIG(RCC_OscInitStruct->MSIClockRange);
+ 8002ba4: 687b ldr r3, [r7, #4]
+ 8002ba6: 6a5b ldr r3, [r3, #36] @ 0x24
+ 8002ba8: 4618 mov r0, r3
+ 8002baa: f7ff fe26 bl 80027fa <LL_RCC_MSI_SetRange>
+ /* Adjusts the Multiple Speed oscillator (MSI) calibration value.*/
+ __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->MSICalibrationValue);
+ 8002bae: 687b ldr r3, [r7, #4]
+ 8002bb0: 6a1b ldr r3, [r3, #32]
+ 8002bb2: 4618 mov r0, r3
+ 8002bb4: f7ff fe4a bl 800284c <LL_RCC_MSI_SetCalibTrimming>
+ 8002bb8: e013 b.n 8002be2 <HAL_RCC_OscConfig+0xaa>
+ }
+ else
+ {
+ /* Else, keep current flash latency while decreasing applies */
+ /* Selects the Multiple Speed oscillator (MSI) clock range .*/
+ __HAL_RCC_MSI_RANGE_CONFIG(RCC_OscInitStruct->MSIClockRange);
+ 8002bba: 687b ldr r3, [r7, #4]
+ 8002bbc: 6a5b ldr r3, [r3, #36] @ 0x24
+ 8002bbe: 4618 mov r0, r3
+ 8002bc0: f7ff fe1b bl 80027fa <LL_RCC_MSI_SetRange>
+ /* Adjusts the Multiple Speed oscillator (MSI) calibration value.*/
+ __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->MSICalibrationValue);
+ 8002bc4: 687b ldr r3, [r7, #4]
+ 8002bc6: 6a1b ldr r3, [r3, #32]
+ 8002bc8: 4618 mov r0, r3
+ 8002bca: f7ff fe3f bl 800284c <LL_RCC_MSI_SetCalibTrimming>
+
+ /* Decrease number of wait states update if necessary */
+ if (RCC_SetFlashLatencyFromMSIRange(RCC_OscInitStruct->MSIClockRange) != HAL_OK)
+ 8002bce: 687b ldr r3, [r7, #4]
+ 8002bd0: 6a5b ldr r3, [r3, #36] @ 0x24
+ 8002bd2: 4618 mov r0, r3
+ 8002bd4: f000 fce4 bl 80035a0 <RCC_SetFlashLatencyFromMSIRange>
+ 8002bd8: 4603 mov r3, r0
+ 8002bda: 2b00 cmp r3, #0
+ 8002bdc: d001 beq.n 8002be2 <HAL_RCC_OscConfig+0xaa>
+ {
+ return HAL_ERROR;
+ 8002bde: 2301 movs r3, #1
+ 8002be0: e317 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ }
+
+ /* Update the SystemCoreClock global variable */
+ SystemCoreClock = HAL_RCC_GetHCLKFreq();
+ 8002be2: f000 fcc9 bl 8003578 <HAL_RCC_GetHCLKFreq>
+ 8002be6: 4603 mov r3, r0
+ 8002be8: 4aa4 ldr r2, [pc, #656] @ (8002e7c <HAL_RCC_OscConfig+0x344>)
+ 8002bea: 6013 str r3, [r2, #0]
+
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
+ 8002bec: 4ba4 ldr r3, [pc, #656] @ (8002e80 <HAL_RCC_OscConfig+0x348>)
+ 8002bee: 681b ldr r3, [r3, #0]
+ 8002bf0: 4618 mov r0, r3
+ 8002bf2: f7fe fe89 bl 8001908 <HAL_InitTick>
+ 8002bf6: 4603 mov r3, r0
+ 8002bf8: 2b00 cmp r3, #0
+ 8002bfa: d039 beq.n 8002c70 <HAL_RCC_OscConfig+0x138>
+ {
+ return HAL_ERROR;
+ 8002bfc: 2301 movs r3, #1
+ 8002bfe: e308 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ }
+ else
+ {
+ /* Check the MSI State */
+ if (RCC_OscInitStruct->MSIState != RCC_MSI_OFF)
+ 8002c00: 687b ldr r3, [r7, #4]
+ 8002c02: 69db ldr r3, [r3, #28]
+ 8002c04: 2b00 cmp r3, #0
+ 8002c06: d01e beq.n 8002c46 <HAL_RCC_OscConfig+0x10e>
+ {
+ /* Enable the Internal High Speed oscillator (MSI). */
+ __HAL_RCC_MSI_ENABLE();
+ 8002c08: f7ff fdc8 bl 800279c <LL_RCC_MSI_Enable>
+
+ /* Get timeout */
+ tickstart = HAL_GetTick();
+ 8002c0c: f7fe feca bl 80019a4 <HAL_GetTick>
+ 8002c10: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till MSI is ready */
+ while (LL_RCC_MSI_IsReady() == 0U)
+ 8002c12: e008 b.n 8002c26 <HAL_RCC_OscConfig+0xee>
+ {
+ if ((HAL_GetTick() - tickstart) > MSI_TIMEOUT_VALUE)
+ 8002c14: f7fe fec6 bl 80019a4 <HAL_GetTick>
+ 8002c18: 4602 mov r2, r0
+ 8002c1a: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002c1c: 1ad3 subs r3, r2, r3
+ 8002c1e: 2b02 cmp r3, #2
+ 8002c20: d901 bls.n 8002c26 <HAL_RCC_OscConfig+0xee>
+ {
+ return HAL_TIMEOUT;
+ 8002c22: 2303 movs r3, #3
+ 8002c24: e2f5 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_MSI_IsReady() == 0U)
+ 8002c26: f7ff fdd7 bl 80027d8 <LL_RCC_MSI_IsReady>
+ 8002c2a: 4603 mov r3, r0
+ 8002c2c: 2b00 cmp r3, #0
+ 8002c2e: d0f1 beq.n 8002c14 <HAL_RCC_OscConfig+0xdc>
+ }
+ }
+
+ /* Selects the Multiple Speed oscillator (MSI) clock range .*/
+ __HAL_RCC_MSI_RANGE_CONFIG(RCC_OscInitStruct->MSIClockRange);
+ 8002c30: 687b ldr r3, [r7, #4]
+ 8002c32: 6a5b ldr r3, [r3, #36] @ 0x24
+ 8002c34: 4618 mov r0, r3
+ 8002c36: f7ff fde0 bl 80027fa <LL_RCC_MSI_SetRange>
+ /* Adjusts the Multiple Speed oscillator (MSI) calibration value.*/
+ __HAL_RCC_MSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->MSICalibrationValue);
+ 8002c3a: 687b ldr r3, [r7, #4]
+ 8002c3c: 6a1b ldr r3, [r3, #32]
+ 8002c3e: 4618 mov r0, r3
+ 8002c40: f7ff fe04 bl 800284c <LL_RCC_MSI_SetCalibTrimming>
+ 8002c44: e015 b.n 8002c72 <HAL_RCC_OscConfig+0x13a>
+
+ }
+ else
+ {
+ /* Disable the Internal High Speed oscillator (MSI). */
+ __HAL_RCC_MSI_DISABLE();
+ 8002c46: f7ff fdb8 bl 80027ba <LL_RCC_MSI_Disable>
+
+ /* Get timeout */
+ tickstart = HAL_GetTick();
+ 8002c4a: f7fe feab bl 80019a4 <HAL_GetTick>
+ 8002c4e: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till MSI is disabled */
+ while (LL_RCC_MSI_IsReady() != 0U)
+ 8002c50: e008 b.n 8002c64 <HAL_RCC_OscConfig+0x12c>
+ {
+ if ((HAL_GetTick() - tickstart) > MSI_TIMEOUT_VALUE)
+ 8002c52: f7fe fea7 bl 80019a4 <HAL_GetTick>
+ 8002c56: 4602 mov r2, r0
+ 8002c58: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002c5a: 1ad3 subs r3, r2, r3
+ 8002c5c: 2b02 cmp r3, #2
+ 8002c5e: d901 bls.n 8002c64 <HAL_RCC_OscConfig+0x12c>
+ {
+ return HAL_TIMEOUT;
+ 8002c60: 2303 movs r3, #3
+ 8002c62: e2d6 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_MSI_IsReady() != 0U)
+ 8002c64: f7ff fdb8 bl 80027d8 <LL_RCC_MSI_IsReady>
+ 8002c68: 4603 mov r3, r0
+ 8002c6a: 2b00 cmp r3, #0
+ 8002c6c: d1f1 bne.n 8002c52 <HAL_RCC_OscConfig+0x11a>
+ 8002c6e: e000 b.n 8002c72 <HAL_RCC_OscConfig+0x13a>
+ if (RCC_OscInitStruct->MSIState == RCC_MSI_OFF)
+ 8002c70: bf00 nop
+ }
+ }
+ }
+
+ /*------------------------------- HSE Configuration ------------------------*/
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ 8002c72: 687b ldr r3, [r7, #4]
+ 8002c74: 681b ldr r3, [r3, #0]
+ 8002c76: f003 0301 and.w r3, r3, #1
+ 8002c7a: 2b00 cmp r3, #0
+ 8002c7c: d047 beq.n 8002d0e <HAL_RCC_OscConfig+0x1d6>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
+
+ /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */
+ const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
+ 8002c7e: f7ff fe0e bl 800289e <LL_RCC_GetSysClkSource>
+ 8002c82: 6238 str r0, [r7, #32]
+ const uint32_t temp_plloscsrc = __HAL_RCC_GET_PLL_OSCSOURCE();
+ 8002c84: f7ff feef bl 8002a66 <LL_RCC_PLL_GetMainSource>
+ 8002c88: 61f8 str r0, [r7, #28]
+ if ((temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_HSE) ||
+ 8002c8a: 6a3b ldr r3, [r7, #32]
+ 8002c8c: 2b08 cmp r3, #8
+ 8002c8e: d005 beq.n 8002c9c <HAL_RCC_OscConfig+0x164>
+ 8002c90: 6a3b ldr r3, [r7, #32]
+ 8002c92: 2b0c cmp r3, #12
+ 8002c94: d108 bne.n 8002ca8 <HAL_RCC_OscConfig+0x170>
+ ((temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (temp_plloscsrc == RCC_PLLSOURCE_HSE)))
+ 8002c96: 69fb ldr r3, [r7, #28]
+ 8002c98: 2b03 cmp r3, #3
+ 8002c9a: d105 bne.n 8002ca8 <HAL_RCC_OscConfig+0x170>
+ {
+ if (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)
+ 8002c9c: 687b ldr r3, [r7, #4]
+ 8002c9e: 685b ldr r3, [r3, #4]
+ 8002ca0: 2b00 cmp r3, #0
+ 8002ca2: d134 bne.n 8002d0e <HAL_RCC_OscConfig+0x1d6>
+ {
+ return HAL_ERROR;
+ 8002ca4: 2301 movs r3, #1
+ 8002ca6: e2b4 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ }
+ else
+ {
+ /* Set the new HSE configuration ---------------------------------------*/
+ __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
+ 8002ca8: 687b ldr r3, [r7, #4]
+ 8002caa: 685b ldr r3, [r3, #4]
+ 8002cac: f5b3 3f80 cmp.w r3, #65536 @ 0x10000
+ 8002cb0: d102 bne.n 8002cb8 <HAL_RCC_OscConfig+0x180>
+ 8002cb2: f7ff fbf5 bl 80024a0 <LL_RCC_HSE_Enable>
+ 8002cb6: e001 b.n 8002cbc <HAL_RCC_OscConfig+0x184>
+ 8002cb8: f7ff fc01 bl 80024be <LL_RCC_HSE_Disable>
+
+ /* Check the HSE State */
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ 8002cbc: 687b ldr r3, [r7, #4]
+ 8002cbe: 685b ldr r3, [r3, #4]
+ 8002cc0: 2b00 cmp r3, #0
+ 8002cc2: d012 beq.n 8002cea <HAL_RCC_OscConfig+0x1b2>
+ {
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002cc4: f7fe fe6e bl 80019a4 <HAL_GetTick>
+ 8002cc8: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till HSE is ready */
+ while (LL_RCC_HSE_IsReady() == 0U)
+ 8002cca: e008 b.n 8002cde <HAL_RCC_OscConfig+0x1a6>
+ {
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
+ 8002ccc: f7fe fe6a bl 80019a4 <HAL_GetTick>
+ 8002cd0: 4602 mov r2, r0
+ 8002cd2: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002cd4: 1ad3 subs r3, r2, r3
+ 8002cd6: 2b64 cmp r3, #100 @ 0x64
+ 8002cd8: d901 bls.n 8002cde <HAL_RCC_OscConfig+0x1a6>
+ {
+ return HAL_TIMEOUT;
+ 8002cda: 2303 movs r3, #3
+ 8002cdc: e299 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_HSE_IsReady() == 0U)
+ 8002cde: f7ff fbfd bl 80024dc <LL_RCC_HSE_IsReady>
+ 8002ce2: 4603 mov r3, r0
+ 8002ce4: 2b00 cmp r3, #0
+ 8002ce6: d0f1 beq.n 8002ccc <HAL_RCC_OscConfig+0x194>
+ 8002ce8: e011 b.n 8002d0e <HAL_RCC_OscConfig+0x1d6>
+ }
+ }
+ else
+ {
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002cea: f7fe fe5b bl 80019a4 <HAL_GetTick>
+ 8002cee: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till HSE is disabled */
+ while (LL_RCC_HSE_IsReady() != 0U)
+ 8002cf0: e008 b.n 8002d04 <HAL_RCC_OscConfig+0x1cc>
+ {
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
+ 8002cf2: f7fe fe57 bl 80019a4 <HAL_GetTick>
+ 8002cf6: 4602 mov r2, r0
+ 8002cf8: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002cfa: 1ad3 subs r3, r2, r3
+ 8002cfc: 2b64 cmp r3, #100 @ 0x64
+ 8002cfe: d901 bls.n 8002d04 <HAL_RCC_OscConfig+0x1cc>
+ {
+ return HAL_TIMEOUT;
+ 8002d00: 2303 movs r3, #3
+ 8002d02: e286 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_HSE_IsReady() != 0U)
+ 8002d04: f7ff fbea bl 80024dc <LL_RCC_HSE_IsReady>
+ 8002d08: 4603 mov r3, r0
+ 8002d0a: 2b00 cmp r3, #0
+ 8002d0c: d1f1 bne.n 8002cf2 <HAL_RCC_OscConfig+0x1ba>
+ }
+ }
+ }
+
+ /*----------------------------- HSI Configuration --------------------------*/
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ 8002d0e: 687b ldr r3, [r7, #4]
+ 8002d10: 681b ldr r3, [r3, #0]
+ 8002d12: f003 0302 and.w r3, r3, #2
+ 8002d16: 2b00 cmp r3, #0
+ 8002d18: d04c beq.n 8002db4 <HAL_RCC_OscConfig+0x27c>
+ /* Check the parameters */
+ assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
+ assert_param(IS_RCC_HSI_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
+
+ /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
+ const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
+ 8002d1a: f7ff fdc0 bl 800289e <LL_RCC_GetSysClkSource>
+ 8002d1e: 61b8 str r0, [r7, #24]
+ const uint32_t temp_plloscsrc = __HAL_RCC_GET_PLL_OSCSOURCE();
+ 8002d20: f7ff fea1 bl 8002a66 <LL_RCC_PLL_GetMainSource>
+ 8002d24: 6178 str r0, [r7, #20]
+ if ((temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_HSI) ||
+ 8002d26: 69bb ldr r3, [r7, #24]
+ 8002d28: 2b04 cmp r3, #4
+ 8002d2a: d005 beq.n 8002d38 <HAL_RCC_OscConfig+0x200>
+ 8002d2c: 69bb ldr r3, [r7, #24]
+ 8002d2e: 2b0c cmp r3, #12
+ 8002d30: d10e bne.n 8002d50 <HAL_RCC_OscConfig+0x218>
+ ((temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (temp_plloscsrc == RCC_PLLSOURCE_HSI)))
+ 8002d32: 697b ldr r3, [r7, #20]
+ 8002d34: 2b02 cmp r3, #2
+ 8002d36: d10b bne.n 8002d50 <HAL_RCC_OscConfig+0x218>
+ {
+ /* When HSI is used as system clock it will not be disabled */
+ if (RCC_OscInitStruct->HSIState == RCC_HSI_OFF)
+ 8002d38: 687b ldr r3, [r7, #4]
+ 8002d3a: 68db ldr r3, [r3, #12]
+ 8002d3c: 2b00 cmp r3, #0
+ 8002d3e: d101 bne.n 8002d44 <HAL_RCC_OscConfig+0x20c>
+ {
+ return HAL_ERROR;
+ 8002d40: 2301 movs r3, #1
+ 8002d42: e266 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ /* Otherwise, just the calibration is allowed */
+ else
+ {
+ /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
+ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
+ 8002d44: 687b ldr r3, [r7, #4]
+ 8002d46: 691b ldr r3, [r3, #16]
+ 8002d48: 4618 mov r0, r3
+ 8002d4a: f7ff fc09 bl 8002560 <LL_RCC_HSI_SetCalibTrimming>
+ if (RCC_OscInitStruct->HSIState == RCC_HSI_OFF)
+ 8002d4e: e031 b.n 8002db4 <HAL_RCC_OscConfig+0x27c>
+ }
+ }
+ else
+ {
+ /* Check the HSI State */
+ if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF)
+ 8002d50: 687b ldr r3, [r7, #4]
+ 8002d52: 68db ldr r3, [r3, #12]
+ 8002d54: 2b00 cmp r3, #0
+ 8002d56: d019 beq.n 8002d8c <HAL_RCC_OscConfig+0x254>
+ {
+ /* Enable the Internal High Speed oscillator (HSI). */
+ __HAL_RCC_HSI_ENABLE();
+ 8002d58: f7ff fbd2 bl 8002500 <LL_RCC_HSI_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002d5c: f7fe fe22 bl 80019a4 <HAL_GetTick>
+ 8002d60: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till HSI is ready */
+ while (LL_RCC_HSI_IsReady() == 0U)
+ 8002d62: e008 b.n 8002d76 <HAL_RCC_OscConfig+0x23e>
+ {
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
+ 8002d64: f7fe fe1e bl 80019a4 <HAL_GetTick>
+ 8002d68: 4602 mov r2, r0
+ 8002d6a: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002d6c: 1ad3 subs r3, r2, r3
+ 8002d6e: 2b02 cmp r3, #2
+ 8002d70: d901 bls.n 8002d76 <HAL_RCC_OscConfig+0x23e>
+ {
+ return HAL_TIMEOUT;
+ 8002d72: 2303 movs r3, #3
+ 8002d74: e24d b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_HSI_IsReady() == 0U)
+ 8002d76: f7ff fbe1 bl 800253c <LL_RCC_HSI_IsReady>
+ 8002d7a: 4603 mov r3, r0
+ 8002d7c: 2b00 cmp r3, #0
+ 8002d7e: d0f1 beq.n 8002d64 <HAL_RCC_OscConfig+0x22c>
+ }
+ }
+
+ /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/
+ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);
+ 8002d80: 687b ldr r3, [r7, #4]
+ 8002d82: 691b ldr r3, [r3, #16]
+ 8002d84: 4618 mov r0, r3
+ 8002d86: f7ff fbeb bl 8002560 <LL_RCC_HSI_SetCalibTrimming>
+ 8002d8a: e013 b.n 8002db4 <HAL_RCC_OscConfig+0x27c>
+ }
+ else
+ {
+ /* Disable the Internal High Speed oscillator (HSI). */
+ __HAL_RCC_HSI_DISABLE();
+ 8002d8c: f7ff fbc7 bl 800251e <LL_RCC_HSI_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002d90: f7fe fe08 bl 80019a4 <HAL_GetTick>
+ 8002d94: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till HSI is disabled */
+ while (LL_RCC_HSI_IsReady() != 0U)
+ 8002d96: e008 b.n 8002daa <HAL_RCC_OscConfig+0x272>
+ {
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
+ 8002d98: f7fe fe04 bl 80019a4 <HAL_GetTick>
+ 8002d9c: 4602 mov r2, r0
+ 8002d9e: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002da0: 1ad3 subs r3, r2, r3
+ 8002da2: 2b02 cmp r3, #2
+ 8002da4: d901 bls.n 8002daa <HAL_RCC_OscConfig+0x272>
+ {
+ return HAL_TIMEOUT;
+ 8002da6: 2303 movs r3, #3
+ 8002da8: e233 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_HSI_IsReady() != 0U)
+ 8002daa: f7ff fbc7 bl 800253c <LL_RCC_HSI_IsReady>
+ 8002dae: 4603 mov r3, r0
+ 8002db0: 2b00 cmp r3, #0
+ 8002db2: d1f1 bne.n 8002d98 <HAL_RCC_OscConfig+0x260>
+ }
+ }
+ }
+ /*------------------------------ LSI Configuration (LSI1 or LSI2) -------------------------*/
+
+ if ((((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI1) == RCC_OSCILLATORTYPE_LSI1) || \
+ 8002db4: 687b ldr r3, [r7, #4]
+ 8002db6: 681b ldr r3, [r3, #0]
+ 8002db8: f003 0308 and.w r3, r3, #8
+ 8002dbc: 2b00 cmp r3, #0
+ 8002dbe: d106 bne.n 8002dce <HAL_RCC_OscConfig+0x296>
+ (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI2) == RCC_OSCILLATORTYPE_LSI2))
+ 8002dc0: 687b ldr r3, [r7, #4]
+ 8002dc2: 681b ldr r3, [r3, #0]
+ 8002dc4: f003 0310 and.w r3, r3, #16
+ if ((((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI1) == RCC_OSCILLATORTYPE_LSI1) || \
+ 8002dc8: 2b00 cmp r3, #0
+ 8002dca: f000 80a3 beq.w 8002f14 <HAL_RCC_OscConfig+0x3dc>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
+
+ /* Check the LSI State */
+ if (RCC_OscInitStruct->LSIState != RCC_LSI_OFF)
+ 8002dce: 687b ldr r3, [r7, #4]
+ 8002dd0: 695b ldr r3, [r3, #20]
+ 8002dd2: 2b00 cmp r3, #0
+ 8002dd4: d076 beq.n 8002ec4 <HAL_RCC_OscConfig+0x38c>
+ {
+ /*------------------------------ LSI2 selected by default (when Switch ON) -------------------------*/
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI2) == RCC_OSCILLATORTYPE_LSI2)
+ 8002dd6: 687b ldr r3, [r7, #4]
+ 8002dd8: 681b ldr r3, [r3, #0]
+ 8002dda: f003 0310 and.w r3, r3, #16
+ 8002dde: 2b00 cmp r3, #0
+ 8002de0: d046 beq.n 8002e70 <HAL_RCC_OscConfig+0x338>
+ {
+ assert_param(IS_RCC_LSI2_CALIBRATION_VALUE(RCC_OscInitStruct->LSI2CalibrationValue));
+
+ /* 1. Check LSI1 state and enable if required */
+ if (LL_RCC_LSI1_IsReady() == 0U)
+ 8002de2: f7ff fc7e bl 80026e2 <LL_RCC_LSI1_IsReady>
+ 8002de6: 4603 mov r3, r0
+ 8002de8: 2b00 cmp r3, #0
+ 8002dea: d113 bne.n 8002e14 <HAL_RCC_OscConfig+0x2dc>
+ {
+ /* This is required to enable LSI1 before enabling LSI2 */
+ __HAL_RCC_LSI1_ENABLE();
+ 8002dec: f7ff fc57 bl 800269e <LL_RCC_LSI1_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002df0: f7fe fdd8 bl 80019a4 <HAL_GetTick>
+ 8002df4: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSI1 is ready */
+ while (LL_RCC_LSI1_IsReady() == 0U)
+ 8002df6: e008 b.n 8002e0a <HAL_RCC_OscConfig+0x2d2>
+ {
+ if ((HAL_GetTick() - tickstart) > LSI1_TIMEOUT_VALUE)
+ 8002df8: f7fe fdd4 bl 80019a4 <HAL_GetTick>
+ 8002dfc: 4602 mov r2, r0
+ 8002dfe: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002e00: 1ad3 subs r3, r2, r3
+ 8002e02: 2b02 cmp r3, #2
+ 8002e04: d901 bls.n 8002e0a <HAL_RCC_OscConfig+0x2d2>
+ {
+ return HAL_TIMEOUT;
+ 8002e06: 2303 movs r3, #3
+ 8002e08: e203 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI1_IsReady() == 0U)
+ 8002e0a: f7ff fc6a bl 80026e2 <LL_RCC_LSI1_IsReady>
+ 8002e0e: 4603 mov r3, r0
+ 8002e10: 2b00 cmp r3, #0
+ 8002e12: d0f1 beq.n 8002df8 <HAL_RCC_OscConfig+0x2c0>
+ }
+ }
+ }
+
+ /* 2. Enable the Internal Low Speed oscillator (LSI2) and set trimming value */
+ __HAL_RCC_LSI2_ENABLE();
+ 8002e14: f7ff fc77 bl 8002706 <LL_RCC_LSI2_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002e18: f7fe fdc4 bl 80019a4 <HAL_GetTick>
+ 8002e1c: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSI2 is ready */
+ while (LL_RCC_LSI2_IsReady() == 0U)
+ 8002e1e: e008 b.n 8002e32 <HAL_RCC_OscConfig+0x2fa>
+ {
+ if ((HAL_GetTick() - tickstart) > LSI2_TIMEOUT_VALUE)
+ 8002e20: f7fe fdc0 bl 80019a4 <HAL_GetTick>
+ 8002e24: 4602 mov r2, r0
+ 8002e26: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002e28: 1ad3 subs r3, r2, r3
+ 8002e2a: 2b03 cmp r3, #3
+ 8002e2c: d901 bls.n 8002e32 <HAL_RCC_OscConfig+0x2fa>
+ {
+ return HAL_TIMEOUT;
+ 8002e2e: 2303 movs r3, #3
+ 8002e30: e1ef b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI2_IsReady() == 0U)
+ 8002e32: f7ff fc8a bl 800274a <LL_RCC_LSI2_IsReady>
+ 8002e36: 4603 mov r3, r0
+ 8002e38: 2b00 cmp r3, #0
+ 8002e3a: d0f1 beq.n 8002e20 <HAL_RCC_OscConfig+0x2e8>
+ }
+ }
+ /* Adjusts the Internal Low Spee oscillator (LSI2) calibration value */
+ __HAL_RCC_LSI2_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->LSI2CalibrationValue);
+ 8002e3c: 687b ldr r3, [r7, #4]
+ 8002e3e: 699b ldr r3, [r3, #24]
+ 8002e40: 4618 mov r0, r3
+ 8002e42: f7ff fc94 bl 800276e <LL_RCC_LSI2_SetTrimming>
+
+ /* 3. Disable LSI1 */
+
+ /* LSI1 was initially not enable, require to disable it */
+ __HAL_RCC_LSI1_DISABLE();
+ 8002e46: f7ff fc3b bl 80026c0 <LL_RCC_LSI1_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002e4a: f7fe fdab bl 80019a4 <HAL_GetTick>
+ 8002e4e: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSI1 is disabled */
+ while (LL_RCC_LSI1_IsReady() != 0U)
+ 8002e50: e008 b.n 8002e64 <HAL_RCC_OscConfig+0x32c>
+ {
+ if ((HAL_GetTick() - tickstart) > LSI1_TIMEOUT_VALUE)
+ 8002e52: f7fe fda7 bl 80019a4 <HAL_GetTick>
+ 8002e56: 4602 mov r2, r0
+ 8002e58: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002e5a: 1ad3 subs r3, r2, r3
+ 8002e5c: 2b02 cmp r3, #2
+ 8002e5e: d901 bls.n 8002e64 <HAL_RCC_OscConfig+0x32c>
+ {
+ return HAL_TIMEOUT;
+ 8002e60: 2303 movs r3, #3
+ 8002e62: e1d6 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI1_IsReady() != 0U)
+ 8002e64: f7ff fc3d bl 80026e2 <LL_RCC_LSI1_IsReady>
+ 8002e68: 4603 mov r3, r0
+ 8002e6a: 2b00 cmp r3, #0
+ 8002e6c: d1f1 bne.n 8002e52 <HAL_RCC_OscConfig+0x31a>
+ 8002e6e: e051 b.n 8002f14 <HAL_RCC_OscConfig+0x3dc>
+ else
+ {
+ /*------------------------------ LSI1 selected (only if LSI2 OFF)-------------------------*/
+
+ /* 1. Enable the Internal Low Speed oscillator (LSI1). */
+ __HAL_RCC_LSI1_ENABLE();
+ 8002e70: f7ff fc15 bl 800269e <LL_RCC_LSI1_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002e74: f7fe fd96 bl 80019a4 <HAL_GetTick>
+ 8002e78: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSI1 is ready */
+ while (LL_RCC_LSI1_IsReady() == 0U)
+ 8002e7a: e00c b.n 8002e96 <HAL_RCC_OscConfig+0x35e>
+ 8002e7c: 20000008 .word 0x20000008
+ 8002e80: 2000000c .word 0x2000000c
+ {
+ if ((HAL_GetTick() - tickstart) > LSI1_TIMEOUT_VALUE)
+ 8002e84: f7fe fd8e bl 80019a4 <HAL_GetTick>
+ 8002e88: 4602 mov r2, r0
+ 8002e8a: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002e8c: 1ad3 subs r3, r2, r3
+ 8002e8e: 2b02 cmp r3, #2
+ 8002e90: d901 bls.n 8002e96 <HAL_RCC_OscConfig+0x35e>
+ {
+ return HAL_TIMEOUT;
+ 8002e92: 2303 movs r3, #3
+ 8002e94: e1bd b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI1_IsReady() == 0U)
+ 8002e96: f7ff fc24 bl 80026e2 <LL_RCC_LSI1_IsReady>
+ 8002e9a: 4603 mov r3, r0
+ 8002e9c: 2b00 cmp r3, #0
+ 8002e9e: d0f1 beq.n 8002e84 <HAL_RCC_OscConfig+0x34c>
+ }
+ }
+ /*2. Switch OFF LSI2*/
+
+ /* Disable the Internal Low Speed oscillator (LSI2). */
+ __HAL_RCC_LSI2_DISABLE();
+ 8002ea0: f7ff fc42 bl 8002728 <LL_RCC_LSI2_Disable>
+
+ /* Wait till LSI2 is disabled */
+ while (LL_RCC_LSI2_IsReady() != 0U)
+ 8002ea4: e008 b.n 8002eb8 <HAL_RCC_OscConfig+0x380>
+ {
+ if ((HAL_GetTick() - tickstart) > LSI2_TIMEOUT_VALUE)
+ 8002ea6: f7fe fd7d bl 80019a4 <HAL_GetTick>
+ 8002eaa: 4602 mov r2, r0
+ 8002eac: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002eae: 1ad3 subs r3, r2, r3
+ 8002eb0: 2b03 cmp r3, #3
+ 8002eb2: d901 bls.n 8002eb8 <HAL_RCC_OscConfig+0x380>
+ {
+ return HAL_TIMEOUT;
+ 8002eb4: 2303 movs r3, #3
+ 8002eb6: e1ac b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI2_IsReady() != 0U)
+ 8002eb8: f7ff fc47 bl 800274a <LL_RCC_LSI2_IsReady>
+ 8002ebc: 4603 mov r3, r0
+ 8002ebe: 2b00 cmp r3, #0
+ 8002ec0: d1f1 bne.n 8002ea6 <HAL_RCC_OscConfig+0x36e>
+ 8002ec2: e027 b.n 8002f14 <HAL_RCC_OscConfig+0x3dc>
+ }
+ else
+ {
+
+ /* Disable the Internal Low Speed oscillator (LSI2). */
+ __HAL_RCC_LSI2_DISABLE();
+ 8002ec4: f7ff fc30 bl 8002728 <LL_RCC_LSI2_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002ec8: f7fe fd6c bl 80019a4 <HAL_GetTick>
+ 8002ecc: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSI2 is disabled */
+ while (LL_RCC_LSI2_IsReady() != 0U)
+ 8002ece: e008 b.n 8002ee2 <HAL_RCC_OscConfig+0x3aa>
+ {
+ if ((HAL_GetTick() - tickstart) > LSI2_TIMEOUT_VALUE)
+ 8002ed0: f7fe fd68 bl 80019a4 <HAL_GetTick>
+ 8002ed4: 4602 mov r2, r0
+ 8002ed6: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002ed8: 1ad3 subs r3, r2, r3
+ 8002eda: 2b03 cmp r3, #3
+ 8002edc: d901 bls.n 8002ee2 <HAL_RCC_OscConfig+0x3aa>
+ {
+ return HAL_TIMEOUT;
+ 8002ede: 2303 movs r3, #3
+ 8002ee0: e197 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI2_IsReady() != 0U)
+ 8002ee2: f7ff fc32 bl 800274a <LL_RCC_LSI2_IsReady>
+ 8002ee6: 4603 mov r3, r0
+ 8002ee8: 2b00 cmp r3, #0
+ 8002eea: d1f1 bne.n 8002ed0 <HAL_RCC_OscConfig+0x398>
+ }
+ }
+
+ /* Disable the Internal Low Speed oscillator (LSI1). */
+ __HAL_RCC_LSI1_DISABLE();
+ 8002eec: f7ff fbe8 bl 80026c0 <LL_RCC_LSI1_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002ef0: f7fe fd58 bl 80019a4 <HAL_GetTick>
+ 8002ef4: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSI1 is disabled */
+ while (LL_RCC_LSI1_IsReady() != 0U)
+ 8002ef6: e008 b.n 8002f0a <HAL_RCC_OscConfig+0x3d2>
+ {
+ if ((HAL_GetTick() - tickstart) > LSI1_TIMEOUT_VALUE)
+ 8002ef8: f7fe fd54 bl 80019a4 <HAL_GetTick>
+ 8002efc: 4602 mov r2, r0
+ 8002efe: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002f00: 1ad3 subs r3, r2, r3
+ 8002f02: 2b02 cmp r3, #2
+ 8002f04: d901 bls.n 8002f0a <HAL_RCC_OscConfig+0x3d2>
+ {
+ return HAL_TIMEOUT;
+ 8002f06: 2303 movs r3, #3
+ 8002f08: e183 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSI1_IsReady() != 0U)
+ 8002f0a: f7ff fbea bl 80026e2 <LL_RCC_LSI1_IsReady>
+ 8002f0e: 4603 mov r3, r0
+ 8002f10: 2b00 cmp r3, #0
+ 8002f12: d1f1 bne.n 8002ef8 <HAL_RCC_OscConfig+0x3c0>
+ }
+ }
+ }
+
+ /*------------------------------ LSE Configuration -------------------------*/
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ 8002f14: 687b ldr r3, [r7, #4]
+ 8002f16: 681b ldr r3, [r3, #0]
+ 8002f18: f003 0304 and.w r3, r3, #4
+ 8002f1c: 2b00 cmp r3, #0
+ 8002f1e: d05b beq.n 8002fd8 <HAL_RCC_OscConfig+0x4a0>
+ assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
+
+ /* Update LSE configuration in Backup Domain control register */
+ /* Requires to enable write access to Backup Domain of necessary */
+
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ 8002f20: 4ba7 ldr r3, [pc, #668] @ (80031c0 <HAL_RCC_OscConfig+0x688>)
+ 8002f22: 681b ldr r3, [r3, #0]
+ 8002f24: f403 7380 and.w r3, r3, #256 @ 0x100
+ 8002f28: 2b00 cmp r3, #0
+ 8002f2a: d114 bne.n 8002f56 <HAL_RCC_OscConfig+0x41e>
+ {
+ /* Enable write access to Backup domain */
+ HAL_PWR_EnableBkUpAccess();
+ 8002f2c: f7ff fa5c bl 80023e8 <HAL_PWR_EnableBkUpAccess>
+
+ /* Wait for Backup domain Write protection disable */
+ tickstart = HAL_GetTick();
+ 8002f30: f7fe fd38 bl 80019a4 <HAL_GetTick>
+ 8002f34: 6278 str r0, [r7, #36] @ 0x24
+
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ 8002f36: e008 b.n 8002f4a <HAL_RCC_OscConfig+0x412>
+ {
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
+ 8002f38: f7fe fd34 bl 80019a4 <HAL_GetTick>
+ 8002f3c: 4602 mov r2, r0
+ 8002f3e: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002f40: 1ad3 subs r3, r2, r3
+ 8002f42: 2b02 cmp r3, #2
+ 8002f44: d901 bls.n 8002f4a <HAL_RCC_OscConfig+0x412>
+ {
+ return HAL_TIMEOUT;
+ 8002f46: 2303 movs r3, #3
+ 8002f48: e163 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ 8002f4a: 4b9d ldr r3, [pc, #628] @ (80031c0 <HAL_RCC_OscConfig+0x688>)
+ 8002f4c: 681b ldr r3, [r3, #0]
+ 8002f4e: f403 7380 and.w r3, r3, #256 @ 0x100
+ 8002f52: 2b00 cmp r3, #0
+ 8002f54: d0f0 beq.n 8002f38 <HAL_RCC_OscConfig+0x400>
+ }
+ }
+ }
+
+ /* Set the new LSE configuration -----------------------------------------*/
+ __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
+ 8002f56: 687b ldr r3, [r7, #4]
+ 8002f58: 689b ldr r3, [r3, #8]
+ 8002f5a: 2b01 cmp r3, #1
+ 8002f5c: d102 bne.n 8002f64 <HAL_RCC_OscConfig+0x42c>
+ 8002f5e: f7ff fb48 bl 80025f2 <LL_RCC_LSE_Enable>
+ 8002f62: e00c b.n 8002f7e <HAL_RCC_OscConfig+0x446>
+ 8002f64: 687b ldr r3, [r7, #4]
+ 8002f66: 689b ldr r3, [r3, #8]
+ 8002f68: 2b05 cmp r3, #5
+ 8002f6a: d104 bne.n 8002f76 <HAL_RCC_OscConfig+0x43e>
+ 8002f6c: f7ff fb63 bl 8002636 <LL_RCC_LSE_EnableBypass>
+ 8002f70: f7ff fb3f bl 80025f2 <LL_RCC_LSE_Enable>
+ 8002f74: e003 b.n 8002f7e <HAL_RCC_OscConfig+0x446>
+ 8002f76: f7ff fb4d bl 8002614 <LL_RCC_LSE_Disable>
+ 8002f7a: f7ff fb6d bl 8002658 <LL_RCC_LSE_DisableBypass>
+
+ /* Check the LSE State */
+ if (RCC_OscInitStruct->LSEState != RCC_LSE_OFF)
+ 8002f7e: 687b ldr r3, [r7, #4]
+ 8002f80: 689b ldr r3, [r3, #8]
+ 8002f82: 2b00 cmp r3, #0
+ 8002f84: d014 beq.n 8002fb0 <HAL_RCC_OscConfig+0x478>
+ {
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002f86: f7fe fd0d bl 80019a4 <HAL_GetTick>
+ 8002f8a: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSE is ready */
+ while (LL_RCC_LSE_IsReady() == 0U)
+ 8002f8c: e00a b.n 8002fa4 <HAL_RCC_OscConfig+0x46c>
+ {
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
+ 8002f8e: f7fe fd09 bl 80019a4 <HAL_GetTick>
+ 8002f92: 4602 mov r2, r0
+ 8002f94: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002f96: 1ad3 subs r3, r2, r3
+ 8002f98: f241 3288 movw r2, #5000 @ 0x1388
+ 8002f9c: 4293 cmp r3, r2
+ 8002f9e: d901 bls.n 8002fa4 <HAL_RCC_OscConfig+0x46c>
+ {
+ return HAL_TIMEOUT;
+ 8002fa0: 2303 movs r3, #3
+ 8002fa2: e136 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSE_IsReady() == 0U)
+ 8002fa4: f7ff fb69 bl 800267a <LL_RCC_LSE_IsReady>
+ 8002fa8: 4603 mov r3, r0
+ 8002faa: 2b00 cmp r3, #0
+ 8002fac: d0ef beq.n 8002f8e <HAL_RCC_OscConfig+0x456>
+ 8002fae: e013 b.n 8002fd8 <HAL_RCC_OscConfig+0x4a0>
+ }
+ }
+ else
+ {
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002fb0: f7fe fcf8 bl 80019a4 <HAL_GetTick>
+ 8002fb4: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till LSE is disabled */
+ while (LL_RCC_LSE_IsReady() != 0U)
+ 8002fb6: e00a b.n 8002fce <HAL_RCC_OscConfig+0x496>
+ {
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
+ 8002fb8: f7fe fcf4 bl 80019a4 <HAL_GetTick>
+ 8002fbc: 4602 mov r2, r0
+ 8002fbe: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8002fc0: 1ad3 subs r3, r2, r3
+ 8002fc2: f241 3288 movw r2, #5000 @ 0x1388
+ 8002fc6: 4293 cmp r3, r2
+ 8002fc8: d901 bls.n 8002fce <HAL_RCC_OscConfig+0x496>
+ {
+ return HAL_TIMEOUT;
+ 8002fca: 2303 movs r3, #3
+ 8002fcc: e121 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_LSE_IsReady() != 0U)
+ 8002fce: f7ff fb54 bl 800267a <LL_RCC_LSE_IsReady>
+ 8002fd2: 4603 mov r3, r0
+ 8002fd4: 2b00 cmp r3, #0
+ 8002fd6: d1ef bne.n 8002fb8 <HAL_RCC_OscConfig+0x480>
+ }
+
+ }
+#if defined(RCC_HSI48_SUPPORT)
+ /*------------------------------ HSI48 Configuration -----------------------*/
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI48) == RCC_OSCILLATORTYPE_HSI48)
+ 8002fd8: 687b ldr r3, [r7, #4]
+ 8002fda: 681b ldr r3, [r3, #0]
+ 8002fdc: f003 0340 and.w r3, r3, #64 @ 0x40
+ 8002fe0: 2b00 cmp r3, #0
+ 8002fe2: d02c beq.n 800303e <HAL_RCC_OscConfig+0x506>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_HSI48(RCC_OscInitStruct->HSI48State));
+
+ /* Check the HSI State */
+ if (RCC_OscInitStruct->HSI48State != RCC_HSI48_OFF)
+ 8002fe4: 687b ldr r3, [r7, #4]
+ 8002fe6: 6a9b ldr r3, [r3, #40] @ 0x28
+ 8002fe8: 2b00 cmp r3, #0
+ 8002fea: d014 beq.n 8003016 <HAL_RCC_OscConfig+0x4de>
+ {
+ /* Enable the Internal Low Speed oscillator (HSI48). */
+ __HAL_RCC_HSI48_ENABLE();
+ 8002fec: f7ff facd bl 800258a <LL_RCC_HSI48_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8002ff0: f7fe fcd8 bl 80019a4 <HAL_GetTick>
+ 8002ff4: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till HSI48 is ready */
+ while (LL_RCC_HSI48_IsReady() == 0U)
+ 8002ff6: e008 b.n 800300a <HAL_RCC_OscConfig+0x4d2>
+ {
+ if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
+ 8002ff8: f7fe fcd4 bl 80019a4 <HAL_GetTick>
+ 8002ffc: 4602 mov r2, r0
+ 8002ffe: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8003000: 1ad3 subs r3, r2, r3
+ 8003002: 2b02 cmp r3, #2
+ 8003004: d901 bls.n 800300a <HAL_RCC_OscConfig+0x4d2>
+ {
+ return HAL_TIMEOUT;
+ 8003006: 2303 movs r3, #3
+ 8003008: e103 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_HSI48_IsReady() == 0U)
+ 800300a: f7ff fae0 bl 80025ce <LL_RCC_HSI48_IsReady>
+ 800300e: 4603 mov r3, r0
+ 8003010: 2b00 cmp r3, #0
+ 8003012: d0f1 beq.n 8002ff8 <HAL_RCC_OscConfig+0x4c0>
+ 8003014: e013 b.n 800303e <HAL_RCC_OscConfig+0x506>
+ }
+ }
+ else
+ {
+ /* Disable the Internal Low Speed oscillator (HSI48). */
+ __HAL_RCC_HSI48_DISABLE();
+ 8003016: f7ff fac9 bl 80025ac <LL_RCC_HSI48_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 800301a: f7fe fcc3 bl 80019a4 <HAL_GetTick>
+ 800301e: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till HSI48 is disabled */
+ while (LL_RCC_HSI48_IsReady() != 0U)
+ 8003020: e008 b.n 8003034 <HAL_RCC_OscConfig+0x4fc>
+ {
+ if ((HAL_GetTick() - tickstart) > HSI48_TIMEOUT_VALUE)
+ 8003022: f7fe fcbf bl 80019a4 <HAL_GetTick>
+ 8003026: 4602 mov r2, r0
+ 8003028: 6a7b ldr r3, [r7, #36] @ 0x24
+ 800302a: 1ad3 subs r3, r2, r3
+ 800302c: 2b02 cmp r3, #2
+ 800302e: d901 bls.n 8003034 <HAL_RCC_OscConfig+0x4fc>
+ {
+ return HAL_TIMEOUT;
+ 8003030: 2303 movs r3, #3
+ 8003032: e0ee b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (LL_RCC_HSI48_IsReady() != 0U)
+ 8003034: f7ff facb bl 80025ce <LL_RCC_HSI48_IsReady>
+ 8003038: 4603 mov r3, r0
+ 800303a: 2b00 cmp r3, #0
+ 800303c: d1f1 bne.n 8003022 <HAL_RCC_OscConfig+0x4ea>
+#endif /* RCC_HSI48_SUPPORT */
+ /*-------------------------------- PLL Configuration -----------------------*/
+ /* Check the parameters */
+ assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));
+
+ if (RCC_OscInitStruct->PLL.PLLState != RCC_PLL_NONE)
+ 800303e: 687b ldr r3, [r7, #4]
+ 8003040: 6adb ldr r3, [r3, #44] @ 0x2c
+ 8003042: 2b00 cmp r3, #0
+ 8003044: f000 80e4 beq.w 8003210 <HAL_RCC_OscConfig+0x6d8>
+ {
+ const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
+ 8003048: f7ff fc29 bl 800289e <LL_RCC_GetSysClkSource>
+ 800304c: 6138 str r0, [r7, #16]
+ const uint32_t temp_pllconfig = RCC->PLLCFGR;
+ 800304e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003052: 68db ldr r3, [r3, #12]
+ 8003054: 60fb str r3, [r7, #12]
+
+ /* PLL On ? */
+ if (RCC_OscInitStruct->PLL.PLLState == RCC_PLL_ON)
+ 8003056: 687b ldr r3, [r7, #4]
+ 8003058: 6adb ldr r3, [r3, #44] @ 0x2c
+ 800305a: 2b02 cmp r3, #2
+ 800305c: f040 80b4 bne.w 80031c8 <HAL_RCC_OscConfig+0x690>
+ assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP));
+ assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ));
+ assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
+
+ /* Do nothing if PLL configuration is unchanged */
+ if ((READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ 8003060: 68fb ldr r3, [r7, #12]
+ 8003062: f003 0203 and.w r2, r3, #3
+ 8003066: 687b ldr r3, [r7, #4]
+ 8003068: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800306a: 429a cmp r2, r3
+ 800306c: d123 bne.n 80030b6 <HAL_RCC_OscConfig+0x57e>
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ 800306e: 68fb ldr r3, [r7, #12]
+ 8003070: f003 0270 and.w r2, r3, #112 @ 0x70
+ 8003074: 687b ldr r3, [r7, #4]
+ 8003076: 6b5b ldr r3, [r3, #52] @ 0x34
+ if ((READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ 8003078: 429a cmp r2, r3
+ 800307a: d11c bne.n 80030b6 <HAL_RCC_OscConfig+0x57e>
+ ((READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos) != RCC_OscInitStruct->PLL.PLLN) ||
+ 800307c: 68fb ldr r3, [r7, #12]
+ 800307e: 0a1b lsrs r3, r3, #8
+ 8003080: f003 027f and.w r2, r3, #127 @ 0x7f
+ 8003084: 687b ldr r3, [r7, #4]
+ 8003086: 6b9b ldr r3, [r3, #56] @ 0x38
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ 8003088: 429a cmp r2, r3
+ 800308a: d114 bne.n 80030b6 <HAL_RCC_OscConfig+0x57e>
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLP) != RCC_OscInitStruct->PLL.PLLP) ||
+ 800308c: 68fb ldr r3, [r7, #12]
+ 800308e: f403 1278 and.w r2, r3, #4063232 @ 0x3e0000
+ 8003092: 687b ldr r3, [r7, #4]
+ 8003094: 6bdb ldr r3, [r3, #60] @ 0x3c
+ ((READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos) != RCC_OscInitStruct->PLL.PLLN) ||
+ 8003096: 429a cmp r2, r3
+ 8003098: d10d bne.n 80030b6 <HAL_RCC_OscConfig+0x57e>
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLQ) != RCC_OscInitStruct->PLL.PLLQ) ||
+ 800309a: 68fb ldr r3, [r7, #12]
+ 800309c: f003 6260 and.w r2, r3, #234881024 @ 0xe000000
+ 80030a0: 687b ldr r3, [r7, #4]
+ 80030a2: 6c1b ldr r3, [r3, #64] @ 0x40
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLP) != RCC_OscInitStruct->PLL.PLLP) ||
+ 80030a4: 429a cmp r2, r3
+ 80030a6: d106 bne.n 80030b6 <HAL_RCC_OscConfig+0x57e>
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLR) != RCC_OscInitStruct->PLL.PLLR))
+ 80030a8: 68fb ldr r3, [r7, #12]
+ 80030aa: f003 4260 and.w r2, r3, #3758096384 @ 0xe0000000
+ 80030ae: 687b ldr r3, [r7, #4]
+ 80030b0: 6c5b ldr r3, [r3, #68] @ 0x44
+ (READ_BIT(temp_pllconfig, RCC_PLLCFGR_PLLQ) != RCC_OscInitStruct->PLL.PLLQ) ||
+ 80030b2: 429a cmp r2, r3
+ 80030b4: d05d beq.n 8003172 <HAL_RCC_OscConfig+0x63a>
+ {
+ /* Check if the PLL is used as system clock or not */
+ if (temp_sysclksrc != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ 80030b6: 693b ldr r3, [r7, #16]
+ 80030b8: 2b0c cmp r3, #12
+ 80030ba: d058 beq.n 800316e <HAL_RCC_OscConfig+0x636>
+ {
+#if defined(SAI1)
+ /* Check if main PLL can be updated */
+ /* Not possible if the source is shared by other enabled PLLSAIx */
+ if (READ_BIT(RCC->CR, RCC_CR_PLLSAI1ON) != 0U)
+ 80030bc: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80030c0: 681b ldr r3, [r3, #0]
+ 80030c2: f003 6380 and.w r3, r3, #67108864 @ 0x4000000
+ 80030c6: 2b00 cmp r3, #0
+ 80030c8: d001 beq.n 80030ce <HAL_RCC_OscConfig+0x596>
+
+ {
+ return HAL_ERROR;
+ 80030ca: 2301 movs r3, #1
+ 80030cc: e0a1 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ else
+#endif /* SAI1 */
+ {
+ /* Disable the main PLL. */
+ __HAL_RCC_PLL_DISABLE();
+ 80030ce: f7ff fc84 bl 80029da <LL_RCC_PLL_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 80030d2: f7fe fc67 bl 80019a4 <HAL_GetTick>
+ 80030d6: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till PLL is ready */
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != 0U)
+ 80030d8: e008 b.n 80030ec <HAL_RCC_OscConfig+0x5b4>
+ {
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
+ 80030da: f7fe fc63 bl 80019a4 <HAL_GetTick>
+ 80030de: 4602 mov r2, r0
+ 80030e0: 6a7b ldr r3, [r7, #36] @ 0x24
+ 80030e2: 1ad3 subs r3, r2, r3
+ 80030e4: 2b02 cmp r3, #2
+ 80030e6: d901 bls.n 80030ec <HAL_RCC_OscConfig+0x5b4>
+ {
+ return HAL_TIMEOUT;
+ 80030e8: 2303 movs r3, #3
+ 80030ea: e092 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != 0U)
+ 80030ec: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80030f0: 681b ldr r3, [r3, #0]
+ 80030f2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
+ 80030f6: 2b00 cmp r3, #0
+ 80030f8: d1ef bne.n 80030da <HAL_RCC_OscConfig+0x5a2>
+ }
+ }
+
+ /* Configure the main PLL clock source, multiplication and division factors. */
+ __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource,
+ 80030fa: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80030fe: 68da ldr r2, [r3, #12]
+ 8003100: 4b30 ldr r3, [pc, #192] @ (80031c4 <HAL_RCC_OscConfig+0x68c>)
+ 8003102: 4013 ands r3, r2
+ 8003104: 687a ldr r2, [r7, #4]
+ 8003106: 6b11 ldr r1, [r2, #48] @ 0x30
+ 8003108: 687a ldr r2, [r7, #4]
+ 800310a: 6b52 ldr r2, [r2, #52] @ 0x34
+ 800310c: 4311 orrs r1, r2
+ 800310e: 687a ldr r2, [r7, #4]
+ 8003110: 6b92 ldr r2, [r2, #56] @ 0x38
+ 8003112: 0212 lsls r2, r2, #8
+ 8003114: 4311 orrs r1, r2
+ 8003116: 687a ldr r2, [r7, #4]
+ 8003118: 6bd2 ldr r2, [r2, #60] @ 0x3c
+ 800311a: 4311 orrs r1, r2
+ 800311c: 687a ldr r2, [r7, #4]
+ 800311e: 6c12 ldr r2, [r2, #64] @ 0x40
+ 8003120: 4311 orrs r1, r2
+ 8003122: 687a ldr r2, [r7, #4]
+ 8003124: 6c52 ldr r2, [r2, #68] @ 0x44
+ 8003126: 430a orrs r2, r1
+ 8003128: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800312c: 4313 orrs r3, r2
+ 800312e: 60cb str r3, [r1, #12]
+ RCC_OscInitStruct->PLL.PLLP,
+ RCC_OscInitStruct->PLL.PLLQ,
+ RCC_OscInitStruct->PLL.PLLR);
+
+ /* Enable the main PLL. */
+ __HAL_RCC_PLL_ENABLE();
+ 8003130: f7ff fc44 bl 80029bc <LL_RCC_PLL_Enable>
+
+ /* Enable PLL System Clock output. */
+ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_SYSCLK);
+ 8003134: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003138: 68db ldr r3, [r3, #12]
+ 800313a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 800313e: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
+ 8003142: 60d3 str r3, [r2, #12]
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003144: f7fe fc2e bl 80019a4 <HAL_GetTick>
+ 8003148: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till PLL is ready */
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == 0U)
+ 800314a: e008 b.n 800315e <HAL_RCC_OscConfig+0x626>
+ {
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
+ 800314c: f7fe fc2a bl 80019a4 <HAL_GetTick>
+ 8003150: 4602 mov r2, r0
+ 8003152: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8003154: 1ad3 subs r3, r2, r3
+ 8003156: 2b02 cmp r3, #2
+ 8003158: d901 bls.n 800315e <HAL_RCC_OscConfig+0x626>
+ {
+ return HAL_TIMEOUT;
+ 800315a: 2303 movs r3, #3
+ 800315c: e059 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == 0U)
+ 800315e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003162: 681b ldr r3, [r3, #0]
+ 8003164: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
+ 8003168: 2b00 cmp r3, #0
+ 800316a: d0ef beq.n 800314c <HAL_RCC_OscConfig+0x614>
+ if (temp_sysclksrc != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ 800316c: e050 b.n 8003210 <HAL_RCC_OscConfig+0x6d8>
+ }
+ }
+ else
+ {
+ /* PLL is already used as System core clock */
+ return HAL_ERROR;
+ 800316e: 2301 movs r3, #1
+ 8003170: e04f b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ else
+ {
+ /* PLL configuration is unchanged */
+ /* Re-enable PLL if it was disabled (ie. low power mode) */
+ if (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == 0U)
+ 8003172: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003176: 681b ldr r3, [r3, #0]
+ 8003178: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
+ 800317c: 2b00 cmp r3, #0
+ 800317e: d147 bne.n 8003210 <HAL_RCC_OscConfig+0x6d8>
+ {
+ /* Enable the main PLL. */
+ __HAL_RCC_PLL_ENABLE();
+ 8003180: f7ff fc1c bl 80029bc <LL_RCC_PLL_Enable>
+
+ /* Enable PLL System Clock output. */
+ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_SYSCLK);
+ 8003184: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003188: 68db ldr r3, [r3, #12]
+ 800318a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 800318e: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
+ 8003192: 60d3 str r3, [r2, #12]
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003194: f7fe fc06 bl 80019a4 <HAL_GetTick>
+ 8003198: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till PLL is ready */
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == 0U)
+ 800319a: e008 b.n 80031ae <HAL_RCC_OscConfig+0x676>
+ {
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
+ 800319c: f7fe fc02 bl 80019a4 <HAL_GetTick>
+ 80031a0: 4602 mov r2, r0
+ 80031a2: 6a7b ldr r3, [r7, #36] @ 0x24
+ 80031a4: 1ad3 subs r3, r2, r3
+ 80031a6: 2b02 cmp r3, #2
+ 80031a8: d901 bls.n 80031ae <HAL_RCC_OscConfig+0x676>
+ {
+ return HAL_TIMEOUT;
+ 80031aa: 2303 movs r3, #3
+ 80031ac: e031 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == 0U)
+ 80031ae: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80031b2: 681b ldr r3, [r3, #0]
+ 80031b4: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
+ 80031b8: 2b00 cmp r3, #0
+ 80031ba: d0ef beq.n 800319c <HAL_RCC_OscConfig+0x664>
+ 80031bc: e028 b.n 8003210 <HAL_RCC_OscConfig+0x6d8>
+ 80031be: bf00 nop
+ 80031c0: 58000400 .word 0x58000400
+ 80031c4: 11c1808c .word 0x11c1808c
+ }
+ }
+ else
+ {
+ /* Check that PLL is not used as system clock or not */
+ if (temp_sysclksrc != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ 80031c8: 693b ldr r3, [r7, #16]
+ 80031ca: 2b0c cmp r3, #12
+ 80031cc: d01e beq.n 800320c <HAL_RCC_OscConfig+0x6d4>
+ {
+ /* Disable the main PLL. */
+ __HAL_RCC_PLL_DISABLE();
+ 80031ce: f7ff fc04 bl 80029da <LL_RCC_PLL_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 80031d2: f7fe fbe7 bl 80019a4 <HAL_GetTick>
+ 80031d6: 6278 str r0, [r7, #36] @ 0x24
+
+ /* Wait till PLL is disabled */
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != 0U)
+ 80031d8: e008 b.n 80031ec <HAL_RCC_OscConfig+0x6b4>
+ {
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
+ 80031da: f7fe fbe3 bl 80019a4 <HAL_GetTick>
+ 80031de: 4602 mov r2, r0
+ 80031e0: 6a7b ldr r3, [r7, #36] @ 0x24
+ 80031e2: 1ad3 subs r3, r2, r3
+ 80031e4: 2b02 cmp r3, #2
+ 80031e6: d901 bls.n 80031ec <HAL_RCC_OscConfig+0x6b4>
+ {
+ return HAL_TIMEOUT;
+ 80031e8: 2303 movs r3, #3
+ 80031ea: e012 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != 0U)
+ 80031ec: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80031f0: 681b ldr r3, [r3, #0]
+ 80031f2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000
+ 80031f6: 2b00 cmp r3, #0
+ 80031f8: d1ef bne.n 80031da <HAL_RCC_OscConfig+0x6a2>
+ }
+ }
+
+ /* Disable the PLL source and outputs to save power when PLL is off */
+#if defined(SAI1) && defined(USB)
+ CLEAR_BIT(RCC->PLLCFGR, (RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLPEN | RCC_PLLCFGR_PLLQEN | RCC_PLLCFGR_PLLREN));
+ 80031fa: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80031fe: 68da ldr r2, [r3, #12]
+ 8003200: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003204: 4b05 ldr r3, [pc, #20] @ (800321c <HAL_RCC_OscConfig+0x6e4>)
+ 8003206: 4013 ands r3, r2
+ 8003208: 60cb str r3, [r1, #12]
+ 800320a: e001 b.n 8003210 <HAL_RCC_OscConfig+0x6d8>
+#endif /* SAI1 && USB */
+ }
+ else
+ {
+ /* PLL is already used as System core clock */
+ return HAL_ERROR;
+ 800320c: 2301 movs r3, #1
+ 800320e: e000 b.n 8003212 <HAL_RCC_OscConfig+0x6da>
+ }
+ }
+ }
+ return HAL_OK;
+ 8003210: 2300 movs r3, #0
+}
+ 8003212: 4618 mov r0, r3
+ 8003214: 3734 adds r7, #52 @ 0x34
+ 8003216: 46bd mov sp, r7
+ 8003218: bd90 pop {r4, r7, pc}
+ 800321a: bf00 nop
+ 800321c: eefefffc .word 0xeefefffc
+
+08003220 <HAL_RCC_ClockConfig>:
+ * HPRE[3:0] bits to ensure that HCLK1 not exceed the maximum allowed frequency
+ * (for more details refer to section above "Initialization/de-initialization functions")
+ * @retval None
+ */
+HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
+{
+ 8003220: b580 push {r7, lr}
+ 8003222: b084 sub sp, #16
+ 8003224: af00 add r7, sp, #0
+ 8003226: 6078 str r0, [r7, #4]
+ 8003228: 6039 str r1, [r7, #0]
+ uint32_t tickstart;
+
+ /* Check Null pointer */
+ if (RCC_ClkInitStruct == NULL)
+ 800322a: 687b ldr r3, [r7, #4]
+ 800322c: 2b00 cmp r3, #0
+ 800322e: d101 bne.n 8003234 <HAL_RCC_ClockConfig+0x14>
+ {
+ return HAL_ERROR;
+ 8003230: 2301 movs r3, #1
+ 8003232: e12d b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ /* To correctly read data from FLASH memory, the number of wait states (LATENCY)
+ must be correctly programmed according to the frequency of the FLASH clock
+ (HCLK4) and the supply voltage of the device. */
+
+ /* Increasing the number of wait states because of higher CPU frequency */
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
+ 8003234: 4b98 ldr r3, [pc, #608] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 8003236: 681b ldr r3, [r3, #0]
+ 8003238: f003 0307 and.w r3, r3, #7
+ 800323c: 683a ldr r2, [r7, #0]
+ 800323e: 429a cmp r2, r3
+ 8003240: d91b bls.n 800327a <HAL_RCC_ClockConfig+0x5a>
+ {
+ /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
+ __HAL_FLASH_SET_LATENCY(FLatency);
+ 8003242: 4b95 ldr r3, [pc, #596] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 8003244: 681b ldr r3, [r3, #0]
+ 8003246: f023 0207 bic.w r2, r3, #7
+ 800324a: 4993 ldr r1, [pc, #588] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 800324c: 683b ldr r3, [r7, #0]
+ 800324e: 4313 orrs r3, r2
+ 8003250: 600b str r3, [r1, #0]
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003252: f7fe fba7 bl 80019a4 <HAL_GetTick>
+ 8003256: 60f8 str r0, [r7, #12]
+
+ /* Check that the new number of wait states is taken into account to access the Flash
+ memory by reading the FLASH_ACR register */
+ while (__HAL_FLASH_GET_LATENCY() != FLatency)
+ 8003258: e008 b.n 800326c <HAL_RCC_ClockConfig+0x4c>
+ {
+ if ((HAL_GetTick() - tickstart) > LATENCY_TIMEOUT_VALUE)
+ 800325a: f7fe fba3 bl 80019a4 <HAL_GetTick>
+ 800325e: 4602 mov r2, r0
+ 8003260: 68fb ldr r3, [r7, #12]
+ 8003262: 1ad3 subs r3, r2, r3
+ 8003264: 2b02 cmp r3, #2
+ 8003266: d901 bls.n 800326c <HAL_RCC_ClockConfig+0x4c>
+ {
+ return HAL_TIMEOUT;
+ 8003268: 2303 movs r3, #3
+ 800326a: e111 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (__HAL_FLASH_GET_LATENCY() != FLatency)
+ 800326c: 4b8a ldr r3, [pc, #552] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 800326e: 681b ldr r3, [r3, #0]
+ 8003270: f003 0307 and.w r3, r3, #7
+ 8003274: 683a ldr r2, [r7, #0]
+ 8003276: 429a cmp r2, r3
+ 8003278: d1ef bne.n 800325a <HAL_RCC_ClockConfig+0x3a>
+ }
+ }
+ }
+
+ /*-------------------------- HCLK1 Configuration --------------------------*/
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ 800327a: 687b ldr r3, [r7, #4]
+ 800327c: 681b ldr r3, [r3, #0]
+ 800327e: f003 0302 and.w r3, r3, #2
+ 8003282: 2b00 cmp r3, #0
+ 8003284: d016 beq.n 80032b4 <HAL_RCC_ClockConfig+0x94>
+ {
+ assert_param(IS_RCC_HCLKx(RCC_ClkInitStruct->AHBCLKDivider));
+ LL_RCC_SetAHBPrescaler(RCC_ClkInitStruct->AHBCLKDivider);
+ 8003286: 687b ldr r3, [r7, #4]
+ 8003288: 689b ldr r3, [r3, #8]
+ 800328a: 4618 mov r0, r3
+ 800328c: f7ff fb13 bl 80028b6 <LL_RCC_SetAHBPrescaler>
+
+ /* HCLK1 prescaler flag when value applied */
+ tickstart = HAL_GetTick();
+ 8003290: f7fe fb88 bl 80019a4 <HAL_GetTick>
+ 8003294: 60f8 str r0, [r7, #12]
+ while (LL_RCC_IsActiveFlag_HPRE() == 0U)
+ 8003296: e008 b.n 80032aa <HAL_RCC_ClockConfig+0x8a>
+ {
+ if ((HAL_GetTick() - tickstart) > PRESCALER_TIMEOUT_VALUE)
+ 8003298: f7fe fb84 bl 80019a4 <HAL_GetTick>
+ 800329c: 4602 mov r2, r0
+ 800329e: 68fb ldr r3, [r7, #12]
+ 80032a0: 1ad3 subs r3, r2, r3
+ 80032a2: 2b02 cmp r3, #2
+ 80032a4: d901 bls.n 80032aa <HAL_RCC_ClockConfig+0x8a>
+ {
+ return HAL_TIMEOUT;
+ 80032a6: 2303 movs r3, #3
+ 80032a8: e0f2 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (LL_RCC_IsActiveFlag_HPRE() == 0U)
+ 80032aa: f7ff fbe8 bl 8002a7e <LL_RCC_IsActiveFlag_HPRE>
+ 80032ae: 4603 mov r3, r0
+ 80032b0: 2b00 cmp r3, #0
+ 80032b2: d0f1 beq.n 8003298 <HAL_RCC_ClockConfig+0x78>
+ }
+ }
+ }
+
+ /*-------------------------- HCLK2 Configuration --------------------------*/
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK2) == RCC_CLOCKTYPE_HCLK2)
+ 80032b4: 687b ldr r3, [r7, #4]
+ 80032b6: 681b ldr r3, [r3, #0]
+ 80032b8: f003 0320 and.w r3, r3, #32
+ 80032bc: 2b00 cmp r3, #0
+ 80032be: d016 beq.n 80032ee <HAL_RCC_ClockConfig+0xce>
+ {
+ assert_param(IS_RCC_HCLKx(RCC_ClkInitStruct->AHBCLK2Divider));
+ LL_C2_RCC_SetAHBPrescaler(RCC_ClkInitStruct->AHBCLK2Divider);
+ 80032c0: 687b ldr r3, [r7, #4]
+ 80032c2: 695b ldr r3, [r3, #20]
+ 80032c4: 4618 mov r0, r3
+ 80032c6: f7ff fb0a bl 80028de <LL_C2_RCC_SetAHBPrescaler>
+
+ /* HCLK2 prescaler flag when value applied */
+ tickstart = HAL_GetTick();
+ 80032ca: f7fe fb6b bl 80019a4 <HAL_GetTick>
+ 80032ce: 60f8 str r0, [r7, #12]
+ while (LL_RCC_IsActiveFlag_C2HPRE() == 0U)
+ 80032d0: e008 b.n 80032e4 <HAL_RCC_ClockConfig+0xc4>
+ {
+ if ((HAL_GetTick() - tickstart) > PRESCALER_TIMEOUT_VALUE)
+ 80032d2: f7fe fb67 bl 80019a4 <HAL_GetTick>
+ 80032d6: 4602 mov r2, r0
+ 80032d8: 68fb ldr r3, [r7, #12]
+ 80032da: 1ad3 subs r3, r2, r3
+ 80032dc: 2b02 cmp r3, #2
+ 80032de: d901 bls.n 80032e4 <HAL_RCC_ClockConfig+0xc4>
+ {
+ return HAL_TIMEOUT;
+ 80032e0: 2303 movs r3, #3
+ 80032e2: e0d5 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (LL_RCC_IsActiveFlag_C2HPRE() == 0U)
+ 80032e4: f7ff fbdd bl 8002aa2 <LL_RCC_IsActiveFlag_C2HPRE>
+ 80032e8: 4603 mov r3, r0
+ 80032ea: 2b00 cmp r3, #0
+ 80032ec: d0f1 beq.n 80032d2 <HAL_RCC_ClockConfig+0xb2>
+ }
+ }
+ }
+ /*-------------------------- HCLK4 Configuration --------------------------*/
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK4) == RCC_CLOCKTYPE_HCLK4)
+ 80032ee: 687b ldr r3, [r7, #4]
+ 80032f0: 681b ldr r3, [r3, #0]
+ 80032f2: f003 0340 and.w r3, r3, #64 @ 0x40
+ 80032f6: 2b00 cmp r3, #0
+ 80032f8: d016 beq.n 8003328 <HAL_RCC_ClockConfig+0x108>
+ {
+ assert_param(IS_RCC_HCLKx(RCC_ClkInitStruct->AHBCLK4Divider));
+ LL_RCC_SetAHB4Prescaler(RCC_ClkInitStruct->AHBCLK4Divider);
+ 80032fa: 687b ldr r3, [r7, #4]
+ 80032fc: 699b ldr r3, [r3, #24]
+ 80032fe: 4618 mov r0, r3
+ 8003300: f7ff fb03 bl 800290a <LL_RCC_SetAHB4Prescaler>
+
+ /* AHB shared prescaler flag when value applied */
+ tickstart = HAL_GetTick();
+ 8003304: f7fe fb4e bl 80019a4 <HAL_GetTick>
+ 8003308: 60f8 str r0, [r7, #12]
+ while (LL_RCC_IsActiveFlag_SHDHPRE() == 0U)
+ 800330a: e008 b.n 800331e <HAL_RCC_ClockConfig+0xfe>
+ {
+ if ((HAL_GetTick() - tickstart) > PRESCALER_TIMEOUT_VALUE)
+ 800330c: f7fe fb4a bl 80019a4 <HAL_GetTick>
+ 8003310: 4602 mov r2, r0
+ 8003312: 68fb ldr r3, [r7, #12]
+ 8003314: 1ad3 subs r3, r2, r3
+ 8003316: 2b02 cmp r3, #2
+ 8003318: d901 bls.n 800331e <HAL_RCC_ClockConfig+0xfe>
+ {
+ return HAL_TIMEOUT;
+ 800331a: 2303 movs r3, #3
+ 800331c: e0b8 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (LL_RCC_IsActiveFlag_SHDHPRE() == 0U)
+ 800331e: f7ff fbd3 bl 8002ac8 <LL_RCC_IsActiveFlag_SHDHPRE>
+ 8003322: 4603 mov r3, r0
+ 8003324: 2b00 cmp r3, #0
+ 8003326: d0f1 beq.n 800330c <HAL_RCC_ClockConfig+0xec>
+ }
+ }
+ }
+
+ /*-------------------------- PCLK1 Configuration ---------------------------*/
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ 8003328: 687b ldr r3, [r7, #4]
+ 800332a: 681b ldr r3, [r3, #0]
+ 800332c: f003 0304 and.w r3, r3, #4
+ 8003330: 2b00 cmp r3, #0
+ 8003332: d016 beq.n 8003362 <HAL_RCC_ClockConfig+0x142>
+ {
+ assert_param(IS_RCC_PCLKx(RCC_ClkInitStruct->APB1CLKDivider));
+ LL_RCC_SetAPB1Prescaler(RCC_ClkInitStruct->APB1CLKDivider);
+ 8003334: 687b ldr r3, [r7, #4]
+ 8003336: 68db ldr r3, [r3, #12]
+ 8003338: 4618 mov r0, r3
+ 800333a: f7ff fafd bl 8002938 <LL_RCC_SetAPB1Prescaler>
+
+ /* APB1 prescaler flag when value applied */
+ tickstart = HAL_GetTick();
+ 800333e: f7fe fb31 bl 80019a4 <HAL_GetTick>
+ 8003342: 60f8 str r0, [r7, #12]
+ while (LL_RCC_IsActiveFlag_PPRE1() == 0U)
+ 8003344: e008 b.n 8003358 <HAL_RCC_ClockConfig+0x138>
+ {
+ if ((HAL_GetTick() - tickstart) > PRESCALER_TIMEOUT_VALUE)
+ 8003346: f7fe fb2d bl 80019a4 <HAL_GetTick>
+ 800334a: 4602 mov r2, r0
+ 800334c: 68fb ldr r3, [r7, #12]
+ 800334e: 1ad3 subs r3, r2, r3
+ 8003350: 2b02 cmp r3, #2
+ 8003352: d901 bls.n 8003358 <HAL_RCC_ClockConfig+0x138>
+ {
+ return HAL_TIMEOUT;
+ 8003354: 2303 movs r3, #3
+ 8003356: e09b b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (LL_RCC_IsActiveFlag_PPRE1() == 0U)
+ 8003358: f7ff fbc9 bl 8002aee <LL_RCC_IsActiveFlag_PPRE1>
+ 800335c: 4603 mov r3, r0
+ 800335e: 2b00 cmp r3, #0
+ 8003360: d0f1 beq.n 8003346 <HAL_RCC_ClockConfig+0x126>
+ }
+ }
+ }
+
+ /*-------------------------- PCLK2 Configuration ---------------------------*/
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ 8003362: 687b ldr r3, [r7, #4]
+ 8003364: 681b ldr r3, [r3, #0]
+ 8003366: f003 0308 and.w r3, r3, #8
+ 800336a: 2b00 cmp r3, #0
+ 800336c: d017 beq.n 800339e <HAL_RCC_ClockConfig+0x17e>
+ {
+ assert_param(IS_RCC_PCLKx(RCC_ClkInitStruct->APB2CLKDivider));
+ LL_RCC_SetAPB2Prescaler((RCC_ClkInitStruct->APB2CLKDivider) << 3U);
+ 800336e: 687b ldr r3, [r7, #4]
+ 8003370: 691b ldr r3, [r3, #16]
+ 8003372: 00db lsls r3, r3, #3
+ 8003374: 4618 mov r0, r3
+ 8003376: f7ff faf3 bl 8002960 <LL_RCC_SetAPB2Prescaler>
+
+ /* APB2 prescaler flag when value applied */
+ tickstart = HAL_GetTick();
+ 800337a: f7fe fb13 bl 80019a4 <HAL_GetTick>
+ 800337e: 60f8 str r0, [r7, #12]
+ while (LL_RCC_IsActiveFlag_PPRE2() == 0U)
+ 8003380: e008 b.n 8003394 <HAL_RCC_ClockConfig+0x174>
+ {
+ if ((HAL_GetTick() - tickstart) > PRESCALER_TIMEOUT_VALUE)
+ 8003382: f7fe fb0f bl 80019a4 <HAL_GetTick>
+ 8003386: 4602 mov r2, r0
+ 8003388: 68fb ldr r3, [r7, #12]
+ 800338a: 1ad3 subs r3, r2, r3
+ 800338c: 2b02 cmp r3, #2
+ 800338e: d901 bls.n 8003394 <HAL_RCC_ClockConfig+0x174>
+ {
+ return HAL_TIMEOUT;
+ 8003390: 2303 movs r3, #3
+ 8003392: e07d b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (LL_RCC_IsActiveFlag_PPRE2() == 0U)
+ 8003394: f7ff fbbd bl 8002b12 <LL_RCC_IsActiveFlag_PPRE2>
+ 8003398: 4603 mov r3, r0
+ 800339a: 2b00 cmp r3, #0
+ 800339c: d0f1 beq.n 8003382 <HAL_RCC_ClockConfig+0x162>
+ }
+ }
+ }
+
+ /*------------------------- SYSCLK Configuration ---------------------------*/
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ 800339e: 687b ldr r3, [r7, #4]
+ 80033a0: 681b ldr r3, [r3, #0]
+ 80033a2: f003 0301 and.w r3, r3, #1
+ 80033a6: 2b00 cmp r3, #0
+ 80033a8: d043 beq.n 8003432 <HAL_RCC_ClockConfig+0x212>
+ {
+ assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
+
+ /* HSE is selected as System Clock Source */
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ 80033aa: 687b ldr r3, [r7, #4]
+ 80033ac: 685b ldr r3, [r3, #4]
+ 80033ae: 2b02 cmp r3, #2
+ 80033b0: d106 bne.n 80033c0 <HAL_RCC_ClockConfig+0x1a0>
+ {
+ /* Check the HSE ready flag */
+ if (LL_RCC_HSE_IsReady() == 0U)
+ 80033b2: f7ff f893 bl 80024dc <LL_RCC_HSE_IsReady>
+ 80033b6: 4603 mov r3, r0
+ 80033b8: 2b00 cmp r3, #0
+ 80033ba: d11e bne.n 80033fa <HAL_RCC_ClockConfig+0x1da>
+ {
+ return HAL_ERROR;
+ 80033bc: 2301 movs r3, #1
+ 80033be: e067 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ }
+ }
+ /* PLL is selected as System Clock Source */
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ 80033c0: 687b ldr r3, [r7, #4]
+ 80033c2: 685b ldr r3, [r3, #4]
+ 80033c4: 2b03 cmp r3, #3
+ 80033c6: d106 bne.n 80033d6 <HAL_RCC_ClockConfig+0x1b6>
+ {
+ /* Check the PLL ready flag */
+ if (LL_RCC_PLL_IsReady() == 0U)
+ 80033c8: f7ff fb16 bl 80029f8 <LL_RCC_PLL_IsReady>
+ 80033cc: 4603 mov r3, r0
+ 80033ce: 2b00 cmp r3, #0
+ 80033d0: d113 bne.n 80033fa <HAL_RCC_ClockConfig+0x1da>
+ {
+ return HAL_ERROR;
+ 80033d2: 2301 movs r3, #1
+ 80033d4: e05c b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ }
+ }
+ /* MSI is selected as System Clock Source */
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_MSI)
+ 80033d6: 687b ldr r3, [r7, #4]
+ 80033d8: 685b ldr r3, [r3, #4]
+ 80033da: 2b00 cmp r3, #0
+ 80033dc: d106 bne.n 80033ec <HAL_RCC_ClockConfig+0x1cc>
+ {
+ /* Check the MSI ready flag */
+ if (LL_RCC_MSI_IsReady() == 0U)
+ 80033de: f7ff f9fb bl 80027d8 <LL_RCC_MSI_IsReady>
+ 80033e2: 4603 mov r3, r0
+ 80033e4: 2b00 cmp r3, #0
+ 80033e6: d108 bne.n 80033fa <HAL_RCC_ClockConfig+0x1da>
+ {
+ return HAL_ERROR;
+ 80033e8: 2301 movs r3, #1
+ 80033ea: e051 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ }
+ /* HSI is selected as System Clock Source */
+ else
+ {
+ /* Check the HSI ready flag */
+ if (LL_RCC_HSI_IsReady() == 0U)
+ 80033ec: f7ff f8a6 bl 800253c <LL_RCC_HSI_IsReady>
+ 80033f0: 4603 mov r3, r0
+ 80033f2: 2b00 cmp r3, #0
+ 80033f4: d101 bne.n 80033fa <HAL_RCC_ClockConfig+0x1da>
+ {
+ return HAL_ERROR;
+ 80033f6: 2301 movs r3, #1
+ 80033f8: e04a b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ }
+
+ }
+
+ /* apply system clock switch */
+ LL_RCC_SetSysClkSource(RCC_ClkInitStruct->SYSCLKSource);
+ 80033fa: 687b ldr r3, [r7, #4]
+ 80033fc: 685b ldr r3, [r3, #4]
+ 80033fe: 4618 mov r0, r3
+ 8003400: f7ff fa39 bl 8002876 <LL_RCC_SetSysClkSource>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003404: f7fe face bl 80019a4 <HAL_GetTick>
+ 8003408: 60f8 str r0, [r7, #12]
+
+ /* check system clock source switch status */
+ while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
+ 800340a: e00a b.n 8003422 <HAL_RCC_ClockConfig+0x202>
+ {
+ if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
+ 800340c: f7fe faca bl 80019a4 <HAL_GetTick>
+ 8003410: 4602 mov r2, r0
+ 8003412: 68fb ldr r3, [r7, #12]
+ 8003414: 1ad3 subs r3, r2, r3
+ 8003416: f241 3288 movw r2, #5000 @ 0x1388
+ 800341a: 4293 cmp r3, r2
+ 800341c: d901 bls.n 8003422 <HAL_RCC_ClockConfig+0x202>
+ {
+ return HAL_TIMEOUT;
+ 800341e: 2303 movs r3, #3
+ 8003420: e036 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
+ 8003422: f7ff fa3c bl 800289e <LL_RCC_GetSysClkSource>
+ 8003426: 4602 mov r2, r0
+ 8003428: 687b ldr r3, [r7, #4]
+ 800342a: 685b ldr r3, [r3, #4]
+ 800342c: 009b lsls r3, r3, #2
+ 800342e: 429a cmp r2, r3
+ 8003430: d1ec bne.n 800340c <HAL_RCC_ClockConfig+0x1ec>
+ }
+ }
+ }
+
+ /* Decreasing the number of wait states because of lower CPU frequency */
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
+ 8003432: 4b19 ldr r3, [pc, #100] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 8003434: 681b ldr r3, [r3, #0]
+ 8003436: f003 0307 and.w r3, r3, #7
+ 800343a: 683a ldr r2, [r7, #0]
+ 800343c: 429a cmp r2, r3
+ 800343e: d21b bcs.n 8003478 <HAL_RCC_ClockConfig+0x258>
+ {
+ /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
+ __HAL_FLASH_SET_LATENCY(FLatency);
+ 8003440: 4b15 ldr r3, [pc, #84] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 8003442: 681b ldr r3, [r3, #0]
+ 8003444: f023 0207 bic.w r2, r3, #7
+ 8003448: 4913 ldr r1, [pc, #76] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 800344a: 683b ldr r3, [r7, #0]
+ 800344c: 4313 orrs r3, r2
+ 800344e: 600b str r3, [r1, #0]
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003450: f7fe faa8 bl 80019a4 <HAL_GetTick>
+ 8003454: 60f8 str r0, [r7, #12]
+
+ /* Check that the new number of wait states is taken into account to access the Flash
+ memory by reading the FLASH_ACR register */
+ while (__HAL_FLASH_GET_LATENCY() != FLatency)
+ 8003456: e008 b.n 800346a <HAL_RCC_ClockConfig+0x24a>
+ {
+ if ((HAL_GetTick() - tickstart) > LATENCY_TIMEOUT_VALUE)
+ 8003458: f7fe faa4 bl 80019a4 <HAL_GetTick>
+ 800345c: 4602 mov r2, r0
+ 800345e: 68fb ldr r3, [r7, #12]
+ 8003460: 1ad3 subs r3, r2, r3
+ 8003462: 2b02 cmp r3, #2
+ 8003464: d901 bls.n 800346a <HAL_RCC_ClockConfig+0x24a>
+ {
+ return HAL_TIMEOUT;
+ 8003466: 2303 movs r3, #3
+ 8003468: e012 b.n 8003490 <HAL_RCC_ClockConfig+0x270>
+ while (__HAL_FLASH_GET_LATENCY() != FLatency)
+ 800346a: 4b0b ldr r3, [pc, #44] @ (8003498 <HAL_RCC_ClockConfig+0x278>)
+ 800346c: 681b ldr r3, [r3, #0]
+ 800346e: f003 0307 and.w r3, r3, #7
+ 8003472: 683a ldr r2, [r7, #0]
+ 8003474: 429a cmp r2, r3
+ 8003476: d1ef bne.n 8003458 <HAL_RCC_ClockConfig+0x238>
+ }
+
+ /*---------------------------------------------------------------------------*/
+
+ /* Update the SystemCoreClock global variable */
+ SystemCoreClock = HAL_RCC_GetHCLKFreq();
+ 8003478: f000 f87e bl 8003578 <HAL_RCC_GetHCLKFreq>
+ 800347c: 4603 mov r3, r0
+ 800347e: 4a07 ldr r2, [pc, #28] @ (800349c <HAL_RCC_ClockConfig+0x27c>)
+ 8003480: 6013 str r3, [r2, #0]
+
+ /* Configure the source of time base considering new system clocks settings*/
+ return HAL_InitTick(HAL_GetTickPrio());
+ 8003482: f7fe fa9b bl 80019bc <HAL_GetTickPrio>
+ 8003486: 4603 mov r3, r0
+ 8003488: 4618 mov r0, r3
+ 800348a: f7fe fa3d bl 8001908 <HAL_InitTick>
+ 800348e: 4603 mov r3, r0
+}
+ 8003490: 4618 mov r0, r3
+ 8003492: 3710 adds r7, #16
+ 8003494: 46bd mov sp, r7
+ 8003496: bd80 pop {r7, pc}
+ 8003498: 58004000 .word 0x58004000
+ 800349c: 20000008 .word 0x20000008
+
+080034a0 <HAL_RCC_GetSysClockFreq>:
+ *
+ *
+ * @retval SYSCLK frequency
+ */
+uint32_t HAL_RCC_GetSysClockFreq(void)
+{
+ 80034a0: b590 push {r4, r7, lr}
+ 80034a2: b085 sub sp, #20
+ 80034a4: af00 add r7, sp, #0
+ uint32_t pllsource;
+ uint32_t sysclockfreq;
+ uint32_t pllinputfreq;
+ const uint32_t temp_sysclksrc = __HAL_RCC_GET_SYSCLK_SOURCE();
+ 80034a6: f7ff f9fa bl 800289e <LL_RCC_GetSysClkSource>
+ 80034aa: 6078 str r0, [r7, #4]
+
+ if (temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_MSI)
+ 80034ac: 687b ldr r3, [r7, #4]
+ 80034ae: 2b00 cmp r3, #0
+ 80034b0: d10a bne.n 80034c8 <HAL_RCC_GetSysClockFreq+0x28>
+ {
+ /* Retrieve MSI frequency range in HZ*/
+ /* MSI used as system clock source */
+ sysclockfreq = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_GetRange());
+ 80034b2: f7ff f9b6 bl 8002822 <LL_RCC_MSI_GetRange>
+ 80034b6: 4603 mov r3, r0
+ 80034b8: 091b lsrs r3, r3, #4
+ 80034ba: f003 030f and.w r3, r3, #15
+ 80034be: 4a2b ldr r2, [pc, #172] @ (800356c <HAL_RCC_GetSysClockFreq+0xcc>)
+ 80034c0: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 80034c4: 60fb str r3, [r7, #12]
+ 80034c6: e04b b.n 8003560 <HAL_RCC_GetSysClockFreq+0xc0>
+ }
+ else if (temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_HSI)
+ 80034c8: 687b ldr r3, [r7, #4]
+ 80034ca: 2b04 cmp r3, #4
+ 80034cc: d102 bne.n 80034d4 <HAL_RCC_GetSysClockFreq+0x34>
+ {
+ /* HSI used as system clock source */
+ sysclockfreq = HSI_VALUE;
+ 80034ce: 4b28 ldr r3, [pc, #160] @ (8003570 <HAL_RCC_GetSysClockFreq+0xd0>)
+ 80034d0: 60fb str r3, [r7, #12]
+ 80034d2: e045 b.n 8003560 <HAL_RCC_GetSysClockFreq+0xc0>
+ }
+ else if (temp_sysclksrc == RCC_SYSCLKSOURCE_STATUS_HSE)
+ 80034d4: 687b ldr r3, [r7, #4]
+ 80034d6: 2b08 cmp r3, #8
+ 80034d8: d10a bne.n 80034f0 <HAL_RCC_GetSysClockFreq+0x50>
+ {
+ /* HSE used as system clock source */
+ if (LL_RCC_HSE_IsEnabledDiv2() == 1U)
+ 80034da: f7fe ffcf bl 800247c <LL_RCC_HSE_IsEnabledDiv2>
+ 80034de: 4603 mov r3, r0
+ 80034e0: 2b01 cmp r3, #1
+ 80034e2: d102 bne.n 80034ea <HAL_RCC_GetSysClockFreq+0x4a>
+ {
+ sysclockfreq = HSE_VALUE / 2U;
+ 80034e4: 4b22 ldr r3, [pc, #136] @ (8003570 <HAL_RCC_GetSysClockFreq+0xd0>)
+ 80034e6: 60fb str r3, [r7, #12]
+ 80034e8: e03a b.n 8003560 <HAL_RCC_GetSysClockFreq+0xc0>
+ }
+ else
+ {
+ sysclockfreq = HSE_VALUE;
+ 80034ea: 4b22 ldr r3, [pc, #136] @ (8003574 <HAL_RCC_GetSysClockFreq+0xd4>)
+ 80034ec: 60fb str r3, [r7, #12]
+ 80034ee: e037 b.n 8003560 <HAL_RCC_GetSysClockFreq+0xc0>
+ }
+ }
+ else
+ {
+ /* PLL used as system clock source */
+ pllsource = LL_RCC_PLL_GetMainSource();
+ 80034f0: f7ff fab9 bl 8002a66 <LL_RCC_PLL_GetMainSource>
+ 80034f4: 6038 str r0, [r7, #0]
+ switch (pllsource)
+ 80034f6: 683b ldr r3, [r7, #0]
+ 80034f8: 2b02 cmp r3, #2
+ 80034fa: d003 beq.n 8003504 <HAL_RCC_GetSysClockFreq+0x64>
+ 80034fc: 683b ldr r3, [r7, #0]
+ 80034fe: 2b03 cmp r3, #3
+ 8003500: d003 beq.n 800350a <HAL_RCC_GetSysClockFreq+0x6a>
+ 8003502: e00d b.n 8003520 <HAL_RCC_GetSysClockFreq+0x80>
+ {
+ case RCC_PLLSOURCE_HSI: /* HSI used as PLL clock source */
+ pllinputfreq = HSI_VALUE;
+ 8003504: 4b1a ldr r3, [pc, #104] @ (8003570 <HAL_RCC_GetSysClockFreq+0xd0>)
+ 8003506: 60bb str r3, [r7, #8]
+ break;
+ 8003508: e015 b.n 8003536 <HAL_RCC_GetSysClockFreq+0x96>
+ case RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */
+ if (LL_RCC_HSE_IsEnabledDiv2() == 1U)
+ 800350a: f7fe ffb7 bl 800247c <LL_RCC_HSE_IsEnabledDiv2>
+ 800350e: 4603 mov r3, r0
+ 8003510: 2b01 cmp r3, #1
+ 8003512: d102 bne.n 800351a <HAL_RCC_GetSysClockFreq+0x7a>
+ {
+ pllinputfreq = HSE_VALUE / 2U;
+ 8003514: 4b16 ldr r3, [pc, #88] @ (8003570 <HAL_RCC_GetSysClockFreq+0xd0>)
+ 8003516: 60bb str r3, [r7, #8]
+ }
+ else
+ {
+ pllinputfreq = HSE_VALUE;
+ }
+ break;
+ 8003518: e00d b.n 8003536 <HAL_RCC_GetSysClockFreq+0x96>
+ pllinputfreq = HSE_VALUE;
+ 800351a: 4b16 ldr r3, [pc, #88] @ (8003574 <HAL_RCC_GetSysClockFreq+0xd4>)
+ 800351c: 60bb str r3, [r7, #8]
+ break;
+ 800351e: e00a b.n 8003536 <HAL_RCC_GetSysClockFreq+0x96>
+ case RCC_PLLSOURCE_MSI: /* MSI used as PLL clock source */
+ default:
+ pllinputfreq = __LL_RCC_CALC_MSI_FREQ(LL_RCC_MSI_GetRange());
+ 8003520: f7ff f97f bl 8002822 <LL_RCC_MSI_GetRange>
+ 8003524: 4603 mov r3, r0
+ 8003526: 091b lsrs r3, r3, #4
+ 8003528: f003 030f and.w r3, r3, #15
+ 800352c: 4a0f ldr r2, [pc, #60] @ (800356c <HAL_RCC_GetSysClockFreq+0xcc>)
+ 800352e: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 8003532: 60bb str r3, [r7, #8]
+ break;
+ 8003534: bf00 nop
+ }
+ sysclockfreq = __LL_RCC_CALC_PLLCLK_FREQ(pllinputfreq, LL_RCC_PLL_GetDivider(), LL_RCC_PLL_GetN(),
+ 8003536: f7ff fa71 bl 8002a1c <LL_RCC_PLL_GetN>
+ 800353a: 4602 mov r2, r0
+ 800353c: 68bb ldr r3, [r7, #8]
+ 800353e: fb03 f402 mul.w r4, r3, r2
+ 8003542: f7ff fa84 bl 8002a4e <LL_RCC_PLL_GetDivider>
+ 8003546: 4603 mov r3, r0
+ 8003548: 091b lsrs r3, r3, #4
+ 800354a: 3301 adds r3, #1
+ 800354c: fbb4 f4f3 udiv r4, r4, r3
+ 8003550: f7ff fa71 bl 8002a36 <LL_RCC_PLL_GetR>
+ 8003554: 4603 mov r3, r0
+ 8003556: 0f5b lsrs r3, r3, #29
+ 8003558: 3301 adds r3, #1
+ 800355a: fbb4 f3f3 udiv r3, r4, r3
+ 800355e: 60fb str r3, [r7, #12]
+ LL_RCC_PLL_GetR());
+ }
+
+ return sysclockfreq;
+ 8003560: 68fb ldr r3, [r7, #12]
+}
+ 8003562: 4618 mov r0, r3
+ 8003564: 3714 adds r7, #20
+ 8003566: 46bd mov sp, r7
+ 8003568: bd90 pop {r4, r7, pc}
+ 800356a: bf00 nop
+ 800356c: 08007db0 .word 0x08007db0
+ 8003570: 00f42400 .word 0x00f42400
+ 8003574: 01e84800 .word 0x01e84800
+
+08003578 <HAL_RCC_GetHCLKFreq>:
+/**
+ * @brief Return the HCLK frequency.
+ * @retval HCLK frequency in Hz
+ */
+uint32_t HAL_RCC_GetHCLKFreq(void)
+{
+ 8003578: b598 push {r3, r4, r7, lr}
+ 800357a: af00 add r7, sp, #0
+ /* Get SysClock and Compute HCLK1 frequency ---------------------------*/
+ return ((uint32_t)(__LL_RCC_CALC_HCLK1_FREQ(HAL_RCC_GetSysClockFreq(), LL_RCC_GetAHBPrescaler())));
+ 800357c: f7ff ff90 bl 80034a0 <HAL_RCC_GetSysClockFreq>
+ 8003580: 4604 mov r4, r0
+ 8003582: f7ff fa01 bl 8002988 <LL_RCC_GetAHBPrescaler>
+ 8003586: 4603 mov r3, r0
+ 8003588: 091b lsrs r3, r3, #4
+ 800358a: f003 030f and.w r3, r3, #15
+ 800358e: 4a03 ldr r2, [pc, #12] @ (800359c <HAL_RCC_GetHCLKFreq+0x24>)
+ 8003590: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 8003594: fbb4 f3f3 udiv r3, r4, r3
+}
+ 8003598: 4618 mov r0, r3
+ 800359a: bd98 pop {r3, r4, r7, pc}
+ 800359c: 08007d70 .word 0x08007d70
+
+080035a0 <RCC_SetFlashLatencyFromMSIRange>:
+ voltage range.
+ * @param MSI_Range MSI range value from @ref RCC_MSIRANGE_0 to @ref RCC_MSIRANGE_11
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef RCC_SetFlashLatencyFromMSIRange(uint32_t MSI_Range)
+{
+ 80035a0: b590 push {r4, r7, lr}
+ 80035a2: b085 sub sp, #20
+ 80035a4: af00 add r7, sp, #0
+ 80035a6: 6078 str r0, [r7, #4]
+
+ /* Check the parameters */
+ assert_param(IS_RCC_MSI_CLOCK_RANGE(MSI_Range));
+
+ /* MSI frequency range in Hz */
+ if (MSI_Range > RCC_MSIRANGE_11)
+ 80035a8: 687b ldr r3, [r7, #4]
+ 80035aa: 2bb0 cmp r3, #176 @ 0xb0
+ 80035ac: d903 bls.n 80035b6 <RCC_SetFlashLatencyFromMSIRange+0x16>
+ {
+ msifreq = __LL_RCC_CALC_MSI_FREQ(RCC_MSIRANGE_11);
+ 80035ae: 4b15 ldr r3, [pc, #84] @ (8003604 <RCC_SetFlashLatencyFromMSIRange+0x64>)
+ 80035b0: 6adb ldr r3, [r3, #44] @ 0x2c
+ 80035b2: 60fb str r3, [r7, #12]
+ 80035b4: e007 b.n 80035c6 <RCC_SetFlashLatencyFromMSIRange+0x26>
+ }
+ else
+ {
+ msifreq = __LL_RCC_CALC_MSI_FREQ(MSI_Range);
+ 80035b6: 687b ldr r3, [r7, #4]
+ 80035b8: 091b lsrs r3, r3, #4
+ 80035ba: f003 030f and.w r3, r3, #15
+ 80035be: 4a11 ldr r2, [pc, #68] @ (8003604 <RCC_SetFlashLatencyFromMSIRange+0x64>)
+ 80035c0: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 80035c4: 60fb str r3, [r7, #12]
+ }
+
+ flash_clksrcfreq = __LL_RCC_CALC_HCLK4_FREQ(msifreq, LL_RCC_GetAHB4Prescaler());
+ 80035c6: f7ff f9eb bl 80029a0 <LL_RCC_GetAHB4Prescaler>
+ 80035ca: 4603 mov r3, r0
+ 80035cc: 091b lsrs r3, r3, #4
+ 80035ce: f003 030f and.w r3, r3, #15
+ 80035d2: 4a0d ldr r2, [pc, #52] @ (8003608 <RCC_SetFlashLatencyFromMSIRange+0x68>)
+ 80035d4: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 80035d8: 68fa ldr r2, [r7, #12]
+ 80035da: fbb2 f3f3 udiv r3, r2, r3
+ 80035de: 60bb str r3, [r7, #8]
+
+#if defined(PWR_CR1_VOS)
+ return RCC_SetFlashLatency((flash_clksrcfreq / MEGA_HZ), HAL_PWREx_GetVoltageRange());
+ 80035e0: 68bb ldr r3, [r7, #8]
+ 80035e2: 4a0a ldr r2, [pc, #40] @ (800360c <RCC_SetFlashLatencyFromMSIRange+0x6c>)
+ 80035e4: fba2 2303 umull r2, r3, r2, r3
+ 80035e8: 0c9c lsrs r4, r3, #18
+ 80035ea: f7fe ff0d bl 8002408 <HAL_PWREx_GetVoltageRange>
+ 80035ee: 4603 mov r3, r0
+ 80035f0: 4619 mov r1, r3
+ 80035f2: 4620 mov r0, r4
+ 80035f4: f000 f80c bl 8003610 <RCC_SetFlashLatency>
+ 80035f8: 4603 mov r3, r0
+#else
+ return RCC_SetFlashLatency((flash_clksrcfreq / MEGA_HZ), PWR_REGULATOR_VOLTAGE_SCALE1);
+#endif /* PWR_CR1_VOS */
+}
+ 80035fa: 4618 mov r0, r3
+ 80035fc: 3714 adds r7, #20
+ 80035fe: 46bd mov sp, r7
+ 8003600: bd90 pop {r4, r7, pc}
+ 8003602: bf00 nop
+ 8003604: 08007db0 .word 0x08007db0
+ 8003608: 08007d70 .word 0x08007d70
+ 800360c: 431bde83 .word 0x431bde83
+
+08003610 <RCC_SetFlashLatency>:
+ * @param Flash_ClkSrcFreq Flash Clock Source (in MHz)
+ * @param VCORE_Voltage Current Vcore voltage (PWR_REGULATOR_VOLTAGE_SCALE1 or PWR_REGULATOR_VOLTAGE_SCALE2)
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef RCC_SetFlashLatency(uint32_t Flash_ClkSrcFreq, uint32_t VCORE_Voltage)
+{
+ 8003610: b590 push {r4, r7, lr}
+ 8003612: b093 sub sp, #76 @ 0x4c
+ 8003614: af00 add r7, sp, #0
+ 8003616: 6078 str r0, [r7, #4]
+ 8003618: 6039 str r1, [r7, #0]
+ /* Flash Clock source (HCLK4) range in MHz with a VCORE is range1 */
+ const uint32_t FLASH_CLK_SRC_RANGE_VOS1[] = {18UL, 36UL, 54UL, 64UL};
+ 800361a: 4b37 ldr r3, [pc, #220] @ (80036f8 <RCC_SetFlashLatency+0xe8>)
+ 800361c: f107 0428 add.w r4, r7, #40 @ 0x28
+ 8003620: cb0f ldmia r3, {r0, r1, r2, r3}
+ 8003622: e884 000f stmia.w r4, {r0, r1, r2, r3}
+#if defined(PWR_CR1_VOS)
+ /* Flash Clock source (HCLK4) range in MHz with a VCORE is range2 */
+ const uint32_t FLASH_CLK_SRC_RANGE_VOS2[] = {6UL, 12UL, 16UL};
+ 8003626: 4a35 ldr r2, [pc, #212] @ (80036fc <RCC_SetFlashLatency+0xec>)
+ 8003628: f107 031c add.w r3, r7, #28
+ 800362c: ca07 ldmia r2, {r0, r1, r2}
+ 800362e: e883 0007 stmia.w r3, {r0, r1, r2}
+#endif /* PWR_CR1_VOS */
+ /* Flash Latency range */
+ const uint32_t FLASH_LATENCY_RANGE[] = {FLASH_LATENCY_0, FLASH_LATENCY_1, FLASH_LATENCY_2, FLASH_LATENCY_3};
+ 8003632: 4b33 ldr r3, [pc, #204] @ (8003700 <RCC_SetFlashLatency+0xf0>)
+ 8003634: f107 040c add.w r4, r7, #12
+ 8003638: cb0f ldmia r3, {r0, r1, r2, r3}
+ 800363a: e884 000f stmia.w r4, {r0, r1, r2, r3}
+ uint32_t latency = FLASH_LATENCY_0; /* default value 0WS */
+ 800363e: 2300 movs r3, #0
+ 8003640: 647b str r3, [r7, #68] @ 0x44
+ uint32_t tickstart;
+
+#if defined(PWR_CR1_VOS)
+ if (VCORE_Voltage == PWR_REGULATOR_VOLTAGE_SCALE1)
+ 8003642: 683b ldr r3, [r7, #0]
+ 8003644: f5b3 7f00 cmp.w r3, #512 @ 0x200
+ 8003648: d11a bne.n 8003680 <RCC_SetFlashLatency+0x70>
+ {
+ for (uint32_t index = 0; index < __COUNTOF(FLASH_CLK_SRC_RANGE_VOS1); index++)
+ 800364a: 2300 movs r3, #0
+ 800364c: 643b str r3, [r7, #64] @ 0x40
+ 800364e: e013 b.n 8003678 <RCC_SetFlashLatency+0x68>
+ {
+ if (Flash_ClkSrcFreq <= FLASH_CLK_SRC_RANGE_VOS1[index])
+ 8003650: 6c3b ldr r3, [r7, #64] @ 0x40
+ 8003652: 009b lsls r3, r3, #2
+ 8003654: 3348 adds r3, #72 @ 0x48
+ 8003656: 443b add r3, r7
+ 8003658: f853 3c20 ldr.w r3, [r3, #-32]
+ 800365c: 687a ldr r2, [r7, #4]
+ 800365e: 429a cmp r2, r3
+ 8003660: d807 bhi.n 8003672 <RCC_SetFlashLatency+0x62>
+ {
+ latency = FLASH_LATENCY_RANGE[index];
+ 8003662: 6c3b ldr r3, [r7, #64] @ 0x40
+ 8003664: 009b lsls r3, r3, #2
+ 8003666: 3348 adds r3, #72 @ 0x48
+ 8003668: 443b add r3, r7
+ 800366a: f853 3c3c ldr.w r3, [r3, #-60]
+ 800366e: 647b str r3, [r7, #68] @ 0x44
+ break;
+ 8003670: e020 b.n 80036b4 <RCC_SetFlashLatency+0xa4>
+ for (uint32_t index = 0; index < __COUNTOF(FLASH_CLK_SRC_RANGE_VOS1); index++)
+ 8003672: 6c3b ldr r3, [r7, #64] @ 0x40
+ 8003674: 3301 adds r3, #1
+ 8003676: 643b str r3, [r7, #64] @ 0x40
+ 8003678: 6c3b ldr r3, [r7, #64] @ 0x40
+ 800367a: 2b03 cmp r3, #3
+ 800367c: d9e8 bls.n 8003650 <RCC_SetFlashLatency+0x40>
+ 800367e: e019 b.n 80036b4 <RCC_SetFlashLatency+0xa4>
+ }
+ }
+ }
+ else /* PWR_REGULATOR_VOLTAGE_SCALE2 */
+ {
+ for (uint32_t index = 0; index < __COUNTOF(FLASH_CLK_SRC_RANGE_VOS2); index++)
+ 8003680: 2300 movs r3, #0
+ 8003682: 63fb str r3, [r7, #60] @ 0x3c
+ 8003684: e013 b.n 80036ae <RCC_SetFlashLatency+0x9e>
+ {
+ if (Flash_ClkSrcFreq <= FLASH_CLK_SRC_RANGE_VOS2[index])
+ 8003686: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 8003688: 009b lsls r3, r3, #2
+ 800368a: 3348 adds r3, #72 @ 0x48
+ 800368c: 443b add r3, r7
+ 800368e: f853 3c2c ldr.w r3, [r3, #-44]
+ 8003692: 687a ldr r2, [r7, #4]
+ 8003694: 429a cmp r2, r3
+ 8003696: d807 bhi.n 80036a8 <RCC_SetFlashLatency+0x98>
+ {
+ latency = FLASH_LATENCY_RANGE[index];
+ 8003698: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 800369a: 009b lsls r3, r3, #2
+ 800369c: 3348 adds r3, #72 @ 0x48
+ 800369e: 443b add r3, r7
+ 80036a0: f853 3c3c ldr.w r3, [r3, #-60]
+ 80036a4: 647b str r3, [r7, #68] @ 0x44
+ break;
+ 80036a6: e005 b.n 80036b4 <RCC_SetFlashLatency+0xa4>
+ for (uint32_t index = 0; index < __COUNTOF(FLASH_CLK_SRC_RANGE_VOS2); index++)
+ 80036a8: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 80036aa: 3301 adds r3, #1
+ 80036ac: 63fb str r3, [r7, #60] @ 0x3c
+ 80036ae: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 80036b0: 2b02 cmp r3, #2
+ 80036b2: d9e8 bls.n 8003686 <RCC_SetFlashLatency+0x76>
+ break;
+ }
+ }
+#endif /* PWR_CR1_VOS */
+
+ __HAL_FLASH_SET_LATENCY(latency);
+ 80036b4: 4b13 ldr r3, [pc, #76] @ (8003704 <RCC_SetFlashLatency+0xf4>)
+ 80036b6: 681b ldr r3, [r3, #0]
+ 80036b8: f023 0207 bic.w r2, r3, #7
+ 80036bc: 4911 ldr r1, [pc, #68] @ (8003704 <RCC_SetFlashLatency+0xf4>)
+ 80036be: 6c7b ldr r3, [r7, #68] @ 0x44
+ 80036c0: 4313 orrs r3, r2
+ 80036c2: 600b str r3, [r1, #0]
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 80036c4: f7fe f96e bl 80019a4 <HAL_GetTick>
+ 80036c8: 63b8 str r0, [r7, #56] @ 0x38
+
+ /* Check that the new number of wait states is taken into account to access the Flash
+ memory by reading the FLASH_ACR register */
+ while (__HAL_FLASH_GET_LATENCY() != latency)
+ 80036ca: e008 b.n 80036de <RCC_SetFlashLatency+0xce>
+ {
+ if ((HAL_GetTick() - tickstart) > LATENCY_TIMEOUT_VALUE)
+ 80036cc: f7fe f96a bl 80019a4 <HAL_GetTick>
+ 80036d0: 4602 mov r2, r0
+ 80036d2: 6bbb ldr r3, [r7, #56] @ 0x38
+ 80036d4: 1ad3 subs r3, r2, r3
+ 80036d6: 2b02 cmp r3, #2
+ 80036d8: d901 bls.n 80036de <RCC_SetFlashLatency+0xce>
+ {
+ return HAL_TIMEOUT;
+ 80036da: 2303 movs r3, #3
+ 80036dc: e007 b.n 80036ee <RCC_SetFlashLatency+0xde>
+ while (__HAL_FLASH_GET_LATENCY() != latency)
+ 80036de: 4b09 ldr r3, [pc, #36] @ (8003704 <RCC_SetFlashLatency+0xf4>)
+ 80036e0: 681b ldr r3, [r3, #0]
+ 80036e2: f003 0307 and.w r3, r3, #7
+ 80036e6: 6c7a ldr r2, [r7, #68] @ 0x44
+ 80036e8: 429a cmp r2, r3
+ 80036ea: d1ef bne.n 80036cc <RCC_SetFlashLatency+0xbc>
+ }
+ }
+ return HAL_OK;
+ 80036ec: 2300 movs r3, #0
+}
+ 80036ee: 4618 mov r0, r3
+ 80036f0: 374c adds r7, #76 @ 0x4c
+ 80036f2: 46bd mov sp, r7
+ 80036f4: bd90 pop {r4, r7, pc}
+ 80036f6: bf00 nop
+ 80036f8: 08007bd0 .word 0x08007bd0
+ 80036fc: 08007be0 .word 0x08007be0
+ 8003700: 08007bec .word 0x08007bec
+ 8003704: 58004000 .word 0x58004000
+
+08003708 <LL_RCC_LSE_IsEnabled>:
+{
+ 8003708: b480 push {r7}
+ 800370a: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSEON) == (RCC_BDCR_LSEON)) ? 1UL : 0UL);
+ 800370c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003710: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8003714: f003 0301 and.w r3, r3, #1
+ 8003718: 2b01 cmp r3, #1
+ 800371a: d101 bne.n 8003720 <LL_RCC_LSE_IsEnabled+0x18>
+ 800371c: 2301 movs r3, #1
+ 800371e: e000 b.n 8003722 <LL_RCC_LSE_IsEnabled+0x1a>
+ 8003720: 2300 movs r3, #0
+}
+ 8003722: 4618 mov r0, r3
+ 8003724: 46bd mov sp, r7
+ 8003726: f85d 7b04 ldr.w r7, [sp], #4
+ 800372a: 4770 bx lr
+
+0800372c <LL_RCC_LSE_IsReady>:
+{
+ 800372c: b480 push {r7}
+ 800372e: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->BDCR, RCC_BDCR_LSERDY) == (RCC_BDCR_LSERDY)) ? 1UL : 0UL);
+ 8003730: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003734: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8003738: f003 0302 and.w r3, r3, #2
+ 800373c: 2b02 cmp r3, #2
+ 800373e: d101 bne.n 8003744 <LL_RCC_LSE_IsReady+0x18>
+ 8003740: 2301 movs r3, #1
+ 8003742: e000 b.n 8003746 <LL_RCC_LSE_IsReady+0x1a>
+ 8003744: 2300 movs r3, #0
+}
+ 8003746: 4618 mov r0, r3
+ 8003748: 46bd mov sp, r7
+ 800374a: f85d 7b04 ldr.w r7, [sp], #4
+ 800374e: 4770 bx lr
+
+08003750 <LL_RCC_SetRFWKPClockSource>:
+{
+ 8003750: b480 push {r7}
+ 8003752: b083 sub sp, #12
+ 8003754: af00 add r7, sp, #0
+ 8003756: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CSR, RCC_CSR_RFWKPSEL, Source);
+ 8003758: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800375c: f8d3 3094 ldr.w r3, [r3, #148] @ 0x94
+ 8003760: f423 4240 bic.w r2, r3, #49152 @ 0xc000
+ 8003764: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003768: 687b ldr r3, [r7, #4]
+ 800376a: 4313 orrs r3, r2
+ 800376c: f8c1 3094 str.w r3, [r1, #148] @ 0x94
+}
+ 8003770: bf00 nop
+ 8003772: 370c adds r7, #12
+ 8003774: 46bd mov sp, r7
+ 8003776: f85d 7b04 ldr.w r7, [sp], #4
+ 800377a: 4770 bx lr
+
+0800377c <LL_RCC_SetSMPSClockSource>:
+{
+ 800377c: b480 push {r7}
+ 800377e: b083 sub sp, #12
+ 8003780: af00 add r7, sp, #0
+ 8003782: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->SMPSCR, RCC_SMPSCR_SMPSSEL, SMPSSource);
+ 8003784: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003788: 6a5b ldr r3, [r3, #36] @ 0x24
+ 800378a: f023 0203 bic.w r2, r3, #3
+ 800378e: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003792: 687b ldr r3, [r7, #4]
+ 8003794: 4313 orrs r3, r2
+ 8003796: 624b str r3, [r1, #36] @ 0x24
+}
+ 8003798: bf00 nop
+ 800379a: 370c adds r7, #12
+ 800379c: 46bd mov sp, r7
+ 800379e: f85d 7b04 ldr.w r7, [sp], #4
+ 80037a2: 4770 bx lr
+
+080037a4 <LL_RCC_SetSMPSPrescaler>:
+{
+ 80037a4: b480 push {r7}
+ 80037a6: b083 sub sp, #12
+ 80037a8: af00 add r7, sp, #0
+ 80037aa: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->SMPSCR, RCC_SMPSCR_SMPSDIV, Prescaler);
+ 80037ac: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80037b0: 6a5b ldr r3, [r3, #36] @ 0x24
+ 80037b2: f023 0230 bic.w r2, r3, #48 @ 0x30
+ 80037b6: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80037ba: 687b ldr r3, [r7, #4]
+ 80037bc: 4313 orrs r3, r2
+ 80037be: 624b str r3, [r1, #36] @ 0x24
+}
+ 80037c0: bf00 nop
+ 80037c2: 370c adds r7, #12
+ 80037c4: 46bd mov sp, r7
+ 80037c6: f85d 7b04 ldr.w r7, [sp], #4
+ 80037ca: 4770 bx lr
+
+080037cc <LL_RCC_SetUSARTClockSource>:
+{
+ 80037cc: b480 push {r7}
+ 80037ce: b083 sub sp, #12
+ 80037d0: af00 add r7, sp, #0
+ 80037d2: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, RCC_CCIPR_USART1SEL, USARTxSource);
+ 80037d4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80037d8: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 80037dc: f023 0203 bic.w r2, r3, #3
+ 80037e0: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80037e4: 687b ldr r3, [r7, #4]
+ 80037e6: 4313 orrs r3, r2
+ 80037e8: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 80037ec: bf00 nop
+ 80037ee: 370c adds r7, #12
+ 80037f0: 46bd mov sp, r7
+ 80037f2: f85d 7b04 ldr.w r7, [sp], #4
+ 80037f6: 4770 bx lr
+
+080037f8 <LL_RCC_SetLPUARTClockSource>:
+{
+ 80037f8: b480 push {r7}
+ 80037fa: b083 sub sp, #12
+ 80037fc: af00 add r7, sp, #0
+ 80037fe: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, RCC_CCIPR_LPUART1SEL, LPUARTxSource);
+ 8003800: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003804: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 8003808: f423 6240 bic.w r2, r3, #3072 @ 0xc00
+ 800380c: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003810: 687b ldr r3, [r7, #4]
+ 8003812: 4313 orrs r3, r2
+ 8003814: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 8003818: bf00 nop
+ 800381a: 370c adds r7, #12
+ 800381c: 46bd mov sp, r7
+ 800381e: f85d 7b04 ldr.w r7, [sp], #4
+ 8003822: 4770 bx lr
+
+08003824 <LL_RCC_SetI2CClockSource>:
+{
+ 8003824: b480 push {r7}
+ 8003826: b083 sub sp, #12
+ 8003828: af00 add r7, sp, #0
+ 800382a: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, ((I2CxSource >> 4) & 0x000FF000U), ((I2CxSource << 4) & 0x000FF000U));
+ 800382c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003830: f8d3 2088 ldr.w r2, [r3, #136] @ 0x88
+ 8003834: 687b ldr r3, [r7, #4]
+ 8003836: 091b lsrs r3, r3, #4
+ 8003838: f403 237f and.w r3, r3, #1044480 @ 0xff000
+ 800383c: 43db mvns r3, r3
+ 800383e: 401a ands r2, r3
+ 8003840: 687b ldr r3, [r7, #4]
+ 8003842: 011b lsls r3, r3, #4
+ 8003844: f403 237f and.w r3, r3, #1044480 @ 0xff000
+ 8003848: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 800384c: 4313 orrs r3, r2
+ 800384e: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 8003852: bf00 nop
+ 8003854: 370c adds r7, #12
+ 8003856: 46bd mov sp, r7
+ 8003858: f85d 7b04 ldr.w r7, [sp], #4
+ 800385c: 4770 bx lr
+
+0800385e <LL_RCC_SetLPTIMClockSource>:
+{
+ 800385e: b480 push {r7}
+ 8003860: b083 sub sp, #12
+ 8003862: af00 add r7, sp, #0
+ 8003864: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, (LPTIMxSource & 0xFFFF0000U), (LPTIMxSource << 16));
+ 8003866: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800386a: f8d3 2088 ldr.w r2, [r3, #136] @ 0x88
+ 800386e: 687b ldr r3, [r7, #4]
+ 8003870: 0c1b lsrs r3, r3, #16
+ 8003872: 041b lsls r3, r3, #16
+ 8003874: 43db mvns r3, r3
+ 8003876: 401a ands r2, r3
+ 8003878: 687b ldr r3, [r7, #4]
+ 800387a: 041b lsls r3, r3, #16
+ 800387c: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003880: 4313 orrs r3, r2
+ 8003882: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 8003886: bf00 nop
+ 8003888: 370c adds r7, #12
+ 800388a: 46bd mov sp, r7
+ 800388c: f85d 7b04 ldr.w r7, [sp], #4
+ 8003890: 4770 bx lr
+
+08003892 <LL_RCC_SetSAIClockSource>:
+{
+ 8003892: b480 push {r7}
+ 8003894: b083 sub sp, #12
+ 8003896: af00 add r7, sp, #0
+ 8003898: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, RCC_CCIPR_SAI1SEL, SAIxSource);
+ 800389a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800389e: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 80038a2: f423 0240 bic.w r2, r3, #12582912 @ 0xc00000
+ 80038a6: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80038aa: 687b ldr r3, [r7, #4]
+ 80038ac: 4313 orrs r3, r2
+ 80038ae: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 80038b2: bf00 nop
+ 80038b4: 370c adds r7, #12
+ 80038b6: 46bd mov sp, r7
+ 80038b8: f85d 7b04 ldr.w r7, [sp], #4
+ 80038bc: 4770 bx lr
+
+080038be <LL_RCC_SetRNGClockSource>:
+{
+ 80038be: b480 push {r7}
+ 80038c0: b083 sub sp, #12
+ 80038c2: af00 add r7, sp, #0
+ 80038c4: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, RCC_CCIPR_RNGSEL, RNGxSource);
+ 80038c6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80038ca: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 80038ce: f023 4240 bic.w r2, r3, #3221225472 @ 0xc0000000
+ 80038d2: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 80038d6: 687b ldr r3, [r7, #4]
+ 80038d8: 4313 orrs r3, r2
+ 80038da: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 80038de: bf00 nop
+ 80038e0: 370c adds r7, #12
+ 80038e2: 46bd mov sp, r7
+ 80038e4: f85d 7b04 ldr.w r7, [sp], #4
+ 80038e8: 4770 bx lr
+
+080038ea <LL_RCC_SetCLK48ClockSource>:
+{
+ 80038ea: b480 push {r7}
+ 80038ec: b083 sub sp, #12
+ 80038ee: af00 add r7, sp, #0
+ 80038f0: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, RCC_CCIPR_CLK48SEL, CLK48xSource);
+ 80038f2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80038f6: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 80038fa: f023 6240 bic.w r2, r3, #201326592 @ 0xc000000
+ 80038fe: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003902: 687b ldr r3, [r7, #4]
+ 8003904: 4313 orrs r3, r2
+ 8003906: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 800390a: bf00 nop
+ 800390c: 370c adds r7, #12
+ 800390e: 46bd mov sp, r7
+ 8003910: f85d 7b04 ldr.w r7, [sp], #4
+ 8003914: 4770 bx lr
+
+08003916 <LL_RCC_SetUSBClockSource>:
+{
+ 8003916: b580 push {r7, lr}
+ 8003918: b082 sub sp, #8
+ 800391a: af00 add r7, sp, #0
+ 800391c: 6078 str r0, [r7, #4]
+ LL_RCC_SetCLK48ClockSource(USBxSource);
+ 800391e: 6878 ldr r0, [r7, #4]
+ 8003920: f7ff ffe3 bl 80038ea <LL_RCC_SetCLK48ClockSource>
+}
+ 8003924: bf00 nop
+ 8003926: 3708 adds r7, #8
+ 8003928: 46bd mov sp, r7
+ 800392a: bd80 pop {r7, pc}
+
+0800392c <LL_RCC_SetADCClockSource>:
+{
+ 800392c: b480 push {r7}
+ 800392e: b083 sub sp, #12
+ 8003930: af00 add r7, sp, #0
+ 8003932: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->CCIPR, RCC_CCIPR_ADCSEL, ADCxSource);
+ 8003934: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003938: f8d3 3088 ldr.w r3, [r3, #136] @ 0x88
+ 800393c: f023 5240 bic.w r2, r3, #805306368 @ 0x30000000
+ 8003940: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003944: 687b ldr r3, [r7, #4]
+ 8003946: 4313 orrs r3, r2
+ 8003948: f8c1 3088 str.w r3, [r1, #136] @ 0x88
+}
+ 800394c: bf00 nop
+ 800394e: 370c adds r7, #12
+ 8003950: 46bd mov sp, r7
+ 8003952: f85d 7b04 ldr.w r7, [sp], #4
+ 8003956: 4770 bx lr
+
+08003958 <LL_RCC_SetRTCClockSource>:
+{
+ 8003958: b480 push {r7}
+ 800395a: b083 sub sp, #12
+ 800395c: af00 add r7, sp, #0
+ 800395e: 6078 str r0, [r7, #4]
+ MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, Source);
+ 8003960: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003964: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8003968: f423 7240 bic.w r2, r3, #768 @ 0x300
+ 800396c: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003970: 687b ldr r3, [r7, #4]
+ 8003972: 4313 orrs r3, r2
+ 8003974: f8c1 3090 str.w r3, [r1, #144] @ 0x90
+}
+ 8003978: bf00 nop
+ 800397a: 370c adds r7, #12
+ 800397c: 46bd mov sp, r7
+ 800397e: f85d 7b04 ldr.w r7, [sp], #4
+ 8003982: 4770 bx lr
+
+08003984 <LL_RCC_GetRTCClockSource>:
+{
+ 8003984: b480 push {r7}
+ 8003986: af00 add r7, sp, #0
+ return (uint32_t)(READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL));
+ 8003988: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800398c: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8003990: f403 7340 and.w r3, r3, #768 @ 0x300
+}
+ 8003994: 4618 mov r0, r3
+ 8003996: 46bd mov sp, r7
+ 8003998: f85d 7b04 ldr.w r7, [sp], #4
+ 800399c: 4770 bx lr
+
+0800399e <LL_RCC_ForceBackupDomainReset>:
+{
+ 800399e: b480 push {r7}
+ 80039a0: af00 add r7, sp, #0
+ SET_BIT(RCC->BDCR, RCC_BDCR_BDRST);
+ 80039a2: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80039a6: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 80039aa: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80039ae: f443 3380 orr.w r3, r3, #65536 @ 0x10000
+ 80039b2: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 80039b6: bf00 nop
+ 80039b8: 46bd mov sp, r7
+ 80039ba: f85d 7b04 ldr.w r7, [sp], #4
+ 80039be: 4770 bx lr
+
+080039c0 <LL_RCC_ReleaseBackupDomainReset>:
+{
+ 80039c0: b480 push {r7}
+ 80039c2: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->BDCR, RCC_BDCR_BDRST);
+ 80039c4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80039c8: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 80039cc: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80039d0: f423 3380 bic.w r3, r3, #65536 @ 0x10000
+ 80039d4: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+}
+ 80039d8: bf00 nop
+ 80039da: 46bd mov sp, r7
+ 80039dc: f85d 7b04 ldr.w r7, [sp], #4
+ 80039e0: 4770 bx lr
+
+080039e2 <LL_RCC_PLLSAI1_Enable>:
+{
+ 80039e2: b480 push {r7}
+ 80039e4: af00 add r7, sp, #0
+ SET_BIT(RCC->CR, RCC_CR_PLLSAI1ON);
+ 80039e6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 80039ea: 681b ldr r3, [r3, #0]
+ 80039ec: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 80039f0: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000
+ 80039f4: 6013 str r3, [r2, #0]
+}
+ 80039f6: bf00 nop
+ 80039f8: 46bd mov sp, r7
+ 80039fa: f85d 7b04 ldr.w r7, [sp], #4
+ 80039fe: 4770 bx lr
+
+08003a00 <LL_RCC_PLLSAI1_Disable>:
+{
+ 8003a00: b480 push {r7}
+ 8003a02: af00 add r7, sp, #0
+ CLEAR_BIT(RCC->CR, RCC_CR_PLLSAI1ON);
+ 8003a04: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003a08: 681b ldr r3, [r3, #0]
+ 8003a0a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8003a0e: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000
+ 8003a12: 6013 str r3, [r2, #0]
+}
+ 8003a14: bf00 nop
+ 8003a16: 46bd mov sp, r7
+ 8003a18: f85d 7b04 ldr.w r7, [sp], #4
+ 8003a1c: 4770 bx lr
+
+08003a1e <LL_RCC_PLLSAI1_IsReady>:
+{
+ 8003a1e: b480 push {r7}
+ 8003a20: af00 add r7, sp, #0
+ return ((READ_BIT(RCC->CR, RCC_CR_PLLSAI1RDY) == (RCC_CR_PLLSAI1RDY)) ? 1UL : 0UL);
+ 8003a22: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003a26: 681b ldr r3, [r3, #0]
+ 8003a28: f003 6300 and.w r3, r3, #134217728 @ 0x8000000
+ 8003a2c: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
+ 8003a30: d101 bne.n 8003a36 <LL_RCC_PLLSAI1_IsReady+0x18>
+ 8003a32: 2301 movs r3, #1
+ 8003a34: e000 b.n 8003a38 <LL_RCC_PLLSAI1_IsReady+0x1a>
+ 8003a36: 2300 movs r3, #0
+}
+ 8003a38: 4618 mov r0, r3
+ 8003a3a: 46bd mov sp, r7
+ 8003a3c: f85d 7b04 ldr.w r7, [sp], #4
+ 8003a40: 4770 bx lr
+
+08003a42 <HAL_RCCEx_PeriphCLKConfig>:
+ * the RTC clock source: in this case the access to Backup domain is enabled.
+ *
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit)
+{
+ 8003a42: b580 push {r7, lr}
+ 8003a44: b088 sub sp, #32
+ 8003a46: af00 add r7, sp, #0
+ 8003a48: 6078 str r0, [r7, #4]
+ uint32_t tickstart;
+ HAL_StatusTypeDef ret = HAL_OK; /* Intermediate status */
+ 8003a4a: 2300 movs r3, #0
+ 8003a4c: 77fb strb r3, [r7, #31]
+ HAL_StatusTypeDef status = HAL_OK; /* Final status */
+ 8003a4e: 2300 movs r3, #0
+ 8003a50: 77bb strb r3, [r7, #30]
+ /* Check the parameters */
+ assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection));
+
+#if defined(SAI1)
+ /*-------------------------- SAI1 clock source configuration ---------------------*/
+ if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SAI1) == RCC_PERIPHCLK_SAI1))
+ 8003a52: 687b ldr r3, [r7, #4]
+ 8003a54: 681b ldr r3, [r3, #0]
+ 8003a56: f003 0340 and.w r3, r3, #64 @ 0x40
+ 8003a5a: 2b00 cmp r3, #0
+ 8003a5c: d034 beq.n 8003ac8 <HAL_RCCEx_PeriphCLKConfig+0x86>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_SAI1CLK(PeriphClkInit->Sai1ClockSelection));
+
+ switch (PeriphClkInit->Sai1ClockSelection)
+ 8003a5e: 687b ldr r3, [r7, #4]
+ 8003a60: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8003a62: f5b3 0f40 cmp.w r3, #12582912 @ 0xc00000
+ 8003a66: d021 beq.n 8003aac <HAL_RCCEx_PeriphCLKConfig+0x6a>
+ 8003a68: f5b3 0f40 cmp.w r3, #12582912 @ 0xc00000
+ 8003a6c: d81b bhi.n 8003aa6 <HAL_RCCEx_PeriphCLKConfig+0x64>
+ 8003a6e: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
+ 8003a72: d01d beq.n 8003ab0 <HAL_RCCEx_PeriphCLKConfig+0x6e>
+ 8003a74: f5b3 0f00 cmp.w r3, #8388608 @ 0x800000
+ 8003a78: d815 bhi.n 8003aa6 <HAL_RCCEx_PeriphCLKConfig+0x64>
+ 8003a7a: 2b00 cmp r3, #0
+ 8003a7c: d00b beq.n 8003a96 <HAL_RCCEx_PeriphCLKConfig+0x54>
+ 8003a7e: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000
+ 8003a82: d110 bne.n 8003aa6 <HAL_RCCEx_PeriphCLKConfig+0x64>
+ {
+ case RCC_SAI1CLKSOURCE_PLL: /* PLL is used as clock source for SAI1 */
+ /* Enable SAI1 Clock output generated form System PLL . */
+ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_SAI1CLK);
+ 8003a84: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003a88: 68db ldr r3, [r3, #12]
+ 8003a8a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8003a8e: f443 3380 orr.w r3, r3, #65536 @ 0x10000
+ 8003a92: 60d3 str r3, [r2, #12]
+
+ /* SAI1 clock source config set later after clock selection check */
+ break;
+ 8003a94: e00d b.n 8003ab2 <HAL_RCCEx_PeriphCLKConfig+0x70>
+
+ case RCC_SAI1CLKSOURCE_PLLSAI1: /* PLLSAI1 is used as clock source for SAI1 */
+ /* PLLSAI1 parameters N & P configuration and clock output (PLLSAI1ClockOut) */
+ ret = RCCEx_PLLSAI1_ConfigNP(&(PeriphClkInit->PLLSAI1));
+ 8003a96: 687b ldr r3, [r7, #4]
+ 8003a98: 3304 adds r3, #4
+ 8003a9a: 4618 mov r0, r3
+ 8003a9c: f000 f947 bl 8003d2e <RCCEx_PLLSAI1_ConfigNP>
+ 8003aa0: 4603 mov r3, r0
+ 8003aa2: 77fb strb r3, [r7, #31]
+ /* SAI1 clock source config set later after clock selection check */
+ break;
+ 8003aa4: e005 b.n 8003ab2 <HAL_RCCEx_PeriphCLKConfig+0x70>
+ case RCC_SAI1CLKSOURCE_HSI:
+
+ break;
+
+ default:
+ ret = HAL_ERROR;
+ 8003aa6: 2301 movs r3, #1
+ 8003aa8: 77fb strb r3, [r7, #31]
+ break;
+ 8003aaa: e002 b.n 8003ab2 <HAL_RCCEx_PeriphCLKConfig+0x70>
+ break;
+ 8003aac: bf00 nop
+ 8003aae: e000 b.n 8003ab2 <HAL_RCCEx_PeriphCLKConfig+0x70>
+ break;
+ 8003ab0: bf00 nop
+ }
+
+ if (ret == HAL_OK)
+ 8003ab2: 7ffb ldrb r3, [r7, #31]
+ 8003ab4: 2b00 cmp r3, #0
+ 8003ab6: d105 bne.n 8003ac4 <HAL_RCCEx_PeriphCLKConfig+0x82>
+ {
+ /* Set the source of SAI1 clock*/
+ __HAL_RCC_SAI1_CONFIG(PeriphClkInit->Sai1ClockSelection);
+ 8003ab8: 687b ldr r3, [r7, #4]
+ 8003aba: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8003abc: 4618 mov r0, r3
+ 8003abe: f7ff fee8 bl 8003892 <LL_RCC_SetSAIClockSource>
+ 8003ac2: e001 b.n 8003ac8 <HAL_RCCEx_PeriphCLKConfig+0x86>
+ }
+ else
+ {
+ /* set overall return value */
+ status = ret;
+ 8003ac4: 7ffb ldrb r3, [r7, #31]
+ 8003ac6: 77bb strb r3, [r7, #30]
+ }
+ }
+#endif /* SAI1 */
+
+ /*-------------------------- RTC clock source configuration ----------------------*/
+ if ((PeriphClkInit->PeriphClockSelection & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)
+ 8003ac8: 687b ldr r3, [r7, #4]
+ 8003aca: 681b ldr r3, [r3, #0]
+ 8003acc: f403 6300 and.w r3, r3, #2048 @ 0x800
+ 8003ad0: 2b00 cmp r3, #0
+ 8003ad2: d046 beq.n 8003b62 <HAL_RCCEx_PeriphCLKConfig+0x120>
+ {
+ uint32_t rtcclocksource = LL_RCC_GetRTCClockSource();
+ 8003ad4: f7ff ff56 bl 8003984 <LL_RCC_GetRTCClockSource>
+ 8003ad8: 61b8 str r0, [r7, #24]
+
+ /* Check for RTC Parameters used to output RTCCLK */
+ assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));
+
+ /* Configure the clock source only if a different source is expected */
+ if (rtcclocksource != PeriphClkInit->RTCClockSelection)
+ 8003ada: 687b ldr r3, [r7, #4]
+ 8003adc: 6c1b ldr r3, [r3, #64] @ 0x40
+ 8003ade: 69ba ldr r2, [r7, #24]
+ 8003ae0: 429a cmp r2, r3
+ 8003ae2: d03c beq.n 8003b5e <HAL_RCCEx_PeriphCLKConfig+0x11c>
+ {
+ /* Enable write access to Backup domain */
+ HAL_PWR_EnableBkUpAccess();
+ 8003ae4: f7fe fc80 bl 80023e8 <HAL_PWR_EnableBkUpAccess>
+
+ /* If a clock source is not yet selected */
+ if (rtcclocksource == RCC_RTCCLKSOURCE_NONE)
+ 8003ae8: 69bb ldr r3, [r7, #24]
+ 8003aea: 2b00 cmp r3, #0
+ 8003aec: d105 bne.n 8003afa <HAL_RCCEx_PeriphCLKConfig+0xb8>
+ {
+ /* Directly set the configuration of the clock source selection */
+ LL_RCC_SetRTCClockSource(PeriphClkInit->RTCClockSelection);
+ 8003aee: 687b ldr r3, [r7, #4]
+ 8003af0: 6c1b ldr r3, [r3, #64] @ 0x40
+ 8003af2: 4618 mov r0, r3
+ 8003af4: f7ff ff30 bl 8003958 <LL_RCC_SetRTCClockSource>
+ 8003af8: e02e b.n 8003b58 <HAL_RCCEx_PeriphCLKConfig+0x116>
+ }
+ else /* A clock source is already selected */
+ {
+ /* Store the content of BDCR register before the reset of Backup Domain */
+ uint32_t bdcr = LL_RCC_ReadReg(BDCR);
+ 8003afa: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003afe: f8d3 3090 ldr.w r3, [r3, #144] @ 0x90
+ 8003b02: 617b str r3, [r7, #20]
+
+ /* RTC Clock selection can be changed only if the Backup Domain is reset */
+ LL_RCC_ForceBackupDomainReset();
+ 8003b04: f7ff ff4b bl 800399e <LL_RCC_ForceBackupDomainReset>
+ LL_RCC_ReleaseBackupDomainReset();
+ 8003b08: f7ff ff5a bl 80039c0 <LL_RCC_ReleaseBackupDomainReset>
+
+ /* Set the value of the clock source selection */
+ MODIFY_REG(bdcr, RCC_BDCR_RTCSEL, PeriphClkInit->RTCClockSelection);
+ 8003b0c: 697b ldr r3, [r7, #20]
+ 8003b0e: f423 7240 bic.w r2, r3, #768 @ 0x300
+ 8003b12: 687b ldr r3, [r7, #4]
+ 8003b14: 6c1b ldr r3, [r3, #64] @ 0x40
+ 8003b16: 4313 orrs r3, r2
+ 8003b18: 617b str r3, [r7, #20]
+
+ /* Restore the content of BDCR register */
+ LL_RCC_WriteReg(BDCR, bdcr);
+ 8003b1a: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8003b1e: 697b ldr r3, [r7, #20]
+ 8003b20: f8c2 3090 str.w r3, [r2, #144] @ 0x90
+
+ /* Wait for LSE reactivation if LSE was enable prior to Backup Domain reset */
+ if (LL_RCC_LSE_IsEnabled() == 1U)
+ 8003b24: f7ff fdf0 bl 8003708 <LL_RCC_LSE_IsEnabled>
+ 8003b28: 4603 mov r3, r0
+ 8003b2a: 2b01 cmp r3, #1
+ 8003b2c: d114 bne.n 8003b58 <HAL_RCCEx_PeriphCLKConfig+0x116>
+ {
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003b2e: f7fd ff39 bl 80019a4 <HAL_GetTick>
+ 8003b32: 6138 str r0, [r7, #16]
+
+ /* Wait till LSE is ready */
+ while (LL_RCC_LSE_IsReady() != 1U)
+ 8003b34: e00b b.n 8003b4e <HAL_RCCEx_PeriphCLKConfig+0x10c>
+ {
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
+ 8003b36: f7fd ff35 bl 80019a4 <HAL_GetTick>
+ 8003b3a: 4602 mov r2, r0
+ 8003b3c: 693b ldr r3, [r7, #16]
+ 8003b3e: 1ad3 subs r3, r2, r3
+ 8003b40: f241 3288 movw r2, #5000 @ 0x1388
+ 8003b44: 4293 cmp r3, r2
+ 8003b46: d902 bls.n 8003b4e <HAL_RCCEx_PeriphCLKConfig+0x10c>
+ {
+ ret = HAL_TIMEOUT;
+ 8003b48: 2303 movs r3, #3
+ 8003b4a: 77fb strb r3, [r7, #31]
+ break;
+ 8003b4c: e004 b.n 8003b58 <HAL_RCCEx_PeriphCLKConfig+0x116>
+ while (LL_RCC_LSE_IsReady() != 1U)
+ 8003b4e: f7ff fded bl 800372c <LL_RCC_LSE_IsReady>
+ 8003b52: 4603 mov r3, r0
+ 8003b54: 2b01 cmp r3, #1
+ 8003b56: d1ee bne.n 8003b36 <HAL_RCCEx_PeriphCLKConfig+0xf4>
+ }
+ }
+ }
+
+ /* set overall return value */
+ status = ret;
+ 8003b58: 7ffb ldrb r3, [r7, #31]
+ 8003b5a: 77bb strb r3, [r7, #30]
+ 8003b5c: e001 b.n 8003b62 <HAL_RCCEx_PeriphCLKConfig+0x120>
+ }
+ else
+ {
+ /* set overall return value */
+ status = ret;
+ 8003b5e: 7ffb ldrb r3, [r7, #31]
+ 8003b60: 77bb strb r3, [r7, #30]
+ }
+
+ }
+
+ /*-------------------------- USART1 clock source configuration -------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USART1) == RCC_PERIPHCLK_USART1)
+ 8003b62: 687b ldr r3, [r7, #4]
+ 8003b64: 681b ldr r3, [r3, #0]
+ 8003b66: f003 0301 and.w r3, r3, #1
+ 8003b6a: 2b00 cmp r3, #0
+ 8003b6c: d004 beq.n 8003b78 <HAL_RCCEx_PeriphCLKConfig+0x136>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_USART1CLKSOURCE(PeriphClkInit->Usart1ClockSelection));
+
+ /* Configure the USART1 clock source */
+ __HAL_RCC_USART1_CONFIG(PeriphClkInit->Usart1ClockSelection);
+ 8003b6e: 687b ldr r3, [r7, #4]
+ 8003b70: 699b ldr r3, [r3, #24]
+ 8003b72: 4618 mov r0, r3
+ 8003b74: f7ff fe2a bl 80037cc <LL_RCC_SetUSARTClockSource>
+ }
+
+#if defined(LPUART1)
+ /*-------------------------- LPUART1 clock source configuration ------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPUART1) == RCC_PERIPHCLK_LPUART1)
+ 8003b78: 687b ldr r3, [r7, #4]
+ 8003b7a: 681b ldr r3, [r3, #0]
+ 8003b7c: f003 0302 and.w r3, r3, #2
+ 8003b80: 2b00 cmp r3, #0
+ 8003b82: d004 beq.n 8003b8e <HAL_RCCEx_PeriphCLKConfig+0x14c>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_LPUART1CLKSOURCE(PeriphClkInit->Lpuart1ClockSelection));
+
+ /* Configure the LPUAR1 clock source */
+ __HAL_RCC_LPUART1_CONFIG(PeriphClkInit->Lpuart1ClockSelection);
+ 8003b84: 687b ldr r3, [r7, #4]
+ 8003b86: 69db ldr r3, [r3, #28]
+ 8003b88: 4618 mov r0, r3
+ 8003b8a: f7ff fe35 bl 80037f8 <LL_RCC_SetLPUARTClockSource>
+ }
+#endif /* LPUART1 */
+
+ /*-------------------------- LPTIM1 clock source configuration -------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM1) == (RCC_PERIPHCLK_LPTIM1))
+ 8003b8e: 687b ldr r3, [r7, #4]
+ 8003b90: 681b ldr r3, [r3, #0]
+ 8003b92: f003 0310 and.w r3, r3, #16
+ 8003b96: 2b00 cmp r3, #0
+ 8003b98: d004 beq.n 8003ba4 <HAL_RCCEx_PeriphCLKConfig+0x162>
+ {
+ assert_param(IS_RCC_LPTIM1CLK(PeriphClkInit->Lptim1ClockSelection));
+ __HAL_RCC_LPTIM1_CONFIG(PeriphClkInit->Lptim1ClockSelection);
+ 8003b9a: 687b ldr r3, [r7, #4]
+ 8003b9c: 6a9b ldr r3, [r3, #40] @ 0x28
+ 8003b9e: 4618 mov r0, r3
+ 8003ba0: f7ff fe5d bl 800385e <LL_RCC_SetLPTIMClockSource>
+ }
+
+ /*-------------------------- LPTIM2 clock source configuration -------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_LPTIM2) == (RCC_PERIPHCLK_LPTIM2))
+ 8003ba4: 687b ldr r3, [r7, #4]
+ 8003ba6: 681b ldr r3, [r3, #0]
+ 8003ba8: f003 0320 and.w r3, r3, #32
+ 8003bac: 2b00 cmp r3, #0
+ 8003bae: d004 beq.n 8003bba <HAL_RCCEx_PeriphCLKConfig+0x178>
+ {
+ assert_param(IS_RCC_LPTIM2CLK(PeriphClkInit->Lptim2ClockSelection));
+ __HAL_RCC_LPTIM2_CONFIG(PeriphClkInit->Lptim2ClockSelection);
+ 8003bb0: 687b ldr r3, [r7, #4]
+ 8003bb2: 6adb ldr r3, [r3, #44] @ 0x2c
+ 8003bb4: 4618 mov r0, r3
+ 8003bb6: f7ff fe52 bl 800385e <LL_RCC_SetLPTIMClockSource>
+ }
+
+ /*-------------------------- I2C1 clock source configuration ---------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C1) == RCC_PERIPHCLK_I2C1)
+ 8003bba: 687b ldr r3, [r7, #4]
+ 8003bbc: 681b ldr r3, [r3, #0]
+ 8003bbe: f003 0304 and.w r3, r3, #4
+ 8003bc2: 2b00 cmp r3, #0
+ 8003bc4: d004 beq.n 8003bd0 <HAL_RCCEx_PeriphCLKConfig+0x18e>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_I2C1CLKSOURCE(PeriphClkInit->I2c1ClockSelection));
+
+ /* Configure the I2C1 clock source */
+ __HAL_RCC_I2C1_CONFIG(PeriphClkInit->I2c1ClockSelection);
+ 8003bc6: 687b ldr r3, [r7, #4]
+ 8003bc8: 6a1b ldr r3, [r3, #32]
+ 8003bca: 4618 mov r0, r3
+ 8003bcc: f7ff fe2a bl 8003824 <LL_RCC_SetI2CClockSource>
+ }
+
+#if defined(I2C3)
+ /*-------------------------- I2C3 clock source configuration ---------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2C3) == RCC_PERIPHCLK_I2C3)
+ 8003bd0: 687b ldr r3, [r7, #4]
+ 8003bd2: 681b ldr r3, [r3, #0]
+ 8003bd4: f003 0308 and.w r3, r3, #8
+ 8003bd8: 2b00 cmp r3, #0
+ 8003bda: d004 beq.n 8003be6 <HAL_RCCEx_PeriphCLKConfig+0x1a4>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_I2C3CLKSOURCE(PeriphClkInit->I2c3ClockSelection));
+
+ /* Configure the I2C3 clock source */
+ __HAL_RCC_I2C3_CONFIG(PeriphClkInit->I2c3ClockSelection);
+ 8003bdc: 687b ldr r3, [r7, #4]
+ 8003bde: 6a5b ldr r3, [r3, #36] @ 0x24
+ 8003be0: 4618 mov r0, r3
+ 8003be2: f7ff fe1f bl 8003824 <LL_RCC_SetI2CClockSource>
+ }
+#endif /* I2C3 */
+
+#if defined(USB)
+ /*-------------------------- USB clock source configuration ----------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == (RCC_PERIPHCLK_USB))
+ 8003be6: 687b ldr r3, [r7, #4]
+ 8003be8: 681b ldr r3, [r3, #0]
+ 8003bea: f403 7380 and.w r3, r3, #256 @ 0x100
+ 8003bee: 2b00 cmp r3, #0
+ 8003bf0: d022 beq.n 8003c38 <HAL_RCCEx_PeriphCLKConfig+0x1f6>
+ {
+ assert_param(IS_RCC_USBCLKSOURCE(PeriphClkInit->UsbClockSelection));
+ __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);
+ 8003bf2: 687b ldr r3, [r7, #4]
+ 8003bf4: 6b5b ldr r3, [r3, #52] @ 0x34
+ 8003bf6: 4618 mov r0, r3
+ 8003bf8: f7ff fe8d bl 8003916 <LL_RCC_SetUSBClockSource>
+
+ if (PeriphClkInit->UsbClockSelection == RCC_USBCLKSOURCE_PLL)
+ 8003bfc: 687b ldr r3, [r7, #4]
+ 8003bfe: 6b5b ldr r3, [r3, #52] @ 0x34
+ 8003c00: f1b3 6f00 cmp.w r3, #134217728 @ 0x8000000
+ 8003c04: d107 bne.n 8003c16 <HAL_RCCEx_PeriphCLKConfig+0x1d4>
+ {
+ /* Enable PLLQ output */
+ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_USBCLK);
+ 8003c06: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003c0a: 68db ldr r3, [r3, #12]
+ 8003c0c: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8003c10: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
+ 8003c14: 60d3 str r3, [r2, #12]
+ }
+#if defined(SAI1)
+ if (PeriphClkInit->UsbClockSelection == RCC_USBCLKSOURCE_PLLSAI1)
+ 8003c16: 687b ldr r3, [r7, #4]
+ 8003c18: 6b5b ldr r3, [r3, #52] @ 0x34
+ 8003c1a: f1b3 6f80 cmp.w r3, #67108864 @ 0x4000000
+ 8003c1e: d10b bne.n 8003c38 <HAL_RCCEx_PeriphCLKConfig+0x1f6>
+ {
+ /* PLLSAI1 parameters N & Q configuration and clock output (PLLSAI1ClockOut) */
+ ret = RCCEx_PLLSAI1_ConfigNQ(&(PeriphClkInit->PLLSAI1));
+ 8003c20: 687b ldr r3, [r7, #4]
+ 8003c22: 3304 adds r3, #4
+ 8003c24: 4618 mov r0, r3
+ 8003c26: f000 f8dd bl 8003de4 <RCCEx_PLLSAI1_ConfigNQ>
+ 8003c2a: 4603 mov r3, r0
+ 8003c2c: 77fb strb r3, [r7, #31]
+
+ if (ret != HAL_OK)
+ 8003c2e: 7ffb ldrb r3, [r7, #31]
+ 8003c30: 2b00 cmp r3, #0
+ 8003c32: d001 beq.n 8003c38 <HAL_RCCEx_PeriphCLKConfig+0x1f6>
+ {
+ /* set overall return value */
+ status = ret;
+ 8003c34: 7ffb ldrb r3, [r7, #31]
+ 8003c36: 77bb strb r3, [r7, #30]
+#endif /* SAI1 */
+ }
+#endif /* USB */
+
+ /*-------------------------- RNG clock source configuration ----------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RNG) == (RCC_PERIPHCLK_RNG))
+ 8003c38: 687b ldr r3, [r7, #4]
+ 8003c3a: 681b ldr r3, [r3, #0]
+ 8003c3c: f403 7300 and.w r3, r3, #512 @ 0x200
+ 8003c40: 2b00 cmp r3, #0
+ 8003c42: d02b beq.n 8003c9c <HAL_RCCEx_PeriphCLKConfig+0x25a>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_RNGCLKSOURCE(PeriphClkInit->RngClockSelection));
+
+ /* Configure the RNG clock source */
+ __HAL_RCC_RNG_CONFIG(PeriphClkInit->RngClockSelection);
+ 8003c44: 687b ldr r3, [r7, #4]
+ 8003c46: 6b9b ldr r3, [r3, #56] @ 0x38
+ 8003c48: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000
+ 8003c4c: d008 beq.n 8003c60 <HAL_RCCEx_PeriphCLKConfig+0x21e>
+ 8003c4e: 687b ldr r3, [r7, #4]
+ 8003c50: 6b9b ldr r3, [r3, #56] @ 0x38
+ 8003c52: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000
+ 8003c56: d003 beq.n 8003c60 <HAL_RCCEx_PeriphCLKConfig+0x21e>
+ 8003c58: 687b ldr r3, [r7, #4]
+ 8003c5a: 6b9b ldr r3, [r3, #56] @ 0x38
+ 8003c5c: 2b00 cmp r3, #0
+ 8003c5e: d105 bne.n 8003c6c <HAL_RCCEx_PeriphCLKConfig+0x22a>
+ 8003c60: 687b ldr r3, [r7, #4]
+ 8003c62: 6b9b ldr r3, [r3, #56] @ 0x38
+ 8003c64: 4618 mov r0, r3
+ 8003c66: f7ff fe2a bl 80038be <LL_RCC_SetRNGClockSource>
+ 8003c6a: e00a b.n 8003c82 <HAL_RCCEx_PeriphCLKConfig+0x240>
+ 8003c6c: 687b ldr r3, [r7, #4]
+ 8003c6e: 6b9b ldr r3, [r3, #56] @ 0x38
+ 8003c70: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000
+ 8003c74: 60fb str r3, [r7, #12]
+ 8003c76: 2000 movs r0, #0
+ 8003c78: f7ff fe21 bl 80038be <LL_RCC_SetRNGClockSource>
+ 8003c7c: 68f8 ldr r0, [r7, #12]
+ 8003c7e: f7ff fe34 bl 80038ea <LL_RCC_SetCLK48ClockSource>
+
+ if (PeriphClkInit->RngClockSelection == RCC_RNGCLKSOURCE_PLL)
+ 8003c82: 687b ldr r3, [r7, #4]
+ 8003c84: 6b9b ldr r3, [r3, #56] @ 0x38
+ 8003c86: f1b3 5fc0 cmp.w r3, #402653184 @ 0x18000000
+ 8003c8a: d107 bne.n 8003c9c <HAL_RCCEx_PeriphCLKConfig+0x25a>
+ {
+ /* Enable PLLQ output */
+ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_RNGCLK);
+ 8003c8c: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003c90: 68db ldr r3, [r3, #12]
+ 8003c92: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8003c96: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000
+ 8003c9a: 60d3 str r3, [r2, #12]
+ }
+ }
+
+ /*-------------------------- ADC clock source configuration ----------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC)
+ 8003c9c: 687b ldr r3, [r7, #4]
+ 8003c9e: 681b ldr r3, [r3, #0]
+ 8003ca0: f403 6380 and.w r3, r3, #1024 @ 0x400
+ 8003ca4: 2b00 cmp r3, #0
+ 8003ca6: d022 beq.n 8003cee <HAL_RCCEx_PeriphCLKConfig+0x2ac>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_ADCCLKSOURCE(PeriphClkInit->AdcClockSelection));
+
+ /* Configure the ADC interface clock source */
+ __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);
+ 8003ca8: 687b ldr r3, [r7, #4]
+ 8003caa: 6bdb ldr r3, [r3, #60] @ 0x3c
+ 8003cac: 4618 mov r0, r3
+ 8003cae: f7ff fe3d bl 800392c <LL_RCC_SetADCClockSource>
+
+ if (PeriphClkInit->AdcClockSelection == RCC_ADCCLKSOURCE_PLL)
+ 8003cb2: 687b ldr r3, [r7, #4]
+ 8003cb4: 6bdb ldr r3, [r3, #60] @ 0x3c
+ 8003cb6: f1b3 5f00 cmp.w r3, #536870912 @ 0x20000000
+ 8003cba: d107 bne.n 8003ccc <HAL_RCCEx_PeriphCLKConfig+0x28a>
+ {
+ /* Enable RCC_PLL_RNGCLK output */
+ __HAL_RCC_PLLCLKOUT_ENABLE(RCC_PLL_ADCCLK);
+ 8003cbc: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003cc0: 68db ldr r3, [r3, #12]
+ 8003cc2: f04f 42b0 mov.w r2, #1476395008 @ 0x58000000
+ 8003cc6: f443 3380 orr.w r3, r3, #65536 @ 0x10000
+ 8003cca: 60d3 str r3, [r2, #12]
+ }
+
+#if defined(SAI1)
+ if (PeriphClkInit->AdcClockSelection == RCC_ADCCLKSOURCE_PLLSAI1)
+ 8003ccc: 687b ldr r3, [r7, #4]
+ 8003cce: 6bdb ldr r3, [r3, #60] @ 0x3c
+ 8003cd0: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000
+ 8003cd4: d10b bne.n 8003cee <HAL_RCCEx_PeriphCLKConfig+0x2ac>
+ {
+ /* PLLSAI1 parameters N & R configuration and clock output (PLLSAI1ClockOut) */
+ ret = RCCEx_PLLSAI1_ConfigNR(&(PeriphClkInit->PLLSAI1));
+ 8003cd6: 687b ldr r3, [r7, #4]
+ 8003cd8: 3304 adds r3, #4
+ 8003cda: 4618 mov r0, r3
+ 8003cdc: f000 f8dd bl 8003e9a <RCCEx_PLLSAI1_ConfigNR>
+ 8003ce0: 4603 mov r3, r0
+ 8003ce2: 77fb strb r3, [r7, #31]
+
+ if (ret != HAL_OK)
+ 8003ce4: 7ffb ldrb r3, [r7, #31]
+ 8003ce6: 2b00 cmp r3, #0
+ 8003ce8: d001 beq.n 8003cee <HAL_RCCEx_PeriphCLKConfig+0x2ac>
+ {
+ /* set overall return value */
+ status = ret;
+ 8003cea: 7ffb ldrb r3, [r7, #31]
+ 8003cec: 77bb strb r3, [r7, #30]
+ }
+#endif /* SAI1 */
+ }
+
+ /*-------------------------- RFWKP clock source configuration ----------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RFWAKEUP) == RCC_PERIPHCLK_RFWAKEUP)
+ 8003cee: 687b ldr r3, [r7, #4]
+ 8003cf0: 681b ldr r3, [r3, #0]
+ 8003cf2: f403 5380 and.w r3, r3, #4096 @ 0x1000
+ 8003cf6: 2b00 cmp r3, #0
+ 8003cf8: d004 beq.n 8003d04 <HAL_RCCEx_PeriphCLKConfig+0x2c2>
+ {
+ /* Check the parameters */
+ assert_param(IS_RCC_RFWKPCLKSOURCE(PeriphClkInit->RFWakeUpClockSelection));
+
+ /* Configure the RFWKP interface clock source */
+ __HAL_RCC_RFWAKEUP_CONFIG(PeriphClkInit->RFWakeUpClockSelection);
+ 8003cfa: 687b ldr r3, [r7, #4]
+ 8003cfc: 6c5b ldr r3, [r3, #68] @ 0x44
+ 8003cfe: 4618 mov r0, r3
+ 8003d00: f7ff fd26 bl 8003750 <LL_RCC_SetRFWKPClockSource>
+
+ }
+
+#if defined(RCC_SMPS_SUPPORT)
+ /*-------------------------- SMPS clock source configuration ----------------------*/
+ if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_SMPS) == RCC_PERIPHCLK_SMPS)
+ 8003d04: 687b ldr r3, [r7, #4]
+ 8003d06: 681b ldr r3, [r3, #0]
+ 8003d08: f403 5300 and.w r3, r3, #8192 @ 0x2000
+ 8003d0c: 2b00 cmp r3, #0
+ 8003d0e: d009 beq.n 8003d24 <HAL_RCCEx_PeriphCLKConfig+0x2e2>
+ /* Check the parameters */
+ assert_param(IS_RCC_SMPSCLKDIV(PeriphClkInit->SmpsDivSelection));
+ assert_param(IS_RCC_SMPSCLKSOURCE(PeriphClkInit->SmpsClockSelection));
+
+ /* Configure the SMPS interface clock division factor */
+ __HAL_RCC_SMPS_DIV_CONFIG(PeriphClkInit->SmpsDivSelection);
+ 8003d10: 687b ldr r3, [r7, #4]
+ 8003d12: 6cdb ldr r3, [r3, #76] @ 0x4c
+ 8003d14: 4618 mov r0, r3
+ 8003d16: f7ff fd45 bl 80037a4 <LL_RCC_SetSMPSPrescaler>
+
+ /* Configure the SMPS interface clock source */
+ __HAL_RCC_SMPS_CONFIG(PeriphClkInit->SmpsClockSelection);
+ 8003d1a: 687b ldr r3, [r7, #4]
+ 8003d1c: 6c9b ldr r3, [r3, #72] @ 0x48
+ 8003d1e: 4618 mov r0, r3
+ 8003d20: f7ff fd2c bl 800377c <LL_RCC_SetSMPSClockSource>
+ }
+#endif /* RCC_SMPS_SUPPORT */
+
+ return status;
+ 8003d24: 7fbb ldrb r3, [r7, #30]
+}
+ 8003d26: 4618 mov r0, r3
+ 8003d28: 3720 adds r7, #32
+ 8003d2a: 46bd mov sp, r7
+ 8003d2c: bd80 pop {r7, pc}
+
+08003d2e <RCCEx_PLLSAI1_ConfigNP>:
+ * @note PLLSAI1 is temporary disable to apply new parameters
+ *
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef RCCEx_PLLSAI1_ConfigNP(RCC_PLLSAI1InitTypeDef *PLLSAI1)
+{
+ 8003d2e: b580 push {r7, lr}
+ 8003d30: b084 sub sp, #16
+ 8003d32: af00 add r7, sp, #0
+ 8003d34: 6078 str r0, [r7, #4]
+ uint32_t tickstart;
+ HAL_StatusTypeDef status = HAL_OK;
+ 8003d36: 2300 movs r3, #0
+ 8003d38: 73fb strb r3, [r7, #15]
+ assert_param(IS_RCC_PLLN_VALUE(PLLSAI1->PLLN));
+ assert_param(IS_RCC_PLLP_VALUE(PLLSAI1->PLLP));
+ assert_param(IS_RCC_PLLSAI1CLOCKOUT_VALUE(PLLSAI1->PLLSAI1ClockOut));
+
+ /* Disable the PLLSAI1 */
+ __HAL_RCC_PLLSAI1_DISABLE();
+ 8003d3a: f7ff fe61 bl 8003a00 <LL_RCC_PLLSAI1_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003d3e: f7fd fe31 bl 80019a4 <HAL_GetTick>
+ 8003d42: 60b8 str r0, [r7, #8]
+
+ /* Wait till PLLSAI1 is ready to be updated */
+ while (LL_RCC_PLLSAI1_IsReady() != 0U)
+ 8003d44: e009 b.n 8003d5a <RCCEx_PLLSAI1_ConfigNP+0x2c>
+ {
+ if ((HAL_GetTick() - tickstart) > PLLSAI1_TIMEOUT_VALUE)
+ 8003d46: f7fd fe2d bl 80019a4 <HAL_GetTick>
+ 8003d4a: 4602 mov r2, r0
+ 8003d4c: 68bb ldr r3, [r7, #8]
+ 8003d4e: 1ad3 subs r3, r2, r3
+ 8003d50: 2b02 cmp r3, #2
+ 8003d52: d902 bls.n 8003d5a <RCCEx_PLLSAI1_ConfigNP+0x2c>
+ {
+ status = HAL_TIMEOUT;
+ 8003d54: 2303 movs r3, #3
+ 8003d56: 73fb strb r3, [r7, #15]
+ break;
+ 8003d58: e004 b.n 8003d64 <RCCEx_PLLSAI1_ConfigNP+0x36>
+ while (LL_RCC_PLLSAI1_IsReady() != 0U)
+ 8003d5a: f7ff fe60 bl 8003a1e <LL_RCC_PLLSAI1_IsReady>
+ 8003d5e: 4603 mov r3, r0
+ 8003d60: 2b00 cmp r3, #0
+ 8003d62: d1f0 bne.n 8003d46 <RCCEx_PLLSAI1_ConfigNP+0x18>
+ }
+ }
+
+ if (status == HAL_OK)
+ 8003d64: 7bfb ldrb r3, [r7, #15]
+ 8003d66: 2b00 cmp r3, #0
+ 8003d68: d137 bne.n 8003dda <RCCEx_PLLSAI1_ConfigNP+0xac>
+ {
+ /* Configure the PLLSAI1 Multiplication factor N */
+ __HAL_RCC_PLLSAI1_MULN_CONFIG(PLLSAI1->PLLN);
+ 8003d6a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003d6e: 691b ldr r3, [r3, #16]
+ 8003d70: f423 42fe bic.w r2, r3, #32512 @ 0x7f00
+ 8003d74: 687b ldr r3, [r7, #4]
+ 8003d76: 681b ldr r3, [r3, #0]
+ 8003d78: 021b lsls r3, r3, #8
+ 8003d7a: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003d7e: 4313 orrs r3, r2
+ 8003d80: 610b str r3, [r1, #16]
+
+ /* Configure the PLLSAI1 Division factor P */
+ __HAL_RCC_PLLSAI1_DIVP_CONFIG(PLLSAI1->PLLP);
+ 8003d82: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003d86: 691b ldr r3, [r3, #16]
+ 8003d88: f423 1278 bic.w r2, r3, #4063232 @ 0x3e0000
+ 8003d8c: 687b ldr r3, [r7, #4]
+ 8003d8e: 685b ldr r3, [r3, #4]
+ 8003d90: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003d94: 4313 orrs r3, r2
+ 8003d96: 610b str r3, [r1, #16]
+
+ /* Enable the PLLSAI1 again by setting PLLSAI1ON to 1*/
+ __HAL_RCC_PLLSAI1_ENABLE();
+ 8003d98: f7ff fe23 bl 80039e2 <LL_RCC_PLLSAI1_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003d9c: f7fd fe02 bl 80019a4 <HAL_GetTick>
+ 8003da0: 60b8 str r0, [r7, #8]
+
+ /* Wait till PLLSAI1 is ready */
+ while (LL_RCC_PLLSAI1_IsReady() != 1U)
+ 8003da2: e009 b.n 8003db8 <RCCEx_PLLSAI1_ConfigNP+0x8a>
+ {
+ if ((HAL_GetTick() - tickstart) > PLLSAI1_TIMEOUT_VALUE)
+ 8003da4: f7fd fdfe bl 80019a4 <HAL_GetTick>
+ 8003da8: 4602 mov r2, r0
+ 8003daa: 68bb ldr r3, [r7, #8]
+ 8003dac: 1ad3 subs r3, r2, r3
+ 8003dae: 2b02 cmp r3, #2
+ 8003db0: d902 bls.n 8003db8 <RCCEx_PLLSAI1_ConfigNP+0x8a>
+ {
+ status = HAL_TIMEOUT;
+ 8003db2: 2303 movs r3, #3
+ 8003db4: 73fb strb r3, [r7, #15]
+ break;
+ 8003db6: e004 b.n 8003dc2 <RCCEx_PLLSAI1_ConfigNP+0x94>
+ while (LL_RCC_PLLSAI1_IsReady() != 1U)
+ 8003db8: f7ff fe31 bl 8003a1e <LL_RCC_PLLSAI1_IsReady>
+ 8003dbc: 4603 mov r3, r0
+ 8003dbe: 2b01 cmp r3, #1
+ 8003dc0: d1f0 bne.n 8003da4 <RCCEx_PLLSAI1_ConfigNP+0x76>
+ }
+ }
+
+ if (status == HAL_OK)
+ 8003dc2: 7bfb ldrb r3, [r7, #15]
+ 8003dc4: 2b00 cmp r3, #0
+ 8003dc6: d108 bne.n 8003dda <RCCEx_PLLSAI1_ConfigNP+0xac>
+ {
+ /* Configure the PLLSAI1 Clock output(s) */
+ __HAL_RCC_PLLSAI1CLKOUT_ENABLE(PLLSAI1->PLLSAI1ClockOut);
+ 8003dc8: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003dcc: 691a ldr r2, [r3, #16]
+ 8003dce: 687b ldr r3, [r7, #4]
+ 8003dd0: 691b ldr r3, [r3, #16]
+ 8003dd2: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003dd6: 4313 orrs r3, r2
+ 8003dd8: 610b str r3, [r1, #16]
+ }
+ }
+
+ return status;
+ 8003dda: 7bfb ldrb r3, [r7, #15]
+}
+ 8003ddc: 4618 mov r0, r3
+ 8003dde: 3710 adds r7, #16
+ 8003de0: 46bd mov sp, r7
+ 8003de2: bd80 pop {r7, pc}
+
+08003de4 <RCCEx_PLLSAI1_ConfigNQ>:
+ * @note PLLSAI1 is temporary disable to apply new parameters
+ *
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef RCCEx_PLLSAI1_ConfigNQ(RCC_PLLSAI1InitTypeDef *PLLSAI1)
+{
+ 8003de4: b580 push {r7, lr}
+ 8003de6: b084 sub sp, #16
+ 8003de8: af00 add r7, sp, #0
+ 8003dea: 6078 str r0, [r7, #4]
+ uint32_t tickstart;
+ HAL_StatusTypeDef status = HAL_OK;
+ 8003dec: 2300 movs r3, #0
+ 8003dee: 73fb strb r3, [r7, #15]
+ assert_param(IS_RCC_PLLN_VALUE(PLLSAI1->PLLN));
+ assert_param(IS_RCC_PLLQ_VALUE(PLLSAI1->PLLQ));
+ assert_param(IS_RCC_PLLSAI1CLOCKOUT_VALUE(PLLSAI1->PLLSAI1ClockOut));
+
+ /* Disable the PLLSAI1 */
+ __HAL_RCC_PLLSAI1_DISABLE();
+ 8003df0: f7ff fe06 bl 8003a00 <LL_RCC_PLLSAI1_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003df4: f7fd fdd6 bl 80019a4 <HAL_GetTick>
+ 8003df8: 60b8 str r0, [r7, #8]
+
+ /* Wait till PLLSAI1 is ready to be updated */
+ while (LL_RCC_PLLSAI1_IsReady() != 0U)
+ 8003dfa: e009 b.n 8003e10 <RCCEx_PLLSAI1_ConfigNQ+0x2c>
+ {
+ if ((HAL_GetTick() - tickstart) > PLLSAI1_TIMEOUT_VALUE)
+ 8003dfc: f7fd fdd2 bl 80019a4 <HAL_GetTick>
+ 8003e00: 4602 mov r2, r0
+ 8003e02: 68bb ldr r3, [r7, #8]
+ 8003e04: 1ad3 subs r3, r2, r3
+ 8003e06: 2b02 cmp r3, #2
+ 8003e08: d902 bls.n 8003e10 <RCCEx_PLLSAI1_ConfigNQ+0x2c>
+ {
+ status = HAL_TIMEOUT;
+ 8003e0a: 2303 movs r3, #3
+ 8003e0c: 73fb strb r3, [r7, #15]
+ break;
+ 8003e0e: e004 b.n 8003e1a <RCCEx_PLLSAI1_ConfigNQ+0x36>
+ while (LL_RCC_PLLSAI1_IsReady() != 0U)
+ 8003e10: f7ff fe05 bl 8003a1e <LL_RCC_PLLSAI1_IsReady>
+ 8003e14: 4603 mov r3, r0
+ 8003e16: 2b00 cmp r3, #0
+ 8003e18: d1f0 bne.n 8003dfc <RCCEx_PLLSAI1_ConfigNQ+0x18>
+ }
+ }
+
+ if (status == HAL_OK)
+ 8003e1a: 7bfb ldrb r3, [r7, #15]
+ 8003e1c: 2b00 cmp r3, #0
+ 8003e1e: d137 bne.n 8003e90 <RCCEx_PLLSAI1_ConfigNQ+0xac>
+ {
+ /* Configure the PLLSAI1 Multiplication factor N */
+ __HAL_RCC_PLLSAI1_MULN_CONFIG(PLLSAI1->PLLN);
+ 8003e20: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003e24: 691b ldr r3, [r3, #16]
+ 8003e26: f423 42fe bic.w r2, r3, #32512 @ 0x7f00
+ 8003e2a: 687b ldr r3, [r7, #4]
+ 8003e2c: 681b ldr r3, [r3, #0]
+ 8003e2e: 021b lsls r3, r3, #8
+ 8003e30: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003e34: 4313 orrs r3, r2
+ 8003e36: 610b str r3, [r1, #16]
+ /* Configure the PLLSAI1 Division factor Q */
+ __HAL_RCC_PLLSAI1_DIVQ_CONFIG(PLLSAI1->PLLQ);
+ 8003e38: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003e3c: 691b ldr r3, [r3, #16]
+ 8003e3e: f023 6260 bic.w r2, r3, #234881024 @ 0xe000000
+ 8003e42: 687b ldr r3, [r7, #4]
+ 8003e44: 689b ldr r3, [r3, #8]
+ 8003e46: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003e4a: 4313 orrs r3, r2
+ 8003e4c: 610b str r3, [r1, #16]
+
+ /* Enable the PLLSAI1 again by setting PLLSAI1ON to 1*/
+ __HAL_RCC_PLLSAI1_ENABLE();
+ 8003e4e: f7ff fdc8 bl 80039e2 <LL_RCC_PLLSAI1_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003e52: f7fd fda7 bl 80019a4 <HAL_GetTick>
+ 8003e56: 60b8 str r0, [r7, #8]
+
+ /* Wait till PLLSAI1 is ready */
+ while (LL_RCC_PLLSAI1_IsReady() != 1U)
+ 8003e58: e009 b.n 8003e6e <RCCEx_PLLSAI1_ConfigNQ+0x8a>
+ {
+ if ((HAL_GetTick() - tickstart) > PLLSAI1_TIMEOUT_VALUE)
+ 8003e5a: f7fd fda3 bl 80019a4 <HAL_GetTick>
+ 8003e5e: 4602 mov r2, r0
+ 8003e60: 68bb ldr r3, [r7, #8]
+ 8003e62: 1ad3 subs r3, r2, r3
+ 8003e64: 2b02 cmp r3, #2
+ 8003e66: d902 bls.n 8003e6e <RCCEx_PLLSAI1_ConfigNQ+0x8a>
+ {
+ status = HAL_TIMEOUT;
+ 8003e68: 2303 movs r3, #3
+ 8003e6a: 73fb strb r3, [r7, #15]
+ break;
+ 8003e6c: e004 b.n 8003e78 <RCCEx_PLLSAI1_ConfigNQ+0x94>
+ while (LL_RCC_PLLSAI1_IsReady() != 1U)
+ 8003e6e: f7ff fdd6 bl 8003a1e <LL_RCC_PLLSAI1_IsReady>
+ 8003e72: 4603 mov r3, r0
+ 8003e74: 2b01 cmp r3, #1
+ 8003e76: d1f0 bne.n 8003e5a <RCCEx_PLLSAI1_ConfigNQ+0x76>
+ }
+ }
+
+ if (status == HAL_OK)
+ 8003e78: 7bfb ldrb r3, [r7, #15]
+ 8003e7a: 2b00 cmp r3, #0
+ 8003e7c: d108 bne.n 8003e90 <RCCEx_PLLSAI1_ConfigNQ+0xac>
+ {
+ /* Configure the PLLSAI1 Clock output(s) */
+ __HAL_RCC_PLLSAI1CLKOUT_ENABLE(PLLSAI1->PLLSAI1ClockOut);
+ 8003e7e: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003e82: 691a ldr r2, [r3, #16]
+ 8003e84: 687b ldr r3, [r7, #4]
+ 8003e86: 691b ldr r3, [r3, #16]
+ 8003e88: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003e8c: 4313 orrs r3, r2
+ 8003e8e: 610b str r3, [r1, #16]
+ }
+ }
+
+ return status;
+ 8003e90: 7bfb ldrb r3, [r7, #15]
+}
+ 8003e92: 4618 mov r0, r3
+ 8003e94: 3710 adds r7, #16
+ 8003e96: 46bd mov sp, r7
+ 8003e98: bd80 pop {r7, pc}
+
+08003e9a <RCCEx_PLLSAI1_ConfigNR>:
+ * @note PLLSAI1 is temporary disable to apply new parameters
+ *
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef RCCEx_PLLSAI1_ConfigNR(RCC_PLLSAI1InitTypeDef *PLLSAI1)
+{
+ 8003e9a: b580 push {r7, lr}
+ 8003e9c: b084 sub sp, #16
+ 8003e9e: af00 add r7, sp, #0
+ 8003ea0: 6078 str r0, [r7, #4]
+ uint32_t tickstart;
+ HAL_StatusTypeDef status = HAL_OK;
+ 8003ea2: 2300 movs r3, #0
+ 8003ea4: 73fb strb r3, [r7, #15]
+ assert_param(IS_RCC_PLLN_VALUE(PLLSAI1->PLLN));
+ assert_param(IS_RCC_PLLR_VALUE(PLLSAI1->PLLR));
+ assert_param(IS_RCC_PLLSAI1CLOCKOUT_VALUE(PLLSAI1->PLLSAI1ClockOut));
+
+ /* Disable the PLLSAI1 */
+ __HAL_RCC_PLLSAI1_DISABLE();
+ 8003ea6: f7ff fdab bl 8003a00 <LL_RCC_PLLSAI1_Disable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003eaa: f7fd fd7b bl 80019a4 <HAL_GetTick>
+ 8003eae: 60b8 str r0, [r7, #8]
+
+ /* Wait till PLLSAI1 is ready to be updated */
+ while (LL_RCC_PLLSAI1_IsReady() != 0U)
+ 8003eb0: e009 b.n 8003ec6 <RCCEx_PLLSAI1_ConfigNR+0x2c>
+ {
+ if ((HAL_GetTick() - tickstart) > PLLSAI1_TIMEOUT_VALUE)
+ 8003eb2: f7fd fd77 bl 80019a4 <HAL_GetTick>
+ 8003eb6: 4602 mov r2, r0
+ 8003eb8: 68bb ldr r3, [r7, #8]
+ 8003eba: 1ad3 subs r3, r2, r3
+ 8003ebc: 2b02 cmp r3, #2
+ 8003ebe: d902 bls.n 8003ec6 <RCCEx_PLLSAI1_ConfigNR+0x2c>
+ {
+ status = HAL_TIMEOUT;
+ 8003ec0: 2303 movs r3, #3
+ 8003ec2: 73fb strb r3, [r7, #15]
+ break;
+ 8003ec4: e004 b.n 8003ed0 <RCCEx_PLLSAI1_ConfigNR+0x36>
+ while (LL_RCC_PLLSAI1_IsReady() != 0U)
+ 8003ec6: f7ff fdaa bl 8003a1e <LL_RCC_PLLSAI1_IsReady>
+ 8003eca: 4603 mov r3, r0
+ 8003ecc: 2b00 cmp r3, #0
+ 8003ece: d1f0 bne.n 8003eb2 <RCCEx_PLLSAI1_ConfigNR+0x18>
+ }
+ }
+
+ if (status == HAL_OK)
+ 8003ed0: 7bfb ldrb r3, [r7, #15]
+ 8003ed2: 2b00 cmp r3, #0
+ 8003ed4: d137 bne.n 8003f46 <RCCEx_PLLSAI1_ConfigNR+0xac>
+ {
+ /* Configure the PLLSAI1 Multiplication factor N */
+ __HAL_RCC_PLLSAI1_MULN_CONFIG(PLLSAI1->PLLN);
+ 8003ed6: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003eda: 691b ldr r3, [r3, #16]
+ 8003edc: f423 42fe bic.w r2, r3, #32512 @ 0x7f00
+ 8003ee0: 687b ldr r3, [r7, #4]
+ 8003ee2: 681b ldr r3, [r3, #0]
+ 8003ee4: 021b lsls r3, r3, #8
+ 8003ee6: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003eea: 4313 orrs r3, r2
+ 8003eec: 610b str r3, [r1, #16]
+ /* Configure the PLLSAI1 Division factor R */
+ __HAL_RCC_PLLSAI1_DIVR_CONFIG(PLLSAI1->PLLR);
+ 8003eee: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003ef2: 691b ldr r3, [r3, #16]
+ 8003ef4: f023 4260 bic.w r2, r3, #3758096384 @ 0xe0000000
+ 8003ef8: 687b ldr r3, [r7, #4]
+ 8003efa: 68db ldr r3, [r3, #12]
+ 8003efc: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003f00: 4313 orrs r3, r2
+ 8003f02: 610b str r3, [r1, #16]
+
+ /* Enable the PLLSAI1 again by setting PLLSAI1ON to 1*/
+ __HAL_RCC_PLLSAI1_ENABLE();
+ 8003f04: f7ff fd6d bl 80039e2 <LL_RCC_PLLSAI1_Enable>
+
+ /* Get Start Tick*/
+ tickstart = HAL_GetTick();
+ 8003f08: f7fd fd4c bl 80019a4 <HAL_GetTick>
+ 8003f0c: 60b8 str r0, [r7, #8]
+
+ /* Wait till PLLSAI1 is ready */
+ while (LL_RCC_PLLSAI1_IsReady() != 1U)
+ 8003f0e: e009 b.n 8003f24 <RCCEx_PLLSAI1_ConfigNR+0x8a>
+ {
+ if ((HAL_GetTick() - tickstart) > PLLSAI1_TIMEOUT_VALUE)
+ 8003f10: f7fd fd48 bl 80019a4 <HAL_GetTick>
+ 8003f14: 4602 mov r2, r0
+ 8003f16: 68bb ldr r3, [r7, #8]
+ 8003f18: 1ad3 subs r3, r2, r3
+ 8003f1a: 2b02 cmp r3, #2
+ 8003f1c: d902 bls.n 8003f24 <RCCEx_PLLSAI1_ConfigNR+0x8a>
+ {
+ status = HAL_TIMEOUT;
+ 8003f1e: 2303 movs r3, #3
+ 8003f20: 73fb strb r3, [r7, #15]
+ break;
+ 8003f22: e004 b.n 8003f2e <RCCEx_PLLSAI1_ConfigNR+0x94>
+ while (LL_RCC_PLLSAI1_IsReady() != 1U)
+ 8003f24: f7ff fd7b bl 8003a1e <LL_RCC_PLLSAI1_IsReady>
+ 8003f28: 4603 mov r3, r0
+ 8003f2a: 2b01 cmp r3, #1
+ 8003f2c: d1f0 bne.n 8003f10 <RCCEx_PLLSAI1_ConfigNR+0x76>
+ }
+ }
+
+ if (status == HAL_OK)
+ 8003f2e: 7bfb ldrb r3, [r7, #15]
+ 8003f30: 2b00 cmp r3, #0
+ 8003f32: d108 bne.n 8003f46 <RCCEx_PLLSAI1_ConfigNR+0xac>
+ {
+ /* Configure the PLLSAI1 Clock output(s) */
+ __HAL_RCC_PLLSAI1CLKOUT_ENABLE(PLLSAI1->PLLSAI1ClockOut);
+ 8003f34: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8003f38: 691a ldr r2, [r3, #16]
+ 8003f3a: 687b ldr r3, [r7, #4]
+ 8003f3c: 691b ldr r3, [r3, #16]
+ 8003f3e: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8003f42: 4313 orrs r3, r2
+ 8003f44: 610b str r3, [r1, #16]
+ }
+ }
+
+ return status;
+ 8003f46: 7bfb ldrb r3, [r7, #15]
+}
+ 8003f48: 4618 mov r0, r3
+ 8003f4a: 3710 adds r7, #16
+ 8003f4c: 46bd mov sp, r7
+ 8003f4e: bd80 pop {r7, pc}
+
+08003f50 <HAL_RTC_Init>:
+ * @param hrtc pointer to a RTC_HandleTypeDef structure that contains
+ * the configuration information for RTC.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc)
+{
+ 8003f50: b580 push {r7, lr}
+ 8003f52: b084 sub sp, #16
+ 8003f54: af00 add r7, sp, #0
+ 8003f56: 6078 str r0, [r7, #4]
+ HAL_StatusTypeDef status;
+
+ /* Check RTC handler validity */
+ if (hrtc == NULL)
+ 8003f58: 687b ldr r3, [r7, #4]
+ 8003f5a: 2b00 cmp r3, #0
+ 8003f5c: d101 bne.n 8003f62 <HAL_RTC_Init+0x12>
+ {
+ return HAL_ERROR;
+ 8003f5e: 2301 movs r3, #1
+ 8003f60: e07a b.n 8004058 <HAL_RTC_Init+0x108>
+ {
+ hrtc->MspDeInitCallback = HAL_RTC_MspDeInit;
+ }
+ }
+#else /* USE_HAL_RTC_REGISTER_CALLBACKS */
+ if (hrtc->State == HAL_RTC_STATE_RESET)
+ 8003f62: 687b ldr r3, [r7, #4]
+ 8003f64: f893 3021 ldrb.w r3, [r3, #33] @ 0x21
+ 8003f68: b2db uxtb r3, r3
+ 8003f6a: 2b00 cmp r3, #0
+ 8003f6c: d106 bne.n 8003f7c <HAL_RTC_Init+0x2c>
+ {
+ /* Allocate lock resource and initialize it */
+ hrtc->Lock = HAL_UNLOCKED;
+ 8003f6e: 687b ldr r3, [r7, #4]
+ 8003f70: 2200 movs r2, #0
+ 8003f72: f883 2020 strb.w r2, [r3, #32]
+
+ /* Initialize RTC MSP */
+ HAL_RTC_MspInit(hrtc);
+ 8003f76: 6878 ldr r0, [r7, #4]
+ 8003f78: f7fd fbac bl 80016d4 <HAL_RTC_MspInit>
+ }
+#endif /* USE_HAL_RTC_REGISTER_CALLBACKS */
+
+ /* Set RTC state */
+ hrtc->State = HAL_RTC_STATE_BUSY;
+ 8003f7c: 687b ldr r3, [r7, #4]
+ 8003f7e: 2202 movs r2, #2
+ 8003f80: f883 2021 strb.w r2, [r3, #33] @ 0x21
+
+ /* Check whether the calendar needs to be initialized */
+ if (__HAL_RTC_IS_CALENDAR_INITIALIZED(hrtc) == 0U)
+ 8003f84: 687b ldr r3, [r7, #4]
+ 8003f86: 681b ldr r3, [r3, #0]
+ 8003f88: 68db ldr r3, [r3, #12]
+ 8003f8a: f003 0310 and.w r3, r3, #16
+ 8003f8e: 2b10 cmp r3, #16
+ 8003f90: d058 beq.n 8004044 <HAL_RTC_Init+0xf4>
+ {
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
+ 8003f92: 687b ldr r3, [r7, #4]
+ 8003f94: 681b ldr r3, [r3, #0]
+ 8003f96: 22ca movs r2, #202 @ 0xca
+ 8003f98: 625a str r2, [r3, #36] @ 0x24
+ 8003f9a: 687b ldr r3, [r7, #4]
+ 8003f9c: 681b ldr r3, [r3, #0]
+ 8003f9e: 2253 movs r2, #83 @ 0x53
+ 8003fa0: 625a str r2, [r3, #36] @ 0x24
+
+ /* Enter Initialization mode */
+ status = RTC_EnterInitMode(hrtc);
+ 8003fa2: 6878 ldr r0, [r7, #4]
+ 8003fa4: f000 f9aa bl 80042fc <RTC_EnterInitMode>
+ 8003fa8: 4603 mov r3, r0
+ 8003faa: 73fb strb r3, [r7, #15]
+
+ if (status == HAL_OK)
+ 8003fac: 7bfb ldrb r3, [r7, #15]
+ 8003fae: 2b00 cmp r3, #0
+ 8003fb0: d12c bne.n 800400c <HAL_RTC_Init+0xbc>
+ {
+ /* Clear RTC_CR FMT, OSEL and POL Bits */
+ hrtc->Instance->CR &= ((uint32_t)~(RTC_CR_FMT | RTC_CR_OSEL | RTC_CR_POL));
+ 8003fb2: 687b ldr r3, [r7, #4]
+ 8003fb4: 681b ldr r3, [r3, #0]
+ 8003fb6: 689b ldr r3, [r3, #8]
+ 8003fb8: 687a ldr r2, [r7, #4]
+ 8003fba: 6812 ldr r2, [r2, #0]
+ 8003fbc: f423 03e0 bic.w r3, r3, #7340032 @ 0x700000
+ 8003fc0: f023 0340 bic.w r3, r3, #64 @ 0x40
+ 8003fc4: 6093 str r3, [r2, #8]
+ /* Set RTC_CR register */
+ hrtc->Instance->CR |= (uint32_t)(hrtc->Init.HourFormat | hrtc->Init.OutPut | hrtc->Init.OutPutPolarity);
+ 8003fc6: 687b ldr r3, [r7, #4]
+ 8003fc8: 681b ldr r3, [r3, #0]
+ 8003fca: 6899 ldr r1, [r3, #8]
+ 8003fcc: 687b ldr r3, [r7, #4]
+ 8003fce: 685a ldr r2, [r3, #4]
+ 8003fd0: 687b ldr r3, [r7, #4]
+ 8003fd2: 691b ldr r3, [r3, #16]
+ 8003fd4: 431a orrs r2, r3
+ 8003fd6: 687b ldr r3, [r7, #4]
+ 8003fd8: 699b ldr r3, [r3, #24]
+ 8003fda: 431a orrs r2, r3
+ 8003fdc: 687b ldr r3, [r7, #4]
+ 8003fde: 681b ldr r3, [r3, #0]
+ 8003fe0: 430a orrs r2, r1
+ 8003fe2: 609a str r2, [r3, #8]
+
+ /* Configure the RTC PRER */
+ hrtc->Instance->PRER = (uint32_t)(hrtc->Init.SynchPrediv);
+ 8003fe4: 687b ldr r3, [r7, #4]
+ 8003fe6: 681b ldr r3, [r3, #0]
+ 8003fe8: 687a ldr r2, [r7, #4]
+ 8003fea: 68d2 ldr r2, [r2, #12]
+ 8003fec: 611a str r2, [r3, #16]
+ hrtc->Instance->PRER |= (uint32_t)(hrtc->Init.AsynchPrediv << RTC_PRER_PREDIV_A_Pos);
+ 8003fee: 687b ldr r3, [r7, #4]
+ 8003ff0: 681b ldr r3, [r3, #0]
+ 8003ff2: 6919 ldr r1, [r3, #16]
+ 8003ff4: 687b ldr r3, [r7, #4]
+ 8003ff6: 689b ldr r3, [r3, #8]
+ 8003ff8: 041a lsls r2, r3, #16
+ 8003ffa: 687b ldr r3, [r7, #4]
+ 8003ffc: 681b ldr r3, [r3, #0]
+ 8003ffe: 430a orrs r2, r1
+ 8004000: 611a str r2, [r3, #16]
+
+ /* Exit Initialization mode */
+ status = RTC_ExitInitMode(hrtc);
+ 8004002: 6878 ldr r0, [r7, #4]
+ 8004004: f000 f9b2 bl 800436c <RTC_ExitInitMode>
+ 8004008: 4603 mov r3, r0
+ 800400a: 73fb strb r3, [r7, #15]
+ }
+
+ if (status == HAL_OK)
+ 800400c: 7bfb ldrb r3, [r7, #15]
+ 800400e: 2b00 cmp r3, #0
+ 8004010: d113 bne.n 800403a <HAL_RTC_Init+0xea>
+ {
+#if defined(RTC_OR_ALARMOUTTYPE)
+ hrtc->Instance->OR &= (uint32_t)~(RTC_OUTPUT_TYPE_PUSHPULL | RTC_OUTPUT_REMAP_POS1);
+ 8004012: 687b ldr r3, [r7, #4]
+ 8004014: 681b ldr r3, [r3, #0]
+ 8004016: 6cda ldr r2, [r3, #76] @ 0x4c
+ 8004018: 687b ldr r3, [r7, #4]
+ 800401a: 681b ldr r3, [r3, #0]
+ 800401c: f022 0203 bic.w r2, r2, #3
+ 8004020: 64da str r2, [r3, #76] @ 0x4c
+ hrtc->Instance->OR |= (uint32_t)(hrtc->Init.OutPutType | hrtc->Init.OutPutRemap);
+ 8004022: 687b ldr r3, [r7, #4]
+ 8004024: 681b ldr r3, [r3, #0]
+ 8004026: 6cd9 ldr r1, [r3, #76] @ 0x4c
+ 8004028: 687b ldr r3, [r7, #4]
+ 800402a: 69da ldr r2, [r3, #28]
+ 800402c: 687b ldr r3, [r7, #4]
+ 800402e: 695b ldr r3, [r3, #20]
+ 8004030: 431a orrs r2, r3
+ 8004032: 687b ldr r3, [r7, #4]
+ 8004034: 681b ldr r3, [r3, #0]
+ 8004036: 430a orrs r2, r1
+ 8004038: 64da str r2, [r3, #76] @ 0x4c
+ hrtc->Instance->OR |= (uint32_t)(hrtc->Init.OutPutRemap);
+#endif /* RTC_OR_ALARMOUTTYPE */
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
+ 800403a: 687b ldr r3, [r7, #4]
+ 800403c: 681b ldr r3, [r3, #0]
+ 800403e: 22ff movs r2, #255 @ 0xff
+ 8004040: 625a str r2, [r3, #36] @ 0x24
+ 8004042: e001 b.n 8004048 <HAL_RTC_Init+0xf8>
+ }
+ else
+ {
+ /* The calendar is already initialized */
+ status = HAL_OK;
+ 8004044: 2300 movs r3, #0
+ 8004046: 73fb strb r3, [r7, #15]
+ }
+
+ if (status == HAL_OK)
+ 8004048: 7bfb ldrb r3, [r7, #15]
+ 800404a: 2b00 cmp r3, #0
+ 800404c: d103 bne.n 8004056 <HAL_RTC_Init+0x106>
+ {
+ hrtc->State = HAL_RTC_STATE_READY;
+ 800404e: 687b ldr r3, [r7, #4]
+ 8004050: 2201 movs r2, #1
+ 8004052: f883 2021 strb.w r2, [r3, #33] @ 0x21
+ }
+
+ return status;
+ 8004056: 7bfb ldrb r3, [r7, #15]
+}
+ 8004058: 4618 mov r0, r3
+ 800405a: 3710 adds r7, #16
+ 800405c: 46bd mov sp, r7
+ 800405e: bd80 pop {r7, pc}
+
+08004060 <HAL_RTC_SetTime>:
+ * @arg RTC_FORMAT_BIN: Binary data format
+ * @arg RTC_FORMAT_BCD: BCD data format
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
+{
+ 8004060: b590 push {r4, r7, lr}
+ 8004062: b087 sub sp, #28
+ 8004064: af00 add r7, sp, #0
+ 8004066: 60f8 str r0, [r7, #12]
+ 8004068: 60b9 str r1, [r7, #8]
+ 800406a: 607a str r2, [r7, #4]
+ uint32_t tmpreg = 0U;
+ 800406c: 2300 movs r3, #0
+ 800406e: 617b str r3, [r7, #20]
+ assert_param(IS_RTC_FORMAT(Format));
+ assert_param(IS_RTC_DAYLIGHT_SAVING(sTime->DayLightSaving));
+ assert_param(IS_RTC_STORE_OPERATION(sTime->StoreOperation));
+
+ /* Process Locked */
+ __HAL_LOCK(hrtc);
+ 8004070: 68fb ldr r3, [r7, #12]
+ 8004072: f893 3020 ldrb.w r3, [r3, #32]
+ 8004076: 2b01 cmp r3, #1
+ 8004078: d101 bne.n 800407e <HAL_RTC_SetTime+0x1e>
+ 800407a: 2302 movs r3, #2
+ 800407c: e08b b.n 8004196 <HAL_RTC_SetTime+0x136>
+ 800407e: 68fb ldr r3, [r7, #12]
+ 8004080: 2201 movs r2, #1
+ 8004082: f883 2020 strb.w r2, [r3, #32]
+
+ hrtc->State = HAL_RTC_STATE_BUSY;
+ 8004086: 68fb ldr r3, [r7, #12]
+ 8004088: 2202 movs r2, #2
+ 800408a: f883 2021 strb.w r2, [r3, #33] @ 0x21
+
+ if (Format == RTC_FORMAT_BIN)
+ 800408e: 687b ldr r3, [r7, #4]
+ 8004090: 2b00 cmp r3, #0
+ 8004092: d126 bne.n 80040e2 <HAL_RTC_SetTime+0x82>
+ {
+ if ((hrtc->Instance->CR & RTC_CR_FMT) != 0U)
+ 8004094: 68fb ldr r3, [r7, #12]
+ 8004096: 681b ldr r3, [r3, #0]
+ 8004098: 689b ldr r3, [r3, #8]
+ 800409a: f003 0340 and.w r3, r3, #64 @ 0x40
+ 800409e: 2b00 cmp r3, #0
+ 80040a0: d102 bne.n 80040a8 <HAL_RTC_SetTime+0x48>
+ assert_param(IS_RTC_HOUR12(sTime->Hours));
+ assert_param(IS_RTC_HOURFORMAT12(sTime->TimeFormat));
+ }
+ else
+ {
+ sTime->TimeFormat = 0x00U;
+ 80040a2: 68bb ldr r3, [r7, #8]
+ 80040a4: 2200 movs r2, #0
+ 80040a6: 70da strb r2, [r3, #3]
+ assert_param(IS_RTC_HOUR24(sTime->Hours));
+ }
+ assert_param(IS_RTC_MINUTES(sTime->Minutes));
+ assert_param(IS_RTC_SECONDS(sTime->Seconds));
+
+ tmpreg = (uint32_t)(( (uint32_t)RTC_ByteToBcd2(sTime->Hours) << RTC_TR_HU_Pos) | \
+ 80040a8: 68bb ldr r3, [r7, #8]
+ 80040aa: 781b ldrb r3, [r3, #0]
+ 80040ac: 4618 mov r0, r3
+ 80040ae: f000 f983 bl 80043b8 <RTC_ByteToBcd2>
+ 80040b2: 4603 mov r3, r0
+ 80040b4: 041c lsls r4, r3, #16
+ ( (uint32_t)RTC_ByteToBcd2(sTime->Minutes) << RTC_TR_MNU_Pos) | \
+ 80040b6: 68bb ldr r3, [r7, #8]
+ 80040b8: 785b ldrb r3, [r3, #1]
+ 80040ba: 4618 mov r0, r3
+ 80040bc: f000 f97c bl 80043b8 <RTC_ByteToBcd2>
+ 80040c0: 4603 mov r3, r0
+ 80040c2: 021b lsls r3, r3, #8
+ tmpreg = (uint32_t)(( (uint32_t)RTC_ByteToBcd2(sTime->Hours) << RTC_TR_HU_Pos) | \
+ 80040c4: 431c orrs r4, r3
+ ( (uint32_t)RTC_ByteToBcd2(sTime->Seconds)) | \
+ 80040c6: 68bb ldr r3, [r7, #8]
+ 80040c8: 789b ldrb r3, [r3, #2]
+ 80040ca: 4618 mov r0, r3
+ 80040cc: f000 f974 bl 80043b8 <RTC_ByteToBcd2>
+ 80040d0: 4603 mov r3, r0
+ ( (uint32_t)RTC_ByteToBcd2(sTime->Minutes) << RTC_TR_MNU_Pos) | \
+ 80040d2: ea44 0203 orr.w r2, r4, r3
+ (((uint32_t)sTime->TimeFormat) << RTC_TR_PM_Pos));
+ 80040d6: 68bb ldr r3, [r7, #8]
+ 80040d8: 78db ldrb r3, [r3, #3]
+ 80040da: 059b lsls r3, r3, #22
+ tmpreg = (uint32_t)(( (uint32_t)RTC_ByteToBcd2(sTime->Hours) << RTC_TR_HU_Pos) | \
+ 80040dc: 4313 orrs r3, r2
+ 80040de: 617b str r3, [r7, #20]
+ 80040e0: e018 b.n 8004114 <HAL_RTC_SetTime+0xb4>
+ }
+ else
+ {
+ if ((hrtc->Instance->CR & RTC_CR_FMT) != 0U)
+ 80040e2: 68fb ldr r3, [r7, #12]
+ 80040e4: 681b ldr r3, [r3, #0]
+ 80040e6: 689b ldr r3, [r3, #8]
+ 80040e8: f003 0340 and.w r3, r3, #64 @ 0x40
+ 80040ec: 2b00 cmp r3, #0
+ 80040ee: d102 bne.n 80040f6 <HAL_RTC_SetTime+0x96>
+ assert_param(IS_RTC_HOUR12(RTC_Bcd2ToByte(sTime->Hours)));
+ assert_param(IS_RTC_HOURFORMAT12(sTime->TimeFormat));
+ }
+ else
+ {
+ sTime->TimeFormat = 0x00U;
+ 80040f0: 68bb ldr r3, [r7, #8]
+ 80040f2: 2200 movs r2, #0
+ 80040f4: 70da strb r2, [r3, #3]
+ assert_param(IS_RTC_HOUR24(RTC_Bcd2ToByte(sTime->Hours)));
+ }
+ assert_param(IS_RTC_MINUTES(RTC_Bcd2ToByte(sTime->Minutes)));
+ assert_param(IS_RTC_SECONDS(RTC_Bcd2ToByte(sTime->Seconds)));
+ tmpreg = (((uint32_t)(sTime->Hours) << RTC_TR_HU_Pos) | \
+ 80040f6: 68bb ldr r3, [r7, #8]
+ 80040f8: 781b ldrb r3, [r3, #0]
+ 80040fa: 041a lsls r2, r3, #16
+ ((uint32_t)(sTime->Minutes) << RTC_TR_MNU_Pos) | \
+ 80040fc: 68bb ldr r3, [r7, #8]
+ 80040fe: 785b ldrb r3, [r3, #1]
+ 8004100: 021b lsls r3, r3, #8
+ tmpreg = (((uint32_t)(sTime->Hours) << RTC_TR_HU_Pos) | \
+ 8004102: 4313 orrs r3, r2
+ ((uint32_t) sTime->Seconds) | \
+ 8004104: 68ba ldr r2, [r7, #8]
+ 8004106: 7892 ldrb r2, [r2, #2]
+ ((uint32_t)(sTime->Minutes) << RTC_TR_MNU_Pos) | \
+ 8004108: 431a orrs r2, r3
+ ((uint32_t)(sTime->TimeFormat) << RTC_TR_PM_Pos));
+ 800410a: 68bb ldr r3, [r7, #8]
+ 800410c: 78db ldrb r3, [r3, #3]
+ 800410e: 059b lsls r3, r3, #22
+ tmpreg = (((uint32_t)(sTime->Hours) << RTC_TR_HU_Pos) | \
+ 8004110: 4313 orrs r3, r2
+ 8004112: 617b str r3, [r7, #20]
+ }
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
+ 8004114: 68fb ldr r3, [r7, #12]
+ 8004116: 681b ldr r3, [r3, #0]
+ 8004118: 22ca movs r2, #202 @ 0xca
+ 800411a: 625a str r2, [r3, #36] @ 0x24
+ 800411c: 68fb ldr r3, [r7, #12]
+ 800411e: 681b ldr r3, [r3, #0]
+ 8004120: 2253 movs r2, #83 @ 0x53
+ 8004122: 625a str r2, [r3, #36] @ 0x24
+
+ /* Enter Initialization mode */
+ status = RTC_EnterInitMode(hrtc);
+ 8004124: 68f8 ldr r0, [r7, #12]
+ 8004126: f000 f8e9 bl 80042fc <RTC_EnterInitMode>
+ 800412a: 4603 mov r3, r0
+ 800412c: 74fb strb r3, [r7, #19]
+
+ if (status == HAL_OK)
+ 800412e: 7cfb ldrb r3, [r7, #19]
+ 8004130: 2b00 cmp r3, #0
+ 8004132: d120 bne.n 8004176 <HAL_RTC_SetTime+0x116>
+ {
+ /* Set the RTC_TR register */
+ hrtc->Instance->TR = (uint32_t)(tmpreg & RTC_TR_RESERVED_MASK);
+ 8004134: 68fb ldr r3, [r7, #12]
+ 8004136: 681a ldr r2, [r3, #0]
+ 8004138: 697b ldr r3, [r7, #20]
+ 800413a: f003 337f and.w r3, r3, #2139062143 @ 0x7f7f7f7f
+ 800413e: f023 43fe bic.w r3, r3, #2130706432 @ 0x7f000000
+ 8004142: 6013 str r3, [r2, #0]
+
+ /* Clear the bits to be configured (Deprecated. Use HAL_RTC_DST_xxx functions instead) */
+ hrtc->Instance->CR &= (uint32_t)~RTC_CR_BKP;
+ 8004144: 68fb ldr r3, [r7, #12]
+ 8004146: 681b ldr r3, [r3, #0]
+ 8004148: 689a ldr r2, [r3, #8]
+ 800414a: 68fb ldr r3, [r7, #12]
+ 800414c: 681b ldr r3, [r3, #0]
+ 800414e: f422 2280 bic.w r2, r2, #262144 @ 0x40000
+ 8004152: 609a str r2, [r3, #8]
+
+ /* Configure the RTC_CR register (Deprecated. Use HAL_RTC_DST_xxx functions instead) */
+ hrtc->Instance->CR |= (uint32_t)(sTime->DayLightSaving | sTime->StoreOperation);
+ 8004154: 68fb ldr r3, [r7, #12]
+ 8004156: 681b ldr r3, [r3, #0]
+ 8004158: 6899 ldr r1, [r3, #8]
+ 800415a: 68bb ldr r3, [r7, #8]
+ 800415c: 68da ldr r2, [r3, #12]
+ 800415e: 68bb ldr r3, [r7, #8]
+ 8004160: 691b ldr r3, [r3, #16]
+ 8004162: 431a orrs r2, r3
+ 8004164: 68fb ldr r3, [r7, #12]
+ 8004166: 681b ldr r3, [r3, #0]
+ 8004168: 430a orrs r2, r1
+ 800416a: 609a str r2, [r3, #8]
+
+ /* Exit Initialization mode */
+ status = RTC_ExitInitMode(hrtc);
+ 800416c: 68f8 ldr r0, [r7, #12]
+ 800416e: f000 f8fd bl 800436c <RTC_ExitInitMode>
+ 8004172: 4603 mov r3, r0
+ 8004174: 74fb strb r3, [r7, #19]
+ }
+
+ if (status == HAL_OK)
+ 8004176: 7cfb ldrb r3, [r7, #19]
+ 8004178: 2b00 cmp r3, #0
+ 800417a: d103 bne.n 8004184 <HAL_RTC_SetTime+0x124>
+ {
+ hrtc->State = HAL_RTC_STATE_READY;
+ 800417c: 68fb ldr r3, [r7, #12]
+ 800417e: 2201 movs r2, #1
+ 8004180: f883 2021 strb.w r2, [r3, #33] @ 0x21
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
+ 8004184: 68fb ldr r3, [r7, #12]
+ 8004186: 681b ldr r3, [r3, #0]
+ 8004188: 22ff movs r2, #255 @ 0xff
+ 800418a: 625a str r2, [r3, #36] @ 0x24
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(hrtc);
+ 800418c: 68fb ldr r3, [r7, #12]
+ 800418e: 2200 movs r2, #0
+ 8004190: f883 2020 strb.w r2, [r3, #32]
+
+ return status;
+ 8004194: 7cfb ldrb r3, [r7, #19]
+}
+ 8004196: 4618 mov r0, r3
+ 8004198: 371c adds r7, #28
+ 800419a: 46bd mov sp, r7
+ 800419c: bd90 pop {r4, r7, pc}
+
+0800419e <HAL_RTC_SetDate>:
+ * @arg RTC_FORMAT_BIN: Binary data format
+ * @arg RTC_FORMAT_BCD: BCD data format
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
+{
+ 800419e: b590 push {r4, r7, lr}
+ 80041a0: b087 sub sp, #28
+ 80041a2: af00 add r7, sp, #0
+ 80041a4: 60f8 str r0, [r7, #12]
+ 80041a6: 60b9 str r1, [r7, #8]
+ 80041a8: 607a str r2, [r7, #4]
+ uint32_t datetmpreg = 0U;
+ 80041aa: 2300 movs r3, #0
+ 80041ac: 617b str r3, [r7, #20]
+
+ /* Check the parameters */
+ assert_param(IS_RTC_FORMAT(Format));
+
+ /* Process Locked */
+ __HAL_LOCK(hrtc);
+ 80041ae: 68fb ldr r3, [r7, #12]
+ 80041b0: f893 3020 ldrb.w r3, [r3, #32]
+ 80041b4: 2b01 cmp r3, #1
+ 80041b6: d101 bne.n 80041bc <HAL_RTC_SetDate+0x1e>
+ 80041b8: 2302 movs r3, #2
+ 80041ba: e075 b.n 80042a8 <HAL_RTC_SetDate+0x10a>
+ 80041bc: 68fb ldr r3, [r7, #12]
+ 80041be: 2201 movs r2, #1
+ 80041c0: f883 2020 strb.w r2, [r3, #32]
+
+ hrtc->State = HAL_RTC_STATE_BUSY;
+ 80041c4: 68fb ldr r3, [r7, #12]
+ 80041c6: 2202 movs r2, #2
+ 80041c8: f883 2021 strb.w r2, [r3, #33] @ 0x21
+
+ if ((Format == RTC_FORMAT_BIN) && ((sDate->Month & 0x10U) == 0x10U))
+ 80041cc: 687b ldr r3, [r7, #4]
+ 80041ce: 2b00 cmp r3, #0
+ 80041d0: d10e bne.n 80041f0 <HAL_RTC_SetDate+0x52>
+ 80041d2: 68bb ldr r3, [r7, #8]
+ 80041d4: 785b ldrb r3, [r3, #1]
+ 80041d6: f003 0310 and.w r3, r3, #16
+ 80041da: 2b00 cmp r3, #0
+ 80041dc: d008 beq.n 80041f0 <HAL_RTC_SetDate+0x52>
+ {
+ sDate->Month = (uint8_t)((sDate->Month & (uint8_t)~(0x10U)) + (uint8_t)0x0AU);
+ 80041de: 68bb ldr r3, [r7, #8]
+ 80041e0: 785b ldrb r3, [r3, #1]
+ 80041e2: f023 0310 bic.w r3, r3, #16
+ 80041e6: b2db uxtb r3, r3
+ 80041e8: 330a adds r3, #10
+ 80041ea: b2da uxtb r2, r3
+ 80041ec: 68bb ldr r3, [r7, #8]
+ 80041ee: 705a strb r2, [r3, #1]
+ }
+
+ assert_param(IS_RTC_WEEKDAY(sDate->WeekDay));
+
+ if (Format == RTC_FORMAT_BIN)
+ 80041f0: 687b ldr r3, [r7, #4]
+ 80041f2: 2b00 cmp r3, #0
+ 80041f4: d11c bne.n 8004230 <HAL_RTC_SetDate+0x92>
+ {
+ assert_param(IS_RTC_YEAR(sDate->Year));
+ assert_param(IS_RTC_MONTH(sDate->Month));
+ assert_param(IS_RTC_DATE(sDate->Date));
+
+ datetmpreg = (((uint32_t)RTC_ByteToBcd2(sDate->Year) << RTC_DR_YU_Pos) | \
+ 80041f6: 68bb ldr r3, [r7, #8]
+ 80041f8: 78db ldrb r3, [r3, #3]
+ 80041fa: 4618 mov r0, r3
+ 80041fc: f000 f8dc bl 80043b8 <RTC_ByteToBcd2>
+ 8004200: 4603 mov r3, r0
+ 8004202: 041c lsls r4, r3, #16
+ ((uint32_t)RTC_ByteToBcd2(sDate->Month) << RTC_DR_MU_Pos) | \
+ 8004204: 68bb ldr r3, [r7, #8]
+ 8004206: 785b ldrb r3, [r3, #1]
+ 8004208: 4618 mov r0, r3
+ 800420a: f000 f8d5 bl 80043b8 <RTC_ByteToBcd2>
+ 800420e: 4603 mov r3, r0
+ 8004210: 021b lsls r3, r3, #8
+ datetmpreg = (((uint32_t)RTC_ByteToBcd2(sDate->Year) << RTC_DR_YU_Pos) | \
+ 8004212: 431c orrs r4, r3
+ ((uint32_t)RTC_ByteToBcd2(sDate->Date)) | \
+ 8004214: 68bb ldr r3, [r7, #8]
+ 8004216: 789b ldrb r3, [r3, #2]
+ 8004218: 4618 mov r0, r3
+ 800421a: f000 f8cd bl 80043b8 <RTC_ByteToBcd2>
+ 800421e: 4603 mov r3, r0
+ ((uint32_t)RTC_ByteToBcd2(sDate->Month) << RTC_DR_MU_Pos) | \
+ 8004220: ea44 0203 orr.w r2, r4, r3
+ ((uint32_t)sDate->WeekDay << RTC_DR_WDU_Pos));
+ 8004224: 68bb ldr r3, [r7, #8]
+ 8004226: 781b ldrb r3, [r3, #0]
+ 8004228: 035b lsls r3, r3, #13
+ datetmpreg = (((uint32_t)RTC_ByteToBcd2(sDate->Year) << RTC_DR_YU_Pos) | \
+ 800422a: 4313 orrs r3, r2
+ 800422c: 617b str r3, [r7, #20]
+ 800422e: e00e b.n 800424e <HAL_RTC_SetDate+0xb0>
+ {
+ assert_param(IS_RTC_YEAR(RTC_Bcd2ToByte(sDate->Year)));
+ assert_param(IS_RTC_MONTH(RTC_Bcd2ToByte(sDate->Month)));
+ assert_param(IS_RTC_DATE(RTC_Bcd2ToByte(sDate->Date)));
+
+ datetmpreg = ((((uint32_t)sDate->Year) << RTC_DR_YU_Pos) | \
+ 8004230: 68bb ldr r3, [r7, #8]
+ 8004232: 78db ldrb r3, [r3, #3]
+ 8004234: 041a lsls r2, r3, #16
+ (((uint32_t)sDate->Month) << RTC_DR_MU_Pos) | \
+ 8004236: 68bb ldr r3, [r7, #8]
+ 8004238: 785b ldrb r3, [r3, #1]
+ 800423a: 021b lsls r3, r3, #8
+ datetmpreg = ((((uint32_t)sDate->Year) << RTC_DR_YU_Pos) | \
+ 800423c: 4313 orrs r3, r2
+ ((uint32_t) sDate->Date) | \
+ 800423e: 68ba ldr r2, [r7, #8]
+ 8004240: 7892 ldrb r2, [r2, #2]
+ (((uint32_t)sDate->Month) << RTC_DR_MU_Pos) | \
+ 8004242: 431a orrs r2, r3
+ (((uint32_t)sDate->WeekDay) << RTC_DR_WDU_Pos));
+ 8004244: 68bb ldr r3, [r7, #8]
+ 8004246: 781b ldrb r3, [r3, #0]
+ 8004248: 035b lsls r3, r3, #13
+ datetmpreg = ((((uint32_t)sDate->Year) << RTC_DR_YU_Pos) | \
+ 800424a: 4313 orrs r3, r2
+ 800424c: 617b str r3, [r7, #20]
+ }
+
+ /* Disable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc);
+ 800424e: 68fb ldr r3, [r7, #12]
+ 8004250: 681b ldr r3, [r3, #0]
+ 8004252: 22ca movs r2, #202 @ 0xca
+ 8004254: 625a str r2, [r3, #36] @ 0x24
+ 8004256: 68fb ldr r3, [r7, #12]
+ 8004258: 681b ldr r3, [r3, #0]
+ 800425a: 2253 movs r2, #83 @ 0x53
+ 800425c: 625a str r2, [r3, #36] @ 0x24
+
+ /* Enter Initialization mode */
+ status = RTC_EnterInitMode(hrtc);
+ 800425e: 68f8 ldr r0, [r7, #12]
+ 8004260: f000 f84c bl 80042fc <RTC_EnterInitMode>
+ 8004264: 4603 mov r3, r0
+ 8004266: 74fb strb r3, [r7, #19]
+
+ if (status == HAL_OK)
+ 8004268: 7cfb ldrb r3, [r7, #19]
+ 800426a: 2b00 cmp r3, #0
+ 800426c: d10c bne.n 8004288 <HAL_RTC_SetDate+0xea>
+ {
+ /* Set the RTC_DR register */
+ hrtc->Instance->DR = (uint32_t)(datetmpreg & RTC_DR_RESERVED_MASK);
+ 800426e: 68fb ldr r3, [r7, #12]
+ 8004270: 681a ldr r2, [r3, #0]
+ 8004272: 697b ldr r3, [r7, #20]
+ 8004274: f023 437f bic.w r3, r3, #4278190080 @ 0xff000000
+ 8004278: f023 03c0 bic.w r3, r3, #192 @ 0xc0
+ 800427c: 6053 str r3, [r2, #4]
+
+ /* Exit Initialization mode */
+ status = RTC_ExitInitMode(hrtc);
+ 800427e: 68f8 ldr r0, [r7, #12]
+ 8004280: f000 f874 bl 800436c <RTC_ExitInitMode>
+ 8004284: 4603 mov r3, r0
+ 8004286: 74fb strb r3, [r7, #19]
+ }
+
+ if (status == HAL_OK)
+ 8004288: 7cfb ldrb r3, [r7, #19]
+ 800428a: 2b00 cmp r3, #0
+ 800428c: d103 bne.n 8004296 <HAL_RTC_SetDate+0xf8>
+ {
+ hrtc->State = HAL_RTC_STATE_READY;
+ 800428e: 68fb ldr r3, [r7, #12]
+ 8004290: 2201 movs r2, #1
+ 8004292: f883 2021 strb.w r2, [r3, #33] @ 0x21
+ }
+
+ /* Enable the write protection for RTC registers */
+ __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc);
+ 8004296: 68fb ldr r3, [r7, #12]
+ 8004298: 681b ldr r3, [r3, #0]
+ 800429a: 22ff movs r2, #255 @ 0xff
+ 800429c: 625a str r2, [r3, #36] @ 0x24
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(hrtc);
+ 800429e: 68fb ldr r3, [r7, #12]
+ 80042a0: 2200 movs r2, #0
+ 80042a2: f883 2020 strb.w r2, [r3, #32]
+
+ return status;
+ 80042a6: 7cfb ldrb r3, [r7, #19]
+}
+ 80042a8: 4618 mov r0, r3
+ 80042aa: 371c adds r7, #28
+ 80042ac: 46bd mov sp, r7
+ 80042ae: bd90 pop {r4, r7, pc}
+
+080042b0 <HAL_RTC_WaitForSynchro>:
+ * @param hrtc pointer to a RTC_HandleTypeDef structure that contains
+ * the configuration information for RTC.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc)
+{
+ 80042b0: b580 push {r7, lr}
+ 80042b2: b084 sub sp, #16
+ 80042b4: af00 add r7, sp, #0
+ 80042b6: 6078 str r0, [r7, #4]
+ uint32_t tickstart = 0U;
+ 80042b8: 2300 movs r3, #0
+ 80042ba: 60fb str r3, [r7, #12]
+
+ /* Clear RSF flag, keep reserved bits at reset values (setting other flags has no effect) */
+ hrtc->Instance->ISR = ((uint32_t)(RTC_RSF_MASK & RTC_ISR_RESERVED_MASK));
+ 80042bc: 687b ldr r3, [r7, #4]
+ 80042be: 681b ldr r3, [r3, #0]
+ 80042c0: 4a0d ldr r2, [pc, #52] @ (80042f8 <HAL_RTC_WaitForSynchro+0x48>)
+ 80042c2: 60da str r2, [r3, #12]
+
+ /* Get tick */
+ tickstart = HAL_GetTick();
+ 80042c4: f7fd fb6e bl 80019a4 <HAL_GetTick>
+ 80042c8: 60f8 str r0, [r7, #12]
+
+ /* Wait the registers to be synchronised */
+ while ((hrtc->Instance->ISR & RTC_ISR_RSF) == 0U)
+ 80042ca: e009 b.n 80042e0 <HAL_RTC_WaitForSynchro+0x30>
+ {
+ if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
+ 80042cc: f7fd fb6a bl 80019a4 <HAL_GetTick>
+ 80042d0: 4602 mov r2, r0
+ 80042d2: 68fb ldr r3, [r7, #12]
+ 80042d4: 1ad3 subs r3, r2, r3
+ 80042d6: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
+ 80042da: d901 bls.n 80042e0 <HAL_RTC_WaitForSynchro+0x30>
+ {
+ return HAL_TIMEOUT;
+ 80042dc: 2303 movs r3, #3
+ 80042de: e007 b.n 80042f0 <HAL_RTC_WaitForSynchro+0x40>
+ while ((hrtc->Instance->ISR & RTC_ISR_RSF) == 0U)
+ 80042e0: 687b ldr r3, [r7, #4]
+ 80042e2: 681b ldr r3, [r3, #0]
+ 80042e4: 68db ldr r3, [r3, #12]
+ 80042e6: f003 0320 and.w r3, r3, #32
+ 80042ea: 2b00 cmp r3, #0
+ 80042ec: d0ee beq.n 80042cc <HAL_RTC_WaitForSynchro+0x1c>
+ }
+ }
+
+ return HAL_OK;
+ 80042ee: 2300 movs r3, #0
+}
+ 80042f0: 4618 mov r0, r3
+ 80042f2: 3710 adds r7, #16
+ 80042f4: 46bd mov sp, r7
+ 80042f6: bd80 pop {r7, pc}
+ 80042f8: 0001ff5f .word 0x0001ff5f
+
+080042fc <RTC_EnterInitMode>:
+ * @param hrtc pointer to a RTC_HandleTypeDef structure that contains
+ * the configuration information for RTC.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef *hrtc)
+{
+ 80042fc: b580 push {r7, lr}
+ 80042fe: b084 sub sp, #16
+ 8004300: af00 add r7, sp, #0
+ 8004302: 6078 str r0, [r7, #4]
+ uint32_t tickstart = 0U;
+ 8004304: 2300 movs r3, #0
+ 8004306: 60bb str r3, [r7, #8]
+ HAL_StatusTypeDef status = HAL_OK;
+ 8004308: 2300 movs r3, #0
+ 800430a: 73fb strb r3, [r7, #15]
+
+ /* Check that Initialization mode is not already set */
+ if (READ_BIT(hrtc->Instance->ISR, RTC_ISR_INITF) == 0U)
+ 800430c: 687b ldr r3, [r7, #4]
+ 800430e: 681b ldr r3, [r3, #0]
+ 8004310: 68db ldr r3, [r3, #12]
+ 8004312: f003 0340 and.w r3, r3, #64 @ 0x40
+ 8004316: 2b00 cmp r3, #0
+ 8004318: d123 bne.n 8004362 <RTC_EnterInitMode+0x66>
+ {
+ /* Set INIT bit to enter Initialization mode */
+ SET_BIT(hrtc->Instance->ISR, RTC_ISR_INIT);
+ 800431a: 687b ldr r3, [r7, #4]
+ 800431c: 681b ldr r3, [r3, #0]
+ 800431e: 68da ldr r2, [r3, #12]
+ 8004320: 687b ldr r3, [r7, #4]
+ 8004322: 681b ldr r3, [r3, #0]
+ 8004324: f042 0280 orr.w r2, r2, #128 @ 0x80
+ 8004328: 60da str r2, [r3, #12]
+
+ /* Get tick */
+ tickstart = HAL_GetTick();
+ 800432a: f7fd fb3b bl 80019a4 <HAL_GetTick>
+ 800432e: 60b8 str r0, [r7, #8]
+
+ /* Wait till RTC is in INIT state and if timeout is reached exit */
+ while ((READ_BIT(hrtc->Instance->ISR, RTC_ISR_INITF) == 0U) && (status != HAL_ERROR))
+ 8004330: e00d b.n 800434e <RTC_EnterInitMode+0x52>
+ {
+ if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE)
+ 8004332: f7fd fb37 bl 80019a4 <HAL_GetTick>
+ 8004336: 4602 mov r2, r0
+ 8004338: 68bb ldr r3, [r7, #8]
+ 800433a: 1ad3 subs r3, r2, r3
+ 800433c: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8
+ 8004340: d905 bls.n 800434e <RTC_EnterInitMode+0x52>
+ {
+ /* Set RTC state */
+ hrtc->State = HAL_RTC_STATE_ERROR;
+ 8004342: 687b ldr r3, [r7, #4]
+ 8004344: 2204 movs r2, #4
+ 8004346: f883 2021 strb.w r2, [r3, #33] @ 0x21
+ status = HAL_ERROR;
+ 800434a: 2301 movs r3, #1
+ 800434c: 73fb strb r3, [r7, #15]
+ while ((READ_BIT(hrtc->Instance->ISR, RTC_ISR_INITF) == 0U) && (status != HAL_ERROR))
+ 800434e: 687b ldr r3, [r7, #4]
+ 8004350: 681b ldr r3, [r3, #0]
+ 8004352: 68db ldr r3, [r3, #12]
+ 8004354: f003 0340 and.w r3, r3, #64 @ 0x40
+ 8004358: 2b00 cmp r3, #0
+ 800435a: d102 bne.n 8004362 <RTC_EnterInitMode+0x66>
+ 800435c: 7bfb ldrb r3, [r7, #15]
+ 800435e: 2b01 cmp r3, #1
+ 8004360: d1e7 bne.n 8004332 <RTC_EnterInitMode+0x36>
+ }
+ }
+ }
+
+ return status;
+ 8004362: 7bfb ldrb r3, [r7, #15]
+}
+ 8004364: 4618 mov r0, r3
+ 8004366: 3710 adds r7, #16
+ 8004368: 46bd mov sp, r7
+ 800436a: bd80 pop {r7, pc}
+
+0800436c <RTC_ExitInitMode>:
+ * @param hrtc pointer to a RTC_HandleTypeDef structure that contains
+ * the configuration information for RTC.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef RTC_ExitInitMode(RTC_HandleTypeDef *hrtc)
+{
+ 800436c: b580 push {r7, lr}
+ 800436e: b084 sub sp, #16
+ 8004370: af00 add r7, sp, #0
+ 8004372: 6078 str r0, [r7, #4]
+ HAL_StatusTypeDef status = HAL_OK;
+ 8004374: 2300 movs r3, #0
+ 8004376: 73fb strb r3, [r7, #15]
+
+ /* Clear INIT bit to exit Initialization mode */
+ CLEAR_BIT(hrtc->Instance->ISR, RTC_ISR_INIT);
+ 8004378: 687b ldr r3, [r7, #4]
+ 800437a: 681b ldr r3, [r3, #0]
+ 800437c: 68da ldr r2, [r3, #12]
+ 800437e: 687b ldr r3, [r7, #4]
+ 8004380: 681b ldr r3, [r3, #0]
+ 8004382: f022 0280 bic.w r2, r2, #128 @ 0x80
+ 8004386: 60da str r2, [r3, #12]
+
+ /* If CR_BYPSHAD bit = 0, wait for synchro */
+ if (READ_BIT(hrtc->Instance->CR, RTC_CR_BYPSHAD) == 0U)
+ 8004388: 687b ldr r3, [r7, #4]
+ 800438a: 681b ldr r3, [r3, #0]
+ 800438c: 689b ldr r3, [r3, #8]
+ 800438e: f003 0320 and.w r3, r3, #32
+ 8004392: 2b00 cmp r3, #0
+ 8004394: d10b bne.n 80043ae <RTC_ExitInitMode+0x42>
+ {
+ if (HAL_RTC_WaitForSynchro(hrtc) != HAL_OK)
+ 8004396: 6878 ldr r0, [r7, #4]
+ 8004398: f7ff ff8a bl 80042b0 <HAL_RTC_WaitForSynchro>
+ 800439c: 4603 mov r3, r0
+ 800439e: 2b00 cmp r3, #0
+ 80043a0: d005 beq.n 80043ae <RTC_ExitInitMode+0x42>
+ {
+ /* Set RTC state */
+ hrtc->State = HAL_RTC_STATE_ERROR;
+ 80043a2: 687b ldr r3, [r7, #4]
+ 80043a4: 2204 movs r2, #4
+ 80043a6: f883 2021 strb.w r2, [r3, #33] @ 0x21
+ status = HAL_ERROR;
+ 80043aa: 2301 movs r3, #1
+ 80043ac: 73fb strb r3, [r7, #15]
+ }
+ }
+
+ return status;
+ 80043ae: 7bfb ldrb r3, [r7, #15]
+}
+ 80043b0: 4618 mov r0, r3
+ 80043b2: 3710 adds r7, #16
+ 80043b4: 46bd mov sp, r7
+ 80043b6: bd80 pop {r7, pc}
+
+080043b8 <RTC_ByteToBcd2>:
+ * @brief Converts a 2-digit number from decimal to BCD format.
+ * @param number decimal-formatted number (from 0 to 99) to be converted
+ * @retval Converted byte
+ */
+uint8_t RTC_ByteToBcd2(uint8_t number)
+{
+ 80043b8: b480 push {r7}
+ 80043ba: b085 sub sp, #20
+ 80043bc: af00 add r7, sp, #0
+ 80043be: 4603 mov r3, r0
+ 80043c0: 71fb strb r3, [r7, #7]
+ uint32_t bcdhigh = 0U;
+ 80043c2: 2300 movs r3, #0
+ 80043c4: 60fb str r3, [r7, #12]
+
+ while (number >= 10U)
+ 80043c6: e005 b.n 80043d4 <RTC_ByteToBcd2+0x1c>
+ {
+ bcdhigh++;
+ 80043c8: 68fb ldr r3, [r7, #12]
+ 80043ca: 3301 adds r3, #1
+ 80043cc: 60fb str r3, [r7, #12]
+ number -= 10U;
+ 80043ce: 79fb ldrb r3, [r7, #7]
+ 80043d0: 3b0a subs r3, #10
+ 80043d2: 71fb strb r3, [r7, #7]
+ while (number >= 10U)
+ 80043d4: 79fb ldrb r3, [r7, #7]
+ 80043d6: 2b09 cmp r3, #9
+ 80043d8: d8f6 bhi.n 80043c8 <RTC_ByteToBcd2+0x10>
+ }
+
+ return ((uint8_t)(bcdhigh << 4U) | number);
+ 80043da: 68fb ldr r3, [r7, #12]
+ 80043dc: b2db uxtb r3, r3
+ 80043de: 011b lsls r3, r3, #4
+ 80043e0: b2da uxtb r2, r3
+ 80043e2: 79fb ldrb r3, [r7, #7]
+ 80043e4: 4313 orrs r3, r2
+ 80043e6: b2db uxtb r3, r3
+}
+ 80043e8: 4618 mov r0, r3
+ 80043ea: 3714 adds r7, #20
+ 80043ec: 46bd mov sp, r7
+ 80043ee: f85d 7b04 ldr.w r7, [sp], #4
+ 80043f2: 4770 bx lr
+
+080043f4 <aci_gap_set_non_discoverable>:
+ */
+
+#include "auto/ble_gap_aci.h"
+
+tBleStatus aci_gap_set_non_discoverable( void )
+{
+ 80043f4: b580 push {r7, lr}
+ 80043f6: b088 sub sp, #32
+ 80043f8: af00 add r7, sp, #0
+ struct hci_request rq;
+ tBleStatus status = 0;
+ 80043fa: 2300 movs r3, #0
+ 80043fc: 71fb strb r3, [r7, #7]
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 80043fe: f107 0308 add.w r3, r7, #8
+ 8004402: 2218 movs r2, #24
+ 8004404: 2100 movs r1, #0
+ 8004406: 4618 mov r0, r3
+ 8004408: f001 f8dd bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 800440c: 233f movs r3, #63 @ 0x3f
+ 800440e: 813b strh r3, [r7, #8]
+ rq.ocf = 0x081;
+ 8004410: 2381 movs r3, #129 @ 0x81
+ 8004412: 817b strh r3, [r7, #10]
+ rq.rparam = &status;
+ 8004414: 1dfb adds r3, r7, #7
+ 8004416: 61bb str r3, [r7, #24]
+ rq.rlen = 1;
+ 8004418: 2301 movs r3, #1
+ 800441a: 61fb str r3, [r7, #28]
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 800441c: f107 0308 add.w r3, r7, #8
+ 8004420: 2100 movs r1, #0
+ 8004422: 4618 mov r0, r3
+ 8004424: f001 fc5e bl 8005ce4 <hci_send_req>
+ 8004428: 4603 mov r3, r0
+ 800442a: 2b00 cmp r3, #0
+ 800442c: da01 bge.n 8004432 <aci_gap_set_non_discoverable+0x3e>
+ return BLE_STATUS_TIMEOUT;
+ 800442e: 23ff movs r3, #255 @ 0xff
+ 8004430: e000 b.n 8004434 <aci_gap_set_non_discoverable+0x40>
+ return status;
+ 8004432: 79fb ldrb r3, [r7, #7]
+}
+ 8004434: 4618 mov r0, r3
+ 8004436: 3720 adds r7, #32
+ 8004438: 46bd mov sp, r7
+ 800443a: bd80 pop {r7, pc}
+
+0800443c <aci_gap_set_discoverable>:
+ const uint8_t* Local_Name,
+ uint8_t Service_Uuid_length,
+ const uint8_t* Service_Uuid_List,
+ uint16_t Conn_Interval_Min,
+ uint16_t Conn_Interval_Max )
+{
+ 800443c: b5b0 push {r4, r5, r7, lr}
+ 800443e: b0ce sub sp, #312 @ 0x138
+ 8004440: af00 add r7, sp, #0
+ 8004442: 4605 mov r5, r0
+ 8004444: 460c mov r4, r1
+ 8004446: 4610 mov r0, r2
+ 8004448: 4619 mov r1, r3
+ 800444a: f507 739c add.w r3, r7, #312 @ 0x138
+ 800444e: f2a3 1331 subw r3, r3, #305 @ 0x131
+ 8004452: 462a mov r2, r5
+ 8004454: 701a strb r2, [r3, #0]
+ 8004456: f507 739c add.w r3, r7, #312 @ 0x138
+ 800445a: f5a3 739a sub.w r3, r3, #308 @ 0x134
+ 800445e: 4622 mov r2, r4
+ 8004460: 801a strh r2, [r3, #0]
+ 8004462: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004466: f5a3 739b sub.w r3, r3, #310 @ 0x136
+ 800446a: 4602 mov r2, r0
+ 800446c: 801a strh r2, [r3, #0]
+ 800446e: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004472: f5a3 7399 sub.w r3, r3, #306 @ 0x132
+ 8004476: 460a mov r2, r1
+ 8004478: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gap_set_discoverable_cp0 *cp0 = (aci_gap_set_discoverable_cp0*)(cmd_buffer);
+ 800447a: f107 0310 add.w r3, r7, #16
+ 800447e: f8c7 3134 str.w r3, [r7, #308] @ 0x134
+ aci_gap_set_discoverable_cp1 *cp1 = (aci_gap_set_discoverable_cp1*)(cmd_buffer + 1 + 2 + 2 + 1 + 1 + 1 + Local_Name_Length * (sizeof(uint8_t)));
+ 8004482: f897 314c ldrb.w r3, [r7, #332] @ 0x14c
+ 8004486: 3308 adds r3, #8
+ 8004488: f107 0210 add.w r2, r7, #16
+ 800448c: 4413 add r3, r2
+ 800448e: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ aci_gap_set_discoverable_cp2 *cp2 = (aci_gap_set_discoverable_cp2*)(cmd_buffer + 1 + 2 + 2 + 1 + 1 + 1 + Local_Name_Length * (sizeof(uint8_t)) + 1 + Service_Uuid_length * (sizeof(uint8_t)));
+ 8004492: f897 214c ldrb.w r2, [r7, #332] @ 0x14c
+ 8004496: f897 3154 ldrb.w r3, [r7, #340] @ 0x154
+ 800449a: 4413 add r3, r2
+ 800449c: 3309 adds r3, #9
+ 800449e: f107 0210 add.w r2, r7, #16
+ 80044a2: 4413 add r3, r2
+ 80044a4: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 80044a8: f507 739c add.w r3, r7, #312 @ 0x138
+ 80044ac: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 80044b0: 2200 movs r2, #0
+ 80044b2: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 80044b4: 2300 movs r3, #0
+ 80044b6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Advertising_Type = Advertising_Type;
+ 80044ba: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 80044be: f507 729c add.w r2, r7, #312 @ 0x138
+ 80044c2: f2a2 1231 subw r2, r2, #305 @ 0x131
+ 80044c6: 7812 ldrb r2, [r2, #0]
+ 80044c8: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 80044ca: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80044ce: 3301 adds r3, #1
+ 80044d0: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Advertising_Interval_Min = Advertising_Interval_Min;
+ 80044d4: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 80044d8: f507 729c add.w r2, r7, #312 @ 0x138
+ 80044dc: f5a2 729a sub.w r2, r2, #308 @ 0x134
+ 80044e0: 8812 ldrh r2, [r2, #0]
+ 80044e2: f8a3 2001 strh.w r2, [r3, #1]
+ index_input += 2;
+ 80044e6: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80044ea: 3302 adds r3, #2
+ 80044ec: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Advertising_Interval_Max = Advertising_Interval_Max;
+ 80044f0: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 80044f4: f507 729c add.w r2, r7, #312 @ 0x138
+ 80044f8: f5a2 729b sub.w r2, r2, #310 @ 0x136
+ 80044fc: 8812 ldrh r2, [r2, #0]
+ 80044fe: f8a3 2003 strh.w r2, [r3, #3]
+ index_input += 2;
+ 8004502: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004506: 3302 adds r3, #2
+ 8004508: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Own_Address_Type = Own_Address_Type;
+ 800450c: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004510: f507 729c add.w r2, r7, #312 @ 0x138
+ 8004514: f5a2 7299 sub.w r2, r2, #306 @ 0x132
+ 8004518: 7812 ldrb r2, [r2, #0]
+ 800451a: 715a strb r2, [r3, #5]
+ index_input += 1;
+ 800451c: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004520: 3301 adds r3, #1
+ 8004522: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Advertising_Filter_Policy = Advertising_Filter_Policy;
+ 8004526: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 800452a: f897 2148 ldrb.w r2, [r7, #328] @ 0x148
+ 800452e: 719a strb r2, [r3, #6]
+ index_input += 1;
+ 8004530: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004534: 3301 adds r3, #1
+ 8004536: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Local_Name_Length = Local_Name_Length;
+ 800453a: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 800453e: f897 214c ldrb.w r2, [r7, #332] @ 0x14c
+ 8004542: 71da strb r2, [r3, #7]
+ index_input += 1;
+ 8004544: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004548: 3301 adds r3, #1
+ 800454a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ /* var_len_data input */
+ {
+ Osal_MemCpy( (void*)&cp0->Local_Name, (const void*)Local_Name, Local_Name_Length );
+ 800454e: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004552: 3308 adds r3, #8
+ 8004554: f897 214c ldrb.w r2, [r7, #332] @ 0x14c
+ 8004558: f8d7 1150 ldr.w r1, [r7, #336] @ 0x150
+ 800455c: 4618 mov r0, r3
+ 800455e: f001 f822 bl 80055a6 <Osal_MemCpy>
+ index_input += Local_Name_Length;
+ 8004562: f897 314c ldrb.w r3, [r7, #332] @ 0x14c
+ 8004566: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
+ 800456a: 4413 add r3, r2
+ 800456c: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ {
+ cp1->Service_Uuid_length = Service_Uuid_length;
+ 8004570: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004574: f897 2154 ldrb.w r2, [r7, #340] @ 0x154
+ 8004578: 701a strb r2, [r3, #0]
+ }
+ index_input += 1;
+ 800457a: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800457e: 3301 adds r3, #1
+ 8004580: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemCpy( (void*)&cp1->Service_Uuid_List, (const void*)Service_Uuid_List, Service_Uuid_length );
+ 8004584: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004588: 3301 adds r3, #1
+ 800458a: f897 2154 ldrb.w r2, [r7, #340] @ 0x154
+ 800458e: f8d7 1158 ldr.w r1, [r7, #344] @ 0x158
+ 8004592: 4618 mov r0, r3
+ 8004594: f001 f807 bl 80055a6 <Osal_MemCpy>
+ index_input += Service_Uuid_length;
+ 8004598: f897 3154 ldrb.w r3, [r7, #340] @ 0x154
+ 800459c: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
+ 80045a0: 4413 add r3, r2
+ 80045a2: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ {
+ cp2->Conn_Interval_Min = Conn_Interval_Min;
+ 80045a6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80045aa: f8b7 215c ldrh.w r2, [r7, #348] @ 0x15c
+ 80045ae: 801a strh r2, [r3, #0]
+ }
+ index_input += 2;
+ 80045b0: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80045b4: 3302 adds r3, #2
+ 80045b6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ {
+ cp2->Conn_Interval_Max = Conn_Interval_Max;
+ 80045ba: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80045be: f8b7 2160 ldrh.w r2, [r7, #352] @ 0x160
+ 80045c2: 805a strh r2, [r3, #2]
+ }
+ index_input += 2;
+ 80045c4: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80045c8: 3302 adds r3, #2
+ 80045ca: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ }
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 80045ce: f507 7388 add.w r3, r7, #272 @ 0x110
+ 80045d2: 2218 movs r2, #24
+ 80045d4: 2100 movs r1, #0
+ 80045d6: 4618 mov r0, r3
+ 80045d8: f000 fff5 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 80045dc: 233f movs r3, #63 @ 0x3f
+ 80045de: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x083;
+ 80045e2: 2383 movs r3, #131 @ 0x83
+ 80045e4: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 80045e8: f107 0310 add.w r3, r7, #16
+ 80045ec: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 80045f0: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80045f4: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 80045f8: f107 030f add.w r3, r7, #15
+ 80045fc: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 8004600: 2301 movs r3, #1
+ 8004602: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004606: f507 7388 add.w r3, r7, #272 @ 0x110
+ 800460a: 2100 movs r1, #0
+ 800460c: 4618 mov r0, r3
+ 800460e: f001 fb69 bl 8005ce4 <hci_send_req>
+ 8004612: 4603 mov r3, r0
+ 8004614: 2b00 cmp r3, #0
+ 8004616: da01 bge.n 800461c <aci_gap_set_discoverable+0x1e0>
+ return BLE_STATUS_TIMEOUT;
+ 8004618: 23ff movs r3, #255 @ 0xff
+ 800461a: e004 b.n 8004626 <aci_gap_set_discoverable+0x1ea>
+ return status;
+ 800461c: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004620: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 8004624: 781b ldrb r3, [r3, #0]
+}
+ 8004626: 4618 mov r0, r3
+ 8004628: f507 779c add.w r7, r7, #312 @ 0x138
+ 800462c: 46bd mov sp, r7
+ 800462e: bdb0 pop {r4, r5, r7, pc}
+
+08004630 <aci_gap_set_io_capability>:
+ return BLE_STATUS_TIMEOUT;
+ return status;
+}
+
+tBleStatus aci_gap_set_io_capability( uint8_t IO_Capability )
+{
+ 8004630: b580 push {r7, lr}
+ 8004632: b0cc sub sp, #304 @ 0x130
+ 8004634: af00 add r7, sp, #0
+ 8004636: 4602 mov r2, r0
+ 8004638: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800463c: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 8004640: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gap_set_io_capability_cp0 *cp0 = (aci_gap_set_io_capability_cp0*)(cmd_buffer);
+ 8004642: f107 0310 add.w r3, r7, #16
+ 8004646: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 800464a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800464e: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8004652: 2200 movs r2, #0
+ 8004654: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 8004656: 2300 movs r3, #0
+ 8004658: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->IO_Capability = IO_Capability;
+ 800465c: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004660: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004664: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 8004668: 7812 ldrb r2, [r2, #0]
+ 800466a: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 800466c: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004670: 3301 adds r3, #1
+ 8004672: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004676: f507 7388 add.w r3, r7, #272 @ 0x110
+ 800467a: 2218 movs r2, #24
+ 800467c: 2100 movs r1, #0
+ 800467e: 4618 mov r0, r3
+ 8004680: f000 ffa1 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004684: 233f movs r3, #63 @ 0x3f
+ 8004686: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x085;
+ 800468a: 2385 movs r3, #133 @ 0x85
+ 800468c: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8004690: f107 0310 add.w r3, r7, #16
+ 8004694: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8004698: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800469c: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 80046a0: f107 030f add.w r3, r7, #15
+ 80046a4: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 80046a8: 2301 movs r3, #1
+ 80046aa: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 80046ae: f507 7388 add.w r3, r7, #272 @ 0x110
+ 80046b2: 2100 movs r1, #0
+ 80046b4: 4618 mov r0, r3
+ 80046b6: f001 fb15 bl 8005ce4 <hci_send_req>
+ 80046ba: 4603 mov r3, r0
+ 80046bc: 2b00 cmp r3, #0
+ 80046be: da01 bge.n 80046c4 <aci_gap_set_io_capability+0x94>
+ return BLE_STATUS_TIMEOUT;
+ 80046c0: 23ff movs r3, #255 @ 0xff
+ 80046c2: e004 b.n 80046ce <aci_gap_set_io_capability+0x9e>
+ return status;
+ 80046c4: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80046c8: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80046cc: 781b ldrb r3, [r3, #0]
+}
+ 80046ce: 4618 mov r0, r3
+ 80046d0: f507 7798 add.w r7, r7, #304 @ 0x130
+ 80046d4: 46bd mov sp, r7
+ 80046d6: bd80 pop {r7, pc}
+
+080046d8 <aci_gap_set_authentication_requirement>:
+ uint8_t Min_Encryption_Key_Size,
+ uint8_t Max_Encryption_Key_Size,
+ uint8_t Use_Fixed_Pin,
+ uint32_t Fixed_Pin,
+ uint8_t Identity_Address_Type )
+{
+ 80046d8: b5b0 push {r4, r5, r7, lr}
+ 80046da: b0cc sub sp, #304 @ 0x130
+ 80046dc: af00 add r7, sp, #0
+ 80046de: 4605 mov r5, r0
+ 80046e0: 460c mov r4, r1
+ 80046e2: 4610 mov r0, r2
+ 80046e4: 4619 mov r1, r3
+ 80046e6: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80046ea: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 80046ee: 462a mov r2, r5
+ 80046f0: 701a strb r2, [r3, #0]
+ 80046f2: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80046f6: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 80046fa: 4622 mov r2, r4
+ 80046fc: 701a strb r2, [r3, #0]
+ 80046fe: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004702: f2a3 132b subw r3, r3, #299 @ 0x12b
+ 8004706: 4602 mov r2, r0
+ 8004708: 701a strb r2, [r3, #0]
+ 800470a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800470e: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004712: 460a mov r2, r1
+ 8004714: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gap_set_authentication_requirement_cp0 *cp0 = (aci_gap_set_authentication_requirement_cp0*)(cmd_buffer);
+ 8004716: f107 0310 add.w r3, r7, #16
+ 800471a: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 800471e: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004722: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8004726: 2200 movs r2, #0
+ 8004728: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 800472a: 2300 movs r3, #0
+ 800472c: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Bonding_Mode = Bonding_Mode;
+ 8004730: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004734: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004738: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 800473c: 7812 ldrb r2, [r2, #0]
+ 800473e: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 8004740: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004744: 3301 adds r3, #1
+ 8004746: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->MITM_Mode = MITM_Mode;
+ 800474a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 800474e: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004752: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 8004756: 7812 ldrb r2, [r2, #0]
+ 8004758: 705a strb r2, [r3, #1]
+ index_input += 1;
+ 800475a: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800475e: 3301 adds r3, #1
+ 8004760: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->SC_Support = SC_Support;
+ 8004764: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004768: f507 7298 add.w r2, r7, #304 @ 0x130
+ 800476c: f2a2 122b subw r2, r2, #299 @ 0x12b
+ 8004770: 7812 ldrb r2, [r2, #0]
+ 8004772: 709a strb r2, [r3, #2]
+ index_input += 1;
+ 8004774: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004778: 3301 adds r3, #1
+ 800477a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->KeyPress_Notification_Support = KeyPress_Notification_Support;
+ 800477e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004782: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004786: f5a2 7296 sub.w r2, r2, #300 @ 0x12c
+ 800478a: 7812 ldrb r2, [r2, #0]
+ 800478c: 70da strb r2, [r3, #3]
+ index_input += 1;
+ 800478e: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004792: 3301 adds r3, #1
+ 8004794: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Min_Encryption_Key_Size = Min_Encryption_Key_Size;
+ 8004798: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 800479c: f897 2140 ldrb.w r2, [r7, #320] @ 0x140
+ 80047a0: 711a strb r2, [r3, #4]
+ index_input += 1;
+ 80047a2: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80047a6: 3301 adds r3, #1
+ 80047a8: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Max_Encryption_Key_Size = Max_Encryption_Key_Size;
+ 80047ac: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80047b0: f897 2144 ldrb.w r2, [r7, #324] @ 0x144
+ 80047b4: 715a strb r2, [r3, #5]
+ index_input += 1;
+ 80047b6: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80047ba: 3301 adds r3, #1
+ 80047bc: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Use_Fixed_Pin = Use_Fixed_Pin;
+ 80047c0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80047c4: f897 2148 ldrb.w r2, [r7, #328] @ 0x148
+ 80047c8: 719a strb r2, [r3, #6]
+ index_input += 1;
+ 80047ca: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80047ce: 3301 adds r3, #1
+ 80047d0: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Fixed_Pin = Fixed_Pin;
+ 80047d4: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80047d8: f8d7 214c ldr.w r2, [r7, #332] @ 0x14c
+ 80047dc: f8c3 2007 str.w r2, [r3, #7]
+ index_input += 4;
+ 80047e0: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80047e4: 3304 adds r3, #4
+ 80047e6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Identity_Address_Type = Identity_Address_Type;
+ 80047ea: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80047ee: f897 2150 ldrb.w r2, [r7, #336] @ 0x150
+ 80047f2: 72da strb r2, [r3, #11]
+ index_input += 1;
+ 80047f4: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80047f8: 3301 adds r3, #1
+ 80047fa: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 80047fe: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004802: 2218 movs r2, #24
+ 8004804: 2100 movs r1, #0
+ 8004806: 4618 mov r0, r3
+ 8004808: f000 fedd bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 800480c: 233f movs r3, #63 @ 0x3f
+ 800480e: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x086;
+ 8004812: 2386 movs r3, #134 @ 0x86
+ 8004814: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8004818: f107 0310 add.w r3, r7, #16
+ 800481c: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8004820: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004824: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 8004828: f107 030f add.w r3, r7, #15
+ 800482c: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 8004830: 2301 movs r3, #1
+ 8004832: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004836: f507 7388 add.w r3, r7, #272 @ 0x110
+ 800483a: 2100 movs r1, #0
+ 800483c: 4618 mov r0, r3
+ 800483e: f001 fa51 bl 8005ce4 <hci_send_req>
+ 8004842: 4603 mov r3, r0
+ 8004844: 2b00 cmp r3, #0
+ 8004846: da01 bge.n 800484c <aci_gap_set_authentication_requirement+0x174>
+ return BLE_STATUS_TIMEOUT;
+ 8004848: 23ff movs r3, #255 @ 0xff
+ 800484a: e004 b.n 8004856 <aci_gap_set_authentication_requirement+0x17e>
+ return status;
+ 800484c: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004850: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8004854: 781b ldrb r3, [r3, #0]
+}
+ 8004856: 4618 mov r0, r3
+ 8004858: f507 7798 add.w r7, r7, #304 @ 0x130
+ 800485c: 46bd mov sp, r7
+ 800485e: bdb0 pop {r4, r5, r7, pc}
+
+08004860 <aci_gap_init>:
+ uint8_t privacy_enabled,
+ uint8_t device_name_char_len,
+ uint16_t* Service_Handle,
+ uint16_t* Dev_Name_Char_Handle,
+ uint16_t* Appearance_Char_Handle )
+{
+ 8004860: b590 push {r4, r7, lr}
+ 8004862: b0cd sub sp, #308 @ 0x134
+ 8004864: af00 add r7, sp, #0
+ 8004866: 4604 mov r4, r0
+ 8004868: 4608 mov r0, r1
+ 800486a: 4611 mov r1, r2
+ 800486c: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004870: f5a2 7298 sub.w r2, r2, #304 @ 0x130
+ 8004874: 6013 str r3, [r2, #0]
+ 8004876: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800487a: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 800487e: 4622 mov r2, r4
+ 8004880: 701a strb r2, [r3, #0]
+ 8004882: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004886: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 800488a: 4602 mov r2, r0
+ 800488c: 701a strb r2, [r3, #0]
+ 800488e: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004892: f2a3 132b subw r3, r3, #299 @ 0x12b
+ 8004896: 460a mov r2, r1
+ 8004898: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gap_init_cp0 *cp0 = (aci_gap_init_cp0*)(cmd_buffer);
+ 800489a: f107 0310 add.w r3, r7, #16
+ 800489e: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ aci_gap_init_rp0 resp;
+ Osal_MemSet( &resp, 0, sizeof(resp) );
+ 80048a2: f107 0308 add.w r3, r7, #8
+ 80048a6: 2207 movs r2, #7
+ 80048a8: 2100 movs r1, #0
+ 80048aa: 4618 mov r0, r3
+ 80048ac: f000 fe8b bl 80055c6 <Osal_MemSet>
+ int index_input = 0;
+ 80048b0: 2300 movs r3, #0
+ 80048b2: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Role = Role;
+ 80048b6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80048ba: f507 7298 add.w r2, r7, #304 @ 0x130
+ 80048be: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 80048c2: 7812 ldrb r2, [r2, #0]
+ 80048c4: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 80048c6: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80048ca: 3301 adds r3, #1
+ 80048cc: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->privacy_enabled = privacy_enabled;
+ 80048d0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80048d4: f507 7298 add.w r2, r7, #304 @ 0x130
+ 80048d8: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 80048dc: 7812 ldrb r2, [r2, #0]
+ 80048de: 705a strb r2, [r3, #1]
+ index_input += 1;
+ 80048e0: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80048e4: 3301 adds r3, #1
+ 80048e6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->device_name_char_len = device_name_char_len;
+ 80048ea: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80048ee: f507 7298 add.w r2, r7, #304 @ 0x130
+ 80048f2: f2a2 122b subw r2, r2, #299 @ 0x12b
+ 80048f6: 7812 ldrb r2, [r2, #0]
+ 80048f8: 709a strb r2, [r3, #2]
+ index_input += 1;
+ 80048fa: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80048fe: 3301 adds r3, #1
+ 8004900: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004904: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004908: 2218 movs r2, #24
+ 800490a: 2100 movs r1, #0
+ 800490c: 4618 mov r0, r3
+ 800490e: f000 fe5a bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004912: 233f movs r3, #63 @ 0x3f
+ 8004914: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x08a;
+ 8004918: 238a movs r3, #138 @ 0x8a
+ 800491a: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 800491e: f107 0310 add.w r3, r7, #16
+ 8004922: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8004926: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800492a: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &resp;
+ 800492e: f107 0308 add.w r3, r7, #8
+ 8004932: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = sizeof(resp);
+ 8004936: 2307 movs r3, #7
+ 8004938: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 800493c: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004940: 2100 movs r1, #0
+ 8004942: 4618 mov r0, r3
+ 8004944: f001 f9ce bl 8005ce4 <hci_send_req>
+ 8004948: 4603 mov r3, r0
+ 800494a: 2b00 cmp r3, #0
+ 800494c: da01 bge.n 8004952 <aci_gap_init+0xf2>
+ return BLE_STATUS_TIMEOUT;
+ 800494e: 23ff movs r3, #255 @ 0xff
+ 8004950: e02e b.n 80049b0 <aci_gap_init+0x150>
+ if ( resp.Status )
+ 8004952: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004956: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 800495a: 781b ldrb r3, [r3, #0]
+ 800495c: 2b00 cmp r3, #0
+ 800495e: d005 beq.n 800496c <aci_gap_init+0x10c>
+ return resp.Status;
+ 8004960: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004964: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 8004968: 781b ldrb r3, [r3, #0]
+ 800496a: e021 b.n 80049b0 <aci_gap_init+0x150>
+ *Service_Handle = resp.Service_Handle;
+ 800496c: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004970: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 8004974: f8b3 3001 ldrh.w r3, [r3, #1]
+ 8004978: b29a uxth r2, r3
+ 800497a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800497e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 8004982: 681b ldr r3, [r3, #0]
+ 8004984: 801a strh r2, [r3, #0]
+ *Dev_Name_Char_Handle = resp.Dev_Name_Char_Handle;
+ 8004986: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800498a: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 800498e: f8b3 3003 ldrh.w r3, [r3, #3]
+ 8004992: b29a uxth r2, r3
+ 8004994: f8d7 3140 ldr.w r3, [r7, #320] @ 0x140
+ 8004998: 801a strh r2, [r3, #0]
+ *Appearance_Char_Handle = resp.Appearance_Char_Handle;
+ 800499a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800499e: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 80049a2: f8b3 3005 ldrh.w r3, [r3, #5]
+ 80049a6: b29a uxth r2, r3
+ 80049a8: f8d7 3144 ldr.w r3, [r7, #324] @ 0x144
+ 80049ac: 801a strh r2, [r3, #0]
+ return BLE_STATUS_SUCCESS;
+ 80049ae: 2300 movs r3, #0
+}
+ 80049b0: 4618 mov r0, r3
+ 80049b2: f507 779a add.w r7, r7, #308 @ 0x134
+ 80049b6: 46bd mov sp, r7
+ 80049b8: bd90 pop {r4, r7, pc}
+
+080049ba <aci_gap_update_adv_data>:
+ return status;
+}
+
+tBleStatus aci_gap_update_adv_data( uint8_t AdvDataLen,
+ const uint8_t* AdvData )
+{
+ 80049ba: b580 push {r7, lr}
+ 80049bc: b0cc sub sp, #304 @ 0x130
+ 80049be: af00 add r7, sp, #0
+ 80049c0: 4602 mov r2, r0
+ 80049c2: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80049c6: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 80049ca: 6019 str r1, [r3, #0]
+ 80049cc: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80049d0: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 80049d4: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gap_update_adv_data_cp0 *cp0 = (aci_gap_update_adv_data_cp0*)(cmd_buffer);
+ 80049d6: f107 0310 add.w r3, r7, #16
+ 80049da: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 80049de: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80049e2: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80049e6: 2200 movs r2, #0
+ 80049e8: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 80049ea: 2300 movs r3, #0
+ 80049ec: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->AdvDataLen = AdvDataLen;
+ 80049f0: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80049f4: f507 7298 add.w r2, r7, #304 @ 0x130
+ 80049f8: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 80049fc: 7812 ldrb r2, [r2, #0]
+ 80049fe: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 8004a00: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004a04: 3301 adds r3, #1
+ 8004a06: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemCpy( (void*)&cp0->AdvData, (const void*)AdvData, AdvDataLen );
+ 8004a0a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004a0e: 1c58 adds r0, r3, #1
+ 8004a10: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004a14: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 8004a18: 781a ldrb r2, [r3, #0]
+ 8004a1a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004a1e: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 8004a22: 6819 ldr r1, [r3, #0]
+ 8004a24: f000 fdbf bl 80055a6 <Osal_MemCpy>
+ index_input += AdvDataLen;
+ 8004a28: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004a2c: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 8004a30: 781b ldrb r3, [r3, #0]
+ 8004a32: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
+ 8004a36: 4413 add r3, r2
+ 8004a38: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004a3c: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004a40: 2218 movs r2, #24
+ 8004a42: 2100 movs r1, #0
+ 8004a44: 4618 mov r0, r3
+ 8004a46: f000 fdbe bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004a4a: 233f movs r3, #63 @ 0x3f
+ 8004a4c: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x08e;
+ 8004a50: 238e movs r3, #142 @ 0x8e
+ 8004a52: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8004a56: f107 0310 add.w r3, r7, #16
+ 8004a5a: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8004a5e: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004a62: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 8004a66: f107 030f add.w r3, r7, #15
+ 8004a6a: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 8004a6e: 2301 movs r3, #1
+ 8004a70: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004a74: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004a78: 2100 movs r1, #0
+ 8004a7a: 4618 mov r0, r3
+ 8004a7c: f001 f932 bl 8005ce4 <hci_send_req>
+ 8004a80: 4603 mov r3, r0
+ 8004a82: 2b00 cmp r3, #0
+ 8004a84: da01 bge.n 8004a8a <aci_gap_update_adv_data+0xd0>
+ return BLE_STATUS_TIMEOUT;
+ 8004a86: 23ff movs r3, #255 @ 0xff
+ 8004a88: e004 b.n 8004a94 <aci_gap_update_adv_data+0xda>
+ return status;
+ 8004a8a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004a8e: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8004a92: 781b ldrb r3, [r3, #0]
+}
+ 8004a94: 4618 mov r0, r3
+ 8004a96: f507 7798 add.w r7, r7, #304 @ 0x130
+ 8004a9a: 46bd mov sp, r7
+ 8004a9c: bd80 pop {r7, pc}
+
+08004a9e <aci_gap_configure_filter_accept_list>:
+ return BLE_STATUS_TIMEOUT;
+ return status;
+}
+
+tBleStatus aci_gap_configure_filter_accept_list( void )
+{
+ 8004a9e: b580 push {r7, lr}
+ 8004aa0: b088 sub sp, #32
+ 8004aa2: af00 add r7, sp, #0
+ struct hci_request rq;
+ tBleStatus status = 0;
+ 8004aa4: 2300 movs r3, #0
+ 8004aa6: 71fb strb r3, [r7, #7]
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004aa8: f107 0308 add.w r3, r7, #8
+ 8004aac: 2218 movs r2, #24
+ 8004aae: 2100 movs r1, #0
+ 8004ab0: 4618 mov r0, r3
+ 8004ab2: f000 fd88 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004ab6: 233f movs r3, #63 @ 0x3f
+ 8004ab8: 813b strh r3, [r7, #8]
+ rq.ocf = 0x092;
+ 8004aba: 2392 movs r3, #146 @ 0x92
+ 8004abc: 817b strh r3, [r7, #10]
+ rq.rparam = &status;
+ 8004abe: 1dfb adds r3, r7, #7
+ 8004ac0: 61bb str r3, [r7, #24]
+ rq.rlen = 1;
+ 8004ac2: 2301 movs r3, #1
+ 8004ac4: 61fb str r3, [r7, #28]
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004ac6: f107 0308 add.w r3, r7, #8
+ 8004aca: 2100 movs r1, #0
+ 8004acc: 4618 mov r0, r3
+ 8004ace: f001 f909 bl 8005ce4 <hci_send_req>
+ 8004ad2: 4603 mov r3, r0
+ 8004ad4: 2b00 cmp r3, #0
+ 8004ad6: da01 bge.n 8004adc <aci_gap_configure_filter_accept_list+0x3e>
+ return BLE_STATUS_TIMEOUT;
+ 8004ad8: 23ff movs r3, #255 @ 0xff
+ 8004ada: e000 b.n 8004ade <aci_gap_configure_filter_accept_list+0x40>
+ return status;
+ 8004adc: 79fb ldrb r3, [r7, #7]
+}
+ 8004ade: 4618 mov r0, r3
+ 8004ae0: 3720 adds r7, #32
+ 8004ae2: 46bd mov sp, r7
+ 8004ae4: bd80 pop {r7, pc}
+
+08004ae6 <aci_gatt_init>:
+ */
+
+#include "auto/ble_gatt_aci.h"
+
+tBleStatus aci_gatt_init( void )
+{
+ 8004ae6: b580 push {r7, lr}
+ 8004ae8: b088 sub sp, #32
+ 8004aea: af00 add r7, sp, #0
+ struct hci_request rq;
+ tBleStatus status = 0;
+ 8004aec: 2300 movs r3, #0
+ 8004aee: 71fb strb r3, [r7, #7]
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004af0: f107 0308 add.w r3, r7, #8
+ 8004af4: 2218 movs r2, #24
+ 8004af6: 2100 movs r1, #0
+ 8004af8: 4618 mov r0, r3
+ 8004afa: f000 fd64 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004afe: 233f movs r3, #63 @ 0x3f
+ 8004b00: 813b strh r3, [r7, #8]
+ rq.ocf = 0x101;
+ 8004b02: f240 1301 movw r3, #257 @ 0x101
+ 8004b06: 817b strh r3, [r7, #10]
+ rq.rparam = &status;
+ 8004b08: 1dfb adds r3, r7, #7
+ 8004b0a: 61bb str r3, [r7, #24]
+ rq.rlen = 1;
+ 8004b0c: 2301 movs r3, #1
+ 8004b0e: 61fb str r3, [r7, #28]
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004b10: f107 0308 add.w r3, r7, #8
+ 8004b14: 2100 movs r1, #0
+ 8004b16: 4618 mov r0, r3
+ 8004b18: f001 f8e4 bl 8005ce4 <hci_send_req>
+ 8004b1c: 4603 mov r3, r0
+ 8004b1e: 2b00 cmp r3, #0
+ 8004b20: da01 bge.n 8004b26 <aci_gatt_init+0x40>
+ return BLE_STATUS_TIMEOUT;
+ 8004b22: 23ff movs r3, #255 @ 0xff
+ 8004b24: e000 b.n 8004b28 <aci_gatt_init+0x42>
+ return status;
+ 8004b26: 79fb ldrb r3, [r7, #7]
+}
+ 8004b28: 4618 mov r0, r3
+ 8004b2a: 3720 adds r7, #32
+ 8004b2c: 46bd mov sp, r7
+ 8004b2e: bd80 pop {r7, pc}
+
+08004b30 <aci_gatt_add_service>:
+tBleStatus aci_gatt_add_service( uint8_t Service_UUID_Type,
+ const Service_UUID_t* Service_UUID,
+ uint8_t Service_Type,
+ uint8_t Max_Attribute_Records,
+ uint16_t* Service_Handle )
+{
+ 8004b30: b590 push {r4, r7, lr}
+ 8004b32: b0cf sub sp, #316 @ 0x13c
+ 8004b34: af00 add r7, sp, #0
+ 8004b36: 4604 mov r4, r0
+ 8004b38: f507 709c add.w r0, r7, #312 @ 0x138
+ 8004b3c: f5a0 709c sub.w r0, r0, #312 @ 0x138
+ 8004b40: 6001 str r1, [r0, #0]
+ 8004b42: 4610 mov r0, r2
+ 8004b44: 4619 mov r1, r3
+ 8004b46: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004b4a: f2a3 1331 subw r3, r3, #305 @ 0x131
+ 8004b4e: 4622 mov r2, r4
+ 8004b50: 701a strb r2, [r3, #0]
+ 8004b52: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004b56: f5a3 7399 sub.w r3, r3, #306 @ 0x132
+ 8004b5a: 4602 mov r2, r0
+ 8004b5c: 701a strb r2, [r3, #0]
+ 8004b5e: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004b62: f2a3 1333 subw r3, r3, #307 @ 0x133
+ 8004b66: 460a mov r2, r1
+ 8004b68: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gatt_add_service_cp0 *cp0 = (aci_gatt_add_service_cp0*)(cmd_buffer);
+ 8004b6a: f107 0310 add.w r3, r7, #16
+ 8004b6e: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ aci_gatt_add_service_cp1 *cp1 = (aci_gatt_add_service_cp1*)(cmd_buffer + 1 + (Service_UUID_Type == 1 ? 2 : (Service_UUID_Type == 2 ? 16 : 0)));
+ 8004b72: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004b76: f2a3 1331 subw r3, r3, #305 @ 0x131
+ 8004b7a: 781b ldrb r3, [r3, #0]
+ 8004b7c: 2b01 cmp r3, #1
+ 8004b7e: d00a beq.n 8004b96 <aci_gatt_add_service+0x66>
+ 8004b80: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004b84: f2a3 1331 subw r3, r3, #305 @ 0x131
+ 8004b88: 781b ldrb r3, [r3, #0]
+ 8004b8a: 2b02 cmp r3, #2
+ 8004b8c: d101 bne.n 8004b92 <aci_gatt_add_service+0x62>
+ 8004b8e: 2311 movs r3, #17
+ 8004b90: e002 b.n 8004b98 <aci_gatt_add_service+0x68>
+ 8004b92: 2301 movs r3, #1
+ 8004b94: e000 b.n 8004b98 <aci_gatt_add_service+0x68>
+ 8004b96: 2303 movs r3, #3
+ 8004b98: f107 0210 add.w r2, r7, #16
+ 8004b9c: 4413 add r3, r2
+ 8004b9e: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ aci_gatt_add_service_rp0 resp;
+ Osal_MemSet( &resp, 0, sizeof(resp) );
+ 8004ba2: f107 030c add.w r3, r7, #12
+ 8004ba6: 2203 movs r2, #3
+ 8004ba8: 2100 movs r1, #0
+ 8004baa: 4618 mov r0, r3
+ 8004bac: f000 fd0b bl 80055c6 <Osal_MemSet>
+ int index_input = 0;
+ 8004bb0: 2300 movs r3, #0
+ 8004bb2: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Service_UUID_Type = Service_UUID_Type;
+ 8004bb6: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004bba: f507 729c add.w r2, r7, #312 @ 0x138
+ 8004bbe: f2a2 1231 subw r2, r2, #305 @ 0x131
+ 8004bc2: 7812 ldrb r2, [r2, #0]
+ 8004bc4: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 8004bc6: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004bca: 3301 adds r3, #1
+ 8004bcc: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ /* var_len_data input */
+ {
+ uint8_t size;
+ switch ( Service_UUID_Type )
+ 8004bd0: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004bd4: f2a3 1331 subw r3, r3, #305 @ 0x131
+ 8004bd8: 781b ldrb r3, [r3, #0]
+ 8004bda: 2b01 cmp r3, #1
+ 8004bdc: d002 beq.n 8004be4 <aci_gatt_add_service+0xb4>
+ 8004bde: 2b02 cmp r3, #2
+ 8004be0: d004 beq.n 8004bec <aci_gatt_add_service+0xbc>
+ 8004be2: e007 b.n 8004bf4 <aci_gatt_add_service+0xc4>
+ {
+ case 1: size = 2; break;
+ 8004be4: 2302 movs r3, #2
+ 8004be6: f887 3137 strb.w r3, [r7, #311] @ 0x137
+ 8004bea: e005 b.n 8004bf8 <aci_gatt_add_service+0xc8>
+ case 2: size = 16; break;
+ 8004bec: 2310 movs r3, #16
+ 8004bee: f887 3137 strb.w r3, [r7, #311] @ 0x137
+ 8004bf2: e001 b.n 8004bf8 <aci_gatt_add_service+0xc8>
+ default: return BLE_STATUS_ERROR;
+ 8004bf4: 2397 movs r3, #151 @ 0x97
+ 8004bf6: e06c b.n 8004cd2 <aci_gatt_add_service+0x1a2>
+ }
+ Osal_MemCpy( (void*)&cp0->Service_UUID, (const void*)Service_UUID, size );
+ 8004bf8: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004bfc: 1c58 adds r0, r3, #1
+ 8004bfe: f897 2137 ldrb.w r2, [r7, #311] @ 0x137
+ 8004c02: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004c06: f5a3 739c sub.w r3, r3, #312 @ 0x138
+ 8004c0a: 6819 ldr r1, [r3, #0]
+ 8004c0c: f000 fccb bl 80055a6 <Osal_MemCpy>
+ index_input += size;
+ 8004c10: f897 3137 ldrb.w r3, [r7, #311] @ 0x137
+ 8004c14: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
+ 8004c18: 4413 add r3, r2
+ 8004c1a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ {
+ cp1->Service_Type = Service_Type;
+ 8004c1e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004c22: f507 729c add.w r2, r7, #312 @ 0x138
+ 8004c26: f5a2 7299 sub.w r2, r2, #306 @ 0x132
+ 8004c2a: 7812 ldrb r2, [r2, #0]
+ 8004c2c: 701a strb r2, [r3, #0]
+ }
+ index_input += 1;
+ 8004c2e: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004c32: 3301 adds r3, #1
+ 8004c34: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ {
+ cp1->Max_Attribute_Records = Max_Attribute_Records;
+ 8004c38: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004c3c: f507 729c add.w r2, r7, #312 @ 0x138
+ 8004c40: f2a2 1233 subw r2, r2, #307 @ 0x133
+ 8004c44: 7812 ldrb r2, [r2, #0]
+ 8004c46: 705a strb r2, [r3, #1]
+ }
+ index_input += 1;
+ 8004c48: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004c4c: 3301 adds r3, #1
+ 8004c4e: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ }
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004c52: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004c56: 2218 movs r2, #24
+ 8004c58: 2100 movs r1, #0
+ 8004c5a: 4618 mov r0, r3
+ 8004c5c: f000 fcb3 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004c60: 233f movs r3, #63 @ 0x3f
+ 8004c62: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x102;
+ 8004c66: f44f 7381 mov.w r3, #258 @ 0x102
+ 8004c6a: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8004c6e: f107 0310 add.w r3, r7, #16
+ 8004c72: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8004c76: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004c7a: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &resp;
+ 8004c7e: f107 030c add.w r3, r7, #12
+ 8004c82: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = sizeof(resp);
+ 8004c86: 2303 movs r3, #3
+ 8004c88: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004c8c: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004c90: 2100 movs r1, #0
+ 8004c92: 4618 mov r0, r3
+ 8004c94: f001 f826 bl 8005ce4 <hci_send_req>
+ 8004c98: 4603 mov r3, r0
+ 8004c9a: 2b00 cmp r3, #0
+ 8004c9c: da01 bge.n 8004ca2 <aci_gatt_add_service+0x172>
+ return BLE_STATUS_TIMEOUT;
+ 8004c9e: 23ff movs r3, #255 @ 0xff
+ 8004ca0: e017 b.n 8004cd2 <aci_gatt_add_service+0x1a2>
+ if ( resp.Status )
+ 8004ca2: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004ca6: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004caa: 781b ldrb r3, [r3, #0]
+ 8004cac: 2b00 cmp r3, #0
+ 8004cae: d005 beq.n 8004cbc <aci_gatt_add_service+0x18c>
+ return resp.Status;
+ 8004cb0: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004cb4: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004cb8: 781b ldrb r3, [r3, #0]
+ 8004cba: e00a b.n 8004cd2 <aci_gatt_add_service+0x1a2>
+ *Service_Handle = resp.Service_Handle;
+ 8004cbc: f507 739c add.w r3, r7, #312 @ 0x138
+ 8004cc0: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004cc4: f8b3 3001 ldrh.w r3, [r3, #1]
+ 8004cc8: b29a uxth r2, r3
+ 8004cca: f8d7 3148 ldr.w r3, [r7, #328] @ 0x148
+ 8004cce: 801a strh r2, [r3, #0]
+ return BLE_STATUS_SUCCESS;
+ 8004cd0: 2300 movs r3, #0
+}
+ 8004cd2: 4618 mov r0, r3
+ 8004cd4: f507 779e add.w r7, r7, #316 @ 0x13c
+ 8004cd8: 46bd mov sp, r7
+ 8004cda: bd90 pop {r4, r7, pc}
+
+08004cdc <aci_gatt_add_char>:
+ uint8_t Security_Permissions,
+ uint8_t GATT_Evt_Mask,
+ uint8_t Enc_Key_Size,
+ uint8_t Is_Variable,
+ uint16_t* Char_Handle )
+{
+ 8004cdc: b590 push {r4, r7, lr}
+ 8004cde: b0d1 sub sp, #324 @ 0x144
+ 8004ce0: af00 add r7, sp, #0
+ 8004ce2: 4604 mov r4, r0
+ 8004ce4: 4608 mov r0, r1
+ 8004ce6: f507 71a0 add.w r1, r7, #320 @ 0x140
+ 8004cea: f5a1 719c sub.w r1, r1, #312 @ 0x138
+ 8004cee: 600a str r2, [r1, #0]
+ 8004cf0: 4619 mov r1, r3
+ 8004cf2: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004cf6: f5a3 7399 sub.w r3, r3, #306 @ 0x132
+ 8004cfa: 4622 mov r2, r4
+ 8004cfc: 801a strh r2, [r3, #0]
+ 8004cfe: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004d02: f2a3 1333 subw r3, r3, #307 @ 0x133
+ 8004d06: 4602 mov r2, r0
+ 8004d08: 701a strb r2, [r3, #0]
+ 8004d0a: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004d0e: f5a3 739d sub.w r3, r3, #314 @ 0x13a
+ 8004d12: 460a mov r2, r1
+ 8004d14: 801a strh r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gatt_add_char_cp0 *cp0 = (aci_gatt_add_char_cp0*)(cmd_buffer);
+ 8004d16: f107 0318 add.w r3, r7, #24
+ 8004d1a: f8c7 3138 str.w r3, [r7, #312] @ 0x138
+ aci_gatt_add_char_cp1 *cp1 = (aci_gatt_add_char_cp1*)(cmd_buffer + 2 + 1 + (Char_UUID_Type == 1 ? 2 : (Char_UUID_Type == 2 ? 16 : 0)));
+ 8004d1e: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004d22: f2a3 1333 subw r3, r3, #307 @ 0x133
+ 8004d26: 781b ldrb r3, [r3, #0]
+ 8004d28: 2b01 cmp r3, #1
+ 8004d2a: d00a beq.n 8004d42 <aci_gatt_add_char+0x66>
+ 8004d2c: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004d30: f2a3 1333 subw r3, r3, #307 @ 0x133
+ 8004d34: 781b ldrb r3, [r3, #0]
+ 8004d36: 2b02 cmp r3, #2
+ 8004d38: d101 bne.n 8004d3e <aci_gatt_add_char+0x62>
+ 8004d3a: 2313 movs r3, #19
+ 8004d3c: e002 b.n 8004d44 <aci_gatt_add_char+0x68>
+ 8004d3e: 2303 movs r3, #3
+ 8004d40: e000 b.n 8004d44 <aci_gatt_add_char+0x68>
+ 8004d42: 2305 movs r3, #5
+ 8004d44: f107 0218 add.w r2, r7, #24
+ 8004d48: 4413 add r3, r2
+ 8004d4a: f8c7 3134 str.w r3, [r7, #308] @ 0x134
+ aci_gatt_add_char_rp0 resp;
+ Osal_MemSet( &resp, 0, sizeof(resp) );
+ 8004d4e: f107 0314 add.w r3, r7, #20
+ 8004d52: 2203 movs r2, #3
+ 8004d54: 2100 movs r1, #0
+ 8004d56: 4618 mov r0, r3
+ 8004d58: f000 fc35 bl 80055c6 <Osal_MemSet>
+ int index_input = 0;
+ 8004d5c: 2300 movs r3, #0
+ 8004d5e: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ cp0->Service_Handle = Service_Handle;
+ 8004d62: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
+ 8004d66: f507 72a0 add.w r2, r7, #320 @ 0x140
+ 8004d6a: f5a2 7299 sub.w r2, r2, #306 @ 0x132
+ 8004d6e: 8812 ldrh r2, [r2, #0]
+ 8004d70: 801a strh r2, [r3, #0]
+ index_input += 2;
+ 8004d72: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004d76: 3302 adds r3, #2
+ 8004d78: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ cp0->Char_UUID_Type = Char_UUID_Type;
+ 8004d7c: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
+ 8004d80: f507 72a0 add.w r2, r7, #320 @ 0x140
+ 8004d84: f2a2 1233 subw r2, r2, #307 @ 0x133
+ 8004d88: 7812 ldrb r2, [r2, #0]
+ 8004d8a: 709a strb r2, [r3, #2]
+ index_input += 1;
+ 8004d8c: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004d90: 3301 adds r3, #1
+ 8004d92: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ /* var_len_data input */
+ {
+ uint8_t size;
+ switch ( Char_UUID_Type )
+ 8004d96: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004d9a: f2a3 1333 subw r3, r3, #307 @ 0x133
+ 8004d9e: 781b ldrb r3, [r3, #0]
+ 8004da0: 2b01 cmp r3, #1
+ 8004da2: d002 beq.n 8004daa <aci_gatt_add_char+0xce>
+ 8004da4: 2b02 cmp r3, #2
+ 8004da6: d004 beq.n 8004db2 <aci_gatt_add_char+0xd6>
+ 8004da8: e007 b.n 8004dba <aci_gatt_add_char+0xde>
+ {
+ case 1: size = 2; break;
+ 8004daa: 2302 movs r3, #2
+ 8004dac: f887 313f strb.w r3, [r7, #319] @ 0x13f
+ 8004db0: e005 b.n 8004dbe <aci_gatt_add_char+0xe2>
+ case 2: size = 16; break;
+ 8004db2: 2310 movs r3, #16
+ 8004db4: f887 313f strb.w r3, [r7, #319] @ 0x13f
+ 8004db8: e001 b.n 8004dbe <aci_gatt_add_char+0xe2>
+ default: return BLE_STATUS_ERROR;
+ 8004dba: 2397 movs r3, #151 @ 0x97
+ 8004dbc: e091 b.n 8004ee2 <aci_gatt_add_char+0x206>
+ }
+ Osal_MemCpy( (void*)&cp0->Char_UUID, (const void*)Char_UUID, size );
+ 8004dbe: f8d7 3138 ldr.w r3, [r7, #312] @ 0x138
+ 8004dc2: 1cd8 adds r0, r3, #3
+ 8004dc4: f897 213f ldrb.w r2, [r7, #319] @ 0x13f
+ 8004dc8: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004dcc: f5a3 739c sub.w r3, r3, #312 @ 0x138
+ 8004dd0: 6819 ldr r1, [r3, #0]
+ 8004dd2: f000 fbe8 bl 80055a6 <Osal_MemCpy>
+ index_input += size;
+ 8004dd6: f897 313f ldrb.w r3, [r7, #319] @ 0x13f
+ 8004dda: f8d7 2130 ldr.w r2, [r7, #304] @ 0x130
+ 8004dde: 4413 add r3, r2
+ 8004de0: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ {
+ cp1->Char_Value_Length = Char_Value_Length;
+ 8004de4: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004de8: f507 72a0 add.w r2, r7, #320 @ 0x140
+ 8004dec: f5a2 729d sub.w r2, r2, #314 @ 0x13a
+ 8004df0: 8812 ldrh r2, [r2, #0]
+ 8004df2: 801a strh r2, [r3, #0]
+ }
+ index_input += 2;
+ 8004df4: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004df8: 3302 adds r3, #2
+ 8004dfa: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ {
+ cp1->Char_Properties = Char_Properties;
+ 8004dfe: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004e02: f897 2150 ldrb.w r2, [r7, #336] @ 0x150
+ 8004e06: 709a strb r2, [r3, #2]
+ }
+ index_input += 1;
+ 8004e08: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004e0c: 3301 adds r3, #1
+ 8004e0e: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ {
+ cp1->Security_Permissions = Security_Permissions;
+ 8004e12: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004e16: f897 2154 ldrb.w r2, [r7, #340] @ 0x154
+ 8004e1a: 70da strb r2, [r3, #3]
+ }
+ index_input += 1;
+ 8004e1c: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004e20: 3301 adds r3, #1
+ 8004e22: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ {
+ cp1->GATT_Evt_Mask = GATT_Evt_Mask;
+ 8004e26: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004e2a: f897 2158 ldrb.w r2, [r7, #344] @ 0x158
+ 8004e2e: 711a strb r2, [r3, #4]
+ }
+ index_input += 1;
+ 8004e30: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004e34: 3301 adds r3, #1
+ 8004e36: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ {
+ cp1->Enc_Key_Size = Enc_Key_Size;
+ 8004e3a: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004e3e: f897 215c ldrb.w r2, [r7, #348] @ 0x15c
+ 8004e42: 715a strb r2, [r3, #5]
+ }
+ index_input += 1;
+ 8004e44: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004e48: 3301 adds r3, #1
+ 8004e4a: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ {
+ cp1->Is_Variable = Is_Variable;
+ 8004e4e: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 8004e52: f897 2160 ldrb.w r2, [r7, #352] @ 0x160
+ 8004e56: 719a strb r2, [r3, #6]
+ }
+ index_input += 1;
+ 8004e58: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004e5c: 3301 adds r3, #1
+ 8004e5e: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ }
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004e62: f507 738c add.w r3, r7, #280 @ 0x118
+ 8004e66: 2218 movs r2, #24
+ 8004e68: 2100 movs r1, #0
+ 8004e6a: 4618 mov r0, r3
+ 8004e6c: f000 fbab bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004e70: 233f movs r3, #63 @ 0x3f
+ 8004e72: f8a7 3118 strh.w r3, [r7, #280] @ 0x118
+ rq.ocf = 0x104;
+ 8004e76: f44f 7382 mov.w r3, #260 @ 0x104
+ 8004e7a: f8a7 311a strh.w r3, [r7, #282] @ 0x11a
+ rq.cparam = cmd_buffer;
+ 8004e7e: f107 0318 add.w r3, r7, #24
+ 8004e82: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.clen = index_input;
+ 8004e86: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8004e8a: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ rq.rparam = &resp;
+ 8004e8e: f107 0314 add.w r3, r7, #20
+ 8004e92: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ rq.rlen = sizeof(resp);
+ 8004e96: 2303 movs r3, #3
+ 8004e98: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8004e9c: f507 738c add.w r3, r7, #280 @ 0x118
+ 8004ea0: 2100 movs r1, #0
+ 8004ea2: 4618 mov r0, r3
+ 8004ea4: f000 ff1e bl 8005ce4 <hci_send_req>
+ 8004ea8: 4603 mov r3, r0
+ 8004eaa: 2b00 cmp r3, #0
+ 8004eac: da01 bge.n 8004eb2 <aci_gatt_add_char+0x1d6>
+ return BLE_STATUS_TIMEOUT;
+ 8004eae: 23ff movs r3, #255 @ 0xff
+ 8004eb0: e017 b.n 8004ee2 <aci_gatt_add_char+0x206>
+ if ( resp.Status )
+ 8004eb2: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004eb6: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004eba: 781b ldrb r3, [r3, #0]
+ 8004ebc: 2b00 cmp r3, #0
+ 8004ebe: d005 beq.n 8004ecc <aci_gatt_add_char+0x1f0>
+ return resp.Status;
+ 8004ec0: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004ec4: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004ec8: 781b ldrb r3, [r3, #0]
+ 8004eca: e00a b.n 8004ee2 <aci_gatt_add_char+0x206>
+ *Char_Handle = resp.Char_Handle;
+ 8004ecc: f507 73a0 add.w r3, r7, #320 @ 0x140
+ 8004ed0: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004ed4: f8b3 3001 ldrh.w r3, [r3, #1]
+ 8004ed8: b29a uxth r2, r3
+ 8004eda: f8d7 3164 ldr.w r3, [r7, #356] @ 0x164
+ 8004ede: 801a strh r2, [r3, #0]
+ return BLE_STATUS_SUCCESS;
+ 8004ee0: 2300 movs r3, #0
+}
+ 8004ee2: 4618 mov r0, r3
+ 8004ee4: f507 77a2 add.w r7, r7, #324 @ 0x144
+ 8004ee8: 46bd mov sp, r7
+ 8004eea: bd90 pop {r4, r7, pc}
+
+08004eec <aci_gatt_update_char_value>:
+tBleStatus aci_gatt_update_char_value( uint16_t Service_Handle,
+ uint16_t Char_Handle,
+ uint8_t Val_Offset,
+ uint8_t Char_Value_Length,
+ const uint8_t* Char_Value )
+{
+ 8004eec: b5b0 push {r4, r5, r7, lr}
+ 8004eee: b0cc sub sp, #304 @ 0x130
+ 8004ef0: af00 add r7, sp, #0
+ 8004ef2: 4605 mov r5, r0
+ 8004ef4: 460c mov r4, r1
+ 8004ef6: 4610 mov r0, r2
+ 8004ef8: 4619 mov r1, r3
+ 8004efa: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004efe: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 8004f02: 462a mov r2, r5
+ 8004f04: 801a strh r2, [r3, #0]
+ 8004f06: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004f0a: f5a3 7396 sub.w r3, r3, #300 @ 0x12c
+ 8004f0e: 4622 mov r2, r4
+ 8004f10: 801a strh r2, [r3, #0]
+ 8004f12: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004f16: f2a3 132d subw r3, r3, #301 @ 0x12d
+ 8004f1a: 4602 mov r2, r0
+ 8004f1c: 701a strb r2, [r3, #0]
+ 8004f1e: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004f22: f5a3 7397 sub.w r3, r3, #302 @ 0x12e
+ 8004f26: 460a mov r2, r1
+ 8004f28: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gatt_update_char_value_cp0 *cp0 = (aci_gatt_update_char_value_cp0*)(cmd_buffer);
+ 8004f2a: f107 0310 add.w r3, r7, #16
+ 8004f2e: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 8004f32: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004f36: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8004f3a: 2200 movs r2, #0
+ 8004f3c: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 8004f3e: 2300 movs r3, #0
+ 8004f40: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Service_Handle = Service_Handle;
+ 8004f44: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004f48: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004f4c: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 8004f50: 8812 ldrh r2, [r2, #0]
+ 8004f52: 801a strh r2, [r3, #0]
+ index_input += 2;
+ 8004f54: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004f58: 3302 adds r3, #2
+ 8004f5a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Char_Handle = Char_Handle;
+ 8004f5e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004f62: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004f66: f5a2 7296 sub.w r2, r2, #300 @ 0x12c
+ 8004f6a: 8812 ldrh r2, [r2, #0]
+ 8004f6c: 805a strh r2, [r3, #2]
+ index_input += 2;
+ 8004f6e: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004f72: 3302 adds r3, #2
+ 8004f74: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Val_Offset = Val_Offset;
+ 8004f78: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004f7c: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004f80: f2a2 122d subw r2, r2, #301 @ 0x12d
+ 8004f84: 7812 ldrb r2, [r2, #0]
+ 8004f86: 711a strb r2, [r3, #4]
+ index_input += 1;
+ 8004f88: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004f8c: 3301 adds r3, #1
+ 8004f8e: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Char_Value_Length = Char_Value_Length;
+ 8004f92: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004f96: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8004f9a: f5a2 7297 sub.w r2, r2, #302 @ 0x12e
+ 8004f9e: 7812 ldrb r2, [r2, #0]
+ 8004fa0: 715a strb r2, [r3, #5]
+ index_input += 1;
+ 8004fa2: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8004fa6: 3301 adds r3, #1
+ 8004fa8: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemCpy( (void*)&cp0->Char_Value, (const void*)Char_Value, Char_Value_Length );
+ 8004fac: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8004fb0: 1d98 adds r0, r3, #6
+ 8004fb2: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004fb6: f5a3 7397 sub.w r3, r3, #302 @ 0x12e
+ 8004fba: 781b ldrb r3, [r3, #0]
+ 8004fbc: 461a mov r2, r3
+ 8004fbe: f8d7 1140 ldr.w r1, [r7, #320] @ 0x140
+ 8004fc2: f000 faf0 bl 80055a6 <Osal_MemCpy>
+ index_input += Char_Value_Length;
+ 8004fc6: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8004fca: f5a3 7397 sub.w r3, r3, #302 @ 0x12e
+ 8004fce: 781b ldrb r3, [r3, #0]
+ 8004fd0: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
+ 8004fd4: 4413 add r3, r2
+ 8004fd6: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8004fda: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8004fde: 2218 movs r2, #24
+ 8004fe0: 2100 movs r1, #0
+ 8004fe2: 4618 mov r0, r3
+ 8004fe4: f000 faef bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8004fe8: 233f movs r3, #63 @ 0x3f
+ 8004fea: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x106;
+ 8004fee: f44f 7383 mov.w r3, #262 @ 0x106
+ 8004ff2: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8004ff6: f107 0310 add.w r3, r7, #16
+ 8004ffa: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8004ffe: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8005002: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 8005006: f107 030f add.w r3, r7, #15
+ 800500a: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 800500e: 2301 movs r3, #1
+ 8005010: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8005014: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005018: 2100 movs r1, #0
+ 800501a: 4618 mov r0, r3
+ 800501c: f000 fe62 bl 8005ce4 <hci_send_req>
+ 8005020: 4603 mov r3, r0
+ 8005022: 2b00 cmp r3, #0
+ 8005024: da01 bge.n 800502a <aci_gatt_update_char_value+0x13e>
+ return BLE_STATUS_TIMEOUT;
+ 8005026: 23ff movs r3, #255 @ 0xff
+ 8005028: e004 b.n 8005034 <aci_gatt_update_char_value+0x148>
+ return status;
+ 800502a: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800502e: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8005032: 781b ldrb r3, [r3, #0]
+}
+ 8005034: 4618 mov r0, r3
+ 8005036: f507 7798 add.w r7, r7, #304 @ 0x130
+ 800503a: 46bd mov sp, r7
+ 800503c: bdb0 pop {r4, r5, r7, pc}
+
+0800503e <aci_gatt_confirm_indication>:
+ return BLE_STATUS_TIMEOUT;
+ return status;
+}
+
+tBleStatus aci_gatt_confirm_indication( uint16_t Connection_Handle )
+{
+ 800503e: b580 push {r7, lr}
+ 8005040: b0cc sub sp, #304 @ 0x130
+ 8005042: af00 add r7, sp, #0
+ 8005044: 4602 mov r2, r0
+ 8005046: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800504a: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 800504e: 801a strh r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_gatt_confirm_indication_cp0 *cp0 = (aci_gatt_confirm_indication_cp0*)(cmd_buffer);
+ 8005050: f107 0310 add.w r3, r7, #16
+ 8005054: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 8005058: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800505c: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8005060: 2200 movs r2, #0
+ 8005062: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 8005064: 2300 movs r3, #0
+ 8005066: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Connection_Handle = Connection_Handle;
+ 800506a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 800506e: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8005072: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 8005076: 8812 ldrh r2, [r2, #0]
+ 8005078: 801a strh r2, [r3, #0]
+ index_input += 2;
+ 800507a: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800507e: 3302 adds r3, #2
+ 8005080: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8005084: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005088: 2218 movs r2, #24
+ 800508a: 2100 movs r1, #0
+ 800508c: 4618 mov r0, r3
+ 800508e: f000 fa9a bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8005092: 233f movs r3, #63 @ 0x3f
+ 8005094: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x125;
+ 8005098: f240 1325 movw r3, #293 @ 0x125
+ 800509c: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 80050a0: f107 0310 add.w r3, r7, #16
+ 80050a4: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 80050a8: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80050ac: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 80050b0: f107 030f add.w r3, r7, #15
+ 80050b4: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 80050b8: 2301 movs r3, #1
+ 80050ba: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 80050be: f507 7388 add.w r3, r7, #272 @ 0x110
+ 80050c2: 2100 movs r1, #0
+ 80050c4: 4618 mov r0, r3
+ 80050c6: f000 fe0d bl 8005ce4 <hci_send_req>
+ 80050ca: 4603 mov r3, r0
+ 80050cc: 2b00 cmp r3, #0
+ 80050ce: da01 bge.n 80050d4 <aci_gatt_confirm_indication+0x96>
+ return BLE_STATUS_TIMEOUT;
+ 80050d0: 23ff movs r3, #255 @ 0xff
+ 80050d2: e004 b.n 80050de <aci_gatt_confirm_indication+0xa0>
+ return status;
+ 80050d4: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80050d8: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80050dc: 781b ldrb r3, [r3, #0]
+}
+ 80050de: 4618 mov r0, r3
+ 80050e0: f507 7798 add.w r7, r7, #304 @ 0x130
+ 80050e4: 46bd mov sp, r7
+ 80050e6: bd80 pop {r7, pc}
+
+080050e8 <aci_hal_write_config_data>:
+#include "auto/ble_hal_aci.h"
+
+tBleStatus aci_hal_write_config_data( uint8_t Offset,
+ uint8_t Length,
+ const uint8_t* Value )
+{
+ 80050e8: b580 push {r7, lr}
+ 80050ea: b0cc sub sp, #304 @ 0x130
+ 80050ec: af00 add r7, sp, #0
+ 80050ee: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80050f2: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 80050f6: 601a str r2, [r3, #0]
+ 80050f8: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80050fc: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 8005100: 4602 mov r2, r0
+ 8005102: 701a strb r2, [r3, #0]
+ 8005104: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005108: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 800510c: 460a mov r2, r1
+ 800510e: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_hal_write_config_data_cp0 *cp0 = (aci_hal_write_config_data_cp0*)(cmd_buffer);
+ 8005110: f107 0310 add.w r3, r7, #16
+ 8005114: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 8005118: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800511c: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8005120: 2200 movs r2, #0
+ 8005122: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 8005124: 2300 movs r3, #0
+ 8005126: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Offset = Offset;
+ 800512a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 800512e: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8005132: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 8005136: 7812 ldrb r2, [r2, #0]
+ 8005138: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 800513a: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800513e: 3301 adds r3, #1
+ 8005140: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Length = Length;
+ 8005144: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8005148: f507 7298 add.w r2, r7, #304 @ 0x130
+ 800514c: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 8005150: 7812 ldrb r2, [r2, #0]
+ 8005152: 705a strb r2, [r3, #1]
+ index_input += 1;
+ 8005154: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8005158: 3301 adds r3, #1
+ 800515a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemCpy( (void*)&cp0->Value, (const void*)Value, Length );
+ 800515e: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8005162: 1c98 adds r0, r3, #2
+ 8005164: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005168: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 800516c: 781a ldrb r2, [r3, #0]
+ 800516e: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005172: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 8005176: 6819 ldr r1, [r3, #0]
+ 8005178: f000 fa15 bl 80055a6 <Osal_MemCpy>
+ index_input += Length;
+ 800517c: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005180: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 8005184: 781b ldrb r3, [r3, #0]
+ 8005186: f8d7 2128 ldr.w r2, [r7, #296] @ 0x128
+ 800518a: 4413 add r3, r2
+ 800518c: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8005190: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005194: 2218 movs r2, #24
+ 8005196: 2100 movs r1, #0
+ 8005198: 4618 mov r0, r3
+ 800519a: f000 fa14 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 800519e: 233f movs r3, #63 @ 0x3f
+ 80051a0: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x00c;
+ 80051a4: 230c movs r3, #12
+ 80051a6: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 80051aa: f107 0310 add.w r3, r7, #16
+ 80051ae: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 80051b2: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 80051b6: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 80051ba: f107 030f add.w r3, r7, #15
+ 80051be: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 80051c2: 2301 movs r3, #1
+ 80051c4: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 80051c8: f507 7388 add.w r3, r7, #272 @ 0x110
+ 80051cc: 2100 movs r1, #0
+ 80051ce: 4618 mov r0, r3
+ 80051d0: f000 fd88 bl 8005ce4 <hci_send_req>
+ 80051d4: 4603 mov r3, r0
+ 80051d6: 2b00 cmp r3, #0
+ 80051d8: da01 bge.n 80051de <aci_hal_write_config_data+0xf6>
+ return BLE_STATUS_TIMEOUT;
+ 80051da: 23ff movs r3, #255 @ 0xff
+ 80051dc: e004 b.n 80051e8 <aci_hal_write_config_data+0x100>
+ return status;
+ 80051de: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80051e2: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80051e6: 781b ldrb r3, [r3, #0]
+}
+ 80051e8: 4618 mov r0, r3
+ 80051ea: f507 7798 add.w r7, r7, #304 @ 0x130
+ 80051ee: 46bd mov sp, r7
+ 80051f0: bd80 pop {r7, pc}
+
+080051f2 <aci_hal_set_tx_power_level>:
+ return BLE_STATUS_SUCCESS;
+}
+
+tBleStatus aci_hal_set_tx_power_level( uint8_t En_High_Power,
+ uint8_t PA_Level )
+{
+ 80051f2: b580 push {r7, lr}
+ 80051f4: b0cc sub sp, #304 @ 0x130
+ 80051f6: af00 add r7, sp, #0
+ 80051f8: 4602 mov r2, r0
+ 80051fa: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80051fe: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 8005202: 701a strb r2, [r3, #0]
+ 8005204: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005208: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 800520c: 460a mov r2, r1
+ 800520e: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_hal_set_tx_power_level_cp0 *cp0 = (aci_hal_set_tx_power_level_cp0*)(cmd_buffer);
+ 8005210: f107 0310 add.w r3, r7, #16
+ 8005214: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 8005218: f507 7398 add.w r3, r7, #304 @ 0x130
+ 800521c: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 8005220: 2200 movs r2, #0
+ 8005222: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 8005224: 2300 movs r3, #0
+ 8005226: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->En_High_Power = En_High_Power;
+ 800522a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 800522e: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8005232: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 8005236: 7812 ldrb r2, [r2, #0]
+ 8005238: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 800523a: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800523e: 3301 adds r3, #1
+ 8005240: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->PA_Level = PA_Level;
+ 8005244: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8005248: f507 7298 add.w r2, r7, #304 @ 0x130
+ 800524c: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 8005250: 7812 ldrb r2, [r2, #0]
+ 8005252: 705a strb r2, [r3, #1]
+ index_input += 1;
+ 8005254: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8005258: 3301 adds r3, #1
+ 800525a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 800525e: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005262: 2218 movs r2, #24
+ 8005264: 2100 movs r1, #0
+ 8005266: 4618 mov r0, r3
+ 8005268: f000 f9ad bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 800526c: 233f movs r3, #63 @ 0x3f
+ 800526e: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x00f;
+ 8005272: 230f movs r3, #15
+ 8005274: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8005278: f107 0310 add.w r3, r7, #16
+ 800527c: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8005280: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8005284: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 8005288: f107 030f add.w r3, r7, #15
+ 800528c: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 8005290: 2301 movs r3, #1
+ 8005292: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8005296: f507 7388 add.w r3, r7, #272 @ 0x110
+ 800529a: 2100 movs r1, #0
+ 800529c: 4618 mov r0, r3
+ 800529e: f000 fd21 bl 8005ce4 <hci_send_req>
+ 80052a2: 4603 mov r3, r0
+ 80052a4: 2b00 cmp r3, #0
+ 80052a6: da01 bge.n 80052ac <aci_hal_set_tx_power_level+0xba>
+ return BLE_STATUS_TIMEOUT;
+ 80052a8: 23ff movs r3, #255 @ 0xff
+ 80052aa: e004 b.n 80052b6 <aci_hal_set_tx_power_level+0xc4>
+ return status;
+ 80052ac: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80052b0: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80052b4: 781b ldrb r3, [r3, #0]
+}
+ 80052b6: 4618 mov r0, r3
+ 80052b8: f507 7798 add.w r7, r7, #304 @ 0x130
+ 80052bc: 46bd mov sp, r7
+ 80052be: bd80 pop {r7, pc}
+
+080052c0 <aci_hal_set_radio_activity_mask>:
+ Osal_MemCpy( (void*)Link_Connection_Handle, (const void*)resp.Link_Connection_Handle, 16 );
+ return BLE_STATUS_SUCCESS;
+}
+
+tBleStatus aci_hal_set_radio_activity_mask( uint16_t Radio_Activity_Mask )
+{
+ 80052c0: b580 push {r7, lr}
+ 80052c2: b0cc sub sp, #304 @ 0x130
+ 80052c4: af00 add r7, sp, #0
+ 80052c6: 4602 mov r2, r0
+ 80052c8: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80052cc: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 80052d0: 801a strh r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ aci_hal_set_radio_activity_mask_cp0 *cp0 = (aci_hal_set_radio_activity_mask_cp0*)(cmd_buffer);
+ 80052d2: f107 0310 add.w r3, r7, #16
+ 80052d6: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 80052da: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80052de: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80052e2: 2200 movs r2, #0
+ 80052e4: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 80052e6: 2300 movs r3, #0
+ 80052e8: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->Radio_Activity_Mask = Radio_Activity_Mask;
+ 80052ec: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80052f0: f507 7298 add.w r2, r7, #304 @ 0x130
+ 80052f4: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 80052f8: 8812 ldrh r2, [r2, #0]
+ 80052fa: 801a strh r2, [r3, #0]
+ index_input += 2;
+ 80052fc: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8005300: 3302 adds r3, #2
+ 8005302: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8005306: f507 7388 add.w r3, r7, #272 @ 0x110
+ 800530a: 2218 movs r2, #24
+ 800530c: 2100 movs r1, #0
+ 800530e: 4618 mov r0, r3
+ 8005310: f000 f959 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x3f;
+ 8005314: 233f movs r3, #63 @ 0x3f
+ 8005316: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x018;
+ 800531a: 2318 movs r3, #24
+ 800531c: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 8005320: f107 0310 add.w r3, r7, #16
+ 8005324: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8005328: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800532c: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 8005330: f107 030f add.w r3, r7, #15
+ 8005334: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 8005338: 2301 movs r3, #1
+ 800533a: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 800533e: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005342: 2100 movs r1, #0
+ 8005344: 4618 mov r0, r3
+ 8005346: f000 fccd bl 8005ce4 <hci_send_req>
+ 800534a: 4603 mov r3, r0
+ 800534c: 2b00 cmp r3, #0
+ 800534e: da01 bge.n 8005354 <aci_hal_set_radio_activity_mask+0x94>
+ return BLE_STATUS_TIMEOUT;
+ 8005350: 23ff movs r3, #255 @ 0xff
+ 8005352: e004 b.n 800535e <aci_hal_set_radio_activity_mask+0x9e>
+ return status;
+ 8005354: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005358: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 800535c: 781b ldrb r3, [r3, #0]
+}
+ 800535e: 4618 mov r0, r3
+ 8005360: f507 7798 add.w r7, r7, #304 @ 0x130
+ 8005364: 46bd mov sp, r7
+ 8005366: bd80 pop {r7, pc}
+
+08005368 <hci_reset>:
+ return BLE_STATUS_TIMEOUT;
+ return status;
+}
+
+tBleStatus hci_reset( void )
+{
+ 8005368: b580 push {r7, lr}
+ 800536a: b088 sub sp, #32
+ 800536c: af00 add r7, sp, #0
+ struct hci_request rq;
+ tBleStatus status = 0;
+ 800536e: 2300 movs r3, #0
+ 8005370: 71fb strb r3, [r7, #7]
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8005372: f107 0308 add.w r3, r7, #8
+ 8005376: 2218 movs r2, #24
+ 8005378: 2100 movs r1, #0
+ 800537a: 4618 mov r0, r3
+ 800537c: f000 f923 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x03;
+ 8005380: 2303 movs r3, #3
+ 8005382: 813b strh r3, [r7, #8]
+ rq.ocf = 0x003;
+ 8005384: 2303 movs r3, #3
+ 8005386: 817b strh r3, [r7, #10]
+ rq.rparam = &status;
+ 8005388: 1dfb adds r3, r7, #7
+ 800538a: 61bb str r3, [r7, #24]
+ rq.rlen = 1;
+ 800538c: 2301 movs r3, #1
+ 800538e: 61fb str r3, [r7, #28]
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8005390: f107 0308 add.w r3, r7, #8
+ 8005394: 2100 movs r1, #0
+ 8005396: 4618 mov r0, r3
+ 8005398: f000 fca4 bl 8005ce4 <hci_send_req>
+ 800539c: 4603 mov r3, r0
+ 800539e: 2b00 cmp r3, #0
+ 80053a0: da01 bge.n 80053a6 <hci_reset+0x3e>
+ return BLE_STATUS_TIMEOUT;
+ 80053a2: 23ff movs r3, #255 @ 0xff
+ 80053a4: e000 b.n 80053a8 <hci_reset+0x40>
+ return status;
+ 80053a6: 79fb ldrb r3, [r7, #7]
+}
+ 80053a8: 4618 mov r0, r3
+ 80053aa: 3720 adds r7, #32
+ 80053ac: 46bd mov sp, r7
+ 80053ae: bd80 pop {r7, pc}
+
+080053b0 <hci_le_read_phy>:
+}
+
+tBleStatus hci_le_read_phy( uint16_t Connection_Handle,
+ uint8_t* TX_PHY,
+ uint8_t* RX_PHY )
+{
+ 80053b0: b580 push {r7, lr}
+ 80053b2: b0ce sub sp, #312 @ 0x138
+ 80053b4: af00 add r7, sp, #0
+ 80053b6: f507 739c add.w r3, r7, #312 @ 0x138
+ 80053ba: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 80053be: 6019 str r1, [r3, #0]
+ 80053c0: f507 739c add.w r3, r7, #312 @ 0x138
+ 80053c4: f5a3 739a sub.w r3, r3, #308 @ 0x134
+ 80053c8: 601a str r2, [r3, #0]
+ 80053ca: f507 739c add.w r3, r7, #312 @ 0x138
+ 80053ce: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 80053d2: 4602 mov r2, r0
+ 80053d4: 801a strh r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ hci_le_read_phy_cp0 *cp0 = (hci_le_read_phy_cp0*)(cmd_buffer);
+ 80053d6: f107 0318 add.w r3, r7, #24
+ 80053da: f8c7 3134 str.w r3, [r7, #308] @ 0x134
+ hci_le_read_phy_rp0 resp;
+ Osal_MemSet( &resp, 0, sizeof(resp) );
+ 80053de: f107 0310 add.w r3, r7, #16
+ 80053e2: 2205 movs r2, #5
+ 80053e4: 2100 movs r1, #0
+ 80053e6: 4618 mov r0, r3
+ 80053e8: f000 f8ed bl 80055c6 <Osal_MemSet>
+ int index_input = 0;
+ 80053ec: 2300 movs r3, #0
+ 80053ee: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ cp0->Connection_Handle = Connection_Handle;
+ 80053f2: f8d7 3134 ldr.w r3, [r7, #308] @ 0x134
+ 80053f6: f507 729c add.w r2, r7, #312 @ 0x138
+ 80053fa: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 80053fe: 8812 ldrh r2, [r2, #0]
+ 8005400: 801a strh r2, [r3, #0]
+ index_input += 2;
+ 8005402: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8005406: 3302 adds r3, #2
+ 8005408: f8c7 3130 str.w r3, [r7, #304] @ 0x130
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 800540c: f507 738c add.w r3, r7, #280 @ 0x118
+ 8005410: 2218 movs r2, #24
+ 8005412: 2100 movs r1, #0
+ 8005414: 4618 mov r0, r3
+ 8005416: f000 f8d6 bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x08;
+ 800541a: 2308 movs r3, #8
+ 800541c: f8a7 3118 strh.w r3, [r7, #280] @ 0x118
+ rq.ocf = 0x030;
+ 8005420: 2330 movs r3, #48 @ 0x30
+ 8005422: f8a7 311a strh.w r3, [r7, #282] @ 0x11a
+ rq.cparam = cmd_buffer;
+ 8005426: f107 0318 add.w r3, r7, #24
+ 800542a: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.clen = index_input;
+ 800542e: f8d7 3130 ldr.w r3, [r7, #304] @ 0x130
+ 8005432: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ rq.rparam = &resp;
+ 8005436: f107 0310 add.w r3, r7, #16
+ 800543a: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ rq.rlen = sizeof(resp);
+ 800543e: 2305 movs r3, #5
+ 8005440: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 8005444: f507 738c add.w r3, r7, #280 @ 0x118
+ 8005448: 2100 movs r1, #0
+ 800544a: 4618 mov r0, r3
+ 800544c: f000 fc4a bl 8005ce4 <hci_send_req>
+ 8005450: 4603 mov r3, r0
+ 8005452: 2b00 cmp r3, #0
+ 8005454: da01 bge.n 800545a <hci_le_read_phy+0xaa>
+ return BLE_STATUS_TIMEOUT;
+ 8005456: 23ff movs r3, #255 @ 0xff
+ 8005458: e023 b.n 80054a2 <hci_le_read_phy+0xf2>
+ if ( resp.Status )
+ 800545a: f507 739c add.w r3, r7, #312 @ 0x138
+ 800545e: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 8005462: 781b ldrb r3, [r3, #0]
+ 8005464: 2b00 cmp r3, #0
+ 8005466: d005 beq.n 8005474 <hci_le_read_phy+0xc4>
+ return resp.Status;
+ 8005468: f507 739c add.w r3, r7, #312 @ 0x138
+ 800546c: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 8005470: 781b ldrb r3, [r3, #0]
+ 8005472: e016 b.n 80054a2 <hci_le_read_phy+0xf2>
+ *TX_PHY = resp.TX_PHY;
+ 8005474: f507 739c add.w r3, r7, #312 @ 0x138
+ 8005478: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 800547c: 78da ldrb r2, [r3, #3]
+ 800547e: f507 739c add.w r3, r7, #312 @ 0x138
+ 8005482: f5a3 7398 sub.w r3, r3, #304 @ 0x130
+ 8005486: 681b ldr r3, [r3, #0]
+ 8005488: 701a strb r2, [r3, #0]
+ *RX_PHY = resp.RX_PHY;
+ 800548a: f507 739c add.w r3, r7, #312 @ 0x138
+ 800548e: f5a3 7394 sub.w r3, r3, #296 @ 0x128
+ 8005492: 791a ldrb r2, [r3, #4]
+ 8005494: f507 739c add.w r3, r7, #312 @ 0x138
+ 8005498: f5a3 739a sub.w r3, r3, #308 @ 0x134
+ 800549c: 681b ldr r3, [r3, #0]
+ 800549e: 701a strb r2, [r3, #0]
+ return BLE_STATUS_SUCCESS;
+ 80054a0: 2300 movs r3, #0
+}
+ 80054a2: 4618 mov r0, r3
+ 80054a4: f507 779c add.w r7, r7, #312 @ 0x138
+ 80054a8: 46bd mov sp, r7
+ 80054aa: bd80 pop {r7, pc}
+
+080054ac <hci_le_set_default_phy>:
+
+tBleStatus hci_le_set_default_phy( uint8_t ALL_PHYS,
+ uint8_t TX_PHYS,
+ uint8_t RX_PHYS )
+{
+ 80054ac: b590 push {r4, r7, lr}
+ 80054ae: b0cd sub sp, #308 @ 0x134
+ 80054b0: af00 add r7, sp, #0
+ 80054b2: 4604 mov r4, r0
+ 80054b4: 4608 mov r0, r1
+ 80054b6: 4611 mov r1, r2
+ 80054b8: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80054bc: f2a3 1329 subw r3, r3, #297 @ 0x129
+ 80054c0: 4622 mov r2, r4
+ 80054c2: 701a strb r2, [r3, #0]
+ 80054c4: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80054c8: f5a3 7395 sub.w r3, r3, #298 @ 0x12a
+ 80054cc: 4602 mov r2, r0
+ 80054ce: 701a strb r2, [r3, #0]
+ 80054d0: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80054d4: f2a3 132b subw r3, r3, #299 @ 0x12b
+ 80054d8: 460a mov r2, r1
+ 80054da: 701a strb r2, [r3, #0]
+ struct hci_request rq;
+ uint8_t cmd_buffer[BLE_CMD_MAX_PARAM_LEN];
+ hci_le_set_default_phy_cp0 *cp0 = (hci_le_set_default_phy_cp0*)(cmd_buffer);
+ 80054dc: f107 0310 add.w r3, r7, #16
+ 80054e0: f8c7 312c str.w r3, [r7, #300] @ 0x12c
+ tBleStatus status = 0;
+ 80054e4: f507 7398 add.w r3, r7, #304 @ 0x130
+ 80054e8: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 80054ec: 2200 movs r2, #0
+ 80054ee: 701a strb r2, [r3, #0]
+ int index_input = 0;
+ 80054f0: 2300 movs r3, #0
+ 80054f2: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->ALL_PHYS = ALL_PHYS;
+ 80054f6: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 80054fa: f507 7298 add.w r2, r7, #304 @ 0x130
+ 80054fe: f2a2 1229 subw r2, r2, #297 @ 0x129
+ 8005502: 7812 ldrb r2, [r2, #0]
+ 8005504: 701a strb r2, [r3, #0]
+ index_input += 1;
+ 8005506: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800550a: 3301 adds r3, #1
+ 800550c: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->TX_PHYS = TX_PHYS;
+ 8005510: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 8005514: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8005518: f5a2 7295 sub.w r2, r2, #298 @ 0x12a
+ 800551c: 7812 ldrb r2, [r2, #0]
+ 800551e: 705a strb r2, [r3, #1]
+ index_input += 1;
+ 8005520: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 8005524: 3301 adds r3, #1
+ 8005526: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ cp0->RX_PHYS = RX_PHYS;
+ 800552a: f8d7 312c ldr.w r3, [r7, #300] @ 0x12c
+ 800552e: f507 7298 add.w r2, r7, #304 @ 0x130
+ 8005532: f2a2 122b subw r2, r2, #299 @ 0x12b
+ 8005536: 7812 ldrb r2, [r2, #0]
+ 8005538: 709a strb r2, [r3, #2]
+ index_input += 1;
+ 800553a: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800553e: 3301 adds r3, #1
+ 8005540: f8c7 3128 str.w r3, [r7, #296] @ 0x128
+ Osal_MemSet( &rq, 0, sizeof(rq) );
+ 8005544: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005548: 2218 movs r2, #24
+ 800554a: 2100 movs r1, #0
+ 800554c: 4618 mov r0, r3
+ 800554e: f000 f83a bl 80055c6 <Osal_MemSet>
+ rq.ogf = 0x08;
+ 8005552: 2308 movs r3, #8
+ 8005554: f8a7 3110 strh.w r3, [r7, #272] @ 0x110
+ rq.ocf = 0x031;
+ 8005558: 2331 movs r3, #49 @ 0x31
+ 800555a: f8a7 3112 strh.w r3, [r7, #274] @ 0x112
+ rq.cparam = cmd_buffer;
+ 800555e: f107 0310 add.w r3, r7, #16
+ 8005562: f8c7 3118 str.w r3, [r7, #280] @ 0x118
+ rq.clen = index_input;
+ 8005566: f8d7 3128 ldr.w r3, [r7, #296] @ 0x128
+ 800556a: f8c7 311c str.w r3, [r7, #284] @ 0x11c
+ rq.rparam = &status;
+ 800556e: f107 030f add.w r3, r7, #15
+ 8005572: f8c7 3120 str.w r3, [r7, #288] @ 0x120
+ rq.rlen = 1;
+ 8005576: 2301 movs r3, #1
+ 8005578: f8c7 3124 str.w r3, [r7, #292] @ 0x124
+ if ( hci_send_req(&rq, FALSE) < 0 )
+ 800557c: f507 7388 add.w r3, r7, #272 @ 0x110
+ 8005580: 2100 movs r1, #0
+ 8005582: 4618 mov r0, r3
+ 8005584: f000 fbae bl 8005ce4 <hci_send_req>
+ 8005588: 4603 mov r3, r0
+ 800558a: 2b00 cmp r3, #0
+ 800558c: da01 bge.n 8005592 <hci_le_set_default_phy+0xe6>
+ return BLE_STATUS_TIMEOUT;
+ 800558e: 23ff movs r3, #255 @ 0xff
+ 8005590: e004 b.n 800559c <hci_le_set_default_phy+0xf0>
+ return status;
+ 8005592: f507 7398 add.w r3, r7, #304 @ 0x130
+ 8005596: f2a3 1321 subw r3, r3, #289 @ 0x121
+ 800559a: 781b ldrb r3, [r3, #0]
+}
+ 800559c: 4618 mov r0, r3
+ 800559e: f507 779a add.w r7, r7, #308 @ 0x134
+ 80055a2: 46bd mov sp, r7
+ 80055a4: bd90 pop {r4, r7, pc}
+
+080055a6 <Osal_MemCpy>:
+ * Osal_MemCpy
+ *
+ */
+
+void* Osal_MemCpy( void *dest, const void *src, unsigned int size )
+{
+ 80055a6: b580 push {r7, lr}
+ 80055a8: b084 sub sp, #16
+ 80055aa: af00 add r7, sp, #0
+ 80055ac: 60f8 str r0, [r7, #12]
+ 80055ae: 60b9 str r1, [r7, #8]
+ 80055b0: 607a str r2, [r7, #4]
+ return memcpy( dest, src, size );
+ 80055b2: 687a ldr r2, [r7, #4]
+ 80055b4: 68b9 ldr r1, [r7, #8]
+ 80055b6: 68f8 ldr r0, [r7, #12]
+ 80055b8: f002 fae2 bl 8007b80 <memcpy>
+ 80055bc: 4603 mov r3, r0
+}
+ 80055be: 4618 mov r0, r3
+ 80055c0: 3710 adds r7, #16
+ 80055c2: 46bd mov sp, r7
+ 80055c4: bd80 pop {r7, pc}
+
+080055c6 <Osal_MemSet>:
+ * Osal_MemSet
+ *
+ */
+
+void* Osal_MemSet( void *ptr, int value, unsigned int size )
+{
+ 80055c6: b580 push {r7, lr}
+ 80055c8: b084 sub sp, #16
+ 80055ca: af00 add r7, sp, #0
+ 80055cc: 60f8 str r0, [r7, #12]
+ 80055ce: 60b9 str r1, [r7, #8]
+ 80055d0: 607a str r2, [r7, #4]
+ return memset( ptr, value, size );
+ 80055d2: 687a ldr r2, [r7, #4]
+ 80055d4: 68b9 ldr r1, [r7, #8]
+ 80055d6: 68f8 ldr r0, [r7, #12]
+ 80055d8: f002 faa5 bl 8007b26 <memset>
+ 80055dc: 4603 mov r3, r0
+}
+ 80055de: 4618 mov r0, r3
+ 80055e0: 3710 adds r7, #16
+ 80055e2: 46bd mov sp, r7
+ 80055e4: bd80 pop {r7, pc}
+ ...
+
+080055e8 <PeerToPeer_Event_Handler>:
+ * @brief Event handler
+ * @param Event: Address of the buffer holding the Event
+ * @retval Ack: Return whether the Event has been managed or not
+ */
+static SVCCTL_EvtAckStatus_t PeerToPeer_Event_Handler(void *Event)
+{
+ 80055e8: b580 push {r7, lr}
+ 80055ea: b08a sub sp, #40 @ 0x28
+ 80055ec: af00 add r7, sp, #0
+ 80055ee: 6078 str r0, [r7, #4]
+ hci_event_pckt *event_pckt;
+ evt_blecore_aci *blecore_evt;
+ aci_gatt_attribute_modified_event_rp0 * attribute_modified;
+ P2PS_STM_App_Notification_evt_t Notification;
+
+ return_value = SVCCTL_EvtNotAck;
+ 80055f0: 2300 movs r3, #0
+ 80055f2: f887 3027 strb.w r3, [r7, #39] @ 0x27
+ event_pckt = (hci_event_pckt *)(((hci_uart_pckt*)Event)->data);
+ 80055f6: 687b ldr r3, [r7, #4]
+ 80055f8: 3301 adds r3, #1
+ 80055fa: 623b str r3, [r7, #32]
+
+ switch(event_pckt->evt)
+ 80055fc: 6a3b ldr r3, [r7, #32]
+ 80055fe: 781b ldrb r3, [r3, #0]
+ 8005600: 2bff cmp r3, #255 @ 0xff
+ 8005602: d14c bne.n 800569e <PeerToPeer_Event_Handler+0xb6>
+ {
+ case HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE:
+ {
+ blecore_evt = (evt_blecore_aci*)event_pckt->data;
+ 8005604: 6a3b ldr r3, [r7, #32]
+ 8005606: 3302 adds r3, #2
+ 8005608: 61fb str r3, [r7, #28]
+ switch(blecore_evt->ecode)
+ 800560a: 69fb ldr r3, [r7, #28]
+ 800560c: 881b ldrh r3, [r3, #0]
+ 800560e: b29b uxth r3, r3
+ 8005610: 461a mov r2, r3
+ 8005612: f640 4301 movw r3, #3073 @ 0xc01
+ 8005616: 429a cmp r2, r3
+ 8005618: d13d bne.n 8005696 <PeerToPeer_Event_Handler+0xae>
+ {
+ case ACI_GATT_ATTRIBUTE_MODIFIED_VSEVT_CODE:
+ {
+ attribute_modified = (aci_gatt_attribute_modified_event_rp0*)blecore_evt->data;
+ 800561a: 69fb ldr r3, [r7, #28]
+ 800561c: 3302 adds r3, #2
+ 800561e: 61bb str r3, [r7, #24]
+ if(attribute_modified->Attr_Handle == (aPeerToPeerContext.P2PNotifyServerToClientCharHdle + 2))
+ 8005620: 69bb ldr r3, [r7, #24]
+ 8005622: 885b ldrh r3, [r3, #2]
+ 8005624: b29b uxth r3, r3
+ 8005626: 461a mov r2, r3
+ 8005628: 4b20 ldr r3, [pc, #128] @ (80056ac <PeerToPeer_Event_Handler+0xc4>)
+ 800562a: 889b ldrh r3, [r3, #4]
+ 800562c: 3302 adds r3, #2
+ 800562e: 429a cmp r2, r3
+ 8005630: d118 bne.n 8005664 <PeerToPeer_Event_Handler+0x7c>
+ {
+ /**
+ * Descriptor handle
+ */
+ return_value = SVCCTL_EvtAckFlowEnable;
+ 8005632: 2301 movs r3, #1
+ 8005634: f887 3027 strb.w r3, [r7, #39] @ 0x27
+ /**
+ * Notify to application
+ */
+ if(attribute_modified->Attr_Data[0] & COMSVC_Notification)
+ 8005638: 69bb ldr r3, [r7, #24]
+ 800563a: 7a1b ldrb r3, [r3, #8]
+ 800563c: f003 0301 and.w r3, r3, #1
+ 8005640: 2b00 cmp r3, #0
+ 8005642: d007 beq.n 8005654 <PeerToPeer_Event_Handler+0x6c>
+ {
+ Notification.P2P_Evt_Opcode = P2PS_STM__NOTIFY_ENABLED_EVT;
+ 8005644: 2300 movs r3, #0
+ 8005646: 723b strb r3, [r7, #8]
+ P2PS_STM_App_Notification(&Notification);
+ 8005648: f107 0308 add.w r3, r7, #8
+ 800564c: 4618 mov r0, r3
+ 800564e: f001 fc5f bl 8006f10 <P2PS_STM_App_Notification>
+ Notification.DataTransfered.pPayload=attribute_modified->Attr_Data;
+ P2PS_STM_App_Notification(&Notification);
+ }
+#endif
+ }
+ break;
+ 8005652: e022 b.n 800569a <PeerToPeer_Event_Handler+0xb2>
+ Notification.P2P_Evt_Opcode = P2PS_STM_NOTIFY_DISABLED_EVT;
+ 8005654: 2301 movs r3, #1
+ 8005656: 723b strb r3, [r7, #8]
+ P2PS_STM_App_Notification(&Notification);
+ 8005658: f107 0308 add.w r3, r7, #8
+ 800565c: 4618 mov r0, r3
+ 800565e: f001 fc57 bl 8006f10 <P2PS_STM_App_Notification>
+ break;
+ 8005662: e01a b.n 800569a <PeerToPeer_Event_Handler+0xb2>
+ else if(attribute_modified->Attr_Handle == (aPeerToPeerContext.P2PWriteClientToServerCharHdle + 1))
+ 8005664: 69bb ldr r3, [r7, #24]
+ 8005666: 885b ldrh r3, [r3, #2]
+ 8005668: b29b uxth r3, r3
+ 800566a: 461a mov r2, r3
+ 800566c: 4b0f ldr r3, [pc, #60] @ (80056ac <PeerToPeer_Event_Handler+0xc4>)
+ 800566e: 885b ldrh r3, [r3, #2]
+ 8005670: 3301 adds r3, #1
+ 8005672: 429a cmp r2, r3
+ 8005674: d111 bne.n 800569a <PeerToPeer_Event_Handler+0xb2>
+ Notification.P2P_Evt_Opcode = P2PS_STM_WRITE_EVT;
+ 8005676: 2303 movs r3, #3
+ 8005678: 723b strb r3, [r7, #8]
+ Notification.DataTransfered.Length=attribute_modified->Attr_Data_Length;
+ 800567a: 69bb ldr r3, [r7, #24]
+ 800567c: 88db ldrh r3, [r3, #6]
+ 800567e: b29b uxth r3, r3
+ 8005680: b2db uxtb r3, r3
+ 8005682: 743b strb r3, [r7, #16]
+ Notification.DataTransfered.pPayload=attribute_modified->Attr_Data;
+ 8005684: 69bb ldr r3, [r7, #24]
+ 8005686: 3308 adds r3, #8
+ 8005688: 60fb str r3, [r7, #12]
+ P2PS_STM_App_Notification(&Notification);
+ 800568a: f107 0308 add.w r3, r7, #8
+ 800568e: 4618 mov r0, r3
+ 8005690: f001 fc3e bl 8006f10 <P2PS_STM_App_Notification>
+ break;
+ 8005694: e001 b.n 800569a <PeerToPeer_Event_Handler+0xb2>
+
+ default:
+ break;
+ 8005696: bf00 nop
+ 8005698: e002 b.n 80056a0 <PeerToPeer_Event_Handler+0xb8>
+ break;
+ 800569a: bf00 nop
+ }
+ }
+ break; /* HCI_HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE_SPECIFIC */
+ 800569c: e000 b.n 80056a0 <PeerToPeer_Event_Handler+0xb8>
+
+ default:
+ break;
+ 800569e: bf00 nop
+ }
+
+ return(return_value);
+ 80056a0: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
+}/* end SVCCTL_EvtAckStatus_t */
+ 80056a4: 4618 mov r0, r3
+ 80056a6: 3728 adds r7, #40 @ 0x28
+ 80056a8: 46bd mov sp, r7
+ 80056aa: bd80 pop {r7, pc}
+ 80056ac: 2000002c .word 0x2000002c
+
+080056b0 <P2PS_STM_Init>:
+ * @brief Service initialization
+ * @param None
+ * @retval None
+ */
+void P2PS_STM_Init(void)
+{
+ 80056b0: b580 push {r7, lr}
+ 80056b2: b08a sub sp, #40 @ 0x28
+ 80056b4: af06 add r7, sp, #24
+ Char_UUID_t uuid16;
+
+ /**
+ * Register the event handler to the BLE controller
+ */
+ SVCCTL_RegisterSvcHandler(PeerToPeer_Event_Handler);
+ 80056b6: 484a ldr r0, [pc, #296] @ (80057e0 <P2PS_STM_Init+0x130>)
+ 80056b8: f000 f94a bl 8005950 <SVCCTL_RegisterSvcHandler>
+ * 2 for P2P Write characteristic +
+ * 2 for P2P Notify characteristic +
+ * 1 for client char configuration descriptor +
+ *
+ */
+ COPY_P2P_SERVICE_UUID(uuid16.Char_UUID_128);
+ 80056bc: 238f movs r3, #143 @ 0x8f
+ 80056be: 703b strb r3, [r7, #0]
+ 80056c0: 23e5 movs r3, #229 @ 0xe5
+ 80056c2: 707b strb r3, [r7, #1]
+ 80056c4: 23b3 movs r3, #179 @ 0xb3
+ 80056c6: 70bb strb r3, [r7, #2]
+ 80056c8: 23d5 movs r3, #213 @ 0xd5
+ 80056ca: 70fb strb r3, [r7, #3]
+ 80056cc: 232e movs r3, #46 @ 0x2e
+ 80056ce: 713b strb r3, [r7, #4]
+ 80056d0: 237f movs r3, #127 @ 0x7f
+ 80056d2: 717b strb r3, [r7, #5]
+ 80056d4: 234a movs r3, #74 @ 0x4a
+ 80056d6: 71bb strb r3, [r7, #6]
+ 80056d8: 2398 movs r3, #152 @ 0x98
+ 80056da: 71fb strb r3, [r7, #7]
+ 80056dc: 232a movs r3, #42 @ 0x2a
+ 80056de: 723b strb r3, [r7, #8]
+ 80056e0: 2348 movs r3, #72 @ 0x48
+ 80056e2: 727b strb r3, [r7, #9]
+ 80056e4: 237a movs r3, #122 @ 0x7a
+ 80056e6: 72bb strb r3, [r7, #10]
+ 80056e8: 23cc movs r3, #204 @ 0xcc
+ 80056ea: 72fb strb r3, [r7, #11]
+ 80056ec: 2340 movs r3, #64 @ 0x40
+ 80056ee: 733b strb r3, [r7, #12]
+ 80056f0: 23fe movs r3, #254 @ 0xfe
+ 80056f2: 737b strb r3, [r7, #13]
+ 80056f4: 2300 movs r3, #0
+ 80056f6: 73bb strb r3, [r7, #14]
+ 80056f8: 2300 movs r3, #0
+ 80056fa: 73fb strb r3, [r7, #15]
+ aci_gatt_add_service(UUID_TYPE_128,
+ 80056fc: 4639 mov r1, r7
+ 80056fe: 4b39 ldr r3, [pc, #228] @ (80057e4 <P2PS_STM_Init+0x134>)
+ 8005700: 9300 str r3, [sp, #0]
+ 8005702: 2306 movs r3, #6
+ 8005704: 2201 movs r2, #1
+ 8005706: 2002 movs r0, #2
+ 8005708: f7ff fa12 bl 8004b30 <aci_gatt_add_service>
+ &(aPeerToPeerContext.PeerToPeerSvcHdle));
+
+ /**
+ * Add LED Characteristic
+ */
+ COPY_P2P_WRITE_CHAR_UUID(uuid16.Char_UUID_128);
+ 800570c: 2319 movs r3, #25
+ 800570e: 703b strb r3, [r7, #0]
+ 8005710: 23ed movs r3, #237 @ 0xed
+ 8005712: 707b strb r3, [r7, #1]
+ 8005714: 2382 movs r3, #130 @ 0x82
+ 8005716: 70bb strb r3, [r7, #2]
+ 8005718: 23ae movs r3, #174 @ 0xae
+ 800571a: 70fb strb r3, [r7, #3]
+ 800571c: 23ed movs r3, #237 @ 0xed
+ 800571e: 713b strb r3, [r7, #4]
+ 8005720: 2321 movs r3, #33 @ 0x21
+ 8005722: 717b strb r3, [r7, #5]
+ 8005724: 234c movs r3, #76 @ 0x4c
+ 8005726: 71bb strb r3, [r7, #6]
+ 8005728: 239d movs r3, #157 @ 0x9d
+ 800572a: 71fb strb r3, [r7, #7]
+ 800572c: 2341 movs r3, #65 @ 0x41
+ 800572e: 723b strb r3, [r7, #8]
+ 8005730: 2345 movs r3, #69 @ 0x45
+ 8005732: 727b strb r3, [r7, #9]
+ 8005734: 2322 movs r3, #34 @ 0x22
+ 8005736: 72bb strb r3, [r7, #10]
+ 8005738: 238e movs r3, #142 @ 0x8e
+ 800573a: 72fb strb r3, [r7, #11]
+ 800573c: 2341 movs r3, #65 @ 0x41
+ 800573e: 733b strb r3, [r7, #12]
+ 8005740: 23fe movs r3, #254 @ 0xfe
+ 8005742: 737b strb r3, [r7, #13]
+ 8005744: 2300 movs r3, #0
+ 8005746: 73bb strb r3, [r7, #14]
+ 8005748: 2300 movs r3, #0
+ 800574a: 73fb strb r3, [r7, #15]
+ aci_gatt_add_char(aPeerToPeerContext.PeerToPeerSvcHdle,
+ 800574c: 4b25 ldr r3, [pc, #148] @ (80057e4 <P2PS_STM_Init+0x134>)
+ 800574e: 8818 ldrh r0, [r3, #0]
+ 8005750: 463a mov r2, r7
+ 8005752: 4b25 ldr r3, [pc, #148] @ (80057e8 <P2PS_STM_Init+0x138>)
+ 8005754: 9305 str r3, [sp, #20]
+ 8005756: 2301 movs r3, #1
+ 8005758: 9304 str r3, [sp, #16]
+ 800575a: 230a movs r3, #10
+ 800575c: 9303 str r3, [sp, #12]
+ 800575e: 2301 movs r3, #1
+ 8005760: 9302 str r3, [sp, #8]
+ 8005762: 2300 movs r3, #0
+ 8005764: 9301 str r3, [sp, #4]
+ 8005766: 2306 movs r3, #6
+ 8005768: 9300 str r3, [sp, #0]
+ 800576a: 2302 movs r3, #2
+ 800576c: 2102 movs r1, #2
+ 800576e: f7ff fab5 bl 8004cdc <aci_gatt_add_char>
+ &(aPeerToPeerContext.P2PWriteClientToServerCharHdle));
+
+ /**
+ * Add Button Characteristic
+ */
+ COPY_P2P_NOTIFY_UUID(uuid16.Char_UUID_128);
+ 8005772: 2319 movs r3, #25
+ 8005774: 703b strb r3, [r7, #0]
+ 8005776: 23ed movs r3, #237 @ 0xed
+ 8005778: 707b strb r3, [r7, #1]
+ 800577a: 2382 movs r3, #130 @ 0x82
+ 800577c: 70bb strb r3, [r7, #2]
+ 800577e: 23ae movs r3, #174 @ 0xae
+ 8005780: 70fb strb r3, [r7, #3]
+ 8005782: 23ed movs r3, #237 @ 0xed
+ 8005784: 713b strb r3, [r7, #4]
+ 8005786: 2321 movs r3, #33 @ 0x21
+ 8005788: 717b strb r3, [r7, #5]
+ 800578a: 234c movs r3, #76 @ 0x4c
+ 800578c: 71bb strb r3, [r7, #6]
+ 800578e: 239d movs r3, #157 @ 0x9d
+ 8005790: 71fb strb r3, [r7, #7]
+ 8005792: 2341 movs r3, #65 @ 0x41
+ 8005794: 723b strb r3, [r7, #8]
+ 8005796: 2345 movs r3, #69 @ 0x45
+ 8005798: 727b strb r3, [r7, #9]
+ 800579a: 2322 movs r3, #34 @ 0x22
+ 800579c: 72bb strb r3, [r7, #10]
+ 800579e: 238e movs r3, #142 @ 0x8e
+ 80057a0: 72fb strb r3, [r7, #11]
+ 80057a2: 2342 movs r3, #66 @ 0x42
+ 80057a4: 733b strb r3, [r7, #12]
+ 80057a6: 23fe movs r3, #254 @ 0xfe
+ 80057a8: 737b strb r3, [r7, #13]
+ 80057aa: 2300 movs r3, #0
+ 80057ac: 73bb strb r3, [r7, #14]
+ 80057ae: 2300 movs r3, #0
+ 80057b0: 73fb strb r3, [r7, #15]
+ aci_gatt_add_char(aPeerToPeerContext.PeerToPeerSvcHdle,
+ 80057b2: 4b0c ldr r3, [pc, #48] @ (80057e4 <P2PS_STM_Init+0x134>)
+ 80057b4: 8818 ldrh r0, [r3, #0]
+ 80057b6: 463a mov r2, r7
+ 80057b8: 4b0c ldr r3, [pc, #48] @ (80057ec <P2PS_STM_Init+0x13c>)
+ 80057ba: 9305 str r3, [sp, #20]
+ 80057bc: 2301 movs r3, #1
+ 80057be: 9304 str r3, [sp, #16]
+ 80057c0: 230a movs r3, #10
+ 80057c2: 9303 str r3, [sp, #12]
+ 80057c4: 2301 movs r3, #1
+ 80057c6: 9302 str r3, [sp, #8]
+ 80057c8: 2300 movs r3, #0
+ 80057ca: 9301 str r3, [sp, #4]
+ 80057cc: 2310 movs r3, #16
+ 80057ce: 9300 str r3, [sp, #0]
+ 80057d0: 2302 movs r3, #2
+ 80057d2: 2102 movs r1, #2
+ 80057d4: f7ff fa82 bl 8004cdc <aci_gatt_add_char>
+ 0,
+ &(aPeerToPeerContext.RebootReqCharHdle));
+#endif
+
+
+ return;
+ 80057d8: bf00 nop
+}
+ 80057da: 3710 adds r7, #16
+ 80057dc: 46bd mov sp, r7
+ 80057de: bd80 pop {r7, pc}
+ 80057e0: 080055e9 .word 0x080055e9
+ 80057e4: 2000002c .word 0x2000002c
+ 80057e8: 2000002e .word 0x2000002e
+ 80057ec: 20000030 .word 0x20000030
+
+080057f0 <BAS_Init>:
+/* Private functions ----------------------------------------------------------*/
+/* Weak functions ----------------------------------------------------------*/
+void BVOPUS_STM_Init(void);
+
+__WEAK void BAS_Init( void )
+{
+ 80057f0: b480 push {r7}
+ 80057f2: af00 add r7, sp, #0
+ return;
+ 80057f4: bf00 nop
+}
+ 80057f6: 46bd mov sp, r7
+ 80057f8: f85d 7b04 ldr.w r7, [sp], #4
+ 80057fc: 4770 bx lr
+
+080057fe <BLS_Init>:
+
+__WEAK void BLS_Init( void )
+{
+ 80057fe: b480 push {r7}
+ 8005800: af00 add r7, sp, #0
+ return;
+ 8005802: bf00 nop
+}
+ 8005804: 46bd mov sp, r7
+ 8005806: f85d 7b04 ldr.w r7, [sp], #4
+ 800580a: 4770 bx lr
+
+0800580c <CRS_STM_Init>:
+__WEAK void CRS_STM_Init( void )
+{
+ 800580c: b480 push {r7}
+ 800580e: af00 add r7, sp, #0
+ return;
+ 8005810: bf00 nop
+}
+ 8005812: 46bd mov sp, r7
+ 8005814: f85d 7b04 ldr.w r7, [sp], #4
+ 8005818: 4770 bx lr
+
+0800581a <DIS_Init>:
+__WEAK void DIS_Init( void )
+{
+ 800581a: b480 push {r7}
+ 800581c: af00 add r7, sp, #0
+ return;
+ 800581e: bf00 nop
+}
+ 8005820: 46bd mov sp, r7
+ 8005822: f85d 7b04 ldr.w r7, [sp], #4
+ 8005826: 4770 bx lr
+
+08005828 <EDS_STM_Init>:
+__WEAK void EDS_STM_Init( void )
+{
+ 8005828: b480 push {r7}
+ 800582a: af00 add r7, sp, #0
+ return;
+ 800582c: bf00 nop
+}
+ 800582e: 46bd mov sp, r7
+ 8005830: f85d 7b04 ldr.w r7, [sp], #4
+ 8005834: 4770 bx lr
+
+08005836 <HIDS_Init>:
+__WEAK void HIDS_Init( void )
+{
+ 8005836: b480 push {r7}
+ 8005838: af00 add r7, sp, #0
+ return;
+ 800583a: bf00 nop
+}
+ 800583c: 46bd mov sp, r7
+ 800583e: f85d 7b04 ldr.w r7, [sp], #4
+ 8005842: 4770 bx lr
+
+08005844 <HRS_Init>:
+__WEAK void HRS_Init( void )
+{
+ 8005844: b480 push {r7}
+ 8005846: af00 add r7, sp, #0
+ return;
+ 8005848: bf00 nop
+}
+ 800584a: 46bd mov sp, r7
+ 800584c: f85d 7b04 ldr.w r7, [sp], #4
+ 8005850: 4770 bx lr
+
+08005852 <HTS_Init>:
+__WEAK void HTS_Init( void )
+{
+ 8005852: b480 push {r7}
+ 8005854: af00 add r7, sp, #0
+ return;
+ 8005856: bf00 nop
+}
+ 8005858: 46bd mov sp, r7
+ 800585a: f85d 7b04 ldr.w r7, [sp], #4
+ 800585e: 4770 bx lr
+
+08005860 <IAS_Init>:
+__WEAK void IAS_Init( void )
+{
+ 8005860: b480 push {r7}
+ 8005862: af00 add r7, sp, #0
+ return;
+ 8005864: bf00 nop
+}
+ 8005866: 46bd mov sp, r7
+ 8005868: f85d 7b04 ldr.w r7, [sp], #4
+ 800586c: 4770 bx lr
+
+0800586e <LLS_Init>:
+__WEAK void LLS_Init( void )
+{
+ 800586e: b480 push {r7}
+ 8005870: af00 add r7, sp, #0
+ return;
+ 8005872: bf00 nop
+}
+ 8005874: 46bd mov sp, r7
+ 8005876: f85d 7b04 ldr.w r7, [sp], #4
+ 800587a: 4770 bx lr
+
+0800587c <TPS_Init>:
+__WEAK void TPS_Init( void )
+{
+ 800587c: b480 push {r7}
+ 800587e: af00 add r7, sp, #0
+ return;
+ 8005880: bf00 nop
+}
+ 8005882: 46bd mov sp, r7
+ 8005884: f85d 7b04 ldr.w r7, [sp], #4
+ 8005888: 4770 bx lr
+
+0800588a <MOTENV_STM_Init>:
+__WEAK void MOTENV_STM_Init( void )
+{
+ 800588a: b480 push {r7}
+ 800588c: af00 add r7, sp, #0
+ return;
+ 800588e: bf00 nop
+}
+ 8005890: 46bd mov sp, r7
+ 8005892: f85d 7b04 ldr.w r7, [sp], #4
+ 8005896: 4770 bx lr
+
+08005898 <ZDD_STM_Init>:
+__WEAK void P2PS_STM_Init( void )
+{
+ return;
+}
+__WEAK void ZDD_STM_Init( void )
+{
+ 8005898: b480 push {r7}
+ 800589a: af00 add r7, sp, #0
+ return;
+ 800589c: bf00 nop
+}
+ 800589e: 46bd mov sp, r7
+ 80058a0: f85d 7b04 ldr.w r7, [sp], #4
+ 80058a4: 4770 bx lr
+
+080058a6 <OTAS_STM_Init>:
+__WEAK void OTAS_STM_Init( void )
+{
+ 80058a6: b480 push {r7}
+ 80058a8: af00 add r7, sp, #0
+ return;
+ 80058aa: bf00 nop
+}
+ 80058ac: 46bd mov sp, r7
+ 80058ae: f85d 7b04 ldr.w r7, [sp], #4
+ 80058b2: 4770 bx lr
+
+080058b4 <MESH_Init>:
+__WEAK void MESH_Init( void )
+{
+ 80058b4: b480 push {r7}
+ 80058b6: af00 add r7, sp, #0
+ return;
+ 80058b8: bf00 nop
+}
+ 80058ba: 46bd mov sp, r7
+ 80058bc: f85d 7b04 ldr.w r7, [sp], #4
+ 80058c0: 4770 bx lr
+
+080058c2 <BVOPUS_STM_Init>:
+__WEAK void BVOPUS_STM_Init( void )
+{
+ 80058c2: b480 push {r7}
+ 80058c4: af00 add r7, sp, #0
+ return;
+ 80058c6: bf00 nop
+}
+ 80058c8: 46bd mov sp, r7
+ 80058ca: f85d 7b04 ldr.w r7, [sp], #4
+ 80058ce: 4770 bx lr
+
+080058d0 <SVCCTL_InitCustomSvc>:
+__WEAK void SVCCTL_InitCustomSvc( void )
+{
+ 80058d0: b480 push {r7}
+ 80058d2: af00 add r7, sp, #0
+ return;
+ 80058d4: bf00 nop
+}
+ 80058d6: 46bd mov sp, r7
+ 80058d8: f85d 7b04 ldr.w r7, [sp], #4
+ 80058dc: 4770 bx lr
+ ...
+
+080058e0 <SVCCTL_Init>:
+
+/* Functions Definition ------------------------------------------------------*/
+
+void SVCCTL_Init( void )
+{
+ 80058e0: b580 push {r7, lr}
+ 80058e2: af00 add r7, sp, #0
+
+ /**
+ * Initialize the number of registered Handler
+ */
+ SVCCTL_EvtHandler.NbreOfRegisteredHandler = 0;
+ 80058e4: 4b04 ldr r3, [pc, #16] @ (80058f8 <SVCCTL_Init+0x18>)
+ 80058e6: 2200 movs r2, #0
+ 80058e8: 771a strb r2, [r3, #28]
+ SVCCTL_CltHandler.NbreOfRegisteredHandler = 0;
+ 80058ea: 4b04 ldr r3, [pc, #16] @ (80058fc <SVCCTL_Init+0x1c>)
+ 80058ec: 2200 movs r2, #0
+ 80058ee: 701a strb r2, [r3, #0]
+
+ /**
+ * Add and Initialize requested services
+ */
+ SVCCTL_SvcInit();
+ 80058f0: f000 f806 bl 8005900 <SVCCTL_SvcInit>
+
+ return;
+ 80058f4: bf00 nop
+}
+ 80058f6: bd80 pop {r7, pc}
+ 80058f8: 20000034 .word 0x20000034
+ 80058fc: 20000054 .word 0x20000054
+
+08005900 <SVCCTL_SvcInit>:
+
+__WEAK void SVCCTL_SvcInit(void)
+{
+ 8005900: b580 push {r7, lr}
+ 8005902: af00 add r7, sp, #0
+ BAS_Init();
+ 8005904: f7ff ff74 bl 80057f0 <BAS_Init>
+
+ BLS_Init();
+ 8005908: f7ff ff79 bl 80057fe <BLS_Init>
+
+ CRS_STM_Init();
+ 800590c: f7ff ff7e bl 800580c <CRS_STM_Init>
+
+ DIS_Init();
+ 8005910: f7ff ff83 bl 800581a <DIS_Init>
+
+ EDS_STM_Init();
+ 8005914: f7ff ff88 bl 8005828 <EDS_STM_Init>
+
+ HIDS_Init();
+ 8005918: f7ff ff8d bl 8005836 <HIDS_Init>
+
+ HRS_Init();
+ 800591c: f7ff ff92 bl 8005844 <HRS_Init>
+
+ HTS_Init();
+ 8005920: f7ff ff97 bl 8005852 <HTS_Init>
+
+ IAS_Init();
+ 8005924: f7ff ff9c bl 8005860 <IAS_Init>
+
+ LLS_Init();
+ 8005928: f7ff ffa1 bl 800586e <LLS_Init>
+
+ TPS_Init();
+ 800592c: f7ff ffa6 bl 800587c <TPS_Init>
+
+ MOTENV_STM_Init();
+ 8005930: f7ff ffab bl 800588a <MOTENV_STM_Init>
+
+ P2PS_STM_Init();
+ 8005934: f7ff febc bl 80056b0 <P2PS_STM_Init>
+
+ ZDD_STM_Init();
+ 8005938: f7ff ffae bl 8005898 <ZDD_STM_Init>
+
+ OTAS_STM_Init();
+ 800593c: f7ff ffb3 bl 80058a6 <OTAS_STM_Init>
+
+ BVOPUS_STM_Init();
+ 8005940: f7ff ffbf bl 80058c2 <BVOPUS_STM_Init>
+
+ MESH_Init();
+ 8005944: f7ff ffb6 bl 80058b4 <MESH_Init>
+
+ SVCCTL_InitCustomSvc();
+ 8005948: f7ff ffc2 bl 80058d0 <SVCCTL_InitCustomSvc>
+
+ return;
+ 800594c: bf00 nop
+}
+ 800594e: bd80 pop {r7, pc}
+
+08005950 <SVCCTL_RegisterSvcHandler>:
+ * @brief BLE Controller initialization
+ * @param None
+ * @retval None
+ */
+void SVCCTL_RegisterSvcHandler( SVC_CTL_p_EvtHandler_t pfBLE_SVC_Service_Event_Handler )
+{
+ 8005950: b480 push {r7}
+ 8005952: b083 sub sp, #12
+ 8005954: af00 add r7, sp, #0
+ 8005956: 6078 str r0, [r7, #4]
+#if (BLE_CFG_SVC_MAX_NBR_CB > 0)
+ SVCCTL_EvtHandler.SVCCTL__SvcHandlerTab[SVCCTL_EvtHandler.NbreOfRegisteredHandler] = pfBLE_SVC_Service_Event_Handler;
+ 8005958: 4b09 ldr r3, [pc, #36] @ (8005980 <SVCCTL_RegisterSvcHandler+0x30>)
+ 800595a: 7f1b ldrb r3, [r3, #28]
+ 800595c: 4619 mov r1, r3
+ 800595e: 4a08 ldr r2, [pc, #32] @ (8005980 <SVCCTL_RegisterSvcHandler+0x30>)
+ 8005960: 687b ldr r3, [r7, #4]
+ 8005962: f842 3021 str.w r3, [r2, r1, lsl #2]
+ SVCCTL_EvtHandler.NbreOfRegisteredHandler++;
+ 8005966: 4b06 ldr r3, [pc, #24] @ (8005980 <SVCCTL_RegisterSvcHandler+0x30>)
+ 8005968: 7f1b ldrb r3, [r3, #28]
+ 800596a: 3301 adds r3, #1
+ 800596c: b2da uxtb r2, r3
+ 800596e: 4b04 ldr r3, [pc, #16] @ (8005980 <SVCCTL_RegisterSvcHandler+0x30>)
+ 8005970: 771a strb r2, [r3, #28]
+#else
+ (void)(pfBLE_SVC_Service_Event_Handler);
+#endif
+
+ return;
+ 8005972: bf00 nop
+}
+ 8005974: 370c adds r7, #12
+ 8005976: 46bd mov sp, r7
+ 8005978: f85d 7b04 ldr.w r7, [sp], #4
+ 800597c: 4770 bx lr
+ 800597e: bf00 nop
+ 8005980: 20000034 .word 0x20000034
+
+08005984 <SVCCTL_UserEvtRx>:
+
+ return;
+}
+
+__WEAK SVCCTL_UserEvtFlowStatus_t SVCCTL_UserEvtRx( void *pckt )
+{
+ 8005984: b580 push {r7, lr}
+ 8005986: b086 sub sp, #24
+ 8005988: af00 add r7, sp, #0
+ 800598a: 6078 str r0, [r7, #4]
+ evt_blecore_aci *blecore_evt;
+ SVCCTL_EvtAckStatus_t event_notification_status;
+ SVCCTL_UserEvtFlowStatus_t return_status;
+ uint8_t index;
+
+ event_pckt = (hci_event_pckt*) ((hci_uart_pckt *) pckt)->data;
+ 800598c: 687b ldr r3, [r7, #4]
+ 800598e: 3301 adds r3, #1
+ 8005990: 613b str r3, [r7, #16]
+ event_notification_status = SVCCTL_EvtNotAck;
+ 8005992: 2300 movs r3, #0
+ 8005994: 75fb strb r3, [r7, #23]
+
+ switch (event_pckt->evt)
+ 8005996: 693b ldr r3, [r7, #16]
+ 8005998: 781b ldrb r3, [r3, #0]
+ 800599a: 2bff cmp r3, #255 @ 0xff
+ 800599c: d125 bne.n 80059ea <SVCCTL_UserEvtRx+0x66>
+ {
+ case HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE:
+ {
+ blecore_evt = (evt_blecore_aci*) event_pckt->data;
+ 800599e: 693b ldr r3, [r7, #16]
+ 80059a0: 3302 adds r3, #2
+ 80059a2: 60fb str r3, [r7, #12]
+
+ switch ((blecore_evt->ecode) & SVCCTL_EGID_EVT_MASK)
+ 80059a4: 68fb ldr r3, [r7, #12]
+ 80059a6: 881b ldrh r3, [r3, #0]
+ 80059a8: b29b uxth r3, r3
+ 80059aa: f403 437f and.w r3, r3, #65280 @ 0xff00
+ 80059ae: f5b3 6f40 cmp.w r3, #3072 @ 0xc00
+ 80059b2: d118 bne.n 80059e6 <SVCCTL_UserEvtRx+0x62>
+ {
+ case SVCCTL_GATT_EVT_TYPE:
+#if (BLE_CFG_SVC_MAX_NBR_CB > 0)
+ /* For Service event handler */
+ for (index = 0; index < SVCCTL_EvtHandler.NbreOfRegisteredHandler; index++)
+ 80059b4: 2300 movs r3, #0
+ 80059b6: 757b strb r3, [r7, #21]
+ 80059b8: e00d b.n 80059d6 <SVCCTL_UserEvtRx+0x52>
+ {
+ event_notification_status = SVCCTL_EvtHandler.SVCCTL__SvcHandlerTab[index](pckt);
+ 80059ba: 7d7b ldrb r3, [r7, #21]
+ 80059bc: 4a1a ldr r2, [pc, #104] @ (8005a28 <SVCCTL_UserEvtRx+0xa4>)
+ 80059be: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 80059c2: 6878 ldr r0, [r7, #4]
+ 80059c4: 4798 blx r3
+ 80059c6: 4603 mov r3, r0
+ 80059c8: 75fb strb r3, [r7, #23]
+ /**
+ * When a GATT event has been acknowledged by a Service, there is no need to call the other registered handlers
+ * a GATT event is relevant for only one Service
+ */
+ if (event_notification_status != SVCCTL_EvtNotAck)
+ 80059ca: 7dfb ldrb r3, [r7, #23]
+ 80059cc: 2b00 cmp r3, #0
+ 80059ce: d108 bne.n 80059e2 <SVCCTL_UserEvtRx+0x5e>
+ for (index = 0; index < SVCCTL_EvtHandler.NbreOfRegisteredHandler; index++)
+ 80059d0: 7d7b ldrb r3, [r7, #21]
+ 80059d2: 3301 adds r3, #1
+ 80059d4: 757b strb r3, [r7, #21]
+ 80059d6: 4b14 ldr r3, [pc, #80] @ (8005a28 <SVCCTL_UserEvtRx+0xa4>)
+ 80059d8: 7f1b ldrb r3, [r3, #28]
+ 80059da: 7d7a ldrb r2, [r7, #21]
+ 80059dc: 429a cmp r2, r3
+ 80059de: d3ec bcc.n 80059ba <SVCCTL_UserEvtRx+0x36>
+ */
+ break;
+ }
+ }
+#endif
+ break;
+ 80059e0: e002 b.n 80059e8 <SVCCTL_UserEvtRx+0x64>
+ break;
+ 80059e2: bf00 nop
+ break;
+ 80059e4: e000 b.n 80059e8 <SVCCTL_UserEvtRx+0x64>
+
+ default:
+ break;
+ 80059e6: bf00 nop
+ }
+ }
+ break; /* HCI_HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE_SPECIFIC */
+ 80059e8: e000 b.n 80059ec <SVCCTL_UserEvtRx+0x68>
+
+ default:
+ break;
+ 80059ea: bf00 nop
+
+ /**
+ * When no registered handlers (either Service or Client) has acknowledged the GATT event, it is reported to the application
+ * a GAP event is always reported to the application.
+ */
+ switch (event_notification_status)
+ 80059ec: 7dfb ldrb r3, [r7, #23]
+ 80059ee: 2b02 cmp r3, #2
+ 80059f0: d00f beq.n 8005a12 <SVCCTL_UserEvtRx+0x8e>
+ 80059f2: 2b02 cmp r3, #2
+ 80059f4: dc10 bgt.n 8005a18 <SVCCTL_UserEvtRx+0x94>
+ 80059f6: 2b00 cmp r3, #0
+ 80059f8: d002 beq.n 8005a00 <SVCCTL_UserEvtRx+0x7c>
+ 80059fa: 2b01 cmp r3, #1
+ 80059fc: d006 beq.n 8005a0c <SVCCTL_UserEvtRx+0x88>
+ 80059fe: e00b b.n 8005a18 <SVCCTL_UserEvtRx+0x94>
+ case SVCCTL_EvtNotAck:
+ /**
+ * The event has NOT been managed.
+ * It shall be passed to the application for processing
+ */
+ return_status = SVCCTL_App_Notification(pckt);
+ 8005a00: 6878 ldr r0, [r7, #4]
+ 8005a02: f000 ffb1 bl 8006968 <SVCCTL_App_Notification>
+ 8005a06: 4603 mov r3, r0
+ 8005a08: 75bb strb r3, [r7, #22]
+ break;
+ 8005a0a: e008 b.n 8005a1e <SVCCTL_UserEvtRx+0x9a>
+
+ case SVCCTL_EvtAckFlowEnable:
+ return_status = SVCCTL_UserEvtFlowEnable;
+ 8005a0c: 2301 movs r3, #1
+ 8005a0e: 75bb strb r3, [r7, #22]
+ break;
+ 8005a10: e005 b.n 8005a1e <SVCCTL_UserEvtRx+0x9a>
+
+ case SVCCTL_EvtAckFlowDisable:
+ return_status = SVCCTL_UserEvtFlowDisable;
+ 8005a12: 2300 movs r3, #0
+ 8005a14: 75bb strb r3, [r7, #22]
+ break;
+ 8005a16: e002 b.n 8005a1e <SVCCTL_UserEvtRx+0x9a>
+
+ default:
+ return_status = SVCCTL_UserEvtFlowEnable;
+ 8005a18: 2301 movs r3, #1
+ 8005a1a: 75bb strb r3, [r7, #22]
+ break;
+ 8005a1c: bf00 nop
+ }
+
+ return (return_status);
+ 8005a1e: 7dbb ldrb r3, [r7, #22]
+}
+ 8005a20: 4618 mov r0, r3
+ 8005a22: 3718 adds r7, #24
+ 8005a24: 46bd mov sp, r7
+ 8005a26: bd80 pop {r7, pc}
+ 8005a28: 20000034 .word 0x20000034
+
+08005a2c <SHCI_C2_BLE_Init>:
+
+ return (SHCI_CmdStatus_t)(((TL_CcEvt_t*)(p_rsp->evtserial.evt.payload))->payload[0]);
+}
+
+SHCI_CmdStatus_t SHCI_C2_BLE_Init( SHCI_C2_Ble_Init_Cmd_Packet_t *pCmdPacket )
+{
+ 8005a2c: b580 push {r7, lr}
+ 8005a2e: b088 sub sp, #32
+ 8005a30: af00 add r7, sp, #0
+ 8005a32: 6078 str r0, [r7, #4]
+ * Buffer is large enough to hold command complete without payload
+ */
+ uint8_t local_buffer[TL_BLEEVT_CC_BUFFER_SIZE];
+ TL_EvtPacket_t * p_rsp;
+
+ p_rsp = (TL_EvtPacket_t *)local_buffer;
+ 8005a34: f107 030c add.w r3, r7, #12
+ 8005a38: 61fb str r3, [r7, #28]
+
+ shci_send( SHCI_OPCODE_C2_BLE_INIT,
+ sizeof( SHCI_C2_Ble_Init_Cmd_Param_t ),
+ (uint8_t*)&pCmdPacket->Param,
+ 8005a3a: 687b ldr r3, [r7, #4]
+ 8005a3c: f103 020c add.w r2, r3, #12
+ shci_send( SHCI_OPCODE_C2_BLE_INIT,
+ 8005a40: 69fb ldr r3, [r7, #28]
+ 8005a42: 212f movs r1, #47 @ 0x2f
+ 8005a44: f64f 4066 movw r0, #64614 @ 0xfc66
+ 8005a48: f000 fae8 bl 800601c <shci_send>
+ p_rsp );
+
+ return (SHCI_CmdStatus_t)(((TL_CcEvt_t*)(p_rsp->evtserial.evt.payload))->payload[0]);
+ 8005a4c: 69fb ldr r3, [r7, #28]
+ 8005a4e: 330b adds r3, #11
+ 8005a50: 78db ldrb r3, [r3, #3]
+}
+ 8005a52: 4618 mov r0, r3
+ 8005a54: 3720 adds r7, #32
+ 8005a56: 46bd mov sp, r7
+ 8005a58: bd80 pop {r7, pc}
+
+08005a5a <SHCI_C2_DEBUG_Init>:
+
+ return (SHCI_CmdStatus_t)(((TL_CcEvt_t*)(p_rsp->evtserial.evt.payload))->payload[0]);
+}
+
+SHCI_CmdStatus_t SHCI_C2_DEBUG_Init( SHCI_C2_DEBUG_Init_Cmd_Packet_t *pCmdPacket )
+{
+ 8005a5a: b580 push {r7, lr}
+ 8005a5c: b088 sub sp, #32
+ 8005a5e: af00 add r7, sp, #0
+ 8005a60: 6078 str r0, [r7, #4]
+ * Buffer is large enough to hold command complete without payload
+ */
+ uint8_t local_buffer[TL_BLEEVT_CC_BUFFER_SIZE];
+ TL_EvtPacket_t * p_rsp;
+
+ p_rsp = (TL_EvtPacket_t *)local_buffer;
+ 8005a62: f107 030c add.w r3, r7, #12
+ 8005a66: 61fb str r3, [r7, #28]
+
+ shci_send( SHCI_OPCODE_C2_DEBUG_INIT,
+ sizeof( SHCI_C2_DEBUG_init_Cmd_Param_t ),
+ (uint8_t*)&pCmdPacket->Param,
+ 8005a68: 687b ldr r3, [r7, #4]
+ 8005a6a: f103 020c add.w r2, r3, #12
+ shci_send( SHCI_OPCODE_C2_DEBUG_INIT,
+ 8005a6e: 69fb ldr r3, [r7, #28]
+ 8005a70: 210f movs r1, #15
+ 8005a72: f64f 4068 movw r0, #64616 @ 0xfc68
+ 8005a76: f000 fad1 bl 800601c <shci_send>
+ p_rsp );
+
+ return (SHCI_CmdStatus_t)(((TL_CcEvt_t*)(p_rsp->evtserial.evt.payload))->payload[0]);
+ 8005a7a: 69fb ldr r3, [r7, #28]
+ 8005a7c: 330b adds r3, #11
+ 8005a7e: 78db ldrb r3, [r3, #3]
+}
+ 8005a80: 4618 mov r0, r3
+ 8005a82: 3720 adds r7, #32
+ 8005a84: 46bd mov sp, r7
+ 8005a86: bd80 pop {r7, pc}
+
+08005a88 <SHCI_C2_Config>:
+
+ return (SHCI_CmdStatus_t)(((TL_CcEvt_t*)(p_rsp->evtserial.evt.payload))->payload[0]);
+}
+
+SHCI_CmdStatus_t SHCI_C2_Config(SHCI_C2_CONFIG_Cmd_Param_t *pCmdPacket)
+{
+ 8005a88: b580 push {r7, lr}
+ 8005a8a: b088 sub sp, #32
+ 8005a8c: af00 add r7, sp, #0
+ 8005a8e: 6078 str r0, [r7, #4]
+ * Buffer is large enough to hold command complete without payload
+ */
+ uint8_t local_buffer[TL_BLEEVT_CC_BUFFER_SIZE];
+ TL_EvtPacket_t * p_rsp;
+
+ p_rsp = (TL_EvtPacket_t *)local_buffer;
+ 8005a90: f107 030c add.w r3, r7, #12
+ 8005a94: 61fb str r3, [r7, #28]
+
+ shci_send( SHCI_OPCODE_C2_CONFIG,
+ 8005a96: 69fb ldr r3, [r7, #28]
+ 8005a98: 687a ldr r2, [r7, #4]
+ 8005a9a: 2110 movs r1, #16
+ 8005a9c: f64f 4075 movw r0, #64629 @ 0xfc75
+ 8005aa0: f000 fabc bl 800601c <shci_send>
+ sizeof(SHCI_C2_CONFIG_Cmd_Param_t),
+ (uint8_t*)pCmdPacket,
+ p_rsp );
+
+ return (SHCI_CmdStatus_t)(((TL_CcEvt_t*)(p_rsp->evtserial.evt.payload))->payload[0]);
+ 8005aa4: 69fb ldr r3, [r7, #28]
+ 8005aa6: 330b adds r3, #11
+ 8005aa8: 78db ldrb r3, [r3, #3]
+}
+ 8005aaa: 4618 mov r0, r3
+ 8005aac: 3720 adds r7, #32
+ 8005aae: 46bd mov sp, r7
+ 8005ab0: bd80 pop {r7, pc}
+ ...
+
+08005ab4 <SHCI_GetWirelessFwInfo>:
+ * Local System COMMAND
+ * These commands are NOT sent to the CPU2
+ */
+
+SHCI_CmdStatus_t SHCI_GetWirelessFwInfo( WirelessFwInfo_t* pWirelessInfo )
+{
+ 8005ab4: b480 push {r7}
+ 8005ab6: b08b sub sp, #44 @ 0x2c
+ 8005ab8: af00 add r7, sp, #0
+ 8005aba: 6078 str r0, [r7, #4]
+ uint32_t ipccdba = 0;
+ 8005abc: 2300 movs r3, #0
+ 8005abe: 613b str r3, [r7, #16]
+ MB_RefTable_t * p_RefTable = NULL;
+ 8005ac0: 2300 movs r3, #0
+ 8005ac2: 60fb str r3, [r7, #12]
+ uint32_t wireless_firmware_version = 0;
+ 8005ac4: 2300 movs r3, #0
+ 8005ac6: 627b str r3, [r7, #36] @ 0x24
+ uint32_t wireless_firmware_memorySize = 0;
+ 8005ac8: 2300 movs r3, #0
+ 8005aca: 623b str r3, [r7, #32]
+ uint32_t wireless_firmware_infoStack = 0;
+ 8005acc: 2300 movs r3, #0
+ 8005ace: 61fb str r3, [r7, #28]
+ MB_FUS_DeviceInfoTable_t * p_fus_device_info_table = NULL;
+ 8005ad0: 2300 movs r3, #0
+ 8005ad2: 60bb str r3, [r7, #8]
+ uint32_t fus_version = 0;
+ 8005ad4: 2300 movs r3, #0
+ 8005ad6: 61bb str r3, [r7, #24]
+ uint32_t fus_memorySize = 0;
+ 8005ad8: 2300 movs r3, #0
+ 8005ada: 617b str r3, [r7, #20]
+
+ ipccdba = READ_BIT( FLASH->IPCCBR, FLASH_IPCCBR_IPCCDBA );
+ 8005adc: 4b4a ldr r3, [pc, #296] @ (8005c08 <SHCI_GetWirelessFwInfo+0x154>)
+ 8005ade: 6bdb ldr r3, [r3, #60] @ 0x3c
+ 8005ae0: f3c3 030d ubfx r3, r3, #0, #14
+ 8005ae4: 613b str r3, [r7, #16]
+ /**
+ * The Device Info Table mapping depends on which firmware is running on CPU2.
+ * If the FUS is running on CPU2, FUS_DEVICE_INFO_TABLE_VALIDITY_KEYWORD shall be written in the table.
+ * Otherwise, it means the Wireless Firmware is running on the CPU2
+ */
+ p_fus_device_info_table = (MB_FUS_DeviceInfoTable_t*)(*(uint32_t*)((ipccdba<<2) + SRAM2A_BASE));
+ 8005ae6: 693b ldr r3, [r7, #16]
+ 8005ae8: 009b lsls r3, r3, #2
+ 8005aea: f103 5300 add.w r3, r3, #536870912 @ 0x20000000
+ 8005aee: f503 3340 add.w r3, r3, #196608 @ 0x30000
+ 8005af2: 681b ldr r3, [r3, #0]
+ 8005af4: 60bb str r3, [r7, #8]
+
+ if(p_fus_device_info_table->DeviceInfoTableState == FUS_DEVICE_INFO_TABLE_VALIDITY_KEYWORD)
+ 8005af6: 68bb ldr r3, [r7, #8]
+ 8005af8: 681b ldr r3, [r3, #0]
+ 8005afa: 4a44 ldr r2, [pc, #272] @ (8005c0c <SHCI_GetWirelessFwInfo+0x158>)
+ 8005afc: 4293 cmp r3, r2
+ 8005afe: d10f bne.n 8005b20 <SHCI_GetWirelessFwInfo+0x6c>
+ /* The FUS is running on CPU2 */
+ /**
+ * Retrieve the WirelessFwInfoTable
+ * This table is stored in RAM at startup during the TL (transport layer) initialization
+ */
+ wireless_firmware_version = p_fus_device_info_table->WirelessStackVersion;
+ 8005b00: 68bb ldr r3, [r7, #8]
+ 8005b02: 695b ldr r3, [r3, #20]
+ 8005b04: 627b str r3, [r7, #36] @ 0x24
+ wireless_firmware_memorySize = p_fus_device_info_table->WirelessStackMemorySize;
+ 8005b06: 68bb ldr r3, [r7, #8]
+ 8005b08: 699b ldr r3, [r3, #24]
+ 8005b0a: 623b str r3, [r7, #32]
+ wireless_firmware_infoStack = p_fus_device_info_table->WirelessFirmwareBleInfo;
+ 8005b0c: 68bb ldr r3, [r7, #8]
+ 8005b0e: 69db ldr r3, [r3, #28]
+ 8005b10: 61fb str r3, [r7, #28]
+
+ /**
+ * Retrieve the FusInfoTable
+ * This table is stored in RAM at startup during the TL (transport layer) initialization
+ */
+ fus_version = p_fus_device_info_table->FusVersion;
+ 8005b12: 68bb ldr r3, [r7, #8]
+ 8005b14: 68db ldr r3, [r3, #12]
+ 8005b16: 61bb str r3, [r7, #24]
+ fus_memorySize = p_fus_device_info_table->FusMemorySize;
+ 8005b18: 68bb ldr r3, [r7, #8]
+ 8005b1a: 691b ldr r3, [r3, #16]
+ 8005b1c: 617b str r3, [r7, #20]
+ 8005b1e: e01a b.n 8005b56 <SHCI_GetWirelessFwInfo+0xa2>
+ }
+ else
+ {
+ /* The Wireless Firmware is running on CPU2 */
+ p_RefTable = (MB_RefTable_t*)((ipccdba<<2) + SRAM2A_BASE);
+ 8005b20: 693b ldr r3, [r7, #16]
+ 8005b22: 009b lsls r3, r3, #2
+ 8005b24: f103 5300 add.w r3, r3, #536870912 @ 0x20000000
+ 8005b28: f503 3340 add.w r3, r3, #196608 @ 0x30000
+ 8005b2c: 60fb str r3, [r7, #12]
+
+ /**
+ * Retrieve the WirelessFwInfoTable
+ * This table is stored in RAM at startup during the TL (transport layer) initialization
+ */
+ wireless_firmware_version = p_RefTable->p_device_info_table->WirelessFwInfoTable.Version;
+ 8005b2e: 68fb ldr r3, [r7, #12]
+ 8005b30: 681b ldr r3, [r3, #0]
+ 8005b32: 691b ldr r3, [r3, #16]
+ 8005b34: 627b str r3, [r7, #36] @ 0x24
+ wireless_firmware_memorySize = p_RefTable->p_device_info_table->WirelessFwInfoTable.MemorySize;
+ 8005b36: 68fb ldr r3, [r7, #12]
+ 8005b38: 681b ldr r3, [r3, #0]
+ 8005b3a: 695b ldr r3, [r3, #20]
+ 8005b3c: 623b str r3, [r7, #32]
+ wireless_firmware_infoStack = p_RefTable->p_device_info_table->WirelessFwInfoTable.InfoStack;
+ 8005b3e: 68fb ldr r3, [r7, #12]
+ 8005b40: 681b ldr r3, [r3, #0]
+ 8005b42: 699b ldr r3, [r3, #24]
+ 8005b44: 61fb str r3, [r7, #28]
+
+ /**
+ * Retrieve the FusInfoTable
+ * This table is stored in RAM at startup during the TL (transport layer) initialization
+ */
+ fus_version = p_RefTable->p_device_info_table->FusInfoTable.Version;
+ 8005b46: 68fb ldr r3, [r7, #12]
+ 8005b48: 681b ldr r3, [r3, #0]
+ 8005b4a: 685b ldr r3, [r3, #4]
+ 8005b4c: 61bb str r3, [r7, #24]
+ fus_memorySize = p_RefTable->p_device_info_table->FusInfoTable.MemorySize;
+ 8005b4e: 68fb ldr r3, [r7, #12]
+ 8005b50: 681b ldr r3, [r3, #0]
+ 8005b52: 689b ldr r3, [r3, #8]
+ 8005b54: 617b str r3, [r7, #20]
+
+ /**
+ * Retrieve the WirelessFwInfoTable
+ * This table is stored in RAM at startup during the TL (transport layer) initialization
+ */
+ pWirelessInfo->VersionMajor = ((wireless_firmware_version & INFO_VERSION_MAJOR_MASK) >> INFO_VERSION_MAJOR_OFFSET);
+ 8005b56: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8005b58: 0e1b lsrs r3, r3, #24
+ 8005b5a: b2da uxtb r2, r3
+ 8005b5c: 687b ldr r3, [r7, #4]
+ 8005b5e: 701a strb r2, [r3, #0]
+ pWirelessInfo->VersionMinor = ((wireless_firmware_version & INFO_VERSION_MINOR_MASK) >> INFO_VERSION_MINOR_OFFSET);
+ 8005b60: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8005b62: 0c1b lsrs r3, r3, #16
+ 8005b64: b2da uxtb r2, r3
+ 8005b66: 687b ldr r3, [r7, #4]
+ 8005b68: 705a strb r2, [r3, #1]
+ pWirelessInfo->VersionSub = ((wireless_firmware_version & INFO_VERSION_SUB_MASK) >> INFO_VERSION_SUB_OFFSET);
+ 8005b6a: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8005b6c: 0a1b lsrs r3, r3, #8
+ 8005b6e: b2da uxtb r2, r3
+ 8005b70: 687b ldr r3, [r7, #4]
+ 8005b72: 709a strb r2, [r3, #2]
+ pWirelessInfo->VersionBranch = ((wireless_firmware_version & INFO_VERSION_BRANCH_MASK) >> INFO_VERSION_BRANCH_OFFSET);
+ 8005b74: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8005b76: 091b lsrs r3, r3, #4
+ 8005b78: b2db uxtb r3, r3
+ 8005b7a: f003 030f and.w r3, r3, #15
+ 8005b7e: b2da uxtb r2, r3
+ 8005b80: 687b ldr r3, [r7, #4]
+ 8005b82: 70da strb r2, [r3, #3]
+ pWirelessInfo->VersionReleaseType = ((wireless_firmware_version & INFO_VERSION_TYPE_MASK) >> INFO_VERSION_TYPE_OFFSET);
+ 8005b84: 6a7b ldr r3, [r7, #36] @ 0x24
+ 8005b86: b2db uxtb r3, r3
+ 8005b88: f003 030f and.w r3, r3, #15
+ 8005b8c: b2da uxtb r2, r3
+ 8005b8e: 687b ldr r3, [r7, #4]
+ 8005b90: 711a strb r2, [r3, #4]
+
+ pWirelessInfo->MemorySizeSram2B = ((wireless_firmware_memorySize & INFO_SIZE_SRAM2B_MASK) >> INFO_SIZE_SRAM2B_OFFSET);
+ 8005b92: 6a3b ldr r3, [r7, #32]
+ 8005b94: 0e1b lsrs r3, r3, #24
+ 8005b96: b2da uxtb r2, r3
+ 8005b98: 687b ldr r3, [r7, #4]
+ 8005b9a: 715a strb r2, [r3, #5]
+ pWirelessInfo->MemorySizeSram2A = ((wireless_firmware_memorySize & INFO_SIZE_SRAM2A_MASK) >> INFO_SIZE_SRAM2A_OFFSET);
+ 8005b9c: 6a3b ldr r3, [r7, #32]
+ 8005b9e: 0c1b lsrs r3, r3, #16
+ 8005ba0: b2da uxtb r2, r3
+ 8005ba2: 687b ldr r3, [r7, #4]
+ 8005ba4: 719a strb r2, [r3, #6]
+ pWirelessInfo->MemorySizeSram1 = ((wireless_firmware_memorySize & INFO_SIZE_SRAM1_MASK) >> INFO_SIZE_SRAM1_OFFSET);
+ 8005ba6: 6a3b ldr r3, [r7, #32]
+ 8005ba8: 0a1b lsrs r3, r3, #8
+ 8005baa: b2da uxtb r2, r3
+ 8005bac: 687b ldr r3, [r7, #4]
+ 8005bae: 71da strb r2, [r3, #7]
+ pWirelessInfo->MemorySizeFlash = ((wireless_firmware_memorySize & INFO_SIZE_FLASH_MASK) >> INFO_SIZE_FLASH_OFFSET);
+ 8005bb0: 6a3b ldr r3, [r7, #32]
+ 8005bb2: b2da uxtb r2, r3
+ 8005bb4: 687b ldr r3, [r7, #4]
+ 8005bb6: 721a strb r2, [r3, #8]
+
+ pWirelessInfo->StackType = ((wireless_firmware_infoStack & INFO_STACK_TYPE_MASK) >> INFO_STACK_TYPE_OFFSET);
+ 8005bb8: 69fb ldr r3, [r7, #28]
+ 8005bba: b2da uxtb r2, r3
+ 8005bbc: 687b ldr r3, [r7, #4]
+ 8005bbe: 725a strb r2, [r3, #9]
+
+ /**
+ * Retrieve the FusInfoTable
+ * This table is stored in RAM at startup during the TL (transport layer) initialization
+ */
+ pWirelessInfo->FusVersionMajor = ((fus_version & INFO_VERSION_MAJOR_MASK) >> INFO_VERSION_MAJOR_OFFSET);
+ 8005bc0: 69bb ldr r3, [r7, #24]
+ 8005bc2: 0e1b lsrs r3, r3, #24
+ 8005bc4: b2da uxtb r2, r3
+ 8005bc6: 687b ldr r3, [r7, #4]
+ 8005bc8: 729a strb r2, [r3, #10]
+ pWirelessInfo->FusVersionMinor = ((fus_version & INFO_VERSION_MINOR_MASK) >> INFO_VERSION_MINOR_OFFSET);
+ 8005bca: 69bb ldr r3, [r7, #24]
+ 8005bcc: 0c1b lsrs r3, r3, #16
+ 8005bce: b2da uxtb r2, r3
+ 8005bd0: 687b ldr r3, [r7, #4]
+ 8005bd2: 72da strb r2, [r3, #11]
+ pWirelessInfo->FusVersionSub = ((fus_version & INFO_VERSION_SUB_MASK) >> INFO_VERSION_SUB_OFFSET);
+ 8005bd4: 69bb ldr r3, [r7, #24]
+ 8005bd6: 0a1b lsrs r3, r3, #8
+ 8005bd8: b2da uxtb r2, r3
+ 8005bda: 687b ldr r3, [r7, #4]
+ 8005bdc: 731a strb r2, [r3, #12]
+
+ pWirelessInfo->FusMemorySizeSram2B = ((fus_memorySize & INFO_SIZE_SRAM2B_MASK) >> INFO_SIZE_SRAM2B_OFFSET);
+ 8005bde: 697b ldr r3, [r7, #20]
+ 8005be0: 0e1b lsrs r3, r3, #24
+ 8005be2: b2da uxtb r2, r3
+ 8005be4: 687b ldr r3, [r7, #4]
+ 8005be6: 735a strb r2, [r3, #13]
+ pWirelessInfo->FusMemorySizeSram2A = ((fus_memorySize & INFO_SIZE_SRAM2A_MASK) >> INFO_SIZE_SRAM2A_OFFSET);
+ 8005be8: 697b ldr r3, [r7, #20]
+ 8005bea: 0c1b lsrs r3, r3, #16
+ 8005bec: b2da uxtb r2, r3
+ 8005bee: 687b ldr r3, [r7, #4]
+ 8005bf0: 739a strb r2, [r3, #14]
+ pWirelessInfo->FusMemorySizeFlash = ((fus_memorySize & INFO_SIZE_FLASH_MASK) >> INFO_SIZE_FLASH_OFFSET);
+ 8005bf2: 697b ldr r3, [r7, #20]
+ 8005bf4: b2da uxtb r2, r3
+ 8005bf6: 687b ldr r3, [r7, #4]
+ 8005bf8: 73da strb r2, [r3, #15]
+
+ return (SHCI_Success);
+ 8005bfa: 2300 movs r3, #0
+}
+ 8005bfc: 4618 mov r0, r3
+ 8005bfe: 372c adds r7, #44 @ 0x2c
+ 8005c00: 46bd mov sp, r7
+ 8005c02: f85d 7b04 ldr.w r7, [sp], #4
+ 8005c06: 4770 bx lr
+ 8005c08: 58004000 .word 0x58004000
+ 8005c0c: a94656b9 .word 0xa94656b9
+
+08005c10 <hci_init>:
+static void TlEvtReceived(TL_EvtPacket_t *hcievt);
+static void TlInit( TL_CmdPacket_t * p_cmdbuffer );
+
+/* Interface ------- ---------------------------------------------------------*/
+void hci_init(void(* UserEvtRx)(void* pData), void* pConf)
+{
+ 8005c10: b580 push {r7, lr}
+ 8005c12: b082 sub sp, #8
+ 8005c14: af00 add r7, sp, #0
+ 8005c16: 6078 str r0, [r7, #4]
+ 8005c18: 6039 str r1, [r7, #0]
+ StatusNotCallBackFunction = ((HCI_TL_HciInitConf_t *)pConf)->StatusNotCallBack;
+ 8005c1a: 683b ldr r3, [r7, #0]
+ 8005c1c: 685b ldr r3, [r3, #4]
+ 8005c1e: 4a08 ldr r2, [pc, #32] @ (8005c40 <hci_init+0x30>)
+ 8005c20: 6013 str r3, [r2, #0]
+ hciContext.UserEvtRx = UserEvtRx;
+ 8005c22: 4a08 ldr r2, [pc, #32] @ (8005c44 <hci_init+0x34>)
+ 8005c24: 687b ldr r3, [r7, #4]
+ 8005c26: 61d3 str r3, [r2, #28]
+
+ hci_register_io_bus (&hciContext.io);
+ 8005c28: 4806 ldr r0, [pc, #24] @ (8005c44 <hci_init+0x34>)
+ 8005c2a: f000 f979 bl 8005f20 <hci_register_io_bus>
+
+ TlInit((TL_CmdPacket_t *)(((HCI_TL_HciInitConf_t *)pConf)->p_cmdbuffer));
+ 8005c2e: 683b ldr r3, [r7, #0]
+ 8005c30: 681b ldr r3, [r3, #0]
+ 8005c32: 4618 mov r0, r3
+ 8005c34: f000 f8da bl 8005dec <TlInit>
+
+ return;
+ 8005c38: bf00 nop
+}
+ 8005c3a: 3708 adds r7, #8
+ 8005c3c: 46bd mov sp, r7
+ 8005c3e: bd80 pop {r7, pc}
+ 8005c40: 2000021c .word 0x2000021c
+ 8005c44: 200001f4 .word 0x200001f4
+
+08005c48 <hci_user_evt_proc>:
+
+void hci_user_evt_proc(void)
+{
+ 8005c48: b580 push {r7, lr}
+ 8005c4a: b084 sub sp, #16
+ 8005c4c: af00 add r7, sp, #0
+ /**
+ * It is more secure to use LST_remove_head()/LST_insert_head() compare to LST_get_next_node()/LST_remove_node()
+ * in case the user overwrite the header where the next/prev pointers are located
+ */
+
+ if((LST_is_empty(&HciAsynchEventQueue) == FALSE) && (UserEventFlow != HCI_TL_UserEventFlow_Disable))
+ 8005c4e: 4822 ldr r0, [pc, #136] @ (8005cd8 <hci_user_evt_proc+0x90>)
+ 8005c50: f000 fd3e bl 80066d0 <LST_is_empty>
+ 8005c54: 4603 mov r3, r0
+ 8005c56: 2b00 cmp r3, #0
+ 8005c58: d12b bne.n 8005cb2 <hci_user_evt_proc+0x6a>
+ 8005c5a: 4b20 ldr r3, [pc, #128] @ (8005cdc <hci_user_evt_proc+0x94>)
+ 8005c5c: 781b ldrb r3, [r3, #0]
+ 8005c5e: 2b00 cmp r3, #0
+ 8005c60: d027 beq.n 8005cb2 <hci_user_evt_proc+0x6a>
+ {
+ LST_remove_head ( &HciAsynchEventQueue, (tListNode **)&phcievtbuffer );
+ 8005c62: f107 030c add.w r3, r7, #12
+ 8005c66: 4619 mov r1, r3
+ 8005c68: 481b ldr r0, [pc, #108] @ (8005cd8 <hci_user_evt_proc+0x90>)
+ 8005c6a: f000 fdc0 bl 80067ee <LST_remove_head>
+
+ if (hciContext.UserEvtRx != NULL)
+ 8005c6e: 4b1c ldr r3, [pc, #112] @ (8005ce0 <hci_user_evt_proc+0x98>)
+ 8005c70: 69db ldr r3, [r3, #28]
+ 8005c72: 2b00 cmp r3, #0
+ 8005c74: d00c beq.n 8005c90 <hci_user_evt_proc+0x48>
+ {
+ UserEvtRxParam.pckt = phcievtbuffer;
+ 8005c76: 68fb ldr r3, [r7, #12]
+ 8005c78: 60bb str r3, [r7, #8]
+ UserEvtRxParam.status = HCI_TL_UserEventFlow_Enable;
+ 8005c7a: 2301 movs r3, #1
+ 8005c7c: 713b strb r3, [r7, #4]
+ hciContext.UserEvtRx((void *)&UserEvtRxParam);
+ 8005c7e: 4b18 ldr r3, [pc, #96] @ (8005ce0 <hci_user_evt_proc+0x98>)
+ 8005c80: 69db ldr r3, [r3, #28]
+ 8005c82: 1d3a adds r2, r7, #4
+ 8005c84: 4610 mov r0, r2
+ 8005c86: 4798 blx r3
+ UserEventFlow = UserEvtRxParam.status;
+ 8005c88: 793a ldrb r2, [r7, #4]
+ 8005c8a: 4b14 ldr r3, [pc, #80] @ (8005cdc <hci_user_evt_proc+0x94>)
+ 8005c8c: 701a strb r2, [r3, #0]
+ 8005c8e: e002 b.n 8005c96 <hci_user_evt_proc+0x4e>
+ }
+ else
+ {
+ UserEventFlow = HCI_TL_UserEventFlow_Enable;
+ 8005c90: 4b12 ldr r3, [pc, #72] @ (8005cdc <hci_user_evt_proc+0x94>)
+ 8005c92: 2201 movs r2, #1
+ 8005c94: 701a strb r2, [r3, #0]
+ }
+
+ if(UserEventFlow != HCI_TL_UserEventFlow_Disable)
+ 8005c96: 4b11 ldr r3, [pc, #68] @ (8005cdc <hci_user_evt_proc+0x94>)
+ 8005c98: 781b ldrb r3, [r3, #0]
+ 8005c9a: 2b00 cmp r3, #0
+ 8005c9c: d004 beq.n 8005ca8 <hci_user_evt_proc+0x60>
+ {
+ TL_MM_EvtDone( phcievtbuffer );
+ 8005c9e: 68fb ldr r3, [r7, #12]
+ 8005ca0: 4618 mov r0, r3
+ 8005ca2: f000 fc11 bl 80064c8 <TL_MM_EvtDone>
+ 8005ca6: e004 b.n 8005cb2 <hci_user_evt_proc+0x6a>
+ else
+ {
+ /**
+ * put back the event in the queue
+ */
+ LST_insert_head ( &HciAsynchEventQueue, (tListNode *)phcievtbuffer );
+ 8005ca8: 68fb ldr r3, [r7, #12]
+ 8005caa: 4619 mov r1, r3
+ 8005cac: 480a ldr r0, [pc, #40] @ (8005cd8 <hci_user_evt_proc+0x90>)
+ 8005cae: f000 fd31 bl 8006714 <LST_insert_head>
+ }
+ }
+
+ if((LST_is_empty(&HciAsynchEventQueue) == FALSE) && (UserEventFlow != HCI_TL_UserEventFlow_Disable))
+ 8005cb2: 4809 ldr r0, [pc, #36] @ (8005cd8 <hci_user_evt_proc+0x90>)
+ 8005cb4: f000 fd0c bl 80066d0 <LST_is_empty>
+ 8005cb8: 4603 mov r3, r0
+ 8005cba: 2b00 cmp r3, #0
+ 8005cbc: d107 bne.n 8005cce <hci_user_evt_proc+0x86>
+ 8005cbe: 4b07 ldr r3, [pc, #28] @ (8005cdc <hci_user_evt_proc+0x94>)
+ 8005cc0: 781b ldrb r3, [r3, #0]
+ 8005cc2: 2b00 cmp r3, #0
+ 8005cc4: d003 beq.n 8005cce <hci_user_evt_proc+0x86>
+ {
+ hci_notify_asynch_evt((void*) &HciAsynchEventQueue);
+ 8005cc6: 4804 ldr r0, [pc, #16] @ (8005cd8 <hci_user_evt_proc+0x90>)
+ 8005cc8: f001 f8c9 bl 8006e5e <hci_notify_asynch_evt>
+ }
+
+
+ return;
+ 8005ccc: bf00 nop
+ 8005cce: bf00 nop
+}
+ 8005cd0: 3710 adds r7, #16
+ 8005cd2: 46bd mov sp, r7
+ 8005cd4: bd80 pop {r7, pc}
+ 8005cd6: bf00 nop
+ 8005cd8: 2000005c .word 0x2000005c
+ 8005cdc: 20000068 .word 0x20000068
+ 8005ce0: 200001f4 .word 0x200001f4
+
+08005ce4 <hci_send_req>:
+
+ return;
+}
+
+int hci_send_req(struct hci_request *p_cmd, uint8_t async)
+{
+ 8005ce4: b580 push {r7, lr}
+ 8005ce6: b088 sub sp, #32
+ 8005ce8: af00 add r7, sp, #0
+ 8005cea: 6078 str r0, [r7, #4]
+ 8005cec: 460b mov r3, r1
+ 8005cee: 70fb strb r3, [r7, #3]
+ TL_CsEvt_t *pcommand_status_event;
+ TL_EvtPacket_t *pevtpacket;
+ uint8_t hci_cmd_complete_return_parameters_length;
+ HCI_TL_CmdStatus_t local_cmd_status;
+
+ NotifyCmdStatus(HCI_TL_CmdBusy);
+ 8005cf0: 2000 movs r0, #0
+ 8005cf2: f000 f8d1 bl 8005e98 <NotifyCmdStatus>
+ local_cmd_status = HCI_TL_CmdBusy;
+ 8005cf6: 2300 movs r3, #0
+ 8005cf8: 77fb strb r3, [r7, #31]
+ opcode = ((p_cmd->ocf) & 0x03ff) | ((p_cmd->ogf) << 10);
+ 8005cfa: 687b ldr r3, [r7, #4]
+ 8005cfc: 885b ldrh r3, [r3, #2]
+ 8005cfe: b21b sxth r3, r3
+ 8005d00: f3c3 0309 ubfx r3, r3, #0, #10
+ 8005d04: b21a sxth r2, r3
+ 8005d06: 687b ldr r3, [r7, #4]
+ 8005d08: 881b ldrh r3, [r3, #0]
+ 8005d0a: b21b sxth r3, r3
+ 8005d0c: 029b lsls r3, r3, #10
+ 8005d0e: b21b sxth r3, r3
+ 8005d10: 4313 orrs r3, r2
+ 8005d12: b21b sxth r3, r3
+ 8005d14: 83bb strh r3, [r7, #28]
+
+ CmdRspStatusFlag = HCI_TL_CMD_RESP_WAIT;
+ 8005d16: 4b33 ldr r3, [pc, #204] @ (8005de4 <hci_send_req+0x100>)
+ 8005d18: 2201 movs r2, #1
+ 8005d1a: 701a strb r2, [r3, #0]
+ SendCmd(opcode, p_cmd->clen, p_cmd->cparam);
+ 8005d1c: 687b ldr r3, [r7, #4]
+ 8005d1e: 68db ldr r3, [r3, #12]
+ 8005d20: b2d9 uxtb r1, r3
+ 8005d22: 687b ldr r3, [r7, #4]
+ 8005d24: 689a ldr r2, [r3, #8]
+ 8005d26: 8bbb ldrh r3, [r7, #28]
+ 8005d28: 4618 mov r0, r3
+ 8005d2a: f000 f88f bl 8005e4c <SendCmd>
+
+ while(local_cmd_status == HCI_TL_CmdBusy)
+ 8005d2e: e04e b.n 8005dce <hci_send_req+0xea>
+ {
+ hci_cmd_resp_wait(HCI_TL_DEFAULT_TIMEOUT);
+ 8005d30: f248 00e8 movw r0, #33000 @ 0x80e8
+ 8005d34: f001 f8aa bl 8006e8c <hci_cmd_resp_wait>
+
+ /**
+ * Process Cmd Event
+ */
+ while(LST_is_empty(&HciCmdEventQueue) == FALSE)
+ 8005d38: e043 b.n 8005dc2 <hci_send_req+0xde>
+ {
+ LST_remove_head (&HciCmdEventQueue, (tListNode **)&pevtpacket);
+ 8005d3a: f107 030c add.w r3, r7, #12
+ 8005d3e: 4619 mov r1, r3
+ 8005d40: 4829 ldr r0, [pc, #164] @ (8005de8 <hci_send_req+0x104>)
+ 8005d42: f000 fd54 bl 80067ee <LST_remove_head>
+
+ if(pevtpacket->evtserial.evt.evtcode == TL_BLEEVT_CS_OPCODE)
+ 8005d46: 68fb ldr r3, [r7, #12]
+ 8005d48: 7a5b ldrb r3, [r3, #9]
+ 8005d4a: 2b0f cmp r3, #15
+ 8005d4c: d114 bne.n 8005d78 <hci_send_req+0x94>
+ {
+ pcommand_status_event = (TL_CsEvt_t*)pevtpacket->evtserial.evt.payload;
+ 8005d4e: 68fb ldr r3, [r7, #12]
+ 8005d50: 330b adds r3, #11
+ 8005d52: 613b str r3, [r7, #16]
+ if(pcommand_status_event->cmdcode == opcode)
+ 8005d54: 693b ldr r3, [r7, #16]
+ 8005d56: 885b ldrh r3, [r3, #2]
+ 8005d58: b29b uxth r3, r3
+ 8005d5a: 8bba ldrh r2, [r7, #28]
+ 8005d5c: 429a cmp r2, r3
+ 8005d5e: d104 bne.n 8005d6a <hci_send_req+0x86>
+ {
+ *(uint8_t *)(p_cmd->rparam) = pcommand_status_event->status;
+ 8005d60: 687b ldr r3, [r7, #4]
+ 8005d62: 691b ldr r3, [r3, #16]
+ 8005d64: 693a ldr r2, [r7, #16]
+ 8005d66: 7812 ldrb r2, [r2, #0]
+ 8005d68: 701a strb r2, [r3, #0]
+ }
+
+ if(pcommand_status_event->numcmd != 0)
+ 8005d6a: 693b ldr r3, [r7, #16]
+ 8005d6c: 785b ldrb r3, [r3, #1]
+ 8005d6e: 2b00 cmp r3, #0
+ 8005d70: d027 beq.n 8005dc2 <hci_send_req+0xde>
+ {
+ local_cmd_status = HCI_TL_CmdAvailable;
+ 8005d72: 2301 movs r3, #1
+ 8005d74: 77fb strb r3, [r7, #31]
+ 8005d76: e024 b.n 8005dc2 <hci_send_req+0xde>
+ }
+ }
+ else
+ {
+ pcommand_complete_event = (TL_CcEvt_t*)pevtpacket->evtserial.evt.payload;
+ 8005d78: 68fb ldr r3, [r7, #12]
+ 8005d7a: 330b adds r3, #11
+ 8005d7c: 61bb str r3, [r7, #24]
+
+ if(pcommand_complete_event->cmdcode == opcode)
+ 8005d7e: 69bb ldr r3, [r7, #24]
+ 8005d80: f8b3 3001 ldrh.w r3, [r3, #1]
+ 8005d84: b29b uxth r3, r3
+ 8005d86: 8bba ldrh r2, [r7, #28]
+ 8005d88: 429a cmp r2, r3
+ 8005d8a: d114 bne.n 8005db6 <hci_send_req+0xd2>
+ {
+ hci_cmd_complete_return_parameters_length = pevtpacket->evtserial.evt.plen - TL_EVT_HDR_SIZE;
+ 8005d8c: 68fb ldr r3, [r7, #12]
+ 8005d8e: 7a9b ldrb r3, [r3, #10]
+ 8005d90: 3b03 subs r3, #3
+ 8005d92: 75fb strb r3, [r7, #23]
+ p_cmd->rlen = MIN(hci_cmd_complete_return_parameters_length, p_cmd->rlen);
+ 8005d94: 687b ldr r3, [r7, #4]
+ 8005d96: 695a ldr r2, [r3, #20]
+ 8005d98: 7dfb ldrb r3, [r7, #23]
+ 8005d9a: 429a cmp r2, r3
+ 8005d9c: bfa8 it ge
+ 8005d9e: 461a movge r2, r3
+ 8005da0: 687b ldr r3, [r7, #4]
+ 8005da2: 615a str r2, [r3, #20]
+ memcpy(p_cmd->rparam, pcommand_complete_event->payload, p_cmd->rlen);
+ 8005da4: 687b ldr r3, [r7, #4]
+ 8005da6: 6918 ldr r0, [r3, #16]
+ 8005da8: 69bb ldr r3, [r7, #24]
+ 8005daa: 1cd9 adds r1, r3, #3
+ 8005dac: 687b ldr r3, [r7, #4]
+ 8005dae: 695b ldr r3, [r3, #20]
+ 8005db0: 461a mov r2, r3
+ 8005db2: f001 fee5 bl 8007b80 <memcpy>
+ }
+
+ if(pcommand_complete_event->numcmd != 0)
+ 8005db6: 69bb ldr r3, [r7, #24]
+ 8005db8: 781b ldrb r3, [r3, #0]
+ 8005dba: 2b00 cmp r3, #0
+ 8005dbc: d001 beq.n 8005dc2 <hci_send_req+0xde>
+ {
+ local_cmd_status = HCI_TL_CmdAvailable;
+ 8005dbe: 2301 movs r3, #1
+ 8005dc0: 77fb strb r3, [r7, #31]
+ while(LST_is_empty(&HciCmdEventQueue) == FALSE)
+ 8005dc2: 4809 ldr r0, [pc, #36] @ (8005de8 <hci_send_req+0x104>)
+ 8005dc4: f000 fc84 bl 80066d0 <LST_is_empty>
+ 8005dc8: 4603 mov r3, r0
+ 8005dca: 2b00 cmp r3, #0
+ 8005dcc: d0b5 beq.n 8005d3a <hci_send_req+0x56>
+ while(local_cmd_status == HCI_TL_CmdBusy)
+ 8005dce: 7ffb ldrb r3, [r7, #31]
+ 8005dd0: 2b00 cmp r3, #0
+ 8005dd2: d0ad beq.n 8005d30 <hci_send_req+0x4c>
+ }
+ }
+ }
+ }
+
+ NotifyCmdStatus(HCI_TL_CmdAvailable);
+ 8005dd4: 2001 movs r0, #1
+ 8005dd6: f000 f85f bl 8005e98 <NotifyCmdStatus>
+
+ return 0;
+ 8005dda: 2300 movs r3, #0
+}
+ 8005ddc: 4618 mov r0, r3
+ 8005dde: 3720 adds r7, #32
+ 8005de0: 46bd mov sp, r7
+ 8005de2: bd80 pop {r7, pc}
+ 8005de4: 20000220 .word 0x20000220
+ 8005de8: 20000214 .word 0x20000214
+
+08005dec <TlInit>:
+
+/* Private functions ---------------------------------------------------------*/
+static void TlInit( TL_CmdPacket_t * p_cmdbuffer )
+{
+ 8005dec: b580 push {r7, lr}
+ 8005dee: b086 sub sp, #24
+ 8005df0: af00 add r7, sp, #0
+ 8005df2: 6078 str r0, [r7, #4]
+ TL_BLE_InitConf_t Conf;
+
+ /**
+ * Always initialize the command event queue
+ */
+ LST_init_head (&HciCmdEventQueue);
+ 8005df4: 480f ldr r0, [pc, #60] @ (8005e34 <TlInit+0x48>)
+ 8005df6: f000 fc5b bl 80066b0 <LST_init_head>
+
+ pCmdBuffer = p_cmdbuffer;
+ 8005dfa: 4a0f ldr r2, [pc, #60] @ (8005e38 <TlInit+0x4c>)
+ 8005dfc: 687b ldr r3, [r7, #4]
+ 8005dfe: 6013 str r3, [r2, #0]
+
+ LST_init_head (&HciAsynchEventQueue);
+ 8005e00: 480e ldr r0, [pc, #56] @ (8005e3c <TlInit+0x50>)
+ 8005e02: f000 fc55 bl 80066b0 <LST_init_head>
+
+ UserEventFlow = HCI_TL_UserEventFlow_Enable;
+ 8005e06: 4b0e ldr r3, [pc, #56] @ (8005e40 <TlInit+0x54>)
+ 8005e08: 2201 movs r2, #1
+ 8005e0a: 701a strb r2, [r3, #0]
+
+ /* Initialize low level driver */
+ if (hciContext.io.Init)
+ 8005e0c: 4b0d ldr r3, [pc, #52] @ (8005e44 <TlInit+0x58>)
+ 8005e0e: 681b ldr r3, [r3, #0]
+ 8005e10: 2b00 cmp r3, #0
+ 8005e12: d00a beq.n 8005e2a <TlInit+0x3e>
+ {
+
+ Conf.p_cmdbuffer = (uint8_t *)p_cmdbuffer;
+ 8005e14: 687b ldr r3, [r7, #4]
+ 8005e16: 613b str r3, [r7, #16]
+ Conf.IoBusEvtCallBack = TlEvtReceived;
+ 8005e18: 4b0b ldr r3, [pc, #44] @ (8005e48 <TlInit+0x5c>)
+ 8005e1a: 60bb str r3, [r7, #8]
+ hciContext.io.Init(&Conf);
+ 8005e1c: 4b09 ldr r3, [pc, #36] @ (8005e44 <TlInit+0x58>)
+ 8005e1e: 681b ldr r3, [r3, #0]
+ 8005e20: f107 0208 add.w r2, r7, #8
+ 8005e24: 4610 mov r0, r2
+ 8005e26: 4798 blx r3
+ }
+
+ return;
+ 8005e28: bf00 nop
+ 8005e2a: bf00 nop
+}
+ 8005e2c: 3718 adds r7, #24
+ 8005e2e: 46bd mov sp, r7
+ 8005e30: bd80 pop {r7, pc}
+ 8005e32: bf00 nop
+ 8005e34: 20000214 .word 0x20000214
+ 8005e38: 20000064 .word 0x20000064
+ 8005e3c: 2000005c .word 0x2000005c
+ 8005e40: 20000068 .word 0x20000068
+ 8005e44: 200001f4 .word 0x200001f4
+ 8005e48: 08005ed9 .word 0x08005ed9
+
+08005e4c <SendCmd>:
+
+static void SendCmd(uint16_t opcode, uint8_t plen, void *param)
+{
+ 8005e4c: b580 push {r7, lr}
+ 8005e4e: b082 sub sp, #8
+ 8005e50: af00 add r7, sp, #0
+ 8005e52: 4603 mov r3, r0
+ 8005e54: 603a str r2, [r7, #0]
+ 8005e56: 80fb strh r3, [r7, #6]
+ 8005e58: 460b mov r3, r1
+ 8005e5a: 717b strb r3, [r7, #5]
+ pCmdBuffer->cmdserial.cmd.cmdcode = opcode;
+ 8005e5c: 4b0c ldr r3, [pc, #48] @ (8005e90 <SendCmd+0x44>)
+ 8005e5e: 681b ldr r3, [r3, #0]
+ 8005e60: 88fa ldrh r2, [r7, #6]
+ 8005e62: f8a3 2009 strh.w r2, [r3, #9]
+ pCmdBuffer->cmdserial.cmd.plen = plen;
+ 8005e66: 4b0a ldr r3, [pc, #40] @ (8005e90 <SendCmd+0x44>)
+ 8005e68: 681b ldr r3, [r3, #0]
+ 8005e6a: 797a ldrb r2, [r7, #5]
+ 8005e6c: 72da strb r2, [r3, #11]
+ memcpy( pCmdBuffer->cmdserial.cmd.payload, param, plen );
+ 8005e6e: 4b08 ldr r3, [pc, #32] @ (8005e90 <SendCmd+0x44>)
+ 8005e70: 681b ldr r3, [r3, #0]
+ 8005e72: 330c adds r3, #12
+ 8005e74: 797a ldrb r2, [r7, #5]
+ 8005e76: 6839 ldr r1, [r7, #0]
+ 8005e78: 4618 mov r0, r3
+ 8005e7a: f001 fe81 bl 8007b80 <memcpy>
+
+ hciContext.io.Send(0,0);
+ 8005e7e: 4b05 ldr r3, [pc, #20] @ (8005e94 <SendCmd+0x48>)
+ 8005e80: 691b ldr r3, [r3, #16]
+ 8005e82: 2100 movs r1, #0
+ 8005e84: 2000 movs r0, #0
+ 8005e86: 4798 blx r3
+
+ return;
+ 8005e88: bf00 nop
+}
+ 8005e8a: 3708 adds r7, #8
+ 8005e8c: 46bd mov sp, r7
+ 8005e8e: bd80 pop {r7, pc}
+ 8005e90: 20000064 .word 0x20000064
+ 8005e94: 200001f4 .word 0x200001f4
+
+08005e98 <NotifyCmdStatus>:
+
+static void NotifyCmdStatus(HCI_TL_CmdStatus_t hcicmdstatus)
+{
+ 8005e98: b580 push {r7, lr}
+ 8005e9a: b082 sub sp, #8
+ 8005e9c: af00 add r7, sp, #0
+ 8005e9e: 4603 mov r3, r0
+ 8005ea0: 71fb strb r3, [r7, #7]
+ if(hcicmdstatus == HCI_TL_CmdBusy)
+ 8005ea2: 79fb ldrb r3, [r7, #7]
+ 8005ea4: 2b00 cmp r3, #0
+ 8005ea6: d108 bne.n 8005eba <NotifyCmdStatus+0x22>
+ {
+ if(StatusNotCallBackFunction != 0)
+ 8005ea8: 4b0a ldr r3, [pc, #40] @ (8005ed4 <NotifyCmdStatus+0x3c>)
+ 8005eaa: 681b ldr r3, [r3, #0]
+ 8005eac: 2b00 cmp r3, #0
+ 8005eae: d00d beq.n 8005ecc <NotifyCmdStatus+0x34>
+ {
+ StatusNotCallBackFunction(HCI_TL_CmdBusy);
+ 8005eb0: 4b08 ldr r3, [pc, #32] @ (8005ed4 <NotifyCmdStatus+0x3c>)
+ 8005eb2: 681b ldr r3, [r3, #0]
+ 8005eb4: 2000 movs r0, #0
+ 8005eb6: 4798 blx r3
+ {
+ StatusNotCallBackFunction(HCI_TL_CmdAvailable);
+ }
+ }
+
+ return;
+ 8005eb8: e008 b.n 8005ecc <NotifyCmdStatus+0x34>
+ if(StatusNotCallBackFunction != 0)
+ 8005eba: 4b06 ldr r3, [pc, #24] @ (8005ed4 <NotifyCmdStatus+0x3c>)
+ 8005ebc: 681b ldr r3, [r3, #0]
+ 8005ebe: 2b00 cmp r3, #0
+ 8005ec0: d004 beq.n 8005ecc <NotifyCmdStatus+0x34>
+ StatusNotCallBackFunction(HCI_TL_CmdAvailable);
+ 8005ec2: 4b04 ldr r3, [pc, #16] @ (8005ed4 <NotifyCmdStatus+0x3c>)
+ 8005ec4: 681b ldr r3, [r3, #0]
+ 8005ec6: 2001 movs r0, #1
+ 8005ec8: 4798 blx r3
+ return;
+ 8005eca: bf00 nop
+ 8005ecc: bf00 nop
+}
+ 8005ece: 3708 adds r7, #8
+ 8005ed0: 46bd mov sp, r7
+ 8005ed2: bd80 pop {r7, pc}
+ 8005ed4: 2000021c .word 0x2000021c
+
+08005ed8 <TlEvtReceived>:
+
+static void TlEvtReceived(TL_EvtPacket_t *hcievt)
+{
+ 8005ed8: b580 push {r7, lr}
+ 8005eda: b082 sub sp, #8
+ 8005edc: af00 add r7, sp, #0
+ 8005ede: 6078 str r0, [r7, #4]
+ if ( ((hcievt->evtserial.evt.evtcode) == TL_BLEEVT_CS_OPCODE) || ((hcievt->evtserial.evt.evtcode) == TL_BLEEVT_CC_OPCODE ) )
+ 8005ee0: 687b ldr r3, [r7, #4]
+ 8005ee2: 7a5b ldrb r3, [r3, #9]
+ 8005ee4: 2b0f cmp r3, #15
+ 8005ee6: d003 beq.n 8005ef0 <TlEvtReceived+0x18>
+ 8005ee8: 687b ldr r3, [r7, #4]
+ 8005eea: 7a5b ldrb r3, [r3, #9]
+ 8005eec: 2b0e cmp r3, #14
+ 8005eee: d107 bne.n 8005f00 <TlEvtReceived+0x28>
+ {
+ LST_insert_tail(&HciCmdEventQueue, (tListNode *)hcievt);
+ 8005ef0: 6879 ldr r1, [r7, #4]
+ 8005ef2: 4809 ldr r0, [pc, #36] @ (8005f18 <TlEvtReceived+0x40>)
+ 8005ef4: f000 fc34 bl 8006760 <LST_insert_tail>
+ hci_cmd_resp_release(0); /**< Notify the application a full Cmd Event has been received */
+ 8005ef8: 2000 movs r0, #0
+ 8005efa: f000 ffbc bl 8006e76 <hci_cmd_resp_release>
+ 8005efe: e006 b.n 8005f0e <TlEvtReceived+0x36>
+ }
+ else
+ {
+ LST_insert_tail(&HciAsynchEventQueue, (tListNode *)hcievt);
+ 8005f00: 6879 ldr r1, [r7, #4]
+ 8005f02: 4806 ldr r0, [pc, #24] @ (8005f1c <TlEvtReceived+0x44>)
+ 8005f04: f000 fc2c bl 8006760 <LST_insert_tail>
+ hci_notify_asynch_evt((void*) &HciAsynchEventQueue); /**< Notify the application a full HCI event has been received */
+ 8005f08: 4804 ldr r0, [pc, #16] @ (8005f1c <TlEvtReceived+0x44>)
+ 8005f0a: f000 ffa8 bl 8006e5e <hci_notify_asynch_evt>
+ }
+
+ return;
+ 8005f0e: bf00 nop
+}
+ 8005f10: 3708 adds r7, #8
+ 8005f12: 46bd mov sp, r7
+ 8005f14: bd80 pop {r7, pc}
+ 8005f16: bf00 nop
+ 8005f18: 20000214 .word 0x20000214
+ 8005f1c: 2000005c .word 0x2000005c
+
+08005f20 <hci_register_io_bus>:
+#include "hci_tl.h"
+#include "tl.h"
+
+
+void hci_register_io_bus(tHciIO* fops)
+{
+ 8005f20: b480 push {r7}
+ 8005f22: b083 sub sp, #12
+ 8005f24: af00 add r7, sp, #0
+ 8005f26: 6078 str r0, [r7, #4]
+ /* Register IO bus services */
+ fops->Init = TL_BLE_Init;
+ 8005f28: 687b ldr r3, [r7, #4]
+ 8005f2a: 4a05 ldr r2, [pc, #20] @ (8005f40 <hci_register_io_bus+0x20>)
+ 8005f2c: 601a str r2, [r3, #0]
+ fops->Send = TL_BLE_SendCmd;
+ 8005f2e: 687b ldr r3, [r7, #4]
+ 8005f30: 4a04 ldr r2, [pc, #16] @ (8005f44 <hci_register_io_bus+0x24>)
+ 8005f32: 611a str r2, [r3, #16]
+
+ return;
+ 8005f34: bf00 nop
+}
+ 8005f36: 370c adds r7, #12
+ 8005f38: 46bd mov sp, r7
+ 8005f3a: f85d 7b04 ldr.w r7, [sp], #4
+ 8005f3e: 4770 bx lr
+ 8005f40: 08006239 .word 0x08006239
+ 8005f44: 080062a1 .word 0x080062a1
+
+08005f48 <shci_init>:
+static void TlUserEvtReceived(TL_EvtPacket_t *shcievt);
+static void TlInit( TL_CmdPacket_t * p_cmdbuffer );
+
+/* Interface ------- ---------------------------------------------------------*/
+void shci_init(void(* UserEvtRx)(void* pData), void* pConf)
+{
+ 8005f48: b580 push {r7, lr}
+ 8005f4a: b082 sub sp, #8
+ 8005f4c: af00 add r7, sp, #0
+ 8005f4e: 6078 str r0, [r7, #4]
+ 8005f50: 6039 str r1, [r7, #0]
+ StatusNotCallBackFunction = ((SHCI_TL_HciInitConf_t *)pConf)->StatusNotCallBack;
+ 8005f52: 683b ldr r3, [r7, #0]
+ 8005f54: 685b ldr r3, [r3, #4]
+ 8005f56: 4a08 ldr r2, [pc, #32] @ (8005f78 <shci_init+0x30>)
+ 8005f58: 6013 str r3, [r2, #0]
+ shciContext.UserEvtRx = UserEvtRx;
+ 8005f5a: 4a08 ldr r2, [pc, #32] @ (8005f7c <shci_init+0x34>)
+ 8005f5c: 687b ldr r3, [r7, #4]
+ 8005f5e: 61d3 str r3, [r2, #28]
+
+ shci_register_io_bus (&shciContext.io);
+ 8005f60: 4806 ldr r0, [pc, #24] @ (8005f7c <shci_init+0x34>)
+ 8005f62: f000 f915 bl 8006190 <shci_register_io_bus>
+
+ TlInit((TL_CmdPacket_t *)(((SHCI_TL_HciInitConf_t *)pConf)->p_cmdbuffer));
+ 8005f66: 683b ldr r3, [r7, #0]
+ 8005f68: 681b ldr r3, [r3, #0]
+ 8005f6a: 4618 mov r0, r3
+ 8005f6c: f000 f898 bl 80060a0 <TlInit>
+
+ return;
+ 8005f70: bf00 nop
+}
+ 8005f72: 3708 adds r7, #8
+ 8005f74: 46bd mov sp, r7
+ 8005f76: bd80 pop {r7, pc}
+ 8005f78: 20000244 .word 0x20000244
+ 8005f7c: 20000224 .word 0x20000224
+
+08005f80 <shci_user_evt_proc>:
+
+void shci_user_evt_proc(void)
+{
+ 8005f80: b580 push {r7, lr}
+ 8005f82: b084 sub sp, #16
+ 8005f84: af00 add r7, sp, #0
+
+ /**
+ * It is more secure to use LST_remove_head()/LST_insert_head() compare to LST_get_next_node()/LST_remove_node()
+ * in case the user overwrite the header where the next/prev pointers are located
+ */
+ if((LST_is_empty(&SHciAsynchEventQueue) == FALSE) && (SHCI_TL_UserEventFlow != SHCI_TL_UserEventFlow_Disable))
+ 8005f86: 4822 ldr r0, [pc, #136] @ (8006010 <shci_user_evt_proc+0x90>)
+ 8005f88: f000 fba2 bl 80066d0 <LST_is_empty>
+ 8005f8c: 4603 mov r3, r0
+ 8005f8e: 2b00 cmp r3, #0
+ 8005f90: d12b bne.n 8005fea <shci_user_evt_proc+0x6a>
+ 8005f92: 4b20 ldr r3, [pc, #128] @ (8006014 <shci_user_evt_proc+0x94>)
+ 8005f94: 781b ldrb r3, [r3, #0]
+ 8005f96: 2b00 cmp r3, #0
+ 8005f98: d027 beq.n 8005fea <shci_user_evt_proc+0x6a>
+ {
+ LST_remove_head ( &SHciAsynchEventQueue, (tListNode **)&phcievtbuffer );
+ 8005f9a: f107 030c add.w r3, r7, #12
+ 8005f9e: 4619 mov r1, r3
+ 8005fa0: 481b ldr r0, [pc, #108] @ (8006010 <shci_user_evt_proc+0x90>)
+ 8005fa2: f000 fc24 bl 80067ee <LST_remove_head>
+
+ if (shciContext.UserEvtRx != NULL)
+ 8005fa6: 4b1c ldr r3, [pc, #112] @ (8006018 <shci_user_evt_proc+0x98>)
+ 8005fa8: 69db ldr r3, [r3, #28]
+ 8005faa: 2b00 cmp r3, #0
+ 8005fac: d00c beq.n 8005fc8 <shci_user_evt_proc+0x48>
+ {
+ UserEvtRxParam.pckt = phcievtbuffer;
+ 8005fae: 68fb ldr r3, [r7, #12]
+ 8005fb0: 60bb str r3, [r7, #8]
+ UserEvtRxParam.status = SHCI_TL_UserEventFlow_Enable;
+ 8005fb2: 2301 movs r3, #1
+ 8005fb4: 713b strb r3, [r7, #4]
+ shciContext.UserEvtRx((void *)&UserEvtRxParam);
+ 8005fb6: 4b18 ldr r3, [pc, #96] @ (8006018 <shci_user_evt_proc+0x98>)
+ 8005fb8: 69db ldr r3, [r3, #28]
+ 8005fba: 1d3a adds r2, r7, #4
+ 8005fbc: 4610 mov r0, r2
+ 8005fbe: 4798 blx r3
+ SHCI_TL_UserEventFlow = UserEvtRxParam.status;
+ 8005fc0: 793a ldrb r2, [r7, #4]
+ 8005fc2: 4b14 ldr r3, [pc, #80] @ (8006014 <shci_user_evt_proc+0x94>)
+ 8005fc4: 701a strb r2, [r3, #0]
+ 8005fc6: e002 b.n 8005fce <shci_user_evt_proc+0x4e>
+ }
+ else
+ {
+ SHCI_TL_UserEventFlow = SHCI_TL_UserEventFlow_Enable;
+ 8005fc8: 4b12 ldr r3, [pc, #72] @ (8006014 <shci_user_evt_proc+0x94>)
+ 8005fca: 2201 movs r2, #1
+ 8005fcc: 701a strb r2, [r3, #0]
+ }
+
+ if(SHCI_TL_UserEventFlow != SHCI_TL_UserEventFlow_Disable)
+ 8005fce: 4b11 ldr r3, [pc, #68] @ (8006014 <shci_user_evt_proc+0x94>)
+ 8005fd0: 781b ldrb r3, [r3, #0]
+ 8005fd2: 2b00 cmp r3, #0
+ 8005fd4: d004 beq.n 8005fe0 <shci_user_evt_proc+0x60>
+ {
+ TL_MM_EvtDone( phcievtbuffer );
+ 8005fd6: 68fb ldr r3, [r7, #12]
+ 8005fd8: 4618 mov r0, r3
+ 8005fda: f000 fa75 bl 80064c8 <TL_MM_EvtDone>
+ 8005fde: e004 b.n 8005fea <shci_user_evt_proc+0x6a>
+ else
+ {
+ /**
+ * put back the event in the queue
+ */
+ LST_insert_head ( &SHciAsynchEventQueue, (tListNode *)phcievtbuffer );
+ 8005fe0: 68fb ldr r3, [r7, #12]
+ 8005fe2: 4619 mov r1, r3
+ 8005fe4: 480a ldr r0, [pc, #40] @ (8006010 <shci_user_evt_proc+0x90>)
+ 8005fe6: f000 fb95 bl 8006714 <LST_insert_head>
+ }
+ }
+
+ if((LST_is_empty(&SHciAsynchEventQueue) == FALSE) && (SHCI_TL_UserEventFlow != SHCI_TL_UserEventFlow_Disable))
+ 8005fea: 4809 ldr r0, [pc, #36] @ (8006010 <shci_user_evt_proc+0x90>)
+ 8005fec: f000 fb70 bl 80066d0 <LST_is_empty>
+ 8005ff0: 4603 mov r3, r0
+ 8005ff2: 2b00 cmp r3, #0
+ 8005ff4: d107 bne.n 8006006 <shci_user_evt_proc+0x86>
+ 8005ff6: 4b07 ldr r3, [pc, #28] @ (8006014 <shci_user_evt_proc+0x94>)
+ 8005ff8: 781b ldrb r3, [r3, #0]
+ 8005ffa: 2b00 cmp r3, #0
+ 8005ffc: d003 beq.n 8006006 <shci_user_evt_proc+0x86>
+ {
+ shci_notify_asynch_evt((void*) &SHciAsynchEventQueue);
+ 8005ffe: 4804 ldr r0, [pc, #16] @ (8006010 <shci_user_evt_proc+0x90>)
+ 8006000: f7fa fb07 bl 8000612 <shci_notify_asynch_evt>
+ }
+
+
+ return;
+ 8006004: bf00 nop
+ 8006006: bf00 nop
+}
+ 8006008: 3710 adds r7, #16
+ 800600a: 46bd mov sp, r7
+ 800600c: bd80 pop {r7, pc}
+ 800600e: bf00 nop
+ 8006010: 2000006c .word 0x2000006c
+ 8006014: 2000007c .word 0x2000007c
+ 8006018: 20000224 .word 0x20000224
+
+0800601c <shci_send>:
+
+ return;
+}
+
+void shci_send( uint16_t cmd_code, uint8_t len_cmd_payload, uint8_t * p_cmd_payload, TL_EvtPacket_t * p_rsp )
+{
+ 800601c: b580 push {r7, lr}
+ 800601e: b084 sub sp, #16
+ 8006020: af00 add r7, sp, #0
+ 8006022: 60ba str r2, [r7, #8]
+ 8006024: 607b str r3, [r7, #4]
+ 8006026: 4603 mov r3, r0
+ 8006028: 81fb strh r3, [r7, #14]
+ 800602a: 460b mov r3, r1
+ 800602c: 737b strb r3, [r7, #13]
+ Cmd_SetStatus(SHCI_TL_CmdBusy);
+ 800602e: 2000 movs r0, #0
+ 8006030: f000 f868 bl 8006104 <Cmd_SetStatus>
+
+ pCmdBuffer->cmdserial.cmd.cmdcode = cmd_code;
+ 8006034: 4b17 ldr r3, [pc, #92] @ (8006094 <shci_send+0x78>)
+ 8006036: 681b ldr r3, [r3, #0]
+ 8006038: 89fa ldrh r2, [r7, #14]
+ 800603a: f8a3 2009 strh.w r2, [r3, #9]
+ pCmdBuffer->cmdserial.cmd.plen = len_cmd_payload;
+ 800603e: 4b15 ldr r3, [pc, #84] @ (8006094 <shci_send+0x78>)
+ 8006040: 681b ldr r3, [r3, #0]
+ 8006042: 7b7a ldrb r2, [r7, #13]
+ 8006044: 72da strb r2, [r3, #11]
+
+ memcpy(pCmdBuffer->cmdserial.cmd.payload, p_cmd_payload, len_cmd_payload );
+ 8006046: 4b13 ldr r3, [pc, #76] @ (8006094 <shci_send+0x78>)
+ 8006048: 681b ldr r3, [r3, #0]
+ 800604a: 330c adds r3, #12
+ 800604c: 7b7a ldrb r2, [r7, #13]
+ 800604e: 68b9 ldr r1, [r7, #8]
+ 8006050: 4618 mov r0, r3
+ 8006052: f001 fd95 bl 8007b80 <memcpy>
+ CmdRspStatusFlag = SHCI_TL_CMD_RESP_WAIT;
+ 8006056: 4b10 ldr r3, [pc, #64] @ (8006098 <shci_send+0x7c>)
+ 8006058: 2201 movs r2, #1
+ 800605a: 701a strb r2, [r3, #0]
+ shciContext.io.Send(0,0);
+ 800605c: 4b0f ldr r3, [pc, #60] @ (800609c <shci_send+0x80>)
+ 800605e: 691b ldr r3, [r3, #16]
+ 8006060: 2100 movs r1, #0
+ 8006062: 2000 movs r0, #0
+ 8006064: 4798 blx r3
+
+ shci_cmd_resp_wait(SHCI_TL_DEFAULT_TIMEOUT);
+ 8006066: f248 00e8 movw r0, #33000 @ 0x80e8
+ 800606a: f7fa fae9 bl 8000640 <shci_cmd_resp_wait>
+
+ /**
+ * The command complete of a system command does not have the header
+ * It starts immediately with the evtserial field
+ */
+ memcpy( &(p_rsp->evtserial), pCmdBuffer, ((TL_EvtSerial_t*)pCmdBuffer)->evt.plen + TL_EVT_HDR_SIZE );
+ 800606e: 687b ldr r3, [r7, #4]
+ 8006070: f103 0008 add.w r0, r3, #8
+ 8006074: 4b07 ldr r3, [pc, #28] @ (8006094 <shci_send+0x78>)
+ 8006076: 6819 ldr r1, [r3, #0]
+ 8006078: 4b06 ldr r3, [pc, #24] @ (8006094 <shci_send+0x78>)
+ 800607a: 681b ldr r3, [r3, #0]
+ 800607c: 789b ldrb r3, [r3, #2]
+ 800607e: 3303 adds r3, #3
+ 8006080: 461a mov r2, r3
+ 8006082: f001 fd7d bl 8007b80 <memcpy>
+
+ Cmd_SetStatus(SHCI_TL_CmdAvailable);
+ 8006086: 2001 movs r0, #1
+ 8006088: f000 f83c bl 8006104 <Cmd_SetStatus>
+
+ return;
+ 800608c: bf00 nop
+}
+ 800608e: 3710 adds r7, #16
+ 8006090: 46bd mov sp, r7
+ 8006092: bd80 pop {r7, pc}
+ 8006094: 20000078 .word 0x20000078
+ 8006098: 20000248 .word 0x20000248
+ 800609c: 20000224 .word 0x20000224
+
+080060a0 <TlInit>:
+
+/* Private functions ---------------------------------------------------------*/
+static void TlInit( TL_CmdPacket_t * p_cmdbuffer )
+{
+ 80060a0: b580 push {r7, lr}
+ 80060a2: b086 sub sp, #24
+ 80060a4: af00 add r7, sp, #0
+ 80060a6: 6078 str r0, [r7, #4]
+ TL_SYS_InitConf_t Conf;
+
+ pCmdBuffer = p_cmdbuffer;
+ 80060a8: 4a10 ldr r2, [pc, #64] @ (80060ec <TlInit+0x4c>)
+ 80060aa: 687b ldr r3, [r7, #4]
+ 80060ac: 6013 str r3, [r2, #0]
+
+ LST_init_head (&SHciAsynchEventQueue);
+ 80060ae: 4810 ldr r0, [pc, #64] @ (80060f0 <TlInit+0x50>)
+ 80060b0: f000 fafe bl 80066b0 <LST_init_head>
+
+ Cmd_SetStatus(SHCI_TL_CmdAvailable);
+ 80060b4: 2001 movs r0, #1
+ 80060b6: f000 f825 bl 8006104 <Cmd_SetStatus>
+
+ SHCI_TL_UserEventFlow = SHCI_TL_UserEventFlow_Enable;
+ 80060ba: 4b0e ldr r3, [pc, #56] @ (80060f4 <TlInit+0x54>)
+ 80060bc: 2201 movs r2, #1
+ 80060be: 701a strb r2, [r3, #0]
+
+ /* Initialize low level driver */
+ if (shciContext.io.Init)
+ 80060c0: 4b0d ldr r3, [pc, #52] @ (80060f8 <TlInit+0x58>)
+ 80060c2: 681b ldr r3, [r3, #0]
+ 80060c4: 2b00 cmp r3, #0
+ 80060c6: d00c beq.n 80060e2 <TlInit+0x42>
+ {
+
+ Conf.p_cmdbuffer = (uint8_t *)p_cmdbuffer;
+ 80060c8: 687b ldr r3, [r7, #4]
+ 80060ca: 617b str r3, [r7, #20]
+ Conf.IoBusCallBackCmdEvt = TlCmdEvtReceived;
+ 80060cc: 4b0b ldr r3, [pc, #44] @ (80060fc <TlInit+0x5c>)
+ 80060ce: 60fb str r3, [r7, #12]
+ Conf.IoBusCallBackUserEvt = TlUserEvtReceived;
+ 80060d0: 4b0b ldr r3, [pc, #44] @ (8006100 <TlInit+0x60>)
+ 80060d2: 613b str r3, [r7, #16]
+ shciContext.io.Init(&Conf);
+ 80060d4: 4b08 ldr r3, [pc, #32] @ (80060f8 <TlInit+0x58>)
+ 80060d6: 681b ldr r3, [r3, #0]
+ 80060d8: f107 020c add.w r2, r7, #12
+ 80060dc: 4610 mov r0, r2
+ 80060de: 4798 blx r3
+ }
+
+ return;
+ 80060e0: bf00 nop
+ 80060e2: bf00 nop
+}
+ 80060e4: 3718 adds r7, #24
+ 80060e6: 46bd mov sp, r7
+ 80060e8: bd80 pop {r7, pc}
+ 80060ea: bf00 nop
+ 80060ec: 20000078 .word 0x20000078
+ 80060f0: 2000006c .word 0x2000006c
+ 80060f4: 2000007c .word 0x2000007c
+ 80060f8: 20000224 .word 0x20000224
+ 80060fc: 08006155 .word 0x08006155
+ 8006100: 0800616d .word 0x0800616d
+
+08006104 <Cmd_SetStatus>:
+
+static void Cmd_SetStatus(SHCI_TL_CmdStatus_t shcicmdstatus)
+{
+ 8006104: b580 push {r7, lr}
+ 8006106: b082 sub sp, #8
+ 8006108: af00 add r7, sp, #0
+ 800610a: 4603 mov r3, r0
+ 800610c: 71fb strb r3, [r7, #7]
+ if(shcicmdstatus == SHCI_TL_CmdBusy)
+ 800610e: 79fb ldrb r3, [r7, #7]
+ 8006110: 2b00 cmp r3, #0
+ 8006112: d10b bne.n 800612c <Cmd_SetStatus+0x28>
+ {
+ if(StatusNotCallBackFunction != 0)
+ 8006114: 4b0d ldr r3, [pc, #52] @ (800614c <Cmd_SetStatus+0x48>)
+ 8006116: 681b ldr r3, [r3, #0]
+ 8006118: 2b00 cmp r3, #0
+ 800611a: d003 beq.n 8006124 <Cmd_SetStatus+0x20>
+ {
+ StatusNotCallBackFunction( SHCI_TL_CmdBusy );
+ 800611c: 4b0b ldr r3, [pc, #44] @ (800614c <Cmd_SetStatus+0x48>)
+ 800611e: 681b ldr r3, [r3, #0]
+ 8006120: 2000 movs r0, #0
+ 8006122: 4798 blx r3
+ }
+ SHCICmdStatus = SHCI_TL_CmdBusy;
+ 8006124: 4b0a ldr r3, [pc, #40] @ (8006150 <Cmd_SetStatus+0x4c>)
+ 8006126: 2200 movs r2, #0
+ 8006128: 701a strb r2, [r3, #0]
+ {
+ StatusNotCallBackFunction( SHCI_TL_CmdAvailable );
+ }
+ }
+
+ return;
+ 800612a: e00b b.n 8006144 <Cmd_SetStatus+0x40>
+ SHCICmdStatus = SHCI_TL_CmdAvailable;
+ 800612c: 4b08 ldr r3, [pc, #32] @ (8006150 <Cmd_SetStatus+0x4c>)
+ 800612e: 2201 movs r2, #1
+ 8006130: 701a strb r2, [r3, #0]
+ if(StatusNotCallBackFunction != 0)
+ 8006132: 4b06 ldr r3, [pc, #24] @ (800614c <Cmd_SetStatus+0x48>)
+ 8006134: 681b ldr r3, [r3, #0]
+ 8006136: 2b00 cmp r3, #0
+ 8006138: d004 beq.n 8006144 <Cmd_SetStatus+0x40>
+ StatusNotCallBackFunction( SHCI_TL_CmdAvailable );
+ 800613a: 4b04 ldr r3, [pc, #16] @ (800614c <Cmd_SetStatus+0x48>)
+ 800613c: 681b ldr r3, [r3, #0]
+ 800613e: 2001 movs r0, #1
+ 8006140: 4798 blx r3
+ return;
+ 8006142: bf00 nop
+ 8006144: bf00 nop
+}
+ 8006146: 3708 adds r7, #8
+ 8006148: 46bd mov sp, r7
+ 800614a: bd80 pop {r7, pc}
+ 800614c: 20000244 .word 0x20000244
+ 8006150: 20000074 .word 0x20000074
+
+08006154 <TlCmdEvtReceived>:
+
+static void TlCmdEvtReceived(TL_EvtPacket_t *shcievt)
+{
+ 8006154: b580 push {r7, lr}
+ 8006156: b082 sub sp, #8
+ 8006158: af00 add r7, sp, #0
+ 800615a: 6078 str r0, [r7, #4]
+ (void)(shcievt);
+ shci_cmd_resp_release(0); /**< Notify the application the Cmd response has been received */
+ 800615c: 2000 movs r0, #0
+ 800615e: f7fa fa64 bl 800062a <shci_cmd_resp_release>
+
+ return;
+ 8006162: bf00 nop
+}
+ 8006164: 3708 adds r7, #8
+ 8006166: 46bd mov sp, r7
+ 8006168: bd80 pop {r7, pc}
+ ...
+
+0800616c <TlUserEvtReceived>:
+
+static void TlUserEvtReceived(TL_EvtPacket_t *shcievt)
+{
+ 800616c: b580 push {r7, lr}
+ 800616e: b082 sub sp, #8
+ 8006170: af00 add r7, sp, #0
+ 8006172: 6078 str r0, [r7, #4]
+ LST_insert_tail(&SHciAsynchEventQueue, (tListNode *)shcievt);
+ 8006174: 6879 ldr r1, [r7, #4]
+ 8006176: 4805 ldr r0, [pc, #20] @ (800618c <TlUserEvtReceived+0x20>)
+ 8006178: f000 faf2 bl 8006760 <LST_insert_tail>
+ shci_notify_asynch_evt((void*) &SHciAsynchEventQueue); /**< Notify the application a full HCI event has been received */
+ 800617c: 4803 ldr r0, [pc, #12] @ (800618c <TlUserEvtReceived+0x20>)
+ 800617e: f7fa fa48 bl 8000612 <shci_notify_asynch_evt>
+
+ return;
+ 8006182: bf00 nop
+}
+ 8006184: 3708 adds r7, #8
+ 8006186: 46bd mov sp, r7
+ 8006188: bd80 pop {r7, pc}
+ 800618a: bf00 nop
+ 800618c: 2000006c .word 0x2000006c
+
+08006190 <shci_register_io_bus>:
+#include "shci_tl.h"
+#include "tl.h"
+
+
+void shci_register_io_bus(tSHciIO* fops)
+{
+ 8006190: b480 push {r7}
+ 8006192: b083 sub sp, #12
+ 8006194: af00 add r7, sp, #0
+ 8006196: 6078 str r0, [r7, #4]
+ /* Register IO bus services */
+ fops->Init = TL_SYS_Init;
+ 8006198: 687b ldr r3, [r7, #4]
+ 800619a: 4a05 ldr r2, [pc, #20] @ (80061b0 <shci_register_io_bus+0x20>)
+ 800619c: 601a str r2, [r3, #0]
+ fops->Send = TL_SYS_SendCmd;
+ 800619e: 687b ldr r3, [r7, #4]
+ 80061a0: 4a04 ldr r2, [pc, #16] @ (80061b4 <shci_register_io_bus+0x24>)
+ 80061a2: 611a str r2, [r3, #16]
+
+ return;
+ 80061a4: bf00 nop
+}
+ 80061a6: 370c adds r7, #12
+ 80061a8: 46bd mov sp, r7
+ 80061aa: f85d 7b04 ldr.w r7, [sp], #4
+ 80061ae: 4770 bx lr
+ 80061b0: 08006355 .word 0x08006355
+ 80061b4: 080063a9 .word 0x080063a9
+
+080061b8 <TL_Enable>:
+
+/******************************************************************************
+ * GENERAL - refer to AN5289 for functions description.
+ ******************************************************************************/
+void TL_Enable( void )
+{
+ 80061b8: b580 push {r7, lr}
+ 80061ba: af00 add r7, sp, #0
+ HW_IPCC_Enable();
+ 80061bc: f001 f856 bl 800726c <HW_IPCC_Enable>
+
+ return;
+ 80061c0: bf00 nop
+}
+ 80061c2: bd80 pop {r7, pc}
+
+080061c4 <TL_Init>:
+
+
+void TL_Init( void )
+{
+ 80061c4: b580 push {r7, lr}
+ 80061c6: af00 add r7, sp, #0
+ TL_RefTable.p_device_info_table = &TL_DeviceInfoTable;
+ 80061c8: 4b10 ldr r3, [pc, #64] @ (800620c <TL_Init+0x48>)
+ 80061ca: 4a11 ldr r2, [pc, #68] @ (8006210 <TL_Init+0x4c>)
+ 80061cc: 601a str r2, [r3, #0]
+ TL_RefTable.p_ble_table = &TL_BleTable;
+ 80061ce: 4b0f ldr r3, [pc, #60] @ (800620c <TL_Init+0x48>)
+ 80061d0: 4a10 ldr r2, [pc, #64] @ (8006214 <TL_Init+0x50>)
+ 80061d2: 605a str r2, [r3, #4]
+ TL_RefTable.p_thread_table = &TL_ThreadTable;
+ 80061d4: 4b0d ldr r3, [pc, #52] @ (800620c <TL_Init+0x48>)
+ 80061d6: 4a10 ldr r2, [pc, #64] @ (8006218 <TL_Init+0x54>)
+ 80061d8: 609a str r2, [r3, #8]
+ TL_RefTable.p_lld_tests_table = &TL_LldTestsTable;
+ 80061da: 4b0c ldr r3, [pc, #48] @ (800620c <TL_Init+0x48>)
+ 80061dc: 4a0f ldr r2, [pc, #60] @ (800621c <TL_Init+0x58>)
+ 80061de: 621a str r2, [r3, #32]
+ TL_RefTable.p_ble_lld_table = &TL_BleLldTable;
+ 80061e0: 4b0a ldr r3, [pc, #40] @ (800620c <TL_Init+0x48>)
+ 80061e2: 4a0f ldr r2, [pc, #60] @ (8006220 <TL_Init+0x5c>)
+ 80061e4: 625a str r2, [r3, #36] @ 0x24
+ TL_RefTable.p_sys_table = &TL_SysTable;
+ 80061e6: 4b09 ldr r3, [pc, #36] @ (800620c <TL_Init+0x48>)
+ 80061e8: 4a0e ldr r2, [pc, #56] @ (8006224 <TL_Init+0x60>)
+ 80061ea: 60da str r2, [r3, #12]
+ TL_RefTable.p_mem_manager_table = &TL_MemManagerTable;
+ 80061ec: 4b07 ldr r3, [pc, #28] @ (800620c <TL_Init+0x48>)
+ 80061ee: 4a0e ldr r2, [pc, #56] @ (8006228 <TL_Init+0x64>)
+ 80061f0: 611a str r2, [r3, #16]
+ TL_RefTable.p_traces_table = &TL_TracesTable;
+ 80061f2: 4b06 ldr r3, [pc, #24] @ (800620c <TL_Init+0x48>)
+ 80061f4: 4a0d ldr r2, [pc, #52] @ (800622c <TL_Init+0x68>)
+ 80061f6: 615a str r2, [r3, #20]
+ TL_RefTable.p_mac_802_15_4_table = &TL_Mac_802_15_4_Table;
+ 80061f8: 4b04 ldr r3, [pc, #16] @ (800620c <TL_Init+0x48>)
+ 80061fa: 4a0d ldr r2, [pc, #52] @ (8006230 <TL_Init+0x6c>)
+ 80061fc: 619a str r2, [r3, #24]
+ TL_RefTable.p_zigbee_table = &TL_Zigbee_Table;
+ 80061fe: 4b03 ldr r3, [pc, #12] @ (800620c <TL_Init+0x48>)
+ 8006200: 4a0c ldr r2, [pc, #48] @ (8006234 <TL_Init+0x70>)
+ 8006202: 61da str r2, [r3, #28]
+ HW_IPCC_Init();
+ 8006204: f001 f846 bl 8007294 <HW_IPCC_Init>
+
+ return;
+ 8006208: bf00 nop
+}
+ 800620a: bd80 pop {r7, pc}
+ 800620c: 20030000 .word 0x20030000
+ 8006210: 20030028 .word 0x20030028
+ 8006214: 20030048 .word 0x20030048
+ 8006218: 20030058 .word 0x20030058
+ 800621c: 20030068 .word 0x20030068
+ 8006220: 20030070 .word 0x20030070
+ 8006224: 20030078 .word 0x20030078
+ 8006228: 20030080 .word 0x20030080
+ 800622c: 2003009c .word 0x2003009c
+ 8006230: 200300a0 .word 0x200300a0
+ 8006234: 200300ac .word 0x200300ac
+
+08006238 <TL_BLE_Init>:
+
+/******************************************************************************
+ * BLE
+ ******************************************************************************/
+int32_t TL_BLE_Init( void* pConf )
+{
+ 8006238: b580 push {r7, lr}
+ 800623a: b084 sub sp, #16
+ 800623c: af00 add r7, sp, #0
+ 800623e: 6078 str r0, [r7, #4]
+ MB_BleTable_t * p_bletable;
+
+ TL_BLE_InitConf_t *pInitHciConf = (TL_BLE_InitConf_t *) pConf;
+ 8006240: 687b ldr r3, [r7, #4]
+ 8006242: 60fb str r3, [r7, #12]
+
+ LST_init_head (&EvtQueue);
+ 8006244: 4811 ldr r0, [pc, #68] @ (800628c <TL_BLE_Init+0x54>)
+ 8006246: f000 fa33 bl 80066b0 <LST_init_head>
+
+ p_bletable = TL_RefTable.p_ble_table;
+ 800624a: 4b11 ldr r3, [pc, #68] @ (8006290 <TL_BLE_Init+0x58>)
+ 800624c: 685b ldr r3, [r3, #4]
+ 800624e: 60bb str r3, [r7, #8]
+
+ p_bletable->pcmd_buffer = pInitHciConf->p_cmdbuffer;
+ 8006250: 68fb ldr r3, [r7, #12]
+ 8006252: 689a ldr r2, [r3, #8]
+ 8006254: 68bb ldr r3, [r7, #8]
+ 8006256: 601a str r2, [r3, #0]
+ p_bletable->phci_acl_data_buffer = pInitHciConf->p_AclDataBuffer;
+ 8006258: 68fb ldr r3, [r7, #12]
+ 800625a: 68da ldr r2, [r3, #12]
+ 800625c: 68bb ldr r3, [r7, #8]
+ 800625e: 60da str r2, [r3, #12]
+ p_bletable->pcs_buffer = (uint8_t*)CsBuffer;
+ 8006260: 68bb ldr r3, [r7, #8]
+ 8006262: 4a0c ldr r2, [pc, #48] @ (8006294 <TL_BLE_Init+0x5c>)
+ 8006264: 605a str r2, [r3, #4]
+ p_bletable->pevt_queue = (uint8_t*)&EvtQueue;
+ 8006266: 68bb ldr r3, [r7, #8]
+ 8006268: 4a08 ldr r2, [pc, #32] @ (800628c <TL_BLE_Init+0x54>)
+ 800626a: 609a str r2, [r3, #8]
+
+ HW_IPCC_BLE_Init();
+ 800626c: f001 f828 bl 80072c0 <HW_IPCC_BLE_Init>
+
+ BLE_IoBusEvtCallBackFunction = pInitHciConf->IoBusEvtCallBack;
+ 8006270: 68fb ldr r3, [r7, #12]
+ 8006272: 681b ldr r3, [r3, #0]
+ 8006274: 4a08 ldr r2, [pc, #32] @ (8006298 <TL_BLE_Init+0x60>)
+ 8006276: 6013 str r3, [r2, #0]
+ BLE_IoBusAclDataTxAck = pInitHciConf->IoBusAclDataTxAck;
+ 8006278: 68fb ldr r3, [r7, #12]
+ 800627a: 685b ldr r3, [r3, #4]
+ 800627c: 4a07 ldr r2, [pc, #28] @ (800629c <TL_BLE_Init+0x64>)
+ 800627e: 6013 str r3, [r2, #0]
+
+ return 0;
+ 8006280: 2300 movs r3, #0
+}
+ 8006282: 4618 mov r0, r3
+ 8006284: 3710 adds r7, #16
+ 8006286: 46bd mov sp, r7
+ 8006288: bd80 pop {r7, pc}
+ 800628a: bf00 nop
+ 800628c: 200300c8 .word 0x200300c8
+ 8006290: 20030000 .word 0x20030000
+ 8006294: 20030a58 .word 0x20030a58
+ 8006298: 20000254 .word 0x20000254
+ 800629c: 20000258 .word 0x20000258
+
+080062a0 <TL_BLE_SendCmd>:
+
+int32_t TL_BLE_SendCmd( uint8_t* buffer, uint16_t size )
+{
+ 80062a0: b580 push {r7, lr}
+ 80062a2: b082 sub sp, #8
+ 80062a4: af00 add r7, sp, #0
+ 80062a6: 6078 str r0, [r7, #4]
+ 80062a8: 460b mov r3, r1
+ 80062aa: 807b strh r3, [r7, #2]
+ (void)(buffer);
+ (void)(size);
+
+ ((TL_CmdPacket_t*)(TL_RefTable.p_ble_table->pcmd_buffer))->cmdserial.type = TL_BLECMD_PKT_TYPE;
+ 80062ac: 4b09 ldr r3, [pc, #36] @ (80062d4 <TL_BLE_SendCmd+0x34>)
+ 80062ae: 685b ldr r3, [r3, #4]
+ 80062b0: 681b ldr r3, [r3, #0]
+ 80062b2: 2201 movs r2, #1
+ 80062b4: 721a strb r2, [r3, #8]
+
+ OutputDbgTrace(TL_MB_BLE_CMD, TL_RefTable.p_ble_table->pcmd_buffer);
+ 80062b6: 4b07 ldr r3, [pc, #28] @ (80062d4 <TL_BLE_SendCmd+0x34>)
+ 80062b8: 685b ldr r3, [r3, #4]
+ 80062ba: 681b ldr r3, [r3, #0]
+ 80062bc: 4619 mov r1, r3
+ 80062be: 2001 movs r0, #1
+ 80062c0: f000 f970 bl 80065a4 <OutputDbgTrace>
+
+ HW_IPCC_BLE_SendCmd();
+ 80062c4: f001 f816 bl 80072f4 <HW_IPCC_BLE_SendCmd>
+
+ return 0;
+ 80062c8: 2300 movs r3, #0
+}
+ 80062ca: 4618 mov r0, r3
+ 80062cc: 3708 adds r7, #8
+ 80062ce: 46bd mov sp, r7
+ 80062d0: bd80 pop {r7, pc}
+ 80062d2: bf00 nop
+ 80062d4: 20030000 .word 0x20030000
+
+080062d8 <HW_IPCC_BLE_RxEvtNot>:
+
+void HW_IPCC_BLE_RxEvtNot(void)
+{
+ 80062d8: b580 push {r7, lr}
+ 80062da: b082 sub sp, #8
+ 80062dc: af00 add r7, sp, #0
+ TL_EvtPacket_t *phcievt;
+
+ while(LST_is_empty(&EvtQueue) == FALSE)
+ 80062de: e01c b.n 800631a <HW_IPCC_BLE_RxEvtNot+0x42>
+ {
+ LST_remove_head (&EvtQueue, (tListNode **)&phcievt);
+ 80062e0: 1d3b adds r3, r7, #4
+ 80062e2: 4619 mov r1, r3
+ 80062e4: 4812 ldr r0, [pc, #72] @ (8006330 <HW_IPCC_BLE_RxEvtNot+0x58>)
+ 80062e6: f000 fa82 bl 80067ee <LST_remove_head>
+
+ if ( ((phcievt->evtserial.evt.evtcode) == TL_BLEEVT_CS_OPCODE) || ((phcievt->evtserial.evt.evtcode) == TL_BLEEVT_CC_OPCODE ) )
+ 80062ea: 687b ldr r3, [r7, #4]
+ 80062ec: 7a5b ldrb r3, [r3, #9]
+ 80062ee: 2b0f cmp r3, #15
+ 80062f0: d003 beq.n 80062fa <HW_IPCC_BLE_RxEvtNot+0x22>
+ 80062f2: 687b ldr r3, [r7, #4]
+ 80062f4: 7a5b ldrb r3, [r3, #9]
+ 80062f6: 2b0e cmp r3, #14
+ 80062f8: d105 bne.n 8006306 <HW_IPCC_BLE_RxEvtNot+0x2e>
+ {
+ OutputDbgTrace(TL_MB_BLE_CMD_RSP, (uint8_t*)phcievt);
+ 80062fa: 687b ldr r3, [r7, #4]
+ 80062fc: 4619 mov r1, r3
+ 80062fe: 2002 movs r0, #2
+ 8006300: f000 f950 bl 80065a4 <OutputDbgTrace>
+ 8006304: e004 b.n 8006310 <HW_IPCC_BLE_RxEvtNot+0x38>
+ }
+ else
+ {
+ OutputDbgTrace(TL_MB_BLE_ASYNCH_EVT, (uint8_t*)phcievt);
+ 8006306: 687b ldr r3, [r7, #4]
+ 8006308: 4619 mov r1, r3
+ 800630a: 2005 movs r0, #5
+ 800630c: f000 f94a bl 80065a4 <OutputDbgTrace>
+ }
+
+ BLE_IoBusEvtCallBackFunction(phcievt);
+ 8006310: 4b08 ldr r3, [pc, #32] @ (8006334 <HW_IPCC_BLE_RxEvtNot+0x5c>)
+ 8006312: 681b ldr r3, [r3, #0]
+ 8006314: 687a ldr r2, [r7, #4]
+ 8006316: 4610 mov r0, r2
+ 8006318: 4798 blx r3
+ while(LST_is_empty(&EvtQueue) == FALSE)
+ 800631a: 4805 ldr r0, [pc, #20] @ (8006330 <HW_IPCC_BLE_RxEvtNot+0x58>)
+ 800631c: f000 f9d8 bl 80066d0 <LST_is_empty>
+ 8006320: 4603 mov r3, r0
+ 8006322: 2b00 cmp r3, #0
+ 8006324: d0dc beq.n 80062e0 <HW_IPCC_BLE_RxEvtNot+0x8>
+ }
+
+ return;
+ 8006326: bf00 nop
+}
+ 8006328: 3708 adds r7, #8
+ 800632a: 46bd mov sp, r7
+ 800632c: bd80 pop {r7, pc}
+ 800632e: bf00 nop
+ 8006330: 200300c8 .word 0x200300c8
+ 8006334: 20000254 .word 0x20000254
+
+08006338 <HW_IPCC_BLE_AclDataAckNot>:
+
+ return 0;
+}
+
+void HW_IPCC_BLE_AclDataAckNot(void)
+{
+ 8006338: b580 push {r7, lr}
+ 800633a: af00 add r7, sp, #0
+ OutputDbgTrace(TL_MB_ACL_DATA_RSP, (uint8_t*)NULL);
+ 800633c: 2100 movs r1, #0
+ 800633e: 2004 movs r0, #4
+ 8006340: f000 f930 bl 80065a4 <OutputDbgTrace>
+
+ BLE_IoBusAclDataTxAck( );
+ 8006344: 4b02 ldr r3, [pc, #8] @ (8006350 <HW_IPCC_BLE_AclDataAckNot+0x18>)
+ 8006346: 681b ldr r3, [r3, #0]
+ 8006348: 4798 blx r3
+
+ return;
+ 800634a: bf00 nop
+}
+ 800634c: bd80 pop {r7, pc}
+ 800634e: bf00 nop
+ 8006350: 20000258 .word 0x20000258
+
+08006354 <TL_SYS_Init>:
+
+/******************************************************************************
+ * SYSTEM
+ ******************************************************************************/
+int32_t TL_SYS_Init( void* pConf )
+{
+ 8006354: b580 push {r7, lr}
+ 8006356: b084 sub sp, #16
+ 8006358: af00 add r7, sp, #0
+ 800635a: 6078 str r0, [r7, #4]
+ MB_SysTable_t * p_systable;
+
+ TL_SYS_InitConf_t *pInitHciConf = (TL_SYS_InitConf_t *) pConf;
+ 800635c: 687b ldr r3, [r7, #4]
+ 800635e: 60fb str r3, [r7, #12]
+
+ LST_init_head (&SystemEvtQueue);
+ 8006360: 480d ldr r0, [pc, #52] @ (8006398 <TL_SYS_Init+0x44>)
+ 8006362: f000 f9a5 bl 80066b0 <LST_init_head>
+ p_systable = TL_RefTable.p_sys_table;
+ 8006366: 4b0d ldr r3, [pc, #52] @ (800639c <TL_SYS_Init+0x48>)
+ 8006368: 68db ldr r3, [r3, #12]
+ 800636a: 60bb str r3, [r7, #8]
+ p_systable->pcmd_buffer = pInitHciConf->p_cmdbuffer;
+ 800636c: 68fb ldr r3, [r7, #12]
+ 800636e: 689a ldr r2, [r3, #8]
+ 8006370: 68bb ldr r3, [r7, #8]
+ 8006372: 601a str r2, [r3, #0]
+ p_systable->sys_queue = (uint8_t*)&SystemEvtQueue;
+ 8006374: 68bb ldr r3, [r7, #8]
+ 8006376: 4a08 ldr r2, [pc, #32] @ (8006398 <TL_SYS_Init+0x44>)
+ 8006378: 605a str r2, [r3, #4]
+
+ HW_IPCC_SYS_Init();
+ 800637a: f000 ffed bl 8007358 <HW_IPCC_SYS_Init>
+
+ SYS_CMD_IoBusCallBackFunction = pInitHciConf->IoBusCallBackCmdEvt;
+ 800637e: 68fb ldr r3, [r7, #12]
+ 8006380: 681b ldr r3, [r3, #0]
+ 8006382: 4a07 ldr r2, [pc, #28] @ (80063a0 <TL_SYS_Init+0x4c>)
+ 8006384: 6013 str r3, [r2, #0]
+ SYS_EVT_IoBusCallBackFunction = pInitHciConf->IoBusCallBackUserEvt;
+ 8006386: 68fb ldr r3, [r7, #12]
+ 8006388: 685b ldr r3, [r3, #4]
+ 800638a: 4a06 ldr r2, [pc, #24] @ (80063a4 <TL_SYS_Init+0x50>)
+ 800638c: 6013 str r3, [r2, #0]
+
+ return 0;
+ 800638e: 2300 movs r3, #0
+}
+ 8006390: 4618 mov r0, r3
+ 8006392: 3710 adds r7, #16
+ 8006394: 46bd mov sp, r7
+ 8006396: bd80 pop {r7, pc}
+ 8006398: 200300d0 .word 0x200300d0
+ 800639c: 20030000 .word 0x20030000
+ 80063a0: 2000025c .word 0x2000025c
+ 80063a4: 20000260 .word 0x20000260
+
+080063a8 <TL_SYS_SendCmd>:
+
+int32_t TL_SYS_SendCmd( uint8_t* buffer, uint16_t size )
+{
+ 80063a8: b580 push {r7, lr}
+ 80063aa: b082 sub sp, #8
+ 80063ac: af00 add r7, sp, #0
+ 80063ae: 6078 str r0, [r7, #4]
+ 80063b0: 460b mov r3, r1
+ 80063b2: 807b strh r3, [r7, #2]
+ (void)(buffer);
+ (void)(size);
+
+ ((TL_CmdPacket_t *)(TL_RefTable.p_sys_table->pcmd_buffer))->cmdserial.type = TL_SYSCMD_PKT_TYPE;
+ 80063b4: 4b09 ldr r3, [pc, #36] @ (80063dc <TL_SYS_SendCmd+0x34>)
+ 80063b6: 68db ldr r3, [r3, #12]
+ 80063b8: 681b ldr r3, [r3, #0]
+ 80063ba: 2210 movs r2, #16
+ 80063bc: 721a strb r2, [r3, #8]
+
+ OutputDbgTrace(TL_MB_SYS_CMD, TL_RefTable.p_sys_table->pcmd_buffer);
+ 80063be: 4b07 ldr r3, [pc, #28] @ (80063dc <TL_SYS_SendCmd+0x34>)
+ 80063c0: 68db ldr r3, [r3, #12]
+ 80063c2: 681b ldr r3, [r3, #0]
+ 80063c4: 4619 mov r1, r3
+ 80063c6: 2006 movs r0, #6
+ 80063c8: f000 f8ec bl 80065a4 <OutputDbgTrace>
+
+ HW_IPCC_SYS_SendCmd();
+ 80063cc: f000 ffde bl 800738c <HW_IPCC_SYS_SendCmd>
+
+ return 0;
+ 80063d0: 2300 movs r3, #0
+}
+ 80063d2: 4618 mov r0, r3
+ 80063d4: 3708 adds r7, #8
+ 80063d6: 46bd mov sp, r7
+ 80063d8: bd80 pop {r7, pc}
+ 80063da: bf00 nop
+ 80063dc: 20030000 .word 0x20030000
+
+080063e0 <HW_IPCC_SYS_CmdEvtNot>:
+
+void HW_IPCC_SYS_CmdEvtNot(void)
+{
+ 80063e0: b580 push {r7, lr}
+ 80063e2: af00 add r7, sp, #0
+ OutputDbgTrace(TL_MB_SYS_CMD_RSP, (uint8_t*)(TL_RefTable.p_sys_table->pcmd_buffer) );
+ 80063e4: 4b07 ldr r3, [pc, #28] @ (8006404 <HW_IPCC_SYS_CmdEvtNot+0x24>)
+ 80063e6: 68db ldr r3, [r3, #12]
+ 80063e8: 681b ldr r3, [r3, #0]
+ 80063ea: 4619 mov r1, r3
+ 80063ec: 2007 movs r0, #7
+ 80063ee: f000 f8d9 bl 80065a4 <OutputDbgTrace>
+
+ SYS_CMD_IoBusCallBackFunction( (TL_EvtPacket_t*)(TL_RefTable.p_sys_table->pcmd_buffer) );
+ 80063f2: 4b05 ldr r3, [pc, #20] @ (8006408 <HW_IPCC_SYS_CmdEvtNot+0x28>)
+ 80063f4: 681b ldr r3, [r3, #0]
+ 80063f6: 4a03 ldr r2, [pc, #12] @ (8006404 <HW_IPCC_SYS_CmdEvtNot+0x24>)
+ 80063f8: 68d2 ldr r2, [r2, #12]
+ 80063fa: 6812 ldr r2, [r2, #0]
+ 80063fc: 4610 mov r0, r2
+ 80063fe: 4798 blx r3
+
+ return;
+ 8006400: bf00 nop
+}
+ 8006402: bd80 pop {r7, pc}
+ 8006404: 20030000 .word 0x20030000
+ 8006408: 2000025c .word 0x2000025c
+
+0800640c <HW_IPCC_SYS_EvtNot>:
+
+void HW_IPCC_SYS_EvtNot( void )
+{
+ 800640c: b580 push {r7, lr}
+ 800640e: b082 sub sp, #8
+ 8006410: af00 add r7, sp, #0
+ TL_EvtPacket_t *p_evt;
+
+ while(LST_is_empty(&SystemEvtQueue) == FALSE)
+ 8006412: e00e b.n 8006432 <HW_IPCC_SYS_EvtNot+0x26>
+ {
+ LST_remove_head (&SystemEvtQueue, (tListNode **)&p_evt);
+ 8006414: 1d3b adds r3, r7, #4
+ 8006416: 4619 mov r1, r3
+ 8006418: 480b ldr r0, [pc, #44] @ (8006448 <HW_IPCC_SYS_EvtNot+0x3c>)
+ 800641a: f000 f9e8 bl 80067ee <LST_remove_head>
+
+ OutputDbgTrace(TL_MB_SYS_ASYNCH_EVT, (uint8_t*)p_evt );
+ 800641e: 687b ldr r3, [r7, #4]
+ 8006420: 4619 mov r1, r3
+ 8006422: 2008 movs r0, #8
+ 8006424: f000 f8be bl 80065a4 <OutputDbgTrace>
+
+ SYS_EVT_IoBusCallBackFunction( p_evt );
+ 8006428: 4b08 ldr r3, [pc, #32] @ (800644c <HW_IPCC_SYS_EvtNot+0x40>)
+ 800642a: 681b ldr r3, [r3, #0]
+ 800642c: 687a ldr r2, [r7, #4]
+ 800642e: 4610 mov r0, r2
+ 8006430: 4798 blx r3
+ while(LST_is_empty(&SystemEvtQueue) == FALSE)
+ 8006432: 4805 ldr r0, [pc, #20] @ (8006448 <HW_IPCC_SYS_EvtNot+0x3c>)
+ 8006434: f000 f94c bl 80066d0 <LST_is_empty>
+ 8006438: 4603 mov r3, r0
+ 800643a: 2b00 cmp r3, #0
+ 800643c: d0ea beq.n 8006414 <HW_IPCC_SYS_EvtNot+0x8>
+ }
+
+ return;
+ 800643e: bf00 nop
+}
+ 8006440: 3708 adds r7, #8
+ 8006442: 46bd mov sp, r7
+ 8006444: bd80 pop {r7, pc}
+ 8006446: bf00 nop
+ 8006448: 200300d0 .word 0x200300d0
+ 800644c: 20000260 .word 0x20000260
+
+08006450 <TL_MM_Init>:
+
+/******************************************************************************
+ * MEMORY MANAGER
+ ******************************************************************************/
+void TL_MM_Init( TL_MM_Config_t *p_Config )
+{
+ 8006450: b580 push {r7, lr}
+ 8006452: b082 sub sp, #8
+ 8006454: af00 add r7, sp, #0
+ 8006456: 6078 str r0, [r7, #4]
+ static MB_MemManagerTable_t * p_mem_manager_table;
+
+ LST_init_head (&FreeBufQueue);
+ 8006458: 4817 ldr r0, [pc, #92] @ (80064b8 <TL_MM_Init+0x68>)
+ 800645a: f000 f929 bl 80066b0 <LST_init_head>
+ LST_init_head (&LocalFreeBufQueue);
+ 800645e: 4817 ldr r0, [pc, #92] @ (80064bc <TL_MM_Init+0x6c>)
+ 8006460: f000 f926 bl 80066b0 <LST_init_head>
+
+ p_mem_manager_table = TL_RefTable.p_mem_manager_table;
+ 8006464: 4b16 ldr r3, [pc, #88] @ (80064c0 <TL_MM_Init+0x70>)
+ 8006466: 691b ldr r3, [r3, #16]
+ 8006468: 4a16 ldr r2, [pc, #88] @ (80064c4 <TL_MM_Init+0x74>)
+ 800646a: 6013 str r3, [r2, #0]
+
+ p_mem_manager_table->blepool = p_Config->p_AsynchEvtPool;
+ 800646c: 4b15 ldr r3, [pc, #84] @ (80064c4 <TL_MM_Init+0x74>)
+ 800646e: 681b ldr r3, [r3, #0]
+ 8006470: 687a ldr r2, [r7, #4]
+ 8006472: 6892 ldr r2, [r2, #8]
+ 8006474: 609a str r2, [r3, #8]
+ p_mem_manager_table->blepoolsize = p_Config->AsynchEvtPoolSize;
+ 8006476: 4b13 ldr r3, [pc, #76] @ (80064c4 <TL_MM_Init+0x74>)
+ 8006478: 681b ldr r3, [r3, #0]
+ 800647a: 687a ldr r2, [r7, #4]
+ 800647c: 68d2 ldr r2, [r2, #12]
+ 800647e: 60da str r2, [r3, #12]
+ p_mem_manager_table->pevt_free_buffer_queue = (uint8_t*)&FreeBufQueue;
+ 8006480: 4b10 ldr r3, [pc, #64] @ (80064c4 <TL_MM_Init+0x74>)
+ 8006482: 681b ldr r3, [r3, #0]
+ 8006484: 4a0c ldr r2, [pc, #48] @ (80064b8 <TL_MM_Init+0x68>)
+ 8006486: 611a str r2, [r3, #16]
+ p_mem_manager_table->spare_ble_buffer = p_Config->p_BleSpareEvtBuffer;
+ 8006488: 4b0e ldr r3, [pc, #56] @ (80064c4 <TL_MM_Init+0x74>)
+ 800648a: 681b ldr r3, [r3, #0]
+ 800648c: 687a ldr r2, [r7, #4]
+ 800648e: 6812 ldr r2, [r2, #0]
+ 8006490: 601a str r2, [r3, #0]
+ p_mem_manager_table->spare_sys_buffer = p_Config->p_SystemSpareEvtBuffer;
+ 8006492: 4b0c ldr r3, [pc, #48] @ (80064c4 <TL_MM_Init+0x74>)
+ 8006494: 681b ldr r3, [r3, #0]
+ 8006496: 687a ldr r2, [r7, #4]
+ 8006498: 6852 ldr r2, [r2, #4]
+ 800649a: 605a str r2, [r3, #4]
+ p_mem_manager_table->traces_evt_pool = p_Config->p_TracesEvtPool;
+ 800649c: 4b09 ldr r3, [pc, #36] @ (80064c4 <TL_MM_Init+0x74>)
+ 800649e: 681b ldr r3, [r3, #0]
+ 80064a0: 687a ldr r2, [r7, #4]
+ 80064a2: 6912 ldr r2, [r2, #16]
+ 80064a4: 615a str r2, [r3, #20]
+ p_mem_manager_table->tracespoolsize = p_Config->TracesEvtPoolSize;
+ 80064a6: 4b07 ldr r3, [pc, #28] @ (80064c4 <TL_MM_Init+0x74>)
+ 80064a8: 681b ldr r3, [r3, #0]
+ 80064aa: 687a ldr r2, [r7, #4]
+ 80064ac: 6952 ldr r2, [r2, #20]
+ 80064ae: 619a str r2, [r3, #24]
+
+ return;
+ 80064b0: bf00 nop
+}
+ 80064b2: 3708 adds r7, #8
+ 80064b4: 46bd mov sp, r7
+ 80064b6: bd80 pop {r7, pc}
+ 80064b8: 200300b8 .word 0x200300b8
+ 80064bc: 2000024c .word 0x2000024c
+ 80064c0: 20030000 .word 0x20030000
+ 80064c4: 20000264 .word 0x20000264
+
+080064c8 <TL_MM_EvtDone>:
+
+void TL_MM_EvtDone(TL_EvtPacket_t * phcievt)
+{
+ 80064c8: b580 push {r7, lr}
+ 80064ca: b082 sub sp, #8
+ 80064cc: af00 add r7, sp, #0
+ 80064ce: 6078 str r0, [r7, #4]
+ LST_insert_tail(&LocalFreeBufQueue, (tListNode *)phcievt);
+ 80064d0: 6879 ldr r1, [r7, #4]
+ 80064d2: 4807 ldr r0, [pc, #28] @ (80064f0 <TL_MM_EvtDone+0x28>)
+ 80064d4: f000 f944 bl 8006760 <LST_insert_tail>
+
+ OutputDbgTrace(TL_MB_MM_RELEASE_BUFFER, (uint8_t*)phcievt);
+ 80064d8: 6879 ldr r1, [r7, #4]
+ 80064da: 2000 movs r0, #0
+ 80064dc: f000 f862 bl 80065a4 <OutputDbgTrace>
+
+ HW_IPCC_MM_SendFreeBuf( SendFreeBuf );
+ 80064e0: 4804 ldr r0, [pc, #16] @ (80064f4 <TL_MM_EvtDone+0x2c>)
+ 80064e2: f000 ff99 bl 8007418 <HW_IPCC_MM_SendFreeBuf>
+
+ return;
+ 80064e6: bf00 nop
+}
+ 80064e8: 3708 adds r7, #8
+ 80064ea: 46bd mov sp, r7
+ 80064ec: bd80 pop {r7, pc}
+ 80064ee: bf00 nop
+ 80064f0: 2000024c .word 0x2000024c
+ 80064f4: 080064f9 .word 0x080064f9
+
+080064f8 <SendFreeBuf>:
+
+static void SendFreeBuf( void )
+{
+ 80064f8: b580 push {r7, lr}
+ 80064fa: b082 sub sp, #8
+ 80064fc: af00 add r7, sp, #0
+ tListNode *p_node;
+
+ while ( FALSE == LST_is_empty (&LocalFreeBufQueue) )
+ 80064fe: e00c b.n 800651a <SendFreeBuf+0x22>
+ {
+ LST_remove_head( &LocalFreeBufQueue, (tListNode **)&p_node );
+ 8006500: 1d3b adds r3, r7, #4
+ 8006502: 4619 mov r1, r3
+ 8006504: 480a ldr r0, [pc, #40] @ (8006530 <SendFreeBuf+0x38>)
+ 8006506: f000 f972 bl 80067ee <LST_remove_head>
+ LST_insert_tail( (tListNode*)(TL_RefTable.p_mem_manager_table->pevt_free_buffer_queue), p_node );
+ 800650a: 4b0a ldr r3, [pc, #40] @ (8006534 <SendFreeBuf+0x3c>)
+ 800650c: 691b ldr r3, [r3, #16]
+ 800650e: 691b ldr r3, [r3, #16]
+ 8006510: 687a ldr r2, [r7, #4]
+ 8006512: 4611 mov r1, r2
+ 8006514: 4618 mov r0, r3
+ 8006516: f000 f923 bl 8006760 <LST_insert_tail>
+ while ( FALSE == LST_is_empty (&LocalFreeBufQueue) )
+ 800651a: 4805 ldr r0, [pc, #20] @ (8006530 <SendFreeBuf+0x38>)
+ 800651c: f000 f8d8 bl 80066d0 <LST_is_empty>
+ 8006520: 4603 mov r3, r0
+ 8006522: 2b00 cmp r3, #0
+ 8006524: d0ec beq.n 8006500 <SendFreeBuf+0x8>
+ }
+
+ return;
+ 8006526: bf00 nop
+}
+ 8006528: 3708 adds r7, #8
+ 800652a: 46bd mov sp, r7
+ 800652c: bd80 pop {r7, pc}
+ 800652e: bf00 nop
+ 8006530: 2000024c .word 0x2000024c
+ 8006534: 20030000 .word 0x20030000
+
+08006538 <TL_TRACES_Init>:
+
+/******************************************************************************
+ * TRACES
+ ******************************************************************************/
+void TL_TRACES_Init( void )
+{
+ 8006538: b580 push {r7, lr}
+ 800653a: af00 add r7, sp, #0
+ LST_init_head (&TracesEvtQueue);
+ 800653c: 4805 ldr r0, [pc, #20] @ (8006554 <TL_TRACES_Init+0x1c>)
+ 800653e: f000 f8b7 bl 80066b0 <LST_init_head>
+
+ TL_RefTable.p_traces_table->traces_queue = (uint8_t*)&TracesEvtQueue;
+ 8006542: 4b05 ldr r3, [pc, #20] @ (8006558 <TL_TRACES_Init+0x20>)
+ 8006544: 695b ldr r3, [r3, #20]
+ 8006546: 4a03 ldr r2, [pc, #12] @ (8006554 <TL_TRACES_Init+0x1c>)
+ 8006548: 601a str r2, [r3, #0]
+
+ HW_IPCC_TRACES_Init();
+ 800654a: f000 ffb7 bl 80074bc <HW_IPCC_TRACES_Init>
+
+ return;
+ 800654e: bf00 nop
+}
+ 8006550: bd80 pop {r7, pc}
+ 8006552: bf00 nop
+ 8006554: 200300c0 .word 0x200300c0
+ 8006558: 20030000 .word 0x20030000
+
+0800655c <HW_IPCC_TRACES_EvtNot>:
+
+void HW_IPCC_TRACES_EvtNot(void)
+{
+ 800655c: b580 push {r7, lr}
+ 800655e: b082 sub sp, #8
+ 8006560: af00 add r7, sp, #0
+ TL_EvtPacket_t *phcievt;
+
+ while(LST_is_empty(&TracesEvtQueue) == FALSE)
+ 8006562: e008 b.n 8006576 <HW_IPCC_TRACES_EvtNot+0x1a>
+ {
+ LST_remove_head (&TracesEvtQueue, (tListNode **)&phcievt);
+ 8006564: 1d3b adds r3, r7, #4
+ 8006566: 4619 mov r1, r3
+ 8006568: 4808 ldr r0, [pc, #32] @ (800658c <HW_IPCC_TRACES_EvtNot+0x30>)
+ 800656a: f000 f940 bl 80067ee <LST_remove_head>
+ TL_TRACES_EvtReceived( phcievt );
+ 800656e: 687b ldr r3, [r7, #4]
+ 8006570: 4618 mov r0, r3
+ 8006572: f000 f80d bl 8006590 <TL_TRACES_EvtReceived>
+ while(LST_is_empty(&TracesEvtQueue) == FALSE)
+ 8006576: 4805 ldr r0, [pc, #20] @ (800658c <HW_IPCC_TRACES_EvtNot+0x30>)
+ 8006578: f000 f8aa bl 80066d0 <LST_is_empty>
+ 800657c: 4603 mov r3, r0
+ 800657e: 2b00 cmp r3, #0
+ 8006580: d0f0 beq.n 8006564 <HW_IPCC_TRACES_EvtNot+0x8>
+ }
+
+ return;
+ 8006582: bf00 nop
+}
+ 8006584: 3708 adds r7, #8
+ 8006586: 46bd mov sp, r7
+ 8006588: bd80 pop {r7, pc}
+ 800658a: bf00 nop
+ 800658c: 200300c0 .word 0x200300c0
+
+08006590 <TL_TRACES_EvtReceived>:
+
+__WEAK void TL_TRACES_EvtReceived( TL_EvtPacket_t * hcievt )
+{
+ 8006590: b480 push {r7}
+ 8006592: b083 sub sp, #12
+ 8006594: af00 add r7, sp, #0
+ 8006596: 6078 str r0, [r7, #4]
+ (void)(hcievt);
+}
+ 8006598: bf00 nop
+ 800659a: 370c adds r7, #12
+ 800659c: 46bd mov sp, r7
+ 800659e: f85d 7b04 ldr.w r7, [sp], #4
+ 80065a2: 4770 bx lr
+
+080065a4 <OutputDbgTrace>:
+
+/******************************************************************************
+* DEBUG INFORMATION
+******************************************************************************/
+static void OutputDbgTrace(TL_MB_PacketType_t packet_type, uint8_t* buffer)
+{
+ 80065a4: b480 push {r7}
+ 80065a6: b087 sub sp, #28
+ 80065a8: af00 add r7, sp, #0
+ 80065aa: 4603 mov r3, r0
+ 80065ac: 6039 str r1, [r7, #0]
+ 80065ae: 71fb strb r3, [r7, #7]
+ TL_EvtPacket_t *p_evt_packet;
+ TL_CmdPacket_t *p_cmd_packet;
+ TL_AclDataPacket_t *p_acldata_packet;
+ TL_EvtSerial_t *p_cmd_rsp_packet;
+
+ switch(packet_type)
+ 80065b0: 79fb ldrb r3, [r7, #7]
+ 80065b2: 2b08 cmp r3, #8
+ 80065b4: d84c bhi.n 8006650 <OutputDbgTrace+0xac>
+ 80065b6: a201 add r2, pc, #4 @ (adr r2, 80065bc <OutputDbgTrace+0x18>)
+ 80065b8: f852 f023 ldr.w pc, [r2, r3, lsl #2]
+ 80065bc: 080065e1 .word 0x080065e1
+ 80065c0: 08006605 .word 0x08006605
+ 80065c4: 08006611 .word 0x08006611
+ 80065c8: 0800660b .word 0x0800660b
+ 80065cc: 08006651 .word 0x08006651
+ 80065d0: 08006625 .word 0x08006625
+ 80065d4: 08006631 .word 0x08006631
+ 80065d8: 08006637 .word 0x08006637
+ 80065dc: 08006645 .word 0x08006645
+ {
+ case TL_MB_MM_RELEASE_BUFFER:
+ p_evt_packet = (TL_EvtPacket_t*)buffer;
+ 80065e0: 683b ldr r3, [r7, #0]
+ 80065e2: 617b str r3, [r7, #20]
+ switch(p_evt_packet->evtserial.evt.evtcode)
+ 80065e4: 697b ldr r3, [r7, #20]
+ 80065e6: 7a5b ldrb r3, [r3, #9]
+ 80065e8: 2bff cmp r3, #255 @ 0xff
+ 80065ea: d005 beq.n 80065f8 <OutputDbgTrace+0x54>
+ 80065ec: 2bff cmp r3, #255 @ 0xff
+ 80065ee: dc05 bgt.n 80065fc <OutputDbgTrace+0x58>
+ 80065f0: 2b0e cmp r3, #14
+ 80065f2: d005 beq.n 8006600 <OutputDbgTrace+0x5c>
+ 80065f4: 2b0f cmp r3, #15
+ break;
+
+ default:
+ TL_MM_DBG_MSG("mm evt released: 0x%02X", p_evt_packet->evtserial.evt.evtcode);
+ TL_MM_DBG_MSG(" buffer addr: 0x%08X", p_evt_packet);
+ break;
+ 80065f6: e001 b.n 80065fc <OutputDbgTrace+0x58>
+ break;
+ 80065f8: bf00 nop
+ 80065fa: e02a b.n 8006652 <OutputDbgTrace+0xae>
+ break;
+ 80065fc: bf00 nop
+ 80065fe: e028 b.n 8006652 <OutputDbgTrace+0xae>
+ break;
+ 8006600: bf00 nop
+ }
+
+ TL_MM_DBG_MSG("\r\n");
+ break;
+ 8006602: e026 b.n 8006652 <OutputDbgTrace+0xae>
+
+ case TL_MB_BLE_CMD:
+ p_cmd_packet = (TL_CmdPacket_t*)buffer;
+ 8006604: 683b ldr r3, [r7, #0]
+ 8006606: 60fb str r3, [r7, #12]
+ TL_HCI_CMD_DBG_BUF(p_cmd_packet->cmdserial.cmd.payload, p_cmd_packet->cmdserial.cmd.plen, "");
+ }
+ TL_HCI_CMD_DBG_MSG("\r\n");
+
+ TL_HCI_CMD_DBG_RAW(&p_cmd_packet->cmdserial, p_cmd_packet->cmdserial.cmd.plen+TL_CMD_HDR_SIZE);
+ break;
+ 8006608: e023 b.n 8006652 <OutputDbgTrace+0xae>
+
+ case TL_MB_ACL_DATA:
+ (void)p_acldata_packet;
+ p_acldata_packet = (TL_AclDataPacket_t*)buffer;
+ 800660a: 683b ldr r3, [r7, #0]
+ 800660c: 60bb str r3, [r7, #8]
+ TL_HCI_CMD_DBG_MSG(" payload:");
+ TL_HCI_CMD_DBG_BUF(p_acldata_packet->AclDataSerial.acl_data, p_acldata_packet->AclDataSerial.length, "");
+ }*/
+ TL_HCI_CMD_DBG_MSG("\r\n");
+ /*TL_HCI_CMD_DBG_RAW(&p_acldata_packet->AclDataSerial, p_acldata_packet->AclDataSerial.length+TL_CMD_HDR_SIZE);*/
+ break;
+ 800660e: e020 b.n 8006652 <OutputDbgTrace+0xae>
+ TL_HCI_CMD_DBG_MSG(" ACL Data Tx Ack received")
+ TL_HCI_CMD_DBG_MSG("\r\n");
+ break;
+
+ case TL_MB_BLE_CMD_RSP:
+ p_evt_packet = (TL_EvtPacket_t*)buffer;
+ 8006610: 683b ldr r3, [r7, #0]
+ 8006612: 617b str r3, [r7, #20]
+ switch(p_evt_packet->evtserial.evt.evtcode)
+ 8006614: 697b ldr r3, [r7, #20]
+ 8006616: 7a5b ldrb r3, [r3, #9]
+ 8006618: 2b0e cmp r3, #14
+ 800661a: d001 beq.n 8006620 <OutputDbgTrace+0x7c>
+ 800661c: 2b0f cmp r3, #15
+ }
+ break;
+
+ default:
+ TL_HCI_CMD_DBG_MSG("unknown ble rsp received: %02X", p_evt_packet->evtserial.evt.evtcode);
+ break;
+ 800661e: e000 b.n 8006622 <OutputDbgTrace+0x7e>
+ break;
+ 8006620: bf00 nop
+ }
+
+ TL_HCI_CMD_DBG_MSG("\r\n");
+
+ TL_HCI_CMD_DBG_RAW(&p_evt_packet->evtserial, p_evt_packet->evtserial.evt.plen+TL_EVT_HDR_SIZE);
+ break;
+ 8006622: e016 b.n 8006652 <OutputDbgTrace+0xae>
+
+ case TL_MB_BLE_ASYNCH_EVT:
+ p_evt_packet = (TL_EvtPacket_t*)buffer;
+ 8006624: 683b ldr r3, [r7, #0]
+ 8006626: 617b str r3, [r7, #20]
+ if(p_evt_packet->evtserial.evt.evtcode != TL_BLEEVT_VS_OPCODE)
+ 8006628: 697b ldr r3, [r7, #20]
+ 800662a: 7a5b ldrb r3, [r3, #9]
+ 800662c: 2bff cmp r3, #255 @ 0xff
+ }
+
+ TL_HCI_EVT_DBG_MSG("\r\n");
+
+ TL_HCI_EVT_DBG_RAW(&p_evt_packet->evtserial, p_evt_packet->evtserial.evt.plen+TL_EVT_HDR_SIZE);
+ break;
+ 800662e: e010 b.n 8006652 <OutputDbgTrace+0xae>
+
+ case TL_MB_SYS_CMD:
+ p_cmd_packet = (TL_CmdPacket_t*)buffer;
+ 8006630: 683b ldr r3, [r7, #0]
+ 8006632: 60fb str r3, [r7, #12]
+ TL_SHCI_CMD_DBG_BUF(p_cmd_packet->cmdserial.cmd.payload, p_cmd_packet->cmdserial.cmd.plen, "");
+ }
+ TL_SHCI_CMD_DBG_MSG("\r\n");
+
+ TL_SHCI_CMD_DBG_RAW(&p_cmd_packet->cmdserial, p_cmd_packet->cmdserial.cmd.plen+TL_CMD_HDR_SIZE);
+ break;
+ 8006634: e00d b.n 8006652 <OutputDbgTrace+0xae>
+
+ case TL_MB_SYS_CMD_RSP:
+ p_cmd_rsp_packet = (TL_EvtSerial_t*)buffer;
+ 8006636: 683b ldr r3, [r7, #0]
+ 8006638: 613b str r3, [r7, #16]
+ switch(p_cmd_rsp_packet->evt.evtcode)
+ 800663a: 693b ldr r3, [r7, #16]
+ 800663c: 785b ldrb r3, [r3, #1]
+ 800663e: 2b0e cmp r3, #14
+ }
+ break;
+
+ default:
+ TL_SHCI_CMD_DBG_MSG("unknown sys rsp received: %02X", p_cmd_rsp_packet->evt.evtcode);
+ break;
+ 8006640: bf00 nop
+ }
+
+ TL_SHCI_CMD_DBG_MSG("\r\n");
+
+ TL_SHCI_CMD_DBG_RAW(&p_cmd_rsp_packet->evt, p_cmd_rsp_packet->evt.plen+TL_EVT_HDR_SIZE);
+ break;
+ 8006642: e006 b.n 8006652 <OutputDbgTrace+0xae>
+
+ case TL_MB_SYS_ASYNCH_EVT:
+ p_evt_packet = (TL_EvtPacket_t*)buffer;
+ 8006644: 683b ldr r3, [r7, #0]
+ 8006646: 617b str r3, [r7, #20]
+ if(p_evt_packet->evtserial.evt.evtcode != TL_BLEEVT_VS_OPCODE)
+ 8006648: 697b ldr r3, [r7, #20]
+ 800664a: 7a5b ldrb r3, [r3, #9]
+ 800664c: 2bff cmp r3, #255 @ 0xff
+ }
+
+ TL_SHCI_EVT_DBG_MSG("\r\n");
+
+ TL_SHCI_EVT_DBG_RAW(&p_evt_packet->evtserial, p_evt_packet->evtserial.evt.plen+TL_EVT_HDR_SIZE);
+ break;
+ 800664e: e000 b.n 8006652 <OutputDbgTrace+0xae>
+
+ default:
+ break;
+ 8006650: bf00 nop
+ }
+
+ return;
+ 8006652: bf00 nop
+}
+ 8006654: 371c adds r7, #28
+ 8006656: 46bd mov sp, r7
+ 8006658: f85d 7b04 ldr.w r7, [sp], #4
+ 800665c: 4770 bx lr
+ 800665e: bf00 nop
+
+08006660 <OTP_Read>:
+/* Global variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Functions Definition ------------------------------------------------------*/
+
+uint8_t * OTP_Read( uint8_t id )
+{
+ 8006660: b480 push {r7}
+ 8006662: b085 sub sp, #20
+ 8006664: af00 add r7, sp, #0
+ 8006666: 4603 mov r3, r0
+ 8006668: 71fb strb r3, [r7, #7]
+ uint8_t *p_id;
+
+ p_id = (uint8_t*)(CFG_OTP_END_ADRESS - 7) ;
+ 800666a: 4b0f ldr r3, [pc, #60] @ (80066a8 <OTP_Read+0x48>)
+ 800666c: 60fb str r3, [r7, #12]
+
+ while( ((*( p_id + 7 )) != id) && ( p_id != (uint8_t*)CFG_OTP_BASE_ADDRESS) )
+ 800666e: e002 b.n 8006676 <OTP_Read+0x16>
+ {
+ p_id -= 8 ;
+ 8006670: 68fb ldr r3, [r7, #12]
+ 8006672: 3b08 subs r3, #8
+ 8006674: 60fb str r3, [r7, #12]
+ while( ((*( p_id + 7 )) != id) && ( p_id != (uint8_t*)CFG_OTP_BASE_ADDRESS) )
+ 8006676: 68fb ldr r3, [r7, #12]
+ 8006678: 3307 adds r3, #7
+ 800667a: 781b ldrb r3, [r3, #0]
+ 800667c: 79fa ldrb r2, [r7, #7]
+ 800667e: 429a cmp r2, r3
+ 8006680: d003 beq.n 800668a <OTP_Read+0x2a>
+ 8006682: 68fb ldr r3, [r7, #12]
+ 8006684: 4a09 ldr r2, [pc, #36] @ (80066ac <OTP_Read+0x4c>)
+ 8006686: 4293 cmp r3, r2
+ 8006688: d1f2 bne.n 8006670 <OTP_Read+0x10>
+ }
+
+ if((*( p_id + 7 )) != id)
+ 800668a: 68fb ldr r3, [r7, #12]
+ 800668c: 3307 adds r3, #7
+ 800668e: 781b ldrb r3, [r3, #0]
+ 8006690: 79fa ldrb r2, [r7, #7]
+ 8006692: 429a cmp r2, r3
+ 8006694: d001 beq.n 800669a <OTP_Read+0x3a>
+ {
+ p_id = 0 ;
+ 8006696: 2300 movs r3, #0
+ 8006698: 60fb str r3, [r7, #12]
+ }
+
+ return p_id ;
+ 800669a: 68fb ldr r3, [r7, #12]
+}
+ 800669c: 4618 mov r0, r3
+ 800669e: 3714 adds r7, #20
+ 80066a0: 46bd mov sp, r7
+ 80066a2: f85d 7b04 ldr.w r7, [sp], #4
+ 80066a6: 4770 bx lr
+ 80066a8: 1fff73f8 .word 0x1fff73f8
+ 80066ac: 1fff7000 .word 0x1fff7000
+
+080066b0 <LST_init_head>:
+
+/******************************************************************************
+ * Function Definitions
+ ******************************************************************************/
+void LST_init_head (tListNode * listHead)
+{
+ 80066b0: b480 push {r7}
+ 80066b2: b083 sub sp, #12
+ 80066b4: af00 add r7, sp, #0
+ 80066b6: 6078 str r0, [r7, #4]
+ listHead->next = listHead;
+ 80066b8: 687b ldr r3, [r7, #4]
+ 80066ba: 687a ldr r2, [r7, #4]
+ 80066bc: 601a str r2, [r3, #0]
+ listHead->prev = listHead;
+ 80066be: 687b ldr r3, [r7, #4]
+ 80066c0: 687a ldr r2, [r7, #4]
+ 80066c2: 605a str r2, [r3, #4]
+}
+ 80066c4: bf00 nop
+ 80066c6: 370c adds r7, #12
+ 80066c8: 46bd mov sp, r7
+ 80066ca: f85d 7b04 ldr.w r7, [sp], #4
+ 80066ce: 4770 bx lr
+
+080066d0 <LST_is_empty>:
+
+uint8_t LST_is_empty (tListNode * listHead)
+{
+ 80066d0: b480 push {r7}
+ 80066d2: b087 sub sp, #28
+ 80066d4: af00 add r7, sp, #0
+ 80066d6: 6078 str r0, [r7, #4]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80066d8: f3ef 8310 mrs r3, PRIMASK
+ 80066dc: 60fb str r3, [r7, #12]
+ return(result);
+ 80066de: 68fb ldr r3, [r7, #12]
+ uint32_t primask_bit;
+ uint8_t return_value;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 80066e0: 613b str r3, [r7, #16]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80066e2: b672 cpsid i
+}
+ 80066e4: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+ if(listHead->next == listHead)
+ 80066e6: 687b ldr r3, [r7, #4]
+ 80066e8: 681b ldr r3, [r3, #0]
+ 80066ea: 687a ldr r2, [r7, #4]
+ 80066ec: 429a cmp r2, r3
+ 80066ee: d102 bne.n 80066f6 <LST_is_empty+0x26>
+ {
+ return_value = TRUE;
+ 80066f0: 2301 movs r3, #1
+ 80066f2: 75fb strb r3, [r7, #23]
+ 80066f4: e001 b.n 80066fa <LST_is_empty+0x2a>
+ }
+ else
+ {
+ return_value = FALSE;
+ 80066f6: 2300 movs r3, #0
+ 80066f8: 75fb strb r3, [r7, #23]
+ 80066fa: 693b ldr r3, [r7, #16]
+ 80066fc: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80066fe: 68bb ldr r3, [r7, #8]
+ 8006700: f383 8810 msr PRIMASK, r3
+}
+ 8006704: bf00 nop
+ }
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+
+ return return_value;
+ 8006706: 7dfb ldrb r3, [r7, #23]
+}
+ 8006708: 4618 mov r0, r3
+ 800670a: 371c adds r7, #28
+ 800670c: 46bd mov sp, r7
+ 800670e: f85d 7b04 ldr.w r7, [sp], #4
+ 8006712: 4770 bx lr
+
+08006714 <LST_insert_head>:
+
+void LST_insert_head (tListNode * listHead, tListNode * node)
+{
+ 8006714: b480 push {r7}
+ 8006716: b087 sub sp, #28
+ 8006718: af00 add r7, sp, #0
+ 800671a: 6078 str r0, [r7, #4]
+ 800671c: 6039 str r1, [r7, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800671e: f3ef 8310 mrs r3, PRIMASK
+ 8006722: 60fb str r3, [r7, #12]
+ return(result);
+ 8006724: 68fb ldr r3, [r7, #12]
+ uint32_t primask_bit;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 8006726: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8006728: b672 cpsid i
+}
+ 800672a: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+
+ node->next = listHead->next;
+ 800672c: 687b ldr r3, [r7, #4]
+ 800672e: 681a ldr r2, [r3, #0]
+ 8006730: 683b ldr r3, [r7, #0]
+ 8006732: 601a str r2, [r3, #0]
+ node->prev = listHead;
+ 8006734: 683b ldr r3, [r7, #0]
+ 8006736: 687a ldr r2, [r7, #4]
+ 8006738: 605a str r2, [r3, #4]
+ listHead->next = node;
+ 800673a: 687b ldr r3, [r7, #4]
+ 800673c: 683a ldr r2, [r7, #0]
+ 800673e: 601a str r2, [r3, #0]
+ (node->next)->prev = node;
+ 8006740: 683b ldr r3, [r7, #0]
+ 8006742: 681b ldr r3, [r3, #0]
+ 8006744: 683a ldr r2, [r7, #0]
+ 8006746: 605a str r2, [r3, #4]
+ 8006748: 697b ldr r3, [r7, #20]
+ 800674a: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 800674c: 693b ldr r3, [r7, #16]
+ 800674e: f383 8810 msr PRIMASK, r3
+}
+ 8006752: bf00 nop
+
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+}
+ 8006754: bf00 nop
+ 8006756: 371c adds r7, #28
+ 8006758: 46bd mov sp, r7
+ 800675a: f85d 7b04 ldr.w r7, [sp], #4
+ 800675e: 4770 bx lr
+
+08006760 <LST_insert_tail>:
+
+
+void LST_insert_tail (tListNode * listHead, tListNode * node)
+{
+ 8006760: b480 push {r7}
+ 8006762: b087 sub sp, #28
+ 8006764: af00 add r7, sp, #0
+ 8006766: 6078 str r0, [r7, #4]
+ 8006768: 6039 str r1, [r7, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800676a: f3ef 8310 mrs r3, PRIMASK
+ 800676e: 60fb str r3, [r7, #12]
+ return(result);
+ 8006770: 68fb ldr r3, [r7, #12]
+ uint32_t primask_bit;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 8006772: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8006774: b672 cpsid i
+}
+ 8006776: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+
+ node->next = listHead;
+ 8006778: 683b ldr r3, [r7, #0]
+ 800677a: 687a ldr r2, [r7, #4]
+ 800677c: 601a str r2, [r3, #0]
+ node->prev = listHead->prev;
+ 800677e: 687b ldr r3, [r7, #4]
+ 8006780: 685a ldr r2, [r3, #4]
+ 8006782: 683b ldr r3, [r7, #0]
+ 8006784: 605a str r2, [r3, #4]
+ listHead->prev = node;
+ 8006786: 687b ldr r3, [r7, #4]
+ 8006788: 683a ldr r2, [r7, #0]
+ 800678a: 605a str r2, [r3, #4]
+ (node->prev)->next = node;
+ 800678c: 683b ldr r3, [r7, #0]
+ 800678e: 685b ldr r3, [r3, #4]
+ 8006790: 683a ldr r2, [r7, #0]
+ 8006792: 601a str r2, [r3, #0]
+ 8006794: 697b ldr r3, [r7, #20]
+ 8006796: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8006798: 693b ldr r3, [r7, #16]
+ 800679a: f383 8810 msr PRIMASK, r3
+}
+ 800679e: bf00 nop
+
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+}
+ 80067a0: bf00 nop
+ 80067a2: 371c adds r7, #28
+ 80067a4: 46bd mov sp, r7
+ 80067a6: f85d 7b04 ldr.w r7, [sp], #4
+ 80067aa: 4770 bx lr
+
+080067ac <LST_remove_node>:
+
+
+void LST_remove_node (tListNode * node)
+{
+ 80067ac: b480 push {r7}
+ 80067ae: b087 sub sp, #28
+ 80067b0: af00 add r7, sp, #0
+ 80067b2: 6078 str r0, [r7, #4]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80067b4: f3ef 8310 mrs r3, PRIMASK
+ 80067b8: 60fb str r3, [r7, #12]
+ return(result);
+ 80067ba: 68fb ldr r3, [r7, #12]
+ uint32_t primask_bit;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 80067bc: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80067be: b672 cpsid i
+}
+ 80067c0: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+
+ (node->prev)->next = node->next;
+ 80067c2: 687b ldr r3, [r7, #4]
+ 80067c4: 685b ldr r3, [r3, #4]
+ 80067c6: 687a ldr r2, [r7, #4]
+ 80067c8: 6812 ldr r2, [r2, #0]
+ 80067ca: 601a str r2, [r3, #0]
+ (node->next)->prev = node->prev;
+ 80067cc: 687b ldr r3, [r7, #4]
+ 80067ce: 681b ldr r3, [r3, #0]
+ 80067d0: 687a ldr r2, [r7, #4]
+ 80067d2: 6852 ldr r2, [r2, #4]
+ 80067d4: 605a str r2, [r3, #4]
+ 80067d6: 697b ldr r3, [r7, #20]
+ 80067d8: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80067da: 693b ldr r3, [r7, #16]
+ 80067dc: f383 8810 msr PRIMASK, r3
+}
+ 80067e0: bf00 nop
+
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+}
+ 80067e2: bf00 nop
+ 80067e4: 371c adds r7, #28
+ 80067e6: 46bd mov sp, r7
+ 80067e8: f85d 7b04 ldr.w r7, [sp], #4
+ 80067ec: 4770 bx lr
+
+080067ee <LST_remove_head>:
+
+
+void LST_remove_head (tListNode * listHead, tListNode ** node )
+{
+ 80067ee: b580 push {r7, lr}
+ 80067f0: b086 sub sp, #24
+ 80067f2: af00 add r7, sp, #0
+ 80067f4: 6078 str r0, [r7, #4]
+ 80067f6: 6039 str r1, [r7, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80067f8: f3ef 8310 mrs r3, PRIMASK
+ 80067fc: 60fb str r3, [r7, #12]
+ return(result);
+ 80067fe: 68fb ldr r3, [r7, #12]
+ uint32_t primask_bit;
+
+ primask_bit = __get_PRIMASK(); /**< backup PRIMASK bit */
+ 8006800: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8006802: b672 cpsid i
+}
+ 8006804: bf00 nop
+ __disable_irq(); /**< Disable all interrupts by setting PRIMASK bit on Cortex*/
+
+ *node = listHead->next;
+ 8006806: 687b ldr r3, [r7, #4]
+ 8006808: 681a ldr r2, [r3, #0]
+ 800680a: 683b ldr r3, [r7, #0]
+ 800680c: 601a str r2, [r3, #0]
+ LST_remove_node (listHead->next);
+ 800680e: 687b ldr r3, [r7, #4]
+ 8006810: 681b ldr r3, [r3, #0]
+ 8006812: 4618 mov r0, r3
+ 8006814: f7ff ffca bl 80067ac <LST_remove_node>
+ 8006818: 697b ldr r3, [r7, #20]
+ 800681a: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 800681c: 693b ldr r3, [r7, #16]
+ 800681e: f383 8810 msr PRIMASK, r3
+}
+ 8006822: bf00 nop
+
+ __set_PRIMASK(primask_bit); /**< Restore PRIMASK bit*/
+}
+ 8006824: bf00 nop
+ 8006826: 3718 adds r7, #24
+ 8006828: 46bd mov sp, r7
+ 800682a: bd80 pop {r7, pc}
+
+0800682c <LL_FLASH_GetUDN>:
+ * @note The 64-bit UID64 may be used by Firmware to derive BLE 48-bit Device Address EUI-48 or
+ * 802.15.4 64-bit Device Address EUI-64.
+ * @retval Values between Min_Data=0x00 and Max_Data=0xFFFF
+ */
+__STATIC_INLINE uint32_t LL_FLASH_GetUDN(void)
+{
+ 800682c: b480 push {r7}
+ 800682e: af00 add r7, sp, #0
+ return (uint32_t)(READ_REG(*((uint32_t *)UID64_BASE)));
+ 8006830: 4b03 ldr r3, [pc, #12] @ (8006840 <LL_FLASH_GetUDN+0x14>)
+ 8006832: 681b ldr r3, [r3, #0]
+}
+ 8006834: 4618 mov r0, r3
+ 8006836: 46bd mov sp, r7
+ 8006838: f85d 7b04 ldr.w r7, [sp], #4
+ 800683c: 4770 bx lr
+ 800683e: bf00 nop
+ 8006840: 1fff7580 .word 0x1fff7580
+
+08006844 <LL_FLASH_GetDeviceID>:
+ * 802.15.4 64-bit Device Address EUI-64.
+ * For STM32WBxxxx devices, the device ID is 0x26
+ * @retval Values between Min_Data=0x00 and Max_Data=0xFF (ex: Device ID is 0x26 for STM32WB55x)
+ */
+__STATIC_INLINE uint32_t LL_FLASH_GetDeviceID(void)
+{
+ 8006844: b480 push {r7}
+ 8006846: af00 add r7, sp, #0
+ return (uint32_t)((READ_REG(*((uint32_t *)UID64_BASE + 1U))) & 0x000000FFU);
+ 8006848: 4b03 ldr r3, [pc, #12] @ (8006858 <LL_FLASH_GetDeviceID+0x14>)
+ 800684a: 681b ldr r3, [r3, #0]
+ 800684c: b2db uxtb r3, r3
+}
+ 800684e: 4618 mov r0, r3
+ 8006850: 46bd mov sp, r7
+ 8006852: f85d 7b04 ldr.w r7, [sp], #4
+ 8006856: 4770 bx lr
+ 8006858: 1fff7584 .word 0x1fff7584
+
+0800685c <LL_FLASH_GetSTCompanyID>:
+ * 802.15.4 64-bit Device Address EUI-64.
+ * For STM32WBxxxx devices, the ST Company ID is 0x0080E1
+ * @retval Values between Min_Data=0x00 and Max_Data=0xFFFFFF (ex: ST Company ID is 0x0080E1)
+ */
+__STATIC_INLINE uint32_t LL_FLASH_GetSTCompanyID(void)
+{
+ 800685c: b480 push {r7}
+ 800685e: af00 add r7, sp, #0
+ return (uint32_t)(((READ_REG(*((uint32_t *)UID64_BASE + 1U))) >> 8U) & 0x00FFFFFFU);
+ 8006860: 4b03 ldr r3, [pc, #12] @ (8006870 <LL_FLASH_GetSTCompanyID+0x14>)
+ 8006862: 681b ldr r3, [r3, #0]
+ 8006864: 0a1b lsrs r3, r3, #8
+}
+ 8006866: 4618 mov r0, r3
+ 8006868: 46bd mov sp, r7
+ 800686a: f85d 7b04 ldr.w r7, [sp], #4
+ 800686e: 4770 bx lr
+ 8006870: 1fff7584 .word 0x1fff7584
+
+08006874 <APP_BLE_Init>:
+
+/* USER CODE END EV */
+
+/* Functions Definition ------------------------------------------------------*/
+void APP_BLE_Init(void)
+{
+ 8006874: b5b0 push {r4, r5, r7, lr}
+ 8006876: b090 sub sp, #64 @ 0x40
+ 8006878: af00 add r7, sp, #0
+ SHCI_CmdStatus_t status;
+#if (RADIO_ACTIVITY_EVENT != 0)
+ tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
+ 800687a: 2392 movs r3, #146 @ 0x92
+ 800687c: f887 303f strb.w r3, [r7, #63] @ 0x3f
+#endif /* RADIO_ACTIVITY_EVENT != 0 */
+ /* USER CODE BEGIN APP_BLE_Init_1 */
+
+ /* USER CODE END APP_BLE_Init_1 */
+ SHCI_C2_Ble_Init_Cmd_Packet_t ble_init_cmd_packet =
+ 8006880: 4b2f ldr r3, [pc, #188] @ (8006940 <APP_BLE_Init+0xcc>)
+ 8006882: 463c mov r4, r7
+ 8006884: 461d mov r5, r3
+ 8006886: cd0f ldmia r5!, {r0, r1, r2, r3}
+ 8006888: c40f stmia r4!, {r0, r1, r2, r3}
+ 800688a: cd0f ldmia r5!, {r0, r1, r2, r3}
+ 800688c: c40f stmia r4!, {r0, r1, r2, r3}
+ 800688e: cd0f ldmia r5!, {r0, r1, r2, r3}
+ 8006890: c40f stmia r4!, {r0, r1, r2, r3}
+ 8006892: e895 0007 ldmia.w r5, {r0, r1, r2}
+ 8006896: c403 stmia r4!, {r0, r1}
+ 8006898: 8022 strh r2, [r4, #0]
+ 800689a: 3402 adds r4, #2
+ 800689c: 0c13 lsrs r3, r2, #16
+ 800689e: 7023 strb r3, [r4, #0]
+ };
+
+ /**
+ * Initialize Ble Transport Layer
+ */
+ Ble_Tl_Init();
+ 80068a0: f000 f918 bl 8006ad4 <Ble_Tl_Init>
+
+ /**
+ * Do not allow standby in the application
+ */
+ UTIL_LPM_SetOffMode(1 << CFG_LPM_APP_BLE, UTIL_LPM_DISABLE);
+ 80068a4: 2101 movs r1, #1
+ 80068a6: 2002 movs r0, #2
+ 80068a8: f000 fe40 bl 800752c <UTIL_LPM_SetOffMode>
+
+ /**
+ * Register the hci transport layer to handle BLE User Asynchronous Events
+ */
+ UTIL_SEQ_RegTask(1<<CFG_TASK_HCI_ASYNCH_EVT_ID, UTIL_SEQ_RFU, hci_user_evt_proc);
+ 80068ac: 4a25 ldr r2, [pc, #148] @ (8006944 <APP_BLE_Init+0xd0>)
+ 80068ae: 2100 movs r1, #0
+ 80068b0: 2002 movs r0, #2
+ 80068b2: f000 ffed bl 8007890 <UTIL_SEQ_RegTask>
+
+ /**
+ * Starts the BLE Stack on CPU2
+ */
+ status = SHCI_C2_BLE_Init(&ble_init_cmd_packet);
+ 80068b6: 463b mov r3, r7
+ 80068b8: 4618 mov r0, r3
+ 80068ba: f7ff f8b7 bl 8005a2c <SHCI_C2_BLE_Init>
+ 80068be: 4603 mov r3, r0
+ 80068c0: f887 303e strb.w r3, [r7, #62] @ 0x3e
+ if (status != SHCI_Success)
+ 80068c4: f897 303e ldrb.w r3, [r7, #62] @ 0x3e
+ 80068c8: 2b00 cmp r3, #0
+ 80068ca: d001 beq.n 80068d0 <APP_BLE_Init+0x5c>
+ {
+ APP_DBG_MSG(" Fail : SHCI_C2_BLE_Init command, result: 0x%02x\n\r", status);
+ /* if you are here, maybe CPU2 doesn't contain STM32WB_Copro_Wireless_Binaries, see Release_Notes.html */
+ Error_Handler();
+ 80068cc: f7fa fe26 bl 800151c <Error_Handler>
+ }
+
+ /**
+ * Initialization of HCI & GATT & GAP layer
+ */
+ Ble_Hci_Gap_Gatt_Init();
+ 80068d0: f000 f916 bl 8006b00 <Ble_Hci_Gap_Gatt_Init>
+
+ /**
+ * Initialization of the BLE Services
+ */
+ SVCCTL_Init();
+ 80068d4: f7ff f804 bl 80058e0 <SVCCTL_Init>
+
+ /**
+ * Initialization of the BLE App Context
+ */
+ BleApplicationContext.Device_Connection_Status = APP_BLE_IDLE;
+ 80068d8: 4b1b ldr r3, [pc, #108] @ (8006948 <APP_BLE_Init+0xd4>)
+ 80068da: 2200 movs r2, #0
+ 80068dc: f883 2080 strb.w r2, [r3, #128] @ 0x80
+ BleApplicationContext.BleApplicationContext_legacy.connectionHandle = 0xFFFF;
+ 80068e0: 4b19 ldr r3, [pc, #100] @ (8006948 <APP_BLE_Init+0xd4>)
+ 80068e2: f64f 72ff movw r2, #65535 @ 0xffff
+ 80068e6: 82da strh r2, [r3, #22]
+
+ /**
+ * From here, all initialization are BLE application specific
+ */
+ UTIL_SEQ_RegTask(1<<CFG_TASK_ADV_CANCEL_ID, UTIL_SEQ_RFU, Adv_Cancel);
+ 80068e8: 4a18 ldr r2, [pc, #96] @ (800694c <APP_BLE_Init+0xd8>)
+ 80068ea: 2100 movs r1, #0
+ 80068ec: 2001 movs r0, #1
+ 80068ee: f000 ffcf bl 8007890 <UTIL_SEQ_RegTask>
+#if (BLE_CFG_OTA_REBOOT_CHAR != 0)
+ a_ManufData[sizeof(a_ManufData)-8] = CFG_FEATURE_OTA_REBOOT;
+#endif /* BLE_CFG_OTA_REBOOT_CHAR != 0 */
+
+#if (RADIO_ACTIVITY_EVENT != 0)
+ ret = aci_hal_set_radio_activity_mask(0x0006);
+ 80068f2: 2006 movs r0, #6
+ 80068f4: f7fe fce4 bl 80052c0 <aci_hal_set_radio_activity_mask>
+ 80068f8: 4603 mov r3, r0
+ 80068fa: f887 303f strb.w r3, [r7, #63] @ 0x3f
+#endif /* L2CAP_REQUEST_NEW_CONN_PARAM != 0 */
+
+ /**
+ * Initialize P2P Server Application
+ */
+ P2PS_APP_Init();
+ 80068fe: f000 fb37 bl 8006f70 <P2PS_APP_Init>
+ /* USER CODE END APP_BLE_Init_3 */
+
+ /**
+ * Create timer to handle the Advertising Stop
+ */
+ HW_TS_Create(CFG_TIM_PROC_ID_ISR, &(BleApplicationContext.Advertising_mgr_timer_Id), hw_ts_SingleShot, Adv_Cancel_Req);
+ 8006902: 4b13 ldr r3, [pc, #76] @ (8006950 <APP_BLE_Init+0xdc>)
+ 8006904: 2200 movs r2, #0
+ 8006906: 4913 ldr r1, [pc, #76] @ (8006954 <APP_BLE_Init+0xe0>)
+ 8006908: 2000 movs r0, #0
+ 800690a: f7fa facb bl 8000ea4 <HW_TS_Create>
+ /**
+ * Create timer to handle the Led Switch OFF
+ */
+ HW_TS_Create(CFG_TIM_PROC_ID_ISR, &(BleApplicationContext.SwitchOffGPIO_timer_Id), hw_ts_SingleShot, Switch_OFF_GPIO);
+ 800690e: 4b12 ldr r3, [pc, #72] @ (8006958 <APP_BLE_Init+0xe4>)
+ 8006910: 2200 movs r2, #0
+ 8006912: 4912 ldr r1, [pc, #72] @ (800695c <APP_BLE_Init+0xe8>)
+ 8006914: 2000 movs r0, #0
+ 8006916: f7fa fac5 bl 8000ea4 <HW_TS_Create>
+
+ /**
+ * Make device discoverable
+ */
+ BleApplicationContext.BleApplicationContext_legacy.advtServUUID[0] = NULL;
+ 800691a: 4b0b ldr r3, [pc, #44] @ (8006948 <APP_BLE_Init+0xd4>)
+ 800691c: 2200 movs r2, #0
+ 800691e: 765a strb r2, [r3, #25]
+ BleApplicationContext.BleApplicationContext_legacy.advtServUUIDlen = 0;
+ 8006920: 4b09 ldr r3, [pc, #36] @ (8006948 <APP_BLE_Init+0xd4>)
+ 8006922: 2200 movs r2, #0
+ 8006924: 761a strb r2, [r3, #24]
+
+ /* Initialize intervals for reconnexion without intervals update */
+ AdvIntervalMin = CFG_FAST_CONN_ADV_INTERVAL_MIN;
+ 8006926: 4b0e ldr r3, [pc, #56] @ (8006960 <APP_BLE_Init+0xec>)
+ 8006928: 2280 movs r2, #128 @ 0x80
+ 800692a: 801a strh r2, [r3, #0]
+ AdvIntervalMax = CFG_FAST_CONN_ADV_INTERVAL_MAX;
+ 800692c: 4b0d ldr r3, [pc, #52] @ (8006964 <APP_BLE_Init+0xf0>)
+ 800692e: 22a0 movs r2, #160 @ 0xa0
+ 8006930: 801a strh r2, [r3, #0]
+
+ /**
+ * Start to Advertise to be connected by P2P Client
+ */
+ Adv_Request(APP_BLE_FAST_ADV);
+ 8006932: 2001 movs r0, #1
+ 8006934: f000 f9b6 bl 8006ca4 <Adv_Request>
+
+ /* USER CODE BEGIN APP_BLE_Init_2 */
+
+ /* USER CODE END APP_BLE_Init_2 */
+
+ return;
+ 8006938: bf00 nop
+}
+ 800693a: 3740 adds r7, #64 @ 0x40
+ 800693c: 46bd mov sp, r7
+ 800693e: bdb0 pop {r4, r5, r7, pc}
+ 8006940: 08007bfc .word 0x08007bfc
+ 8006944: 08005c49 .word 0x08005c49
+ 8006948: 20000270 .word 0x20000270
+ 800694c: 08006e0d .word 0x08006e0d
+ 8006950: 08006e41 .word 0x08006e41
+ 8006954: 200002f1 .word 0x200002f1
+ 8006958: 08006e51 .word 0x08006e51
+ 800695c: 200002f2 .word 0x200002f2
+ 8006960: 200002f4 .word 0x200002f4
+ 8006964: 200002f6 .word 0x200002f6
+
+08006968 <SVCCTL_App_Notification>:
+
+SVCCTL_UserEvtFlowStatus_t SVCCTL_App_Notification(void *p_Pckt)
+{
+ 8006968: b580 push {r7, lr}
+ 800696a: b08a sub sp, #40 @ 0x28
+ 800696c: af00 add r7, sp, #0
+ 800696e: 6078 str r0, [r7, #4]
+ hci_event_pckt *p_event_pckt;
+ evt_le_meta_event *p_meta_evt;
+ evt_blecore_aci *p_blecore_evt;
+ uint8_t Tx_phy, Rx_phy;
+ tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
+ 8006970: 2392 movs r3, #146 @ 0x92
+ 8006972: f887 3027 strb.w r3, [r7, #39] @ 0x27
+
+ /* USER CODE BEGIN SVCCTL_App_Notification */
+
+ /* USER CODE END SVCCTL_App_Notification */
+
+ p_event_pckt = (hci_event_pckt*) ((hci_uart_pckt *) p_Pckt)->data;
+ 8006976: 687b ldr r3, [r7, #4]
+ 8006978: 3301 adds r3, #1
+ 800697a: 623b str r3, [r7, #32]
+
+ switch (p_event_pckt->evt)
+ 800697c: 6a3b ldr r3, [r7, #32]
+ 800697e: 781b ldrb r3, [r3, #0]
+ 8006980: 2bff cmp r3, #255 @ 0xff
+ 8006982: d076 beq.n 8006a72 <SVCCTL_App_Notification+0x10a>
+ 8006984: 2bff cmp r3, #255 @ 0xff
+ 8006986: f300 8098 bgt.w 8006aba <SVCCTL_App_Notification+0x152>
+ 800698a: 2b05 cmp r3, #5
+ 800698c: d002 beq.n 8006994 <SVCCTL_App_Notification+0x2c>
+ 800698e: 2b3e cmp r3, #62 @ 0x3e
+ 8006990: d020 beq.n 80069d4 <SVCCTL_App_Notification+0x6c>
+
+ default:
+ /* USER CODE BEGIN ECODE_DEFAULT*/
+
+ /* USER CODE END ECODE_DEFAULT*/
+ break;
+ 8006992: e092 b.n 8006aba <SVCCTL_App_Notification+0x152>
+ p_disconnection_complete_event = (hci_disconnection_complete_event_rp0 *) p_event_pckt->data;
+ 8006994: 6a3b ldr r3, [r7, #32]
+ 8006996: 3302 adds r3, #2
+ 8006998: 60fb str r3, [r7, #12]
+ if (p_disconnection_complete_event->Connection_Handle == BleApplicationContext.BleApplicationContext_legacy.connectionHandle)
+ 800699a: 68fb ldr r3, [r7, #12]
+ 800699c: f8b3 3001 ldrh.w r3, [r3, #1]
+ 80069a0: b29a uxth r2, r3
+ 80069a2: 4b4a ldr r3, [pc, #296] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 80069a4: 8adb ldrh r3, [r3, #22]
+ 80069a6: 429a cmp r2, r3
+ 80069a8: d106 bne.n 80069b8 <SVCCTL_App_Notification+0x50>
+ BleApplicationContext.BleApplicationContext_legacy.connectionHandle = 0;
+ 80069aa: 4b48 ldr r3, [pc, #288] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 80069ac: 2200 movs r2, #0
+ 80069ae: 82da strh r2, [r3, #22]
+ BleApplicationContext.Device_Connection_Status = APP_BLE_IDLE;
+ 80069b0: 4b46 ldr r3, [pc, #280] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 80069b2: 2200 movs r2, #0
+ 80069b4: f883 2080 strb.w r2, [r3, #128] @ 0x80
+ Adv_Request(APP_BLE_FAST_ADV);
+ 80069b8: 2001 movs r0, #1
+ 80069ba: f000 f973 bl 8006ca4 <Adv_Request>
+ HandleNotification.P2P_Evt_Opcode = PEER_DISCON_HANDLE_EVT;
+ 80069be: 4b44 ldr r3, [pc, #272] @ (8006ad0 <SVCCTL_App_Notification+0x168>)
+ 80069c0: 2201 movs r2, #1
+ 80069c2: 701a strb r2, [r3, #0]
+ HandleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
+ 80069c4: 4b41 ldr r3, [pc, #260] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 80069c6: 8ada ldrh r2, [r3, #22]
+ 80069c8: 4b41 ldr r3, [pc, #260] @ (8006ad0 <SVCCTL_App_Notification+0x168>)
+ 80069ca: 805a strh r2, [r3, #2]
+ P2PS_APP_Notification(&HandleNotification);
+ 80069cc: 4840 ldr r0, [pc, #256] @ (8006ad0 <SVCCTL_App_Notification+0x168>)
+ 80069ce: f000 fabb bl 8006f48 <P2PS_APP_Notification>
+ break; /* HCI_DISCONNECTION_COMPLETE_EVT_CODE */
+ 80069d2: e075 b.n 8006ac0 <SVCCTL_App_Notification+0x158>
+ p_meta_evt = (evt_le_meta_event*) p_event_pckt->data;
+ 80069d4: 6a3b ldr r3, [r7, #32]
+ 80069d6: 3302 adds r3, #2
+ 80069d8: 61bb str r3, [r7, #24]
+ switch (p_meta_evt->subevent)
+ 80069da: 69bb ldr r3, [r7, #24]
+ 80069dc: 781b ldrb r3, [r3, #0]
+ 80069de: 2b0c cmp r3, #12
+ 80069e0: d005 beq.n 80069ee <SVCCTL_App_Notification+0x86>
+ 80069e2: 2b0c cmp r3, #12
+ 80069e4: dc41 bgt.n 8006a6a <SVCCTL_App_Notification+0x102>
+ 80069e6: 2b01 cmp r3, #1
+ 80069e8: d017 beq.n 8006a1a <SVCCTL_App_Notification+0xb2>
+ 80069ea: 2b03 cmp r3, #3
+ break;
+ 80069ec: e03d b.n 8006a6a <SVCCTL_App_Notification+0x102>
+ p_evt_le_phy_update_complete = (hci_le_phy_update_complete_event_rp0*)p_meta_evt->data;
+ 80069ee: 69bb ldr r3, [r7, #24]
+ 80069f0: 3301 adds r3, #1
+ 80069f2: 617b str r3, [r7, #20]
+ ret = hci_le_read_phy(BleApplicationContext.BleApplicationContext_legacy.connectionHandle, &Tx_phy, &Rx_phy);
+ 80069f4: 4b35 ldr r3, [pc, #212] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 80069f6: 8adb ldrh r3, [r3, #22]
+ 80069f8: f107 020a add.w r2, r7, #10
+ 80069fc: f107 010b add.w r1, r7, #11
+ 8006a00: 4618 mov r0, r3
+ 8006a02: f7fe fcd5 bl 80053b0 <hci_le_read_phy>
+ 8006a06: 4603 mov r3, r0
+ 8006a08: f887 3027 strb.w r3, [r7, #39] @ 0x27
+ if (ret != BLE_STATUS_SUCCESS)
+ 8006a0c: f897 3027 ldrb.w r3, [r7, #39] @ 0x27
+ 8006a10: 2b00 cmp r3, #0
+ 8006a12: d12c bne.n 8006a6e <SVCCTL_App_Notification+0x106>
+ if ((Tx_phy == TX_2M) && (Rx_phy == RX_2M))
+ 8006a14: 7afb ldrb r3, [r7, #11]
+ 8006a16: 2b02 cmp r3, #2
+ break;
+ 8006a18: e029 b.n 8006a6e <SVCCTL_App_Notification+0x106>
+ p_connection_complete_event = (hci_le_connection_complete_event_rp0 *) p_meta_evt->data;
+ 8006a1a: 69bb ldr r3, [r7, #24]
+ 8006a1c: 3301 adds r3, #1
+ 8006a1e: 613b str r3, [r7, #16]
+ HW_TS_Stop(BleApplicationContext.Advertising_mgr_timer_Id);
+ 8006a20: 4b2a ldr r3, [pc, #168] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006a22: f893 3081 ldrb.w r3, [r3, #129] @ 0x81
+ 8006a26: 4618 mov r0, r3
+ 8006a28: f7fa fab6 bl 8000f98 <HW_TS_Stop>
+ if (BleApplicationContext.Device_Connection_Status == APP_BLE_LP_CONNECTING)
+ 8006a2c: 4b27 ldr r3, [pc, #156] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006a2e: f893 3080 ldrb.w r3, [r3, #128] @ 0x80
+ 8006a32: 2b04 cmp r3, #4
+ 8006a34: d104 bne.n 8006a40 <SVCCTL_App_Notification+0xd8>
+ BleApplicationContext.Device_Connection_Status = APP_BLE_CONNECTED_CLIENT;
+ 8006a36: 4b25 ldr r3, [pc, #148] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006a38: 2206 movs r2, #6
+ 8006a3a: f883 2080 strb.w r2, [r3, #128] @ 0x80
+ 8006a3e: e003 b.n 8006a48 <SVCCTL_App_Notification+0xe0>
+ BleApplicationContext.Device_Connection_Status = APP_BLE_CONNECTED_SERVER;
+ 8006a40: 4b22 ldr r3, [pc, #136] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006a42: 2205 movs r2, #5
+ 8006a44: f883 2080 strb.w r2, [r3, #128] @ 0x80
+ BleApplicationContext.BleApplicationContext_legacy.connectionHandle = p_connection_complete_event->Connection_Handle;
+ 8006a48: 693b ldr r3, [r7, #16]
+ 8006a4a: f8b3 3001 ldrh.w r3, [r3, #1]
+ 8006a4e: b29a uxth r2, r3
+ 8006a50: 4b1e ldr r3, [pc, #120] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006a52: 82da strh r2, [r3, #22]
+ HandleNotification.P2P_Evt_Opcode = PEER_CONN_HANDLE_EVT;
+ 8006a54: 4b1e ldr r3, [pc, #120] @ (8006ad0 <SVCCTL_App_Notification+0x168>)
+ 8006a56: 2200 movs r2, #0
+ 8006a58: 701a strb r2, [r3, #0]
+ HandleNotification.ConnectionHandle = BleApplicationContext.BleApplicationContext_legacy.connectionHandle;
+ 8006a5a: 4b1c ldr r3, [pc, #112] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006a5c: 8ada ldrh r2, [r3, #22]
+ 8006a5e: 4b1c ldr r3, [pc, #112] @ (8006ad0 <SVCCTL_App_Notification+0x168>)
+ 8006a60: 805a strh r2, [r3, #2]
+ P2PS_APP_Notification(&HandleNotification);
+ 8006a62: 481b ldr r0, [pc, #108] @ (8006ad0 <SVCCTL_App_Notification+0x168>)
+ 8006a64: f000 fa70 bl 8006f48 <P2PS_APP_Notification>
+ break; /* HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE */
+ 8006a68: e002 b.n 8006a70 <SVCCTL_App_Notification+0x108>
+ break;
+ 8006a6a: bf00 nop
+ 8006a6c: e028 b.n 8006ac0 <SVCCTL_App_Notification+0x158>
+ break;
+ 8006a6e: bf00 nop
+ break; /* HCI_LE_META_EVT_CODE */
+ 8006a70: e026 b.n 8006ac0 <SVCCTL_App_Notification+0x158>
+ p_blecore_evt = (evt_blecore_aci*) p_event_pckt->data;
+ 8006a72: 6a3b ldr r3, [r7, #32]
+ 8006a74: 3302 adds r3, #2
+ 8006a76: 61fb str r3, [r7, #28]
+ switch (p_blecore_evt->ecode)
+ 8006a78: 69fb ldr r3, [r7, #28]
+ 8006a7a: 881b ldrh r3, [r3, #0]
+ 8006a7c: b29b uxth r3, r3
+ 8006a7e: f640 420e movw r2, #3086 @ 0xc0e
+ 8006a82: 4293 cmp r3, r2
+ 8006a84: d00f beq.n 8006aa6 <SVCCTL_App_Notification+0x13e>
+ 8006a86: f640 420e movw r2, #3086 @ 0xc0e
+ 8006a8a: 4293 cmp r3, r2
+ 8006a8c: dc17 bgt.n 8006abe <SVCCTL_App_Notification+0x156>
+ 8006a8e: f5b3 6f00 cmp.w r3, #2048 @ 0x800
+ 8006a92: d00e beq.n 8006ab2 <SVCCTL_App_Notification+0x14a>
+ 8006a94: f5b3 6f00 cmp.w r3, #2048 @ 0x800
+ 8006a98: dc11 bgt.n 8006abe <SVCCTL_App_Notification+0x156>
+ 8006a9a: 2b04 cmp r3, #4
+ 8006a9c: d00b beq.n 8006ab6 <SVCCTL_App_Notification+0x14e>
+ 8006a9e: f240 4207 movw r2, #1031 @ 0x407
+ 8006aa2: 4293 cmp r3, r2
+ break; /* ACI_GAP_PROC_COMPLETE_VSEVT_CODE */
+ 8006aa4: e008 b.n 8006ab8 <SVCCTL_App_Notification+0x150>
+ aci_gatt_confirm_indication(BleApplicationContext.BleApplicationContext_legacy.connectionHandle);
+ 8006aa6: 4b09 ldr r3, [pc, #36] @ (8006acc <SVCCTL_App_Notification+0x164>)
+ 8006aa8: 8adb ldrh r3, [r3, #22]
+ 8006aaa: 4618 mov r0, r3
+ 8006aac: f7fe fac7 bl 800503e <aci_gatt_confirm_indication>
+ break;
+ 8006ab0: e002 b.n 8006ab8 <SVCCTL_App_Notification+0x150>
+ break;
+ 8006ab2: bf00 nop
+ 8006ab4: e003 b.n 8006abe <SVCCTL_App_Notification+0x156>
+ break; /* ACI_HAL_END_OF_RADIO_ACTIVITY_VSEVT_CODE */
+ 8006ab6: bf00 nop
+ break; /* HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE */
+ 8006ab8: e001 b.n 8006abe <SVCCTL_App_Notification+0x156>
+ break;
+ 8006aba: bf00 nop
+ 8006abc: e000 b.n 8006ac0 <SVCCTL_App_Notification+0x158>
+ break; /* HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE */
+ 8006abe: bf00 nop
+ }
+
+ return (SVCCTL_UserEvtFlowEnable);
+ 8006ac0: 2301 movs r3, #1
+}
+ 8006ac2: 4618 mov r0, r3
+ 8006ac4: 3728 adds r7, #40 @ 0x28
+ 8006ac6: 46bd mov sp, r7
+ 8006ac8: bd80 pop {r7, pc}
+ 8006aca: bf00 nop
+ 8006acc: 20000270 .word 0x20000270
+ 8006ad0: 200002f8 .word 0x200002f8
+
+08006ad4 <Ble_Tl_Init>:
+ *
+ * LOCAL FUNCTIONS
+ *
+ *************************************************************/
+static void Ble_Tl_Init(void)
+{
+ 8006ad4: b580 push {r7, lr}
+ 8006ad6: b082 sub sp, #8
+ 8006ad8: af00 add r7, sp, #0
+ HCI_TL_HciInitConf_t Hci_Tl_Init_Conf;
+
+ Hci_Tl_Init_Conf.p_cmdbuffer = (uint8_t*)&BleCmdBuffer;
+ 8006ada: 4b06 ldr r3, [pc, #24] @ (8006af4 <Ble_Tl_Init+0x20>)
+ 8006adc: 603b str r3, [r7, #0]
+ Hci_Tl_Init_Conf.StatusNotCallBack = BLE_StatusNot;
+ 8006ade: 4b06 ldr r3, [pc, #24] @ (8006af8 <Ble_Tl_Init+0x24>)
+ 8006ae0: 607b str r3, [r7, #4]
+ hci_init(BLE_UserEvtRx, (void*) &Hci_Tl_Init_Conf);
+ 8006ae2: 463b mov r3, r7
+ 8006ae4: 4619 mov r1, r3
+ 8006ae6: 4805 ldr r0, [pc, #20] @ (8006afc <Ble_Tl_Init+0x28>)
+ 8006ae8: f7ff f892 bl 8005c10 <hci_init>
+
+ return;
+ 8006aec: bf00 nop
+}
+ 8006aee: 3708 adds r7, #8
+ 8006af0: 46bd mov sp, r7
+ 8006af2: bd80 pop {r7, pc}
+ 8006af4: 200300d8 .word 0x200300d8
+ 8006af8: 08006edb .word 0x08006edb
+ 8006afc: 08006ea3 .word 0x08006ea3
+
+08006b00 <Ble_Hci_Gap_Gatt_Init>:
+
+static void Ble_Hci_Gap_Gatt_Init(void)
+{
+ 8006b00: b5f0 push {r4, r5, r6, r7, lr}
+ 8006b02: b08d sub sp, #52 @ 0x34
+ 8006b04: af06 add r7, sp, #24
+ uint8_t role;
+ uint16_t gap_service_handle, gap_dev_name_char_handle, gap_appearance_char_handle;
+ const uint8_t *p_bd_addr;
+ uint16_t a_appearance[1] = {BLE_CFG_GAP_APPEARANCE};
+ 8006b06: 2300 movs r3, #0
+ 8006b08: 803b strh r3, [r7, #0]
+ tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
+ 8006b0a: 2392 movs r3, #146 @ 0x92
+ 8006b0c: 75fb strb r3, [r7, #23]
+
+ /**
+ * Initialize HCI layer
+ */
+ /*HCI Reset to synchronise BLE Stack*/
+ ret = hci_reset();
+ 8006b0e: f7fe fc2b bl 8005368 <hci_reset>
+ 8006b12: 4603 mov r3, r0
+ 8006b14: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Write the BD Address
+ */
+ p_bd_addr = BleGetBdAddress();
+ 8006b16: f000 f935 bl 8006d84 <BleGetBdAddress>
+ 8006b1a: 6138 str r0, [r7, #16]
+ ret = aci_hal_write_config_data(CONFIG_DATA_PUBLIC_ADDRESS_OFFSET, CONFIG_DATA_PUBLIC_ADDRESS_LEN, (uint8_t*) p_bd_addr);
+ 8006b1c: 693a ldr r2, [r7, #16]
+ 8006b1e: 2106 movs r1, #6
+ 8006b20: 2000 movs r0, #0
+ 8006b22: f7fe fae1 bl 80050e8 <aci_hal_write_config_data>
+ 8006b26: 4603 mov r3, r0
+ 8006b28: 75fb strb r3, [r7, #23]
+ APP_DBG_MSG(" Public Bluetooth Address: %02x:%02x:%02x:%02x:%02x:%02x\n",p_bd_addr[5],p_bd_addr[4],p_bd_addr[3],p_bd_addr[2],p_bd_addr[1],p_bd_addr[0]);
+ }
+
+#if (CFG_BLE_ADDRESS_TYPE == GAP_PUBLIC_ADDR)
+ /* BLE MAC in ADV Packet */
+ a_ManufData[ sizeof(a_ManufData)-6] = p_bd_addr[5];
+ 8006b2a: 693b ldr r3, [r7, #16]
+ 8006b2c: 3305 adds r3, #5
+ 8006b2e: 781a ldrb r2, [r3, #0]
+ 8006b30: 4b56 ldr r3, [pc, #344] @ (8006c8c <Ble_Hci_Gap_Gatt_Init+0x18c>)
+ 8006b32: 721a strb r2, [r3, #8]
+ a_ManufData[ sizeof(a_ManufData)-5] = p_bd_addr[4];
+ 8006b34: 693b ldr r3, [r7, #16]
+ 8006b36: 3304 adds r3, #4
+ 8006b38: 781a ldrb r2, [r3, #0]
+ 8006b3a: 4b54 ldr r3, [pc, #336] @ (8006c8c <Ble_Hci_Gap_Gatt_Init+0x18c>)
+ 8006b3c: 725a strb r2, [r3, #9]
+ a_ManufData[ sizeof(a_ManufData)-4] = p_bd_addr[3];
+ 8006b3e: 693b ldr r3, [r7, #16]
+ 8006b40: 3303 adds r3, #3
+ 8006b42: 781a ldrb r2, [r3, #0]
+ 8006b44: 4b51 ldr r3, [pc, #324] @ (8006c8c <Ble_Hci_Gap_Gatt_Init+0x18c>)
+ 8006b46: 729a strb r2, [r3, #10]
+ a_ManufData[ sizeof(a_ManufData)-3] = p_bd_addr[2];
+ 8006b48: 693b ldr r3, [r7, #16]
+ 8006b4a: 3302 adds r3, #2
+ 8006b4c: 781a ldrb r2, [r3, #0]
+ 8006b4e: 4b4f ldr r3, [pc, #316] @ (8006c8c <Ble_Hci_Gap_Gatt_Init+0x18c>)
+ 8006b50: 72da strb r2, [r3, #11]
+ a_ManufData[ sizeof(a_ManufData)-2] = p_bd_addr[1];
+ 8006b52: 693b ldr r3, [r7, #16]
+ 8006b54: 3301 adds r3, #1
+ 8006b56: 781a ldrb r2, [r3, #0]
+ 8006b58: 4b4c ldr r3, [pc, #304] @ (8006c8c <Ble_Hci_Gap_Gatt_Init+0x18c>)
+ 8006b5a: 731a strb r2, [r3, #12]
+ a_ManufData[ sizeof(a_ManufData)-1] = p_bd_addr[0];
+ 8006b5c: 693b ldr r3, [r7, #16]
+ 8006b5e: 781a ldrb r2, [r3, #0]
+ 8006b60: 4b4a ldr r3, [pc, #296] @ (8006c8c <Ble_Hci_Gap_Gatt_Init+0x18c>)
+ 8006b62: 735a strb r2, [r3, #13]
+#endif /* CFG_BLE_ADDRESS_TYPE != GAP_PUBLIC_ADDR */
+
+ /**
+ * Write Identity root key used to derive IRK and DHK(Legacy)
+ */
+ ret = aci_hal_write_config_data(CONFIG_DATA_IR_OFFSET, CONFIG_DATA_IR_LEN, (uint8_t*)a_BLE_CfgIrValue);
+ 8006b64: 4a4a ldr r2, [pc, #296] @ (8006c90 <Ble_Hci_Gap_Gatt_Init+0x190>)
+ 8006b66: 2110 movs r1, #16
+ 8006b68: 2018 movs r0, #24
+ 8006b6a: f7fe fabd bl 80050e8 <aci_hal_write_config_data>
+ 8006b6e: 4603 mov r3, r0
+ 8006b70: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Write Encryption root key used to derive LTK and CSRK
+ */
+ ret = aci_hal_write_config_data(CONFIG_DATA_ER_OFFSET, CONFIG_DATA_ER_LEN, (uint8_t*)a_BLE_CfgErValue);
+ 8006b72: 4a48 ldr r2, [pc, #288] @ (8006c94 <Ble_Hci_Gap_Gatt_Init+0x194>)
+ 8006b74: 2110 movs r1, #16
+ 8006b76: 2008 movs r0, #8
+ 8006b78: f7fe fab6 bl 80050e8 <aci_hal_write_config_data>
+ 8006b7c: 4603 mov r3, r0
+ 8006b7e: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Set TX Power.
+ */
+ ret = aci_hal_set_tx_power_level(1, CFG_TX_POWER);
+ 8006b80: 2118 movs r1, #24
+ 8006b82: 2001 movs r0, #1
+ 8006b84: f7fe fb35 bl 80051f2 <aci_hal_set_tx_power_level>
+ 8006b88: 4603 mov r3, r0
+ 8006b8a: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Initialize GATT interface
+ */
+ ret = aci_gatt_init();
+ 8006b8c: f7fd ffab bl 8004ae6 <aci_gatt_init>
+ 8006b90: 4603 mov r3, r0
+ 8006b92: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Initialize GAP interface
+ */
+ role = 0;
+ 8006b94: 2300 movs r3, #0
+ 8006b96: 73fb strb r3, [r7, #15]
+
+#if (BLE_CFG_PERIPHERAL == 1)
+ role |= GAP_PERIPHERAL_ROLE;
+ 8006b98: 7bfb ldrb r3, [r7, #15]
+ 8006b9a: f043 0301 orr.w r3, r3, #1
+ 8006b9e: 73fb strb r3, [r7, #15]
+
+/* USER CODE BEGIN Role_Mngt*/
+
+/* USER CODE END Role_Mngt */
+
+ if (role > 0)
+ 8006ba0: 7bfb ldrb r3, [r7, #15]
+ 8006ba2: 2b00 cmp r3, #0
+ 8006ba4: d01f beq.n 8006be6 <Ble_Hci_Gap_Gatt_Init+0xe6>
+ {
+ const char *name = "P2PSRV1";
+ 8006ba6: 4b3c ldr r3, [pc, #240] @ (8006c98 <Ble_Hci_Gap_Gatt_Init+0x198>)
+ 8006ba8: 60bb str r3, [r7, #8]
+ ret = aci_gap_init(role,
+ 8006baa: 1dba adds r2, r7, #6
+ 8006bac: 7bf8 ldrb r0, [r7, #15]
+ 8006bae: 1cbb adds r3, r7, #2
+ 8006bb0: 9301 str r3, [sp, #4]
+ 8006bb2: 1d3b adds r3, r7, #4
+ 8006bb4: 9300 str r3, [sp, #0]
+ 8006bb6: 4613 mov r3, r2
+ 8006bb8: 2207 movs r2, #7
+ 8006bba: 2100 movs r1, #0
+ 8006bbc: f7fd fe50 bl 8004860 <aci_gap_init>
+ 8006bc0: 4603 mov r3, r0
+ 8006bc2: 75fb strb r3, [r7, #23]
+ else
+ {
+ APP_DBG_MSG(" Success: aci_gap_init command\n");
+ }
+
+ ret = aci_gatt_update_char_value(gap_service_handle, gap_dev_name_char_handle, 0, strlen(name), (uint8_t *) name);
+ 8006bc4: 88fc ldrh r4, [r7, #6]
+ 8006bc6: 88bd ldrh r5, [r7, #4]
+ 8006bc8: 68b8 ldr r0, [r7, #8]
+ 8006bca: f7f9 fad7 bl 800017c <strlen>
+ 8006bce: 4603 mov r3, r0
+ 8006bd0: b2da uxtb r2, r3
+ 8006bd2: 68bb ldr r3, [r7, #8]
+ 8006bd4: 9300 str r3, [sp, #0]
+ 8006bd6: 4613 mov r3, r2
+ 8006bd8: 2200 movs r2, #0
+ 8006bda: 4629 mov r1, r5
+ 8006bdc: 4620 mov r0, r4
+ 8006bde: f7fe f985 bl 8004eec <aci_gatt_update_char_value>
+ 8006be2: 4603 mov r3, r0
+ 8006be4: 75fb strb r3, [r7, #23]
+ {
+ BLE_DBG_SVCCTL_MSG(" Success: aci_gatt_update_char_value - Device Name\n");
+ }
+ }
+
+ ret = aci_gatt_update_char_value(gap_service_handle,
+ 8006be6: 88f8 ldrh r0, [r7, #6]
+ 8006be8: 8879 ldrh r1, [r7, #2]
+ 8006bea: 463b mov r3, r7
+ 8006bec: 9300 str r3, [sp, #0]
+ 8006bee: 2302 movs r3, #2
+ 8006bf0: 2200 movs r2, #0
+ 8006bf2: f7fe f97b bl 8004eec <aci_gatt_update_char_value>
+ 8006bf6: 4603 mov r3, r0
+ 8006bf8: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Initialize Default PHY
+ */
+ ret = hci_le_set_default_phy(ALL_PHYS_PREFERENCE,TX_2M_PREFERRED,RX_2M_PREFERRED);
+ 8006bfa: 2202 movs r2, #2
+ 8006bfc: 2102 movs r1, #2
+ 8006bfe: 2000 movs r0, #0
+ 8006c00: f7fe fc54 bl 80054ac <hci_le_set_default_phy>
+ 8006c04: 4603 mov r3, r0
+ 8006c06: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Initialize IO capability
+ */
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.ioCapability = CFG_IO_CAPABILITY;
+ 8006c08: 4b24 ldr r3, [pc, #144] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c0a: 2201 movs r2, #1
+ 8006c0c: 701a strb r2, [r3, #0]
+ ret = aci_gap_set_io_capability(BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.ioCapability);
+ 8006c0e: 4b23 ldr r3, [pc, #140] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c10: 781b ldrb r3, [r3, #0]
+ 8006c12: 4618 mov r0, r3
+ 8006c14: f7fd fd0c bl 8004630 <aci_gap_set_io_capability>
+ 8006c18: 4603 mov r3, r0
+ 8006c1a: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Initialize authentication
+ */
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.mitm_mode = CFG_MITM_PROTECTION;
+ 8006c1c: 4b1f ldr r3, [pc, #124] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c1e: 2201 movs r2, #1
+ 8006c20: 705a strb r2, [r3, #1]
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMin = CFG_ENCRYPTION_KEY_SIZE_MIN;
+ 8006c22: 4b1e ldr r3, [pc, #120] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c24: 2208 movs r2, #8
+ 8006c26: 711a strb r2, [r3, #4]
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.encryptionKeySizeMax = CFG_ENCRYPTION_KEY_SIZE_MAX;
+ 8006c28: 4b1c ldr r3, [pc, #112] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c2a: 2210 movs r2, #16
+ 8006c2c: 715a strb r2, [r3, #5]
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Use_Fixed_Pin = CFG_USED_FIXED_PIN;
+ 8006c2e: 4b1b ldr r3, [pc, #108] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c30: 2200 movs r2, #0
+ 8006c32: 70da strb r2, [r3, #3]
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.Fixed_Pin = CFG_FIXED_PIN;
+ 8006c34: 4b19 ldr r3, [pc, #100] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c36: 4a1a ldr r2, [pc, #104] @ (8006ca0 <Ble_Hci_Gap_Gatt_Init+0x1a0>)
+ 8006c38: 609a str r2, [r3, #8]
+ BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.bonding_mode = CFG_BONDING_MODE;
+ 8006c3a: 4b18 ldr r3, [pc, #96] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c3c: 2201 movs r2, #1
+ 8006c3e: 709a strb r2, [r3, #2]
+ /* USER CODE BEGIN Ble_Hci_Gap_Gatt_Init_1*/
+
+ /* USER CODE END Ble_Hci_Gap_Gatt_Init_1*/
+
+ ret = aci_gap_set_authentication_requirement(BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.bonding_mode,
+ 8006c40: 4b16 ldr r3, [pc, #88] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c42: 789c ldrb r4, [r3, #2]
+ 8006c44: 4b15 ldr r3, [pc, #84] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c46: 785d ldrb r5, [r3, #1]
+ 8006c48: 4b14 ldr r3, [pc, #80] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c4a: 791b ldrb r3, [r3, #4]
+ 8006c4c: 4a13 ldr r2, [pc, #76] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c4e: 7952 ldrb r2, [r2, #5]
+ 8006c50: 4912 ldr r1, [pc, #72] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c52: 78c9 ldrb r1, [r1, #3]
+ 8006c54: 4811 ldr r0, [pc, #68] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c56: 6880 ldr r0, [r0, #8]
+ 8006c58: 2600 movs r6, #0
+ 8006c5a: 9604 str r6, [sp, #16]
+ 8006c5c: 9003 str r0, [sp, #12]
+ 8006c5e: 9102 str r1, [sp, #8]
+ 8006c60: 9201 str r2, [sp, #4]
+ 8006c62: 9300 str r3, [sp, #0]
+ 8006c64: 2300 movs r3, #0
+ 8006c66: 2201 movs r2, #1
+ 8006c68: 4629 mov r1, r5
+ 8006c6a: 4620 mov r0, r4
+ 8006c6c: f7fd fd34 bl 80046d8 <aci_gap_set_authentication_requirement>
+ 8006c70: 4603 mov r3, r0
+ 8006c72: 75fb strb r3, [r7, #23]
+ }
+
+ /**
+ * Initialize whitelist
+ */
+ if (BleApplicationContext.BleApplicationContext_legacy.bleSecurityParam.bonding_mode)
+ 8006c74: 4b09 ldr r3, [pc, #36] @ (8006c9c <Ble_Hci_Gap_Gatt_Init+0x19c>)
+ 8006c76: 789b ldrb r3, [r3, #2]
+ 8006c78: 2b00 cmp r3, #0
+ 8006c7a: d003 beq.n 8006c84 <Ble_Hci_Gap_Gatt_Init+0x184>
+ {
+ ret = aci_gap_configure_whitelist();
+ 8006c7c: f7fd ff0f bl 8004a9e <aci_gap_configure_filter_accept_list>
+ 8006c80: 4603 mov r3, r0
+ 8006c82: 75fb strb r3, [r7, #23]
+ {
+ APP_DBG_MSG(" Success: aci_gap_configure_whitelist command\n");
+ }
+ }
+ APP_DBG_MSG("==>> End Ble_Hci_Gap_Gatt_Init function\n\r");
+}
+ 8006c84: bf00 nop
+ 8006c86: 371c adds r7, #28
+ 8006c88: 46bd mov sp, r7
+ 8006c8a: bdf0 pop {r4, r5, r6, r7, pc}
+ 8006c8c: 20000014 .word 0x20000014
+ 8006c90: 08007df8 .word 0x08007df8
+ 8006c94: 08007e08 .word 0x08007e08
+ 8006c98: 08007c38 .word 0x08007c38
+ 8006c9c: 20000270 .word 0x20000270
+ 8006ca0: 0001b207 .word 0x0001b207
+
+08006ca4 <Adv_Request>:
+
+static void Adv_Request(APP_BLE_ConnStatus_t NewStatus)
+{
+ 8006ca4: b580 push {r7, lr}
+ 8006ca6: b08c sub sp, #48 @ 0x30
+ 8006ca8: af08 add r7, sp, #32
+ 8006caa: 4603 mov r3, r0
+ 8006cac: 71fb strb r3, [r7, #7]
+ tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
+ 8006cae: 2392 movs r3, #146 @ 0x92
+ 8006cb0: 72fb strb r3, [r7, #11]
+ uint16_t Min_Inter, Max_Inter;
+
+ if (NewStatus == APP_BLE_FAST_ADV)
+ 8006cb2: 79fb ldrb r3, [r7, #7]
+ 8006cb4: 2b01 cmp r3, #1
+ 8006cb6: d106 bne.n 8006cc6 <Adv_Request+0x22>
+ {
+ Min_Inter = AdvIntervalMin;
+ 8006cb8: 4b2b ldr r3, [pc, #172] @ (8006d68 <Adv_Request+0xc4>)
+ 8006cba: 881b ldrh r3, [r3, #0]
+ 8006cbc: 81fb strh r3, [r7, #14]
+ Max_Inter = AdvIntervalMax;
+ 8006cbe: 4b2b ldr r3, [pc, #172] @ (8006d6c <Adv_Request+0xc8>)
+ 8006cc0: 881b ldrh r3, [r3, #0]
+ 8006cc2: 81bb strh r3, [r7, #12]
+ 8006cc4: e005 b.n 8006cd2 <Adv_Request+0x2e>
+ }
+ else
+ {
+ Min_Inter = CFG_LP_CONN_ADV_INTERVAL_MIN;
+ 8006cc6: f44f 63c8 mov.w r3, #1600 @ 0x640
+ 8006cca: 81fb strh r3, [r7, #14]
+ Max_Inter = CFG_LP_CONN_ADV_INTERVAL_MAX;
+ 8006ccc: f44f 637a mov.w r3, #4000 @ 0xfa0
+ 8006cd0: 81bb strh r3, [r7, #12]
+
+ /**
+ * Stop the timer, it will be restarted for a new shot
+ * It does not hurt if the timer was not running
+ */
+ HW_TS_Stop(BleApplicationContext.Advertising_mgr_timer_Id);
+ 8006cd2: 4b27 ldr r3, [pc, #156] @ (8006d70 <Adv_Request+0xcc>)
+ 8006cd4: f893 3081 ldrb.w r3, [r3, #129] @ 0x81
+ 8006cd8: 4618 mov r0, r3
+ 8006cda: f7fa f95d bl 8000f98 <HW_TS_Stop>
+
+ if ((NewStatus == APP_BLE_LP_ADV)
+ 8006cde: 79fb ldrb r3, [r7, #7]
+ 8006ce0: 2b02 cmp r3, #2
+ 8006ce2: d10d bne.n 8006d00 <Adv_Request+0x5c>
+ && ((BleApplicationContext.Device_Connection_Status == APP_BLE_FAST_ADV)
+ 8006ce4: 4b22 ldr r3, [pc, #136] @ (8006d70 <Adv_Request+0xcc>)
+ 8006ce6: f893 3080 ldrb.w r3, [r3, #128] @ 0x80
+ 8006cea: 2b01 cmp r3, #1
+ 8006cec: d004 beq.n 8006cf8 <Adv_Request+0x54>
+ || (BleApplicationContext.Device_Connection_Status == APP_BLE_LP_ADV)))
+ 8006cee: 4b20 ldr r3, [pc, #128] @ (8006d70 <Adv_Request+0xcc>)
+ 8006cf0: f893 3080 ldrb.w r3, [r3, #128] @ 0x80
+ 8006cf4: 2b02 cmp r3, #2
+ 8006cf6: d103 bne.n 8006d00 <Adv_Request+0x5c>
+ {
+ /* Connection in ADVERTISE mode have to stop the current advertising */
+ ret = aci_gap_set_non_discoverable();
+ 8006cf8: f7fd fb7c bl 80043f4 <aci_gap_set_non_discoverable>
+ 8006cfc: 4603 mov r3, r0
+ 8006cfe: 72fb strb r3, [r7, #11]
+ {
+ APP_DBG_MSG("==>> aci_gap_set_non_discoverable - Successfully Stopped Advertising \n");
+ }
+ }
+
+ BleApplicationContext.Device_Connection_Status = NewStatus;
+ 8006d00: 4a1b ldr r2, [pc, #108] @ (8006d70 <Adv_Request+0xcc>)
+ 8006d02: 79fb ldrb r3, [r7, #7]
+ 8006d04: f882 3080 strb.w r3, [r2, #128] @ 0x80
+ /* Start Fast or Low Power Advertising */
+ ret = aci_gap_set_discoverable(ADV_IND,
+ 8006d08: 4b19 ldr r3, [pc, #100] @ (8006d70 <Adv_Request+0xcc>)
+ 8006d0a: 7e1b ldrb r3, [r3, #24]
+ 8006d0c: 89ba ldrh r2, [r7, #12]
+ 8006d0e: 89f9 ldrh r1, [r7, #14]
+ 8006d10: 2000 movs r0, #0
+ 8006d12: 9006 str r0, [sp, #24]
+ 8006d14: 2000 movs r0, #0
+ 8006d16: 9005 str r0, [sp, #20]
+ 8006d18: 4816 ldr r0, [pc, #88] @ (8006d74 <Adv_Request+0xd0>)
+ 8006d1a: 9004 str r0, [sp, #16]
+ 8006d1c: 9303 str r3, [sp, #12]
+ 8006d1e: 4b16 ldr r3, [pc, #88] @ (8006d78 <Adv_Request+0xd4>)
+ 8006d20: 9302 str r3, [sp, #8]
+ 8006d22: 2308 movs r3, #8
+ 8006d24: 9301 str r3, [sp, #4]
+ 8006d26: 2300 movs r3, #0
+ 8006d28: 9300 str r3, [sp, #0]
+ 8006d2a: 2300 movs r3, #0
+ 8006d2c: 2000 movs r0, #0
+ 8006d2e: f7fd fb85 bl 800443c <aci_gap_set_discoverable>
+ 8006d32: 4603 mov r3, r0
+ 8006d34: 72fb strb r3, [r7, #11]
+ {
+ APP_DBG_MSG("==>> aci_gap_set_discoverable - Success\n");
+ }
+
+ /* Update Advertising data */
+ ret = aci_gap_update_adv_data(sizeof(a_ManufData), (uint8_t*) a_ManufData);
+ 8006d36: 4911 ldr r1, [pc, #68] @ (8006d7c <Adv_Request+0xd8>)
+ 8006d38: 200e movs r0, #14
+ 8006d3a: f7fd fe3e bl 80049ba <aci_gap_update_adv_data>
+ 8006d3e: 4603 mov r3, r0
+ 8006d40: 72fb strb r3, [r7, #11]
+ if (ret != BLE_STATUS_SUCCESS)
+ 8006d42: 7afb ldrb r3, [r7, #11]
+ 8006d44: 2b00 cmp r3, #0
+ 8006d46: d10a bne.n 8006d5e <Adv_Request+0xba>
+ APP_DBG_MSG("==>> Start Low Power Advertising Failed , result: %d \n\r", ret);
+ }
+ }
+ else
+ {
+ if (NewStatus == APP_BLE_FAST_ADV)
+ 8006d48: 79fb ldrb r3, [r7, #7]
+ 8006d4a: 2b01 cmp r3, #1
+ 8006d4c: d107 bne.n 8006d5e <Adv_Request+0xba>
+ {
+ APP_DBG_MSG("==>> Success: Start Fast Advertising \n\r");
+ /* Start Timer to STOP ADV - TIMEOUT - and next Restart Low Power Advertising */
+ HW_TS_Start(BleApplicationContext.Advertising_mgr_timer_Id, INITIAL_ADV_TIMEOUT);
+ 8006d4e: 4b08 ldr r3, [pc, #32] @ (8006d70 <Adv_Request+0xcc>)
+ 8006d50: f893 3081 ldrb.w r3, [r3, #129] @ 0x81
+ 8006d54: 490a ldr r1, [pc, #40] @ (8006d80 <Adv_Request+0xdc>)
+ 8006d56: 4618 mov r0, r3
+ 8006d58: f7fa f9a2 bl 80010a0 <HW_TS_Start>
+ {
+ APP_DBG_MSG("==>> Success: Start Low Power Advertising \n\r");
+ }
+ }
+
+ return;
+ 8006d5c: bf00 nop
+ 8006d5e: bf00 nop
+}
+ 8006d60: 3710 adds r7, #16
+ 8006d62: 46bd mov sp, r7
+ 8006d64: bd80 pop {r7, pc}
+ 8006d66: bf00 nop
+ 8006d68: 200002f4 .word 0x200002f4
+ 8006d6c: 200002f6 .word 0x200002f6
+ 8006d70: 20000270 .word 0x20000270
+ 8006d74: 20000289 .word 0x20000289
+ 8006d78: 08007e18 .word 0x08007e18
+ 8006d7c: 20000014 .word 0x20000014
+ 8006d80: 0001e046 .word 0x0001e046
+
+08006d84 <BleGetBdAddress>:
+
+const uint8_t* BleGetBdAddress(void)
+{
+ 8006d84: b580 push {r7, lr}
+ 8006d86: b086 sub sp, #24
+ 8006d88: af00 add r7, sp, #0
+ const uint8_t *p_bd_addr;
+ uint32_t udn;
+ uint32_t company_id;
+ uint32_t device_id;
+
+ udn = LL_FLASH_GetUDN();
+ 8006d8a: f7ff fd4f bl 800682c <LL_FLASH_GetUDN>
+ 8006d8e: 6138 str r0, [r7, #16]
+
+ if (udn != 0xFFFFFFFF)
+ 8006d90: 693b ldr r3, [r7, #16]
+ 8006d92: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
+ 8006d96: d023 beq.n 8006de0 <BleGetBdAddress+0x5c>
+ {
+ company_id = LL_FLASH_GetSTCompanyID();
+ 8006d98: f7ff fd60 bl 800685c <LL_FLASH_GetSTCompanyID>
+ 8006d9c: 60b8 str r0, [r7, #8]
+ device_id = LL_FLASH_GetDeviceID();
+ 8006d9e: f7ff fd51 bl 8006844 <LL_FLASH_GetDeviceID>
+ 8006da2: 6078 str r0, [r7, #4]
+ * bit[23:16] : Device ID.
+ * bit[15:0] : The last 16bits from the UDN
+ * Note: In order to use the Public Address in a final product, a dedicated
+ * 24bits company ID (OUI) shall be bought.
+ */
+ a_BdAddrUdn[0] = (uint8_t)(udn & 0x000000FF);
+ 8006da4: 693b ldr r3, [r7, #16]
+ 8006da6: b2da uxtb r2, r3
+ 8006da8: 4b16 ldr r3, [pc, #88] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006daa: 701a strb r2, [r3, #0]
+ a_BdAddrUdn[1] = (uint8_t)((udn & 0x0000FF00) >> 8);
+ 8006dac: 693b ldr r3, [r7, #16]
+ 8006dae: 0a1b lsrs r3, r3, #8
+ 8006db0: b2da uxtb r2, r3
+ 8006db2: 4b14 ldr r3, [pc, #80] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006db4: 705a strb r2, [r3, #1]
+ a_BdAddrUdn[2] = (uint8_t)device_id;
+ 8006db6: 687b ldr r3, [r7, #4]
+ 8006db8: b2da uxtb r2, r3
+ 8006dba: 4b12 ldr r3, [pc, #72] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006dbc: 709a strb r2, [r3, #2]
+ a_BdAddrUdn[3] = (uint8_t)(company_id & 0x000000FF);
+ 8006dbe: 68bb ldr r3, [r7, #8]
+ 8006dc0: b2da uxtb r2, r3
+ 8006dc2: 4b10 ldr r3, [pc, #64] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006dc4: 70da strb r2, [r3, #3]
+ a_BdAddrUdn[4] = (uint8_t)((company_id & 0x0000FF00) >> 8);
+ 8006dc6: 68bb ldr r3, [r7, #8]
+ 8006dc8: 0a1b lsrs r3, r3, #8
+ 8006dca: b2da uxtb r2, r3
+ 8006dcc: 4b0d ldr r3, [pc, #52] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006dce: 711a strb r2, [r3, #4]
+ a_BdAddrUdn[5] = (uint8_t)((company_id & 0x00FF0000) >> 16);
+ 8006dd0: 68bb ldr r3, [r7, #8]
+ 8006dd2: 0c1b lsrs r3, r3, #16
+ 8006dd4: b2da uxtb r2, r3
+ 8006dd6: 4b0b ldr r3, [pc, #44] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006dd8: 715a strb r2, [r3, #5]
+
+ p_bd_addr = (const uint8_t *)a_BdAddrUdn;
+ 8006dda: 4b0a ldr r3, [pc, #40] @ (8006e04 <BleGetBdAddress+0x80>)
+ 8006ddc: 617b str r3, [r7, #20]
+ 8006dde: e00b b.n 8006df8 <BleGetBdAddress+0x74>
+ }
+ else
+ {
+ p_otp_addr = OTP_Read(0);
+ 8006de0: 2000 movs r0, #0
+ 8006de2: f7ff fc3d bl 8006660 <OTP_Read>
+ 8006de6: 60f8 str r0, [r7, #12]
+ if (p_otp_addr)
+ 8006de8: 68fb ldr r3, [r7, #12]
+ 8006dea: 2b00 cmp r3, #0
+ 8006dec: d002 beq.n 8006df4 <BleGetBdAddress+0x70>
+ {
+ p_bd_addr = ((OTP_ID0_t*)p_otp_addr)->bd_address;
+ 8006dee: 68fb ldr r3, [r7, #12]
+ 8006df0: 617b str r3, [r7, #20]
+ 8006df2: e001 b.n 8006df8 <BleGetBdAddress+0x74>
+ }
+ else
+ {
+ p_bd_addr = a_MBdAddr;
+ 8006df4: 4b04 ldr r3, [pc, #16] @ (8006e08 <BleGetBdAddress+0x84>)
+ 8006df6: 617b str r3, [r7, #20]
+ }
+ }
+
+ return p_bd_addr;
+ 8006df8: 697b ldr r3, [r7, #20]
+}
+ 8006dfa: 4618 mov r0, r3
+ 8006dfc: 3718 adds r7, #24
+ 8006dfe: 46bd mov sp, r7
+ 8006e00: bd80 pop {r7, pc}
+ 8006e02: bf00 nop
+ 8006e04: 20000268 .word 0x20000268
+ 8006e08: 08007df0 .word 0x08007df0
+
+08006e0c <Adv_Cancel>:
+ *
+ * SPECIFIC FUNCTIONS FOR P2P SERVER
+ *
+ *************************************************************/
+static void Adv_Cancel(void)
+{
+ 8006e0c: b580 push {r7, lr}
+ 8006e0e: b082 sub sp, #8
+ 8006e10: af00 add r7, sp, #0
+ /* USER CODE BEGIN Adv_Cancel_1 */
+
+ /* USER CODE END Adv_Cancel_1 */
+
+ if (BleApplicationContext.Device_Connection_Status != APP_BLE_CONNECTED_SERVER)
+ 8006e12: 4b0a ldr r3, [pc, #40] @ (8006e3c <Adv_Cancel+0x30>)
+ 8006e14: f893 3080 ldrb.w r3, [r3, #128] @ 0x80
+ 8006e18: 2b05 cmp r3, #5
+ 8006e1a: d00a beq.n 8006e32 <Adv_Cancel+0x26>
+ {
+ tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
+ 8006e1c: 2392 movs r3, #146 @ 0x92
+ 8006e1e: 71fb strb r3, [r7, #7]
+
+ ret = aci_gap_set_non_discoverable();
+ 8006e20: f7fd fae8 bl 80043f4 <aci_gap_set_non_discoverable>
+ 8006e24: 4603 mov r3, r0
+ 8006e26: 71fb strb r3, [r7, #7]
+
+ BleApplicationContext.Device_Connection_Status = APP_BLE_IDLE;
+ 8006e28: 4b04 ldr r3, [pc, #16] @ (8006e3c <Adv_Cancel+0x30>)
+ 8006e2a: 2200 movs r2, #0
+ 8006e2c: f883 2080 strb.w r2, [r3, #128] @ 0x80
+
+ /* USER CODE BEGIN Adv_Cancel_2 */
+
+ /* USER CODE END Adv_Cancel_2 */
+
+ return;
+ 8006e30: bf00 nop
+ 8006e32: bf00 nop
+}
+ 8006e34: 3708 adds r7, #8
+ 8006e36: 46bd mov sp, r7
+ 8006e38: bd80 pop {r7, pc}
+ 8006e3a: bf00 nop
+ 8006e3c: 20000270 .word 0x20000270
+
+08006e40 <Adv_Cancel_Req>:
+
+static void Adv_Cancel_Req(void)
+{
+ 8006e40: b580 push {r7, lr}
+ 8006e42: af00 add r7, sp, #0
+ /* USER CODE BEGIN Adv_Cancel_Req_1 */
+
+ /* USER CODE END Adv_Cancel_Req_1 */
+
+ UTIL_SEQ_SetTask(1 << CFG_TASK_ADV_CANCEL_ID, CFG_SCH_PRIO_0);
+ 8006e44: 2100 movs r1, #0
+ 8006e46: 2001 movs r0, #1
+ 8006e48: f000 fd44 bl 80078d4 <UTIL_SEQ_SetTask>
+
+ /* USER CODE BEGIN Adv_Cancel_Req_2 */
+
+ /* USER CODE END Adv_Cancel_Req_2 */
+
+ return;
+ 8006e4c: bf00 nop
+}
+ 8006e4e: bd80 pop {r7, pc}
+
+08006e50 <Switch_OFF_GPIO>:
+
+static void Switch_OFF_GPIO()
+{
+ 8006e50: b480 push {r7}
+ 8006e52: af00 add r7, sp, #0
+ /* USER CODE BEGIN Switch_OFF_GPIO */
+
+ /* USER CODE END Switch_OFF_GPIO */
+}
+ 8006e54: bf00 nop
+ 8006e56: 46bd mov sp, r7
+ 8006e58: f85d 7b04 ldr.w r7, [sp], #4
+ 8006e5c: 4770 bx lr
+
+08006e5e <hci_notify_asynch_evt>:
+ *
+ * WRAP FUNCTIONS
+ *
+ *************************************************************/
+void hci_notify_asynch_evt(void* p_Data)
+{
+ 8006e5e: b580 push {r7, lr}
+ 8006e60: b082 sub sp, #8
+ 8006e62: af00 add r7, sp, #0
+ 8006e64: 6078 str r0, [r7, #4]
+ UTIL_SEQ_SetTask(1 << CFG_TASK_HCI_ASYNCH_EVT_ID, CFG_SCH_PRIO_0);
+ 8006e66: 2100 movs r1, #0
+ 8006e68: 2002 movs r0, #2
+ 8006e6a: f000 fd33 bl 80078d4 <UTIL_SEQ_SetTask>
+
+ return;
+ 8006e6e: bf00 nop
+}
+ 8006e70: 3708 adds r7, #8
+ 8006e72: 46bd mov sp, r7
+ 8006e74: bd80 pop {r7, pc}
+
+08006e76 <hci_cmd_resp_release>:
+
+void hci_cmd_resp_release(uint32_t Flag)
+{
+ 8006e76: b580 push {r7, lr}
+ 8006e78: b082 sub sp, #8
+ 8006e7a: af00 add r7, sp, #0
+ 8006e7c: 6078 str r0, [r7, #4]
+ UTIL_SEQ_SetEvt(1 << CFG_IDLEEVT_HCI_CMD_EVT_RSP_ID);
+ 8006e7e: 2001 movs r0, #1
+ 8006e80: f000 fd94 bl 80079ac <UTIL_SEQ_SetEvt>
+
+ return;
+ 8006e84: bf00 nop
+}
+ 8006e86: 3708 adds r7, #8
+ 8006e88: 46bd mov sp, r7
+ 8006e8a: bd80 pop {r7, pc}
+
+08006e8c <hci_cmd_resp_wait>:
+
+void hci_cmd_resp_wait(uint32_t Timeout)
+{
+ 8006e8c: b580 push {r7, lr}
+ 8006e8e: b082 sub sp, #8
+ 8006e90: af00 add r7, sp, #0
+ 8006e92: 6078 str r0, [r7, #4]
+ UTIL_SEQ_WaitEvt(1 << CFG_IDLEEVT_HCI_CMD_EVT_RSP_ID);
+ 8006e94: 2001 movs r0, #1
+ 8006e96: f000 fda9 bl 80079ec <UTIL_SEQ_WaitEvt>
+
+ return;
+ 8006e9a: bf00 nop
+}
+ 8006e9c: 3708 adds r7, #8
+ 8006e9e: 46bd mov sp, r7
+ 8006ea0: bd80 pop {r7, pc}
+
+08006ea2 <BLE_UserEvtRx>:
+
+static void BLE_UserEvtRx(void *p_Payload)
+{
+ 8006ea2: b580 push {r7, lr}
+ 8006ea4: b084 sub sp, #16
+ 8006ea6: af00 add r7, sp, #0
+ 8006ea8: 6078 str r0, [r7, #4]
+ SVCCTL_UserEvtFlowStatus_t svctl_return_status;
+ tHCI_UserEvtRxParam *p_param;
+
+ p_param = (tHCI_UserEvtRxParam *)p_Payload;
+ 8006eaa: 687b ldr r3, [r7, #4]
+ 8006eac: 60fb str r3, [r7, #12]
+
+ svctl_return_status = SVCCTL_UserEvtRx((void *)&(p_param->pckt->evtserial));
+ 8006eae: 68fb ldr r3, [r7, #12]
+ 8006eb0: 685b ldr r3, [r3, #4]
+ 8006eb2: 3308 adds r3, #8
+ 8006eb4: 4618 mov r0, r3
+ 8006eb6: f7fe fd65 bl 8005984 <SVCCTL_UserEvtRx>
+ 8006eba: 4603 mov r3, r0
+ 8006ebc: 72fb strb r3, [r7, #11]
+ if (svctl_return_status != SVCCTL_UserEvtFlowDisable)
+ 8006ebe: 7afb ldrb r3, [r7, #11]
+ 8006ec0: 2b00 cmp r3, #0
+ 8006ec2: d003 beq.n 8006ecc <BLE_UserEvtRx+0x2a>
+ {
+ p_param->status = HCI_TL_UserEventFlow_Enable;
+ 8006ec4: 68fb ldr r3, [r7, #12]
+ 8006ec6: 2201 movs r2, #1
+ 8006ec8: 701a strb r2, [r3, #0]
+ else
+ {
+ p_param->status = HCI_TL_UserEventFlow_Disable;
+ }
+
+ return;
+ 8006eca: e003 b.n 8006ed4 <BLE_UserEvtRx+0x32>
+ p_param->status = HCI_TL_UserEventFlow_Disable;
+ 8006ecc: 68fb ldr r3, [r7, #12]
+ 8006ece: 2200 movs r2, #0
+ 8006ed0: 701a strb r2, [r3, #0]
+ return;
+ 8006ed2: bf00 nop
+}
+ 8006ed4: 3710 adds r7, #16
+ 8006ed6: 46bd mov sp, r7
+ 8006ed8: bd80 pop {r7, pc}
+
+08006eda <BLE_StatusNot>:
+
+static void BLE_StatusNot(HCI_TL_CmdStatus_t Status)
+{
+ 8006eda: b580 push {r7, lr}
+ 8006edc: b084 sub sp, #16
+ 8006ede: af00 add r7, sp, #0
+ 8006ee0: 4603 mov r3, r0
+ 8006ee2: 71fb strb r3, [r7, #7]
+ uint32_t task_id_list;
+ switch (Status)
+ 8006ee4: 79fb ldrb r3, [r7, #7]
+ 8006ee6: 2b00 cmp r3, #0
+ 8006ee8: d002 beq.n 8006ef0 <BLE_StatusNot+0x16>
+ 8006eea: 2b01 cmp r3, #1
+ 8006eec: d006 beq.n 8006efc <BLE_StatusNot+0x22>
+
+ default:
+ /* USER CODE BEGIN Status */
+
+ /* USER CODE END Status */
+ break;
+ 8006eee: e00b b.n 8006f08 <BLE_StatusNot+0x2e>
+ task_id_list = (1 << CFG_LAST_TASK_ID_WITH_HCICMD) - 1;
+ 8006ef0: 2303 movs r3, #3
+ 8006ef2: 60fb str r3, [r7, #12]
+ UTIL_SEQ_PauseTask(task_id_list);
+ 8006ef4: 68f8 ldr r0, [r7, #12]
+ 8006ef6: f000 fd19 bl 800792c <UTIL_SEQ_PauseTask>
+ break;
+ 8006efa: e005 b.n 8006f08 <BLE_StatusNot+0x2e>
+ task_id_list = (1 << CFG_LAST_TASK_ID_WITH_HCICMD) - 1;
+ 8006efc: 2303 movs r3, #3
+ 8006efe: 60fb str r3, [r7, #12]
+ UTIL_SEQ_ResumeTask(task_id_list);
+ 8006f00: 68f8 ldr r0, [r7, #12]
+ 8006f02: f000 fd33 bl 800796c <UTIL_SEQ_ResumeTask>
+ break;
+ 8006f06: bf00 nop
+ }
+
+ return;
+ 8006f08: bf00 nop
+}
+ 8006f0a: 3710 adds r7, #16
+ 8006f0c: 46bd mov sp, r7
+ 8006f0e: bd80 pop {r7, pc}
+
+08006f10 <P2PS_STM_App_Notification>:
+
+/* USER CODE END PFP */
+
+/* Functions Definition ------------------------------------------------------*/
+void P2PS_STM_App_Notification(P2PS_STM_App_Notification_evt_t *pNotification)
+{
+ 8006f10: b480 push {r7}
+ 8006f12: b083 sub sp, #12
+ 8006f14: af00 add r7, sp, #0
+ 8006f16: 6078 str r0, [r7, #4]
+/* USER CODE BEGIN P2PS_STM_App_Notification_1 */
+
+/* USER CODE END P2PS_STM_App_Notification_1 */
+ switch(pNotification->P2P_Evt_Opcode)
+ 8006f18: 687b ldr r3, [r7, #4]
+ 8006f1a: 781b ldrb r3, [r3, #0]
+ 8006f1c: 2b03 cmp r3, #3
+ 8006f1e: d006 beq.n 8006f2e <P2PS_STM_App_Notification+0x1e>
+ 8006f20: 2b03 cmp r3, #3
+ 8006f22: dc06 bgt.n 8006f32 <P2PS_STM_App_Notification+0x22>
+ 8006f24: 2b00 cmp r3, #0
+ 8006f26: d006 beq.n 8006f36 <P2PS_STM_App_Notification+0x26>
+ 8006f28: 2b01 cmp r3, #1
+ 8006f2a: d006 beq.n 8006f3a <P2PS_STM_App_Notification+0x2a>
+
+ default:
+/* USER CODE BEGIN P2PS_STM_App_Notification_default */
+
+/* USER CODE END P2PS_STM_App_Notification_default */
+ break;
+ 8006f2c: e001 b.n 8006f32 <P2PS_STM_App_Notification+0x22>
+ break;
+ 8006f2e: bf00 nop
+ 8006f30: e004 b.n 8006f3c <P2PS_STM_App_Notification+0x2c>
+ break;
+ 8006f32: bf00 nop
+ 8006f34: e002 b.n 8006f3c <P2PS_STM_App_Notification+0x2c>
+ break;
+ 8006f36: bf00 nop
+ 8006f38: e000 b.n 8006f3c <P2PS_STM_App_Notification+0x2c>
+ break;
+ 8006f3a: bf00 nop
+ }
+/* USER CODE BEGIN P2PS_STM_App_Notification_2 */
+
+/* USER CODE END P2PS_STM_App_Notification_2 */
+ return;
+ 8006f3c: bf00 nop
+}
+ 8006f3e: 370c adds r7, #12
+ 8006f40: 46bd mov sp, r7
+ 8006f42: f85d 7b04 ldr.w r7, [sp], #4
+ 8006f46: 4770 bx lr
+
+08006f48 <P2PS_APP_Notification>:
+
+void P2PS_APP_Notification(P2PS_APP_ConnHandle_Not_evt_t *pNotification)
+{
+ 8006f48: b480 push {r7}
+ 8006f4a: b083 sub sp, #12
+ 8006f4c: af00 add r7, sp, #0
+ 8006f4e: 6078 str r0, [r7, #4]
+/* USER CODE BEGIN P2PS_APP_Notification_1 */
+
+/* USER CODE END P2PS_APP_Notification_1 */
+ switch(pNotification->P2P_Evt_Opcode)
+ 8006f50: 687b ldr r3, [r7, #4]
+ 8006f52: 781b ldrb r3, [r3, #0]
+ 8006f54: 2b00 cmp r3, #0
+ 8006f56: d002 beq.n 8006f5e <P2PS_APP_Notification+0x16>
+ 8006f58: 2b01 cmp r3, #1
+ 8006f5a: d002 beq.n 8006f62 <P2PS_APP_Notification+0x1a>
+
+ default:
+/* USER CODE BEGIN P2PS_APP_Notification_default */
+
+/* USER CODE END P2PS_APP_Notification_default */
+ break;
+ 8006f5c: e002 b.n 8006f64 <P2PS_APP_Notification+0x1c>
+ break;
+ 8006f5e: bf00 nop
+ 8006f60: e000 b.n 8006f64 <P2PS_APP_Notification+0x1c>
+ break;
+ 8006f62: bf00 nop
+ }
+/* USER CODE BEGIN P2PS_APP_Notification_2 */
+
+/* USER CODE END P2PS_APP_Notification_2 */
+ return;
+ 8006f64: bf00 nop
+}
+ 8006f66: 370c adds r7, #12
+ 8006f68: 46bd mov sp, r7
+ 8006f6a: f85d 7b04 ldr.w r7, [sp], #4
+ 8006f6e: 4770 bx lr
+
+08006f70 <P2PS_APP_Init>:
+
+void P2PS_APP_Init(void)
+{
+ 8006f70: b480 push {r7}
+ 8006f72: af00 add r7, sp, #0
+/* USER CODE BEGIN P2PS_APP_Init */
+
+/* USER CODE END P2PS_APP_Init */
+ return;
+ 8006f74: bf00 nop
+}
+ 8006f76: 46bd mov sp, r7
+ 8006f78: f85d 7b04 ldr.w r7, [sp], #4
+ 8006f7c: 4770 bx lr
+ ...
+
+08006f80 <LL_PWR_EnableBootC2>:
+{
+ 8006f80: b480 push {r7}
+ 8006f82: af00 add r7, sp, #0
+ SET_BIT(PWR->CR4, PWR_CR4_C2BOOT);
+ 8006f84: 4b05 ldr r3, [pc, #20] @ (8006f9c <LL_PWR_EnableBootC2+0x1c>)
+ 8006f86: 68db ldr r3, [r3, #12]
+ 8006f88: 4a04 ldr r2, [pc, #16] @ (8006f9c <LL_PWR_EnableBootC2+0x1c>)
+ 8006f8a: f443 4300 orr.w r3, r3, #32768 @ 0x8000
+ 8006f8e: 60d3 str r3, [r2, #12]
+}
+ 8006f90: bf00 nop
+ 8006f92: 46bd mov sp, r7
+ 8006f94: f85d 7b04 ldr.w r7, [sp], #4
+ 8006f98: 4770 bx lr
+ 8006f9a: bf00 nop
+ 8006f9c: 58000400 .word 0x58000400
+
+08006fa0 <LL_C2_EXTI_EnableEvent_32_63>:
+{
+ 8006fa0: b480 push {r7}
+ 8006fa2: b083 sub sp, #12
+ 8006fa4: af00 add r7, sp, #0
+ 8006fa6: 6078 str r0, [r7, #4]
+ SET_BIT(EXTI->C2EMR2, ExtiLine);
+ 8006fa8: 4b06 ldr r3, [pc, #24] @ (8006fc4 <LL_C2_EXTI_EnableEvent_32_63+0x24>)
+ 8006faa: f8d3 20d4 ldr.w r2, [r3, #212] @ 0xd4
+ 8006fae: 4905 ldr r1, [pc, #20] @ (8006fc4 <LL_C2_EXTI_EnableEvent_32_63+0x24>)
+ 8006fb0: 687b ldr r3, [r7, #4]
+ 8006fb2: 4313 orrs r3, r2
+ 8006fb4: f8c1 30d4 str.w r3, [r1, #212] @ 0xd4
+}
+ 8006fb8: bf00 nop
+ 8006fba: 370c adds r7, #12
+ 8006fbc: 46bd mov sp, r7
+ 8006fbe: f85d 7b04 ldr.w r7, [sp], #4
+ 8006fc2: 4770 bx lr
+ 8006fc4: 58000800 .word 0x58000800
+
+08006fc8 <LL_EXTI_EnableRisingTrig_32_63>:
+ * @arg @ref LL_EXTI_LINE_41
+ * (*) value not defined in all devices
+ * @retval None
+ */
+__STATIC_INLINE void LL_EXTI_EnableRisingTrig_32_63(uint32_t ExtiLine)
+{
+ 8006fc8: b480 push {r7}
+ 8006fca: b083 sub sp, #12
+ 8006fcc: af00 add r7, sp, #0
+ 8006fce: 6078 str r0, [r7, #4]
+ SET_BIT(EXTI->RTSR2, ExtiLine);
+ 8006fd0: 4b05 ldr r3, [pc, #20] @ (8006fe8 <LL_EXTI_EnableRisingTrig_32_63+0x20>)
+ 8006fd2: 6a1a ldr r2, [r3, #32]
+ 8006fd4: 4904 ldr r1, [pc, #16] @ (8006fe8 <LL_EXTI_EnableRisingTrig_32_63+0x20>)
+ 8006fd6: 687b ldr r3, [r7, #4]
+ 8006fd8: 4313 orrs r3, r2
+ 8006fda: 620b str r3, [r1, #32]
+}
+ 8006fdc: bf00 nop
+ 8006fde: 370c adds r7, #12
+ 8006fe0: 46bd mov sp, r7
+ 8006fe2: f85d 7b04 ldr.w r7, [sp], #4
+ 8006fe6: 4770 bx lr
+ 8006fe8: 58000800 .word 0x58000800
+
+08006fec <LL_AHB3_GRP1_EnableClock>:
+{
+ 8006fec: b480 push {r7}
+ 8006fee: b085 sub sp, #20
+ 8006ff0: af00 add r7, sp, #0
+ 8006ff2: 6078 str r0, [r7, #4]
+ SET_BIT(RCC->AHB3ENR, Periphs);
+ 8006ff4: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8006ff8: 6d1a ldr r2, [r3, #80] @ 0x50
+ 8006ffa: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8006ffe: 687b ldr r3, [r7, #4]
+ 8007000: 4313 orrs r3, r2
+ 8007002: 650b str r3, [r1, #80] @ 0x50
+ tmpreg = READ_BIT(RCC->AHB3ENR, Periphs);
+ 8007004: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 8007008: 6d1a ldr r2, [r3, #80] @ 0x50
+ 800700a: 687b ldr r3, [r7, #4]
+ 800700c: 4013 ands r3, r2
+ 800700e: 60fb str r3, [r7, #12]
+ (void)tmpreg;
+ 8007010: 68fb ldr r3, [r7, #12]
+}
+ 8007012: bf00 nop
+ 8007014: 3714 adds r7, #20
+ 8007016: 46bd mov sp, r7
+ 8007018: f85d 7b04 ldr.w r7, [sp], #4
+ 800701c: 4770 bx lr
+
+0800701e <LL_C2_AHB3_GRP1_EnableClock>:
+ * @arg @ref LL_C2_AHB3_GRP1_PERIPH_IPCC
+ * @arg @ref LL_C2_AHB3_GRP1_PERIPH_FLASH
+ * @retval None
+ */
+__STATIC_INLINE void LL_C2_AHB3_GRP1_EnableClock(uint32_t Periphs)
+{
+ 800701e: b480 push {r7}
+ 8007020: b085 sub sp, #20
+ 8007022: af00 add r7, sp, #0
+ 8007024: 6078 str r0, [r7, #4]
+ __IO uint32_t tmpreg;
+ SET_BIT(RCC->C2AHB3ENR, Periphs);
+ 8007026: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800702a: f8d3 2150 ldr.w r2, [r3, #336] @ 0x150
+ 800702e: f04f 41b0 mov.w r1, #1476395008 @ 0x58000000
+ 8007032: 687b ldr r3, [r7, #4]
+ 8007034: 4313 orrs r3, r2
+ 8007036: f8c1 3150 str.w r3, [r1, #336] @ 0x150
+ /* Delay after an RCC peripheral clock enabling */
+ tmpreg = READ_BIT(RCC->C2AHB3ENR, Periphs);
+ 800703a: f04f 43b0 mov.w r3, #1476395008 @ 0x58000000
+ 800703e: f8d3 2150 ldr.w r2, [r3, #336] @ 0x150
+ 8007042: 687b ldr r3, [r7, #4]
+ 8007044: 4013 ands r3, r2
+ 8007046: 60fb str r3, [r7, #12]
+ (void)tmpreg;
+ 8007048: 68fb ldr r3, [r7, #12]
+}
+ 800704a: bf00 nop
+ 800704c: 3714 adds r7, #20
+ 800704e: 46bd mov sp, r7
+ 8007050: f85d 7b04 ldr.w r7, [sp], #4
+ 8007054: 4770 bx lr
+
+08007056 <LL_C1_IPCC_EnableIT_TXF>:
+ * @rmtoll C1CR TXFIE LL_C1_IPCC_EnableIT_TXF
+ * @param IPCCx IPCC Instance.
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_EnableIT_TXF(IPCC_TypeDef *IPCCx)
+{
+ 8007056: b480 push {r7}
+ 8007058: b083 sub sp, #12
+ 800705a: af00 add r7, sp, #0
+ 800705c: 6078 str r0, [r7, #4]
+ SET_BIT(IPCCx->C1CR, IPCC_C1CR_TXFIE);
+ 800705e: 687b ldr r3, [r7, #4]
+ 8007060: 681b ldr r3, [r3, #0]
+ 8007062: f443 3280 orr.w r2, r3, #65536 @ 0x10000
+ 8007066: 687b ldr r3, [r7, #4]
+ 8007068: 601a str r2, [r3, #0]
+}
+ 800706a: bf00 nop
+ 800706c: 370c adds r7, #12
+ 800706e: 46bd mov sp, r7
+ 8007070: f85d 7b04 ldr.w r7, [sp], #4
+ 8007074: 4770 bx lr
+
+08007076 <LL_C1_IPCC_EnableIT_RXO>:
+ * @rmtoll C1CR RXOIE LL_C1_IPCC_EnableIT_RXO
+ * @param IPCCx IPCC Instance.
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_EnableIT_RXO(IPCC_TypeDef *IPCCx)
+{
+ 8007076: b480 push {r7}
+ 8007078: b083 sub sp, #12
+ 800707a: af00 add r7, sp, #0
+ 800707c: 6078 str r0, [r7, #4]
+ SET_BIT(IPCCx->C1CR, IPCC_C1CR_RXOIE);
+ 800707e: 687b ldr r3, [r7, #4]
+ 8007080: 681b ldr r3, [r3, #0]
+ 8007082: f043 0201 orr.w r2, r3, #1
+ 8007086: 687b ldr r3, [r7, #4]
+ 8007088: 601a str r2, [r3, #0]
+}
+ 800708a: bf00 nop
+ 800708c: 370c adds r7, #12
+ 800708e: 46bd mov sp, r7
+ 8007090: f85d 7b04 ldr.w r7, [sp], #4
+ 8007094: 4770 bx lr
+
+08007096 <LL_C1_IPCC_EnableTransmitChannel>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_EnableTransmitChannel(IPCC_TypeDef *IPCCx, uint32_t Channel)
+{
+ 8007096: b480 push {r7}
+ 8007098: b083 sub sp, #12
+ 800709a: af00 add r7, sp, #0
+ 800709c: 6078 str r0, [r7, #4]
+ 800709e: 6039 str r1, [r7, #0]
+ CLEAR_BIT(IPCCx->C1MR, Channel << IPCC_C1MR_CH1FM_Pos);
+ 80070a0: 687b ldr r3, [r7, #4]
+ 80070a2: 685a ldr r2, [r3, #4]
+ 80070a4: 683b ldr r3, [r7, #0]
+ 80070a6: 041b lsls r3, r3, #16
+ 80070a8: 43db mvns r3, r3
+ 80070aa: 401a ands r2, r3
+ 80070ac: 687b ldr r3, [r7, #4]
+ 80070ae: 605a str r2, [r3, #4]
+}
+ 80070b0: bf00 nop
+ 80070b2: 370c adds r7, #12
+ 80070b4: 46bd mov sp, r7
+ 80070b6: f85d 7b04 ldr.w r7, [sp], #4
+ 80070ba: 4770 bx lr
+
+080070bc <LL_C1_IPCC_DisableTransmitChannel>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_DisableTransmitChannel(IPCC_TypeDef *IPCCx, uint32_t Channel)
+{
+ 80070bc: b480 push {r7}
+ 80070be: b083 sub sp, #12
+ 80070c0: af00 add r7, sp, #0
+ 80070c2: 6078 str r0, [r7, #4]
+ 80070c4: 6039 str r1, [r7, #0]
+ SET_BIT(IPCCx->C1MR, Channel << IPCC_C1MR_CH1FM_Pos);
+ 80070c6: 687b ldr r3, [r7, #4]
+ 80070c8: 685a ldr r2, [r3, #4]
+ 80070ca: 683b ldr r3, [r7, #0]
+ 80070cc: 041b lsls r3, r3, #16
+ 80070ce: 431a orrs r2, r3
+ 80070d0: 687b ldr r3, [r7, #4]
+ 80070d2: 605a str r2, [r3, #4]
+}
+ 80070d4: bf00 nop
+ 80070d6: 370c adds r7, #12
+ 80070d8: 46bd mov sp, r7
+ 80070da: f85d 7b04 ldr.w r7, [sp], #4
+ 80070de: 4770 bx lr
+
+080070e0 <LL_C1_IPCC_EnableReceiveChannel>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_EnableReceiveChannel(IPCC_TypeDef *IPCCx, uint32_t Channel)
+{
+ 80070e0: b480 push {r7}
+ 80070e2: b083 sub sp, #12
+ 80070e4: af00 add r7, sp, #0
+ 80070e6: 6078 str r0, [r7, #4]
+ 80070e8: 6039 str r1, [r7, #0]
+ CLEAR_BIT(IPCCx->C1MR, Channel);
+ 80070ea: 687b ldr r3, [r7, #4]
+ 80070ec: 685a ldr r2, [r3, #4]
+ 80070ee: 683b ldr r3, [r7, #0]
+ 80070f0: 43db mvns r3, r3
+ 80070f2: 401a ands r2, r3
+ 80070f4: 687b ldr r3, [r7, #4]
+ 80070f6: 605a str r2, [r3, #4]
+}
+ 80070f8: bf00 nop
+ 80070fa: 370c adds r7, #12
+ 80070fc: 46bd mov sp, r7
+ 80070fe: f85d 7b04 ldr.w r7, [sp], #4
+ 8007102: 4770 bx lr
+
+08007104 <LL_C1_IPCC_ClearFlag_CHx>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_ClearFlag_CHx(IPCC_TypeDef *IPCCx, uint32_t Channel)
+{
+ 8007104: b480 push {r7}
+ 8007106: b083 sub sp, #12
+ 8007108: af00 add r7, sp, #0
+ 800710a: 6078 str r0, [r7, #4]
+ 800710c: 6039 str r1, [r7, #0]
+ WRITE_REG(IPCCx->C1SCR, Channel);
+ 800710e: 687b ldr r3, [r7, #4]
+ 8007110: 683a ldr r2, [r7, #0]
+ 8007112: 609a str r2, [r3, #8]
+}
+ 8007114: bf00 nop
+ 8007116: 370c adds r7, #12
+ 8007118: 46bd mov sp, r7
+ 800711a: f85d 7b04 ldr.w r7, [sp], #4
+ 800711e: 4770 bx lr
+
+08007120 <LL_C1_IPCC_SetFlag_CHx>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval None
+ */
+__STATIC_INLINE void LL_C1_IPCC_SetFlag_CHx(IPCC_TypeDef *IPCCx, uint32_t Channel)
+{
+ 8007120: b480 push {r7}
+ 8007122: b083 sub sp, #12
+ 8007124: af00 add r7, sp, #0
+ 8007126: 6078 str r0, [r7, #4]
+ 8007128: 6039 str r1, [r7, #0]
+ WRITE_REG(IPCCx->C1SCR, Channel << IPCC_C1SCR_CH1S_Pos);
+ 800712a: 683b ldr r3, [r7, #0]
+ 800712c: 041a lsls r2, r3, #16
+ 800712e: 687b ldr r3, [r7, #4]
+ 8007130: 609a str r2, [r3, #8]
+}
+ 8007132: bf00 nop
+ 8007134: 370c adds r7, #12
+ 8007136: 46bd mov sp, r7
+ 8007138: f85d 7b04 ldr.w r7, [sp], #4
+ 800713c: 4770 bx lr
+
+0800713e <LL_C1_IPCC_IsActiveFlag_CHx>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_C1_IPCC_IsActiveFlag_CHx(IPCC_TypeDef const *const IPCCx, uint32_t Channel)
+{
+ 800713e: b480 push {r7}
+ 8007140: b083 sub sp, #12
+ 8007142: af00 add r7, sp, #0
+ 8007144: 6078 str r0, [r7, #4]
+ 8007146: 6039 str r1, [r7, #0]
+ return ((READ_BIT(IPCCx->C1TOC2SR, Channel) == (Channel)) ? 1UL : 0UL);
+ 8007148: 687b ldr r3, [r7, #4]
+ 800714a: 68da ldr r2, [r3, #12]
+ 800714c: 683b ldr r3, [r7, #0]
+ 800714e: 4013 ands r3, r2
+ 8007150: 683a ldr r2, [r7, #0]
+ 8007152: 429a cmp r2, r3
+ 8007154: d101 bne.n 800715a <LL_C1_IPCC_IsActiveFlag_CHx+0x1c>
+ 8007156: 2301 movs r3, #1
+ 8007158: e000 b.n 800715c <LL_C1_IPCC_IsActiveFlag_CHx+0x1e>
+ 800715a: 2300 movs r3, #0
+}
+ 800715c: 4618 mov r0, r3
+ 800715e: 370c adds r7, #12
+ 8007160: 46bd mov sp, r7
+ 8007162: f85d 7b04 ldr.w r7, [sp], #4
+ 8007166: 4770 bx lr
+
+08007168 <LL_C2_IPCC_IsActiveFlag_CHx>:
+ * @arg @ref LL_IPCC_CHANNEL_5
+ * @arg @ref LL_IPCC_CHANNEL_6
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_C2_IPCC_IsActiveFlag_CHx(IPCC_TypeDef const *const IPCCx, uint32_t Channel)
+{
+ 8007168: b480 push {r7}
+ 800716a: b083 sub sp, #12
+ 800716c: af00 add r7, sp, #0
+ 800716e: 6078 str r0, [r7, #4]
+ 8007170: 6039 str r1, [r7, #0]
+ return ((READ_BIT(IPCCx->C2TOC1SR, Channel) == (Channel)) ? 1UL : 0UL);
+ 8007172: 687b ldr r3, [r7, #4]
+ 8007174: 69da ldr r2, [r3, #28]
+ 8007176: 683b ldr r3, [r7, #0]
+ 8007178: 4013 ands r3, r2
+ 800717a: 683a ldr r2, [r7, #0]
+ 800717c: 429a cmp r2, r3
+ 800717e: d101 bne.n 8007184 <LL_C2_IPCC_IsActiveFlag_CHx+0x1c>
+ 8007180: 2301 movs r3, #1
+ 8007182: e000 b.n 8007186 <LL_C2_IPCC_IsActiveFlag_CHx+0x1e>
+ 8007184: 2300 movs r3, #0
+}
+ 8007186: 4618 mov r0, r3
+ 8007188: 370c adds r7, #12
+ 800718a: 46bd mov sp, r7
+ 800718c: f85d 7b04 ldr.w r7, [sp], #4
+ 8007190: 4770 bx lr
+ ...
+
+08007194 <HW_IPCC_Rx_Handler>:
+
+/******************************************************************************
+ * INTERRUPT HANDLER
+ ******************************************************************************/
+void HW_IPCC_Rx_Handler( void )
+{
+ 8007194: b580 push {r7, lr}
+ 8007196: af00 add r7, sp, #0
+ if (HW_IPCC_RX_PENDING( HW_IPCC_SYSTEM_EVENT_CHANNEL ))
+ 8007198: 2102 movs r1, #2
+ 800719a: 4818 ldr r0, [pc, #96] @ (80071fc <HW_IPCC_Rx_Handler+0x68>)
+ 800719c: f7ff ffe4 bl 8007168 <LL_C2_IPCC_IsActiveFlag_CHx>
+ 80071a0: 4603 mov r3, r0
+ 80071a2: 2b00 cmp r3, #0
+ 80071a4: d008 beq.n 80071b8 <HW_IPCC_Rx_Handler+0x24>
+ 80071a6: 4b15 ldr r3, [pc, #84] @ (80071fc <HW_IPCC_Rx_Handler+0x68>)
+ 80071a8: 685b ldr r3, [r3, #4]
+ 80071aa: f003 0302 and.w r3, r3, #2
+ 80071ae: 2b00 cmp r3, #0
+ 80071b0: d102 bne.n 80071b8 <HW_IPCC_Rx_Handler+0x24>
+ {
+ HW_IPCC_SYS_EvtHandler();
+ 80071b2: f000 f925 bl 8007400 <HW_IPCC_SYS_EvtHandler>
+ 80071b6: e01e b.n 80071f6 <HW_IPCC_Rx_Handler+0x62>
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_ZIGBEE_M0_REQUEST_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_StackM0RequestHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_BLE_EVENT_CHANNEL ))
+ 80071b8: 2101 movs r1, #1
+ 80071ba: 4810 ldr r0, [pc, #64] @ (80071fc <HW_IPCC_Rx_Handler+0x68>)
+ 80071bc: f7ff ffd4 bl 8007168 <LL_C2_IPCC_IsActiveFlag_CHx>
+ 80071c0: 4603 mov r3, r0
+ 80071c2: 2b00 cmp r3, #0
+ 80071c4: d008 beq.n 80071d8 <HW_IPCC_Rx_Handler+0x44>
+ 80071c6: 4b0d ldr r3, [pc, #52] @ (80071fc <HW_IPCC_Rx_Handler+0x68>)
+ 80071c8: 685b ldr r3, [r3, #4]
+ 80071ca: f003 0301 and.w r3, r3, #1
+ 80071ce: 2b00 cmp r3, #0
+ 80071d0: d102 bne.n 80071d8 <HW_IPCC_Rx_Handler+0x44>
+ {
+ HW_IPCC_BLE_EvtHandler();
+ 80071d2: f000 f899 bl 8007308 <HW_IPCC_BLE_EvtHandler>
+ 80071d6: e00e b.n 80071f6 <HW_IPCC_Rx_Handler+0x62>
+ }
+ else if (HW_IPCC_RX_PENDING( HW_IPCC_TRACES_CHANNEL ))
+ 80071d8: 2108 movs r1, #8
+ 80071da: 4808 ldr r0, [pc, #32] @ (80071fc <HW_IPCC_Rx_Handler+0x68>)
+ 80071dc: f7ff ffc4 bl 8007168 <LL_C2_IPCC_IsActiveFlag_CHx>
+ 80071e0: 4603 mov r3, r0
+ 80071e2: 2b00 cmp r3, #0
+ 80071e4: d008 beq.n 80071f8 <HW_IPCC_Rx_Handler+0x64>
+ 80071e6: 4b05 ldr r3, [pc, #20] @ (80071fc <HW_IPCC_Rx_Handler+0x68>)
+ 80071e8: 685b ldr r3, [r3, #4]
+ 80071ea: f003 0308 and.w r3, r3, #8
+ 80071ee: 2b00 cmp r3, #0
+ 80071f0: d102 bne.n 80071f8 <HW_IPCC_Rx_Handler+0x64>
+ {
+ HW_IPCC_TRACES_EvtHandler();
+ 80071f2: f000 f97d bl 80074f0 <HW_IPCC_TRACES_EvtHandler>
+ }
+
+ return;
+ 80071f6: bf00 nop
+ 80071f8: bf00 nop
+}
+ 80071fa: bd80 pop {r7, pc}
+ 80071fc: 58000c00 .word 0x58000c00
+
+08007200 <HW_IPCC_Tx_Handler>:
+
+void HW_IPCC_Tx_Handler( void )
+{
+ 8007200: b580 push {r7, lr}
+ 8007202: af00 add r7, sp, #0
+ if (HW_IPCC_TX_PENDING( HW_IPCC_SYSTEM_CMD_RSP_CHANNEL ))
+ 8007204: 2102 movs r1, #2
+ 8007206: 4818 ldr r0, [pc, #96] @ (8007268 <HW_IPCC_Tx_Handler+0x68>)
+ 8007208: f7ff ff99 bl 800713e <LL_C1_IPCC_IsActiveFlag_CHx>
+ 800720c: 4603 mov r3, r0
+ 800720e: 2b00 cmp r3, #0
+ 8007210: d108 bne.n 8007224 <HW_IPCC_Tx_Handler+0x24>
+ 8007212: 4b15 ldr r3, [pc, #84] @ (8007268 <HW_IPCC_Tx_Handler+0x68>)
+ 8007214: 685b ldr r3, [r3, #4]
+ 8007216: f403 3300 and.w r3, r3, #131072 @ 0x20000
+ 800721a: 2b00 cmp r3, #0
+ 800721c: d102 bne.n 8007224 <HW_IPCC_Tx_Handler+0x24>
+ {
+ HW_IPCC_SYS_CmdEvtHandler();
+ 800721e: f000 f8d3 bl 80073c8 <HW_IPCC_SYS_CmdEvtHandler>
+ 8007222: e01e b.n 8007262 <HW_IPCC_Tx_Handler+0x62>
+ if (HW_IPCC_TX_PENDING( HW_IPCC_ZIGBEE_CMD_APPLI_CHANNEL ))
+ {
+ HW_IPCC_ZIGBEE_CmdEvtHandler();
+ }
+#endif /* ZIGBEE_WB */
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ))
+ 8007224: 2108 movs r1, #8
+ 8007226: 4810 ldr r0, [pc, #64] @ (8007268 <HW_IPCC_Tx_Handler+0x68>)
+ 8007228: f7ff ff89 bl 800713e <LL_C1_IPCC_IsActiveFlag_CHx>
+ 800722c: 4603 mov r3, r0
+ 800722e: 2b00 cmp r3, #0
+ 8007230: d108 bne.n 8007244 <HW_IPCC_Tx_Handler+0x44>
+ 8007232: 4b0d ldr r3, [pc, #52] @ (8007268 <HW_IPCC_Tx_Handler+0x68>)
+ 8007234: 685b ldr r3, [r3, #4]
+ 8007236: f403 2300 and.w r3, r3, #524288 @ 0x80000
+ 800723a: 2b00 cmp r3, #0
+ 800723c: d102 bne.n 8007244 <HW_IPCC_Tx_Handler+0x44>
+ {
+ HW_IPCC_MM_FreeBufHandler();
+ 800723e: f000 f919 bl 8007474 <HW_IPCC_MM_FreeBufHandler>
+ 8007242: e00e b.n 8007262 <HW_IPCC_Tx_Handler+0x62>
+ }
+ else if (HW_IPCC_TX_PENDING( HW_IPCC_HCI_ACL_DATA_CHANNEL ))
+ 8007244: 2120 movs r1, #32
+ 8007246: 4808 ldr r0, [pc, #32] @ (8007268 <HW_IPCC_Tx_Handler+0x68>)
+ 8007248: f7ff ff79 bl 800713e <LL_C1_IPCC_IsActiveFlag_CHx>
+ 800724c: 4603 mov r3, r0
+ 800724e: 2b00 cmp r3, #0
+ 8007250: d108 bne.n 8007264 <HW_IPCC_Tx_Handler+0x64>
+ 8007252: 4b05 ldr r3, [pc, #20] @ (8007268 <HW_IPCC_Tx_Handler+0x68>)
+ 8007254: 685b ldr r3, [r3, #4]
+ 8007256: f403 1300 and.w r3, r3, #2097152 @ 0x200000
+ 800725a: 2b00 cmp r3, #0
+ 800725c: d102 bne.n 8007264 <HW_IPCC_Tx_Handler+0x64>
+ {
+ HW_IPCC_BLE_AclDataEvtHandler();
+ 800725e: f000 f85f bl 8007320 <HW_IPCC_BLE_AclDataEvtHandler>
+ }
+
+ return;
+ 8007262: bf00 nop
+ 8007264: bf00 nop
+}
+ 8007266: bd80 pop {r7, pc}
+ 8007268: 58000c00 .word 0x58000c00
+
+0800726c <HW_IPCC_Enable>:
+/******************************************************************************
+ * GENERAL
+ ******************************************************************************/
+void HW_IPCC_Enable( void )
+{
+ 800726c: b580 push {r7, lr}
+ 800726e: af00 add r7, sp, #0
+ /**
+ * Such as IPCC IP available to the CPU2, it is required to keep the IPCC clock running
+ * when FUS is running on CPU2 and CPU1 enters deep sleep mode
+ */
+ LL_C2_AHB3_GRP1_EnableClock(LL_C2_AHB3_GRP1_PERIPH_IPCC);
+ 8007270: f44f 1080 mov.w r0, #1048576 @ 0x100000
+ 8007274: f7ff fed3 bl 800701e <LL_C2_AHB3_GRP1_EnableClock>
+
+ /**
+ * When the device is out of standby, it is required to use the EXTI mechanism to wakeup CPU2
+ */
+ LL_EXTI_EnableRisingTrig_32_63( LL_EXTI_LINE_41 );
+ 8007278: f44f 7000 mov.w r0, #512 @ 0x200
+ 800727c: f7ff fea4 bl 8006fc8 <LL_EXTI_EnableRisingTrig_32_63>
+ /* It is required to have at least a system clock cycle before a SEV after LL_EXTI_EnableRisingTrig_32_63() */
+ LL_C2_EXTI_EnableEvent_32_63( LL_EXTI_LINE_41 );
+ 8007280: f44f 7000 mov.w r0, #512 @ 0x200
+ 8007284: f7ff fe8c bl 8006fa0 <LL_C2_EXTI_EnableEvent_32_63>
+ * When the CPU2 receives that command, it waits for its event input to be set to restart the CPU2 firmware.
+ * This is required because once C2BOOT has been set once, a clear/set on C2BOOT has no effect.
+ * When SHCI_C2_Reinit( ) is not called, generating an event to the CPU2 does not have any effect
+ * So, by default, the application shall both set the event flag and set the C2BOOT bit.
+ */
+ __SEV( ); /* Set the internal event flag and send an event to the CPU2 */
+ 8007288: bf40 sev
+ __WFE( ); /* Clear the internal event flag */
+ 800728a: bf20 wfe
+ LL_PWR_EnableBootC2( );
+ 800728c: f7ff fe78 bl 8006f80 <LL_PWR_EnableBootC2>
+
+ return;
+ 8007290: bf00 nop
+}
+ 8007292: bd80 pop {r7, pc}
+
+08007294 <HW_IPCC_Init>:
+
+void HW_IPCC_Init( void )
+{
+ 8007294: b580 push {r7, lr}
+ 8007296: af00 add r7, sp, #0
+ LL_AHB3_GRP1_EnableClock( LL_AHB3_GRP1_PERIPH_IPCC );
+ 8007298: f44f 1080 mov.w r0, #1048576 @ 0x100000
+ 800729c: f7ff fea6 bl 8006fec <LL_AHB3_GRP1_EnableClock>
+
+ LL_C1_IPCC_EnableIT_RXO( IPCC );
+ 80072a0: 4806 ldr r0, [pc, #24] @ (80072bc <HW_IPCC_Init+0x28>)
+ 80072a2: f7ff fee8 bl 8007076 <LL_C1_IPCC_EnableIT_RXO>
+ LL_C1_IPCC_EnableIT_TXF( IPCC );
+ 80072a6: 4805 ldr r0, [pc, #20] @ (80072bc <HW_IPCC_Init+0x28>)
+ 80072a8: f7ff fed5 bl 8007056 <LL_C1_IPCC_EnableIT_TXF>
+
+ HAL_NVIC_EnableIRQ(IPCC_C1_RX_IRQn);
+ 80072ac: 202c movs r0, #44 @ 0x2c
+ 80072ae: f7fa fcf2 bl 8001c96 <HAL_NVIC_EnableIRQ>
+ HAL_NVIC_EnableIRQ(IPCC_C1_TX_IRQn);
+ 80072b2: 202d movs r0, #45 @ 0x2d
+ 80072b4: f7fa fcef bl 8001c96 <HAL_NVIC_EnableIRQ>
+
+ return;
+ 80072b8: bf00 nop
+}
+ 80072ba: bd80 pop {r7, pc}
+ 80072bc: 58000c00 .word 0x58000c00
+
+080072c0 <HW_IPCC_BLE_Init>:
+
+/******************************************************************************
+ * BLE
+ ******************************************************************************/
+void HW_IPCC_BLE_Init( void )
+{
+ 80072c0: b580 push {r7, lr}
+ 80072c2: b084 sub sp, #16
+ 80072c4: af00 add r7, sp, #0
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80072c6: f3ef 8310 mrs r3, PRIMASK
+ 80072ca: 607b str r3, [r7, #4]
+ return(result);
+ 80072cc: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 80072ce: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80072d0: b672 cpsid i
+}
+ 80072d2: bf00 nop
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
+ 80072d4: 2101 movs r1, #1
+ 80072d6: 4806 ldr r0, [pc, #24] @ (80072f0 <HW_IPCC_BLE_Init+0x30>)
+ 80072d8: f7ff ff02 bl 80070e0 <LL_C1_IPCC_EnableReceiveChannel>
+ 80072dc: 68fb ldr r3, [r7, #12]
+ 80072de: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80072e0: 68bb ldr r3, [r7, #8]
+ 80072e2: f383 8810 msr PRIMASK, r3
+}
+ 80072e6: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ return;
+ 80072e8: bf00 nop
+}
+ 80072ea: 3710 adds r7, #16
+ 80072ec: 46bd mov sp, r7
+ 80072ee: bd80 pop {r7, pc}
+ 80072f0: 58000c00 .word 0x58000c00
+
+080072f4 <HW_IPCC_BLE_SendCmd>:
+
+void HW_IPCC_BLE_SendCmd( void )
+{
+ 80072f4: b580 push {r7, lr}
+ 80072f6: af00 add r7, sp, #0
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_BLE_CMD_CHANNEL );
+ 80072f8: 2101 movs r1, #1
+ 80072fa: 4802 ldr r0, [pc, #8] @ (8007304 <HW_IPCC_BLE_SendCmd+0x10>)
+ 80072fc: f7ff ff10 bl 8007120 <LL_C1_IPCC_SetFlag_CHx>
+
+ return;
+ 8007300: bf00 nop
+}
+ 8007302: bd80 pop {r7, pc}
+ 8007304: 58000c00 .word 0x58000c00
+
+08007308 <HW_IPCC_BLE_EvtHandler>:
+
+static void HW_IPCC_BLE_EvtHandler( void )
+{
+ 8007308: b580 push {r7, lr}
+ 800730a: af00 add r7, sp, #0
+ HW_IPCC_BLE_RxEvtNot();
+ 800730c: f7fe ffe4 bl 80062d8 <HW_IPCC_BLE_RxEvtNot>
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_BLE_EVENT_CHANNEL );
+ 8007310: 2101 movs r1, #1
+ 8007312: 4802 ldr r0, [pc, #8] @ (800731c <HW_IPCC_BLE_EvtHandler+0x14>)
+ 8007314: f7ff fef6 bl 8007104 <LL_C1_IPCC_ClearFlag_CHx>
+
+ return;
+ 8007318: bf00 nop
+}
+ 800731a: bd80 pop {r7, pc}
+ 800731c: 58000c00 .word 0x58000c00
+
+08007320 <HW_IPCC_BLE_AclDataEvtHandler>:
+
+ return;
+}
+
+static void HW_IPCC_BLE_AclDataEvtHandler( void )
+{
+ 8007320: b580 push {r7, lr}
+ 8007322: b084 sub sp, #16
+ 8007324: af00 add r7, sp, #0
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007326: f3ef 8310 mrs r3, PRIMASK
+ 800732a: 607b str r3, [r7, #4]
+ return(result);
+ 800732c: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 800732e: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007330: b672 cpsid i
+}
+ 8007332: bf00 nop
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_HCI_ACL_DATA_CHANNEL );
+ 8007334: 2120 movs r1, #32
+ 8007336: 4807 ldr r0, [pc, #28] @ (8007354 <HW_IPCC_BLE_AclDataEvtHandler+0x34>)
+ 8007338: f7ff fec0 bl 80070bc <LL_C1_IPCC_DisableTransmitChannel>
+ 800733c: 68fb ldr r3, [r7, #12]
+ 800733e: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007340: 68bb ldr r3, [r7, #8]
+ 8007342: f383 8810 msr PRIMASK, r3
+}
+ 8007346: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ HW_IPCC_BLE_AclDataAckNot();
+ 8007348: f7fe fff6 bl 8006338 <HW_IPCC_BLE_AclDataAckNot>
+
+ return;
+ 800734c: bf00 nop
+}
+ 800734e: 3710 adds r7, #16
+ 8007350: 46bd mov sp, r7
+ 8007352: bd80 pop {r7, pc}
+ 8007354: 58000c00 .word 0x58000c00
+
+08007358 <HW_IPCC_SYS_Init>:
+
+/******************************************************************************
+ * SYSTEM
+ ******************************************************************************/
+void HW_IPCC_SYS_Init( void )
+{
+ 8007358: b580 push {r7, lr}
+ 800735a: b084 sub sp, #16
+ 800735c: af00 add r7, sp, #0
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800735e: f3ef 8310 mrs r3, PRIMASK
+ 8007362: 607b str r3, [r7, #4]
+ return(result);
+ 8007364: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 8007366: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007368: b672 cpsid i
+}
+ 800736a: bf00 nop
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
+ 800736c: 2102 movs r1, #2
+ 800736e: 4806 ldr r0, [pc, #24] @ (8007388 <HW_IPCC_SYS_Init+0x30>)
+ 8007370: f7ff feb6 bl 80070e0 <LL_C1_IPCC_EnableReceiveChannel>
+ 8007374: 68fb ldr r3, [r7, #12]
+ 8007376: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007378: 68bb ldr r3, [r7, #8]
+ 800737a: f383 8810 msr PRIMASK, r3
+}
+ 800737e: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ return;
+ 8007380: bf00 nop
+}
+ 8007382: 3710 adds r7, #16
+ 8007384: 46bd mov sp, r7
+ 8007386: bd80 pop {r7, pc}
+ 8007388: 58000c00 .word 0x58000c00
+
+0800738c <HW_IPCC_SYS_SendCmd>:
+
+void HW_IPCC_SYS_SendCmd( void )
+{
+ 800738c: b580 push {r7, lr}
+ 800738e: b084 sub sp, #16
+ 8007390: af00 add r7, sp, #0
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+ 8007392: 2102 movs r1, #2
+ 8007394: 480b ldr r0, [pc, #44] @ (80073c4 <HW_IPCC_SYS_SendCmd+0x38>)
+ 8007396: f7ff fec3 bl 8007120 <LL_C1_IPCC_SetFlag_CHx>
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800739a: f3ef 8310 mrs r3, PRIMASK
+ 800739e: 607b str r3, [r7, #4]
+ return(result);
+ 80073a0: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 80073a2: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80073a4: b672 cpsid i
+}
+ 80073a6: bf00 nop
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+ 80073a8: 2102 movs r1, #2
+ 80073aa: 4806 ldr r0, [pc, #24] @ (80073c4 <HW_IPCC_SYS_SendCmd+0x38>)
+ 80073ac: f7ff fe73 bl 8007096 <LL_C1_IPCC_EnableTransmitChannel>
+ 80073b0: 68fb ldr r3, [r7, #12]
+ 80073b2: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80073b4: 68bb ldr r3, [r7, #8]
+ 80073b6: f383 8810 msr PRIMASK, r3
+}
+ 80073ba: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ return;
+ 80073bc: bf00 nop
+}
+ 80073be: 3710 adds r7, #16
+ 80073c0: 46bd mov sp, r7
+ 80073c2: bd80 pop {r7, pc}
+ 80073c4: 58000c00 .word 0x58000c00
+
+080073c8 <HW_IPCC_SYS_CmdEvtHandler>:
+
+static void HW_IPCC_SYS_CmdEvtHandler( void )
+{
+ 80073c8: b580 push {r7, lr}
+ 80073ca: b084 sub sp, #16
+ 80073cc: af00 add r7, sp, #0
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80073ce: f3ef 8310 mrs r3, PRIMASK
+ 80073d2: 607b str r3, [r7, #4]
+ return(result);
+ 80073d4: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 80073d6: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80073d8: b672 cpsid i
+}
+ 80073da: bf00 nop
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_SYSTEM_CMD_RSP_CHANNEL );
+ 80073dc: 2102 movs r1, #2
+ 80073de: 4807 ldr r0, [pc, #28] @ (80073fc <HW_IPCC_SYS_CmdEvtHandler+0x34>)
+ 80073e0: f7ff fe6c bl 80070bc <LL_C1_IPCC_DisableTransmitChannel>
+ 80073e4: 68fb ldr r3, [r7, #12]
+ 80073e6: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80073e8: 68bb ldr r3, [r7, #8]
+ 80073ea: f383 8810 msr PRIMASK, r3
+}
+ 80073ee: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ HW_IPCC_SYS_CmdEvtNot();
+ 80073f0: f7fe fff6 bl 80063e0 <HW_IPCC_SYS_CmdEvtNot>
+
+ return;
+ 80073f4: bf00 nop
+}
+ 80073f6: 3710 adds r7, #16
+ 80073f8: 46bd mov sp, r7
+ 80073fa: bd80 pop {r7, pc}
+ 80073fc: 58000c00 .word 0x58000c00
+
+08007400 <HW_IPCC_SYS_EvtHandler>:
+
+static void HW_IPCC_SYS_EvtHandler( void )
+{
+ 8007400: b580 push {r7, lr}
+ 8007402: af00 add r7, sp, #0
+ HW_IPCC_SYS_EvtNot();
+ 8007404: f7ff f802 bl 800640c <HW_IPCC_SYS_EvtNot>
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_SYSTEM_EVENT_CHANNEL );
+ 8007408: 2102 movs r1, #2
+ 800740a: 4802 ldr r0, [pc, #8] @ (8007414 <HW_IPCC_SYS_EvtHandler+0x14>)
+ 800740c: f7ff fe7a bl 8007104 <LL_C1_IPCC_ClearFlag_CHx>
+
+ return;
+ 8007410: bf00 nop
+}
+ 8007412: bd80 pop {r7, pc}
+ 8007414: 58000c00 .word 0x58000c00
+
+08007418 <HW_IPCC_MM_SendFreeBuf>:
+
+/******************************************************************************
+ * MEMORY MANAGER
+ ******************************************************************************/
+void HW_IPCC_MM_SendFreeBuf( void (*cb)( void ) )
+{
+ 8007418: b580 push {r7, lr}
+ 800741a: b086 sub sp, #24
+ 800741c: af00 add r7, sp, #0
+ 800741e: 6078 str r0, [r7, #4]
+ if ( LL_C1_IPCC_IsActiveFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL ) )
+ 8007420: 2108 movs r1, #8
+ 8007422: 4812 ldr r0, [pc, #72] @ (800746c <HW_IPCC_MM_SendFreeBuf+0x54>)
+ 8007424: f7ff fe8b bl 800713e <LL_C1_IPCC_IsActiveFlag_CHx>
+ 8007428: 4603 mov r3, r0
+ 800742a: 2b00 cmp r3, #0
+ 800742c: d013 beq.n 8007456 <HW_IPCC_MM_SendFreeBuf+0x3e>
+ {
+ FreeBufCb = cb;
+ 800742e: 4a10 ldr r2, [pc, #64] @ (8007470 <HW_IPCC_MM_SendFreeBuf+0x58>)
+ 8007430: 687b ldr r3, [r7, #4]
+ 8007432: 6013 str r3, [r2, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007434: f3ef 8310 mrs r3, PRIMASK
+ 8007438: 60fb str r3, [r7, #12]
+ return(result);
+ 800743a: 68fb ldr r3, [r7, #12]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 800743c: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 800743e: b672 cpsid i
+}
+ 8007440: bf00 nop
+ LL_C1_IPCC_EnableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ 8007442: 2108 movs r1, #8
+ 8007444: 4809 ldr r0, [pc, #36] @ (800746c <HW_IPCC_MM_SendFreeBuf+0x54>)
+ 8007446: f7ff fe26 bl 8007096 <LL_C1_IPCC_EnableTransmitChannel>
+ 800744a: 697b ldr r3, [r7, #20]
+ 800744c: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 800744e: 693b ldr r3, [r7, #16]
+ 8007450: f383 8810 msr PRIMASK, r3
+}
+ 8007454: e005 b.n 8007462 <HW_IPCC_MM_SendFreeBuf+0x4a>
+ UTILS_EXIT_CRITICAL_SECTION();
+ }
+ else
+ {
+ cb();
+ 8007456: 687b ldr r3, [r7, #4]
+ 8007458: 4798 blx r3
+
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ 800745a: 2108 movs r1, #8
+ 800745c: 4803 ldr r0, [pc, #12] @ (800746c <HW_IPCC_MM_SendFreeBuf+0x54>)
+ 800745e: f7ff fe5f bl 8007120 <LL_C1_IPCC_SetFlag_CHx>
+ }
+
+ return;
+ 8007462: bf00 nop
+}
+ 8007464: 3718 adds r7, #24
+ 8007466: 46bd mov sp, r7
+ 8007468: bd80 pop {r7, pc}
+ 800746a: bf00 nop
+ 800746c: 58000c00 .word 0x58000c00
+ 8007470: 200002fc .word 0x200002fc
+
+08007474 <HW_IPCC_MM_FreeBufHandler>:
+
+static void HW_IPCC_MM_FreeBufHandler( void )
+{
+ 8007474: b580 push {r7, lr}
+ 8007476: b084 sub sp, #16
+ 8007478: af00 add r7, sp, #0
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800747a: f3ef 8310 mrs r3, PRIMASK
+ 800747e: 607b str r3, [r7, #4]
+ return(result);
+ 8007480: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 8007482: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007484: b672 cpsid i
+}
+ 8007486: bf00 nop
+ LL_C1_IPCC_DisableTransmitChannel( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ 8007488: 2108 movs r1, #8
+ 800748a: 480a ldr r0, [pc, #40] @ (80074b4 <HW_IPCC_MM_FreeBufHandler+0x40>)
+ 800748c: f7ff fe16 bl 80070bc <LL_C1_IPCC_DisableTransmitChannel>
+ 8007490: 68fb ldr r3, [r7, #12]
+ 8007492: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007494: 68bb ldr r3, [r7, #8]
+ 8007496: f383 8810 msr PRIMASK, r3
+}
+ 800749a: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ FreeBufCb();
+ 800749c: 4b06 ldr r3, [pc, #24] @ (80074b8 <HW_IPCC_MM_FreeBufHandler+0x44>)
+ 800749e: 681b ldr r3, [r3, #0]
+ 80074a0: 4798 blx r3
+
+ LL_C1_IPCC_SetFlag_CHx( IPCC, HW_IPCC_MM_RELEASE_BUFFER_CHANNEL );
+ 80074a2: 2108 movs r1, #8
+ 80074a4: 4803 ldr r0, [pc, #12] @ (80074b4 <HW_IPCC_MM_FreeBufHandler+0x40>)
+ 80074a6: f7ff fe3b bl 8007120 <LL_C1_IPCC_SetFlag_CHx>
+
+ return;
+ 80074aa: bf00 nop
+}
+ 80074ac: 3710 adds r7, #16
+ 80074ae: 46bd mov sp, r7
+ 80074b0: bd80 pop {r7, pc}
+ 80074b2: bf00 nop
+ 80074b4: 58000c00 .word 0x58000c00
+ 80074b8: 200002fc .word 0x200002fc
+
+080074bc <HW_IPCC_TRACES_Init>:
+
+/******************************************************************************
+ * TRACES
+ ******************************************************************************/
+void HW_IPCC_TRACES_Init( void )
+{
+ 80074bc: b580 push {r7, lr}
+ 80074be: b084 sub sp, #16
+ 80074c0: af00 add r7, sp, #0
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80074c2: f3ef 8310 mrs r3, PRIMASK
+ 80074c6: 607b str r3, [r7, #4]
+ return(result);
+ 80074c8: 687b ldr r3, [r7, #4]
+ UTILS_ENTER_CRITICAL_SECTION();
+ 80074ca: 60fb str r3, [r7, #12]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80074cc: b672 cpsid i
+}
+ 80074ce: bf00 nop
+ LL_C1_IPCC_EnableReceiveChannel( IPCC, HW_IPCC_TRACES_CHANNEL );
+ 80074d0: 2108 movs r1, #8
+ 80074d2: 4806 ldr r0, [pc, #24] @ (80074ec <HW_IPCC_TRACES_Init+0x30>)
+ 80074d4: f7ff fe04 bl 80070e0 <LL_C1_IPCC_EnableReceiveChannel>
+ 80074d8: 68fb ldr r3, [r7, #12]
+ 80074da: 60bb str r3, [r7, #8]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80074dc: 68bb ldr r3, [r7, #8]
+ 80074de: f383 8810 msr PRIMASK, r3
+}
+ 80074e2: bf00 nop
+ UTILS_EXIT_CRITICAL_SECTION();
+
+ return;
+ 80074e4: bf00 nop
+}
+ 80074e6: 3710 adds r7, #16
+ 80074e8: 46bd mov sp, r7
+ 80074ea: bd80 pop {r7, pc}
+ 80074ec: 58000c00 .word 0x58000c00
+
+080074f0 <HW_IPCC_TRACES_EvtHandler>:
+
+static void HW_IPCC_TRACES_EvtHandler( void )
+{
+ 80074f0: b580 push {r7, lr}
+ 80074f2: af00 add r7, sp, #0
+ HW_IPCC_TRACES_EvtNot();
+ 80074f4: f7ff f832 bl 800655c <HW_IPCC_TRACES_EvtNot>
+
+ LL_C1_IPCC_ClearFlag_CHx( IPCC, HW_IPCC_TRACES_CHANNEL );
+ 80074f8: 2108 movs r1, #8
+ 80074fa: 4802 ldr r0, [pc, #8] @ (8007504 <HW_IPCC_TRACES_EvtHandler+0x14>)
+ 80074fc: f7ff fe02 bl 8007104 <LL_C1_IPCC_ClearFlag_CHx>
+
+ return;
+ 8007500: bf00 nop
+}
+ 8007502: bd80 pop {r7, pc}
+ 8007504: 58000c00 .word 0x58000c00
+
+08007508 <UTIL_LPM_Init>:
+
+/** @addtogroup TINY_LPM_Exported_function
+ * @{
+ */
+void UTIL_LPM_Init( void )
+{
+ 8007508: b480 push {r7}
+ 800750a: af00 add r7, sp, #0
+ StopModeDisable = UTIL_LPM_NO_BIT_SET;
+ 800750c: 4b05 ldr r3, [pc, #20] @ (8007524 <UTIL_LPM_Init+0x1c>)
+ 800750e: 2200 movs r2, #0
+ 8007510: 601a str r2, [r3, #0]
+ OffModeDisable = UTIL_LPM_NO_BIT_SET;
+ 8007512: 4b05 ldr r3, [pc, #20] @ (8007528 <UTIL_LPM_Init+0x20>)
+ 8007514: 2200 movs r2, #0
+ 8007516: 601a str r2, [r3, #0]
+ UTIL_LPM_INIT_CRITICAL_SECTION( );
+}
+ 8007518: bf00 nop
+ 800751a: 46bd mov sp, r7
+ 800751c: f85d 7b04 ldr.w r7, [sp], #4
+ 8007520: 4770 bx lr
+ 8007522: bf00 nop
+ 8007524: 20000300 .word 0x20000300
+ 8007528: 20000304 .word 0x20000304
+
+0800752c <UTIL_LPM_SetOffMode>:
+
+ UTIL_LPM_EXIT_CRITICAL_SECTION( );
+}
+
+void UTIL_LPM_SetOffMode( UTIL_LPM_bm_t lpm_id_bm, UTIL_LPM_State_t state )
+{
+ 800752c: b480 push {r7}
+ 800752e: b087 sub sp, #28
+ 8007530: af00 add r7, sp, #0
+ 8007532: 6078 str r0, [r7, #4]
+ 8007534: 460b mov r3, r1
+ 8007536: 70fb strb r3, [r7, #3]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007538: f3ef 8310 mrs r3, PRIMASK
+ 800753c: 613b str r3, [r7, #16]
+ return(result);
+ 800753e: 693b ldr r3, [r7, #16]
+ UTIL_LPM_ENTER_CRITICAL_SECTION( );
+ 8007540: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007542: b672 cpsid i
+}
+ 8007544: bf00 nop
+
+ switch(state)
+ 8007546: 78fb ldrb r3, [r7, #3]
+ 8007548: 2b00 cmp r3, #0
+ 800754a: d008 beq.n 800755e <UTIL_LPM_SetOffMode+0x32>
+ 800754c: 2b01 cmp r3, #1
+ 800754e: d10e bne.n 800756e <UTIL_LPM_SetOffMode+0x42>
+ {
+ case UTIL_LPM_DISABLE:
+ {
+ OffModeDisable |= lpm_id_bm;
+ 8007550: 4b0d ldr r3, [pc, #52] @ (8007588 <UTIL_LPM_SetOffMode+0x5c>)
+ 8007552: 681a ldr r2, [r3, #0]
+ 8007554: 687b ldr r3, [r7, #4]
+ 8007556: 4313 orrs r3, r2
+ 8007558: 4a0b ldr r2, [pc, #44] @ (8007588 <UTIL_LPM_SetOffMode+0x5c>)
+ 800755a: 6013 str r3, [r2, #0]
+ break;
+ 800755c: e008 b.n 8007570 <UTIL_LPM_SetOffMode+0x44>
+ }
+ case UTIL_LPM_ENABLE:
+ {
+ OffModeDisable &= ( ~lpm_id_bm );
+ 800755e: 687b ldr r3, [r7, #4]
+ 8007560: 43da mvns r2, r3
+ 8007562: 4b09 ldr r3, [pc, #36] @ (8007588 <UTIL_LPM_SetOffMode+0x5c>)
+ 8007564: 681b ldr r3, [r3, #0]
+ 8007566: 4013 ands r3, r2
+ 8007568: 4a07 ldr r2, [pc, #28] @ (8007588 <UTIL_LPM_SetOffMode+0x5c>)
+ 800756a: 6013 str r3, [r2, #0]
+ break;
+ 800756c: e000 b.n 8007570 <UTIL_LPM_SetOffMode+0x44>
+ }
+ default :
+ {
+ break;
+ 800756e: bf00 nop
+ 8007570: 697b ldr r3, [r7, #20]
+ 8007572: 60fb str r3, [r7, #12]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007574: 68fb ldr r3, [r7, #12]
+ 8007576: f383 8810 msr PRIMASK, r3
+}
+ 800757a: bf00 nop
+ }
+ }
+
+ UTIL_LPM_EXIT_CRITICAL_SECTION( );
+}
+ 800757c: bf00 nop
+ 800757e: 371c adds r7, #28
+ 8007580: 46bd mov sp, r7
+ 8007582: f85d 7b04 ldr.w r7, [sp], #4
+ 8007586: 4770 bx lr
+ 8007588: 20000304 .word 0x20000304
+
+0800758c <UTIL_SEQ_Run>:
+ * That is the reason why many variables that are used only in that function are declared static.
+ * Note: These variables could have been declared static in the function.
+ *
+ */
+void UTIL_SEQ_Run( UTIL_SEQ_bm_t Mask_bm )
+{
+ 800758c: b580 push {r7, lr}
+ 800758e: b094 sub sp, #80 @ 0x50
+ 8007590: af00 add r7, sp, #0
+ 8007592: 6078 str r0, [r7, #4]
+ /*
+ * When this function is nested, the mask to be applied cannot be larger than the first call
+ * The mask is always getting smaller and smaller
+ * A copy is made of the mask set by UTIL_SEQ_Run() in case it is called again in the task
+ */
+ super_mask_backup = SuperMask;
+ 8007594: 4b89 ldr r3, [pc, #548] @ (80077bc <UTIL_SEQ_Run+0x230>)
+ 8007596: 681b ldr r3, [r3, #0]
+ 8007598: 62fb str r3, [r7, #44] @ 0x2c
+ SuperMask &= Mask_bm;
+ 800759a: 4b88 ldr r3, [pc, #544] @ (80077bc <UTIL_SEQ_Run+0x230>)
+ 800759c: 681a ldr r2, [r3, #0]
+ 800759e: 687b ldr r3, [r7, #4]
+ 80075a0: 4013 ands r3, r2
+ 80075a2: 4a86 ldr r2, [pc, #536] @ (80077bc <UTIL_SEQ_Run+0x230>)
+ 80075a4: 6013 str r3, [r2, #0]
+ * TaskMask that comes from UTIL_SEQ_PauseTask() / UTIL_SEQ_ResumeTask
+ * SuperMask that comes from UTIL_SEQ_Run
+ * If the waited event is there, exit from UTIL_SEQ_Run() to return to the
+ * waiting task
+ */
+ local_taskset = TaskSet;
+ 80075a6: 4b86 ldr r3, [pc, #536] @ (80077c0 <UTIL_SEQ_Run+0x234>)
+ 80075a8: 681b ldr r3, [r3, #0]
+ 80075aa: 647b str r3, [r7, #68] @ 0x44
+ local_evtset = EvtSet;
+ 80075ac: 4b85 ldr r3, [pc, #532] @ (80077c4 <UTIL_SEQ_Run+0x238>)
+ 80075ae: 681b ldr r3, [r3, #0]
+ 80075b0: 643b str r3, [r7, #64] @ 0x40
+ local_taskmask = TaskMask;
+ 80075b2: 4b85 ldr r3, [pc, #532] @ (80077c8 <UTIL_SEQ_Run+0x23c>)
+ 80075b4: 681b ldr r3, [r3, #0]
+ 80075b6: 63fb str r3, [r7, #60] @ 0x3c
+ local_evtwaited = EvtWaited;
+ 80075b8: 4b84 ldr r3, [pc, #528] @ (80077cc <UTIL_SEQ_Run+0x240>)
+ 80075ba: 681b ldr r3, [r3, #0]
+ 80075bc: 63bb str r3, [r7, #56] @ 0x38
+ while(((local_taskset & local_taskmask & SuperMask) != 0U) && ((local_evtset & local_evtwaited)==0U))
+ 80075be: e112 b.n 80077e6 <UTIL_SEQ_Run+0x25a>
+ {
+ counter = 0U;
+ 80075c0: 2300 movs r3, #0
+ 80075c2: 64fb str r3, [r7, #76] @ 0x4c
+ /*
+ * When a flag is set, the associated bit is set in TaskPrio[counter].priority mask depending
+ * on the priority parameter given from UTIL_SEQ_SetTask()
+ * The while loop is looking for a flag set from the highest priority maskr to the lower
+ */
+ while((TaskPrio[counter].priority & local_taskmask & SuperMask)== 0U)
+ 80075c4: e002 b.n 80075cc <UTIL_SEQ_Run+0x40>
+ {
+ counter++;
+ 80075c6: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80075c8: 3301 adds r3, #1
+ 80075ca: 64fb str r3, [r7, #76] @ 0x4c
+ while((TaskPrio[counter].priority & local_taskmask & SuperMask)== 0U)
+ 80075cc: 4a80 ldr r2, [pc, #512] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 80075ce: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80075d0: f852 2033 ldr.w r2, [r2, r3, lsl #3]
+ 80075d4: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 80075d6: 401a ands r2, r3
+ 80075d8: 4b78 ldr r3, [pc, #480] @ (80077bc <UTIL_SEQ_Run+0x230>)
+ 80075da: 681b ldr r3, [r3, #0]
+ 80075dc: 4013 ands r3, r2
+ 80075de: 2b00 cmp r3, #0
+ 80075e0: d0f1 beq.n 80075c6 <UTIL_SEQ_Run+0x3a>
+ }
+
+ current_task_set = TaskPrio[counter].priority & local_taskmask & SuperMask;
+ 80075e2: 4a7b ldr r2, [pc, #492] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 80075e4: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80075e6: f852 2033 ldr.w r2, [r2, r3, lsl #3]
+ 80075ea: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 80075ec: 401a ands r2, r3
+ 80075ee: 4b73 ldr r3, [pc, #460] @ (80077bc <UTIL_SEQ_Run+0x230>)
+ 80075f0: 681b ldr r3, [r3, #0]
+ 80075f2: 4013 ands r3, r2
+ 80075f4: 64bb str r3, [r7, #72] @ 0x48
+ * the round_robin mask
+ *
+ * In the check below, the round_robin mask is reinitialize in case all pending
+ * tasks haven been executed at least once
+ */
+ if ((TaskPrio[counter].round_robin & current_task_set) == 0U)
+ 80075f6: 4a76 ldr r2, [pc, #472] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 80075f8: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80075fa: 00db lsls r3, r3, #3
+ 80075fc: 4413 add r3, r2
+ 80075fe: 685a ldr r2, [r3, #4]
+ 8007600: 6cbb ldr r3, [r7, #72] @ 0x48
+ 8007602: 4013 ands r3, r2
+ 8007604: 2b00 cmp r3, #0
+ 8007606: d106 bne.n 8007616 <UTIL_SEQ_Run+0x8a>
+ {
+ TaskPrio[counter].round_robin = UTIL_SEQ_ALL_BIT_SET;
+ 8007608: 4a71 ldr r2, [pc, #452] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 800760a: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 800760c: 00db lsls r3, r3, #3
+ 800760e: 4413 add r3, r2
+ 8007610: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
+ 8007614: 605a str r2, [r3, #4]
+
+ /*
+ * Compute the Stack Startving List
+ * This is the list of the task that have been set at least once minus the one that have been cleared ar least once
+ */
+ task_starving_list = TaskSet;
+ 8007616: 4b6a ldr r3, [pc, #424] @ (80077c0 <UTIL_SEQ_Run+0x234>)
+ 8007618: 681b ldr r3, [r3, #0]
+ 800761a: 62bb str r3, [r7, #40] @ 0x28
+ * Such situation shall not happen when evaluating task_starving_list
+ * At any time, there should not be any bit reset in TaskPrio[counter].round_robin and reset in TaskClearList
+ * It is correct with regard to the Sequencer Architecture to set in TaskClearList all tasks that are said to be executed from TaskPrio[counter].round_robin
+ * This synchronizes both information before calculating the CurrentTaskIdx
+ */
+ TaskClearList |= (~TaskPrio[counter].round_robin);
+ 800761c: 4a6c ldr r2, [pc, #432] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 800761e: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 8007620: 00db lsls r3, r3, #3
+ 8007622: 4413 add r3, r2
+ 8007624: 685b ldr r3, [r3, #4]
+ 8007626: 43da mvns r2, r3
+ 8007628: 4b6a ldr r3, [pc, #424] @ (80077d4 <UTIL_SEQ_Run+0x248>)
+ 800762a: 681b ldr r3, [r3, #0]
+ 800762c: 4313 orrs r3, r2
+ 800762e: 4a69 ldr r2, [pc, #420] @ (80077d4 <UTIL_SEQ_Run+0x248>)
+ 8007630: 6013 str r3, [r2, #0]
+
+ task_starving_list &= (~TaskClearList);
+ 8007632: 4b68 ldr r3, [pc, #416] @ (80077d4 <UTIL_SEQ_Run+0x248>)
+ 8007634: 681b ldr r3, [r3, #0]
+ 8007636: 43db mvns r3, r3
+ 8007638: 6aba ldr r2, [r7, #40] @ 0x28
+ 800763a: 4013 ands r3, r2
+ 800763c: 62bb str r3, [r7, #40] @ 0x28
+
+ /*
+ * Consider first the starving list and update current_task_set accordingly
+ */
+ if ((task_starving_list & current_task_set) != 0U)
+ 800763e: 6aba ldr r2, [r7, #40] @ 0x28
+ 8007640: 6cbb ldr r3, [r7, #72] @ 0x48
+ 8007642: 4013 ands r3, r2
+ 8007644: 2b00 cmp r3, #0
+ 8007646: d003 beq.n 8007650 <UTIL_SEQ_Run+0xc4>
+ {
+ current_task_set = (task_starving_list & current_task_set);
+ 8007648: 6cba ldr r2, [r7, #72] @ 0x48
+ 800764a: 6abb ldr r3, [r7, #40] @ 0x28
+ 800764c: 4013 ands r3, r2
+ 800764e: 64bb str r3, [r7, #72] @ 0x48
+ }
+
+ /*
+ * Reinitialize the Starving List if required
+ */
+ if(task_starving_list == 0)
+ 8007650: 6abb ldr r3, [r7, #40] @ 0x28
+ 8007652: 2b00 cmp r3, #0
+ 8007654: d102 bne.n 800765c <UTIL_SEQ_Run+0xd0>
+ {
+ TaskClearList = 0;
+ 8007656: 4b5f ldr r3, [pc, #380] @ (80077d4 <UTIL_SEQ_Run+0x248>)
+ 8007658: 2200 movs r2, #0
+ 800765a: 601a str r2, [r3, #0]
+ /*
+ * Read the flag index of the task to be executed
+ * Once the index is read, the associated task will be executed even though a higher priority stack is requested
+ * before task execution.
+ */
+ CurrentTaskIdx = (SEQ_BitPosition(current_task_set & TaskPrio[counter].round_robin));
+ 800765c: 4a5c ldr r2, [pc, #368] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 800765e: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 8007660: 00db lsls r3, r3, #3
+ 8007662: 4413 add r3, r2
+ 8007664: 685a ldr r2, [r3, #4]
+ 8007666: 6cbb ldr r3, [r7, #72] @ 0x48
+ 8007668: 4013 ands r3, r2
+ 800766a: 4618 mov r0, r3
+ 800766c: f000 fa43 bl 8007af6 <SEQ_BitPosition>
+ 8007670: 4603 mov r3, r0
+ 8007672: 461a mov r2, r3
+ 8007674: 4b58 ldr r3, [pc, #352] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 8007676: 601a str r2, [r3, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007678: f3ef 8310 mrs r3, PRIMASK
+ 800767c: 61fb str r3, [r7, #28]
+ return(result);
+ 800767e: 69fb ldr r3, [r7, #28]
+
+ UTIL_SEQ_ENTER_CRITICAL_SECTION( );
+ 8007680: 627b str r3, [r7, #36] @ 0x24
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007682: b672 cpsid i
+}
+ 8007684: bf00 nop
+ /* remove from the list or pending task the one that has been selected to be executed */
+ TaskSet &= ~(1U << CurrentTaskIdx);
+ 8007686: 4b54 ldr r3, [pc, #336] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 8007688: 681b ldr r3, [r3, #0]
+ 800768a: 2201 movs r2, #1
+ 800768c: fa02 f303 lsl.w r3, r2, r3
+ 8007690: 43da mvns r2, r3
+ 8007692: 4b4b ldr r3, [pc, #300] @ (80077c0 <UTIL_SEQ_Run+0x234>)
+ 8007694: 681b ldr r3, [r3, #0]
+ 8007696: 4013 ands r3, r2
+ 8007698: 4a49 ldr r2, [pc, #292] @ (80077c0 <UTIL_SEQ_Run+0x234>)
+ 800769a: 6013 str r3, [r2, #0]
+
+ /*
+ * remove from all priority mask the task that has been selected to be executed
+ */
+ for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--)
+ 800769c: 2301 movs r3, #1
+ 800769e: 64fb str r3, [r7, #76] @ 0x4c
+ 80076a0: e013 b.n 80076ca <UTIL_SEQ_Run+0x13e>
+ {
+ TaskPrio[counter - 1u].priority &= ~(1U << CurrentTaskIdx);
+ 80076a2: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80076a4: 3b01 subs r3, #1
+ 80076a6: 4a4a ldr r2, [pc, #296] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 80076a8: f852 1033 ldr.w r1, [r2, r3, lsl #3]
+ 80076ac: 4b4a ldr r3, [pc, #296] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 80076ae: 681b ldr r3, [r3, #0]
+ 80076b0: 2201 movs r2, #1
+ 80076b2: fa02 f303 lsl.w r3, r2, r3
+ 80076b6: 43da mvns r2, r3
+ 80076b8: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80076ba: 3b01 subs r3, #1
+ 80076bc: 400a ands r2, r1
+ 80076be: 4944 ldr r1, [pc, #272] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 80076c0: f841 2033 str.w r2, [r1, r3, lsl #3]
+ for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--)
+ 80076c4: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80076c6: 3b01 subs r3, #1
+ 80076c8: 64fb str r3, [r7, #76] @ 0x4c
+ 80076ca: 6cfb ldr r3, [r7, #76] @ 0x4c
+ 80076cc: 2b00 cmp r3, #0
+ 80076ce: d1e8 bne.n 80076a2 <UTIL_SEQ_Run+0x116>
+ 80076d0: 6a7b ldr r3, [r7, #36] @ 0x24
+ 80076d2: 61bb str r3, [r7, #24]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80076d4: 69bb ldr r3, [r7, #24]
+ 80076d6: f383 8810 msr PRIMASK, r3
+}
+ 80076da: bf00 nop
+ }
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+
+ UTIL_SEQ_PreTask(CurrentTaskIdx);
+ 80076dc: 4b3e ldr r3, [pc, #248] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 80076de: 681b ldr r3, [r3, #0]
+ 80076e0: 4618 mov r0, r3
+ 80076e2: f000 f9e9 bl 8007ab8 <UTIL_SEQ_PreTask>
+
+ /*
+ * Check that function exists before calling it
+ */
+ if ((CurrentTaskIdx < UTIL_SEQ_CONF_TASK_NBR) && (TaskCb[CurrentTaskIdx] != NULL))
+ 80076e6: 4b3c ldr r3, [pc, #240] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 80076e8: 681b ldr r3, [r3, #0]
+ 80076ea: 2b1f cmp r3, #31
+ 80076ec: d878 bhi.n 80077e0 <UTIL_SEQ_Run+0x254>
+ 80076ee: 4b3a ldr r3, [pc, #232] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 80076f0: 681b ldr r3, [r3, #0]
+ 80076f2: 4a3a ldr r2, [pc, #232] @ (80077dc <UTIL_SEQ_Run+0x250>)
+ 80076f4: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 80076f8: 2b00 cmp r3, #0
+ 80076fa: d071 beq.n 80077e0 <UTIL_SEQ_Run+0x254>
+ {
+ /*
+ * save the round-robin value to take into account the operation done in UTIL_SEQ_WaitEvt
+ */
+ for (uint32_t index = 0; index < UTIL_SEQ_CONF_PRIO_NBR; index++)
+ 80076fc: 2300 movs r3, #0
+ 80076fe: 637b str r3, [r7, #52] @ 0x34
+ 8007700: e01e b.n 8007740 <UTIL_SEQ_Run+0x1b4>
+ {
+ TaskPrio[index].round_robin &= ~(1U << CurrentTaskIdx);
+ 8007702: 4a33 ldr r2, [pc, #204] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 8007704: 6b7b ldr r3, [r7, #52] @ 0x34
+ 8007706: 00db lsls r3, r3, #3
+ 8007708: 4413 add r3, r2
+ 800770a: 685a ldr r2, [r3, #4]
+ 800770c: 4b32 ldr r3, [pc, #200] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 800770e: 681b ldr r3, [r3, #0]
+ 8007710: 2101 movs r1, #1
+ 8007712: fa01 f303 lsl.w r3, r1, r3
+ 8007716: 43db mvns r3, r3
+ 8007718: 401a ands r2, r3
+ 800771a: 492d ldr r1, [pc, #180] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 800771c: 6b7b ldr r3, [r7, #52] @ 0x34
+ 800771e: 00db lsls r3, r3, #3
+ 8007720: 440b add r3, r1
+ 8007722: 605a str r2, [r3, #4]
+ round_robin[index] = TaskPrio[index].round_robin;
+ 8007724: 4a2a ldr r2, [pc, #168] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 8007726: 6b7b ldr r3, [r7, #52] @ 0x34
+ 8007728: 00db lsls r3, r3, #3
+ 800772a: 4413 add r3, r2
+ 800772c: 685a ldr r2, [r3, #4]
+ 800772e: 6b7b ldr r3, [r7, #52] @ 0x34
+ 8007730: 009b lsls r3, r3, #2
+ 8007732: 3350 adds r3, #80 @ 0x50
+ 8007734: 443b add r3, r7
+ 8007736: f843 2c44 str.w r2, [r3, #-68]
+ for (uint32_t index = 0; index < UTIL_SEQ_CONF_PRIO_NBR; index++)
+ 800773a: 6b7b ldr r3, [r7, #52] @ 0x34
+ 800773c: 3301 adds r3, #1
+ 800773e: 637b str r3, [r7, #52] @ 0x34
+ 8007740: 6b7b ldr r3, [r7, #52] @ 0x34
+ 8007742: 2b00 cmp r3, #0
+ 8007744: d0dd beq.n 8007702 <UTIL_SEQ_Run+0x176>
+ }
+
+ /* Execute the task */
+ TaskCb[CurrentTaskIdx]( );
+ 8007746: 4b24 ldr r3, [pc, #144] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 8007748: 681b ldr r3, [r3, #0]
+ 800774a: 4a24 ldr r2, [pc, #144] @ (80077dc <UTIL_SEQ_Run+0x250>)
+ 800774c: f852 3023 ldr.w r3, [r2, r3, lsl #2]
+ 8007750: 4798 blx r3
+
+ /*
+ * restore the round-robin context
+ */
+ for (uint32_t index = 0; index < UTIL_SEQ_CONF_PRIO_NBR; index++)
+ 8007752: 2300 movs r3, #0
+ 8007754: 633b str r3, [r7, #48] @ 0x30
+ 8007756: e013 b.n 8007780 <UTIL_SEQ_Run+0x1f4>
+ {
+ TaskPrio[index].round_robin &= round_robin[index];
+ 8007758: 4a1d ldr r2, [pc, #116] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 800775a: 6b3b ldr r3, [r7, #48] @ 0x30
+ 800775c: 00db lsls r3, r3, #3
+ 800775e: 4413 add r3, r2
+ 8007760: 685a ldr r2, [r3, #4]
+ 8007762: 6b3b ldr r3, [r7, #48] @ 0x30
+ 8007764: 009b lsls r3, r3, #2
+ 8007766: 3350 adds r3, #80 @ 0x50
+ 8007768: 443b add r3, r7
+ 800776a: f853 3c44 ldr.w r3, [r3, #-68]
+ 800776e: 401a ands r2, r3
+ 8007770: 4917 ldr r1, [pc, #92] @ (80077d0 <UTIL_SEQ_Run+0x244>)
+ 8007772: 6b3b ldr r3, [r7, #48] @ 0x30
+ 8007774: 00db lsls r3, r3, #3
+ 8007776: 440b add r3, r1
+ 8007778: 605a str r2, [r3, #4]
+ for (uint32_t index = 0; index < UTIL_SEQ_CONF_PRIO_NBR; index++)
+ 800777a: 6b3b ldr r3, [r7, #48] @ 0x30
+ 800777c: 3301 adds r3, #1
+ 800777e: 633b str r3, [r7, #48] @ 0x30
+ 8007780: 6b3b ldr r3, [r7, #48] @ 0x30
+ 8007782: 2b00 cmp r3, #0
+ 8007784: d0e8 beq.n 8007758 <UTIL_SEQ_Run+0x1cc>
+ }
+
+ UTIL_SEQ_PostTask(CurrentTaskIdx);
+ 8007786: 4b14 ldr r3, [pc, #80] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 8007788: 681b ldr r3, [r3, #0]
+ 800778a: 4618 mov r0, r3
+ 800778c: f000 f99e bl 8007acc <UTIL_SEQ_PostTask>
+
+ local_taskset = TaskSet;
+ 8007790: 4b0b ldr r3, [pc, #44] @ (80077c0 <UTIL_SEQ_Run+0x234>)
+ 8007792: 681b ldr r3, [r3, #0]
+ 8007794: 647b str r3, [r7, #68] @ 0x44
+ local_evtset = EvtSet;
+ 8007796: 4b0b ldr r3, [pc, #44] @ (80077c4 <UTIL_SEQ_Run+0x238>)
+ 8007798: 681b ldr r3, [r3, #0]
+ 800779a: 643b str r3, [r7, #64] @ 0x40
+ local_taskmask = TaskMask;
+ 800779c: 4b0a ldr r3, [pc, #40] @ (80077c8 <UTIL_SEQ_Run+0x23c>)
+ 800779e: 681b ldr r3, [r3, #0]
+ 80077a0: 63fb str r3, [r7, #60] @ 0x3c
+ local_evtwaited = EvtWaited;
+ 80077a2: 4b0a ldr r3, [pc, #40] @ (80077cc <UTIL_SEQ_Run+0x240>)
+ 80077a4: 681b ldr r3, [r3, #0]
+ 80077a6: 63bb str r3, [r7, #56] @ 0x38
+
+ /*
+ * Update the two list for next round
+ */
+ TaskClearList |= (1U << CurrentTaskIdx);
+ 80077a8: 4b0b ldr r3, [pc, #44] @ (80077d8 <UTIL_SEQ_Run+0x24c>)
+ 80077aa: 681b ldr r3, [r3, #0]
+ 80077ac: 2201 movs r2, #1
+ 80077ae: 409a lsls r2, r3
+ 80077b0: 4b08 ldr r3, [pc, #32] @ (80077d4 <UTIL_SEQ_Run+0x248>)
+ 80077b2: 681b ldr r3, [r3, #0]
+ 80077b4: 4313 orrs r3, r2
+ 80077b6: 4a07 ldr r2, [pc, #28] @ (80077d4 <UTIL_SEQ_Run+0x248>)
+ 80077b8: 6013 str r3, [r2, #0]
+ 80077ba: e014 b.n 80077e6 <UTIL_SEQ_Run+0x25a>
+ 80077bc: 20000028 .word 0x20000028
+ 80077c0: 20000308 .word 0x20000308
+ 80077c4: 2000030c .word 0x2000030c
+ 80077c8: 20000024 .word 0x20000024
+ 80077cc: 20000310 .word 0x20000310
+ 80077d0: 20000398 .word 0x20000398
+ 80077d4: 200003a0 .word 0x200003a0
+ 80077d8: 20000314 .word 0x20000314
+ 80077dc: 20000318 .word 0x20000318
+ else
+ {
+ /*
+ * must never occurs, it means there is a warning in the system
+ */
+ UTIL_SEQ_CatchWarning(UTIL_SEQ_WARNING_INVALIDTASKID);
+ 80077e0: 2000 movs r0, #0
+ 80077e2: f000 f97d bl 8007ae0 <UTIL_SEQ_CatchWarning>
+ while(((local_taskset & local_taskmask & SuperMask) != 0U) && ((local_evtset & local_evtwaited)==0U))
+ 80077e6: 6c7a ldr r2, [r7, #68] @ 0x44
+ 80077e8: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 80077ea: 401a ands r2, r3
+ 80077ec: 4b22 ldr r3, [pc, #136] @ (8007878 <UTIL_SEQ_Run+0x2ec>)
+ 80077ee: 681b ldr r3, [r3, #0]
+ 80077f0: 4013 ands r3, r2
+ 80077f2: 2b00 cmp r3, #0
+ 80077f4: d005 beq.n 8007802 <UTIL_SEQ_Run+0x276>
+ 80077f6: 6c3a ldr r2, [r7, #64] @ 0x40
+ 80077f8: 6bbb ldr r3, [r7, #56] @ 0x38
+ 80077fa: 4013 ands r3, r2
+ 80077fc: 2b00 cmp r3, #0
+ 80077fe: f43f aedf beq.w 80075c0 <UTIL_SEQ_Run+0x34>
+ }
+ }
+
+ /* the set of CurrentTaskIdx to no task running allows to call WaitEvt in the Pre/Post ilde context */
+ CurrentTaskIdx = UTIL_SEQ_NOTASKRUNNING;
+ 8007802: 4b1e ldr r3, [pc, #120] @ (800787c <UTIL_SEQ_Run+0x2f0>)
+ 8007804: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff
+ 8007808: 601a str r2, [r3, #0]
+ /* if a waited event is present, ignore the IDLE sequence */
+ if ((local_evtset & EvtWaited)== 0U)
+ 800780a: 4b1d ldr r3, [pc, #116] @ (8007880 <UTIL_SEQ_Run+0x2f4>)
+ 800780c: 681a ldr r2, [r3, #0]
+ 800780e: 6c3b ldr r3, [r7, #64] @ 0x40
+ 8007810: 4013 ands r3, r2
+ 8007812: 2b00 cmp r3, #0
+ 8007814: d129 bne.n 800786a <UTIL_SEQ_Run+0x2de>
+ {
+ UTIL_SEQ_PreIdle( );
+ 8007816: f000 f941 bl 8007a9c <UTIL_SEQ_PreIdle>
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800781a: f3ef 8310 mrs r3, PRIMASK
+ 800781e: 617b str r3, [r7, #20]
+ return(result);
+ 8007820: 697b ldr r3, [r7, #20]
+
+ UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE( );
+ 8007822: 623b str r3, [r7, #32]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007824: b672 cpsid i
+}
+ 8007826: bf00 nop
+ local_taskset = TaskSet;
+ 8007828: 4b16 ldr r3, [pc, #88] @ (8007884 <UTIL_SEQ_Run+0x2f8>)
+ 800782a: 681b ldr r3, [r3, #0]
+ 800782c: 647b str r3, [r7, #68] @ 0x44
+ local_evtset = EvtSet;
+ 800782e: 4b16 ldr r3, [pc, #88] @ (8007888 <UTIL_SEQ_Run+0x2fc>)
+ 8007830: 681b ldr r3, [r3, #0]
+ 8007832: 643b str r3, [r7, #64] @ 0x40
+ local_taskmask = TaskMask;
+ 8007834: 4b15 ldr r3, [pc, #84] @ (800788c <UTIL_SEQ_Run+0x300>)
+ 8007836: 681b ldr r3, [r3, #0]
+ 8007838: 63fb str r3, [r7, #60] @ 0x3c
+ if ((local_taskset & local_taskmask & SuperMask) == 0U)
+ 800783a: 6c7a ldr r2, [r7, #68] @ 0x44
+ 800783c: 6bfb ldr r3, [r7, #60] @ 0x3c
+ 800783e: 401a ands r2, r3
+ 8007840: 4b0d ldr r3, [pc, #52] @ (8007878 <UTIL_SEQ_Run+0x2ec>)
+ 8007842: 681b ldr r3, [r3, #0]
+ 8007844: 4013 ands r3, r2
+ 8007846: 2b00 cmp r3, #0
+ 8007848: d107 bne.n 800785a <UTIL_SEQ_Run+0x2ce>
+ {
+ if ((local_evtset & EvtWaited)== 0U)
+ 800784a: 4b0d ldr r3, [pc, #52] @ (8007880 <UTIL_SEQ_Run+0x2f4>)
+ 800784c: 681a ldr r2, [r3, #0]
+ 800784e: 6c3b ldr r3, [r7, #64] @ 0x40
+ 8007850: 4013 ands r3, r2
+ 8007852: 2b00 cmp r3, #0
+ 8007854: d101 bne.n 800785a <UTIL_SEQ_Run+0x2ce>
+ {
+ UTIL_SEQ_Idle( );
+ 8007856: f7f8 fed5 bl 8000604 <UTIL_SEQ_Idle>
+ 800785a: 6a3b ldr r3, [r7, #32]
+ 800785c: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 800785e: 693b ldr r3, [r7, #16]
+ 8007860: f383 8810 msr PRIMASK, r3
+}
+ 8007864: bf00 nop
+ }
+ }
+ UTIL_SEQ_EXIT_CRITICAL_SECTION_IDLE( );
+
+ UTIL_SEQ_PostIdle( );
+ 8007866: f000 f920 bl 8007aaa <UTIL_SEQ_PostIdle>
+ }
+
+ /* restore the mask from UTIL_SEQ_Run() */
+ SuperMask = super_mask_backup;
+ 800786a: 4a03 ldr r2, [pc, #12] @ (8007878 <UTIL_SEQ_Run+0x2ec>)
+ 800786c: 6afb ldr r3, [r7, #44] @ 0x2c
+ 800786e: 6013 str r3, [r2, #0]
+
+ return;
+ 8007870: bf00 nop
+}
+ 8007872: 3750 adds r7, #80 @ 0x50
+ 8007874: 46bd mov sp, r7
+ 8007876: bd80 pop {r7, pc}
+ 8007878: 20000028 .word 0x20000028
+ 800787c: 20000314 .word 0x20000314
+ 8007880: 20000310 .word 0x20000310
+ 8007884: 20000308 .word 0x20000308
+ 8007888: 2000030c .word 0x2000030c
+ 800788c: 20000024 .word 0x20000024
+
+08007890 <UTIL_SEQ_RegTask>:
+
+void UTIL_SEQ_RegTask(UTIL_SEQ_bm_t TaskId_bm, uint32_t Flags, void (*Task)( void ))
+{
+ 8007890: b580 push {r7, lr}
+ 8007892: b088 sub sp, #32
+ 8007894: af00 add r7, sp, #0
+ 8007896: 60f8 str r0, [r7, #12]
+ 8007898: 60b9 str r1, [r7, #8]
+ 800789a: 607a str r2, [r7, #4]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 800789c: f3ef 8310 mrs r3, PRIMASK
+ 80078a0: 617b str r3, [r7, #20]
+ return(result);
+ 80078a2: 697b ldr r3, [r7, #20]
+ (void)Flags;
+ UTIL_SEQ_ENTER_CRITICAL_SECTION();
+ 80078a4: 61fb str r3, [r7, #28]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80078a6: b672 cpsid i
+}
+ 80078a8: bf00 nop
+
+ TaskCb[SEQ_BitPosition(TaskId_bm)] = Task;
+ 80078aa: 68f8 ldr r0, [r7, #12]
+ 80078ac: f000 f923 bl 8007af6 <SEQ_BitPosition>
+ 80078b0: 4603 mov r3, r0
+ 80078b2: 4619 mov r1, r3
+ 80078b4: 4a06 ldr r2, [pc, #24] @ (80078d0 <UTIL_SEQ_RegTask+0x40>)
+ 80078b6: 687b ldr r3, [r7, #4]
+ 80078b8: f842 3021 str.w r3, [r2, r1, lsl #2]
+ 80078bc: 69fb ldr r3, [r7, #28]
+ 80078be: 61bb str r3, [r7, #24]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80078c0: 69bb ldr r3, [r7, #24]
+ 80078c2: f383 8810 msr PRIMASK, r3
+}
+ 80078c6: bf00 nop
+
+ UTIL_SEQ_EXIT_CRITICAL_SECTION();
+
+ return;
+ 80078c8: bf00 nop
+}
+ 80078ca: 3720 adds r7, #32
+ 80078cc: 46bd mov sp, r7
+ 80078ce: bd80 pop {r7, pc}
+ 80078d0: 20000318 .word 0x20000318
+
+080078d4 <UTIL_SEQ_SetTask>:
+ UTIL_SEQ_EXIT_CRITICAL_SECTION();
+ return _status;
+}
+
+void UTIL_SEQ_SetTask( UTIL_SEQ_bm_t TaskId_bm, uint32_t Task_Prio )
+{
+ 80078d4: b480 push {r7}
+ 80078d6: b087 sub sp, #28
+ 80078d8: af00 add r7, sp, #0
+ 80078da: 6078 str r0, [r7, #4]
+ 80078dc: 6039 str r1, [r7, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80078de: f3ef 8310 mrs r3, PRIMASK
+ 80078e2: 60fb str r3, [r7, #12]
+ return(result);
+ 80078e4: 68fb ldr r3, [r7, #12]
+ UTIL_SEQ_ENTER_CRITICAL_SECTION( );
+ 80078e6: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80078e8: b672 cpsid i
+}
+ 80078ea: bf00 nop
+
+ TaskSet |= TaskId_bm;
+ 80078ec: 4b0d ldr r3, [pc, #52] @ (8007924 <UTIL_SEQ_SetTask+0x50>)
+ 80078ee: 681a ldr r2, [r3, #0]
+ 80078f0: 687b ldr r3, [r7, #4]
+ 80078f2: 4313 orrs r3, r2
+ 80078f4: 4a0b ldr r2, [pc, #44] @ (8007924 <UTIL_SEQ_SetTask+0x50>)
+ 80078f6: 6013 str r3, [r2, #0]
+ TaskPrio[Task_Prio].priority |= TaskId_bm;
+ 80078f8: 4a0b ldr r2, [pc, #44] @ (8007928 <UTIL_SEQ_SetTask+0x54>)
+ 80078fa: 683b ldr r3, [r7, #0]
+ 80078fc: f852 2033 ldr.w r2, [r2, r3, lsl #3]
+ 8007900: 687b ldr r3, [r7, #4]
+ 8007902: 431a orrs r2, r3
+ 8007904: 4908 ldr r1, [pc, #32] @ (8007928 <UTIL_SEQ_SetTask+0x54>)
+ 8007906: 683b ldr r3, [r7, #0]
+ 8007908: f841 2033 str.w r2, [r1, r3, lsl #3]
+ 800790c: 697b ldr r3, [r7, #20]
+ 800790e: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007910: 693b ldr r3, [r7, #16]
+ 8007912: f383 8810 msr PRIMASK, r3
+}
+ 8007916: bf00 nop
+
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+
+ return;
+ 8007918: bf00 nop
+}
+ 800791a: 371c adds r7, #28
+ 800791c: 46bd mov sp, r7
+ 800791e: f85d 7b04 ldr.w r7, [sp], #4
+ 8007922: 4770 bx lr
+ 8007924: 20000308 .word 0x20000308
+ 8007928: 20000398 .word 0x20000398
+
+0800792c <UTIL_SEQ_PauseTask>:
+ UTIL_SEQ_EXIT_CRITICAL_SECTION();
+ return _status;
+}
+
+void UTIL_SEQ_PauseTask( UTIL_SEQ_bm_t TaskId_bm )
+{
+ 800792c: b480 push {r7}
+ 800792e: b087 sub sp, #28
+ 8007930: af00 add r7, sp, #0
+ 8007932: 6078 str r0, [r7, #4]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007934: f3ef 8310 mrs r3, PRIMASK
+ 8007938: 60fb str r3, [r7, #12]
+ return(result);
+ 800793a: 68fb ldr r3, [r7, #12]
+ UTIL_SEQ_ENTER_CRITICAL_SECTION( );
+ 800793c: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 800793e: b672 cpsid i
+}
+ 8007940: bf00 nop
+
+ TaskMask &= (~TaskId_bm);
+ 8007942: 687b ldr r3, [r7, #4]
+ 8007944: 43da mvns r2, r3
+ 8007946: 4b08 ldr r3, [pc, #32] @ (8007968 <UTIL_SEQ_PauseTask+0x3c>)
+ 8007948: 681b ldr r3, [r3, #0]
+ 800794a: 4013 ands r3, r2
+ 800794c: 4a06 ldr r2, [pc, #24] @ (8007968 <UTIL_SEQ_PauseTask+0x3c>)
+ 800794e: 6013 str r3, [r2, #0]
+ 8007950: 697b ldr r3, [r7, #20]
+ 8007952: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007954: 693b ldr r3, [r7, #16]
+ 8007956: f383 8810 msr PRIMASK, r3
+}
+ 800795a: bf00 nop
+
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+
+ return;
+ 800795c: bf00 nop
+}
+ 800795e: 371c adds r7, #28
+ 8007960: 46bd mov sp, r7
+ 8007962: f85d 7b04 ldr.w r7, [sp], #4
+ 8007966: 4770 bx lr
+ 8007968: 20000024 .word 0x20000024
+
+0800796c <UTIL_SEQ_ResumeTask>:
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+ return _status;
+}
+
+void UTIL_SEQ_ResumeTask( UTIL_SEQ_bm_t TaskId_bm )
+{
+ 800796c: b480 push {r7}
+ 800796e: b087 sub sp, #28
+ 8007970: af00 add r7, sp, #0
+ 8007972: 6078 str r0, [r7, #4]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007974: f3ef 8310 mrs r3, PRIMASK
+ 8007978: 60fb str r3, [r7, #12]
+ return(result);
+ 800797a: 68fb ldr r3, [r7, #12]
+ UTIL_SEQ_ENTER_CRITICAL_SECTION( );
+ 800797c: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 800797e: b672 cpsid i
+}
+ 8007980: bf00 nop
+
+ TaskMask |= TaskId_bm;
+ 8007982: 4b09 ldr r3, [pc, #36] @ (80079a8 <UTIL_SEQ_ResumeTask+0x3c>)
+ 8007984: 681a ldr r2, [r3, #0]
+ 8007986: 687b ldr r3, [r7, #4]
+ 8007988: 4313 orrs r3, r2
+ 800798a: 4a07 ldr r2, [pc, #28] @ (80079a8 <UTIL_SEQ_ResumeTask+0x3c>)
+ 800798c: 6013 str r3, [r2, #0]
+ 800798e: 697b ldr r3, [r7, #20]
+ 8007990: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007992: 693b ldr r3, [r7, #16]
+ 8007994: f383 8810 msr PRIMASK, r3
+}
+ 8007998: bf00 nop
+
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+
+ return;
+ 800799a: bf00 nop
+}
+ 800799c: 371c adds r7, #28
+ 800799e: 46bd mov sp, r7
+ 80079a0: f85d 7b04 ldr.w r7, [sp], #4
+ 80079a4: 4770 bx lr
+ 80079a6: bf00 nop
+ 80079a8: 20000024 .word 0x20000024
+
+080079ac <UTIL_SEQ_SetEvt>:
+
+void UTIL_SEQ_SetEvt( UTIL_SEQ_bm_t EvtId_bm )
+{
+ 80079ac: b480 push {r7}
+ 80079ae: b087 sub sp, #28
+ 80079b0: af00 add r7, sp, #0
+ 80079b2: 6078 str r0, [r7, #4]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 80079b4: f3ef 8310 mrs r3, PRIMASK
+ 80079b8: 60fb str r3, [r7, #12]
+ return(result);
+ 80079ba: 68fb ldr r3, [r7, #12]
+ UTIL_SEQ_ENTER_CRITICAL_SECTION( );
+ 80079bc: 617b str r3, [r7, #20]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 80079be: b672 cpsid i
+}
+ 80079c0: bf00 nop
+
+ EvtSet |= EvtId_bm;
+ 80079c2: 4b09 ldr r3, [pc, #36] @ (80079e8 <UTIL_SEQ_SetEvt+0x3c>)
+ 80079c4: 681a ldr r2, [r3, #0]
+ 80079c6: 687b ldr r3, [r7, #4]
+ 80079c8: 4313 orrs r3, r2
+ 80079ca: 4a07 ldr r2, [pc, #28] @ (80079e8 <UTIL_SEQ_SetEvt+0x3c>)
+ 80079cc: 6013 str r3, [r2, #0]
+ 80079ce: 697b ldr r3, [r7, #20]
+ 80079d0: 613b str r3, [r7, #16]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 80079d2: 693b ldr r3, [r7, #16]
+ 80079d4: f383 8810 msr PRIMASK, r3
+}
+ 80079d8: bf00 nop
+
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+
+ return;
+ 80079da: bf00 nop
+}
+ 80079dc: 371c adds r7, #28
+ 80079de: 46bd mov sp, r7
+ 80079e0: f85d 7b04 ldr.w r7, [sp], #4
+ 80079e4: 4770 bx lr
+ 80079e6: bf00 nop
+ 80079e8: 2000030c .word 0x2000030c
+
+080079ec <UTIL_SEQ_WaitEvt>:
+
+ return;
+}
+
+void UTIL_SEQ_WaitEvt(UTIL_SEQ_bm_t EvtId_bm)
+{
+ 80079ec: b580 push {r7, lr}
+ 80079ee: b088 sub sp, #32
+ 80079f0: af00 add r7, sp, #0
+ 80079f2: 6078 str r0, [r7, #4]
+ UTIL_SEQ_bm_t wait_task_idx;
+ /*
+ * store in local the current_task_id_bm as the global variable CurrentTaskIdx
+ * may be overwritten in case there are nested call of UTIL_SEQ_Run()
+ */
+ current_task_idx = CurrentTaskIdx;
+ 80079f4: 4b1f ldr r3, [pc, #124] @ (8007a74 <UTIL_SEQ_WaitEvt+0x88>)
+ 80079f6: 681b ldr r3, [r3, #0]
+ 80079f8: 61bb str r3, [r7, #24]
+ if(UTIL_SEQ_NOTASKRUNNING == CurrentTaskIdx)
+ 80079fa: 4b1e ldr r3, [pc, #120] @ (8007a74 <UTIL_SEQ_WaitEvt+0x88>)
+ 80079fc: 681b ldr r3, [r3, #0]
+ 80079fe: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff
+ 8007a02: d102 bne.n 8007a0a <UTIL_SEQ_WaitEvt+0x1e>
+ {
+ wait_task_idx = 0u;
+ 8007a04: 2300 movs r3, #0
+ 8007a06: 61fb str r3, [r7, #28]
+ 8007a08: e005 b.n 8007a16 <UTIL_SEQ_WaitEvt+0x2a>
+ }
+ else
+ {
+ wait_task_idx = (uint32_t)1u << CurrentTaskIdx;
+ 8007a0a: 4b1a ldr r3, [pc, #104] @ (8007a74 <UTIL_SEQ_WaitEvt+0x88>)
+ 8007a0c: 681b ldr r3, [r3, #0]
+ 8007a0e: 2201 movs r2, #1
+ 8007a10: fa02 f303 lsl.w r3, r2, r3
+ 8007a14: 61fb str r3, [r7, #28]
+ }
+
+ /* backup the event id that was currently waited */
+ event_waited_id_backup = EvtWaited;
+ 8007a16: 4b18 ldr r3, [pc, #96] @ (8007a78 <UTIL_SEQ_WaitEvt+0x8c>)
+ 8007a18: 681b ldr r3, [r3, #0]
+ 8007a1a: 617b str r3, [r7, #20]
+ EvtWaited = EvtId_bm;
+ 8007a1c: 4a16 ldr r2, [pc, #88] @ (8007a78 <UTIL_SEQ_WaitEvt+0x8c>)
+ 8007a1e: 687b ldr r3, [r7, #4]
+ 8007a20: 6013 str r3, [r2, #0]
+ * The system is waiting only for the last waited event.
+ * When it will go out, it will wait again from the previous one.
+ * It case it occurs while waiting for the second one, the while loop will exit immediately
+ */
+
+ while ((EvtSet & EvtId_bm) == 0U)
+ 8007a22: e003 b.n 8007a2c <UTIL_SEQ_WaitEvt+0x40>
+ {
+ UTIL_SEQ_EvtIdle(wait_task_idx, EvtId_bm);
+ 8007a24: 6879 ldr r1, [r7, #4]
+ 8007a26: 69f8 ldr r0, [r7, #28]
+ 8007a28: f000 f82a bl 8007a80 <UTIL_SEQ_EvtIdle>
+ while ((EvtSet & EvtId_bm) == 0U)
+ 8007a2c: 4b13 ldr r3, [pc, #76] @ (8007a7c <UTIL_SEQ_WaitEvt+0x90>)
+ 8007a2e: 681a ldr r2, [r3, #0]
+ 8007a30: 687b ldr r3, [r7, #4]
+ 8007a32: 4013 ands r3, r2
+ 8007a34: 2b00 cmp r3, #0
+ 8007a36: d0f5 beq.n 8007a24 <UTIL_SEQ_WaitEvt+0x38>
+ /*
+ * Restore the CurrentTaskIdx that may have been modified by call of UTIL_SEQ_Run()
+ * from UTIL_SEQ_EvtIdle(). This is required so that a second call of UTIL_SEQ_WaitEvt()
+ * in the same process pass the correct current_task_id_bm in the call of UTIL_SEQ_EvtIdle()
+ */
+ CurrentTaskIdx = current_task_idx;
+ 8007a38: 4a0e ldr r2, [pc, #56] @ (8007a74 <UTIL_SEQ_WaitEvt+0x88>)
+ 8007a3a: 69bb ldr r3, [r7, #24]
+ 8007a3c: 6013 str r3, [r2, #0]
+ __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory");
+ 8007a3e: f3ef 8310 mrs r3, PRIMASK
+ 8007a42: 60bb str r3, [r7, #8]
+ return(result);
+ 8007a44: 68bb ldr r3, [r7, #8]
+
+ UTIL_SEQ_ENTER_CRITICAL_SECTION( );
+ 8007a46: 613b str r3, [r7, #16]
+ __ASM volatile ("cpsid i" : : : "memory");
+ 8007a48: b672 cpsid i
+}
+ 8007a4a: bf00 nop
+
+ EvtSet &= (~EvtId_bm);
+ 8007a4c: 687b ldr r3, [r7, #4]
+ 8007a4e: 43da mvns r2, r3
+ 8007a50: 4b0a ldr r3, [pc, #40] @ (8007a7c <UTIL_SEQ_WaitEvt+0x90>)
+ 8007a52: 681b ldr r3, [r3, #0]
+ 8007a54: 4013 ands r3, r2
+ 8007a56: 4a09 ldr r2, [pc, #36] @ (8007a7c <UTIL_SEQ_WaitEvt+0x90>)
+ 8007a58: 6013 str r3, [r2, #0]
+ 8007a5a: 693b ldr r3, [r7, #16]
+ 8007a5c: 60fb str r3, [r7, #12]
+ __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory");
+ 8007a5e: 68fb ldr r3, [r7, #12]
+ 8007a60: f383 8810 msr PRIMASK, r3
+}
+ 8007a64: bf00 nop
+
+ UTIL_SEQ_EXIT_CRITICAL_SECTION( );
+
+ EvtWaited = event_waited_id_backup;
+ 8007a66: 4a04 ldr r2, [pc, #16] @ (8007a78 <UTIL_SEQ_WaitEvt+0x8c>)
+ 8007a68: 697b ldr r3, [r7, #20]
+ 8007a6a: 6013 str r3, [r2, #0]
+ return;
+ 8007a6c: bf00 nop
+}
+ 8007a6e: 3720 adds r7, #32
+ 8007a70: 46bd mov sp, r7
+ 8007a72: bd80 pop {r7, pc}
+ 8007a74: 20000314 .word 0x20000314
+ 8007a78: 20000310 .word 0x20000310
+ 8007a7c: 2000030c .word 0x2000030c
+
+08007a80 <UTIL_SEQ_EvtIdle>:
+ UTIL_SEQ_bm_t local_evtwaited = EvtWaited;
+ return (EvtSet & local_evtwaited);
+}
+
+__WEAK void UTIL_SEQ_EvtIdle( UTIL_SEQ_bm_t TaskId_bm, UTIL_SEQ_bm_t EvtWaited_bm )
+{
+ 8007a80: b580 push {r7, lr}
+ 8007a82: b082 sub sp, #8
+ 8007a84: af00 add r7, sp, #0
+ 8007a86: 6078 str r0, [r7, #4]
+ 8007a88: 6039 str r1, [r7, #0]
+ (void)EvtWaited_bm;
+ UTIL_SEQ_Run(~TaskId_bm);
+ 8007a8a: 687b ldr r3, [r7, #4]
+ 8007a8c: 43db mvns r3, r3
+ 8007a8e: 4618 mov r0, r3
+ 8007a90: f7ff fd7c bl 800758c <UTIL_SEQ_Run>
+ return;
+ 8007a94: bf00 nop
+}
+ 8007a96: 3708 adds r7, #8
+ 8007a98: 46bd mov sp, r7
+ 8007a9a: bd80 pop {r7, pc}
+
+08007a9c <UTIL_SEQ_PreIdle>:
+{
+ return;
+}
+
+__WEAK void UTIL_SEQ_PreIdle( void )
+{
+ 8007a9c: b480 push {r7}
+ 8007a9e: af00 add r7, sp, #0
+ /*
+ * Unless specified by the application, there is nothing to be done
+ */
+ return;
+ 8007aa0: bf00 nop
+}
+ 8007aa2: 46bd mov sp, r7
+ 8007aa4: f85d 7b04 ldr.w r7, [sp], #4
+ 8007aa8: 4770 bx lr
+
+08007aaa <UTIL_SEQ_PostIdle>:
+
+__WEAK void UTIL_SEQ_PostIdle( void )
+{
+ 8007aaa: b480 push {r7}
+ 8007aac: af00 add r7, sp, #0
+ /*
+ * Unless specified by the application, there is nothing to be done
+ */
+ return;
+ 8007aae: bf00 nop
+}
+ 8007ab0: 46bd mov sp, r7
+ 8007ab2: f85d 7b04 ldr.w r7, [sp], #4
+ 8007ab6: 4770 bx lr
+
+08007ab8 <UTIL_SEQ_PreTask>:
+
+__WEAK void UTIL_SEQ_PreTask( uint32_t TaskId )
+{
+ 8007ab8: b480 push {r7}
+ 8007aba: b083 sub sp, #12
+ 8007abc: af00 add r7, sp, #0
+ 8007abe: 6078 str r0, [r7, #4]
+ (void)TaskId;
+ return;
+ 8007ac0: bf00 nop
+}
+ 8007ac2: 370c adds r7, #12
+ 8007ac4: 46bd mov sp, r7
+ 8007ac6: f85d 7b04 ldr.w r7, [sp], #4
+ 8007aca: 4770 bx lr
+
+08007acc <UTIL_SEQ_PostTask>:
+
+__WEAK void UTIL_SEQ_PostTask( uint32_t TaskId )
+{
+ 8007acc: b480 push {r7}
+ 8007ace: b083 sub sp, #12
+ 8007ad0: af00 add r7, sp, #0
+ 8007ad2: 6078 str r0, [r7, #4]
+ (void)TaskId;
+ return;
+ 8007ad4: bf00 nop
+}
+ 8007ad6: 370c adds r7, #12
+ 8007ad8: 46bd mov sp, r7
+ 8007ada: f85d 7b04 ldr.w r7, [sp], #4
+ 8007ade: 4770 bx lr
+
+08007ae0 <UTIL_SEQ_CatchWarning>:
+
+__WEAK void UTIL_SEQ_CatchWarning(UTIL_SEQ_WARNING WarningId)
+{
+ 8007ae0: b480 push {r7}
+ 8007ae2: b083 sub sp, #12
+ 8007ae4: af00 add r7, sp, #0
+ 8007ae6: 4603 mov r3, r0
+ 8007ae8: 71fb strb r3, [r7, #7]
+ (void)WarningId;
+ return;
+ 8007aea: bf00 nop
+}
+ 8007aec: 370c adds r7, #12
+ 8007aee: 46bd mov sp, r7
+ 8007af0: f85d 7b04 ldr.w r7, [sp], #4
+ 8007af4: 4770 bx lr
+
+08007af6 <SEQ_BitPosition>:
+ * @brief return the position of the first bit set to 1
+ * @param Value 32 bit value
+ * @retval bit position
+ */
+uint8_t SEQ_BitPosition(uint32_t Value)
+{
+ 8007af6: b480 push {r7}
+ 8007af8: b085 sub sp, #20
+ 8007afa: af00 add r7, sp, #0
+ 8007afc: 6078 str r0, [r7, #4]
+ 8007afe: 687b ldr r3, [r7, #4]
+ 8007b00: 60fb str r3, [r7, #12]
+ if (value == 0U)
+ 8007b02: 68fb ldr r3, [r7, #12]
+ 8007b04: 2b00 cmp r3, #0
+ 8007b06: d101 bne.n 8007b0c <SEQ_BitPosition+0x16>
+ return 32U;
+ 8007b08: 2320 movs r3, #32
+ 8007b0a: e003 b.n 8007b14 <SEQ_BitPosition+0x1e>
+ return __builtin_clz(value);
+ 8007b0c: 68fb ldr r3, [r7, #12]
+ 8007b0e: fab3 f383 clz r3, r3
+ 8007b12: b2db uxtb r3, r3
+ return (uint8_t)(31 -__CLZ( Value ));
+ 8007b14: f1c3 031f rsb r3, r3, #31
+ 8007b18: b2db uxtb r3, r3
+}
+ 8007b1a: 4618 mov r0, r3
+ 8007b1c: 3714 adds r7, #20
+ 8007b1e: 46bd mov sp, r7
+ 8007b20: f85d 7b04 ldr.w r7, [sp], #4
+ 8007b24: 4770 bx lr
+
+08007b26 <memset>:
+ 8007b26: 4402 add r2, r0
+ 8007b28: 4603 mov r3, r0
+ 8007b2a: 4293 cmp r3, r2
+ 8007b2c: d100 bne.n 8007b30 <memset+0xa>
+ 8007b2e: 4770 bx lr
+ 8007b30: f803 1b01 strb.w r1, [r3], #1
+ 8007b34: e7f9 b.n 8007b2a <memset+0x4>
+ ...
+
+08007b38 <__libc_init_array>:
+ 8007b38: b570 push {r4, r5, r6, lr}
+ 8007b3a: 4d0d ldr r5, [pc, #52] @ (8007b70 <__libc_init_array+0x38>)
+ 8007b3c: 4c0d ldr r4, [pc, #52] @ (8007b74 <__libc_init_array+0x3c>)
+ 8007b3e: 1b64 subs r4, r4, r5
+ 8007b40: 10a4 asrs r4, r4, #2
+ 8007b42: 2600 movs r6, #0
+ 8007b44: 42a6 cmp r6, r4
+ 8007b46: d109 bne.n 8007b5c <__libc_init_array+0x24>
+ 8007b48: 4d0b ldr r5, [pc, #44] @ (8007b78 <__libc_init_array+0x40>)
+ 8007b4a: 4c0c ldr r4, [pc, #48] @ (8007b7c <__libc_init_array+0x44>)
+ 8007b4c: f000 f826 bl 8007b9c <_init>
+ 8007b50: 1b64 subs r4, r4, r5
+ 8007b52: 10a4 asrs r4, r4, #2
+ 8007b54: 2600 movs r6, #0
+ 8007b56: 42a6 cmp r6, r4
+ 8007b58: d105 bne.n 8007b66 <__libc_init_array+0x2e>
+ 8007b5a: bd70 pop {r4, r5, r6, pc}
+ 8007b5c: f855 3b04 ldr.w r3, [r5], #4
+ 8007b60: 4798 blx r3
+ 8007b62: 3601 adds r6, #1
+ 8007b64: e7ee b.n 8007b44 <__libc_init_array+0xc>
+ 8007b66: f855 3b04 ldr.w r3, [r5], #4
+ 8007b6a: 4798 blx r3
+ 8007b6c: 3601 adds r6, #1
+ 8007b6e: e7f2 b.n 8007b56 <__libc_init_array+0x1e>
+ 8007b70: 08007e28 .word 0x08007e28
+ 8007b74: 08007e28 .word 0x08007e28
+ 8007b78: 08007e28 .word 0x08007e28
+ 8007b7c: 08007e2c .word 0x08007e2c
+
+08007b80 <memcpy>:
+ 8007b80: 440a add r2, r1
+ 8007b82: 4291 cmp r1, r2
+ 8007b84: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff
+ 8007b88: d100 bne.n 8007b8c <memcpy+0xc>
+ 8007b8a: 4770 bx lr
+ 8007b8c: b510 push {r4, lr}
+ 8007b8e: f811 4b01 ldrb.w r4, [r1], #1
+ 8007b92: f803 4f01 strb.w r4, [r3, #1]!
+ 8007b96: 4291 cmp r1, r2
+ 8007b98: d1f9 bne.n 8007b8e <memcpy+0xe>
+ 8007b9a: bd10 pop {r4, pc}
+
+08007b9c <_init>:
+ 8007b9c: b5f8 push {r3, r4, r5, r6, r7, lr}
+ 8007b9e: bf00 nop
+ 8007ba0: bcf8 pop {r3, r4, r5, r6, r7}
+ 8007ba2: bc08 pop {r3}
+ 8007ba4: 469e mov lr, r3
+ 8007ba6: 4770 bx lr
+
+08007ba8 <_fini>:
+ 8007ba8: b5f8 push {r3, r4, r5, r6, r7, lr}
+ 8007baa: bf00 nop
+ 8007bac: bcf8 pop {r3, r4, r5, r6, r7}
+ 8007bae: bc08 pop {r3}
+ 8007bb0: 469e mov lr, r3
+ 8007bb2: 4770 bx lr