STM32F429I-DISC1_LEDFaceMask-Rough.elf: file format elf32-littlearm Sections: Idx Name Size VMA LMA File off Algn 0 .isr_vector 000001ac 08000000 08000000 00010000 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 1 .text 000042d8 080001ac 080001ac 000101ac 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .rodata 00000010 08004484 08004484 00014484 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .ARM.extab 00000000 08004494 08004494 00020074 2**0 CONTENTS 4 .ARM 00000008 08004494 08004494 00014494 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .preinit_array 00000000 0800449c 0800449c 00020074 2**0 CONTENTS, ALLOC, LOAD, DATA 6 .init_array 00000004 0800449c 0800449c 0001449c 2**2 CONTENTS, ALLOC, LOAD, DATA 7 .fini_array 00000004 080044a0 080044a0 000144a0 2**2 CONTENTS, ALLOC, LOAD, DATA 8 .data 00000074 20000000 080044a4 00020000 2**2 CONTENTS, ALLOC, LOAD, DATA 9 .bss 00000430 20000074 08004518 00020074 2**2 ALLOC 10 ._user_heap_stack 00000604 200004a4 08004518 000204a4 2**0 ALLOC 11 .ARM.attributes 00000030 00000000 00000000 00020074 2**0 CONTENTS, READONLY 12 .debug_info 0000d979 00000000 00000000 000200a4 2**0 CONTENTS, READONLY, DEBUGGING 13 .debug_abbrev 00001d08 00000000 00000000 0002da1d 2**0 CONTENTS, READONLY, DEBUGGING 14 .debug_aranges 00000d20 00000000 00000000 0002f728 2**3 CONTENTS, READONLY, DEBUGGING 15 .debug_ranges 00000c38 00000000 00000000 00030448 2**3 CONTENTS, READONLY, DEBUGGING 16 .debug_macro 0002448d 00000000 00000000 00031080 2**0 CONTENTS, READONLY, DEBUGGING 17 .debug_line 0000a537 00000000 00000000 0005550d 2**0 CONTENTS, READONLY, DEBUGGING 18 .debug_str 000de361 00000000 00000000 0005fa44 2**0 CONTENTS, READONLY, DEBUGGING 19 .comment 0000007b 00000000 00000000 0013dda5 2**0 CONTENTS, READONLY 20 .debug_frame 0000389c 00000000 00000000 0013de20 2**2 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 080001ac <__do_global_dtors_aux>: 80001ac: b510 push {r4, lr} 80001ae: 4c05 ldr r4, [pc, #20] ; (80001c4 <__do_global_dtors_aux+0x18>) 80001b0: 7823 ldrb r3, [r4, #0] 80001b2: b933 cbnz r3, 80001c2 <__do_global_dtors_aux+0x16> 80001b4: 4b04 ldr r3, [pc, #16] ; (80001c8 <__do_global_dtors_aux+0x1c>) 80001b6: b113 cbz r3, 80001be <__do_global_dtors_aux+0x12> 80001b8: 4804 ldr r0, [pc, #16] ; (80001cc <__do_global_dtors_aux+0x20>) 80001ba: f3af 8000 nop.w 80001be: 2301 movs r3, #1 80001c0: 7023 strb r3, [r4, #0] 80001c2: bd10 pop {r4, pc} 80001c4: 20000074 .word 0x20000074 80001c8: 00000000 .word 0x00000000 80001cc: 0800446c .word 0x0800446c 080001d0 : 80001d0: b508 push {r3, lr} 80001d2: 4b03 ldr r3, [pc, #12] ; (80001e0 ) 80001d4: b11b cbz r3, 80001de 80001d6: 4903 ldr r1, [pc, #12] ; (80001e4 ) 80001d8: 4803 ldr r0, [pc, #12] ; (80001e8 ) 80001da: f3af 8000 nop.w 80001de: bd08 pop {r3, pc} 80001e0: 00000000 .word 0x00000000 80001e4: 20000078 .word 0x20000078 80001e8: 0800446c .word 0x0800446c 080001ec <__aeabi_uldivmod>: 80001ec: b953 cbnz r3, 8000204 <__aeabi_uldivmod+0x18> 80001ee: b94a cbnz r2, 8000204 <__aeabi_uldivmod+0x18> 80001f0: 2900 cmp r1, #0 80001f2: bf08 it eq 80001f4: 2800 cmpeq r0, #0 80001f6: bf1c itt ne 80001f8: f04f 31ff movne.w r1, #4294967295 80001fc: f04f 30ff movne.w r0, #4294967295 8000200: f000 b972 b.w 80004e8 <__aeabi_idiv0> 8000204: f1ad 0c08 sub.w ip, sp, #8 8000208: e96d ce04 strd ip, lr, [sp, #-16]! 800020c: f000 f806 bl 800021c <__udivmoddi4> 8000210: f8dd e004 ldr.w lr, [sp, #4] 8000214: e9dd 2302 ldrd r2, r3, [sp, #8] 8000218: b004 add sp, #16 800021a: 4770 bx lr 0800021c <__udivmoddi4>: 800021c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} 8000220: 9e08 ldr r6, [sp, #32] 8000222: 4604 mov r4, r0 8000224: 4688 mov r8, r1 8000226: 2b00 cmp r3, #0 8000228: d14b bne.n 80002c2 <__udivmoddi4+0xa6> 800022a: 428a cmp r2, r1 800022c: 4615 mov r5, r2 800022e: d967 bls.n 8000300 <__udivmoddi4+0xe4> 8000230: fab2 f282 clz r2, r2 8000234: b14a cbz r2, 800024a <__udivmoddi4+0x2e> 8000236: f1c2 0720 rsb r7, r2, #32 800023a: fa01 f302 lsl.w r3, r1, r2 800023e: fa20 f707 lsr.w r7, r0, r7 8000242: 4095 lsls r5, r2 8000244: ea47 0803 orr.w r8, r7, r3 8000248: 4094 lsls r4, r2 800024a: ea4f 4e15 mov.w lr, r5, lsr #16 800024e: 0c23 lsrs r3, r4, #16 8000250: fbb8 f7fe udiv r7, r8, lr 8000254: fa1f fc85 uxth.w ip, r5 8000258: fb0e 8817 mls r8, lr, r7, r8 800025c: ea43 4308 orr.w r3, r3, r8, lsl #16 8000260: fb07 f10c mul.w r1, r7, ip 8000264: 4299 cmp r1, r3 8000266: d909 bls.n 800027c <__udivmoddi4+0x60> 8000268: 18eb adds r3, r5, r3 800026a: f107 30ff add.w r0, r7, #4294967295 800026e: f080 811b bcs.w 80004a8 <__udivmoddi4+0x28c> 8000272: 4299 cmp r1, r3 8000274: f240 8118 bls.w 80004a8 <__udivmoddi4+0x28c> 8000278: 3f02 subs r7, #2 800027a: 442b add r3, r5 800027c: 1a5b subs r3, r3, r1 800027e: b2a4 uxth r4, r4 8000280: fbb3 f0fe udiv r0, r3, lr 8000284: fb0e 3310 mls r3, lr, r0, r3 8000288: ea44 4403 orr.w r4, r4, r3, lsl #16 800028c: fb00 fc0c mul.w ip, r0, ip 8000290: 45a4 cmp ip, r4 8000292: d909 bls.n 80002a8 <__udivmoddi4+0x8c> 8000294: 192c adds r4, r5, r4 8000296: f100 33ff add.w r3, r0, #4294967295 800029a: f080 8107 bcs.w 80004ac <__udivmoddi4+0x290> 800029e: 45a4 cmp ip, r4 80002a0: f240 8104 bls.w 80004ac <__udivmoddi4+0x290> 80002a4: 3802 subs r0, #2 80002a6: 442c add r4, r5 80002a8: ea40 4007 orr.w r0, r0, r7, lsl #16 80002ac: eba4 040c sub.w r4, r4, ip 80002b0: 2700 movs r7, #0 80002b2: b11e cbz r6, 80002bc <__udivmoddi4+0xa0> 80002b4: 40d4 lsrs r4, r2 80002b6: 2300 movs r3, #0 80002b8: e9c6 4300 strd r4, r3, [r6] 80002bc: 4639 mov r1, r7 80002be: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} 80002c2: 428b cmp r3, r1 80002c4: d909 bls.n 80002da <__udivmoddi4+0xbe> 80002c6: 2e00 cmp r6, #0 80002c8: f000 80eb beq.w 80004a2 <__udivmoddi4+0x286> 80002cc: 2700 movs r7, #0 80002ce: e9c6 0100 strd r0, r1, [r6] 80002d2: 4638 mov r0, r7 80002d4: 4639 mov r1, r7 80002d6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} 80002da: fab3 f783 clz r7, r3 80002de: 2f00 cmp r7, #0 80002e0: d147 bne.n 8000372 <__udivmoddi4+0x156> 80002e2: 428b cmp r3, r1 80002e4: d302 bcc.n 80002ec <__udivmoddi4+0xd0> 80002e6: 4282 cmp r2, r0 80002e8: f200 80fa bhi.w 80004e0 <__udivmoddi4+0x2c4> 80002ec: 1a84 subs r4, r0, r2 80002ee: eb61 0303 sbc.w r3, r1, r3 80002f2: 2001 movs r0, #1 80002f4: 4698 mov r8, r3 80002f6: 2e00 cmp r6, #0 80002f8: d0e0 beq.n 80002bc <__udivmoddi4+0xa0> 80002fa: e9c6 4800 strd r4, r8, [r6] 80002fe: e7dd b.n 80002bc <__udivmoddi4+0xa0> 8000300: b902 cbnz r2, 8000304 <__udivmoddi4+0xe8> 8000302: deff udf #255 ; 0xff 8000304: fab2 f282 clz r2, r2 8000308: 2a00 cmp r2, #0 800030a: f040 808f bne.w 800042c <__udivmoddi4+0x210> 800030e: 1b49 subs r1, r1, r5 8000310: ea4f 4e15 mov.w lr, r5, lsr #16 8000314: fa1f f885 uxth.w r8, r5 8000318: 2701 movs r7, #1 800031a: fbb1 fcfe udiv ip, r1, lr 800031e: 0c23 lsrs r3, r4, #16 8000320: fb0e 111c mls r1, lr, ip, r1 8000324: ea43 4301 orr.w r3, r3, r1, lsl #16 8000328: fb08 f10c mul.w r1, r8, ip 800032c: 4299 cmp r1, r3 800032e: d907 bls.n 8000340 <__udivmoddi4+0x124> 8000330: 18eb adds r3, r5, r3 8000332: f10c 30ff add.w r0, ip, #4294967295 8000336: d202 bcs.n 800033e <__udivmoddi4+0x122> 8000338: 4299 cmp r1, r3 800033a: f200 80cd bhi.w 80004d8 <__udivmoddi4+0x2bc> 800033e: 4684 mov ip, r0 8000340: 1a59 subs r1, r3, r1 8000342: b2a3 uxth r3, r4 8000344: fbb1 f0fe udiv r0, r1, lr 8000348: fb0e 1410 mls r4, lr, r0, r1 800034c: ea43 4404 orr.w r4, r3, r4, lsl #16 8000350: fb08 f800 mul.w r8, r8, r0 8000354: 45a0 cmp r8, r4 8000356: d907 bls.n 8000368 <__udivmoddi4+0x14c> 8000358: 192c adds r4, r5, r4 800035a: f100 33ff add.w r3, r0, #4294967295 800035e: d202 bcs.n 8000366 <__udivmoddi4+0x14a> 8000360: 45a0 cmp r8, r4 8000362: f200 80b6 bhi.w 80004d2 <__udivmoddi4+0x2b6> 8000366: 4618 mov r0, r3 8000368: eba4 0408 sub.w r4, r4, r8 800036c: ea40 400c orr.w r0, r0, ip, lsl #16 8000370: e79f b.n 80002b2 <__udivmoddi4+0x96> 8000372: f1c7 0c20 rsb ip, r7, #32 8000376: 40bb lsls r3, r7 8000378: fa22 fe0c lsr.w lr, r2, ip 800037c: ea4e 0e03 orr.w lr, lr, r3 8000380: fa01 f407 lsl.w r4, r1, r7 8000384: fa20 f50c lsr.w r5, r0, ip 8000388: fa21 f30c lsr.w r3, r1, ip 800038c: ea4f 481e mov.w r8, lr, lsr #16 8000390: 4325 orrs r5, r4 8000392: fbb3 f9f8 udiv r9, r3, r8 8000396: 0c2c lsrs r4, r5, #16 8000398: fb08 3319 mls r3, r8, r9, r3 800039c: fa1f fa8e uxth.w sl, lr 80003a0: ea44 4303 orr.w r3, r4, r3, lsl #16 80003a4: fb09 f40a mul.w r4, r9, sl 80003a8: 429c cmp r4, r3 80003aa: fa02 f207 lsl.w r2, r2, r7 80003ae: fa00 f107 lsl.w r1, r0, r7 80003b2: d90b bls.n 80003cc <__udivmoddi4+0x1b0> 80003b4: eb1e 0303 adds.w r3, lr, r3 80003b8: f109 30ff add.w r0, r9, #4294967295 80003bc: f080 8087 bcs.w 80004ce <__udivmoddi4+0x2b2> 80003c0: 429c cmp r4, r3 80003c2: f240 8084 bls.w 80004ce <__udivmoddi4+0x2b2> 80003c6: f1a9 0902 sub.w r9, r9, #2 80003ca: 4473 add r3, lr 80003cc: 1b1b subs r3, r3, r4 80003ce: b2ad uxth r5, r5 80003d0: fbb3 f0f8 udiv r0, r3, r8 80003d4: fb08 3310 mls r3, r8, r0, r3 80003d8: ea45 4403 orr.w r4, r5, r3, lsl #16 80003dc: fb00 fa0a mul.w sl, r0, sl 80003e0: 45a2 cmp sl, r4 80003e2: d908 bls.n 80003f6 <__udivmoddi4+0x1da> 80003e4: eb1e 0404 adds.w r4, lr, r4 80003e8: f100 33ff add.w r3, r0, #4294967295 80003ec: d26b bcs.n 80004c6 <__udivmoddi4+0x2aa> 80003ee: 45a2 cmp sl, r4 80003f0: d969 bls.n 80004c6 <__udivmoddi4+0x2aa> 80003f2: 3802 subs r0, #2 80003f4: 4474 add r4, lr 80003f6: ea40 4009 orr.w r0, r0, r9, lsl #16 80003fa: fba0 8902 umull r8, r9, r0, r2 80003fe: eba4 040a sub.w r4, r4, sl 8000402: 454c cmp r4, r9 8000404: 46c2 mov sl, r8 8000406: 464b mov r3, r9 8000408: d354 bcc.n 80004b4 <__udivmoddi4+0x298> 800040a: d051 beq.n 80004b0 <__udivmoddi4+0x294> 800040c: 2e00 cmp r6, #0 800040e: d069 beq.n 80004e4 <__udivmoddi4+0x2c8> 8000410: ebb1 050a subs.w r5, r1, sl 8000414: eb64 0403 sbc.w r4, r4, r3 8000418: fa04 fc0c lsl.w ip, r4, ip 800041c: 40fd lsrs r5, r7 800041e: 40fc lsrs r4, r7 8000420: ea4c 0505 orr.w r5, ip, r5 8000424: e9c6 5400 strd r5, r4, [r6] 8000428: 2700 movs r7, #0 800042a: e747 b.n 80002bc <__udivmoddi4+0xa0> 800042c: f1c2 0320 rsb r3, r2, #32 8000430: fa20 f703 lsr.w r7, r0, r3 8000434: 4095 lsls r5, r2 8000436: fa01 f002 lsl.w r0, r1, r2 800043a: fa21 f303 lsr.w r3, r1, r3 800043e: ea4f 4e15 mov.w lr, r5, lsr #16 8000442: 4338 orrs r0, r7 8000444: 0c01 lsrs r1, r0, #16 8000446: fbb3 f7fe udiv r7, r3, lr 800044a: fa1f f885 uxth.w r8, r5 800044e: fb0e 3317 mls r3, lr, r7, r3 8000452: ea41 4103 orr.w r1, r1, r3, lsl #16 8000456: fb07 f308 mul.w r3, r7, r8 800045a: 428b cmp r3, r1 800045c: fa04 f402 lsl.w r4, r4, r2 8000460: d907 bls.n 8000472 <__udivmoddi4+0x256> 8000462: 1869 adds r1, r5, r1 8000464: f107 3cff add.w ip, r7, #4294967295 8000468: d22f bcs.n 80004ca <__udivmoddi4+0x2ae> 800046a: 428b cmp r3, r1 800046c: d92d bls.n 80004ca <__udivmoddi4+0x2ae> 800046e: 3f02 subs r7, #2 8000470: 4429 add r1, r5 8000472: 1acb subs r3, r1, r3 8000474: b281 uxth r1, r0 8000476: fbb3 f0fe udiv r0, r3, lr 800047a: fb0e 3310 mls r3, lr, r0, r3 800047e: ea41 4103 orr.w r1, r1, r3, lsl #16 8000482: fb00 f308 mul.w r3, r0, r8 8000486: 428b cmp r3, r1 8000488: d907 bls.n 800049a <__udivmoddi4+0x27e> 800048a: 1869 adds r1, r5, r1 800048c: f100 3cff add.w ip, r0, #4294967295 8000490: d217 bcs.n 80004c2 <__udivmoddi4+0x2a6> 8000492: 428b cmp r3, r1 8000494: d915 bls.n 80004c2 <__udivmoddi4+0x2a6> 8000496: 3802 subs r0, #2 8000498: 4429 add r1, r5 800049a: 1ac9 subs r1, r1, r3 800049c: ea40 4707 orr.w r7, r0, r7, lsl #16 80004a0: e73b b.n 800031a <__udivmoddi4+0xfe> 80004a2: 4637 mov r7, r6 80004a4: 4630 mov r0, r6 80004a6: e709 b.n 80002bc <__udivmoddi4+0xa0> 80004a8: 4607 mov r7, r0 80004aa: e6e7 b.n 800027c <__udivmoddi4+0x60> 80004ac: 4618 mov r0, r3 80004ae: e6fb b.n 80002a8 <__udivmoddi4+0x8c> 80004b0: 4541 cmp r1, r8 80004b2: d2ab bcs.n 800040c <__udivmoddi4+0x1f0> 80004b4: ebb8 0a02 subs.w sl, r8, r2 80004b8: eb69 020e sbc.w r2, r9, lr 80004bc: 3801 subs r0, #1 80004be: 4613 mov r3, r2 80004c0: e7a4 b.n 800040c <__udivmoddi4+0x1f0> 80004c2: 4660 mov r0, ip 80004c4: e7e9 b.n 800049a <__udivmoddi4+0x27e> 80004c6: 4618 mov r0, r3 80004c8: e795 b.n 80003f6 <__udivmoddi4+0x1da> 80004ca: 4667 mov r7, ip 80004cc: e7d1 b.n 8000472 <__udivmoddi4+0x256> 80004ce: 4681 mov r9, r0 80004d0: e77c b.n 80003cc <__udivmoddi4+0x1b0> 80004d2: 3802 subs r0, #2 80004d4: 442c add r4, r5 80004d6: e747 b.n 8000368 <__udivmoddi4+0x14c> 80004d8: f1ac 0c02 sub.w ip, ip, #2 80004dc: 442b add r3, r5 80004de: e72f b.n 8000340 <__udivmoddi4+0x124> 80004e0: 4638 mov r0, r7 80004e2: e708 b.n 80002f6 <__udivmoddi4+0xda> 80004e4: 4637 mov r7, r6 80004e6: e6e9 b.n 80002bc <__udivmoddi4+0xa0> 080004e8 <__aeabi_idiv0>: 80004e8: 4770 bx lr 80004ea: bf00 nop 080004ec
: /** * @brief The application entry point. * @retval int */ int main(void) { 80004ec: b580 push {r7, lr} 80004ee: af00 add r7, sp, #0 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); 80004f0: f001 fcd8 bl 8001ea4 /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); 80004f4: f000 f854 bl 80005a0 /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); 80004f8: f000 f986 bl 8000808 MX_SPI4_Init(); 80004fc: f000 f90e bl 800071c MX_TIM6_Init(); 8000500: f000 f942 bl 8000788 MX_ADC3_Init(); 8000504: f000 f8b6 bl 8000674 /* USER CODE BEGIN 2 */ updateWS2812BData(); 8000508: f001 f954 bl 80017b4 HAL_SPI_Transmit_IT(&hspi4, (uint8_t*) &LEDData, (uint16_t) 66 * 3 * 3); 800050c: f240 2252 movw r2, #594 ; 0x252 8000510: 491e ldr r1, [pc, #120] ; (800058c ) 8000512: 481f ldr r0, [pc, #124] ; (8000590 ) 8000514: f003 f8d2 bl 80036bc HAL_ADC_Start(&hadc3); 8000518: 481e ldr r0, [pc, #120] ; (8000594 ) 800051a: f001 fd9b bl 8002054 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(LEDDesign_PendingChange){ 800051e: 4b1e ldr r3, [pc, #120] ; (8000598 ) 8000520: 781b ldrb r3, [r3, #0] 8000522: 2b00 cmp r3, #0 8000524: d002 beq.n 800052c LEDDesign_Off(); 8000526: f000 fc83 bl 8000e30 800052a: e02c b.n 8000586 }else{ switch (LEDMode) { 800052c: 4b1b ldr r3, [pc, #108] ; (800059c ) 800052e: 781b ldrb r3, [r3, #0] 8000530: 2b06 cmp r3, #6 8000532: d826 bhi.n 8000582 8000534: a201 add r2, pc, #4 ; (adr r2, 800053c ) 8000536: f852 f023 ldr.w pc, [r2, r3, lsl #2] 800053a: bf00 nop 800053c: 08000559 .word 0x08000559 8000540: 0800055f .word 0x0800055f 8000544: 08000565 .word 0x08000565 8000548: 0800056b .word 0x0800056b 800054c: 08000571 .word 0x08000571 8000550: 08000577 .word 0x08000577 8000554: 0800057d .word 0x0800057d case 0: LEDDesign_Smile(); 8000558: f000 fdba bl 80010d0 break; 800055c: e013 b.n 8000586 case 1: LEDDesign_Crazy(); 800055e: f000 fd77 bl 8001050 break; 8000562: e010 b.n 8000586 case 2: LEDDesign_SuperCrazy(); 8000564: f001 f8a4 bl 80016b0 break; 8000568: e00d b.n 8000586 case 3: LEDDesign_ColorWhite(); 800056a: f000 fc89 bl 8000e80 break; 800056e: e00a b.n 8000586 case 4: LEDDesign_ColorRed(); 8000570: f000 fd2e bl 8000fd0 break; 8000574: e007 b.n 8000586 case 5: LEDDesign_ColorGreen(); 8000576: f000 fceb bl 8000f50 break; 800057a: e004 b.n 8000586 case 6: LEDDesign_ColorBlue(); 800057c: f000 fca8 bl 8000ed0 break; 8000580: e001 b.n 8000586 default: LEDDesign_Off(); 8000582: f000 fc55 bl 8000e30 } } updateWS2812BData(); 8000586: f001 f915 bl 80017b4 if(LEDDesign_PendingChange){ 800058a: e7c8 b.n 800051e 800058c: 20000094 .word 0x20000094 8000590: 20000400 .word 0x20000400 8000594: 200003b8 .word 0x200003b8 8000598: 20000091 .word 0x20000091 800059c: 20000090 .word 0x20000090 080005a0 : /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { 80005a0: b580 push {r7, lr} 80005a2: b094 sub sp, #80 ; 0x50 80005a4: af00 add r7, sp, #0 RCC_OscInitTypeDef RCC_OscInitStruct = {0}; 80005a6: f107 0320 add.w r3, r7, #32 80005aa: 2230 movs r2, #48 ; 0x30 80005ac: 2100 movs r1, #0 80005ae: 4618 mov r0, r3 80005b0: f003 feac bl 800430c RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 80005b4: f107 030c add.w r3, r7, #12 80005b8: 2200 movs r2, #0 80005ba: 601a str r2, [r3, #0] 80005bc: 605a str r2, [r3, #4] 80005be: 609a str r2, [r3, #8] 80005c0: 60da str r2, [r3, #12] 80005c2: 611a str r2, [r3, #16] /** Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); 80005c4: 2300 movs r3, #0 80005c6: 60bb str r3, [r7, #8] 80005c8: 4b28 ldr r3, [pc, #160] ; (800066c ) 80005ca: 6c1b ldr r3, [r3, #64] ; 0x40 80005cc: 4a27 ldr r2, [pc, #156] ; (800066c ) 80005ce: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 80005d2: 6413 str r3, [r2, #64] ; 0x40 80005d4: 4b25 ldr r3, [pc, #148] ; (800066c ) 80005d6: 6c1b ldr r3, [r3, #64] ; 0x40 80005d8: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 80005dc: 60bb str r3, [r7, #8] 80005de: 68bb ldr r3, [r7, #8] __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); 80005e0: 2300 movs r3, #0 80005e2: 607b str r3, [r7, #4] 80005e4: 4b22 ldr r3, [pc, #136] ; (8000670 ) 80005e6: 681b ldr r3, [r3, #0] 80005e8: 4a21 ldr r2, [pc, #132] ; (8000670 ) 80005ea: f443 4340 orr.w r3, r3, #49152 ; 0xc000 80005ee: 6013 str r3, [r2, #0] 80005f0: 4b1f ldr r3, [pc, #124] ; (8000670 ) 80005f2: 681b ldr r3, [r3, #0] 80005f4: f403 4340 and.w r3, r3, #49152 ; 0xc000 80005f8: 607b str r3, [r7, #4] 80005fa: 687b ldr r3, [r7, #4] /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; 80005fc: 2301 movs r3, #1 80005fe: 623b str r3, [r7, #32] RCC_OscInitStruct.HSEState = RCC_HSE_ON; 8000600: f44f 3380 mov.w r3, #65536 ; 0x10000 8000604: 627b str r3, [r7, #36] ; 0x24 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; 8000606: 2302 movs r3, #2 8000608: 63bb str r3, [r7, #56] ; 0x38 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; 800060a: f44f 0380 mov.w r3, #4194304 ; 0x400000 800060e: 63fb str r3, [r7, #60] ; 0x3c RCC_OscInitStruct.PLL.PLLM = 4; 8000610: 2304 movs r3, #4 8000612: 643b str r3, [r7, #64] ; 0x40 RCC_OscInitStruct.PLL.PLLN = 160; 8000614: 23a0 movs r3, #160 ; 0xa0 8000616: 647b str r3, [r7, #68] ; 0x44 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; 8000618: 2302 movs r3, #2 800061a: 64bb str r3, [r7, #72] ; 0x48 RCC_OscInitStruct.PLL.PLLQ = 7; 800061c: 2307 movs r3, #7 800061e: 64fb str r3, [r7, #76] ; 0x4c if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 8000620: f107 0320 add.w r3, r7, #32 8000624: 4618 mov r0, r3 8000626: f002 fbb7 bl 8002d98 800062a: 4603 mov r3, r0 800062c: 2b00 cmp r3, #0 800062e: d001 beq.n 8000634 { Error_Handler(); 8000630: f001 fa60 bl 8001af4 } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK 8000634: 230f movs r3, #15 8000636: 60fb str r3, [r7, #12] |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; 8000638: 2302 movs r3, #2 800063a: 613b str r3, [r7, #16] RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 800063c: 2300 movs r3, #0 800063e: 617b str r3, [r7, #20] RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; 8000640: f44f 53a0 mov.w r3, #5120 ; 0x1400 8000644: 61bb str r3, [r7, #24] RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; 8000646: f44f 5380 mov.w r3, #4096 ; 0x1000 800064a: 61fb str r3, [r7, #28] if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) 800064c: f107 030c add.w r3, r7, #12 8000650: 2105 movs r1, #5 8000652: 4618 mov r0, r3 8000654: f002 fe10 bl 8003278 8000658: 4603 mov r3, r0 800065a: 2b00 cmp r3, #0 800065c: d001 beq.n 8000662 { Error_Handler(); 800065e: f001 fa49 bl 8001af4 } } 8000662: bf00 nop 8000664: 3750 adds r7, #80 ; 0x50 8000666: 46bd mov sp, r7 8000668: bd80 pop {r7, pc} 800066a: bf00 nop 800066c: 40023800 .word 0x40023800 8000670: 40007000 .word 0x40007000 08000674 : * @brief ADC3 Initialization Function * @param None * @retval None */ static void MX_ADC3_Init(void) { 8000674: b580 push {r7, lr} 8000676: b084 sub sp, #16 8000678: af00 add r7, sp, #0 /* USER CODE BEGIN ADC3_Init 0 */ /* USER CODE END ADC3_Init 0 */ ADC_ChannelConfTypeDef sConfig = {0}; 800067a: 463b mov r3, r7 800067c: 2200 movs r2, #0 800067e: 601a str r2, [r3, #0] 8000680: 605a str r2, [r3, #4] 8000682: 609a str r2, [r3, #8] 8000684: 60da str r2, [r3, #12] /* USER CODE BEGIN ADC3_Init 1 */ /* USER CODE END ADC3_Init 1 */ /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc3.Instance = ADC3; 8000686: 4b22 ldr r3, [pc, #136] ; (8000710 ) 8000688: 4a22 ldr r2, [pc, #136] ; (8000714 ) 800068a: 601a str r2, [r3, #0] hadc3.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; 800068c: 4b20 ldr r3, [pc, #128] ; (8000710 ) 800068e: f44f 3280 mov.w r2, #65536 ; 0x10000 8000692: 605a str r2, [r3, #4] hadc3.Init.Resolution = ADC_RESOLUTION_8B; 8000694: 4b1e ldr r3, [pc, #120] ; (8000710 ) 8000696: f04f 7200 mov.w r2, #33554432 ; 0x2000000 800069a: 609a str r2, [r3, #8] hadc3.Init.ScanConvMode = DISABLE; 800069c: 4b1c ldr r3, [pc, #112] ; (8000710 ) 800069e: 2200 movs r2, #0 80006a0: 611a str r2, [r3, #16] hadc3.Init.ContinuousConvMode = DISABLE; 80006a2: 4b1b ldr r3, [pc, #108] ; (8000710 ) 80006a4: 2200 movs r2, #0 80006a6: 761a strb r2, [r3, #24] hadc3.Init.DiscontinuousConvMode = DISABLE; 80006a8: 4b19 ldr r3, [pc, #100] ; (8000710 ) 80006aa: 2200 movs r2, #0 80006ac: f883 2020 strb.w r2, [r3, #32] hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 80006b0: 4b17 ldr r3, [pc, #92] ; (8000710 ) 80006b2: 2200 movs r2, #0 80006b4: 62da str r2, [r3, #44] ; 0x2c hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START; 80006b6: 4b16 ldr r3, [pc, #88] ; (8000710 ) 80006b8: 4a17 ldr r2, [pc, #92] ; (8000718 ) 80006ba: 629a str r2, [r3, #40] ; 0x28 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; 80006bc: 4b14 ldr r3, [pc, #80] ; (8000710 ) 80006be: 2200 movs r2, #0 80006c0: 60da str r2, [r3, #12] hadc3.Init.NbrOfConversion = 1; 80006c2: 4b13 ldr r3, [pc, #76] ; (8000710 ) 80006c4: 2201 movs r2, #1 80006c6: 61da str r2, [r3, #28] hadc3.Init.DMAContinuousRequests = DISABLE; 80006c8: 4b11 ldr r3, [pc, #68] ; (8000710 ) 80006ca: 2200 movs r2, #0 80006cc: f883 2030 strb.w r2, [r3, #48] ; 0x30 hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV; 80006d0: 4b0f ldr r3, [pc, #60] ; (8000710 ) 80006d2: 2201 movs r2, #1 80006d4: 615a str r2, [r3, #20] if (HAL_ADC_Init(&hadc3) != HAL_OK) 80006d6: 480e ldr r0, [pc, #56] ; (8000710 ) 80006d8: f001 fc78 bl 8001fcc 80006dc: 4603 mov r3, r0 80006de: 2b00 cmp r3, #0 80006e0: d001 beq.n 80006e6 { Error_Handler(); 80006e2: f001 fa07 bl 8001af4 } /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. */ sConfig.Channel = ADC_CHANNEL_4; 80006e6: 2304 movs r3, #4 80006e8: 603b str r3, [r7, #0] sConfig.Rank = 1; 80006ea: 2301 movs r3, #1 80006ec: 607b str r3, [r7, #4] sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; 80006ee: 2300 movs r3, #0 80006f0: 60bb str r3, [r7, #8] if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 80006f2: 463b mov r3, r7 80006f4: 4619 mov r1, r3 80006f6: 4806 ldr r0, [pc, #24] ; (8000710 ) 80006f8: f001 fe04 bl 8002304 80006fc: 4603 mov r3, r0 80006fe: 2b00 cmp r3, #0 8000700: d001 beq.n 8000706 { Error_Handler(); 8000702: f001 f9f7 bl 8001af4 } /* USER CODE BEGIN ADC3_Init 2 */ /* USER CODE END ADC3_Init 2 */ } 8000706: bf00 nop 8000708: 3710 adds r7, #16 800070a: 46bd mov sp, r7 800070c: bd80 pop {r7, pc} 800070e: bf00 nop 8000710: 200003b8 .word 0x200003b8 8000714: 40012200 .word 0x40012200 8000718: 0f000001 .word 0x0f000001 0800071c : * @brief SPI4 Initialization Function * @param None * @retval None */ static void MX_SPI4_Init(void) { 800071c: b580 push {r7, lr} 800071e: af00 add r7, sp, #0 /* USER CODE BEGIN SPI4_Init 1 */ /* USER CODE END SPI4_Init 1 */ /* SPI4 parameter configuration*/ hspi4.Instance = SPI4; 8000720: 4b17 ldr r3, [pc, #92] ; (8000780 ) 8000722: 4a18 ldr r2, [pc, #96] ; (8000784 ) 8000724: 601a str r2, [r3, #0] hspi4.Init.Mode = SPI_MODE_MASTER; 8000726: 4b16 ldr r3, [pc, #88] ; (8000780 ) 8000728: f44f 7282 mov.w r2, #260 ; 0x104 800072c: 605a str r2, [r3, #4] hspi4.Init.Direction = SPI_DIRECTION_2LINES; 800072e: 4b14 ldr r3, [pc, #80] ; (8000780 ) 8000730: 2200 movs r2, #0 8000732: 609a str r2, [r3, #8] hspi4.Init.DataSize = SPI_DATASIZE_8BIT; 8000734: 4b12 ldr r3, [pc, #72] ; (8000780 ) 8000736: 2200 movs r2, #0 8000738: 60da str r2, [r3, #12] hspi4.Init.CLKPolarity = SPI_POLARITY_LOW; 800073a: 4b11 ldr r3, [pc, #68] ; (8000780 ) 800073c: 2200 movs r2, #0 800073e: 611a str r2, [r3, #16] hspi4.Init.CLKPhase = SPI_PHASE_1EDGE; 8000740: 4b0f ldr r3, [pc, #60] ; (8000780 ) 8000742: 2200 movs r2, #0 8000744: 615a str r2, [r3, #20] hspi4.Init.NSS = SPI_NSS_SOFT; 8000746: 4b0e ldr r3, [pc, #56] ; (8000780 ) 8000748: f44f 7200 mov.w r2, #512 ; 0x200 800074c: 619a str r2, [r3, #24] hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; 800074e: 4b0c ldr r3, [pc, #48] ; (8000780 ) 8000750: 2220 movs r2, #32 8000752: 61da str r2, [r3, #28] hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB; 8000754: 4b0a ldr r3, [pc, #40] ; (8000780 ) 8000756: 2200 movs r2, #0 8000758: 621a str r2, [r3, #32] hspi4.Init.TIMode = SPI_TIMODE_DISABLE; 800075a: 4b09 ldr r3, [pc, #36] ; (8000780 ) 800075c: 2200 movs r2, #0 800075e: 625a str r2, [r3, #36] ; 0x24 hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; 8000760: 4b07 ldr r3, [pc, #28] ; (8000780 ) 8000762: 2200 movs r2, #0 8000764: 629a str r2, [r3, #40] ; 0x28 hspi4.Init.CRCPolynomial = 10; 8000766: 4b06 ldr r3, [pc, #24] ; (8000780 ) 8000768: 220a movs r2, #10 800076a: 62da str r2, [r3, #44] ; 0x2c if (HAL_SPI_Init(&hspi4) != HAL_OK) 800076c: 4804 ldr r0, [pc, #16] ; (8000780 ) 800076e: f002 ff41 bl 80035f4 8000772: 4603 mov r3, r0 8000774: 2b00 cmp r3, #0 8000776: d001 beq.n 800077c { Error_Handler(); 8000778: f001 f9bc bl 8001af4 } /* USER CODE BEGIN SPI4_Init 2 */ /* USER CODE END SPI4_Init 2 */ } 800077c: bf00 nop 800077e: bd80 pop {r7, pc} 8000780: 20000400 .word 0x20000400 8000784: 40013400 .word 0x40013400 08000788 : * @brief TIM6 Initialization Function * @param None * @retval None */ static void MX_TIM6_Init(void) { 8000788: b580 push {r7, lr} 800078a: b082 sub sp, #8 800078c: af00 add r7, sp, #0 /* USER CODE BEGIN TIM6_Init 0 */ /* USER CODE END TIM6_Init 0 */ TIM_MasterConfigTypeDef sMasterConfig = {0}; 800078e: 463b mov r3, r7 8000790: 2200 movs r2, #0 8000792: 601a str r2, [r3, #0] 8000794: 605a str r2, [r3, #4] /* USER CODE BEGIN TIM6_Init 1 */ /* USER CODE END TIM6_Init 1 */ htim6.Instance = TIM6; 8000796: 4b1a ldr r3, [pc, #104] ; (8000800 ) 8000798: 4a1a ldr r2, [pc, #104] ; (8000804 ) 800079a: 601a str r2, [r3, #0] htim6.Init.Prescaler = 4000; 800079c: 4b18 ldr r3, [pc, #96] ; (8000800 ) 800079e: f44f 627a mov.w r2, #4000 ; 0xfa0 80007a2: 605a str r2, [r3, #4] htim6.Init.CounterMode = TIM_COUNTERMODE_UP; 80007a4: 4b16 ldr r3, [pc, #88] ; (8000800 ) 80007a6: 2200 movs r2, #0 80007a8: 609a str r2, [r3, #8] htim6.Init.Period = 10000; 80007aa: 4b15 ldr r3, [pc, #84] ; (8000800 ) 80007ac: f242 7210 movw r2, #10000 ; 0x2710 80007b0: 60da str r2, [r3, #12] htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; 80007b2: 4b13 ldr r3, [pc, #76] ; (8000800 ) 80007b4: 2280 movs r2, #128 ; 0x80 80007b6: 619a str r2, [r3, #24] if (HAL_TIM_Base_Init(&htim6) != HAL_OK) 80007b8: 4811 ldr r0, [pc, #68] ; (8000800 ) 80007ba: f003 fa7d bl 8003cb8 80007be: 4603 mov r3, r0 80007c0: 2b00 cmp r3, #0 80007c2: d001 beq.n 80007c8 { Error_Handler(); 80007c4: f001 f996 bl 8001af4 } if (HAL_TIM_OnePulse_Init(&htim6, TIM_OPMODE_SINGLE) != HAL_OK) 80007c8: 2108 movs r1, #8 80007ca: 480d ldr r0, [pc, #52] ; (8000800 ) 80007cc: f003 fac3 bl 8003d56 80007d0: 4603 mov r3, r0 80007d2: 2b00 cmp r3, #0 80007d4: d001 beq.n 80007da { Error_Handler(); 80007d6: f001 f98d bl 8001af4 } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 80007da: 2300 movs r3, #0 80007dc: 603b str r3, [r7, #0] sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; 80007de: 2300 movs r3, #0 80007e0: 607b str r3, [r7, #4] if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) 80007e2: 463b mov r3, r7 80007e4: 4619 mov r1, r3 80007e6: 4806 ldr r0, [pc, #24] ; (8000800 ) 80007e8: f003 fcd6 bl 8004198 80007ec: 4603 mov r3, r0 80007ee: 2b00 cmp r3, #0 80007f0: d001 beq.n 80007f6 { Error_Handler(); 80007f2: f001 f97f bl 8001af4 } /* USER CODE BEGIN TIM6_Init 2 */ /* USER CODE END TIM6_Init 2 */ } 80007f6: bf00 nop 80007f8: 3708 adds r7, #8 80007fa: 46bd mov sp, r7 80007fc: bd80 pop {r7, pc} 80007fe: bf00 nop 8000800: 20000458 .word 0x20000458 8000804: 40001000 .word 0x40001000 08000808 : * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { 8000808: b580 push {r7, lr} 800080a: b08e sub sp, #56 ; 0x38 800080c: af00 add r7, sp, #0 GPIO_InitTypeDef GPIO_InitStruct = {0}; 800080e: f107 0324 add.w r3, r7, #36 ; 0x24 8000812: 2200 movs r2, #0 8000814: 601a str r2, [r3, #0] 8000816: 605a str r2, [r3, #4] 8000818: 609a str r2, [r3, #8] 800081a: 60da str r2, [r3, #12] 800081c: 611a str r2, [r3, #16] /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOE_CLK_ENABLE(); 800081e: 2300 movs r3, #0 8000820: 623b str r3, [r7, #32] 8000822: 4bb0 ldr r3, [pc, #704] ; (8000ae4 ) 8000824: 6b1b ldr r3, [r3, #48] ; 0x30 8000826: 4aaf ldr r2, [pc, #700] ; (8000ae4 ) 8000828: f043 0310 orr.w r3, r3, #16 800082c: 6313 str r3, [r2, #48] ; 0x30 800082e: 4bad ldr r3, [pc, #692] ; (8000ae4 ) 8000830: 6b1b ldr r3, [r3, #48] ; 0x30 8000832: f003 0310 and.w r3, r3, #16 8000836: 623b str r3, [r7, #32] 8000838: 6a3b ldr r3, [r7, #32] __HAL_RCC_GPIOC_CLK_ENABLE(); 800083a: 2300 movs r3, #0 800083c: 61fb str r3, [r7, #28] 800083e: 4ba9 ldr r3, [pc, #676] ; (8000ae4 ) 8000840: 6b1b ldr r3, [r3, #48] ; 0x30 8000842: 4aa8 ldr r2, [pc, #672] ; (8000ae4 ) 8000844: f043 0304 orr.w r3, r3, #4 8000848: 6313 str r3, [r2, #48] ; 0x30 800084a: 4ba6 ldr r3, [pc, #664] ; (8000ae4 ) 800084c: 6b1b ldr r3, [r3, #48] ; 0x30 800084e: f003 0304 and.w r3, r3, #4 8000852: 61fb str r3, [r7, #28] 8000854: 69fb ldr r3, [r7, #28] __HAL_RCC_GPIOF_CLK_ENABLE(); 8000856: 2300 movs r3, #0 8000858: 61bb str r3, [r7, #24] 800085a: 4ba2 ldr r3, [pc, #648] ; (8000ae4 ) 800085c: 6b1b ldr r3, [r3, #48] ; 0x30 800085e: 4aa1 ldr r2, [pc, #644] ; (8000ae4 ) 8000860: f043 0320 orr.w r3, r3, #32 8000864: 6313 str r3, [r2, #48] ; 0x30 8000866: 4b9f ldr r3, [pc, #636] ; (8000ae4 ) 8000868: 6b1b ldr r3, [r3, #48] ; 0x30 800086a: f003 0320 and.w r3, r3, #32 800086e: 61bb str r3, [r7, #24] 8000870: 69bb ldr r3, [r7, #24] __HAL_RCC_GPIOH_CLK_ENABLE(); 8000872: 2300 movs r3, #0 8000874: 617b str r3, [r7, #20] 8000876: 4b9b ldr r3, [pc, #620] ; (8000ae4 ) 8000878: 6b1b ldr r3, [r3, #48] ; 0x30 800087a: 4a9a ldr r2, [pc, #616] ; (8000ae4 ) 800087c: f043 0380 orr.w r3, r3, #128 ; 0x80 8000880: 6313 str r3, [r2, #48] ; 0x30 8000882: 4b98 ldr r3, [pc, #608] ; (8000ae4 ) 8000884: 6b1b ldr r3, [r3, #48] ; 0x30 8000886: f003 0380 and.w r3, r3, #128 ; 0x80 800088a: 617b str r3, [r7, #20] 800088c: 697b ldr r3, [r7, #20] __HAL_RCC_GPIOA_CLK_ENABLE(); 800088e: 2300 movs r3, #0 8000890: 613b str r3, [r7, #16] 8000892: 4b94 ldr r3, [pc, #592] ; (8000ae4 ) 8000894: 6b1b ldr r3, [r3, #48] ; 0x30 8000896: 4a93 ldr r2, [pc, #588] ; (8000ae4 ) 8000898: f043 0301 orr.w r3, r3, #1 800089c: 6313 str r3, [r2, #48] ; 0x30 800089e: 4b91 ldr r3, [pc, #580] ; (8000ae4 ) 80008a0: 6b1b ldr r3, [r3, #48] ; 0x30 80008a2: f003 0301 and.w r3, r3, #1 80008a6: 613b str r3, [r7, #16] 80008a8: 693b ldr r3, [r7, #16] __HAL_RCC_GPIOB_CLK_ENABLE(); 80008aa: 2300 movs r3, #0 80008ac: 60fb str r3, [r7, #12] 80008ae: 4b8d ldr r3, [pc, #564] ; (8000ae4 ) 80008b0: 6b1b ldr r3, [r3, #48] ; 0x30 80008b2: 4a8c ldr r2, [pc, #560] ; (8000ae4 ) 80008b4: f043 0302 orr.w r3, r3, #2 80008b8: 6313 str r3, [r2, #48] ; 0x30 80008ba: 4b8a ldr r3, [pc, #552] ; (8000ae4 ) 80008bc: 6b1b ldr r3, [r3, #48] ; 0x30 80008be: f003 0302 and.w r3, r3, #2 80008c2: 60fb str r3, [r7, #12] 80008c4: 68fb ldr r3, [r7, #12] __HAL_RCC_GPIOG_CLK_ENABLE(); 80008c6: 2300 movs r3, #0 80008c8: 60bb str r3, [r7, #8] 80008ca: 4b86 ldr r3, [pc, #536] ; (8000ae4 ) 80008cc: 6b1b ldr r3, [r3, #48] ; 0x30 80008ce: 4a85 ldr r2, [pc, #532] ; (8000ae4 ) 80008d0: f043 0340 orr.w r3, r3, #64 ; 0x40 80008d4: 6313 str r3, [r2, #48] ; 0x30 80008d6: 4b83 ldr r3, [pc, #524] ; (8000ae4 ) 80008d8: 6b1b ldr r3, [r3, #48] ; 0x30 80008da: f003 0340 and.w r3, r3, #64 ; 0x40 80008de: 60bb str r3, [r7, #8] 80008e0: 68bb ldr r3, [r7, #8] __HAL_RCC_GPIOD_CLK_ENABLE(); 80008e2: 2300 movs r3, #0 80008e4: 607b str r3, [r7, #4] 80008e6: 4b7f ldr r3, [pc, #508] ; (8000ae4 ) 80008e8: 6b1b ldr r3, [r3, #48] ; 0x30 80008ea: 4a7e ldr r2, [pc, #504] ; (8000ae4 ) 80008ec: f043 0308 orr.w r3, r3, #8 80008f0: 6313 str r3, [r2, #48] ; 0x30 80008f2: 4b7c ldr r3, [pc, #496] ; (8000ae4 ) 80008f4: 6b1b ldr r3, [r3, #48] ; 0x30 80008f6: f003 0308 and.w r3, r3, #8 80008fa: 607b str r3, [r7, #4] 80008fc: 687b ldr r3, [r7, #4] /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, NCS_MEMS_SPI_Pin|CSX_Pin|OTG_FS_PSO_Pin, GPIO_PIN_RESET); 80008fe: 2200 movs r2, #0 8000900: 2116 movs r1, #22 8000902: 4879 ldr r0, [pc, #484] ; (8000ae8 ) 8000904: f002 fa0a bl 8002d1c /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(ACP_RST_GPIO_Port, ACP_RST_Pin, GPIO_PIN_RESET); 8000908: 2200 movs r2, #0 800090a: 2180 movs r1, #128 ; 0x80 800090c: 4877 ldr r0, [pc, #476] ; (8000aec ) 800090e: f002 fa05 bl 8002d1c /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOD, RDX_Pin|WRX_DCX_Pin, GPIO_PIN_RESET); 8000912: 2200 movs r2, #0 8000914: f44f 5140 mov.w r1, #12288 ; 0x3000 8000918: 4875 ldr r0, [pc, #468] ; (8000af0 ) 800091a: f002 f9ff bl 8002d1c /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOG, LD3_Pin|LD4_Pin, GPIO_PIN_RESET); 800091e: 2200 movs r2, #0 8000920: f44f 41c0 mov.w r1, #24576 ; 0x6000 8000924: 4873 ldr r0, [pc, #460] ; (8000af4 ) 8000926: f002 f9f9 bl 8002d1c /*Configure GPIO pins : A0_Pin A1_Pin A2_Pin A3_Pin A4_Pin A5_Pin SDNRAS_Pin A6_Pin A7_Pin A8_Pin A9_Pin */ GPIO_InitStruct.Pin = A0_Pin|A1_Pin|A2_Pin|A3_Pin 800092a: f64f 033f movw r3, #63551 ; 0xf83f 800092e: 627b str r3, [r7, #36] ; 0x24 |A4_Pin|A5_Pin|SDNRAS_Pin|A6_Pin |A7_Pin|A8_Pin|A9_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000930: 2302 movs r3, #2 8000932: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000934: 2300 movs r3, #0 8000936: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8000938: 2303 movs r3, #3 800093a: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_FMC; 800093c: 230c movs r3, #12 800093e: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); 8000940: f107 0324 add.w r3, r7, #36 ; 0x24 8000944: 4619 mov r1, r3 8000946: 486c ldr r0, [pc, #432] ; (8000af8 ) 8000948: f002 f83e bl 80029c8 /*Configure GPIO pins : SPI5_SCK_Pin SPI5_MISO_Pin SPI5_MOSI_Pin */ GPIO_InitStruct.Pin = SPI5_SCK_Pin|SPI5_MISO_Pin|SPI5_MOSI_Pin; 800094c: f44f 7360 mov.w r3, #896 ; 0x380 8000950: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000952: 2302 movs r3, #2 8000954: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000956: 2300 movs r3, #0 8000958: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 800095a: 2300 movs r3, #0 800095c: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF5_SPI5; 800095e: 2305 movs r3, #5 8000960: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); 8000962: f107 0324 add.w r3, r7, #36 ; 0x24 8000966: 4619 mov r1, r3 8000968: 4863 ldr r0, [pc, #396] ; (8000af8 ) 800096a: f002 f82d bl 80029c8 /*Configure GPIO pin : ENABLE_Pin */ GPIO_InitStruct.Pin = ENABLE_Pin; 800096e: f44f 6380 mov.w r3, #1024 ; 0x400 8000972: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000974: 2302 movs r3, #2 8000976: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000978: 2300 movs r3, #0 800097a: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 800097c: 2300 movs r3, #0 800097e: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; 8000980: 230e movs r3, #14 8000982: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(ENABLE_GPIO_Port, &GPIO_InitStruct); 8000984: f107 0324 add.w r3, r7, #36 ; 0x24 8000988: 4619 mov r1, r3 800098a: 485b ldr r0, [pc, #364] ; (8000af8 ) 800098c: f002 f81c bl 80029c8 /*Configure GPIO pin : SDNWE_Pin */ GPIO_InitStruct.Pin = SDNWE_Pin; 8000990: 2301 movs r3, #1 8000992: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000994: 2302 movs r3, #2 8000996: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000998: 2300 movs r3, #0 800099a: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 800099c: 2303 movs r3, #3 800099e: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_FMC; 80009a0: 230c movs r3, #12 80009a2: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(SDNWE_GPIO_Port, &GPIO_InitStruct); 80009a4: f107 0324 add.w r3, r7, #36 ; 0x24 80009a8: 4619 mov r1, r3 80009aa: 484f ldr r0, [pc, #316] ; (8000ae8 ) 80009ac: f002 f80c bl 80029c8 /*Configure GPIO pins : NCS_MEMS_SPI_Pin CSX_Pin OTG_FS_PSO_Pin */ GPIO_InitStruct.Pin = NCS_MEMS_SPI_Pin|CSX_Pin|OTG_FS_PSO_Pin; 80009b0: 2316 movs r3, #22 80009b2: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 80009b4: 2301 movs r3, #1 80009b6: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 80009b8: 2300 movs r3, #0 80009ba: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 80009bc: 2300 movs r3, #0 80009be: 633b str r3, [r7, #48] ; 0x30 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 80009c0: f107 0324 add.w r3, r7, #36 ; 0x24 80009c4: 4619 mov r1, r3 80009c6: 4848 ldr r0, [pc, #288] ; (8000ae8 ) 80009c8: f001 fffe bl 80029c8 /*Configure GPIO pin : B1_Pin */ GPIO_InitStruct.Pin = B1_Pin; 80009cc: 2301 movs r3, #1 80009ce: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; 80009d0: 4b4a ldr r3, [pc, #296] ; (8000afc ) 80009d2: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 80009d4: 2300 movs r3, #0 80009d6: 62fb str r3, [r7, #44] ; 0x2c HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); 80009d8: f107 0324 add.w r3, r7, #36 ; 0x24 80009dc: 4619 mov r1, r3 80009de: 4843 ldr r0, [pc, #268] ; (8000aec ) 80009e0: f001 fff2 bl 80029c8 /*Configure GPIO pins : MEMS_INT1_Pin MEMS_INT2_Pin TP_INT1_Pin */ GPIO_InitStruct.Pin = MEMS_INT1_Pin|MEMS_INT2_Pin|TP_INT1_Pin; 80009e4: f248 0306 movw r3, #32774 ; 0x8006 80009e8: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING; 80009ea: 4b45 ldr r3, [pc, #276] ; (8000b00 ) 80009ec: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 80009ee: 2300 movs r3, #0 80009f0: 62fb str r3, [r7, #44] ; 0x2c HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 80009f2: f107 0324 add.w r3, r7, #36 ; 0x24 80009f6: 4619 mov r1, r3 80009f8: 483c ldr r0, [pc, #240] ; (8000aec ) 80009fa: f001 ffe5 bl 80029c8 /*Configure GPIO pins : B5_Pin VSYNC_Pin G2_Pin R4_Pin R5_Pin */ GPIO_InitStruct.Pin = B5_Pin|VSYNC_Pin|G2_Pin|R4_Pin 80009fe: f641 0358 movw r3, #6232 ; 0x1858 8000a02: 627b str r3, [r7, #36] ; 0x24 |R5_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000a04: 2302 movs r3, #2 8000a06: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000a08: 2300 movs r3, #0 8000a0a: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000a0c: 2300 movs r3, #0 8000a0e: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; 8000a10: 230e movs r3, #14 8000a12: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 8000a14: f107 0324 add.w r3, r7, #36 ; 0x24 8000a18: 4619 mov r1, r3 8000a1a: 4834 ldr r0, [pc, #208] ; (8000aec ) 8000a1c: f001 ffd4 bl 80029c8 /*Configure GPIO pin : ACP_RST_Pin */ GPIO_InitStruct.Pin = ACP_RST_Pin; 8000a20: 2380 movs r3, #128 ; 0x80 8000a22: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 8000a24: 2301 movs r3, #1 8000a26: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000a28: 2300 movs r3, #0 8000a2a: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000a2c: 2300 movs r3, #0 8000a2e: 633b str r3, [r7, #48] ; 0x30 HAL_GPIO_Init(ACP_RST_GPIO_Port, &GPIO_InitStruct); 8000a30: f107 0324 add.w r3, r7, #36 ; 0x24 8000a34: 4619 mov r1, r3 8000a36: 482d ldr r0, [pc, #180] ; (8000aec ) 8000a38: f001 ffc6 bl 80029c8 /*Configure GPIO pin : OTG_FS_OC_Pin */ GPIO_InitStruct.Pin = OTG_FS_OC_Pin; 8000a3c: 2320 movs r3, #32 8000a3e: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING; 8000a40: 4b2f ldr r3, [pc, #188] ; (8000b00 ) 8000a42: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000a44: 2300 movs r3, #0 8000a46: 62fb str r3, [r7, #44] ; 0x2c HAL_GPIO_Init(OTG_FS_OC_GPIO_Port, &GPIO_InitStruct); 8000a48: f107 0324 add.w r3, r7, #36 ; 0x24 8000a4c: 4619 mov r1, r3 8000a4e: 4826 ldr r0, [pc, #152] ; (8000ae8 ) 8000a50: f001 ffba bl 80029c8 /*Configure GPIO pins : R3_Pin R6_Pin */ GPIO_InitStruct.Pin = R3_Pin|R6_Pin; 8000a54: 2303 movs r3, #3 8000a56: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000a58: 2302 movs r3, #2 8000a5a: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000a5c: 2300 movs r3, #0 8000a5e: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000a60: 2300 movs r3, #0 8000a62: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; 8000a64: 2309 movs r3, #9 8000a66: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 8000a68: f107 0324 add.w r3, r7, #36 ; 0x24 8000a6c: 4619 mov r1, r3 8000a6e: 4825 ldr r0, [pc, #148] ; (8000b04 ) 8000a70: f001 ffaa bl 80029c8 /*Configure GPIO pin : BOOT1_Pin */ GPIO_InitStruct.Pin = BOOT1_Pin; 8000a74: 2304 movs r3, #4 8000a76: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 8000a78: 2300 movs r3, #0 8000a7a: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000a7c: 2300 movs r3, #0 8000a7e: 62fb str r3, [r7, #44] ; 0x2c HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct); 8000a80: f107 0324 add.w r3, r7, #36 ; 0x24 8000a84: 4619 mov r1, r3 8000a86: 481f ldr r0, [pc, #124] ; (8000b04 ) 8000a88: f001 ff9e bl 80029c8 /*Configure GPIO pins : A10_Pin A11_Pin BA0_Pin BA1_Pin SDCLK_Pin SDNCAS_Pin */ GPIO_InitStruct.Pin = A10_Pin|A11_Pin|BA0_Pin|BA1_Pin 8000a8c: f248 1333 movw r3, #33075 ; 0x8133 8000a90: 627b str r3, [r7, #36] ; 0x24 |SDCLK_Pin|SDNCAS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000a92: 2302 movs r3, #2 8000a94: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000a96: 2300 movs r3, #0 8000a98: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8000a9a: 2303 movs r3, #3 8000a9c: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_FMC; 8000a9e: 230c movs r3, #12 8000aa0: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); 8000aa2: f107 0324 add.w r3, r7, #36 ; 0x24 8000aa6: 4619 mov r1, r3 8000aa8: 4812 ldr r0, [pc, #72] ; (8000af4 ) 8000aaa: f001 ff8d bl 80029c8 /*Configure GPIO pins : D4_Pin D5_Pin D6_Pin D7_Pin D8_Pin D9_Pin D10_Pin D11_Pin D12_Pin NBL0_Pin NBL1_Pin */ GPIO_InitStruct.Pin = D4_Pin|D5_Pin|D6_Pin|D7_Pin 8000aae: f64f 7383 movw r3, #65411 ; 0xff83 8000ab2: 627b str r3, [r7, #36] ; 0x24 |D8_Pin|D9_Pin|D10_Pin|D11_Pin |D12_Pin|NBL0_Pin|NBL1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000ab4: 2302 movs r3, #2 8000ab6: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000ab8: 2300 movs r3, #0 8000aba: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8000abc: 2303 movs r3, #3 8000abe: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_FMC; 8000ac0: 230c movs r3, #12 8000ac2: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); 8000ac4: f107 0324 add.w r3, r7, #36 ; 0x24 8000ac8: 4619 mov r1, r3 8000aca: 480f ldr r0, [pc, #60] ; (8000b08 ) 8000acc: f001 ff7c bl 80029c8 /*Configure GPIO pins : G4_Pin G5_Pin B6_Pin B7_Pin */ GPIO_InitStruct.Pin = G4_Pin|G5_Pin|B6_Pin|B7_Pin; 8000ad0: f44f 6370 mov.w r3, #3840 ; 0xf00 8000ad4: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000ad6: 2302 movs r3, #2 8000ad8: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000ada: 2300 movs r3, #0 8000adc: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000ade: 2300 movs r3, #0 8000ae0: 633b str r3, [r7, #48] ; 0x30 8000ae2: e013 b.n 8000b0c 8000ae4: 40023800 .word 0x40023800 8000ae8: 40020800 .word 0x40020800 8000aec: 40020000 .word 0x40020000 8000af0: 40020c00 .word 0x40020c00 8000af4: 40021800 .word 0x40021800 8000af8: 40021400 .word 0x40021400 8000afc: 10110000 .word 0x10110000 8000b00: 10120000 .word 0x10120000 8000b04: 40020400 .word 0x40020400 8000b08: 40021000 .word 0x40021000 GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; 8000b0c: 230e movs r3, #14 8000b0e: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 8000b10: f107 0324 add.w r3, r7, #36 ; 0x24 8000b14: 4619 mov r1, r3 8000b16: 4877 ldr r0, [pc, #476] ; (8000cf4 ) 8000b18: f001 ff56 bl 80029c8 /*Configure GPIO pins : OTG_HS_ID_Pin OTG_HS_DM_Pin OTG_HS_DP_Pin */ GPIO_InitStruct.Pin = OTG_HS_ID_Pin|OTG_HS_DM_Pin|OTG_HS_DP_Pin; 8000b1c: f44f 4350 mov.w r3, #53248 ; 0xd000 8000b20: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000b22: 2302 movs r3, #2 8000b24: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000b26: 2300 movs r3, #0 8000b28: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000b2a: 2300 movs r3, #0 8000b2c: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_OTG_HS_FS; 8000b2e: 230c movs r3, #12 8000b30: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 8000b32: f107 0324 add.w r3, r7, #36 ; 0x24 8000b36: 4619 mov r1, r3 8000b38: 486e ldr r0, [pc, #440] ; (8000cf4 ) 8000b3a: f001 ff45 bl 80029c8 /*Configure GPIO pin : VBUS_HS_Pin */ GPIO_InitStruct.Pin = VBUS_HS_Pin; 8000b3e: f44f 5300 mov.w r3, #8192 ; 0x2000 8000b42: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 8000b44: 2300 movs r3, #0 8000b46: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000b48: 2300 movs r3, #0 8000b4a: 62fb str r3, [r7, #44] ; 0x2c HAL_GPIO_Init(VBUS_HS_GPIO_Port, &GPIO_InitStruct); 8000b4c: f107 0324 add.w r3, r7, #36 ; 0x24 8000b50: 4619 mov r1, r3 8000b52: 4868 ldr r0, [pc, #416] ; (8000cf4 ) 8000b54: f001 ff38 bl 80029c8 /*Configure GPIO pins : D13_Pin D14_Pin D15_Pin D0_Pin D1_Pin D2_Pin D3_Pin */ GPIO_InitStruct.Pin = D13_Pin|D14_Pin|D15_Pin|D0_Pin 8000b58: f24c 7303 movw r3, #50947 ; 0xc703 8000b5c: 627b str r3, [r7, #36] ; 0x24 |D1_Pin|D2_Pin|D3_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000b5e: 2302 movs r3, #2 8000b60: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000b62: 2300 movs r3, #0 8000b64: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8000b66: 2303 movs r3, #3 8000b68: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_FMC; 8000b6a: 230c movs r3, #12 8000b6c: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 8000b6e: f107 0324 add.w r3, r7, #36 ; 0x24 8000b72: 4619 mov r1, r3 8000b74: 4860 ldr r0, [pc, #384] ; (8000cf8 ) 8000b76: f001 ff27 bl 80029c8 /*Configure GPIO pin : TE_Pin */ GPIO_InitStruct.Pin = TE_Pin; 8000b7a: f44f 6300 mov.w r3, #2048 ; 0x800 8000b7e: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 8000b80: 2300 movs r3, #0 8000b82: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000b84: 2300 movs r3, #0 8000b86: 62fb str r3, [r7, #44] ; 0x2c HAL_GPIO_Init(TE_GPIO_Port, &GPIO_InitStruct); 8000b88: f107 0324 add.w r3, r7, #36 ; 0x24 8000b8c: 4619 mov r1, r3 8000b8e: 485a ldr r0, [pc, #360] ; (8000cf8 ) 8000b90: f001 ff1a bl 80029c8 /*Configure GPIO pins : RDX_Pin WRX_DCX_Pin */ GPIO_InitStruct.Pin = RDX_Pin|WRX_DCX_Pin; 8000b94: f44f 5340 mov.w r3, #12288 ; 0x3000 8000b98: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 8000b9a: 2301 movs r3, #1 8000b9c: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000b9e: 2300 movs r3, #0 8000ba0: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000ba2: 2300 movs r3, #0 8000ba4: 633b str r3, [r7, #48] ; 0x30 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 8000ba6: f107 0324 add.w r3, r7, #36 ; 0x24 8000baa: 4619 mov r1, r3 8000bac: 4852 ldr r0, [pc, #328] ; (8000cf8 ) 8000bae: f001 ff0b bl 80029c8 /*Configure GPIO pins : R7_Pin DOTCLK_Pin B3_Pin */ GPIO_InitStruct.Pin = R7_Pin|DOTCLK_Pin|B3_Pin; 8000bb2: f44f 630c mov.w r3, #2240 ; 0x8c0 8000bb6: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000bb8: 2302 movs r3, #2 8000bba: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000bbc: 2300 movs r3, #0 8000bbe: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000bc0: 2300 movs r3, #0 8000bc2: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; 8000bc4: 230e movs r3, #14 8000bc6: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); 8000bc8: f107 0324 add.w r3, r7, #36 ; 0x24 8000bcc: 4619 mov r1, r3 8000bce: 484b ldr r0, [pc, #300] ; (8000cfc ) 8000bd0: f001 fefa bl 80029c8 /*Configure GPIO pins : HSYNC_Pin G6_Pin R2_Pin */ GPIO_InitStruct.Pin = HSYNC_Pin|G6_Pin|R2_Pin; 8000bd4: f44f 6398 mov.w r3, #1216 ; 0x4c0 8000bd8: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000bda: 2302 movs r3, #2 8000bdc: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000bde: 2300 movs r3, #0 8000be0: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000be2: 2300 movs r3, #0 8000be4: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; 8000be6: 230e movs r3, #14 8000be8: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 8000bea: f107 0324 add.w r3, r7, #36 ; 0x24 8000bee: 4619 mov r1, r3 8000bf0: 4843 ldr r0, [pc, #268] ; (8000d00 ) 8000bf2: f001 fee9 bl 80029c8 /*Configure GPIO pin : I2C3_SDA_Pin */ GPIO_InitStruct.Pin = I2C3_SDA_Pin; 8000bf6: f44f 7300 mov.w r3, #512 ; 0x200 8000bfa: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; 8000bfc: 2312 movs r3, #18 8000bfe: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_PULLUP; 8000c00: 2301 movs r3, #1 8000c02: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000c04: 2300 movs r3, #0 8000c06: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; 8000c08: 2304 movs r3, #4 8000c0a: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(I2C3_SDA_GPIO_Port, &GPIO_InitStruct); 8000c0c: f107 0324 add.w r3, r7, #36 ; 0x24 8000c10: 4619 mov r1, r3 8000c12: 483b ldr r0, [pc, #236] ; (8000d00 ) 8000c14: f001 fed8 bl 80029c8 /*Configure GPIO pin : I2C3_SCL_Pin */ GPIO_InitStruct.Pin = I2C3_SCL_Pin; 8000c18: f44f 7380 mov.w r3, #256 ; 0x100 8000c1c: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; 8000c1e: 2312 movs r3, #18 8000c20: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_PULLUP; 8000c22: 2301 movs r3, #1 8000c24: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000c26: 2300 movs r3, #0 8000c28: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF4_I2C3; 8000c2a: 2304 movs r3, #4 8000c2c: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(I2C3_SCL_GPIO_Port, &GPIO_InitStruct); 8000c2e: f107 0324 add.w r3, r7, #36 ; 0x24 8000c32: 4619 mov r1, r3 8000c34: 4833 ldr r0, [pc, #204] ; (8000d04 ) 8000c36: f001 fec7 bl 80029c8 /*Configure GPIO pins : STLINK_RX_Pin STLINK_TX_Pin */ GPIO_InitStruct.Pin = STLINK_RX_Pin|STLINK_TX_Pin; 8000c3a: f44f 63c0 mov.w r3, #1536 ; 0x600 8000c3e: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000c40: 2302 movs r3, #2 8000c42: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000c44: 2300 movs r3, #0 8000c46: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8000c48: 2303 movs r3, #3 8000c4a: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF7_USART1; 8000c4c: 2307 movs r3, #7 8000c4e: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 8000c50: f107 0324 add.w r3, r7, #36 ; 0x24 8000c54: 4619 mov r1, r3 8000c56: 482b ldr r0, [pc, #172] ; (8000d04 ) 8000c58: f001 feb6 bl 80029c8 /*Configure GPIO pins : G7_Pin B2_Pin */ GPIO_InitStruct.Pin = G7_Pin|B2_Pin; 8000c5c: 2348 movs r3, #72 ; 0x48 8000c5e: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000c60: 2302 movs r3, #2 8000c62: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000c64: 2300 movs r3, #0 8000c66: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000c68: 2300 movs r3, #0 8000c6a: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF14_LTDC; 8000c6c: 230e movs r3, #14 8000c6e: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 8000c70: f107 0324 add.w r3, r7, #36 ; 0x24 8000c74: 4619 mov r1, r3 8000c76: 4820 ldr r0, [pc, #128] ; (8000cf8 ) 8000c78: f001 fea6 bl 80029c8 /*Configure GPIO pins : G3_Pin B4_Pin */ GPIO_InitStruct.Pin = G3_Pin|B4_Pin; 8000c7c: f44f 53a0 mov.w r3, #5120 ; 0x1400 8000c80: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000c82: 2302 movs r3, #2 8000c84: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000c86: 2300 movs r3, #0 8000c88: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000c8a: 2300 movs r3, #0 8000c8c: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF9_LTDC; 8000c8e: 2309 movs r3, #9 8000c90: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); 8000c92: f107 0324 add.w r3, r7, #36 ; 0x24 8000c96: 4619 mov r1, r3 8000c98: 4818 ldr r0, [pc, #96] ; (8000cfc ) 8000c9a: f001 fe95 bl 80029c8 /*Configure GPIO pins : LD3_Pin LD4_Pin */ GPIO_InitStruct.Pin = LD3_Pin|LD4_Pin; 8000c9e: f44f 43c0 mov.w r3, #24576 ; 0x6000 8000ca2: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 8000ca4: 2301 movs r3, #1 8000ca6: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000ca8: 2300 movs r3, #0 8000caa: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 8000cac: 2300 movs r3, #0 8000cae: 633b str r3, [r7, #48] ; 0x30 HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); 8000cb0: f107 0324 add.w r3, r7, #36 ; 0x24 8000cb4: 4619 mov r1, r3 8000cb6: 4811 ldr r0, [pc, #68] ; (8000cfc ) 8000cb8: f001 fe86 bl 80029c8 /*Configure GPIO pins : SDCKE1_Pin SDNE1_Pin */ GPIO_InitStruct.Pin = SDCKE1_Pin|SDNE1_Pin; 8000cbc: 2360 movs r3, #96 ; 0x60 8000cbe: 627b str r3, [r7, #36] ; 0x24 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000cc0: 2302 movs r3, #2 8000cc2: 62bb str r3, [r7, #40] ; 0x28 GPIO_InitStruct.Pull = GPIO_NOPULL; 8000cc4: 2300 movs r3, #0 8000cc6: 62fb str r3, [r7, #44] ; 0x2c GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8000cc8: 2303 movs r3, #3 8000cca: 633b str r3, [r7, #48] ; 0x30 GPIO_InitStruct.Alternate = GPIO_AF12_FMC; 8000ccc: 230c movs r3, #12 8000cce: 637b str r3, [r7, #52] ; 0x34 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 8000cd0: f107 0324 add.w r3, r7, #36 ; 0x24 8000cd4: 4619 mov r1, r3 8000cd6: 4807 ldr r0, [pc, #28] ; (8000cf4 ) 8000cd8: f001 fe76 bl 80029c8 /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); 8000cdc: 2200 movs r2, #0 8000cde: 2100 movs r1, #0 8000ce0: 2006 movs r0, #6 8000ce2: f001 fe18 bl 8002916 HAL_NVIC_EnableIRQ(EXTI0_IRQn); 8000ce6: 2006 movs r0, #6 8000ce8: f001 fe31 bl 800294e } 8000cec: bf00 nop 8000cee: 3738 adds r7, #56 ; 0x38 8000cf0: 46bd mov sp, r7 8000cf2: bd80 pop {r7, pc} 8000cf4: 40020400 .word 0x40020400 8000cf8: 40020c00 .word 0x40020c00 8000cfc: 40021800 .word 0x40021800 8000d00: 40020800 .word 0x40020800 8000d04: 40020000 .word 0x40020000 08000d08 : /* USER CODE BEGIN 4 */ uint8_t getSoundLevel(void){ 8000d08: b580 push {r7, lr} 8000d0a: b086 sub sp, #24 8000d0c: af00 add r7, sp, #0 static uint8_t multiplier = 3; static uint16_t averagedDifferences = 0; uint16_t returnValue; uint8_t samples[16]; uint16_t sumOfDifferences = 0; 8000d0e: 2300 movs r3, #0 8000d10: 82bb strh r3, [r7, #20] for(uint8_t i = 0; i < sizeof(samples); ++i){ 8000d12: 2300 movs r3, #0 8000d14: 74fb strb r3, [r7, #19] 8000d16: e017 b.n 8000d48 HAL_Delay(1); 8000d18: 2001 movs r0, #1 8000d1a: f001 f935 bl 8001f88 HAL_ADC_Start(&hadc3); 8000d1e: 483e ldr r0, [pc, #248] ; (8000e18 ) 8000d20: f001 f998 bl 8002054 HAL_ADC_PollForConversion(&hadc3, (uint32_t) 20); 8000d24: 2114 movs r1, #20 8000d26: 483c ldr r0, [pc, #240] ; (8000e18 ) 8000d28: f001 fa5a bl 80021e0 samples[i] = HAL_ADC_GetValue(&hadc3); 8000d2c: 483a ldr r0, [pc, #232] ; (8000e18 ) 8000d2e: f001 fadb bl 80022e8 8000d32: 4602 mov r2, r0 8000d34: 7cfb ldrb r3, [r7, #19] 8000d36: b2d2 uxtb r2, r2 8000d38: f107 0118 add.w r1, r7, #24 8000d3c: 440b add r3, r1 8000d3e: f803 2c18 strb.w r2, [r3, #-24] for(uint8_t i = 0; i < sizeof(samples); ++i){ 8000d42: 7cfb ldrb r3, [r7, #19] 8000d44: 3301 adds r3, #1 8000d46: 74fb strb r3, [r7, #19] 8000d48: 7cfb ldrb r3, [r7, #19] 8000d4a: 2b0f cmp r3, #15 8000d4c: d9e4 bls.n 8000d18 } for(uint8_t i = 0; i < sizeof(samples) - 1; ++i){ 8000d4e: 2300 movs r3, #0 8000d50: 74bb strb r3, [r7, #18] 8000d52: e018 b.n 8000d86 sumOfDifferences += abs(samples[i] - samples[i + 1]); 8000d54: 7cbb ldrb r3, [r7, #18] 8000d56: f107 0218 add.w r2, r7, #24 8000d5a: 4413 add r3, r2 8000d5c: f813 3c18 ldrb.w r3, [r3, #-24] 8000d60: 461a mov r2, r3 8000d62: 7cbb ldrb r3, [r7, #18] 8000d64: 3301 adds r3, #1 8000d66: f107 0118 add.w r1, r7, #24 8000d6a: 440b add r3, r1 8000d6c: f813 3c18 ldrb.w r3, [r3, #-24] 8000d70: 1ad3 subs r3, r2, r3 8000d72: 2b00 cmp r3, #0 8000d74: bfb8 it lt 8000d76: 425b neglt r3, r3 8000d78: b29a uxth r2, r3 8000d7a: 8abb ldrh r3, [r7, #20] 8000d7c: 4413 add r3, r2 8000d7e: 82bb strh r3, [r7, #20] for(uint8_t i = 0; i < sizeof(samples) - 1; ++i){ 8000d80: 7cbb ldrb r3, [r7, #18] 8000d82: 3301 adds r3, #1 8000d84: 74bb strb r3, [r7, #18] 8000d86: 7cbb ldrb r3, [r7, #18] 8000d88: 2b0e cmp r3, #14 8000d8a: d9e3 bls.n 8000d54 } averagedDifferences += ((int32_t) sumOfDifferences - (int32_t) averagedDifferences) / 4; 8000d8c: 8abb ldrh r3, [r7, #20] 8000d8e: 4a23 ldr r2, [pc, #140] ; (8000e1c ) 8000d90: 8812 ldrh r2, [r2, #0] 8000d92: 1a9b subs r3, r3, r2 8000d94: 2b00 cmp r3, #0 8000d96: da00 bge.n 8000d9a 8000d98: 3303 adds r3, #3 8000d9a: 109b asrs r3, r3, #2 8000d9c: b29a uxth r2, r3 8000d9e: 4b1f ldr r3, [pc, #124] ; (8000e1c ) 8000da0: 881b ldrh r3, [r3, #0] 8000da2: 4413 add r3, r2 8000da4: b29a uxth r2, r3 8000da6: 4b1d ldr r3, [pc, #116] ; (8000e1c ) 8000da8: 801a strh r2, [r3, #0] if(averagedDifferences < prescale_DownShift){returnValue = 0;}else{returnValue = averagedDifferences - prescale_DownShift;} 8000daa: 4b1d ldr r3, [pc, #116] ; (8000e20 ) 8000dac: 781b ldrb r3, [r3, #0] 8000dae: b29a uxth r2, r3 8000db0: 4b1a ldr r3, [pc, #104] ; (8000e1c ) 8000db2: 881b ldrh r3, [r3, #0] 8000db4: 429a cmp r2, r3 8000db6: d902 bls.n 8000dbe 8000db8: 2300 movs r3, #0 8000dba: 82fb strh r3, [r7, #22] 8000dbc: e006 b.n 8000dcc 8000dbe: 4b17 ldr r3, [pc, #92] ; (8000e1c ) 8000dc0: 881a ldrh r2, [r3, #0] 8000dc2: 4b17 ldr r3, [pc, #92] ; (8000e20 ) 8000dc4: 781b ldrb r3, [r3, #0] 8000dc6: b29b uxth r3, r3 8000dc8: 1ad3 subs r3, r2, r3 8000dca: 82fb strh r3, [r7, #22] returnValue = (returnValue / divisor) * multiplier; 8000dcc: 8afb ldrh r3, [r7, #22] 8000dce: 4a15 ldr r2, [pc, #84] ; (8000e24 ) 8000dd0: 7812 ldrb r2, [r2, #0] 8000dd2: fb93 f3f2 sdiv r3, r3, r2 8000dd6: b29a uxth r2, r3 8000dd8: 4b13 ldr r3, [pc, #76] ; (8000e28 ) 8000dda: 781b ldrb r3, [r3, #0] 8000ddc: b29b uxth r3, r3 8000dde: fb12 f303 smulbb r3, r2, r3 8000de2: 82fb strh r3, [r7, #22] if(returnValue < postscale_DownShift){returnValue = 0;}else{returnValue -= postscale_DownShift;} 8000de4: 4b11 ldr r3, [pc, #68] ; (8000e2c ) 8000de6: 781b ldrb r3, [r3, #0] 8000de8: b29b uxth r3, r3 8000dea: 8afa ldrh r2, [r7, #22] 8000dec: 429a cmp r2, r3 8000dee: d202 bcs.n 8000df6 8000df0: 2300 movs r3, #0 8000df2: 82fb strh r3, [r7, #22] 8000df4: e005 b.n 8000e02 8000df6: 4b0d ldr r3, [pc, #52] ; (8000e2c ) 8000df8: 781b ldrb r3, [r3, #0] 8000dfa: b29b uxth r3, r3 8000dfc: 8afa ldrh r2, [r7, #22] 8000dfe: 1ad3 subs r3, r2, r3 8000e00: 82fb strh r3, [r7, #22] if(returnValue >= 0xFF){return 0xFF;} else{return returnValue;} 8000e02: 8afb ldrh r3, [r7, #22] 8000e04: 2bfe cmp r3, #254 ; 0xfe 8000e06: d901 bls.n 8000e0c 8000e08: 23ff movs r3, #255 ; 0xff 8000e0a: e001 b.n 8000e10 8000e0c: 8afb ldrh r3, [r7, #22] 8000e0e: b2db uxtb r3, r3 } 8000e10: 4618 mov r0, r3 8000e12: 3718 adds r7, #24 8000e14: 46bd mov sp, r7 8000e16: bd80 pop {r7, pc} 8000e18: 200003b8 .word 0x200003b8 8000e1c: 200003a6 .word 0x200003a6 8000e20: 20000000 .word 0x20000000 8000e24: 20000001 .word 0x20000001 8000e28: 20000002 .word 0x20000002 8000e2c: 200003a8 .word 0x200003a8 08000e30 : void LEDDesign_Off(void){ 8000e30: b480 push {r7} 8000e32: b083 sub sp, #12 8000e34: af00 add r7, sp, #0 for(uint8_t i = 0; i < 64; ++i){ 8000e36: 2300 movs r3, #0 8000e38: 71fb strb r3, [r7, #7] 8000e3a: e015 b.n 8000e68 for(uint8_t j = 0; j < 3; ++j){ 8000e3c: 2300 movs r3, #0 8000e3e: 71bb strb r3, [r7, #6] 8000e40: e00c b.n 8000e5c LEDData[i][j] = 0x00; 8000e42: 79fa ldrb r2, [r7, #7] 8000e44: 79b9 ldrb r1, [r7, #6] 8000e46: 480d ldr r0, [pc, #52] ; (8000e7c ) 8000e48: 4613 mov r3, r2 8000e4a: 005b lsls r3, r3, #1 8000e4c: 4413 add r3, r2 8000e4e: 4403 add r3, r0 8000e50: 440b add r3, r1 8000e52: 2200 movs r2, #0 8000e54: 701a strb r2, [r3, #0] for(uint8_t j = 0; j < 3; ++j){ 8000e56: 79bb ldrb r3, [r7, #6] 8000e58: 3301 adds r3, #1 8000e5a: 71bb strb r3, [r7, #6] 8000e5c: 79bb ldrb r3, [r7, #6] 8000e5e: 2b02 cmp r3, #2 8000e60: d9ef bls.n 8000e42 for(uint8_t i = 0; i < 64; ++i){ 8000e62: 79fb ldrb r3, [r7, #7] 8000e64: 3301 adds r3, #1 8000e66: 71fb strb r3, [r7, #7] 8000e68: 79fb ldrb r3, [r7, #7] 8000e6a: 2b3f cmp r3, #63 ; 0x3f 8000e6c: d9e6 bls.n 8000e3c } } } 8000e6e: bf00 nop 8000e70: 370c adds r7, #12 8000e72: 46bd mov sp, r7 8000e74: f85d 7b04 ldr.w r7, [sp], #4 8000e78: 4770 bx lr 8000e7a: bf00 nop 8000e7c: 20000094 .word 0x20000094 08000e80 : void LEDDesign_ColorWhite(void){ 8000e80: b480 push {r7} 8000e82: b083 sub sp, #12 8000e84: af00 add r7, sp, #0 for(uint8_t i = 0; i < 64; ++i){ 8000e86: 2300 movs r3, #0 8000e88: 71fb strb r3, [r7, #7] 8000e8a: e015 b.n 8000eb8 for(uint8_t j = 0; j < 3; ++j){ 8000e8c: 2300 movs r3, #0 8000e8e: 71bb strb r3, [r7, #6] 8000e90: e00c b.n 8000eac LEDData[i][j] = 0xFF; 8000e92: 79fa ldrb r2, [r7, #7] 8000e94: 79b9 ldrb r1, [r7, #6] 8000e96: 480d ldr r0, [pc, #52] ; (8000ecc ) 8000e98: 4613 mov r3, r2 8000e9a: 005b lsls r3, r3, #1 8000e9c: 4413 add r3, r2 8000e9e: 4403 add r3, r0 8000ea0: 440b add r3, r1 8000ea2: 22ff movs r2, #255 ; 0xff 8000ea4: 701a strb r2, [r3, #0] for(uint8_t j = 0; j < 3; ++j){ 8000ea6: 79bb ldrb r3, [r7, #6] 8000ea8: 3301 adds r3, #1 8000eaa: 71bb strb r3, [r7, #6] 8000eac: 79bb ldrb r3, [r7, #6] 8000eae: 2b02 cmp r3, #2 8000eb0: d9ef bls.n 8000e92 for(uint8_t i = 0; i < 64; ++i){ 8000eb2: 79fb ldrb r3, [r7, #7] 8000eb4: 3301 adds r3, #1 8000eb6: 71fb strb r3, [r7, #7] 8000eb8: 79fb ldrb r3, [r7, #7] 8000eba: 2b3f cmp r3, #63 ; 0x3f 8000ebc: d9e6 bls.n 8000e8c } } } 8000ebe: bf00 nop 8000ec0: 370c adds r7, #12 8000ec2: 46bd mov sp, r7 8000ec4: f85d 7b04 ldr.w r7, [sp], #4 8000ec8: 4770 bx lr 8000eca: bf00 nop 8000ecc: 20000094 .word 0x20000094 08000ed0 : void LEDDesign_ColorBlue(void){ 8000ed0: b480 push {r7} 8000ed2: b083 sub sp, #12 8000ed4: af00 add r7, sp, #0 for(uint8_t i = 0; i < 64; ++i){ 8000ed6: 2300 movs r3, #0 8000ed8: 71fb strb r3, [r7, #7] 8000eda: e00a b.n 8000ef2 LEDData[i][0] = 0x00; 8000edc: 79fa ldrb r2, [r7, #7] 8000ede: 491b ldr r1, [pc, #108] ; (8000f4c ) 8000ee0: 4613 mov r3, r2 8000ee2: 005b lsls r3, r3, #1 8000ee4: 4413 add r3, r2 8000ee6: 440b add r3, r1 8000ee8: 2200 movs r2, #0 8000eea: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000eec: 79fb ldrb r3, [r7, #7] 8000eee: 3301 adds r3, #1 8000ef0: 71fb strb r3, [r7, #7] 8000ef2: 79fb ldrb r3, [r7, #7] 8000ef4: 2b3f cmp r3, #63 ; 0x3f 8000ef6: d9f1 bls.n 8000edc } for(uint8_t i = 0; i < 64; ++i){ 8000ef8: 2300 movs r3, #0 8000efa: 71bb strb r3, [r7, #6] 8000efc: e00b b.n 8000f16 LEDData[i][1] = 0x00; 8000efe: 79ba ldrb r2, [r7, #6] 8000f00: 4912 ldr r1, [pc, #72] ; (8000f4c ) 8000f02: 4613 mov r3, r2 8000f04: 005b lsls r3, r3, #1 8000f06: 4413 add r3, r2 8000f08: 440b add r3, r1 8000f0a: 3301 adds r3, #1 8000f0c: 2200 movs r2, #0 8000f0e: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000f10: 79bb ldrb r3, [r7, #6] 8000f12: 3301 adds r3, #1 8000f14: 71bb strb r3, [r7, #6] 8000f16: 79bb ldrb r3, [r7, #6] 8000f18: 2b3f cmp r3, #63 ; 0x3f 8000f1a: d9f0 bls.n 8000efe } for(uint8_t i = 0; i < 64; ++i){ 8000f1c: 2300 movs r3, #0 8000f1e: 717b strb r3, [r7, #5] 8000f20: e00b b.n 8000f3a LEDData[i][2] = 0xFF; 8000f22: 797a ldrb r2, [r7, #5] 8000f24: 4909 ldr r1, [pc, #36] ; (8000f4c ) 8000f26: 4613 mov r3, r2 8000f28: 005b lsls r3, r3, #1 8000f2a: 4413 add r3, r2 8000f2c: 440b add r3, r1 8000f2e: 3302 adds r3, #2 8000f30: 22ff movs r2, #255 ; 0xff 8000f32: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000f34: 797b ldrb r3, [r7, #5] 8000f36: 3301 adds r3, #1 8000f38: 717b strb r3, [r7, #5] 8000f3a: 797b ldrb r3, [r7, #5] 8000f3c: 2b3f cmp r3, #63 ; 0x3f 8000f3e: d9f0 bls.n 8000f22 } } 8000f40: bf00 nop 8000f42: 370c adds r7, #12 8000f44: 46bd mov sp, r7 8000f46: f85d 7b04 ldr.w r7, [sp], #4 8000f4a: 4770 bx lr 8000f4c: 20000094 .word 0x20000094 08000f50 : void LEDDesign_ColorGreen(void){ 8000f50: b480 push {r7} 8000f52: b083 sub sp, #12 8000f54: af00 add r7, sp, #0 for(uint8_t i = 0; i < 64; ++i){ 8000f56: 2300 movs r3, #0 8000f58: 71fb strb r3, [r7, #7] 8000f5a: e00a b.n 8000f72 LEDData[i][0] = 0xFF; 8000f5c: 79fa ldrb r2, [r7, #7] 8000f5e: 491b ldr r1, [pc, #108] ; (8000fcc ) 8000f60: 4613 mov r3, r2 8000f62: 005b lsls r3, r3, #1 8000f64: 4413 add r3, r2 8000f66: 440b add r3, r1 8000f68: 22ff movs r2, #255 ; 0xff 8000f6a: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000f6c: 79fb ldrb r3, [r7, #7] 8000f6e: 3301 adds r3, #1 8000f70: 71fb strb r3, [r7, #7] 8000f72: 79fb ldrb r3, [r7, #7] 8000f74: 2b3f cmp r3, #63 ; 0x3f 8000f76: d9f1 bls.n 8000f5c } for(uint8_t i = 0; i < 64; ++i){ 8000f78: 2300 movs r3, #0 8000f7a: 71bb strb r3, [r7, #6] 8000f7c: e00b b.n 8000f96 LEDData[i][1] = 0x00; 8000f7e: 79ba ldrb r2, [r7, #6] 8000f80: 4912 ldr r1, [pc, #72] ; (8000fcc ) 8000f82: 4613 mov r3, r2 8000f84: 005b lsls r3, r3, #1 8000f86: 4413 add r3, r2 8000f88: 440b add r3, r1 8000f8a: 3301 adds r3, #1 8000f8c: 2200 movs r2, #0 8000f8e: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000f90: 79bb ldrb r3, [r7, #6] 8000f92: 3301 adds r3, #1 8000f94: 71bb strb r3, [r7, #6] 8000f96: 79bb ldrb r3, [r7, #6] 8000f98: 2b3f cmp r3, #63 ; 0x3f 8000f9a: d9f0 bls.n 8000f7e } for(uint8_t i = 0; i < 64; ++i){ 8000f9c: 2300 movs r3, #0 8000f9e: 717b strb r3, [r7, #5] 8000fa0: e00b b.n 8000fba LEDData[i][2] = 0x00; 8000fa2: 797a ldrb r2, [r7, #5] 8000fa4: 4909 ldr r1, [pc, #36] ; (8000fcc ) 8000fa6: 4613 mov r3, r2 8000fa8: 005b lsls r3, r3, #1 8000faa: 4413 add r3, r2 8000fac: 440b add r3, r1 8000fae: 3302 adds r3, #2 8000fb0: 2200 movs r2, #0 8000fb2: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000fb4: 797b ldrb r3, [r7, #5] 8000fb6: 3301 adds r3, #1 8000fb8: 717b strb r3, [r7, #5] 8000fba: 797b ldrb r3, [r7, #5] 8000fbc: 2b3f cmp r3, #63 ; 0x3f 8000fbe: d9f0 bls.n 8000fa2 } } 8000fc0: bf00 nop 8000fc2: 370c adds r7, #12 8000fc4: 46bd mov sp, r7 8000fc6: f85d 7b04 ldr.w r7, [sp], #4 8000fca: 4770 bx lr 8000fcc: 20000094 .word 0x20000094 08000fd0 : void LEDDesign_ColorRed(void){ 8000fd0: b480 push {r7} 8000fd2: b083 sub sp, #12 8000fd4: af00 add r7, sp, #0 for(uint8_t i = 0; i < 64; ++i){ 8000fd6: 2300 movs r3, #0 8000fd8: 71fb strb r3, [r7, #7] 8000fda: e00a b.n 8000ff2 LEDData[i][0] = 0x00; 8000fdc: 79fa ldrb r2, [r7, #7] 8000fde: 491b ldr r1, [pc, #108] ; (800104c ) 8000fe0: 4613 mov r3, r2 8000fe2: 005b lsls r3, r3, #1 8000fe4: 4413 add r3, r2 8000fe6: 440b add r3, r1 8000fe8: 2200 movs r2, #0 8000fea: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8000fec: 79fb ldrb r3, [r7, #7] 8000fee: 3301 adds r3, #1 8000ff0: 71fb strb r3, [r7, #7] 8000ff2: 79fb ldrb r3, [r7, #7] 8000ff4: 2b3f cmp r3, #63 ; 0x3f 8000ff6: d9f1 bls.n 8000fdc } for(uint8_t i = 0; i < 64; ++i){ 8000ff8: 2300 movs r3, #0 8000ffa: 71bb strb r3, [r7, #6] 8000ffc: e00b b.n 8001016 LEDData[i][1] = 0xFF; 8000ffe: 79ba ldrb r2, [r7, #6] 8001000: 4912 ldr r1, [pc, #72] ; (800104c ) 8001002: 4613 mov r3, r2 8001004: 005b lsls r3, r3, #1 8001006: 4413 add r3, r2 8001008: 440b add r3, r1 800100a: 3301 adds r3, #1 800100c: 22ff movs r2, #255 ; 0xff 800100e: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8001010: 79bb ldrb r3, [r7, #6] 8001012: 3301 adds r3, #1 8001014: 71bb strb r3, [r7, #6] 8001016: 79bb ldrb r3, [r7, #6] 8001018: 2b3f cmp r3, #63 ; 0x3f 800101a: d9f0 bls.n 8000ffe } for(uint8_t i = 0; i < 64; ++i){ 800101c: 2300 movs r3, #0 800101e: 717b strb r3, [r7, #5] 8001020: e00b b.n 800103a LEDData[i][2] = 0x00; 8001022: 797a ldrb r2, [r7, #5] 8001024: 4909 ldr r1, [pc, #36] ; (800104c ) 8001026: 4613 mov r3, r2 8001028: 005b lsls r3, r3, #1 800102a: 4413 add r3, r2 800102c: 440b add r3, r1 800102e: 3302 adds r3, #2 8001030: 2200 movs r2, #0 8001032: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8001034: 797b ldrb r3, [r7, #5] 8001036: 3301 adds r3, #1 8001038: 717b strb r3, [r7, #5] 800103a: 797b ldrb r3, [r7, #5] 800103c: 2b3f cmp r3, #63 ; 0x3f 800103e: d9f0 bls.n 8001022 } } 8001040: bf00 nop 8001042: 370c adds r7, #12 8001044: 46bd mov sp, r7 8001046: f85d 7b04 ldr.w r7, [sp], #4 800104a: 4770 bx lr 800104c: 20000094 .word 0x20000094 08001050 : void LEDDesign_Crazy(void){ 8001050: b590 push {r4, r7, lr} 8001052: b085 sub sp, #20 8001054: af00 add r7, sp, #0 HAL_Delay(50); 8001056: 2032 movs r0, #50 ; 0x32 8001058: f000 ff96 bl 8001f88 for(uint8_t i = 0; i < 64; ++i){ 800105c: 2300 movs r3, #0 800105e: 73fb strb r3, [r7, #15] 8001060: e029 b.n 80010b6 for(uint8_t j = 0; j < 3; ++j){ 8001062: 2300 movs r3, #0 8001064: 73bb strb r3, [r7, #14] 8001066: e020 b.n 80010aa LEDData[i][j] = (uint8_t) (0xFF * (((float) rand()) / RAND_MAX)); 8001068: f003 f958 bl 800431c 800106c: ee07 0a90 vmov s15, r0 8001070: eeb8 7ae7 vcvt.f32.s32 s14, s15 8001074: eddf 6a13 vldr s13, [pc, #76] ; 80010c4 8001078: eec7 7a26 vdiv.f32 s15, s14, s13 800107c: ed9f 7a12 vldr s14, [pc, #72] ; 80010c8 8001080: ee67 7a87 vmul.f32 s15, s15, s14 8001084: 7bfa ldrb r2, [r7, #15] 8001086: 7bb9 ldrb r1, [r7, #14] 8001088: eefc 7ae7 vcvt.u32.f32 s15, s15 800108c: edc7 7a01 vstr s15, [r7, #4] 8001090: 793b ldrb r3, [r7, #4] 8001092: b2dc uxtb r4, r3 8001094: 480d ldr r0, [pc, #52] ; (80010cc ) 8001096: 4613 mov r3, r2 8001098: 005b lsls r3, r3, #1 800109a: 4413 add r3, r2 800109c: 4403 add r3, r0 800109e: 440b add r3, r1 80010a0: 4622 mov r2, r4 80010a2: 701a strb r2, [r3, #0] for(uint8_t j = 0; j < 3; ++j){ 80010a4: 7bbb ldrb r3, [r7, #14] 80010a6: 3301 adds r3, #1 80010a8: 73bb strb r3, [r7, #14] 80010aa: 7bbb ldrb r3, [r7, #14] 80010ac: 2b02 cmp r3, #2 80010ae: d9db bls.n 8001068 for(uint8_t i = 0; i < 64; ++i){ 80010b0: 7bfb ldrb r3, [r7, #15] 80010b2: 3301 adds r3, #1 80010b4: 73fb strb r3, [r7, #15] 80010b6: 7bfb ldrb r3, [r7, #15] 80010b8: 2b3f cmp r3, #63 ; 0x3f 80010ba: d9d2 bls.n 8001062 } } } 80010bc: bf00 nop 80010be: 3714 adds r7, #20 80010c0: 46bd mov sp, r7 80010c2: bd90 pop {r4, r7, pc} 80010c4: 4f000000 .word 0x4f000000 80010c8: 437f0000 .word 0x437f0000 80010cc: 20000094 .word 0x20000094 080010d0 : void LEDDesign_Smile(void){ 80010d0: b580 push {r7, lr} 80010d2: b082 sub sp, #8 80010d4: af00 add r7, sp, #0 uint8_t currentSoundLevel = getSoundLevel(); 80010d6: f7ff fe17 bl 8000d08 80010da: 4603 mov r3, r0 80010dc: 71fb strb r3, [r7, #7] LEDData[0][0] = currentSoundLevel; 80010de: 4ac8 ldr r2, [pc, #800] ; (8001400 ) 80010e0: 79fb ldrb r3, [r7, #7] 80010e2: 7013 strb r3, [r2, #0] LEDData[0][1] = currentSoundLevel; 80010e4: 4ac6 ldr r2, [pc, #792] ; (8001400 ) 80010e6: 79fb ldrb r3, [r7, #7] 80010e8: 7053 strb r3, [r2, #1] LEDData[0][2] = currentSoundLevel; 80010ea: 4ac5 ldr r2, [pc, #788] ; (8001400 ) 80010ec: 79fb ldrb r3, [r7, #7] 80010ee: 7093 strb r3, [r2, #2] LEDData[1][0] = 0x00; 80010f0: 4bc3 ldr r3, [pc, #780] ; (8001400 ) 80010f2: 2200 movs r2, #0 80010f4: 70da strb r2, [r3, #3] LEDData[1][1] = 0x00; 80010f6: 4bc2 ldr r3, [pc, #776] ; (8001400 ) 80010f8: 2200 movs r2, #0 80010fa: 711a strb r2, [r3, #4] LEDData[1][2] = 0x00; 80010fc: 4bc0 ldr r3, [pc, #768] ; (8001400 ) 80010fe: 2200 movs r2, #0 8001100: 715a strb r2, [r3, #5] LEDData[2][0] = 0x00; 8001102: 4bbf ldr r3, [pc, #764] ; (8001400 ) 8001104: 2200 movs r2, #0 8001106: 719a strb r2, [r3, #6] LEDData[2][1] = 0x00; 8001108: 4bbd ldr r3, [pc, #756] ; (8001400 ) 800110a: 2200 movs r2, #0 800110c: 71da strb r2, [r3, #7] LEDData[2][2] = 0x00; 800110e: 4bbc ldr r3, [pc, #752] ; (8001400 ) 8001110: 2200 movs r2, #0 8001112: 721a strb r2, [r3, #8] LEDData[3][0] = 0x00; 8001114: 4bba ldr r3, [pc, #744] ; (8001400 ) 8001116: 2200 movs r2, #0 8001118: 725a strb r2, [r3, #9] LEDData[3][1] = 0x00; 800111a: 4bb9 ldr r3, [pc, #740] ; (8001400 ) 800111c: 2200 movs r2, #0 800111e: 729a strb r2, [r3, #10] LEDData[3][2] = 0x00; 8001120: 4bb7 ldr r3, [pc, #732] ; (8001400 ) 8001122: 2200 movs r2, #0 8001124: 72da strb r2, [r3, #11] LEDData[4][0] = 0x00; 8001126: 4bb6 ldr r3, [pc, #728] ; (8001400 ) 8001128: 2200 movs r2, #0 800112a: 731a strb r2, [r3, #12] LEDData[4][1] = 0x00; 800112c: 4bb4 ldr r3, [pc, #720] ; (8001400 ) 800112e: 2200 movs r2, #0 8001130: 735a strb r2, [r3, #13] LEDData[4][2] = 0x7F; 8001132: 4bb3 ldr r3, [pc, #716] ; (8001400 ) 8001134: 227f movs r2, #127 ; 0x7f 8001136: 739a strb r2, [r3, #14] LEDData[5][0] = 0x00; 8001138: 4bb1 ldr r3, [pc, #708] ; (8001400 ) 800113a: 2200 movs r2, #0 800113c: 73da strb r2, [r3, #15] LEDData[5][1] = 0x00; 800113e: 4bb0 ldr r3, [pc, #704] ; (8001400 ) 8001140: 2200 movs r2, #0 8001142: 741a strb r2, [r3, #16] LEDData[5][2] = 0x00; 8001144: 4bae ldr r3, [pc, #696] ; (8001400 ) 8001146: 2200 movs r2, #0 8001148: 745a strb r2, [r3, #17] LEDData[6][0] = 0x00; 800114a: 4bad ldr r3, [pc, #692] ; (8001400 ) 800114c: 2200 movs r2, #0 800114e: 749a strb r2, [r3, #18] LEDData[6][1] = 0x00; 8001150: 4bab ldr r3, [pc, #684] ; (8001400 ) 8001152: 2200 movs r2, #0 8001154: 74da strb r2, [r3, #19] LEDData[6][2] = 0x00; 8001156: 4baa ldr r3, [pc, #680] ; (8001400 ) 8001158: 2200 movs r2, #0 800115a: 751a strb r2, [r3, #20] LEDData[7][0] = 0x00; 800115c: 4ba8 ldr r3, [pc, #672] ; (8001400 ) 800115e: 2200 movs r2, #0 8001160: 755a strb r2, [r3, #21] LEDData[7][1] = 0x00; 8001162: 4ba7 ldr r3, [pc, #668] ; (8001400 ) 8001164: 2200 movs r2, #0 8001166: 759a strb r2, [r3, #22] LEDData[7][2] = 0x00; 8001168: 4ba5 ldr r3, [pc, #660] ; (8001400 ) 800116a: 2200 movs r2, #0 800116c: 75da strb r2, [r3, #23] LEDData[8][0] = 0x00; 800116e: 4ba4 ldr r3, [pc, #656] ; (8001400 ) 8001170: 2200 movs r2, #0 8001172: 761a strb r2, [r3, #24] LEDData[8][1] = 0x00; 8001174: 4ba2 ldr r3, [pc, #648] ; (8001400 ) 8001176: 2200 movs r2, #0 8001178: 765a strb r2, [r3, #25] LEDData[8][2] = 0x00; 800117a: 4ba1 ldr r3, [pc, #644] ; (8001400 ) 800117c: 2200 movs r2, #0 800117e: 769a strb r2, [r3, #26] LEDData[9][0] = 0x00; 8001180: 4b9f ldr r3, [pc, #636] ; (8001400 ) 8001182: 2200 movs r2, #0 8001184: 76da strb r2, [r3, #27] LEDData[9][1] = 0x00; 8001186: 4b9e ldr r3, [pc, #632] ; (8001400 ) 8001188: 2200 movs r2, #0 800118a: 771a strb r2, [r3, #28] LEDData[9][2] = 0x00; 800118c: 4b9c ldr r3, [pc, #624] ; (8001400 ) 800118e: 2200 movs r2, #0 8001190: 775a strb r2, [r3, #29] LEDData[10][0] = 0x00; 8001192: 4b9b ldr r3, [pc, #620] ; (8001400 ) 8001194: 2200 movs r2, #0 8001196: 779a strb r2, [r3, #30] LEDData[10][1] = 0x00; 8001198: 4b99 ldr r3, [pc, #612] ; (8001400 ) 800119a: 2200 movs r2, #0 800119c: 77da strb r2, [r3, #31] LEDData[10][2] = 0x7F; 800119e: 4b98 ldr r3, [pc, #608] ; (8001400 ) 80011a0: 227f movs r2, #127 ; 0x7f 80011a2: f883 2020 strb.w r2, [r3, #32] LEDData[11][0] = 0x00; 80011a6: 4b96 ldr r3, [pc, #600] ; (8001400 ) 80011a8: 2200 movs r2, #0 80011aa: f883 2021 strb.w r2, [r3, #33] ; 0x21 LEDData[11][1] = 0x00; 80011ae: 4b94 ldr r3, [pc, #592] ; (8001400 ) 80011b0: 2200 movs r2, #0 80011b2: f883 2022 strb.w r2, [r3, #34] ; 0x22 LEDData[11][2] = 0x00; 80011b6: 4b92 ldr r3, [pc, #584] ; (8001400 ) 80011b8: 2200 movs r2, #0 80011ba: f883 2023 strb.w r2, [r3, #35] ; 0x23 LEDData[12][0] = 0x00; 80011be: 4b90 ldr r3, [pc, #576] ; (8001400 ) 80011c0: 2200 movs r2, #0 80011c2: f883 2024 strb.w r2, [r3, #36] ; 0x24 LEDData[12][1] = 0x00; 80011c6: 4b8e ldr r3, [pc, #568] ; (8001400 ) 80011c8: 2200 movs r2, #0 80011ca: f883 2025 strb.w r2, [r3, #37] ; 0x25 LEDData[12][2] = 0x00; 80011ce: 4b8c ldr r3, [pc, #560] ; (8001400 ) 80011d0: 2200 movs r2, #0 80011d2: f883 2026 strb.w r2, [r3, #38] ; 0x26 LEDData[13][0] = 0x00; 80011d6: 4b8a ldr r3, [pc, #552] ; (8001400 ) 80011d8: 2200 movs r2, #0 80011da: f883 2027 strb.w r2, [r3, #39] ; 0x27 LEDData[13][1] = 0x00; 80011de: 4b88 ldr r3, [pc, #544] ; (8001400 ) 80011e0: 2200 movs r2, #0 80011e2: f883 2028 strb.w r2, [r3, #40] ; 0x28 LEDData[13][2] = 0x00; 80011e6: 4b86 ldr r3, [pc, #536] ; (8001400 ) 80011e8: 2200 movs r2, #0 80011ea: f883 2029 strb.w r2, [r3, #41] ; 0x29 LEDData[14][0] = 0x00; 80011ee: 4b84 ldr r3, [pc, #528] ; (8001400 ) 80011f0: 2200 movs r2, #0 80011f2: f883 202a strb.w r2, [r3, #42] ; 0x2a LEDData[14][1] = 0x00; 80011f6: 4b82 ldr r3, [pc, #520] ; (8001400 ) 80011f8: 2200 movs r2, #0 80011fa: f883 202b strb.w r2, [r3, #43] ; 0x2b LEDData[14][2] = 0x00; 80011fe: 4b80 ldr r3, [pc, #512] ; (8001400 ) 8001200: 2200 movs r2, #0 8001202: f883 202c strb.w r2, [r3, #44] ; 0x2c LEDData[15][0] = 0x00; 8001206: 4b7e ldr r3, [pc, #504] ; (8001400 ) 8001208: 2200 movs r2, #0 800120a: f883 202d strb.w r2, [r3, #45] ; 0x2d LEDData[15][1] = 0x00; 800120e: 4b7c ldr r3, [pc, #496] ; (8001400 ) 8001210: 2200 movs r2, #0 8001212: f883 202e strb.w r2, [r3, #46] ; 0x2e LEDData[15][2] = 0x00; 8001216: 4b7a ldr r3, [pc, #488] ; (8001400 ) 8001218: 2200 movs r2, #0 800121a: f883 202f strb.w r2, [r3, #47] ; 0x2f LEDData[16][0] = 0x00; 800121e: 4b78 ldr r3, [pc, #480] ; (8001400 ) 8001220: 2200 movs r2, #0 8001222: f883 2030 strb.w r2, [r3, #48] ; 0x30 LEDData[16][1] = 0x00; 8001226: 4b76 ldr r3, [pc, #472] ; (8001400 ) 8001228: 2200 movs r2, #0 800122a: f883 2031 strb.w r2, [r3, #49] ; 0x31 LEDData[16][2] = 0x00; 800122e: 4b74 ldr r3, [pc, #464] ; (8001400 ) 8001230: 2200 movs r2, #0 8001232: f883 2032 strb.w r2, [r3, #50] ; 0x32 LEDData[17][0] = 0x00; 8001236: 4b72 ldr r3, [pc, #456] ; (8001400 ) 8001238: 2200 movs r2, #0 800123a: f883 2033 strb.w r2, [r3, #51] ; 0x33 LEDData[17][1] = 0x00; 800123e: 4b70 ldr r3, [pc, #448] ; (8001400 ) 8001240: 2200 movs r2, #0 8001242: f883 2034 strb.w r2, [r3, #52] ; 0x34 LEDData[17][2] = 0x00; 8001246: 4b6e ldr r3, [pc, #440] ; (8001400 ) 8001248: 2200 movs r2, #0 800124a: f883 2035 strb.w r2, [r3, #53] ; 0x35 LEDData[18][0] = 0x00; 800124e: 4b6c ldr r3, [pc, #432] ; (8001400 ) 8001250: 2200 movs r2, #0 8001252: f883 2036 strb.w r2, [r3, #54] ; 0x36 LEDData[18][1] = 0x00; 8001256: 4b6a ldr r3, [pc, #424] ; (8001400 ) 8001258: 2200 movs r2, #0 800125a: f883 2037 strb.w r2, [r3, #55] ; 0x37 LEDData[18][2] = 0x00; 800125e: 4b68 ldr r3, [pc, #416] ; (8001400 ) 8001260: 2200 movs r2, #0 8001262: f883 2038 strb.w r2, [r3, #56] ; 0x38 LEDData[19][0] = 0x00; 8001266: 4b66 ldr r3, [pc, #408] ; (8001400 ) 8001268: 2200 movs r2, #0 800126a: f883 2039 strb.w r2, [r3, #57] ; 0x39 LEDData[19][1] = 0x00; 800126e: 4b64 ldr r3, [pc, #400] ; (8001400 ) 8001270: 2200 movs r2, #0 8001272: f883 203a strb.w r2, [r3, #58] ; 0x3a LEDData[19][2] = 0x00; 8001276: 4b62 ldr r3, [pc, #392] ; (8001400 ) 8001278: 2200 movs r2, #0 800127a: f883 203b strb.w r2, [r3, #59] ; 0x3b LEDData[20][0] = 0x00; 800127e: 4b60 ldr r3, [pc, #384] ; (8001400 ) 8001280: 2200 movs r2, #0 8001282: f883 203c strb.w r2, [r3, #60] ; 0x3c LEDData[20][1] = 0x00; 8001286: 4b5e ldr r3, [pc, #376] ; (8001400 ) 8001288: 2200 movs r2, #0 800128a: f883 203d strb.w r2, [r3, #61] ; 0x3d LEDData[20][2] = 0x00; 800128e: 4b5c ldr r3, [pc, #368] ; (8001400 ) 8001290: 2200 movs r2, #0 8001292: f883 203e strb.w r2, [r3, #62] ; 0x3e LEDData[21][0] = 0x00; 8001296: 4b5a ldr r3, [pc, #360] ; (8001400 ) 8001298: 2200 movs r2, #0 800129a: f883 203f strb.w r2, [r3, #63] ; 0x3f LEDData[21][1] = 0x00; 800129e: 4b58 ldr r3, [pc, #352] ; (8001400 ) 80012a0: 2200 movs r2, #0 80012a2: f883 2040 strb.w r2, [r3, #64] ; 0x40 LEDData[21][2] = 0x7F; 80012a6: 4b56 ldr r3, [pc, #344] ; (8001400 ) 80012a8: 227f movs r2, #127 ; 0x7f 80012aa: f883 2041 strb.w r2, [r3, #65] ; 0x41 LEDData[22][0] = 0x00; 80012ae: 4b54 ldr r3, [pc, #336] ; (8001400 ) 80012b0: 2200 movs r2, #0 80012b2: f883 2042 strb.w r2, [r3, #66] ; 0x42 LEDData[22][1] = 0x00; 80012b6: 4b52 ldr r3, [pc, #328] ; (8001400 ) 80012b8: 2200 movs r2, #0 80012ba: f883 2043 strb.w r2, [r3, #67] ; 0x43 LEDData[22][2] = 0x00; 80012be: 4b50 ldr r3, [pc, #320] ; (8001400 ) 80012c0: 2200 movs r2, #0 80012c2: f883 2044 strb.w r2, [r3, #68] ; 0x44 LEDData[23][0] = 0x00; 80012c6: 4b4e ldr r3, [pc, #312] ; (8001400 ) 80012c8: 2200 movs r2, #0 80012ca: f883 2045 strb.w r2, [r3, #69] ; 0x45 LEDData[23][1] = 0x00; 80012ce: 4b4c ldr r3, [pc, #304] ; (8001400 ) 80012d0: 2200 movs r2, #0 80012d2: f883 2046 strb.w r2, [r3, #70] ; 0x46 LEDData[23][2] = 0x00; 80012d6: 4b4a ldr r3, [pc, #296] ; (8001400 ) 80012d8: 2200 movs r2, #0 80012da: f883 2047 strb.w r2, [r3, #71] ; 0x47 LEDData[24][0] = 0x00; 80012de: 4b48 ldr r3, [pc, #288] ; (8001400 ) 80012e0: 2200 movs r2, #0 80012e2: f883 2048 strb.w r2, [r3, #72] ; 0x48 LEDData[24][1] = 0x00; 80012e6: 4b46 ldr r3, [pc, #280] ; (8001400 ) 80012e8: 2200 movs r2, #0 80012ea: f883 2049 strb.w r2, [r3, #73] ; 0x49 LEDData[24][2] = 0x00; 80012ee: 4b44 ldr r3, [pc, #272] ; (8001400 ) 80012f0: 2200 movs r2, #0 80012f2: f883 204a strb.w r2, [r3, #74] ; 0x4a LEDData[25][0] = 0x00; 80012f6: 4b42 ldr r3, [pc, #264] ; (8001400 ) 80012f8: 2200 movs r2, #0 80012fa: f883 204b strb.w r2, [r3, #75] ; 0x4b LEDData[25][1] = 0x00; 80012fe: 4b40 ldr r3, [pc, #256] ; (8001400 ) 8001300: 2200 movs r2, #0 8001302: f883 204c strb.w r2, [r3, #76] ; 0x4c LEDData[25][2] = 0x00; 8001306: 4b3e ldr r3, [pc, #248] ; (8001400 ) 8001308: 2200 movs r2, #0 800130a: f883 204d strb.w r2, [r3, #77] ; 0x4d LEDData[26][0] = 0x00; 800130e: 4b3c ldr r3, [pc, #240] ; (8001400 ) 8001310: 2200 movs r2, #0 8001312: f883 204e strb.w r2, [r3, #78] ; 0x4e LEDData[26][1] = 0x00; 8001316: 4b3a ldr r3, [pc, #232] ; (8001400 ) 8001318: 2200 movs r2, #0 800131a: f883 204f strb.w r2, [r3, #79] ; 0x4f LEDData[26][2] = 0x7F; 800131e: 4b38 ldr r3, [pc, #224] ; (8001400 ) 8001320: 227f movs r2, #127 ; 0x7f 8001322: f883 2050 strb.w r2, [r3, #80] ; 0x50 LEDData[27][0] = 0x00; 8001326: 4b36 ldr r3, [pc, #216] ; (8001400 ) 8001328: 2200 movs r2, #0 800132a: f883 2051 strb.w r2, [r3, #81] ; 0x51 LEDData[27][1] = 0x00; 800132e: 4b34 ldr r3, [pc, #208] ; (8001400 ) 8001330: 2200 movs r2, #0 8001332: f883 2052 strb.w r2, [r3, #82] ; 0x52 LEDData[27][2] = 0x00; 8001336: 4b32 ldr r3, [pc, #200] ; (8001400 ) 8001338: 2200 movs r2, #0 800133a: f883 2053 strb.w r2, [r3, #83] ; 0x53 LEDData[28][0] = 0x00; 800133e: 4b30 ldr r3, [pc, #192] ; (8001400 ) 8001340: 2200 movs r2, #0 8001342: f883 2054 strb.w r2, [r3, #84] ; 0x54 LEDData[28][1] = 0x00; 8001346: 4b2e ldr r3, [pc, #184] ; (8001400 ) 8001348: 2200 movs r2, #0 800134a: f883 2055 strb.w r2, [r3, #85] ; 0x55 LEDData[28][2] = 0x00; 800134e: 4b2c ldr r3, [pc, #176] ; (8001400 ) 8001350: 2200 movs r2, #0 8001352: f883 2056 strb.w r2, [r3, #86] ; 0x56 LEDData[29][0] = 0x00; 8001356: 4b2a ldr r3, [pc, #168] ; (8001400 ) 8001358: 2200 movs r2, #0 800135a: f883 2057 strb.w r2, [r3, #87] ; 0x57 LEDData[29][1] = 0x00; 800135e: 4b28 ldr r3, [pc, #160] ; (8001400 ) 8001360: 2200 movs r2, #0 8001362: f883 2058 strb.w r2, [r3, #88] ; 0x58 LEDData[29][2] = 0x00; 8001366: 4b26 ldr r3, [pc, #152] ; (8001400 ) 8001368: 2200 movs r2, #0 800136a: f883 2059 strb.w r2, [r3, #89] ; 0x59 LEDData[30][0] = 0x00; 800136e: 4b24 ldr r3, [pc, #144] ; (8001400 ) 8001370: 2200 movs r2, #0 8001372: f883 205a strb.w r2, [r3, #90] ; 0x5a LEDData[30][1] = 0x00; 8001376: 4b22 ldr r3, [pc, #136] ; (8001400 ) 8001378: 2200 movs r2, #0 800137a: f883 205b strb.w r2, [r3, #91] ; 0x5b LEDData[30][2] = 0x00; 800137e: 4b20 ldr r3, [pc, #128] ; (8001400 ) 8001380: 2200 movs r2, #0 8001382: f883 205c strb.w r2, [r3, #92] ; 0x5c LEDData[31][0] = 0x00; 8001386: 4b1e ldr r3, [pc, #120] ; (8001400 ) 8001388: 2200 movs r2, #0 800138a: f883 205d strb.w r2, [r3, #93] ; 0x5d LEDData[31][1] = 0x00; 800138e: 4b1c ldr r3, [pc, #112] ; (8001400 ) 8001390: 2200 movs r2, #0 8001392: f883 205e strb.w r2, [r3, #94] ; 0x5e LEDData[31][2] = 0x00; 8001396: 4b1a ldr r3, [pc, #104] ; (8001400 ) 8001398: 2200 movs r2, #0 800139a: f883 205f strb.w r2, [r3, #95] ; 0x5f LEDData[32][0] = 0x00; 800139e: 4b18 ldr r3, [pc, #96] ; (8001400 ) 80013a0: 2200 movs r2, #0 80013a2: f883 2060 strb.w r2, [r3, #96] ; 0x60 LEDData[32][1] = 0x00; 80013a6: 4b16 ldr r3, [pc, #88] ; (8001400 ) 80013a8: 2200 movs r2, #0 80013aa: f883 2061 strb.w r2, [r3, #97] ; 0x61 LEDData[32][2] = 0x00; 80013ae: 4b14 ldr r3, [pc, #80] ; (8001400 ) 80013b0: 2200 movs r2, #0 80013b2: f883 2062 strb.w r2, [r3, #98] ; 0x62 LEDData[33][0] = 0x00; 80013b6: 4b12 ldr r3, [pc, #72] ; (8001400 ) 80013b8: 2200 movs r2, #0 80013ba: f883 2063 strb.w r2, [r3, #99] ; 0x63 LEDData[33][1] = 0x00; 80013be: 4b10 ldr r3, [pc, #64] ; (8001400 ) 80013c0: 2200 movs r2, #0 80013c2: f883 2064 strb.w r2, [r3, #100] ; 0x64 LEDData[33][2] = 0x00; 80013c6: 4b0e ldr r3, [pc, #56] ; (8001400 ) 80013c8: 2200 movs r2, #0 80013ca: f883 2065 strb.w r2, [r3, #101] ; 0x65 LEDData[34][0] = 0x00; 80013ce: 4b0c ldr r3, [pc, #48] ; (8001400 ) 80013d0: 2200 movs r2, #0 80013d2: f883 2066 strb.w r2, [r3, #102] ; 0x66 LEDData[34][1] = 0x00; 80013d6: 4b0a ldr r3, [pc, #40] ; (8001400 ) 80013d8: 2200 movs r2, #0 80013da: f883 2067 strb.w r2, [r3, #103] ; 0x67 LEDData[34][2] = 0x00; 80013de: 4b08 ldr r3, [pc, #32] ; (8001400 ) 80013e0: 2200 movs r2, #0 80013e2: f883 2068 strb.w r2, [r3, #104] ; 0x68 LEDData[35][0] = 0x00; 80013e6: 4b06 ldr r3, [pc, #24] ; (8001400 ) 80013e8: 2200 movs r2, #0 80013ea: f883 2069 strb.w r2, [r3, #105] ; 0x69 LEDData[35][1] = 0x00; 80013ee: 4b04 ldr r3, [pc, #16] ; (8001400 ) 80013f0: 2200 movs r2, #0 80013f2: f883 206a strb.w r2, [r3, #106] ; 0x6a LEDData[35][2] = 0x00; 80013f6: 4b02 ldr r3, [pc, #8] ; (8001400 ) 80013f8: 2200 movs r2, #0 80013fa: f883 206b strb.w r2, [r3, #107] ; 0x6b 80013fe: e001 b.n 8001404 8001400: 20000094 .word 0x20000094 LEDData[36][0] = 0x00; 8001404: 4ba9 ldr r3, [pc, #676] ; (80016ac ) 8001406: 2200 movs r2, #0 8001408: f883 206c strb.w r2, [r3, #108] ; 0x6c LEDData[36][1] = 0x00; 800140c: 4ba7 ldr r3, [pc, #668] ; (80016ac ) 800140e: 2200 movs r2, #0 8001410: f883 206d strb.w r2, [r3, #109] ; 0x6d LEDData[36][2] = 0x00; 8001414: 4ba5 ldr r3, [pc, #660] ; (80016ac ) 8001416: 2200 movs r2, #0 8001418: f883 206e strb.w r2, [r3, #110] ; 0x6e LEDData[37][0] = 0x00; 800141c: 4ba3 ldr r3, [pc, #652] ; (80016ac ) 800141e: 2200 movs r2, #0 8001420: f883 206f strb.w r2, [r3, #111] ; 0x6f LEDData[37][1] = 0x00; 8001424: 4ba1 ldr r3, [pc, #644] ; (80016ac ) 8001426: 2200 movs r2, #0 8001428: f883 2070 strb.w r2, [r3, #112] ; 0x70 LEDData[37][2] = 0x7F; 800142c: 4b9f ldr r3, [pc, #636] ; (80016ac ) 800142e: 227f movs r2, #127 ; 0x7f 8001430: f883 2071 strb.w r2, [r3, #113] ; 0x71 LEDData[38][0] = 0x00; 8001434: 4b9d ldr r3, [pc, #628] ; (80016ac ) 8001436: 2200 movs r2, #0 8001438: f883 2072 strb.w r2, [r3, #114] ; 0x72 LEDData[38][1] = 0x00; 800143c: 4b9b ldr r3, [pc, #620] ; (80016ac ) 800143e: 2200 movs r2, #0 8001440: f883 2073 strb.w r2, [r3, #115] ; 0x73 LEDData[38][2] = 0x00; 8001444: 4b99 ldr r3, [pc, #612] ; (80016ac ) 8001446: 2200 movs r2, #0 8001448: f883 2074 strb.w r2, [r3, #116] ; 0x74 LEDData[39][0] = 0x00; 800144c: 4b97 ldr r3, [pc, #604] ; (80016ac ) 800144e: 2200 movs r2, #0 8001450: f883 2075 strb.w r2, [r3, #117] ; 0x75 LEDData[39][1] = 0x00; 8001454: 4b95 ldr r3, [pc, #596] ; (80016ac ) 8001456: 2200 movs r2, #0 8001458: f883 2076 strb.w r2, [r3, #118] ; 0x76 LEDData[39][2] = 0x00; 800145c: 4b93 ldr r3, [pc, #588] ; (80016ac ) 800145e: 2200 movs r2, #0 8001460: f883 2077 strb.w r2, [r3, #119] ; 0x77 LEDData[40][0] = 0x00; 8001464: 4b91 ldr r3, [pc, #580] ; (80016ac ) 8001466: 2200 movs r2, #0 8001468: f883 2078 strb.w r2, [r3, #120] ; 0x78 LEDData[40][1] = 0x00; 800146c: 4b8f ldr r3, [pc, #572] ; (80016ac ) 800146e: 2200 movs r2, #0 8001470: f883 2079 strb.w r2, [r3, #121] ; 0x79 LEDData[40][2] = 0x00; 8001474: 4b8d ldr r3, [pc, #564] ; (80016ac ) 8001476: 2200 movs r2, #0 8001478: f883 207a strb.w r2, [r3, #122] ; 0x7a LEDData[41][0] = 0x00; 800147c: 4b8b ldr r3, [pc, #556] ; (80016ac ) 800147e: 2200 movs r2, #0 8001480: f883 207b strb.w r2, [r3, #123] ; 0x7b LEDData[41][1] = 0x00; 8001484: 4b89 ldr r3, [pc, #548] ; (80016ac ) 8001486: 2200 movs r2, #0 8001488: f883 207c strb.w r2, [r3, #124] ; 0x7c LEDData[41][2] = 0x00; 800148c: 4b87 ldr r3, [pc, #540] ; (80016ac ) 800148e: 2200 movs r2, #0 8001490: f883 207d strb.w r2, [r3, #125] ; 0x7d LEDData[42][0] = 0x00; 8001494: 4b85 ldr r3, [pc, #532] ; (80016ac ) 8001496: 2200 movs r2, #0 8001498: f883 207e strb.w r2, [r3, #126] ; 0x7e LEDData[42][1] = 0x00; 800149c: 4b83 ldr r3, [pc, #524] ; (80016ac ) 800149e: 2200 movs r2, #0 80014a0: f883 207f strb.w r2, [r3, #127] ; 0x7f LEDData[42][2] = 0x7F; 80014a4: 4b81 ldr r3, [pc, #516] ; (80016ac ) 80014a6: 227f movs r2, #127 ; 0x7f 80014a8: f883 2080 strb.w r2, [r3, #128] ; 0x80 LEDData[43][0] = 0x00; 80014ac: 4b7f ldr r3, [pc, #508] ; (80016ac ) 80014ae: 2200 movs r2, #0 80014b0: f883 2081 strb.w r2, [r3, #129] ; 0x81 LEDData[43][1] = 0x00; 80014b4: 4b7d ldr r3, [pc, #500] ; (80016ac ) 80014b6: 2200 movs r2, #0 80014b8: f883 2082 strb.w r2, [r3, #130] ; 0x82 LEDData[43][2] = 0x00; 80014bc: 4b7b ldr r3, [pc, #492] ; (80016ac ) 80014be: 2200 movs r2, #0 80014c0: f883 2083 strb.w r2, [r3, #131] ; 0x83 LEDData[44][0] = 0x00; 80014c4: 4b79 ldr r3, [pc, #484] ; (80016ac ) 80014c6: 2200 movs r2, #0 80014c8: f883 2084 strb.w r2, [r3, #132] ; 0x84 LEDData[44][1] = 0x00; 80014cc: 4b77 ldr r3, [pc, #476] ; (80016ac ) 80014ce: 2200 movs r2, #0 80014d0: f883 2085 strb.w r2, [r3, #133] ; 0x85 LEDData[44][2] = 0x00; 80014d4: 4b75 ldr r3, [pc, #468] ; (80016ac ) 80014d6: 2200 movs r2, #0 80014d8: f883 2086 strb.w r2, [r3, #134] ; 0x86 LEDData[45][0] = 0x00; 80014dc: 4b73 ldr r3, [pc, #460] ; (80016ac ) 80014de: 2200 movs r2, #0 80014e0: f883 2087 strb.w r2, [r3, #135] ; 0x87 LEDData[45][1] = 0x00; 80014e4: 4b71 ldr r3, [pc, #452] ; (80016ac ) 80014e6: 2200 movs r2, #0 80014e8: f883 2088 strb.w r2, [r3, #136] ; 0x88 LEDData[45][2] = 0x00; 80014ec: 4b6f ldr r3, [pc, #444] ; (80016ac ) 80014ee: 2200 movs r2, #0 80014f0: f883 2089 strb.w r2, [r3, #137] ; 0x89 LEDData[46][0] = 0x00; 80014f4: 4b6d ldr r3, [pc, #436] ; (80016ac ) 80014f6: 2200 movs r2, #0 80014f8: f883 208a strb.w r2, [r3, #138] ; 0x8a LEDData[46][1] = 0x00; 80014fc: 4b6b ldr r3, [pc, #428] ; (80016ac ) 80014fe: 2200 movs r2, #0 8001500: f883 208b strb.w r2, [r3, #139] ; 0x8b LEDData[46][2] = 0x00; 8001504: 4b69 ldr r3, [pc, #420] ; (80016ac ) 8001506: 2200 movs r2, #0 8001508: f883 208c strb.w r2, [r3, #140] ; 0x8c LEDData[47][0] = 0x00; 800150c: 4b67 ldr r3, [pc, #412] ; (80016ac ) 800150e: 2200 movs r2, #0 8001510: f883 208d strb.w r2, [r3, #141] ; 0x8d LEDData[47][1] = 0x00; 8001514: 4b65 ldr r3, [pc, #404] ; (80016ac ) 8001516: 2200 movs r2, #0 8001518: f883 208e strb.w r2, [r3, #142] ; 0x8e LEDData[47][2] = 0x00; 800151c: 4b63 ldr r3, [pc, #396] ; (80016ac ) 800151e: 2200 movs r2, #0 8001520: f883 208f strb.w r2, [r3, #143] ; 0x8f LEDData[48][0] = 0x00; 8001524: 4b61 ldr r3, [pc, #388] ; (80016ac ) 8001526: 2200 movs r2, #0 8001528: f883 2090 strb.w r2, [r3, #144] ; 0x90 LEDData[48][1] = 0x00; 800152c: 4b5f ldr r3, [pc, #380] ; (80016ac ) 800152e: 2200 movs r2, #0 8001530: f883 2091 strb.w r2, [r3, #145] ; 0x91 LEDData[48][2] = 0x00; 8001534: 4b5d ldr r3, [pc, #372] ; (80016ac ) 8001536: 2200 movs r2, #0 8001538: f883 2092 strb.w r2, [r3, #146] ; 0x92 LEDData[49][0] = 0x00; 800153c: 4b5b ldr r3, [pc, #364] ; (80016ac ) 800153e: 2200 movs r2, #0 8001540: f883 2093 strb.w r2, [r3, #147] ; 0x93 LEDData[49][1] = 0x00; 8001544: 4b59 ldr r3, [pc, #356] ; (80016ac ) 8001546: 2200 movs r2, #0 8001548: f883 2094 strb.w r2, [r3, #148] ; 0x94 LEDData[49][2] = 0x00; 800154c: 4b57 ldr r3, [pc, #348] ; (80016ac ) 800154e: 2200 movs r2, #0 8001550: f883 2095 strb.w r2, [r3, #149] ; 0x95 LEDData[50][0] = 0x00; 8001554: 4b55 ldr r3, [pc, #340] ; (80016ac ) 8001556: 2200 movs r2, #0 8001558: f883 2096 strb.w r2, [r3, #150] ; 0x96 LEDData[50][1] = 0x00; 800155c: 4b53 ldr r3, [pc, #332] ; (80016ac ) 800155e: 2200 movs r2, #0 8001560: f883 2097 strb.w r2, [r3, #151] ; 0x97 LEDData[50][2] = 0x00; 8001564: 4b51 ldr r3, [pc, #324] ; (80016ac ) 8001566: 2200 movs r2, #0 8001568: f883 2098 strb.w r2, [r3, #152] ; 0x98 LEDData[51][0] = 0x00; 800156c: 4b4f ldr r3, [pc, #316] ; (80016ac ) 800156e: 2200 movs r2, #0 8001570: f883 2099 strb.w r2, [r3, #153] ; 0x99 LEDData[51][1] = 0x00; 8001574: 4b4d ldr r3, [pc, #308] ; (80016ac ) 8001576: 2200 movs r2, #0 8001578: f883 209a strb.w r2, [r3, #154] ; 0x9a LEDData[51][2] = 0x00; 800157c: 4b4b ldr r3, [pc, #300] ; (80016ac ) 800157e: 2200 movs r2, #0 8001580: f883 209b strb.w r2, [r3, #155] ; 0x9b LEDData[52][0] = 0x00; 8001584: 4b49 ldr r3, [pc, #292] ; (80016ac ) 8001586: 2200 movs r2, #0 8001588: f883 209c strb.w r2, [r3, #156] ; 0x9c LEDData[52][1] = 0x00; 800158c: 4b47 ldr r3, [pc, #284] ; (80016ac ) 800158e: 2200 movs r2, #0 8001590: f883 209d strb.w r2, [r3, #157] ; 0x9d LEDData[52][2] = 0x00; 8001594: 4b45 ldr r3, [pc, #276] ; (80016ac ) 8001596: 2200 movs r2, #0 8001598: f883 209e strb.w r2, [r3, #158] ; 0x9e LEDData[53][0] = 0x00; 800159c: 4b43 ldr r3, [pc, #268] ; (80016ac ) 800159e: 2200 movs r2, #0 80015a0: f883 209f strb.w r2, [r3, #159] ; 0x9f LEDData[53][1] = 0x00; 80015a4: 4b41 ldr r3, [pc, #260] ; (80016ac ) 80015a6: 2200 movs r2, #0 80015a8: f883 20a0 strb.w r2, [r3, #160] ; 0xa0 LEDData[53][2] = 0x7F; 80015ac: 4b3f ldr r3, [pc, #252] ; (80016ac ) 80015ae: 227f movs r2, #127 ; 0x7f 80015b0: f883 20a1 strb.w r2, [r3, #161] ; 0xa1 LEDData[54][0] = 0x00; 80015b4: 4b3d ldr r3, [pc, #244] ; (80016ac ) 80015b6: 2200 movs r2, #0 80015b8: f883 20a2 strb.w r2, [r3, #162] ; 0xa2 LEDData[54][1] = 0x00; 80015bc: 4b3b ldr r3, [pc, #236] ; (80016ac ) 80015be: 2200 movs r2, #0 80015c0: f883 20a3 strb.w r2, [r3, #163] ; 0xa3 LEDData[54][2] = 0x00; 80015c4: 4b39 ldr r3, [pc, #228] ; (80016ac ) 80015c6: 2200 movs r2, #0 80015c8: f883 20a4 strb.w r2, [r3, #164] ; 0xa4 LEDData[55][0] = 0x00; 80015cc: 4b37 ldr r3, [pc, #220] ; (80016ac ) 80015ce: 2200 movs r2, #0 80015d0: f883 20a5 strb.w r2, [r3, #165] ; 0xa5 LEDData[55][1] = 0x00; 80015d4: 4b35 ldr r3, [pc, #212] ; (80016ac ) 80015d6: 2200 movs r2, #0 80015d8: f883 20a6 strb.w r2, [r3, #166] ; 0xa6 LEDData[55][2] = 0x00; 80015dc: 4b33 ldr r3, [pc, #204] ; (80016ac ) 80015de: 2200 movs r2, #0 80015e0: f883 20a7 strb.w r2, [r3, #167] ; 0xa7 LEDData[56][0] = 0x00; 80015e4: 4b31 ldr r3, [pc, #196] ; (80016ac ) 80015e6: 2200 movs r2, #0 80015e8: f883 20a8 strb.w r2, [r3, #168] ; 0xa8 LEDData[56][1] = 0x00; 80015ec: 4b2f ldr r3, [pc, #188] ; (80016ac ) 80015ee: 2200 movs r2, #0 80015f0: f883 20a9 strb.w r2, [r3, #169] ; 0xa9 LEDData[56][2] = 0x00; 80015f4: 4b2d ldr r3, [pc, #180] ; (80016ac ) 80015f6: 2200 movs r2, #0 80015f8: f883 20aa strb.w r2, [r3, #170] ; 0xaa LEDData[57][0] = 0x00; 80015fc: 4b2b ldr r3, [pc, #172] ; (80016ac ) 80015fe: 2200 movs r2, #0 8001600: f883 20ab strb.w r2, [r3, #171] ; 0xab LEDData[57][1] = 0x00; 8001604: 4b29 ldr r3, [pc, #164] ; (80016ac ) 8001606: 2200 movs r2, #0 8001608: f883 20ac strb.w r2, [r3, #172] ; 0xac LEDData[57][2] = 0x00; 800160c: 4b27 ldr r3, [pc, #156] ; (80016ac ) 800160e: 2200 movs r2, #0 8001610: f883 20ad strb.w r2, [r3, #173] ; 0xad LEDData[58][0] = 0x00; 8001614: 4b25 ldr r3, [pc, #148] ; (80016ac ) 8001616: 2200 movs r2, #0 8001618: f883 20ae strb.w r2, [r3, #174] ; 0xae LEDData[58][1] = 0x00; 800161c: 4b23 ldr r3, [pc, #140] ; (80016ac ) 800161e: 2200 movs r2, #0 8001620: f883 20af strb.w r2, [r3, #175] ; 0xaf LEDData[58][2] = 0x00; 8001624: 4b21 ldr r3, [pc, #132] ; (80016ac ) 8001626: 2200 movs r2, #0 8001628: f883 20b0 strb.w r2, [r3, #176] ; 0xb0 LEDData[59][0] = 0x00; 800162c: 4b1f ldr r3, [pc, #124] ; (80016ac ) 800162e: 2200 movs r2, #0 8001630: f883 20b1 strb.w r2, [r3, #177] ; 0xb1 LEDData[59][1] = 0x00; 8001634: 4b1d ldr r3, [pc, #116] ; (80016ac ) 8001636: 2200 movs r2, #0 8001638: f883 20b2 strb.w r2, [r3, #178] ; 0xb2 LEDData[59][2] = 0x7F; 800163c: 4b1b ldr r3, [pc, #108] ; (80016ac ) 800163e: 227f movs r2, #127 ; 0x7f 8001640: f883 20b3 strb.w r2, [r3, #179] ; 0xb3 LEDData[60][0] = 0x00; 8001644: 4b19 ldr r3, [pc, #100] ; (80016ac ) 8001646: 2200 movs r2, #0 8001648: f883 20b4 strb.w r2, [r3, #180] ; 0xb4 LEDData[60][1] = 0x00; 800164c: 4b17 ldr r3, [pc, #92] ; (80016ac ) 800164e: 2200 movs r2, #0 8001650: f883 20b5 strb.w r2, [r3, #181] ; 0xb5 LEDData[60][2] = 0x00; 8001654: 4b15 ldr r3, [pc, #84] ; (80016ac ) 8001656: 2200 movs r2, #0 8001658: f883 20b6 strb.w r2, [r3, #182] ; 0xb6 LEDData[61][0] = 0x00; 800165c: 4b13 ldr r3, [pc, #76] ; (80016ac ) 800165e: 2200 movs r2, #0 8001660: f883 20b7 strb.w r2, [r3, #183] ; 0xb7 LEDData[61][1] = 0x00; 8001664: 4b11 ldr r3, [pc, #68] ; (80016ac ) 8001666: 2200 movs r2, #0 8001668: f883 20b8 strb.w r2, [r3, #184] ; 0xb8 LEDData[61][2] = 0x00; 800166c: 4b0f ldr r3, [pc, #60] ; (80016ac ) 800166e: 2200 movs r2, #0 8001670: f883 20b9 strb.w r2, [r3, #185] ; 0xb9 LEDData[62][0] = 0x00; 8001674: 4b0d ldr r3, [pc, #52] ; (80016ac ) 8001676: 2200 movs r2, #0 8001678: f883 20ba strb.w r2, [r3, #186] ; 0xba LEDData[62][1] = 0x00; 800167c: 4b0b ldr r3, [pc, #44] ; (80016ac ) 800167e: 2200 movs r2, #0 8001680: f883 20bb strb.w r2, [r3, #187] ; 0xbb LEDData[62][2] = 0x00; 8001684: 4b09 ldr r3, [pc, #36] ; (80016ac ) 8001686: 2200 movs r2, #0 8001688: f883 20bc strb.w r2, [r3, #188] ; 0xbc LEDData[63][0] = 0x00; 800168c: 4b07 ldr r3, [pc, #28] ; (80016ac ) 800168e: 2200 movs r2, #0 8001690: f883 20bd strb.w r2, [r3, #189] ; 0xbd LEDData[63][1] = 0x00; 8001694: 4b05 ldr r3, [pc, #20] ; (80016ac ) 8001696: 2200 movs r2, #0 8001698: f883 20be strb.w r2, [r3, #190] ; 0xbe LEDData[63][2] = 0x00; 800169c: 4b03 ldr r3, [pc, #12] ; (80016ac ) 800169e: 2200 movs r2, #0 80016a0: f883 20bf strb.w r2, [r3, #191] ; 0xbf } 80016a4: bf00 nop 80016a6: 3708 adds r7, #8 80016a8: 46bd mov sp, r7 80016aa: bd80 pop {r7, pc} 80016ac: 20000094 .word 0x20000094 080016b0 : void LEDDesign_SuperCrazy(void){ 80016b0: b580 push {r7, lr} 80016b2: b084 sub sp, #16 80016b4: af00 add r7, sp, #0 HAL_Delay(50); 80016b6: 2032 movs r0, #50 ; 0x32 80016b8: f000 fc66 bl 8001f88 uint8_t randomByte = (uint8_t) (0xFF * (((float) rand()) / RAND_MAX)); 80016bc: f002 fe2e bl 800431c 80016c0: ee07 0a90 vmov s15, r0 80016c4: eeb8 7ae7 vcvt.f32.s32 s14, s15 80016c8: eddf 6a37 vldr s13, [pc, #220] ; 80017a8 80016cc: eec7 7a26 vdiv.f32 s15, s14, s13 80016d0: ed9f 7a36 vldr s14, [pc, #216] ; 80017ac 80016d4: ee67 7a87 vmul.f32 s15, s15, s14 80016d8: eefc 7ae7 vcvt.u32.f32 s15, s15 80016dc: edc7 7a01 vstr s15, [r7, #4] 80016e0: 793b ldrb r3, [r7, #4] 80016e2: 733b strb r3, [r7, #12] for(uint8_t i = 0; i < 64; ++i){ 80016e4: 2300 movs r3, #0 80016e6: 73fb strb r3, [r7, #15] 80016e8: e00a b.n 8001700 LEDData[i][0] = randomByte; 80016ea: 7bfa ldrb r2, [r7, #15] 80016ec: 4930 ldr r1, [pc, #192] ; (80017b0 ) 80016ee: 4613 mov r3, r2 80016f0: 005b lsls r3, r3, #1 80016f2: 4413 add r3, r2 80016f4: 440b add r3, r1 80016f6: 7b3a ldrb r2, [r7, #12] 80016f8: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 80016fa: 7bfb ldrb r3, [r7, #15] 80016fc: 3301 adds r3, #1 80016fe: 73fb strb r3, [r7, #15] 8001700: 7bfb ldrb r3, [r7, #15] 8001702: 2b3f cmp r3, #63 ; 0x3f 8001704: d9f1 bls.n 80016ea } randomByte = (uint8_t) (0xFF * (((float) rand()) / RAND_MAX)); 8001706: f002 fe09 bl 800431c 800170a: ee07 0a90 vmov s15, r0 800170e: eeb8 7ae7 vcvt.f32.s32 s14, s15 8001712: eddf 6a25 vldr s13, [pc, #148] ; 80017a8 8001716: eec7 7a26 vdiv.f32 s15, s14, s13 800171a: ed9f 7a24 vldr s14, [pc, #144] ; 80017ac 800171e: ee67 7a87 vmul.f32 s15, s15, s14 8001722: eefc 7ae7 vcvt.u32.f32 s15, s15 8001726: edc7 7a01 vstr s15, [r7, #4] 800172a: 793b ldrb r3, [r7, #4] 800172c: 733b strb r3, [r7, #12] for(uint8_t i = 0; i < 64; ++i){ 800172e: 2300 movs r3, #0 8001730: 73bb strb r3, [r7, #14] 8001732: e00b b.n 800174c LEDData[i][1] = randomByte; 8001734: 7bba ldrb r2, [r7, #14] 8001736: 491e ldr r1, [pc, #120] ; (80017b0 ) 8001738: 4613 mov r3, r2 800173a: 005b lsls r3, r3, #1 800173c: 4413 add r3, r2 800173e: 440b add r3, r1 8001740: 3301 adds r3, #1 8001742: 7b3a ldrb r2, [r7, #12] 8001744: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8001746: 7bbb ldrb r3, [r7, #14] 8001748: 3301 adds r3, #1 800174a: 73bb strb r3, [r7, #14] 800174c: 7bbb ldrb r3, [r7, #14] 800174e: 2b3f cmp r3, #63 ; 0x3f 8001750: d9f0 bls.n 8001734 } randomByte = (uint8_t) (0xFF * (((float) rand()) / RAND_MAX)); 8001752: f002 fde3 bl 800431c 8001756: ee07 0a90 vmov s15, r0 800175a: eeb8 7ae7 vcvt.f32.s32 s14, s15 800175e: eddf 6a12 vldr s13, [pc, #72] ; 80017a8 8001762: eec7 7a26 vdiv.f32 s15, s14, s13 8001766: ed9f 7a11 vldr s14, [pc, #68] ; 80017ac 800176a: ee67 7a87 vmul.f32 s15, s15, s14 800176e: eefc 7ae7 vcvt.u32.f32 s15, s15 8001772: edc7 7a01 vstr s15, [r7, #4] 8001776: 793b ldrb r3, [r7, #4] 8001778: 733b strb r3, [r7, #12] for(uint8_t i = 0; i < 64; ++i){ 800177a: 2300 movs r3, #0 800177c: 737b strb r3, [r7, #13] 800177e: e00b b.n 8001798 LEDData[i][2] = randomByte; 8001780: 7b7a ldrb r2, [r7, #13] 8001782: 490b ldr r1, [pc, #44] ; (80017b0 ) 8001784: 4613 mov r3, r2 8001786: 005b lsls r3, r3, #1 8001788: 4413 add r3, r2 800178a: 440b add r3, r1 800178c: 3302 adds r3, #2 800178e: 7b3a ldrb r2, [r7, #12] 8001790: 701a strb r2, [r3, #0] for(uint8_t i = 0; i < 64; ++i){ 8001792: 7b7b ldrb r3, [r7, #13] 8001794: 3301 adds r3, #1 8001796: 737b strb r3, [r7, #13] 8001798: 7b7b ldrb r3, [r7, #13] 800179a: 2b3f cmp r3, #63 ; 0x3f 800179c: d9f0 bls.n 8001780 } } 800179e: bf00 nop 80017a0: 3710 adds r7, #16 80017a2: 46bd mov sp, r7 80017a4: bd80 pop {r7, pc} 80017a6: bf00 nop 80017a8: 4f000000 .word 0x4f000000 80017ac: 437f0000 .word 0x437f0000 80017b0: 20000094 .word 0x20000094 080017b4 : void updateWS2812BData(void){ 80017b4: b490 push {r4, r7} 80017b6: b082 sub sp, #8 80017b8: af00 add r7, sp, #0 uint8_t byteToConvert; for (uint8_t i = 0; i < 64; ++i) { 80017ba: 2300 movs r3, #0 80017bc: 71fb strb r3, [r7, #7] 80017be: e18b b.n 8001ad8 for (uint8_t j = 0; j < 3; ++j) { 80017c0: 2300 movs r3, #0 80017c2: 71bb strb r3, [r7, #6] 80017c4: e181 b.n 8001aca byteToConvert = LEDData[i][j]; 80017c6: 79fa ldrb r2, [r7, #7] 80017c8: 79b9 ldrb r1, [r7, #6] 80017ca: 488e ldr r0, [pc, #568] ; (8001a04 ) 80017cc: 4613 mov r3, r2 80017ce: 005b lsls r3, r3, #1 80017d0: 4413 add r3, r2 80017d2: 4403 add r3, r0 80017d4: 440b add r3, r1 80017d6: 781b ldrb r3, [r3, #0] 80017d8: 717b strb r3, [r7, #5] switch((byteToConvert & 0xF0) >> 4){ 80017da: 797b ldrb r3, [r7, #5] 80017dc: 091b lsrs r3, r3, #4 80017de: b2db uxtb r3, r3 80017e0: 2b0e cmp r3, #14 80017e2: d85d bhi.n 80018a0 80017e4: a201 add r2, pc, #4 ; (adr r2, 80017ec ) 80017e6: f852 f023 ldr.w pc, [r2, r3, lsl #2] 80017ea: bf00 nop 80017ec: 08001829 .word 0x08001829 80017f0: 08001831 .word 0x08001831 80017f4: 08001839 .word 0x08001839 80017f8: 08001841 .word 0x08001841 80017fc: 08001849 .word 0x08001849 8001800: 08001851 .word 0x08001851 8001804: 08001859 .word 0x08001859 8001808: 08001861 .word 0x08001861 800180c: 08001869 .word 0x08001869 8001810: 08001871 .word 0x08001871 8001814: 08001879 .word 0x08001879 8001818: 08001881 .word 0x08001881 800181c: 08001889 .word 0x08001889 8001820: 08001891 .word 0x08001891 8001824: 08001899 .word 0x08001899 case 0x00: WS2812BConvertedData = 0x00924000; 8001828: 4b77 ldr r3, [pc, #476] ; (8001a08 ) 800182a: 4a78 ldr r2, [pc, #480] ; (8001a0c ) 800182c: 601a str r2, [r3, #0] break; 800182e: e03a b.n 80018a6 case 0x01: WS2812BConvertedData = 0x00926000; 8001830: 4b75 ldr r3, [pc, #468] ; (8001a08 ) 8001832: 4a77 ldr r2, [pc, #476] ; (8001a10 ) 8001834: 601a str r2, [r3, #0] break; 8001836: e036 b.n 80018a6 case 0x02: WS2812BConvertedData = 0x00934000; 8001838: 4b73 ldr r3, [pc, #460] ; (8001a08 ) 800183a: 4a76 ldr r2, [pc, #472] ; (8001a14 ) 800183c: 601a str r2, [r3, #0] break; 800183e: e032 b.n 80018a6 case 0x03: WS2812BConvertedData = 0x00936000; 8001840: 4b71 ldr r3, [pc, #452] ; (8001a08 ) 8001842: 4a75 ldr r2, [pc, #468] ; (8001a18 ) 8001844: 601a str r2, [r3, #0] break; 8001846: e02e b.n 80018a6 case 0x04: WS2812BConvertedData = 0x009A4000; 8001848: 4b6f ldr r3, [pc, #444] ; (8001a08 ) 800184a: 4a74 ldr r2, [pc, #464] ; (8001a1c ) 800184c: 601a str r2, [r3, #0] break; 800184e: e02a b.n 80018a6 case 0x05: WS2812BConvertedData = 0x009A6000; 8001850: 4b6d ldr r3, [pc, #436] ; (8001a08 ) 8001852: 4a73 ldr r2, [pc, #460] ; (8001a20 ) 8001854: 601a str r2, [r3, #0] break; 8001856: e026 b.n 80018a6 case 0x06: WS2812BConvertedData = 0x009B4000; 8001858: 4b6b ldr r3, [pc, #428] ; (8001a08 ) 800185a: 4a72 ldr r2, [pc, #456] ; (8001a24 ) 800185c: 601a str r2, [r3, #0] break; 800185e: e022 b.n 80018a6 case 0x07: WS2812BConvertedData = 0x009B6000; 8001860: 4b69 ldr r3, [pc, #420] ; (8001a08 ) 8001862: 4a71 ldr r2, [pc, #452] ; (8001a28 ) 8001864: 601a str r2, [r3, #0] break; 8001866: e01e b.n 80018a6 case 0x08: WS2812BConvertedData = 0x00D24000; 8001868: 4b67 ldr r3, [pc, #412] ; (8001a08 ) 800186a: 4a70 ldr r2, [pc, #448] ; (8001a2c ) 800186c: 601a str r2, [r3, #0] break; 800186e: e01a b.n 80018a6 case 0x09: WS2812BConvertedData = 0x00D26000; 8001870: 4b65 ldr r3, [pc, #404] ; (8001a08 ) 8001872: 4a6f ldr r2, [pc, #444] ; (8001a30 ) 8001874: 601a str r2, [r3, #0] break; 8001876: e016 b.n 80018a6 case 0x0A: WS2812BConvertedData = 0x00D34000; 8001878: 4b63 ldr r3, [pc, #396] ; (8001a08 ) 800187a: 4a6e ldr r2, [pc, #440] ; (8001a34 ) 800187c: 601a str r2, [r3, #0] break; 800187e: e012 b.n 80018a6 case 0x0B: WS2812BConvertedData = 0x00D36000; 8001880: 4b61 ldr r3, [pc, #388] ; (8001a08 ) 8001882: 4a6d ldr r2, [pc, #436] ; (8001a38 ) 8001884: 601a str r2, [r3, #0] break; 8001886: e00e b.n 80018a6 case 0x0C: WS2812BConvertedData = 0x00DA4000; 8001888: 4b5f ldr r3, [pc, #380] ; (8001a08 ) 800188a: 4a6c ldr r2, [pc, #432] ; (8001a3c ) 800188c: 601a str r2, [r3, #0] break; 800188e: e00a b.n 80018a6 case 0x0D: WS2812BConvertedData = 0x00DA6000; 8001890: 4b5d ldr r3, [pc, #372] ; (8001a08 ) 8001892: 4a6b ldr r2, [pc, #428] ; (8001a40 ) 8001894: 601a str r2, [r3, #0] break; 8001896: e006 b.n 80018a6 case 0x0E: WS2812BConvertedData = 0x00DB4000; 8001898: 4b5b ldr r3, [pc, #364] ; (8001a08 ) 800189a: 4a6a ldr r2, [pc, #424] ; (8001a44 ) 800189c: 601a str r2, [r3, #0] break; 800189e: e002 b.n 80018a6 default: // 0x0F WS2812BConvertedData = 0x00DB6000; 80018a0: 4b59 ldr r3, [pc, #356] ; (8001a08 ) 80018a2: 4a69 ldr r2, [pc, #420] ; (8001a48 ) 80018a4: 601a str r2, [r3, #0] } switch(byteToConvert & 0x0F){ 80018a6: 797b ldrb r3, [r7, #5] 80018a8: f003 030f and.w r3, r3, #15 80018ac: 2b0e cmp r3, #14 80018ae: f200 80cd bhi.w 8001a4c 80018b2: a201 add r2, pc, #4 ; (adr r2, 80018b8 ) 80018b4: f852 f023 ldr.w pc, [r2, r3, lsl #2] 80018b8: 080018f5 .word 0x080018f5 80018bc: 08001907 .word 0x08001907 80018c0: 08001919 .word 0x08001919 80018c4: 0800192b .word 0x0800192b 80018c8: 0800193d .word 0x0800193d 80018cc: 0800194f .word 0x0800194f 80018d0: 08001961 .word 0x08001961 80018d4: 08001973 .word 0x08001973 80018d8: 08001985 .word 0x08001985 80018dc: 08001997 .word 0x08001997 80018e0: 080019a9 .word 0x080019a9 80018e4: 080019bb .word 0x080019bb 80018e8: 080019cd .word 0x080019cd 80018ec: 080019df .word 0x080019df 80018f0: 080019f1 .word 0x080019f1 case 0x00: WS2812BConvertedData |= 0x00000924; 80018f4: 4b44 ldr r3, [pc, #272] ; (8001a08 ) 80018f6: 681b ldr r3, [r3, #0] 80018f8: f443 6312 orr.w r3, r3, #2336 ; 0x920 80018fc: f043 0304 orr.w r3, r3, #4 8001900: 4a41 ldr r2, [pc, #260] ; (8001a08 ) 8001902: 6013 str r3, [r2, #0] break; 8001904: e0aa b.n 8001a5c case 0x01: WS2812BConvertedData |= 0x00000926; 8001906: 4b40 ldr r3, [pc, #256] ; (8001a08 ) 8001908: 681b ldr r3, [r3, #0] 800190a: f443 6312 orr.w r3, r3, #2336 ; 0x920 800190e: f043 0306 orr.w r3, r3, #6 8001912: 4a3d ldr r2, [pc, #244] ; (8001a08 ) 8001914: 6013 str r3, [r2, #0] break; 8001916: e0a1 b.n 8001a5c case 0x02: WS2812BConvertedData |= 0x00000934; 8001918: 4b3b ldr r3, [pc, #236] ; (8001a08 ) 800191a: 681b ldr r3, [r3, #0] 800191c: f443 6313 orr.w r3, r3, #2352 ; 0x930 8001920: f043 0304 orr.w r3, r3, #4 8001924: 4a38 ldr r2, [pc, #224] ; (8001a08 ) 8001926: 6013 str r3, [r2, #0] break; 8001928: e098 b.n 8001a5c case 0x03: WS2812BConvertedData |= 0x00000936; 800192a: 4b37 ldr r3, [pc, #220] ; (8001a08 ) 800192c: 681b ldr r3, [r3, #0] 800192e: f443 6313 orr.w r3, r3, #2352 ; 0x930 8001932: f043 0306 orr.w r3, r3, #6 8001936: 4a34 ldr r2, [pc, #208] ; (8001a08 ) 8001938: 6013 str r3, [r2, #0] break; 800193a: e08f b.n 8001a5c case 0x04: WS2812BConvertedData |= 0x000009A4; 800193c: 4b32 ldr r3, [pc, #200] ; (8001a08 ) 800193e: 681b ldr r3, [r3, #0] 8001940: f443 631a orr.w r3, r3, #2464 ; 0x9a0 8001944: f043 0304 orr.w r3, r3, #4 8001948: 4a2f ldr r2, [pc, #188] ; (8001a08 ) 800194a: 6013 str r3, [r2, #0] break; 800194c: e086 b.n 8001a5c case 0x05: WS2812BConvertedData |= 0x000009A6; 800194e: 4b2e ldr r3, [pc, #184] ; (8001a08 ) 8001950: 681b ldr r3, [r3, #0] 8001952: f443 631a orr.w r3, r3, #2464 ; 0x9a0 8001956: f043 0306 orr.w r3, r3, #6 800195a: 4a2b ldr r2, [pc, #172] ; (8001a08 ) 800195c: 6013 str r3, [r2, #0] break; 800195e: e07d b.n 8001a5c case 0x06: WS2812BConvertedData |= 0x000009B4; 8001960: 4b29 ldr r3, [pc, #164] ; (8001a08 ) 8001962: 681b ldr r3, [r3, #0] 8001964: f443 631b orr.w r3, r3, #2480 ; 0x9b0 8001968: f043 0304 orr.w r3, r3, #4 800196c: 4a26 ldr r2, [pc, #152] ; (8001a08 ) 800196e: 6013 str r3, [r2, #0] break; 8001970: e074 b.n 8001a5c case 0x07: WS2812BConvertedData |= 0x000009B6; 8001972: 4b25 ldr r3, [pc, #148] ; (8001a08 ) 8001974: 681b ldr r3, [r3, #0] 8001976: f443 631b orr.w r3, r3, #2480 ; 0x9b0 800197a: f043 0306 orr.w r3, r3, #6 800197e: 4a22 ldr r2, [pc, #136] ; (8001a08 ) 8001980: 6013 str r3, [r2, #0] break; 8001982: e06b b.n 8001a5c case 0x08: WS2812BConvertedData |= 0x00000D24; 8001984: 4b20 ldr r3, [pc, #128] ; (8001a08 ) 8001986: 681b ldr r3, [r3, #0] 8001988: f443 6352 orr.w r3, r3, #3360 ; 0xd20 800198c: f043 0304 orr.w r3, r3, #4 8001990: 4a1d ldr r2, [pc, #116] ; (8001a08 ) 8001992: 6013 str r3, [r2, #0] break; 8001994: e062 b.n 8001a5c case 0x09: WS2812BConvertedData |= 0x00000D26; 8001996: 4b1c ldr r3, [pc, #112] ; (8001a08 ) 8001998: 681b ldr r3, [r3, #0] 800199a: f443 6352 orr.w r3, r3, #3360 ; 0xd20 800199e: f043 0306 orr.w r3, r3, #6 80019a2: 4a19 ldr r2, [pc, #100] ; (8001a08 ) 80019a4: 6013 str r3, [r2, #0] break; 80019a6: e059 b.n 8001a5c case 0x0A: WS2812BConvertedData |= 0x00000D34; 80019a8: 4b17 ldr r3, [pc, #92] ; (8001a08 ) 80019aa: 681b ldr r3, [r3, #0] 80019ac: f443 6353 orr.w r3, r3, #3376 ; 0xd30 80019b0: f043 0304 orr.w r3, r3, #4 80019b4: 4a14 ldr r2, [pc, #80] ; (8001a08 ) 80019b6: 6013 str r3, [r2, #0] break; 80019b8: e050 b.n 8001a5c case 0x0B: WS2812BConvertedData |= 0x00000D36; 80019ba: 4b13 ldr r3, [pc, #76] ; (8001a08 ) 80019bc: 681b ldr r3, [r3, #0] 80019be: f443 6353 orr.w r3, r3, #3376 ; 0xd30 80019c2: f043 0306 orr.w r3, r3, #6 80019c6: 4a10 ldr r2, [pc, #64] ; (8001a08 ) 80019c8: 6013 str r3, [r2, #0] break; 80019ca: e047 b.n 8001a5c case 0x0C: WS2812BConvertedData |= 0x00000DA4; 80019cc: 4b0e ldr r3, [pc, #56] ; (8001a08 ) 80019ce: 681b ldr r3, [r3, #0] 80019d0: f443 635a orr.w r3, r3, #3488 ; 0xda0 80019d4: f043 0304 orr.w r3, r3, #4 80019d8: 4a0b ldr r2, [pc, #44] ; (8001a08 ) 80019da: 6013 str r3, [r2, #0] break; 80019dc: e03e b.n 8001a5c case 0x0D: WS2812BConvertedData |= 0x00000DA6; 80019de: 4b0a ldr r3, [pc, #40] ; (8001a08 ) 80019e0: 681b ldr r3, [r3, #0] 80019e2: f443 635a orr.w r3, r3, #3488 ; 0xda0 80019e6: f043 0306 orr.w r3, r3, #6 80019ea: 4a07 ldr r2, [pc, #28] ; (8001a08 ) 80019ec: 6013 str r3, [r2, #0] break; 80019ee: e035 b.n 8001a5c case 0x0E: WS2812BConvertedData |= 0x00000DB4; 80019f0: 4b05 ldr r3, [pc, #20] ; (8001a08 ) 80019f2: 681b ldr r3, [r3, #0] 80019f4: f443 635b orr.w r3, r3, #3504 ; 0xdb0 80019f8: f043 0304 orr.w r3, r3, #4 80019fc: 4a02 ldr r2, [pc, #8] ; (8001a08 ) 80019fe: 6013 str r3, [r2, #0] break; 8001a00: e02c b.n 8001a5c 8001a02: bf00 nop 8001a04: 20000094 .word 0x20000094 8001a08: 20000498 .word 0x20000498 8001a0c: 00924000 .word 0x00924000 8001a10: 00926000 .word 0x00926000 8001a14: 00934000 .word 0x00934000 8001a18: 00936000 .word 0x00936000 8001a1c: 009a4000 .word 0x009a4000 8001a20: 009a6000 .word 0x009a6000 8001a24: 009b4000 .word 0x009b4000 8001a28: 009b6000 .word 0x009b6000 8001a2c: 00d24000 .word 0x00d24000 8001a30: 00d26000 .word 0x00d26000 8001a34: 00d34000 .word 0x00d34000 8001a38: 00d36000 .word 0x00d36000 8001a3c: 00da4000 .word 0x00da4000 8001a40: 00da6000 .word 0x00da6000 8001a44: 00db4000 .word 0x00db4000 8001a48: 00db6000 .word 0x00db6000 default: // 0x0F WS2812BConvertedData |= 0x00000DB6; 8001a4c: 4b27 ldr r3, [pc, #156] ; (8001aec ) 8001a4e: 681b ldr r3, [r3, #0] 8001a50: f443 635b orr.w r3, r3, #3504 ; 0xdb0 8001a54: f043 0306 orr.w r3, r3, #6 8001a58: 4a24 ldr r2, [pc, #144] ; (8001aec ) 8001a5a: 6013 str r3, [r2, #0] } LEDData_WS2812B[i][j][0] = (WS2812BConvertedData & 0x00FF0000) >> 16; 8001a5c: 4b23 ldr r3, [pc, #140] ; (8001aec ) 8001a5e: 681b ldr r3, [r3, #0] 8001a60: 0c1a lsrs r2, r3, #16 8001a62: 79f9 ldrb r1, [r7, #7] 8001a64: 79bb ldrb r3, [r7, #6] 8001a66: b2d4 uxtb r4, r2 8001a68: 4821 ldr r0, [pc, #132] ; (8001af0 ) 8001a6a: 461a mov r2, r3 8001a6c: 0052 lsls r2, r2, #1 8001a6e: 441a add r2, r3 8001a70: 460b mov r3, r1 8001a72: 00db lsls r3, r3, #3 8001a74: 440b add r3, r1 8001a76: 4413 add r3, r2 8001a78: 4403 add r3, r0 8001a7a: 4622 mov r2, r4 8001a7c: 701a strb r2, [r3, #0] LEDData_WS2812B[i][j][1] = (WS2812BConvertedData & 0x0000FF00) >> 8; 8001a7e: 4b1b ldr r3, [pc, #108] ; (8001aec ) 8001a80: 681b ldr r3, [r3, #0] 8001a82: 0a1a lsrs r2, r3, #8 8001a84: 79f9 ldrb r1, [r7, #7] 8001a86: 79bb ldrb r3, [r7, #6] 8001a88: b2d4 uxtb r4, r2 8001a8a: 4819 ldr r0, [pc, #100] ; (8001af0 ) 8001a8c: 461a mov r2, r3 8001a8e: 0052 lsls r2, r2, #1 8001a90: 441a add r2, r3 8001a92: 460b mov r3, r1 8001a94: 00db lsls r3, r3, #3 8001a96: 440b add r3, r1 8001a98: 4413 add r3, r2 8001a9a: 4403 add r3, r0 8001a9c: 3301 adds r3, #1 8001a9e: 4622 mov r2, r4 8001aa0: 701a strb r2, [r3, #0] LEDData_WS2812B[i][j][2] = WS2812BConvertedData & 0x000000FF; 8001aa2: 4b12 ldr r3, [pc, #72] ; (8001aec ) 8001aa4: 681a ldr r2, [r3, #0] 8001aa6: 79f9 ldrb r1, [r7, #7] 8001aa8: 79bb ldrb r3, [r7, #6] 8001aaa: b2d4 uxtb r4, r2 8001aac: 4810 ldr r0, [pc, #64] ; (8001af0 ) 8001aae: 461a mov r2, r3 8001ab0: 0052 lsls r2, r2, #1 8001ab2: 441a add r2, r3 8001ab4: 460b mov r3, r1 8001ab6: 00db lsls r3, r3, #3 8001ab8: 440b add r3, r1 8001aba: 4413 add r3, r2 8001abc: 4403 add r3, r0 8001abe: 3302 adds r3, #2 8001ac0: 4622 mov r2, r4 8001ac2: 701a strb r2, [r3, #0] for (uint8_t j = 0; j < 3; ++j) { 8001ac4: 79bb ldrb r3, [r7, #6] 8001ac6: 3301 adds r3, #1 8001ac8: 71bb strb r3, [r7, #6] 8001aca: 79bb ldrb r3, [r7, #6] 8001acc: 2b02 cmp r3, #2 8001ace: f67f ae7a bls.w 80017c6 for (uint8_t i = 0; i < 64; ++i) { 8001ad2: 79fb ldrb r3, [r7, #7] 8001ad4: 3301 adds r3, #1 8001ad6: 71fb strb r3, [r7, #7] 8001ad8: 79fb ldrb r3, [r7, #7] 8001ada: 2b3f cmp r3, #63 ; 0x3f 8001adc: f67f ae70 bls.w 80017c0 } } } 8001ae0: bf00 nop 8001ae2: 3708 adds r7, #8 8001ae4: 46bd mov sp, r7 8001ae6: bc90 pop {r4, r7} 8001ae8: 4770 bx lr 8001aea: bf00 nop 8001aec: 20000498 .word 0x20000498 8001af0: 20000154 .word 0x20000154 08001af4 : /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { 8001af4: b480 push {r7} 8001af6: af00 add r7, sp, #0 /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } 8001af8: bf00 nop 8001afa: 46bd mov sp, r7 8001afc: f85d 7b04 ldr.w r7, [sp], #4 8001b00: 4770 bx lr ... 08001b04 : /* USER CODE END 0 */ /** * Initializes the Global MSP. */ void HAL_MspInit(void) { 8001b04: b580 push {r7, lr} 8001b06: b082 sub sp, #8 8001b08: af00 add r7, sp, #0 /* USER CODE BEGIN MspInit 0 */ /* USER CODE END MspInit 0 */ __HAL_RCC_SYSCFG_CLK_ENABLE(); 8001b0a: 2300 movs r3, #0 8001b0c: 607b str r3, [r7, #4] 8001b0e: 4b10 ldr r3, [pc, #64] ; (8001b50 ) 8001b10: 6c5b ldr r3, [r3, #68] ; 0x44 8001b12: 4a0f ldr r2, [pc, #60] ; (8001b50 ) 8001b14: f443 4380 orr.w r3, r3, #16384 ; 0x4000 8001b18: 6453 str r3, [r2, #68] ; 0x44 8001b1a: 4b0d ldr r3, [pc, #52] ; (8001b50 ) 8001b1c: 6c5b ldr r3, [r3, #68] ; 0x44 8001b1e: f403 4380 and.w r3, r3, #16384 ; 0x4000 8001b22: 607b str r3, [r7, #4] 8001b24: 687b ldr r3, [r7, #4] __HAL_RCC_PWR_CLK_ENABLE(); 8001b26: 2300 movs r3, #0 8001b28: 603b str r3, [r7, #0] 8001b2a: 4b09 ldr r3, [pc, #36] ; (8001b50 ) 8001b2c: 6c1b ldr r3, [r3, #64] ; 0x40 8001b2e: 4a08 ldr r2, [pc, #32] ; (8001b50 ) 8001b30: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 8001b34: 6413 str r3, [r2, #64] ; 0x40 8001b36: 4b06 ldr r3, [pc, #24] ; (8001b50 ) 8001b38: 6c1b ldr r3, [r3, #64] ; 0x40 8001b3a: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 8001b3e: 603b str r3, [r7, #0] 8001b40: 683b ldr r3, [r7, #0] HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); 8001b42: 2007 movs r0, #7 8001b44: f000 fedc bl 8002900 /* System interrupt init*/ /* USER CODE BEGIN MspInit 1 */ /* USER CODE END MspInit 1 */ } 8001b48: bf00 nop 8001b4a: 3708 adds r7, #8 8001b4c: 46bd mov sp, r7 8001b4e: bd80 pop {r7, pc} 8001b50: 40023800 .word 0x40023800 08001b54 : * This function configures the hardware resources used in this example * @param hadc: ADC handle pointer * @retval None */ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { 8001b54: b580 push {r7, lr} 8001b56: b08a sub sp, #40 ; 0x28 8001b58: af00 add r7, sp, #0 8001b5a: 6078 str r0, [r7, #4] GPIO_InitTypeDef GPIO_InitStruct = {0}; 8001b5c: f107 0314 add.w r3, r7, #20 8001b60: 2200 movs r2, #0 8001b62: 601a str r2, [r3, #0] 8001b64: 605a str r2, [r3, #4] 8001b66: 609a str r2, [r3, #8] 8001b68: 60da str r2, [r3, #12] 8001b6a: 611a str r2, [r3, #16] if(hadc->Instance==ADC3) 8001b6c: 687b ldr r3, [r7, #4] 8001b6e: 681b ldr r3, [r3, #0] 8001b70: 4a17 ldr r2, [pc, #92] ; (8001bd0 ) 8001b72: 4293 cmp r3, r2 8001b74: d127 bne.n 8001bc6 { /* USER CODE BEGIN ADC3_MspInit 0 */ /* USER CODE END ADC3_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_ADC3_CLK_ENABLE(); 8001b76: 2300 movs r3, #0 8001b78: 613b str r3, [r7, #16] 8001b7a: 4b16 ldr r3, [pc, #88] ; (8001bd4 ) 8001b7c: 6c5b ldr r3, [r3, #68] ; 0x44 8001b7e: 4a15 ldr r2, [pc, #84] ; (8001bd4 ) 8001b80: f443 6380 orr.w r3, r3, #1024 ; 0x400 8001b84: 6453 str r3, [r2, #68] ; 0x44 8001b86: 4b13 ldr r3, [pc, #76] ; (8001bd4 ) 8001b88: 6c5b ldr r3, [r3, #68] ; 0x44 8001b8a: f403 6380 and.w r3, r3, #1024 ; 0x400 8001b8e: 613b str r3, [r7, #16] 8001b90: 693b ldr r3, [r7, #16] __HAL_RCC_GPIOF_CLK_ENABLE(); 8001b92: 2300 movs r3, #0 8001b94: 60fb str r3, [r7, #12] 8001b96: 4b0f ldr r3, [pc, #60] ; (8001bd4 ) 8001b98: 6b1b ldr r3, [r3, #48] ; 0x30 8001b9a: 4a0e ldr r2, [pc, #56] ; (8001bd4 ) 8001b9c: f043 0320 orr.w r3, r3, #32 8001ba0: 6313 str r3, [r2, #48] ; 0x30 8001ba2: 4b0c ldr r3, [pc, #48] ; (8001bd4 ) 8001ba4: 6b1b ldr r3, [r3, #48] ; 0x30 8001ba6: f003 0320 and.w r3, r3, #32 8001baa: 60fb str r3, [r7, #12] 8001bac: 68fb ldr r3, [r7, #12] /**ADC3 GPIO Configuration PF6 ------> ADC3_IN4 */ GPIO_InitStruct.Pin = GPIO_PIN_6; 8001bae: 2340 movs r3, #64 ; 0x40 8001bb0: 617b str r3, [r7, #20] GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 8001bb2: 2303 movs r3, #3 8001bb4: 61bb str r3, [r7, #24] GPIO_InitStruct.Pull = GPIO_NOPULL; 8001bb6: 2300 movs r3, #0 8001bb8: 61fb str r3, [r7, #28] HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); 8001bba: f107 0314 add.w r3, r7, #20 8001bbe: 4619 mov r1, r3 8001bc0: 4805 ldr r0, [pc, #20] ; (8001bd8 ) 8001bc2: f000 ff01 bl 80029c8 /* USER CODE BEGIN ADC3_MspInit 1 */ /* USER CODE END ADC3_MspInit 1 */ } } 8001bc6: bf00 nop 8001bc8: 3728 adds r7, #40 ; 0x28 8001bca: 46bd mov sp, r7 8001bcc: bd80 pop {r7, pc} 8001bce: bf00 nop 8001bd0: 40012200 .word 0x40012200 8001bd4: 40023800 .word 0x40023800 8001bd8: 40021400 .word 0x40021400 08001bdc : * This function configures the hardware resources used in this example * @param hspi: SPI handle pointer * @retval None */ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) { 8001bdc: b580 push {r7, lr} 8001bde: b08a sub sp, #40 ; 0x28 8001be0: af00 add r7, sp, #0 8001be2: 6078 str r0, [r7, #4] GPIO_InitTypeDef GPIO_InitStruct = {0}; 8001be4: f107 0314 add.w r3, r7, #20 8001be8: 2200 movs r2, #0 8001bea: 601a str r2, [r3, #0] 8001bec: 605a str r2, [r3, #4] 8001bee: 609a str r2, [r3, #8] 8001bf0: 60da str r2, [r3, #12] 8001bf2: 611a str r2, [r3, #16] if(hspi->Instance==SPI4) 8001bf4: 687b ldr r3, [r7, #4] 8001bf6: 681b ldr r3, [r3, #0] 8001bf8: 4a1d ldr r2, [pc, #116] ; (8001c70 ) 8001bfa: 4293 cmp r3, r2 8001bfc: d133 bne.n 8001c66 { /* USER CODE BEGIN SPI4_MspInit 0 */ /* USER CODE END SPI4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_SPI4_CLK_ENABLE(); 8001bfe: 2300 movs r3, #0 8001c00: 613b str r3, [r7, #16] 8001c02: 4b1c ldr r3, [pc, #112] ; (8001c74 ) 8001c04: 6c5b ldr r3, [r3, #68] ; 0x44 8001c06: 4a1b ldr r2, [pc, #108] ; (8001c74 ) 8001c08: f443 5300 orr.w r3, r3, #8192 ; 0x2000 8001c0c: 6453 str r3, [r2, #68] ; 0x44 8001c0e: 4b19 ldr r3, [pc, #100] ; (8001c74 ) 8001c10: 6c5b ldr r3, [r3, #68] ; 0x44 8001c12: f403 5300 and.w r3, r3, #8192 ; 0x2000 8001c16: 613b str r3, [r7, #16] 8001c18: 693b ldr r3, [r7, #16] __HAL_RCC_GPIOE_CLK_ENABLE(); 8001c1a: 2300 movs r3, #0 8001c1c: 60fb str r3, [r7, #12] 8001c1e: 4b15 ldr r3, [pc, #84] ; (8001c74 ) 8001c20: 6b1b ldr r3, [r3, #48] ; 0x30 8001c22: 4a14 ldr r2, [pc, #80] ; (8001c74 ) 8001c24: f043 0310 orr.w r3, r3, #16 8001c28: 6313 str r3, [r2, #48] ; 0x30 8001c2a: 4b12 ldr r3, [pc, #72] ; (8001c74 ) 8001c2c: 6b1b ldr r3, [r3, #48] ; 0x30 8001c2e: f003 0310 and.w r3, r3, #16 8001c32: 60fb str r3, [r7, #12] 8001c34: 68fb ldr r3, [r7, #12] /**SPI4 GPIO Configuration PE2 ------> SPI4_SCK PE6 ------> SPI4_MOSI */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_6; 8001c36: 2344 movs r3, #68 ; 0x44 8001c38: 617b str r3, [r7, #20] GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8001c3a: 2302 movs r3, #2 8001c3c: 61bb str r3, [r7, #24] GPIO_InitStruct.Pull = GPIO_NOPULL; 8001c3e: 2300 movs r3, #0 8001c40: 61fb str r3, [r7, #28] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; 8001c42: 2303 movs r3, #3 8001c44: 623b str r3, [r7, #32] GPIO_InitStruct.Alternate = GPIO_AF5_SPI4; 8001c46: 2305 movs r3, #5 8001c48: 627b str r3, [r7, #36] ; 0x24 HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); 8001c4a: f107 0314 add.w r3, r7, #20 8001c4e: 4619 mov r1, r3 8001c50: 4809 ldr r0, [pc, #36] ; (8001c78 ) 8001c52: f000 feb9 bl 80029c8 /* SPI4 interrupt Init */ HAL_NVIC_SetPriority(SPI4_IRQn, 0, 0); 8001c56: 2200 movs r2, #0 8001c58: 2100 movs r1, #0 8001c5a: 2054 movs r0, #84 ; 0x54 8001c5c: f000 fe5b bl 8002916 HAL_NVIC_EnableIRQ(SPI4_IRQn); 8001c60: 2054 movs r0, #84 ; 0x54 8001c62: f000 fe74 bl 800294e /* USER CODE BEGIN SPI4_MspInit 1 */ /* USER CODE END SPI4_MspInit 1 */ } } 8001c66: bf00 nop 8001c68: 3728 adds r7, #40 ; 0x28 8001c6a: 46bd mov sp, r7 8001c6c: bd80 pop {r7, pc} 8001c6e: bf00 nop 8001c70: 40013400 .word 0x40013400 8001c74: 40023800 .word 0x40023800 8001c78: 40021000 .word 0x40021000 08001c7c : * This function configures the hardware resources used in this example * @param htim_base: TIM_Base handle pointer * @retval None */ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { 8001c7c: b580 push {r7, lr} 8001c7e: b084 sub sp, #16 8001c80: af00 add r7, sp, #0 8001c82: 6078 str r0, [r7, #4] if(htim_base->Instance==TIM6) 8001c84: 687b ldr r3, [r7, #4] 8001c86: 681b ldr r3, [r3, #0] 8001c88: 4a0e ldr r2, [pc, #56] ; (8001cc4 ) 8001c8a: 4293 cmp r3, r2 8001c8c: d115 bne.n 8001cba { /* USER CODE BEGIN TIM6_MspInit 0 */ /* USER CODE END TIM6_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM6_CLK_ENABLE(); 8001c8e: 2300 movs r3, #0 8001c90: 60fb str r3, [r7, #12] 8001c92: 4b0d ldr r3, [pc, #52] ; (8001cc8 ) 8001c94: 6c1b ldr r3, [r3, #64] ; 0x40 8001c96: 4a0c ldr r2, [pc, #48] ; (8001cc8 ) 8001c98: f043 0310 orr.w r3, r3, #16 8001c9c: 6413 str r3, [r2, #64] ; 0x40 8001c9e: 4b0a ldr r3, [pc, #40] ; (8001cc8 ) 8001ca0: 6c1b ldr r3, [r3, #64] ; 0x40 8001ca2: f003 0310 and.w r3, r3, #16 8001ca6: 60fb str r3, [r7, #12] 8001ca8: 68fb ldr r3, [r7, #12] /* TIM6 interrupt Init */ HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0); 8001caa: 2200 movs r2, #0 8001cac: 2100 movs r1, #0 8001cae: 2036 movs r0, #54 ; 0x36 8001cb0: f000 fe31 bl 8002916 HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); 8001cb4: 2036 movs r0, #54 ; 0x36 8001cb6: f000 fe4a bl 800294e /* USER CODE BEGIN TIM6_MspInit 1 */ /* USER CODE END TIM6_MspInit 1 */ } } 8001cba: bf00 nop 8001cbc: 3710 adds r7, #16 8001cbe: 46bd mov sp, r7 8001cc0: bd80 pop {r7, pc} 8001cc2: bf00 nop 8001cc4: 40001000 .word 0x40001000 8001cc8: 40023800 .word 0x40023800 08001ccc : /******************************************************************************/ /** * @brief This function handles Non maskable interrupt. */ void NMI_Handler(void) { 8001ccc: b480 push {r7} 8001cce: af00 add r7, sp, #0 /* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ /* USER CODE END NonMaskableInt_IRQn 1 */ } 8001cd0: bf00 nop 8001cd2: 46bd mov sp, r7 8001cd4: f85d 7b04 ldr.w r7, [sp], #4 8001cd8: 4770 bx lr 08001cda : /** * @brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { 8001cda: b480 push {r7} 8001cdc: af00 add r7, sp, #0 /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) 8001cde: e7fe b.n 8001cde 08001ce0 : /** * @brief This function handles Memory management fault. */ void MemManage_Handler(void) { 8001ce0: b480 push {r7} 8001ce2: af00 add r7, sp, #0 /* USER CODE BEGIN MemoryManagement_IRQn 0 */ /* USER CODE END MemoryManagement_IRQn 0 */ while (1) 8001ce4: e7fe b.n 8001ce4 08001ce6 : /** * @brief This function handles Pre-fetch fault, memory access fault. */ void BusFault_Handler(void) { 8001ce6: b480 push {r7} 8001ce8: af00 add r7, sp, #0 /* USER CODE BEGIN BusFault_IRQn 0 */ /* USER CODE END BusFault_IRQn 0 */ while (1) 8001cea: e7fe b.n 8001cea 08001cec : /** * @brief This function handles Undefined instruction or illegal state. */ void UsageFault_Handler(void) { 8001cec: b480 push {r7} 8001cee: af00 add r7, sp, #0 /* USER CODE BEGIN UsageFault_IRQn 0 */ /* USER CODE END UsageFault_IRQn 0 */ while (1) 8001cf0: e7fe b.n 8001cf0 08001cf2 : /** * @brief This function handles System service call via SWI instruction. */ void SVC_Handler(void) { 8001cf2: b480 push {r7} 8001cf4: af00 add r7, sp, #0 /* USER CODE END SVCall_IRQn 0 */ /* USER CODE BEGIN SVCall_IRQn 1 */ /* USER CODE END SVCall_IRQn 1 */ } 8001cf6: bf00 nop 8001cf8: 46bd mov sp, r7 8001cfa: f85d 7b04 ldr.w r7, [sp], #4 8001cfe: 4770 bx lr 08001d00 : /** * @brief This function handles Debug monitor. */ void DebugMon_Handler(void) { 8001d00: b480 push {r7} 8001d02: af00 add r7, sp, #0 /* USER CODE END DebugMonitor_IRQn 0 */ /* USER CODE BEGIN DebugMonitor_IRQn 1 */ /* USER CODE END DebugMonitor_IRQn 1 */ } 8001d04: bf00 nop 8001d06: 46bd mov sp, r7 8001d08: f85d 7b04 ldr.w r7, [sp], #4 8001d0c: 4770 bx lr 08001d0e : /** * @brief This function handles Pendable request for system service. */ void PendSV_Handler(void) { 8001d0e: b480 push {r7} 8001d10: af00 add r7, sp, #0 /* USER CODE END PendSV_IRQn 0 */ /* USER CODE BEGIN PendSV_IRQn 1 */ /* USER CODE END PendSV_IRQn 1 */ } 8001d12: bf00 nop 8001d14: 46bd mov sp, r7 8001d16: f85d 7b04 ldr.w r7, [sp], #4 8001d1a: 4770 bx lr 08001d1c : /** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { 8001d1c: b580 push {r7, lr} 8001d1e: af00 add r7, sp, #0 /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); 8001d20: f000 f912 bl 8001f48 /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ } 8001d24: bf00 nop 8001d26: bd80 pop {r7, pc} 08001d28 : /** * @brief This function handles EXTI line0 interrupt. */ void EXTI0_IRQHandler(void) { 8001d28: b580 push {r7, lr} 8001d2a: af00 add r7, sp, #0 /* USER CODE BEGIN EXTI0_IRQn 0 */ /* USER CODE END EXTI0_IRQn 0 */ HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); 8001d2c: 2001 movs r0, #1 8001d2e: f001 f80f bl 8002d50 /* USER CODE BEGIN EXTI0_IRQn 1 */ HAL_TIM_Base_Start_IT(&htim6); 8001d32: 4804 ldr r0, [pc, #16] ; (8001d44 ) 8001d34: f001 ffeb bl 8003d0e LEDDesign_PendingChange = true; 8001d38: 4b03 ldr r3, [pc, #12] ; (8001d48 ) 8001d3a: 2201 movs r2, #1 8001d3c: 701a strb r2, [r3, #0] /* USER CODE END EXTI0_IRQn 1 */ } 8001d3e: bf00 nop 8001d40: bd80 pop {r7, pc} 8001d42: bf00 nop 8001d44: 20000458 .word 0x20000458 8001d48: 20000091 .word 0x20000091 08001d4c : /** * @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts. */ void TIM6_DAC_IRQHandler(void) { 8001d4c: b580 push {r7, lr} 8001d4e: af00 add r7, sp, #0 /* USER CODE BEGIN TIM6_DAC_IRQn 0 */ /* USER CODE END TIM6_DAC_IRQn 0 */ HAL_TIM_IRQHandler(&htim6); 8001d50: 480c ldr r0, [pc, #48] ; (8001d84 ) 8001d52: f002 f846 bl 8003de2 /* USER CODE BEGIN TIM6_DAC_IRQn 1 */ LEDMode = (LEDMode + 1) % 7; 8001d56: 4b0c ldr r3, [pc, #48] ; (8001d88 ) 8001d58: 781b ldrb r3, [r3, #0] 8001d5a: 1c5a adds r2, r3, #1 8001d5c: 4b0b ldr r3, [pc, #44] ; (8001d8c ) 8001d5e: fb83 1302 smull r1, r3, r3, r2 8001d62: 4413 add r3, r2 8001d64: 1099 asrs r1, r3, #2 8001d66: 17d3 asrs r3, r2, #31 8001d68: 1ac9 subs r1, r1, r3 8001d6a: 460b mov r3, r1 8001d6c: 00db lsls r3, r3, #3 8001d6e: 1a5b subs r3, r3, r1 8001d70: 1ad1 subs r1, r2, r3 8001d72: b2ca uxtb r2, r1 8001d74: 4b04 ldr r3, [pc, #16] ; (8001d88 ) 8001d76: 701a strb r2, [r3, #0] LEDDesign_PendingChange = false; 8001d78: 4b05 ldr r3, [pc, #20] ; (8001d90 ) 8001d7a: 2200 movs r2, #0 8001d7c: 701a strb r2, [r3, #0] /* USER CODE END TIM6_DAC_IRQn 1 */ } 8001d7e: bf00 nop 8001d80: bd80 pop {r7, pc} 8001d82: bf00 nop 8001d84: 20000458 .word 0x20000458 8001d88: 20000090 .word 0x20000090 8001d8c: 92492493 .word 0x92492493 8001d90: 20000091 .word 0x20000091 08001d94 : /** * @brief This function handles SPI4 global interrupt. */ void SPI4_IRQHandler(void) { 8001d94: b580 push {r7, lr} 8001d96: af00 add r7, sp, #0 /* USER CODE BEGIN SPI4_IRQn 0 */ /* USER CODE END SPI4_IRQn 0 */ HAL_SPI_IRQHandler(&hspi4); 8001d98: 4805 ldr r0, [pc, #20] ; (8001db0 ) 8001d9a: f001 fd11 bl 80037c0 /* USER CODE BEGIN SPI4_IRQn 1 */ HAL_SPI_Transmit_IT(&hspi4, (uint8_t *) &LEDData_WS2812B, (uint16_t) 66 * 3 * 3); 8001d9e: f240 2252 movw r2, #594 ; 0x252 8001da2: 4904 ldr r1, [pc, #16] ; (8001db4 ) 8001da4: 4802 ldr r0, [pc, #8] ; (8001db0 ) 8001da6: f001 fc89 bl 80036bc /* USER CODE END SPI4_IRQn 1 */ } 8001daa: bf00 nop 8001dac: bd80 pop {r7, pc} 8001dae: bf00 nop 8001db0: 20000400 .word 0x20000400 8001db4: 20000154 .word 0x20000154 08001db8 <_sbrk>: * * @param incr Memory size * @return Pointer to allocated memory */ void *_sbrk(ptrdiff_t incr) { 8001db8: b580 push {r7, lr} 8001dba: b086 sub sp, #24 8001dbc: af00 add r7, sp, #0 8001dbe: 6078 str r0, [r7, #4] extern uint8_t _end; /* Symbol defined in the linker script */ extern uint8_t _estack; /* Symbol defined in the linker script */ extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; 8001dc0: 4a14 ldr r2, [pc, #80] ; (8001e14 <_sbrk+0x5c>) 8001dc2: 4b15 ldr r3, [pc, #84] ; (8001e18 <_sbrk+0x60>) 8001dc4: 1ad3 subs r3, r2, r3 8001dc6: 617b str r3, [r7, #20] const uint8_t *max_heap = (uint8_t *)stack_limit; 8001dc8: 697b ldr r3, [r7, #20] 8001dca: 613b str r3, [r7, #16] uint8_t *prev_heap_end; /* Initalize heap end at first call */ if (NULL == __sbrk_heap_end) 8001dcc: 4b13 ldr r3, [pc, #76] ; (8001e1c <_sbrk+0x64>) 8001dce: 681b ldr r3, [r3, #0] 8001dd0: 2b00 cmp r3, #0 8001dd2: d102 bne.n 8001dda <_sbrk+0x22> { __sbrk_heap_end = &_end; 8001dd4: 4b11 ldr r3, [pc, #68] ; (8001e1c <_sbrk+0x64>) 8001dd6: 4a12 ldr r2, [pc, #72] ; (8001e20 <_sbrk+0x68>) 8001dd8: 601a str r2, [r3, #0] } /* Protect heap from growing into the reserved MSP stack */ if (__sbrk_heap_end + incr > max_heap) 8001dda: 4b10 ldr r3, [pc, #64] ; (8001e1c <_sbrk+0x64>) 8001ddc: 681a ldr r2, [r3, #0] 8001dde: 687b ldr r3, [r7, #4] 8001de0: 4413 add r3, r2 8001de2: 693a ldr r2, [r7, #16] 8001de4: 429a cmp r2, r3 8001de6: d207 bcs.n 8001df8 <_sbrk+0x40> { errno = ENOMEM; 8001de8: f002 fa66 bl 80042b8 <__errno> 8001dec: 4602 mov r2, r0 8001dee: 230c movs r3, #12 8001df0: 6013 str r3, [r2, #0] return (void *)-1; 8001df2: f04f 33ff mov.w r3, #4294967295 8001df6: e009 b.n 8001e0c <_sbrk+0x54> } prev_heap_end = __sbrk_heap_end; 8001df8: 4b08 ldr r3, [pc, #32] ; (8001e1c <_sbrk+0x64>) 8001dfa: 681b ldr r3, [r3, #0] 8001dfc: 60fb str r3, [r7, #12] __sbrk_heap_end += incr; 8001dfe: 4b07 ldr r3, [pc, #28] ; (8001e1c <_sbrk+0x64>) 8001e00: 681a ldr r2, [r3, #0] 8001e02: 687b ldr r3, [r7, #4] 8001e04: 4413 add r3, r2 8001e06: 4a05 ldr r2, [pc, #20] ; (8001e1c <_sbrk+0x64>) 8001e08: 6013 str r3, [r2, #0] return (void *)prev_heap_end; 8001e0a: 68fb ldr r3, [r7, #12] } 8001e0c: 4618 mov r0, r3 8001e0e: 3718 adds r7, #24 8001e10: 46bd mov sp, r7 8001e12: bd80 pop {r7, pc} 8001e14: 20030000 .word 0x20030000 8001e18: 00000400 .word 0x00000400 8001e1c: 200003ac .word 0x200003ac 8001e20: 200004a8 .word 0x200004a8 08001e24 : * configuration. * @param None * @retval None */ void SystemInit(void) { 8001e24: b480 push {r7} 8001e26: af00 add r7, sp, #0 /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ 8001e28: 4b08 ldr r3, [pc, #32] ; (8001e4c ) 8001e2a: f8d3 3088 ldr.w r3, [r3, #136] ; 0x88 8001e2e: 4a07 ldr r2, [pc, #28] ; (8001e4c ) 8001e30: f443 0370 orr.w r3, r3, #15728640 ; 0xf00000 8001e34: f8c2 3088 str.w r3, [r2, #136] ; 0x88 /* Configure the Vector Table location add offset address ------------------*/ #ifdef VECT_TAB_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #else SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ 8001e38: 4b04 ldr r3, [pc, #16] ; (8001e4c ) 8001e3a: f04f 6200 mov.w r2, #134217728 ; 0x8000000 8001e3e: 609a str r2, [r3, #8] #endif } 8001e40: bf00 nop 8001e42: 46bd mov sp, r7 8001e44: f85d 7b04 ldr.w r7, [sp], #4 8001e48: 4770 bx lr 8001e4a: bf00 nop 8001e4c: e000ed00 .word 0xe000ed00 08001e50 : .section .text.Reset_Handler .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: ldr sp, =_estack /* set stack pointer */ 8001e50: f8df d034 ldr.w sp, [pc, #52] ; 8001e88 /* Copy the data segment initializers from flash to SRAM */ movs r1, #0 8001e54: 2100 movs r1, #0 b LoopCopyDataInit 8001e56: e003 b.n 8001e60 08001e58 : CopyDataInit: ldr r3, =_sidata 8001e58: 4b0c ldr r3, [pc, #48] ; (8001e8c ) ldr r3, [r3, r1] 8001e5a: 585b ldr r3, [r3, r1] str r3, [r0, r1] 8001e5c: 5043 str r3, [r0, r1] adds r1, r1, #4 8001e5e: 3104 adds r1, #4 08001e60 : LoopCopyDataInit: ldr r0, =_sdata 8001e60: 480b ldr r0, [pc, #44] ; (8001e90 ) ldr r3, =_edata 8001e62: 4b0c ldr r3, [pc, #48] ; (8001e94 ) adds r2, r0, r1 8001e64: 1842 adds r2, r0, r1 cmp r2, r3 8001e66: 429a cmp r2, r3 bcc CopyDataInit 8001e68: d3f6 bcc.n 8001e58 ldr r2, =_sbss 8001e6a: 4a0b ldr r2, [pc, #44] ; (8001e98 ) b LoopFillZerobss 8001e6c: e002 b.n 8001e74 08001e6e : /* Zero fill the bss segment. */ FillZerobss: movs r3, #0 8001e6e: 2300 movs r3, #0 str r3, [r2], #4 8001e70: f842 3b04 str.w r3, [r2], #4 08001e74 : LoopFillZerobss: ldr r3, = _ebss 8001e74: 4b09 ldr r3, [pc, #36] ; (8001e9c ) cmp r2, r3 8001e76: 429a cmp r2, r3 bcc FillZerobss 8001e78: d3f9 bcc.n 8001e6e /* Call the clock system intitialization function.*/ bl SystemInit 8001e7a: f7ff ffd3 bl 8001e24 /* Call static constructors */ bl __libc_init_array 8001e7e: f002 fa21 bl 80042c4 <__libc_init_array> /* Call the application's entry point.*/ bl main 8001e82: f7fe fb33 bl 80004ec
bx lr 8001e86: 4770 bx lr ldr sp, =_estack /* set stack pointer */ 8001e88: 20030000 .word 0x20030000 ldr r3, =_sidata 8001e8c: 080044a4 .word 0x080044a4 ldr r0, =_sdata 8001e90: 20000000 .word 0x20000000 ldr r3, =_edata 8001e94: 20000074 .word 0x20000074 ldr r2, =_sbss 8001e98: 20000074 .word 0x20000074 ldr r3, = _ebss 8001e9c: 200004a4 .word 0x200004a4 08001ea0 : * @retval None */ .section .text.Default_Handler,"ax",%progbits Default_Handler: Infinite_Loop: b Infinite_Loop 8001ea0: e7fe b.n 8001ea0 ... 08001ea4 : * 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) { 8001ea4: b580 push {r7, lr} 8001ea6: af00 add r7, sp, #0 /* Configure Flash prefetch, Instruction cache, Data cache */ #if (INSTRUCTION_CACHE_ENABLE != 0U) __HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); 8001ea8: 4b0e ldr r3, [pc, #56] ; (8001ee4 ) 8001eaa: 681b ldr r3, [r3, #0] 8001eac: 4a0d ldr r2, [pc, #52] ; (8001ee4 ) 8001eae: f443 7300 orr.w r3, r3, #512 ; 0x200 8001eb2: 6013 str r3, [r2, #0] #endif /* INSTRUCTION_CACHE_ENABLE */ #if (DATA_CACHE_ENABLE != 0U) __HAL_FLASH_DATA_CACHE_ENABLE(); 8001eb4: 4b0b ldr r3, [pc, #44] ; (8001ee4 ) 8001eb6: 681b ldr r3, [r3, #0] 8001eb8: 4a0a ldr r2, [pc, #40] ; (8001ee4 ) 8001eba: f443 6380 orr.w r3, r3, #1024 ; 0x400 8001ebe: 6013 str r3, [r2, #0] #endif /* DATA_CACHE_ENABLE */ #if (PREFETCH_ENABLE != 0U) __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); 8001ec0: 4b08 ldr r3, [pc, #32] ; (8001ee4 ) 8001ec2: 681b ldr r3, [r3, #0] 8001ec4: 4a07 ldr r2, [pc, #28] ; (8001ee4 ) 8001ec6: f443 7380 orr.w r3, r3, #256 ; 0x100 8001eca: 6013 str r3, [r2, #0] #endif /* PREFETCH_ENABLE */ /* Set Interrupt Group Priority */ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); 8001ecc: 2003 movs r0, #3 8001ece: f000 fd17 bl 8002900 /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ HAL_InitTick(TICK_INT_PRIORITY); 8001ed2: 2000 movs r0, #0 8001ed4: f000 f808 bl 8001ee8 /* Init the low level hardware */ HAL_MspInit(); 8001ed8: f7ff fe14 bl 8001b04 /* Return function status */ return HAL_OK; 8001edc: 2300 movs r3, #0 } 8001ede: 4618 mov r0, r3 8001ee0: bd80 pop {r7, pc} 8001ee2: bf00 nop 8001ee4: 40023c00 .word 0x40023c00 08001ee8 : * implementation in user file. * @param TickPriority Tick interrupt priority. * @retval HAL status */ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { 8001ee8: b580 push {r7, lr} 8001eea: b082 sub sp, #8 8001eec: af00 add r7, sp, #0 8001eee: 6078 str r0, [r7, #4] /* Configure the SysTick to have interrupt in 1ms time basis*/ if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) 8001ef0: 4b12 ldr r3, [pc, #72] ; (8001f3c ) 8001ef2: 681a ldr r2, [r3, #0] 8001ef4: 4b12 ldr r3, [pc, #72] ; (8001f40 ) 8001ef6: 781b ldrb r3, [r3, #0] 8001ef8: 4619 mov r1, r3 8001efa: f44f 737a mov.w r3, #1000 ; 0x3e8 8001efe: fbb3 f3f1 udiv r3, r3, r1 8001f02: fbb2 f3f3 udiv r3, r2, r3 8001f06: 4618 mov r0, r3 8001f08: f000 fd2f bl 800296a 8001f0c: 4603 mov r3, r0 8001f0e: 2b00 cmp r3, #0 8001f10: d001 beq.n 8001f16 { return HAL_ERROR; 8001f12: 2301 movs r3, #1 8001f14: e00e b.n 8001f34 } /* Configure the SysTick IRQ priority */ if (TickPriority < (1UL << __NVIC_PRIO_BITS)) 8001f16: 687b ldr r3, [r7, #4] 8001f18: 2b0f cmp r3, #15 8001f1a: d80a bhi.n 8001f32 { HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); 8001f1c: 2200 movs r2, #0 8001f1e: 6879 ldr r1, [r7, #4] 8001f20: f04f 30ff mov.w r0, #4294967295 8001f24: f000 fcf7 bl 8002916 uwTickPrio = TickPriority; 8001f28: 4a06 ldr r2, [pc, #24] ; (8001f44 ) 8001f2a: 687b ldr r3, [r7, #4] 8001f2c: 6013 str r3, [r2, #0] { return HAL_ERROR; } /* Return function status */ return HAL_OK; 8001f2e: 2300 movs r3, #0 8001f30: e000 b.n 8001f34 return HAL_ERROR; 8001f32: 2301 movs r3, #1 } 8001f34: 4618 mov r0, r3 8001f36: 3708 adds r7, #8 8001f38: 46bd mov sp, r7 8001f3a: bd80 pop {r7, pc} 8001f3c: 20000004 .word 0x20000004 8001f40: 2000000c .word 0x2000000c 8001f44: 20000008 .word 0x20000008 08001f48 : * @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) { 8001f48: b480 push {r7} 8001f4a: af00 add r7, sp, #0 uwTick += uwTickFreq; 8001f4c: 4b06 ldr r3, [pc, #24] ; (8001f68 ) 8001f4e: 781b ldrb r3, [r3, #0] 8001f50: 461a mov r2, r3 8001f52: 4b06 ldr r3, [pc, #24] ; (8001f6c ) 8001f54: 681b ldr r3, [r3, #0] 8001f56: 4413 add r3, r2 8001f58: 4a04 ldr r2, [pc, #16] ; (8001f6c ) 8001f5a: 6013 str r3, [r2, #0] } 8001f5c: bf00 nop 8001f5e: 46bd mov sp, r7 8001f60: f85d 7b04 ldr.w r7, [sp], #4 8001f64: 4770 bx lr 8001f66: bf00 nop 8001f68: 2000000c .word 0x2000000c 8001f6c: 2000049c .word 0x2000049c 08001f70 : * @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) { 8001f70: b480 push {r7} 8001f72: af00 add r7, sp, #0 return uwTick; 8001f74: 4b03 ldr r3, [pc, #12] ; (8001f84 ) 8001f76: 681b ldr r3, [r3, #0] } 8001f78: 4618 mov r0, r3 8001f7a: 46bd mov sp, r7 8001f7c: f85d 7b04 ldr.w r7, [sp], #4 8001f80: 4770 bx lr 8001f82: bf00 nop 8001f84: 2000049c .word 0x2000049c 08001f88 : * implementations in user file. * @param Delay specifies the delay time length, in milliseconds. * @retval None */ __weak void HAL_Delay(uint32_t Delay) { 8001f88: b580 push {r7, lr} 8001f8a: b084 sub sp, #16 8001f8c: af00 add r7, sp, #0 8001f8e: 6078 str r0, [r7, #4] uint32_t tickstart = HAL_GetTick(); 8001f90: f7ff ffee bl 8001f70 8001f94: 60b8 str r0, [r7, #8] uint32_t wait = Delay; 8001f96: 687b ldr r3, [r7, #4] 8001f98: 60fb str r3, [r7, #12] /* Add a freq to guarantee minimum wait */ if (wait < HAL_MAX_DELAY) 8001f9a: 68fb ldr r3, [r7, #12] 8001f9c: f1b3 3fff cmp.w r3, #4294967295 8001fa0: d005 beq.n 8001fae { wait += (uint32_t)(uwTickFreq); 8001fa2: 4b09 ldr r3, [pc, #36] ; (8001fc8 ) 8001fa4: 781b ldrb r3, [r3, #0] 8001fa6: 461a mov r2, r3 8001fa8: 68fb ldr r3, [r7, #12] 8001faa: 4413 add r3, r2 8001fac: 60fb str r3, [r7, #12] } while((HAL_GetTick() - tickstart) < wait) 8001fae: bf00 nop 8001fb0: f7ff ffde bl 8001f70 8001fb4: 4602 mov r2, r0 8001fb6: 68bb ldr r3, [r7, #8] 8001fb8: 1ad3 subs r3, r2, r3 8001fba: 68fa ldr r2, [r7, #12] 8001fbc: 429a cmp r2, r3 8001fbe: d8f7 bhi.n 8001fb0 { } } 8001fc0: bf00 nop 8001fc2: 3710 adds r7, #16 8001fc4: 46bd mov sp, r7 8001fc6: bd80 pop {r7, pc} 8001fc8: 2000000c .word 0x2000000c 08001fcc : * @param hadc pointer to a ADC_HandleTypeDef structure that contains * the configuration information for the specified ADC. * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) { 8001fcc: b580 push {r7, lr} 8001fce: b084 sub sp, #16 8001fd0: af00 add r7, sp, #0 8001fd2: 6078 str r0, [r7, #4] HAL_StatusTypeDef tmp_hal_status = HAL_OK; 8001fd4: 2300 movs r3, #0 8001fd6: 73fb strb r3, [r7, #15] /* Check ADC handle */ if(hadc == NULL) 8001fd8: 687b ldr r3, [r7, #4] 8001fda: 2b00 cmp r3, #0 8001fdc: d101 bne.n 8001fe2 { return HAL_ERROR; 8001fde: 2301 movs r3, #1 8001fe0: e033 b.n 800204a if(hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START) { assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge)); } if(hadc->State == HAL_ADC_STATE_RESET) 8001fe2: 687b ldr r3, [r7, #4] 8001fe4: 6c1b ldr r3, [r3, #64] ; 0x40 8001fe6: 2b00 cmp r3, #0 8001fe8: d109 bne.n 8001ffe /* Init the low level hardware */ hadc->MspInitCallback(hadc); #else /* Init the low level hardware */ HAL_ADC_MspInit(hadc); 8001fea: 6878 ldr r0, [r7, #4] 8001fec: f7ff fdb2 bl 8001b54 #endif /* USE_HAL_ADC_REGISTER_CALLBACKS */ /* Initialize ADC error code */ ADC_CLEAR_ERRORCODE(hadc); 8001ff0: 687b ldr r3, [r7, #4] 8001ff2: 2200 movs r2, #0 8001ff4: 645a str r2, [r3, #68] ; 0x44 /* Allocate lock resource and initialize it */ hadc->Lock = HAL_UNLOCKED; 8001ff6: 687b ldr r3, [r7, #4] 8001ff8: 2200 movs r2, #0 8001ffa: f883 203c strb.w r2, [r3, #60] ; 0x3c } /* Configuration of ADC parameters if previous preliminary actions are */ /* correctly completed. */ if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) 8001ffe: 687b ldr r3, [r7, #4] 8002000: 6c1b ldr r3, [r3, #64] ; 0x40 8002002: f003 0310 and.w r3, r3, #16 8002006: 2b00 cmp r3, #0 8002008: d118 bne.n 800203c { /* Set ADC state */ ADC_STATE_CLR_SET(hadc->State, 800200a: 687b ldr r3, [r7, #4] 800200c: 6c1b ldr r3, [r3, #64] ; 0x40 800200e: f423 5388 bic.w r3, r3, #4352 ; 0x1100 8002012: f023 0302 bic.w r3, r3, #2 8002016: f043 0202 orr.w r2, r3, #2 800201a: 687b ldr r3, [r7, #4] 800201c: 641a str r2, [r3, #64] ; 0x40 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL); /* Set ADC parameters */ ADC_Init(hadc); 800201e: 6878 ldr r0, [r7, #4] 8002020: f000 faa2 bl 8002568 /* Set ADC error code to none */ ADC_CLEAR_ERRORCODE(hadc); 8002024: 687b ldr r3, [r7, #4] 8002026: 2200 movs r2, #0 8002028: 645a str r2, [r3, #68] ; 0x44 /* Set the ADC state */ ADC_STATE_CLR_SET(hadc->State, 800202a: 687b ldr r3, [r7, #4] 800202c: 6c1b ldr r3, [r3, #64] ; 0x40 800202e: f023 0303 bic.w r3, r3, #3 8002032: f043 0201 orr.w r2, r3, #1 8002036: 687b ldr r3, [r7, #4] 8002038: 641a str r2, [r3, #64] ; 0x40 800203a: e001 b.n 8002040 HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY); } else { tmp_hal_status = HAL_ERROR; 800203c: 2301 movs r3, #1 800203e: 73fb strb r3, [r7, #15] } /* Release Lock */ __HAL_UNLOCK(hadc); 8002040: 687b ldr r3, [r7, #4] 8002042: 2200 movs r2, #0 8002044: f883 203c strb.w r2, [r3, #60] ; 0x3c /* Return function status */ return tmp_hal_status; 8002048: 7bfb ldrb r3, [r7, #15] } 800204a: 4618 mov r0, r3 800204c: 3710 adds r7, #16 800204e: 46bd mov sp, r7 8002050: bd80 pop {r7, pc} ... 08002054 : * @param hadc pointer to a ADC_HandleTypeDef structure that contains * the configuration information for the specified ADC. * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) { 8002054: b480 push {r7} 8002056: b085 sub sp, #20 8002058: af00 add r7, sp, #0 800205a: 6078 str r0, [r7, #4] __IO uint32_t counter = 0U; 800205c: 2300 movs r3, #0 800205e: 60bb str r3, [r7, #8] /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode)); assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge)); /* Process locked */ __HAL_LOCK(hadc); 8002060: 687b ldr r3, [r7, #4] 8002062: f893 303c ldrb.w r3, [r3, #60] ; 0x3c 8002066: 2b01 cmp r3, #1 8002068: d101 bne.n 800206e 800206a: 2302 movs r3, #2 800206c: e0a5 b.n 80021ba 800206e: 687b ldr r3, [r7, #4] 8002070: 2201 movs r2, #1 8002072: f883 203c strb.w r2, [r3, #60] ; 0x3c /* Enable the ADC peripheral */ /* Check if ADC peripheral is disabled in order to enable it and wait during Tstab time the ADC's stabilization */ if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON) 8002076: 687b ldr r3, [r7, #4] 8002078: 681b ldr r3, [r3, #0] 800207a: 689b ldr r3, [r3, #8] 800207c: f003 0301 and.w r3, r3, #1 8002080: 2b01 cmp r3, #1 8002082: d018 beq.n 80020b6 { /* Enable the Peripheral */ __HAL_ADC_ENABLE(hadc); 8002084: 687b ldr r3, [r7, #4] 8002086: 681b ldr r3, [r3, #0] 8002088: 689a ldr r2, [r3, #8] 800208a: 687b ldr r3, [r7, #4] 800208c: 681b ldr r3, [r3, #0] 800208e: f042 0201 orr.w r2, r2, #1 8002092: 609a str r2, [r3, #8] /* Delay for ADC stabilization time */ /* Compute number of CPU cycles to wait for */ counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U)); 8002094: 4b4c ldr r3, [pc, #304] ; (80021c8 ) 8002096: 681b ldr r3, [r3, #0] 8002098: 4a4c ldr r2, [pc, #304] ; (80021cc ) 800209a: fba2 2303 umull r2, r3, r2, r3 800209e: 0c9a lsrs r2, r3, #18 80020a0: 4613 mov r3, r2 80020a2: 005b lsls r3, r3, #1 80020a4: 4413 add r3, r2 80020a6: 60bb str r3, [r7, #8] while(counter != 0U) 80020a8: e002 b.n 80020b0 { counter--; 80020aa: 68bb ldr r3, [r7, #8] 80020ac: 3b01 subs r3, #1 80020ae: 60bb str r3, [r7, #8] while(counter != 0U) 80020b0: 68bb ldr r3, [r7, #8] 80020b2: 2b00 cmp r3, #0 80020b4: d1f9 bne.n 80020aa } } /* Start conversion if ADC is effectively enabled */ if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_ADON)) 80020b6: 687b ldr r3, [r7, #4] 80020b8: 681b ldr r3, [r3, #0] 80020ba: 689b ldr r3, [r3, #8] 80020bc: f003 0301 and.w r3, r3, #1 80020c0: 2b01 cmp r3, #1 80020c2: d179 bne.n 80021b8 { /* Set ADC state */ /* - Clear state bitfield related to regular group conversion results */ /* - Set state bitfield related to regular group operation */ ADC_STATE_CLR_SET(hadc->State, 80020c4: 687b ldr r3, [r7, #4] 80020c6: 6c1b ldr r3, [r3, #64] ; 0x40 80020c8: f423 63e0 bic.w r3, r3, #1792 ; 0x700 80020cc: f023 0301 bic.w r3, r3, #1 80020d0: f443 7280 orr.w r2, r3, #256 ; 0x100 80020d4: 687b ldr r3, [r7, #4] 80020d6: 641a str r2, [r3, #64] ; 0x40 HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR, HAL_ADC_STATE_REG_BUSY); /* If conversions on group regular are also triggering group injected, */ /* update ADC state. */ if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) 80020d8: 687b ldr r3, [r7, #4] 80020da: 681b ldr r3, [r3, #0] 80020dc: 685b ldr r3, [r3, #4] 80020de: f403 6380 and.w r3, r3, #1024 ; 0x400 80020e2: 2b00 cmp r3, #0 80020e4: d007 beq.n 80020f6 { ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); 80020e6: 687b ldr r3, [r7, #4] 80020e8: 6c1b ldr r3, [r3, #64] ; 0x40 80020ea: f423 5340 bic.w r3, r3, #12288 ; 0x3000 80020ee: f443 5280 orr.w r2, r3, #4096 ; 0x1000 80020f2: 687b ldr r3, [r7, #4] 80020f4: 641a str r2, [r3, #64] ; 0x40 } /* State machine update: Check if an injected conversion is ongoing */ if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) 80020f6: 687b ldr r3, [r7, #4] 80020f8: 6c1b ldr r3, [r3, #64] ; 0x40 80020fa: f403 5380 and.w r3, r3, #4096 ; 0x1000 80020fe: f5b3 5f80 cmp.w r3, #4096 ; 0x1000 8002102: d106 bne.n 8002112 { /* Reset ADC error code fields related to conversions on group regular */ CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); 8002104: 687b ldr r3, [r7, #4] 8002106: 6c5b ldr r3, [r3, #68] ; 0x44 8002108: f023 0206 bic.w r2, r3, #6 800210c: 687b ldr r3, [r7, #4] 800210e: 645a str r2, [r3, #68] ; 0x44 8002110: e002 b.n 8002118 } else { /* Reset ADC all error code fields */ ADC_CLEAR_ERRORCODE(hadc); 8002112: 687b ldr r3, [r7, #4] 8002114: 2200 movs r2, #0 8002116: 645a str r2, [r3, #68] ; 0x44 } /* Process unlocked */ /* Unlock before starting ADC conversions: in case of potential */ /* interruption, to let the process to ADC IRQ Handler. */ __HAL_UNLOCK(hadc); 8002118: 687b ldr r3, [r7, #4] 800211a: 2200 movs r2, #0 800211c: f883 203c strb.w r2, [r3, #60] ; 0x3c /* Pointer to the common control register to which is belonging hadc */ /* (Depending on STM32F4 product, there may be up to 3 ADCs and 1 common */ /* control register) */ tmpADC_Common = ADC_COMMON_REGISTER(hadc); 8002120: 4b2b ldr r3, [pc, #172] ; (80021d0 ) 8002122: 60fb str r3, [r7, #12] /* Clear regular group conversion flag and overrun flag */ /* (To ensure of no unknown state from potential previous ADC operations) */ __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC | ADC_FLAG_OVR); 8002124: 687b ldr r3, [r7, #4] 8002126: 681b ldr r3, [r3, #0] 8002128: f06f 0222 mvn.w r2, #34 ; 0x22 800212c: 601a str r2, [r3, #0] /* Check if Multimode enabled */ if(HAL_IS_BIT_CLR(tmpADC_Common->CCR, ADC_CCR_MULTI)) 800212e: 68fb ldr r3, [r7, #12] 8002130: 685b ldr r3, [r3, #4] 8002132: f003 031f and.w r3, r3, #31 8002136: 2b00 cmp r3, #0 8002138: d12a bne.n 8002190 { #if defined(ADC2) && defined(ADC3) if((hadc->Instance == ADC1) || ((hadc->Instance == ADC2) && ((ADC->CCR & ADC_CCR_MULTI_Msk) < ADC_CCR_MULTI_0)) \ 800213a: 687b ldr r3, [r7, #4] 800213c: 681b ldr r3, [r3, #0] 800213e: 4a25 ldr r2, [pc, #148] ; (80021d4 ) 8002140: 4293 cmp r3, r2 8002142: d015 beq.n 8002170 8002144: 687b ldr r3, [r7, #4] 8002146: 681b ldr r3, [r3, #0] 8002148: 4a23 ldr r2, [pc, #140] ; (80021d8 ) 800214a: 4293 cmp r3, r2 800214c: d105 bne.n 800215a 800214e: 4b20 ldr r3, [pc, #128] ; (80021d0 ) 8002150: 685b ldr r3, [r3, #4] 8002152: f003 031f and.w r3, r3, #31 8002156: 2b00 cmp r3, #0 8002158: d00a beq.n 8002170 || ((hadc->Instance == ADC3) && ((ADC->CCR & ADC_CCR_MULTI_Msk) < ADC_CCR_MULTI_4))) 800215a: 687b ldr r3, [r7, #4] 800215c: 681b ldr r3, [r3, #0] 800215e: 4a1f ldr r2, [pc, #124] ; (80021dc ) 8002160: 4293 cmp r3, r2 8002162: d129 bne.n 80021b8 8002164: 4b1a ldr r3, [pc, #104] ; (80021d0 ) 8002166: 685b ldr r3, [r3, #4] 8002168: f003 031f and.w r3, r3, #31 800216c: 2b0f cmp r3, #15 800216e: d823 bhi.n 80021b8 { #endif /* ADC2 || ADC3 */ /* if no external trigger present enable software conversion of regular channels */ if((hadc->Instance->CR2 & ADC_CR2_EXTEN) == RESET) 8002170: 687b ldr r3, [r7, #4] 8002172: 681b ldr r3, [r3, #0] 8002174: 689b ldr r3, [r3, #8] 8002176: f003 5340 and.w r3, r3, #805306368 ; 0x30000000 800217a: 2b00 cmp r3, #0 800217c: d11c bne.n 80021b8 { /* Enable the selected ADC software conversion for regular group */ hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART; 800217e: 687b ldr r3, [r7, #4] 8002180: 681b ldr r3, [r3, #0] 8002182: 689a ldr r2, [r3, #8] 8002184: 687b ldr r3, [r7, #4] 8002186: 681b ldr r3, [r3, #0] 8002188: f042 4280 orr.w r2, r2, #1073741824 ; 0x40000000 800218c: 609a str r2, [r3, #8] 800218e: e013 b.n 80021b8 #endif /* ADC2 || ADC3 */ } else { /* if instance of handle correspond to ADC1 and no external trigger present enable software conversion of regular channels */ if((hadc->Instance == ADC1) && ((hadc->Instance->CR2 & ADC_CR2_EXTEN) == RESET)) 8002190: 687b ldr r3, [r7, #4] 8002192: 681b ldr r3, [r3, #0] 8002194: 4a0f ldr r2, [pc, #60] ; (80021d4 ) 8002196: 4293 cmp r3, r2 8002198: d10e bne.n 80021b8 800219a: 687b ldr r3, [r7, #4] 800219c: 681b ldr r3, [r3, #0] 800219e: 689b ldr r3, [r3, #8] 80021a0: f003 5340 and.w r3, r3, #805306368 ; 0x30000000 80021a4: 2b00 cmp r3, #0 80021a6: d107 bne.n 80021b8 { /* Enable the selected ADC software conversion for regular group */ hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART; 80021a8: 687b ldr r3, [r7, #4] 80021aa: 681b ldr r3, [r3, #0] 80021ac: 689a ldr r2, [r3, #8] 80021ae: 687b ldr r3, [r7, #4] 80021b0: 681b ldr r3, [r3, #0] 80021b2: f042 4280 orr.w r2, r2, #1073741824 ; 0x40000000 80021b6: 609a str r2, [r3, #8] } } } /* Return function status */ return HAL_OK; 80021b8: 2300 movs r3, #0 } 80021ba: 4618 mov r0, r3 80021bc: 3714 adds r7, #20 80021be: 46bd mov sp, r7 80021c0: f85d 7b04 ldr.w r7, [sp], #4 80021c4: 4770 bx lr 80021c6: bf00 nop 80021c8: 20000004 .word 0x20000004 80021cc: 431bde83 .word 0x431bde83 80021d0: 40012300 .word 0x40012300 80021d4: 40012000 .word 0x40012000 80021d8: 40012100 .word 0x40012100 80021dc: 40012200 .word 0x40012200 080021e0 : * the configuration information for the specified ADC. * @param Timeout Timeout value in millisecond. * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) { 80021e0: b580 push {r7, lr} 80021e2: b084 sub sp, #16 80021e4: af00 add r7, sp, #0 80021e6: 6078 str r0, [r7, #4] 80021e8: 6039 str r1, [r7, #0] uint32_t tickstart = 0U; 80021ea: 2300 movs r3, #0 80021ec: 60fb str r3, [r7, #12] /* each conversion: */ /* Particular case is ADC configured in DMA mode and ADC sequencer with */ /* several ranks and polling for end of each conversion. */ /* For code simplicity sake, this particular case is generalized to */ /* ADC configured in DMA mode and polling for end of each conversion. */ if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_EOCS) && 80021ee: 687b ldr r3, [r7, #4] 80021f0: 681b ldr r3, [r3, #0] 80021f2: 689b ldr r3, [r3, #8] 80021f4: f403 6380 and.w r3, r3, #1024 ; 0x400 80021f8: f5b3 6f80 cmp.w r3, #1024 ; 0x400 80021fc: d113 bne.n 8002226 HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_DMA) ) 80021fe: 687b ldr r3, [r7, #4] 8002200: 681b ldr r3, [r3, #0] 8002202: 689b ldr r3, [r3, #8] 8002204: f403 7380 and.w r3, r3, #256 ; 0x100 if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_EOCS) && 8002208: f5b3 7f80 cmp.w r3, #256 ; 0x100 800220c: d10b bne.n 8002226 { /* Update ADC state machine to error */ SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); 800220e: 687b ldr r3, [r7, #4] 8002210: 6c1b ldr r3, [r3, #64] ; 0x40 8002212: f043 0220 orr.w r2, r3, #32 8002216: 687b ldr r3, [r7, #4] 8002218: 641a str r2, [r3, #64] ; 0x40 /* Process unlocked */ __HAL_UNLOCK(hadc); 800221a: 687b ldr r3, [r7, #4] 800221c: 2200 movs r2, #0 800221e: f883 203c strb.w r2, [r3, #60] ; 0x3c return HAL_ERROR; 8002222: 2301 movs r3, #1 8002224: e05c b.n 80022e0 } /* Get tick */ tickstart = HAL_GetTick(); 8002226: f7ff fea3 bl 8001f70 800222a: 60f8 str r0, [r7, #12] /* Check End of conversion flag */ while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC))) 800222c: e01a b.n 8002264 { /* Check if timeout is disabled (set to infinite wait) */ if(Timeout != HAL_MAX_DELAY) 800222e: 683b ldr r3, [r7, #0] 8002230: f1b3 3fff cmp.w r3, #4294967295 8002234: d016 beq.n 8002264 { if((Timeout == 0U) || ((HAL_GetTick() - tickstart ) > Timeout)) 8002236: 683b ldr r3, [r7, #0] 8002238: 2b00 cmp r3, #0 800223a: d007 beq.n 800224c 800223c: f7ff fe98 bl 8001f70 8002240: 4602 mov r2, r0 8002242: 68fb ldr r3, [r7, #12] 8002244: 1ad3 subs r3, r2, r3 8002246: 683a ldr r2, [r7, #0] 8002248: 429a cmp r2, r3 800224a: d20b bcs.n 8002264 { /* Update ADC state machine to timeout */ SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); 800224c: 687b ldr r3, [r7, #4] 800224e: 6c1b ldr r3, [r3, #64] ; 0x40 8002250: f043 0204 orr.w r2, r3, #4 8002254: 687b ldr r3, [r7, #4] 8002256: 641a str r2, [r3, #64] ; 0x40 /* Process unlocked */ __HAL_UNLOCK(hadc); 8002258: 687b ldr r3, [r7, #4] 800225a: 2200 movs r2, #0 800225c: f883 203c strb.w r2, [r3, #60] ; 0x3c return HAL_TIMEOUT; 8002260: 2303 movs r3, #3 8002262: e03d b.n 80022e0 while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC))) 8002264: 687b ldr r3, [r7, #4] 8002266: 681b ldr r3, [r3, #0] 8002268: 681b ldr r3, [r3, #0] 800226a: f003 0302 and.w r3, r3, #2 800226e: 2b02 cmp r3, #2 8002270: d1dd bne.n 800222e } } } /* Clear regular group conversion flag */ __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC); 8002272: 687b ldr r3, [r7, #4] 8002274: 681b ldr r3, [r3, #0] 8002276: f06f 0212 mvn.w r2, #18 800227a: 601a str r2, [r3, #0] /* Update ADC state machine */ SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); 800227c: 687b ldr r3, [r7, #4] 800227e: 6c1b ldr r3, [r3, #64] ; 0x40 8002280: f443 7200 orr.w r2, r3, #512 ; 0x200 8002284: 687b ldr r3, [r7, #4] 8002286: 641a str r2, [r3, #64] ; 0x40 /* by external trigger, continuous mode or scan sequence on going. */ /* Note: On STM32F4, there is no independent flag of end of sequence. */ /* The test of scan sequence on going is done either with scan */ /* sequence disabled or with end of conversion flag set to */ /* of end of sequence. */ if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && 8002288: 687b ldr r3, [r7, #4] 800228a: 681b ldr r3, [r3, #0] 800228c: 689b ldr r3, [r3, #8] 800228e: f003 5340 and.w r3, r3, #805306368 ; 0x30000000 8002292: 2b00 cmp r3, #0 8002294: d123 bne.n 80022de (hadc->Init.ContinuousConvMode == DISABLE) && 8002296: 687b ldr r3, [r7, #4] 8002298: 7e1b ldrb r3, [r3, #24] if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && 800229a: 2b00 cmp r3, #0 800229c: d11f bne.n 80022de (HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L) || 800229e: 687b ldr r3, [r7, #4] 80022a0: 681b ldr r3, [r3, #0] 80022a2: 6adb ldr r3, [r3, #44] ; 0x2c 80022a4: f403 0370 and.w r3, r3, #15728640 ; 0xf00000 (hadc->Init.ContinuousConvMode == DISABLE) && 80022a8: 2b00 cmp r3, #0 80022aa: d006 beq.n 80022ba HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_EOCS) ) ) 80022ac: 687b ldr r3, [r7, #4] 80022ae: 681b ldr r3, [r3, #0] 80022b0: 689b ldr r3, [r3, #8] 80022b2: f403 6380 and.w r3, r3, #1024 ; 0x400 (HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L) || 80022b6: 2b00 cmp r3, #0 80022b8: d111 bne.n 80022de { /* Set ADC state */ CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); 80022ba: 687b ldr r3, [r7, #4] 80022bc: 6c1b ldr r3, [r3, #64] ; 0x40 80022be: f423 7280 bic.w r2, r3, #256 ; 0x100 80022c2: 687b ldr r3, [r7, #4] 80022c4: 641a str r2, [r3, #64] ; 0x40 if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) 80022c6: 687b ldr r3, [r7, #4] 80022c8: 6c1b ldr r3, [r3, #64] ; 0x40 80022ca: f403 5380 and.w r3, r3, #4096 ; 0x1000 80022ce: 2b00 cmp r3, #0 80022d0: d105 bne.n 80022de { SET_BIT(hadc->State, HAL_ADC_STATE_READY); 80022d2: 687b ldr r3, [r7, #4] 80022d4: 6c1b ldr r3, [r3, #64] ; 0x40 80022d6: f043 0201 orr.w r2, r3, #1 80022da: 687b ldr r3, [r7, #4] 80022dc: 641a str r2, [r3, #64] ; 0x40 } } /* Return ADC state */ return HAL_OK; 80022de: 2300 movs r3, #0 } 80022e0: 4618 mov r0, r3 80022e2: 3710 adds r7, #16 80022e4: 46bd mov sp, r7 80022e6: bd80 pop {r7, pc} 080022e8 : * @param hadc pointer to a ADC_HandleTypeDef structure that contains * the configuration information for the specified ADC. * @retval Converted value */ uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) { 80022e8: b480 push {r7} 80022ea: b083 sub sp, #12 80022ec: af00 add r7, sp, #0 80022ee: 6078 str r0, [r7, #4] /* Return the selected ADC converted value */ return hadc->Instance->DR; 80022f0: 687b ldr r3, [r7, #4] 80022f2: 681b ldr r3, [r3, #0] 80022f4: 6cdb ldr r3, [r3, #76] ; 0x4c } 80022f6: 4618 mov r0, r3 80022f8: 370c adds r7, #12 80022fa: 46bd mov sp, r7 80022fc: f85d 7b04 ldr.w r7, [sp], #4 8002300: 4770 bx lr ... 08002304 : * the configuration information for the specified ADC. * @param sConfig ADC configuration structure. * @retval HAL status */ HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig) { 8002304: b480 push {r7} 8002306: b085 sub sp, #20 8002308: af00 add r7, sp, #0 800230a: 6078 str r0, [r7, #4] 800230c: 6039 str r1, [r7, #0] __IO uint32_t counter = 0U; 800230e: 2300 movs r3, #0 8002310: 60bb str r3, [r7, #8] assert_param(IS_ADC_CHANNEL(sConfig->Channel)); assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank)); assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime)); /* Process locked */ __HAL_LOCK(hadc); 8002312: 687b ldr r3, [r7, #4] 8002314: f893 303c ldrb.w r3, [r3, #60] ; 0x3c 8002318: 2b01 cmp r3, #1 800231a: d101 bne.n 8002320 800231c: 2302 movs r3, #2 800231e: e113 b.n 8002548 8002320: 687b ldr r3, [r7, #4] 8002322: 2201 movs r2, #1 8002324: f883 203c strb.w r2, [r3, #60] ; 0x3c /* if ADC_Channel_10 ... ADC_Channel_18 is selected */ if (sConfig->Channel > ADC_CHANNEL_9) 8002328: 683b ldr r3, [r7, #0] 800232a: 681b ldr r3, [r3, #0] 800232c: 2b09 cmp r3, #9 800232e: d925 bls.n 800237c { /* Clear the old sample time */ hadc->Instance->SMPR1 &= ~ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel); 8002330: 687b ldr r3, [r7, #4] 8002332: 681b ldr r3, [r3, #0] 8002334: 68d9 ldr r1, [r3, #12] 8002336: 683b ldr r3, [r7, #0] 8002338: 681b ldr r3, [r3, #0] 800233a: b29b uxth r3, r3 800233c: 461a mov r2, r3 800233e: 4613 mov r3, r2 8002340: 005b lsls r3, r3, #1 8002342: 4413 add r3, r2 8002344: 3b1e subs r3, #30 8002346: 2207 movs r2, #7 8002348: fa02 f303 lsl.w r3, r2, r3 800234c: 43da mvns r2, r3 800234e: 687b ldr r3, [r7, #4] 8002350: 681b ldr r3, [r3, #0] 8002352: 400a ands r2, r1 8002354: 60da str r2, [r3, #12] /* Set the new sample time */ hadc->Instance->SMPR1 |= ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel); 8002356: 687b ldr r3, [r7, #4] 8002358: 681b ldr r3, [r3, #0] 800235a: 68d9 ldr r1, [r3, #12] 800235c: 683b ldr r3, [r7, #0] 800235e: 689a ldr r2, [r3, #8] 8002360: 683b ldr r3, [r7, #0] 8002362: 681b ldr r3, [r3, #0] 8002364: b29b uxth r3, r3 8002366: 4618 mov r0, r3 8002368: 4603 mov r3, r0 800236a: 005b lsls r3, r3, #1 800236c: 4403 add r3, r0 800236e: 3b1e subs r3, #30 8002370: 409a lsls r2, r3 8002372: 687b ldr r3, [r7, #4] 8002374: 681b ldr r3, [r3, #0] 8002376: 430a orrs r2, r1 8002378: 60da str r2, [r3, #12] 800237a: e022 b.n 80023c2 } else /* ADC_Channel include in ADC_Channel_[0..9] */ { /* Clear the old sample time */ hadc->Instance->SMPR2 &= ~ADC_SMPR2(ADC_SMPR2_SMP0, sConfig->Channel); 800237c: 687b ldr r3, [r7, #4] 800237e: 681b ldr r3, [r3, #0] 8002380: 6919 ldr r1, [r3, #16] 8002382: 683b ldr r3, [r7, #0] 8002384: 681b ldr r3, [r3, #0] 8002386: b29b uxth r3, r3 8002388: 461a mov r2, r3 800238a: 4613 mov r3, r2 800238c: 005b lsls r3, r3, #1 800238e: 4413 add r3, r2 8002390: 2207 movs r2, #7 8002392: fa02 f303 lsl.w r3, r2, r3 8002396: 43da mvns r2, r3 8002398: 687b ldr r3, [r7, #4] 800239a: 681b ldr r3, [r3, #0] 800239c: 400a ands r2, r1 800239e: 611a str r2, [r3, #16] /* Set the new sample time */ hadc->Instance->SMPR2 |= ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel); 80023a0: 687b ldr r3, [r7, #4] 80023a2: 681b ldr r3, [r3, #0] 80023a4: 6919 ldr r1, [r3, #16] 80023a6: 683b ldr r3, [r7, #0] 80023a8: 689a ldr r2, [r3, #8] 80023aa: 683b ldr r3, [r7, #0] 80023ac: 681b ldr r3, [r3, #0] 80023ae: b29b uxth r3, r3 80023b0: 4618 mov r0, r3 80023b2: 4603 mov r3, r0 80023b4: 005b lsls r3, r3, #1 80023b6: 4403 add r3, r0 80023b8: 409a lsls r2, r3 80023ba: 687b ldr r3, [r7, #4] 80023bc: 681b ldr r3, [r3, #0] 80023be: 430a orrs r2, r1 80023c0: 611a str r2, [r3, #16] } /* For Rank 1 to 6 */ if (sConfig->Rank < 7U) 80023c2: 683b ldr r3, [r7, #0] 80023c4: 685b ldr r3, [r3, #4] 80023c6: 2b06 cmp r3, #6 80023c8: d824 bhi.n 8002414 { /* Clear the old SQx bits for the selected rank */ hadc->Instance->SQR3 &= ~ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank); 80023ca: 687b ldr r3, [r7, #4] 80023cc: 681b ldr r3, [r3, #0] 80023ce: 6b59 ldr r1, [r3, #52] ; 0x34 80023d0: 683b ldr r3, [r7, #0] 80023d2: 685a ldr r2, [r3, #4] 80023d4: 4613 mov r3, r2 80023d6: 009b lsls r3, r3, #2 80023d8: 4413 add r3, r2 80023da: 3b05 subs r3, #5 80023dc: 221f movs r2, #31 80023de: fa02 f303 lsl.w r3, r2, r3 80023e2: 43da mvns r2, r3 80023e4: 687b ldr r3, [r7, #4] 80023e6: 681b ldr r3, [r3, #0] 80023e8: 400a ands r2, r1 80023ea: 635a str r2, [r3, #52] ; 0x34 /* Set the SQx bits for the selected rank */ hadc->Instance->SQR3 |= ADC_SQR3_RK(sConfig->Channel, sConfig->Rank); 80023ec: 687b ldr r3, [r7, #4] 80023ee: 681b ldr r3, [r3, #0] 80023f0: 6b59 ldr r1, [r3, #52] ; 0x34 80023f2: 683b ldr r3, [r7, #0] 80023f4: 681b ldr r3, [r3, #0] 80023f6: b29b uxth r3, r3 80023f8: 4618 mov r0, r3 80023fa: 683b ldr r3, [r7, #0] 80023fc: 685a ldr r2, [r3, #4] 80023fe: 4613 mov r3, r2 8002400: 009b lsls r3, r3, #2 8002402: 4413 add r3, r2 8002404: 3b05 subs r3, #5 8002406: fa00 f203 lsl.w r2, r0, r3 800240a: 687b ldr r3, [r7, #4] 800240c: 681b ldr r3, [r3, #0] 800240e: 430a orrs r2, r1 8002410: 635a str r2, [r3, #52] ; 0x34 8002412: e04c b.n 80024ae } /* For Rank 7 to 12 */ else if (sConfig->Rank < 13U) 8002414: 683b ldr r3, [r7, #0] 8002416: 685b ldr r3, [r3, #4] 8002418: 2b0c cmp r3, #12 800241a: d824 bhi.n 8002466 { /* Clear the old SQx bits for the selected rank */ hadc->Instance->SQR2 &= ~ADC_SQR2_RK(ADC_SQR2_SQ7, sConfig->Rank); 800241c: 687b ldr r3, [r7, #4] 800241e: 681b ldr r3, [r3, #0] 8002420: 6b19 ldr r1, [r3, #48] ; 0x30 8002422: 683b ldr r3, [r7, #0] 8002424: 685a ldr r2, [r3, #4] 8002426: 4613 mov r3, r2 8002428: 009b lsls r3, r3, #2 800242a: 4413 add r3, r2 800242c: 3b23 subs r3, #35 ; 0x23 800242e: 221f movs r2, #31 8002430: fa02 f303 lsl.w r3, r2, r3 8002434: 43da mvns r2, r3 8002436: 687b ldr r3, [r7, #4] 8002438: 681b ldr r3, [r3, #0] 800243a: 400a ands r2, r1 800243c: 631a str r2, [r3, #48] ; 0x30 /* Set the SQx bits for the selected rank */ hadc->Instance->SQR2 |= ADC_SQR2_RK(sConfig->Channel, sConfig->Rank); 800243e: 687b ldr r3, [r7, #4] 8002440: 681b ldr r3, [r3, #0] 8002442: 6b19 ldr r1, [r3, #48] ; 0x30 8002444: 683b ldr r3, [r7, #0] 8002446: 681b ldr r3, [r3, #0] 8002448: b29b uxth r3, r3 800244a: 4618 mov r0, r3 800244c: 683b ldr r3, [r7, #0] 800244e: 685a ldr r2, [r3, #4] 8002450: 4613 mov r3, r2 8002452: 009b lsls r3, r3, #2 8002454: 4413 add r3, r2 8002456: 3b23 subs r3, #35 ; 0x23 8002458: fa00 f203 lsl.w r2, r0, r3 800245c: 687b ldr r3, [r7, #4] 800245e: 681b ldr r3, [r3, #0] 8002460: 430a orrs r2, r1 8002462: 631a str r2, [r3, #48] ; 0x30 8002464: e023 b.n 80024ae } /* For Rank 13 to 16 */ else { /* Clear the old SQx bits for the selected rank */ hadc->Instance->SQR1 &= ~ADC_SQR1_RK(ADC_SQR1_SQ13, sConfig->Rank); 8002466: 687b ldr r3, [r7, #4] 8002468: 681b ldr r3, [r3, #0] 800246a: 6ad9 ldr r1, [r3, #44] ; 0x2c 800246c: 683b ldr r3, [r7, #0] 800246e: 685a ldr r2, [r3, #4] 8002470: 4613 mov r3, r2 8002472: 009b lsls r3, r3, #2 8002474: 4413 add r3, r2 8002476: 3b41 subs r3, #65 ; 0x41 8002478: 221f movs r2, #31 800247a: fa02 f303 lsl.w r3, r2, r3 800247e: 43da mvns r2, r3 8002480: 687b ldr r3, [r7, #4] 8002482: 681b ldr r3, [r3, #0] 8002484: 400a ands r2, r1 8002486: 62da str r2, [r3, #44] ; 0x2c /* Set the SQx bits for the selected rank */ hadc->Instance->SQR1 |= ADC_SQR1_RK(sConfig->Channel, sConfig->Rank); 8002488: 687b ldr r3, [r7, #4] 800248a: 681b ldr r3, [r3, #0] 800248c: 6ad9 ldr r1, [r3, #44] ; 0x2c 800248e: 683b ldr r3, [r7, #0] 8002490: 681b ldr r3, [r3, #0] 8002492: b29b uxth r3, r3 8002494: 4618 mov r0, r3 8002496: 683b ldr r3, [r7, #0] 8002498: 685a ldr r2, [r3, #4] 800249a: 4613 mov r3, r2 800249c: 009b lsls r3, r3, #2 800249e: 4413 add r3, r2 80024a0: 3b41 subs r3, #65 ; 0x41 80024a2: fa00 f203 lsl.w r2, r0, r3 80024a6: 687b ldr r3, [r7, #4] 80024a8: 681b ldr r3, [r3, #0] 80024aa: 430a orrs r2, r1 80024ac: 62da str r2, [r3, #44] ; 0x2c } /* Pointer to the common control register to which is belonging hadc */ /* (Depending on STM32F4 product, there may be up to 3 ADCs and 1 common */ /* control register) */ tmpADC_Common = ADC_COMMON_REGISTER(hadc); 80024ae: 4b29 ldr r3, [pc, #164] ; (8002554 ) 80024b0: 60fb str r3, [r7, #12] /* if ADC1 Channel_18 is selected for VBAT Channel ennable VBATE */ if ((hadc->Instance == ADC1) && (sConfig->Channel == ADC_CHANNEL_VBAT)) 80024b2: 687b ldr r3, [r7, #4] 80024b4: 681b ldr r3, [r3, #0] 80024b6: 4a28 ldr r2, [pc, #160] ; (8002558 ) 80024b8: 4293 cmp r3, r2 80024ba: d10f bne.n 80024dc 80024bc: 683b ldr r3, [r7, #0] 80024be: 681b ldr r3, [r3, #0] 80024c0: 2b12 cmp r3, #18 80024c2: d10b bne.n 80024dc { /* Disable the TEMPSENSOR channel in case of using board with multiplixed ADC_CHANNEL_VBAT & ADC_CHANNEL_TEMPSENSOR*/ if ((uint16_t)ADC_CHANNEL_TEMPSENSOR == (uint16_t)ADC_CHANNEL_VBAT) { tmpADC_Common->CCR &= ~ADC_CCR_TSVREFE; 80024c4: 68fb ldr r3, [r7, #12] 80024c6: 685b ldr r3, [r3, #4] 80024c8: f423 0200 bic.w r2, r3, #8388608 ; 0x800000 80024cc: 68fb ldr r3, [r7, #12] 80024ce: 605a str r2, [r3, #4] } /* Enable the VBAT channel*/ tmpADC_Common->CCR |= ADC_CCR_VBATE; 80024d0: 68fb ldr r3, [r7, #12] 80024d2: 685b ldr r3, [r3, #4] 80024d4: f443 0280 orr.w r2, r3, #4194304 ; 0x400000 80024d8: 68fb ldr r3, [r7, #12] 80024da: 605a str r2, [r3, #4] } /* if ADC1 Channel_16 or Channel_18 is selected for Temperature sensor or Channel_17 is selected for VREFINT enable TSVREFE */ if ((hadc->Instance == ADC1) && ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || (sConfig->Channel == ADC_CHANNEL_VREFINT))) 80024dc: 687b ldr r3, [r7, #4] 80024de: 681b ldr r3, [r3, #0] 80024e0: 4a1d ldr r2, [pc, #116] ; (8002558 ) 80024e2: 4293 cmp r3, r2 80024e4: d12b bne.n 800253e 80024e6: 683b ldr r3, [r7, #0] 80024e8: 681b ldr r3, [r3, #0] 80024ea: 4a1c ldr r2, [pc, #112] ; (800255c ) 80024ec: 4293 cmp r3, r2 80024ee: d003 beq.n 80024f8 80024f0: 683b ldr r3, [r7, #0] 80024f2: 681b ldr r3, [r3, #0] 80024f4: 2b11 cmp r3, #17 80024f6: d122 bne.n 800253e { /* Disable the VBAT channel in case of using board with multiplixed ADC_CHANNEL_VBAT & ADC_CHANNEL_TEMPSENSOR*/ if ((uint16_t)ADC_CHANNEL_TEMPSENSOR == (uint16_t)ADC_CHANNEL_VBAT) { tmpADC_Common->CCR &= ~ADC_CCR_VBATE; 80024f8: 68fb ldr r3, [r7, #12] 80024fa: 685b ldr r3, [r3, #4] 80024fc: f423 0280 bic.w r2, r3, #4194304 ; 0x400000 8002500: 68fb ldr r3, [r7, #12] 8002502: 605a str r2, [r3, #4] } /* Enable the Temperature sensor and VREFINT channel*/ tmpADC_Common->CCR |= ADC_CCR_TSVREFE; 8002504: 68fb ldr r3, [r7, #12] 8002506: 685b ldr r3, [r3, #4] 8002508: f443 0200 orr.w r2, r3, #8388608 ; 0x800000 800250c: 68fb ldr r3, [r7, #12] 800250e: 605a str r2, [r3, #4] if((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR)) 8002510: 683b ldr r3, [r7, #0] 8002512: 681b ldr r3, [r3, #0] 8002514: 4a11 ldr r2, [pc, #68] ; (800255c ) 8002516: 4293 cmp r3, r2 8002518: d111 bne.n 800253e { /* Delay for temperature sensor stabilization time */ /* Compute number of CPU cycles to wait for */ counter = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000U)); 800251a: 4b11 ldr r3, [pc, #68] ; (8002560 ) 800251c: 681b ldr r3, [r3, #0] 800251e: 4a11 ldr r2, [pc, #68] ; (8002564 ) 8002520: fba2 2303 umull r2, r3, r2, r3 8002524: 0c9a lsrs r2, r3, #18 8002526: 4613 mov r3, r2 8002528: 009b lsls r3, r3, #2 800252a: 4413 add r3, r2 800252c: 005b lsls r3, r3, #1 800252e: 60bb str r3, [r7, #8] while(counter != 0U) 8002530: e002 b.n 8002538 { counter--; 8002532: 68bb ldr r3, [r7, #8] 8002534: 3b01 subs r3, #1 8002536: 60bb str r3, [r7, #8] while(counter != 0U) 8002538: 68bb ldr r3, [r7, #8] 800253a: 2b00 cmp r3, #0 800253c: d1f9 bne.n 8002532 } } } /* Process unlocked */ __HAL_UNLOCK(hadc); 800253e: 687b ldr r3, [r7, #4] 8002540: 2200 movs r2, #0 8002542: f883 203c strb.w r2, [r3, #60] ; 0x3c /* Return function status */ return HAL_OK; 8002546: 2300 movs r3, #0 } 8002548: 4618 mov r0, r3 800254a: 3714 adds r7, #20 800254c: 46bd mov sp, r7 800254e: f85d 7b04 ldr.w r7, [sp], #4 8002552: 4770 bx lr 8002554: 40012300 .word 0x40012300 8002558: 40012000 .word 0x40012000 800255c: 10000012 .word 0x10000012 8002560: 20000004 .word 0x20000004 8002564: 431bde83 .word 0x431bde83 08002568 : * @param hadc pointer to a ADC_HandleTypeDef structure that contains * the configuration information for the specified ADC. * @retval None */ static void ADC_Init(ADC_HandleTypeDef* hadc) { 8002568: b480 push {r7} 800256a: b085 sub sp, #20 800256c: af00 add r7, sp, #0 800256e: 6078 str r0, [r7, #4] /* Set ADC parameters */ /* Pointer to the common control register to which is belonging hadc */ /* (Depending on STM32F4 product, there may be up to 3 ADCs and 1 common */ /* control register) */ tmpADC_Common = ADC_COMMON_REGISTER(hadc); 8002570: 4b79 ldr r3, [pc, #484] ; (8002758 ) 8002572: 60fb str r3, [r7, #12] /* Set the ADC clock prescaler */ tmpADC_Common->CCR &= ~(ADC_CCR_ADCPRE); 8002574: 68fb ldr r3, [r7, #12] 8002576: 685b ldr r3, [r3, #4] 8002578: f423 3240 bic.w r2, r3, #196608 ; 0x30000 800257c: 68fb ldr r3, [r7, #12] 800257e: 605a str r2, [r3, #4] tmpADC_Common->CCR |= hadc->Init.ClockPrescaler; 8002580: 68fb ldr r3, [r7, #12] 8002582: 685a ldr r2, [r3, #4] 8002584: 687b ldr r3, [r7, #4] 8002586: 685b ldr r3, [r3, #4] 8002588: 431a orrs r2, r3 800258a: 68fb ldr r3, [r7, #12] 800258c: 605a str r2, [r3, #4] /* Set ADC scan mode */ hadc->Instance->CR1 &= ~(ADC_CR1_SCAN); 800258e: 687b ldr r3, [r7, #4] 8002590: 681b ldr r3, [r3, #0] 8002592: 685a ldr r2, [r3, #4] 8002594: 687b ldr r3, [r7, #4] 8002596: 681b ldr r3, [r3, #0] 8002598: f422 7280 bic.w r2, r2, #256 ; 0x100 800259c: 605a str r2, [r3, #4] hadc->Instance->CR1 |= ADC_CR1_SCANCONV(hadc->Init.ScanConvMode); 800259e: 687b ldr r3, [r7, #4] 80025a0: 681b ldr r3, [r3, #0] 80025a2: 6859 ldr r1, [r3, #4] 80025a4: 687b ldr r3, [r7, #4] 80025a6: 691b ldr r3, [r3, #16] 80025a8: 021a lsls r2, r3, #8 80025aa: 687b ldr r3, [r7, #4] 80025ac: 681b ldr r3, [r3, #0] 80025ae: 430a orrs r2, r1 80025b0: 605a str r2, [r3, #4] /* Set ADC resolution */ hadc->Instance->CR1 &= ~(ADC_CR1_RES); 80025b2: 687b ldr r3, [r7, #4] 80025b4: 681b ldr r3, [r3, #0] 80025b6: 685a ldr r2, [r3, #4] 80025b8: 687b ldr r3, [r7, #4] 80025ba: 681b ldr r3, [r3, #0] 80025bc: f022 7240 bic.w r2, r2, #50331648 ; 0x3000000 80025c0: 605a str r2, [r3, #4] hadc->Instance->CR1 |= hadc->Init.Resolution; 80025c2: 687b ldr r3, [r7, #4] 80025c4: 681b ldr r3, [r3, #0] 80025c6: 6859 ldr r1, [r3, #4] 80025c8: 687b ldr r3, [r7, #4] 80025ca: 689a ldr r2, [r3, #8] 80025cc: 687b ldr r3, [r7, #4] 80025ce: 681b ldr r3, [r3, #0] 80025d0: 430a orrs r2, r1 80025d2: 605a str r2, [r3, #4] /* Set ADC data alignment */ hadc->Instance->CR2 &= ~(ADC_CR2_ALIGN); 80025d4: 687b ldr r3, [r7, #4] 80025d6: 681b ldr r3, [r3, #0] 80025d8: 689a ldr r2, [r3, #8] 80025da: 687b ldr r3, [r7, #4] 80025dc: 681b ldr r3, [r3, #0] 80025de: f422 6200 bic.w r2, r2, #2048 ; 0x800 80025e2: 609a str r2, [r3, #8] hadc->Instance->CR2 |= hadc->Init.DataAlign; 80025e4: 687b ldr r3, [r7, #4] 80025e6: 681b ldr r3, [r3, #0] 80025e8: 6899 ldr r1, [r3, #8] 80025ea: 687b ldr r3, [r7, #4] 80025ec: 68da ldr r2, [r3, #12] 80025ee: 687b ldr r3, [r7, #4] 80025f0: 681b ldr r3, [r3, #0] 80025f2: 430a orrs r2, r1 80025f4: 609a str r2, [r3, #8] /* Enable external trigger if trigger selection is different of software */ /* start. */ /* Note: This configuration keeps the hardware feature of parameter */ /* ExternalTrigConvEdge "trigger edge none" equivalent to */ /* software start. */ if(hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START) 80025f6: 687b ldr r3, [r7, #4] 80025f8: 6a9b ldr r3, [r3, #40] ; 0x28 80025fa: 4a58 ldr r2, [pc, #352] ; (800275c ) 80025fc: 4293 cmp r3, r2 80025fe: d022 beq.n 8002646 { /* Select external trigger to start conversion */ hadc->Instance->CR2 &= ~(ADC_CR2_EXTSEL); 8002600: 687b ldr r3, [r7, #4] 8002602: 681b ldr r3, [r3, #0] 8002604: 689a ldr r2, [r3, #8] 8002606: 687b ldr r3, [r7, #4] 8002608: 681b ldr r3, [r3, #0] 800260a: f022 6270 bic.w r2, r2, #251658240 ; 0xf000000 800260e: 609a str r2, [r3, #8] hadc->Instance->CR2 |= hadc->Init.ExternalTrigConv; 8002610: 687b ldr r3, [r7, #4] 8002612: 681b ldr r3, [r3, #0] 8002614: 6899 ldr r1, [r3, #8] 8002616: 687b ldr r3, [r7, #4] 8002618: 6a9a ldr r2, [r3, #40] ; 0x28 800261a: 687b ldr r3, [r7, #4] 800261c: 681b ldr r3, [r3, #0] 800261e: 430a orrs r2, r1 8002620: 609a str r2, [r3, #8] /* Select external trigger polarity */ hadc->Instance->CR2 &= ~(ADC_CR2_EXTEN); 8002622: 687b ldr r3, [r7, #4] 8002624: 681b ldr r3, [r3, #0] 8002626: 689a ldr r2, [r3, #8] 8002628: 687b ldr r3, [r7, #4] 800262a: 681b ldr r3, [r3, #0] 800262c: f022 5240 bic.w r2, r2, #805306368 ; 0x30000000 8002630: 609a str r2, [r3, #8] hadc->Instance->CR2 |= hadc->Init.ExternalTrigConvEdge; 8002632: 687b ldr r3, [r7, #4] 8002634: 681b ldr r3, [r3, #0] 8002636: 6899 ldr r1, [r3, #8] 8002638: 687b ldr r3, [r7, #4] 800263a: 6ada ldr r2, [r3, #44] ; 0x2c 800263c: 687b ldr r3, [r7, #4] 800263e: 681b ldr r3, [r3, #0] 8002640: 430a orrs r2, r1 8002642: 609a str r2, [r3, #8] 8002644: e00f b.n 8002666 } else { /* Reset the external trigger */ hadc->Instance->CR2 &= ~(ADC_CR2_EXTSEL); 8002646: 687b ldr r3, [r7, #4] 8002648: 681b ldr r3, [r3, #0] 800264a: 689a ldr r2, [r3, #8] 800264c: 687b ldr r3, [r7, #4] 800264e: 681b ldr r3, [r3, #0] 8002650: f022 6270 bic.w r2, r2, #251658240 ; 0xf000000 8002654: 609a str r2, [r3, #8] hadc->Instance->CR2 &= ~(ADC_CR2_EXTEN); 8002656: 687b ldr r3, [r7, #4] 8002658: 681b ldr r3, [r3, #0] 800265a: 689a ldr r2, [r3, #8] 800265c: 687b ldr r3, [r7, #4] 800265e: 681b ldr r3, [r3, #0] 8002660: f022 5240 bic.w r2, r2, #805306368 ; 0x30000000 8002664: 609a str r2, [r3, #8] } /* Enable or disable ADC continuous conversion mode */ hadc->Instance->CR2 &= ~(ADC_CR2_CONT); 8002666: 687b ldr r3, [r7, #4] 8002668: 681b ldr r3, [r3, #0] 800266a: 689a ldr r2, [r3, #8] 800266c: 687b ldr r3, [r7, #4] 800266e: 681b ldr r3, [r3, #0] 8002670: f022 0202 bic.w r2, r2, #2 8002674: 609a str r2, [r3, #8] hadc->Instance->CR2 |= ADC_CR2_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode); 8002676: 687b ldr r3, [r7, #4] 8002678: 681b ldr r3, [r3, #0] 800267a: 6899 ldr r1, [r3, #8] 800267c: 687b ldr r3, [r7, #4] 800267e: 7e1b ldrb r3, [r3, #24] 8002680: 005a lsls r2, r3, #1 8002682: 687b ldr r3, [r7, #4] 8002684: 681b ldr r3, [r3, #0] 8002686: 430a orrs r2, r1 8002688: 609a str r2, [r3, #8] if(hadc->Init.DiscontinuousConvMode != DISABLE) 800268a: 687b ldr r3, [r7, #4] 800268c: f893 3020 ldrb.w r3, [r3, #32] 8002690: 2b00 cmp r3, #0 8002692: d01b beq.n 80026cc { assert_param(IS_ADC_REGULAR_DISC_NUMBER(hadc->Init.NbrOfDiscConversion)); /* Enable the selected ADC regular discontinuous mode */ hadc->Instance->CR1 |= (uint32_t)ADC_CR1_DISCEN; 8002694: 687b ldr r3, [r7, #4] 8002696: 681b ldr r3, [r3, #0] 8002698: 685a ldr r2, [r3, #4] 800269a: 687b ldr r3, [r7, #4] 800269c: 681b ldr r3, [r3, #0] 800269e: f442 6200 orr.w r2, r2, #2048 ; 0x800 80026a2: 605a str r2, [r3, #4] /* Set the number of channels to be converted in discontinuous mode */ hadc->Instance->CR1 &= ~(ADC_CR1_DISCNUM); 80026a4: 687b ldr r3, [r7, #4] 80026a6: 681b ldr r3, [r3, #0] 80026a8: 685a ldr r2, [r3, #4] 80026aa: 687b ldr r3, [r7, #4] 80026ac: 681b ldr r3, [r3, #0] 80026ae: f422 4260 bic.w r2, r2, #57344 ; 0xe000 80026b2: 605a str r2, [r3, #4] hadc->Instance->CR1 |= ADC_CR1_DISCONTINUOUS(hadc->Init.NbrOfDiscConversion); 80026b4: 687b ldr r3, [r7, #4] 80026b6: 681b ldr r3, [r3, #0] 80026b8: 6859 ldr r1, [r3, #4] 80026ba: 687b ldr r3, [r7, #4] 80026bc: 6a5b ldr r3, [r3, #36] ; 0x24 80026be: 3b01 subs r3, #1 80026c0: 035a lsls r2, r3, #13 80026c2: 687b ldr r3, [r7, #4] 80026c4: 681b ldr r3, [r3, #0] 80026c6: 430a orrs r2, r1 80026c8: 605a str r2, [r3, #4] 80026ca: e007 b.n 80026dc } else { /* Disable the selected ADC regular discontinuous mode */ hadc->Instance->CR1 &= ~(ADC_CR1_DISCEN); 80026cc: 687b ldr r3, [r7, #4] 80026ce: 681b ldr r3, [r3, #0] 80026d0: 685a ldr r2, [r3, #4] 80026d2: 687b ldr r3, [r7, #4] 80026d4: 681b ldr r3, [r3, #0] 80026d6: f422 6200 bic.w r2, r2, #2048 ; 0x800 80026da: 605a str r2, [r3, #4] } /* Set ADC number of conversion */ hadc->Instance->SQR1 &= ~(ADC_SQR1_L); 80026dc: 687b ldr r3, [r7, #4] 80026de: 681b ldr r3, [r3, #0] 80026e0: 6ada ldr r2, [r3, #44] ; 0x2c 80026e2: 687b ldr r3, [r7, #4] 80026e4: 681b ldr r3, [r3, #0] 80026e6: f422 0270 bic.w r2, r2, #15728640 ; 0xf00000 80026ea: 62da str r2, [r3, #44] ; 0x2c hadc->Instance->SQR1 |= ADC_SQR1(hadc->Init.NbrOfConversion); 80026ec: 687b ldr r3, [r7, #4] 80026ee: 681b ldr r3, [r3, #0] 80026f0: 6ad9 ldr r1, [r3, #44] ; 0x2c 80026f2: 687b ldr r3, [r7, #4] 80026f4: 69db ldr r3, [r3, #28] 80026f6: 3b01 subs r3, #1 80026f8: 051a lsls r2, r3, #20 80026fa: 687b ldr r3, [r7, #4] 80026fc: 681b ldr r3, [r3, #0] 80026fe: 430a orrs r2, r1 8002700: 62da str r2, [r3, #44] ; 0x2c /* Enable or disable ADC DMA continuous request */ hadc->Instance->CR2 &= ~(ADC_CR2_DDS); 8002702: 687b ldr r3, [r7, #4] 8002704: 681b ldr r3, [r3, #0] 8002706: 689a ldr r2, [r3, #8] 8002708: 687b ldr r3, [r7, #4] 800270a: 681b ldr r3, [r3, #0] 800270c: f422 7200 bic.w r2, r2, #512 ; 0x200 8002710: 609a str r2, [r3, #8] hadc->Instance->CR2 |= ADC_CR2_DMAContReq((uint32_t)hadc->Init.DMAContinuousRequests); 8002712: 687b ldr r3, [r7, #4] 8002714: 681b ldr r3, [r3, #0] 8002716: 6899 ldr r1, [r3, #8] 8002718: 687b ldr r3, [r7, #4] 800271a: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 800271e: 025a lsls r2, r3, #9 8002720: 687b ldr r3, [r7, #4] 8002722: 681b ldr r3, [r3, #0] 8002724: 430a orrs r2, r1 8002726: 609a str r2, [r3, #8] /* Enable or disable ADC end of conversion selection */ hadc->Instance->CR2 &= ~(ADC_CR2_EOCS); 8002728: 687b ldr r3, [r7, #4] 800272a: 681b ldr r3, [r3, #0] 800272c: 689a ldr r2, [r3, #8] 800272e: 687b ldr r3, [r7, #4] 8002730: 681b ldr r3, [r3, #0] 8002732: f422 6280 bic.w r2, r2, #1024 ; 0x400 8002736: 609a str r2, [r3, #8] hadc->Instance->CR2 |= ADC_CR2_EOCSelection(hadc->Init.EOCSelection); 8002738: 687b ldr r3, [r7, #4] 800273a: 681b ldr r3, [r3, #0] 800273c: 6899 ldr r1, [r3, #8] 800273e: 687b ldr r3, [r7, #4] 8002740: 695b ldr r3, [r3, #20] 8002742: 029a lsls r2, r3, #10 8002744: 687b ldr r3, [r7, #4] 8002746: 681b ldr r3, [r3, #0] 8002748: 430a orrs r2, r1 800274a: 609a str r2, [r3, #8] } 800274c: bf00 nop 800274e: 3714 adds r7, #20 8002750: 46bd mov sp, r7 8002752: f85d 7b04 ldr.w r7, [sp], #4 8002756: 4770 bx lr 8002758: 40012300 .word 0x40012300 800275c: 0f000001 .word 0x0f000001 08002760 <__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) { 8002760: b480 push {r7} 8002762: b085 sub sp, #20 8002764: af00 add r7, sp, #0 8002766: 6078 str r0, [r7, #4] uint32_t reg_value; uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 8002768: 687b ldr r3, [r7, #4] 800276a: f003 0307 and.w r3, r3, #7 800276e: 60fb str r3, [r7, #12] reg_value = SCB->AIRCR; /* read old register configuration */ 8002770: 4b0c ldr r3, [pc, #48] ; (80027a4 <__NVIC_SetPriorityGrouping+0x44>) 8002772: 68db ldr r3, [r3, #12] 8002774: 60bb str r3, [r7, #8] reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ 8002776: 68ba ldr r2, [r7, #8] 8002778: f64f 03ff movw r3, #63743 ; 0xf8ff 800277c: 4013 ands r3, r2 800277e: 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 */ 8002780: 68fb ldr r3, [r7, #12] 8002782: 021a lsls r2, r3, #8 ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | 8002784: 68bb ldr r3, [r7, #8] 8002786: 4313 orrs r3, r2 reg_value = (reg_value | 8002788: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 800278c: f443 3300 orr.w r3, r3, #131072 ; 0x20000 8002790: 60bb str r3, [r7, #8] SCB->AIRCR = reg_value; 8002792: 4a04 ldr r2, [pc, #16] ; (80027a4 <__NVIC_SetPriorityGrouping+0x44>) 8002794: 68bb ldr r3, [r7, #8] 8002796: 60d3 str r3, [r2, #12] } 8002798: bf00 nop 800279a: 3714 adds r7, #20 800279c: 46bd mov sp, r7 800279e: f85d 7b04 ldr.w r7, [sp], #4 80027a2: 4770 bx lr 80027a4: e000ed00 .word 0xe000ed00 080027a8 <__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) { 80027a8: b480 push {r7} 80027aa: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); 80027ac: 4b04 ldr r3, [pc, #16] ; (80027c0 <__NVIC_GetPriorityGrouping+0x18>) 80027ae: 68db ldr r3, [r3, #12] 80027b0: 0a1b lsrs r3, r3, #8 80027b2: f003 0307 and.w r3, r3, #7 } 80027b6: 4618 mov r0, r3 80027b8: 46bd mov sp, r7 80027ba: f85d 7b04 ldr.w r7, [sp], #4 80027be: 4770 bx lr 80027c0: e000ed00 .word 0xe000ed00 080027c4 <__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) { 80027c4: b480 push {r7} 80027c6: b083 sub sp, #12 80027c8: af00 add r7, sp, #0 80027ca: 4603 mov r3, r0 80027cc: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 80027ce: f997 3007 ldrsb.w r3, [r7, #7] 80027d2: 2b00 cmp r3, #0 80027d4: db0b blt.n 80027ee <__NVIC_EnableIRQ+0x2a> { NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); 80027d6: 79fb ldrb r3, [r7, #7] 80027d8: f003 021f and.w r2, r3, #31 80027dc: 4907 ldr r1, [pc, #28] ; (80027fc <__NVIC_EnableIRQ+0x38>) 80027de: f997 3007 ldrsb.w r3, [r7, #7] 80027e2: 095b lsrs r3, r3, #5 80027e4: 2001 movs r0, #1 80027e6: fa00 f202 lsl.w r2, r0, r2 80027ea: f841 2023 str.w r2, [r1, r3, lsl #2] } } 80027ee: bf00 nop 80027f0: 370c adds r7, #12 80027f2: 46bd mov sp, r7 80027f4: f85d 7b04 ldr.w r7, [sp], #4 80027f8: 4770 bx lr 80027fa: bf00 nop 80027fc: e000e100 .word 0xe000e100 08002800 <__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) { 8002800: b480 push {r7} 8002802: b083 sub sp, #12 8002804: af00 add r7, sp, #0 8002806: 4603 mov r3, r0 8002808: 6039 str r1, [r7, #0] 800280a: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 800280c: f997 3007 ldrsb.w r3, [r7, #7] 8002810: 2b00 cmp r3, #0 8002812: db0a blt.n 800282a <__NVIC_SetPriority+0x2a> { NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 8002814: 683b ldr r3, [r7, #0] 8002816: b2da uxtb r2, r3 8002818: 490c ldr r1, [pc, #48] ; (800284c <__NVIC_SetPriority+0x4c>) 800281a: f997 3007 ldrsb.w r3, [r7, #7] 800281e: 0112 lsls r2, r2, #4 8002820: b2d2 uxtb r2, r2 8002822: 440b add r3, r1 8002824: 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); } } 8002828: e00a b.n 8002840 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 800282a: 683b ldr r3, [r7, #0] 800282c: b2da uxtb r2, r3 800282e: 4908 ldr r1, [pc, #32] ; (8002850 <__NVIC_SetPriority+0x50>) 8002830: 79fb ldrb r3, [r7, #7] 8002832: f003 030f and.w r3, r3, #15 8002836: 3b04 subs r3, #4 8002838: 0112 lsls r2, r2, #4 800283a: b2d2 uxtb r2, r2 800283c: 440b add r3, r1 800283e: 761a strb r2, [r3, #24] } 8002840: bf00 nop 8002842: 370c adds r7, #12 8002844: 46bd mov sp, r7 8002846: f85d 7b04 ldr.w r7, [sp], #4 800284a: 4770 bx lr 800284c: e000e100 .word 0xe000e100 8002850: e000ed00 .word 0xe000ed00 08002854 : \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) { 8002854: b480 push {r7} 8002856: b089 sub sp, #36 ; 0x24 8002858: af00 add r7, sp, #0 800285a: 60f8 str r0, [r7, #12] 800285c: 60b9 str r1, [r7, #8] 800285e: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 8002860: 68fb ldr r3, [r7, #12] 8002862: f003 0307 and.w r3, r3, #7 8002866: 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); 8002868: 69fb ldr r3, [r7, #28] 800286a: f1c3 0307 rsb r3, r3, #7 800286e: 2b04 cmp r3, #4 8002870: bf28 it cs 8002872: 2304 movcs r3, #4 8002874: 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)); 8002876: 69fb ldr r3, [r7, #28] 8002878: 3304 adds r3, #4 800287a: 2b06 cmp r3, #6 800287c: d902 bls.n 8002884 800287e: 69fb ldr r3, [r7, #28] 8002880: 3b03 subs r3, #3 8002882: e000 b.n 8002886 8002884: 2300 movs r3, #0 8002886: 617b str r3, [r7, #20] return ( ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8002888: f04f 32ff mov.w r2, #4294967295 800288c: 69bb ldr r3, [r7, #24] 800288e: fa02 f303 lsl.w r3, r2, r3 8002892: 43da mvns r2, r3 8002894: 68bb ldr r3, [r7, #8] 8002896: 401a ands r2, r3 8002898: 697b ldr r3, [r7, #20] 800289a: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) 800289c: f04f 31ff mov.w r1, #4294967295 80028a0: 697b ldr r3, [r7, #20] 80028a2: fa01 f303 lsl.w r3, r1, r3 80028a6: 43d9 mvns r1, r3 80028a8: 687b ldr r3, [r7, #4] 80028aa: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 80028ac: 4313 orrs r3, r2 ); } 80028ae: 4618 mov r0, r3 80028b0: 3724 adds r7, #36 ; 0x24 80028b2: 46bd mov sp, r7 80028b4: f85d 7b04 ldr.w r7, [sp], #4 80028b8: 4770 bx lr ... 080028bc : \note When the variable __Vendor_SysTickConfig is set to 1, then the function SysTick_Config is not included. In this case, the file device.h must contain a vendor-specific implementation of this function. */ __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { 80028bc: b580 push {r7, lr} 80028be: b082 sub sp, #8 80028c0: af00 add r7, sp, #0 80028c2: 6078 str r0, [r7, #4] if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) 80028c4: 687b ldr r3, [r7, #4] 80028c6: 3b01 subs r3, #1 80028c8: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 80028cc: d301 bcc.n 80028d2 { return (1UL); /* Reload value impossible */ 80028ce: 2301 movs r3, #1 80028d0: e00f b.n 80028f2 } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ 80028d2: 4a0a ldr r2, [pc, #40] ; (80028fc ) 80028d4: 687b ldr r3, [r7, #4] 80028d6: 3b01 subs r3, #1 80028d8: 6053 str r3, [r2, #4] NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ 80028da: 210f movs r1, #15 80028dc: f04f 30ff mov.w r0, #4294967295 80028e0: f7ff ff8e bl 8002800 <__NVIC_SetPriority> SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ 80028e4: 4b05 ldr r3, [pc, #20] ; (80028fc ) 80028e6: 2200 movs r2, #0 80028e8: 609a str r2, [r3, #8] SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | 80028ea: 4b04 ldr r3, [pc, #16] ; (80028fc ) 80028ec: 2207 movs r2, #7 80028ee: 601a str r2, [r3, #0] SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ 80028f0: 2300 movs r3, #0 } 80028f2: 4618 mov r0, r3 80028f4: 3708 adds r7, #8 80028f6: 46bd mov sp, r7 80028f8: bd80 pop {r7, pc} 80028fa: bf00 nop 80028fc: e000e010 .word 0xe000e010 08002900 : * @note When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. * The pending IRQ priority will be managed only by the subpriority. * @retval None */ void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { 8002900: b580 push {r7, lr} 8002902: b082 sub sp, #8 8002904: af00 add r7, sp, #0 8002906: 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); 8002908: 6878 ldr r0, [r7, #4] 800290a: f7ff ff29 bl 8002760 <__NVIC_SetPriorityGrouping> } 800290e: bf00 nop 8002910: 3708 adds r7, #8 8002912: 46bd mov sp, r7 8002914: bd80 pop {r7, pc} 08002916 : * 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) { 8002916: b580 push {r7, lr} 8002918: b086 sub sp, #24 800291a: af00 add r7, sp, #0 800291c: 4603 mov r3, r0 800291e: 60b9 str r1, [r7, #8] 8002920: 607a str r2, [r7, #4] 8002922: 73fb strb r3, [r7, #15] uint32_t prioritygroup = 0x00U; 8002924: 2300 movs r3, #0 8002926: 617b str r3, [r7, #20] /* Check the parameters */ assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority)); prioritygroup = NVIC_GetPriorityGrouping(); 8002928: f7ff ff3e bl 80027a8 <__NVIC_GetPriorityGrouping> 800292c: 6178 str r0, [r7, #20] NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); 800292e: 687a ldr r2, [r7, #4] 8002930: 68b9 ldr r1, [r7, #8] 8002932: 6978 ldr r0, [r7, #20] 8002934: f7ff ff8e bl 8002854 8002938: 4602 mov r2, r0 800293a: f997 300f ldrsb.w r3, [r7, #15] 800293e: 4611 mov r1, r2 8002940: 4618 mov r0, r3 8002942: f7ff ff5d bl 8002800 <__NVIC_SetPriority> } 8002946: bf00 nop 8002948: 3718 adds r7, #24 800294a: 46bd mov sp, r7 800294c: bd80 pop {r7, pc} 0800294e : * 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 (stm32f4xxxx.h)) * @retval None */ void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) { 800294e: b580 push {r7, lr} 8002950: b082 sub sp, #8 8002952: af00 add r7, sp, #0 8002954: 4603 mov r3, r0 8002956: 71fb strb r3, [r7, #7] /* Check the parameters */ assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); /* Enable interrupt */ NVIC_EnableIRQ(IRQn); 8002958: f997 3007 ldrsb.w r3, [r7, #7] 800295c: 4618 mov r0, r3 800295e: f7ff ff31 bl 80027c4 <__NVIC_EnableIRQ> } 8002962: bf00 nop 8002964: 3708 adds r7, #8 8002966: 46bd mov sp, r7 8002968: bd80 pop {r7, pc} 0800296a : * @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) { 800296a: b580 push {r7, lr} 800296c: b082 sub sp, #8 800296e: af00 add r7, sp, #0 8002970: 6078 str r0, [r7, #4] return SysTick_Config(TicksNumb); 8002972: 6878 ldr r0, [r7, #4] 8002974: f7ff ffa2 bl 80028bc 8002978: 4603 mov r3, r0 } 800297a: 4618 mov r0, r3 800297c: 3708 adds r7, #8 800297e: 46bd mov sp, r7 8002980: bd80 pop {r7, pc} 08002982 : * @param hdma pointer to a DMA_HandleTypeDef structure that contains * the configuration information for the specified DMA Stream. * @retval HAL status */ HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) { 8002982: b480 push {r7} 8002984: b083 sub sp, #12 8002986: af00 add r7, sp, #0 8002988: 6078 str r0, [r7, #4] if(hdma->State != HAL_DMA_STATE_BUSY) 800298a: 687b ldr r3, [r7, #4] 800298c: f893 3035 ldrb.w r3, [r3, #53] ; 0x35 8002990: b2db uxtb r3, r3 8002992: 2b02 cmp r3, #2 8002994: d004 beq.n 80029a0 { hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; 8002996: 687b ldr r3, [r7, #4] 8002998: 2280 movs r2, #128 ; 0x80 800299a: 655a str r2, [r3, #84] ; 0x54 return HAL_ERROR; 800299c: 2301 movs r3, #1 800299e: e00c b.n 80029ba } else { /* Set Abort State */ hdma->State = HAL_DMA_STATE_ABORT; 80029a0: 687b ldr r3, [r7, #4] 80029a2: 2205 movs r2, #5 80029a4: f883 2035 strb.w r2, [r3, #53] ; 0x35 /* Disable the stream */ __HAL_DMA_DISABLE(hdma); 80029a8: 687b ldr r3, [r7, #4] 80029aa: 681b ldr r3, [r3, #0] 80029ac: 681a ldr r2, [r3, #0] 80029ae: 687b ldr r3, [r7, #4] 80029b0: 681b ldr r3, [r3, #0] 80029b2: f022 0201 bic.w r2, r2, #1 80029b6: 601a str r2, [r3, #0] } return HAL_OK; 80029b8: 2300 movs r3, #0 } 80029ba: 4618 mov r0, r3 80029bc: 370c adds r7, #12 80029be: 46bd mov sp, r7 80029c0: f85d 7b04 ldr.w r7, [sp], #4 80029c4: 4770 bx lr ... 080029c8 : * @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) { 80029c8: b480 push {r7} 80029ca: b089 sub sp, #36 ; 0x24 80029cc: af00 add r7, sp, #0 80029ce: 6078 str r0, [r7, #4] 80029d0: 6039 str r1, [r7, #0] uint32_t position; uint32_t ioposition = 0x00U; 80029d2: 2300 movs r3, #0 80029d4: 617b str r3, [r7, #20] uint32_t iocurrent = 0x00U; 80029d6: 2300 movs r3, #0 80029d8: 613b str r3, [r7, #16] uint32_t temp = 0x00U; 80029da: 2300 movs r3, #0 80029dc: 61bb str r3, [r7, #24] 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 */ for(position = 0U; position < GPIO_NUMBER; position++) 80029de: 2300 movs r3, #0 80029e0: 61fb str r3, [r7, #28] 80029e2: e177 b.n 8002cd4 { /* Get the IO position */ ioposition = 0x01U << position; 80029e4: 2201 movs r2, #1 80029e6: 69fb ldr r3, [r7, #28] 80029e8: fa02 f303 lsl.w r3, r2, r3 80029ec: 617b str r3, [r7, #20] /* Get the current IO position */ iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; 80029ee: 683b ldr r3, [r7, #0] 80029f0: 681b ldr r3, [r3, #0] 80029f2: 697a ldr r2, [r7, #20] 80029f4: 4013 ands r3, r2 80029f6: 613b str r3, [r7, #16] if(iocurrent == ioposition) 80029f8: 693a ldr r2, [r7, #16] 80029fa: 697b ldr r3, [r7, #20] 80029fc: 429a cmp r2, r3 80029fe: f040 8166 bne.w 8002cce { /*--------------------- GPIO Mode Configuration ------------------------*/ /* In case of Output or Alternate function mode selection */ if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) || 8002a02: 683b ldr r3, [r7, #0] 8002a04: 685b ldr r3, [r3, #4] 8002a06: 2b01 cmp r3, #1 8002a08: d00b beq.n 8002a22 8002a0a: 683b ldr r3, [r7, #0] 8002a0c: 685b ldr r3, [r3, #4] 8002a0e: 2b02 cmp r3, #2 8002a10: d007 beq.n 8002a22 (GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) 8002a12: 683b ldr r3, [r7, #0] 8002a14: 685b ldr r3, [r3, #4] if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) || 8002a16: 2b11 cmp r3, #17 8002a18: d003 beq.n 8002a22 (GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) 8002a1a: 683b ldr r3, [r7, #0] 8002a1c: 685b ldr r3, [r3, #4] 8002a1e: 2b12 cmp r3, #18 8002a20: d130 bne.n 8002a84 { /* Check the Speed parameter */ assert_param(IS_GPIO_SPEED(GPIO_Init->Speed)); /* Configure the IO Speed */ temp = GPIOx->OSPEEDR; 8002a22: 687b ldr r3, [r7, #4] 8002a24: 689b ldr r3, [r3, #8] 8002a26: 61bb str r3, [r7, #24] temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U)); 8002a28: 69fb ldr r3, [r7, #28] 8002a2a: 005b lsls r3, r3, #1 8002a2c: 2203 movs r2, #3 8002a2e: fa02 f303 lsl.w r3, r2, r3 8002a32: 43db mvns r3, r3 8002a34: 69ba ldr r2, [r7, #24] 8002a36: 4013 ands r3, r2 8002a38: 61bb str r3, [r7, #24] temp |= (GPIO_Init->Speed << (position * 2U)); 8002a3a: 683b ldr r3, [r7, #0] 8002a3c: 68da ldr r2, [r3, #12] 8002a3e: 69fb ldr r3, [r7, #28] 8002a40: 005b lsls r3, r3, #1 8002a42: fa02 f303 lsl.w r3, r2, r3 8002a46: 69ba ldr r2, [r7, #24] 8002a48: 4313 orrs r3, r2 8002a4a: 61bb str r3, [r7, #24] GPIOx->OSPEEDR = temp; 8002a4c: 687b ldr r3, [r7, #4] 8002a4e: 69ba ldr r2, [r7, #24] 8002a50: 609a str r2, [r3, #8] /* Configure the IO Output Type */ temp = GPIOx->OTYPER; 8002a52: 687b ldr r3, [r7, #4] 8002a54: 685b ldr r3, [r3, #4] 8002a56: 61bb str r3, [r7, #24] temp &= ~(GPIO_OTYPER_OT_0 << position) ; 8002a58: 2201 movs r2, #1 8002a5a: 69fb ldr r3, [r7, #28] 8002a5c: fa02 f303 lsl.w r3, r2, r3 8002a60: 43db mvns r3, r3 8002a62: 69ba ldr r2, [r7, #24] 8002a64: 4013 ands r3, r2 8002a66: 61bb str r3, [r7, #24] temp |= (((GPIO_Init->Mode & GPIO_OUTPUT_TYPE) >> 4U) << position); 8002a68: 683b ldr r3, [r7, #0] 8002a6a: 685b ldr r3, [r3, #4] 8002a6c: 091b lsrs r3, r3, #4 8002a6e: f003 0201 and.w r2, r3, #1 8002a72: 69fb ldr r3, [r7, #28] 8002a74: fa02 f303 lsl.w r3, r2, r3 8002a78: 69ba ldr r2, [r7, #24] 8002a7a: 4313 orrs r3, r2 8002a7c: 61bb str r3, [r7, #24] GPIOx->OTYPER = temp; 8002a7e: 687b ldr r3, [r7, #4] 8002a80: 69ba ldr r2, [r7, #24] 8002a82: 605a str r2, [r3, #4] } /* Activate the Pull-up or Pull down resistor for the current IO */ temp = GPIOx->PUPDR; 8002a84: 687b ldr r3, [r7, #4] 8002a86: 68db ldr r3, [r3, #12] 8002a88: 61bb str r3, [r7, #24] temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U)); 8002a8a: 69fb ldr r3, [r7, #28] 8002a8c: 005b lsls r3, r3, #1 8002a8e: 2203 movs r2, #3 8002a90: fa02 f303 lsl.w r3, r2, r3 8002a94: 43db mvns r3, r3 8002a96: 69ba ldr r2, [r7, #24] 8002a98: 4013 ands r3, r2 8002a9a: 61bb str r3, [r7, #24] temp |= ((GPIO_Init->Pull) << (position * 2U)); 8002a9c: 683b ldr r3, [r7, #0] 8002a9e: 689a ldr r2, [r3, #8] 8002aa0: 69fb ldr r3, [r7, #28] 8002aa2: 005b lsls r3, r3, #1 8002aa4: fa02 f303 lsl.w r3, r2, r3 8002aa8: 69ba ldr r2, [r7, #24] 8002aaa: 4313 orrs r3, r2 8002aac: 61bb str r3, [r7, #24] GPIOx->PUPDR = temp; 8002aae: 687b ldr r3, [r7, #4] 8002ab0: 69ba ldr r2, [r7, #24] 8002ab2: 60da str r2, [r3, #12] /* In case of Alternate function mode selection */ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD)) 8002ab4: 683b ldr r3, [r7, #0] 8002ab6: 685b ldr r3, [r3, #4] 8002ab8: 2b02 cmp r3, #2 8002aba: d003 beq.n 8002ac4 8002abc: 683b ldr r3, [r7, #0] 8002abe: 685b ldr r3, [r3, #4] 8002ac0: 2b12 cmp r3, #18 8002ac2: d123 bne.n 8002b0c { /* Check the Alternate function parameter */ assert_param(IS_GPIO_AF(GPIO_Init->Alternate)); /* Configure Alternate function mapped with the current IO */ temp = GPIOx->AFR[position >> 3U]; 8002ac4: 69fb ldr r3, [r7, #28] 8002ac6: 08da lsrs r2, r3, #3 8002ac8: 687b ldr r3, [r7, #4] 8002aca: 3208 adds r2, #8 8002acc: f853 3022 ldr.w r3, [r3, r2, lsl #2] 8002ad0: 61bb str r3, [r7, #24] temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ; 8002ad2: 69fb ldr r3, [r7, #28] 8002ad4: f003 0307 and.w r3, r3, #7 8002ad8: 009b lsls r3, r3, #2 8002ada: 220f movs r2, #15 8002adc: fa02 f303 lsl.w r3, r2, r3 8002ae0: 43db mvns r3, r3 8002ae2: 69ba ldr r2, [r7, #24] 8002ae4: 4013 ands r3, r2 8002ae6: 61bb str r3, [r7, #24] temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U)); 8002ae8: 683b ldr r3, [r7, #0] 8002aea: 691a ldr r2, [r3, #16] 8002aec: 69fb ldr r3, [r7, #28] 8002aee: f003 0307 and.w r3, r3, #7 8002af2: 009b lsls r3, r3, #2 8002af4: fa02 f303 lsl.w r3, r2, r3 8002af8: 69ba ldr r2, [r7, #24] 8002afa: 4313 orrs r3, r2 8002afc: 61bb str r3, [r7, #24] GPIOx->AFR[position >> 3U] = temp; 8002afe: 69fb ldr r3, [r7, #28] 8002b00: 08da lsrs r2, r3, #3 8002b02: 687b ldr r3, [r7, #4] 8002b04: 3208 adds r2, #8 8002b06: 69b9 ldr r1, [r7, #24] 8002b08: f843 1022 str.w r1, [r3, r2, lsl #2] } /* Configure IO Direction mode (Input, Output, Alternate or Analog) */ temp = GPIOx->MODER; 8002b0c: 687b ldr r3, [r7, #4] 8002b0e: 681b ldr r3, [r3, #0] 8002b10: 61bb str r3, [r7, #24] temp &= ~(GPIO_MODER_MODER0 << (position * 2U)); 8002b12: 69fb ldr r3, [r7, #28] 8002b14: 005b lsls r3, r3, #1 8002b16: 2203 movs r2, #3 8002b18: fa02 f303 lsl.w r3, r2, r3 8002b1c: 43db mvns r3, r3 8002b1e: 69ba ldr r2, [r7, #24] 8002b20: 4013 ands r3, r2 8002b22: 61bb str r3, [r7, #24] temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U)); 8002b24: 683b ldr r3, [r7, #0] 8002b26: 685b ldr r3, [r3, #4] 8002b28: f003 0203 and.w r2, r3, #3 8002b2c: 69fb ldr r3, [r7, #28] 8002b2e: 005b lsls r3, r3, #1 8002b30: fa02 f303 lsl.w r3, r2, r3 8002b34: 69ba ldr r2, [r7, #24] 8002b36: 4313 orrs r3, r2 8002b38: 61bb str r3, [r7, #24] GPIOx->MODER = temp; 8002b3a: 687b ldr r3, [r7, #4] 8002b3c: 69ba ldr r2, [r7, #24] 8002b3e: 601a str r2, [r3, #0] /*--------------------- EXTI Mode Configuration ------------------------*/ /* Configure the External Interrupt or event for the current IO */ if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) 8002b40: 683b ldr r3, [r7, #0] 8002b42: 685b ldr r3, [r3, #4] 8002b44: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 8002b48: 2b00 cmp r3, #0 8002b4a: f000 80c0 beq.w 8002cce { /* Enable SYSCFG Clock */ __HAL_RCC_SYSCFG_CLK_ENABLE(); 8002b4e: 2300 movs r3, #0 8002b50: 60fb str r3, [r7, #12] 8002b52: 4b65 ldr r3, [pc, #404] ; (8002ce8 ) 8002b54: 6c5b ldr r3, [r3, #68] ; 0x44 8002b56: 4a64 ldr r2, [pc, #400] ; (8002ce8 ) 8002b58: f443 4380 orr.w r3, r3, #16384 ; 0x4000 8002b5c: 6453 str r3, [r2, #68] ; 0x44 8002b5e: 4b62 ldr r3, [pc, #392] ; (8002ce8 ) 8002b60: 6c5b ldr r3, [r3, #68] ; 0x44 8002b62: f403 4380 and.w r3, r3, #16384 ; 0x4000 8002b66: 60fb str r3, [r7, #12] 8002b68: 68fb ldr r3, [r7, #12] temp = SYSCFG->EXTICR[position >> 2U]; 8002b6a: 4a60 ldr r2, [pc, #384] ; (8002cec ) 8002b6c: 69fb ldr r3, [r7, #28] 8002b6e: 089b lsrs r3, r3, #2 8002b70: 3302 adds r3, #2 8002b72: f852 3023 ldr.w r3, [r2, r3, lsl #2] 8002b76: 61bb str r3, [r7, #24] temp &= ~(0x0FU << (4U * (position & 0x03U))); 8002b78: 69fb ldr r3, [r7, #28] 8002b7a: f003 0303 and.w r3, r3, #3 8002b7e: 009b lsls r3, r3, #2 8002b80: 220f movs r2, #15 8002b82: fa02 f303 lsl.w r3, r2, r3 8002b86: 43db mvns r3, r3 8002b88: 69ba ldr r2, [r7, #24] 8002b8a: 4013 ands r3, r2 8002b8c: 61bb str r3, [r7, #24] temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))); 8002b8e: 687b ldr r3, [r7, #4] 8002b90: 4a57 ldr r2, [pc, #348] ; (8002cf0 ) 8002b92: 4293 cmp r3, r2 8002b94: d037 beq.n 8002c06 8002b96: 687b ldr r3, [r7, #4] 8002b98: 4a56 ldr r2, [pc, #344] ; (8002cf4 ) 8002b9a: 4293 cmp r3, r2 8002b9c: d031 beq.n 8002c02 8002b9e: 687b ldr r3, [r7, #4] 8002ba0: 4a55 ldr r2, [pc, #340] ; (8002cf8 ) 8002ba2: 4293 cmp r3, r2 8002ba4: d02b beq.n 8002bfe 8002ba6: 687b ldr r3, [r7, #4] 8002ba8: 4a54 ldr r2, [pc, #336] ; (8002cfc ) 8002baa: 4293 cmp r3, r2 8002bac: d025 beq.n 8002bfa 8002bae: 687b ldr r3, [r7, #4] 8002bb0: 4a53 ldr r2, [pc, #332] ; (8002d00 ) 8002bb2: 4293 cmp r3, r2 8002bb4: d01f beq.n 8002bf6 8002bb6: 687b ldr r3, [r7, #4] 8002bb8: 4a52 ldr r2, [pc, #328] ; (8002d04 ) 8002bba: 4293 cmp r3, r2 8002bbc: d019 beq.n 8002bf2 8002bbe: 687b ldr r3, [r7, #4] 8002bc0: 4a51 ldr r2, [pc, #324] ; (8002d08 ) 8002bc2: 4293 cmp r3, r2 8002bc4: d013 beq.n 8002bee 8002bc6: 687b ldr r3, [r7, #4] 8002bc8: 4a50 ldr r2, [pc, #320] ; (8002d0c ) 8002bca: 4293 cmp r3, r2 8002bcc: d00d beq.n 8002bea 8002bce: 687b ldr r3, [r7, #4] 8002bd0: 4a4f ldr r2, [pc, #316] ; (8002d10 ) 8002bd2: 4293 cmp r3, r2 8002bd4: d007 beq.n 8002be6 8002bd6: 687b ldr r3, [r7, #4] 8002bd8: 4a4e ldr r2, [pc, #312] ; (8002d14 ) 8002bda: 4293 cmp r3, r2 8002bdc: d101 bne.n 8002be2 8002bde: 2309 movs r3, #9 8002be0: e012 b.n 8002c08 8002be2: 230a movs r3, #10 8002be4: e010 b.n 8002c08 8002be6: 2308 movs r3, #8 8002be8: e00e b.n 8002c08 8002bea: 2307 movs r3, #7 8002bec: e00c b.n 8002c08 8002bee: 2306 movs r3, #6 8002bf0: e00a b.n 8002c08 8002bf2: 2305 movs r3, #5 8002bf4: e008 b.n 8002c08 8002bf6: 2304 movs r3, #4 8002bf8: e006 b.n 8002c08 8002bfa: 2303 movs r3, #3 8002bfc: e004 b.n 8002c08 8002bfe: 2302 movs r3, #2 8002c00: e002 b.n 8002c08 8002c02: 2301 movs r3, #1 8002c04: e000 b.n 8002c08 8002c06: 2300 movs r3, #0 8002c08: 69fa ldr r2, [r7, #28] 8002c0a: f002 0203 and.w r2, r2, #3 8002c0e: 0092 lsls r2, r2, #2 8002c10: 4093 lsls r3, r2 8002c12: 69ba ldr r2, [r7, #24] 8002c14: 4313 orrs r3, r2 8002c16: 61bb str r3, [r7, #24] SYSCFG->EXTICR[position >> 2U] = temp; 8002c18: 4934 ldr r1, [pc, #208] ; (8002cec ) 8002c1a: 69fb ldr r3, [r7, #28] 8002c1c: 089b lsrs r3, r3, #2 8002c1e: 3302 adds r3, #2 8002c20: 69ba ldr r2, [r7, #24] 8002c22: f841 2023 str.w r2, [r1, r3, lsl #2] /* Clear EXTI line configuration */ temp = EXTI->IMR; 8002c26: 4b3c ldr r3, [pc, #240] ; (8002d18 ) 8002c28: 681b ldr r3, [r3, #0] 8002c2a: 61bb str r3, [r7, #24] temp &= ~((uint32_t)iocurrent); 8002c2c: 693b ldr r3, [r7, #16] 8002c2e: 43db mvns r3, r3 8002c30: 69ba ldr r2, [r7, #24] 8002c32: 4013 ands r3, r2 8002c34: 61bb str r3, [r7, #24] if((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) 8002c36: 683b ldr r3, [r7, #0] 8002c38: 685b ldr r3, [r3, #4] 8002c3a: f403 3380 and.w r3, r3, #65536 ; 0x10000 8002c3e: 2b00 cmp r3, #0 8002c40: d003 beq.n 8002c4a { temp |= iocurrent; 8002c42: 69ba ldr r2, [r7, #24] 8002c44: 693b ldr r3, [r7, #16] 8002c46: 4313 orrs r3, r2 8002c48: 61bb str r3, [r7, #24] } EXTI->IMR = temp; 8002c4a: 4a33 ldr r2, [pc, #204] ; (8002d18 ) 8002c4c: 69bb ldr r3, [r7, #24] 8002c4e: 6013 str r3, [r2, #0] temp = EXTI->EMR; 8002c50: 4b31 ldr r3, [pc, #196] ; (8002d18 ) 8002c52: 685b ldr r3, [r3, #4] 8002c54: 61bb str r3, [r7, #24] temp &= ~((uint32_t)iocurrent); 8002c56: 693b ldr r3, [r7, #16] 8002c58: 43db mvns r3, r3 8002c5a: 69ba ldr r2, [r7, #24] 8002c5c: 4013 ands r3, r2 8002c5e: 61bb str r3, [r7, #24] if((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) 8002c60: 683b ldr r3, [r7, #0] 8002c62: 685b ldr r3, [r3, #4] 8002c64: f403 3300 and.w r3, r3, #131072 ; 0x20000 8002c68: 2b00 cmp r3, #0 8002c6a: d003 beq.n 8002c74 { temp |= iocurrent; 8002c6c: 69ba ldr r2, [r7, #24] 8002c6e: 693b ldr r3, [r7, #16] 8002c70: 4313 orrs r3, r2 8002c72: 61bb str r3, [r7, #24] } EXTI->EMR = temp; 8002c74: 4a28 ldr r2, [pc, #160] ; (8002d18 ) 8002c76: 69bb ldr r3, [r7, #24] 8002c78: 6053 str r3, [r2, #4] /* Clear Rising Falling edge configuration */ temp = EXTI->RTSR; 8002c7a: 4b27 ldr r3, [pc, #156] ; (8002d18 ) 8002c7c: 689b ldr r3, [r3, #8] 8002c7e: 61bb str r3, [r7, #24] temp &= ~((uint32_t)iocurrent); 8002c80: 693b ldr r3, [r7, #16] 8002c82: 43db mvns r3, r3 8002c84: 69ba ldr r2, [r7, #24] 8002c86: 4013 ands r3, r2 8002c88: 61bb str r3, [r7, #24] if((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) 8002c8a: 683b ldr r3, [r7, #0] 8002c8c: 685b ldr r3, [r3, #4] 8002c8e: f403 1380 and.w r3, r3, #1048576 ; 0x100000 8002c92: 2b00 cmp r3, #0 8002c94: d003 beq.n 8002c9e { temp |= iocurrent; 8002c96: 69ba ldr r2, [r7, #24] 8002c98: 693b ldr r3, [r7, #16] 8002c9a: 4313 orrs r3, r2 8002c9c: 61bb str r3, [r7, #24] } EXTI->RTSR = temp; 8002c9e: 4a1e ldr r2, [pc, #120] ; (8002d18 ) 8002ca0: 69bb ldr r3, [r7, #24] 8002ca2: 6093 str r3, [r2, #8] temp = EXTI->FTSR; 8002ca4: 4b1c ldr r3, [pc, #112] ; (8002d18 ) 8002ca6: 68db ldr r3, [r3, #12] 8002ca8: 61bb str r3, [r7, #24] temp &= ~((uint32_t)iocurrent); 8002caa: 693b ldr r3, [r7, #16] 8002cac: 43db mvns r3, r3 8002cae: 69ba ldr r2, [r7, #24] 8002cb0: 4013 ands r3, r2 8002cb2: 61bb str r3, [r7, #24] if((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) 8002cb4: 683b ldr r3, [r7, #0] 8002cb6: 685b ldr r3, [r3, #4] 8002cb8: f403 1300 and.w r3, r3, #2097152 ; 0x200000 8002cbc: 2b00 cmp r3, #0 8002cbe: d003 beq.n 8002cc8 { temp |= iocurrent; 8002cc0: 69ba ldr r2, [r7, #24] 8002cc2: 693b ldr r3, [r7, #16] 8002cc4: 4313 orrs r3, r2 8002cc6: 61bb str r3, [r7, #24] } EXTI->FTSR = temp; 8002cc8: 4a13 ldr r2, [pc, #76] ; (8002d18 ) 8002cca: 69bb ldr r3, [r7, #24] 8002ccc: 60d3 str r3, [r2, #12] for(position = 0U; position < GPIO_NUMBER; position++) 8002cce: 69fb ldr r3, [r7, #28] 8002cd0: 3301 adds r3, #1 8002cd2: 61fb str r3, [r7, #28] 8002cd4: 69fb ldr r3, [r7, #28] 8002cd6: 2b0f cmp r3, #15 8002cd8: f67f ae84 bls.w 80029e4 } } } } 8002cdc: bf00 nop 8002cde: 3724 adds r7, #36 ; 0x24 8002ce0: 46bd mov sp, r7 8002ce2: f85d 7b04 ldr.w r7, [sp], #4 8002ce6: 4770 bx lr 8002ce8: 40023800 .word 0x40023800 8002cec: 40013800 .word 0x40013800 8002cf0: 40020000 .word 0x40020000 8002cf4: 40020400 .word 0x40020400 8002cf8: 40020800 .word 0x40020800 8002cfc: 40020c00 .word 0x40020c00 8002d00: 40021000 .word 0x40021000 8002d04: 40021400 .word 0x40021400 8002d08: 40021800 .word 0x40021800 8002d0c: 40021c00 .word 0x40021c00 8002d10: 40022000 .word 0x40022000 8002d14: 40022400 .word 0x40022400 8002d18: 40013c00 .word 0x40013c00 08002d1c : * @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) { 8002d1c: b480 push {r7} 8002d1e: b083 sub sp, #12 8002d20: af00 add r7, sp, #0 8002d22: 6078 str r0, [r7, #4] 8002d24: 460b mov r3, r1 8002d26: 807b strh r3, [r7, #2] 8002d28: 4613 mov r3, r2 8002d2a: 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) 8002d2c: 787b ldrb r3, [r7, #1] 8002d2e: 2b00 cmp r3, #0 8002d30: d003 beq.n 8002d3a { GPIOx->BSRR = GPIO_Pin; 8002d32: 887a ldrh r2, [r7, #2] 8002d34: 687b ldr r3, [r7, #4] 8002d36: 619a str r2, [r3, #24] } else { GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; } } 8002d38: e003 b.n 8002d42 GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U; 8002d3a: 887b ldrh r3, [r7, #2] 8002d3c: 041a lsls r2, r3, #16 8002d3e: 687b ldr r3, [r7, #4] 8002d40: 619a str r2, [r3, #24] } 8002d42: bf00 nop 8002d44: 370c adds r7, #12 8002d46: 46bd mov sp, r7 8002d48: f85d 7b04 ldr.w r7, [sp], #4 8002d4c: 4770 bx lr ... 08002d50 : * @brief This function handles EXTI interrupt request. * @param GPIO_Pin Specifies the pins connected EXTI line * @retval None */ void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) { 8002d50: b580 push {r7, lr} 8002d52: b082 sub sp, #8 8002d54: af00 add r7, sp, #0 8002d56: 4603 mov r3, r0 8002d58: 80fb strh r3, [r7, #6] /* EXTI line interrupt detected */ if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) 8002d5a: 4b08 ldr r3, [pc, #32] ; (8002d7c ) 8002d5c: 695a ldr r2, [r3, #20] 8002d5e: 88fb ldrh r3, [r7, #6] 8002d60: 4013 ands r3, r2 8002d62: 2b00 cmp r3, #0 8002d64: d006 beq.n 8002d74 { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); 8002d66: 4a05 ldr r2, [pc, #20] ; (8002d7c ) 8002d68: 88fb ldrh r3, [r7, #6] 8002d6a: 6153 str r3, [r2, #20] HAL_GPIO_EXTI_Callback(GPIO_Pin); 8002d6c: 88fb ldrh r3, [r7, #6] 8002d6e: 4618 mov r0, r3 8002d70: f000 f806 bl 8002d80 } } 8002d74: bf00 nop 8002d76: 3708 adds r7, #8 8002d78: 46bd mov sp, r7 8002d7a: bd80 pop {r7, pc} 8002d7c: 40013c00 .word 0x40013c00 08002d80 : * @brief EXTI line detection callbacks. * @param GPIO_Pin Specifies the pins connected EXTI line * @retval None */ __weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { 8002d80: b480 push {r7} 8002d82: b083 sub sp, #12 8002d84: af00 add r7, sp, #0 8002d86: 4603 mov r3, r0 8002d88: 80fb strh r3, [r7, #6] /* Prevent unused argument(s) compilation warning */ UNUSED(GPIO_Pin); /* NOTE: This function Should not be modified, when the callback is needed, the HAL_GPIO_EXTI_Callback could be implemented in the user file */ } 8002d8a: bf00 nop 8002d8c: 370c adds r7, #12 8002d8e: 46bd mov sp, r7 8002d90: f85d 7b04 ldr.w r7, [sp], #4 8002d94: 4770 bx lr ... 08002d98 : * supported by this API. User should request a transition to HSE Off * first and then HSE On or HSE Bypass. * @retval HAL status */ __weak HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) { 8002d98: b580 push {r7, lr} 8002d9a: b086 sub sp, #24 8002d9c: af00 add r7, sp, #0 8002d9e: 6078 str r0, [r7, #4] uint32_t tickstart, pll_config; /* Check Null pointer */ if(RCC_OscInitStruct == NULL) 8002da0: 687b ldr r3, [r7, #4] 8002da2: 2b00 cmp r3, #0 8002da4: d101 bne.n 8002daa { return HAL_ERROR; 8002da6: 2301 movs r3, #1 8002da8: e25b b.n 8003262 } /* Check the parameters */ assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); /*------------------------------- HSE Configuration ------------------------*/ if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) 8002daa: 687b ldr r3, [r7, #4] 8002dac: 681b ldr r3, [r3, #0] 8002dae: f003 0301 and.w r3, r3, #1 8002db2: 2b00 cmp r3, #0 8002db4: d075 beq.n 8002ea2 { /* 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 HSE will not disabled */ if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ 8002db6: 4ba3 ldr r3, [pc, #652] ; (8003044 ) 8002db8: 689b ldr r3, [r3, #8] 8002dba: f003 030c and.w r3, r3, #12 8002dbe: 2b04 cmp r3, #4 8002dc0: d00c beq.n 8002ddc ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) 8002dc2: 4ba0 ldr r3, [pc, #640] ; (8003044 ) 8002dc4: 689b ldr r3, [r3, #8] 8002dc6: f003 030c and.w r3, r3, #12 if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSE) ||\ 8002dca: 2b08 cmp r3, #8 8002dcc: d112 bne.n 8002df4 ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE))) 8002dce: 4b9d ldr r3, [pc, #628] ; (8003044 ) 8002dd0: 685b ldr r3, [r3, #4] 8002dd2: f403 0380 and.w r3, r3, #4194304 ; 0x400000 8002dd6: f5b3 0f80 cmp.w r3, #4194304 ; 0x400000 8002dda: d10b bne.n 8002df4 { if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) 8002ddc: 4b99 ldr r3, [pc, #612] ; (8003044 ) 8002dde: 681b ldr r3, [r3, #0] 8002de0: f403 3300 and.w r3, r3, #131072 ; 0x20000 8002de4: 2b00 cmp r3, #0 8002de6: d05b beq.n 8002ea0 8002de8: 687b ldr r3, [r7, #4] 8002dea: 685b ldr r3, [r3, #4] 8002dec: 2b00 cmp r3, #0 8002dee: d157 bne.n 8002ea0 { return HAL_ERROR; 8002df0: 2301 movs r3, #1 8002df2: e236 b.n 8003262 } } else { /* Set the new HSE configuration ---------------------------------------*/ __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); 8002df4: 687b ldr r3, [r7, #4] 8002df6: 685b ldr r3, [r3, #4] 8002df8: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 8002dfc: d106 bne.n 8002e0c 8002dfe: 4b91 ldr r3, [pc, #580] ; (8003044 ) 8002e00: 681b ldr r3, [r3, #0] 8002e02: 4a90 ldr r2, [pc, #576] ; (8003044 ) 8002e04: f443 3380 orr.w r3, r3, #65536 ; 0x10000 8002e08: 6013 str r3, [r2, #0] 8002e0a: e01d b.n 8002e48 8002e0c: 687b ldr r3, [r7, #4] 8002e0e: 685b ldr r3, [r3, #4] 8002e10: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 8002e14: d10c bne.n 8002e30 8002e16: 4b8b ldr r3, [pc, #556] ; (8003044 ) 8002e18: 681b ldr r3, [r3, #0] 8002e1a: 4a8a ldr r2, [pc, #552] ; (8003044 ) 8002e1c: f443 2380 orr.w r3, r3, #262144 ; 0x40000 8002e20: 6013 str r3, [r2, #0] 8002e22: 4b88 ldr r3, [pc, #544] ; (8003044 ) 8002e24: 681b ldr r3, [r3, #0] 8002e26: 4a87 ldr r2, [pc, #540] ; (8003044 ) 8002e28: f443 3380 orr.w r3, r3, #65536 ; 0x10000 8002e2c: 6013 str r3, [r2, #0] 8002e2e: e00b b.n 8002e48 8002e30: 4b84 ldr r3, [pc, #528] ; (8003044 ) 8002e32: 681b ldr r3, [r3, #0] 8002e34: 4a83 ldr r2, [pc, #524] ; (8003044 ) 8002e36: f423 3380 bic.w r3, r3, #65536 ; 0x10000 8002e3a: 6013 str r3, [r2, #0] 8002e3c: 4b81 ldr r3, [pc, #516] ; (8003044 ) 8002e3e: 681b ldr r3, [r3, #0] 8002e40: 4a80 ldr r2, [pc, #512] ; (8003044 ) 8002e42: f423 2380 bic.w r3, r3, #262144 ; 0x40000 8002e46: 6013 str r3, [r2, #0] /* Check the HSE State */ if((RCC_OscInitStruct->HSEState) != RCC_HSE_OFF) 8002e48: 687b ldr r3, [r7, #4] 8002e4a: 685b ldr r3, [r3, #4] 8002e4c: 2b00 cmp r3, #0 8002e4e: d013 beq.n 8002e78 { /* Get Start Tick */ tickstart = HAL_GetTick(); 8002e50: f7ff f88e bl 8001f70 8002e54: 6138 str r0, [r7, #16] /* Wait till HSE is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) 8002e56: e008 b.n 8002e6a { if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) 8002e58: f7ff f88a bl 8001f70 8002e5c: 4602 mov r2, r0 8002e5e: 693b ldr r3, [r7, #16] 8002e60: 1ad3 subs r3, r2, r3 8002e62: 2b64 cmp r3, #100 ; 0x64 8002e64: d901 bls.n 8002e6a { return HAL_TIMEOUT; 8002e66: 2303 movs r3, #3 8002e68: e1fb b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) 8002e6a: 4b76 ldr r3, [pc, #472] ; (8003044 ) 8002e6c: 681b ldr r3, [r3, #0] 8002e6e: f403 3300 and.w r3, r3, #131072 ; 0x20000 8002e72: 2b00 cmp r3, #0 8002e74: d0f0 beq.n 8002e58 8002e76: e014 b.n 8002ea2 } } else { /* Get Start Tick */ tickstart = HAL_GetTick(); 8002e78: f7ff f87a bl 8001f70 8002e7c: 6138 str r0, [r7, #16] /* Wait till HSE is bypassed or disabled */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) 8002e7e: e008 b.n 8002e92 { if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE) 8002e80: f7ff f876 bl 8001f70 8002e84: 4602 mov r2, r0 8002e86: 693b ldr r3, [r7, #16] 8002e88: 1ad3 subs r3, r2, r3 8002e8a: 2b64 cmp r3, #100 ; 0x64 8002e8c: d901 bls.n 8002e92 { return HAL_TIMEOUT; 8002e8e: 2303 movs r3, #3 8002e90: e1e7 b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) 8002e92: 4b6c ldr r3, [pc, #432] ; (8003044 ) 8002e94: 681b ldr r3, [r3, #0] 8002e96: f403 3300 and.w r3, r3, #131072 ; 0x20000 8002e9a: 2b00 cmp r3, #0 8002e9c: d1f0 bne.n 8002e80 8002e9e: e000 b.n 8002ea2 if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) 8002ea0: bf00 nop } } } } /*----------------------------- HSI Configuration --------------------------*/ if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) 8002ea2: 687b ldr r3, [r7, #4] 8002ea4: 681b ldr r3, [r3, #0] 8002ea6: f003 0302 and.w r3, r3, #2 8002eaa: 2b00 cmp r3, #0 8002eac: d063 beq.n 8002f76 /* Check the parameters */ assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState)); assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue)); /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */ if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ 8002eae: 4b65 ldr r3, [pc, #404] ; (8003044 ) 8002eb0: 689b ldr r3, [r3, #8] 8002eb2: f003 030c and.w r3, r3, #12 8002eb6: 2b00 cmp r3, #0 8002eb8: d00b beq.n 8002ed2 ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) 8002eba: 4b62 ldr r3, [pc, #392] ; (8003044 ) 8002ebc: 689b ldr r3, [r3, #8] 8002ebe: f003 030c and.w r3, r3, #12 if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_HSI) ||\ 8002ec2: 2b08 cmp r3, #8 8002ec4: d11c bne.n 8002f00 ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_PLL) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI))) 8002ec6: 4b5f ldr r3, [pc, #380] ; (8003044 ) 8002ec8: 685b ldr r3, [r3, #4] 8002eca: f403 0380 and.w r3, r3, #4194304 ; 0x400000 8002ece: 2b00 cmp r3, #0 8002ed0: d116 bne.n 8002f00 { /* When HSI is used as system clock it will not disabled */ if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) 8002ed2: 4b5c ldr r3, [pc, #368] ; (8003044 ) 8002ed4: 681b ldr r3, [r3, #0] 8002ed6: f003 0302 and.w r3, r3, #2 8002eda: 2b00 cmp r3, #0 8002edc: d005 beq.n 8002eea 8002ede: 687b ldr r3, [r7, #4] 8002ee0: 68db ldr r3, [r3, #12] 8002ee2: 2b01 cmp r3, #1 8002ee4: d001 beq.n 8002eea { return HAL_ERROR; 8002ee6: 2301 movs r3, #1 8002ee8: e1bb b.n 8003262 } /* Otherwise, just the calibration is allowed */ else { /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); 8002eea: 4b56 ldr r3, [pc, #344] ; (8003044 ) 8002eec: 681b ldr r3, [r3, #0] 8002eee: f023 02f8 bic.w r2, r3, #248 ; 0xf8 8002ef2: 687b ldr r3, [r7, #4] 8002ef4: 691b ldr r3, [r3, #16] 8002ef6: 00db lsls r3, r3, #3 8002ef8: 4952 ldr r1, [pc, #328] ; (8003044 ) 8002efa: 4313 orrs r3, r2 8002efc: 600b str r3, [r1, #0] if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) 8002efe: e03a b.n 8002f76 } } else { /* Check the HSI State */ if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF) 8002f00: 687b ldr r3, [r7, #4] 8002f02: 68db ldr r3, [r3, #12] 8002f04: 2b00 cmp r3, #0 8002f06: d020 beq.n 8002f4a { /* Enable the Internal High Speed oscillator (HSI). */ __HAL_RCC_HSI_ENABLE(); 8002f08: 4b4f ldr r3, [pc, #316] ; (8003048 ) 8002f0a: 2201 movs r2, #1 8002f0c: 601a str r2, [r3, #0] /* Get Start Tick*/ tickstart = HAL_GetTick(); 8002f0e: f7ff f82f bl 8001f70 8002f12: 6138 str r0, [r7, #16] /* Wait till HSI is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) 8002f14: e008 b.n 8002f28 { if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) 8002f16: f7ff f82b bl 8001f70 8002f1a: 4602 mov r2, r0 8002f1c: 693b ldr r3, [r7, #16] 8002f1e: 1ad3 subs r3, r2, r3 8002f20: 2b02 cmp r3, #2 8002f22: d901 bls.n 8002f28 { return HAL_TIMEOUT; 8002f24: 2303 movs r3, #3 8002f26: e19c b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) 8002f28: 4b46 ldr r3, [pc, #280] ; (8003044 ) 8002f2a: 681b ldr r3, [r3, #0] 8002f2c: f003 0302 and.w r3, r3, #2 8002f30: 2b00 cmp r3, #0 8002f32: d0f0 beq.n 8002f16 } } /* Adjusts the Internal High Speed oscillator (HSI) calibration value. */ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); 8002f34: 4b43 ldr r3, [pc, #268] ; (8003044 ) 8002f36: 681b ldr r3, [r3, #0] 8002f38: f023 02f8 bic.w r2, r3, #248 ; 0xf8 8002f3c: 687b ldr r3, [r7, #4] 8002f3e: 691b ldr r3, [r3, #16] 8002f40: 00db lsls r3, r3, #3 8002f42: 4940 ldr r1, [pc, #256] ; (8003044 ) 8002f44: 4313 orrs r3, r2 8002f46: 600b str r3, [r1, #0] 8002f48: e015 b.n 8002f76 } else { /* Disable the Internal High Speed oscillator (HSI). */ __HAL_RCC_HSI_DISABLE(); 8002f4a: 4b3f ldr r3, [pc, #252] ; (8003048 ) 8002f4c: 2200 movs r2, #0 8002f4e: 601a str r2, [r3, #0] /* Get Start Tick*/ tickstart = HAL_GetTick(); 8002f50: f7ff f80e bl 8001f70 8002f54: 6138 str r0, [r7, #16] /* Wait till HSI is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) 8002f56: e008 b.n 8002f6a { if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE) 8002f58: f7ff f80a bl 8001f70 8002f5c: 4602 mov r2, r0 8002f5e: 693b ldr r3, [r7, #16] 8002f60: 1ad3 subs r3, r2, r3 8002f62: 2b02 cmp r3, #2 8002f64: d901 bls.n 8002f6a { return HAL_TIMEOUT; 8002f66: 2303 movs r3, #3 8002f68: e17b b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) 8002f6a: 4b36 ldr r3, [pc, #216] ; (8003044 ) 8002f6c: 681b ldr r3, [r3, #0] 8002f6e: f003 0302 and.w r3, r3, #2 8002f72: 2b00 cmp r3, #0 8002f74: d1f0 bne.n 8002f58 } } } } /*------------------------------ LSI Configuration -------------------------*/ if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) 8002f76: 687b ldr r3, [r7, #4] 8002f78: 681b ldr r3, [r3, #0] 8002f7a: f003 0308 and.w r3, r3, #8 8002f7e: 2b00 cmp r3, #0 8002f80: d030 beq.n 8002fe4 { /* Check the parameters */ assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); /* Check the LSI State */ if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF) 8002f82: 687b ldr r3, [r7, #4] 8002f84: 695b ldr r3, [r3, #20] 8002f86: 2b00 cmp r3, #0 8002f88: d016 beq.n 8002fb8 { /* Enable the Internal Low Speed oscillator (LSI). */ __HAL_RCC_LSI_ENABLE(); 8002f8a: 4b30 ldr r3, [pc, #192] ; (800304c ) 8002f8c: 2201 movs r2, #1 8002f8e: 601a str r2, [r3, #0] /* Get Start Tick*/ tickstart = HAL_GetTick(); 8002f90: f7fe ffee bl 8001f70 8002f94: 6138 str r0, [r7, #16] /* Wait till LSI is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) 8002f96: e008 b.n 8002faa { if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) 8002f98: f7fe ffea bl 8001f70 8002f9c: 4602 mov r2, r0 8002f9e: 693b ldr r3, [r7, #16] 8002fa0: 1ad3 subs r3, r2, r3 8002fa2: 2b02 cmp r3, #2 8002fa4: d901 bls.n 8002faa { return HAL_TIMEOUT; 8002fa6: 2303 movs r3, #3 8002fa8: e15b b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) 8002faa: 4b26 ldr r3, [pc, #152] ; (8003044 ) 8002fac: 6f5b ldr r3, [r3, #116] ; 0x74 8002fae: f003 0302 and.w r3, r3, #2 8002fb2: 2b00 cmp r3, #0 8002fb4: d0f0 beq.n 8002f98 8002fb6: e015 b.n 8002fe4 } } else { /* Disable the Internal Low Speed oscillator (LSI). */ __HAL_RCC_LSI_DISABLE(); 8002fb8: 4b24 ldr r3, [pc, #144] ; (800304c ) 8002fba: 2200 movs r2, #0 8002fbc: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); 8002fbe: f7fe ffd7 bl 8001f70 8002fc2: 6138 str r0, [r7, #16] /* Wait till LSI is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) 8002fc4: e008 b.n 8002fd8 { if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE) 8002fc6: f7fe ffd3 bl 8001f70 8002fca: 4602 mov r2, r0 8002fcc: 693b ldr r3, [r7, #16] 8002fce: 1ad3 subs r3, r2, r3 8002fd0: 2b02 cmp r3, #2 8002fd2: d901 bls.n 8002fd8 { return HAL_TIMEOUT; 8002fd4: 2303 movs r3, #3 8002fd6: e144 b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) 8002fd8: 4b1a ldr r3, [pc, #104] ; (8003044 ) 8002fda: 6f5b ldr r3, [r3, #116] ; 0x74 8002fdc: f003 0302 and.w r3, r3, #2 8002fe0: 2b00 cmp r3, #0 8002fe2: d1f0 bne.n 8002fc6 } } } } /*------------------------------ LSE Configuration -------------------------*/ if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) 8002fe4: 687b ldr r3, [r7, #4] 8002fe6: 681b ldr r3, [r3, #0] 8002fe8: f003 0304 and.w r3, r3, #4 8002fec: 2b00 cmp r3, #0 8002fee: f000 80a0 beq.w 8003132 { FlagStatus pwrclkchanged = RESET; 8002ff2: 2300 movs r3, #0 8002ff4: 75fb strb r3, [r7, #23] /* Check the parameters */ 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_RCC_PWR_IS_CLK_DISABLED()) 8002ff6: 4b13 ldr r3, [pc, #76] ; (8003044 ) 8002ff8: 6c1b ldr r3, [r3, #64] ; 0x40 8002ffa: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 8002ffe: 2b00 cmp r3, #0 8003000: d10f bne.n 8003022 { __HAL_RCC_PWR_CLK_ENABLE(); 8003002: 2300 movs r3, #0 8003004: 60bb str r3, [r7, #8] 8003006: 4b0f ldr r3, [pc, #60] ; (8003044 ) 8003008: 6c1b ldr r3, [r3, #64] ; 0x40 800300a: 4a0e ldr r2, [pc, #56] ; (8003044 ) 800300c: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 8003010: 6413 str r3, [r2, #64] ; 0x40 8003012: 4b0c ldr r3, [pc, #48] ; (8003044 ) 8003014: 6c1b ldr r3, [r3, #64] ; 0x40 8003016: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 800301a: 60bb str r3, [r7, #8] 800301c: 68bb ldr r3, [r7, #8] pwrclkchanged = SET; 800301e: 2301 movs r3, #1 8003020: 75fb strb r3, [r7, #23] } if(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) 8003022: 4b0b ldr r3, [pc, #44] ; (8003050 ) 8003024: 681b ldr r3, [r3, #0] 8003026: f403 7380 and.w r3, r3, #256 ; 0x100 800302a: 2b00 cmp r3, #0 800302c: d121 bne.n 8003072 { /* Enable write access to Backup domain */ SET_BIT(PWR->CR, PWR_CR_DBP); 800302e: 4b08 ldr r3, [pc, #32] ; (8003050 ) 8003030: 681b ldr r3, [r3, #0] 8003032: 4a07 ldr r2, [pc, #28] ; (8003050 ) 8003034: f443 7380 orr.w r3, r3, #256 ; 0x100 8003038: 6013 str r3, [r2, #0] /* Wait for Backup domain Write protection disable */ tickstart = HAL_GetTick(); 800303a: f7fe ff99 bl 8001f70 800303e: 6138 str r0, [r7, #16] while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) 8003040: e011 b.n 8003066 8003042: bf00 nop 8003044: 40023800 .word 0x40023800 8003048: 42470000 .word 0x42470000 800304c: 42470e80 .word 0x42470e80 8003050: 40007000 .word 0x40007000 { if((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) 8003054: f7fe ff8c bl 8001f70 8003058: 4602 mov r2, r0 800305a: 693b ldr r3, [r7, #16] 800305c: 1ad3 subs r3, r2, r3 800305e: 2b02 cmp r3, #2 8003060: d901 bls.n 8003066 { return HAL_TIMEOUT; 8003062: 2303 movs r3, #3 8003064: e0fd b.n 8003262 while(HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) 8003066: 4b81 ldr r3, [pc, #516] ; (800326c ) 8003068: 681b ldr r3, [r3, #0] 800306a: f403 7380 and.w r3, r3, #256 ; 0x100 800306e: 2b00 cmp r3, #0 8003070: d0f0 beq.n 8003054 } } } /* Set the new LSE configuration -----------------------------------------*/ __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); 8003072: 687b ldr r3, [r7, #4] 8003074: 689b ldr r3, [r3, #8] 8003076: 2b01 cmp r3, #1 8003078: d106 bne.n 8003088 800307a: 4b7d ldr r3, [pc, #500] ; (8003270 ) 800307c: 6f1b ldr r3, [r3, #112] ; 0x70 800307e: 4a7c ldr r2, [pc, #496] ; (8003270 ) 8003080: f043 0301 orr.w r3, r3, #1 8003084: 6713 str r3, [r2, #112] ; 0x70 8003086: e01c b.n 80030c2 8003088: 687b ldr r3, [r7, #4] 800308a: 689b ldr r3, [r3, #8] 800308c: 2b05 cmp r3, #5 800308e: d10c bne.n 80030aa 8003090: 4b77 ldr r3, [pc, #476] ; (8003270 ) 8003092: 6f1b ldr r3, [r3, #112] ; 0x70 8003094: 4a76 ldr r2, [pc, #472] ; (8003270 ) 8003096: f043 0304 orr.w r3, r3, #4 800309a: 6713 str r3, [r2, #112] ; 0x70 800309c: 4b74 ldr r3, [pc, #464] ; (8003270 ) 800309e: 6f1b ldr r3, [r3, #112] ; 0x70 80030a0: 4a73 ldr r2, [pc, #460] ; (8003270 ) 80030a2: f043 0301 orr.w r3, r3, #1 80030a6: 6713 str r3, [r2, #112] ; 0x70 80030a8: e00b b.n 80030c2 80030aa: 4b71 ldr r3, [pc, #452] ; (8003270 ) 80030ac: 6f1b ldr r3, [r3, #112] ; 0x70 80030ae: 4a70 ldr r2, [pc, #448] ; (8003270 ) 80030b0: f023 0301 bic.w r3, r3, #1 80030b4: 6713 str r3, [r2, #112] ; 0x70 80030b6: 4b6e ldr r3, [pc, #440] ; (8003270 ) 80030b8: 6f1b ldr r3, [r3, #112] ; 0x70 80030ba: 4a6d ldr r2, [pc, #436] ; (8003270 ) 80030bc: f023 0304 bic.w r3, r3, #4 80030c0: 6713 str r3, [r2, #112] ; 0x70 /* Check the LSE State */ if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF) 80030c2: 687b ldr r3, [r7, #4] 80030c4: 689b ldr r3, [r3, #8] 80030c6: 2b00 cmp r3, #0 80030c8: d015 beq.n 80030f6 { /* Get Start Tick*/ tickstart = HAL_GetTick(); 80030ca: f7fe ff51 bl 8001f70 80030ce: 6138 str r0, [r7, #16] /* Wait till LSE is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) 80030d0: e00a b.n 80030e8 { if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) 80030d2: f7fe ff4d bl 8001f70 80030d6: 4602 mov r2, r0 80030d8: 693b ldr r3, [r7, #16] 80030da: 1ad3 subs r3, r2, r3 80030dc: f241 3288 movw r2, #5000 ; 0x1388 80030e0: 4293 cmp r3, r2 80030e2: d901 bls.n 80030e8 { return HAL_TIMEOUT; 80030e4: 2303 movs r3, #3 80030e6: e0bc b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) 80030e8: 4b61 ldr r3, [pc, #388] ; (8003270 ) 80030ea: 6f1b ldr r3, [r3, #112] ; 0x70 80030ec: f003 0302 and.w r3, r3, #2 80030f0: 2b00 cmp r3, #0 80030f2: d0ee beq.n 80030d2 80030f4: e014 b.n 8003120 } } else { /* Get Start Tick */ tickstart = HAL_GetTick(); 80030f6: f7fe ff3b bl 8001f70 80030fa: 6138 str r0, [r7, #16] /* Wait till LSE is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) 80030fc: e00a b.n 8003114 { if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE) 80030fe: f7fe ff37 bl 8001f70 8003102: 4602 mov r2, r0 8003104: 693b ldr r3, [r7, #16] 8003106: 1ad3 subs r3, r2, r3 8003108: f241 3288 movw r2, #5000 ; 0x1388 800310c: 4293 cmp r3, r2 800310e: d901 bls.n 8003114 { return HAL_TIMEOUT; 8003110: 2303 movs r3, #3 8003112: e0a6 b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) 8003114: 4b56 ldr r3, [pc, #344] ; (8003270 ) 8003116: 6f1b ldr r3, [r3, #112] ; 0x70 8003118: f003 0302 and.w r3, r3, #2 800311c: 2b00 cmp r3, #0 800311e: d1ee bne.n 80030fe } } } /* Restore clock configuration if changed */ if(pwrclkchanged == SET) 8003120: 7dfb ldrb r3, [r7, #23] 8003122: 2b01 cmp r3, #1 8003124: d105 bne.n 8003132 { __HAL_RCC_PWR_CLK_DISABLE(); 8003126: 4b52 ldr r3, [pc, #328] ; (8003270 ) 8003128: 6c1b ldr r3, [r3, #64] ; 0x40 800312a: 4a51 ldr r2, [pc, #324] ; (8003270 ) 800312c: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 8003130: 6413 str r3, [r2, #64] ; 0x40 } } /*-------------------------------- PLL Configuration -----------------------*/ /* Check the parameters */ assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState)); if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) 8003132: 687b ldr r3, [r7, #4] 8003134: 699b ldr r3, [r3, #24] 8003136: 2b00 cmp r3, #0 8003138: f000 8092 beq.w 8003260 { /* Check if the PLL is used as system clock or not */ if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL) 800313c: 4b4c ldr r3, [pc, #304] ; (8003270 ) 800313e: 689b ldr r3, [r3, #8] 8003140: f003 030c and.w r3, r3, #12 8003144: 2b08 cmp r3, #8 8003146: d05c beq.n 8003202 { if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) 8003148: 687b ldr r3, [r7, #4] 800314a: 699b ldr r3, [r3, #24] 800314c: 2b02 cmp r3, #2 800314e: d141 bne.n 80031d4 assert_param(IS_RCC_PLLN_VALUE(RCC_OscInitStruct->PLL.PLLN)); assert_param(IS_RCC_PLLP_VALUE(RCC_OscInitStruct->PLL.PLLP)); assert_param(IS_RCC_PLLQ_VALUE(RCC_OscInitStruct->PLL.PLLQ)); /* Disable the main PLL. */ __HAL_RCC_PLL_DISABLE(); 8003150: 4b48 ldr r3, [pc, #288] ; (8003274 ) 8003152: 2200 movs r2, #0 8003154: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); 8003156: f7fe ff0b bl 8001f70 800315a: 6138 str r0, [r7, #16] /* Wait till PLL is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) 800315c: e008 b.n 8003170 { if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) 800315e: f7fe ff07 bl 8001f70 8003162: 4602 mov r2, r0 8003164: 693b ldr r3, [r7, #16] 8003166: 1ad3 subs r3, r2, r3 8003168: 2b02 cmp r3, #2 800316a: d901 bls.n 8003170 { return HAL_TIMEOUT; 800316c: 2303 movs r3, #3 800316e: e078 b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) 8003170: 4b3f ldr r3, [pc, #252] ; (8003270 ) 8003172: 681b ldr r3, [r3, #0] 8003174: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 8003178: 2b00 cmp r3, #0 800317a: d1f0 bne.n 800315e } } /* Configure the main PLL clock source, multiplication and division factors. */ WRITE_REG(RCC->PLLCFGR, (RCC_OscInitStruct->PLL.PLLSource | \ 800317c: 687b ldr r3, [r7, #4] 800317e: 69da ldr r2, [r3, #28] 8003180: 687b ldr r3, [r7, #4] 8003182: 6a1b ldr r3, [r3, #32] 8003184: 431a orrs r2, r3 8003186: 687b ldr r3, [r7, #4] 8003188: 6a5b ldr r3, [r3, #36] ; 0x24 800318a: 019b lsls r3, r3, #6 800318c: 431a orrs r2, r3 800318e: 687b ldr r3, [r7, #4] 8003190: 6a9b ldr r3, [r3, #40] ; 0x28 8003192: 085b lsrs r3, r3, #1 8003194: 3b01 subs r3, #1 8003196: 041b lsls r3, r3, #16 8003198: 431a orrs r2, r3 800319a: 687b ldr r3, [r7, #4] 800319c: 6adb ldr r3, [r3, #44] ; 0x2c 800319e: 061b lsls r3, r3, #24 80031a0: 4933 ldr r1, [pc, #204] ; (8003270 ) 80031a2: 4313 orrs r3, r2 80031a4: 604b str r3, [r1, #4] RCC_OscInitStruct->PLL.PLLM | \ (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos) | \ (((RCC_OscInitStruct->PLL.PLLP >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos) | \ (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos))); /* Enable the main PLL. */ __HAL_RCC_PLL_ENABLE(); 80031a6: 4b33 ldr r3, [pc, #204] ; (8003274 ) 80031a8: 2201 movs r2, #1 80031aa: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); 80031ac: f7fe fee0 bl 8001f70 80031b0: 6138 str r0, [r7, #16] /* Wait till PLL is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) 80031b2: e008 b.n 80031c6 { if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) 80031b4: f7fe fedc bl 8001f70 80031b8: 4602 mov r2, r0 80031ba: 693b ldr r3, [r7, #16] 80031bc: 1ad3 subs r3, r2, r3 80031be: 2b02 cmp r3, #2 80031c0: d901 bls.n 80031c6 { return HAL_TIMEOUT; 80031c2: 2303 movs r3, #3 80031c4: e04d b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) 80031c6: 4b2a ldr r3, [pc, #168] ; (8003270 ) 80031c8: 681b ldr r3, [r3, #0] 80031ca: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 80031ce: 2b00 cmp r3, #0 80031d0: d0f0 beq.n 80031b4 80031d2: e045 b.n 8003260 } } else { /* Disable the main PLL. */ __HAL_RCC_PLL_DISABLE(); 80031d4: 4b27 ldr r3, [pc, #156] ; (8003274 ) 80031d6: 2200 movs r2, #0 80031d8: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); 80031da: f7fe fec9 bl 8001f70 80031de: 6138 str r0, [r7, #16] /* Wait till PLL is ready */ while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) 80031e0: e008 b.n 80031f4 { if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE) 80031e2: f7fe fec5 bl 8001f70 80031e6: 4602 mov r2, r0 80031e8: 693b ldr r3, [r7, #16] 80031ea: 1ad3 subs r3, r2, r3 80031ec: 2b02 cmp r3, #2 80031ee: d901 bls.n 80031f4 { return HAL_TIMEOUT; 80031f0: 2303 movs r3, #3 80031f2: e036 b.n 8003262 while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) 80031f4: 4b1e ldr r3, [pc, #120] ; (8003270 ) 80031f6: 681b ldr r3, [r3, #0] 80031f8: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 80031fc: 2b00 cmp r3, #0 80031fe: d1f0 bne.n 80031e2 8003200: e02e b.n 8003260 } } else { /* Check if there is a request to disable the PLL used as System clock source */ if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) 8003202: 687b ldr r3, [r7, #4] 8003204: 699b ldr r3, [r3, #24] 8003206: 2b01 cmp r3, #1 8003208: d101 bne.n 800320e { return HAL_ERROR; 800320a: 2301 movs r3, #1 800320c: e029 b.n 8003262 } else { /* Do not return HAL_ERROR if request repeats the current configuration */ pll_config = RCC->PLLCFGR; 800320e: 4b18 ldr r3, [pc, #96] ; (8003270 ) 8003210: 685b ldr r3, [r3, #4] 8003212: 60fb str r3, [r7, #12] if((READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || 8003214: 68fb ldr r3, [r7, #12] 8003216: f403 0280 and.w r2, r3, #4194304 ; 0x400000 800321a: 687b ldr r3, [r7, #4] 800321c: 69db ldr r3, [r3, #28] 800321e: 429a cmp r2, r3 8003220: d11c bne.n 800325c (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) || 8003222: 68fb ldr r3, [r7, #12] 8003224: f003 023f and.w r2, r3, #63 ; 0x3f 8003228: 687b ldr r3, [r7, #4] 800322a: 6a1b ldr r3, [r3, #32] if((READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || 800322c: 429a cmp r2, r3 800322e: d115 bne.n 800325c (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != RCC_OscInitStruct->PLL.PLLN) || 8003230: 68fa ldr r2, [r7, #12] 8003232: f647 73c0 movw r3, #32704 ; 0x7fc0 8003236: 4013 ands r3, r2 8003238: 687a ldr r2, [r7, #4] 800323a: 6a52 ldr r2, [r2, #36] ; 0x24 (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) || 800323c: 4293 cmp r3, r2 800323e: d10d bne.n 800325c (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != RCC_OscInitStruct->PLL.PLLP) || 8003240: 68fb ldr r3, [r7, #12] 8003242: f403 3240 and.w r2, r3, #196608 ; 0x30000 8003246: 687b ldr r3, [r7, #4] 8003248: 6a9b ldr r3, [r3, #40] ; 0x28 (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != RCC_OscInitStruct->PLL.PLLN) || 800324a: 429a cmp r2, r3 800324c: d106 bne.n 800325c (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != RCC_OscInitStruct->PLL.PLLQ)) 800324e: 68fb ldr r3, [r7, #12] 8003250: f003 6270 and.w r2, r3, #251658240 ; 0xf000000 8003254: 687b ldr r3, [r7, #4] 8003256: 6adb ldr r3, [r3, #44] ; 0x2c (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != RCC_OscInitStruct->PLL.PLLP) || 8003258: 429a cmp r2, r3 800325a: d001 beq.n 8003260 { return HAL_ERROR; 800325c: 2301 movs r3, #1 800325e: e000 b.n 8003262 } } } } return HAL_OK; 8003260: 2300 movs r3, #0 } 8003262: 4618 mov r0, r3 8003264: 3718 adds r7, #24 8003266: 46bd mov sp, r7 8003268: bd80 pop {r7, pc} 800326a: bf00 nop 800326c: 40007000 .word 0x40007000 8003270: 40023800 .word 0x40023800 8003274: 42470060 .word 0x42470060 08003278 : * HPRE[3:0] bits to ensure that HCLK 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) { 8003278: b580 push {r7, lr} 800327a: b084 sub sp, #16 800327c: af00 add r7, sp, #0 800327e: 6078 str r0, [r7, #4] 8003280: 6039 str r1, [r7, #0] uint32_t tickstart; /* Check Null pointer */ if(RCC_ClkInitStruct == NULL) 8003282: 687b ldr r3, [r7, #4] 8003284: 2b00 cmp r3, #0 8003286: d101 bne.n 800328c { return HAL_ERROR; 8003288: 2301 movs r3, #1 800328a: e0cc b.n 8003426 /* To correctly read data from FLASH memory, the number of wait states (LATENCY) must be correctly programmed according to the frequency of the CPU clock (HCLK) and the supply voltage of the device. */ /* Increasing the number of wait states because of higher CPU frequency */ if(FLatency > __HAL_FLASH_GET_LATENCY()) 800328c: 4b68 ldr r3, [pc, #416] ; (8003430 ) 800328e: 681b ldr r3, [r3, #0] 8003290: f003 030f and.w r3, r3, #15 8003294: 683a ldr r2, [r7, #0] 8003296: 429a cmp r2, r3 8003298: d90c bls.n 80032b4 { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); 800329a: 4b65 ldr r3, [pc, #404] ; (8003430 ) 800329c: 683a ldr r2, [r7, #0] 800329e: b2d2 uxtb r2, r2 80032a0: 701a strb r2, [r3, #0] /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ if(__HAL_FLASH_GET_LATENCY() != FLatency) 80032a2: 4b63 ldr r3, [pc, #396] ; (8003430 ) 80032a4: 681b ldr r3, [r3, #0] 80032a6: f003 030f and.w r3, r3, #15 80032aa: 683a ldr r2, [r7, #0] 80032ac: 429a cmp r2, r3 80032ae: d001 beq.n 80032b4 { return HAL_ERROR; 80032b0: 2301 movs r3, #1 80032b2: e0b8 b.n 8003426 } } /*-------------------------- HCLK Configuration --------------------------*/ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) 80032b4: 687b ldr r3, [r7, #4] 80032b6: 681b ldr r3, [r3, #0] 80032b8: f003 0302 and.w r3, r3, #2 80032bc: 2b00 cmp r3, #0 80032be: d020 beq.n 8003302 { /* Set the highest APBx dividers in order to ensure that we do not go through a non-spec phase whatever we decrease or increase HCLK. */ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) 80032c0: 687b ldr r3, [r7, #4] 80032c2: 681b ldr r3, [r3, #0] 80032c4: f003 0304 and.w r3, r3, #4 80032c8: 2b00 cmp r3, #0 80032ca: d005 beq.n 80032d8 { MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); 80032cc: 4b59 ldr r3, [pc, #356] ; (8003434 ) 80032ce: 689b ldr r3, [r3, #8] 80032d0: 4a58 ldr r2, [pc, #352] ; (8003434 ) 80032d2: f443 53e0 orr.w r3, r3, #7168 ; 0x1c00 80032d6: 6093 str r3, [r2, #8] } if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) 80032d8: 687b ldr r3, [r7, #4] 80032da: 681b ldr r3, [r3, #0] 80032dc: f003 0308 and.w r3, r3, #8 80032e0: 2b00 cmp r3, #0 80032e2: d005 beq.n 80032f0 { MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); 80032e4: 4b53 ldr r3, [pc, #332] ; (8003434 ) 80032e6: 689b ldr r3, [r3, #8] 80032e8: 4a52 ldr r2, [pc, #328] ; (8003434 ) 80032ea: f443 4360 orr.w r3, r3, #57344 ; 0xe000 80032ee: 6093 str r3, [r2, #8] } assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); 80032f0: 4b50 ldr r3, [pc, #320] ; (8003434 ) 80032f2: 689b ldr r3, [r3, #8] 80032f4: f023 02f0 bic.w r2, r3, #240 ; 0xf0 80032f8: 687b ldr r3, [r7, #4] 80032fa: 689b ldr r3, [r3, #8] 80032fc: 494d ldr r1, [pc, #308] ; (8003434 ) 80032fe: 4313 orrs r3, r2 8003300: 608b str r3, [r1, #8] } /*------------------------- SYSCLK Configuration ---------------------------*/ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) 8003302: 687b ldr r3, [r7, #4] 8003304: 681b ldr r3, [r3, #0] 8003306: f003 0301 and.w r3, r3, #1 800330a: 2b00 cmp r3, #0 800330c: d044 beq.n 8003398 { assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); /* HSE is selected as System Clock Source */ if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) 800330e: 687b ldr r3, [r7, #4] 8003310: 685b ldr r3, [r3, #4] 8003312: 2b01 cmp r3, #1 8003314: d107 bne.n 8003326 { /* Check the HSE ready flag */ if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) 8003316: 4b47 ldr r3, [pc, #284] ; (8003434 ) 8003318: 681b ldr r3, [r3, #0] 800331a: f403 3300 and.w r3, r3, #131072 ; 0x20000 800331e: 2b00 cmp r3, #0 8003320: d119 bne.n 8003356 { return HAL_ERROR; 8003322: 2301 movs r3, #1 8003324: e07f b.n 8003426 } } /* PLL is selected as System Clock Source */ else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || 8003326: 687b ldr r3, [r7, #4] 8003328: 685b ldr r3, [r3, #4] 800332a: 2b02 cmp r3, #2 800332c: d003 beq.n 8003336 (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLRCLK)) 800332e: 687b ldr r3, [r7, #4] 8003330: 685b ldr r3, [r3, #4] else if((RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) || 8003332: 2b03 cmp r3, #3 8003334: d107 bne.n 8003346 { /* Check the PLL ready flag */ if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) 8003336: 4b3f ldr r3, [pc, #252] ; (8003434 ) 8003338: 681b ldr r3, [r3, #0] 800333a: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 800333e: 2b00 cmp r3, #0 8003340: d109 bne.n 8003356 { return HAL_ERROR; 8003342: 2301 movs r3, #1 8003344: e06f b.n 8003426 } /* HSI is selected as System Clock Source */ else { /* Check the HSI ready flag */ if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) 8003346: 4b3b ldr r3, [pc, #236] ; (8003434 ) 8003348: 681b ldr r3, [r3, #0] 800334a: f003 0302 and.w r3, r3, #2 800334e: 2b00 cmp r3, #0 8003350: d101 bne.n 8003356 { return HAL_ERROR; 8003352: 2301 movs r3, #1 8003354: e067 b.n 8003426 } } __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); 8003356: 4b37 ldr r3, [pc, #220] ; (8003434 ) 8003358: 689b ldr r3, [r3, #8] 800335a: f023 0203 bic.w r2, r3, #3 800335e: 687b ldr r3, [r7, #4] 8003360: 685b ldr r3, [r3, #4] 8003362: 4934 ldr r1, [pc, #208] ; (8003434 ) 8003364: 4313 orrs r3, r2 8003366: 608b str r3, [r1, #8] /* Get Start Tick */ tickstart = HAL_GetTick(); 8003368: f7fe fe02 bl 8001f70 800336c: 60f8 str r0, [r7, #12] while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) 800336e: e00a b.n 8003386 { if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) 8003370: f7fe fdfe bl 8001f70 8003374: 4602 mov r2, r0 8003376: 68fb ldr r3, [r7, #12] 8003378: 1ad3 subs r3, r2, r3 800337a: f241 3288 movw r2, #5000 ; 0x1388 800337e: 4293 cmp r3, r2 8003380: d901 bls.n 8003386 { return HAL_TIMEOUT; 8003382: 2303 movs r3, #3 8003384: e04f b.n 8003426 while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) 8003386: 4b2b ldr r3, [pc, #172] ; (8003434 ) 8003388: 689b ldr r3, [r3, #8] 800338a: f003 020c and.w r2, r3, #12 800338e: 687b ldr r3, [r7, #4] 8003390: 685b ldr r3, [r3, #4] 8003392: 009b lsls r3, r3, #2 8003394: 429a cmp r2, r3 8003396: d1eb bne.n 8003370 } } } /* Decreasing the number of wait states because of lower CPU frequency */ if(FLatency < __HAL_FLASH_GET_LATENCY()) 8003398: 4b25 ldr r3, [pc, #148] ; (8003430 ) 800339a: 681b ldr r3, [r3, #0] 800339c: f003 030f and.w r3, r3, #15 80033a0: 683a ldr r2, [r7, #0] 80033a2: 429a cmp r2, r3 80033a4: d20c bcs.n 80033c0 { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); 80033a6: 4b22 ldr r3, [pc, #136] ; (8003430 ) 80033a8: 683a ldr r2, [r7, #0] 80033aa: b2d2 uxtb r2, r2 80033ac: 701a strb r2, [r3, #0] /* Check that the new number of wait states is taken into account to access the Flash memory by reading the FLASH_ACR register */ if(__HAL_FLASH_GET_LATENCY() != FLatency) 80033ae: 4b20 ldr r3, [pc, #128] ; (8003430 ) 80033b0: 681b ldr r3, [r3, #0] 80033b2: f003 030f and.w r3, r3, #15 80033b6: 683a ldr r2, [r7, #0] 80033b8: 429a cmp r2, r3 80033ba: d001 beq.n 80033c0 { return HAL_ERROR; 80033bc: 2301 movs r3, #1 80033be: e032 b.n 8003426 } } /*-------------------------- PCLK1 Configuration ---------------------------*/ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) 80033c0: 687b ldr r3, [r7, #4] 80033c2: 681b ldr r3, [r3, #0] 80033c4: f003 0304 and.w r3, r3, #4 80033c8: 2b00 cmp r3, #0 80033ca: d008 beq.n 80033de { assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); 80033cc: 4b19 ldr r3, [pc, #100] ; (8003434 ) 80033ce: 689b ldr r3, [r3, #8] 80033d0: f423 52e0 bic.w r2, r3, #7168 ; 0x1c00 80033d4: 687b ldr r3, [r7, #4] 80033d6: 68db ldr r3, [r3, #12] 80033d8: 4916 ldr r1, [pc, #88] ; (8003434 ) 80033da: 4313 orrs r3, r2 80033dc: 608b str r3, [r1, #8] } /*-------------------------- PCLK2 Configuration ---------------------------*/ if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) 80033de: 687b ldr r3, [r7, #4] 80033e0: 681b ldr r3, [r3, #0] 80033e2: f003 0308 and.w r3, r3, #8 80033e6: 2b00 cmp r3, #0 80033e8: d009 beq.n 80033fe { assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3U)); 80033ea: 4b12 ldr r3, [pc, #72] ; (8003434 ) 80033ec: 689b ldr r3, [r3, #8] 80033ee: f423 4260 bic.w r2, r3, #57344 ; 0xe000 80033f2: 687b ldr r3, [r7, #4] 80033f4: 691b ldr r3, [r3, #16] 80033f6: 00db lsls r3, r3, #3 80033f8: 490e ldr r1, [pc, #56] ; (8003434 ) 80033fa: 4313 orrs r3, r2 80033fc: 608b str r3, [r1, #8] } /* Update the SystemCoreClock global variable */ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos]; 80033fe: f000 f821 bl 8003444 8003402: 4601 mov r1, r0 8003404: 4b0b ldr r3, [pc, #44] ; (8003434 ) 8003406: 689b ldr r3, [r3, #8] 8003408: 091b lsrs r3, r3, #4 800340a: f003 030f and.w r3, r3, #15 800340e: 4a0a ldr r2, [pc, #40] ; (8003438 ) 8003410: 5cd3 ldrb r3, [r2, r3] 8003412: fa21 f303 lsr.w r3, r1, r3 8003416: 4a09 ldr r2, [pc, #36] ; (800343c ) 8003418: 6013 str r3, [r2, #0] /* Configure the source of time base considering new system clocks settings */ HAL_InitTick (uwTickPrio); 800341a: 4b09 ldr r3, [pc, #36] ; (8003440 ) 800341c: 681b ldr r3, [r3, #0] 800341e: 4618 mov r0, r3 8003420: f7fe fd62 bl 8001ee8 return HAL_OK; 8003424: 2300 movs r3, #0 } 8003426: 4618 mov r0, r3 8003428: 3710 adds r7, #16 800342a: 46bd mov sp, r7 800342c: bd80 pop {r7, pc} 800342e: bf00 nop 8003430: 40023c00 .word 0x40023c00 8003434: 40023800 .word 0x40023800 8003438: 08004484 .word 0x08004484 800343c: 20000004 .word 0x20000004 8003440: 20000008 .word 0x20000008 08003444 : * * * @retval SYSCLK frequency */ __weak uint32_t HAL_RCC_GetSysClockFreq(void) { 8003444: b5f0 push {r4, r5, r6, r7, lr} 8003446: b085 sub sp, #20 8003448: af00 add r7, sp, #0 uint32_t pllm = 0U, pllvco = 0U, pllp = 0U; 800344a: 2300 movs r3, #0 800344c: 607b str r3, [r7, #4] 800344e: 2300 movs r3, #0 8003450: 60fb str r3, [r7, #12] 8003452: 2300 movs r3, #0 8003454: 603b str r3, [r7, #0] uint32_t sysclockfreq = 0U; 8003456: 2300 movs r3, #0 8003458: 60bb str r3, [r7, #8] /* Get SYSCLK source -------------------------------------------------------*/ switch (RCC->CFGR & RCC_CFGR_SWS) 800345a: 4b63 ldr r3, [pc, #396] ; (80035e8 ) 800345c: 689b ldr r3, [r3, #8] 800345e: f003 030c and.w r3, r3, #12 8003462: 2b04 cmp r3, #4 8003464: d007 beq.n 8003476 8003466: 2b08 cmp r3, #8 8003468: d008 beq.n 800347c 800346a: 2b00 cmp r3, #0 800346c: f040 80b4 bne.w 80035d8 { case RCC_CFGR_SWS_HSI: /* HSI used as system clock source */ { sysclockfreq = HSI_VALUE; 8003470: 4b5e ldr r3, [pc, #376] ; (80035ec ) 8003472: 60bb str r3, [r7, #8] break; 8003474: e0b3 b.n 80035de } case RCC_CFGR_SWS_HSE: /* HSE used as system clock source */ { sysclockfreq = HSE_VALUE; 8003476: 4b5e ldr r3, [pc, #376] ; (80035f0 ) 8003478: 60bb str r3, [r7, #8] break; 800347a: e0b0 b.n 80035de } case RCC_CFGR_SWS_PLL: /* PLL used as system clock source */ { /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLLM) * PLLN SYSCLK = PLL_VCO / PLLP */ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; 800347c: 4b5a ldr r3, [pc, #360] ; (80035e8 ) 800347e: 685b ldr r3, [r3, #4] 8003480: f003 033f and.w r3, r3, #63 ; 0x3f 8003484: 607b str r3, [r7, #4] if(__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLSOURCE_HSI) 8003486: 4b58 ldr r3, [pc, #352] ; (80035e8 ) 8003488: 685b ldr r3, [r3, #4] 800348a: f403 0380 and.w r3, r3, #4194304 ; 0x400000 800348e: 2b00 cmp r3, #0 8003490: d04a beq.n 8003528 { /* HSE used as PLL clock source */ pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); 8003492: 4b55 ldr r3, [pc, #340] ; (80035e8 ) 8003494: 685b ldr r3, [r3, #4] 8003496: 099b lsrs r3, r3, #6 8003498: f04f 0400 mov.w r4, #0 800349c: f240 11ff movw r1, #511 ; 0x1ff 80034a0: f04f 0200 mov.w r2, #0 80034a4: ea03 0501 and.w r5, r3, r1 80034a8: ea04 0602 and.w r6, r4, r2 80034ac: 4629 mov r1, r5 80034ae: 4632 mov r2, r6 80034b0: f04f 0300 mov.w r3, #0 80034b4: f04f 0400 mov.w r4, #0 80034b8: 0154 lsls r4, r2, #5 80034ba: ea44 64d1 orr.w r4, r4, r1, lsr #27 80034be: 014b lsls r3, r1, #5 80034c0: 4619 mov r1, r3 80034c2: 4622 mov r2, r4 80034c4: 1b49 subs r1, r1, r5 80034c6: eb62 0206 sbc.w r2, r2, r6 80034ca: f04f 0300 mov.w r3, #0 80034ce: f04f 0400 mov.w r4, #0 80034d2: 0194 lsls r4, r2, #6 80034d4: ea44 6491 orr.w r4, r4, r1, lsr #26 80034d8: 018b lsls r3, r1, #6 80034da: 1a5b subs r3, r3, r1 80034dc: eb64 0402 sbc.w r4, r4, r2 80034e0: f04f 0100 mov.w r1, #0 80034e4: f04f 0200 mov.w r2, #0 80034e8: 00e2 lsls r2, r4, #3 80034ea: ea42 7253 orr.w r2, r2, r3, lsr #29 80034ee: 00d9 lsls r1, r3, #3 80034f0: 460b mov r3, r1 80034f2: 4614 mov r4, r2 80034f4: 195b adds r3, r3, r5 80034f6: eb44 0406 adc.w r4, r4, r6 80034fa: f04f 0100 mov.w r1, #0 80034fe: f04f 0200 mov.w r2, #0 8003502: 0262 lsls r2, r4, #9 8003504: ea42 52d3 orr.w r2, r2, r3, lsr #23 8003508: 0259 lsls r1, r3, #9 800350a: 460b mov r3, r1 800350c: 4614 mov r4, r2 800350e: 4618 mov r0, r3 8003510: 4621 mov r1, r4 8003512: 687b ldr r3, [r7, #4] 8003514: f04f 0400 mov.w r4, #0 8003518: 461a mov r2, r3 800351a: 4623 mov r3, r4 800351c: f7fc fe66 bl 80001ec <__aeabi_uldivmod> 8003520: 4603 mov r3, r0 8003522: 460c mov r4, r1 8003524: 60fb str r3, [r7, #12] 8003526: e049 b.n 80035bc } else { /* HSI used as PLL clock source */ pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm); 8003528: 4b2f ldr r3, [pc, #188] ; (80035e8 ) 800352a: 685b ldr r3, [r3, #4] 800352c: 099b lsrs r3, r3, #6 800352e: f04f 0400 mov.w r4, #0 8003532: f240 11ff movw r1, #511 ; 0x1ff 8003536: f04f 0200 mov.w r2, #0 800353a: ea03 0501 and.w r5, r3, r1 800353e: ea04 0602 and.w r6, r4, r2 8003542: 4629 mov r1, r5 8003544: 4632 mov r2, r6 8003546: f04f 0300 mov.w r3, #0 800354a: f04f 0400 mov.w r4, #0 800354e: 0154 lsls r4, r2, #5 8003550: ea44 64d1 orr.w r4, r4, r1, lsr #27 8003554: 014b lsls r3, r1, #5 8003556: 4619 mov r1, r3 8003558: 4622 mov r2, r4 800355a: 1b49 subs r1, r1, r5 800355c: eb62 0206 sbc.w r2, r2, r6 8003560: f04f 0300 mov.w r3, #0 8003564: f04f 0400 mov.w r4, #0 8003568: 0194 lsls r4, r2, #6 800356a: ea44 6491 orr.w r4, r4, r1, lsr #26 800356e: 018b lsls r3, r1, #6 8003570: 1a5b subs r3, r3, r1 8003572: eb64 0402 sbc.w r4, r4, r2 8003576: f04f 0100 mov.w r1, #0 800357a: f04f 0200 mov.w r2, #0 800357e: 00e2 lsls r2, r4, #3 8003580: ea42 7253 orr.w r2, r2, r3, lsr #29 8003584: 00d9 lsls r1, r3, #3 8003586: 460b mov r3, r1 8003588: 4614 mov r4, r2 800358a: 195b adds r3, r3, r5 800358c: eb44 0406 adc.w r4, r4, r6 8003590: f04f 0100 mov.w r1, #0 8003594: f04f 0200 mov.w r2, #0 8003598: 02a2 lsls r2, r4, #10 800359a: ea42 5293 orr.w r2, r2, r3, lsr #22 800359e: 0299 lsls r1, r3, #10 80035a0: 460b mov r3, r1 80035a2: 4614 mov r4, r2 80035a4: 4618 mov r0, r3 80035a6: 4621 mov r1, r4 80035a8: 687b ldr r3, [r7, #4] 80035aa: f04f 0400 mov.w r4, #0 80035ae: 461a mov r2, r3 80035b0: 4623 mov r3, r4 80035b2: f7fc fe1b bl 80001ec <__aeabi_uldivmod> 80035b6: 4603 mov r3, r0 80035b8: 460c mov r4, r1 80035ba: 60fb str r3, [r7, #12] } pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1U) *2U); 80035bc: 4b0a ldr r3, [pc, #40] ; (80035e8 ) 80035be: 685b ldr r3, [r3, #4] 80035c0: 0c1b lsrs r3, r3, #16 80035c2: f003 0303 and.w r3, r3, #3 80035c6: 3301 adds r3, #1 80035c8: 005b lsls r3, r3, #1 80035ca: 603b str r3, [r7, #0] sysclockfreq = pllvco/pllp; 80035cc: 68fa ldr r2, [r7, #12] 80035ce: 683b ldr r3, [r7, #0] 80035d0: fbb2 f3f3 udiv r3, r2, r3 80035d4: 60bb str r3, [r7, #8] break; 80035d6: e002 b.n 80035de } default: { sysclockfreq = HSI_VALUE; 80035d8: 4b04 ldr r3, [pc, #16] ; (80035ec ) 80035da: 60bb str r3, [r7, #8] break; 80035dc: bf00 nop } } return sysclockfreq; 80035de: 68bb ldr r3, [r7, #8] } 80035e0: 4618 mov r0, r3 80035e2: 3714 adds r7, #20 80035e4: 46bd mov sp, r7 80035e6: bdf0 pop {r4, r5, r6, r7, pc} 80035e8: 40023800 .word 0x40023800 80035ec: 00f42400 .word 0x00f42400 80035f0: 007a1200 .word 0x007a1200 080035f4 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) { 80035f4: b580 push {r7, lr} 80035f6: b082 sub sp, #8 80035f8: af00 add r7, sp, #0 80035fa: 6078 str r0, [r7, #4] /* Check the SPI handle allocation */ if (hspi == NULL) 80035fc: 687b ldr r3, [r7, #4] 80035fe: 2b00 cmp r3, #0 8003600: d101 bne.n 8003606 { return HAL_ERROR; 8003602: 2301 movs r3, #1 8003604: e056 b.n 80036b4 if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) { assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); } #else hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; 8003606: 687b ldr r3, [r7, #4] 8003608: 2200 movs r2, #0 800360a: 629a str r2, [r3, #40] ; 0x28 #endif /* USE_SPI_CRC */ if (hspi->State == HAL_SPI_STATE_RESET) 800360c: 687b ldr r3, [r7, #4] 800360e: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 8003612: b2db uxtb r3, r3 8003614: 2b00 cmp r3, #0 8003616: d106 bne.n 8003626 { /* Allocate lock resource and initialize it */ hspi->Lock = HAL_UNLOCKED; 8003618: 687b ldr r3, [r7, #4] 800361a: 2200 movs r2, #0 800361c: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init the low level hardware : GPIO, CLOCK, NVIC... */ hspi->MspInitCallback(hspi); #else /* Init the low level hardware : GPIO, CLOCK, NVIC... */ HAL_SPI_MspInit(hspi); 8003620: 6878 ldr r0, [r7, #4] 8003622: f7fe fadb bl 8001bdc #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ } hspi->State = HAL_SPI_STATE_BUSY; 8003626: 687b ldr r3, [r7, #4] 8003628: 2202 movs r2, #2 800362a: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Disable the selected SPI peripheral */ __HAL_SPI_DISABLE(hspi); 800362e: 687b ldr r3, [r7, #4] 8003630: 681b ldr r3, [r3, #0] 8003632: 681a ldr r2, [r3, #0] 8003634: 687b ldr r3, [r7, #4] 8003636: 681b ldr r3, [r3, #0] 8003638: f022 0240 bic.w r2, r2, #64 ; 0x40 800363c: 601a str r2, [r3, #0] /*----------------------- SPIx CR1 & CR2 Configuration ---------------------*/ /* Configure : SPI Mode, Communication Mode, Data size, Clock polarity and phase, NSS management, Communication speed, First bit and CRC calculation state */ WRITE_REG(hspi->Instance->CR1, (hspi->Init.Mode | hspi->Init.Direction | hspi->Init.DataSize | 800363e: 687b ldr r3, [r7, #4] 8003640: 685a ldr r2, [r3, #4] 8003642: 687b ldr r3, [r7, #4] 8003644: 689b ldr r3, [r3, #8] 8003646: 431a orrs r2, r3 8003648: 687b ldr r3, [r7, #4] 800364a: 68db ldr r3, [r3, #12] 800364c: 431a orrs r2, r3 800364e: 687b ldr r3, [r7, #4] 8003650: 691b ldr r3, [r3, #16] 8003652: 431a orrs r2, r3 8003654: 687b ldr r3, [r7, #4] 8003656: 695b ldr r3, [r3, #20] 8003658: 431a orrs r2, r3 800365a: 687b ldr r3, [r7, #4] 800365c: 699b ldr r3, [r3, #24] 800365e: f403 7300 and.w r3, r3, #512 ; 0x200 8003662: 431a orrs r2, r3 8003664: 687b ldr r3, [r7, #4] 8003666: 69db ldr r3, [r3, #28] 8003668: 431a orrs r2, r3 800366a: 687b ldr r3, [r7, #4] 800366c: 6a1b ldr r3, [r3, #32] 800366e: ea42 0103 orr.w r1, r2, r3 8003672: 687b ldr r3, [r7, #4] 8003674: 6a9a ldr r2, [r3, #40] ; 0x28 8003676: 687b ldr r3, [r7, #4] 8003678: 681b ldr r3, [r3, #0] 800367a: 430a orrs r2, r1 800367c: 601a str r2, [r3, #0] hspi->Init.CLKPolarity | hspi->Init.CLKPhase | (hspi->Init.NSS & SPI_CR1_SSM) | hspi->Init.BaudRatePrescaler | hspi->Init.FirstBit | hspi->Init.CRCCalculation)); /* Configure : NSS management, TI Mode */ WRITE_REG(hspi->Instance->CR2, (((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE) | hspi->Init.TIMode)); 800367e: 687b ldr r3, [r7, #4] 8003680: 699b ldr r3, [r3, #24] 8003682: 0c1b lsrs r3, r3, #16 8003684: f003 0104 and.w r1, r3, #4 8003688: 687b ldr r3, [r7, #4] 800368a: 6a5a ldr r2, [r3, #36] ; 0x24 800368c: 687b ldr r3, [r7, #4] 800368e: 681b ldr r3, [r3, #0] 8003690: 430a orrs r2, r1 8003692: 605a str r2, [r3, #4] } #endif /* USE_SPI_CRC */ #if defined(SPI_I2SCFGR_I2SMOD) /* Activate the SPI mode (Make sure that I2SMOD bit in I2SCFGR register is reset) */ CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); 8003694: 687b ldr r3, [r7, #4] 8003696: 681b ldr r3, [r3, #0] 8003698: 69da ldr r2, [r3, #28] 800369a: 687b ldr r3, [r7, #4] 800369c: 681b ldr r3, [r3, #0] 800369e: f422 6200 bic.w r2, r2, #2048 ; 0x800 80036a2: 61da str r2, [r3, #28] #endif /* SPI_I2SCFGR_I2SMOD */ hspi->ErrorCode = HAL_SPI_ERROR_NONE; 80036a4: 687b ldr r3, [r7, #4] 80036a6: 2200 movs r2, #0 80036a8: 655a str r2, [r3, #84] ; 0x54 hspi->State = HAL_SPI_STATE_READY; 80036aa: 687b ldr r3, [r7, #4] 80036ac: 2201 movs r2, #1 80036ae: f883 2051 strb.w r2, [r3, #81] ; 0x51 return HAL_OK; 80036b2: 2300 movs r3, #0 } 80036b4: 4618 mov r0, r3 80036b6: 3708 adds r7, #8 80036b8: 46bd mov sp, r7 80036ba: bd80 pop {r7, pc} 080036bc : * @param pData pointer to data buffer * @param Size amount of data to be sent * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size) { 80036bc: b480 push {r7} 80036be: b087 sub sp, #28 80036c0: af00 add r7, sp, #0 80036c2: 60f8 str r0, [r7, #12] 80036c4: 60b9 str r1, [r7, #8] 80036c6: 4613 mov r3, r2 80036c8: 80fb strh r3, [r7, #6] HAL_StatusTypeDef errorcode = HAL_OK; 80036ca: 2300 movs r3, #0 80036cc: 75fb strb r3, [r7, #23] /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); /* Process Locked */ __HAL_LOCK(hspi); 80036ce: 68fb ldr r3, [r7, #12] 80036d0: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 80036d4: 2b01 cmp r3, #1 80036d6: d101 bne.n 80036dc 80036d8: 2302 movs r3, #2 80036da: e067 b.n 80037ac 80036dc: 68fb ldr r3, [r7, #12] 80036de: 2201 movs r2, #1 80036e0: f883 2050 strb.w r2, [r3, #80] ; 0x50 if ((pData == NULL) || (Size == 0U)) 80036e4: 68bb ldr r3, [r7, #8] 80036e6: 2b00 cmp r3, #0 80036e8: d002 beq.n 80036f0 80036ea: 88fb ldrh r3, [r7, #6] 80036ec: 2b00 cmp r3, #0 80036ee: d102 bne.n 80036f6 { errorcode = HAL_ERROR; 80036f0: 2301 movs r3, #1 80036f2: 75fb strb r3, [r7, #23] goto error; 80036f4: e055 b.n 80037a2 } if (hspi->State != HAL_SPI_STATE_READY) 80036f6: 68fb ldr r3, [r7, #12] 80036f8: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 80036fc: b2db uxtb r3, r3 80036fe: 2b01 cmp r3, #1 8003700: d002 beq.n 8003708 { errorcode = HAL_BUSY; 8003702: 2302 movs r3, #2 8003704: 75fb strb r3, [r7, #23] goto error; 8003706: e04c b.n 80037a2 } /* Set the transaction information */ hspi->State = HAL_SPI_STATE_BUSY_TX; 8003708: 68fb ldr r3, [r7, #12] 800370a: 2203 movs r2, #3 800370c: f883 2051 strb.w r2, [r3, #81] ; 0x51 hspi->ErrorCode = HAL_SPI_ERROR_NONE; 8003710: 68fb ldr r3, [r7, #12] 8003712: 2200 movs r2, #0 8003714: 655a str r2, [r3, #84] ; 0x54 hspi->pTxBuffPtr = (uint8_t *)pData; 8003716: 68fb ldr r3, [r7, #12] 8003718: 68ba ldr r2, [r7, #8] 800371a: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferSize = Size; 800371c: 68fb ldr r3, [r7, #12] 800371e: 88fa ldrh r2, [r7, #6] 8003720: 869a strh r2, [r3, #52] ; 0x34 hspi->TxXferCount = Size; 8003722: 68fb ldr r3, [r7, #12] 8003724: 88fa ldrh r2, [r7, #6] 8003726: 86da strh r2, [r3, #54] ; 0x36 /* Init field not used in handle to zero */ hspi->pRxBuffPtr = (uint8_t *)NULL; 8003728: 68fb ldr r3, [r7, #12] 800372a: 2200 movs r2, #0 800372c: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferSize = 0U; 800372e: 68fb ldr r3, [r7, #12] 8003730: 2200 movs r2, #0 8003732: 879a strh r2, [r3, #60] ; 0x3c hspi->RxXferCount = 0U; 8003734: 68fb ldr r3, [r7, #12] 8003736: 2200 movs r2, #0 8003738: 87da strh r2, [r3, #62] ; 0x3e hspi->RxISR = NULL; 800373a: 68fb ldr r3, [r7, #12] 800373c: 2200 movs r2, #0 800373e: 641a str r2, [r3, #64] ; 0x40 /* Set the function for IT treatment */ if (hspi->Init.DataSize > SPI_DATASIZE_8BIT) 8003740: 68fb ldr r3, [r7, #12] 8003742: 68db ldr r3, [r3, #12] 8003744: 2b00 cmp r3, #0 8003746: d003 beq.n 8003750 { hspi->TxISR = SPI_TxISR_16BIT; 8003748: 68fb ldr r3, [r7, #12] 800374a: 4a1b ldr r2, [pc, #108] ; (80037b8 ) 800374c: 645a str r2, [r3, #68] ; 0x44 800374e: e002 b.n 8003756 } else { hspi->TxISR = SPI_TxISR_8BIT; 8003750: 68fb ldr r3, [r7, #12] 8003752: 4a1a ldr r2, [pc, #104] ; (80037bc ) 8003754: 645a str r2, [r3, #68] ; 0x44 } /* Configure communication direction : 1Line */ if (hspi->Init.Direction == SPI_DIRECTION_1LINE) 8003756: 68fb ldr r3, [r7, #12] 8003758: 689b ldr r3, [r3, #8] 800375a: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 800375e: d107 bne.n 8003770 { SPI_1LINE_TX(hspi); 8003760: 68fb ldr r3, [r7, #12] 8003762: 681b ldr r3, [r3, #0] 8003764: 681a ldr r2, [r3, #0] 8003766: 68fb ldr r3, [r7, #12] 8003768: 681b ldr r3, [r3, #0] 800376a: f442 4280 orr.w r2, r2, #16384 ; 0x4000 800376e: 601a str r2, [r3, #0] SPI_RESET_CRC(hspi); } #endif /* USE_SPI_CRC */ /* Enable TXE and ERR interrupt */ __HAL_SPI_ENABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); 8003770: 68fb ldr r3, [r7, #12] 8003772: 681b ldr r3, [r3, #0] 8003774: 685a ldr r2, [r3, #4] 8003776: 68fb ldr r3, [r7, #12] 8003778: 681b ldr r3, [r3, #0] 800377a: f042 02a0 orr.w r2, r2, #160 ; 0xa0 800377e: 605a str r2, [r3, #4] /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) 8003780: 68fb ldr r3, [r7, #12] 8003782: 681b ldr r3, [r3, #0] 8003784: 681b ldr r3, [r3, #0] 8003786: f003 0340 and.w r3, r3, #64 ; 0x40 800378a: 2b40 cmp r3, #64 ; 0x40 800378c: d008 beq.n 80037a0 { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); 800378e: 68fb ldr r3, [r7, #12] 8003790: 681b ldr r3, [r3, #0] 8003792: 681a ldr r2, [r3, #0] 8003794: 68fb ldr r3, [r7, #12] 8003796: 681b ldr r3, [r3, #0] 8003798: f042 0240 orr.w r2, r2, #64 ; 0x40 800379c: 601a str r2, [r3, #0] 800379e: e000 b.n 80037a2 } error : 80037a0: bf00 nop __HAL_UNLOCK(hspi); 80037a2: 68fb ldr r3, [r7, #12] 80037a4: 2200 movs r2, #0 80037a6: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; 80037aa: 7dfb ldrb r3, [r7, #23] } 80037ac: 4618 mov r0, r3 80037ae: 371c adds r7, #28 80037b0: 46bd mov sp, r7 80037b2: f85d 7b04 ldr.w r7, [sp], #4 80037b6: 4770 bx lr 80037b8: 08003a57 .word 0x08003a57 80037bc: 08003a11 .word 0x08003a11 080037c0 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for the specified SPI module. * @retval None */ void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi) { 80037c0: b580 push {r7, lr} 80037c2: b088 sub sp, #32 80037c4: af00 add r7, sp, #0 80037c6: 6078 str r0, [r7, #4] uint32_t itsource = hspi->Instance->CR2; 80037c8: 687b ldr r3, [r7, #4] 80037ca: 681b ldr r3, [r3, #0] 80037cc: 685b ldr r3, [r3, #4] 80037ce: 61fb str r3, [r7, #28] uint32_t itflag = hspi->Instance->SR; 80037d0: 687b ldr r3, [r7, #4] 80037d2: 681b ldr r3, [r3, #0] 80037d4: 689b ldr r3, [r3, #8] 80037d6: 61bb str r3, [r7, #24] /* SPI in mode Receiver ----------------------------------------------------*/ if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) == RESET) && 80037d8: 69bb ldr r3, [r7, #24] 80037da: 099b lsrs r3, r3, #6 80037dc: f003 0301 and.w r3, r3, #1 80037e0: 2b00 cmp r3, #0 80037e2: d10f bne.n 8003804 (SPI_CHECK_FLAG(itflag, SPI_FLAG_RXNE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_RXNE) != RESET)) 80037e4: 69bb ldr r3, [r7, #24] 80037e6: f003 0301 and.w r3, r3, #1 if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) == RESET) && 80037ea: 2b00 cmp r3, #0 80037ec: d00a beq.n 8003804 (SPI_CHECK_FLAG(itflag, SPI_FLAG_RXNE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_RXNE) != RESET)) 80037ee: 69fb ldr r3, [r7, #28] 80037f0: 099b lsrs r3, r3, #6 80037f2: f003 0301 and.w r3, r3, #1 80037f6: 2b00 cmp r3, #0 80037f8: d004 beq.n 8003804 { hspi->RxISR(hspi); 80037fa: 687b ldr r3, [r7, #4] 80037fc: 6c1b ldr r3, [r3, #64] ; 0x40 80037fe: 6878 ldr r0, [r7, #4] 8003800: 4798 blx r3 return; 8003802: e0d8 b.n 80039b6 } /* SPI in mode Transmitter -------------------------------------------------*/ if ((SPI_CHECK_FLAG(itflag, SPI_FLAG_TXE) != RESET) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_TXE) != RESET)) 8003804: 69bb ldr r3, [r7, #24] 8003806: 085b lsrs r3, r3, #1 8003808: f003 0301 and.w r3, r3, #1 800380c: 2b00 cmp r3, #0 800380e: d00a beq.n 8003826 8003810: 69fb ldr r3, [r7, #28] 8003812: 09db lsrs r3, r3, #7 8003814: f003 0301 and.w r3, r3, #1 8003818: 2b00 cmp r3, #0 800381a: d004 beq.n 8003826 { hspi->TxISR(hspi); 800381c: 687b ldr r3, [r7, #4] 800381e: 6c5b ldr r3, [r3, #68] ; 0x44 8003820: 6878 ldr r0, [r7, #4] 8003822: 4798 blx r3 return; 8003824: e0c7 b.n 80039b6 } /* SPI in Error Treatment --------------------------------------------------*/ if (((SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) || (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) 8003826: 69bb ldr r3, [r7, #24] 8003828: 095b lsrs r3, r3, #5 800382a: f003 0301 and.w r3, r3, #1 800382e: 2b00 cmp r3, #0 8003830: d10c bne.n 800384c 8003832: 69bb ldr r3, [r7, #24] 8003834: 099b lsrs r3, r3, #6 8003836: f003 0301 and.w r3, r3, #1 800383a: 2b00 cmp r3, #0 800383c: d106 bne.n 800384c || (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET)) && (SPI_CHECK_IT_SOURCE(itsource, SPI_IT_ERR) != RESET)) 800383e: 69bb ldr r3, [r7, #24] 8003840: 0a1b lsrs r3, r3, #8 8003842: f003 0301 and.w r3, r3, #1 8003846: 2b00 cmp r3, #0 8003848: f000 80b5 beq.w 80039b6 800384c: 69fb ldr r3, [r7, #28] 800384e: 095b lsrs r3, r3, #5 8003850: f003 0301 and.w r3, r3, #1 8003854: 2b00 cmp r3, #0 8003856: f000 80ae beq.w 80039b6 { /* SPI Overrun error interrupt occurred ----------------------------------*/ if (SPI_CHECK_FLAG(itflag, SPI_FLAG_OVR) != RESET) 800385a: 69bb ldr r3, [r7, #24] 800385c: 099b lsrs r3, r3, #6 800385e: f003 0301 and.w r3, r3, #1 8003862: 2b00 cmp r3, #0 8003864: d023 beq.n 80038ae { if (hspi->State != HAL_SPI_STATE_BUSY_TX) 8003866: 687b ldr r3, [r7, #4] 8003868: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 800386c: b2db uxtb r3, r3 800386e: 2b03 cmp r3, #3 8003870: d011 beq.n 8003896 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_OVR); 8003872: 687b ldr r3, [r7, #4] 8003874: 6d5b ldr r3, [r3, #84] ; 0x54 8003876: f043 0204 orr.w r2, r3, #4 800387a: 687b ldr r3, [r7, #4] 800387c: 655a str r2, [r3, #84] ; 0x54 __HAL_SPI_CLEAR_OVRFLAG(hspi); 800387e: 2300 movs r3, #0 8003880: 617b str r3, [r7, #20] 8003882: 687b ldr r3, [r7, #4] 8003884: 681b ldr r3, [r3, #0] 8003886: 68db ldr r3, [r3, #12] 8003888: 617b str r3, [r7, #20] 800388a: 687b ldr r3, [r7, #4] 800388c: 681b ldr r3, [r3, #0] 800388e: 689b ldr r3, [r3, #8] 8003890: 617b str r3, [r7, #20] 8003892: 697b ldr r3, [r7, #20] 8003894: e00b b.n 80038ae } else { __HAL_SPI_CLEAR_OVRFLAG(hspi); 8003896: 2300 movs r3, #0 8003898: 613b str r3, [r7, #16] 800389a: 687b ldr r3, [r7, #4] 800389c: 681b ldr r3, [r3, #0] 800389e: 68db ldr r3, [r3, #12] 80038a0: 613b str r3, [r7, #16] 80038a2: 687b ldr r3, [r7, #4] 80038a4: 681b ldr r3, [r3, #0] 80038a6: 689b ldr r3, [r3, #8] 80038a8: 613b str r3, [r7, #16] 80038aa: 693b ldr r3, [r7, #16] return; 80038ac: e083 b.n 80039b6 } } /* SPI Mode Fault error interrupt occurred -------------------------------*/ if (SPI_CHECK_FLAG(itflag, SPI_FLAG_MODF) != RESET) 80038ae: 69bb ldr r3, [r7, #24] 80038b0: 095b lsrs r3, r3, #5 80038b2: f003 0301 and.w r3, r3, #1 80038b6: 2b00 cmp r3, #0 80038b8: d014 beq.n 80038e4 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_MODF); 80038ba: 687b ldr r3, [r7, #4] 80038bc: 6d5b ldr r3, [r3, #84] ; 0x54 80038be: f043 0201 orr.w r2, r3, #1 80038c2: 687b ldr r3, [r7, #4] 80038c4: 655a str r2, [r3, #84] ; 0x54 __HAL_SPI_CLEAR_MODFFLAG(hspi); 80038c6: 2300 movs r3, #0 80038c8: 60fb str r3, [r7, #12] 80038ca: 687b ldr r3, [r7, #4] 80038cc: 681b ldr r3, [r3, #0] 80038ce: 689b ldr r3, [r3, #8] 80038d0: 60fb str r3, [r7, #12] 80038d2: 687b ldr r3, [r7, #4] 80038d4: 681b ldr r3, [r3, #0] 80038d6: 681a ldr r2, [r3, #0] 80038d8: 687b ldr r3, [r7, #4] 80038da: 681b ldr r3, [r3, #0] 80038dc: f022 0240 bic.w r2, r2, #64 ; 0x40 80038e0: 601a str r2, [r3, #0] 80038e2: 68fb ldr r3, [r7, #12] } /* SPI Frame error interrupt occurred ------------------------------------*/ if (SPI_CHECK_FLAG(itflag, SPI_FLAG_FRE) != RESET) 80038e4: 69bb ldr r3, [r7, #24] 80038e6: 0a1b lsrs r3, r3, #8 80038e8: f003 0301 and.w r3, r3, #1 80038ec: 2b00 cmp r3, #0 80038ee: d00c beq.n 800390a { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FRE); 80038f0: 687b ldr r3, [r7, #4] 80038f2: 6d5b ldr r3, [r3, #84] ; 0x54 80038f4: f043 0208 orr.w r2, r3, #8 80038f8: 687b ldr r3, [r7, #4] 80038fa: 655a str r2, [r3, #84] ; 0x54 __HAL_SPI_CLEAR_FREFLAG(hspi); 80038fc: 2300 movs r3, #0 80038fe: 60bb str r3, [r7, #8] 8003900: 687b ldr r3, [r7, #4] 8003902: 681b ldr r3, [r3, #0] 8003904: 689b ldr r3, [r3, #8] 8003906: 60bb str r3, [r7, #8] 8003908: 68bb ldr r3, [r7, #8] } if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) 800390a: 687b ldr r3, [r7, #4] 800390c: 6d5b ldr r3, [r3, #84] ; 0x54 800390e: 2b00 cmp r3, #0 8003910: d050 beq.n 80039b4 { /* Disable all interrupts */ __HAL_SPI_DISABLE_IT(hspi, SPI_IT_RXNE | SPI_IT_TXE | SPI_IT_ERR); 8003912: 687b ldr r3, [r7, #4] 8003914: 681b ldr r3, [r3, #0] 8003916: 685a ldr r2, [r3, #4] 8003918: 687b ldr r3, [r7, #4] 800391a: 681b ldr r3, [r3, #0] 800391c: f022 02e0 bic.w r2, r2, #224 ; 0xe0 8003920: 605a str r2, [r3, #4] hspi->State = HAL_SPI_STATE_READY; 8003922: 687b ldr r3, [r7, #4] 8003924: 2201 movs r2, #1 8003926: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Disable the SPI DMA requests if enabled */ if ((HAL_IS_BIT_SET(itsource, SPI_CR2_TXDMAEN)) || (HAL_IS_BIT_SET(itsource, SPI_CR2_RXDMAEN))) 800392a: 69fb ldr r3, [r7, #28] 800392c: f003 0302 and.w r3, r3, #2 8003930: 2b00 cmp r3, #0 8003932: d104 bne.n 800393e 8003934: 69fb ldr r3, [r7, #28] 8003936: f003 0301 and.w r3, r3, #1 800393a: 2b00 cmp r3, #0 800393c: d034 beq.n 80039a8 { CLEAR_BIT(hspi->Instance->CR2, (SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN)); 800393e: 687b ldr r3, [r7, #4] 8003940: 681b ldr r3, [r3, #0] 8003942: 685a ldr r2, [r3, #4] 8003944: 687b ldr r3, [r7, #4] 8003946: 681b ldr r3, [r3, #0] 8003948: f022 0203 bic.w r2, r2, #3 800394c: 605a str r2, [r3, #4] /* Abort the SPI DMA Rx channel */ if (hspi->hdmarx != NULL) 800394e: 687b ldr r3, [r7, #4] 8003950: 6cdb ldr r3, [r3, #76] ; 0x4c 8003952: 2b00 cmp r3, #0 8003954: d011 beq.n 800397a { /* Set the SPI DMA Abort callback : will lead to call HAL_SPI_ErrorCallback() at end of DMA abort procedure */ hspi->hdmarx->XferAbortCallback = SPI_DMAAbortOnError; 8003956: 687b ldr r3, [r7, #4] 8003958: 6cdb ldr r3, [r3, #76] ; 0x4c 800395a: 4a18 ldr r2, [pc, #96] ; (80039bc ) 800395c: 651a str r2, [r3, #80] ; 0x50 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmarx)) 800395e: 687b ldr r3, [r7, #4] 8003960: 6cdb ldr r3, [r3, #76] ; 0x4c 8003962: 4618 mov r0, r3 8003964: f7ff f80d bl 8002982 8003968: 4603 mov r3, r0 800396a: 2b00 cmp r3, #0 800396c: d005 beq.n 800397a { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); 800396e: 687b ldr r3, [r7, #4] 8003970: 6d5b ldr r3, [r3, #84] ; 0x54 8003972: f043 0240 orr.w r2, r3, #64 ; 0x40 8003976: 687b ldr r3, [r7, #4] 8003978: 655a str r2, [r3, #84] ; 0x54 } } /* Abort the SPI DMA Tx channel */ if (hspi->hdmatx != NULL) 800397a: 687b ldr r3, [r7, #4] 800397c: 6c9b ldr r3, [r3, #72] ; 0x48 800397e: 2b00 cmp r3, #0 8003980: d016 beq.n 80039b0 { /* Set the SPI DMA Abort callback : will lead to call HAL_SPI_ErrorCallback() at end of DMA abort procedure */ hspi->hdmatx->XferAbortCallback = SPI_DMAAbortOnError; 8003982: 687b ldr r3, [r7, #4] 8003984: 6c9b ldr r3, [r3, #72] ; 0x48 8003986: 4a0d ldr r2, [pc, #52] ; (80039bc ) 8003988: 651a str r2, [r3, #80] ; 0x50 if (HAL_OK != HAL_DMA_Abort_IT(hspi->hdmatx)) 800398a: 687b ldr r3, [r7, #4] 800398c: 6c9b ldr r3, [r3, #72] ; 0x48 800398e: 4618 mov r0, r3 8003990: f7fe fff7 bl 8002982 8003994: 4603 mov r3, r0 8003996: 2b00 cmp r3, #0 8003998: d00a beq.n 80039b0 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_ABORT); 800399a: 687b ldr r3, [r7, #4] 800399c: 6d5b ldr r3, [r3, #84] ; 0x54 800399e: f043 0240 orr.w r2, r3, #64 ; 0x40 80039a2: 687b ldr r3, [r7, #4] 80039a4: 655a str r2, [r3, #84] ; 0x54 if (hspi->hdmatx != NULL) 80039a6: e003 b.n 80039b0 { /* Call user error callback */ #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) hspi->ErrorCallback(hspi); #else HAL_SPI_ErrorCallback(hspi); 80039a8: 6878 ldr r0, [r7, #4] 80039aa: f000 f813 bl 80039d4 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ } } return; 80039ae: e000 b.n 80039b2 if (hspi->hdmatx != NULL) 80039b0: bf00 nop return; 80039b2: bf00 nop 80039b4: bf00 nop } } 80039b6: 3720 adds r7, #32 80039b8: 46bd mov sp, r7 80039ba: bd80 pop {r7, pc} 80039bc: 080039e9 .word 0x080039e9 080039c0 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ __weak void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) { 80039c0: b480 push {r7} 80039c2: b083 sub sp, #12 80039c4: af00 add r7, sp, #0 80039c6: 6078 str r0, [r7, #4] UNUSED(hspi); /* NOTE : This function should not be modified, when the callback is needed, the HAL_SPI_TxCpltCallback should be implemented in the user file */ } 80039c8: bf00 nop 80039ca: 370c adds r7, #12 80039cc: 46bd mov sp, r7 80039ce: f85d 7b04 ldr.w r7, [sp], #4 80039d2: 4770 bx lr 080039d4 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ __weak void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi) { 80039d4: b480 push {r7} 80039d6: b083 sub sp, #12 80039d8: af00 add r7, sp, #0 80039da: 6078 str r0, [r7, #4] the HAL_SPI_ErrorCallback should be implemented in the user file */ /* NOTE : The ErrorCode parameter in the hspi handle is updated by the SPI processes and user can use HAL_SPI_GetError() API to check the latest error occurred */ } 80039dc: bf00 nop 80039de: 370c adds r7, #12 80039e0: 46bd mov sp, r7 80039e2: f85d 7b04 ldr.w r7, [sp], #4 80039e6: 4770 bx lr 080039e8 : * (To be called at end of DMA Abort procedure following error occurrence). * @param hdma DMA handle. * @retval None */ static void SPI_DMAAbortOnError(DMA_HandleTypeDef *hdma) { 80039e8: b580 push {r7, lr} 80039ea: b084 sub sp, #16 80039ec: af00 add r7, sp, #0 80039ee: 6078 str r0, [r7, #4] SPI_HandleTypeDef *hspi = (SPI_HandleTypeDef *)(((DMA_HandleTypeDef *)hdma)->Parent); /* Derogation MISRAC2012-Rule-11.5 */ 80039f0: 687b ldr r3, [r7, #4] 80039f2: 6b9b ldr r3, [r3, #56] ; 0x38 80039f4: 60fb str r3, [r7, #12] hspi->RxXferCount = 0U; 80039f6: 68fb ldr r3, [r7, #12] 80039f8: 2200 movs r2, #0 80039fa: 87da strh r2, [r3, #62] ; 0x3e hspi->TxXferCount = 0U; 80039fc: 68fb ldr r3, [r7, #12] 80039fe: 2200 movs r2, #0 8003a00: 86da strh r2, [r3, #54] ; 0x36 /* Call user error callback */ #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) hspi->ErrorCallback(hspi); #else HAL_SPI_ErrorCallback(hspi); 8003a02: 68f8 ldr r0, [r7, #12] 8003a04: f7ff ffe6 bl 80039d4 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ } 8003a08: bf00 nop 8003a0a: 3710 adds r7, #16 8003a0c: 46bd mov sp, r7 8003a0e: bd80 pop {r7, pc} 08003a10 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ static void SPI_TxISR_8BIT(struct __SPI_HandleTypeDef *hspi) { 8003a10: b580 push {r7, lr} 8003a12: b082 sub sp, #8 8003a14: af00 add r7, sp, #0 8003a16: 6078 str r0, [r7, #4] *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); 8003a18: 687b ldr r3, [r7, #4] 8003a1a: 6b1a ldr r2, [r3, #48] ; 0x30 8003a1c: 687b ldr r3, [r7, #4] 8003a1e: 681b ldr r3, [r3, #0] 8003a20: 330c adds r3, #12 8003a22: 7812 ldrb r2, [r2, #0] 8003a24: 701a strb r2, [r3, #0] hspi->pTxBuffPtr++; 8003a26: 687b ldr r3, [r7, #4] 8003a28: 6b1b ldr r3, [r3, #48] ; 0x30 8003a2a: 1c5a adds r2, r3, #1 8003a2c: 687b ldr r3, [r7, #4] 8003a2e: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; 8003a30: 687b ldr r3, [r7, #4] 8003a32: 8edb ldrh r3, [r3, #54] ; 0x36 8003a34: b29b uxth r3, r3 8003a36: 3b01 subs r3, #1 8003a38: b29a uxth r2, r3 8003a3a: 687b ldr r3, [r7, #4] 8003a3c: 86da strh r2, [r3, #54] ; 0x36 if (hspi->TxXferCount == 0U) 8003a3e: 687b ldr r3, [r7, #4] 8003a40: 8edb ldrh r3, [r3, #54] ; 0x36 8003a42: b29b uxth r3, r3 8003a44: 2b00 cmp r3, #0 8003a46: d102 bne.n 8003a4e { /* Enable CRC Transmission */ SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); } #endif /* USE_SPI_CRC */ SPI_CloseTx_ISR(hspi); 8003a48: 6878 ldr r0, [r7, #4] 8003a4a: f000 f8d3 bl 8003bf4 } } 8003a4e: bf00 nop 8003a50: 3708 adds r7, #8 8003a52: 46bd mov sp, r7 8003a54: bd80 pop {r7, pc} 08003a56 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ static void SPI_TxISR_16BIT(struct __SPI_HandleTypeDef *hspi) { 8003a56: b580 push {r7, lr} 8003a58: b082 sub sp, #8 8003a5a: af00 add r7, sp, #0 8003a5c: 6078 str r0, [r7, #4] /* Transmit data in 16 Bit mode */ hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); 8003a5e: 687b ldr r3, [r7, #4] 8003a60: 6b1b ldr r3, [r3, #48] ; 0x30 8003a62: 881a ldrh r2, [r3, #0] 8003a64: 687b ldr r3, [r7, #4] 8003a66: 681b ldr r3, [r3, #0] 8003a68: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); 8003a6a: 687b ldr r3, [r7, #4] 8003a6c: 6b1b ldr r3, [r3, #48] ; 0x30 8003a6e: 1c9a adds r2, r3, #2 8003a70: 687b ldr r3, [r7, #4] 8003a72: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; 8003a74: 687b ldr r3, [r7, #4] 8003a76: 8edb ldrh r3, [r3, #54] ; 0x36 8003a78: b29b uxth r3, r3 8003a7a: 3b01 subs r3, #1 8003a7c: b29a uxth r2, r3 8003a7e: 687b ldr r3, [r7, #4] 8003a80: 86da strh r2, [r3, #54] ; 0x36 if (hspi->TxXferCount == 0U) 8003a82: 687b ldr r3, [r7, #4] 8003a84: 8edb ldrh r3, [r3, #54] ; 0x36 8003a86: b29b uxth r3, r3 8003a88: 2b00 cmp r3, #0 8003a8a: d102 bne.n 8003a92 { /* Enable CRC Transmission */ SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); } #endif /* USE_SPI_CRC */ SPI_CloseTx_ISR(hspi); 8003a8c: 6878 ldr r0, [r7, #4] 8003a8e: f000 f8b1 bl 8003bf4 } } 8003a92: bf00 nop 8003a94: 3708 adds r7, #8 8003a96: 46bd mov sp, r7 8003a98: bd80 pop {r7, pc} 08003a9a : * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, uint32_t Timeout, uint32_t Tickstart) { 8003a9a: b580 push {r7, lr} 8003a9c: b084 sub sp, #16 8003a9e: af00 add r7, sp, #0 8003aa0: 60f8 str r0, [r7, #12] 8003aa2: 60b9 str r1, [r7, #8] 8003aa4: 603b str r3, [r7, #0] 8003aa6: 4613 mov r3, r2 8003aa8: 71fb strb r3, [r7, #7] while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) 8003aaa: e04c b.n 8003b46 { if (Timeout != HAL_MAX_DELAY) 8003aac: 683b ldr r3, [r7, #0] 8003aae: f1b3 3fff cmp.w r3, #4294967295 8003ab2: d048 beq.n 8003b46 { if (((HAL_GetTick() - Tickstart) >= Timeout) || (Timeout == 0U)) 8003ab4: f7fe fa5c bl 8001f70 8003ab8: 4602 mov r2, r0 8003aba: 69bb ldr r3, [r7, #24] 8003abc: 1ad3 subs r3, r2, r3 8003abe: 683a ldr r2, [r7, #0] 8003ac0: 429a cmp r2, r3 8003ac2: d902 bls.n 8003aca 8003ac4: 683b ldr r3, [r7, #0] 8003ac6: 2b00 cmp r3, #0 8003ac8: d13d bne.n 8003b46 /* Disable the SPI and reset the CRC: the CRC value should be cleared on both master and slave sides in order to resynchronize the master and slave for their respective CRC calculation */ /* Disable TXE, RXNE and ERR interrupts for the interrupt process */ __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); 8003aca: 68fb ldr r3, [r7, #12] 8003acc: 681b ldr r3, [r3, #0] 8003ace: 685a ldr r2, [r3, #4] 8003ad0: 68fb ldr r3, [r7, #12] 8003ad2: 681b ldr r3, [r3, #0] 8003ad4: f022 02e0 bic.w r2, r2, #224 ; 0xe0 8003ad8: 605a str r2, [r3, #4] if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) 8003ada: 68fb ldr r3, [r7, #12] 8003adc: 685b ldr r3, [r3, #4] 8003ade: f5b3 7f82 cmp.w r3, #260 ; 0x104 8003ae2: d111 bne.n 8003b08 8003ae4: 68fb ldr r3, [r7, #12] 8003ae6: 689b ldr r3, [r3, #8] 8003ae8: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 8003aec: d004 beq.n 8003af8 || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) 8003aee: 68fb ldr r3, [r7, #12] 8003af0: 689b ldr r3, [r3, #8] 8003af2: f5b3 6f80 cmp.w r3, #1024 ; 0x400 8003af6: d107 bne.n 8003b08 { /* Disable SPI peripheral */ __HAL_SPI_DISABLE(hspi); 8003af8: 68fb ldr r3, [r7, #12] 8003afa: 681b ldr r3, [r3, #0] 8003afc: 681a ldr r2, [r3, #0] 8003afe: 68fb ldr r3, [r7, #12] 8003b00: 681b ldr r3, [r3, #0] 8003b02: f022 0240 bic.w r2, r2, #64 ; 0x40 8003b06: 601a str r2, [r3, #0] } /* Reset CRC Calculation */ if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) 8003b08: 68fb ldr r3, [r7, #12] 8003b0a: 6a9b ldr r3, [r3, #40] ; 0x28 8003b0c: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 8003b10: d10f bne.n 8003b32 { SPI_RESET_CRC(hspi); 8003b12: 68fb ldr r3, [r7, #12] 8003b14: 681b ldr r3, [r3, #0] 8003b16: 681a ldr r2, [r3, #0] 8003b18: 68fb ldr r3, [r7, #12] 8003b1a: 681b ldr r3, [r3, #0] 8003b1c: f422 5200 bic.w r2, r2, #8192 ; 0x2000 8003b20: 601a str r2, [r3, #0] 8003b22: 68fb ldr r3, [r7, #12] 8003b24: 681b ldr r3, [r3, #0] 8003b26: 681a ldr r2, [r3, #0] 8003b28: 68fb ldr r3, [r7, #12] 8003b2a: 681b ldr r3, [r3, #0] 8003b2c: f442 5200 orr.w r2, r2, #8192 ; 0x2000 8003b30: 601a str r2, [r3, #0] } hspi->State = HAL_SPI_STATE_READY; 8003b32: 68fb ldr r3, [r7, #12] 8003b34: 2201 movs r2, #1 8003b36: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Process Unlocked */ __HAL_UNLOCK(hspi); 8003b3a: 68fb ldr r3, [r7, #12] 8003b3c: 2200 movs r2, #0 8003b3e: f883 2050 strb.w r2, [r3, #80] ; 0x50 return HAL_TIMEOUT; 8003b42: 2303 movs r3, #3 8003b44: e00f b.n 8003b66 while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) 8003b46: 68fb ldr r3, [r7, #12] 8003b48: 681b ldr r3, [r3, #0] 8003b4a: 689a ldr r2, [r3, #8] 8003b4c: 68bb ldr r3, [r7, #8] 8003b4e: 4013 ands r3, r2 8003b50: 68ba ldr r2, [r7, #8] 8003b52: 429a cmp r2, r3 8003b54: bf0c ite eq 8003b56: 2301 moveq r3, #1 8003b58: 2300 movne r3, #0 8003b5a: b2db uxtb r3, r3 8003b5c: 461a mov r2, r3 8003b5e: 79fb ldrb r3, [r7, #7] 8003b60: 429a cmp r2, r3 8003b62: d1a3 bne.n 8003aac } } } return HAL_OK; 8003b64: 2300 movs r3, #0 } 8003b66: 4618 mov r0, r3 8003b68: 3710 adds r7, #16 8003b6a: 46bd mov sp, r7 8003b6c: bd80 pop {r7, pc} ... 08003b70 : * @param Timeout Timeout duration * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) { 8003b70: b580 push {r7, lr} 8003b72: b088 sub sp, #32 8003b74: af02 add r7, sp, #8 8003b76: 60f8 str r0, [r7, #12] 8003b78: 60b9 str r1, [r7, #8] 8003b7a: 607a str r2, [r7, #4] /* Timeout in µs */ __IO uint32_t count = SPI_BSY_FLAG_WORKAROUND_TIMEOUT * (SystemCoreClock / 24U / 1000000U); 8003b7c: 4b1b ldr r3, [pc, #108] ; (8003bec ) 8003b7e: 681b ldr r3, [r3, #0] 8003b80: 4a1b ldr r2, [pc, #108] ; (8003bf0 ) 8003b82: fba2 2303 umull r2, r3, r2, r3 8003b86: 0d5b lsrs r3, r3, #21 8003b88: f44f 727a mov.w r2, #1000 ; 0x3e8 8003b8c: fb02 f303 mul.w r3, r2, r3 8003b90: 617b str r3, [r7, #20] /* Erratasheet: BSY bit may stay high at the end of a data transfer in Slave mode */ if (hspi->Init.Mode == SPI_MODE_MASTER) 8003b92: 68fb ldr r3, [r7, #12] 8003b94: 685b ldr r3, [r3, #4] 8003b96: f5b3 7f82 cmp.w r3, #260 ; 0x104 8003b9a: d112 bne.n 8003bc2 { /* Control the BSY flag */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) 8003b9c: 687b ldr r3, [r7, #4] 8003b9e: 9300 str r3, [sp, #0] 8003ba0: 68bb ldr r3, [r7, #8] 8003ba2: 2200 movs r2, #0 8003ba4: 2180 movs r1, #128 ; 0x80 8003ba6: 68f8 ldr r0, [r7, #12] 8003ba8: f7ff ff77 bl 8003a9a 8003bac: 4603 mov r3, r0 8003bae: 2b00 cmp r3, #0 8003bb0: d016 beq.n 8003be0 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); 8003bb2: 68fb ldr r3, [r7, #12] 8003bb4: 6d5b ldr r3, [r3, #84] ; 0x54 8003bb6: f043 0220 orr.w r2, r3, #32 8003bba: 68fb ldr r3, [r7, #12] 8003bbc: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; 8003bbe: 2303 movs r3, #3 8003bc0: e00f b.n 8003be2 * User have to calculate the timeout value to fit with the time of 1 byte transfer. * This time is directly link with the SPI clock from Master device. */ do { if (count == 0U) 8003bc2: 697b ldr r3, [r7, #20] 8003bc4: 2b00 cmp r3, #0 8003bc6: d00a beq.n 8003bde { break; } count--; 8003bc8: 697b ldr r3, [r7, #20] 8003bca: 3b01 subs r3, #1 8003bcc: 617b str r3, [r7, #20] } while (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_BSY) != RESET); 8003bce: 68fb ldr r3, [r7, #12] 8003bd0: 681b ldr r3, [r3, #0] 8003bd2: 689b ldr r3, [r3, #8] 8003bd4: f003 0380 and.w r3, r3, #128 ; 0x80 8003bd8: 2b80 cmp r3, #128 ; 0x80 8003bda: d0f2 beq.n 8003bc2 8003bdc: e000 b.n 8003be0 break; 8003bde: bf00 nop } return HAL_OK; 8003be0: 2300 movs r3, #0 } 8003be2: 4618 mov r0, r3 8003be4: 3718 adds r7, #24 8003be6: 46bd mov sp, r7 8003be8: bd80 pop {r7, pc} 8003bea: bf00 nop 8003bec: 20000004 .word 0x20000004 8003bf0: 165e9f81 .word 0x165e9f81 08003bf4 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval None */ static void SPI_CloseTx_ISR(SPI_HandleTypeDef *hspi) { 8003bf4: b580 push {r7, lr} 8003bf6: b086 sub sp, #24 8003bf8: af00 add r7, sp, #0 8003bfa: 6078 str r0, [r7, #4] uint32_t tickstart; __IO uint32_t count = SPI_DEFAULT_TIMEOUT * (SystemCoreClock / 24U / 1000U); 8003bfc: 4b2c ldr r3, [pc, #176] ; (8003cb0 ) 8003bfe: 681b ldr r3, [r3, #0] 8003c00: 4a2c ldr r2, [pc, #176] ; (8003cb4 ) 8003c02: fba2 2303 umull r2, r3, r2, r3 8003c06: 0a5b lsrs r3, r3, #9 8003c08: 2264 movs r2, #100 ; 0x64 8003c0a: fb02 f303 mul.w r3, r2, r3 8003c0e: 613b str r3, [r7, #16] /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); 8003c10: f7fe f9ae bl 8001f70 8003c14: 6178 str r0, [r7, #20] /* Wait until TXE flag is set */ do { if (count == 0U) 8003c16: 693b ldr r3, [r7, #16] 8003c18: 2b00 cmp r3, #0 8003c1a: d106 bne.n 8003c2a { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); 8003c1c: 687b ldr r3, [r7, #4] 8003c1e: 6d5b ldr r3, [r3, #84] ; 0x54 8003c20: f043 0220 orr.w r2, r3, #32 8003c24: 687b ldr r3, [r7, #4] 8003c26: 655a str r2, [r3, #84] ; 0x54 break; 8003c28: e009 b.n 8003c3e } count--; 8003c2a: 693b ldr r3, [r7, #16] 8003c2c: 3b01 subs r3, #1 8003c2e: 613b str r3, [r7, #16] } while ((hspi->Instance->SR & SPI_FLAG_TXE) == RESET); 8003c30: 687b ldr r3, [r7, #4] 8003c32: 681b ldr r3, [r3, #0] 8003c34: 689b ldr r3, [r3, #8] 8003c36: f003 0302 and.w r3, r3, #2 8003c3a: 2b00 cmp r3, #0 8003c3c: d0eb beq.n 8003c16 /* Disable TXE and ERR interrupt */ __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_ERR)); 8003c3e: 687b ldr r3, [r7, #4] 8003c40: 681b ldr r3, [r3, #0] 8003c42: 685a ldr r2, [r3, #4] 8003c44: 687b ldr r3, [r7, #4] 8003c46: 681b ldr r3, [r3, #0] 8003c48: f022 02a0 bic.w r2, r2, #160 ; 0xa0 8003c4c: 605a str r2, [r3, #4] /* Check the end of the transaction */ if (SPI_EndRxTxTransaction(hspi, SPI_DEFAULT_TIMEOUT, tickstart) != HAL_OK) 8003c4e: 697a ldr r2, [r7, #20] 8003c50: 2164 movs r1, #100 ; 0x64 8003c52: 6878 ldr r0, [r7, #4] 8003c54: f7ff ff8c bl 8003b70 8003c58: 4603 mov r3, r0 8003c5a: 2b00 cmp r3, #0 8003c5c: d005 beq.n 8003c6a { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); 8003c5e: 687b ldr r3, [r7, #4] 8003c60: 6d5b ldr r3, [r3, #84] ; 0x54 8003c62: f043 0220 orr.w r2, r3, #32 8003c66: 687b ldr r3, [r7, #4] 8003c68: 655a str r2, [r3, #84] ; 0x54 } /* Clear overrun flag in 2 Lines communication mode because received is not read */ if (hspi->Init.Direction == SPI_DIRECTION_2LINES) 8003c6a: 687b ldr r3, [r7, #4] 8003c6c: 689b ldr r3, [r3, #8] 8003c6e: 2b00 cmp r3, #0 8003c70: d10a bne.n 8003c88 { __HAL_SPI_CLEAR_OVRFLAG(hspi); 8003c72: 2300 movs r3, #0 8003c74: 60fb str r3, [r7, #12] 8003c76: 687b ldr r3, [r7, #4] 8003c78: 681b ldr r3, [r3, #0] 8003c7a: 68db ldr r3, [r3, #12] 8003c7c: 60fb str r3, [r7, #12] 8003c7e: 687b ldr r3, [r7, #4] 8003c80: 681b ldr r3, [r3, #0] 8003c82: 689b ldr r3, [r3, #8] 8003c84: 60fb str r3, [r7, #12] 8003c86: 68fb ldr r3, [r7, #12] } hspi->State = HAL_SPI_STATE_READY; 8003c88: 687b ldr r3, [r7, #4] 8003c8a: 2201 movs r2, #1 8003c8c: f883 2051 strb.w r2, [r3, #81] ; 0x51 if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) 8003c90: 687b ldr r3, [r7, #4] 8003c92: 6d5b ldr r3, [r3, #84] ; 0x54 8003c94: 2b00 cmp r3, #0 8003c96: d003 beq.n 8003ca0 { /* Call user error callback */ #if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U) hspi->ErrorCallback(hspi); #else HAL_SPI_ErrorCallback(hspi); 8003c98: 6878 ldr r0, [r7, #4] 8003c9a: f7ff fe9b bl 80039d4 hspi->TxCpltCallback(hspi); #else HAL_SPI_TxCpltCallback(hspi); #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ } } 8003c9e: e002 b.n 8003ca6 HAL_SPI_TxCpltCallback(hspi); 8003ca0: 6878 ldr r0, [r7, #4] 8003ca2: f7ff fe8d bl 80039c0 } 8003ca6: bf00 nop 8003ca8: 3718 adds r7, #24 8003caa: 46bd mov sp, r7 8003cac: bd80 pop {r7, pc} 8003cae: bf00 nop 8003cb0: 20000004 .word 0x20000004 8003cb4: 057619f1 .word 0x057619f1 08003cb8 : * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() * @param htim TIM Base handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) { 8003cb8: b580 push {r7, lr} 8003cba: b082 sub sp, #8 8003cbc: af00 add r7, sp, #0 8003cbe: 6078 str r0, [r7, #4] /* Check the TIM handle allocation */ if (htim == NULL) 8003cc0: 687b ldr r3, [r7, #4] 8003cc2: 2b00 cmp r3, #0 8003cc4: d101 bne.n 8003cca { return HAL_ERROR; 8003cc6: 2301 movs r3, #1 8003cc8: e01d b.n 8003d06 assert_param(IS_TIM_INSTANCE(htim->Instance)); assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if (htim->State == HAL_TIM_STATE_RESET) 8003cca: 687b ldr r3, [r7, #4] 8003ccc: f893 303d ldrb.w r3, [r3, #61] ; 0x3d 8003cd0: b2db uxtb r3, r3 8003cd2: 2b00 cmp r3, #0 8003cd4: d106 bne.n 8003ce4 { /* Allocate lock resource and initialize it */ htim->Lock = HAL_UNLOCKED; 8003cd6: 687b ldr r3, [r7, #4] 8003cd8: 2200 movs r2, #0 8003cda: f883 203c strb.w r2, [r3, #60] ; 0x3c } /* Init the low level hardware : GPIO, CLOCK, NVIC */ htim->Base_MspInitCallback(htim); #else /* Init the low level hardware : GPIO, CLOCK, NVIC */ HAL_TIM_Base_MspInit(htim); 8003cde: 6878 ldr r0, [r7, #4] 8003ce0: f7fd ffcc bl 8001c7c #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } /* Set the TIM state */ htim->State = HAL_TIM_STATE_BUSY; 8003ce4: 687b ldr r3, [r7, #4] 8003ce6: 2202 movs r2, #2 8003ce8: f883 203d strb.w r2, [r3, #61] ; 0x3d /* Set the Time Base configuration */ TIM_Base_SetConfig(htim->Instance, &htim->Init); 8003cec: 687b ldr r3, [r7, #4] 8003cee: 681a ldr r2, [r3, #0] 8003cf0: 687b ldr r3, [r7, #4] 8003cf2: 3304 adds r3, #4 8003cf4: 4619 mov r1, r3 8003cf6: 4610 mov r0, r2 8003cf8: f000 f9ae bl 8004058 /* Initialize the TIM state*/ htim->State = HAL_TIM_STATE_READY; 8003cfc: 687b ldr r3, [r7, #4] 8003cfe: 2201 movs r2, #1 8003d00: f883 203d strb.w r2, [r3, #61] ; 0x3d return HAL_OK; 8003d04: 2300 movs r3, #0 } 8003d06: 4618 mov r0, r3 8003d08: 3708 adds r7, #8 8003d0a: 46bd mov sp, r7 8003d0c: bd80 pop {r7, pc} 08003d0e : * @brief Starts the TIM Base generation in interrupt mode. * @param htim TIM Base handle * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) { 8003d0e: b480 push {r7} 8003d10: b085 sub sp, #20 8003d12: af00 add r7, sp, #0 8003d14: 6078 str r0, [r7, #4] /* Check the parameters */ assert_param(IS_TIM_INSTANCE(htim->Instance)); /* Enable the TIM Update interrupt */ __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); 8003d16: 687b ldr r3, [r7, #4] 8003d18: 681b ldr r3, [r3, #0] 8003d1a: 68da ldr r2, [r3, #12] 8003d1c: 687b ldr r3, [r7, #4] 8003d1e: 681b ldr r3, [r3, #0] 8003d20: f042 0201 orr.w r2, r2, #1 8003d24: 60da str r2, [r3, #12] /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; 8003d26: 687b ldr r3, [r7, #4] 8003d28: 681b ldr r3, [r3, #0] 8003d2a: 689b ldr r3, [r3, #8] 8003d2c: f003 0307 and.w r3, r3, #7 8003d30: 60fb str r3, [r7, #12] if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) 8003d32: 68fb ldr r3, [r7, #12] 8003d34: 2b06 cmp r3, #6 8003d36: d007 beq.n 8003d48 { __HAL_TIM_ENABLE(htim); 8003d38: 687b ldr r3, [r7, #4] 8003d3a: 681b ldr r3, [r3, #0] 8003d3c: 681a ldr r2, [r3, #0] 8003d3e: 687b ldr r3, [r7, #4] 8003d40: 681b ldr r3, [r3, #0] 8003d42: f042 0201 orr.w r2, r2, #1 8003d46: 601a str r2, [r3, #0] } /* Return function status */ return HAL_OK; 8003d48: 2300 movs r3, #0 } 8003d4a: 4618 mov r0, r3 8003d4c: 3714 adds r7, #20 8003d4e: 46bd mov sp, r7 8003d50: f85d 7b04 ldr.w r7, [sp], #4 8003d54: 4770 bx lr 08003d56 : * @arg TIM_OPMODE_SINGLE: Only one pulse will be generated. * @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated. * @retval HAL status */ HAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) { 8003d56: b580 push {r7, lr} 8003d58: b082 sub sp, #8 8003d5a: af00 add r7, sp, #0 8003d5c: 6078 str r0, [r7, #4] 8003d5e: 6039 str r1, [r7, #0] /* Check the TIM handle allocation */ if (htim == NULL) 8003d60: 687b ldr r3, [r7, #4] 8003d62: 2b00 cmp r3, #0 8003d64: d101 bne.n 8003d6a { return HAL_ERROR; 8003d66: 2301 movs r3, #1 8003d68: e02d b.n 8003dc6 assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); assert_param(IS_TIM_OPM_MODE(OnePulseMode)); assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); if (htim->State == HAL_TIM_STATE_RESET) 8003d6a: 687b ldr r3, [r7, #4] 8003d6c: f893 303d ldrb.w r3, [r3, #61] ; 0x3d 8003d70: b2db uxtb r3, r3 8003d72: 2b00 cmp r3, #0 8003d74: d106 bne.n 8003d84 { /* Allocate lock resource and initialize it */ htim->Lock = HAL_UNLOCKED; 8003d76: 687b ldr r3, [r7, #4] 8003d78: 2200 movs r2, #0 8003d7a: f883 203c strb.w r2, [r3, #60] ; 0x3c } /* Init the low level hardware : GPIO, CLOCK, NVIC */ htim->OnePulse_MspInitCallback(htim); #else /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ HAL_TIM_OnePulse_MspInit(htim); 8003d7e: 6878 ldr r0, [r7, #4] 8003d80: f000 f825 bl 8003dce #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } /* Set the TIM state */ htim->State = HAL_TIM_STATE_BUSY; 8003d84: 687b ldr r3, [r7, #4] 8003d86: 2202 movs r2, #2 8003d88: f883 203d strb.w r2, [r3, #61] ; 0x3d /* Configure the Time base in the One Pulse Mode */ TIM_Base_SetConfig(htim->Instance, &htim->Init); 8003d8c: 687b ldr r3, [r7, #4] 8003d8e: 681a ldr r2, [r3, #0] 8003d90: 687b ldr r3, [r7, #4] 8003d92: 3304 adds r3, #4 8003d94: 4619 mov r1, r3 8003d96: 4610 mov r0, r2 8003d98: f000 f95e bl 8004058 /* Reset the OPM Bit */ htim->Instance->CR1 &= ~TIM_CR1_OPM; 8003d9c: 687b ldr r3, [r7, #4] 8003d9e: 681b ldr r3, [r3, #0] 8003da0: 681a ldr r2, [r3, #0] 8003da2: 687b ldr r3, [r7, #4] 8003da4: 681b ldr r3, [r3, #0] 8003da6: f022 0208 bic.w r2, r2, #8 8003daa: 601a str r2, [r3, #0] /* Configure the OPM Mode */ htim->Instance->CR1 |= OnePulseMode; 8003dac: 687b ldr r3, [r7, #4] 8003dae: 681b ldr r3, [r3, #0] 8003db0: 6819 ldr r1, [r3, #0] 8003db2: 687b ldr r3, [r7, #4] 8003db4: 681b ldr r3, [r3, #0] 8003db6: 683a ldr r2, [r7, #0] 8003db8: 430a orrs r2, r1 8003dba: 601a str r2, [r3, #0] /* Initialize the TIM state*/ htim->State = HAL_TIM_STATE_READY; 8003dbc: 687b ldr r3, [r7, #4] 8003dbe: 2201 movs r2, #1 8003dc0: f883 203d strb.w r2, [r3, #61] ; 0x3d return HAL_OK; 8003dc4: 2300 movs r3, #0 } 8003dc6: 4618 mov r0, r3 8003dc8: 3708 adds r7, #8 8003dca: 46bd mov sp, r7 8003dcc: bd80 pop {r7, pc} 08003dce : * @brief Initializes the TIM One Pulse MSP. * @param htim TIM One Pulse handle * @retval None */ __weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) { 8003dce: b480 push {r7} 8003dd0: b083 sub sp, #12 8003dd2: af00 add r7, sp, #0 8003dd4: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIM_OnePulse_MspInit could be implemented in the user file */ } 8003dd6: bf00 nop 8003dd8: 370c adds r7, #12 8003dda: 46bd mov sp, r7 8003ddc: f85d 7b04 ldr.w r7, [sp], #4 8003de0: 4770 bx lr 08003de2 : * @brief This function handles TIM interrupts requests. * @param htim TIM handle * @retval None */ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) { 8003de2: b580 push {r7, lr} 8003de4: b082 sub sp, #8 8003de6: af00 add r7, sp, #0 8003de8: 6078 str r0, [r7, #4] /* Capture compare 1 event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) 8003dea: 687b ldr r3, [r7, #4] 8003dec: 681b ldr r3, [r3, #0] 8003dee: 691b ldr r3, [r3, #16] 8003df0: f003 0302 and.w r3, r3, #2 8003df4: 2b02 cmp r3, #2 8003df6: d122 bne.n 8003e3e { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) 8003df8: 687b ldr r3, [r7, #4] 8003dfa: 681b ldr r3, [r3, #0] 8003dfc: 68db ldr r3, [r3, #12] 8003dfe: f003 0302 and.w r3, r3, #2 8003e02: 2b02 cmp r3, #2 8003e04: d11b bne.n 8003e3e { { __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1); 8003e06: 687b ldr r3, [r7, #4] 8003e08: 681b ldr r3, [r3, #0] 8003e0a: f06f 0202 mvn.w r2, #2 8003e0e: 611a str r2, [r3, #16] htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; 8003e10: 687b ldr r3, [r7, #4] 8003e12: 2201 movs r2, #1 8003e14: 771a strb r2, [r3, #28] /* Input capture event */ if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) 8003e16: 687b ldr r3, [r7, #4] 8003e18: 681b ldr r3, [r3, #0] 8003e1a: 699b ldr r3, [r3, #24] 8003e1c: f003 0303 and.w r3, r3, #3 8003e20: 2b00 cmp r3, #0 8003e22: d003 beq.n 8003e2c { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->IC_CaptureCallback(htim); #else HAL_TIM_IC_CaptureCallback(htim); 8003e24: 6878 ldr r0, [r7, #4] 8003e26: f000 f8f8 bl 800401a 8003e2a: e005 b.n 8003e38 { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->OC_DelayElapsedCallback(htim); htim->PWM_PulseFinishedCallback(htim); #else HAL_TIM_OC_DelayElapsedCallback(htim); 8003e2c: 6878 ldr r0, [r7, #4] 8003e2e: f000 f8ea bl 8004006 HAL_TIM_PWM_PulseFinishedCallback(htim); 8003e32: 6878 ldr r0, [r7, #4] 8003e34: f000 f8fb bl 800402e #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; 8003e38: 687b ldr r3, [r7, #4] 8003e3a: 2200 movs r2, #0 8003e3c: 771a strb r2, [r3, #28] } } } /* Capture compare 2 event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) 8003e3e: 687b ldr r3, [r7, #4] 8003e40: 681b ldr r3, [r3, #0] 8003e42: 691b ldr r3, [r3, #16] 8003e44: f003 0304 and.w r3, r3, #4 8003e48: 2b04 cmp r3, #4 8003e4a: d122 bne.n 8003e92 { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) 8003e4c: 687b ldr r3, [r7, #4] 8003e4e: 681b ldr r3, [r3, #0] 8003e50: 68db ldr r3, [r3, #12] 8003e52: f003 0304 and.w r3, r3, #4 8003e56: 2b04 cmp r3, #4 8003e58: d11b bne.n 8003e92 { __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2); 8003e5a: 687b ldr r3, [r7, #4] 8003e5c: 681b ldr r3, [r3, #0] 8003e5e: f06f 0204 mvn.w r2, #4 8003e62: 611a str r2, [r3, #16] htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; 8003e64: 687b ldr r3, [r7, #4] 8003e66: 2202 movs r2, #2 8003e68: 771a strb r2, [r3, #28] /* Input capture event */ if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) 8003e6a: 687b ldr r3, [r7, #4] 8003e6c: 681b ldr r3, [r3, #0] 8003e6e: 699b ldr r3, [r3, #24] 8003e70: f403 7340 and.w r3, r3, #768 ; 0x300 8003e74: 2b00 cmp r3, #0 8003e76: d003 beq.n 8003e80 { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->IC_CaptureCallback(htim); #else HAL_TIM_IC_CaptureCallback(htim); 8003e78: 6878 ldr r0, [r7, #4] 8003e7a: f000 f8ce bl 800401a 8003e7e: e005 b.n 8003e8c { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->OC_DelayElapsedCallback(htim); htim->PWM_PulseFinishedCallback(htim); #else HAL_TIM_OC_DelayElapsedCallback(htim); 8003e80: 6878 ldr r0, [r7, #4] 8003e82: f000 f8c0 bl 8004006 HAL_TIM_PWM_PulseFinishedCallback(htim); 8003e86: 6878 ldr r0, [r7, #4] 8003e88: f000 f8d1 bl 800402e #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; 8003e8c: 687b ldr r3, [r7, #4] 8003e8e: 2200 movs r2, #0 8003e90: 771a strb r2, [r3, #28] } } /* Capture compare 3 event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) 8003e92: 687b ldr r3, [r7, #4] 8003e94: 681b ldr r3, [r3, #0] 8003e96: 691b ldr r3, [r3, #16] 8003e98: f003 0308 and.w r3, r3, #8 8003e9c: 2b08 cmp r3, #8 8003e9e: d122 bne.n 8003ee6 { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) 8003ea0: 687b ldr r3, [r7, #4] 8003ea2: 681b ldr r3, [r3, #0] 8003ea4: 68db ldr r3, [r3, #12] 8003ea6: f003 0308 and.w r3, r3, #8 8003eaa: 2b08 cmp r3, #8 8003eac: d11b bne.n 8003ee6 { __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3); 8003eae: 687b ldr r3, [r7, #4] 8003eb0: 681b ldr r3, [r3, #0] 8003eb2: f06f 0208 mvn.w r2, #8 8003eb6: 611a str r2, [r3, #16] htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; 8003eb8: 687b ldr r3, [r7, #4] 8003eba: 2204 movs r2, #4 8003ebc: 771a strb r2, [r3, #28] /* Input capture event */ if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) 8003ebe: 687b ldr r3, [r7, #4] 8003ec0: 681b ldr r3, [r3, #0] 8003ec2: 69db ldr r3, [r3, #28] 8003ec4: f003 0303 and.w r3, r3, #3 8003ec8: 2b00 cmp r3, #0 8003eca: d003 beq.n 8003ed4 { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->IC_CaptureCallback(htim); #else HAL_TIM_IC_CaptureCallback(htim); 8003ecc: 6878 ldr r0, [r7, #4] 8003ece: f000 f8a4 bl 800401a 8003ed2: e005 b.n 8003ee0 { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->OC_DelayElapsedCallback(htim); htim->PWM_PulseFinishedCallback(htim); #else HAL_TIM_OC_DelayElapsedCallback(htim); 8003ed4: 6878 ldr r0, [r7, #4] 8003ed6: f000 f896 bl 8004006 HAL_TIM_PWM_PulseFinishedCallback(htim); 8003eda: 6878 ldr r0, [r7, #4] 8003edc: f000 f8a7 bl 800402e #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; 8003ee0: 687b ldr r3, [r7, #4] 8003ee2: 2200 movs r2, #0 8003ee4: 771a strb r2, [r3, #28] } } /* Capture compare 4 event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) 8003ee6: 687b ldr r3, [r7, #4] 8003ee8: 681b ldr r3, [r3, #0] 8003eea: 691b ldr r3, [r3, #16] 8003eec: f003 0310 and.w r3, r3, #16 8003ef0: 2b10 cmp r3, #16 8003ef2: d122 bne.n 8003f3a { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) 8003ef4: 687b ldr r3, [r7, #4] 8003ef6: 681b ldr r3, [r3, #0] 8003ef8: 68db ldr r3, [r3, #12] 8003efa: f003 0310 and.w r3, r3, #16 8003efe: 2b10 cmp r3, #16 8003f00: d11b bne.n 8003f3a { __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4); 8003f02: 687b ldr r3, [r7, #4] 8003f04: 681b ldr r3, [r3, #0] 8003f06: f06f 0210 mvn.w r2, #16 8003f0a: 611a str r2, [r3, #16] htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; 8003f0c: 687b ldr r3, [r7, #4] 8003f0e: 2208 movs r2, #8 8003f10: 771a strb r2, [r3, #28] /* Input capture event */ if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) 8003f12: 687b ldr r3, [r7, #4] 8003f14: 681b ldr r3, [r3, #0] 8003f16: 69db ldr r3, [r3, #28] 8003f18: f403 7340 and.w r3, r3, #768 ; 0x300 8003f1c: 2b00 cmp r3, #0 8003f1e: d003 beq.n 8003f28 { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->IC_CaptureCallback(htim); #else HAL_TIM_IC_CaptureCallback(htim); 8003f20: 6878 ldr r0, [r7, #4] 8003f22: f000 f87a bl 800401a 8003f26: e005 b.n 8003f34 { #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->OC_DelayElapsedCallback(htim); htim->PWM_PulseFinishedCallback(htim); #else HAL_TIM_OC_DelayElapsedCallback(htim); 8003f28: 6878 ldr r0, [r7, #4] 8003f2a: f000 f86c bl 8004006 HAL_TIM_PWM_PulseFinishedCallback(htim); 8003f2e: 6878 ldr r0, [r7, #4] 8003f30: f000 f87d bl 800402e #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; 8003f34: 687b ldr r3, [r7, #4] 8003f36: 2200 movs r2, #0 8003f38: 771a strb r2, [r3, #28] } } /* TIM Update event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) 8003f3a: 687b ldr r3, [r7, #4] 8003f3c: 681b ldr r3, [r3, #0] 8003f3e: 691b ldr r3, [r3, #16] 8003f40: f003 0301 and.w r3, r3, #1 8003f44: 2b01 cmp r3, #1 8003f46: d10e bne.n 8003f66 { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) 8003f48: 687b ldr r3, [r7, #4] 8003f4a: 681b ldr r3, [r3, #0] 8003f4c: 68db ldr r3, [r3, #12] 8003f4e: f003 0301 and.w r3, r3, #1 8003f52: 2b01 cmp r3, #1 8003f54: d107 bne.n 8003f66 { __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE); 8003f56: 687b ldr r3, [r7, #4] 8003f58: 681b ldr r3, [r3, #0] 8003f5a: f06f 0201 mvn.w r2, #1 8003f5e: 611a str r2, [r3, #16] #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->PeriodElapsedCallback(htim); #else HAL_TIM_PeriodElapsedCallback(htim); 8003f60: 6878 ldr r0, [r7, #4] 8003f62: f000 f846 bl 8003ff2 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } } /* TIM Break input event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) 8003f66: 687b ldr r3, [r7, #4] 8003f68: 681b ldr r3, [r3, #0] 8003f6a: 691b ldr r3, [r3, #16] 8003f6c: f003 0380 and.w r3, r3, #128 ; 0x80 8003f70: 2b80 cmp r3, #128 ; 0x80 8003f72: d10e bne.n 8003f92 { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) 8003f74: 687b ldr r3, [r7, #4] 8003f76: 681b ldr r3, [r3, #0] 8003f78: 68db ldr r3, [r3, #12] 8003f7a: f003 0380 and.w r3, r3, #128 ; 0x80 8003f7e: 2b80 cmp r3, #128 ; 0x80 8003f80: d107 bne.n 8003f92 { __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK); 8003f82: 687b ldr r3, [r7, #4] 8003f84: 681b ldr r3, [r3, #0] 8003f86: f06f 0280 mvn.w r2, #128 ; 0x80 8003f8a: 611a str r2, [r3, #16] #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->BreakCallback(htim); #else HAL_TIMEx_BreakCallback(htim); 8003f8c: 6878 ldr r0, [r7, #4] 8003f8e: f000 f989 bl 80042a4 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } } /* TIM Trigger detection event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) 8003f92: 687b ldr r3, [r7, #4] 8003f94: 681b ldr r3, [r3, #0] 8003f96: 691b ldr r3, [r3, #16] 8003f98: f003 0340 and.w r3, r3, #64 ; 0x40 8003f9c: 2b40 cmp r3, #64 ; 0x40 8003f9e: d10e bne.n 8003fbe { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET) 8003fa0: 687b ldr r3, [r7, #4] 8003fa2: 681b ldr r3, [r3, #0] 8003fa4: 68db ldr r3, [r3, #12] 8003fa6: f003 0340 and.w r3, r3, #64 ; 0x40 8003faa: 2b40 cmp r3, #64 ; 0x40 8003fac: d107 bne.n 8003fbe { __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER); 8003fae: 687b ldr r3, [r7, #4] 8003fb0: 681b ldr r3, [r3, #0] 8003fb2: f06f 0240 mvn.w r2, #64 ; 0x40 8003fb6: 611a str r2, [r3, #16] #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->TriggerCallback(htim); #else HAL_TIM_TriggerCallback(htim); 8003fb8: 6878 ldr r0, [r7, #4] 8003fba: f000 f842 bl 8004042 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } } /* TIM commutation event */ if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) 8003fbe: 687b ldr r3, [r7, #4] 8003fc0: 681b ldr r3, [r3, #0] 8003fc2: 691b ldr r3, [r3, #16] 8003fc4: f003 0320 and.w r3, r3, #32 8003fc8: 2b20 cmp r3, #32 8003fca: d10e bne.n 8003fea { if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET) 8003fcc: 687b ldr r3, [r7, #4] 8003fce: 681b ldr r3, [r3, #0] 8003fd0: 68db ldr r3, [r3, #12] 8003fd2: f003 0320 and.w r3, r3, #32 8003fd6: 2b20 cmp r3, #32 8003fd8: d107 bne.n 8003fea { __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM); 8003fda: 687b ldr r3, [r7, #4] 8003fdc: 681b ldr r3, [r3, #0] 8003fde: f06f 0220 mvn.w r2, #32 8003fe2: 611a str r2, [r3, #16] #if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) htim->CommutationCallback(htim); #else HAL_TIMEx_CommutCallback(htim); 8003fe4: 6878 ldr r0, [r7, #4] 8003fe6: f000 f953 bl 8004290 #endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ } } } 8003fea: bf00 nop 8003fec: 3708 adds r7, #8 8003fee: 46bd mov sp, r7 8003ff0: bd80 pop {r7, pc} 08003ff2 : * @brief Period elapsed callback in non-blocking mode * @param htim TIM handle * @retval None */ __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { 8003ff2: b480 push {r7} 8003ff4: b083 sub sp, #12 8003ff6: af00 add r7, sp, #0 8003ff8: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIM_PeriodElapsedCallback could be implemented in the user file */ } 8003ffa: bf00 nop 8003ffc: 370c adds r7, #12 8003ffe: 46bd mov sp, r7 8004000: f85d 7b04 ldr.w r7, [sp], #4 8004004: 4770 bx lr 08004006 : * @brief Output Compare callback in non-blocking mode * @param htim TIM OC handle * @retval None */ __weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) { 8004006: b480 push {r7} 8004008: b083 sub sp, #12 800400a: af00 add r7, sp, #0 800400c: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file */ } 800400e: bf00 nop 8004010: 370c adds r7, #12 8004012: 46bd mov sp, r7 8004014: f85d 7b04 ldr.w r7, [sp], #4 8004018: 4770 bx lr 0800401a : * @brief Input Capture callback in non-blocking mode * @param htim TIM IC handle * @retval None */ __weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { 800401a: b480 push {r7} 800401c: b083 sub sp, #12 800401e: af00 add r7, sp, #0 8004020: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIM_IC_CaptureCallback could be implemented in the user file */ } 8004022: bf00 nop 8004024: 370c adds r7, #12 8004026: 46bd mov sp, r7 8004028: f85d 7b04 ldr.w r7, [sp], #4 800402c: 4770 bx lr 0800402e : * @brief PWM Pulse finished callback in non-blocking mode * @param htim TIM handle * @retval None */ __weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) { 800402e: b480 push {r7} 8004030: b083 sub sp, #12 8004032: af00 add r7, sp, #0 8004034: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file */ } 8004036: bf00 nop 8004038: 370c adds r7, #12 800403a: 46bd mov sp, r7 800403c: f85d 7b04 ldr.w r7, [sp], #4 8004040: 4770 bx lr 08004042 : * @brief Hall Trigger detection callback in non-blocking mode * @param htim TIM handle * @retval None */ __weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) { 8004042: b480 push {r7} 8004044: b083 sub sp, #12 8004046: af00 add r7, sp, #0 8004048: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIM_TriggerCallback could be implemented in the user file */ } 800404a: bf00 nop 800404c: 370c adds r7, #12 800404e: 46bd mov sp, r7 8004050: f85d 7b04 ldr.w r7, [sp], #4 8004054: 4770 bx lr ... 08004058 : * @param TIMx TIM peripheral * @param Structure TIM Base configuration structure * @retval None */ void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) { 8004058: b480 push {r7} 800405a: b085 sub sp, #20 800405c: af00 add r7, sp, #0 800405e: 6078 str r0, [r7, #4] 8004060: 6039 str r1, [r7, #0] uint32_t tmpcr1; tmpcr1 = TIMx->CR1; 8004062: 687b ldr r3, [r7, #4] 8004064: 681b ldr r3, [r3, #0] 8004066: 60fb str r3, [r7, #12] /* Set TIM Time Base Unit parameters ---------------------------------------*/ if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) 8004068: 687b ldr r3, [r7, #4] 800406a: 4a40 ldr r2, [pc, #256] ; (800416c ) 800406c: 4293 cmp r3, r2 800406e: d013 beq.n 8004098 8004070: 687b ldr r3, [r7, #4] 8004072: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 8004076: d00f beq.n 8004098 8004078: 687b ldr r3, [r7, #4] 800407a: 4a3d ldr r2, [pc, #244] ; (8004170 ) 800407c: 4293 cmp r3, r2 800407e: d00b beq.n 8004098 8004080: 687b ldr r3, [r7, #4] 8004082: 4a3c ldr r2, [pc, #240] ; (8004174 ) 8004084: 4293 cmp r3, r2 8004086: d007 beq.n 8004098 8004088: 687b ldr r3, [r7, #4] 800408a: 4a3b ldr r2, [pc, #236] ; (8004178 ) 800408c: 4293 cmp r3, r2 800408e: d003 beq.n 8004098 8004090: 687b ldr r3, [r7, #4] 8004092: 4a3a ldr r2, [pc, #232] ; (800417c ) 8004094: 4293 cmp r3, r2 8004096: d108 bne.n 80040aa { /* Select the Counter Mode */ tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); 8004098: 68fb ldr r3, [r7, #12] 800409a: f023 0370 bic.w r3, r3, #112 ; 0x70 800409e: 60fb str r3, [r7, #12] tmpcr1 |= Structure->CounterMode; 80040a0: 683b ldr r3, [r7, #0] 80040a2: 685b ldr r3, [r3, #4] 80040a4: 68fa ldr r2, [r7, #12] 80040a6: 4313 orrs r3, r2 80040a8: 60fb str r3, [r7, #12] } if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) 80040aa: 687b ldr r3, [r7, #4] 80040ac: 4a2f ldr r2, [pc, #188] ; (800416c ) 80040ae: 4293 cmp r3, r2 80040b0: d02b beq.n 800410a 80040b2: 687b ldr r3, [r7, #4] 80040b4: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 80040b8: d027 beq.n 800410a 80040ba: 687b ldr r3, [r7, #4] 80040bc: 4a2c ldr r2, [pc, #176] ; (8004170 ) 80040be: 4293 cmp r3, r2 80040c0: d023 beq.n 800410a 80040c2: 687b ldr r3, [r7, #4] 80040c4: 4a2b ldr r2, [pc, #172] ; (8004174 ) 80040c6: 4293 cmp r3, r2 80040c8: d01f beq.n 800410a 80040ca: 687b ldr r3, [r7, #4] 80040cc: 4a2a ldr r2, [pc, #168] ; (8004178 ) 80040ce: 4293 cmp r3, r2 80040d0: d01b beq.n 800410a 80040d2: 687b ldr r3, [r7, #4] 80040d4: 4a29 ldr r2, [pc, #164] ; (800417c ) 80040d6: 4293 cmp r3, r2 80040d8: d017 beq.n 800410a 80040da: 687b ldr r3, [r7, #4] 80040dc: 4a28 ldr r2, [pc, #160] ; (8004180 ) 80040de: 4293 cmp r3, r2 80040e0: d013 beq.n 800410a 80040e2: 687b ldr r3, [r7, #4] 80040e4: 4a27 ldr r2, [pc, #156] ; (8004184 ) 80040e6: 4293 cmp r3, r2 80040e8: d00f beq.n 800410a 80040ea: 687b ldr r3, [r7, #4] 80040ec: 4a26 ldr r2, [pc, #152] ; (8004188 ) 80040ee: 4293 cmp r3, r2 80040f0: d00b beq.n 800410a 80040f2: 687b ldr r3, [r7, #4] 80040f4: 4a25 ldr r2, [pc, #148] ; (800418c ) 80040f6: 4293 cmp r3, r2 80040f8: d007 beq.n 800410a 80040fa: 687b ldr r3, [r7, #4] 80040fc: 4a24 ldr r2, [pc, #144] ; (8004190 ) 80040fe: 4293 cmp r3, r2 8004100: d003 beq.n 800410a 8004102: 687b ldr r3, [r7, #4] 8004104: 4a23 ldr r2, [pc, #140] ; (8004194 ) 8004106: 4293 cmp r3, r2 8004108: d108 bne.n 800411c { /* Set the clock division */ tmpcr1 &= ~TIM_CR1_CKD; 800410a: 68fb ldr r3, [r7, #12] 800410c: f423 7340 bic.w r3, r3, #768 ; 0x300 8004110: 60fb str r3, [r7, #12] tmpcr1 |= (uint32_t)Structure->ClockDivision; 8004112: 683b ldr r3, [r7, #0] 8004114: 68db ldr r3, [r3, #12] 8004116: 68fa ldr r2, [r7, #12] 8004118: 4313 orrs r3, r2 800411a: 60fb str r3, [r7, #12] } /* Set the auto-reload preload */ MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); 800411c: 68fb ldr r3, [r7, #12] 800411e: f023 0280 bic.w r2, r3, #128 ; 0x80 8004122: 683b ldr r3, [r7, #0] 8004124: 695b ldr r3, [r3, #20] 8004126: 4313 orrs r3, r2 8004128: 60fb str r3, [r7, #12] TIMx->CR1 = tmpcr1; 800412a: 687b ldr r3, [r7, #4] 800412c: 68fa ldr r2, [r7, #12] 800412e: 601a str r2, [r3, #0] /* Set the Autoreload value */ TIMx->ARR = (uint32_t)Structure->Period ; 8004130: 683b ldr r3, [r7, #0] 8004132: 689a ldr r2, [r3, #8] 8004134: 687b ldr r3, [r7, #4] 8004136: 62da str r2, [r3, #44] ; 0x2c /* Set the Prescaler value */ TIMx->PSC = Structure->Prescaler; 8004138: 683b ldr r3, [r7, #0] 800413a: 681a ldr r2, [r3, #0] 800413c: 687b ldr r3, [r7, #4] 800413e: 629a str r2, [r3, #40] ; 0x28 if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) 8004140: 687b ldr r3, [r7, #4] 8004142: 4a0a ldr r2, [pc, #40] ; (800416c ) 8004144: 4293 cmp r3, r2 8004146: d003 beq.n 8004150 8004148: 687b ldr r3, [r7, #4] 800414a: 4a0c ldr r2, [pc, #48] ; (800417c ) 800414c: 4293 cmp r3, r2 800414e: d103 bne.n 8004158 { /* Set the Repetition Counter value */ TIMx->RCR = Structure->RepetitionCounter; 8004150: 683b ldr r3, [r7, #0] 8004152: 691a ldr r2, [r3, #16] 8004154: 687b ldr r3, [r7, #4] 8004156: 631a str r2, [r3, #48] ; 0x30 } /* Generate an update event to reload the Prescaler and the repetition counter (only for advanced timer) value immediately */ TIMx->EGR = TIM_EGR_UG; 8004158: 687b ldr r3, [r7, #4] 800415a: 2201 movs r2, #1 800415c: 615a str r2, [r3, #20] } 800415e: bf00 nop 8004160: 3714 adds r7, #20 8004162: 46bd mov sp, r7 8004164: f85d 7b04 ldr.w r7, [sp], #4 8004168: 4770 bx lr 800416a: bf00 nop 800416c: 40010000 .word 0x40010000 8004170: 40000400 .word 0x40000400 8004174: 40000800 .word 0x40000800 8004178: 40000c00 .word 0x40000c00 800417c: 40010400 .word 0x40010400 8004180: 40014000 .word 0x40014000 8004184: 40014400 .word 0x40014400 8004188: 40014800 .word 0x40014800 800418c: 40001800 .word 0x40001800 8004190: 40001c00 .word 0x40001c00 8004194: 40002000 .word 0x40002000 08004198 : * mode. * @retval HAL status */ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig) { 8004198: b480 push {r7} 800419a: b085 sub sp, #20 800419c: af00 add r7, sp, #0 800419e: 6078 str r0, [r7, #4] 80041a0: 6039 str r1, [r7, #0] assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); /* Check input state */ __HAL_LOCK(htim); 80041a2: 687b ldr r3, [r7, #4] 80041a4: f893 303c ldrb.w r3, [r3, #60] ; 0x3c 80041a8: 2b01 cmp r3, #1 80041aa: d101 bne.n 80041b0 80041ac: 2302 movs r3, #2 80041ae: e05a b.n 8004266 80041b0: 687b ldr r3, [r7, #4] 80041b2: 2201 movs r2, #1 80041b4: f883 203c strb.w r2, [r3, #60] ; 0x3c /* Change the handler state */ htim->State = HAL_TIM_STATE_BUSY; 80041b8: 687b ldr r3, [r7, #4] 80041ba: 2202 movs r2, #2 80041bc: f883 203d strb.w r2, [r3, #61] ; 0x3d /* Get the TIMx CR2 register value */ tmpcr2 = htim->Instance->CR2; 80041c0: 687b ldr r3, [r7, #4] 80041c2: 681b ldr r3, [r3, #0] 80041c4: 685b ldr r3, [r3, #4] 80041c6: 60fb str r3, [r7, #12] /* Get the TIMx SMCR register value */ tmpsmcr = htim->Instance->SMCR; 80041c8: 687b ldr r3, [r7, #4] 80041ca: 681b ldr r3, [r3, #0] 80041cc: 689b ldr r3, [r3, #8] 80041ce: 60bb str r3, [r7, #8] /* Reset the MMS Bits */ tmpcr2 &= ~TIM_CR2_MMS; 80041d0: 68fb ldr r3, [r7, #12] 80041d2: f023 0370 bic.w r3, r3, #112 ; 0x70 80041d6: 60fb str r3, [r7, #12] /* Select the TRGO source */ tmpcr2 |= sMasterConfig->MasterOutputTrigger; 80041d8: 683b ldr r3, [r7, #0] 80041da: 681b ldr r3, [r3, #0] 80041dc: 68fa ldr r2, [r7, #12] 80041de: 4313 orrs r3, r2 80041e0: 60fb str r3, [r7, #12] /* Update TIMx CR2 */ htim->Instance->CR2 = tmpcr2; 80041e2: 687b ldr r3, [r7, #4] 80041e4: 681b ldr r3, [r3, #0] 80041e6: 68fa ldr r2, [r7, #12] 80041e8: 605a str r2, [r3, #4] if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) 80041ea: 687b ldr r3, [r7, #4] 80041ec: 681b ldr r3, [r3, #0] 80041ee: 4a21 ldr r2, [pc, #132] ; (8004274 ) 80041f0: 4293 cmp r3, r2 80041f2: d022 beq.n 800423a 80041f4: 687b ldr r3, [r7, #4] 80041f6: 681b ldr r3, [r3, #0] 80041f8: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 80041fc: d01d beq.n 800423a 80041fe: 687b ldr r3, [r7, #4] 8004200: 681b ldr r3, [r3, #0] 8004202: 4a1d ldr r2, [pc, #116] ; (8004278 ) 8004204: 4293 cmp r3, r2 8004206: d018 beq.n 800423a 8004208: 687b ldr r3, [r7, #4] 800420a: 681b ldr r3, [r3, #0] 800420c: 4a1b ldr r2, [pc, #108] ; (800427c ) 800420e: 4293 cmp r3, r2 8004210: d013 beq.n 800423a 8004212: 687b ldr r3, [r7, #4] 8004214: 681b ldr r3, [r3, #0] 8004216: 4a1a ldr r2, [pc, #104] ; (8004280 ) 8004218: 4293 cmp r3, r2 800421a: d00e beq.n 800423a 800421c: 687b ldr r3, [r7, #4] 800421e: 681b ldr r3, [r3, #0] 8004220: 4a18 ldr r2, [pc, #96] ; (8004284 ) 8004222: 4293 cmp r3, r2 8004224: d009 beq.n 800423a 8004226: 687b ldr r3, [r7, #4] 8004228: 681b ldr r3, [r3, #0] 800422a: 4a17 ldr r2, [pc, #92] ; (8004288 ) 800422c: 4293 cmp r3, r2 800422e: d004 beq.n 800423a 8004230: 687b ldr r3, [r7, #4] 8004232: 681b ldr r3, [r3, #0] 8004234: 4a15 ldr r2, [pc, #84] ; (800428c ) 8004236: 4293 cmp r3, r2 8004238: d10c bne.n 8004254 { /* Reset the MSM Bit */ tmpsmcr &= ~TIM_SMCR_MSM; 800423a: 68bb ldr r3, [r7, #8] 800423c: f023 0380 bic.w r3, r3, #128 ; 0x80 8004240: 60bb str r3, [r7, #8] /* Set master mode */ tmpsmcr |= sMasterConfig->MasterSlaveMode; 8004242: 683b ldr r3, [r7, #0] 8004244: 685b ldr r3, [r3, #4] 8004246: 68ba ldr r2, [r7, #8] 8004248: 4313 orrs r3, r2 800424a: 60bb str r3, [r7, #8] /* Update TIMx SMCR */ htim->Instance->SMCR = tmpsmcr; 800424c: 687b ldr r3, [r7, #4] 800424e: 681b ldr r3, [r3, #0] 8004250: 68ba ldr r2, [r7, #8] 8004252: 609a str r2, [r3, #8] } /* Change the htim state */ htim->State = HAL_TIM_STATE_READY; 8004254: 687b ldr r3, [r7, #4] 8004256: 2201 movs r2, #1 8004258: f883 203d strb.w r2, [r3, #61] ; 0x3d __HAL_UNLOCK(htim); 800425c: 687b ldr r3, [r7, #4] 800425e: 2200 movs r2, #0 8004260: f883 203c strb.w r2, [r3, #60] ; 0x3c return HAL_OK; 8004264: 2300 movs r3, #0 } 8004266: 4618 mov r0, r3 8004268: 3714 adds r7, #20 800426a: 46bd mov sp, r7 800426c: f85d 7b04 ldr.w r7, [sp], #4 8004270: 4770 bx lr 8004272: bf00 nop 8004274: 40010000 .word 0x40010000 8004278: 40000400 .word 0x40000400 800427c: 40000800 .word 0x40000800 8004280: 40000c00 .word 0x40000c00 8004284: 40010400 .word 0x40010400 8004288: 40014000 .word 0x40014000 800428c: 40001800 .word 0x40001800 08004290 : * @brief Hall commutation changed callback in non-blocking mode * @param htim TIM handle * @retval None */ __weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) { 8004290: b480 push {r7} 8004292: b083 sub sp, #12 8004294: af00 add r7, sp, #0 8004296: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIMEx_CommutCallback could be implemented in the user file */ } 8004298: bf00 nop 800429a: 370c adds r7, #12 800429c: 46bd mov sp, r7 800429e: f85d 7b04 ldr.w r7, [sp], #4 80042a2: 4770 bx lr 080042a4 : * @brief Hall Break detection callback in non-blocking mode * @param htim TIM handle * @retval None */ __weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) { 80042a4: b480 push {r7} 80042a6: b083 sub sp, #12 80042a8: af00 add r7, sp, #0 80042aa: 6078 str r0, [r7, #4] UNUSED(htim); /* NOTE : This function should not be modified, when the callback is needed, the HAL_TIMEx_BreakCallback could be implemented in the user file */ } 80042ac: bf00 nop 80042ae: 370c adds r7, #12 80042b0: 46bd mov sp, r7 80042b2: f85d 7b04 ldr.w r7, [sp], #4 80042b6: 4770 bx lr 080042b8 <__errno>: 80042b8: 4b01 ldr r3, [pc, #4] ; (80042c0 <__errno+0x8>) 80042ba: 6818 ldr r0, [r3, #0] 80042bc: 4770 bx lr 80042be: bf00 nop 80042c0: 20000010 .word 0x20000010 080042c4 <__libc_init_array>: 80042c4: b570 push {r4, r5, r6, lr} 80042c6: 4e0d ldr r6, [pc, #52] ; (80042fc <__libc_init_array+0x38>) 80042c8: 4c0d ldr r4, [pc, #52] ; (8004300 <__libc_init_array+0x3c>) 80042ca: 1ba4 subs r4, r4, r6 80042cc: 10a4 asrs r4, r4, #2 80042ce: 2500 movs r5, #0 80042d0: 42a5 cmp r5, r4 80042d2: d109 bne.n 80042e8 <__libc_init_array+0x24> 80042d4: 4e0b ldr r6, [pc, #44] ; (8004304 <__libc_init_array+0x40>) 80042d6: 4c0c ldr r4, [pc, #48] ; (8004308 <__libc_init_array+0x44>) 80042d8: f000 f8c8 bl 800446c <_init> 80042dc: 1ba4 subs r4, r4, r6 80042de: 10a4 asrs r4, r4, #2 80042e0: 2500 movs r5, #0 80042e2: 42a5 cmp r5, r4 80042e4: d105 bne.n 80042f2 <__libc_init_array+0x2e> 80042e6: bd70 pop {r4, r5, r6, pc} 80042e8: f856 3025 ldr.w r3, [r6, r5, lsl #2] 80042ec: 4798 blx r3 80042ee: 3501 adds r5, #1 80042f0: e7ee b.n 80042d0 <__libc_init_array+0xc> 80042f2: f856 3025 ldr.w r3, [r6, r5, lsl #2] 80042f6: 4798 blx r3 80042f8: 3501 adds r5, #1 80042fa: e7f2 b.n 80042e2 <__libc_init_array+0x1e> 80042fc: 0800449c .word 0x0800449c 8004300: 0800449c .word 0x0800449c 8004304: 0800449c .word 0x0800449c 8004308: 080044a0 .word 0x080044a0 0800430c : 800430c: 4402 add r2, r0 800430e: 4603 mov r3, r0 8004310: 4293 cmp r3, r2 8004312: d100 bne.n 8004316 8004314: 4770 bx lr 8004316: f803 1b01 strb.w r1, [r3], #1 800431a: e7f9 b.n 8004310 0800431c : 800431c: b538 push {r3, r4, r5, lr} 800431e: 4b13 ldr r3, [pc, #76] ; (800436c ) 8004320: 681c ldr r4, [r3, #0] 8004322: 6ba3 ldr r3, [r4, #56] ; 0x38 8004324: b97b cbnz r3, 8004346 8004326: 2018 movs r0, #24 8004328: f000 f82c bl 8004384 800432c: 4a10 ldr r2, [pc, #64] ; (8004370 ) 800432e: 4b11 ldr r3, [pc, #68] ; (8004374 ) 8004330: 63a0 str r0, [r4, #56] ; 0x38 8004332: e9c0 2300 strd r2, r3, [r0] 8004336: 4b10 ldr r3, [pc, #64] ; (8004378 ) 8004338: 6083 str r3, [r0, #8] 800433a: 230b movs r3, #11 800433c: 8183 strh r3, [r0, #12] 800433e: 2201 movs r2, #1 8004340: 2300 movs r3, #0 8004342: e9c0 2304 strd r2, r3, [r0, #16] 8004346: 6ba1 ldr r1, [r4, #56] ; 0x38 8004348: 480c ldr r0, [pc, #48] ; (800437c ) 800434a: 690a ldr r2, [r1, #16] 800434c: 694b ldr r3, [r1, #20] 800434e: 4c0c ldr r4, [pc, #48] ; (8004380 ) 8004350: 4350 muls r0, r2 8004352: fb04 0003 mla r0, r4, r3, r0 8004356: fba2 2304 umull r2, r3, r2, r4 800435a: 4403 add r3, r0 800435c: 1c54 adds r4, r2, #1 800435e: f143 0500 adc.w r5, r3, #0 8004362: e9c1 4504 strd r4, r5, [r1, #16] 8004366: f025 4000 bic.w r0, r5, #2147483648 ; 0x80000000 800436a: bd38 pop {r3, r4, r5, pc} 800436c: 20000010 .word 0x20000010 8004370: abcd330e .word 0xabcd330e 8004374: e66d1234 .word 0xe66d1234 8004378: 0005deec .word 0x0005deec 800437c: 5851f42d .word 0x5851f42d 8004380: 4c957f2d .word 0x4c957f2d 08004384 : 8004384: 4b02 ldr r3, [pc, #8] ; (8004390 ) 8004386: 4601 mov r1, r0 8004388: 6818 ldr r0, [r3, #0] 800438a: f000 b803 b.w 8004394 <_malloc_r> 800438e: bf00 nop 8004390: 20000010 .word 0x20000010 08004394 <_malloc_r>: 8004394: b570 push {r4, r5, r6, lr} 8004396: 1ccd adds r5, r1, #3 8004398: f025 0503 bic.w r5, r5, #3 800439c: 3508 adds r5, #8 800439e: 2d0c cmp r5, #12 80043a0: bf38 it cc 80043a2: 250c movcc r5, #12 80043a4: 2d00 cmp r5, #0 80043a6: 4606 mov r6, r0 80043a8: db01 blt.n 80043ae <_malloc_r+0x1a> 80043aa: 42a9 cmp r1, r5 80043ac: d903 bls.n 80043b6 <_malloc_r+0x22> 80043ae: 230c movs r3, #12 80043b0: 6033 str r3, [r6, #0] 80043b2: 2000 movs r0, #0 80043b4: bd70 pop {r4, r5, r6, pc} 80043b6: f000 f857 bl 8004468 <__malloc_lock> 80043ba: 4a21 ldr r2, [pc, #132] ; (8004440 <_malloc_r+0xac>) 80043bc: 6814 ldr r4, [r2, #0] 80043be: 4621 mov r1, r4 80043c0: b991 cbnz r1, 80043e8 <_malloc_r+0x54> 80043c2: 4c20 ldr r4, [pc, #128] ; (8004444 <_malloc_r+0xb0>) 80043c4: 6823 ldr r3, [r4, #0] 80043c6: b91b cbnz r3, 80043d0 <_malloc_r+0x3c> 80043c8: 4630 mov r0, r6 80043ca: f000 f83d bl 8004448 <_sbrk_r> 80043ce: 6020 str r0, [r4, #0] 80043d0: 4629 mov r1, r5 80043d2: 4630 mov r0, r6 80043d4: f000 f838 bl 8004448 <_sbrk_r> 80043d8: 1c43 adds r3, r0, #1 80043da: d124 bne.n 8004426 <_malloc_r+0x92> 80043dc: 230c movs r3, #12 80043de: 6033 str r3, [r6, #0] 80043e0: 4630 mov r0, r6 80043e2: f000 f842 bl 800446a <__malloc_unlock> 80043e6: e7e4 b.n 80043b2 <_malloc_r+0x1e> 80043e8: 680b ldr r3, [r1, #0] 80043ea: 1b5b subs r3, r3, r5 80043ec: d418 bmi.n 8004420 <_malloc_r+0x8c> 80043ee: 2b0b cmp r3, #11 80043f0: d90f bls.n 8004412 <_malloc_r+0x7e> 80043f2: 600b str r3, [r1, #0] 80043f4: 50cd str r5, [r1, r3] 80043f6: 18cc adds r4, r1, r3 80043f8: 4630 mov r0, r6 80043fa: f000 f836 bl 800446a <__malloc_unlock> 80043fe: f104 000b add.w r0, r4, #11 8004402: 1d23 adds r3, r4, #4 8004404: f020 0007 bic.w r0, r0, #7 8004408: 1ac3 subs r3, r0, r3 800440a: d0d3 beq.n 80043b4 <_malloc_r+0x20> 800440c: 425a negs r2, r3 800440e: 50e2 str r2, [r4, r3] 8004410: e7d0 b.n 80043b4 <_malloc_r+0x20> 8004412: 428c cmp r4, r1 8004414: 684b ldr r3, [r1, #4] 8004416: bf16 itet ne 8004418: 6063 strne r3, [r4, #4] 800441a: 6013 streq r3, [r2, #0] 800441c: 460c movne r4, r1 800441e: e7eb b.n 80043f8 <_malloc_r+0x64> 8004420: 460c mov r4, r1 8004422: 6849 ldr r1, [r1, #4] 8004424: e7cc b.n 80043c0 <_malloc_r+0x2c> 8004426: 1cc4 adds r4, r0, #3 8004428: f024 0403 bic.w r4, r4, #3 800442c: 42a0 cmp r0, r4 800442e: d005 beq.n 800443c <_malloc_r+0xa8> 8004430: 1a21 subs r1, r4, r0 8004432: 4630 mov r0, r6 8004434: f000 f808 bl 8004448 <_sbrk_r> 8004438: 3001 adds r0, #1 800443a: d0cf beq.n 80043dc <_malloc_r+0x48> 800443c: 6025 str r5, [r4, #0] 800443e: e7db b.n 80043f8 <_malloc_r+0x64> 8004440: 200003b0 .word 0x200003b0 8004444: 200003b4 .word 0x200003b4 08004448 <_sbrk_r>: 8004448: b538 push {r3, r4, r5, lr} 800444a: 4c06 ldr r4, [pc, #24] ; (8004464 <_sbrk_r+0x1c>) 800444c: 2300 movs r3, #0 800444e: 4605 mov r5, r0 8004450: 4608 mov r0, r1 8004452: 6023 str r3, [r4, #0] 8004454: f7fd fcb0 bl 8001db8 <_sbrk> 8004458: 1c43 adds r3, r0, #1 800445a: d102 bne.n 8004462 <_sbrk_r+0x1a> 800445c: 6823 ldr r3, [r4, #0] 800445e: b103 cbz r3, 8004462 <_sbrk_r+0x1a> 8004460: 602b str r3, [r5, #0] 8004462: bd38 pop {r3, r4, r5, pc} 8004464: 200004a0 .word 0x200004a0 08004468 <__malloc_lock>: 8004468: 4770 bx lr 0800446a <__malloc_unlock>: 800446a: 4770 bx lr 0800446c <_init>: 800446c: b5f8 push {r3, r4, r5, r6, r7, lr} 800446e: bf00 nop 8004470: bcf8 pop {r3, r4, r5, r6, r7} 8004472: bc08 pop {r3} 8004474: 469e mov lr, r3 8004476: 4770 bx lr 08004478 <_fini>: 8004478: b5f8 push {r3, r4, r5, r6, r7, lr} 800447a: bf00 nop 800447c: bcf8 pop {r3, r4, r5, r6, r7} 800447e: bc08 pop {r3} 8004480: 469e mov lr, r3 8004482: 4770 bx lr