SEW-EXA1.elf: file format elf32-littlearm Sections: Idx Name Size VMA LMA File off Algn 0 .isr_vector 000001e4 08000000 08000000 00010000 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 1 .text 0000a75c 080001e4 080001e4 000101e4 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .rodata 0000074c 0800a940 0800a940 0001a940 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .ARM.extab 00000000 0800b08c 0800b08c 0002053c 2**0 CONTENTS 4 .ARM 00000000 0800b08c 0800b08c 0002053c 2**0 CONTENTS 5 .preinit_array 00000000 0800b08c 0800b08c 0002053c 2**0 CONTENTS, ALLOC, LOAD, DATA 6 .init_array 00000004 0800b08c 0800b08c 0001b08c 2**2 CONTENTS, ALLOC, LOAD, DATA 7 .fini_array 00000004 0800b090 0800b090 0001b090 2**2 CONTENTS, ALLOC, LOAD, DATA 8 .data 0000053c 20000000 0800b094 00020000 2**2 CONTENTS, ALLOC, LOAD, DATA 9 .bss 000037f4 2000053c 0800b5d0 0002053c 2**2 ALLOC 10 ._user_heap_stack 00000600 20003d30 0800b5d0 00023d30 2**0 ALLOC 11 .ARM.attributes 00000029 00000000 00000000 0002053c 2**0 CONTENTS, READONLY 12 .debug_info 000201e8 00000000 00000000 00020565 2**0 CONTENTS, READONLY, DEBUGGING 13 .debug_abbrev 00005523 00000000 00000000 0004074d 2**0 CONTENTS, READONLY, DEBUGGING 14 .debug_aranges 00001698 00000000 00000000 00045c70 2**3 CONTENTS, READONLY, DEBUGGING 15 .debug_ranges 00001448 00000000 00000000 00047308 2**3 CONTENTS, READONLY, DEBUGGING 16 .debug_macro 00022708 00000000 00000000 00048750 2**0 CONTENTS, READONLY, DEBUGGING 17 .debug_line 00018a2a 00000000 00000000 0006ae58 2**0 CONTENTS, READONLY, DEBUGGING 18 .debug_str 000a45b6 00000000 00000000 00083882 2**0 CONTENTS, READONLY, DEBUGGING 19 .comment 0000007b 00000000 00000000 00127e38 2**0 CONTENTS, READONLY 20 .debug_frame 00005e34 00000000 00000000 00127eb4 2**2 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 080001e4 <__do_global_dtors_aux>: 80001e4: b510 push {r4, lr} 80001e6: 4c05 ldr r4, [pc, #20] ; (80001fc <__do_global_dtors_aux+0x18>) 80001e8: 7823 ldrb r3, [r4, #0] 80001ea: b933 cbnz r3, 80001fa <__do_global_dtors_aux+0x16> 80001ec: 4b04 ldr r3, [pc, #16] ; (8000200 <__do_global_dtors_aux+0x1c>) 80001ee: b113 cbz r3, 80001f6 <__do_global_dtors_aux+0x12> 80001f0: 4804 ldr r0, [pc, #16] ; (8000204 <__do_global_dtors_aux+0x20>) 80001f2: f3af 8000 nop.w 80001f6: 2301 movs r3, #1 80001f8: 7023 strb r3, [r4, #0] 80001fa: bd10 pop {r4, pc} 80001fc: 2000053c .word 0x2000053c 8000200: 00000000 .word 0x00000000 8000204: 0800a928 .word 0x0800a928 08000208 : 8000208: b508 push {r3, lr} 800020a: 4b03 ldr r3, [pc, #12] ; (8000218 ) 800020c: b11b cbz r3, 8000216 800020e: 4903 ldr r1, [pc, #12] ; (800021c ) 8000210: 4803 ldr r0, [pc, #12] ; (8000220 ) 8000212: f3af 8000 nop.w 8000216: bd08 pop {r3, pc} 8000218: 00000000 .word 0x00000000 800021c: 20000540 .word 0x20000540 8000220: 0800a928 .word 0x0800a928 08000224 : 8000224: 4603 mov r3, r0 8000226: f813 2b01 ldrb.w r2, [r3], #1 800022a: 2a00 cmp r2, #0 800022c: d1fb bne.n 8000226 800022e: 1a18 subs r0, r3, r0 8000230: 3801 subs r0, #1 8000232: 4770 bx lr 08000234 : CAN_HandleTypeDef hcan; /* CAN init function */ void MX_CAN_Init(void) { 8000234: b580 push {r7, lr} 8000236: af00 add r7, sp, #0 hcan.Instance = CAN1; 8000238: 4b18 ldr r3, [pc, #96] ; (800029c ) 800023a: 4a19 ldr r2, [pc, #100] ; (80002a0 ) 800023c: 601a str r2, [r3, #0] hcan.Init.Prescaler = 4; 800023e: 4b17 ldr r3, [pc, #92] ; (800029c ) 8000240: 2204 movs r2, #4 8000242: 605a str r2, [r3, #4] hcan.Init.Mode = CAN_MODE_NORMAL; 8000244: 4b15 ldr r3, [pc, #84] ; (800029c ) 8000246: 2200 movs r2, #0 8000248: 609a str r2, [r3, #8] hcan.Init.SyncJumpWidth = CAN_SJW_2TQ; 800024a: 4b14 ldr r3, [pc, #80] ; (800029c ) 800024c: f04f 7280 mov.w r2, #16777216 ; 0x1000000 8000250: 60da str r2, [r3, #12] hcan.Init.TimeSeg1 = CAN_BS1_14TQ; 8000252: 4b12 ldr r3, [pc, #72] ; (800029c ) 8000254: f44f 2250 mov.w r2, #851968 ; 0xd0000 8000258: 611a str r2, [r3, #16] hcan.Init.TimeSeg2 = CAN_BS2_3TQ; 800025a: 4b10 ldr r3, [pc, #64] ; (800029c ) 800025c: f44f 1200 mov.w r2, #2097152 ; 0x200000 8000260: 615a str r2, [r3, #20] hcan.Init.TimeTriggeredMode = DISABLE; 8000262: 4b0e ldr r3, [pc, #56] ; (800029c ) 8000264: 2200 movs r2, #0 8000266: 761a strb r2, [r3, #24] hcan.Init.AutoBusOff = ENABLE; 8000268: 4b0c ldr r3, [pc, #48] ; (800029c ) 800026a: 2201 movs r2, #1 800026c: 765a strb r2, [r3, #25] hcan.Init.AutoWakeUp = DISABLE; 800026e: 4b0b ldr r3, [pc, #44] ; (800029c ) 8000270: 2200 movs r2, #0 8000272: 769a strb r2, [r3, #26] hcan.Init.AutoRetransmission = ENABLE; 8000274: 4b09 ldr r3, [pc, #36] ; (800029c ) 8000276: 2201 movs r2, #1 8000278: 76da strb r2, [r3, #27] hcan.Init.ReceiveFifoLocked = DISABLE; 800027a: 4b08 ldr r3, [pc, #32] ; (800029c ) 800027c: 2200 movs r2, #0 800027e: 771a strb r2, [r3, #28] hcan.Init.TransmitFifoPriority = DISABLE; 8000280: 4b06 ldr r3, [pc, #24] ; (800029c ) 8000282: 2200 movs r2, #0 8000284: 775a strb r2, [r3, #29] if (HAL_CAN_Init(&hcan) != HAL_OK) 8000286: 4805 ldr r0, [pc, #20] ; (800029c ) 8000288: f001 f8e0 bl 800144c 800028c: 4603 mov r3, r0 800028e: 2b00 cmp r3, #0 8000290: d001 beq.n 8000296 { Error_Handler(); 8000292: f000 fbc3 bl 8000a1c } } 8000296: bf00 nop 8000298: bd80 pop {r7, pc} 800029a: bf00 nop 800029c: 2000058c .word 0x2000058c 80002a0: 40006400 .word 0x40006400 080002a4 : void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) { 80002a4: b580 push {r7, lr} 80002a6: b088 sub sp, #32 80002a8: af00 add r7, sp, #0 80002aa: 6078 str r0, [r7, #4] GPIO_InitTypeDef GPIO_InitStruct = {0}; 80002ac: f107 0310 add.w r3, r7, #16 80002b0: 2200 movs r2, #0 80002b2: 601a str r2, [r3, #0] 80002b4: 605a str r2, [r3, #4] 80002b6: 609a str r2, [r3, #8] 80002b8: 60da str r2, [r3, #12] if(canHandle->Instance==CAN1) 80002ba: 687b ldr r3, [r7, #4] 80002bc: 681b ldr r3, [r3, #0] 80002be: 4a24 ldr r2, [pc, #144] ; (8000350 ) 80002c0: 4293 cmp r3, r2 80002c2: d141 bne.n 8000348 { /* USER CODE BEGIN CAN1_MspInit 0 */ /* USER CODE END CAN1_MspInit 0 */ /* CAN1 clock enable */ __HAL_RCC_CAN1_CLK_ENABLE(); 80002c4: 4b23 ldr r3, [pc, #140] ; (8000354 ) 80002c6: 69db ldr r3, [r3, #28] 80002c8: 4a22 ldr r2, [pc, #136] ; (8000354 ) 80002ca: f043 7300 orr.w r3, r3, #33554432 ; 0x2000000 80002ce: 61d3 str r3, [r2, #28] 80002d0: 4b20 ldr r3, [pc, #128] ; (8000354 ) 80002d2: 69db ldr r3, [r3, #28] 80002d4: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 80002d8: 60fb str r3, [r7, #12] 80002da: 68fb ldr r3, [r7, #12] __HAL_RCC_GPIOA_CLK_ENABLE(); 80002dc: 4b1d ldr r3, [pc, #116] ; (8000354 ) 80002de: 699b ldr r3, [r3, #24] 80002e0: 4a1c ldr r2, [pc, #112] ; (8000354 ) 80002e2: f043 0304 orr.w r3, r3, #4 80002e6: 6193 str r3, [r2, #24] 80002e8: 4b1a ldr r3, [pc, #104] ; (8000354 ) 80002ea: 699b ldr r3, [r3, #24] 80002ec: f003 0304 and.w r3, r3, #4 80002f0: 60bb str r3, [r7, #8] 80002f2: 68bb ldr r3, [r7, #8] /**CAN GPIO Configuration PA11 ------> CAN_RX PA12 ------> CAN_TX */ GPIO_InitStruct.Pin = GPIO_PIN_11; 80002f4: f44f 6300 mov.w r3, #2048 ; 0x800 80002f8: 613b str r3, [r7, #16] GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 80002fa: 2300 movs r3, #0 80002fc: 617b str r3, [r7, #20] GPIO_InitStruct.Pull = GPIO_NOPULL; 80002fe: 2300 movs r3, #0 8000300: 61bb str r3, [r7, #24] HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 8000302: f107 0310 add.w r3, r7, #16 8000306: 4619 mov r1, r3 8000308: 4813 ldr r0, [pc, #76] ; (8000358 ) 800030a: f002 f803 bl 8002314 GPIO_InitStruct.Pin = GPIO_PIN_12; 800030e: f44f 5380 mov.w r3, #4096 ; 0x1000 8000312: 613b str r3, [r7, #16] GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 8000314: 2302 movs r3, #2 8000316: 617b str r3, [r7, #20] GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; 8000318: 2303 movs r3, #3 800031a: 61fb str r3, [r7, #28] HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 800031c: f107 0310 add.w r3, r7, #16 8000320: 4619 mov r1, r3 8000322: 480d ldr r0, [pc, #52] ; (8000358 ) 8000324: f001 fff6 bl 8002314 /* CAN1 interrupt Init */ HAL_NVIC_SetPriority(USB_HP_CAN1_TX_IRQn, 0, 0); 8000328: 2200 movs r2, #0 800032a: 2100 movs r1, #0 800032c: 2013 movs r0, #19 800032e: f001 ffba bl 80022a6 HAL_NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn); 8000332: 2013 movs r0, #19 8000334: f001 ffd3 bl 80022de HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0); 8000338: 2200 movs r2, #0 800033a: 2100 movs r1, #0 800033c: 2014 movs r0, #20 800033e: f001 ffb2 bl 80022a6 HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn); 8000342: 2014 movs r0, #20 8000344: f001 ffcb bl 80022de /* USER CODE BEGIN CAN1_MspInit 1 */ /* USER CODE END CAN1_MspInit 1 */ } } 8000348: bf00 nop 800034a: 3720 adds r7, #32 800034c: 46bd mov sp, r7 800034e: bd80 pop {r7, pc} 8000350: 40006400 .word 0x40006400 8000354: 40021000 .word 0x40021000 8000358: 40010800 .word 0x40010800 0800035c <__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) { 800035c: b480 push {r7} 800035e: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); 8000360: 4b04 ldr r3, [pc, #16] ; (8000374 <__NVIC_GetPriorityGrouping+0x18>) 8000362: 68db ldr r3, [r3, #12] 8000364: 0a1b lsrs r3, r3, #8 8000366: f003 0307 and.w r3, r3, #7 } 800036a: 4618 mov r0, r3 800036c: 46bd mov sp, r7 800036e: bc80 pop {r7} 8000370: 4770 bx lr 8000372: bf00 nop 8000374: e000ed00 .word 0xe000ed00 08000378 <__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) { 8000378: b480 push {r7} 800037a: b083 sub sp, #12 800037c: af00 add r7, sp, #0 800037e: 4603 mov r3, r0 8000380: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 8000382: f997 3007 ldrsb.w r3, [r7, #7] 8000386: 2b00 cmp r3, #0 8000388: db0b blt.n 80003a2 <__NVIC_EnableIRQ+0x2a> { NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); 800038a: 79fb ldrb r3, [r7, #7] 800038c: f003 021f and.w r2, r3, #31 8000390: 4906 ldr r1, [pc, #24] ; (80003ac <__NVIC_EnableIRQ+0x34>) 8000392: f997 3007 ldrsb.w r3, [r7, #7] 8000396: 095b lsrs r3, r3, #5 8000398: 2001 movs r0, #1 800039a: fa00 f202 lsl.w r2, r0, r2 800039e: f841 2023 str.w r2, [r1, r3, lsl #2] } } 80003a2: bf00 nop 80003a4: 370c adds r7, #12 80003a6: 46bd mov sp, r7 80003a8: bc80 pop {r7} 80003aa: 4770 bx lr 80003ac: e000e100 .word 0xe000e100 080003b0 <__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) { 80003b0: b480 push {r7} 80003b2: b083 sub sp, #12 80003b4: af00 add r7, sp, #0 80003b6: 4603 mov r3, r0 80003b8: 6039 str r1, [r7, #0] 80003ba: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 80003bc: f997 3007 ldrsb.w r3, [r7, #7] 80003c0: 2b00 cmp r3, #0 80003c2: db0a blt.n 80003da <__NVIC_SetPriority+0x2a> { NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 80003c4: 683b ldr r3, [r7, #0] 80003c6: b2da uxtb r2, r3 80003c8: 490c ldr r1, [pc, #48] ; (80003fc <__NVIC_SetPriority+0x4c>) 80003ca: f997 3007 ldrsb.w r3, [r7, #7] 80003ce: 0112 lsls r2, r2, #4 80003d0: b2d2 uxtb r2, r2 80003d2: 440b add r3, r1 80003d4: 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); } } 80003d8: e00a b.n 80003f0 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 80003da: 683b ldr r3, [r7, #0] 80003dc: b2da uxtb r2, r3 80003de: 4908 ldr r1, [pc, #32] ; (8000400 <__NVIC_SetPriority+0x50>) 80003e0: 79fb ldrb r3, [r7, #7] 80003e2: f003 030f and.w r3, r3, #15 80003e6: 3b04 subs r3, #4 80003e8: 0112 lsls r2, r2, #4 80003ea: b2d2 uxtb r2, r2 80003ec: 440b add r3, r1 80003ee: 761a strb r2, [r3, #24] } 80003f0: bf00 nop 80003f2: 370c adds r7, #12 80003f4: 46bd mov sp, r7 80003f6: bc80 pop {r7} 80003f8: 4770 bx lr 80003fa: bf00 nop 80003fc: e000e100 .word 0xe000e100 8000400: e000ed00 .word 0xe000ed00 08000404 : \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) { 8000404: b480 push {r7} 8000406: b089 sub sp, #36 ; 0x24 8000408: af00 add r7, sp, #0 800040a: 60f8 str r0, [r7, #12] 800040c: 60b9 str r1, [r7, #8] 800040e: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 8000410: 68fb ldr r3, [r7, #12] 8000412: f003 0307 and.w r3, r3, #7 8000416: 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); 8000418: 69fb ldr r3, [r7, #28] 800041a: f1c3 0307 rsb r3, r3, #7 800041e: 2b04 cmp r3, #4 8000420: bf28 it cs 8000422: 2304 movcs r3, #4 8000424: 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)); 8000426: 69fb ldr r3, [r7, #28] 8000428: 3304 adds r3, #4 800042a: 2b06 cmp r3, #6 800042c: d902 bls.n 8000434 800042e: 69fb ldr r3, [r7, #28] 8000430: 3b03 subs r3, #3 8000432: e000 b.n 8000436 8000434: 2300 movs r3, #0 8000436: 617b str r3, [r7, #20] return ( ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8000438: f04f 32ff mov.w r2, #4294967295 800043c: 69bb ldr r3, [r7, #24] 800043e: fa02 f303 lsl.w r3, r2, r3 8000442: 43da mvns r2, r3 8000444: 68bb ldr r3, [r7, #8] 8000446: 401a ands r2, r3 8000448: 697b ldr r3, [r7, #20] 800044a: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) 800044c: f04f 31ff mov.w r1, #4294967295 8000450: 697b ldr r3, [r7, #20] 8000452: fa01 f303 lsl.w r3, r1, r3 8000456: 43d9 mvns r1, r3 8000458: 687b ldr r3, [r7, #4] 800045a: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 800045c: 4313 orrs r3, r2 ); } 800045e: 4618 mov r0, r3 8000460: 3724 adds r7, #36 ; 0x24 8000462: 46bd mov sp, r7 8000464: bc80 pop {r7} 8000466: 4770 bx lr 08000468 : * * (*) value not defined in all devices. * @retval None */ __STATIC_INLINE void LL_APB2_GRP1_EnableClock(uint32_t Periphs) { 8000468: b480 push {r7} 800046a: b085 sub sp, #20 800046c: af00 add r7, sp, #0 800046e: 6078 str r0, [r7, #4] __IO uint32_t tmpreg; SET_BIT(RCC->APB2ENR, Periphs); 8000470: 4b08 ldr r3, [pc, #32] ; (8000494 ) 8000472: 699a ldr r2, [r3, #24] 8000474: 4907 ldr r1, [pc, #28] ; (8000494 ) 8000476: 687b ldr r3, [r7, #4] 8000478: 4313 orrs r3, r2 800047a: 618b str r3, [r1, #24] /* Delay after an RCC peripheral clock enabling */ tmpreg = READ_BIT(RCC->APB2ENR, Periphs); 800047c: 4b05 ldr r3, [pc, #20] ; (8000494 ) 800047e: 699a ldr r2, [r3, #24] 8000480: 687b ldr r3, [r7, #4] 8000482: 4013 ands r3, r2 8000484: 60fb str r3, [r7, #12] (void)tmpreg; 8000486: 68fb ldr r3, [r7, #12] } 8000488: bf00 nop 800048a: 3714 adds r7, #20 800048c: 46bd mov sp, r7 800048e: bc80 pop {r7} 8000490: 4770 bx lr 8000492: bf00 nop 8000494: 40021000 .word 0x40021000 08000498 : * @arg @ref LL_GPIO_MODE_OUTPUT * @arg @ref LL_GPIO_MODE_ALTERNATE * @retval None */ __STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode) { 8000498: b490 push {r4, r7} 800049a: b088 sub sp, #32 800049c: af00 add r7, sp, #0 800049e: 60f8 str r0, [r7, #12] 80004a0: 60b9 str r1, [r7, #8] 80004a2: 607a str r2, [r7, #4] register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24))); 80004a4: 68fb ldr r3, [r7, #12] 80004a6: 461a mov r2, r3 80004a8: 68bb ldr r3, [r7, #8] 80004aa: 0e1b lsrs r3, r3, #24 80004ac: 4413 add r3, r2 80004ae: 461c mov r4, r3 MODIFY_REG(*pReg, ((GPIO_CRL_CNF0 | GPIO_CRL_MODE0) << (POSITION_VAL(Pin) * 4U)), (Mode << (POSITION_VAL(Pin) * 4U))); 80004b0: 6822 ldr r2, [r4, #0] 80004b2: 68bb ldr r3, [r7, #8] 80004b4: 617b str r3, [r7, #20] uint32_t result; #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 80004b6: 697b ldr r3, [r7, #20] 80004b8: fa93 f3a3 rbit r3, r3 80004bc: 613b str r3, [r7, #16] result |= value & 1U; s--; } result <<= s; /* shift when v's highest bits are zero */ #endif return result; 80004be: 693b ldr r3, [r7, #16] 80004c0: fab3 f383 clz r3, r3 80004c4: b2db uxtb r3, r3 80004c6: 009b lsls r3, r3, #2 80004c8: 210f movs r1, #15 80004ca: fa01 f303 lsl.w r3, r1, r3 80004ce: 43db mvns r3, r3 80004d0: 401a ands r2, r3 80004d2: 68bb ldr r3, [r7, #8] 80004d4: 61fb str r3, [r7, #28] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 80004d6: 69fb ldr r3, [r7, #28] 80004d8: fa93 f3a3 rbit r3, r3 80004dc: 61bb str r3, [r7, #24] return result; 80004de: 69bb ldr r3, [r7, #24] 80004e0: fab3 f383 clz r3, r3 80004e4: b2db uxtb r3, r3 80004e6: 009b lsls r3, r3, #2 80004e8: 6879 ldr r1, [r7, #4] 80004ea: fa01 f303 lsl.w r3, r1, r3 80004ee: 4313 orrs r3, r2 80004f0: 6023 str r3, [r4, #0] } 80004f2: bf00 nop 80004f4: 3720 adds r7, #32 80004f6: 46bd mov sp, r7 80004f8: bc90 pop {r4, r7} 80004fa: 4770 bx lr 080004fc : * @arg @ref LL_GPIO_PIN_15 * @arg @ref LL_GPIO_PIN_ALL * @retval None */ __STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) { 80004fc: b480 push {r7} 80004fe: b083 sub sp, #12 8000500: af00 add r7, sp, #0 8000502: 6078 str r0, [r7, #4] 8000504: 6039 str r1, [r7, #0] WRITE_REG(GPIOx->BSRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU); 8000506: 683b ldr r3, [r7, #0] 8000508: 0a1b lsrs r3, r3, #8 800050a: b29a uxth r2, r3 800050c: 687b ldr r3, [r7, #4] 800050e: 611a str r2, [r3, #16] } 8000510: bf00 nop 8000512: 370c adds r7, #12 8000514: 46bd mov sp, r7 8000516: bc80 pop {r7} 8000518: 4770 bx lr 0800051a : * @arg @ref LL_GPIO_PIN_15 * @arg @ref LL_GPIO_PIN_ALL * @retval None */ __STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask) { 800051a: b480 push {r7} 800051c: b083 sub sp, #12 800051e: af00 add r7, sp, #0 8000520: 6078 str r0, [r7, #4] 8000522: 6039 str r1, [r7, #0] WRITE_REG(GPIOx->BRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU); 8000524: 683b ldr r3, [r7, #0] 8000526: 0a1b lsrs r3, r3, #8 8000528: b29a uxth r2, r3 800052a: 687b ldr r3, [r7, #4] 800052c: 615a str r2, [r3, #20] } 800052e: bf00 nop 8000530: 370c adds r7, #12 8000532: 46bd mov sp, r7 8000534: bc80 pop {r7} 8000536: 4770 bx lr 08000538 : * @arg @ref LL_GPIO_AF_EXTI_LINE14 * @arg @ref LL_GPIO_AF_EXTI_LINE15 * @retval None */ __STATIC_INLINE void LL_GPIO_AF_SetEXTISource(uint32_t Port, uint32_t Line) { 8000538: b480 push {r7} 800053a: b085 sub sp, #20 800053c: af00 add r7, sp, #0 800053e: 6078 str r0, [r7, #4] 8000540: 6039 str r1, [r7, #0] MODIFY_REG(AFIO->EXTICR[Line & 0xFF], (Line >> 16), Port << POSITION_VAL((Line >> 16))); 8000542: 4a13 ldr r2, [pc, #76] ; (8000590 ) 8000544: 683b ldr r3, [r7, #0] 8000546: b2db uxtb r3, r3 8000548: 3302 adds r3, #2 800054a: f852 2023 ldr.w r2, [r2, r3, lsl #2] 800054e: 683b ldr r3, [r7, #0] 8000550: 0c1b lsrs r3, r3, #16 8000552: 43db mvns r3, r3 8000554: ea02 0103 and.w r1, r2, r3 8000558: 683b ldr r3, [r7, #0] 800055a: 0c1b lsrs r3, r3, #16 800055c: 60fb str r3, [r7, #12] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 800055e: 68fb ldr r3, [r7, #12] 8000560: fa93 f3a3 rbit r3, r3 8000564: 60bb str r3, [r7, #8] return result; 8000566: 68bb ldr r3, [r7, #8] 8000568: fab3 f383 clz r3, r3 800056c: b2db uxtb r3, r3 800056e: 461a mov r2, r3 8000570: 687b ldr r3, [r7, #4] 8000572: fa03 f202 lsl.w r2, r3, r2 8000576: 4806 ldr r0, [pc, #24] ; (8000590 ) 8000578: 683b ldr r3, [r7, #0] 800057a: b2db uxtb r3, r3 800057c: 430a orrs r2, r1 800057e: 3302 adds r3, #2 8000580: f840 2023 str.w r2, [r0, r3, lsl #2] } 8000584: bf00 nop 8000586: 3714 adds r7, #20 8000588: 46bd mov sp, r7 800058a: bc80 pop {r7} 800058c: 4770 bx lr 800058e: bf00 nop 8000590: 40010000 .word 0x40010000 08000594 : * Output * EVENT_OUT * EXTI */ void MX_GPIO_Init(void) { 8000594: b580 push {r7, lr} 8000596: b088 sub sp, #32 8000598: af00 add r7, sp, #0 LL_EXTI_InitTypeDef EXTI_InitStruct = {0}; 800059a: f107 0318 add.w r3, r7, #24 800059e: 2200 movs r2, #0 80005a0: 601a str r2, [r3, #0] 80005a2: 605a str r2, [r3, #4] LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; 80005a4: 1d3b adds r3, r7, #4 80005a6: 2200 movs r2, #0 80005a8: 601a str r2, [r3, #0] 80005aa: 605a str r2, [r3, #4] 80005ac: 609a str r2, [r3, #8] 80005ae: 60da str r2, [r3, #12] 80005b0: 611a str r2, [r3, #16] /* GPIO Ports Clock Enable */ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC); 80005b2: 2010 movs r0, #16 80005b4: f7ff ff58 bl 8000468 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD); 80005b8: 2020 movs r0, #32 80005ba: f7ff ff55 bl 8000468 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); 80005be: 2004 movs r0, #4 80005c0: f7ff ff52 bl 8000468 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); 80005c4: 2008 movs r0, #8 80005c6: f7ff ff4f bl 8000468 /**/ LL_GPIO_ResetOutputPin(GPIOC, ERR_LED_Pin|SYS_LED_Pin); 80005ca: 496c ldr r1, [pc, #432] ; (800077c ) 80005cc: 486c ldr r0, [pc, #432] ; (8000780 ) 80005ce: f7ff ffa4 bl 800051a /**/ LL_GPIO_ResetOutputPin(GPIOA, RS485_2_EN_Pin|MT_DIR_Pin|MT_STEP_Pin|MT_SON_Pin); 80005d2: f247 2172 movw r1, #29298 ; 0x7272 80005d6: 486b ldr r0, [pc, #428] ; (8000784 ) 80005d8: f7ff ff9f bl 800051a /**/ LL_GPIO_ResetOutputPin(RS485_EN_GPIO_Port, RS485_EN_Pin); 80005dc: f240 2102 movw r1, #514 ; 0x202 80005e0: 4869 ldr r0, [pc, #420] ; (8000788 ) 80005e2: f7ff ff9a bl 800051a /**/ LL_GPIO_SetOutputPin(GPIOA, OUTPWM2_Pin|OUTPUT1_Pin); 80005e6: f248 1181 movw r1, #33153 ; 0x8181 80005ea: 4866 ldr r0, [pc, #408] ; (8000784 ) 80005ec: f7ff ff86 bl 80004fc /**/ LL_GPIO_SetOutputPin(GPIOC, OUTPUT2_Pin|OUTPUT3_Pin|OUTPWM1_Pin); 80005f0: f247 0170 movw r1, #28784 ; 0x7070 80005f4: 4862 ldr r0, [pc, #392] ; (8000780 ) 80005f6: f7ff ff81 bl 80004fc /**/ LL_GPIO_SetOutputPin(GPIOB, OUTPUT4_Pin|OUTPUT5_Pin|OUTPUT6_Pin|OUTPUT7_Pin 80005fa: 4964 ldr r1, [pc, #400] ; (800078c ) 80005fc: 4862 ldr r0, [pc, #392] ; (8000788 ) 80005fe: f7ff ff7d bl 80004fc |OUTPUT8_Pin); /**/ GPIO_InitStruct.Pin = ERR_LED_Pin|SYS_LED_Pin|OUTPUT2_Pin|OUTPUT3_Pin 8000602: 4b63 ldr r3, [pc, #396] ; (8000790 ) 8000604: 607b str r3, [r7, #4] |OUTPWM1_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; 8000606: 2301 movs r3, #1 8000608: 60bb str r3, [r7, #8] GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; 800060a: 2303 movs r3, #3 800060c: 60fb str r3, [r7, #12] GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; 800060e: 2300 movs r3, #0 8000610: 613b str r3, [r7, #16] GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; 8000612: 2301 movs r3, #1 8000614: 617b str r3, [r7, #20] LL_GPIO_Init(GPIOC, &GPIO_InitStruct); 8000616: 1d3b adds r3, r7, #4 8000618: 4619 mov r1, r3 800061a: 4859 ldr r0, [pc, #356] ; (8000780 ) 800061c: f002 f9a8 bl 8002970 /**/ GPIO_InitStruct.Pin = CAN_MP_Pin|SW1_Pin|SW2_Pin|SW3_Pin 8000620: 4b5c ldr r3, [pc, #368] ; (8000794 ) 8000622: 607b str r3, [r7, #4] |INPUT7_Pin|INPUT6_Pin|INPUT5_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 8000624: 2304 movs r3, #4 8000626: 60bb str r3, [r7, #8] LL_GPIO_Init(GPIOC, &GPIO_InitStruct); 8000628: 1d3b adds r3, r7, #4 800062a: 4619 mov r1, r3 800062c: 4854 ldr r0, [pc, #336] ; (8000780 ) 800062e: f002 f99f bl 8002970 /**/ GPIO_InitStruct.Pin = OUTPWM2_Pin|RS485_2_EN_Pin|MT_DIR_Pin|MT_STEP_Pin 8000632: f24f 33f3 movw r3, #62451 ; 0xf3f3 8000636: 607b str r3, [r7, #4] |MT_SON_Pin|OUTPUT1_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; 8000638: 2301 movs r3, #1 800063a: 60bb str r3, [r7, #8] GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; 800063c: 2303 movs r3, #3 800063e: 60fb str r3, [r7, #12] GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; 8000640: 2300 movs r3, #0 8000642: 613b str r3, [r7, #16] GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; 8000644: 2301 movs r3, #1 8000646: 617b str r3, [r7, #20] LL_GPIO_Init(GPIOA, &GPIO_InitStruct); 8000648: 1d3b adds r3, r7, #4 800064a: 4619 mov r1, r3 800064c: 484d ldr r0, [pc, #308] ; (8000784 ) 800064e: f002 f98f bl 8002970 /**/ GPIO_InitStruct.Pin = OUTPUT4_Pin|RS485_EN_Pin|OUTPUT5_Pin|OUTPUT6_Pin 8000652: 4b51 ldr r3, [pc, #324] ; (8000798 ) 8000654: 607b str r3, [r7, #4] |OUTPUT7_Pin|OUTPUT8_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; 8000656: 2301 movs r3, #1 8000658: 60bb str r3, [r7, #8] GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; 800065a: 2303 movs r3, #3 800065c: 60fb str r3, [r7, #12] GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; 800065e: 2300 movs r3, #0 8000660: 613b str r3, [r7, #16] GPIO_InitStruct.Pull = LL_GPIO_PULL_UP; 8000662: 2301 movs r3, #1 8000664: 617b str r3, [r7, #20] LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 8000666: 1d3b adds r3, r7, #4 8000668: 4619 mov r1, r3 800066a: 4847 ldr r0, [pc, #284] ; (8000788 ) 800066c: f002 f980 bl 8002970 /**/ GPIO_InitStruct.Pin = INPUT8_Pin; 8000670: 4b4a ldr r3, [pc, #296] ; (800079c ) 8000672: 607b str r3, [r7, #4] GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 8000674: 2304 movs r3, #4 8000676: 60bb str r3, [r7, #8] LL_GPIO_Init(INPUT8_GPIO_Port, &GPIO_InitStruct); 8000678: 1d3b adds r3, r7, #4 800067a: 4619 mov r1, r3 800067c: 4841 ldr r0, [pc, #260] ; (8000784 ) 800067e: f002 f977 bl 8002970 /**/ GPIO_InitStruct.Pin = INPUT4_Pin; 8000682: f240 4304 movw r3, #1028 ; 0x404 8000686: 607b str r3, [r7, #4] GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 8000688: 2304 movs r3, #4 800068a: 60bb str r3, [r7, #8] LL_GPIO_Init(INPUT4_GPIO_Port, &GPIO_InitStruct); 800068c: 1d3b adds r3, r7, #4 800068e: 4619 mov r1, r3 8000690: 4843 ldr r0, [pc, #268] ; (80007a0 ) 8000692: f002 f96d bl 8002970 /**/ GPIO_InitStruct.Pin = INPUT3_Pin|INPUT2_Pin|INPUT1_Pin|SW4_Pin 8000696: 4b43 ldr r3, [pc, #268] ; (80007a4 ) 8000698: 607b str r3, [r7, #4] |CAN_ZP_Pin; GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 800069a: 2304 movs r3, #4 800069c: 60bb str r3, [r7, #8] LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 800069e: 1d3b adds r3, r7, #4 80006a0: 4619 mov r1, r3 80006a2: 4839 ldr r0, [pc, #228] ; (8000788 ) 80006a4: f002 f964 bl 8002970 /**/ LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE8); 80006a8: 493f ldr r1, [pc, #252] ; (80007a8 ) 80006aa: 2000 movs r0, #0 80006ac: f7ff ff44 bl 8000538 /**/ LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE9); 80006b0: 493e ldr r1, [pc, #248] ; (80007ac ) 80006b2: 2000 movs r0, #0 80006b4: f7ff ff40 bl 8000538 /**/ LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE10); 80006b8: 493d ldr r1, [pc, #244] ; (80007b0 ) 80006ba: 2000 movs r0, #0 80006bc: f7ff ff3c bl 8000538 /**/ EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_8; 80006c0: f44f 7380 mov.w r3, #256 ; 0x100 80006c4: 61bb str r3, [r7, #24] EXTI_InitStruct.LineCommand = ENABLE; 80006c6: 2301 movs r3, #1 80006c8: 773b strb r3, [r7, #28] EXTI_InitStruct.Mode = LL_EXTI_MODE_IT; 80006ca: 2300 movs r3, #0 80006cc: 777b strb r3, [r7, #29] EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING; 80006ce: 2301 movs r3, #1 80006d0: 77bb strb r3, [r7, #30] LL_EXTI_Init(&EXTI_InitStruct); 80006d2: f107 0318 add.w r3, r7, #24 80006d6: 4618 mov r0, r3 80006d8: f002 f816 bl 8002708 /**/ EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_9; 80006dc: f44f 7300 mov.w r3, #512 ; 0x200 80006e0: 61bb str r3, [r7, #24] EXTI_InitStruct.LineCommand = ENABLE; 80006e2: 2301 movs r3, #1 80006e4: 773b strb r3, [r7, #28] EXTI_InitStruct.Mode = LL_EXTI_MODE_IT; 80006e6: 2300 movs r3, #0 80006e8: 777b strb r3, [r7, #29] EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING; 80006ea: 2301 movs r3, #1 80006ec: 77bb strb r3, [r7, #30] LL_EXTI_Init(&EXTI_InitStruct); 80006ee: f107 0318 add.w r3, r7, #24 80006f2: 4618 mov r0, r3 80006f4: f002 f808 bl 8002708 /**/ EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_10; 80006f8: f44f 6380 mov.w r3, #1024 ; 0x400 80006fc: 61bb str r3, [r7, #24] EXTI_InitStruct.LineCommand = ENABLE; 80006fe: 2301 movs r3, #1 8000700: 773b strb r3, [r7, #28] EXTI_InitStruct.Mode = LL_EXTI_MODE_IT; 8000702: 2300 movs r3, #0 8000704: 777b strb r3, [r7, #29] EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING; 8000706: 2301 movs r3, #1 8000708: 77bb strb r3, [r7, #30] LL_EXTI_Init(&EXTI_InitStruct); 800070a: f107 0318 add.w r3, r7, #24 800070e: 4618 mov r0, r3 8000710: f001 fffa bl 8002708 /**/ LL_GPIO_SetPinMode(AP_GPIO_Port, AP_Pin, LL_GPIO_MODE_FLOATING); 8000714: 2204 movs r2, #4 8000716: 4927 ldr r1, [pc, #156] ; (80007b4 ) 8000718: 481a ldr r0, [pc, #104] ; (8000784 ) 800071a: f7ff febd bl 8000498 /**/ LL_GPIO_SetPinMode(BP_GPIO_Port, BP_Pin, LL_GPIO_MODE_FLOATING); 800071e: 2204 movs r2, #4 8000720: 4925 ldr r1, [pc, #148] ; (80007b8 ) 8000722: 4818 ldr r0, [pc, #96] ; (8000784 ) 8000724: f7ff feb8 bl 8000498 /**/ LL_GPIO_SetPinMode(ZP_GPIO_Port, ZP_Pin, LL_GPIO_MODE_FLOATING); 8000728: 2204 movs r2, #4 800072a: 4924 ldr r1, [pc, #144] ; (80007bc ) 800072c: 4815 ldr r0, [pc, #84] ; (8000784 ) 800072e: f7ff feb3 bl 8000498 /* EXTI interrupt init*/ NVIC_SetPriority(EXTI9_5_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); 8000732: f7ff fe13 bl 800035c <__NVIC_GetPriorityGrouping> 8000736: 4603 mov r3, r0 8000738: 2200 movs r2, #0 800073a: 2100 movs r1, #0 800073c: 4618 mov r0, r3 800073e: f7ff fe61 bl 8000404 8000742: 4603 mov r3, r0 8000744: 4619 mov r1, r3 8000746: 2017 movs r0, #23 8000748: f7ff fe32 bl 80003b0 <__NVIC_SetPriority> NVIC_EnableIRQ(EXTI9_5_IRQn); 800074c: 2017 movs r0, #23 800074e: f7ff fe13 bl 8000378 <__NVIC_EnableIRQ> NVIC_SetPriority(EXTI15_10_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); 8000752: f7ff fe03 bl 800035c <__NVIC_GetPriorityGrouping> 8000756: 4603 mov r3, r0 8000758: 2200 movs r2, #0 800075a: 2100 movs r1, #0 800075c: 4618 mov r0, r3 800075e: f7ff fe51 bl 8000404 8000762: 4603 mov r3, r0 8000764: 4619 mov r1, r3 8000766: 2028 movs r0, #40 ; 0x28 8000768: f7ff fe22 bl 80003b0 <__NVIC_SetPriority> NVIC_EnableIRQ(EXTI15_10_IRQn); 800076c: 2028 movs r0, #40 ; 0x28 800076e: f7ff fe03 bl 8000378 <__NVIC_EnableIRQ> } 8000772: bf00 nop 8000774: 3720 adds r7, #32 8000776: 46bd mov sp, r7 8000778: bd80 pop {r7, pc} 800077a: bf00 nop 800077c: 04600060 .word 0x04600060 8000780: 40011000 .word 0x40011000 8000784: 40010800 .word 0x40010800 8000788: 40010c00 .word 0x40010c00 800078c: 04f001f1 .word 0x04f001f1 8000790: 04607070 .word 0x04607070 8000794: 041f849f .word 0x041f849f 8000798: 04f003f3 .word 0x04f003f3 800079c: 04800080 .word 0x04800080 80007a0: 40011400 .word 0x40011400 80007a4: 0403383b .word 0x0403383b 80007a8: 000f0002 .word 0x000f0002 80007ac: 00f00002 .word 0x00f00002 80007b0: 0f000002 .word 0x0f000002 80007b4: 04010001 .word 0x04010001 80007b8: 04020002 .word 0x04020002 80007bc: 04040004 .word 0x04040004 080007c0 : * @brief Enable HSE crystal oscillator (HSE ON) * @rmtoll CR HSEON LL_RCC_HSE_Enable * @retval None */ __STATIC_INLINE void LL_RCC_HSE_Enable(void) { 80007c0: b480 push {r7} 80007c2: af00 add r7, sp, #0 SET_BIT(RCC->CR, RCC_CR_HSEON); 80007c4: 4b04 ldr r3, [pc, #16] ; (80007d8 ) 80007c6: 681b ldr r3, [r3, #0] 80007c8: 4a03 ldr r2, [pc, #12] ; (80007d8 ) 80007ca: f443 3380 orr.w r3, r3, #65536 ; 0x10000 80007ce: 6013 str r3, [r2, #0] } 80007d0: bf00 nop 80007d2: 46bd mov sp, r7 80007d4: bc80 pop {r7} 80007d6: 4770 bx lr 80007d8: 40021000 .word 0x40021000 080007dc : * @brief Check if HSE oscillator Ready * @rmtoll CR HSERDY LL_RCC_HSE_IsReady * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_RCC_HSE_IsReady(void) { 80007dc: b480 push {r7} 80007de: af00 add r7, sp, #0 return (READ_BIT(RCC->CR, RCC_CR_HSERDY) == (RCC_CR_HSERDY)); 80007e0: 4b06 ldr r3, [pc, #24] ; (80007fc ) 80007e2: 681b ldr r3, [r3, #0] 80007e4: f403 3300 and.w r3, r3, #131072 ; 0x20000 80007e8: f5b3 3f00 cmp.w r3, #131072 ; 0x20000 80007ec: bf0c ite eq 80007ee: 2301 moveq r3, #1 80007f0: 2300 movne r3, #0 80007f2: b2db uxtb r3, r3 } 80007f4: 4618 mov r0, r3 80007f6: 46bd mov sp, r7 80007f8: bc80 pop {r7} 80007fa: 4770 bx lr 80007fc: 40021000 .word 0x40021000 08000800 : * @arg @ref LL_RCC_SYS_CLKSOURCE_HSE * @arg @ref LL_RCC_SYS_CLKSOURCE_PLL * @retval None */ __STATIC_INLINE void LL_RCC_SetSysClkSource(uint32_t Source) { 8000800: b480 push {r7} 8000802: b083 sub sp, #12 8000804: af00 add r7, sp, #0 8000806: 6078 str r0, [r7, #4] MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, Source); 8000808: 4b06 ldr r3, [pc, #24] ; (8000824 ) 800080a: 685b ldr r3, [r3, #4] 800080c: f023 0203 bic.w r2, r3, #3 8000810: 4904 ldr r1, [pc, #16] ; (8000824 ) 8000812: 687b ldr r3, [r7, #4] 8000814: 4313 orrs r3, r2 8000816: 604b str r3, [r1, #4] } 8000818: bf00 nop 800081a: 370c adds r7, #12 800081c: 46bd mov sp, r7 800081e: bc80 pop {r7} 8000820: 4770 bx lr 8000822: bf00 nop 8000824: 40021000 .word 0x40021000 08000828 : * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSI * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_HSE * @arg @ref LL_RCC_SYS_CLKSOURCE_STATUS_PLL */ __STATIC_INLINE uint32_t LL_RCC_GetSysClkSource(void) { 8000828: b480 push {r7} 800082a: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)); 800082c: 4b03 ldr r3, [pc, #12] ; (800083c ) 800082e: 685b ldr r3, [r3, #4] 8000830: f003 030c and.w r3, r3, #12 } 8000834: 4618 mov r0, r3 8000836: 46bd mov sp, r7 8000838: bc80 pop {r7} 800083a: 4770 bx lr 800083c: 40021000 .word 0x40021000 08000840 : * @arg @ref LL_RCC_SYSCLK_DIV_256 * @arg @ref LL_RCC_SYSCLK_DIV_512 * @retval None */ __STATIC_INLINE void LL_RCC_SetAHBPrescaler(uint32_t Prescaler) { 8000840: b480 push {r7} 8000842: b083 sub sp, #12 8000844: af00 add r7, sp, #0 8000846: 6078 str r0, [r7, #4] MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, Prescaler); 8000848: 4b06 ldr r3, [pc, #24] ; (8000864 ) 800084a: 685b ldr r3, [r3, #4] 800084c: f023 02f0 bic.w r2, r3, #240 ; 0xf0 8000850: 4904 ldr r1, [pc, #16] ; (8000864 ) 8000852: 687b ldr r3, [r7, #4] 8000854: 4313 orrs r3, r2 8000856: 604b str r3, [r1, #4] } 8000858: bf00 nop 800085a: 370c adds r7, #12 800085c: 46bd mov sp, r7 800085e: bc80 pop {r7} 8000860: 4770 bx lr 8000862: bf00 nop 8000864: 40021000 .word 0x40021000 08000868 : * @arg @ref LL_RCC_APB1_DIV_8 * @arg @ref LL_RCC_APB1_DIV_16 * @retval None */ __STATIC_INLINE void LL_RCC_SetAPB1Prescaler(uint32_t Prescaler) { 8000868: b480 push {r7} 800086a: b083 sub sp, #12 800086c: af00 add r7, sp, #0 800086e: 6078 str r0, [r7, #4] MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, Prescaler); 8000870: 4b06 ldr r3, [pc, #24] ; (800088c ) 8000872: 685b ldr r3, [r3, #4] 8000874: f423 62e0 bic.w r2, r3, #1792 ; 0x700 8000878: 4904 ldr r1, [pc, #16] ; (800088c ) 800087a: 687b ldr r3, [r7, #4] 800087c: 4313 orrs r3, r2 800087e: 604b str r3, [r1, #4] } 8000880: bf00 nop 8000882: 370c adds r7, #12 8000884: 46bd mov sp, r7 8000886: bc80 pop {r7} 8000888: 4770 bx lr 800088a: bf00 nop 800088c: 40021000 .word 0x40021000 08000890 : * @arg @ref LL_RCC_APB2_DIV_8 * @arg @ref LL_RCC_APB2_DIV_16 * @retval None */ __STATIC_INLINE void LL_RCC_SetAPB2Prescaler(uint32_t Prescaler) { 8000890: b480 push {r7} 8000892: b083 sub sp, #12 8000894: af00 add r7, sp, #0 8000896: 6078 str r0, [r7, #4] MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, Prescaler); 8000898: 4b06 ldr r3, [pc, #24] ; (80008b4 ) 800089a: 685b ldr r3, [r3, #4] 800089c: f423 5260 bic.w r2, r3, #14336 ; 0x3800 80008a0: 4904 ldr r1, [pc, #16] ; (80008b4 ) 80008a2: 687b ldr r3, [r7, #4] 80008a4: 4313 orrs r3, r2 80008a6: 604b str r3, [r1, #4] } 80008a8: bf00 nop 80008aa: 370c adds r7, #12 80008ac: 46bd mov sp, r7 80008ae: bc80 pop {r7} 80008b0: 4770 bx lr 80008b2: bf00 nop 80008b4: 40021000 .word 0x40021000 080008b8 : * @brief Enable PLL * @rmtoll CR PLLON LL_RCC_PLL_Enable * @retval None */ __STATIC_INLINE void LL_RCC_PLL_Enable(void) { 80008b8: b480 push {r7} 80008ba: af00 add r7, sp, #0 SET_BIT(RCC->CR, RCC_CR_PLLON); 80008bc: 4b04 ldr r3, [pc, #16] ; (80008d0 ) 80008be: 681b ldr r3, [r3, #0] 80008c0: 4a03 ldr r2, [pc, #12] ; (80008d0 ) 80008c2: f043 7380 orr.w r3, r3, #16777216 ; 0x1000000 80008c6: 6013 str r3, [r2, #0] } 80008c8: bf00 nop 80008ca: 46bd mov sp, r7 80008cc: bc80 pop {r7} 80008ce: 4770 bx lr 80008d0: 40021000 .word 0x40021000 080008d4 : * @brief Check if PLL Ready * @rmtoll CR PLLRDY LL_RCC_PLL_IsReady * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_RCC_PLL_IsReady(void) { 80008d4: b480 push {r7} 80008d6: af00 add r7, sp, #0 return (READ_BIT(RCC->CR, RCC_CR_PLLRDY) == (RCC_CR_PLLRDY)); 80008d8: 4b06 ldr r3, [pc, #24] ; (80008f4 ) 80008da: 681b ldr r3, [r3, #0] 80008dc: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 80008e0: f1b3 7f00 cmp.w r3, #33554432 ; 0x2000000 80008e4: bf0c ite eq 80008e6: 2301 moveq r3, #1 80008e8: 2300 movne r3, #0 80008ea: b2db uxtb r3, r3 } 80008ec: 4618 mov r0, r3 80008ee: 46bd mov sp, r7 80008f0: bc80 pop {r7} 80008f2: 4770 bx lr 80008f4: 40021000 .word 0x40021000 080008f8 : * * (*) value not defined in all devices * @retval None */ __STATIC_INLINE void LL_RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLLMul) { 80008f8: b480 push {r7} 80008fa: b083 sub sp, #12 80008fc: af00 add r7, sp, #0 80008fe: 6078 str r0, [r7, #4] 8000900: 6039 str r1, [r7, #0] MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL, 8000902: 4b08 ldr r3, [pc, #32] ; (8000924 ) 8000904: 685b ldr r3, [r3, #4] 8000906: f423 127c bic.w r2, r3, #4128768 ; 0x3f0000 800090a: 687b ldr r3, [r7, #4] 800090c: f403 3140 and.w r1, r3, #196608 ; 0x30000 8000910: 683b ldr r3, [r7, #0] 8000912: 430b orrs r3, r1 8000914: 4903 ldr r1, [pc, #12] ; (8000924 ) 8000916: 4313 orrs r3, r2 8000918: 604b str r3, [r1, #4] (Source & RCC_CFGR2_PREDIV1) | ((Source & (RCC_CFGR2_PREDIV1SRC << 4U)) >> 4U)); #else MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (Source & RCC_CFGR2_PREDIV1)); #endif /*RCC_CFGR2_PREDIV1SRC*/ #endif /*RCC_CFGR2_PREDIV1*/ } 800091a: bf00 nop 800091c: 370c adds r7, #12 800091e: 46bd mov sp, r7 8000920: bc80 pop {r7} 8000922: 4770 bx lr 8000924: 40021000 .word 0x40021000 08000928 : * @arg @ref LL_FLASH_LATENCY_1 * @arg @ref LL_FLASH_LATENCY_2 * @retval None */ __STATIC_INLINE void LL_FLASH_SetLatency(uint32_t Latency) { 8000928: b480 push {r7} 800092a: b083 sub sp, #12 800092c: af00 add r7, sp, #0 800092e: 6078 str r0, [r7, #4] MODIFY_REG(FLASH->ACR, FLASH_ACR_LATENCY, Latency); 8000930: 4b06 ldr r3, [pc, #24] ; (800094c ) 8000932: 681b ldr r3, [r3, #0] 8000934: f023 0207 bic.w r2, r3, #7 8000938: 4904 ldr r1, [pc, #16] ; (800094c ) 800093a: 687b ldr r3, [r7, #4] 800093c: 4313 orrs r3, r2 800093e: 600b str r3, [r1, #0] } 8000940: bf00 nop 8000942: 370c adds r7, #12 8000944: 46bd mov sp, r7 8000946: bc80 pop {r7} 8000948: 4770 bx lr 800094a: bf00 nop 800094c: 40022000 .word 0x40022000 08000950 : * @arg @ref LL_FLASH_LATENCY_0 * @arg @ref LL_FLASH_LATENCY_1 * @arg @ref LL_FLASH_LATENCY_2 */ __STATIC_INLINE uint32_t LL_FLASH_GetLatency(void) { 8000950: b480 push {r7} 8000952: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(FLASH->ACR, FLASH_ACR_LATENCY)); 8000954: 4b03 ldr r3, [pc, #12] ; (8000964 ) 8000956: 681b ldr r3, [r3, #0] 8000958: f003 0307 and.w r3, r3, #7 } 800095c: 4618 mov r0, r3 800095e: 46bd mov sp, r7 8000960: bc80 pop {r7} 8000962: 4770 bx lr 8000964: 40022000 .word 0x40022000 08000968
: /** * @brief The application entry point. * @retval int */ int main(void) { 8000968: b580 push {r7, lr} 800096a: af00 add r7, sp, #0 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); 800096c: f000 fd0c bl 8001388 /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); 8000970: f000 f810 bl 8000994 /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); 8000974: f7ff fe0e bl 8000594 MX_CAN_Init(); 8000978: f7ff fc5c bl 8000234 MX_TIM1_Init(); 800097c: f000 fa7c bl 8000e78 MX_USART1_UART_Init(); 8000980: f000 fba6 bl 80010d0 MX_USART2_UART_Init(); 8000984: f000 fc0c bl 80011a0 MX_USART3_UART_Init(); 8000988: f000 fc70 bl 800126c while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ MainTasks(); 800098c: f008 ff76 bl 800987c 8000990: e7fc b.n 800098c ... 08000994 : /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { 8000994: b580 push {r7, lr} 8000996: af00 add r7, sp, #0 LL_FLASH_SetLatency(LL_FLASH_LATENCY_2); 8000998: 2002 movs r0, #2 800099a: f7ff ffc5 bl 8000928 while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_2) 800099e: bf00 nop 80009a0: f7ff ffd6 bl 8000950 80009a4: 4603 mov r3, r0 80009a6: 2b02 cmp r3, #2 80009a8: d1fa bne.n 80009a0 { } LL_RCC_HSE_Enable(); 80009aa: f7ff ff09 bl 80007c0 /* Wait till HSE is ready */ while(LL_RCC_HSE_IsReady() != 1) 80009ae: bf00 nop 80009b0: f7ff ff14 bl 80007dc 80009b4: 4603 mov r3, r0 80009b6: 2b01 cmp r3, #1 80009b8: d1fa bne.n 80009b0 { } LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE_DIV_1, LL_RCC_PLL_MUL_9); 80009ba: f44f 11e0 mov.w r1, #1835008 ; 0x1c0000 80009be: f44f 3080 mov.w r0, #65536 ; 0x10000 80009c2: f7ff ff99 bl 80008f8 LL_RCC_PLL_Enable(); 80009c6: f7ff ff77 bl 80008b8 /* Wait till PLL is ready */ while(LL_RCC_PLL_IsReady() != 1) 80009ca: bf00 nop 80009cc: f7ff ff82 bl 80008d4 80009d0: 4603 mov r3, r0 80009d2: 2b01 cmp r3, #1 80009d4: d1fa bne.n 80009cc { } LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); 80009d6: 2000 movs r0, #0 80009d8: f7ff ff32 bl 8000840 LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_2); 80009dc: f44f 6080 mov.w r0, #1024 ; 0x400 80009e0: f7ff ff42 bl 8000868 LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1); 80009e4: 2000 movs r0, #0 80009e6: f7ff ff53 bl 8000890 LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL); 80009ea: 2002 movs r0, #2 80009ec: f7ff ff08 bl 8000800 /* Wait till System clock is ready */ while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) 80009f0: bf00 nop 80009f2: f7ff ff19 bl 8000828 80009f6: 4603 mov r3, r0 80009f8: 2b08 cmp r3, #8 80009fa: d1fa bne.n 80009f2 { } LL_SetSystemCoreClock(72000000); 80009fc: 4806 ldr r0, [pc, #24] ; (8000a18 ) 80009fe: f002 fadd bl 8002fbc /* Update the time base */ if (HAL_InitTick (TICK_INT_PRIORITY) != HAL_OK) 8000a02: 2000 movs r0, #0 8000a04: f000 fcd6 bl 80013b4 8000a08: 4603 mov r3, r0 8000a0a: 2b00 cmp r3, #0 8000a0c: d001 beq.n 8000a12 { Error_Handler(); 8000a0e: f000 f805 bl 8000a1c } } 8000a12: bf00 nop 8000a14: bd80 pop {r7, pc} 8000a16: bf00 nop 8000a18: 044aa200 .word 0x044aa200 08000a1c : /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { 8000a1c: b480 push {r7} 8000a1e: af00 add r7, sp, #0 __ASM volatile ("cpsid i" : : : "memory"); 8000a20: b672 cpsid i /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) 8000a22: e7fe b.n 8000a22 08000a24 : /* USER CODE END 0 */ /** * Initializes the Global MSP. */ void HAL_MspInit(void) { 8000a24: b480 push {r7} 8000a26: b085 sub sp, #20 8000a28: af00 add r7, sp, #0 /* USER CODE BEGIN MspInit 0 */ /* USER CODE END MspInit 0 */ __HAL_RCC_AFIO_CLK_ENABLE(); 8000a2a: 4b15 ldr r3, [pc, #84] ; (8000a80 ) 8000a2c: 699b ldr r3, [r3, #24] 8000a2e: 4a14 ldr r2, [pc, #80] ; (8000a80 ) 8000a30: f043 0301 orr.w r3, r3, #1 8000a34: 6193 str r3, [r2, #24] 8000a36: 4b12 ldr r3, [pc, #72] ; (8000a80 ) 8000a38: 699b ldr r3, [r3, #24] 8000a3a: f003 0301 and.w r3, r3, #1 8000a3e: 60bb str r3, [r7, #8] 8000a40: 68bb ldr r3, [r7, #8] __HAL_RCC_PWR_CLK_ENABLE(); 8000a42: 4b0f ldr r3, [pc, #60] ; (8000a80 ) 8000a44: 69db ldr r3, [r3, #28] 8000a46: 4a0e ldr r2, [pc, #56] ; (8000a80 ) 8000a48: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 8000a4c: 61d3 str r3, [r2, #28] 8000a4e: 4b0c ldr r3, [pc, #48] ; (8000a80 ) 8000a50: 69db ldr r3, [r3, #28] 8000a52: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 8000a56: 607b str r3, [r7, #4] 8000a58: 687b ldr r3, [r7, #4] /* System interrupt init*/ /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled */ __HAL_AFIO_REMAP_SWJ_NOJTAG(); 8000a5a: 4b0a ldr r3, [pc, #40] ; (8000a84 ) 8000a5c: 685b ldr r3, [r3, #4] 8000a5e: 60fb str r3, [r7, #12] 8000a60: 68fb ldr r3, [r7, #12] 8000a62: f023 63e0 bic.w r3, r3, #117440512 ; 0x7000000 8000a66: 60fb str r3, [r7, #12] 8000a68: 68fb ldr r3, [r7, #12] 8000a6a: f043 7300 orr.w r3, r3, #33554432 ; 0x2000000 8000a6e: 60fb str r3, [r7, #12] 8000a70: 4a04 ldr r2, [pc, #16] ; (8000a84 ) 8000a72: 68fb ldr r3, [r7, #12] 8000a74: 6053 str r3, [r2, #4] /* USER CODE BEGIN MspInit 1 */ /* USER CODE END MspInit 1 */ } 8000a76: bf00 nop 8000a78: 3714 adds r7, #20 8000a7a: 46bd mov sp, r7 8000a7c: bc80 pop {r7} 8000a7e: 4770 bx lr 8000a80: 40021000 .word 0x40021000 8000a84: 40010000 .word 0x40010000 08000a88 : * @arg @ref LL_EXTI_LINE_19 * @note Please check each device line mapping for EXTI Line availability * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_EXTI_IsActiveFlag_0_31(uint32_t ExtiLine) { 8000a88: b480 push {r7} 8000a8a: b083 sub sp, #12 8000a8c: af00 add r7, sp, #0 8000a8e: 6078 str r0, [r7, #4] return (READ_BIT(EXTI->PR, ExtiLine) == (ExtiLine)); 8000a90: 4b07 ldr r3, [pc, #28] ; (8000ab0 ) 8000a92: 695a ldr r2, [r3, #20] 8000a94: 687b ldr r3, [r7, #4] 8000a96: 4013 ands r3, r2 8000a98: 687a ldr r2, [r7, #4] 8000a9a: 429a cmp r2, r3 8000a9c: bf0c ite eq 8000a9e: 2301 moveq r3, #1 8000aa0: 2300 movne r3, #0 8000aa2: b2db uxtb r3, r3 } 8000aa4: 4618 mov r0, r3 8000aa6: 370c adds r7, #12 8000aa8: 46bd mov sp, r7 8000aaa: bc80 pop {r7} 8000aac: 4770 bx lr 8000aae: bf00 nop 8000ab0: 40010400 .word 0x40010400 08000ab4 : * @arg @ref LL_EXTI_LINE_19 * @note Please check each device line mapping for EXTI Line availability * @retval None */ __STATIC_INLINE void LL_EXTI_ClearFlag_0_31(uint32_t ExtiLine) { 8000ab4: b480 push {r7} 8000ab6: b083 sub sp, #12 8000ab8: af00 add r7, sp, #0 8000aba: 6078 str r0, [r7, #4] WRITE_REG(EXTI->PR, ExtiLine); 8000abc: 4a03 ldr r2, [pc, #12] ; (8000acc ) 8000abe: 687b ldr r3, [r7, #4] 8000ac0: 6153 str r3, [r2, #20] } 8000ac2: bf00 nop 8000ac4: 370c adds r7, #12 8000ac6: 46bd mov sp, r7 8000ac8: bc80 pop {r7} 8000aca: 4770 bx lr 8000acc: 40010400 .word 0x40010400 08000ad0 : /******************************************************************************/ /** * @brief This function handles Non maskable interrupt. */ void NMI_Handler(void) { 8000ad0: b480 push {r7} 8000ad2: af00 add r7, sp, #0 /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ /* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ while (1) 8000ad4: e7fe b.n 8000ad4 08000ad6 : /** * @brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { 8000ad6: b480 push {r7} 8000ad8: af00 add r7, sp, #0 /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) 8000ada: e7fe b.n 8000ada 08000adc : /** * @brief This function handles Memory management fault. */ void MemManage_Handler(void) { 8000adc: b480 push {r7} 8000ade: af00 add r7, sp, #0 /* USER CODE BEGIN MemoryManagement_IRQn 0 */ /* USER CODE END MemoryManagement_IRQn 0 */ while (1) 8000ae0: e7fe b.n 8000ae0 08000ae2 : /** * @brief This function handles Prefetch fault, memory access fault. */ void BusFault_Handler(void) { 8000ae2: b480 push {r7} 8000ae4: af00 add r7, sp, #0 /* USER CODE BEGIN BusFault_IRQn 0 */ /* USER CODE END BusFault_IRQn 0 */ while (1) 8000ae6: e7fe b.n 8000ae6 08000ae8 : /** * @brief This function handles Undefined instruction or illegal state. */ void UsageFault_Handler(void) { 8000ae8: b480 push {r7} 8000aea: af00 add r7, sp, #0 /* USER CODE BEGIN UsageFault_IRQn 0 */ /* USER CODE END UsageFault_IRQn 0 */ while (1) 8000aec: e7fe b.n 8000aec 08000aee : /** * @brief This function handles System service call via SWI instruction. */ void SVC_Handler(void) { 8000aee: b480 push {r7} 8000af0: af00 add r7, sp, #0 /* USER CODE END SVCall_IRQn 0 */ /* USER CODE BEGIN SVCall_IRQn 1 */ /* USER CODE END SVCall_IRQn 1 */ } 8000af2: bf00 nop 8000af4: 46bd mov sp, r7 8000af6: bc80 pop {r7} 8000af8: 4770 bx lr 08000afa : /** * @brief This function handles Debug monitor. */ void DebugMon_Handler(void) { 8000afa: b480 push {r7} 8000afc: af00 add r7, sp, #0 /* USER CODE END DebugMonitor_IRQn 0 */ /* USER CODE BEGIN DebugMonitor_IRQn 1 */ /* USER CODE END DebugMonitor_IRQn 1 */ } 8000afe: bf00 nop 8000b00: 46bd mov sp, r7 8000b02: bc80 pop {r7} 8000b04: 4770 bx lr 08000b06 : /** * @brief This function handles Pendable request for system service. */ void PendSV_Handler(void) { 8000b06: b480 push {r7} 8000b08: af00 add r7, sp, #0 /* USER CODE END PendSV_IRQn 0 */ /* USER CODE BEGIN PendSV_IRQn 1 */ /* USER CODE END PendSV_IRQn 1 */ } 8000b0a: bf00 nop 8000b0c: 46bd mov sp, r7 8000b0e: bc80 pop {r7} 8000b10: 4770 bx lr 08000b12 : /** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { 8000b12: b580 push {r7, lr} 8000b14: af00 add r7, sp, #0 /* USER CODE BEGIN SysTick_IRQn 0 */ TriggerIntProc(); 8000b16: f003 fe49 bl 80047ac /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); 8000b1a: f000 fc7b bl 8001414 /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ } 8000b1e: bf00 nop 8000b20: bd80 pop {r7, pc} ... 08000b24 : /** * @brief This function handles USB high priority or CAN TX interrupts. */ void USB_HP_CAN1_TX_IRQHandler(void) { 8000b24: b580 push {r7, lr} 8000b26: af00 add r7, sp, #0 /* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 0 */ /* USER CODE END USB_HP_CAN1_TX_IRQn 0 */ HAL_CAN_IRQHandler(&hcan); 8000b28: 4802 ldr r0, [pc, #8] ; (8000b34 ) 8000b2a: f001 f8f4 bl 8001d16 /* USER CODE BEGIN USB_HP_CAN1_TX_IRQn 1 */ /* USER CODE END USB_HP_CAN1_TX_IRQn 1 */ } 8000b2e: bf00 nop 8000b30: bd80 pop {r7, pc} 8000b32: bf00 nop 8000b34: 2000058c .word 0x2000058c 08000b38 : /** * @brief This function handles USB low priority or CAN RX0 interrupts. */ void USB_LP_CAN1_RX0_IRQHandler(void) { 8000b38: b580 push {r7, lr} 8000b3a: af00 add r7, sp, #0 /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */ /* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */ HAL_CAN_IRQHandler(&hcan); 8000b3c: 4802 ldr r0, [pc, #8] ; (8000b48 ) 8000b3e: f001 f8ea bl 8001d16 /* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */ /* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */ } 8000b42: bf00 nop 8000b44: bd80 pop {r7, pc} 8000b46: bf00 nop 8000b48: 2000058c .word 0x2000058c 08000b4c : /** * @brief This function handles EXTI line[9:5] interrupts. */ void EXTI9_5_IRQHandler(void) { 8000b4c: b580 push {r7, lr} 8000b4e: af00 add r7, sp, #0 /* USER CODE BEGIN EXTI9_5_IRQn 0 */ /* USER CODE END EXTI9_5_IRQn 0 */ if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_8) != RESET) 8000b50: f44f 7080 mov.w r0, #256 ; 0x100 8000b54: f7ff ff98 bl 8000a88 8000b58: 4603 mov r3, r0 8000b5a: 2b00 cmp r3, #0 8000b5c: d005 beq.n 8000b6a { LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_8); 8000b5e: f44f 7080 mov.w r0, #256 ; 0x100 8000b62: f7ff ffa7 bl 8000ab4 /* USER CODE BEGIN LL_EXTI_LINE_8 */ APIntProc(); 8000b66: f006 fbf9 bl 800735c /* USER CODE END LL_EXTI_LINE_8 */ } if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_9) != RESET) 8000b6a: f44f 7000 mov.w r0, #512 ; 0x200 8000b6e: f7ff ff8b bl 8000a88 8000b72: 4603 mov r3, r0 8000b74: 2b00 cmp r3, #0 8000b76: d005 beq.n 8000b84 { LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_9); 8000b78: f44f 7000 mov.w r0, #512 ; 0x200 8000b7c: f7ff ff9a bl 8000ab4 /* USER CODE BEGIN LL_EXTI_LINE_9 */ BPIntProc(); 8000b80: f006 fcf6 bl 8007570 /* USER CODE END LL_EXTI_LINE_9 */ } /* USER CODE BEGIN EXTI9_5_IRQn 1 */ /* USER CODE END EXTI9_5_IRQn 1 */ } 8000b84: bf00 nop 8000b86: bd80 pop {r7, pc} 08000b88 : /** * @brief This function handles TIM1 break interrupt. */ void TIM1_BRK_IRQHandler(void) { 8000b88: b580 push {r7, lr} 8000b8a: af00 add r7, sp, #0 /* USER CODE BEGIN TIM1_BRK_IRQn 0 */ SoftPwmIntProc(); 8000b8c: f005 ff98 bl 8006ac0 /* USER CODE END TIM1_BRK_IRQn 0 */ /* USER CODE BEGIN TIM1_BRK_IRQn 1 */ /* USER CODE END TIM1_BRK_IRQn 1 */ } 8000b90: bf00 nop 8000b92: bd80 pop {r7, pc} 08000b94 : /** * @brief This function handles USART1 global interrupt. */ void USART1_IRQHandler(void) { 8000b94: b580 push {r7, lr} 8000b96: af00 add r7, sp, #0 /* USER CODE BEGIN USART1_IRQn 0 */ #ifdef COMM_USART1 USART1IntProc(); 8000b98: f002 ff8e bl 8003ab8 #endif /* USER CODE END USART1_IRQn 0 */ /* USER CODE BEGIN USART1_IRQn 1 */ /* USER CODE END USART1_IRQn 1 */ } 8000b9c: bf00 nop 8000b9e: bd80 pop {r7, pc} 08000ba0 : /** * @brief This function handles USART2 global interrupt. */ void USART2_IRQHandler(void) { 8000ba0: b580 push {r7, lr} 8000ba2: af00 add r7, sp, #0 /* USER CODE BEGIN USART2_IRQn 0 */ #ifdef COMM_USART2 USART2IntProc(); 8000ba4: f003 f9dc bl 8003f60 #endif /* USER CODE END USART2_IRQn 0 */ /* USER CODE BEGIN USART2_IRQn 1 */ /* USER CODE END USART2_IRQn 1 */ } 8000ba8: bf00 nop 8000baa: bd80 pop {r7, pc} 08000bac : /** * @brief This function handles USART3 global interrupt. */ void USART3_IRQHandler(void) { 8000bac: b580 push {r7, lr} 8000bae: af00 add r7, sp, #0 /* USER CODE BEGIN USART3_IRQn 0 */ #ifdef COMM_USART3 USART3IntProc(); 8000bb0: f003 fbcc bl 800434c #endif /* USER CODE END USART3_IRQn 0 */ /* USER CODE BEGIN USART3_IRQn 1 */ /* USER CODE END USART3_IRQn 1 */ } 8000bb4: bf00 nop 8000bb6: bd80 pop {r7, pc} 08000bb8 : /** * @brief This function handles EXTI line[15:10] interrupts. */ void EXTI15_10_IRQHandler(void) { 8000bb8: b580 push {r7, lr} 8000bba: af00 add r7, sp, #0 /* USER CODE BEGIN EXTI15_10_IRQn 0 */ /* USER CODE END EXTI15_10_IRQn 0 */ if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_10) != RESET) 8000bbc: f44f 6080 mov.w r0, #1024 ; 0x400 8000bc0: f7ff ff62 bl 8000a88 8000bc4: 4603 mov r3, r0 8000bc6: 2b00 cmp r3, #0 8000bc8: d005 beq.n 8000bd6 { LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_10); 8000bca: f44f 6080 mov.w r0, #1024 ; 0x400 8000bce: f7ff ff71 bl 8000ab4 /* USER CODE BEGIN LL_EXTI_LINE_10 */ ZPIntProc(); 8000bd2: f006 fcdd bl 8007590 /* USER CODE END LL_EXTI_LINE_10 */ } /* USER CODE BEGIN EXTI15_10_IRQn 1 */ /* USER CODE END EXTI15_10_IRQn 1 */ } 8000bd6: bf00 nop 8000bd8: bd80 pop {r7, pc} 08000bda <_close>: } return len; } int _close(int file) { 8000bda: b480 push {r7} 8000bdc: b083 sub sp, #12 8000bde: af00 add r7, sp, #0 8000be0: 6078 str r0, [r7, #4] return -1; 8000be2: f04f 33ff mov.w r3, #4294967295 } 8000be6: 4618 mov r0, r3 8000be8: 370c adds r7, #12 8000bea: 46bd mov sp, r7 8000bec: bc80 pop {r7} 8000bee: 4770 bx lr 08000bf0 <_fstat>: int _fstat(int file, struct stat *st) { 8000bf0: b480 push {r7} 8000bf2: b083 sub sp, #12 8000bf4: af00 add r7, sp, #0 8000bf6: 6078 str r0, [r7, #4] 8000bf8: 6039 str r1, [r7, #0] st->st_mode = S_IFCHR; 8000bfa: 683b ldr r3, [r7, #0] 8000bfc: f44f 5200 mov.w r2, #8192 ; 0x2000 8000c00: 605a str r2, [r3, #4] return 0; 8000c02: 2300 movs r3, #0 } 8000c04: 4618 mov r0, r3 8000c06: 370c adds r7, #12 8000c08: 46bd mov sp, r7 8000c0a: bc80 pop {r7} 8000c0c: 4770 bx lr 08000c0e <_isatty>: int _isatty(int file) { 8000c0e: b480 push {r7} 8000c10: b083 sub sp, #12 8000c12: af00 add r7, sp, #0 8000c14: 6078 str r0, [r7, #4] return 1; 8000c16: 2301 movs r3, #1 } 8000c18: 4618 mov r0, r3 8000c1a: 370c adds r7, #12 8000c1c: 46bd mov sp, r7 8000c1e: bc80 pop {r7} 8000c20: 4770 bx lr 08000c22 <_lseek>: int _lseek(int file, int ptr, int dir) { 8000c22: b480 push {r7} 8000c24: b085 sub sp, #20 8000c26: af00 add r7, sp, #0 8000c28: 60f8 str r0, [r7, #12] 8000c2a: 60b9 str r1, [r7, #8] 8000c2c: 607a str r2, [r7, #4] return 0; 8000c2e: 2300 movs r3, #0 } 8000c30: 4618 mov r0, r3 8000c32: 3714 adds r7, #20 8000c34: 46bd mov sp, r7 8000c36: bc80 pop {r7} 8000c38: 4770 bx lr ... 08000c3c <_sbrk>: * * @param incr Memory size * @return Pointer to allocated memory */ void *_sbrk(ptrdiff_t incr) { 8000c3c: b580 push {r7, lr} 8000c3e: b086 sub sp, #24 8000c40: af00 add r7, sp, #0 8000c42: 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; 8000c44: 4a14 ldr r2, [pc, #80] ; (8000c98 <_sbrk+0x5c>) 8000c46: 4b15 ldr r3, [pc, #84] ; (8000c9c <_sbrk+0x60>) 8000c48: 1ad3 subs r3, r2, r3 8000c4a: 617b str r3, [r7, #20] const uint8_t *max_heap = (uint8_t *)stack_limit; 8000c4c: 697b ldr r3, [r7, #20] 8000c4e: 613b str r3, [r7, #16] uint8_t *prev_heap_end; /* Initialize heap end at first call */ if (NULL == __sbrk_heap_end) 8000c50: 4b13 ldr r3, [pc, #76] ; (8000ca0 <_sbrk+0x64>) 8000c52: 681b ldr r3, [r3, #0] 8000c54: 2b00 cmp r3, #0 8000c56: d102 bne.n 8000c5e <_sbrk+0x22> { __sbrk_heap_end = &_end; 8000c58: 4b11 ldr r3, [pc, #68] ; (8000ca0 <_sbrk+0x64>) 8000c5a: 4a12 ldr r2, [pc, #72] ; (8000ca4 <_sbrk+0x68>) 8000c5c: 601a str r2, [r3, #0] } /* Protect heap from growing into the reserved MSP stack */ if (__sbrk_heap_end + incr > max_heap) 8000c5e: 4b10 ldr r3, [pc, #64] ; (8000ca0 <_sbrk+0x64>) 8000c60: 681a ldr r2, [r3, #0] 8000c62: 687b ldr r3, [r7, #4] 8000c64: 4413 add r3, r2 8000c66: 693a ldr r2, [r7, #16] 8000c68: 429a cmp r2, r3 8000c6a: d207 bcs.n 8000c7c <_sbrk+0x40> { errno = ENOMEM; 8000c6c: f008 fe10 bl 8009890 <__errno> 8000c70: 4602 mov r2, r0 8000c72: 230c movs r3, #12 8000c74: 6013 str r3, [r2, #0] return (void *)-1; 8000c76: f04f 33ff mov.w r3, #4294967295 8000c7a: e009 b.n 8000c90 <_sbrk+0x54> } prev_heap_end = __sbrk_heap_end; 8000c7c: 4b08 ldr r3, [pc, #32] ; (8000ca0 <_sbrk+0x64>) 8000c7e: 681b ldr r3, [r3, #0] 8000c80: 60fb str r3, [r7, #12] __sbrk_heap_end += incr; 8000c82: 4b07 ldr r3, [pc, #28] ; (8000ca0 <_sbrk+0x64>) 8000c84: 681a ldr r2, [r3, #0] 8000c86: 687b ldr r3, [r7, #4] 8000c88: 4413 add r3, r2 8000c8a: 4a05 ldr r2, [pc, #20] ; (8000ca0 <_sbrk+0x64>) 8000c8c: 6013 str r3, [r2, #0] return (void *)prev_heap_end; 8000c8e: 68fb ldr r3, [r7, #12] } 8000c90: 4618 mov r0, r3 8000c92: 3718 adds r7, #24 8000c94: 46bd mov sp, r7 8000c96: bd80 pop {r7, pc} 8000c98: 2000c000 .word 0x2000c000 8000c9c: 00000400 .word 0x00000400 8000ca0: 20000558 .word 0x20000558 8000ca4: 20003d30 .word 0x20003d30 08000ca8 : * @note This function should be used only after reset. * @param None * @retval None */ void SystemInit (void) { 8000ca8: b480 push {r7} 8000caa: af00 add r7, sp, #0 /* Configure the Vector Table location -------------------------------------*/ #if defined(USER_VECT_TAB_ADDRESS) SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ #endif /* USER_VECT_TAB_ADDRESS */ } 8000cac: bf00 nop 8000cae: 46bd mov sp, r7 8000cb0: bc80 pop {r7} 8000cb2: 4770 bx lr 08000cb4 <__NVIC_GetPriorityGrouping>: { 8000cb4: b480 push {r7} 8000cb6: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); 8000cb8: 4b04 ldr r3, [pc, #16] ; (8000ccc <__NVIC_GetPriorityGrouping+0x18>) 8000cba: 68db ldr r3, [r3, #12] 8000cbc: 0a1b lsrs r3, r3, #8 8000cbe: f003 0307 and.w r3, r3, #7 } 8000cc2: 4618 mov r0, r3 8000cc4: 46bd mov sp, r7 8000cc6: bc80 pop {r7} 8000cc8: 4770 bx lr 8000cca: bf00 nop 8000ccc: e000ed00 .word 0xe000ed00 08000cd0 <__NVIC_EnableIRQ>: { 8000cd0: b480 push {r7} 8000cd2: b083 sub sp, #12 8000cd4: af00 add r7, sp, #0 8000cd6: 4603 mov r3, r0 8000cd8: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 8000cda: f997 3007 ldrsb.w r3, [r7, #7] 8000cde: 2b00 cmp r3, #0 8000ce0: db0b blt.n 8000cfa <__NVIC_EnableIRQ+0x2a> NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); 8000ce2: 79fb ldrb r3, [r7, #7] 8000ce4: f003 021f and.w r2, r3, #31 8000ce8: 4906 ldr r1, [pc, #24] ; (8000d04 <__NVIC_EnableIRQ+0x34>) 8000cea: f997 3007 ldrsb.w r3, [r7, #7] 8000cee: 095b lsrs r3, r3, #5 8000cf0: 2001 movs r0, #1 8000cf2: fa00 f202 lsl.w r2, r0, r2 8000cf6: f841 2023 str.w r2, [r1, r3, lsl #2] } 8000cfa: bf00 nop 8000cfc: 370c adds r7, #12 8000cfe: 46bd mov sp, r7 8000d00: bc80 pop {r7} 8000d02: 4770 bx lr 8000d04: e000e100 .word 0xe000e100 08000d08 <__NVIC_SetPriority>: { 8000d08: b480 push {r7} 8000d0a: b083 sub sp, #12 8000d0c: af00 add r7, sp, #0 8000d0e: 4603 mov r3, r0 8000d10: 6039 str r1, [r7, #0] 8000d12: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 8000d14: f997 3007 ldrsb.w r3, [r7, #7] 8000d18: 2b00 cmp r3, #0 8000d1a: db0a blt.n 8000d32 <__NVIC_SetPriority+0x2a> NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 8000d1c: 683b ldr r3, [r7, #0] 8000d1e: b2da uxtb r2, r3 8000d20: 490c ldr r1, [pc, #48] ; (8000d54 <__NVIC_SetPriority+0x4c>) 8000d22: f997 3007 ldrsb.w r3, [r7, #7] 8000d26: 0112 lsls r2, r2, #4 8000d28: b2d2 uxtb r2, r2 8000d2a: 440b add r3, r1 8000d2c: f883 2300 strb.w r2, [r3, #768] ; 0x300 } 8000d30: e00a b.n 8000d48 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 8000d32: 683b ldr r3, [r7, #0] 8000d34: b2da uxtb r2, r3 8000d36: 4908 ldr r1, [pc, #32] ; (8000d58 <__NVIC_SetPriority+0x50>) 8000d38: 79fb ldrb r3, [r7, #7] 8000d3a: f003 030f and.w r3, r3, #15 8000d3e: 3b04 subs r3, #4 8000d40: 0112 lsls r2, r2, #4 8000d42: b2d2 uxtb r2, r2 8000d44: 440b add r3, r1 8000d46: 761a strb r2, [r3, #24] } 8000d48: bf00 nop 8000d4a: 370c adds r7, #12 8000d4c: 46bd mov sp, r7 8000d4e: bc80 pop {r7} 8000d50: 4770 bx lr 8000d52: bf00 nop 8000d54: e000e100 .word 0xe000e100 8000d58: e000ed00 .word 0xe000ed00 08000d5c : { 8000d5c: b480 push {r7} 8000d5e: b089 sub sp, #36 ; 0x24 8000d60: af00 add r7, sp, #0 8000d62: 60f8 str r0, [r7, #12] 8000d64: 60b9 str r1, [r7, #8] 8000d66: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 8000d68: 68fb ldr r3, [r7, #12] 8000d6a: f003 0307 and.w r3, r3, #7 8000d6e: 61fb str r3, [r7, #28] PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); 8000d70: 69fb ldr r3, [r7, #28] 8000d72: f1c3 0307 rsb r3, r3, #7 8000d76: 2b04 cmp r3, #4 8000d78: bf28 it cs 8000d7a: 2304 movcs r3, #4 8000d7c: 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)); 8000d7e: 69fb ldr r3, [r7, #28] 8000d80: 3304 adds r3, #4 8000d82: 2b06 cmp r3, #6 8000d84: d902 bls.n 8000d8c 8000d86: 69fb ldr r3, [r7, #28] 8000d88: 3b03 subs r3, #3 8000d8a: e000 b.n 8000d8e 8000d8c: 2300 movs r3, #0 8000d8e: 617b str r3, [r7, #20] ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8000d90: f04f 32ff mov.w r2, #4294967295 8000d94: 69bb ldr r3, [r7, #24] 8000d96: fa02 f303 lsl.w r3, r2, r3 8000d9a: 43da mvns r2, r3 8000d9c: 68bb ldr r3, [r7, #8] 8000d9e: 401a ands r2, r3 8000da0: 697b ldr r3, [r7, #20] 8000da2: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) 8000da4: f04f 31ff mov.w r1, #4294967295 8000da8: 697b ldr r3, [r7, #20] 8000daa: fa01 f303 lsl.w r3, r1, r3 8000dae: 43d9 mvns r1, r3 8000db0: 687b ldr r3, [r7, #4] 8000db2: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8000db4: 4313 orrs r3, r2 } 8000db6: 4618 mov r0, r3 8000db8: 3724 adds r7, #36 ; 0x24 8000dba: 46bd mov sp, r7 8000dbc: bc80 pop {r7} 8000dbe: 4770 bx lr 08000dc0 : { 8000dc0: b480 push {r7} 8000dc2: b085 sub sp, #20 8000dc4: af00 add r7, sp, #0 8000dc6: 6078 str r0, [r7, #4] SET_BIT(RCC->APB2ENR, Periphs); 8000dc8: 4b08 ldr r3, [pc, #32] ; (8000dec ) 8000dca: 699a ldr r2, [r3, #24] 8000dcc: 4907 ldr r1, [pc, #28] ; (8000dec ) 8000dce: 687b ldr r3, [r7, #4] 8000dd0: 4313 orrs r3, r2 8000dd2: 618b str r3, [r1, #24] tmpreg = READ_BIT(RCC->APB2ENR, Periphs); 8000dd4: 4b05 ldr r3, [pc, #20] ; (8000dec ) 8000dd6: 699a ldr r2, [r3, #24] 8000dd8: 687b ldr r3, [r7, #4] 8000dda: 4013 ands r3, r2 8000ddc: 60fb str r3, [r7, #12] (void)tmpreg; 8000dde: 68fb ldr r3, [r7, #12] } 8000de0: bf00 nop 8000de2: 3714 adds r7, #20 8000de4: 46bd mov sp, r7 8000de6: bc80 pop {r7} 8000de8: 4770 bx lr 8000dea: bf00 nop 8000dec: 40021000 .word 0x40021000 08000df0 : * @rmtoll CR1 ARPE LL_TIM_EnableARRPreload * @param TIMx Timer instance * @retval None */ __STATIC_INLINE void LL_TIM_EnableARRPreload(TIM_TypeDef *TIMx) { 8000df0: b480 push {r7} 8000df2: b083 sub sp, #12 8000df4: af00 add r7, sp, #0 8000df6: 6078 str r0, [r7, #4] SET_BIT(TIMx->CR1, TIM_CR1_ARPE); 8000df8: 687b ldr r3, [r7, #4] 8000dfa: 681b ldr r3, [r3, #0] 8000dfc: f043 0280 orr.w r2, r3, #128 ; 0x80 8000e00: 687b ldr r3, [r7, #4] 8000e02: 601a str r2, [r3, #0] } 8000e04: bf00 nop 8000e06: 370c adds r7, #12 8000e08: 46bd mov sp, r7 8000e0a: bc80 pop {r7} 8000e0c: 4770 bx lr 08000e0e : * @arg @ref LL_TIM_CLOCKSOURCE_EXT_MODE1 * @arg @ref LL_TIM_CLOCKSOURCE_EXT_MODE2 * @retval None */ __STATIC_INLINE void LL_TIM_SetClockSource(TIM_TypeDef *TIMx, uint32_t ClockSource) { 8000e0e: b480 push {r7} 8000e10: b083 sub sp, #12 8000e12: af00 add r7, sp, #0 8000e14: 6078 str r0, [r7, #4] 8000e16: 6039 str r1, [r7, #0] MODIFY_REG(TIMx->SMCR, TIM_SMCR_SMS | TIM_SMCR_ECE, ClockSource); 8000e18: 687b ldr r3, [r7, #4] 8000e1a: 689b ldr r3, [r3, #8] 8000e1c: f423 4380 bic.w r3, r3, #16384 ; 0x4000 8000e20: f023 0307 bic.w r3, r3, #7 8000e24: 683a ldr r2, [r7, #0] 8000e26: 431a orrs r2, r3 8000e28: 687b ldr r3, [r7, #4] 8000e2a: 609a str r2, [r3, #8] } 8000e2c: bf00 nop 8000e2e: 370c adds r7, #12 8000e30: 46bd mov sp, r7 8000e32: bc80 pop {r7} 8000e34: 4770 bx lr 08000e36 : * @arg @ref LL_TIM_TRGO_OC3REF * @arg @ref LL_TIM_TRGO_OC4REF * @retval None */ __STATIC_INLINE void LL_TIM_SetTriggerOutput(TIM_TypeDef *TIMx, uint32_t TimerSynchronization) { 8000e36: b480 push {r7} 8000e38: b083 sub sp, #12 8000e3a: af00 add r7, sp, #0 8000e3c: 6078 str r0, [r7, #4] 8000e3e: 6039 str r1, [r7, #0] MODIFY_REG(TIMx->CR2, TIM_CR2_MMS, TimerSynchronization); 8000e40: 687b ldr r3, [r7, #4] 8000e42: 685b ldr r3, [r3, #4] 8000e44: f023 0270 bic.w r2, r3, #112 ; 0x70 8000e48: 683b ldr r3, [r7, #0] 8000e4a: 431a orrs r2, r3 8000e4c: 687b ldr r3, [r7, #4] 8000e4e: 605a str r2, [r3, #4] } 8000e50: bf00 nop 8000e52: 370c adds r7, #12 8000e54: 46bd mov sp, r7 8000e56: bc80 pop {r7} 8000e58: 4770 bx lr 08000e5a : * @rmtoll SMCR MSM LL_TIM_DisableMasterSlaveMode * @param TIMx Timer instance * @retval None */ __STATIC_INLINE void LL_TIM_DisableMasterSlaveMode(TIM_TypeDef *TIMx) { 8000e5a: b480 push {r7} 8000e5c: b083 sub sp, #12 8000e5e: af00 add r7, sp, #0 8000e60: 6078 str r0, [r7, #4] CLEAR_BIT(TIMx->SMCR, TIM_SMCR_MSM); 8000e62: 687b ldr r3, [r7, #4] 8000e64: 689b ldr r3, [r3, #8] 8000e66: f023 0280 bic.w r2, r3, #128 ; 0x80 8000e6a: 687b ldr r3, [r7, #4] 8000e6c: 609a str r2, [r3, #8] } 8000e6e: bf00 nop 8000e70: 370c adds r7, #12 8000e72: 46bd mov sp, r7 8000e74: bc80 pop {r7} 8000e76: 4770 bx lr 08000e78 : /* USER CODE END 0 */ /* TIM1 init function */ void MX_TIM1_Init(void) { 8000e78: b580 push {r7, lr} 8000e7a: b086 sub sp, #24 8000e7c: af00 add r7, sp, #0 LL_TIM_InitTypeDef TIM_InitStruct = {0}; 8000e7e: 1d3b adds r3, r7, #4 8000e80: 2200 movs r2, #0 8000e82: 601a str r2, [r3, #0] 8000e84: 605a str r2, [r3, #4] 8000e86: 609a str r2, [r3, #8] 8000e88: 60da str r2, [r3, #12] 8000e8a: 611a str r2, [r3, #16] /* Peripheral clock enable */ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1); 8000e8c: f44f 6000 mov.w r0, #2048 ; 0x800 8000e90: f7ff ff96 bl 8000dc0 /* TIM1 interrupt Init */ NVIC_SetPriority(TIM1_BRK_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); 8000e94: f7ff ff0e bl 8000cb4 <__NVIC_GetPriorityGrouping> 8000e98: 4603 mov r3, r0 8000e9a: 2200 movs r2, #0 8000e9c: 2100 movs r1, #0 8000e9e: 4618 mov r0, r3 8000ea0: f7ff ff5c bl 8000d5c 8000ea4: 4603 mov r3, r0 8000ea6: 4619 mov r1, r3 8000ea8: 2018 movs r0, #24 8000eaa: f7ff ff2d bl 8000d08 <__NVIC_SetPriority> NVIC_EnableIRQ(TIM1_BRK_IRQn); 8000eae: 2018 movs r0, #24 8000eb0: f7ff ff0e bl 8000cd0 <__NVIC_EnableIRQ> TIM_InitStruct.Prescaler = 71; 8000eb4: 2347 movs r3, #71 ; 0x47 8000eb6: 80bb strh r3, [r7, #4] TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; 8000eb8: 2300 movs r3, #0 8000eba: 60bb str r3, [r7, #8] TIM_InitStruct.Autoreload = 33; 8000ebc: 2321 movs r3, #33 ; 0x21 8000ebe: 60fb str r3, [r7, #12] TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; 8000ec0: 2300 movs r3, #0 8000ec2: 613b str r3, [r7, #16] TIM_InitStruct.RepetitionCounter = 0; 8000ec4: 2300 movs r3, #0 8000ec6: 617b str r3, [r7, #20] LL_TIM_Init(TIM1, &TIM_InitStruct); 8000ec8: 1d3b adds r3, r7, #4 8000eca: 4619 mov r1, r3 8000ecc: 480a ldr r0, [pc, #40] ; (8000ef8 ) 8000ece: f001 fef7 bl 8002cc0 LL_TIM_EnableARRPreload(TIM1); 8000ed2: 4809 ldr r0, [pc, #36] ; (8000ef8 ) 8000ed4: f7ff ff8c bl 8000df0 LL_TIM_SetClockSource(TIM1, LL_TIM_CLOCKSOURCE_INTERNAL); 8000ed8: 2100 movs r1, #0 8000eda: 4807 ldr r0, [pc, #28] ; (8000ef8 ) 8000edc: f7ff ff97 bl 8000e0e LL_TIM_SetTriggerOutput(TIM1, LL_TIM_TRGO_RESET); 8000ee0: 2100 movs r1, #0 8000ee2: 4805 ldr r0, [pc, #20] ; (8000ef8 ) 8000ee4: f7ff ffa7 bl 8000e36 LL_TIM_DisableMasterSlaveMode(TIM1); 8000ee8: 4803 ldr r0, [pc, #12] ; (8000ef8 ) 8000eea: f7ff ffb6 bl 8000e5a } 8000eee: bf00 nop 8000ef0: 3718 adds r7, #24 8000ef2: 46bd mov sp, r7 8000ef4: bd80 pop {r7, pc} 8000ef6: bf00 nop 8000ef8: 40012c00 .word 0x40012c00 08000efc <__NVIC_GetPriorityGrouping>: { 8000efc: b480 push {r7} 8000efe: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); 8000f00: 4b04 ldr r3, [pc, #16] ; (8000f14 <__NVIC_GetPriorityGrouping+0x18>) 8000f02: 68db ldr r3, [r3, #12] 8000f04: 0a1b lsrs r3, r3, #8 8000f06: f003 0307 and.w r3, r3, #7 } 8000f0a: 4618 mov r0, r3 8000f0c: 46bd mov sp, r7 8000f0e: bc80 pop {r7} 8000f10: 4770 bx lr 8000f12: bf00 nop 8000f14: e000ed00 .word 0xe000ed00 08000f18 <__NVIC_EnableIRQ>: { 8000f18: b480 push {r7} 8000f1a: b083 sub sp, #12 8000f1c: af00 add r7, sp, #0 8000f1e: 4603 mov r3, r0 8000f20: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 8000f22: f997 3007 ldrsb.w r3, [r7, #7] 8000f26: 2b00 cmp r3, #0 8000f28: db0b blt.n 8000f42 <__NVIC_EnableIRQ+0x2a> NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); 8000f2a: 79fb ldrb r3, [r7, #7] 8000f2c: f003 021f and.w r2, r3, #31 8000f30: 4906 ldr r1, [pc, #24] ; (8000f4c <__NVIC_EnableIRQ+0x34>) 8000f32: f997 3007 ldrsb.w r3, [r7, #7] 8000f36: 095b lsrs r3, r3, #5 8000f38: 2001 movs r0, #1 8000f3a: fa00 f202 lsl.w r2, r0, r2 8000f3e: f841 2023 str.w r2, [r1, r3, lsl #2] } 8000f42: bf00 nop 8000f44: 370c adds r7, #12 8000f46: 46bd mov sp, r7 8000f48: bc80 pop {r7} 8000f4a: 4770 bx lr 8000f4c: e000e100 .word 0xe000e100 08000f50 <__NVIC_SetPriority>: { 8000f50: b480 push {r7} 8000f52: b083 sub sp, #12 8000f54: af00 add r7, sp, #0 8000f56: 4603 mov r3, r0 8000f58: 6039 str r1, [r7, #0] 8000f5a: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 8000f5c: f997 3007 ldrsb.w r3, [r7, #7] 8000f60: 2b00 cmp r3, #0 8000f62: db0a blt.n 8000f7a <__NVIC_SetPriority+0x2a> NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 8000f64: 683b ldr r3, [r7, #0] 8000f66: b2da uxtb r2, r3 8000f68: 490c ldr r1, [pc, #48] ; (8000f9c <__NVIC_SetPriority+0x4c>) 8000f6a: f997 3007 ldrsb.w r3, [r7, #7] 8000f6e: 0112 lsls r2, r2, #4 8000f70: b2d2 uxtb r2, r2 8000f72: 440b add r3, r1 8000f74: f883 2300 strb.w r2, [r3, #768] ; 0x300 } 8000f78: e00a b.n 8000f90 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 8000f7a: 683b ldr r3, [r7, #0] 8000f7c: b2da uxtb r2, r3 8000f7e: 4908 ldr r1, [pc, #32] ; (8000fa0 <__NVIC_SetPriority+0x50>) 8000f80: 79fb ldrb r3, [r7, #7] 8000f82: f003 030f and.w r3, r3, #15 8000f86: 3b04 subs r3, #4 8000f88: 0112 lsls r2, r2, #4 8000f8a: b2d2 uxtb r2, r2 8000f8c: 440b add r3, r1 8000f8e: 761a strb r2, [r3, #24] } 8000f90: bf00 nop 8000f92: 370c adds r7, #12 8000f94: 46bd mov sp, r7 8000f96: bc80 pop {r7} 8000f98: 4770 bx lr 8000f9a: bf00 nop 8000f9c: e000e100 .word 0xe000e100 8000fa0: e000ed00 .word 0xe000ed00 08000fa4 : { 8000fa4: b480 push {r7} 8000fa6: b089 sub sp, #36 ; 0x24 8000fa8: af00 add r7, sp, #0 8000faa: 60f8 str r0, [r7, #12] 8000fac: 60b9 str r1, [r7, #8] 8000fae: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 8000fb0: 68fb ldr r3, [r7, #12] 8000fb2: f003 0307 and.w r3, r3, #7 8000fb6: 61fb str r3, [r7, #28] PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); 8000fb8: 69fb ldr r3, [r7, #28] 8000fba: f1c3 0307 rsb r3, r3, #7 8000fbe: 2b04 cmp r3, #4 8000fc0: bf28 it cs 8000fc2: 2304 movcs r3, #4 8000fc4: 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)); 8000fc6: 69fb ldr r3, [r7, #28] 8000fc8: 3304 adds r3, #4 8000fca: 2b06 cmp r3, #6 8000fcc: d902 bls.n 8000fd4 8000fce: 69fb ldr r3, [r7, #28] 8000fd0: 3b03 subs r3, #3 8000fd2: e000 b.n 8000fd6 8000fd4: 2300 movs r3, #0 8000fd6: 617b str r3, [r7, #20] ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8000fd8: f04f 32ff mov.w r2, #4294967295 8000fdc: 69bb ldr r3, [r7, #24] 8000fde: fa02 f303 lsl.w r3, r2, r3 8000fe2: 43da mvns r2, r3 8000fe4: 68bb ldr r3, [r7, #8] 8000fe6: 401a ands r2, r3 8000fe8: 697b ldr r3, [r7, #20] 8000fea: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) 8000fec: f04f 31ff mov.w r1, #4294967295 8000ff0: 697b ldr r3, [r7, #20] 8000ff2: fa01 f303 lsl.w r3, r1, r3 8000ff6: 43d9 mvns r1, r3 8000ff8: 687b ldr r3, [r7, #4] 8000ffa: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8000ffc: 4313 orrs r3, r2 } 8000ffe: 4618 mov r0, r3 8001000: 3724 adds r7, #36 ; 0x24 8001002: 46bd mov sp, r7 8001004: bc80 pop {r7} 8001006: 4770 bx lr 08001008 : { 8001008: b480 push {r7} 800100a: b085 sub sp, #20 800100c: af00 add r7, sp, #0 800100e: 6078 str r0, [r7, #4] SET_BIT(RCC->APB1ENR, Periphs); 8001010: 4b08 ldr r3, [pc, #32] ; (8001034 ) 8001012: 69da ldr r2, [r3, #28] 8001014: 4907 ldr r1, [pc, #28] ; (8001034 ) 8001016: 687b ldr r3, [r7, #4] 8001018: 4313 orrs r3, r2 800101a: 61cb str r3, [r1, #28] tmpreg = READ_BIT(RCC->APB1ENR, Periphs); 800101c: 4b05 ldr r3, [pc, #20] ; (8001034 ) 800101e: 69da ldr r2, [r3, #28] 8001020: 687b ldr r3, [r7, #4] 8001022: 4013 ands r3, r2 8001024: 60fb str r3, [r7, #12] (void)tmpreg; 8001026: 68fb ldr r3, [r7, #12] } 8001028: bf00 nop 800102a: 3714 adds r7, #20 800102c: 46bd mov sp, r7 800102e: bc80 pop {r7} 8001030: 4770 bx lr 8001032: bf00 nop 8001034: 40021000 .word 0x40021000 08001038 : { 8001038: b480 push {r7} 800103a: b085 sub sp, #20 800103c: af00 add r7, sp, #0 800103e: 6078 str r0, [r7, #4] SET_BIT(RCC->APB2ENR, Periphs); 8001040: 4b08 ldr r3, [pc, #32] ; (8001064 ) 8001042: 699a ldr r2, [r3, #24] 8001044: 4907 ldr r1, [pc, #28] ; (8001064 ) 8001046: 687b ldr r3, [r7, #4] 8001048: 4313 orrs r3, r2 800104a: 618b str r3, [r1, #24] tmpreg = READ_BIT(RCC->APB2ENR, Periphs); 800104c: 4b05 ldr r3, [pc, #20] ; (8001064 ) 800104e: 699a ldr r2, [r3, #24] 8001050: 687b ldr r3, [r7, #4] 8001052: 4013 ands r3, r2 8001054: 60fb str r3, [r7, #12] (void)tmpreg; 8001056: 68fb ldr r3, [r7, #12] } 8001058: bf00 nop 800105a: 3714 adds r7, #20 800105c: 46bd mov sp, r7 800105e: bc80 pop {r7} 8001060: 4770 bx lr 8001062: bf00 nop 8001064: 40021000 .word 0x40021000 08001068 : * @rmtoll CR1 UE LL_USART_Enable * @param USARTx USART Instance * @retval None */ __STATIC_INLINE void LL_USART_Enable(USART_TypeDef *USARTx) { 8001068: b480 push {r7} 800106a: b083 sub sp, #12 800106c: af00 add r7, sp, #0 800106e: 6078 str r0, [r7, #4] SET_BIT(USARTx->CR1, USART_CR1_UE); 8001070: 687b ldr r3, [r7, #4] 8001072: 68db ldr r3, [r3, #12] 8001074: f443 5200 orr.w r2, r3, #8192 ; 0x2000 8001078: 687b ldr r3, [r7, #4] 800107a: 60da str r2, [r3, #12] } 800107c: bf00 nop 800107e: 370c adds r7, #12 8001080: 46bd mov sp, r7 8001082: bc80 pop {r7} 8001084: 4770 bx lr 08001086 : * CR3 HDSEL LL_USART_ConfigAsyncMode * @param USARTx USART Instance * @retval None */ __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx) { 8001086: b480 push {r7} 8001088: b083 sub sp, #12 800108a: af00 add r7, sp, #0 800108c: 6078 str r0, [r7, #4] /* In Asynchronous mode, the following bits must be kept cleared: - LINEN, CLKEN bits in the USART_CR2 register, - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/ CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); 800108e: 687b ldr r3, [r7, #4] 8001090: 691b ldr r3, [r3, #16] 8001092: f423 4290 bic.w r2, r3, #18432 ; 0x4800 8001096: 687b ldr r3, [r7, #4] 8001098: 611a str r2, [r3, #16] CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL)); 800109a: 687b ldr r3, [r7, #4] 800109c: 695b ldr r3, [r3, #20] 800109e: f023 022a bic.w r2, r3, #42 ; 0x2a 80010a2: 687b ldr r3, [r7, #4] 80010a4: 615a str r2, [r3, #20] } 80010a6: bf00 nop 80010a8: 370c adds r7, #12 80010aa: 46bd mov sp, r7 80010ac: bc80 pop {r7} 80010ae: 4770 bx lr 080010b0 : { 80010b0: b480 push {r7} 80010b2: af00 add r7, sp, #0 SET_BIT(AFIO->MAPR, AFIO_MAPR_USART1_REMAP | AFIO_MAPR_SWJ_CFG); 80010b4: 4b05 ldr r3, [pc, #20] ; (80010cc ) 80010b6: 685b ldr r3, [r3, #4] 80010b8: 4a04 ldr r2, [pc, #16] ; (80010cc ) 80010ba: f043 63e0 orr.w r3, r3, #117440512 ; 0x7000000 80010be: f043 0304 orr.w r3, r3, #4 80010c2: 6053 str r3, [r2, #4] } 80010c4: bf00 nop 80010c6: 46bd mov sp, r7 80010c8: bc80 pop {r7} 80010ca: 4770 bx lr 80010cc: 40010000 .word 0x40010000 080010d0 : /* USER CODE END 0 */ /* USART1 init function */ void MX_USART1_UART_Init(void) { 80010d0: b580 push {r7, lr} 80010d2: b08c sub sp, #48 ; 0x30 80010d4: af00 add r7, sp, #0 LL_USART_InitTypeDef USART_InitStruct = {0}; 80010d6: f107 0314 add.w r3, r7, #20 80010da: 2200 movs r2, #0 80010dc: 601a str r2, [r3, #0] 80010de: 605a str r2, [r3, #4] 80010e0: 609a str r2, [r3, #8] 80010e2: 60da str r2, [r3, #12] 80010e4: 611a str r2, [r3, #16] 80010e6: 615a str r2, [r3, #20] 80010e8: 619a str r2, [r3, #24] LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; 80010ea: 463b mov r3, r7 80010ec: 2200 movs r2, #0 80010ee: 601a str r2, [r3, #0] 80010f0: 605a str r2, [r3, #4] 80010f2: 609a str r2, [r3, #8] 80010f4: 60da str r2, [r3, #12] 80010f6: 611a str r2, [r3, #16] /* Peripheral clock enable */ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1); 80010f8: f44f 4080 mov.w r0, #16384 ; 0x4000 80010fc: f7ff ff9c bl 8001038 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); 8001100: 2008 movs r0, #8 8001102: f7ff ff99 bl 8001038 /**USART1 GPIO Configuration PB6 ------> USART1_TX PB7 ------> USART1_RX */ GPIO_InitStruct.Pin = LL_GPIO_PIN_6; 8001106: f244 0340 movw r3, #16448 ; 0x4040 800110a: 603b str r3, [r7, #0] GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; 800110c: 2309 movs r3, #9 800110e: 607b str r3, [r7, #4] GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; 8001110: 2303 movs r3, #3 8001112: 60bb str r3, [r7, #8] GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; 8001114: 2300 movs r3, #0 8001116: 60fb str r3, [r7, #12] LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 8001118: 463b mov r3, r7 800111a: 4619 mov r1, r3 800111c: 481e ldr r0, [pc, #120] ; (8001198 ) 800111e: f001 fc27 bl 8002970 GPIO_InitStruct.Pin = LL_GPIO_PIN_7; 8001122: f248 0380 movw r3, #32896 ; 0x8080 8001126: 603b str r3, [r7, #0] GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 8001128: 2304 movs r3, #4 800112a: 607b str r3, [r7, #4] LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 800112c: 463b mov r3, r7 800112e: 4619 mov r1, r3 8001130: 4819 ldr r0, [pc, #100] ; (8001198 ) 8001132: f001 fc1d bl 8002970 LL_GPIO_AF_EnableRemap_USART1(); 8001136: f7ff ffbb bl 80010b0 /* USART1 interrupt Init */ NVIC_SetPriority(USART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); 800113a: f7ff fedf bl 8000efc <__NVIC_GetPriorityGrouping> 800113e: 4603 mov r3, r0 8001140: 2200 movs r2, #0 8001142: 2100 movs r1, #0 8001144: 4618 mov r0, r3 8001146: f7ff ff2d bl 8000fa4 800114a: 4603 mov r3, r0 800114c: 4619 mov r1, r3 800114e: 2025 movs r0, #37 ; 0x25 8001150: f7ff fefe bl 8000f50 <__NVIC_SetPriority> NVIC_EnableIRQ(USART1_IRQn); 8001154: 2025 movs r0, #37 ; 0x25 8001156: f7ff fedf bl 8000f18 <__NVIC_EnableIRQ> USART_InitStruct.BaudRate = 115200; 800115a: f44f 33e1 mov.w r3, #115200 ; 0x1c200 800115e: 617b str r3, [r7, #20] USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; 8001160: 2300 movs r3, #0 8001162: 61bb str r3, [r7, #24] USART_InitStruct.StopBits = LL_USART_STOPBITS_1; 8001164: 2300 movs r3, #0 8001166: 61fb str r3, [r7, #28] USART_InitStruct.Parity = LL_USART_PARITY_NONE; 8001168: 2300 movs r3, #0 800116a: 623b str r3, [r7, #32] USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; 800116c: 230c movs r3, #12 800116e: 627b str r3, [r7, #36] ; 0x24 USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; 8001170: 2300 movs r3, #0 8001172: 62bb str r3, [r7, #40] ; 0x28 USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; 8001174: 2300 movs r3, #0 8001176: 62fb str r3, [r7, #44] ; 0x2c LL_USART_Init(USART1, &USART_InitStruct); 8001178: f107 0314 add.w r3, r7, #20 800117c: 4619 mov r1, r3 800117e: 4807 ldr r0, [pc, #28] ; (800119c ) 8001180: f001 feaa bl 8002ed8 LL_USART_ConfigAsyncMode(USART1); 8001184: 4805 ldr r0, [pc, #20] ; (800119c ) 8001186: f7ff ff7e bl 8001086 LL_USART_Enable(USART1); 800118a: 4804 ldr r0, [pc, #16] ; (800119c ) 800118c: f7ff ff6c bl 8001068 } 8001190: bf00 nop 8001192: 3730 adds r7, #48 ; 0x30 8001194: 46bd mov sp, r7 8001196: bd80 pop {r7, pc} 8001198: 40010c00 .word 0x40010c00 800119c: 40013800 .word 0x40013800 080011a0 : /* USART2 init function */ void MX_USART2_UART_Init(void) { 80011a0: b580 push {r7, lr} 80011a2: b08c sub sp, #48 ; 0x30 80011a4: af00 add r7, sp, #0 LL_USART_InitTypeDef USART_InitStruct = {0}; 80011a6: f107 0314 add.w r3, r7, #20 80011aa: 2200 movs r2, #0 80011ac: 601a str r2, [r3, #0] 80011ae: 605a str r2, [r3, #4] 80011b0: 609a str r2, [r3, #8] 80011b2: 60da str r2, [r3, #12] 80011b4: 611a str r2, [r3, #16] 80011b6: 615a str r2, [r3, #20] 80011b8: 619a str r2, [r3, #24] LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; 80011ba: 463b mov r3, r7 80011bc: 2200 movs r2, #0 80011be: 601a str r2, [r3, #0] 80011c0: 605a str r2, [r3, #4] 80011c2: 609a str r2, [r3, #8] 80011c4: 60da str r2, [r3, #12] 80011c6: 611a str r2, [r3, #16] /* Peripheral clock enable */ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART2); 80011c8: f44f 3000 mov.w r0, #131072 ; 0x20000 80011cc: f7ff ff1c bl 8001008 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); 80011d0: 2004 movs r0, #4 80011d2: f7ff ff31 bl 8001038 /**USART2 GPIO Configuration PA2 ------> USART2_TX PA3 ------> USART2_RX */ GPIO_InitStruct.Pin = LL_GPIO_PIN_2; 80011d6: f240 4304 movw r3, #1028 ; 0x404 80011da: 603b str r3, [r7, #0] GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; 80011dc: 2309 movs r3, #9 80011de: 607b str r3, [r7, #4] GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; 80011e0: 2303 movs r3, #3 80011e2: 60bb str r3, [r7, #8] GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; 80011e4: 2300 movs r3, #0 80011e6: 60fb str r3, [r7, #12] LL_GPIO_Init(GPIOA, &GPIO_InitStruct); 80011e8: 463b mov r3, r7 80011ea: 4619 mov r1, r3 80011ec: 481d ldr r0, [pc, #116] ; (8001264 ) 80011ee: f001 fbbf bl 8002970 GPIO_InitStruct.Pin = LL_GPIO_PIN_3; 80011f2: f640 0308 movw r3, #2056 ; 0x808 80011f6: 603b str r3, [r7, #0] GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 80011f8: 2304 movs r3, #4 80011fa: 607b str r3, [r7, #4] LL_GPIO_Init(GPIOA, &GPIO_InitStruct); 80011fc: 463b mov r3, r7 80011fe: 4619 mov r1, r3 8001200: 4818 ldr r0, [pc, #96] ; (8001264 ) 8001202: f001 fbb5 bl 8002970 /* USART2 interrupt Init */ NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); 8001206: f7ff fe79 bl 8000efc <__NVIC_GetPriorityGrouping> 800120a: 4603 mov r3, r0 800120c: 2200 movs r2, #0 800120e: 2100 movs r1, #0 8001210: 4618 mov r0, r3 8001212: f7ff fec7 bl 8000fa4 8001216: 4603 mov r3, r0 8001218: 4619 mov r1, r3 800121a: 2026 movs r0, #38 ; 0x26 800121c: f7ff fe98 bl 8000f50 <__NVIC_SetPriority> NVIC_EnableIRQ(USART2_IRQn); 8001220: 2026 movs r0, #38 ; 0x26 8001222: f7ff fe79 bl 8000f18 <__NVIC_EnableIRQ> USART_InitStruct.BaudRate = 115200; 8001226: f44f 33e1 mov.w r3, #115200 ; 0x1c200 800122a: 617b str r3, [r7, #20] USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; 800122c: 2300 movs r3, #0 800122e: 61bb str r3, [r7, #24] USART_InitStruct.StopBits = LL_USART_STOPBITS_1; 8001230: 2300 movs r3, #0 8001232: 61fb str r3, [r7, #28] USART_InitStruct.Parity = LL_USART_PARITY_NONE; 8001234: 2300 movs r3, #0 8001236: 623b str r3, [r7, #32] USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; 8001238: 230c movs r3, #12 800123a: 627b str r3, [r7, #36] ; 0x24 USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; 800123c: 2300 movs r3, #0 800123e: 62bb str r3, [r7, #40] ; 0x28 USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; 8001240: 2300 movs r3, #0 8001242: 62fb str r3, [r7, #44] ; 0x2c LL_USART_Init(USART2, &USART_InitStruct); 8001244: f107 0314 add.w r3, r7, #20 8001248: 4619 mov r1, r3 800124a: 4807 ldr r0, [pc, #28] ; (8001268 ) 800124c: f001 fe44 bl 8002ed8 LL_USART_ConfigAsyncMode(USART2); 8001250: 4805 ldr r0, [pc, #20] ; (8001268 ) 8001252: f7ff ff18 bl 8001086 LL_USART_Enable(USART2); 8001256: 4804 ldr r0, [pc, #16] ; (8001268 ) 8001258: f7ff ff06 bl 8001068 } 800125c: bf00 nop 800125e: 3730 adds r7, #48 ; 0x30 8001260: 46bd mov sp, r7 8001262: bd80 pop {r7, pc} 8001264: 40010800 .word 0x40010800 8001268: 40004400 .word 0x40004400 0800126c : /* USART3 init function */ void MX_USART3_UART_Init(void) { 800126c: b580 push {r7, lr} 800126e: b08c sub sp, #48 ; 0x30 8001270: af00 add r7, sp, #0 LL_USART_InitTypeDef USART_InitStruct = {0}; 8001272: f107 0314 add.w r3, r7, #20 8001276: 2200 movs r2, #0 8001278: 601a str r2, [r3, #0] 800127a: 605a str r2, [r3, #4] 800127c: 609a str r2, [r3, #8] 800127e: 60da str r2, [r3, #12] 8001280: 611a str r2, [r3, #16] 8001282: 615a str r2, [r3, #20] 8001284: 619a str r2, [r3, #24] LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; 8001286: 463b mov r3, r7 8001288: 2200 movs r2, #0 800128a: 601a str r2, [r3, #0] 800128c: 605a str r2, [r3, #4] 800128e: 609a str r2, [r3, #8] 8001290: 60da str r2, [r3, #12] 8001292: 611a str r2, [r3, #16] /* Peripheral clock enable */ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_USART3); 8001294: f44f 2080 mov.w r0, #262144 ; 0x40000 8001298: f7ff feb6 bl 8001008 LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); 800129c: 2008 movs r0, #8 800129e: f7ff fecb bl 8001038 /**USART3 GPIO Configuration PB10 ------> USART3_TX PB11 ------> USART3_RX */ GPIO_InitStruct.Pin = LL_GPIO_PIN_10; 80012a2: 4b22 ldr r3, [pc, #136] ; (800132c ) 80012a4: 603b str r3, [r7, #0] GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; 80012a6: 2309 movs r3, #9 80012a8: 607b str r3, [r7, #4] GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; 80012aa: 2303 movs r3, #3 80012ac: 60bb str r3, [r7, #8] GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; 80012ae: 2300 movs r3, #0 80012b0: 60fb str r3, [r7, #12] LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 80012b2: 463b mov r3, r7 80012b4: 4619 mov r1, r3 80012b6: 481e ldr r0, [pc, #120] ; (8001330 ) 80012b8: f001 fb5a bl 8002970 GPIO_InitStruct.Pin = LL_GPIO_PIN_11; 80012bc: 4b1d ldr r3, [pc, #116] ; (8001334 ) 80012be: 603b str r3, [r7, #0] GPIO_InitStruct.Mode = LL_GPIO_MODE_FLOATING; 80012c0: 2304 movs r3, #4 80012c2: 607b str r3, [r7, #4] LL_GPIO_Init(GPIOB, &GPIO_InitStruct); 80012c4: 463b mov r3, r7 80012c6: 4619 mov r1, r3 80012c8: 4819 ldr r0, [pc, #100] ; (8001330 ) 80012ca: f001 fb51 bl 8002970 /* USART3 interrupt Init */ NVIC_SetPriority(USART3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); 80012ce: f7ff fe15 bl 8000efc <__NVIC_GetPriorityGrouping> 80012d2: 4603 mov r3, r0 80012d4: 2200 movs r2, #0 80012d6: 2100 movs r1, #0 80012d8: 4618 mov r0, r3 80012da: f7ff fe63 bl 8000fa4 80012de: 4603 mov r3, r0 80012e0: 4619 mov r1, r3 80012e2: 2027 movs r0, #39 ; 0x27 80012e4: f7ff fe34 bl 8000f50 <__NVIC_SetPriority> NVIC_EnableIRQ(USART3_IRQn); 80012e8: 2027 movs r0, #39 ; 0x27 80012ea: f7ff fe15 bl 8000f18 <__NVIC_EnableIRQ> USART_InitStruct.BaudRate = 115200; 80012ee: f44f 33e1 mov.w r3, #115200 ; 0x1c200 80012f2: 617b str r3, [r7, #20] USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B; 80012f4: 2300 movs r3, #0 80012f6: 61bb str r3, [r7, #24] USART_InitStruct.StopBits = LL_USART_STOPBITS_1; 80012f8: 2300 movs r3, #0 80012fa: 61fb str r3, [r7, #28] USART_InitStruct.Parity = LL_USART_PARITY_NONE; 80012fc: 2300 movs r3, #0 80012fe: 623b str r3, [r7, #32] USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; 8001300: 230c movs r3, #12 8001302: 627b str r3, [r7, #36] ; 0x24 USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE; 8001304: 2300 movs r3, #0 8001306: 62bb str r3, [r7, #40] ; 0x28 USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16; 8001308: 2300 movs r3, #0 800130a: 62fb str r3, [r7, #44] ; 0x2c LL_USART_Init(USART3, &USART_InitStruct); 800130c: f107 0314 add.w r3, r7, #20 8001310: 4619 mov r1, r3 8001312: 4809 ldr r0, [pc, #36] ; (8001338 ) 8001314: f001 fde0 bl 8002ed8 LL_USART_ConfigAsyncMode(USART3); 8001318: 4807 ldr r0, [pc, #28] ; (8001338 ) 800131a: f7ff feb4 bl 8001086 LL_USART_Enable(USART3); 800131e: 4806 ldr r0, [pc, #24] ; (8001338 ) 8001320: f7ff fea2 bl 8001068 } 8001324: bf00 nop 8001326: 3730 adds r7, #48 ; 0x30 8001328: 46bd mov sp, r7 800132a: bd80 pop {r7, pc} 800132c: 04040004 .word 0x04040004 8001330: 40010c00 .word 0x40010c00 8001334: 04080008 .word 0x04080008 8001338: 40004800 .word 0x40004800 0800133c : .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: /* Copy the data segment initializers from flash to SRAM */ ldr r0, =_sdata 800133c: 480c ldr r0, [pc, #48] ; (8001370 ) ldr r1, =_edata 800133e: 490d ldr r1, [pc, #52] ; (8001374 ) ldr r2, =_sidata 8001340: 4a0d ldr r2, [pc, #52] ; (8001378 ) movs r3, #0 8001342: 2300 movs r3, #0 b LoopCopyDataInit 8001344: e002 b.n 800134c 08001346 : CopyDataInit: ldr r4, [r2, r3] 8001346: 58d4 ldr r4, [r2, r3] str r4, [r0, r3] 8001348: 50c4 str r4, [r0, r3] adds r3, r3, #4 800134a: 3304 adds r3, #4 0800134c : LoopCopyDataInit: adds r4, r0, r3 800134c: 18c4 adds r4, r0, r3 cmp r4, r1 800134e: 428c cmp r4, r1 bcc CopyDataInit 8001350: d3f9 bcc.n 8001346 /* Zero fill the bss segment. */ ldr r2, =_sbss 8001352: 4a0a ldr r2, [pc, #40] ; (800137c ) ldr r4, =_ebss 8001354: 4c0a ldr r4, [pc, #40] ; (8001380 ) movs r3, #0 8001356: 2300 movs r3, #0 b LoopFillZerobss 8001358: e001 b.n 800135e 0800135a : FillZerobss: str r3, [r2] 800135a: 6013 str r3, [r2, #0] adds r2, r2, #4 800135c: 3204 adds r2, #4 0800135e : LoopFillZerobss: cmp r2, r4 800135e: 42a2 cmp r2, r4 bcc FillZerobss 8001360: d3fb bcc.n 800135a /* Call the clock system intitialization function.*/ bl SystemInit 8001362: f7ff fca1 bl 8000ca8 /* Call static constructors */ bl __libc_init_array 8001366: f008 fa99 bl 800989c <__libc_init_array> /* Call the application's entry point.*/ bl main 800136a: f7ff fafd bl 8000968
bx lr 800136e: 4770 bx lr ldr r0, =_sdata 8001370: 20000000 .word 0x20000000 ldr r1, =_edata 8001374: 2000053c .word 0x2000053c ldr r2, =_sidata 8001378: 0800b094 .word 0x0800b094 ldr r2, =_sbss 800137c: 2000053c .word 0x2000053c ldr r4, =_ebss 8001380: 20003d30 .word 0x20003d30 08001384 : * @retval : None */ .section .text.Default_Handler,"ax",%progbits Default_Handler: Infinite_Loop: b Infinite_Loop 8001384: e7fe b.n 8001384 ... 08001388 : * 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) { 8001388: b580 push {r7, lr} 800138a: af00 add r7, sp, #0 defined(STM32F102x6) || defined(STM32F102xB) || \ defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || \ defined(STM32F105xC) || defined(STM32F107xC) /* Prefetch buffer is not available on value line devices */ __HAL_FLASH_PREFETCH_BUFFER_ENABLE(); 800138c: 4b08 ldr r3, [pc, #32] ; (80013b0 ) 800138e: 681b ldr r3, [r3, #0] 8001390: 4a07 ldr r2, [pc, #28] ; (80013b0 ) 8001392: f043 0310 orr.w r3, r3, #16 8001396: 6013 str r3, [r2, #0] #endif #endif /* PREFETCH_ENABLE */ /* Set Interrupt Group Priority */ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); 8001398: 2003 movs r0, #3 800139a: f000 ff79 bl 8002290 /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ HAL_InitTick(TICK_INT_PRIORITY); 800139e: 2000 movs r0, #0 80013a0: f000 f808 bl 80013b4 /* Init the low level hardware */ HAL_MspInit(); 80013a4: f7ff fb3e bl 8000a24 /* Return function status */ return HAL_OK; 80013a8: 2300 movs r3, #0 } 80013aa: 4618 mov r0, r3 80013ac: bd80 pop {r7, pc} 80013ae: bf00 nop 80013b0: 40022000 .word 0x40022000 080013b4 : * implementation in user file. * @param TickPriority Tick interrupt priority. * @retval HAL status */ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { 80013b4: b580 push {r7, lr} 80013b6: b082 sub sp, #8 80013b8: af00 add r7, sp, #0 80013ba: 6078 str r0, [r7, #4] /* Configure the SysTick to have interrupt in 1ms time basis*/ if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) 80013bc: 4b12 ldr r3, [pc, #72] ; (8001408 ) 80013be: 681a ldr r2, [r3, #0] 80013c0: 4b12 ldr r3, [pc, #72] ; (800140c ) 80013c2: 781b ldrb r3, [r3, #0] 80013c4: 4619 mov r1, r3 80013c6: f44f 737a mov.w r3, #1000 ; 0x3e8 80013ca: fbb3 f3f1 udiv r3, r3, r1 80013ce: fbb2 f3f3 udiv r3, r2, r3 80013d2: 4618 mov r0, r3 80013d4: f000 ff91 bl 80022fa 80013d8: 4603 mov r3, r0 80013da: 2b00 cmp r3, #0 80013dc: d001 beq.n 80013e2 { return HAL_ERROR; 80013de: 2301 movs r3, #1 80013e0: e00e b.n 8001400 } /* Configure the SysTick IRQ priority */ if (TickPriority < (1UL << __NVIC_PRIO_BITS)) 80013e2: 687b ldr r3, [r7, #4] 80013e4: 2b0f cmp r3, #15 80013e6: d80a bhi.n 80013fe { HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); 80013e8: 2200 movs r2, #0 80013ea: 6879 ldr r1, [r7, #4] 80013ec: f04f 30ff mov.w r0, #4294967295 80013f0: f000 ff59 bl 80022a6 uwTickPrio = TickPriority; 80013f4: 4a06 ldr r2, [pc, #24] ; (8001410 ) 80013f6: 687b ldr r3, [r7, #4] 80013f8: 6013 str r3, [r2, #0] { return HAL_ERROR; } /* Return function status */ return HAL_OK; 80013fa: 2300 movs r3, #0 80013fc: e000 b.n 8001400 return HAL_ERROR; 80013fe: 2301 movs r3, #1 } 8001400: 4618 mov r0, r3 8001402: 3708 adds r7, #8 8001404: 46bd mov sp, r7 8001406: bd80 pop {r7, pc} 8001408: 20000000 .word 0x20000000 800140c: 20000008 .word 0x20000008 8001410: 20000004 .word 0x20000004 08001414 : * @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) { 8001414: b480 push {r7} 8001416: af00 add r7, sp, #0 uwTick += uwTickFreq; 8001418: 4b05 ldr r3, [pc, #20] ; (8001430 ) 800141a: 781b ldrb r3, [r3, #0] 800141c: 461a mov r2, r3 800141e: 4b05 ldr r3, [pc, #20] ; (8001434 ) 8001420: 681b ldr r3, [r3, #0] 8001422: 4413 add r3, r2 8001424: 4a03 ldr r2, [pc, #12] ; (8001434 ) 8001426: 6013 str r3, [r2, #0] } 8001428: bf00 nop 800142a: 46bd mov sp, r7 800142c: bc80 pop {r7} 800142e: 4770 bx lr 8001430: 20000008 .word 0x20000008 8001434: 200005b4 .word 0x200005b4 08001438 : * @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) { 8001438: b480 push {r7} 800143a: af00 add r7, sp, #0 return uwTick; 800143c: 4b02 ldr r3, [pc, #8] ; (8001448 ) 800143e: 681b ldr r3, [r3, #0] } 8001440: 4618 mov r0, r3 8001442: 46bd mov sp, r7 8001444: bc80 pop {r7} 8001446: 4770 bx lr 8001448: 200005b4 .word 0x200005b4 0800144c : * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL status */ HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) { 800144c: b580 push {r7, lr} 800144e: b084 sub sp, #16 8001450: af00 add r7, sp, #0 8001452: 6078 str r0, [r7, #4] uint32_t tickstart; /* Check CAN handle */ if (hcan == NULL) 8001454: 687b ldr r3, [r7, #4] 8001456: 2b00 cmp r3, #0 8001458: d101 bne.n 800145e { return HAL_ERROR; 800145a: 2301 movs r3, #1 800145c: e0ed b.n 800163a /* Init the low level hardware: CLOCK, NVIC */ hcan->MspInitCallback(hcan); } #else if (hcan->State == HAL_CAN_STATE_RESET) 800145e: 687b ldr r3, [r7, #4] 8001460: f893 3020 ldrb.w r3, [r3, #32] 8001464: b2db uxtb r3, r3 8001466: 2b00 cmp r3, #0 8001468: d102 bne.n 8001470 { /* Init the low level hardware: CLOCK, NVIC */ HAL_CAN_MspInit(hcan); 800146a: 6878 ldr r0, [r7, #4] 800146c: f7fe ff1a bl 80002a4 } #endif /* (USE_HAL_CAN_REGISTER_CALLBACKS) */ /* Request initialisation */ SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); 8001470: 687b ldr r3, [r7, #4] 8001472: 681b ldr r3, [r3, #0] 8001474: 681a ldr r2, [r3, #0] 8001476: 687b ldr r3, [r7, #4] 8001478: 681b ldr r3, [r3, #0] 800147a: f042 0201 orr.w r2, r2, #1 800147e: 601a str r2, [r3, #0] /* Get tick */ tickstart = HAL_GetTick(); 8001480: f7ff ffda bl 8001438 8001484: 60f8 str r0, [r7, #12] /* Wait initialisation acknowledge */ while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) 8001486: e012 b.n 80014ae { if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) 8001488: f7ff ffd6 bl 8001438 800148c: 4602 mov r2, r0 800148e: 68fb ldr r3, [r7, #12] 8001490: 1ad3 subs r3, r2, r3 8001492: 2b0a cmp r3, #10 8001494: d90b bls.n 80014ae { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; 8001496: 687b ldr r3, [r7, #4] 8001498: 6a5b ldr r3, [r3, #36] ; 0x24 800149a: f443 3200 orr.w r2, r3, #131072 ; 0x20000 800149e: 687b ldr r3, [r7, #4] 80014a0: 625a str r2, [r3, #36] ; 0x24 /* Change CAN state */ hcan->State = HAL_CAN_STATE_ERROR; 80014a2: 687b ldr r3, [r7, #4] 80014a4: 2205 movs r2, #5 80014a6: f883 2020 strb.w r2, [r3, #32] return HAL_ERROR; 80014aa: 2301 movs r3, #1 80014ac: e0c5 b.n 800163a while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) 80014ae: 687b ldr r3, [r7, #4] 80014b0: 681b ldr r3, [r3, #0] 80014b2: 685b ldr r3, [r3, #4] 80014b4: f003 0301 and.w r3, r3, #1 80014b8: 2b00 cmp r3, #0 80014ba: d0e5 beq.n 8001488 } } /* Exit from sleep mode */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); 80014bc: 687b ldr r3, [r7, #4] 80014be: 681b ldr r3, [r3, #0] 80014c0: 681a ldr r2, [r3, #0] 80014c2: 687b ldr r3, [r7, #4] 80014c4: 681b ldr r3, [r3, #0] 80014c6: f022 0202 bic.w r2, r2, #2 80014ca: 601a str r2, [r3, #0] /* Get tick */ tickstart = HAL_GetTick(); 80014cc: f7ff ffb4 bl 8001438 80014d0: 60f8 str r0, [r7, #12] /* Check Sleep mode leave acknowledge */ while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) 80014d2: e012 b.n 80014fa { if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) 80014d4: f7ff ffb0 bl 8001438 80014d8: 4602 mov r2, r0 80014da: 68fb ldr r3, [r7, #12] 80014dc: 1ad3 subs r3, r2, r3 80014de: 2b0a cmp r3, #10 80014e0: d90b bls.n 80014fa { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; 80014e2: 687b ldr r3, [r7, #4] 80014e4: 6a5b ldr r3, [r3, #36] ; 0x24 80014e6: f443 3200 orr.w r2, r3, #131072 ; 0x20000 80014ea: 687b ldr r3, [r7, #4] 80014ec: 625a str r2, [r3, #36] ; 0x24 /* Change CAN state */ hcan->State = HAL_CAN_STATE_ERROR; 80014ee: 687b ldr r3, [r7, #4] 80014f0: 2205 movs r2, #5 80014f2: f883 2020 strb.w r2, [r3, #32] return HAL_ERROR; 80014f6: 2301 movs r3, #1 80014f8: e09f b.n 800163a while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) 80014fa: 687b ldr r3, [r7, #4] 80014fc: 681b ldr r3, [r3, #0] 80014fe: 685b ldr r3, [r3, #4] 8001500: f003 0302 and.w r3, r3, #2 8001504: 2b00 cmp r3, #0 8001506: d1e5 bne.n 80014d4 } } /* Set the time triggered communication mode */ if (hcan->Init.TimeTriggeredMode == ENABLE) 8001508: 687b ldr r3, [r7, #4] 800150a: 7e1b ldrb r3, [r3, #24] 800150c: 2b01 cmp r3, #1 800150e: d108 bne.n 8001522 { SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); 8001510: 687b ldr r3, [r7, #4] 8001512: 681b ldr r3, [r3, #0] 8001514: 681a ldr r2, [r3, #0] 8001516: 687b ldr r3, [r7, #4] 8001518: 681b ldr r3, [r3, #0] 800151a: f042 0280 orr.w r2, r2, #128 ; 0x80 800151e: 601a str r2, [r3, #0] 8001520: e007 b.n 8001532 } else { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); 8001522: 687b ldr r3, [r7, #4] 8001524: 681b ldr r3, [r3, #0] 8001526: 681a ldr r2, [r3, #0] 8001528: 687b ldr r3, [r7, #4] 800152a: 681b ldr r3, [r3, #0] 800152c: f022 0280 bic.w r2, r2, #128 ; 0x80 8001530: 601a str r2, [r3, #0] } /* Set the automatic bus-off management */ if (hcan->Init.AutoBusOff == ENABLE) 8001532: 687b ldr r3, [r7, #4] 8001534: 7e5b ldrb r3, [r3, #25] 8001536: 2b01 cmp r3, #1 8001538: d108 bne.n 800154c { SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); 800153a: 687b ldr r3, [r7, #4] 800153c: 681b ldr r3, [r3, #0] 800153e: 681a ldr r2, [r3, #0] 8001540: 687b ldr r3, [r7, #4] 8001542: 681b ldr r3, [r3, #0] 8001544: f042 0240 orr.w r2, r2, #64 ; 0x40 8001548: 601a str r2, [r3, #0] 800154a: e007 b.n 800155c } else { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); 800154c: 687b ldr r3, [r7, #4] 800154e: 681b ldr r3, [r3, #0] 8001550: 681a ldr r2, [r3, #0] 8001552: 687b ldr r3, [r7, #4] 8001554: 681b ldr r3, [r3, #0] 8001556: f022 0240 bic.w r2, r2, #64 ; 0x40 800155a: 601a str r2, [r3, #0] } /* Set the automatic wake-up mode */ if (hcan->Init.AutoWakeUp == ENABLE) 800155c: 687b ldr r3, [r7, #4] 800155e: 7e9b ldrb r3, [r3, #26] 8001560: 2b01 cmp r3, #1 8001562: d108 bne.n 8001576 { SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); 8001564: 687b ldr r3, [r7, #4] 8001566: 681b ldr r3, [r3, #0] 8001568: 681a ldr r2, [r3, #0] 800156a: 687b ldr r3, [r7, #4] 800156c: 681b ldr r3, [r3, #0] 800156e: f042 0220 orr.w r2, r2, #32 8001572: 601a str r2, [r3, #0] 8001574: e007 b.n 8001586 } else { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); 8001576: 687b ldr r3, [r7, #4] 8001578: 681b ldr r3, [r3, #0] 800157a: 681a ldr r2, [r3, #0] 800157c: 687b ldr r3, [r7, #4] 800157e: 681b ldr r3, [r3, #0] 8001580: f022 0220 bic.w r2, r2, #32 8001584: 601a str r2, [r3, #0] } /* Set the automatic retransmission */ if (hcan->Init.AutoRetransmission == ENABLE) 8001586: 687b ldr r3, [r7, #4] 8001588: 7edb ldrb r3, [r3, #27] 800158a: 2b01 cmp r3, #1 800158c: d108 bne.n 80015a0 { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); 800158e: 687b ldr r3, [r7, #4] 8001590: 681b ldr r3, [r3, #0] 8001592: 681a ldr r2, [r3, #0] 8001594: 687b ldr r3, [r7, #4] 8001596: 681b ldr r3, [r3, #0] 8001598: f022 0210 bic.w r2, r2, #16 800159c: 601a str r2, [r3, #0] 800159e: e007 b.n 80015b0 } else { SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); 80015a0: 687b ldr r3, [r7, #4] 80015a2: 681b ldr r3, [r3, #0] 80015a4: 681a ldr r2, [r3, #0] 80015a6: 687b ldr r3, [r7, #4] 80015a8: 681b ldr r3, [r3, #0] 80015aa: f042 0210 orr.w r2, r2, #16 80015ae: 601a str r2, [r3, #0] } /* Set the receive FIFO locked mode */ if (hcan->Init.ReceiveFifoLocked == ENABLE) 80015b0: 687b ldr r3, [r7, #4] 80015b2: 7f1b ldrb r3, [r3, #28] 80015b4: 2b01 cmp r3, #1 80015b6: d108 bne.n 80015ca { SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); 80015b8: 687b ldr r3, [r7, #4] 80015ba: 681b ldr r3, [r3, #0] 80015bc: 681a ldr r2, [r3, #0] 80015be: 687b ldr r3, [r7, #4] 80015c0: 681b ldr r3, [r3, #0] 80015c2: f042 0208 orr.w r2, r2, #8 80015c6: 601a str r2, [r3, #0] 80015c8: e007 b.n 80015da } else { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); 80015ca: 687b ldr r3, [r7, #4] 80015cc: 681b ldr r3, [r3, #0] 80015ce: 681a ldr r2, [r3, #0] 80015d0: 687b ldr r3, [r7, #4] 80015d2: 681b ldr r3, [r3, #0] 80015d4: f022 0208 bic.w r2, r2, #8 80015d8: 601a str r2, [r3, #0] } /* Set the transmit FIFO priority */ if (hcan->Init.TransmitFifoPriority == ENABLE) 80015da: 687b ldr r3, [r7, #4] 80015dc: 7f5b ldrb r3, [r3, #29] 80015de: 2b01 cmp r3, #1 80015e0: d108 bne.n 80015f4 { SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); 80015e2: 687b ldr r3, [r7, #4] 80015e4: 681b ldr r3, [r3, #0] 80015e6: 681a ldr r2, [r3, #0] 80015e8: 687b ldr r3, [r7, #4] 80015ea: 681b ldr r3, [r3, #0] 80015ec: f042 0204 orr.w r2, r2, #4 80015f0: 601a str r2, [r3, #0] 80015f2: e007 b.n 8001604 } else { CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); 80015f4: 687b ldr r3, [r7, #4] 80015f6: 681b ldr r3, [r3, #0] 80015f8: 681a ldr r2, [r3, #0] 80015fa: 687b ldr r3, [r7, #4] 80015fc: 681b ldr r3, [r3, #0] 80015fe: f022 0204 bic.w r2, r2, #4 8001602: 601a str r2, [r3, #0] } /* Set the bit timing register */ WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | 8001604: 687b ldr r3, [r7, #4] 8001606: 689a ldr r2, [r3, #8] 8001608: 687b ldr r3, [r7, #4] 800160a: 68db ldr r3, [r3, #12] 800160c: 431a orrs r2, r3 800160e: 687b ldr r3, [r7, #4] 8001610: 691b ldr r3, [r3, #16] 8001612: 431a orrs r2, r3 8001614: 687b ldr r3, [r7, #4] 8001616: 695b ldr r3, [r3, #20] 8001618: ea42 0103 orr.w r1, r2, r3 800161c: 687b ldr r3, [r7, #4] 800161e: 685b ldr r3, [r3, #4] 8001620: 1e5a subs r2, r3, #1 8001622: 687b ldr r3, [r7, #4] 8001624: 681b ldr r3, [r3, #0] 8001626: 430a orrs r2, r1 8001628: 61da str r2, [r3, #28] hcan->Init.TimeSeg1 | hcan->Init.TimeSeg2 | (hcan->Init.Prescaler - 1U))); /* Initialize the error code */ hcan->ErrorCode = HAL_CAN_ERROR_NONE; 800162a: 687b ldr r3, [r7, #4] 800162c: 2200 movs r2, #0 800162e: 625a str r2, [r3, #36] ; 0x24 /* Initialize the CAN state */ hcan->State = HAL_CAN_STATE_READY; 8001630: 687b ldr r3, [r7, #4] 8001632: 2201 movs r2, #1 8001634: f883 2020 strb.w r2, [r3, #32] /* Return function status */ return HAL_OK; 8001638: 2300 movs r3, #0 } 800163a: 4618 mov r0, r3 800163c: 3710 adds r7, #16 800163e: 46bd mov sp, r7 8001640: bd80 pop {r7, pc} 08001642 : * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that * contains the filter configuration information. * @retval None */ HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterTypeDef *sFilterConfig) { 8001642: b480 push {r7} 8001644: b087 sub sp, #28 8001646: af00 add r7, sp, #0 8001648: 6078 str r0, [r7, #4] 800164a: 6039 str r1, [r7, #0] uint32_t filternbrbitpos; CAN_TypeDef *can_ip = hcan->Instance; 800164c: 687b ldr r3, [r7, #4] 800164e: 681b ldr r3, [r3, #0] 8001650: 617b str r3, [r7, #20] HAL_CAN_StateTypeDef state = hcan->State; 8001652: 687b ldr r3, [r7, #4] 8001654: f893 3020 ldrb.w r3, [r3, #32] 8001658: 74fb strb r3, [r7, #19] if ((state == HAL_CAN_STATE_READY) || 800165a: 7cfb ldrb r3, [r7, #19] 800165c: 2b01 cmp r3, #1 800165e: d003 beq.n 8001668 8001660: 7cfb ldrb r3, [r7, #19] 8001662: 2b02 cmp r3, #2 8001664: f040 80aa bne.w 80017bc /* Check the parameters */ assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); #endif /* Initialisation mode for the filter */ SET_BIT(can_ip->FMR, CAN_FMR_FINIT); 8001668: 697b ldr r3, [r7, #20] 800166a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 800166e: f043 0201 orr.w r2, r3, #1 8001672: 697b ldr r3, [r7, #20] 8001674: f8c3 2200 str.w r2, [r3, #512] ; 0x200 CLEAR_BIT(can_ip->FMR, CAN_FMR_CAN2SB); SET_BIT(can_ip->FMR, sFilterConfig->SlaveStartFilterBank << CAN_FMR_CAN2SB_Pos); #endif /* Convert filter number into bit position */ filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); 8001678: 683b ldr r3, [r7, #0] 800167a: 695b ldr r3, [r3, #20] 800167c: f003 031f and.w r3, r3, #31 8001680: 2201 movs r2, #1 8001682: fa02 f303 lsl.w r3, r2, r3 8001686: 60fb str r3, [r7, #12] /* Filter Deactivation */ CLEAR_BIT(can_ip->FA1R, filternbrbitpos); 8001688: 697b ldr r3, [r7, #20] 800168a: f8d3 221c ldr.w r2, [r3, #540] ; 0x21c 800168e: 68fb ldr r3, [r7, #12] 8001690: 43db mvns r3, r3 8001692: 401a ands r2, r3 8001694: 697b ldr r3, [r7, #20] 8001696: f8c3 221c str.w r2, [r3, #540] ; 0x21c /* Filter Scale */ if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) 800169a: 683b ldr r3, [r7, #0] 800169c: 69db ldr r3, [r3, #28] 800169e: 2b00 cmp r3, #0 80016a0: d123 bne.n 80016ea { /* 16-bit scale for the filter */ CLEAR_BIT(can_ip->FS1R, filternbrbitpos); 80016a2: 697b ldr r3, [r7, #20] 80016a4: f8d3 220c ldr.w r2, [r3, #524] ; 0x20c 80016a8: 68fb ldr r3, [r7, #12] 80016aa: 43db mvns r3, r3 80016ac: 401a ands r2, r3 80016ae: 697b ldr r3, [r7, #20] 80016b0: f8c3 220c str.w r2, [r3, #524] ; 0x20c /* First 16-bit identifier and First 16-bit mask */ /* Or First 16-bit identifier and Second 16-bit identifier */ can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | 80016b4: 683b ldr r3, [r7, #0] 80016b6: 68db ldr r3, [r3, #12] 80016b8: 0419 lsls r1, r3, #16 (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); 80016ba: 683b ldr r3, [r7, #0] 80016bc: 685b ldr r3, [r3, #4] 80016be: b29b uxth r3, r3 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = 80016c0: 683a ldr r2, [r7, #0] 80016c2: 6952 ldr r2, [r2, #20] ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | 80016c4: 4319 orrs r1, r3 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = 80016c6: 697b ldr r3, [r7, #20] 80016c8: 3248 adds r2, #72 ; 0x48 80016ca: f843 1032 str.w r1, [r3, r2, lsl #3] /* Second 16-bit identifier and Second 16-bit mask */ /* Or Third 16-bit identifier and Fourth 16-bit identifier */ can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | 80016ce: 683b ldr r3, [r7, #0] 80016d0: 689b ldr r3, [r3, #8] 80016d2: 0419 lsls r1, r3, #16 (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); 80016d4: 683b ldr r3, [r7, #0] 80016d6: 681b ldr r3, [r3, #0] 80016d8: b29a uxth r2, r3 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = 80016da: 683b ldr r3, [r7, #0] 80016dc: 695b ldr r3, [r3, #20] ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | 80016de: 430a orrs r2, r1 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = 80016e0: 6979 ldr r1, [r7, #20] 80016e2: 3348 adds r3, #72 ; 0x48 80016e4: 00db lsls r3, r3, #3 80016e6: 440b add r3, r1 80016e8: 605a str r2, [r3, #4] } if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) 80016ea: 683b ldr r3, [r7, #0] 80016ec: 69db ldr r3, [r3, #28] 80016ee: 2b01 cmp r3, #1 80016f0: d122 bne.n 8001738 { /* 32-bit scale for the filter */ SET_BIT(can_ip->FS1R, filternbrbitpos); 80016f2: 697b ldr r3, [r7, #20] 80016f4: f8d3 220c ldr.w r2, [r3, #524] ; 0x20c 80016f8: 68fb ldr r3, [r7, #12] 80016fa: 431a orrs r2, r3 80016fc: 697b ldr r3, [r7, #20] 80016fe: f8c3 220c str.w r2, [r3, #524] ; 0x20c /* 32-bit identifier or First 32-bit identifier */ can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | 8001702: 683b ldr r3, [r7, #0] 8001704: 681b ldr r3, [r3, #0] 8001706: 0419 lsls r1, r3, #16 (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); 8001708: 683b ldr r3, [r7, #0] 800170a: 685b ldr r3, [r3, #4] 800170c: b29b uxth r3, r3 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = 800170e: 683a ldr r2, [r7, #0] 8001710: 6952 ldr r2, [r2, #20] ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | 8001712: 4319 orrs r1, r3 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = 8001714: 697b ldr r3, [r7, #20] 8001716: 3248 adds r2, #72 ; 0x48 8001718: f843 1032 str.w r1, [r3, r2, lsl #3] /* 32-bit mask or Second 32-bit identifier */ can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | 800171c: 683b ldr r3, [r7, #0] 800171e: 689b ldr r3, [r3, #8] 8001720: 0419 lsls r1, r3, #16 (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); 8001722: 683b ldr r3, [r7, #0] 8001724: 68db ldr r3, [r3, #12] 8001726: b29a uxth r2, r3 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = 8001728: 683b ldr r3, [r7, #0] 800172a: 695b ldr r3, [r3, #20] ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | 800172c: 430a orrs r2, r1 can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = 800172e: 6979 ldr r1, [r7, #20] 8001730: 3348 adds r3, #72 ; 0x48 8001732: 00db lsls r3, r3, #3 8001734: 440b add r3, r1 8001736: 605a str r2, [r3, #4] } /* Filter Mode */ if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) 8001738: 683b ldr r3, [r7, #0] 800173a: 699b ldr r3, [r3, #24] 800173c: 2b00 cmp r3, #0 800173e: d109 bne.n 8001754 { /* Id/Mask mode for the filter*/ CLEAR_BIT(can_ip->FM1R, filternbrbitpos); 8001740: 697b ldr r3, [r7, #20] 8001742: f8d3 2204 ldr.w r2, [r3, #516] ; 0x204 8001746: 68fb ldr r3, [r7, #12] 8001748: 43db mvns r3, r3 800174a: 401a ands r2, r3 800174c: 697b ldr r3, [r7, #20] 800174e: f8c3 2204 str.w r2, [r3, #516] ; 0x204 8001752: e007 b.n 8001764 } else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ { /* Identifier list mode for the filter*/ SET_BIT(can_ip->FM1R, filternbrbitpos); 8001754: 697b ldr r3, [r7, #20] 8001756: f8d3 2204 ldr.w r2, [r3, #516] ; 0x204 800175a: 68fb ldr r3, [r7, #12] 800175c: 431a orrs r2, r3 800175e: 697b ldr r3, [r7, #20] 8001760: f8c3 2204 str.w r2, [r3, #516] ; 0x204 } /* Filter FIFO assignment */ if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) 8001764: 683b ldr r3, [r7, #0] 8001766: 691b ldr r3, [r3, #16] 8001768: 2b00 cmp r3, #0 800176a: d109 bne.n 8001780 { /* FIFO 0 assignation for the filter */ CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); 800176c: 697b ldr r3, [r7, #20] 800176e: f8d3 2214 ldr.w r2, [r3, #532] ; 0x214 8001772: 68fb ldr r3, [r7, #12] 8001774: 43db mvns r3, r3 8001776: 401a ands r2, r3 8001778: 697b ldr r3, [r7, #20] 800177a: f8c3 2214 str.w r2, [r3, #532] ; 0x214 800177e: e007 b.n 8001790 } else { /* FIFO 1 assignation for the filter */ SET_BIT(can_ip->FFA1R, filternbrbitpos); 8001780: 697b ldr r3, [r7, #20] 8001782: f8d3 2214 ldr.w r2, [r3, #532] ; 0x214 8001786: 68fb ldr r3, [r7, #12] 8001788: 431a orrs r2, r3 800178a: 697b ldr r3, [r7, #20] 800178c: f8c3 2214 str.w r2, [r3, #532] ; 0x214 } /* Filter activation */ if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) 8001790: 683b ldr r3, [r7, #0] 8001792: 6a1b ldr r3, [r3, #32] 8001794: 2b01 cmp r3, #1 8001796: d107 bne.n 80017a8 { SET_BIT(can_ip->FA1R, filternbrbitpos); 8001798: 697b ldr r3, [r7, #20] 800179a: f8d3 221c ldr.w r2, [r3, #540] ; 0x21c 800179e: 68fb ldr r3, [r7, #12] 80017a0: 431a orrs r2, r3 80017a2: 697b ldr r3, [r7, #20] 80017a4: f8c3 221c str.w r2, [r3, #540] ; 0x21c } /* Leave the initialisation mode for the filter */ CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); 80017a8: 697b ldr r3, [r7, #20] 80017aa: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 80017ae: f023 0201 bic.w r2, r3, #1 80017b2: 697b ldr r3, [r7, #20] 80017b4: f8c3 2200 str.w r2, [r3, #512] ; 0x200 /* Return function status */ return HAL_OK; 80017b8: 2300 movs r3, #0 80017ba: e006 b.n 80017ca } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; 80017bc: 687b ldr r3, [r7, #4] 80017be: 6a5b ldr r3, [r3, #36] ; 0x24 80017c0: f443 2280 orr.w r2, r3, #262144 ; 0x40000 80017c4: 687b ldr r3, [r7, #4] 80017c6: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 80017c8: 2301 movs r3, #1 } } 80017ca: 4618 mov r0, r3 80017cc: 371c adds r7, #28 80017ce: 46bd mov sp, r7 80017d0: bc80 pop {r7} 80017d2: 4770 bx lr 080017d4 : * @param hcan pointer to an CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval HAL status */ HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) { 80017d4: b580 push {r7, lr} 80017d6: b084 sub sp, #16 80017d8: af00 add r7, sp, #0 80017da: 6078 str r0, [r7, #4] uint32_t tickstart; if (hcan->State == HAL_CAN_STATE_READY) 80017dc: 687b ldr r3, [r7, #4] 80017de: f893 3020 ldrb.w r3, [r3, #32] 80017e2: b2db uxtb r3, r3 80017e4: 2b01 cmp r3, #1 80017e6: d12e bne.n 8001846 { /* Change CAN peripheral state */ hcan->State = HAL_CAN_STATE_LISTENING; 80017e8: 687b ldr r3, [r7, #4] 80017ea: 2202 movs r2, #2 80017ec: f883 2020 strb.w r2, [r3, #32] /* Request leave initialisation */ CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); 80017f0: 687b ldr r3, [r7, #4] 80017f2: 681b ldr r3, [r3, #0] 80017f4: 681a ldr r2, [r3, #0] 80017f6: 687b ldr r3, [r7, #4] 80017f8: 681b ldr r3, [r3, #0] 80017fa: f022 0201 bic.w r2, r2, #1 80017fe: 601a str r2, [r3, #0] /* Get tick */ tickstart = HAL_GetTick(); 8001800: f7ff fe1a bl 8001438 8001804: 60f8 str r0, [r7, #12] /* Wait the acknowledge */ while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) 8001806: e012 b.n 800182e { /* Check for the Timeout */ if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) 8001808: f7ff fe16 bl 8001438 800180c: 4602 mov r2, r0 800180e: 68fb ldr r3, [r7, #12] 8001810: 1ad3 subs r3, r2, r3 8001812: 2b0a cmp r3, #10 8001814: d90b bls.n 800182e { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; 8001816: 687b ldr r3, [r7, #4] 8001818: 6a5b ldr r3, [r3, #36] ; 0x24 800181a: f443 3200 orr.w r2, r3, #131072 ; 0x20000 800181e: 687b ldr r3, [r7, #4] 8001820: 625a str r2, [r3, #36] ; 0x24 /* Change CAN state */ hcan->State = HAL_CAN_STATE_ERROR; 8001822: 687b ldr r3, [r7, #4] 8001824: 2205 movs r2, #5 8001826: f883 2020 strb.w r2, [r3, #32] return HAL_ERROR; 800182a: 2301 movs r3, #1 800182c: e012 b.n 8001854 while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) 800182e: 687b ldr r3, [r7, #4] 8001830: 681b ldr r3, [r3, #0] 8001832: 685b ldr r3, [r3, #4] 8001834: f003 0301 and.w r3, r3, #1 8001838: 2b00 cmp r3, #0 800183a: d1e5 bne.n 8001808 } } /* Reset the CAN ErrorCode */ hcan->ErrorCode = HAL_CAN_ERROR_NONE; 800183c: 687b ldr r3, [r7, #4] 800183e: 2200 movs r2, #0 8001840: 625a str r2, [r3, #36] ; 0x24 /* Return function status */ return HAL_OK; 8001842: 2300 movs r3, #0 8001844: e006 b.n 8001854 } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; 8001846: 687b ldr r3, [r7, #4] 8001848: 6a5b ldr r3, [r3, #36] ; 0x24 800184a: f443 2200 orr.w r2, r3, #524288 ; 0x80000 800184e: 687b ldr r3, [r7, #4] 8001850: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001852: 2301 movs r3, #1 } } 8001854: 4618 mov r0, r3 8001856: 3710 adds r7, #16 8001858: 46bd mov sp, r7 800185a: bd80 pop {r7, pc} 0800185c : * the TxMailbox used to store the Tx message. * This parameter can be a value of @arg CAN_Tx_Mailboxes. * @retval HAL status */ HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) { 800185c: b480 push {r7} 800185e: b089 sub sp, #36 ; 0x24 8001860: af00 add r7, sp, #0 8001862: 60f8 str r0, [r7, #12] 8001864: 60b9 str r1, [r7, #8] 8001866: 607a str r2, [r7, #4] 8001868: 603b str r3, [r7, #0] uint32_t transmitmailbox; HAL_CAN_StateTypeDef state = hcan->State; 800186a: 68fb ldr r3, [r7, #12] 800186c: f893 3020 ldrb.w r3, [r3, #32] 8001870: 77fb strb r3, [r7, #31] uint32_t tsr = READ_REG(hcan->Instance->TSR); 8001872: 68fb ldr r3, [r7, #12] 8001874: 681b ldr r3, [r3, #0] 8001876: 689b ldr r3, [r3, #8] 8001878: 61bb str r3, [r7, #24] { assert_param(IS_CAN_EXTID(pHeader->ExtId)); } assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); if ((state == HAL_CAN_STATE_READY) || 800187a: 7ffb ldrb r3, [r7, #31] 800187c: 2b01 cmp r3, #1 800187e: d003 beq.n 8001888 8001880: 7ffb ldrb r3, [r7, #31] 8001882: 2b02 cmp r3, #2 8001884: f040 80b8 bne.w 80019f8 (state == HAL_CAN_STATE_LISTENING)) { /* Check that all the Tx mailboxes are not full */ if (((tsr & CAN_TSR_TME0) != 0U) || 8001888: 69bb ldr r3, [r7, #24] 800188a: f003 6380 and.w r3, r3, #67108864 ; 0x4000000 800188e: 2b00 cmp r3, #0 8001890: d10a bne.n 80018a8 ((tsr & CAN_TSR_TME1) != 0U) || 8001892: 69bb ldr r3, [r7, #24] 8001894: f003 6300 and.w r3, r3, #134217728 ; 0x8000000 if (((tsr & CAN_TSR_TME0) != 0U) || 8001898: 2b00 cmp r3, #0 800189a: d105 bne.n 80018a8 ((tsr & CAN_TSR_TME2) != 0U)) 800189c: 69bb ldr r3, [r7, #24] 800189e: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 ((tsr & CAN_TSR_TME1) != 0U) || 80018a2: 2b00 cmp r3, #0 80018a4: f000 80a0 beq.w 80019e8 { /* Select an empty transmit mailbox */ transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; 80018a8: 69bb ldr r3, [r7, #24] 80018aa: 0e1b lsrs r3, r3, #24 80018ac: f003 0303 and.w r3, r3, #3 80018b0: 617b str r3, [r7, #20] /* Check transmit mailbox value */ if (transmitmailbox > 2U) 80018b2: 697b ldr r3, [r7, #20] 80018b4: 2b02 cmp r3, #2 80018b6: d907 bls.n 80018c8 { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_INTERNAL; 80018b8: 68fb ldr r3, [r7, #12] 80018ba: 6a5b ldr r3, [r3, #36] ; 0x24 80018bc: f443 0200 orr.w r2, r3, #8388608 ; 0x800000 80018c0: 68fb ldr r3, [r7, #12] 80018c2: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 80018c4: 2301 movs r3, #1 80018c6: e09e b.n 8001a06 } /* Store the Tx mailbox */ *pTxMailbox = (uint32_t)1 << transmitmailbox; 80018c8: 2201 movs r2, #1 80018ca: 697b ldr r3, [r7, #20] 80018cc: 409a lsls r2, r3 80018ce: 683b ldr r3, [r7, #0] 80018d0: 601a str r2, [r3, #0] /* Set up the Id */ if (pHeader->IDE == CAN_ID_STD) 80018d2: 68bb ldr r3, [r7, #8] 80018d4: 689b ldr r3, [r3, #8] 80018d6: 2b00 cmp r3, #0 80018d8: d10d bne.n 80018f6 { hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | 80018da: 68bb ldr r3, [r7, #8] 80018dc: 681b ldr r3, [r3, #0] 80018de: 055a lsls r2, r3, #21 pHeader->RTR); 80018e0: 68bb ldr r3, [r7, #8] 80018e2: 68db ldr r3, [r3, #12] hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | 80018e4: 68f9 ldr r1, [r7, #12] 80018e6: 6809 ldr r1, [r1, #0] 80018e8: 431a orrs r2, r3 80018ea: 697b ldr r3, [r7, #20] 80018ec: 3318 adds r3, #24 80018ee: 011b lsls r3, r3, #4 80018f0: 440b add r3, r1 80018f2: 601a str r2, [r3, #0] 80018f4: e00f b.n 8001916 } else { hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | 80018f6: 68bb ldr r3, [r7, #8] 80018f8: 685b ldr r3, [r3, #4] 80018fa: 00da lsls r2, r3, #3 pHeader->IDE | 80018fc: 68bb ldr r3, [r7, #8] 80018fe: 689b ldr r3, [r3, #8] hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | 8001900: 431a orrs r2, r3 pHeader->RTR); 8001902: 68bb ldr r3, [r7, #8] 8001904: 68db ldr r3, [r3, #12] hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | 8001906: 68f9 ldr r1, [r7, #12] 8001908: 6809 ldr r1, [r1, #0] pHeader->IDE | 800190a: 431a orrs r2, r3 hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | 800190c: 697b ldr r3, [r7, #20] 800190e: 3318 adds r3, #24 8001910: 011b lsls r3, r3, #4 8001912: 440b add r3, r1 8001914: 601a str r2, [r3, #0] } /* Set up the DLC */ hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); 8001916: 68fb ldr r3, [r7, #12] 8001918: 6819 ldr r1, [r3, #0] 800191a: 68bb ldr r3, [r7, #8] 800191c: 691a ldr r2, [r3, #16] 800191e: 697b ldr r3, [r7, #20] 8001920: 3318 adds r3, #24 8001922: 011b lsls r3, r3, #4 8001924: 440b add r3, r1 8001926: 3304 adds r3, #4 8001928: 601a str r2, [r3, #0] /* Set up the Transmit Global Time mode */ if (pHeader->TransmitGlobalTime == ENABLE) 800192a: 68bb ldr r3, [r7, #8] 800192c: 7d1b ldrb r3, [r3, #20] 800192e: 2b01 cmp r3, #1 8001930: d111 bne.n 8001956 { SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); 8001932: 68fb ldr r3, [r7, #12] 8001934: 681a ldr r2, [r3, #0] 8001936: 697b ldr r3, [r7, #20] 8001938: 3318 adds r3, #24 800193a: 011b lsls r3, r3, #4 800193c: 4413 add r3, r2 800193e: 3304 adds r3, #4 8001940: 681b ldr r3, [r3, #0] 8001942: 68fa ldr r2, [r7, #12] 8001944: 6811 ldr r1, [r2, #0] 8001946: f443 7280 orr.w r2, r3, #256 ; 0x100 800194a: 697b ldr r3, [r7, #20] 800194c: 3318 adds r3, #24 800194e: 011b lsls r3, r3, #4 8001950: 440b add r3, r1 8001952: 3304 adds r3, #4 8001954: 601a str r2, [r3, #0] } /* Set up the data field */ WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, 8001956: 687b ldr r3, [r7, #4] 8001958: 3307 adds r3, #7 800195a: 781b ldrb r3, [r3, #0] 800195c: 061a lsls r2, r3, #24 800195e: 687b ldr r3, [r7, #4] 8001960: 3306 adds r3, #6 8001962: 781b ldrb r3, [r3, #0] 8001964: 041b lsls r3, r3, #16 8001966: 431a orrs r2, r3 8001968: 687b ldr r3, [r7, #4] 800196a: 3305 adds r3, #5 800196c: 781b ldrb r3, [r3, #0] 800196e: 021b lsls r3, r3, #8 8001970: 4313 orrs r3, r2 8001972: 687a ldr r2, [r7, #4] 8001974: 3204 adds r2, #4 8001976: 7812 ldrb r2, [r2, #0] 8001978: 4610 mov r0, r2 800197a: 68fa ldr r2, [r7, #12] 800197c: 6811 ldr r1, [r2, #0] 800197e: ea43 0200 orr.w r2, r3, r0 8001982: 697b ldr r3, [r7, #20] 8001984: 011b lsls r3, r3, #4 8001986: 440b add r3, r1 8001988: f503 73c6 add.w r3, r3, #396 ; 0x18c 800198c: 601a str r2, [r3, #0] ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, 800198e: 687b ldr r3, [r7, #4] 8001990: 3303 adds r3, #3 8001992: 781b ldrb r3, [r3, #0] 8001994: 061a lsls r2, r3, #24 8001996: 687b ldr r3, [r7, #4] 8001998: 3302 adds r3, #2 800199a: 781b ldrb r3, [r3, #0] 800199c: 041b lsls r3, r3, #16 800199e: 431a orrs r2, r3 80019a0: 687b ldr r3, [r7, #4] 80019a2: 3301 adds r3, #1 80019a4: 781b ldrb r3, [r3, #0] 80019a6: 021b lsls r3, r3, #8 80019a8: 4313 orrs r3, r2 80019aa: 687a ldr r2, [r7, #4] 80019ac: 7812 ldrb r2, [r2, #0] 80019ae: 4610 mov r0, r2 80019b0: 68fa ldr r2, [r7, #12] 80019b2: 6811 ldr r1, [r2, #0] 80019b4: ea43 0200 orr.w r2, r3, r0 80019b8: 697b ldr r3, [r7, #20] 80019ba: 011b lsls r3, r3, #4 80019bc: 440b add r3, r1 80019be: f503 73c4 add.w r3, r3, #392 ; 0x188 80019c2: 601a str r2, [r3, #0] ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); /* Request transmission */ SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); 80019c4: 68fb ldr r3, [r7, #12] 80019c6: 681a ldr r2, [r3, #0] 80019c8: 697b ldr r3, [r7, #20] 80019ca: 3318 adds r3, #24 80019cc: 011b lsls r3, r3, #4 80019ce: 4413 add r3, r2 80019d0: 681b ldr r3, [r3, #0] 80019d2: 68fa ldr r2, [r7, #12] 80019d4: 6811 ldr r1, [r2, #0] 80019d6: f043 0201 orr.w r2, r3, #1 80019da: 697b ldr r3, [r7, #20] 80019dc: 3318 adds r3, #24 80019de: 011b lsls r3, r3, #4 80019e0: 440b add r3, r1 80019e2: 601a str r2, [r3, #0] /* Return function status */ return HAL_OK; 80019e4: 2300 movs r3, #0 80019e6: e00e b.n 8001a06 } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; 80019e8: 68fb ldr r3, [r7, #12] 80019ea: 6a5b ldr r3, [r3, #36] ; 0x24 80019ec: f443 1200 orr.w r2, r3, #2097152 ; 0x200000 80019f0: 68fb ldr r3, [r7, #12] 80019f2: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 80019f4: 2301 movs r3, #1 80019f6: e006 b.n 8001a06 } } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; 80019f8: 68fb ldr r3, [r7, #12] 80019fa: 6a5b ldr r3, [r3, #36] ; 0x24 80019fc: f443 2280 orr.w r2, r3, #262144 ; 0x40000 8001a00: 68fb ldr r3, [r7, #12] 8001a02: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001a04: 2301 movs r3, #1 } } 8001a06: 4618 mov r0, r3 8001a08: 3724 adds r7, #36 ; 0x24 8001a0a: 46bd mov sp, r7 8001a0c: bc80 pop {r7} 8001a0e: 4770 bx lr 08001a10 : * of the Rx frame will be stored. * @param aData array where the payload of the Rx frame will be stored. * @retval HAL status */ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) { 8001a10: b480 push {r7} 8001a12: b087 sub sp, #28 8001a14: af00 add r7, sp, #0 8001a16: 60f8 str r0, [r7, #12] 8001a18: 60b9 str r1, [r7, #8] 8001a1a: 607a str r2, [r7, #4] 8001a1c: 603b str r3, [r7, #0] HAL_CAN_StateTypeDef state = hcan->State; 8001a1e: 68fb ldr r3, [r7, #12] 8001a20: f893 3020 ldrb.w r3, [r3, #32] 8001a24: 75fb strb r3, [r7, #23] assert_param(IS_CAN_RX_FIFO(RxFifo)); if ((state == HAL_CAN_STATE_READY) || 8001a26: 7dfb ldrb r3, [r7, #23] 8001a28: 2b01 cmp r3, #1 8001a2a: d003 beq.n 8001a34 8001a2c: 7dfb ldrb r3, [r7, #23] 8001a2e: 2b02 cmp r3, #2 8001a30: f040 80f3 bne.w 8001c1a (state == HAL_CAN_STATE_LISTENING)) { /* Check the Rx FIFO */ if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ 8001a34: 68bb ldr r3, [r7, #8] 8001a36: 2b00 cmp r3, #0 8001a38: d10e bne.n 8001a58 { /* Check that the Rx FIFO 0 is not empty */ if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) 8001a3a: 68fb ldr r3, [r7, #12] 8001a3c: 681b ldr r3, [r3, #0] 8001a3e: 68db ldr r3, [r3, #12] 8001a40: f003 0303 and.w r3, r3, #3 8001a44: 2b00 cmp r3, #0 8001a46: d116 bne.n 8001a76 { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; 8001a48: 68fb ldr r3, [r7, #12] 8001a4a: 6a5b ldr r3, [r3, #36] ; 0x24 8001a4c: f443 1200 orr.w r2, r3, #2097152 ; 0x200000 8001a50: 68fb ldr r3, [r7, #12] 8001a52: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001a54: 2301 movs r3, #1 8001a56: e0e7 b.n 8001c28 } } else /* Rx element is assigned to Rx FIFO 1 */ { /* Check that the Rx FIFO 1 is not empty */ if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) 8001a58: 68fb ldr r3, [r7, #12] 8001a5a: 681b ldr r3, [r3, #0] 8001a5c: 691b ldr r3, [r3, #16] 8001a5e: f003 0303 and.w r3, r3, #3 8001a62: 2b00 cmp r3, #0 8001a64: d107 bne.n 8001a76 { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; 8001a66: 68fb ldr r3, [r7, #12] 8001a68: 6a5b ldr r3, [r3, #36] ; 0x24 8001a6a: f443 1200 orr.w r2, r3, #2097152 ; 0x200000 8001a6e: 68fb ldr r3, [r7, #12] 8001a70: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001a72: 2301 movs r3, #1 8001a74: e0d8 b.n 8001c28 } } /* Get the header */ pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; 8001a76: 68fb ldr r3, [r7, #12] 8001a78: 681a ldr r2, [r3, #0] 8001a7a: 68bb ldr r3, [r7, #8] 8001a7c: 331b adds r3, #27 8001a7e: 011b lsls r3, r3, #4 8001a80: 4413 add r3, r2 8001a82: 681b ldr r3, [r3, #0] 8001a84: f003 0204 and.w r2, r3, #4 8001a88: 687b ldr r3, [r7, #4] 8001a8a: 609a str r2, [r3, #8] if (pHeader->IDE == CAN_ID_STD) 8001a8c: 687b ldr r3, [r7, #4] 8001a8e: 689b ldr r3, [r3, #8] 8001a90: 2b00 cmp r3, #0 8001a92: d10c bne.n 8001aae { pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; 8001a94: 68fb ldr r3, [r7, #12] 8001a96: 681a ldr r2, [r3, #0] 8001a98: 68bb ldr r3, [r7, #8] 8001a9a: 331b adds r3, #27 8001a9c: 011b lsls r3, r3, #4 8001a9e: 4413 add r3, r2 8001aa0: 681b ldr r3, [r3, #0] 8001aa2: 0d5b lsrs r3, r3, #21 8001aa4: f3c3 020a ubfx r2, r3, #0, #11 8001aa8: 687b ldr r3, [r7, #4] 8001aaa: 601a str r2, [r3, #0] 8001aac: e00b b.n 8001ac6 } else { pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos; 8001aae: 68fb ldr r3, [r7, #12] 8001ab0: 681a ldr r2, [r3, #0] 8001ab2: 68bb ldr r3, [r7, #8] 8001ab4: 331b adds r3, #27 8001ab6: 011b lsls r3, r3, #4 8001ab8: 4413 add r3, r2 8001aba: 681b ldr r3, [r3, #0] 8001abc: 08db lsrs r3, r3, #3 8001abe: f023 4260 bic.w r2, r3, #3758096384 ; 0xe0000000 8001ac2: 687b ldr r3, [r7, #4] 8001ac4: 605a str r2, [r3, #4] } pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR); 8001ac6: 68fb ldr r3, [r7, #12] 8001ac8: 681a ldr r2, [r3, #0] 8001aca: 68bb ldr r3, [r7, #8] 8001acc: 331b adds r3, #27 8001ace: 011b lsls r3, r3, #4 8001ad0: 4413 add r3, r2 8001ad2: 681b ldr r3, [r3, #0] 8001ad4: f003 0202 and.w r2, r3, #2 8001ad8: 687b ldr r3, [r7, #4] 8001ada: 60da str r2, [r3, #12] pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos; 8001adc: 68fb ldr r3, [r7, #12] 8001ade: 681a ldr r2, [r3, #0] 8001ae0: 68bb ldr r3, [r7, #8] 8001ae2: 331b adds r3, #27 8001ae4: 011b lsls r3, r3, #4 8001ae6: 4413 add r3, r2 8001ae8: 3304 adds r3, #4 8001aea: 681b ldr r3, [r3, #0] 8001aec: f003 020f and.w r2, r3, #15 8001af0: 687b ldr r3, [r7, #4] 8001af2: 611a str r2, [r3, #16] pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos; 8001af4: 68fb ldr r3, [r7, #12] 8001af6: 681a ldr r2, [r3, #0] 8001af8: 68bb ldr r3, [r7, #8] 8001afa: 331b adds r3, #27 8001afc: 011b lsls r3, r3, #4 8001afe: 4413 add r3, r2 8001b00: 3304 adds r3, #4 8001b02: 681b ldr r3, [r3, #0] 8001b04: 0a1b lsrs r3, r3, #8 8001b06: b2da uxtb r2, r3 8001b08: 687b ldr r3, [r7, #4] 8001b0a: 619a str r2, [r3, #24] pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos; 8001b0c: 68fb ldr r3, [r7, #12] 8001b0e: 681a ldr r2, [r3, #0] 8001b10: 68bb ldr r3, [r7, #8] 8001b12: 331b adds r3, #27 8001b14: 011b lsls r3, r3, #4 8001b16: 4413 add r3, r2 8001b18: 3304 adds r3, #4 8001b1a: 681b ldr r3, [r3, #0] 8001b1c: 0c1b lsrs r3, r3, #16 8001b1e: b29a uxth r2, r3 8001b20: 687b ldr r3, [r7, #4] 8001b22: 615a str r2, [r3, #20] /* Get the data */ aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); 8001b24: 68fb ldr r3, [r7, #12] 8001b26: 681a ldr r2, [r3, #0] 8001b28: 68bb ldr r3, [r7, #8] 8001b2a: 011b lsls r3, r3, #4 8001b2c: 4413 add r3, r2 8001b2e: f503 73dc add.w r3, r3, #440 ; 0x1b8 8001b32: 681b ldr r3, [r3, #0] 8001b34: b2da uxtb r2, r3 8001b36: 683b ldr r3, [r7, #0] 8001b38: 701a strb r2, [r3, #0] aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); 8001b3a: 68fb ldr r3, [r7, #12] 8001b3c: 681a ldr r2, [r3, #0] 8001b3e: 68bb ldr r3, [r7, #8] 8001b40: 011b lsls r3, r3, #4 8001b42: 4413 add r3, r2 8001b44: f503 73dc add.w r3, r3, #440 ; 0x1b8 8001b48: 681b ldr r3, [r3, #0] 8001b4a: 0a1a lsrs r2, r3, #8 8001b4c: 683b ldr r3, [r7, #0] 8001b4e: 3301 adds r3, #1 8001b50: b2d2 uxtb r2, r2 8001b52: 701a strb r2, [r3, #0] aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); 8001b54: 68fb ldr r3, [r7, #12] 8001b56: 681a ldr r2, [r3, #0] 8001b58: 68bb ldr r3, [r7, #8] 8001b5a: 011b lsls r3, r3, #4 8001b5c: 4413 add r3, r2 8001b5e: f503 73dc add.w r3, r3, #440 ; 0x1b8 8001b62: 681b ldr r3, [r3, #0] 8001b64: 0c1a lsrs r2, r3, #16 8001b66: 683b ldr r3, [r7, #0] 8001b68: 3302 adds r3, #2 8001b6a: b2d2 uxtb r2, r2 8001b6c: 701a strb r2, [r3, #0] aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); 8001b6e: 68fb ldr r3, [r7, #12] 8001b70: 681a ldr r2, [r3, #0] 8001b72: 68bb ldr r3, [r7, #8] 8001b74: 011b lsls r3, r3, #4 8001b76: 4413 add r3, r2 8001b78: f503 73dc add.w r3, r3, #440 ; 0x1b8 8001b7c: 681b ldr r3, [r3, #0] 8001b7e: 0e1a lsrs r2, r3, #24 8001b80: 683b ldr r3, [r7, #0] 8001b82: 3303 adds r3, #3 8001b84: b2d2 uxtb r2, r2 8001b86: 701a strb r2, [r3, #0] aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); 8001b88: 68fb ldr r3, [r7, #12] 8001b8a: 681a ldr r2, [r3, #0] 8001b8c: 68bb ldr r3, [r7, #8] 8001b8e: 011b lsls r3, r3, #4 8001b90: 4413 add r3, r2 8001b92: f503 73de add.w r3, r3, #444 ; 0x1bc 8001b96: 681a ldr r2, [r3, #0] 8001b98: 683b ldr r3, [r7, #0] 8001b9a: 3304 adds r3, #4 8001b9c: b2d2 uxtb r2, r2 8001b9e: 701a strb r2, [r3, #0] aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); 8001ba0: 68fb ldr r3, [r7, #12] 8001ba2: 681a ldr r2, [r3, #0] 8001ba4: 68bb ldr r3, [r7, #8] 8001ba6: 011b lsls r3, r3, #4 8001ba8: 4413 add r3, r2 8001baa: f503 73de add.w r3, r3, #444 ; 0x1bc 8001bae: 681b ldr r3, [r3, #0] 8001bb0: 0a1a lsrs r2, r3, #8 8001bb2: 683b ldr r3, [r7, #0] 8001bb4: 3305 adds r3, #5 8001bb6: b2d2 uxtb r2, r2 8001bb8: 701a strb r2, [r3, #0] aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); 8001bba: 68fb ldr r3, [r7, #12] 8001bbc: 681a ldr r2, [r3, #0] 8001bbe: 68bb ldr r3, [r7, #8] 8001bc0: 011b lsls r3, r3, #4 8001bc2: 4413 add r3, r2 8001bc4: f503 73de add.w r3, r3, #444 ; 0x1bc 8001bc8: 681b ldr r3, [r3, #0] 8001bca: 0c1a lsrs r2, r3, #16 8001bcc: 683b ldr r3, [r7, #0] 8001bce: 3306 adds r3, #6 8001bd0: b2d2 uxtb r2, r2 8001bd2: 701a strb r2, [r3, #0] aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); 8001bd4: 68fb ldr r3, [r7, #12] 8001bd6: 681a ldr r2, [r3, #0] 8001bd8: 68bb ldr r3, [r7, #8] 8001bda: 011b lsls r3, r3, #4 8001bdc: 4413 add r3, r2 8001bde: f503 73de add.w r3, r3, #444 ; 0x1bc 8001be2: 681b ldr r3, [r3, #0] 8001be4: 0e1a lsrs r2, r3, #24 8001be6: 683b ldr r3, [r7, #0] 8001be8: 3307 adds r3, #7 8001bea: b2d2 uxtb r2, r2 8001bec: 701a strb r2, [r3, #0] /* Release the FIFO */ if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ 8001bee: 68bb ldr r3, [r7, #8] 8001bf0: 2b00 cmp r3, #0 8001bf2: d108 bne.n 8001c06 { /* Release RX FIFO 0 */ SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); 8001bf4: 68fb ldr r3, [r7, #12] 8001bf6: 681b ldr r3, [r3, #0] 8001bf8: 68da ldr r2, [r3, #12] 8001bfa: 68fb ldr r3, [r7, #12] 8001bfc: 681b ldr r3, [r3, #0] 8001bfe: f042 0220 orr.w r2, r2, #32 8001c02: 60da str r2, [r3, #12] 8001c04: e007 b.n 8001c16 } else /* Rx element is assigned to Rx FIFO 1 */ { /* Release RX FIFO 1 */ SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); 8001c06: 68fb ldr r3, [r7, #12] 8001c08: 681b ldr r3, [r3, #0] 8001c0a: 691a ldr r2, [r3, #16] 8001c0c: 68fb ldr r3, [r7, #12] 8001c0e: 681b ldr r3, [r3, #0] 8001c10: f042 0220 orr.w r2, r2, #32 8001c14: 611a str r2, [r3, #16] } /* Return function status */ return HAL_OK; 8001c16: 2300 movs r3, #0 8001c18: e006 b.n 8001c28 } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; 8001c1a: 68fb ldr r3, [r7, #12] 8001c1c: 6a5b ldr r3, [r3, #36] ; 0x24 8001c1e: f443 2280 orr.w r2, r3, #262144 ; 0x40000 8001c22: 68fb ldr r3, [r7, #12] 8001c24: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001c26: 2301 movs r3, #1 } } 8001c28: 4618 mov r0, r3 8001c2a: 371c adds r7, #28 8001c2c: 46bd mov sp, r7 8001c2e: bc80 pop {r7} 8001c30: 4770 bx lr 08001c32 : * @param RxFifo Rx FIFO. * This parameter can be a value of @arg CAN_receive_FIFO_number. * @retval Number of messages available in Rx FIFO. */ uint32_t HAL_CAN_GetRxFifoFillLevel(CAN_HandleTypeDef *hcan, uint32_t RxFifo) { 8001c32: b480 push {r7} 8001c34: b085 sub sp, #20 8001c36: af00 add r7, sp, #0 8001c38: 6078 str r0, [r7, #4] 8001c3a: 6039 str r1, [r7, #0] uint32_t filllevel = 0U; 8001c3c: 2300 movs r3, #0 8001c3e: 60fb str r3, [r7, #12] HAL_CAN_StateTypeDef state = hcan->State; 8001c40: 687b ldr r3, [r7, #4] 8001c42: f893 3020 ldrb.w r3, [r3, #32] 8001c46: 72fb strb r3, [r7, #11] /* Check function parameters */ assert_param(IS_CAN_RX_FIFO(RxFifo)); if ((state == HAL_CAN_STATE_READY) || 8001c48: 7afb ldrb r3, [r7, #11] 8001c4a: 2b01 cmp r3, #1 8001c4c: d002 beq.n 8001c54 8001c4e: 7afb ldrb r3, [r7, #11] 8001c50: 2b02 cmp r3, #2 8001c52: d10f bne.n 8001c74 (state == HAL_CAN_STATE_LISTENING)) { if (RxFifo == CAN_RX_FIFO0) 8001c54: 683b ldr r3, [r7, #0] 8001c56: 2b00 cmp r3, #0 8001c58: d106 bne.n 8001c68 { filllevel = hcan->Instance->RF0R & CAN_RF0R_FMP0; 8001c5a: 687b ldr r3, [r7, #4] 8001c5c: 681b ldr r3, [r3, #0] 8001c5e: 68db ldr r3, [r3, #12] 8001c60: f003 0303 and.w r3, r3, #3 8001c64: 60fb str r3, [r7, #12] 8001c66: e005 b.n 8001c74 } else /* RxFifo == CAN_RX_FIFO1 */ { filllevel = hcan->Instance->RF1R & CAN_RF1R_FMP1; 8001c68: 687b ldr r3, [r7, #4] 8001c6a: 681b ldr r3, [r3, #0] 8001c6c: 691b ldr r3, [r3, #16] 8001c6e: f003 0303 and.w r3, r3, #3 8001c72: 60fb str r3, [r7, #12] } } /* Return Rx FIFO fill level */ return filllevel; 8001c74: 68fb ldr r3, [r7, #12] } 8001c76: 4618 mov r0, r3 8001c78: 3714 adds r7, #20 8001c7a: 46bd mov sp, r7 8001c7c: bc80 pop {r7} 8001c7e: 4770 bx lr 08001c80 : * @param ActiveITs indicates which interrupts will be enabled. * This parameter can be any combination of @arg CAN_Interrupts. * @retval HAL status */ HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) { 8001c80: b480 push {r7} 8001c82: b085 sub sp, #20 8001c84: af00 add r7, sp, #0 8001c86: 6078 str r0, [r7, #4] 8001c88: 6039 str r1, [r7, #0] HAL_CAN_StateTypeDef state = hcan->State; 8001c8a: 687b ldr r3, [r7, #4] 8001c8c: f893 3020 ldrb.w r3, [r3, #32] 8001c90: 73fb strb r3, [r7, #15] /* Check function parameters */ assert_param(IS_CAN_IT(ActiveITs)); if ((state == HAL_CAN_STATE_READY) || 8001c92: 7bfb ldrb r3, [r7, #15] 8001c94: 2b01 cmp r3, #1 8001c96: d002 beq.n 8001c9e 8001c98: 7bfb ldrb r3, [r7, #15] 8001c9a: 2b02 cmp r3, #2 8001c9c: d109 bne.n 8001cb2 (state == HAL_CAN_STATE_LISTENING)) { /* Enable the selected interrupts */ __HAL_CAN_ENABLE_IT(hcan, ActiveITs); 8001c9e: 687b ldr r3, [r7, #4] 8001ca0: 681b ldr r3, [r3, #0] 8001ca2: 6959 ldr r1, [r3, #20] 8001ca4: 687b ldr r3, [r7, #4] 8001ca6: 681b ldr r3, [r3, #0] 8001ca8: 683a ldr r2, [r7, #0] 8001caa: 430a orrs r2, r1 8001cac: 615a str r2, [r3, #20] /* Return function status */ return HAL_OK; 8001cae: 2300 movs r3, #0 8001cb0: e006 b.n 8001cc0 } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; 8001cb2: 687b ldr r3, [r7, #4] 8001cb4: 6a5b ldr r3, [r3, #36] ; 0x24 8001cb6: f443 2280 orr.w r2, r3, #262144 ; 0x40000 8001cba: 687b ldr r3, [r7, #4] 8001cbc: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001cbe: 2301 movs r3, #1 } } 8001cc0: 4618 mov r0, r3 8001cc2: 3714 adds r7, #20 8001cc4: 46bd mov sp, r7 8001cc6: bc80 pop {r7} 8001cc8: 4770 bx lr 08001cca : * @param InactiveITs indicates which interrupts will be disabled. * This parameter can be any combination of @arg CAN_Interrupts. * @retval HAL status */ HAL_StatusTypeDef HAL_CAN_DeactivateNotification(CAN_HandleTypeDef *hcan, uint32_t InactiveITs) { 8001cca: b480 push {r7} 8001ccc: b085 sub sp, #20 8001cce: af00 add r7, sp, #0 8001cd0: 6078 str r0, [r7, #4] 8001cd2: 6039 str r1, [r7, #0] HAL_CAN_StateTypeDef state = hcan->State; 8001cd4: 687b ldr r3, [r7, #4] 8001cd6: f893 3020 ldrb.w r3, [r3, #32] 8001cda: 73fb strb r3, [r7, #15] /* Check function parameters */ assert_param(IS_CAN_IT(InactiveITs)); if ((state == HAL_CAN_STATE_READY) || 8001cdc: 7bfb ldrb r3, [r7, #15] 8001cde: 2b01 cmp r3, #1 8001ce0: d002 beq.n 8001ce8 8001ce2: 7bfb ldrb r3, [r7, #15] 8001ce4: 2b02 cmp r3, #2 8001ce6: d10a bne.n 8001cfe (state == HAL_CAN_STATE_LISTENING)) { /* Disable the selected interrupts */ __HAL_CAN_DISABLE_IT(hcan, InactiveITs); 8001ce8: 687b ldr r3, [r7, #4] 8001cea: 681b ldr r3, [r3, #0] 8001cec: 6959 ldr r1, [r3, #20] 8001cee: 683b ldr r3, [r7, #0] 8001cf0: 43da mvns r2, r3 8001cf2: 687b ldr r3, [r7, #4] 8001cf4: 681b ldr r3, [r3, #0] 8001cf6: 400a ands r2, r1 8001cf8: 615a str r2, [r3, #20] /* Return function status */ return HAL_OK; 8001cfa: 2300 movs r3, #0 8001cfc: e006 b.n 8001d0c } else { /* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; 8001cfe: 687b ldr r3, [r7, #4] 8001d00: 6a5b ldr r3, [r3, #36] ; 0x24 8001d02: f443 2280 orr.w r2, r3, #262144 ; 0x40000 8001d06: 687b ldr r3, [r7, #4] 8001d08: 625a str r2, [r3, #36] ; 0x24 return HAL_ERROR; 8001d0a: 2301 movs r3, #1 } } 8001d0c: 4618 mov r0, r3 8001d0e: 3714 adds r7, #20 8001d10: 46bd mov sp, r7 8001d12: bc80 pop {r7} 8001d14: 4770 bx lr 08001d16 : * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) { 8001d16: b580 push {r7, lr} 8001d18: b08a sub sp, #40 ; 0x28 8001d1a: af00 add r7, sp, #0 8001d1c: 6078 str r0, [r7, #4] uint32_t errorcode = HAL_CAN_ERROR_NONE; 8001d1e: 2300 movs r3, #0 8001d20: 627b str r3, [r7, #36] ; 0x24 uint32_t interrupts = READ_REG(hcan->Instance->IER); 8001d22: 687b ldr r3, [r7, #4] 8001d24: 681b ldr r3, [r3, #0] 8001d26: 695b ldr r3, [r3, #20] 8001d28: 623b str r3, [r7, #32] uint32_t msrflags = READ_REG(hcan->Instance->MSR); 8001d2a: 687b ldr r3, [r7, #4] 8001d2c: 681b ldr r3, [r3, #0] 8001d2e: 685b ldr r3, [r3, #4] 8001d30: 61fb str r3, [r7, #28] uint32_t tsrflags = READ_REG(hcan->Instance->TSR); 8001d32: 687b ldr r3, [r7, #4] 8001d34: 681b ldr r3, [r3, #0] 8001d36: 689b ldr r3, [r3, #8] 8001d38: 61bb str r3, [r7, #24] uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); 8001d3a: 687b ldr r3, [r7, #4] 8001d3c: 681b ldr r3, [r3, #0] 8001d3e: 68db ldr r3, [r3, #12] 8001d40: 617b str r3, [r7, #20] uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); 8001d42: 687b ldr r3, [r7, #4] 8001d44: 681b ldr r3, [r3, #0] 8001d46: 691b ldr r3, [r3, #16] 8001d48: 613b str r3, [r7, #16] uint32_t esrflags = READ_REG(hcan->Instance->ESR); 8001d4a: 687b ldr r3, [r7, #4] 8001d4c: 681b ldr r3, [r3, #0] 8001d4e: 699b ldr r3, [r3, #24] 8001d50: 60fb str r3, [r7, #12] /* Transmit Mailbox empty interrupt management *****************************/ if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) 8001d52: 6a3b ldr r3, [r7, #32] 8001d54: f003 0301 and.w r3, r3, #1 8001d58: 2b00 cmp r3, #0 8001d5a: d07c beq.n 8001e56 { /* Transmit Mailbox 0 management *****************************************/ if ((tsrflags & CAN_TSR_RQCP0) != 0U) 8001d5c: 69bb ldr r3, [r7, #24] 8001d5e: f003 0301 and.w r3, r3, #1 8001d62: 2b00 cmp r3, #0 8001d64: d023 beq.n 8001dae { /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); 8001d66: 687b ldr r3, [r7, #4] 8001d68: 681b ldr r3, [r3, #0] 8001d6a: 2201 movs r2, #1 8001d6c: 609a str r2, [r3, #8] if ((tsrflags & CAN_TSR_TXOK0) != 0U) 8001d6e: 69bb ldr r3, [r7, #24] 8001d70: f003 0302 and.w r3, r3, #2 8001d74: 2b00 cmp r3, #0 8001d76: d003 beq.n 8001d80 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->TxMailbox0CompleteCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_TxMailbox0CompleteCallback(hcan); 8001d78: 6878 ldr r0, [r7, #4] 8001d7a: f001 fb7b bl 8003474 8001d7e: e016 b.n 8001dae #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } else { if ((tsrflags & CAN_TSR_ALST0) != 0U) 8001d80: 69bb ldr r3, [r7, #24] 8001d82: f003 0304 and.w r3, r3, #4 8001d86: 2b00 cmp r3, #0 8001d88: d004 beq.n 8001d94 { /* Update error code */ errorcode |= HAL_CAN_ERROR_TX_ALST0; 8001d8a: 6a7b ldr r3, [r7, #36] ; 0x24 8001d8c: f443 6300 orr.w r3, r3, #2048 ; 0x800 8001d90: 627b str r3, [r7, #36] ; 0x24 8001d92: e00c b.n 8001dae } else if ((tsrflags & CAN_TSR_TERR0) != 0U) 8001d94: 69bb ldr r3, [r7, #24] 8001d96: f003 0308 and.w r3, r3, #8 8001d9a: 2b00 cmp r3, #0 8001d9c: d004 beq.n 8001da8 { /* Update error code */ errorcode |= HAL_CAN_ERROR_TX_TERR0; 8001d9e: 6a7b ldr r3, [r7, #36] ; 0x24 8001da0: f443 5380 orr.w r3, r3, #4096 ; 0x1000 8001da4: 627b str r3, [r7, #36] ; 0x24 8001da6: e002 b.n 8001dae #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->TxMailbox0AbortCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_TxMailbox0AbortCallback(hcan); 8001da8: 6878 ldr r0, [r7, #4] 8001daa: f000 f965 bl 8002078 } } } /* Transmit Mailbox 1 management *****************************************/ if ((tsrflags & CAN_TSR_RQCP1) != 0U) 8001dae: 69bb ldr r3, [r7, #24] 8001db0: f403 7380 and.w r3, r3, #256 ; 0x100 8001db4: 2b00 cmp r3, #0 8001db6: d024 beq.n 8001e02 { /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); 8001db8: 687b ldr r3, [r7, #4] 8001dba: 681b ldr r3, [r3, #0] 8001dbc: f44f 7280 mov.w r2, #256 ; 0x100 8001dc0: 609a str r2, [r3, #8] if ((tsrflags & CAN_TSR_TXOK1) != 0U) 8001dc2: 69bb ldr r3, [r7, #24] 8001dc4: f403 7300 and.w r3, r3, #512 ; 0x200 8001dc8: 2b00 cmp r3, #0 8001dca: d003 beq.n 8001dd4 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->TxMailbox1CompleteCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_TxMailbox1CompleteCallback(hcan); 8001dcc: 6878 ldr r0, [r7, #4] 8001dce: f001 fb5b bl 8003488 8001dd2: e016 b.n 8001e02 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } else { if ((tsrflags & CAN_TSR_ALST1) != 0U) 8001dd4: 69bb ldr r3, [r7, #24] 8001dd6: f403 6380 and.w r3, r3, #1024 ; 0x400 8001dda: 2b00 cmp r3, #0 8001ddc: d004 beq.n 8001de8 { /* Update error code */ errorcode |= HAL_CAN_ERROR_TX_ALST1; 8001dde: 6a7b ldr r3, [r7, #36] ; 0x24 8001de0: f443 5300 orr.w r3, r3, #8192 ; 0x2000 8001de4: 627b str r3, [r7, #36] ; 0x24 8001de6: e00c b.n 8001e02 } else if ((tsrflags & CAN_TSR_TERR1) != 0U) 8001de8: 69bb ldr r3, [r7, #24] 8001dea: f403 6300 and.w r3, r3, #2048 ; 0x800 8001dee: 2b00 cmp r3, #0 8001df0: d004 beq.n 8001dfc { /* Update error code */ errorcode |= HAL_CAN_ERROR_TX_TERR1; 8001df2: 6a7b ldr r3, [r7, #36] ; 0x24 8001df4: f443 4380 orr.w r3, r3, #16384 ; 0x4000 8001df8: 627b str r3, [r7, #36] ; 0x24 8001dfa: e002 b.n 8001e02 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->TxMailbox1AbortCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_TxMailbox1AbortCallback(hcan); 8001dfc: 6878 ldr r0, [r7, #4] 8001dfe: f000 f944 bl 800208a } } } /* Transmit Mailbox 2 management *****************************************/ if ((tsrflags & CAN_TSR_RQCP2) != 0U) 8001e02: 69bb ldr r3, [r7, #24] 8001e04: f403 3380 and.w r3, r3, #65536 ; 0x10000 8001e08: 2b00 cmp r3, #0 8001e0a: d024 beq.n 8001e56 { /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); 8001e0c: 687b ldr r3, [r7, #4] 8001e0e: 681b ldr r3, [r3, #0] 8001e10: f44f 3280 mov.w r2, #65536 ; 0x10000 8001e14: 609a str r2, [r3, #8] if ((tsrflags & CAN_TSR_TXOK2) != 0U) 8001e16: 69bb ldr r3, [r7, #24] 8001e18: f403 3300 and.w r3, r3, #131072 ; 0x20000 8001e1c: 2b00 cmp r3, #0 8001e1e: d003 beq.n 8001e28 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->TxMailbox2CompleteCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_TxMailbox2CompleteCallback(hcan); 8001e20: 6878 ldr r0, [r7, #4] 8001e22: f001 fb3b bl 800349c 8001e26: e016 b.n 8001e56 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } else { if ((tsrflags & CAN_TSR_ALST2) != 0U) 8001e28: 69bb ldr r3, [r7, #24] 8001e2a: f403 2380 and.w r3, r3, #262144 ; 0x40000 8001e2e: 2b00 cmp r3, #0 8001e30: d004 beq.n 8001e3c { /* Update error code */ errorcode |= HAL_CAN_ERROR_TX_ALST2; 8001e32: 6a7b ldr r3, [r7, #36] ; 0x24 8001e34: f443 4300 orr.w r3, r3, #32768 ; 0x8000 8001e38: 627b str r3, [r7, #36] ; 0x24 8001e3a: e00c b.n 8001e56 } else if ((tsrflags & CAN_TSR_TERR2) != 0U) 8001e3c: 69bb ldr r3, [r7, #24] 8001e3e: f403 2300 and.w r3, r3, #524288 ; 0x80000 8001e42: 2b00 cmp r3, #0 8001e44: d004 beq.n 8001e50 { /* Update error code */ errorcode |= HAL_CAN_ERROR_TX_TERR2; 8001e46: 6a7b ldr r3, [r7, #36] ; 0x24 8001e48: f443 3380 orr.w r3, r3, #65536 ; 0x10000 8001e4c: 627b str r3, [r7, #36] ; 0x24 8001e4e: e002 b.n 8001e56 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->TxMailbox2AbortCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_TxMailbox2AbortCallback(hcan); 8001e50: 6878 ldr r0, [r7, #4] 8001e52: f000 f923 bl 800209c } } } /* Receive FIFO 0 overrun interrupt management *****************************/ if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) 8001e56: 6a3b ldr r3, [r7, #32] 8001e58: f003 0308 and.w r3, r3, #8 8001e5c: 2b00 cmp r3, #0 8001e5e: d00c beq.n 8001e7a { if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) 8001e60: 697b ldr r3, [r7, #20] 8001e62: f003 0310 and.w r3, r3, #16 8001e66: 2b00 cmp r3, #0 8001e68: d007 beq.n 8001e7a { /* Set CAN error code to Rx Fifo 0 overrun error */ errorcode |= HAL_CAN_ERROR_RX_FOV0; 8001e6a: 6a7b ldr r3, [r7, #36] ; 0x24 8001e6c: f443 7300 orr.w r3, r3, #512 ; 0x200 8001e70: 627b str r3, [r7, #36] ; 0x24 /* Clear FIFO0 Overrun Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); 8001e72: 687b ldr r3, [r7, #4] 8001e74: 681b ldr r3, [r3, #0] 8001e76: 2210 movs r2, #16 8001e78: 60da str r2, [r3, #12] } } /* Receive FIFO 0 full interrupt management ********************************/ if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) 8001e7a: 6a3b ldr r3, [r7, #32] 8001e7c: f003 0304 and.w r3, r3, #4 8001e80: 2b00 cmp r3, #0 8001e82: d00b beq.n 8001e9c { if ((rf0rflags & CAN_RF0R_FULL0) != 0U) 8001e84: 697b ldr r3, [r7, #20] 8001e86: f003 0308 and.w r3, r3, #8 8001e8a: 2b00 cmp r3, #0 8001e8c: d006 beq.n 8001e9c { /* Clear FIFO 0 full Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); 8001e8e: 687b ldr r3, [r7, #4] 8001e90: 681b ldr r3, [r3, #0] 8001e92: 2208 movs r2, #8 8001e94: 60da str r2, [r3, #12] #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->RxFifo0FullCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_RxFifo0FullCallback(hcan); 8001e96: 6878 ldr r0, [r7, #4] 8001e98: f001 fb14 bl 80034c4 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } /* Receive FIFO 0 message pending interrupt management *********************/ if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) 8001e9c: 6a3b ldr r3, [r7, #32] 8001e9e: f003 0302 and.w r3, r3, #2 8001ea2: 2b00 cmp r3, #0 8001ea4: d009 beq.n 8001eba { /* Check if message is still pending */ if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) 8001ea6: 687b ldr r3, [r7, #4] 8001ea8: 681b ldr r3, [r3, #0] 8001eaa: 68db ldr r3, [r3, #12] 8001eac: f003 0303 and.w r3, r3, #3 8001eb0: 2b00 cmp r3, #0 8001eb2: d002 beq.n 8001eba #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->RxFifo0MsgPendingCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_RxFifo0MsgPendingCallback(hcan); 8001eb4: 6878 ldr r0, [r7, #4] 8001eb6: f001 fafb bl 80034b0 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } /* Receive FIFO 1 overrun interrupt management *****************************/ if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) 8001eba: 6a3b ldr r3, [r7, #32] 8001ebc: f003 0340 and.w r3, r3, #64 ; 0x40 8001ec0: 2b00 cmp r3, #0 8001ec2: d00c beq.n 8001ede { if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) 8001ec4: 693b ldr r3, [r7, #16] 8001ec6: f003 0310 and.w r3, r3, #16 8001eca: 2b00 cmp r3, #0 8001ecc: d007 beq.n 8001ede { /* Set CAN error code to Rx Fifo 1 overrun error */ errorcode |= HAL_CAN_ERROR_RX_FOV1; 8001ece: 6a7b ldr r3, [r7, #36] ; 0x24 8001ed0: f443 6380 orr.w r3, r3, #1024 ; 0x400 8001ed4: 627b str r3, [r7, #36] ; 0x24 /* Clear FIFO1 Overrun Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); 8001ed6: 687b ldr r3, [r7, #4] 8001ed8: 681b ldr r3, [r3, #0] 8001eda: 2210 movs r2, #16 8001edc: 611a str r2, [r3, #16] } } /* Receive FIFO 1 full interrupt management ********************************/ if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) 8001ede: 6a3b ldr r3, [r7, #32] 8001ee0: f003 0320 and.w r3, r3, #32 8001ee4: 2b00 cmp r3, #0 8001ee6: d00b beq.n 8001f00 { if ((rf1rflags & CAN_RF1R_FULL1) != 0U) 8001ee8: 693b ldr r3, [r7, #16] 8001eea: f003 0308 and.w r3, r3, #8 8001eee: 2b00 cmp r3, #0 8001ef0: d006 beq.n 8001f00 { /* Clear FIFO 1 full Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); 8001ef2: 687b ldr r3, [r7, #4] 8001ef4: 681b ldr r3, [r3, #0] 8001ef6: 2208 movs r2, #8 8001ef8: 611a str r2, [r3, #16] #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->RxFifo1FullCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_RxFifo1FullCallback(hcan); 8001efa: 6878 ldr r0, [r7, #4] 8001efc: f000 f8e0 bl 80020c0 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } /* Receive FIFO 1 message pending interrupt management *********************/ if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) 8001f00: 6a3b ldr r3, [r7, #32] 8001f02: f003 0310 and.w r3, r3, #16 8001f06: 2b00 cmp r3, #0 8001f08: d009 beq.n 8001f1e { /* Check if message is still pending */ if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) 8001f0a: 687b ldr r3, [r7, #4] 8001f0c: 681b ldr r3, [r3, #0] 8001f0e: 691b ldr r3, [r3, #16] 8001f10: f003 0303 and.w r3, r3, #3 8001f14: 2b00 cmp r3, #0 8001f16: d002 beq.n 8001f1e #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->RxFifo1MsgPendingCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_RxFifo1MsgPendingCallback(hcan); 8001f18: 6878 ldr r0, [r7, #4] 8001f1a: f000 f8c8 bl 80020ae #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } /* Sleep interrupt management *********************************************/ if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) 8001f1e: 6a3b ldr r3, [r7, #32] 8001f20: f403 3300 and.w r3, r3, #131072 ; 0x20000 8001f24: 2b00 cmp r3, #0 8001f26: d00b beq.n 8001f40 { if ((msrflags & CAN_MSR_SLAKI) != 0U) 8001f28: 69fb ldr r3, [r7, #28] 8001f2a: f003 0310 and.w r3, r3, #16 8001f2e: 2b00 cmp r3, #0 8001f30: d006 beq.n 8001f40 { /* Clear Sleep interrupt Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); 8001f32: 687b ldr r3, [r7, #4] 8001f34: 681b ldr r3, [r3, #0] 8001f36: 2210 movs r2, #16 8001f38: 605a str r2, [r3, #4] #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->SleepCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_SleepCallback(hcan); 8001f3a: 6878 ldr r0, [r7, #4] 8001f3c: f000 f8c9 bl 80020d2 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } /* WakeUp interrupt management *********************************************/ if ((interrupts & CAN_IT_WAKEUP) != 0U) 8001f40: 6a3b ldr r3, [r7, #32] 8001f42: f403 3380 and.w r3, r3, #65536 ; 0x10000 8001f46: 2b00 cmp r3, #0 8001f48: d00b beq.n 8001f62 { if ((msrflags & CAN_MSR_WKUI) != 0U) 8001f4a: 69fb ldr r3, [r7, #28] 8001f4c: f003 0308 and.w r3, r3, #8 8001f50: 2b00 cmp r3, #0 8001f52: d006 beq.n 8001f62 { /* Clear WakeUp Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); 8001f54: 687b ldr r3, [r7, #4] 8001f56: 681b ldr r3, [r3, #0] 8001f58: 2208 movs r2, #8 8001f5a: 605a str r2, [r3, #4] #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->WakeUpFromRxMsgCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_WakeUpFromRxMsgCallback(hcan); 8001f5c: 6878 ldr r0, [r7, #4] 8001f5e: f000 f8c1 bl 80020e4 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } /* Error interrupts management *********************************************/ if ((interrupts & CAN_IT_ERROR) != 0U) 8001f62: 6a3b ldr r3, [r7, #32] 8001f64: f403 4300 and.w r3, r3, #32768 ; 0x8000 8001f68: 2b00 cmp r3, #0 8001f6a: d075 beq.n 8002058 { if ((msrflags & CAN_MSR_ERRI) != 0U) 8001f6c: 69fb ldr r3, [r7, #28] 8001f6e: f003 0304 and.w r3, r3, #4 8001f72: 2b00 cmp r3, #0 8001f74: d06c beq.n 8002050 { /* Check Error Warning Flag */ if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && 8001f76: 6a3b ldr r3, [r7, #32] 8001f78: f403 7380 and.w r3, r3, #256 ; 0x100 8001f7c: 2b00 cmp r3, #0 8001f7e: d008 beq.n 8001f92 ((esrflags & CAN_ESR_EWGF) != 0U)) 8001f80: 68fb ldr r3, [r7, #12] 8001f82: f003 0301 and.w r3, r3, #1 if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && 8001f86: 2b00 cmp r3, #0 8001f88: d003 beq.n 8001f92 { /* Set CAN error code to Error Warning */ errorcode |= HAL_CAN_ERROR_EWG; 8001f8a: 6a7b ldr r3, [r7, #36] ; 0x24 8001f8c: f043 0301 orr.w r3, r3, #1 8001f90: 627b str r3, [r7, #36] ; 0x24 /* No need for clear of Error Warning Flag as read-only */ } /* Check Error Passive Flag */ if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && 8001f92: 6a3b ldr r3, [r7, #32] 8001f94: f403 7300 and.w r3, r3, #512 ; 0x200 8001f98: 2b00 cmp r3, #0 8001f9a: d008 beq.n 8001fae ((esrflags & CAN_ESR_EPVF) != 0U)) 8001f9c: 68fb ldr r3, [r7, #12] 8001f9e: f003 0302 and.w r3, r3, #2 if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && 8001fa2: 2b00 cmp r3, #0 8001fa4: d003 beq.n 8001fae { /* Set CAN error code to Error Passive */ errorcode |= HAL_CAN_ERROR_EPV; 8001fa6: 6a7b ldr r3, [r7, #36] ; 0x24 8001fa8: f043 0302 orr.w r3, r3, #2 8001fac: 627b str r3, [r7, #36] ; 0x24 /* No need for clear of Error Passive Flag as read-only */ } /* Check Bus-off Flag */ if (((interrupts & CAN_IT_BUSOFF) != 0U) && 8001fae: 6a3b ldr r3, [r7, #32] 8001fb0: f403 6380 and.w r3, r3, #1024 ; 0x400 8001fb4: 2b00 cmp r3, #0 8001fb6: d008 beq.n 8001fca ((esrflags & CAN_ESR_BOFF) != 0U)) 8001fb8: 68fb ldr r3, [r7, #12] 8001fba: f003 0304 and.w r3, r3, #4 if (((interrupts & CAN_IT_BUSOFF) != 0U) && 8001fbe: 2b00 cmp r3, #0 8001fc0: d003 beq.n 8001fca { /* Set CAN error code to Bus-Off */ errorcode |= HAL_CAN_ERROR_BOF; 8001fc2: 6a7b ldr r3, [r7, #36] ; 0x24 8001fc4: f043 0304 orr.w r3, r3, #4 8001fc8: 627b str r3, [r7, #36] ; 0x24 /* No need for clear of Error Bus-Off as read-only */ } /* Check Last Error Code Flag */ if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && 8001fca: 6a3b ldr r3, [r7, #32] 8001fcc: f403 6300 and.w r3, r3, #2048 ; 0x800 8001fd0: 2b00 cmp r3, #0 8001fd2: d03d beq.n 8002050 ((esrflags & CAN_ESR_LEC) != 0U)) 8001fd4: 68fb ldr r3, [r7, #12] 8001fd6: f003 0370 and.w r3, r3, #112 ; 0x70 if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && 8001fda: 2b00 cmp r3, #0 8001fdc: d038 beq.n 8002050 { switch (esrflags & CAN_ESR_LEC) 8001fde: 68fb ldr r3, [r7, #12] 8001fe0: f003 0370 and.w r3, r3, #112 ; 0x70 8001fe4: 2b30 cmp r3, #48 ; 0x30 8001fe6: d017 beq.n 8002018 8001fe8: 2b30 cmp r3, #48 ; 0x30 8001fea: d804 bhi.n 8001ff6 8001fec: 2b10 cmp r3, #16 8001fee: d009 beq.n 8002004 8001ff0: 2b20 cmp r3, #32 8001ff2: d00c beq.n 800200e case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): /* Set CAN error code to CRC error */ errorcode |= HAL_CAN_ERROR_CRC; break; default: break; 8001ff4: e024 b.n 8002040 switch (esrflags & CAN_ESR_LEC) 8001ff6: 2b50 cmp r3, #80 ; 0x50 8001ff8: d018 beq.n 800202c 8001ffa: 2b60 cmp r3, #96 ; 0x60 8001ffc: d01b beq.n 8002036 8001ffe: 2b40 cmp r3, #64 ; 0x40 8002000: d00f beq.n 8002022 break; 8002002: e01d b.n 8002040 errorcode |= HAL_CAN_ERROR_STF; 8002004: 6a7b ldr r3, [r7, #36] ; 0x24 8002006: f043 0308 orr.w r3, r3, #8 800200a: 627b str r3, [r7, #36] ; 0x24 break; 800200c: e018 b.n 8002040 errorcode |= HAL_CAN_ERROR_FOR; 800200e: 6a7b ldr r3, [r7, #36] ; 0x24 8002010: f043 0310 orr.w r3, r3, #16 8002014: 627b str r3, [r7, #36] ; 0x24 break; 8002016: e013 b.n 8002040 errorcode |= HAL_CAN_ERROR_ACK; 8002018: 6a7b ldr r3, [r7, #36] ; 0x24 800201a: f043 0320 orr.w r3, r3, #32 800201e: 627b str r3, [r7, #36] ; 0x24 break; 8002020: e00e b.n 8002040 errorcode |= HAL_CAN_ERROR_BR; 8002022: 6a7b ldr r3, [r7, #36] ; 0x24 8002024: f043 0340 orr.w r3, r3, #64 ; 0x40 8002028: 627b str r3, [r7, #36] ; 0x24 break; 800202a: e009 b.n 8002040 errorcode |= HAL_CAN_ERROR_BD; 800202c: 6a7b ldr r3, [r7, #36] ; 0x24 800202e: f043 0380 orr.w r3, r3, #128 ; 0x80 8002032: 627b str r3, [r7, #36] ; 0x24 break; 8002034: e004 b.n 8002040 errorcode |= HAL_CAN_ERROR_CRC; 8002036: 6a7b ldr r3, [r7, #36] ; 0x24 8002038: f443 7380 orr.w r3, r3, #256 ; 0x100 800203c: 627b str r3, [r7, #36] ; 0x24 break; 800203e: bf00 nop } /* Clear Last error code Flag */ CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); 8002040: 687b ldr r3, [r7, #4] 8002042: 681b ldr r3, [r3, #0] 8002044: 699a ldr r2, [r3, #24] 8002046: 687b ldr r3, [r7, #4] 8002048: 681b ldr r3, [r3, #0] 800204a: f022 0270 bic.w r2, r2, #112 ; 0x70 800204e: 619a str r2, [r3, #24] } } /* Clear ERRI Flag */ __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); 8002050: 687b ldr r3, [r7, #4] 8002052: 681b ldr r3, [r3, #0] 8002054: 2204 movs r2, #4 8002056: 605a str r2, [r3, #4] } /* Call the Error call Back in case of Errors */ if (errorcode != HAL_CAN_ERROR_NONE) 8002058: 6a7b ldr r3, [r7, #36] ; 0x24 800205a: 2b00 cmp r3, #0 800205c: d008 beq.n 8002070 { /* Update error code in handle */ hcan->ErrorCode |= errorcode; 800205e: 687b ldr r3, [r7, #4] 8002060: 6a5a ldr r2, [r3, #36] ; 0x24 8002062: 6a7b ldr r3, [r7, #36] ; 0x24 8002064: 431a orrs r2, r3 8002066: 687b ldr r3, [r7, #4] 8002068: 625a str r2, [r3, #36] ; 0x24 #if USE_HAL_CAN_REGISTER_CALLBACKS == 1 /* Call registered callback*/ hcan->ErrorCallback(hcan); #else /* Call weak (surcharged) callback */ HAL_CAN_ErrorCallback(hcan); 800206a: 6878 ldr r0, [r7, #4] 800206c: f001 fa38 bl 80034e0 #endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ } } 8002070: bf00 nop 8002072: 3728 adds r7, #40 ; 0x28 8002074: 46bd mov sp, r7 8002076: bd80 pop {r7, pc} 08002078 : * @param hcan pointer to an CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) { 8002078: b480 push {r7} 800207a: b083 sub sp, #12 800207c: af00 add r7, sp, #0 800207e: 6078 str r0, [r7, #4] /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_TxMailbox0AbortCallback could be implemented in the user file */ } 8002080: bf00 nop 8002082: 370c adds r7, #12 8002084: 46bd mov sp, r7 8002086: bc80 pop {r7} 8002088: 4770 bx lr 0800208a : * @param hcan pointer to an CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) { 800208a: b480 push {r7} 800208c: b083 sub sp, #12 800208e: af00 add r7, sp, #0 8002090: 6078 str r0, [r7, #4] /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_TxMailbox1AbortCallback could be implemented in the user file */ } 8002092: bf00 nop 8002094: 370c adds r7, #12 8002096: 46bd mov sp, r7 8002098: bc80 pop {r7} 800209a: 4770 bx lr 0800209c : * @param hcan pointer to an CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) { 800209c: b480 push {r7} 800209e: b083 sub sp, #12 80020a0: af00 add r7, sp, #0 80020a2: 6078 str r0, [r7, #4] /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_TxMailbox2AbortCallback could be implemented in the user file */ } 80020a4: bf00 nop 80020a6: 370c adds r7, #12 80020a8: 46bd mov sp, r7 80020aa: bc80 pop {r7} 80020ac: 4770 bx lr 080020ae : * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) { 80020ae: b480 push {r7} 80020b0: b083 sub sp, #12 80020b2: af00 add r7, sp, #0 80020b4: 6078 str r0, [r7, #4] /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_RxFifo1MsgPendingCallback could be implemented in the user file */ } 80020b6: bf00 nop 80020b8: 370c adds r7, #12 80020ba: 46bd mov sp, r7 80020bc: bc80 pop {r7} 80020be: 4770 bx lr 080020c0 : * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) { 80020c0: b480 push {r7} 80020c2: b083 sub sp, #12 80020c4: af00 add r7, sp, #0 80020c6: 6078 str r0, [r7, #4] /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_RxFifo1FullCallback could be implemented in the user file */ } 80020c8: bf00 nop 80020ca: 370c adds r7, #12 80020cc: 46bd mov sp, r7 80020ce: bc80 pop {r7} 80020d0: 4770 bx lr 080020d2 : * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) { 80020d2: b480 push {r7} 80020d4: b083 sub sp, #12 80020d6: af00 add r7, sp, #0 80020d8: 6078 str r0, [r7, #4] UNUSED(hcan); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_SleepCallback could be implemented in the user file */ } 80020da: bf00 nop 80020dc: 370c adds r7, #12 80020de: 46bd mov sp, r7 80020e0: bc80 pop {r7} 80020e2: 4770 bx lr 080020e4 : * @param hcan pointer to a CAN_HandleTypeDef structure that contains * the configuration information for the specified CAN. * @retval None */ __weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) { 80020e4: b480 push {r7} 80020e6: b083 sub sp, #12 80020e8: af00 add r7, sp, #0 80020ea: 6078 str r0, [r7, #4] /* NOTE : This function Should not be modified, when the callback is needed, the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the user file */ } 80020ec: bf00 nop 80020ee: 370c adds r7, #12 80020f0: 46bd mov sp, r7 80020f2: bc80 pop {r7} 80020f4: 4770 bx lr ... 080020f8 <__NVIC_SetPriorityGrouping>: { 80020f8: b480 push {r7} 80020fa: b085 sub sp, #20 80020fc: af00 add r7, sp, #0 80020fe: 6078 str r0, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 8002100: 687b ldr r3, [r7, #4] 8002102: f003 0307 and.w r3, r3, #7 8002106: 60fb str r3, [r7, #12] reg_value = SCB->AIRCR; /* read old register configuration */ 8002108: 4b0c ldr r3, [pc, #48] ; (800213c <__NVIC_SetPriorityGrouping+0x44>) 800210a: 68db ldr r3, [r3, #12] 800210c: 60bb str r3, [r7, #8] reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ 800210e: 68ba ldr r2, [r7, #8] 8002110: f64f 03ff movw r3, #63743 ; 0xf8ff 8002114: 4013 ands r3, r2 8002116: 60bb str r3, [r7, #8] (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ 8002118: 68fb ldr r3, [r7, #12] 800211a: 021a lsls r2, r3, #8 ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | 800211c: 68bb ldr r3, [r7, #8] 800211e: 4313 orrs r3, r2 reg_value = (reg_value | 8002120: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 8002124: f443 3300 orr.w r3, r3, #131072 ; 0x20000 8002128: 60bb str r3, [r7, #8] SCB->AIRCR = reg_value; 800212a: 4a04 ldr r2, [pc, #16] ; (800213c <__NVIC_SetPriorityGrouping+0x44>) 800212c: 68bb ldr r3, [r7, #8] 800212e: 60d3 str r3, [r2, #12] } 8002130: bf00 nop 8002132: 3714 adds r7, #20 8002134: 46bd mov sp, r7 8002136: bc80 pop {r7} 8002138: 4770 bx lr 800213a: bf00 nop 800213c: e000ed00 .word 0xe000ed00 08002140 <__NVIC_GetPriorityGrouping>: { 8002140: b480 push {r7} 8002142: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); 8002144: 4b04 ldr r3, [pc, #16] ; (8002158 <__NVIC_GetPriorityGrouping+0x18>) 8002146: 68db ldr r3, [r3, #12] 8002148: 0a1b lsrs r3, r3, #8 800214a: f003 0307 and.w r3, r3, #7 } 800214e: 4618 mov r0, r3 8002150: 46bd mov sp, r7 8002152: bc80 pop {r7} 8002154: 4770 bx lr 8002156: bf00 nop 8002158: e000ed00 .word 0xe000ed00 0800215c <__NVIC_EnableIRQ>: { 800215c: b480 push {r7} 800215e: b083 sub sp, #12 8002160: af00 add r7, sp, #0 8002162: 4603 mov r3, r0 8002164: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 8002166: f997 3007 ldrsb.w r3, [r7, #7] 800216a: 2b00 cmp r3, #0 800216c: db0b blt.n 8002186 <__NVIC_EnableIRQ+0x2a> NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); 800216e: 79fb ldrb r3, [r7, #7] 8002170: f003 021f and.w r2, r3, #31 8002174: 4906 ldr r1, [pc, #24] ; (8002190 <__NVIC_EnableIRQ+0x34>) 8002176: f997 3007 ldrsb.w r3, [r7, #7] 800217a: 095b lsrs r3, r3, #5 800217c: 2001 movs r0, #1 800217e: fa00 f202 lsl.w r2, r0, r2 8002182: f841 2023 str.w r2, [r1, r3, lsl #2] } 8002186: bf00 nop 8002188: 370c adds r7, #12 800218a: 46bd mov sp, r7 800218c: bc80 pop {r7} 800218e: 4770 bx lr 8002190: e000e100 .word 0xe000e100 08002194 <__NVIC_SetPriority>: { 8002194: b480 push {r7} 8002196: b083 sub sp, #12 8002198: af00 add r7, sp, #0 800219a: 4603 mov r3, r0 800219c: 6039 str r1, [r7, #0] 800219e: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 80021a0: f997 3007 ldrsb.w r3, [r7, #7] 80021a4: 2b00 cmp r3, #0 80021a6: db0a blt.n 80021be <__NVIC_SetPriority+0x2a> NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 80021a8: 683b ldr r3, [r7, #0] 80021aa: b2da uxtb r2, r3 80021ac: 490c ldr r1, [pc, #48] ; (80021e0 <__NVIC_SetPriority+0x4c>) 80021ae: f997 3007 ldrsb.w r3, [r7, #7] 80021b2: 0112 lsls r2, r2, #4 80021b4: b2d2 uxtb r2, r2 80021b6: 440b add r3, r1 80021b8: f883 2300 strb.w r2, [r3, #768] ; 0x300 } 80021bc: e00a b.n 80021d4 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 80021be: 683b ldr r3, [r7, #0] 80021c0: b2da uxtb r2, r3 80021c2: 4908 ldr r1, [pc, #32] ; (80021e4 <__NVIC_SetPriority+0x50>) 80021c4: 79fb ldrb r3, [r7, #7] 80021c6: f003 030f and.w r3, r3, #15 80021ca: 3b04 subs r3, #4 80021cc: 0112 lsls r2, r2, #4 80021ce: b2d2 uxtb r2, r2 80021d0: 440b add r3, r1 80021d2: 761a strb r2, [r3, #24] } 80021d4: bf00 nop 80021d6: 370c adds r7, #12 80021d8: 46bd mov sp, r7 80021da: bc80 pop {r7} 80021dc: 4770 bx lr 80021de: bf00 nop 80021e0: e000e100 .word 0xe000e100 80021e4: e000ed00 .word 0xe000ed00 080021e8 : { 80021e8: b480 push {r7} 80021ea: b089 sub sp, #36 ; 0x24 80021ec: af00 add r7, sp, #0 80021ee: 60f8 str r0, [r7, #12] 80021f0: 60b9 str r1, [r7, #8] 80021f2: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ 80021f4: 68fb ldr r3, [r7, #12] 80021f6: f003 0307 and.w r3, r3, #7 80021fa: 61fb str r3, [r7, #28] PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); 80021fc: 69fb ldr r3, [r7, #28] 80021fe: f1c3 0307 rsb r3, r3, #7 8002202: 2b04 cmp r3, #4 8002204: bf28 it cs 8002206: 2304 movcs r3, #4 8002208: 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)); 800220a: 69fb ldr r3, [r7, #28] 800220c: 3304 adds r3, #4 800220e: 2b06 cmp r3, #6 8002210: d902 bls.n 8002218 8002212: 69fb ldr r3, [r7, #28] 8002214: 3b03 subs r3, #3 8002216: e000 b.n 800221a 8002218: 2300 movs r3, #0 800221a: 617b str r3, [r7, #20] ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 800221c: f04f 32ff mov.w r2, #4294967295 8002220: 69bb ldr r3, [r7, #24] 8002222: fa02 f303 lsl.w r3, r2, r3 8002226: 43da mvns r2, r3 8002228: 68bb ldr r3, [r7, #8] 800222a: 401a ands r2, r3 800222c: 697b ldr r3, [r7, #20] 800222e: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) 8002230: f04f 31ff mov.w r1, #4294967295 8002234: 697b ldr r3, [r7, #20] 8002236: fa01 f303 lsl.w r3, r1, r3 800223a: 43d9 mvns r1, r3 800223c: 687b ldr r3, [r7, #4] 800223e: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | 8002240: 4313 orrs r3, r2 } 8002242: 4618 mov r0, r3 8002244: 3724 adds r7, #36 ; 0x24 8002246: 46bd mov sp, r7 8002248: bc80 pop {r7} 800224a: 4770 bx lr 0800224c : \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) { 800224c: b580 push {r7, lr} 800224e: b082 sub sp, #8 8002250: af00 add r7, sp, #0 8002252: 6078 str r0, [r7, #4] if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) 8002254: 687b ldr r3, [r7, #4] 8002256: 3b01 subs r3, #1 8002258: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 800225c: d301 bcc.n 8002262 { return (1UL); /* Reload value impossible */ 800225e: 2301 movs r3, #1 8002260: e00f b.n 8002282 } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ 8002262: 4a0a ldr r2, [pc, #40] ; (800228c ) 8002264: 687b ldr r3, [r7, #4] 8002266: 3b01 subs r3, #1 8002268: 6053 str r3, [r2, #4] NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ 800226a: 210f movs r1, #15 800226c: f04f 30ff mov.w r0, #4294967295 8002270: f7ff ff90 bl 8002194 <__NVIC_SetPriority> SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ 8002274: 4b05 ldr r3, [pc, #20] ; (800228c ) 8002276: 2200 movs r2, #0 8002278: 609a str r2, [r3, #8] SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | 800227a: 4b04 ldr r3, [pc, #16] ; (800228c ) 800227c: 2207 movs r2, #7 800227e: 601a str r2, [r3, #0] SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ 8002280: 2300 movs r3, #0 } 8002282: 4618 mov r0, r3 8002284: 3708 adds r7, #8 8002286: 46bd mov sp, r7 8002288: bd80 pop {r7, pc} 800228a: bf00 nop 800228c: e000e010 .word 0xe000e010 08002290 : * @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) { 8002290: b580 push {r7, lr} 8002292: b082 sub sp, #8 8002294: af00 add r7, sp, #0 8002296: 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); 8002298: 6878 ldr r0, [r7, #4] 800229a: f7ff ff2d bl 80020f8 <__NVIC_SetPriorityGrouping> } 800229e: bf00 nop 80022a0: 3708 adds r7, #8 80022a2: 46bd mov sp, r7 80022a4: bd80 pop {r7, pc} 080022a6 : * 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) { 80022a6: b580 push {r7, lr} 80022a8: b086 sub sp, #24 80022aa: af00 add r7, sp, #0 80022ac: 4603 mov r3, r0 80022ae: 60b9 str r1, [r7, #8] 80022b0: 607a str r2, [r7, #4] 80022b2: 73fb strb r3, [r7, #15] uint32_t prioritygroup = 0x00U; 80022b4: 2300 movs r3, #0 80022b6: 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(); 80022b8: f7ff ff42 bl 8002140 <__NVIC_GetPriorityGrouping> 80022bc: 6178 str r0, [r7, #20] NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); 80022be: 687a ldr r2, [r7, #4] 80022c0: 68b9 ldr r1, [r7, #8] 80022c2: 6978 ldr r0, [r7, #20] 80022c4: f7ff ff90 bl 80021e8 80022c8: 4602 mov r2, r0 80022ca: f997 300f ldrsb.w r3, [r7, #15] 80022ce: 4611 mov r1, r2 80022d0: 4618 mov r0, r3 80022d2: f7ff ff5f bl 8002194 <__NVIC_SetPriority> } 80022d6: bf00 nop 80022d8: 3718 adds r7, #24 80022da: 46bd mov sp, r7 80022dc: bd80 pop {r7, pc} 080022de : * 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 (stm32f10xxx.h)) * @retval None */ void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) { 80022de: b580 push {r7, lr} 80022e0: b082 sub sp, #8 80022e2: af00 add r7, sp, #0 80022e4: 4603 mov r3, r0 80022e6: 71fb strb r3, [r7, #7] /* Check the parameters */ assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); /* Enable interrupt */ NVIC_EnableIRQ(IRQn); 80022e8: f997 3007 ldrsb.w r3, [r7, #7] 80022ec: 4618 mov r0, r3 80022ee: f7ff ff35 bl 800215c <__NVIC_EnableIRQ> } 80022f2: bf00 nop 80022f4: 3708 adds r7, #8 80022f6: 46bd mov sp, r7 80022f8: bd80 pop {r7, pc} 080022fa : * @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) { 80022fa: b580 push {r7, lr} 80022fc: b082 sub sp, #8 80022fe: af00 add r7, sp, #0 8002300: 6078 str r0, [r7, #4] return SysTick_Config(TicksNumb); 8002302: 6878 ldr r0, [r7, #4] 8002304: f7ff ffa2 bl 800224c 8002308: 4603 mov r3, r0 } 800230a: 4618 mov r0, r3 800230c: 3708 adds r7, #8 800230e: 46bd mov sp, r7 8002310: bd80 pop {r7, pc} ... 08002314 : * @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) { 8002314: b480 push {r7} 8002316: b08b sub sp, #44 ; 0x2c 8002318: af00 add r7, sp, #0 800231a: 6078 str r0, [r7, #4] 800231c: 6039 str r1, [r7, #0] uint32_t position = 0x00u; 800231e: 2300 movs r3, #0 8002320: 627b str r3, [r7, #36] ; 0x24 uint32_t ioposition; uint32_t iocurrent; uint32_t temp; uint32_t config = 0x00u; 8002322: 2300 movs r3, #0 8002324: 623b str r3, [r7, #32] assert_param(IS_GPIO_ALL_INSTANCE(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Init->Pin)); assert_param(IS_GPIO_MODE(GPIO_Init->Mode)); /* Configure the port pins */ while (((GPIO_Init->Pin) >> position) != 0x00u) 8002326: e133 b.n 8002590 { /* Get the IO position */ ioposition = (0x01uL << position); 8002328: 2201 movs r2, #1 800232a: 6a7b ldr r3, [r7, #36] ; 0x24 800232c: fa02 f303 lsl.w r3, r2, r3 8002330: 61fb str r3, [r7, #28] /* Get the current IO position */ iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; 8002332: 683b ldr r3, [r7, #0] 8002334: 681b ldr r3, [r3, #0] 8002336: 69fa ldr r2, [r7, #28] 8002338: 4013 ands r3, r2 800233a: 61bb str r3, [r7, #24] if (iocurrent == ioposition) 800233c: 69ba ldr r2, [r7, #24] 800233e: 69fb ldr r3, [r7, #28] 8002340: 429a cmp r2, r3 8002342: f040 8122 bne.w 800258a { /* Check the Alternate function parameters */ assert_param(IS_GPIO_AF_INSTANCE(GPIOx)); /* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */ switch (GPIO_Init->Mode) 8002346: 683b ldr r3, [r7, #0] 8002348: 685b ldr r3, [r3, #4] 800234a: 2b12 cmp r3, #18 800234c: d034 beq.n 80023b8 800234e: 2b12 cmp r3, #18 8002350: d80d bhi.n 800236e 8002352: 2b02 cmp r3, #2 8002354: d02b beq.n 80023ae 8002356: 2b02 cmp r3, #2 8002358: d804 bhi.n 8002364 800235a: 2b00 cmp r3, #0 800235c: d031 beq.n 80023c2 800235e: 2b01 cmp r3, #1 8002360: d01c beq.n 800239c config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; break; /* Parameters are checked with assert_param */ default: break; 8002362: e048 b.n 80023f6 switch (GPIO_Init->Mode) 8002364: 2b03 cmp r3, #3 8002366: d043 beq.n 80023f0 8002368: 2b11 cmp r3, #17 800236a: d01b beq.n 80023a4 break; 800236c: e043 b.n 80023f6 switch (GPIO_Init->Mode) 800236e: 4a8f ldr r2, [pc, #572] ; (80025ac ) 8002370: 4293 cmp r3, r2 8002372: d026 beq.n 80023c2 8002374: 4a8d ldr r2, [pc, #564] ; (80025ac ) 8002376: 4293 cmp r3, r2 8002378: d806 bhi.n 8002388 800237a: 4a8d ldr r2, [pc, #564] ; (80025b0 ) 800237c: 4293 cmp r3, r2 800237e: d020 beq.n 80023c2 8002380: 4a8c ldr r2, [pc, #560] ; (80025b4 ) 8002382: 4293 cmp r3, r2 8002384: d01d beq.n 80023c2 break; 8002386: e036 b.n 80023f6 switch (GPIO_Init->Mode) 8002388: 4a8b ldr r2, [pc, #556] ; (80025b8 ) 800238a: 4293 cmp r3, r2 800238c: d019 beq.n 80023c2 800238e: 4a8b ldr r2, [pc, #556] ; (80025bc ) 8002390: 4293 cmp r3, r2 8002392: d016 beq.n 80023c2 8002394: 4a8a ldr r2, [pc, #552] ; (80025c0 ) 8002396: 4293 cmp r3, r2 8002398: d013 beq.n 80023c2 break; 800239a: e02c b.n 80023f6 config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; 800239c: 683b ldr r3, [r7, #0] 800239e: 68db ldr r3, [r3, #12] 80023a0: 623b str r3, [r7, #32] break; 80023a2: e028 b.n 80023f6 config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; 80023a4: 683b ldr r3, [r7, #0] 80023a6: 68db ldr r3, [r3, #12] 80023a8: 3304 adds r3, #4 80023aa: 623b str r3, [r7, #32] break; 80023ac: e023 b.n 80023f6 config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; 80023ae: 683b ldr r3, [r7, #0] 80023b0: 68db ldr r3, [r3, #12] 80023b2: 3308 adds r3, #8 80023b4: 623b str r3, [r7, #32] break; 80023b6: e01e b.n 80023f6 config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; 80023b8: 683b ldr r3, [r7, #0] 80023ba: 68db ldr r3, [r3, #12] 80023bc: 330c adds r3, #12 80023be: 623b str r3, [r7, #32] break; 80023c0: e019 b.n 80023f6 if (GPIO_Init->Pull == GPIO_NOPULL) 80023c2: 683b ldr r3, [r7, #0] 80023c4: 689b ldr r3, [r3, #8] 80023c6: 2b00 cmp r3, #0 80023c8: d102 bne.n 80023d0 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; 80023ca: 2304 movs r3, #4 80023cc: 623b str r3, [r7, #32] break; 80023ce: e012 b.n 80023f6 else if (GPIO_Init->Pull == GPIO_PULLUP) 80023d0: 683b ldr r3, [r7, #0] 80023d2: 689b ldr r3, [r3, #8] 80023d4: 2b01 cmp r3, #1 80023d6: d105 bne.n 80023e4 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; 80023d8: 2308 movs r3, #8 80023da: 623b str r3, [r7, #32] GPIOx->BSRR = ioposition; 80023dc: 687b ldr r3, [r7, #4] 80023de: 69fa ldr r2, [r7, #28] 80023e0: 611a str r2, [r3, #16] break; 80023e2: e008 b.n 80023f6 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; 80023e4: 2308 movs r3, #8 80023e6: 623b str r3, [r7, #32] GPIOx->BRR = ioposition; 80023e8: 687b ldr r3, [r7, #4] 80023ea: 69fa ldr r2, [r7, #28] 80023ec: 615a str r2, [r3, #20] break; 80023ee: e002 b.n 80023f6 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; 80023f0: 2300 movs r3, #0 80023f2: 623b str r3, [r7, #32] break; 80023f4: bf00 nop } /* Check if the current bit belongs to first half or last half of the pin count number in order to address CRH or CRL register*/ configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH; 80023f6: 69bb ldr r3, [r7, #24] 80023f8: 2bff cmp r3, #255 ; 0xff 80023fa: d801 bhi.n 8002400 80023fc: 687b ldr r3, [r7, #4] 80023fe: e001 b.n 8002404 8002400: 687b ldr r3, [r7, #4] 8002402: 3304 adds r3, #4 8002404: 617b str r3, [r7, #20] registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); 8002406: 69bb ldr r3, [r7, #24] 8002408: 2bff cmp r3, #255 ; 0xff 800240a: d802 bhi.n 8002412 800240c: 6a7b ldr r3, [r7, #36] ; 0x24 800240e: 009b lsls r3, r3, #2 8002410: e002 b.n 8002418 8002412: 6a7b ldr r3, [r7, #36] ; 0x24 8002414: 3b08 subs r3, #8 8002416: 009b lsls r3, r3, #2 8002418: 613b str r3, [r7, #16] /* Apply the new configuration of the pin to the register */ MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset)); 800241a: 697b ldr r3, [r7, #20] 800241c: 681a ldr r2, [r3, #0] 800241e: 210f movs r1, #15 8002420: 693b ldr r3, [r7, #16] 8002422: fa01 f303 lsl.w r3, r1, r3 8002426: 43db mvns r3, r3 8002428: 401a ands r2, r3 800242a: 6a39 ldr r1, [r7, #32] 800242c: 693b ldr r3, [r7, #16] 800242e: fa01 f303 lsl.w r3, r1, r3 8002432: 431a orrs r2, r3 8002434: 697b ldr r3, [r7, #20] 8002436: 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) 8002438: 683b ldr r3, [r7, #0] 800243a: 685b ldr r3, [r3, #4] 800243c: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 8002440: 2b00 cmp r3, #0 8002442: f000 80a2 beq.w 800258a { /* Enable AFIO Clock */ __HAL_RCC_AFIO_CLK_ENABLE(); 8002446: 4b5f ldr r3, [pc, #380] ; (80025c4 ) 8002448: 699b ldr r3, [r3, #24] 800244a: 4a5e ldr r2, [pc, #376] ; (80025c4 ) 800244c: f043 0301 orr.w r3, r3, #1 8002450: 6193 str r3, [r2, #24] 8002452: 4b5c ldr r3, [pc, #368] ; (80025c4 ) 8002454: 699b ldr r3, [r3, #24] 8002456: f003 0301 and.w r3, r3, #1 800245a: 60bb str r3, [r7, #8] 800245c: 68bb ldr r3, [r7, #8] temp = AFIO->EXTICR[position >> 2u]; 800245e: 4a5a ldr r2, [pc, #360] ; (80025c8 ) 8002460: 6a7b ldr r3, [r7, #36] ; 0x24 8002462: 089b lsrs r3, r3, #2 8002464: 3302 adds r3, #2 8002466: f852 3023 ldr.w r3, [r2, r3, lsl #2] 800246a: 60fb str r3, [r7, #12] CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); 800246c: 6a7b ldr r3, [r7, #36] ; 0x24 800246e: f003 0303 and.w r3, r3, #3 8002472: 009b lsls r3, r3, #2 8002474: 220f movs r2, #15 8002476: fa02 f303 lsl.w r3, r2, r3 800247a: 43db mvns r3, r3 800247c: 68fa ldr r2, [r7, #12] 800247e: 4013 ands r3, r2 8002480: 60fb str r3, [r7, #12] SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); 8002482: 687b ldr r3, [r7, #4] 8002484: 4a51 ldr r2, [pc, #324] ; (80025cc ) 8002486: 4293 cmp r3, r2 8002488: d01f beq.n 80024ca 800248a: 687b ldr r3, [r7, #4] 800248c: 4a50 ldr r2, [pc, #320] ; (80025d0 ) 800248e: 4293 cmp r3, r2 8002490: d019 beq.n 80024c6 8002492: 687b ldr r3, [r7, #4] 8002494: 4a4f ldr r2, [pc, #316] ; (80025d4 ) 8002496: 4293 cmp r3, r2 8002498: d013 beq.n 80024c2 800249a: 687b ldr r3, [r7, #4] 800249c: 4a4e ldr r2, [pc, #312] ; (80025d8 ) 800249e: 4293 cmp r3, r2 80024a0: d00d beq.n 80024be 80024a2: 687b ldr r3, [r7, #4] 80024a4: 4a4d ldr r2, [pc, #308] ; (80025dc ) 80024a6: 4293 cmp r3, r2 80024a8: d007 beq.n 80024ba 80024aa: 687b ldr r3, [r7, #4] 80024ac: 4a4c ldr r2, [pc, #304] ; (80025e0 ) 80024ae: 4293 cmp r3, r2 80024b0: d101 bne.n 80024b6 80024b2: 2305 movs r3, #5 80024b4: e00a b.n 80024cc 80024b6: 2306 movs r3, #6 80024b8: e008 b.n 80024cc 80024ba: 2304 movs r3, #4 80024bc: e006 b.n 80024cc 80024be: 2303 movs r3, #3 80024c0: e004 b.n 80024cc 80024c2: 2302 movs r3, #2 80024c4: e002 b.n 80024cc 80024c6: 2301 movs r3, #1 80024c8: e000 b.n 80024cc 80024ca: 2300 movs r3, #0 80024cc: 6a7a ldr r2, [r7, #36] ; 0x24 80024ce: f002 0203 and.w r2, r2, #3 80024d2: 0092 lsls r2, r2, #2 80024d4: 4093 lsls r3, r2 80024d6: 68fa ldr r2, [r7, #12] 80024d8: 4313 orrs r3, r2 80024da: 60fb str r3, [r7, #12] AFIO->EXTICR[position >> 2u] = temp; 80024dc: 493a ldr r1, [pc, #232] ; (80025c8 ) 80024de: 6a7b ldr r3, [r7, #36] ; 0x24 80024e0: 089b lsrs r3, r3, #2 80024e2: 3302 adds r3, #2 80024e4: 68fa ldr r2, [r7, #12] 80024e6: f841 2023 str.w r2, [r1, r3, lsl #2] /* Configure the interrupt mask */ if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) 80024ea: 683b ldr r3, [r7, #0] 80024ec: 685b ldr r3, [r3, #4] 80024ee: f403 3380 and.w r3, r3, #65536 ; 0x10000 80024f2: 2b00 cmp r3, #0 80024f4: d006 beq.n 8002504 { SET_BIT(EXTI->IMR, iocurrent); 80024f6: 4b3b ldr r3, [pc, #236] ; (80025e4 ) 80024f8: 681a ldr r2, [r3, #0] 80024fa: 493a ldr r1, [pc, #232] ; (80025e4 ) 80024fc: 69bb ldr r3, [r7, #24] 80024fe: 4313 orrs r3, r2 8002500: 600b str r3, [r1, #0] 8002502: e006 b.n 8002512 } else { CLEAR_BIT(EXTI->IMR, iocurrent); 8002504: 4b37 ldr r3, [pc, #220] ; (80025e4 ) 8002506: 681a ldr r2, [r3, #0] 8002508: 69bb ldr r3, [r7, #24] 800250a: 43db mvns r3, r3 800250c: 4935 ldr r1, [pc, #212] ; (80025e4 ) 800250e: 4013 ands r3, r2 8002510: 600b str r3, [r1, #0] } /* Configure the event mask */ if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) 8002512: 683b ldr r3, [r7, #0] 8002514: 685b ldr r3, [r3, #4] 8002516: f403 3300 and.w r3, r3, #131072 ; 0x20000 800251a: 2b00 cmp r3, #0 800251c: d006 beq.n 800252c { SET_BIT(EXTI->EMR, iocurrent); 800251e: 4b31 ldr r3, [pc, #196] ; (80025e4 ) 8002520: 685a ldr r2, [r3, #4] 8002522: 4930 ldr r1, [pc, #192] ; (80025e4 ) 8002524: 69bb ldr r3, [r7, #24] 8002526: 4313 orrs r3, r2 8002528: 604b str r3, [r1, #4] 800252a: e006 b.n 800253a } else { CLEAR_BIT(EXTI->EMR, iocurrent); 800252c: 4b2d ldr r3, [pc, #180] ; (80025e4 ) 800252e: 685a ldr r2, [r3, #4] 8002530: 69bb ldr r3, [r7, #24] 8002532: 43db mvns r3, r3 8002534: 492b ldr r1, [pc, #172] ; (80025e4 ) 8002536: 4013 ands r3, r2 8002538: 604b str r3, [r1, #4] } /* Enable or disable the rising trigger */ if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) 800253a: 683b ldr r3, [r7, #0] 800253c: 685b ldr r3, [r3, #4] 800253e: f403 1380 and.w r3, r3, #1048576 ; 0x100000 8002542: 2b00 cmp r3, #0 8002544: d006 beq.n 8002554 { SET_BIT(EXTI->RTSR, iocurrent); 8002546: 4b27 ldr r3, [pc, #156] ; (80025e4 ) 8002548: 689a ldr r2, [r3, #8] 800254a: 4926 ldr r1, [pc, #152] ; (80025e4 ) 800254c: 69bb ldr r3, [r7, #24] 800254e: 4313 orrs r3, r2 8002550: 608b str r3, [r1, #8] 8002552: e006 b.n 8002562 } else { CLEAR_BIT(EXTI->RTSR, iocurrent); 8002554: 4b23 ldr r3, [pc, #140] ; (80025e4 ) 8002556: 689a ldr r2, [r3, #8] 8002558: 69bb ldr r3, [r7, #24] 800255a: 43db mvns r3, r3 800255c: 4921 ldr r1, [pc, #132] ; (80025e4 ) 800255e: 4013 ands r3, r2 8002560: 608b str r3, [r1, #8] } /* Enable or disable the falling trigger */ if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) 8002562: 683b ldr r3, [r7, #0] 8002564: 685b ldr r3, [r3, #4] 8002566: f403 1300 and.w r3, r3, #2097152 ; 0x200000 800256a: 2b00 cmp r3, #0 800256c: d006 beq.n 800257c { SET_BIT(EXTI->FTSR, iocurrent); 800256e: 4b1d ldr r3, [pc, #116] ; (80025e4 ) 8002570: 68da ldr r2, [r3, #12] 8002572: 491c ldr r1, [pc, #112] ; (80025e4 ) 8002574: 69bb ldr r3, [r7, #24] 8002576: 4313 orrs r3, r2 8002578: 60cb str r3, [r1, #12] 800257a: e006 b.n 800258a } else { CLEAR_BIT(EXTI->FTSR, iocurrent); 800257c: 4b19 ldr r3, [pc, #100] ; (80025e4 ) 800257e: 68da ldr r2, [r3, #12] 8002580: 69bb ldr r3, [r7, #24] 8002582: 43db mvns r3, r3 8002584: 4917 ldr r1, [pc, #92] ; (80025e4 ) 8002586: 4013 ands r3, r2 8002588: 60cb str r3, [r1, #12] } } } position++; 800258a: 6a7b ldr r3, [r7, #36] ; 0x24 800258c: 3301 adds r3, #1 800258e: 627b str r3, [r7, #36] ; 0x24 while (((GPIO_Init->Pin) >> position) != 0x00u) 8002590: 683b ldr r3, [r7, #0] 8002592: 681a ldr r2, [r3, #0] 8002594: 6a7b ldr r3, [r7, #36] ; 0x24 8002596: fa22 f303 lsr.w r3, r2, r3 800259a: 2b00 cmp r3, #0 800259c: f47f aec4 bne.w 8002328 } } 80025a0: bf00 nop 80025a2: 372c adds r7, #44 ; 0x2c 80025a4: 46bd mov sp, r7 80025a6: bc80 pop {r7} 80025a8: 4770 bx lr 80025aa: bf00 nop 80025ac: 10210000 .word 0x10210000 80025b0: 10110000 .word 0x10110000 80025b4: 10120000 .word 0x10120000 80025b8: 10310000 .word 0x10310000 80025bc: 10320000 .word 0x10320000 80025c0: 10220000 .word 0x10220000 80025c4: 40021000 .word 0x40021000 80025c8: 40010000 .word 0x40010000 80025cc: 40010800 .word 0x40010800 80025d0: 40010c00 .word 0x40010c00 80025d4: 40011000 .word 0x40011000 80025d8: 40011400 .word 0x40011400 80025dc: 40011800 .word 0x40011800 80025e0: 40011c00 .word 0x40011c00 80025e4: 40010400 .word 0x40010400 080025e8 : { 80025e8: b480 push {r7} 80025ea: b083 sub sp, #12 80025ec: af00 add r7, sp, #0 80025ee: 6078 str r0, [r7, #4] SET_BIT(EXTI->IMR, ExtiLine); 80025f0: 4b05 ldr r3, [pc, #20] ; (8002608 ) 80025f2: 681a ldr r2, [r3, #0] 80025f4: 4904 ldr r1, [pc, #16] ; (8002608 ) 80025f6: 687b ldr r3, [r7, #4] 80025f8: 4313 orrs r3, r2 80025fa: 600b str r3, [r1, #0] } 80025fc: bf00 nop 80025fe: 370c adds r7, #12 8002600: 46bd mov sp, r7 8002602: bc80 pop {r7} 8002604: 4770 bx lr 8002606: bf00 nop 8002608: 40010400 .word 0x40010400 0800260c : { 800260c: b480 push {r7} 800260e: b083 sub sp, #12 8002610: af00 add r7, sp, #0 8002612: 6078 str r0, [r7, #4] CLEAR_BIT(EXTI->IMR, ExtiLine); 8002614: 4b05 ldr r3, [pc, #20] ; (800262c ) 8002616: 681a ldr r2, [r3, #0] 8002618: 687b ldr r3, [r7, #4] 800261a: 43db mvns r3, r3 800261c: 4903 ldr r1, [pc, #12] ; (800262c ) 800261e: 4013 ands r3, r2 8002620: 600b str r3, [r1, #0] } 8002622: bf00 nop 8002624: 370c adds r7, #12 8002626: 46bd mov sp, r7 8002628: bc80 pop {r7} 800262a: 4770 bx lr 800262c: 40010400 .word 0x40010400 08002630 : { 8002630: b480 push {r7} 8002632: b083 sub sp, #12 8002634: af00 add r7, sp, #0 8002636: 6078 str r0, [r7, #4] SET_BIT(EXTI->EMR, ExtiLine); 8002638: 4b05 ldr r3, [pc, #20] ; (8002650 ) 800263a: 685a ldr r2, [r3, #4] 800263c: 4904 ldr r1, [pc, #16] ; (8002650 ) 800263e: 687b ldr r3, [r7, #4] 8002640: 4313 orrs r3, r2 8002642: 604b str r3, [r1, #4] } 8002644: bf00 nop 8002646: 370c adds r7, #12 8002648: 46bd mov sp, r7 800264a: bc80 pop {r7} 800264c: 4770 bx lr 800264e: bf00 nop 8002650: 40010400 .word 0x40010400 08002654 : { 8002654: b480 push {r7} 8002656: b083 sub sp, #12 8002658: af00 add r7, sp, #0 800265a: 6078 str r0, [r7, #4] CLEAR_BIT(EXTI->EMR, ExtiLine); 800265c: 4b05 ldr r3, [pc, #20] ; (8002674 ) 800265e: 685a ldr r2, [r3, #4] 8002660: 687b ldr r3, [r7, #4] 8002662: 43db mvns r3, r3 8002664: 4903 ldr r1, [pc, #12] ; (8002674 ) 8002666: 4013 ands r3, r2 8002668: 604b str r3, [r1, #4] } 800266a: bf00 nop 800266c: 370c adds r7, #12 800266e: 46bd mov sp, r7 8002670: bc80 pop {r7} 8002672: 4770 bx lr 8002674: 40010400 .word 0x40010400 08002678 : { 8002678: b480 push {r7} 800267a: b083 sub sp, #12 800267c: af00 add r7, sp, #0 800267e: 6078 str r0, [r7, #4] SET_BIT(EXTI->RTSR, ExtiLine); 8002680: 4b05 ldr r3, [pc, #20] ; (8002698 ) 8002682: 689a ldr r2, [r3, #8] 8002684: 4904 ldr r1, [pc, #16] ; (8002698 ) 8002686: 687b ldr r3, [r7, #4] 8002688: 4313 orrs r3, r2 800268a: 608b str r3, [r1, #8] } 800268c: bf00 nop 800268e: 370c adds r7, #12 8002690: 46bd mov sp, r7 8002692: bc80 pop {r7} 8002694: 4770 bx lr 8002696: bf00 nop 8002698: 40010400 .word 0x40010400 0800269c : { 800269c: b480 push {r7} 800269e: b083 sub sp, #12 80026a0: af00 add r7, sp, #0 80026a2: 6078 str r0, [r7, #4] CLEAR_BIT(EXTI->RTSR, ExtiLine); 80026a4: 4b05 ldr r3, [pc, #20] ; (80026bc ) 80026a6: 689a ldr r2, [r3, #8] 80026a8: 687b ldr r3, [r7, #4] 80026aa: 43db mvns r3, r3 80026ac: 4903 ldr r1, [pc, #12] ; (80026bc ) 80026ae: 4013 ands r3, r2 80026b0: 608b str r3, [r1, #8] } 80026b2: bf00 nop 80026b4: 370c adds r7, #12 80026b6: 46bd mov sp, r7 80026b8: bc80 pop {r7} 80026ba: 4770 bx lr 80026bc: 40010400 .word 0x40010400 080026c0 : { 80026c0: b480 push {r7} 80026c2: b083 sub sp, #12 80026c4: af00 add r7, sp, #0 80026c6: 6078 str r0, [r7, #4] SET_BIT(EXTI->FTSR, ExtiLine); 80026c8: 4b05 ldr r3, [pc, #20] ; (80026e0 ) 80026ca: 68da ldr r2, [r3, #12] 80026cc: 4904 ldr r1, [pc, #16] ; (80026e0 ) 80026ce: 687b ldr r3, [r7, #4] 80026d0: 4313 orrs r3, r2 80026d2: 60cb str r3, [r1, #12] } 80026d4: bf00 nop 80026d6: 370c adds r7, #12 80026d8: 46bd mov sp, r7 80026da: bc80 pop {r7} 80026dc: 4770 bx lr 80026de: bf00 nop 80026e0: 40010400 .word 0x40010400 080026e4 : { 80026e4: b480 push {r7} 80026e6: b083 sub sp, #12 80026e8: af00 add r7, sp, #0 80026ea: 6078 str r0, [r7, #4] CLEAR_BIT(EXTI->FTSR, ExtiLine); 80026ec: 4b05 ldr r3, [pc, #20] ; (8002704 ) 80026ee: 68da ldr r2, [r3, #12] 80026f0: 687b ldr r3, [r7, #4] 80026f2: 43db mvns r3, r3 80026f4: 4903 ldr r1, [pc, #12] ; (8002704 ) 80026f6: 4013 ands r3, r2 80026f8: 60cb str r3, [r1, #12] } 80026fa: bf00 nop 80026fc: 370c adds r7, #12 80026fe: 46bd mov sp, r7 8002700: bc80 pop {r7} 8002702: 4770 bx lr 8002704: 40010400 .word 0x40010400 08002708 : * @retval An ErrorStatus enumeration value: * - SUCCESS: EXTI registers are initialized * - ERROR: not applicable */ uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct) { 8002708: b580 push {r7, lr} 800270a: b084 sub sp, #16 800270c: af00 add r7, sp, #0 800270e: 6078 str r0, [r7, #4] ErrorStatus status = SUCCESS; 8002710: 2300 movs r3, #0 8002712: 73fb strb r3, [r7, #15] assert_param(IS_LL_EXTI_LINE_0_31(EXTI_InitStruct->Line_0_31)); assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->LineCommand)); assert_param(IS_LL_EXTI_MODE(EXTI_InitStruct->Mode)); /* ENABLE LineCommand */ if (EXTI_InitStruct->LineCommand != DISABLE) 8002714: 687b ldr r3, [r7, #4] 8002716: 791b ldrb r3, [r3, #4] 8002718: 2b00 cmp r3, #0 800271a: d060 beq.n 80027de { assert_param(IS_LL_EXTI_TRIGGER(EXTI_InitStruct->Trigger)); /* Configure EXTI Lines in range from 0 to 31 */ if (EXTI_InitStruct->Line_0_31 != LL_EXTI_LINE_NONE) 800271c: 687b ldr r3, [r7, #4] 800271e: 681b ldr r3, [r3, #0] 8002720: 2b00 cmp r3, #0 8002722: d067 beq.n 80027f4 { switch (EXTI_InitStruct->Mode) 8002724: 687b ldr r3, [r7, #4] 8002726: 795b ldrb r3, [r3, #5] 8002728: 2b01 cmp r3, #1 800272a: d00e beq.n 800274a 800272c: 2b02 cmp r3, #2 800272e: d017 beq.n 8002760 8002730: 2b00 cmp r3, #0 8002732: d120 bne.n 8002776 { case LL_EXTI_MODE_IT: /* First Disable Event on provided Lines */ LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 8002734: 687b ldr r3, [r7, #4] 8002736: 681b ldr r3, [r3, #0] 8002738: 4618 mov r0, r3 800273a: f7ff ff8b bl 8002654 /* Then Enable IT on provided Lines */ LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31); 800273e: 687b ldr r3, [r7, #4] 8002740: 681b ldr r3, [r3, #0] 8002742: 4618 mov r0, r3 8002744: f7ff ff50 bl 80025e8 break; 8002748: e018 b.n 800277c case LL_EXTI_MODE_EVENT: /* First Disable IT on provided Lines */ LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 800274a: 687b ldr r3, [r7, #4] 800274c: 681b ldr r3, [r3, #0] 800274e: 4618 mov r0, r3 8002750: f7ff ff5c bl 800260c /* Then Enable Event on provided Lines */ LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31); 8002754: 687b ldr r3, [r7, #4] 8002756: 681b ldr r3, [r3, #0] 8002758: 4618 mov r0, r3 800275a: f7ff ff69 bl 8002630 break; 800275e: e00d b.n 800277c case LL_EXTI_MODE_IT_EVENT: /* Directly Enable IT & Event on provided Lines */ LL_EXTI_EnableIT_0_31(EXTI_InitStruct->Line_0_31); 8002760: 687b ldr r3, [r7, #4] 8002762: 681b ldr r3, [r3, #0] 8002764: 4618 mov r0, r3 8002766: f7ff ff3f bl 80025e8 LL_EXTI_EnableEvent_0_31(EXTI_InitStruct->Line_0_31); 800276a: 687b ldr r3, [r7, #4] 800276c: 681b ldr r3, [r3, #0] 800276e: 4618 mov r0, r3 8002770: f7ff ff5e bl 8002630 break; 8002774: e002 b.n 800277c default: status = ERROR; 8002776: 2301 movs r3, #1 8002778: 73fb strb r3, [r7, #15] break; 800277a: bf00 nop } if (EXTI_InitStruct->Trigger != LL_EXTI_TRIGGER_NONE) 800277c: 687b ldr r3, [r7, #4] 800277e: 799b ldrb r3, [r3, #6] 8002780: 2b00 cmp r3, #0 8002782: d037 beq.n 80027f4 { switch (EXTI_InitStruct->Trigger) 8002784: 687b ldr r3, [r7, #4] 8002786: 799b ldrb r3, [r3, #6] 8002788: 2b02 cmp r3, #2 800278a: d00e beq.n 80027aa 800278c: 2b03 cmp r3, #3 800278e: d017 beq.n 80027c0 8002790: 2b01 cmp r3, #1 8002792: d120 bne.n 80027d6 { case LL_EXTI_TRIGGER_RISING: /* First Disable Falling Trigger on provided Lines */ LL_EXTI_DisableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 8002794: 687b ldr r3, [r7, #4] 8002796: 681b ldr r3, [r3, #0] 8002798: 4618 mov r0, r3 800279a: f7ff ffa3 bl 80026e4 /* Then Enable Rising Trigger on provided Lines */ LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 800279e: 687b ldr r3, [r7, #4] 80027a0: 681b ldr r3, [r3, #0] 80027a2: 4618 mov r0, r3 80027a4: f7ff ff68 bl 8002678 break; 80027a8: e025 b.n 80027f6 case LL_EXTI_TRIGGER_FALLING: /* First Disable Rising Trigger on provided Lines */ LL_EXTI_DisableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 80027aa: 687b ldr r3, [r7, #4] 80027ac: 681b ldr r3, [r3, #0] 80027ae: 4618 mov r0, r3 80027b0: f7ff ff74 bl 800269c /* Then Enable Falling Trigger on provided Lines */ LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 80027b4: 687b ldr r3, [r7, #4] 80027b6: 681b ldr r3, [r3, #0] 80027b8: 4618 mov r0, r3 80027ba: f7ff ff81 bl 80026c0 break; 80027be: e01a b.n 80027f6 case LL_EXTI_TRIGGER_RISING_FALLING: LL_EXTI_EnableRisingTrig_0_31(EXTI_InitStruct->Line_0_31); 80027c0: 687b ldr r3, [r7, #4] 80027c2: 681b ldr r3, [r3, #0] 80027c4: 4618 mov r0, r3 80027c6: f7ff ff57 bl 8002678 LL_EXTI_EnableFallingTrig_0_31(EXTI_InitStruct->Line_0_31); 80027ca: 687b ldr r3, [r7, #4] 80027cc: 681b ldr r3, [r3, #0] 80027ce: 4618 mov r0, r3 80027d0: f7ff ff76 bl 80026c0 break; 80027d4: e00f b.n 80027f6 default: status = ERROR; 80027d6: 2301 movs r3, #1 80027d8: 73fb strb r3, [r7, #15] break; 80027da: bf00 nop 80027dc: e00b b.n 80027f6 } /* DISABLE LineCommand */ else { /* De-configure EXTI Lines in range from 0 to 31 */ LL_EXTI_DisableIT_0_31(EXTI_InitStruct->Line_0_31); 80027de: 687b ldr r3, [r7, #4] 80027e0: 681b ldr r3, [r3, #0] 80027e2: 4618 mov r0, r3 80027e4: f7ff ff12 bl 800260c LL_EXTI_DisableEvent_0_31(EXTI_InitStruct->Line_0_31); 80027e8: 687b ldr r3, [r7, #4] 80027ea: 681b ldr r3, [r3, #0] 80027ec: 4618 mov r0, r3 80027ee: f7ff ff31 bl 8002654 80027f2: e000 b.n 80027f6 } 80027f4: bf00 nop } return status; 80027f6: 7bfb ldrb r3, [r7, #15] } 80027f8: 4618 mov r0, r3 80027fa: 3710 adds r7, #16 80027fc: 46bd mov sp, r7 80027fe: bd80 pop {r7, pc} 08002800 : { 8002800: b490 push {r4, r7} 8002802: b088 sub sp, #32 8002804: af00 add r7, sp, #0 8002806: 60f8 str r0, [r7, #12] 8002808: 60b9 str r1, [r7, #8] 800280a: 607a str r2, [r7, #4] register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24))); 800280c: 68fb ldr r3, [r7, #12] 800280e: 461a mov r2, r3 8002810: 68bb ldr r3, [r7, #8] 8002812: 0e1b lsrs r3, r3, #24 8002814: 4413 add r3, r2 8002816: 461c mov r4, r3 MODIFY_REG(*pReg, ((GPIO_CRL_CNF0 | GPIO_CRL_MODE0) << (POSITION_VAL(Pin) * 4U)), (Mode << (POSITION_VAL(Pin) * 4U))); 8002818: 6822 ldr r2, [r4, #0] 800281a: 68bb ldr r3, [r7, #8] 800281c: 617b str r3, [r7, #20] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 800281e: 697b ldr r3, [r7, #20] 8002820: fa93 f3a3 rbit r3, r3 8002824: 613b str r3, [r7, #16] return result; 8002826: 693b ldr r3, [r7, #16] 8002828: fab3 f383 clz r3, r3 800282c: b2db uxtb r3, r3 800282e: 009b lsls r3, r3, #2 8002830: 210f movs r1, #15 8002832: fa01 f303 lsl.w r3, r1, r3 8002836: 43db mvns r3, r3 8002838: 401a ands r2, r3 800283a: 68bb ldr r3, [r7, #8] 800283c: 61fb str r3, [r7, #28] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 800283e: 69fb ldr r3, [r7, #28] 8002840: fa93 f3a3 rbit r3, r3 8002844: 61bb str r3, [r7, #24] return result; 8002846: 69bb ldr r3, [r7, #24] 8002848: fab3 f383 clz r3, r3 800284c: b2db uxtb r3, r3 800284e: 009b lsls r3, r3, #2 8002850: 6879 ldr r1, [r7, #4] 8002852: fa01 f303 lsl.w r3, r1, r3 8002856: 4313 orrs r3, r2 8002858: 6023 str r3, [r4, #0] } 800285a: bf00 nop 800285c: 3720 adds r7, #32 800285e: 46bd mov sp, r7 8002860: bc90 pop {r4, r7} 8002862: 4770 bx lr 08002864 : { 8002864: b490 push {r4, r7} 8002866: b088 sub sp, #32 8002868: af00 add r7, sp, #0 800286a: 60f8 str r0, [r7, #12] 800286c: 60b9 str r1, [r7, #8] 800286e: 607a str r2, [r7, #4] register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24))); 8002870: 68fb ldr r3, [r7, #12] 8002872: 461a mov r2, r3 8002874: 68bb ldr r3, [r7, #8] 8002876: 0e1b lsrs r3, r3, #24 8002878: 4413 add r3, r2 800287a: 461c mov r4, r3 MODIFY_REG(*pReg, (GPIO_CRL_MODE0 << (POSITION_VAL(Pin) * 4U)), 800287c: 6822 ldr r2, [r4, #0] 800287e: 68bb ldr r3, [r7, #8] 8002880: 617b str r3, [r7, #20] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 8002882: 697b ldr r3, [r7, #20] 8002884: fa93 f3a3 rbit r3, r3 8002888: 613b str r3, [r7, #16] return result; 800288a: 693b ldr r3, [r7, #16] 800288c: fab3 f383 clz r3, r3 8002890: b2db uxtb r3, r3 8002892: 009b lsls r3, r3, #2 8002894: 2103 movs r1, #3 8002896: fa01 f303 lsl.w r3, r1, r3 800289a: 43db mvns r3, r3 800289c: 401a ands r2, r3 800289e: 68bb ldr r3, [r7, #8] 80028a0: 61fb str r3, [r7, #28] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 80028a2: 69fb ldr r3, [r7, #28] 80028a4: fa93 f3a3 rbit r3, r3 80028a8: 61bb str r3, [r7, #24] return result; 80028aa: 69bb ldr r3, [r7, #24] 80028ac: fab3 f383 clz r3, r3 80028b0: b2db uxtb r3, r3 80028b2: 009b lsls r3, r3, #2 80028b4: 6879 ldr r1, [r7, #4] 80028b6: fa01 f303 lsl.w r3, r1, r3 80028ba: 4313 orrs r3, r2 80028bc: 6023 str r3, [r4, #0] } 80028be: bf00 nop 80028c0: 3720 adds r7, #32 80028c2: 46bd mov sp, r7 80028c4: bc90 pop {r4, r7} 80028c6: 4770 bx lr 080028c8 : { 80028c8: b490 push {r4, r7} 80028ca: b088 sub sp, #32 80028cc: af00 add r7, sp, #0 80028ce: 60f8 str r0, [r7, #12] 80028d0: 60b9 str r1, [r7, #8] 80028d2: 607a str r2, [r7, #4] register uint32_t *pReg = (uint32_t *)((uint32_t)((uint32_t)(&GPIOx->CRL) + (Pin >> 24))); 80028d4: 68fb ldr r3, [r7, #12] 80028d6: 461a mov r2, r3 80028d8: 68bb ldr r3, [r7, #8] 80028da: 0e1b lsrs r3, r3, #24 80028dc: 4413 add r3, r2 80028de: 461c mov r4, r3 MODIFY_REG(*pReg, (GPIO_CRL_CNF0_0 << (POSITION_VAL(Pin) * 4U)), 80028e0: 6822 ldr r2, [r4, #0] 80028e2: 68bb ldr r3, [r7, #8] 80028e4: 617b str r3, [r7, #20] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 80028e6: 697b ldr r3, [r7, #20] 80028e8: fa93 f3a3 rbit r3, r3 80028ec: 613b str r3, [r7, #16] return result; 80028ee: 693b ldr r3, [r7, #16] 80028f0: fab3 f383 clz r3, r3 80028f4: b2db uxtb r3, r3 80028f6: 009b lsls r3, r3, #2 80028f8: 2104 movs r1, #4 80028fa: fa01 f303 lsl.w r3, r1, r3 80028fe: 43db mvns r3, r3 8002900: 401a ands r2, r3 8002902: 68bb ldr r3, [r7, #8] 8002904: 61fb str r3, [r7, #28] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 8002906: 69fb ldr r3, [r7, #28] 8002908: fa93 f3a3 rbit r3, r3 800290c: 61bb str r3, [r7, #24] return result; 800290e: 69bb ldr r3, [r7, #24] 8002910: fab3 f383 clz r3, r3 8002914: b2db uxtb r3, r3 8002916: 009b lsls r3, r3, #2 8002918: 6879 ldr r1, [r7, #4] 800291a: fa01 f303 lsl.w r3, r1, r3 800291e: 4313 orrs r3, r2 8002920: 6023 str r3, [r4, #0] } 8002922: bf00 nop 8002924: 3720 adds r7, #32 8002926: 46bd mov sp, r7 8002928: bc90 pop {r4, r7} 800292a: 4770 bx lr 0800292c : { 800292c: b480 push {r7} 800292e: b087 sub sp, #28 8002930: af00 add r7, sp, #0 8002932: 60f8 str r0, [r7, #12] 8002934: 60b9 str r1, [r7, #8] 8002936: 607a str r2, [r7, #4] MODIFY_REG(GPIOx->ODR, (Pin >> GPIO_PIN_MASK_POS), Pull << (POSITION_VAL(Pin >> GPIO_PIN_MASK_POS))); 8002938: 68fb ldr r3, [r7, #12] 800293a: 68da ldr r2, [r3, #12] 800293c: 68bb ldr r3, [r7, #8] 800293e: 0a1b lsrs r3, r3, #8 8002940: 43db mvns r3, r3 8002942: 401a ands r2, r3 8002944: 68bb ldr r3, [r7, #8] 8002946: 0a1b lsrs r3, r3, #8 8002948: 617b str r3, [r7, #20] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 800294a: 697b ldr r3, [r7, #20] 800294c: fa93 f3a3 rbit r3, r3 8002950: 613b str r3, [r7, #16] return result; 8002952: 693b ldr r3, [r7, #16] 8002954: fab3 f383 clz r3, r3 8002958: b2db uxtb r3, r3 800295a: 4619 mov r1, r3 800295c: 687b ldr r3, [r7, #4] 800295e: 408b lsls r3, r1 8002960: 431a orrs r2, r3 8002962: 68fb ldr r3, [r7, #12] 8002964: 60da str r2, [r3, #12] } 8002966: bf00 nop 8002968: 371c adds r7, #28 800296a: 46bd mov sp, r7 800296c: bc80 pop {r7} 800296e: 4770 bx lr 08002970 : * @retval An ErrorStatus enumeration value: * - SUCCESS: GPIO registers are initialized according to GPIO_InitStruct content * - ERROR: Not applicable */ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct) { 8002970: b580 push {r7, lr} 8002972: b088 sub sp, #32 8002974: af00 add r7, sp, #0 8002976: 6078 str r0, [r7, #4] 8002978: 6039 str r1, [r7, #0] assert_param(IS_LL_GPIO_PIN(GPIO_InitStruct->Pin)); /* ------------------------- Configure the port pins ---------------- */ /* Initialize pinpos on first pin set */ pinmask = ((GPIO_InitStruct->Pin) << GPIO_PIN_MASK_POS) >> GPIO_PIN_NB; 800297a: 683b ldr r3, [r7, #0] 800297c: 681b ldr r3, [r3, #0] 800297e: 021b lsls r3, r3, #8 8002980: 0c1b lsrs r3, r3, #16 8002982: 617b str r3, [r7, #20] 8002984: 697b ldr r3, [r7, #20] 8002986: 613b str r3, [r7, #16] __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); 8002988: 693b ldr r3, [r7, #16] 800298a: fa93 f3a3 rbit r3, r3 800298e: 60fb str r3, [r7, #12] return result; 8002990: 68fb ldr r3, [r7, #12] pinpos = POSITION_VAL(pinmask); 8002992: fab3 f383 clz r3, r3 8002996: b2db uxtb r3, r3 8002998: 61fb str r3, [r7, #28] /* Configure the port pins */ while ((pinmask >> pinpos) != 0u) 800299a: e044 b.n 8002a26 { /* skip if bit is not set */ if ((pinmask & (1u << pinpos)) != 0u) 800299c: 2201 movs r2, #1 800299e: 69fb ldr r3, [r7, #28] 80029a0: 409a lsls r2, r3 80029a2: 697b ldr r3, [r7, #20] 80029a4: 4013 ands r3, r2 80029a6: 2b00 cmp r3, #0 80029a8: d03a beq.n 8002a20 { /* Get current io position */ if (pinpos < GPIO_PIN_MASK_POS) 80029aa: 69fb ldr r3, [r7, #28] 80029ac: 2b07 cmp r3, #7 80029ae: d806 bhi.n 80029be { currentpin = (0x00000101uL << pinpos); 80029b0: f240 1201 movw r2, #257 ; 0x101 80029b4: 69fb ldr r3, [r7, #28] 80029b6: fa02 f303 lsl.w r3, r2, r3 80029ba: 61bb str r3, [r7, #24] 80029bc: e008 b.n 80029d0 } else { currentpin = ((0x00010001u << (pinpos - GPIO_PIN_MASK_POS)) | 0x04000000u); 80029be: 69fb ldr r3, [r7, #28] 80029c0: 3b08 subs r3, #8 80029c2: f04f 1201 mov.w r2, #65537 ; 0x10001 80029c6: fa02 f303 lsl.w r3, r2, r3 80029ca: f043 6380 orr.w r3, r3, #67108864 ; 0x4000000 80029ce: 61bb str r3, [r7, #24] } if (GPIO_InitStruct->Mode == LL_GPIO_MODE_INPUT) 80029d0: 683b ldr r3, [r7, #0] 80029d2: 685b ldr r3, [r3, #4] 80029d4: 2b08 cmp r3, #8 80029d6: d106 bne.n 80029e6 { /* Check The Pull parameter */ assert_param(IS_LL_GPIO_PULL(GPIO_InitStruct->Pull)); /* Pull-up Pull-down resistor configuration*/ LL_GPIO_SetPinPull(GPIOx, currentpin, GPIO_InitStruct->Pull); 80029d8: 683b ldr r3, [r7, #0] 80029da: 691b ldr r3, [r3, #16] 80029dc: 461a mov r2, r3 80029de: 69b9 ldr r1, [r7, #24] 80029e0: 6878 ldr r0, [r7, #4] 80029e2: f7ff ffa3 bl 800292c /* Check Pin Mode parameters */ assert_param(IS_LL_GPIO_MODE(GPIO_InitStruct->Mode)); /* Pin Mode configuration */ LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode); 80029e6: 683b ldr r3, [r7, #0] 80029e8: 685b ldr r3, [r3, #4] 80029ea: 461a mov r2, r3 80029ec: 69b9 ldr r1, [r7, #24] 80029ee: 6878 ldr r0, [r7, #4] 80029f0: f7ff ff06 bl 8002800 if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE)) 80029f4: 683b ldr r3, [r7, #0] 80029f6: 685b ldr r3, [r3, #4] 80029f8: 2b01 cmp r3, #1 80029fa: d003 beq.n 8002a04 80029fc: 683b ldr r3, [r7, #0] 80029fe: 685b ldr r3, [r3, #4] 8002a00: 2b09 cmp r3, #9 8002a02: d10d bne.n 8002a20 /* Check speed and Output mode parameters */ assert_param(IS_LL_GPIO_SPEED(GPIO_InitStruct->Speed)); assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType)); /* Speed mode configuration */ LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed); 8002a04: 683b ldr r3, [r7, #0] 8002a06: 689b ldr r3, [r3, #8] 8002a08: 461a mov r2, r3 8002a0a: 69b9 ldr r1, [r7, #24] 8002a0c: 6878 ldr r0, [r7, #4] 8002a0e: f7ff ff29 bl 8002864 /* Output mode configuration*/ LL_GPIO_SetPinOutputType(GPIOx, currentpin, GPIO_InitStruct->OutputType); 8002a12: 683b ldr r3, [r7, #0] 8002a14: 68db ldr r3, [r3, #12] 8002a16: 461a mov r2, r3 8002a18: 69b9 ldr r1, [r7, #24] 8002a1a: 6878 ldr r0, [r7, #4] 8002a1c: f7ff ff54 bl 80028c8 } } pinpos++; 8002a20: 69fb ldr r3, [r7, #28] 8002a22: 3301 adds r3, #1 8002a24: 61fb str r3, [r7, #28] while ((pinmask >> pinpos) != 0u) 8002a26: 697a ldr r2, [r7, #20] 8002a28: 69fb ldr r3, [r7, #28] 8002a2a: fa22 f303 lsr.w r3, r2, r3 8002a2e: 2b00 cmp r3, #0 8002a30: d1b4 bne.n 800299c } return (SUCCESS); 8002a32: 2300 movs r3, #0 } 8002a34: 4618 mov r0, r3 8002a36: 3720 adds r7, #32 8002a38: 46bd mov sp, r7 8002a3a: bd80 pop {r7, pc} 08002a3c : { 8002a3c: b480 push {r7} 8002a3e: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)); 8002a40: 4b03 ldr r3, [pc, #12] ; (8002a50 ) 8002a42: 685b ldr r3, [r3, #4] 8002a44: f003 030c and.w r3, r3, #12 } 8002a48: 4618 mov r0, r3 8002a4a: 46bd mov sp, r7 8002a4c: bc80 pop {r7} 8002a4e: 4770 bx lr 8002a50: 40021000 .word 0x40021000 08002a54 : { 8002a54: b480 push {r7} 8002a56: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_HPRE)); 8002a58: 4b03 ldr r3, [pc, #12] ; (8002a68 ) 8002a5a: 685b ldr r3, [r3, #4] 8002a5c: f003 03f0 and.w r3, r3, #240 ; 0xf0 } 8002a60: 4618 mov r0, r3 8002a62: 46bd mov sp, r7 8002a64: bc80 pop {r7} 8002a66: 4770 bx lr 8002a68: 40021000 .word 0x40021000 08002a6c : { 8002a6c: b480 push {r7} 8002a6e: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE1)); 8002a70: 4b03 ldr r3, [pc, #12] ; (8002a80 ) 8002a72: 685b ldr r3, [r3, #4] 8002a74: f403 63e0 and.w r3, r3, #1792 ; 0x700 } 8002a78: 4618 mov r0, r3 8002a7a: 46bd mov sp, r7 8002a7c: bc80 pop {r7} 8002a7e: 4770 bx lr 8002a80: 40021000 .word 0x40021000 08002a84 : { 8002a84: b480 push {r7} 8002a86: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PPRE2)); 8002a88: 4b03 ldr r3, [pc, #12] ; (8002a98 ) 8002a8a: 685b ldr r3, [r3, #4] 8002a8c: f403 5360 and.w r3, r3, #14336 ; 0x3800 } 8002a90: 4618 mov r0, r3 8002a92: 46bd mov sp, r7 8002a94: bc80 pop {r7} 8002a96: 4770 bx lr 8002a98: 40021000 .word 0x40021000 08002a9c : * @arg @ref LL_RCC_PLLSOURCE_PLL2 (*) * * (*) value not defined in all devices */ __STATIC_INLINE uint32_t LL_RCC_PLL_GetMainSource(void) { 8002a9c: b480 push {r7} 8002a9e: af00 add r7, sp, #0 #if defined(RCC_CFGR2_PREDIV1SRC) uint32_t pllsrc = READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC); uint32_t predivsrc = (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC) << 4U); return (uint32_t)(pllsrc | predivsrc); #else return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)); 8002aa0: 4b03 ldr r3, [pc, #12] ; (8002ab0 ) 8002aa2: 685b ldr r3, [r3, #4] 8002aa4: f403 3380 and.w r3, r3, #65536 ; 0x10000 #endif /*RCC_CFGR2_PREDIV1SRC*/ } 8002aa8: 4618 mov r0, r3 8002aaa: 46bd mov sp, r7 8002aac: bc80 pop {r7} 8002aae: 4770 bx lr 8002ab0: 40021000 .word 0x40021000 08002ab4 : * @arg @ref LL_RCC_PLL_MUL_16 (*) * * (*) value not defined in all devices */ __STATIC_INLINE uint32_t LL_RCC_PLL_GetMultiplicator(void) { 8002ab4: b480 push {r7} 8002ab6: af00 add r7, sp, #0 return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLMULL)); 8002ab8: 4b03 ldr r3, [pc, #12] ; (8002ac8 ) 8002aba: 685b ldr r3, [r3, #4] 8002abc: f403 1370 and.w r3, r3, #3932160 ; 0x3c0000 } 8002ac0: 4618 mov r0, r3 8002ac2: 46bd mov sp, r7 8002ac4: bc80 pop {r7} 8002ac6: 4770 bx lr 8002ac8: 40021000 .word 0x40021000 08002acc : * @arg @ref LL_RCC_PREDIV_DIV_16 (*) * * (*) value not defined in all devices */ __STATIC_INLINE uint32_t LL_RCC_PLL_GetPrediv(void) { 8002acc: b480 push {r7} 8002ace: af00 add r7, sp, #0 #if defined(RCC_CFGR2_PREDIV1) return (uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1)); #else return (uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos); 8002ad0: 4b04 ldr r3, [pc, #16] ; (8002ae4 ) 8002ad2: 685b ldr r3, [r3, #4] 8002ad4: 0c5b lsrs r3, r3, #17 8002ad6: f003 0301 and.w r3, r3, #1 #endif /*RCC_CFGR2_PREDIV1*/ } 8002ada: 4618 mov r0, r3 8002adc: 46bd mov sp, r7 8002ade: bc80 pop {r7} 8002ae0: 4770 bx lr 8002ae2: bf00 nop 8002ae4: 40021000 .word 0x40021000 08002ae8 : * configuration based on this function will be incorrect. * @param RCC_Clocks pointer to a @ref LL_RCC_ClocksTypeDef structure which will hold the clocks frequencies * @retval None */ void LL_RCC_GetSystemClocksFreq(LL_RCC_ClocksTypeDef *RCC_Clocks) { 8002ae8: b580 push {r7, lr} 8002aea: b082 sub sp, #8 8002aec: af00 add r7, sp, #0 8002aee: 6078 str r0, [r7, #4] /* Get SYSCLK frequency */ RCC_Clocks->SYSCLK_Frequency = RCC_GetSystemClockFreq(); 8002af0: f000 f820 bl 8002b34 8002af4: 4602 mov r2, r0 8002af6: 687b ldr r3, [r7, #4] 8002af8: 601a str r2, [r3, #0] /* HCLK clock frequency */ RCC_Clocks->HCLK_Frequency = RCC_GetHCLKClockFreq(RCC_Clocks->SYSCLK_Frequency); 8002afa: 687b ldr r3, [r7, #4] 8002afc: 681b ldr r3, [r3, #0] 8002afe: 4618 mov r0, r3 8002b00: f000 f83a bl 8002b78 8002b04: 4602 mov r2, r0 8002b06: 687b ldr r3, [r7, #4] 8002b08: 605a str r2, [r3, #4] /* PCLK1 clock frequency */ RCC_Clocks->PCLK1_Frequency = RCC_GetPCLK1ClockFreq(RCC_Clocks->HCLK_Frequency); 8002b0a: 687b ldr r3, [r7, #4] 8002b0c: 685b ldr r3, [r3, #4] 8002b0e: 4618 mov r0, r3 8002b10: f000 f848 bl 8002ba4 8002b14: 4602 mov r2, r0 8002b16: 687b ldr r3, [r7, #4] 8002b18: 609a str r2, [r3, #8] /* PCLK2 clock frequency */ RCC_Clocks->PCLK2_Frequency = RCC_GetPCLK2ClockFreq(RCC_Clocks->HCLK_Frequency); 8002b1a: 687b ldr r3, [r7, #4] 8002b1c: 685b ldr r3, [r3, #4] 8002b1e: 4618 mov r0, r3 8002b20: f000 f854 bl 8002bcc 8002b24: 4602 mov r2, r0 8002b26: 687b ldr r3, [r7, #4] 8002b28: 60da str r2, [r3, #12] } 8002b2a: bf00 nop 8002b2c: 3708 adds r7, #8 8002b2e: 46bd mov sp, r7 8002b30: bd80 pop {r7, pc} ... 08002b34 : /** * @brief Return SYSTEM clock frequency * @retval SYSTEM clock frequency (in Hz) */ uint32_t RCC_GetSystemClockFreq(void) { 8002b34: b580 push {r7, lr} 8002b36: b082 sub sp, #8 8002b38: af00 add r7, sp, #0 uint32_t frequency = 0U; 8002b3a: 2300 movs r3, #0 8002b3c: 607b str r3, [r7, #4] /* Get SYSCLK source -------------------------------------------------------*/ switch (LL_RCC_GetSysClkSource()) 8002b3e: f7ff ff7d bl 8002a3c 8002b42: 4603 mov r3, r0 8002b44: 2b04 cmp r3, #4 8002b46: d006 beq.n 8002b56 8002b48: 2b08 cmp r3, #8 8002b4a: d007 beq.n 8002b5c 8002b4c: 2b00 cmp r3, #0 8002b4e: d109 bne.n 8002b64 { case LL_RCC_SYS_CLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ frequency = HSI_VALUE; 8002b50: 4b08 ldr r3, [pc, #32] ; (8002b74 ) 8002b52: 607b str r3, [r7, #4] break; 8002b54: e009 b.n 8002b6a case LL_RCC_SYS_CLKSOURCE_STATUS_HSE: /* HSE used as system clock source */ frequency = HSE_VALUE; 8002b56: 4b07 ldr r3, [pc, #28] ; (8002b74 ) 8002b58: 607b str r3, [r7, #4] break; 8002b5a: e006 b.n 8002b6a case LL_RCC_SYS_CLKSOURCE_STATUS_PLL: /* PLL used as system clock source */ frequency = RCC_PLL_GetFreqDomain_SYS(); 8002b5c: f000 f84a bl 8002bf4 8002b60: 6078 str r0, [r7, #4] break; 8002b62: e002 b.n 8002b6a default: frequency = HSI_VALUE; 8002b64: 4b03 ldr r3, [pc, #12] ; (8002b74 ) 8002b66: 607b str r3, [r7, #4] break; 8002b68: bf00 nop } return frequency; 8002b6a: 687b ldr r3, [r7, #4] } 8002b6c: 4618 mov r0, r3 8002b6e: 3708 adds r7, #8 8002b70: 46bd mov sp, r7 8002b72: bd80 pop {r7, pc} 8002b74: 007a1200 .word 0x007a1200 08002b78 : * @brief Return HCLK clock frequency * @param SYSCLK_Frequency SYSCLK clock frequency * @retval HCLK clock frequency (in Hz) */ uint32_t RCC_GetHCLKClockFreq(uint32_t SYSCLK_Frequency) { 8002b78: b580 push {r7, lr} 8002b7a: b082 sub sp, #8 8002b7c: af00 add r7, sp, #0 8002b7e: 6078 str r0, [r7, #4] /* HCLK clock frequency */ return __LL_RCC_CALC_HCLK_FREQ(SYSCLK_Frequency, LL_RCC_GetAHBPrescaler()); 8002b80: f7ff ff68 bl 8002a54 8002b84: 4603 mov r3, r0 8002b86: 091b lsrs r3, r3, #4 8002b88: f003 030f and.w r3, r3, #15 8002b8c: 4a04 ldr r2, [pc, #16] ; (8002ba0 ) 8002b8e: 5cd3 ldrb r3, [r2, r3] 8002b90: 461a mov r2, r3 8002b92: 687b ldr r3, [r7, #4] 8002b94: 40d3 lsrs r3, r2 } 8002b96: 4618 mov r0, r3 8002b98: 3708 adds r7, #8 8002b9a: 46bd mov sp, r7 8002b9c: bd80 pop {r7, pc} 8002b9e: bf00 nop 8002ba0: 0800aed0 .word 0x0800aed0 08002ba4 : * @brief Return PCLK1 clock frequency * @param HCLK_Frequency HCLK clock frequency * @retval PCLK1 clock frequency (in Hz) */ uint32_t RCC_GetPCLK1ClockFreq(uint32_t HCLK_Frequency) { 8002ba4: b580 push {r7, lr} 8002ba6: b082 sub sp, #8 8002ba8: af00 add r7, sp, #0 8002baa: 6078 str r0, [r7, #4] /* PCLK1 clock frequency */ return __LL_RCC_CALC_PCLK1_FREQ(HCLK_Frequency, LL_RCC_GetAPB1Prescaler()); 8002bac: f7ff ff5e bl 8002a6c 8002bb0: 4603 mov r3, r0 8002bb2: 0a1b lsrs r3, r3, #8 8002bb4: 4a04 ldr r2, [pc, #16] ; (8002bc8 ) 8002bb6: 5cd3 ldrb r3, [r2, r3] 8002bb8: 461a mov r2, r3 8002bba: 687b ldr r3, [r7, #4] 8002bbc: 40d3 lsrs r3, r2 } 8002bbe: 4618 mov r0, r3 8002bc0: 3708 adds r7, #8 8002bc2: 46bd mov sp, r7 8002bc4: bd80 pop {r7, pc} 8002bc6: bf00 nop 8002bc8: 0800aee0 .word 0x0800aee0 08002bcc : * @brief Return PCLK2 clock frequency * @param HCLK_Frequency HCLK clock frequency * @retval PCLK2 clock frequency (in Hz) */ uint32_t RCC_GetPCLK2ClockFreq(uint32_t HCLK_Frequency) { 8002bcc: b580 push {r7, lr} 8002bce: b082 sub sp, #8 8002bd0: af00 add r7, sp, #0 8002bd2: 6078 str r0, [r7, #4] /* PCLK2 clock frequency */ return __LL_RCC_CALC_PCLK2_FREQ(HCLK_Frequency, LL_RCC_GetAPB2Prescaler()); 8002bd4: f7ff ff56 bl 8002a84 8002bd8: 4603 mov r3, r0 8002bda: 0adb lsrs r3, r3, #11 8002bdc: 4a04 ldr r2, [pc, #16] ; (8002bf0 ) 8002bde: 5cd3 ldrb r3, [r2, r3] 8002be0: 461a mov r2, r3 8002be2: 687b ldr r3, [r7, #4] 8002be4: 40d3 lsrs r3, r2 } 8002be6: 4618 mov r0, r3 8002be8: 3708 adds r7, #8 8002bea: 46bd mov sp, r7 8002bec: bd80 pop {r7, pc} 8002bee: bf00 nop 8002bf0: 0800aee0 .word 0x0800aee0 08002bf4 : /** * @brief Return PLL clock frequency used for system domain * @retval PLL clock frequency (in Hz) */ uint32_t RCC_PLL_GetFreqDomain_SYS(void) { 8002bf4: b580 push {r7, lr} 8002bf6: b082 sub sp, #8 8002bf8: af00 add r7, sp, #0 uint32_t pllinputfreq = 0U, pllsource = 0U; 8002bfa: 2300 movs r3, #0 8002bfc: 607b str r3, [r7, #4] 8002bfe: 2300 movs r3, #0 8002c00: 603b str r3, [r7, #0] /* PLL_VCO = (HSE_VALUE, HSI_VALUE or PLL2 / PLL Predivider) * PLL Multiplicator */ /* Get PLL source */ pllsource = LL_RCC_PLL_GetMainSource(); 8002c02: f7ff ff4b bl 8002a9c 8002c06: 6038 str r0, [r7, #0] switch (pllsource) 8002c08: 683b ldr r3, [r7, #0] 8002c0a: 2b00 cmp r3, #0 8002c0c: d003 beq.n 8002c16 8002c0e: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 8002c12: d003 beq.n 8002c1c 8002c14: e00b b.n 8002c2e { case LL_RCC_PLLSOURCE_HSI_DIV_2: /* HSI used as PLL clock source */ pllinputfreq = HSI_VALUE / 2U; 8002c16: 4b0d ldr r3, [pc, #52] ; (8002c4c ) 8002c18: 607b str r3, [r7, #4] break; 8002c1a: e00b b.n 8002c34 case LL_RCC_PLLSOURCE_HSE: /* HSE used as PLL clock source */ pllinputfreq = HSE_VALUE / (LL_RCC_PLL_GetPrediv() + 1U); 8002c1c: f7ff ff56 bl 8002acc 8002c20: 4603 mov r3, r0 8002c22: 3301 adds r3, #1 8002c24: 4a0a ldr r2, [pc, #40] ; (8002c50 ) 8002c26: fbb2 f3f3 udiv r3, r2, r3 8002c2a: 607b str r3, [r7, #4] break; 8002c2c: e002 b.n 8002c34 pllinputfreq = RCC_PLL2_GetFreqClockFreq() / (LL_RCC_PLL_GetPrediv() + 1U); break; #endif /* RCC_PLL2_SUPPORT */ default: pllinputfreq = HSI_VALUE / 2U; 8002c2e: 4b07 ldr r3, [pc, #28] ; (8002c4c ) 8002c30: 607b str r3, [r7, #4] break; 8002c32: bf00 nop } return __LL_RCC_CALC_PLLCLK_FREQ(pllinputfreq, LL_RCC_PLL_GetMultiplicator()); 8002c34: f7ff ff3e bl 8002ab4 8002c38: 4603 mov r3, r0 8002c3a: 0c9b lsrs r3, r3, #18 8002c3c: 3302 adds r3, #2 8002c3e: 687a ldr r2, [r7, #4] 8002c40: fb02 f303 mul.w r3, r2, r3 } 8002c44: 4618 mov r0, r3 8002c46: 3708 adds r7, #8 8002c48: 46bd mov sp, r7 8002c4a: bd80 pop {r7, pc} 8002c4c: 003d0900 .word 0x003d0900 8002c50: 007a1200 .word 0x007a1200 08002c54 : { 8002c54: b480 push {r7} 8002c56: b083 sub sp, #12 8002c58: af00 add r7, sp, #0 8002c5a: 6078 str r0, [r7, #4] 8002c5c: 6039 str r1, [r7, #0] WRITE_REG(TIMx->PSC, Prescaler); 8002c5e: 687b ldr r3, [r7, #4] 8002c60: 683a ldr r2, [r7, #0] 8002c62: 629a str r2, [r3, #40] ; 0x28 } 8002c64: bf00 nop 8002c66: 370c adds r7, #12 8002c68: 46bd mov sp, r7 8002c6a: bc80 pop {r7} 8002c6c: 4770 bx lr 08002c6e : { 8002c6e: b480 push {r7} 8002c70: b083 sub sp, #12 8002c72: af00 add r7, sp, #0 8002c74: 6078 str r0, [r7, #4] 8002c76: 6039 str r1, [r7, #0] WRITE_REG(TIMx->ARR, AutoReload); 8002c78: 687b ldr r3, [r7, #4] 8002c7a: 683a ldr r2, [r7, #0] 8002c7c: 62da str r2, [r3, #44] ; 0x2c } 8002c7e: bf00 nop 8002c80: 370c adds r7, #12 8002c82: 46bd mov sp, r7 8002c84: bc80 pop {r7} 8002c86: 4770 bx lr 08002c88 : { 8002c88: b480 push {r7} 8002c8a: b083 sub sp, #12 8002c8c: af00 add r7, sp, #0 8002c8e: 6078 str r0, [r7, #4] 8002c90: 6039 str r1, [r7, #0] WRITE_REG(TIMx->RCR, RepetitionCounter); 8002c92: 687b ldr r3, [r7, #4] 8002c94: 683a ldr r2, [r7, #0] 8002c96: 631a str r2, [r3, #48] ; 0x30 } 8002c98: bf00 nop 8002c9a: 370c adds r7, #12 8002c9c: 46bd mov sp, r7 8002c9e: bc80 pop {r7} 8002ca0: 4770 bx lr 08002ca2 : * @rmtoll EGR UG LL_TIM_GenerateEvent_UPDATE * @param TIMx Timer instance * @retval None */ __STATIC_INLINE void LL_TIM_GenerateEvent_UPDATE(TIM_TypeDef *TIMx) { 8002ca2: b480 push {r7} 8002ca4: b083 sub sp, #12 8002ca6: af00 add r7, sp, #0 8002ca8: 6078 str r0, [r7, #4] SET_BIT(TIMx->EGR, TIM_EGR_UG); 8002caa: 687b ldr r3, [r7, #4] 8002cac: 695b ldr r3, [r3, #20] 8002cae: f043 0201 orr.w r2, r3, #1 8002cb2: 687b ldr r3, [r7, #4] 8002cb4: 615a str r2, [r3, #20] } 8002cb6: bf00 nop 8002cb8: 370c adds r7, #12 8002cba: 46bd mov sp, r7 8002cbc: bc80 pop {r7} 8002cbe: 4770 bx lr 08002cc0 : * @retval An ErrorStatus enumeration value: * - SUCCESS: TIMx registers are de-initialized * - ERROR: not applicable */ ErrorStatus LL_TIM_Init(TIM_TypeDef *TIMx, LL_TIM_InitTypeDef *TIM_InitStruct) { 8002cc0: b580 push {r7, lr} 8002cc2: b084 sub sp, #16 8002cc4: af00 add r7, sp, #0 8002cc6: 6078 str r0, [r7, #4] 8002cc8: 6039 str r1, [r7, #0] /* Check the parameters */ assert_param(IS_TIM_INSTANCE(TIMx)); assert_param(IS_LL_TIM_COUNTERMODE(TIM_InitStruct->CounterMode)); assert_param(IS_LL_TIM_CLOCKDIVISION(TIM_InitStruct->ClockDivision)); tmpcr1 = LL_TIM_ReadReg(TIMx, CR1); 8002cca: 687b ldr r3, [r7, #4] 8002ccc: 681b ldr r3, [r3, #0] 8002cce: 60fb str r3, [r7, #12] if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) 8002cd0: 687b ldr r3, [r7, #4] 8002cd2: 4a31 ldr r2, [pc, #196] ; (8002d98 ) 8002cd4: 4293 cmp r3, r2 8002cd6: d013 beq.n 8002d00 8002cd8: 687b ldr r3, [r7, #4] 8002cda: 4a30 ldr r2, [pc, #192] ; (8002d9c ) 8002cdc: 4293 cmp r3, r2 8002cde: d00f beq.n 8002d00 8002ce0: 687b ldr r3, [r7, #4] 8002ce2: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 8002ce6: d00b beq.n 8002d00 8002ce8: 687b ldr r3, [r7, #4] 8002cea: 4a2d ldr r2, [pc, #180] ; (8002da0 ) 8002cec: 4293 cmp r3, r2 8002cee: d007 beq.n 8002d00 8002cf0: 687b ldr r3, [r7, #4] 8002cf2: 4a2c ldr r2, [pc, #176] ; (8002da4 ) 8002cf4: 4293 cmp r3, r2 8002cf6: d003 beq.n 8002d00 8002cf8: 687b ldr r3, [r7, #4] 8002cfa: 4a2b ldr r2, [pc, #172] ; (8002da8 ) 8002cfc: 4293 cmp r3, r2 8002cfe: d106 bne.n 8002d0e { /* Select the Counter Mode */ MODIFY_REG(tmpcr1, (TIM_CR1_DIR | TIM_CR1_CMS), TIM_InitStruct->CounterMode); 8002d00: 68fb ldr r3, [r7, #12] 8002d02: f023 0270 bic.w r2, r3, #112 ; 0x70 8002d06: 683b ldr r3, [r7, #0] 8002d08: 685b ldr r3, [r3, #4] 8002d0a: 4313 orrs r3, r2 8002d0c: 60fb str r3, [r7, #12] } if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) 8002d0e: 687b ldr r3, [r7, #4] 8002d10: 4a21 ldr r2, [pc, #132] ; (8002d98 ) 8002d12: 4293 cmp r3, r2 8002d14: d013 beq.n 8002d3e 8002d16: 687b ldr r3, [r7, #4] 8002d18: 4a20 ldr r2, [pc, #128] ; (8002d9c ) 8002d1a: 4293 cmp r3, r2 8002d1c: d00f beq.n 8002d3e 8002d1e: 687b ldr r3, [r7, #4] 8002d20: f1b3 4f80 cmp.w r3, #1073741824 ; 0x40000000 8002d24: d00b beq.n 8002d3e 8002d26: 687b ldr r3, [r7, #4] 8002d28: 4a1d ldr r2, [pc, #116] ; (8002da0 ) 8002d2a: 4293 cmp r3, r2 8002d2c: d007 beq.n 8002d3e 8002d2e: 687b ldr r3, [r7, #4] 8002d30: 4a1c ldr r2, [pc, #112] ; (8002da4 ) 8002d32: 4293 cmp r3, r2 8002d34: d003 beq.n 8002d3e 8002d36: 687b ldr r3, [r7, #4] 8002d38: 4a1b ldr r2, [pc, #108] ; (8002da8 ) 8002d3a: 4293 cmp r3, r2 8002d3c: d106 bne.n 8002d4c { /* Set the clock division */ MODIFY_REG(tmpcr1, TIM_CR1_CKD, TIM_InitStruct->ClockDivision); 8002d3e: 68fb ldr r3, [r7, #12] 8002d40: f423 7240 bic.w r2, r3, #768 ; 0x300 8002d44: 683b ldr r3, [r7, #0] 8002d46: 68db ldr r3, [r3, #12] 8002d48: 4313 orrs r3, r2 8002d4a: 60fb str r3, [r7, #12] } /* Write to TIMx CR1 */ LL_TIM_WriteReg(TIMx, CR1, tmpcr1); 8002d4c: 687b ldr r3, [r7, #4] 8002d4e: 68fa ldr r2, [r7, #12] 8002d50: 601a str r2, [r3, #0] /* Set the Autoreload value */ LL_TIM_SetAutoReload(TIMx, TIM_InitStruct->Autoreload); 8002d52: 683b ldr r3, [r7, #0] 8002d54: 689b ldr r3, [r3, #8] 8002d56: 4619 mov r1, r3 8002d58: 6878 ldr r0, [r7, #4] 8002d5a: f7ff ff88 bl 8002c6e /* Set the Prescaler value */ LL_TIM_SetPrescaler(TIMx, TIM_InitStruct->Prescaler); 8002d5e: 683b ldr r3, [r7, #0] 8002d60: 881b ldrh r3, [r3, #0] 8002d62: 4619 mov r1, r3 8002d64: 6878 ldr r0, [r7, #4] 8002d66: f7ff ff75 bl 8002c54 if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) 8002d6a: 687b ldr r3, [r7, #4] 8002d6c: 4a0a ldr r2, [pc, #40] ; (8002d98 ) 8002d6e: 4293 cmp r3, r2 8002d70: d003 beq.n 8002d7a 8002d72: 687b ldr r3, [r7, #4] 8002d74: 4a09 ldr r2, [pc, #36] ; (8002d9c ) 8002d76: 4293 cmp r3, r2 8002d78: d105 bne.n 8002d86 { /* Set the Repetition Counter value */ LL_TIM_SetRepetitionCounter(TIMx, TIM_InitStruct->RepetitionCounter); 8002d7a: 683b ldr r3, [r7, #0] 8002d7c: 691b ldr r3, [r3, #16] 8002d7e: 4619 mov r1, r3 8002d80: 6878 ldr r0, [r7, #4] 8002d82: f7ff ff81 bl 8002c88 } /* Generate an update event to reload the Prescaler and the repetition counter value (if applicable) immediately */ LL_TIM_GenerateEvent_UPDATE(TIMx); 8002d86: 6878 ldr r0, [r7, #4] 8002d88: f7ff ff8b bl 8002ca2 return SUCCESS; 8002d8c: 2300 movs r3, #0 } 8002d8e: 4618 mov r0, r3 8002d90: 3710 adds r7, #16 8002d92: 46bd mov sp, r7 8002d94: bd80 pop {r7, pc} 8002d96: bf00 nop 8002d98: 40012c00 .word 0x40012c00 8002d9c: 40013400 .word 0x40013400 8002da0: 40000400 .word 0x40000400 8002da4: 40000800 .word 0x40000800 8002da8: 40000c00 .word 0x40000c00 08002dac : { 8002dac: b480 push {r7} 8002dae: b083 sub sp, #12 8002db0: af00 add r7, sp, #0 8002db2: 6078 str r0, [r7, #4] return (READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)); 8002db4: 687b ldr r3, [r7, #4] 8002db6: 68db ldr r3, [r3, #12] 8002db8: f403 5300 and.w r3, r3, #8192 ; 0x2000 8002dbc: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 8002dc0: bf0c ite eq 8002dc2: 2301 moveq r3, #1 8002dc4: 2300 movne r3, #0 8002dc6: b2db uxtb r3, r3 } 8002dc8: 4618 mov r0, r3 8002dca: 370c adds r7, #12 8002dcc: 46bd mov sp, r7 8002dce: bc80 pop {r7} 8002dd0: 4770 bx lr 08002dd2 : { 8002dd2: b480 push {r7} 8002dd4: b083 sub sp, #12 8002dd6: af00 add r7, sp, #0 8002dd8: 6078 str r0, [r7, #4] 8002dda: 6039 str r1, [r7, #0] MODIFY_REG(USARTx->CR2, USART_CR2_STOP, StopBits); 8002ddc: 687b ldr r3, [r7, #4] 8002dde: 691b ldr r3, [r3, #16] 8002de0: f423 5240 bic.w r2, r3, #12288 ; 0x3000 8002de4: 683b ldr r3, [r7, #0] 8002de6: 431a orrs r2, r3 8002de8: 687b ldr r3, [r7, #4] 8002dea: 611a str r2, [r3, #16] } 8002dec: bf00 nop 8002dee: 370c adds r7, #12 8002df0: 46bd mov sp, r7 8002df2: bc80 pop {r7} 8002df4: 4770 bx lr 08002df6 : { 8002df6: b480 push {r7} 8002df8: b083 sub sp, #12 8002dfa: af00 add r7, sp, #0 8002dfc: 6078 str r0, [r7, #4] 8002dfe: 6039 str r1, [r7, #0] MODIFY_REG(USARTx->CR3, USART_CR3_RTSE | USART_CR3_CTSE, HardwareFlowControl); 8002e00: 687b ldr r3, [r7, #4] 8002e02: 695b ldr r3, [r3, #20] 8002e04: f423 7240 bic.w r2, r3, #768 ; 0x300 8002e08: 683b ldr r3, [r7, #0] 8002e0a: 431a orrs r2, r3 8002e0c: 687b ldr r3, [r7, #4] 8002e0e: 615a str r2, [r3, #20] } 8002e10: bf00 nop 8002e12: 370c adds r7, #12 8002e14: 46bd mov sp, r7 8002e16: bc80 pop {r7} 8002e18: 4770 bx lr ... 08002e1c : { 8002e1c: b480 push {r7} 8002e1e: b085 sub sp, #20 8002e20: af00 add r7, sp, #0 8002e22: 60f8 str r0, [r7, #12] 8002e24: 60b9 str r1, [r7, #8] 8002e26: 607a str r2, [r7, #4] USARTx->BRR = (uint16_t)(__LL_USART_DIV_SAMPLING16(PeriphClk, BaudRate)); 8002e28: 68ba ldr r2, [r7, #8] 8002e2a: 4613 mov r3, r2 8002e2c: 009b lsls r3, r3, #2 8002e2e: 4413 add r3, r2 8002e30: 009a lsls r2, r3, #2 8002e32: 441a add r2, r3 8002e34: 687b ldr r3, [r7, #4] 8002e36: 009b lsls r3, r3, #2 8002e38: fbb2 f3f3 udiv r3, r2, r3 8002e3c: 4a25 ldr r2, [pc, #148] ; (8002ed4 ) 8002e3e: fba2 2303 umull r2, r3, r2, r3 8002e42: 095b lsrs r3, r3, #5 8002e44: b29b uxth r3, r3 8002e46: 011b lsls r3, r3, #4 8002e48: b299 uxth r1, r3 8002e4a: 68ba ldr r2, [r7, #8] 8002e4c: 4613 mov r3, r2 8002e4e: 009b lsls r3, r3, #2 8002e50: 4413 add r3, r2 8002e52: 009a lsls r2, r3, #2 8002e54: 441a add r2, r3 8002e56: 687b ldr r3, [r7, #4] 8002e58: 009b lsls r3, r3, #2 8002e5a: fbb2 f2f3 udiv r2, r2, r3 8002e5e: 4b1d ldr r3, [pc, #116] ; (8002ed4 ) 8002e60: fba3 0302 umull r0, r3, r3, r2 8002e64: 095b lsrs r3, r3, #5 8002e66: 2064 movs r0, #100 ; 0x64 8002e68: fb00 f303 mul.w r3, r0, r3 8002e6c: 1ad3 subs r3, r2, r3 8002e6e: 011b lsls r3, r3, #4 8002e70: 3332 adds r3, #50 ; 0x32 8002e72: 4a18 ldr r2, [pc, #96] ; (8002ed4 ) 8002e74: fba2 2303 umull r2, r3, r2, r3 8002e78: 095b lsrs r3, r3, #5 8002e7a: b29b uxth r3, r3 8002e7c: f003 03f0 and.w r3, r3, #240 ; 0xf0 8002e80: b29b uxth r3, r3 8002e82: 440b add r3, r1 8002e84: b299 uxth r1, r3 8002e86: 68ba ldr r2, [r7, #8] 8002e88: 4613 mov r3, r2 8002e8a: 009b lsls r3, r3, #2 8002e8c: 4413 add r3, r2 8002e8e: 009a lsls r2, r3, #2 8002e90: 441a add r2, r3 8002e92: 687b ldr r3, [r7, #4] 8002e94: 009b lsls r3, r3, #2 8002e96: fbb2 f2f3 udiv r2, r2, r3 8002e9a: 4b0e ldr r3, [pc, #56] ; (8002ed4 ) 8002e9c: fba3 0302 umull r0, r3, r3, r2 8002ea0: 095b lsrs r3, r3, #5 8002ea2: 2064 movs r0, #100 ; 0x64 8002ea4: fb00 f303 mul.w r3, r0, r3 8002ea8: 1ad3 subs r3, r2, r3 8002eaa: 011b lsls r3, r3, #4 8002eac: 3332 adds r3, #50 ; 0x32 8002eae: 4a09 ldr r2, [pc, #36] ; (8002ed4 ) 8002eb0: fba2 2303 umull r2, r3, r2, r3 8002eb4: 095b lsrs r3, r3, #5 8002eb6: b29b uxth r3, r3 8002eb8: f003 030f and.w r3, r3, #15 8002ebc: b29b uxth r3, r3 8002ebe: 440b add r3, r1 8002ec0: b29b uxth r3, r3 8002ec2: 461a mov r2, r3 8002ec4: 68fb ldr r3, [r7, #12] 8002ec6: 609a str r2, [r3, #8] } 8002ec8: bf00 nop 8002eca: 3714 adds r7, #20 8002ecc: 46bd mov sp, r7 8002ece: bc80 pop {r7} 8002ed0: 4770 bx lr 8002ed2: bf00 nop 8002ed4: 51eb851f .word 0x51eb851f 08002ed8 : * @retval An ErrorStatus enumeration value: * - SUCCESS: USART registers are initialized according to USART_InitStruct content * - ERROR: Problem occurred during USART Registers initialization */ ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct) { 8002ed8: b580 push {r7, lr} 8002eda: b088 sub sp, #32 8002edc: af00 add r7, sp, #0 8002ede: 6078 str r0, [r7, #4] 8002ee0: 6039 str r1, [r7, #0] ErrorStatus status = ERROR; 8002ee2: 2301 movs r3, #1 8002ee4: 77fb strb r3, [r7, #31] uint32_t periphclk = LL_RCC_PERIPH_FREQUENCY_NO; 8002ee6: 2300 movs r3, #0 8002ee8: 61bb str r3, [r7, #24] assert_param(IS_LL_USART_OVERSAMPLING(USART_InitStruct->OverSampling)); #endif /* USART_OverSampling_Feature */ /* USART needs to be in disabled state, in order to be able to configure some bits in CRx registers */ if (LL_USART_IsEnabled(USARTx) == 0U) 8002eea: 6878 ldr r0, [r7, #4] 8002eec: f7ff ff5e bl 8002dac 8002ef0: 4603 mov r3, r0 8002ef2: 2b00 cmp r3, #0 8002ef4: d153 bne.n 8002f9e (USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), (USART_InitStruct->DataWidth | USART_InitStruct->Parity | USART_InitStruct->TransferDirection | USART_InitStruct->OverSampling)); #else MODIFY_REG(USARTx->CR1, 8002ef6: 687b ldr r3, [r7, #4] 8002ef8: 68db ldr r3, [r3, #12] 8002efa: f423 53b0 bic.w r3, r3, #5632 ; 0x1600 8002efe: f023 030c bic.w r3, r3, #12 8002f02: 683a ldr r2, [r7, #0] 8002f04: 6851 ldr r1, [r2, #4] 8002f06: 683a ldr r2, [r7, #0] 8002f08: 68d2 ldr r2, [r2, #12] 8002f0a: 4311 orrs r1, r2 8002f0c: 683a ldr r2, [r7, #0] 8002f0e: 6912 ldr r2, [r2, #16] 8002f10: 430a orrs r2, r1 8002f12: 431a orrs r2, r3 8002f14: 687b ldr r3, [r7, #4] 8002f16: 60da str r2, [r3, #12] /*---------------------------- USART CR2 Configuration ----------------------- * Configure USARTx CR2 (Stop bits) with parameters: * - Stop Bits: USART_CR2_STOP bits according to USART_InitStruct->StopBits value. * - CLKEN, CPOL, CPHA and LBCL bits are to be configured using LL_USART_ClockInit(). */ LL_USART_SetStopBitsLength(USARTx, USART_InitStruct->StopBits); 8002f18: 683b ldr r3, [r7, #0] 8002f1a: 689b ldr r3, [r3, #8] 8002f1c: 4619 mov r1, r3 8002f1e: 6878 ldr r0, [r7, #4] 8002f20: f7ff ff57 bl 8002dd2 /*---------------------------- USART CR3 Configuration ----------------------- * Configure USARTx CR3 (Hardware Flow Control) with parameters: * - HardwareFlowControl: USART_CR3_RTSE, USART_CR3_CTSE bits according to USART_InitStruct->HardwareFlowControl value. */ LL_USART_SetHWFlowCtrl(USARTx, USART_InitStruct->HardwareFlowControl); 8002f24: 683b ldr r3, [r7, #0] 8002f26: 695b ldr r3, [r3, #20] 8002f28: 4619 mov r1, r3 8002f2a: 6878 ldr r0, [r7, #4] 8002f2c: f7ff ff63 bl 8002df6 /*---------------------------- USART BRR Configuration ----------------------- * Retrieve Clock frequency used for USART Peripheral */ LL_RCC_GetSystemClocksFreq(&rcc_clocks); 8002f30: f107 0308 add.w r3, r7, #8 8002f34: 4618 mov r0, r3 8002f36: f7ff fdd7 bl 8002ae8 if (USARTx == USART1) 8002f3a: 687b ldr r3, [r7, #4] 8002f3c: 4a1a ldr r2, [pc, #104] ; (8002fa8 ) 8002f3e: 4293 cmp r3, r2 8002f40: d102 bne.n 8002f48 { periphclk = rcc_clocks.PCLK2_Frequency; 8002f42: 697b ldr r3, [r7, #20] 8002f44: 61bb str r3, [r7, #24] 8002f46: e01a b.n 8002f7e } else if (USARTx == USART2) 8002f48: 687b ldr r3, [r7, #4] 8002f4a: 4a18 ldr r2, [pc, #96] ; (8002fac ) 8002f4c: 4293 cmp r3, r2 8002f4e: d102 bne.n 8002f56 { periphclk = rcc_clocks.PCLK1_Frequency; 8002f50: 693b ldr r3, [r7, #16] 8002f52: 61bb str r3, [r7, #24] 8002f54: e013 b.n 8002f7e } #if defined(USART3) else if (USARTx == USART3) 8002f56: 687b ldr r3, [r7, #4] 8002f58: 4a15 ldr r2, [pc, #84] ; (8002fb0 ) 8002f5a: 4293 cmp r3, r2 8002f5c: d102 bne.n 8002f64 { periphclk = rcc_clocks.PCLK1_Frequency; 8002f5e: 693b ldr r3, [r7, #16] 8002f60: 61bb str r3, [r7, #24] 8002f62: e00c b.n 8002f7e } #endif /* USART3 */ #if defined(UART4) else if (USARTx == UART4) 8002f64: 687b ldr r3, [r7, #4] 8002f66: 4a13 ldr r2, [pc, #76] ; (8002fb4 ) 8002f68: 4293 cmp r3, r2 8002f6a: d102 bne.n 8002f72 { periphclk = rcc_clocks.PCLK1_Frequency; 8002f6c: 693b ldr r3, [r7, #16] 8002f6e: 61bb str r3, [r7, #24] 8002f70: e005 b.n 8002f7e } #endif /* UART4 */ #if defined(UART5) else if (USARTx == UART5) 8002f72: 687b ldr r3, [r7, #4] 8002f74: 4a10 ldr r2, [pc, #64] ; (8002fb8 ) 8002f76: 4293 cmp r3, r2 8002f78: d101 bne.n 8002f7e { periphclk = rcc_clocks.PCLK1_Frequency; 8002f7a: 693b ldr r3, [r7, #16] 8002f7c: 61bb str r3, [r7, #24] /* Configure the USART Baud Rate : - valid baud rate value (different from 0) is required - Peripheral clock as returned by RCC service, should be valid (different from 0). */ if ((periphclk != LL_RCC_PERIPH_FREQUENCY_NO) 8002f7e: 69bb ldr r3, [r7, #24] 8002f80: 2b00 cmp r3, #0 8002f82: d00c beq.n 8002f9e && (USART_InitStruct->BaudRate != 0U)) 8002f84: 683b ldr r3, [r7, #0] 8002f86: 681b ldr r3, [r3, #0] 8002f88: 2b00 cmp r3, #0 8002f8a: d008 beq.n 8002f9e { status = SUCCESS; 8002f8c: 2300 movs r3, #0 8002f8e: 77fb strb r3, [r7, #31] LL_USART_SetBaudRate(USARTx, periphclk, USART_InitStruct->OverSampling, USART_InitStruct->BaudRate); #else LL_USART_SetBaudRate(USARTx, 8002f90: 683b ldr r3, [r7, #0] 8002f92: 681b ldr r3, [r3, #0] 8002f94: 461a mov r2, r3 8002f96: 69b9 ldr r1, [r7, #24] 8002f98: 6878 ldr r0, [r7, #4] 8002f9a: f7ff ff3f bl 8002e1c assert_param(IS_LL_USART_BRR_MIN(USARTx->BRR)); } } /* Endif (=> USART not in Disabled state => return ERROR) */ return (status); 8002f9e: 7ffb ldrb r3, [r7, #31] } 8002fa0: 4618 mov r0, r3 8002fa2: 3720 adds r7, #32 8002fa4: 46bd mov sp, r7 8002fa6: bd80 pop {r7, pc} 8002fa8: 40013800 .word 0x40013800 8002fac: 40004400 .word 0x40004400 8002fb0: 40004800 .word 0x40004800 8002fb4: 40004c00 .word 0x40004c00 8002fb8: 40005000 .word 0x40005000 08002fbc : * @note Variable can be calculated also through SystemCoreClockUpdate function. * @param HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro) * @retval None */ void LL_SetSystemCoreClock(uint32_t HCLKFrequency) { 8002fbc: b480 push {r7} 8002fbe: b083 sub sp, #12 8002fc0: af00 add r7, sp, #0 8002fc2: 6078 str r0, [r7, #4] /* HCLK clock frequency */ SystemCoreClock = HCLKFrequency; 8002fc4: 4a03 ldr r2, [pc, #12] ; (8002fd4 ) 8002fc6: 687b ldr r3, [r7, #4] 8002fc8: 6013 str r3, [r2, #0] } 8002fca: bf00 nop 8002fcc: 370c adds r7, #12 8002fce: 46bd mov sp, r7 8002fd0: bc80 pop {r7} 8002fd2: 4770 bx lr 8002fd4: 20000000 .word 0x20000000 08002fd8 : void InitCanFilter(void); //------------------------------------------------------------------------ // ĬÈϹýÂËÆ÷£¬½ÓÊÕËùÓÐÊý¾Ý°ü void DefaultCanFilter(u8 fifo) { 8002fd8: b580 push {r7, lr} 8002fda: b08e sub sp, #56 ; 0x38 8002fdc: af00 add r7, sp, #0 8002fde: 4603 mov r3, r0 8002fe0: 71fb strb r3, [r7, #7] HAL_StatusTypeDef halsta; CAN_FilterTypeDef hFilterConfig; hFilterConfig.FilterBank = 0; // ´ý³õʼ»¯µÄ¹ýÂËÆ÷ΪÖ÷0--13 , ´Ó14--27 8002fe2: 2300 movs r3, #0 8002fe4: 623b str r3, [r7, #32] hFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // ¹¤×÷ÔÚ±êʶ·ûÆÁ±Îλģʽ 8002fe6: 2300 movs r3, #0 8002fe8: 627b str r3, [r7, #36] ; 0x24 hFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // ¹ýÂËÆ÷λ¿íΪ1¸ö32λ¡£ 8002fea: 2301 movs r3, #1 8002fec: 62bb str r3, [r7, #40] ; 0x28 hFilterConfig.FilterIdHigh = 0x0000; // É趨¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱΪµÚÒ»¸ö£© 8002fee: 2300 movs r3, #0 8002ff0: 60fb str r3, [r7, #12] hFilterConfig.FilterIdLow = 0x0000; // É趨¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱΪµÚ¶þ¸ö£© 8002ff2: 2300 movs r3, #0 8002ff4: 613b str r3, [r7, #16] hFilterConfig.FilterMaskIdHigh = 0x0000; // É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱΪµÚÒ»¸ö£© 8002ff6: 2300 movs r3, #0 8002ff8: 617b str r3, [r7, #20] hFilterConfig.FilterMaskIdLow = 0x0000; // É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱΪµÚ¶þ¸ö) 8002ffa: 2300 movs r3, #0 8002ffc: 61bb str r3, [r7, #24] hFilterConfig.FilterFIFOAssignment = fifo; // ¹ýÂËÆ÷±»¹ØÁªµ½FIFO 8002ffe: 79fb ldrb r3, [r7, #7] 8003000: 61fb str r3, [r7, #28] hFilterConfig.SlaveStartFilterBank = 14; // ´Ó½ÚµãCAN¹ýÂËÆ÷£¨¶ÔÓÚÖ÷CANÎÞÒâÒ壩¡£Ë«CANµÄϵͳ±ØÐëÉèÖà 8003002: 230e movs r3, #14 8003004: 633b str r3, [r7, #48] ; 0x30 hFilterConfig.FilterActivation = CAN_FILTER_ENABLE; // ʹÄܹýÂËÆ÷ 8003006: 2301 movs r3, #1 8003008: 62fb str r3, [r7, #44] ; 0x2c halsta = HAL_CAN_ConfigFilter(&HCAN, &hFilterConfig); 800300a: f107 030c add.w r3, r7, #12 800300e: 4619 mov r1, r3 8003010: 4808 ldr r0, [pc, #32] ; (8003034 ) 8003012: f7fe fb16 bl 8001642 8003016: 4603 mov r3, r0 8003018: f887 3037 strb.w r3, [r7, #55] ; 0x37 printf("DefaultCanFilter at fifo%d, halsta=%d\r\n", fifo, halsta); 800301c: 79fb ldrb r3, [r7, #7] 800301e: f897 2037 ldrb.w r2, [r7, #55] ; 0x37 8003022: 4619 mov r1, r3 8003024: 4804 ldr r0, [pc, #16] ; (8003038 ) 8003026: f006 fc71 bl 800990c } 800302a: bf00 nop 800302c: 3738 adds r7, #56 ; 0x38 800302e: 46bd mov sp, r7 8003030: bd80 pop {r7, pc} 8003032: bf00 nop 8003034: 2000058c .word 0x2000058c 8003038: 0800a940 .word 0x0800a940 0800303c : void (*SetCanFilter)(u8) = DefaultCanFilter; void RegistFilter(void*func) { 800303c: b480 push {r7} 800303e: b083 sub sp, #12 8003040: af00 add r7, sp, #0 8003042: 6078 str r0, [r7, #4] SetCanFilter = (void (*)(u8))func; 8003044: 687b ldr r3, [r7, #4] 8003046: 4a03 ldr r2, [pc, #12] ; (8003054 ) 8003048: 6013 str r3, [r2, #0] } 800304a: bf00 nop 800304c: 370c adds r7, #12 800304e: 46bd mov sp, r7 8003050: bc80 pop {r7} 8003052: 4770 bx lr 8003054: 2000000c .word 0x2000000c 08003058 : //------------------------------------------------------------------------ void InitCanCtrl(void) { 8003058: b580 push {r7, lr} 800305a: b082 sub sp, #8 800305c: af00 add r7, sp, #0 HAL_StatusTypeDef halsta; // ״̬ InitCanMsgList(); // ¿ØÖÆÊý¾Ý½á¹¹³õʼ»¯ 800305e: f000 f847 bl 80030f0 if (SetCanFilter != NULL) // ¹ýÂËÆ÷³õʼ»¯ 8003062: 4b1d ldr r3, [pc, #116] ; (80030d8 ) 8003064: 681b ldr r3, [r3, #0] 8003066: 2b00 cmp r3, #0 8003068: d003 beq.n 8003072 { SetCanFilter(CAN_FILTER_FIFO0); 800306a: 4b1b ldr r3, [pc, #108] ; (80030d8 ) 800306c: 681b ldr r3, [r3, #0] 800306e: 2000 movs r0, #0 8003070: 4798 blx r3 } halsta = HAL_CAN_ActivateNotification(&HCAN, CAN_IT_RX_FIFO0_MSG_PENDING); // ´ò¿ªCAN½ÓÊÕÖÐ¶Ï 8003072: 2102 movs r1, #2 8003074: 4819 ldr r0, [pc, #100] ; (80030dc ) 8003076: f7fe fe03 bl 8001c80 800307a: 4603 mov r3, r0 800307c: 71fb strb r3, [r7, #7] if (halsta != HAL_OK) 800307e: 79fb ldrb r3, [r7, #7] 8003080: 2b00 cmp r3, #0 8003082: d002 beq.n 800308a { printf("HAL_CAN_ActivateNotification(&HCAN, CAN_IT_RX_FIFO0_MSG_PENDING) failed\r\n"); 8003084: 4816 ldr r0, [pc, #88] ; (80030e0 ) 8003086: f006 fcb5 bl 80099f4 } halsta = HAL_CAN_ActivateNotification(&HCAN, CAN_IT_RX_FIFO0_FULL); // ´ò¿ªCANÓÊÏäÂúÖÐ¶Ï 800308a: 2104 movs r1, #4 800308c: 4813 ldr r0, [pc, #76] ; (80030dc ) 800308e: f7fe fdf7 bl 8001c80 8003092: 4603 mov r3, r0 8003094: 71fb strb r3, [r7, #7] if (halsta != HAL_OK) 8003096: 79fb ldrb r3, [r7, #7] 8003098: 2b00 cmp r3, #0 800309a: d002 beq.n 80030a2 { printf("HAL_CAN_ActivateNotification(&HCAN, CAN_IT_RX_FIFO0_FULL) failed\r\n"); 800309c: 4811 ldr r0, [pc, #68] ; (80030e4 ) 800309e: f006 fca9 bl 80099f4 } halsta = HAL_CAN_DeactivateNotification(&HCAN, CAN_IT_TX_MAILBOX_EMPTY); // ¹Ø±Õ·¢ËÍÖÐ¶Ï 80030a2: 2101 movs r1, #1 80030a4: 480d ldr r0, [pc, #52] ; (80030dc ) 80030a6: f7fe fe10 bl 8001cca 80030aa: 4603 mov r3, r0 80030ac: 71fb strb r3, [r7, #7] if (halsta != HAL_OK) 80030ae: 79fb ldrb r3, [r7, #7] 80030b0: 2b00 cmp r3, #0 80030b2: d002 beq.n 80030ba { printf("HAL_CAN_DeactivateNotification(&HCAN, CAN_IT_TX_MAILBOX_EMPTY) failed\r\n"); 80030b4: 480c ldr r0, [pc, #48] ; (80030e8 ) 80030b6: f006 fc9d bl 80099f4 } halsta = HAL_CAN_Start(&HCAN); // Æô¶¯CANÄ£¿é 80030ba: 4808 ldr r0, [pc, #32] ; (80030dc ) 80030bc: f7fe fb8a bl 80017d4 80030c0: 4603 mov r3, r0 80030c2: 71fb strb r3, [r7, #7] if (halsta != HAL_OK) 80030c4: 79fb ldrb r3, [r7, #7] 80030c6: 2b00 cmp r3, #0 80030c8: d002 beq.n 80030d0 { printf("HAL_CAN_Start failed\r\n"); 80030ca: 4808 ldr r0, [pc, #32] ; (80030ec ) 80030cc: f006 fc92 bl 80099f4 } } 80030d0: bf00 nop 80030d2: 3708 adds r7, #8 80030d4: 46bd mov sp, r7 80030d6: bd80 pop {r7, pc} 80030d8: 2000000c .word 0x2000000c 80030dc: 2000058c .word 0x2000058c 80030e0: 0800a968 .word 0x0800a968 80030e4: 0800a9b4 .word 0x0800a9b4 80030e8: 0800a9f8 .word 0x0800a9f8 80030ec: 0800aa40 .word 0x0800aa40 080030f0 : // ³õʼ»¯¿ØÖƽṹ void InitCanMsgList(void) { 80030f0: b580 push {r7, lr} 80030f2: af00 add r7, sp, #0 memset(&g_canTxCtrl, 0, sizeof(CanTxCtrl)); 80030f4: f44f 7204 mov.w r2, #528 ; 0x210 80030f8: 2100 movs r1, #0 80030fa: 4813 ldr r0, [pc, #76] ; (8003148 ) 80030fc: f006 fbfd bl 80098fa memset(&g_canRxCtrl, 0, sizeof(CanRxCtrl)); 8003100: f44f 7213 mov.w r2, #588 ; 0x24c 8003104: 2100 movs r1, #0 8003106: 4811 ldr r0, [pc, #68] ; (800314c ) 8003108: f006 fbf7 bl 80098fa g_canTxCtrl.pktTxListHead = g_canTxCtrl.pktTxList; // Í·Ö¸Õë 800310c: 4b0e ldr r3, [pc, #56] ; (8003148 ) 800310e: 4a0e ldr r2, [pc, #56] ; (8003148 ) 8003110: f8c3 2200 str.w r2, [r3, #512] ; 0x200 g_canTxCtrl.pktTxListTail = g_canTxCtrl.pktTxList; // βָÕë 8003114: 4b0c ldr r3, [pc, #48] ; (8003148 ) 8003116: 4a0c ldr r2, [pc, #48] ; (8003148 ) 8003118: f8c3 2204 str.w r2, [r3, #516] ; 0x204 g_canTxCtrl.pktTxNumber = 0; // ÓÐЧ¸öÊý 800311c: 4b0a ldr r3, [pc, #40] ; (8003148 ) 800311e: 2200 movs r2, #0 8003120: f8c3 2208 str.w r2, [r3, #520] ; 0x208 g_canTxCtrl.sendingFlag = 0; 8003124: 4b08 ldr r3, [pc, #32] ; (8003148 ) 8003126: 2200 movs r2, #0 8003128: f8c3 220c str.w r2, [r3, #524] ; 0x20c g_canRxCtrl.pktRxListHead = g_canRxCtrl.pktRxList; // Í·Ö¸Õë 800312c: 4b07 ldr r3, [pc, #28] ; (800314c ) 800312e: 4a07 ldr r2, [pc, #28] ; (800314c ) 8003130: f8c3 2240 str.w r2, [r3, #576] ; 0x240 g_canRxCtrl.pktRxListTail = g_canRxCtrl.pktRxList; // βָÕë 8003134: 4b05 ldr r3, [pc, #20] ; (800314c ) 8003136: 4a05 ldr r2, [pc, #20] ; (800314c ) 8003138: f8c3 2244 str.w r2, [r3, #580] ; 0x244 g_canRxCtrl.pktRxNumber = 0; // ÓÐЧ¸öÊý 800313c: 4b03 ldr r3, [pc, #12] ; (800314c ) 800313e: 2200 movs r2, #0 8003140: f8c3 2248 str.w r2, [r3, #584] ; 0x248 } 8003144: bf00 nop 8003146: bd80 pop {r7, pc} 8003148: 200005b8 .word 0x200005b8 800314c: 200007c8 .word 0x200007c8 08003150 : HAL_BUSY = 0x02U, HAL_TIMEOUT = 0x03U, */ // ·¢ËÍÊý¾Ýµ½×ÜÏß int TransCanDataToBus(void) { 8003150: b580 push {r7, lr} 8003152: b082 sub sp, #8 8003154: af00 add r7, sp, #0 u32 tsmBox; // ·¢ËÍÓÊÏä // printf("TransCanDataToBus\r\n"); // ´Ó¶ÓÁÐȡһ¸öÊý¾Ý°ü·¢ËÍ if (g_canTxCtrl.pktTxNumber <= 0) 8003156: 4b20 ldr r3, [pc, #128] ; (80031d8 ) 8003158: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 800315c: 2b00 cmp r3, #0 800315e: dc01 bgt.n 8003164 { //printf("pktTxNumber=%d\r\n", g_canTxCtrl.pktTxNumber); return 1; 8003160: 2301 movs r3, #1 8003162: e035 b.n 80031d0 } halsta = HAL_CAN_AddTxMessage(&HCAN, &(g_canTxCtrl.pktTxListTail->canTxhead) , g_canTxCtrl.pktTxListTail->data, &tsmBox); 8003164: 4b1c ldr r3, [pc, #112] ; (80031d8 ) 8003166: f8d3 3204 ldr.w r3, [r3, #516] ; 0x204 800316a: 4619 mov r1, r3 800316c: 4b1a ldr r3, [pc, #104] ; (80031d8 ) 800316e: f8d3 3204 ldr.w r3, [r3, #516] ; 0x204 8003172: f103 0218 add.w r2, r3, #24 8003176: 463b mov r3, r7 8003178: 4818 ldr r0, [pc, #96] ; (80031dc ) 800317a: f7fe fb6f bl 800185c 800317e: 4603 mov r3, r0 8003180: 71fb strb r3, [r7, #7] //printf("exid=0x%x,tsmBox=%d,halsta=%d\r\n", g_canTxCtrl.pktTxListTail->canTxhead.ExtId, tsmBox,halsta); if (halsta == HAL_OK) 8003182: 79fb ldrb r3, [r7, #7] 8003184: 2b00 cmp r3, #0 8003186: d11d bne.n 80031c4 { EnterCritical(); 8003188: f000 fa1e bl 80035c8 g_canTxCtrl.pktTxNumber--; 800318c: 4b12 ldr r3, [pc, #72] ; (80031d8 ) 800318e: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 8003192: 3b01 subs r3, #1 8003194: 4a10 ldr r2, [pc, #64] ; (80031d8 ) 8003196: f8c2 3208 str.w r3, [r2, #520] ; 0x208 g_canTxCtrl.pktTxListTail++; 800319a: 4b0f ldr r3, [pc, #60] ; (80031d8 ) 800319c: f8d3 3204 ldr.w r3, [r3, #516] ; 0x204 80031a0: 3320 adds r3, #32 80031a2: 4a0d ldr r2, [pc, #52] ; (80031d8 ) 80031a4: f8c2 3204 str.w r3, [r2, #516] ; 0x204 if (g_canTxCtrl.pktTxListTail > &(g_canTxCtrl.pktTxList[TRANS_PKT_LIST_NUM-1])) 80031a8: 4b0b ldr r3, [pc, #44] ; (80031d8 ) 80031aa: f8d3 3204 ldr.w r3, [r3, #516] ; 0x204 80031ae: 4a0c ldr r2, [pc, #48] ; (80031e0 ) 80031b0: 4293 cmp r3, r2 80031b2: d903 bls.n 80031bc { g_canTxCtrl.pktTxListTail = &(g_canTxCtrl.pktTxList[0]); 80031b4: 4b08 ldr r3, [pc, #32] ; (80031d8 ) 80031b6: 4a08 ldr r2, [pc, #32] ; (80031d8 ) 80031b8: f8c3 2204 str.w r2, [r3, #516] ; 0x204 } ExitCritical(); 80031bc: f000 fa16 bl 80035ec // printf("HAL_OK, g_canTxCtrl.pktTxNumber=%d\r\n", num); return 0; 80031c0: 2300 movs r3, #0 80031c2: e005 b.n 80031d0 } else { printf("TransCanDataToBus:other sta, halsta=%d\r\n", halsta); 80031c4: 79fb ldrb r3, [r7, #7] 80031c6: 4619 mov r1, r3 80031c8: 4806 ldr r0, [pc, #24] ; (80031e4 ) 80031ca: f006 fb9f bl 800990c return 2; 80031ce: 2302 movs r3, #2 } } 80031d0: 4618 mov r0, r3 80031d2: 3708 adds r7, #8 80031d4: 46bd mov sp, r7 80031d6: bd80 pop {r7, pc} 80031d8: 200005b8 .word 0x200005b8 80031dc: 2000058c .word 0x2000058c 80031e0: 20000798 .word 0x20000798 80031e4: 0800aa58 .word 0x0800aa58 080031e8 : // ´Ó×ÜÏßÉϽÓÊÕÊý¾Ý int ResvCanDataFromBus(void) { 80031e8: b580 push {r7, lr} 80031ea: b08a sub sp, #40 ; 0x28 80031ec: af00 add r7, sp, #0 HAL_StatusTypeDef halsta; CanRxMsg rxMsg; halsta = HAL_CAN_GetRxMessage(&HCAN, CAN_RX_FIFO0, &(rxMsg.canRxhead), rxMsg.data); // ¶ÁÈ¡Êý¾Ý 80031ee: 463b mov r3, r7 80031f0: 331c adds r3, #28 80031f2: 463a mov r2, r7 80031f4: 2100 movs r1, #0 80031f6: 4820 ldr r0, [pc, #128] ; (8003278 ) 80031f8: f7fe fc0a bl 8001a10 80031fc: 4603 mov r3, r0 80031fe: f887 3027 strb.w r3, [r7, #39] ; 0x27 if (halsta == HAL_OK) 8003202: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 8003206: 2b00 cmp r3, #0 8003208: d12a bne.n 8003260 { //printf("get a can packet:\r\n"); //printf("exid=0x%x\r\n", rxMsg.canRxhead.ExtId); if (g_canRxCtrl.pktRxNumber < RESV_PKT_LIST_NUM-1) // Ìí¼Óµ½¶ÓÁÐÖÐ 800320a: 4b1c ldr r3, [pc, #112] ; (800327c ) 800320c: f8d3 3248 ldr.w r3, [r3, #584] ; 0x248 8003210: 2b0e cmp r3, #14 8003212: dc21 bgt.n 8003258 { // printf("add to rxlist, add=0x%x\r\n", g_canRxCtrl.pktRxListHead); memcpy(g_canRxCtrl.pktRxListHead, &rxMsg, sizeof(CanRxMsg)); 8003214: 4b19 ldr r3, [pc, #100] ; (800327c ) 8003216: f8d3 3240 ldr.w r3, [r3, #576] ; 0x240 800321a: 4639 mov r1, r7 800321c: 2224 movs r2, #36 ; 0x24 800321e: 4618 mov r0, r3 8003220: f006 fb60 bl 80098e4 g_canRxCtrl.pktRxNumber++; 8003224: 4b15 ldr r3, [pc, #84] ; (800327c ) 8003226: f8d3 3248 ldr.w r3, [r3, #584] ; 0x248 800322a: 3301 adds r3, #1 800322c: 4a13 ldr r2, [pc, #76] ; (800327c ) 800322e: f8c2 3248 str.w r3, [r2, #584] ; 0x248 g_canRxCtrl.pktRxListHead++; 8003232: 4b12 ldr r3, [pc, #72] ; (800327c ) 8003234: f8d3 3240 ldr.w r3, [r3, #576] ; 0x240 8003238: 3324 adds r3, #36 ; 0x24 800323a: 4a10 ldr r2, [pc, #64] ; (800327c ) 800323c: f8c2 3240 str.w r3, [r2, #576] ; 0x240 if (g_canRxCtrl.pktRxListHead > &(g_canRxCtrl.pktRxList[RESV_PKT_LIST_NUM-1])) 8003240: 4b0e ldr r3, [pc, #56] ; (800327c ) 8003242: f8d3 3240 ldr.w r3, [r3, #576] ; 0x240 8003246: 4a0e ldr r2, [pc, #56] ; (8003280 ) 8003248: 4293 cmp r3, r2 800324a: d903 bls.n 8003254 { g_canRxCtrl.pktRxListHead = &(g_canRxCtrl.pktRxList[0]); 800324c: 4b0b ldr r3, [pc, #44] ; (800327c ) 800324e: 4a0b ldr r2, [pc, #44] ; (800327c ) 8003250: f8c3 2240 str.w r2, [r3, #576] ; 0x240 } //printf("resv RxNum=%d\r\n", g_canRxCtrl.pktRxNumber); return 0; 8003254: 2300 movs r3, #0 8003256: e00a b.n 800326e } else { printf("can receive buff is full\r\n"); 8003258: 480a ldr r0, [pc, #40] ; (8003284 ) 800325a: f006 fbcb bl 80099f4 800325e: e005 b.n 800326c } } else { printf("ResvCanDataFromBus:other sta, halsta=%d\r\n", halsta); 8003260: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 8003264: 4619 mov r1, r3 8003266: 4808 ldr r0, [pc, #32] ; (8003288 ) 8003268: f006 fb50 bl 800990c } return 1; 800326c: 2301 movs r3, #1 } 800326e: 4618 mov r0, r3 8003270: 3728 adds r7, #40 ; 0x28 8003272: 46bd mov sp, r7 8003274: bd80 pop {r7, pc} 8003276: bf00 nop 8003278: 2000058c .word 0x2000058c 800327c: 200007c8 .word 0x200007c8 8003280: 200009e4 .word 0x200009e4 8003284: 0800aa84 .word 0x0800aa84 8003288: 0800aaa0 .word 0x0800aaa0 0800328c : //--------------------------------------------------------- // Ìí¼Ó·¢ËÍÊý¾Ýµ½¶ÓÁÐ int SendACANDataPacket(CanTxMsg * pMsg) { 800328c: b580 push {r7, lr} 800328e: b084 sub sp, #16 8003290: af00 add r7, sp, #0 8003292: 6078 str r0, [r7, #4] int rslt; if (pMsg == NULL) 8003294: 687b ldr r3, [r7, #4] 8003296: 2b00 cmp r3, #0 8003298: d105 bne.n 80032a6 { printf("SendACANDataPacket:para error\r\n"); 800329a: 4832 ldr r0, [pc, #200] ; (8003364 ) 800329c: f006 fbaa bl 80099f4 return -1; 80032a0: f04f 33ff mov.w r3, #4294967295 80032a4: e059 b.n 800335a } if (g_canTxCtrl.pktTxNumber < TRANS_PKT_LIST_NUM) 80032a6: 4b30 ldr r3, [pc, #192] ; (8003368 ) 80032a8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 80032ac: 2b0f cmp r3, #15 80032ae: dc4e bgt.n 800334e { // Ìí¼ÓÒ»¸öÊý¾Ý°üµ½·¢ËͶÓÁÐ memcpy(g_canTxCtrl.pktTxListHead, pMsg, sizeof(CanTxMsg)); // ¿½±´Êý¾Ý 80032b0: 4b2d ldr r3, [pc, #180] ; (8003368 ) 80032b2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 80032b6: 2220 movs r2, #32 80032b8: 6879 ldr r1, [r7, #4] 80032ba: 4618 mov r0, r3 80032bc: f006 fb12 bl 80098e4 EnterCritical(); 80032c0: f000 f982 bl 80035c8 g_canTxCtrl.pktTxNumber++; 80032c4: 4b28 ldr r3, [pc, #160] ; (8003368 ) 80032c6: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 80032ca: 3301 adds r3, #1 80032cc: 4a26 ldr r2, [pc, #152] ; (8003368 ) 80032ce: f8c2 3208 str.w r3, [r2, #520] ; 0x208 g_canTxCtrl.pktTxListHead++; 80032d2: 4b25 ldr r3, [pc, #148] ; (8003368 ) 80032d4: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 80032d8: 3320 adds r3, #32 80032da: 4a23 ldr r2, [pc, #140] ; (8003368 ) 80032dc: f8c2 3200 str.w r3, [r2, #512] ; 0x200 if (g_canTxCtrl.pktTxListHead > &(g_canTxCtrl.pktTxList[TRANS_PKT_LIST_NUM-1])) 80032e0: 4b21 ldr r3, [pc, #132] ; (8003368 ) 80032e2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 80032e6: 4a21 ldr r2, [pc, #132] ; (800336c ) 80032e8: 4293 cmp r3, r2 80032ea: d903 bls.n 80032f4 { g_canTxCtrl.pktTxListHead = &(g_canTxCtrl.pktTxList[0]); 80032ec: 4b1e ldr r3, [pc, #120] ; (8003368 ) 80032ee: 4a1e ldr r2, [pc, #120] ; (8003368 ) 80032f0: f8c3 2200 str.w r2, [r3, #512] ; 0x200 } ExitCritical(); 80032f4: f000 f97a bl 80035ec if (g_canTxCtrl.sendingFlag == 0) // ûÓз¢ËÍ 80032f8: 4b1b ldr r3, [pc, #108] ; (8003368 ) 80032fa: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c 80032fe: 2b00 cmp r3, #0 8003300: d11e bne.n 8003340 { rslt = TransCanDataToBus(); // Æô¶¯·¢ËͶÓÁÐÖÐÊý¾Ýµ½×ÜÏß 8003302: f7ff ff25 bl 8003150 8003306: 60f8 str r0, [r7, #12] if (rslt == 0) // Ìí¼Óµ½¶ÓÁгɹ¦£¬¶ÓÁÐÖÐÓÐÊý¾Ý 8003308: 68fb ldr r3, [r7, #12] 800330a: 2b00 cmp r3, #0 800330c: d108 bne.n 8003320 { //printf("send a can packet in app\r\n"); g_canTxCtrl.sendingFlag = 1; // ÉèÖñêÖ¾ 800330e: 4b16 ldr r3, [pc, #88] ; (8003368 ) 8003310: 2201 movs r2, #1 8003312: f8c3 220c str.w r2, [r3, #524] ; 0x20c HAL_CAN_ActivateNotification(&HCAN, CAN_IT_TX_MAILBOX_EMPTY); // ´ò¿ªÓÊÏä¿ÕÖÐ¶Ï 8003316: 2101 movs r1, #1 8003318: 4815 ldr r0, [pc, #84] ; (8003370 ) 800331a: f7fe fcb1 bl 8001c80 800331e: e013 b.n 8003348 } else if (rslt == 1) // ¶ÓÁÐÖÐûÓÐÊý¾ÝÒª·¢ËÍ 8003320: 68fb ldr r3, [r7, #12] 8003322: 2b01 cmp r3, #1 8003324: d108 bne.n 8003338 { //printf("send list empty in app\r\n"); g_canTxCtrl.sendingFlag = 0; 8003326: 4b10 ldr r3, [pc, #64] ; (8003368 ) 8003328: 2200 movs r2, #0 800332a: f8c3 220c str.w r2, [r3, #524] ; 0x20c HAL_CAN_DeactivateNotification(&HCAN, CAN_IT_TX_MAILBOX_EMPTY); // ûÓÐÊý¾Ý·¢ËÍ£¬¹Ø±ÕÖÐ¶Ï 800332e: 2101 movs r1, #1 8003330: 480f ldr r0, [pc, #60] ; (8003370 ) 8003332: f7fe fcca bl 8001cca 8003336: e007 b.n 8003348 } else // ûÓкÏÊʵÄÓÊÏä { printf("no mail box in app, start later\r\n"); 8003338: 480e ldr r0, [pc, #56] ; (8003374 ) 800333a: f006 fb5b bl 80099f4 800333e: e003 b.n 8003348 } } else { //printf("sendingFlag=1\r\n"); HAL_CAN_ActivateNotification(&HCAN, CAN_IT_TX_MAILBOX_EMPTY); // ´ò¿ªÓÊÏä¿ÕÖÐ¶Ï 8003340: 2101 movs r1, #1 8003342: 480b ldr r0, [pc, #44] ; (8003370 ) 8003344: f7fe fc9c bl 8001c80 } rslt = 0; 8003348: 2300 movs r3, #0 800334a: 60fb str r3, [r7, #12] 800334c: e004 b.n 8003358 } else { printf("can send buff is full\r\n"); 800334e: 480a ldr r0, [pc, #40] ; (8003378 ) 8003350: f006 fb50 bl 80099f4 rslt = 1; 8003354: 2301 movs r3, #1 8003356: 60fb str r3, [r7, #12] } return rslt; 8003358: 68fb ldr r3, [r7, #12] } 800335a: 4618 mov r0, r3 800335c: 3710 adds r7, #16 800335e: 46bd mov sp, r7 8003360: bd80 pop {r7, pc} 8003362: bf00 nop 8003364: 0800aacc .word 0x0800aacc 8003368: 200005b8 .word 0x200005b8 800336c: 20000798 .word 0x20000798 8003370: 2000058c .word 0x2000058c 8003374: 0800aaec .word 0x0800aaec 8003378: 0800ab10 .word 0x0800ab10 0800337c : // ´Ó¶ÓÁÐÖжÁÈ¡Êý¾Ý int GetACanDataPacket(CanRxMsg * pMsg) { 800337c: b580 push {r7, lr} 800337e: b084 sub sp, #16 8003380: af00 add r7, sp, #0 8003382: 6078 str r0, [r7, #4] int rslt; if (pMsg == NULL) 8003384: 687b ldr r3, [r7, #4] 8003386: 2b00 cmp r3, #0 8003388: d102 bne.n 8003390 { return -1; 800338a: f04f 33ff mov.w r3, #4294967295 800338e: e02e b.n 80033ee } if (g_canRxCtrl.pktRxNumber > 0) 8003390: 4b19 ldr r3, [pc, #100] ; (80033f8 ) 8003392: f8d3 3248 ldr.w r3, [r3, #584] ; 0x248 8003396: 2b00 cmp r3, #0 8003398: dd26 ble.n 80033e8 { memcpy(pMsg, g_canRxCtrl.pktRxListTail, sizeof(CanRxMsg)); 800339a: 4b17 ldr r3, [pc, #92] ; (80033f8 ) 800339c: f8d3 3244 ldr.w r3, [r3, #580] ; 0x244 80033a0: 2224 movs r2, #36 ; 0x24 80033a2: 4619 mov r1, r3 80033a4: 6878 ldr r0, [r7, #4] 80033a6: f006 fa9d bl 80098e4 EnterCritical(); 80033aa: f000 f90d bl 80035c8 g_canRxCtrl.pktRxNumber--; 80033ae: 4b12 ldr r3, [pc, #72] ; (80033f8 ) 80033b0: f8d3 3248 ldr.w r3, [r3, #584] ; 0x248 80033b4: 3b01 subs r3, #1 80033b6: 4a10 ldr r2, [pc, #64] ; (80033f8 ) 80033b8: f8c2 3248 str.w r3, [r2, #584] ; 0x248 //printf("2.RxNum=%d\r\n", g_canRxCtrl.pktRxNumber); g_canRxCtrl.pktRxListTail++; 80033bc: 4b0e ldr r3, [pc, #56] ; (80033f8 ) 80033be: f8d3 3244 ldr.w r3, [r3, #580] ; 0x244 80033c2: 3324 adds r3, #36 ; 0x24 80033c4: 4a0c ldr r2, [pc, #48] ; (80033f8 ) 80033c6: f8c2 3244 str.w r3, [r2, #580] ; 0x244 if (g_canRxCtrl.pktRxListTail > &(g_canRxCtrl.pktRxList[RESV_PKT_LIST_NUM-1])) 80033ca: 4b0b ldr r3, [pc, #44] ; (80033f8 ) 80033cc: f8d3 3244 ldr.w r3, [r3, #580] ; 0x244 80033d0: 4a0a ldr r2, [pc, #40] ; (80033fc ) 80033d2: 4293 cmp r3, r2 80033d4: d903 bls.n 80033de { g_canRxCtrl.pktRxListTail = &(g_canRxCtrl.pktRxList[0]); 80033d6: 4b08 ldr r3, [pc, #32] ; (80033f8 ) 80033d8: 4a07 ldr r2, [pc, #28] ; (80033f8 ) 80033da: f8c3 2244 str.w r2, [r3, #580] ; 0x244 } ExitCritical(); 80033de: f000 f905 bl 80035ec rslt = 0; 80033e2: 2300 movs r3, #0 80033e4: 60fb str r3, [r7, #12] 80033e6: e001 b.n 80033ec } else { rslt = 1; 80033e8: 2301 movs r3, #1 80033ea: 60fb str r3, [r7, #12] } return rslt; 80033ec: 68fb ldr r3, [r7, #12] } 80033ee: 4618 mov r0, r3 80033f0: 3710 adds r7, #16 80033f2: 46bd mov sp, r7 80033f4: bd80 pop {r7, pc} 80033f6: bf00 nop 80033f8: 200007c8 .word 0x200007c8 80033fc: 200009e4 .word 0x200009e4 08003400 : //--------------------------------------------------------- void CanTransIntProc(void) { 8003400: b580 push {r7, lr} 8003402: b082 sub sp, #8 8003404: af00 add r7, sp, #0 int rslt; rslt = TransCanDataToBus(); 8003406: f7ff fea3 bl 8003150 800340a: 6078 str r0, [r7, #4] if (rslt == 0) // ¶ÓÁÐÖÐÓÐÊý¾ÝÇÒ·¢Ëͳɹ¦ 800340c: 687b ldr r3, [r7, #4] 800340e: 2b00 cmp r3, #0 8003410: d00e beq.n 8003430 { //printf("send a can packet in int\r\n"); } else if (rslt == 1) // ¶ÓÁÐÖÐûÓÐÊý¾ÝÒª·¢ËÍ 8003412: 687b ldr r3, [r7, #4] 8003414: 2b01 cmp r3, #1 8003416: d108 bne.n 800342a { // printf("send list empty in int, close int\r\n"); g_canTxCtrl.sendingFlag = 0; 8003418: 4b07 ldr r3, [pc, #28] ; (8003438 ) 800341a: 2200 movs r2, #0 800341c: f8c3 220c str.w r2, [r3, #524] ; 0x20c HAL_CAN_DeactivateNotification(&HCAN, CAN_IT_TX_MAILBOX_EMPTY); // ûÓÐÊý¾Ý·¢ËÍ£¬¹Ø±ÕÖÐ¶Ï 8003420: 2101 movs r1, #1 8003422: 4806 ldr r0, [pc, #24] ; (800343c ) 8003424: f7fe fc51 bl 8001cca } else // ûÓÐÓÊÏä { printf("no mail box in int\r\n"); } } 8003428: e002 b.n 8003430 printf("no mail box in int\r\n"); 800342a: 4805 ldr r0, [pc, #20] ; (8003440 ) 800342c: f006 fae2 bl 80099f4 } 8003430: bf00 nop 8003432: 3708 adds r7, #8 8003434: 46bd mov sp, r7 8003436: bd80 pop {r7, pc} 8003438: 200005b8 .word 0x200005b8 800343c: 2000058c .word 0x2000058c 8003440: 0800ab28 .word 0x0800ab28 08003444 : void CanResvIntProc(void) { 8003444: b580 push {r7, lr} 8003446: b082 sub sp, #8 8003448: af00 add r7, sp, #0 u32 len; len = HAL_CAN_GetRxFifoFillLevel(&HCAN, CAN_RX_FIFO0); // ¸öÊý 800344a: 2100 movs r1, #0 800344c: 4808 ldr r0, [pc, #32] ; (8003470 ) 800344e: f7fe fbf0 bl 8001c32 8003452: 6078 str r0, [r7, #4] while(len != 0) 8003454: e004 b.n 8003460 { //printf("get a can packet:\r\n"); ResvCanDataFromBus(); // ¶ÁÈ¡Êý¾Ý£¬Ìí¼Óµ½¶ÓÁÐ 8003456: f7ff fec7 bl 80031e8 len--; 800345a: 687b ldr r3, [r7, #4] 800345c: 3b01 subs r3, #1 800345e: 607b str r3, [r7, #4] while(len != 0) 8003460: 687b ldr r3, [r7, #4] 8003462: 2b00 cmp r3, #0 8003464: d1f7 bne.n 8003456 } } 8003466: bf00 nop 8003468: 3708 adds r7, #8 800346a: 46bd mov sp, r7 800346c: bd80 pop {r7, pc} 800346e: bf00 nop 8003470: 2000058c .word 0x2000058c 08003474 : //--------------------------------------------------------- // CANÓÊÏä0·¢ËÍÍê³ÉÖжϵĻص÷º¯Êý void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *pcan) { 8003474: b580 push {r7, lr} 8003476: b082 sub sp, #8 8003478: af00 add r7, sp, #0 800347a: 6078 str r0, [r7, #4] // if (pcan->Instance == CAN1) { CanTransIntProc(); 800347c: f7ff ffc0 bl 8003400 } } 8003480: bf00 nop 8003482: 3708 adds r7, #8 8003484: 46bd mov sp, r7 8003486: bd80 pop {r7, pc} 08003488 : // CANÓÊÏä1·¢ËÍÍê³ÉÖжϵĻص÷º¯Êý void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *pcan) { 8003488: b580 push {r7, lr} 800348a: b082 sub sp, #8 800348c: af00 add r7, sp, #0 800348e: 6078 str r0, [r7, #4] // if (pcan->Instance == CAN1) { CanTransIntProc(); 8003490: f7ff ffb6 bl 8003400 } } 8003494: bf00 nop 8003496: 3708 adds r7, #8 8003498: 46bd mov sp, r7 800349a: bd80 pop {r7, pc} 0800349c : // CANÓÊÏä2·¢ËÍÍê³ÉÖжϵĻص÷º¯Êý void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *pcan) { 800349c: b580 push {r7, lr} 800349e: b082 sub sp, #8 80034a0: af00 add r7, sp, #0 80034a2: 6078 str r0, [r7, #4] // if (pcan->Instance == CAN1) { CanTransIntProc(); 80034a4: f7ff ffac bl 8003400 } } 80034a8: bf00 nop 80034aa: 3708 adds r7, #8 80034ac: 46bd mov sp, r7 80034ae: bd80 pop {r7, pc} 080034b0 : // CANÓÊÏä0½ÓÊÕÖжϻص÷º¯Êý void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *pcan) { 80034b0: b580 push {r7, lr} 80034b2: b082 sub sp, #8 80034b4: af00 add r7, sp, #0 80034b6: 6078 str r0, [r7, #4] // if (pcan->Instance == CAN1) { //printf("rx fifo 0\r\n"); CanResvIntProc(); 80034b8: f7ff ffc4 bl 8003444 } } 80034bc: bf00 nop 80034be: 3708 adds r7, #8 80034c0: 46bd mov sp, r7 80034c2: bd80 pop {r7, pc} 080034c4 : void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *pcan) { 80034c4: b580 push {r7, lr} 80034c6: b082 sub sp, #8 80034c8: af00 add r7, sp, #0 80034ca: 6078 str r0, [r7, #4] printf("can rx fifo0 full\r\n"); 80034cc: 4803 ldr r0, [pc, #12] ; (80034dc ) 80034ce: f006 fa91 bl 80099f4 } 80034d2: bf00 nop 80034d4: 3708 adds r7, #8 80034d6: 46bd mov sp, r7 80034d8: bd80 pop {r7, pc} 80034da: bf00 nop 80034dc: 0800ab3c .word 0x0800ab3c 080034e0 : void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) { 80034e0: b580 push {r7, lr} 80034e2: b082 sub sp, #8 80034e4: af00 add r7, sp, #0 80034e6: 6078 str r0, [r7, #4] printf("can error\r\n"); 80034e8: 4803 ldr r0, [pc, #12] ; (80034f8 ) 80034ea: f006 fa83 bl 80099f4 } 80034ee: bf00 nop 80034f0: 3708 adds r7, #8 80034f2: 46bd mov sp, r7 80034f4: bd80 pop {r7, pc} 80034f6: bf00 nop 80034f8: 0800ab50 .word 0x0800ab50 080034fc : } //--------------------------------------------------------------------------------------------- int SendData(u8 * pDatBuf, int len) { 80034fc: b580 push {r7, lr} 80034fe: b082 sub sp, #8 8003500: af00 add r7, sp, #0 8003502: 6078 str r0, [r7, #4] 8003504: 6039 str r1, [r7, #0] if (g_useQueue == 1) 8003506: 4b09 ldr r3, [pc, #36] ; (800352c ) 8003508: 681b ldr r3, [r3, #0] 800350a: 2b01 cmp r3, #1 800350c: d105 bne.n 800351a { #if (CONSOLE_PORT == COMM_USART1) return Usart1SendData(pDatBuf, len); 800350e: 6839 ldr r1, [r7, #0] 8003510: 6878 ldr r0, [r7, #4] 8003512: f000 f9cb bl 80038ac 8003516: 4603 mov r3, r0 8003518: e004 b.n 8003524 #endif } else { #if (CONSOLE_PORT == COMM_USART1) return Usart1SendDataSync(pDatBuf, len); 800351a: 6839 ldr r1, [r7, #0] 800351c: 6878 ldr r0, [r7, #4] 800351e: f000 fb5d bl 8003bdc 8003522: 4603 mov r3, r0 return Usart6SendDataSync(pDatBuf, len); #else return 0; #endif } } 8003524: 4618 mov r0, r3 8003526: 3708 adds r7, #8 8003528: 46bd mov sp, r7 800352a: bd80 pop {r7, pc} 800352c: 20000010 .word 0x20000010 08003530 : int ResvData(u8 * pDat, int expectLen) { 8003530: b580 push {r7, lr} 8003532: b082 sub sp, #8 8003534: af00 add r7, sp, #0 8003536: 6078 str r0, [r7, #4] 8003538: 6039 str r1, [r7, #0] if (g_useQueue == 1) 800353a: 4b09 ldr r3, [pc, #36] ; (8003560 ) 800353c: 681b ldr r3, [r3, #0] 800353e: 2b01 cmp r3, #1 8003540: d105 bne.n 800354e { #if (CONSOLE_PORT == COMM_USART1) return Usart1GetData(pDat, expectLen); 8003542: 6839 ldr r1, [r7, #0] 8003544: 6878 ldr r0, [r7, #4] 8003546: f000 fa27 bl 8003998 800354a: 4603 mov r3, r0 800354c: e004 b.n 8003558 #endif } else { #if (CONSOLE_PORT == COMM_USART1) return Usart1GetDataSync(pDat, expectLen); 800354e: 6839 ldr r1, [r7, #0] 8003550: 6878 ldr r0, [r7, #4] 8003552: f000 fb6f bl 8003c34 8003556: 4603 mov r3, r0 return Usart6GetDataSync(pDat, expectLen); #else return 0; #endif } } 8003558: 4618 mov r0, r3 800355a: 3708 adds r7, #8 800355c: 46bd mov sp, r7 800355e: bd80 pop {r7, pc} 8003560: 20000010 .word 0x20000010 08003564 <_read>: } return 0; } int _read(int file, char *ptr, int len) { 8003564: b580 push {r7, lr} 8003566: b086 sub sp, #24 8003568: af00 add r7, sp, #0 800356a: 60f8 str r0, [r7, #12] 800356c: 60b9 str r1, [r7, #8] 800356e: 607a str r2, [r7, #4] int rslt; rslt = ResvData((u8*)ptr, len); 8003570: 6879 ldr r1, [r7, #4] 8003572: 68b8 ldr r0, [r7, #8] 8003574: f7ff ffdc bl 8003530 8003578: 6178 str r0, [r7, #20] return rslt; 800357a: 697b ldr r3, [r7, #20] } 800357c: 4618 mov r0, r3 800357e: 3718 adds r7, #24 8003580: 46bd mov sp, r7 8003582: bd80 pop {r7, pc} 08003584 <_write>: int _write(int file, char *ptr, int len) { 8003584: b580 push {r7, lr} 8003586: b084 sub sp, #16 8003588: af00 add r7, sp, #0 800358a: 60f8 str r0, [r7, #12] 800358c: 60b9 str r1, [r7, #8] 800358e: 607a str r2, [r7, #4] SendData((u8*)ptr, len); 8003590: 6879 ldr r1, [r7, #4] 8003592: 68b8 ldr r0, [r7, #8] 8003594: f7ff ffb2 bl 80034fc return len; 8003598: 687b ldr r3, [r7, #4] } 800359a: 4618 mov r0, r3 800359c: 3710 adds r7, #16 800359e: 46bd mov sp, r7 80035a0: bd80 pop {r7, pc} ... 080035a4 : } } int IsConsoleCancel(void) { 80035a4: b480 push {r7} 80035a6: b083 sub sp, #12 80035a8: af00 add r7, sp, #0 int rslt = g_cmdLine.cancel; 80035aa: 4b06 ldr r3, [pc, #24] ; (80035c4 ) 80035ac: 68db ldr r3, [r3, #12] 80035ae: 607b str r3, [r7, #4] g_cmdLine.cancel = 0; 80035b0: 4b04 ldr r3, [pc, #16] ; (80035c4 ) 80035b2: 2200 movs r2, #0 80035b4: 60da str r2, [r3, #12] return rslt; 80035b6: 687b ldr r3, [r7, #4] } 80035b8: 4618 mov r0, r3 80035ba: 370c adds r7, #12 80035bc: 46bd mov sp, r7 80035be: bc80 pop {r7} 80035c0: 4770 bx lr 80035c2: bf00 nop 80035c4: 20000c08 .word 0x20000c08 080035c8 : //---------------------------------- static int g_cricount = 0; void EnterCritical(void) { 80035c8: b480 push {r7} 80035ca: af00 add r7, sp, #0 if (g_cricount == 0) 80035cc: 4b06 ldr r3, [pc, #24] ; (80035e8 ) 80035ce: 681b ldr r3, [r3, #0] 80035d0: 2b00 cmp r3, #0 80035d2: d100 bne.n 80035d6 __ASM volatile ("cpsid i" : : : "memory"); 80035d4: b672 cpsid i { __disable_irq(); } g_cricount++; 80035d6: 4b04 ldr r3, [pc, #16] ; (80035e8 ) 80035d8: 681b ldr r3, [r3, #0] 80035da: 3301 adds r3, #1 80035dc: 4a02 ldr r2, [pc, #8] ; (80035e8 ) 80035de: 6013 str r3, [r2, #0] } 80035e0: bf00 nop 80035e2: 46bd mov sp, r7 80035e4: bc80 pop {r7} 80035e6: 4770 bx lr 80035e8: 2000055c .word 0x2000055c 080035ec : void ExitCritical(void) { 80035ec: b480 push {r7} 80035ee: af00 add r7, sp, #0 if (g_cricount != 0) 80035f0: 4b08 ldr r3, [pc, #32] ; (8003614 ) 80035f2: 681b ldr r3, [r3, #0] 80035f4: 2b00 cmp r3, #0 80035f6: d004 beq.n 8003602 { g_cricount--; 80035f8: 4b06 ldr r3, [pc, #24] ; (8003614 ) 80035fa: 681b ldr r3, [r3, #0] 80035fc: 3b01 subs r3, #1 80035fe: 4a05 ldr r2, [pc, #20] ; (8003614 ) 8003600: 6013 str r3, [r2, #0] } if (g_cricount == 0) 8003602: 4b04 ldr r3, [pc, #16] ; (8003614 ) 8003604: 681b ldr r3, [r3, #0] 8003606: 2b00 cmp r3, #0 8003608: d100 bne.n 800360c __ASM volatile ("cpsie i" : : : "memory"); 800360a: b662 cpsie i { __enable_irq(); } } 800360c: bf00 nop 800360e: 46bd mov sp, r7 8003610: bc80 pop {r7} 8003612: 4770 bx lr 8003614: 2000055c .word 0x2000055c 08003618 : }while(1); } void DelayUs(u32 us) { 8003618: b580 push {r7, lr} 800361a: b084 sub sp, #16 800361c: af00 add r7, sp, #0 800361e: 6078 str r0, [r7, #4] u32 bus, tmpus; bus = GetUsSoftTimer(); 8003620: f001 f8ec bl 80047fc 8003624: 60f8 str r0, [r7, #12] do { tmpus = GetUsSoftTimer(); 8003626: f001 f8e9 bl 80047fc 800362a: 60b8 str r0, [r7, #8] if (tmpus - bus > us) 800362c: 68ba ldr r2, [r7, #8] 800362e: 68fb ldr r3, [r7, #12] 8003630: 1ad3 subs r3, r2, r3 8003632: 687a ldr r2, [r7, #4] 8003634: 429a cmp r2, r3 8003636: d300 bcc.n 800363a tmpus = GetUsSoftTimer(); 8003638: e7f5 b.n 8003626 { break; 800363a: bf00 nop } }while(1); } 800363c: bf00 nop 800363e: 3710 adds r7, #16 8003640: 46bd mov sp, r7 8003642: bd80 pop {r7, pc} 08003644 : void DelayMs(u32 ms) { 8003644: b580 push {r7, lr} 8003646: b086 sub sp, #24 8003648: af00 add r7, sp, #0 800364a: 6078 str r0, [r7, #4] u32 bus, msus, tmpus; bus = GetUsSoftTimer(); 800364c: f001 f8d6 bl 80047fc 8003650: 6178 str r0, [r7, #20] msus = ms * 1000; 8003652: 687b ldr r3, [r7, #4] 8003654: f44f 727a mov.w r2, #1000 ; 0x3e8 8003658: fb02 f303 mul.w r3, r2, r3 800365c: 613b str r3, [r7, #16] do { tmpus = GetUsSoftTimer(); 800365e: f001 f8cd bl 80047fc 8003662: 60f8 str r0, [r7, #12] if (tmpus - bus > msus) 8003664: 68fa ldr r2, [r7, #12] 8003666: 697b ldr r3, [r7, #20] 8003668: 1ad3 subs r3, r2, r3 800366a: 693a ldr r2, [r7, #16] 800366c: 429a cmp r2, r3 800366e: d300 bcc.n 8003672 tmpus = GetUsSoftTimer(); 8003670: e7f5 b.n 800365e { break; 8003672: bf00 nop } }while(1); } 8003674: bf00 nop 8003676: 3718 adds r7, #24 8003678: 46bd mov sp, r7 800367a: bd80 pop {r7, pc} 0800367c : #endif //------------------------------------------------------------------------------- void InitIWDog(u16 ms) { 800367c: b480 push {r7} 800367e: b083 sub sp, #12 8003680: af00 add r7, sp, #0 8003682: 4603 mov r3, r0 8003684: 80fb strh r3, [r7, #6] if (ms < MAX_IWD_MS) 8003686: 88fb ldrh r3, [r7, #6] 8003688: f641 1298 movw r2, #6552 ; 0x1998 800368c: 4293 cmp r3, r2 800368e: d806 bhi.n 800369e { ms *= 10; 8003690: 88fb ldrh r3, [r7, #6] 8003692: 461a mov r2, r3 8003694: 0092 lsls r2, r2, #2 8003696: 4413 add r3, r2 8003698: 005b lsls r3, r3, #1 800369a: 80fb strh r3, [r7, #6] LL_IWDG_Enable(IWDG); // Æô¶¯¿´ÃŹ· #endif #endif } 800369c: e002 b.n 80036a4 ms = 65535; 800369e: f64f 73ff movw r3, #65535 ; 0xffff 80036a2: 80fb strh r3, [r7, #6] } 80036a4: bf00 nop 80036a6: 370c adds r7, #12 80036a8: 46bd mov sp, r7 80036aa: bc80 pop {r7} 80036ac: 4770 bx lr 080036ae : void FeedIWDog(void) { 80036ae: b480 push {r7} 80036b0: af00 add r7, sp, #0 #ifdef USE_FULL_LL_DRIVER LL_IWDG_ReloadCounter(IWDG); #endif #endif } 80036b2: bf00 nop 80036b4: 46bd mov sp, r7 80036b6: bc80 pop {r7} 80036b8: 4770 bx lr 080036ba : { 80036ba: b480 push {r7} 80036bc: b083 sub sp, #12 80036be: af00 add r7, sp, #0 80036c0: 6078 str r0, [r7, #4] SET_BIT(USARTx->CR1, USART_CR1_UE); 80036c2: 687b ldr r3, [r7, #4] 80036c4: 68db ldr r3, [r3, #12] 80036c6: f443 5200 orr.w r2, r3, #8192 ; 0x2000 80036ca: 687b ldr r3, [r7, #4] 80036cc: 60da str r2, [r3, #12] } 80036ce: bf00 nop 80036d0: 370c adds r7, #12 80036d2: 46bd mov sp, r7 80036d4: bc80 pop {r7} 80036d6: 4770 bx lr 080036d8 : * @rmtoll SR RXNE LL_USART_IsActiveFlag_RXNE * @param USARTx USART Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RXNE(USART_TypeDef *USARTx) { 80036d8: b480 push {r7} 80036da: b083 sub sp, #12 80036dc: af00 add r7, sp, #0 80036de: 6078 str r0, [r7, #4] return (READ_BIT(USARTx->SR, USART_SR_RXNE) == (USART_SR_RXNE)); 80036e0: 687b ldr r3, [r7, #4] 80036e2: 681b ldr r3, [r3, #0] 80036e4: f003 0320 and.w r3, r3, #32 80036e8: 2b20 cmp r3, #32 80036ea: bf0c ite eq 80036ec: 2301 moveq r3, #1 80036ee: 2300 movne r3, #0 80036f0: b2db uxtb r3, r3 } 80036f2: 4618 mov r0, r3 80036f4: 370c adds r7, #12 80036f6: 46bd mov sp, r7 80036f8: bc80 pop {r7} 80036fa: 4770 bx lr 080036fc : * @rmtoll SR TC LL_USART_IsActiveFlag_TC * @param USARTx USART Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TC(USART_TypeDef *USARTx) { 80036fc: b480 push {r7} 80036fe: b083 sub sp, #12 8003700: af00 add r7, sp, #0 8003702: 6078 str r0, [r7, #4] return (READ_BIT(USARTx->SR, USART_SR_TC) == (USART_SR_TC)); 8003704: 687b ldr r3, [r7, #4] 8003706: 681b ldr r3, [r3, #0] 8003708: f003 0340 and.w r3, r3, #64 ; 0x40 800370c: 2b40 cmp r3, #64 ; 0x40 800370e: bf0c ite eq 8003710: 2301 moveq r3, #1 8003712: 2300 movne r3, #0 8003714: b2db uxtb r3, r3 } 8003716: 4618 mov r0, r3 8003718: 370c adds r7, #12 800371a: 46bd mov sp, r7 800371c: bc80 pop {r7} 800371e: 4770 bx lr 08003720 : * @rmtoll SR TXE LL_USART_IsActiveFlag_TXE * @param USARTx USART Instance * @retval State of bit (1 or 0). */ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TXE(USART_TypeDef *USARTx) { 8003720: b480 push {r7} 8003722: b083 sub sp, #12 8003724: af00 add r7, sp, #0 8003726: 6078 str r0, [r7, #4] return (READ_BIT(USARTx->SR, USART_SR_TXE) == (USART_SR_TXE)); 8003728: 687b ldr r3, [r7, #4] 800372a: 681b ldr r3, [r3, #0] 800372c: f003 0380 and.w r3, r3, #128 ; 0x80 8003730: 2b80 cmp r3, #128 ; 0x80 8003732: bf0c ite eq 8003734: 2301 moveq r3, #1 8003736: 2300 movne r3, #0 8003738: b2db uxtb r3, r3 } 800373a: 4618 mov r0, r3 800373c: 370c adds r7, #12 800373e: 46bd mov sp, r7 8003740: bc80 pop {r7} 8003742: 4770 bx lr 08003744 : * @rmtoll CR1 RXNEIE LL_USART_EnableIT_RXNE * @param USARTx USART Instance * @retval None */ __STATIC_INLINE void LL_USART_EnableIT_RXNE(USART_TypeDef *USARTx) { 8003744: b480 push {r7} 8003746: b083 sub sp, #12 8003748: af00 add r7, sp, #0 800374a: 6078 str r0, [r7, #4] SET_BIT(USARTx->CR1, USART_CR1_RXNEIE); 800374c: 687b ldr r3, [r7, #4] 800374e: 68db ldr r3, [r3, #12] 8003750: f043 0220 orr.w r2, r3, #32 8003754: 687b ldr r3, [r7, #4] 8003756: 60da str r2, [r3, #12] } 8003758: bf00 nop 800375a: 370c adds r7, #12 800375c: 46bd mov sp, r7 800375e: bc80 pop {r7} 8003760: 4770 bx lr 08003762 : * @rmtoll CR1 TXEIE LL_USART_EnableIT_TXE * @param USARTx USART Instance * @retval None */ __STATIC_INLINE void LL_USART_EnableIT_TXE(USART_TypeDef *USARTx) { 8003762: b480 push {r7} 8003764: b083 sub sp, #12 8003766: af00 add r7, sp, #0 8003768: 6078 str r0, [r7, #4] SET_BIT(USARTx->CR1, USART_CR1_TXEIE); 800376a: 687b ldr r3, [r7, #4] 800376c: 68db ldr r3, [r3, #12] 800376e: f043 0280 orr.w r2, r3, #128 ; 0x80 8003772: 687b ldr r3, [r7, #4] 8003774: 60da str r2, [r3, #12] } 8003776: bf00 nop 8003778: 370c adds r7, #12 800377a: 46bd mov sp, r7 800377c: bc80 pop {r7} 800377e: 4770 bx lr 08003780 : * @rmtoll CR1 RXNEIE LL_USART_DisableIT_RXNE * @param USARTx USART Instance * @retval None */ __STATIC_INLINE void LL_USART_DisableIT_RXNE(USART_TypeDef *USARTx) { 8003780: b480 push {r7} 8003782: b083 sub sp, #12 8003784: af00 add r7, sp, #0 8003786: 6078 str r0, [r7, #4] CLEAR_BIT(USARTx->CR1, USART_CR1_RXNEIE); 8003788: 687b ldr r3, [r7, #4] 800378a: 68db ldr r3, [r3, #12] 800378c: f023 0220 bic.w r2, r3, #32 8003790: 687b ldr r3, [r7, #4] 8003792: 60da str r2, [r3, #12] } 8003794: bf00 nop 8003796: 370c adds r7, #12 8003798: 46bd mov sp, r7 800379a: bc80 pop {r7} 800379c: 4770 bx lr 0800379e : * @rmtoll CR1 TXEIE LL_USART_DisableIT_TXE * @param USARTx USART Instance * @retval None */ __STATIC_INLINE void LL_USART_DisableIT_TXE(USART_TypeDef *USARTx) { 800379e: b480 push {r7} 80037a0: b083 sub sp, #12 80037a2: af00 add r7, sp, #0 80037a4: 6078 str r0, [r7, #4] CLEAR_BIT(USARTx->CR1, USART_CR1_TXEIE); 80037a6: 687b ldr r3, [r7, #4] 80037a8: 68db ldr r3, [r3, #12] 80037aa: f023 0280 bic.w r2, r3, #128 ; 0x80 80037ae: 687b ldr r3, [r7, #4] 80037b0: 60da str r2, [r3, #12] } 80037b2: bf00 nop 80037b4: 370c adds r7, #12 80037b6: 46bd mov sp, r7 80037b8: bc80 pop {r7} 80037ba: 4770 bx lr 080037bc : * @rmtoll DR DR LL_USART_ReceiveData8 * @param USARTx USART Instance * @retval Value between Min_Data=0x00 and Max_Data=0xFF */ __STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx) { 80037bc: b480 push {r7} 80037be: b083 sub sp, #12 80037c0: af00 add r7, sp, #0 80037c2: 6078 str r0, [r7, #4] return (uint8_t)(READ_BIT(USARTx->DR, USART_DR_DR)); 80037c4: 687b ldr r3, [r7, #4] 80037c6: 685b ldr r3, [r3, #4] 80037c8: b2db uxtb r3, r3 } 80037ca: 4618 mov r0, r3 80037cc: 370c adds r7, #12 80037ce: 46bd mov sp, r7 80037d0: bc80 pop {r7} 80037d2: 4770 bx lr 080037d4 : * @param USARTx USART Instance * @param Value between Min_Data=0x00 and Max_Data=0xFF * @retval None */ __STATIC_INLINE void LL_USART_TransmitData8(USART_TypeDef *USARTx, uint8_t Value) { 80037d4: b480 push {r7} 80037d6: b083 sub sp, #12 80037d8: af00 add r7, sp, #0 80037da: 6078 str r0, [r7, #4] 80037dc: 460b mov r3, r1 80037de: 70fb strb r3, [r7, #3] USARTx->DR = Value; 80037e0: 78fa ldrb r2, [r7, #3] 80037e2: 687b ldr r3, [r7, #4] 80037e4: 605a str r2, [r3, #4] } 80037e6: bf00 nop 80037e8: 370c adds r7, #12 80037ea: 46bd mov sp, r7 80037ec: bc80 pop {r7} 80037ee: 4770 bx lr 080037f0 : return count; \ }\ /*------------------------------------------------------------------------------------------*/ #ifdef COMM_USART1 USART_PROC(1); 80037f0: b580 push {r7, lr} 80037f2: b082 sub sp, #8 80037f4: af00 add r7, sp, #0 80037f6: 6078 str r0, [r7, #4] 80037f8: 4608 mov r0, r1 80037fa: 4611 mov r1, r2 80037fc: 461a mov r2, r3 80037fe: 4603 mov r3, r0 8003800: 70fb strb r3, [r7, #3] 8003802: 460b mov r3, r1 8003804: 70bb strb r3, [r7, #2] 8003806: 4613 mov r3, r2 8003808: 707b strb r3, [r7, #1] 800380a: 2238 movs r2, #56 ; 0x38 800380c: 2100 movs r1, #0 800380e: 4823 ldr r0, [pc, #140] ; (800389c ) 8003810: f006 f873 bl 80098fa 8003814: 4b21 ldr r3, [pc, #132] ; (800389c ) 8003816: 4a22 ldr r2, [pc, #136] ; (80038a0 ) 8003818: 611a str r2, [r3, #16] 800381a: 4b20 ldr r3, [pc, #128] ; (800389c ) 800381c: 2280 movs r2, #128 ; 0x80 800381e: 60da str r2, [r3, #12] 8003820: 4b1e ldr r3, [pc, #120] ; (800389c ) 8003822: 4a20 ldr r2, [pc, #128] ; (80038a4 ) 8003824: 625a str r2, [r3, #36] ; 0x24 8003826: 4b1d ldr r3, [pc, #116] ; (800389c ) 8003828: 2280 movs r2, #128 ; 0x80 800382a: 621a str r2, [r3, #32] 800382c: 4b1b ldr r3, [pc, #108] ; (800389c ) 800382e: 4a1e ldr r2, [pc, #120] ; (80038a8 ) 8003830: 605a str r2, [r3, #4] 8003832: 4a1a ldr r2, [pc, #104] ; (800389c ) 8003834: 687b ldr r3, [r7, #4] 8003836: 6093 str r3, [r2, #8] 8003838: 4b18 ldr r3, [pc, #96] ; (800389c ) 800383a: 691b ldr r3, [r3, #16] 800383c: 4a17 ldr r2, [pc, #92] ; (800389c ) 800383e: 6153 str r3, [r2, #20] 8003840: 4b16 ldr r3, [pc, #88] ; (800389c ) 8003842: 695b ldr r3, [r3, #20] 8003844: 4a15 ldr r2, [pc, #84] ; (800389c ) 8003846: 6193 str r3, [r2, #24] 8003848: 4b14 ldr r3, [pc, #80] ; (800389c ) 800384a: 2200 movs r2, #0 800384c: 839a strh r2, [r3, #28] 800384e: 4b13 ldr r3, [pc, #76] ; (800389c ) 8003850: 2200 movs r2, #0 8003852: 83da strh r2, [r3, #30] 8003854: 4b11 ldr r3, [pc, #68] ; (800389c ) 8003856: 6a5b ldr r3, [r3, #36] ; 0x24 8003858: 4a10 ldr r2, [pc, #64] ; (800389c ) 800385a: 6293 str r3, [r2, #40] ; 0x28 800385c: 4b0f ldr r3, [pc, #60] ; (800389c ) 800385e: 6a9b ldr r3, [r3, #40] ; 0x28 8003860: 4a0e ldr r2, [pc, #56] ; (800389c ) 8003862: 62d3 str r3, [r2, #44] ; 0x2c 8003864: 4b0d ldr r3, [pc, #52] ; (800389c ) 8003866: 2200 movs r2, #0 8003868: 861a strh r2, [r3, #48] ; 0x30 800386a: 4b0c ldr r3, [pc, #48] ; (800389c ) 800386c: 2201 movs r2, #1 800386e: 865a strh r2, [r3, #50] ; 0x32 8003870: 4b0a ldr r3, [pc, #40] ; (800389c ) 8003872: f245 52aa movw r2, #21930 ; 0x55aa 8003876: 801a strh r2, [r3, #0] 8003878: 4b08 ldr r3, [pc, #32] ; (800389c ) 800387a: 2200 movs r2, #0 800387c: 635a str r2, [r3, #52] ; 0x34 800387e: 480a ldr r0, [pc, #40] ; (80038a8 ) 8003880: f7ff ff9c bl 80037bc 8003884: 4808 ldr r0, [pc, #32] ; (80038a8 ) 8003886: f7ff ff5d bl 8003744 800388a: 4807 ldr r0, [pc, #28] ; (80038a8 ) 800388c: f7ff ff15 bl 80036ba 8003890: 2300 movs r3, #0 8003892: 4618 mov r0, r3 8003894: 3708 adds r7, #8 8003896: 46bd mov sp, r7 8003898: bd80 pop {r7, pc} 800389a: bf00 nop 800389c: 20000f44 .word 0x20000f44 80038a0: 20000d44 .word 0x20000d44 80038a4: 20000ec4 .word 0x20000ec4 80038a8: 40013800 .word 0x40013800 080038ac : 80038ac: b580 push {r7, lr} 80038ae: b084 sub sp, #16 80038b0: af00 add r7, sp, #0 80038b2: 6078 str r0, [r7, #4] 80038b4: 6039 str r1, [r7, #0] 80038b6: 687b ldr r3, [r7, #4] 80038b8: 2b00 cmp r3, #0 80038ba: d002 beq.n 80038c2 80038bc: 683b ldr r3, [r7, #0] 80038be: 2b00 cmp r3, #0 80038c0: da02 bge.n 80038c8 80038c2: f04f 33ff mov.w r3, #4294967295 80038c6: e061 b.n 800398c 80038c8: 4b32 ldr r3, [pc, #200] ; (8003994 ) 80038ca: 881b ldrh r3, [r3, #0] 80038cc: f245 52aa movw r2, #21930 ; 0x55aa 80038d0: 4293 cmp r3, r2 80038d2: d002 beq.n 80038da 80038d4: f06f 0301 mvn.w r3, #1 80038d8: e058 b.n 800398c 80038da: f7ff fe75 bl 80035c8 80038de: 4b2d ldr r3, [pc, #180] ; (8003994 ) 80038e0: 8b9b ldrh r3, [r3, #28] 80038e2: 461a mov r2, r3 80038e4: 683b ldr r3, [r7, #0] 80038e6: 441a add r2, r3 80038e8: 4b2a ldr r3, [pc, #168] ; (8003994 ) 80038ea: 68db ldr r3, [r3, #12] 80038ec: 429a cmp r2, r3 80038ee: dd01 ble.n 80038f4 80038f0: 2300 movs r3, #0 80038f2: 603b str r3, [r7, #0] 80038f4: 4b27 ldr r3, [pc, #156] ; (8003994 ) 80038f6: 699b ldr r3, [r3, #24] 80038f8: 60bb str r3, [r7, #8] 80038fa: f7ff fe77 bl 80035ec 80038fe: 683b ldr r3, [r7, #0] 8003900: 2b00 cmp r3, #0 8003902: da02 bge.n 800390a 8003904: f06f 0302 mvn.w r3, #2 8003908: e040 b.n 800398c 800390a: 2300 movs r3, #0 800390c: 60fb str r3, [r7, #12] 800390e: e016 b.n 800393e 8003910: 687a ldr r2, [r7, #4] 8003912: 1c53 adds r3, r2, #1 8003914: 607b str r3, [r7, #4] 8003916: 68bb ldr r3, [r7, #8] 8003918: 1c59 adds r1, r3, #1 800391a: 60b9 str r1, [r7, #8] 800391c: 7812 ldrb r2, [r2, #0] 800391e: 701a strb r2, [r3, #0] 8003920: 4b1c ldr r3, [pc, #112] ; (8003994 ) 8003922: 691a ldr r2, [r3, #16] 8003924: 4b1b ldr r3, [pc, #108] ; (8003994 ) 8003926: 68db ldr r3, [r3, #12] 8003928: 3b01 subs r3, #1 800392a: 4413 add r3, r2 800392c: 68ba ldr r2, [r7, #8] 800392e: 429a cmp r2, r3 8003930: d902 bls.n 8003938 8003932: 4b18 ldr r3, [pc, #96] ; (8003994 ) 8003934: 691b ldr r3, [r3, #16] 8003936: 60bb str r3, [r7, #8] 8003938: 68fb ldr r3, [r7, #12] 800393a: 3301 adds r3, #1 800393c: 60fb str r3, [r7, #12] 800393e: 68fa ldr r2, [r7, #12] 8003940: 683b ldr r3, [r7, #0] 8003942: 429a cmp r2, r3 8003944: dbe4 blt.n 8003910 8003946: 683b ldr r3, [r7, #0] 8003948: 2b00 cmp r3, #0 800394a: d01e beq.n 800398a 800394c: f7ff fe3c bl 80035c8 8003950: 4a10 ldr r2, [pc, #64] ; (8003994 ) 8003952: 68bb ldr r3, [r7, #8] 8003954: 6193 str r3, [r2, #24] 8003956: 4b0f ldr r3, [pc, #60] ; (8003994 ) 8003958: 8b9a ldrh r2, [r3, #28] 800395a: 683b ldr r3, [r7, #0] 800395c: b29b uxth r3, r3 800395e: 4413 add r3, r2 8003960: b29a uxth r2, r3 8003962: 4b0c ldr r3, [pc, #48] ; (8003994 ) 8003964: 839a strh r2, [r3, #28] 8003966: 4b0b ldr r3, [pc, #44] ; (8003994 ) 8003968: 8bdb ldrh r3, [r3, #30] 800396a: 2b01 cmp r3, #1 800396c: d00b beq.n 8003986 800396e: 4b09 ldr r3, [pc, #36] ; (8003994 ) 8003970: 8b9b ldrh r3, [r3, #28] 8003972: 2b00 cmp r3, #0 8003974: d007 beq.n 8003986 8003976: 4b07 ldr r3, [pc, #28] ; (8003994 ) 8003978: 2201 movs r2, #1 800397a: 83da strh r2, [r3, #30] 800397c: 4b05 ldr r3, [pc, #20] ; (8003994 ) 800397e: 685b ldr r3, [r3, #4] 8003980: 4618 mov r0, r3 8003982: f7ff feee bl 8003762 8003986: f7ff fe31 bl 80035ec 800398a: 683b ldr r3, [r7, #0] 800398c: 4618 mov r0, r3 800398e: 3710 adds r7, #16 8003990: 46bd mov sp, r7 8003992: bd80 pop {r7, pc} 8003994: 20000f44 .word 0x20000f44 08003998 : 8003998: b580 push {r7, lr} 800399a: b086 sub sp, #24 800399c: af00 add r7, sp, #0 800399e: 6078 str r0, [r7, #4] 80039a0: 6039 str r1, [r7, #0] 80039a2: 687b ldr r3, [r7, #4] 80039a4: 2b00 cmp r3, #0 80039a6: d002 beq.n 80039ae 80039a8: 683b ldr r3, [r7, #0] 80039aa: 2b00 cmp r3, #0 80039ac: da02 bge.n 80039b4 80039ae: f04f 33ff mov.w r3, #4294967295 80039b2: e04d b.n 8003a50 80039b4: 4b28 ldr r3, [pc, #160] ; (8003a58 ) 80039b6: 881b ldrh r3, [r3, #0] 80039b8: f245 52aa movw r2, #21930 ; 0x55aa 80039bc: 4293 cmp r3, r2 80039be: d002 beq.n 80039c6 80039c0: f06f 0301 mvn.w r3, #1 80039c4: e044 b.n 8003a50 80039c6: f7ff fdff bl 80035c8 80039ca: 4b23 ldr r3, [pc, #140] ; (8003a58 ) 80039cc: 6a9b ldr r3, [r3, #40] ; 0x28 80039ce: 613b str r3, [r7, #16] 80039d0: 4b21 ldr r3, [pc, #132] ; (8003a58 ) 80039d2: 8e1b ldrh r3, [r3, #48] ; 0x30 80039d4: 60fb str r3, [r7, #12] 80039d6: f7ff fe09 bl 80035ec 80039da: 68fb ldr r3, [r7, #12] 80039dc: 2b00 cmp r3, #0 80039de: da02 bge.n 80039e6 80039e0: f06f 0302 mvn.w r3, #2 80039e4: e034 b.n 8003a50 80039e6: 683a ldr r2, [r7, #0] 80039e8: 68fb ldr r3, [r7, #12] 80039ea: 429a cmp r2, r3 80039ec: dd01 ble.n 80039f2 80039ee: 2300 movs r3, #0 80039f0: e02e b.n 8003a50 80039f2: 2300 movs r3, #0 80039f4: 617b str r3, [r7, #20] 80039f6: e017 b.n 8003a28 80039f8: 687b ldr r3, [r7, #4] 80039fa: 1c5a adds r2, r3, #1 80039fc: 607a str r2, [r7, #4] 80039fe: 693a ldr r2, [r7, #16] 8003a00: 7812 ldrb r2, [r2, #0] 8003a02: 701a strb r2, [r3, #0] 8003a04: 693b ldr r3, [r7, #16] 8003a06: 3301 adds r3, #1 8003a08: 613b str r3, [r7, #16] 8003a0a: 4b13 ldr r3, [pc, #76] ; (8003a58 ) 8003a0c: 6a5a ldr r2, [r3, #36] ; 0x24 8003a0e: 4b12 ldr r3, [pc, #72] ; (8003a58 ) 8003a10: 6a1b ldr r3, [r3, #32] 8003a12: 3b01 subs r3, #1 8003a14: 4413 add r3, r2 8003a16: 693a ldr r2, [r7, #16] 8003a18: 429a cmp r2, r3 8003a1a: d902 bls.n 8003a22 8003a1c: 4b0e ldr r3, [pc, #56] ; (8003a58 ) 8003a1e: 6a5b ldr r3, [r3, #36] ; 0x24 8003a20: 613b str r3, [r7, #16] 8003a22: 697b ldr r3, [r7, #20] 8003a24: 3301 adds r3, #1 8003a26: 617b str r3, [r7, #20] 8003a28: 697a ldr r2, [r7, #20] 8003a2a: 683b ldr r3, [r7, #0] 8003a2c: 429a cmp r2, r3 8003a2e: dbe3 blt.n 80039f8 8003a30: f7ff fdca bl 80035c8 8003a34: 4a08 ldr r2, [pc, #32] ; (8003a58 ) 8003a36: 693b ldr r3, [r7, #16] 8003a38: 6293 str r3, [r2, #40] ; 0x28 8003a3a: 4b07 ldr r3, [pc, #28] ; (8003a58 ) 8003a3c: 8e1a ldrh r2, [r3, #48] ; 0x30 8003a3e: 683b ldr r3, [r7, #0] 8003a40: b29b uxth r3, r3 8003a42: 1ad3 subs r3, r2, r3 8003a44: b29a uxth r2, r3 8003a46: 4b04 ldr r3, [pc, #16] ; (8003a58 ) 8003a48: 861a strh r2, [r3, #48] ; 0x30 8003a4a: f7ff fdcf bl 80035ec 8003a4e: 683b ldr r3, [r7, #0] 8003a50: 4618 mov r0, r3 8003a52: 3718 adds r7, #24 8003a54: 46bd mov sp, r7 8003a56: bd80 pop {r7, pc} 8003a58: 20000f44 .word 0x20000f44 08003a5c : 8003a5c: b580 push {r7, lr} 8003a5e: b082 sub sp, #8 8003a60: af00 add r7, sp, #0 8003a62: f7ff fdb1 bl 80035c8 8003a66: 4b08 ldr r3, [pc, #32] ; (8003a88 ) 8003a68: 6adb ldr r3, [r3, #44] ; 0x2c 8003a6a: 4a07 ldr r2, [pc, #28] ; (8003a88 ) 8003a6c: 6293 str r3, [r2, #40] ; 0x28 8003a6e: 4b06 ldr r3, [pc, #24] ; (8003a88 ) 8003a70: 8e1b ldrh r3, [r3, #48] ; 0x30 8003a72: 607b str r3, [r7, #4] 8003a74: 4b04 ldr r3, [pc, #16] ; (8003a88 ) 8003a76: 2200 movs r2, #0 8003a78: 861a strh r2, [r3, #48] ; 0x30 8003a7a: f7ff fdb7 bl 80035ec 8003a7e: 687b ldr r3, [r7, #4] 8003a80: 4618 mov r0, r3 8003a82: 3708 adds r7, #8 8003a84: 46bd mov sp, r7 8003a86: bd80 pop {r7, pc} 8003a88: 20000f44 .word 0x20000f44 08003a8c : 8003a8c: b580 push {r7, lr} 8003a8e: b082 sub sp, #8 8003a90: af00 add r7, sp, #0 8003a92: f7ff fd99 bl 80035c8 8003a96: 4b07 ldr r3, [pc, #28] ; (8003ab4 ) 8003a98: 8bdb ldrh r3, [r3, #30] 8003a9a: 607b str r3, [r7, #4] 8003a9c: f7ff fda6 bl 80035ec 8003aa0: 687b ldr r3, [r7, #4] 8003aa2: 2b01 cmp r3, #1 8003aa4: d101 bne.n 8003aaa 8003aa6: 2300 movs r3, #0 8003aa8: e000 b.n 8003aac 8003aaa: 2301 movs r3, #1 8003aac: 4618 mov r0, r3 8003aae: 3708 adds r7, #8 8003ab0: 46bd mov sp, r7 8003ab2: bd80 pop {r7, pc} 8003ab4: 20000f44 .word 0x20000f44 08003ab8 : 8003ab8: b580 push {r7, lr} 8003aba: b082 sub sp, #8 8003abc: af00 add r7, sp, #0 8003abe: 4b46 ldr r3, [pc, #280] ; (8003bd8 ) 8003ac0: 685b ldr r3, [r3, #4] 8003ac2: 4618 mov r0, r3 8003ac4: f7ff fe08 bl 80036d8 8003ac8: 4603 mov r3, r0 8003aca: 2b00 cmp r3, #0 8003acc: d039 beq.n 8003b42 8003ace: 4b42 ldr r3, [pc, #264] ; (8003bd8 ) 8003ad0: 685b ldr r3, [r3, #4] 8003ad2: 4618 mov r0, r3 8003ad4: f7ff fe72 bl 80037bc 8003ad8: 4603 mov r3, r0 8003ada: 71fb strb r3, [r7, #7] 8003adc: 4b3e ldr r3, [pc, #248] ; (8003bd8 ) 8003ade: 881b ldrh r3, [r3, #0] 8003ae0: f245 52aa movw r2, #21930 ; 0x55aa 8003ae4: 4293 cmp r3, r2 8003ae6: d173 bne.n 8003bd0 8003ae8: 4b3b ldr r3, [pc, #236] ; (8003bd8 ) 8003aea: 8e1b ldrh r3, [r3, #48] ; 0x30 8003aec: 461a mov r2, r3 8003aee: 4b3a ldr r3, [pc, #232] ; (8003bd8 ) 8003af0: 6a1b ldr r3, [r3, #32] 8003af2: 429a cmp r2, r3 8003af4: da1c bge.n 8003b30 8003af6: 4b38 ldr r3, [pc, #224] ; (8003bd8 ) 8003af8: 6adb ldr r3, [r3, #44] ; 0x2c 8003afa: 79fa ldrb r2, [r7, #7] 8003afc: 701a strb r2, [r3, #0] 8003afe: 4b36 ldr r3, [pc, #216] ; (8003bd8 ) 8003b00: 6adb ldr r3, [r3, #44] ; 0x2c 8003b02: 3301 adds r3, #1 8003b04: 4a34 ldr r2, [pc, #208] ; (8003bd8 ) 8003b06: 62d3 str r3, [r2, #44] ; 0x2c 8003b08: 4b33 ldr r3, [pc, #204] ; (8003bd8 ) 8003b0a: 6ada ldr r2, [r3, #44] ; 0x2c 8003b0c: 4b32 ldr r3, [pc, #200] ; (8003bd8 ) 8003b0e: 6a59 ldr r1, [r3, #36] ; 0x24 8003b10: 4b31 ldr r3, [pc, #196] ; (8003bd8 ) 8003b12: 6a1b ldr r3, [r3, #32] 8003b14: 3b01 subs r3, #1 8003b16: 440b add r3, r1 8003b18: 429a cmp r2, r3 8003b1a: d903 bls.n 8003b24 8003b1c: 4b2e ldr r3, [pc, #184] ; (8003bd8 ) 8003b1e: 6a5b ldr r3, [r3, #36] ; 0x24 8003b20: 4a2d ldr r2, [pc, #180] ; (8003bd8 ) 8003b22: 62d3 str r3, [r2, #44] ; 0x2c 8003b24: 4b2c ldr r3, [pc, #176] ; (8003bd8 ) 8003b26: 8e1b ldrh r3, [r3, #48] ; 0x30 8003b28: 3301 adds r3, #1 8003b2a: b29a uxth r2, r3 8003b2c: 4b2a ldr r3, [pc, #168] ; (8003bd8 ) 8003b2e: 861a strh r2, [r3, #48] ; 0x30 8003b30: 4b29 ldr r3, [pc, #164] ; (8003bd8 ) 8003b32: 6b5b ldr r3, [r3, #52] ; 0x34 8003b34: 2b00 cmp r3, #0 8003b36: d004 beq.n 8003b42 8003b38: 4b27 ldr r3, [pc, #156] ; (8003bd8 ) 8003b3a: 6b5b ldr r3, [r3, #52] ; 0x34 8003b3c: 79fa ldrb r2, [r7, #7] 8003b3e: 4610 mov r0, r2 8003b40: 4798 blx r3 8003b42: 4b25 ldr r3, [pc, #148] ; (8003bd8 ) 8003b44: 685b ldr r3, [r3, #4] 8003b46: 4618 mov r0, r3 8003b48: f7ff fdea bl 8003720 8003b4c: 4603 mov r3, r0 8003b4e: 2b00 cmp r3, #0 8003b50: d03f beq.n 8003bd2 8003b52: 4b21 ldr r3, [pc, #132] ; (8003bd8 ) 8003b54: 881b ldrh r3, [r3, #0] 8003b56: f245 52aa movw r2, #21930 ; 0x55aa 8003b5a: 4293 cmp r3, r2 8003b5c: d005 beq.n 8003b6a 8003b5e: 4b1e ldr r3, [pc, #120] ; (8003bd8 ) 8003b60: 685b ldr r3, [r3, #4] 8003b62: 4618 mov r0, r3 8003b64: f7ff fe1b bl 800379e 8003b68: e033 b.n 8003bd2 8003b6a: 4b1b ldr r3, [pc, #108] ; (8003bd8 ) 8003b6c: 8b9b ldrh r3, [r3, #28] 8003b6e: 2b00 cmp r3, #0 8003b70: d025 beq.n 8003bbe 8003b72: 4b19 ldr r3, [pc, #100] ; (8003bd8 ) 8003b74: 685a ldr r2, [r3, #4] 8003b76: 4b18 ldr r3, [pc, #96] ; (8003bd8 ) 8003b78: 695b ldr r3, [r3, #20] 8003b7a: 781b ldrb r3, [r3, #0] 8003b7c: 4619 mov r1, r3 8003b7e: 4610 mov r0, r2 8003b80: f7ff fe28 bl 80037d4 8003b84: 4b14 ldr r3, [pc, #80] ; (8003bd8 ) 8003b86: 695b ldr r3, [r3, #20] 8003b88: 3301 adds r3, #1 8003b8a: 4a13 ldr r2, [pc, #76] ; (8003bd8 ) 8003b8c: 6153 str r3, [r2, #20] 8003b8e: 4b12 ldr r3, [pc, #72] ; (8003bd8 ) 8003b90: 695a ldr r2, [r3, #20] 8003b92: 4b11 ldr r3, [pc, #68] ; (8003bd8 ) 8003b94: 6919 ldr r1, [r3, #16] 8003b96: 4b10 ldr r3, [pc, #64] ; (8003bd8 ) 8003b98: 68db ldr r3, [r3, #12] 8003b9a: 3b01 subs r3, #1 8003b9c: 440b add r3, r1 8003b9e: 429a cmp r2, r3 8003ba0: d903 bls.n 8003baa 8003ba2: 4b0d ldr r3, [pc, #52] ; (8003bd8 ) 8003ba4: 691b ldr r3, [r3, #16] 8003ba6: 4a0c ldr r2, [pc, #48] ; (8003bd8 ) 8003ba8: 6153 str r3, [r2, #20] 8003baa: 4b0b ldr r3, [pc, #44] ; (8003bd8 ) 8003bac: 8b9b ldrh r3, [r3, #28] 8003bae: 3b01 subs r3, #1 8003bb0: b29a uxth r2, r3 8003bb2: 4b09 ldr r3, [pc, #36] ; (8003bd8 ) 8003bb4: 839a strh r2, [r3, #28] 8003bb6: 4b08 ldr r3, [pc, #32] ; (8003bd8 ) 8003bb8: 2201 movs r2, #1 8003bba: 83da strh r2, [r3, #30] 8003bbc: e009 b.n 8003bd2 8003bbe: 4b06 ldr r3, [pc, #24] ; (8003bd8 ) 8003bc0: 2200 movs r2, #0 8003bc2: 83da strh r2, [r3, #30] 8003bc4: 4b04 ldr r3, [pc, #16] ; (8003bd8 ) 8003bc6: 685b ldr r3, [r3, #4] 8003bc8: 4618 mov r0, r3 8003bca: f7ff fde8 bl 800379e 8003bce: e000 b.n 8003bd2 8003bd0: bf00 nop 8003bd2: 3708 adds r7, #8 8003bd4: 46bd mov sp, r7 8003bd6: bd80 pop {r7, pc} 8003bd8: 20000f44 .word 0x20000f44 08003bdc : 8003bdc: b580 push {r7, lr} 8003bde: b082 sub sp, #8 8003be0: af00 add r7, sp, #0 8003be2: 6078 str r0, [r7, #4] 8003be4: 6039 str r1, [r7, #0] 8003be6: 4b12 ldr r3, [pc, #72] ; (8003c30 ) 8003be8: 685b ldr r3, [r3, #4] 8003bea: 4618 mov r0, r3 8003bec: f7ff fdd7 bl 800379e 8003bf0: e016 b.n 8003c20 8003bf2: bf00 nop 8003bf4: 4b0e ldr r3, [pc, #56] ; (8003c30 ) 8003bf6: 685b ldr r3, [r3, #4] 8003bf8: 4618 mov r0, r3 8003bfa: f7ff fd7f bl 80036fc 8003bfe: 4603 mov r3, r0 8003c00: 2b00 cmp r3, #0 8003c02: d0f7 beq.n 8003bf4 8003c04: 4b0a ldr r3, [pc, #40] ; (8003c30 ) 8003c06: 685a ldr r2, [r3, #4] 8003c08: 687b ldr r3, [r7, #4] 8003c0a: 781b ldrb r3, [r3, #0] 8003c0c: 4619 mov r1, r3 8003c0e: 4610 mov r0, r2 8003c10: f7ff fde0 bl 80037d4 8003c14: 687b ldr r3, [r7, #4] 8003c16: 3301 adds r3, #1 8003c18: 607b str r3, [r7, #4] 8003c1a: 683b ldr r3, [r7, #0] 8003c1c: 3b01 subs r3, #1 8003c1e: 603b str r3, [r7, #0] 8003c20: 683b ldr r3, [r7, #0] 8003c22: 2b00 cmp r3, #0 8003c24: d1e5 bne.n 8003bf2 8003c26: 683b ldr r3, [r7, #0] 8003c28: 4618 mov r0, r3 8003c2a: 3708 adds r7, #8 8003c2c: 46bd mov sp, r7 8003c2e: bd80 pop {r7, pc} 8003c30: 20000f44 .word 0x20000f44 08003c34 : 8003c34: b580 push {r7, lr} 8003c36: b084 sub sp, #16 8003c38: af00 add r7, sp, #0 8003c3a: 6078 str r0, [r7, #4] 8003c3c: 6039 str r1, [r7, #0] 8003c3e: 2300 movs r3, #0 8003c40: 60fb str r3, [r7, #12] 8003c42: 4b14 ldr r3, [pc, #80] ; (8003c94 ) 8003c44: 685b ldr r3, [r3, #4] 8003c46: 4618 mov r0, r3 8003c48: f7ff fd9a bl 8003780 8003c4c: e01a b.n 8003c84 8003c4e: bf00 nop 8003c50: 4b10 ldr r3, [pc, #64] ; (8003c94 ) 8003c52: 685b ldr r3, [r3, #4] 8003c54: 4618 mov r0, r3 8003c56: f7ff fd51 bl 80036fc 8003c5a: 4603 mov r3, r0 8003c5c: 2b00 cmp r3, #0 8003c5e: d0f7 beq.n 8003c50 8003c60: 4b0c ldr r3, [pc, #48] ; (8003c94 ) 8003c62: 685b ldr r3, [r3, #4] 8003c64: 4618 mov r0, r3 8003c66: f7ff fda9 bl 80037bc 8003c6a: 4603 mov r3, r0 8003c6c: 461a mov r2, r3 8003c6e: 687b ldr r3, [r7, #4] 8003c70: 701a strb r2, [r3, #0] 8003c72: 687b ldr r3, [r7, #4] 8003c74: 3301 adds r3, #1 8003c76: 607b str r3, [r7, #4] 8003c78: 683b ldr r3, [r7, #0] 8003c7a: 3b01 subs r3, #1 8003c7c: 603b str r3, [r7, #0] 8003c7e: 68fb ldr r3, [r7, #12] 8003c80: 3301 adds r3, #1 8003c82: 60fb str r3, [r7, #12] 8003c84: 683b ldr r3, [r7, #0] 8003c86: 2b00 cmp r3, #0 8003c88: d1e1 bne.n 8003c4e 8003c8a: 68fb ldr r3, [r7, #12] 8003c8c: 4618 mov r0, r3 8003c8e: 3710 adds r7, #16 8003c90: 46bd mov sp, r7 8003c92: bd80 pop {r7, pc} 8003c94: 20000f44 .word 0x20000f44 08003c98 : #endif #ifdef COMM_USART2 USART_PROC(2); 8003c98: b580 push {r7, lr} 8003c9a: b082 sub sp, #8 8003c9c: af00 add r7, sp, #0 8003c9e: 6078 str r0, [r7, #4] 8003ca0: 4608 mov r0, r1 8003ca2: 4611 mov r1, r2 8003ca4: 461a mov r2, r3 8003ca6: 4603 mov r3, r0 8003ca8: 70fb strb r3, [r7, #3] 8003caa: 460b mov r3, r1 8003cac: 70bb strb r3, [r7, #2] 8003cae: 4613 mov r3, r2 8003cb0: 707b strb r3, [r7, #1] 8003cb2: 2238 movs r2, #56 ; 0x38 8003cb4: 2100 movs r1, #0 8003cb6: 4823 ldr r0, [pc, #140] ; (8003d44 ) 8003cb8: f005 fe1f bl 80098fa 8003cbc: 4b21 ldr r3, [pc, #132] ; (8003d44 ) 8003cbe: 4a22 ldr r2, [pc, #136] ; (8003d48 ) 8003cc0: 611a str r2, [r3, #16] 8003cc2: 4b20 ldr r3, [pc, #128] ; (8003d44 ) 8003cc4: 2280 movs r2, #128 ; 0x80 8003cc6: 60da str r2, [r3, #12] 8003cc8: 4b1e ldr r3, [pc, #120] ; (8003d44 ) 8003cca: 4a20 ldr r2, [pc, #128] ; (8003d4c ) 8003ccc: 625a str r2, [r3, #36] ; 0x24 8003cce: 4b1d ldr r3, [pc, #116] ; (8003d44 ) 8003cd0: 2280 movs r2, #128 ; 0x80 8003cd2: 621a str r2, [r3, #32] 8003cd4: 4b1b ldr r3, [pc, #108] ; (8003d44 ) 8003cd6: 4a1e ldr r2, [pc, #120] ; (8003d50 ) 8003cd8: 605a str r2, [r3, #4] 8003cda: 4a1a ldr r2, [pc, #104] ; (8003d44 ) 8003cdc: 687b ldr r3, [r7, #4] 8003cde: 6093 str r3, [r2, #8] 8003ce0: 4b18 ldr r3, [pc, #96] ; (8003d44 ) 8003ce2: 691b ldr r3, [r3, #16] 8003ce4: 4a17 ldr r2, [pc, #92] ; (8003d44 ) 8003ce6: 6153 str r3, [r2, #20] 8003ce8: 4b16 ldr r3, [pc, #88] ; (8003d44 ) 8003cea: 695b ldr r3, [r3, #20] 8003cec: 4a15 ldr r2, [pc, #84] ; (8003d44 ) 8003cee: 6193 str r3, [r2, #24] 8003cf0: 4b14 ldr r3, [pc, #80] ; (8003d44 ) 8003cf2: 2200 movs r2, #0 8003cf4: 839a strh r2, [r3, #28] 8003cf6: 4b13 ldr r3, [pc, #76] ; (8003d44 ) 8003cf8: 2200 movs r2, #0 8003cfa: 83da strh r2, [r3, #30] 8003cfc: 4b11 ldr r3, [pc, #68] ; (8003d44 ) 8003cfe: 6a5b ldr r3, [r3, #36] ; 0x24 8003d00: 4a10 ldr r2, [pc, #64] ; (8003d44 ) 8003d02: 6293 str r3, [r2, #40] ; 0x28 8003d04: 4b0f ldr r3, [pc, #60] ; (8003d44 ) 8003d06: 6a9b ldr r3, [r3, #40] ; 0x28 8003d08: 4a0e ldr r2, [pc, #56] ; (8003d44 ) 8003d0a: 62d3 str r3, [r2, #44] ; 0x2c 8003d0c: 4b0d ldr r3, [pc, #52] ; (8003d44 ) 8003d0e: 2200 movs r2, #0 8003d10: 861a strh r2, [r3, #48] ; 0x30 8003d12: 4b0c ldr r3, [pc, #48] ; (8003d44 ) 8003d14: 2201 movs r2, #1 8003d16: 865a strh r2, [r3, #50] ; 0x32 8003d18: 4b0a ldr r3, [pc, #40] ; (8003d44 ) 8003d1a: f245 52aa movw r2, #21930 ; 0x55aa 8003d1e: 801a strh r2, [r3, #0] 8003d20: 4b08 ldr r3, [pc, #32] ; (8003d44 ) 8003d22: 2200 movs r2, #0 8003d24: 635a str r2, [r3, #52] ; 0x34 8003d26: 480a ldr r0, [pc, #40] ; (8003d50 ) 8003d28: f7ff fd48 bl 80037bc 8003d2c: 4808 ldr r0, [pc, #32] ; (8003d50 ) 8003d2e: f7ff fd09 bl 8003744 8003d32: 4807 ldr r0, [pc, #28] ; (8003d50 ) 8003d34: f7ff fcc1 bl 80036ba 8003d38: 2300 movs r3, #0 8003d3a: 4618 mov r0, r3 8003d3c: 3708 adds r7, #8 8003d3e: 46bd mov sp, r7 8003d40: bd80 pop {r7, pc} 8003d42: bf00 nop 8003d44: 20000c8c .word 0x20000c8c 8003d48: 20000fb4 .word 0x20000fb4 8003d4c: 20000dc4 .word 0x20000dc4 8003d50: 40004400 .word 0x40004400 08003d54 : 8003d54: b580 push {r7, lr} 8003d56: b084 sub sp, #16 8003d58: af00 add r7, sp, #0 8003d5a: 6078 str r0, [r7, #4] 8003d5c: 6039 str r1, [r7, #0] 8003d5e: 687b ldr r3, [r7, #4] 8003d60: 2b00 cmp r3, #0 8003d62: d002 beq.n 8003d6a 8003d64: 683b ldr r3, [r7, #0] 8003d66: 2b00 cmp r3, #0 8003d68: da02 bge.n 8003d70 8003d6a: f04f 33ff mov.w r3, #4294967295 8003d6e: e061 b.n 8003e34 8003d70: 4b32 ldr r3, [pc, #200] ; (8003e3c ) 8003d72: 881b ldrh r3, [r3, #0] 8003d74: f245 52aa movw r2, #21930 ; 0x55aa 8003d78: 4293 cmp r3, r2 8003d7a: d002 beq.n 8003d82 8003d7c: f06f 0301 mvn.w r3, #1 8003d80: e058 b.n 8003e34 8003d82: f7ff fc21 bl 80035c8 8003d86: 4b2d ldr r3, [pc, #180] ; (8003e3c ) 8003d88: 8b9b ldrh r3, [r3, #28] 8003d8a: 461a mov r2, r3 8003d8c: 683b ldr r3, [r7, #0] 8003d8e: 441a add r2, r3 8003d90: 4b2a ldr r3, [pc, #168] ; (8003e3c ) 8003d92: 68db ldr r3, [r3, #12] 8003d94: 429a cmp r2, r3 8003d96: dd01 ble.n 8003d9c 8003d98: 2300 movs r3, #0 8003d9a: 603b str r3, [r7, #0] 8003d9c: 4b27 ldr r3, [pc, #156] ; (8003e3c ) 8003d9e: 699b ldr r3, [r3, #24] 8003da0: 60bb str r3, [r7, #8] 8003da2: f7ff fc23 bl 80035ec 8003da6: 683b ldr r3, [r7, #0] 8003da8: 2b00 cmp r3, #0 8003daa: da02 bge.n 8003db2 8003dac: f06f 0302 mvn.w r3, #2 8003db0: e040 b.n 8003e34 8003db2: 2300 movs r3, #0 8003db4: 60fb str r3, [r7, #12] 8003db6: e016 b.n 8003de6 8003db8: 687a ldr r2, [r7, #4] 8003dba: 1c53 adds r3, r2, #1 8003dbc: 607b str r3, [r7, #4] 8003dbe: 68bb ldr r3, [r7, #8] 8003dc0: 1c59 adds r1, r3, #1 8003dc2: 60b9 str r1, [r7, #8] 8003dc4: 7812 ldrb r2, [r2, #0] 8003dc6: 701a strb r2, [r3, #0] 8003dc8: 4b1c ldr r3, [pc, #112] ; (8003e3c ) 8003dca: 691a ldr r2, [r3, #16] 8003dcc: 4b1b ldr r3, [pc, #108] ; (8003e3c ) 8003dce: 68db ldr r3, [r3, #12] 8003dd0: 3b01 subs r3, #1 8003dd2: 4413 add r3, r2 8003dd4: 68ba ldr r2, [r7, #8] 8003dd6: 429a cmp r2, r3 8003dd8: d902 bls.n 8003de0 8003dda: 4b18 ldr r3, [pc, #96] ; (8003e3c ) 8003ddc: 691b ldr r3, [r3, #16] 8003dde: 60bb str r3, [r7, #8] 8003de0: 68fb ldr r3, [r7, #12] 8003de2: 3301 adds r3, #1 8003de4: 60fb str r3, [r7, #12] 8003de6: 68fa ldr r2, [r7, #12] 8003de8: 683b ldr r3, [r7, #0] 8003dea: 429a cmp r2, r3 8003dec: dbe4 blt.n 8003db8 8003dee: 683b ldr r3, [r7, #0] 8003df0: 2b00 cmp r3, #0 8003df2: d01e beq.n 8003e32 8003df4: f7ff fbe8 bl 80035c8 8003df8: 4a10 ldr r2, [pc, #64] ; (8003e3c ) 8003dfa: 68bb ldr r3, [r7, #8] 8003dfc: 6193 str r3, [r2, #24] 8003dfe: 4b0f ldr r3, [pc, #60] ; (8003e3c ) 8003e00: 8b9a ldrh r2, [r3, #28] 8003e02: 683b ldr r3, [r7, #0] 8003e04: b29b uxth r3, r3 8003e06: 4413 add r3, r2 8003e08: b29a uxth r2, r3 8003e0a: 4b0c ldr r3, [pc, #48] ; (8003e3c ) 8003e0c: 839a strh r2, [r3, #28] 8003e0e: 4b0b ldr r3, [pc, #44] ; (8003e3c ) 8003e10: 8bdb ldrh r3, [r3, #30] 8003e12: 2b01 cmp r3, #1 8003e14: d00b beq.n 8003e2e 8003e16: 4b09 ldr r3, [pc, #36] ; (8003e3c ) 8003e18: 8b9b ldrh r3, [r3, #28] 8003e1a: 2b00 cmp r3, #0 8003e1c: d007 beq.n 8003e2e 8003e1e: 4b07 ldr r3, [pc, #28] ; (8003e3c ) 8003e20: 2201 movs r2, #1 8003e22: 83da strh r2, [r3, #30] 8003e24: 4b05 ldr r3, [pc, #20] ; (8003e3c ) 8003e26: 685b ldr r3, [r3, #4] 8003e28: 4618 mov r0, r3 8003e2a: f7ff fc9a bl 8003762 8003e2e: f7ff fbdd bl 80035ec 8003e32: 683b ldr r3, [r7, #0] 8003e34: 4618 mov r0, r3 8003e36: 3710 adds r7, #16 8003e38: 46bd mov sp, r7 8003e3a: bd80 pop {r7, pc} 8003e3c: 20000c8c .word 0x20000c8c 08003e40 : 8003e40: b580 push {r7, lr} 8003e42: b086 sub sp, #24 8003e44: af00 add r7, sp, #0 8003e46: 6078 str r0, [r7, #4] 8003e48: 6039 str r1, [r7, #0] 8003e4a: 687b ldr r3, [r7, #4] 8003e4c: 2b00 cmp r3, #0 8003e4e: d002 beq.n 8003e56 8003e50: 683b ldr r3, [r7, #0] 8003e52: 2b00 cmp r3, #0 8003e54: da02 bge.n 8003e5c 8003e56: f04f 33ff mov.w r3, #4294967295 8003e5a: e04d b.n 8003ef8 8003e5c: 4b28 ldr r3, [pc, #160] ; (8003f00 ) 8003e5e: 881b ldrh r3, [r3, #0] 8003e60: f245 52aa movw r2, #21930 ; 0x55aa 8003e64: 4293 cmp r3, r2 8003e66: d002 beq.n 8003e6e 8003e68: f06f 0301 mvn.w r3, #1 8003e6c: e044 b.n 8003ef8 8003e6e: f7ff fbab bl 80035c8 8003e72: 4b23 ldr r3, [pc, #140] ; (8003f00 ) 8003e74: 6a9b ldr r3, [r3, #40] ; 0x28 8003e76: 613b str r3, [r7, #16] 8003e78: 4b21 ldr r3, [pc, #132] ; (8003f00 ) 8003e7a: 8e1b ldrh r3, [r3, #48] ; 0x30 8003e7c: 60fb str r3, [r7, #12] 8003e7e: f7ff fbb5 bl 80035ec 8003e82: 68fb ldr r3, [r7, #12] 8003e84: 2b00 cmp r3, #0 8003e86: da02 bge.n 8003e8e 8003e88: f06f 0302 mvn.w r3, #2 8003e8c: e034 b.n 8003ef8 8003e8e: 683a ldr r2, [r7, #0] 8003e90: 68fb ldr r3, [r7, #12] 8003e92: 429a cmp r2, r3 8003e94: dd01 ble.n 8003e9a 8003e96: 2300 movs r3, #0 8003e98: e02e b.n 8003ef8 8003e9a: 2300 movs r3, #0 8003e9c: 617b str r3, [r7, #20] 8003e9e: e017 b.n 8003ed0 8003ea0: 687b ldr r3, [r7, #4] 8003ea2: 1c5a adds r2, r3, #1 8003ea4: 607a str r2, [r7, #4] 8003ea6: 693a ldr r2, [r7, #16] 8003ea8: 7812 ldrb r2, [r2, #0] 8003eaa: 701a strb r2, [r3, #0] 8003eac: 693b ldr r3, [r7, #16] 8003eae: 3301 adds r3, #1 8003eb0: 613b str r3, [r7, #16] 8003eb2: 4b13 ldr r3, [pc, #76] ; (8003f00 ) 8003eb4: 6a5a ldr r2, [r3, #36] ; 0x24 8003eb6: 4b12 ldr r3, [pc, #72] ; (8003f00 ) 8003eb8: 6a1b ldr r3, [r3, #32] 8003eba: 3b01 subs r3, #1 8003ebc: 4413 add r3, r2 8003ebe: 693a ldr r2, [r7, #16] 8003ec0: 429a cmp r2, r3 8003ec2: d902 bls.n 8003eca 8003ec4: 4b0e ldr r3, [pc, #56] ; (8003f00 ) 8003ec6: 6a5b ldr r3, [r3, #36] ; 0x24 8003ec8: 613b str r3, [r7, #16] 8003eca: 697b ldr r3, [r7, #20] 8003ecc: 3301 adds r3, #1 8003ece: 617b str r3, [r7, #20] 8003ed0: 697a ldr r2, [r7, #20] 8003ed2: 683b ldr r3, [r7, #0] 8003ed4: 429a cmp r2, r3 8003ed6: dbe3 blt.n 8003ea0 8003ed8: f7ff fb76 bl 80035c8 8003edc: 4a08 ldr r2, [pc, #32] ; (8003f00 ) 8003ede: 693b ldr r3, [r7, #16] 8003ee0: 6293 str r3, [r2, #40] ; 0x28 8003ee2: 4b07 ldr r3, [pc, #28] ; (8003f00 ) 8003ee4: 8e1a ldrh r2, [r3, #48] ; 0x30 8003ee6: 683b ldr r3, [r7, #0] 8003ee8: b29b uxth r3, r3 8003eea: 1ad3 subs r3, r2, r3 8003eec: b29a uxth r2, r3 8003eee: 4b04 ldr r3, [pc, #16] ; (8003f00 ) 8003ef0: 861a strh r2, [r3, #48] ; 0x30 8003ef2: f7ff fb7b bl 80035ec 8003ef6: 683b ldr r3, [r7, #0] 8003ef8: 4618 mov r0, r3 8003efa: 3718 adds r7, #24 8003efc: 46bd mov sp, r7 8003efe: bd80 pop {r7, pc} 8003f00: 20000c8c .word 0x20000c8c 08003f04 : 8003f04: b580 push {r7, lr} 8003f06: b082 sub sp, #8 8003f08: af00 add r7, sp, #0 8003f0a: f7ff fb5d bl 80035c8 8003f0e: 4b08 ldr r3, [pc, #32] ; (8003f30 ) 8003f10: 6adb ldr r3, [r3, #44] ; 0x2c 8003f12: 4a07 ldr r2, [pc, #28] ; (8003f30 ) 8003f14: 6293 str r3, [r2, #40] ; 0x28 8003f16: 4b06 ldr r3, [pc, #24] ; (8003f30 ) 8003f18: 8e1b ldrh r3, [r3, #48] ; 0x30 8003f1a: 607b str r3, [r7, #4] 8003f1c: 4b04 ldr r3, [pc, #16] ; (8003f30 ) 8003f1e: 2200 movs r2, #0 8003f20: 861a strh r2, [r3, #48] ; 0x30 8003f22: f7ff fb63 bl 80035ec 8003f26: 687b ldr r3, [r7, #4] 8003f28: 4618 mov r0, r3 8003f2a: 3708 adds r7, #8 8003f2c: 46bd mov sp, r7 8003f2e: bd80 pop {r7, pc} 8003f30: 20000c8c .word 0x20000c8c 08003f34 : 8003f34: b580 push {r7, lr} 8003f36: b082 sub sp, #8 8003f38: af00 add r7, sp, #0 8003f3a: f7ff fb45 bl 80035c8 8003f3e: 4b07 ldr r3, [pc, #28] ; (8003f5c ) 8003f40: 8bdb ldrh r3, [r3, #30] 8003f42: 607b str r3, [r7, #4] 8003f44: f7ff fb52 bl 80035ec 8003f48: 687b ldr r3, [r7, #4] 8003f4a: 2b01 cmp r3, #1 8003f4c: d101 bne.n 8003f52 8003f4e: 2300 movs r3, #0 8003f50: e000 b.n 8003f54 8003f52: 2301 movs r3, #1 8003f54: 4618 mov r0, r3 8003f56: 3708 adds r7, #8 8003f58: 46bd mov sp, r7 8003f5a: bd80 pop {r7, pc} 8003f5c: 20000c8c .word 0x20000c8c 08003f60 : 8003f60: b580 push {r7, lr} 8003f62: b082 sub sp, #8 8003f64: af00 add r7, sp, #0 8003f66: 4b46 ldr r3, [pc, #280] ; (8004080 ) 8003f68: 685b ldr r3, [r3, #4] 8003f6a: 4618 mov r0, r3 8003f6c: f7ff fbb4 bl 80036d8 8003f70: 4603 mov r3, r0 8003f72: 2b00 cmp r3, #0 8003f74: d039 beq.n 8003fea 8003f76: 4b42 ldr r3, [pc, #264] ; (8004080 ) 8003f78: 685b ldr r3, [r3, #4] 8003f7a: 4618 mov r0, r3 8003f7c: f7ff fc1e bl 80037bc 8003f80: 4603 mov r3, r0 8003f82: 71fb strb r3, [r7, #7] 8003f84: 4b3e ldr r3, [pc, #248] ; (8004080 ) 8003f86: 881b ldrh r3, [r3, #0] 8003f88: f245 52aa movw r2, #21930 ; 0x55aa 8003f8c: 4293 cmp r3, r2 8003f8e: d173 bne.n 8004078 8003f90: 4b3b ldr r3, [pc, #236] ; (8004080 ) 8003f92: 8e1b ldrh r3, [r3, #48] ; 0x30 8003f94: 461a mov r2, r3 8003f96: 4b3a ldr r3, [pc, #232] ; (8004080 ) 8003f98: 6a1b ldr r3, [r3, #32] 8003f9a: 429a cmp r2, r3 8003f9c: da1c bge.n 8003fd8 8003f9e: 4b38 ldr r3, [pc, #224] ; (8004080 ) 8003fa0: 6adb ldr r3, [r3, #44] ; 0x2c 8003fa2: 79fa ldrb r2, [r7, #7] 8003fa4: 701a strb r2, [r3, #0] 8003fa6: 4b36 ldr r3, [pc, #216] ; (8004080 ) 8003fa8: 6adb ldr r3, [r3, #44] ; 0x2c 8003faa: 3301 adds r3, #1 8003fac: 4a34 ldr r2, [pc, #208] ; (8004080 ) 8003fae: 62d3 str r3, [r2, #44] ; 0x2c 8003fb0: 4b33 ldr r3, [pc, #204] ; (8004080 ) 8003fb2: 6ada ldr r2, [r3, #44] ; 0x2c 8003fb4: 4b32 ldr r3, [pc, #200] ; (8004080 ) 8003fb6: 6a59 ldr r1, [r3, #36] ; 0x24 8003fb8: 4b31 ldr r3, [pc, #196] ; (8004080 ) 8003fba: 6a1b ldr r3, [r3, #32] 8003fbc: 3b01 subs r3, #1 8003fbe: 440b add r3, r1 8003fc0: 429a cmp r2, r3 8003fc2: d903 bls.n 8003fcc 8003fc4: 4b2e ldr r3, [pc, #184] ; (8004080 ) 8003fc6: 6a5b ldr r3, [r3, #36] ; 0x24 8003fc8: 4a2d ldr r2, [pc, #180] ; (8004080 ) 8003fca: 62d3 str r3, [r2, #44] ; 0x2c 8003fcc: 4b2c ldr r3, [pc, #176] ; (8004080 ) 8003fce: 8e1b ldrh r3, [r3, #48] ; 0x30 8003fd0: 3301 adds r3, #1 8003fd2: b29a uxth r2, r3 8003fd4: 4b2a ldr r3, [pc, #168] ; (8004080 ) 8003fd6: 861a strh r2, [r3, #48] ; 0x30 8003fd8: 4b29 ldr r3, [pc, #164] ; (8004080 ) 8003fda: 6b5b ldr r3, [r3, #52] ; 0x34 8003fdc: 2b00 cmp r3, #0 8003fde: d004 beq.n 8003fea 8003fe0: 4b27 ldr r3, [pc, #156] ; (8004080 ) 8003fe2: 6b5b ldr r3, [r3, #52] ; 0x34 8003fe4: 79fa ldrb r2, [r7, #7] 8003fe6: 4610 mov r0, r2 8003fe8: 4798 blx r3 8003fea: 4b25 ldr r3, [pc, #148] ; (8004080 ) 8003fec: 685b ldr r3, [r3, #4] 8003fee: 4618 mov r0, r3 8003ff0: f7ff fb96 bl 8003720 8003ff4: 4603 mov r3, r0 8003ff6: 2b00 cmp r3, #0 8003ff8: d03f beq.n 800407a 8003ffa: 4b21 ldr r3, [pc, #132] ; (8004080 ) 8003ffc: 881b ldrh r3, [r3, #0] 8003ffe: f245 52aa movw r2, #21930 ; 0x55aa 8004002: 4293 cmp r3, r2 8004004: d005 beq.n 8004012 8004006: 4b1e ldr r3, [pc, #120] ; (8004080 ) 8004008: 685b ldr r3, [r3, #4] 800400a: 4618 mov r0, r3 800400c: f7ff fbc7 bl 800379e 8004010: e033 b.n 800407a 8004012: 4b1b ldr r3, [pc, #108] ; (8004080 ) 8004014: 8b9b ldrh r3, [r3, #28] 8004016: 2b00 cmp r3, #0 8004018: d025 beq.n 8004066 800401a: 4b19 ldr r3, [pc, #100] ; (8004080 ) 800401c: 685a ldr r2, [r3, #4] 800401e: 4b18 ldr r3, [pc, #96] ; (8004080 ) 8004020: 695b ldr r3, [r3, #20] 8004022: 781b ldrb r3, [r3, #0] 8004024: 4619 mov r1, r3 8004026: 4610 mov r0, r2 8004028: f7ff fbd4 bl 80037d4 800402c: 4b14 ldr r3, [pc, #80] ; (8004080 ) 800402e: 695b ldr r3, [r3, #20] 8004030: 3301 adds r3, #1 8004032: 4a13 ldr r2, [pc, #76] ; (8004080 ) 8004034: 6153 str r3, [r2, #20] 8004036: 4b12 ldr r3, [pc, #72] ; (8004080 ) 8004038: 695a ldr r2, [r3, #20] 800403a: 4b11 ldr r3, [pc, #68] ; (8004080 ) 800403c: 6919 ldr r1, [r3, #16] 800403e: 4b10 ldr r3, [pc, #64] ; (8004080 ) 8004040: 68db ldr r3, [r3, #12] 8004042: 3b01 subs r3, #1 8004044: 440b add r3, r1 8004046: 429a cmp r2, r3 8004048: d903 bls.n 8004052 800404a: 4b0d ldr r3, [pc, #52] ; (8004080 ) 800404c: 691b ldr r3, [r3, #16] 800404e: 4a0c ldr r2, [pc, #48] ; (8004080 ) 8004050: 6153 str r3, [r2, #20] 8004052: 4b0b ldr r3, [pc, #44] ; (8004080 ) 8004054: 8b9b ldrh r3, [r3, #28] 8004056: 3b01 subs r3, #1 8004058: b29a uxth r2, r3 800405a: 4b09 ldr r3, [pc, #36] ; (8004080 ) 800405c: 839a strh r2, [r3, #28] 800405e: 4b08 ldr r3, [pc, #32] ; (8004080 ) 8004060: 2201 movs r2, #1 8004062: 83da strh r2, [r3, #30] 8004064: e009 b.n 800407a 8004066: 4b06 ldr r3, [pc, #24] ; (8004080 ) 8004068: 2200 movs r2, #0 800406a: 83da strh r2, [r3, #30] 800406c: 4b04 ldr r3, [pc, #16] ; (8004080 ) 800406e: 685b ldr r3, [r3, #4] 8004070: 4618 mov r0, r3 8004072: f7ff fb94 bl 800379e 8004076: e000 b.n 800407a 8004078: bf00 nop 800407a: 3708 adds r7, #8 800407c: 46bd mov sp, r7 800407e: bd80 pop {r7, pc} 8004080: 20000c8c .word 0x20000c8c 08004084 : #endif #ifdef COMM_USART3 USART_PROC(3); 8004084: b580 push {r7, lr} 8004086: b082 sub sp, #8 8004088: af00 add r7, sp, #0 800408a: 6078 str r0, [r7, #4] 800408c: 4608 mov r0, r1 800408e: 4611 mov r1, r2 8004090: 461a mov r2, r3 8004092: 4603 mov r3, r0 8004094: 70fb strb r3, [r7, #3] 8004096: 460b mov r3, r1 8004098: 70bb strb r3, [r7, #2] 800409a: 4613 mov r3, r2 800409c: 707b strb r3, [r7, #1] 800409e: 2238 movs r2, #56 ; 0x38 80040a0: 2100 movs r1, #0 80040a2: 4823 ldr r0, [pc, #140] ; (8004130 ) 80040a4: f005 fc29 bl 80098fa 80040a8: 4b21 ldr r3, [pc, #132] ; (8004130 ) 80040aa: 4a22 ldr r2, [pc, #136] ; (8004134 ) 80040ac: 611a str r2, [r3, #16] 80040ae: 4b20 ldr r3, [pc, #128] ; (8004130 ) 80040b0: 2280 movs r2, #128 ; 0x80 80040b2: 60da str r2, [r3, #12] 80040b4: 4b1e ldr r3, [pc, #120] ; (8004130 ) 80040b6: 4a20 ldr r2, [pc, #128] ; (8004138 ) 80040b8: 625a str r2, [r3, #36] ; 0x24 80040ba: 4b1d ldr r3, [pc, #116] ; (8004130 ) 80040bc: 2280 movs r2, #128 ; 0x80 80040be: 621a str r2, [r3, #32] 80040c0: 4b1b ldr r3, [pc, #108] ; (8004130 ) 80040c2: 4a1e ldr r2, [pc, #120] ; (800413c ) 80040c4: 605a str r2, [r3, #4] 80040c6: 4a1a ldr r2, [pc, #104] ; (8004130 ) 80040c8: 687b ldr r3, [r7, #4] 80040ca: 6093 str r3, [r2, #8] 80040cc: 4b18 ldr r3, [pc, #96] ; (8004130 ) 80040ce: 691b ldr r3, [r3, #16] 80040d0: 4a17 ldr r2, [pc, #92] ; (8004130 ) 80040d2: 6153 str r3, [r2, #20] 80040d4: 4b16 ldr r3, [pc, #88] ; (8004130 ) 80040d6: 695b ldr r3, [r3, #20] 80040d8: 4a15 ldr r2, [pc, #84] ; (8004130 ) 80040da: 6193 str r3, [r2, #24] 80040dc: 4b14 ldr r3, [pc, #80] ; (8004130 ) 80040de: 2200 movs r2, #0 80040e0: 839a strh r2, [r3, #28] 80040e2: 4b13 ldr r3, [pc, #76] ; (8004130 ) 80040e4: 2200 movs r2, #0 80040e6: 83da strh r2, [r3, #30] 80040e8: 4b11 ldr r3, [pc, #68] ; (8004130 ) 80040ea: 6a5b ldr r3, [r3, #36] ; 0x24 80040ec: 4a10 ldr r2, [pc, #64] ; (8004130 ) 80040ee: 6293 str r3, [r2, #40] ; 0x28 80040f0: 4b0f ldr r3, [pc, #60] ; (8004130 ) 80040f2: 6a9b ldr r3, [r3, #40] ; 0x28 80040f4: 4a0e ldr r2, [pc, #56] ; (8004130 ) 80040f6: 62d3 str r3, [r2, #44] ; 0x2c 80040f8: 4b0d ldr r3, [pc, #52] ; (8004130 ) 80040fa: 2200 movs r2, #0 80040fc: 861a strh r2, [r3, #48] ; 0x30 80040fe: 4b0c ldr r3, [pc, #48] ; (8004130 ) 8004100: 2201 movs r2, #1 8004102: 865a strh r2, [r3, #50] ; 0x32 8004104: 4b0a ldr r3, [pc, #40] ; (8004130 ) 8004106: f245 52aa movw r2, #21930 ; 0x55aa 800410a: 801a strh r2, [r3, #0] 800410c: 4b08 ldr r3, [pc, #32] ; (8004130 ) 800410e: 2200 movs r2, #0 8004110: 635a str r2, [r3, #52] ; 0x34 8004112: 480a ldr r0, [pc, #40] ; (800413c ) 8004114: f7ff fb52 bl 80037bc 8004118: 4808 ldr r0, [pc, #32] ; (800413c ) 800411a: f7ff fb13 bl 8003744 800411e: 4807 ldr r0, [pc, #28] ; (800413c ) 8004120: f7ff facb bl 80036ba 8004124: 2300 movs r3, #0 8004126: 4618 mov r0, r3 8004128: 3708 adds r7, #8 800412a: 46bd mov sp, r7 800412c: bd80 pop {r7, pc} 800412e: bf00 nop 8004130: 20000f7c .word 0x20000f7c 8004134: 20000e44 .word 0x20000e44 8004138: 20000cc4 .word 0x20000cc4 800413c: 40004800 .word 0x40004800 08004140 : 8004140: b580 push {r7, lr} 8004142: b084 sub sp, #16 8004144: af00 add r7, sp, #0 8004146: 6078 str r0, [r7, #4] 8004148: 6039 str r1, [r7, #0] 800414a: 687b ldr r3, [r7, #4] 800414c: 2b00 cmp r3, #0 800414e: d002 beq.n 8004156 8004150: 683b ldr r3, [r7, #0] 8004152: 2b00 cmp r3, #0 8004154: da02 bge.n 800415c 8004156: f04f 33ff mov.w r3, #4294967295 800415a: e061 b.n 8004220 800415c: 4b32 ldr r3, [pc, #200] ; (8004228 ) 800415e: 881b ldrh r3, [r3, #0] 8004160: f245 52aa movw r2, #21930 ; 0x55aa 8004164: 4293 cmp r3, r2 8004166: d002 beq.n 800416e 8004168: f06f 0301 mvn.w r3, #1 800416c: e058 b.n 8004220 800416e: f7ff fa2b bl 80035c8 8004172: 4b2d ldr r3, [pc, #180] ; (8004228 ) 8004174: 8b9b ldrh r3, [r3, #28] 8004176: 461a mov r2, r3 8004178: 683b ldr r3, [r7, #0] 800417a: 441a add r2, r3 800417c: 4b2a ldr r3, [pc, #168] ; (8004228 ) 800417e: 68db ldr r3, [r3, #12] 8004180: 429a cmp r2, r3 8004182: dd01 ble.n 8004188 8004184: 2300 movs r3, #0 8004186: 603b str r3, [r7, #0] 8004188: 4b27 ldr r3, [pc, #156] ; (8004228 ) 800418a: 699b ldr r3, [r3, #24] 800418c: 60bb str r3, [r7, #8] 800418e: f7ff fa2d bl 80035ec 8004192: 683b ldr r3, [r7, #0] 8004194: 2b00 cmp r3, #0 8004196: da02 bge.n 800419e 8004198: f06f 0302 mvn.w r3, #2 800419c: e040 b.n 8004220 800419e: 2300 movs r3, #0 80041a0: 60fb str r3, [r7, #12] 80041a2: e016 b.n 80041d2 80041a4: 687a ldr r2, [r7, #4] 80041a6: 1c53 adds r3, r2, #1 80041a8: 607b str r3, [r7, #4] 80041aa: 68bb ldr r3, [r7, #8] 80041ac: 1c59 adds r1, r3, #1 80041ae: 60b9 str r1, [r7, #8] 80041b0: 7812 ldrb r2, [r2, #0] 80041b2: 701a strb r2, [r3, #0] 80041b4: 4b1c ldr r3, [pc, #112] ; (8004228 ) 80041b6: 691a ldr r2, [r3, #16] 80041b8: 4b1b ldr r3, [pc, #108] ; (8004228 ) 80041ba: 68db ldr r3, [r3, #12] 80041bc: 3b01 subs r3, #1 80041be: 4413 add r3, r2 80041c0: 68ba ldr r2, [r7, #8] 80041c2: 429a cmp r2, r3 80041c4: d902 bls.n 80041cc 80041c6: 4b18 ldr r3, [pc, #96] ; (8004228 ) 80041c8: 691b ldr r3, [r3, #16] 80041ca: 60bb str r3, [r7, #8] 80041cc: 68fb ldr r3, [r7, #12] 80041ce: 3301 adds r3, #1 80041d0: 60fb str r3, [r7, #12] 80041d2: 68fa ldr r2, [r7, #12] 80041d4: 683b ldr r3, [r7, #0] 80041d6: 429a cmp r2, r3 80041d8: dbe4 blt.n 80041a4 80041da: 683b ldr r3, [r7, #0] 80041dc: 2b00 cmp r3, #0 80041de: d01e beq.n 800421e 80041e0: f7ff f9f2 bl 80035c8 80041e4: 4a10 ldr r2, [pc, #64] ; (8004228 ) 80041e6: 68bb ldr r3, [r7, #8] 80041e8: 6193 str r3, [r2, #24] 80041ea: 4b0f ldr r3, [pc, #60] ; (8004228 ) 80041ec: 8b9a ldrh r2, [r3, #28] 80041ee: 683b ldr r3, [r7, #0] 80041f0: b29b uxth r3, r3 80041f2: 4413 add r3, r2 80041f4: b29a uxth r2, r3 80041f6: 4b0c ldr r3, [pc, #48] ; (8004228 ) 80041f8: 839a strh r2, [r3, #28] 80041fa: 4b0b ldr r3, [pc, #44] ; (8004228 ) 80041fc: 8bdb ldrh r3, [r3, #30] 80041fe: 2b01 cmp r3, #1 8004200: d00b beq.n 800421a 8004202: 4b09 ldr r3, [pc, #36] ; (8004228 ) 8004204: 8b9b ldrh r3, [r3, #28] 8004206: 2b00 cmp r3, #0 8004208: d007 beq.n 800421a 800420a: 4b07 ldr r3, [pc, #28] ; (8004228 ) 800420c: 2201 movs r2, #1 800420e: 83da strh r2, [r3, #30] 8004210: 4b05 ldr r3, [pc, #20] ; (8004228 ) 8004212: 685b ldr r3, [r3, #4] 8004214: 4618 mov r0, r3 8004216: f7ff faa4 bl 8003762 800421a: f7ff f9e7 bl 80035ec 800421e: 683b ldr r3, [r7, #0] 8004220: 4618 mov r0, r3 8004222: 3710 adds r7, #16 8004224: 46bd mov sp, r7 8004226: bd80 pop {r7, pc} 8004228: 20000f7c .word 0x20000f7c 0800422c : 800422c: b580 push {r7, lr} 800422e: b086 sub sp, #24 8004230: af00 add r7, sp, #0 8004232: 6078 str r0, [r7, #4] 8004234: 6039 str r1, [r7, #0] 8004236: 687b ldr r3, [r7, #4] 8004238: 2b00 cmp r3, #0 800423a: d002 beq.n 8004242 800423c: 683b ldr r3, [r7, #0] 800423e: 2b00 cmp r3, #0 8004240: da02 bge.n 8004248 8004242: f04f 33ff mov.w r3, #4294967295 8004246: e04d b.n 80042e4 8004248: 4b28 ldr r3, [pc, #160] ; (80042ec ) 800424a: 881b ldrh r3, [r3, #0] 800424c: f245 52aa movw r2, #21930 ; 0x55aa 8004250: 4293 cmp r3, r2 8004252: d002 beq.n 800425a 8004254: f06f 0301 mvn.w r3, #1 8004258: e044 b.n 80042e4 800425a: f7ff f9b5 bl 80035c8 800425e: 4b23 ldr r3, [pc, #140] ; (80042ec ) 8004260: 6a9b ldr r3, [r3, #40] ; 0x28 8004262: 613b str r3, [r7, #16] 8004264: 4b21 ldr r3, [pc, #132] ; (80042ec ) 8004266: 8e1b ldrh r3, [r3, #48] ; 0x30 8004268: 60fb str r3, [r7, #12] 800426a: f7ff f9bf bl 80035ec 800426e: 68fb ldr r3, [r7, #12] 8004270: 2b00 cmp r3, #0 8004272: da02 bge.n 800427a 8004274: f06f 0302 mvn.w r3, #2 8004278: e034 b.n 80042e4 800427a: 683a ldr r2, [r7, #0] 800427c: 68fb ldr r3, [r7, #12] 800427e: 429a cmp r2, r3 8004280: dd01 ble.n 8004286 8004282: 2300 movs r3, #0 8004284: e02e b.n 80042e4 8004286: 2300 movs r3, #0 8004288: 617b str r3, [r7, #20] 800428a: e017 b.n 80042bc 800428c: 687b ldr r3, [r7, #4] 800428e: 1c5a adds r2, r3, #1 8004290: 607a str r2, [r7, #4] 8004292: 693a ldr r2, [r7, #16] 8004294: 7812 ldrb r2, [r2, #0] 8004296: 701a strb r2, [r3, #0] 8004298: 693b ldr r3, [r7, #16] 800429a: 3301 adds r3, #1 800429c: 613b str r3, [r7, #16] 800429e: 4b13 ldr r3, [pc, #76] ; (80042ec ) 80042a0: 6a5a ldr r2, [r3, #36] ; 0x24 80042a2: 4b12 ldr r3, [pc, #72] ; (80042ec ) 80042a4: 6a1b ldr r3, [r3, #32] 80042a6: 3b01 subs r3, #1 80042a8: 4413 add r3, r2 80042aa: 693a ldr r2, [r7, #16] 80042ac: 429a cmp r2, r3 80042ae: d902 bls.n 80042b6 80042b0: 4b0e ldr r3, [pc, #56] ; (80042ec ) 80042b2: 6a5b ldr r3, [r3, #36] ; 0x24 80042b4: 613b str r3, [r7, #16] 80042b6: 697b ldr r3, [r7, #20] 80042b8: 3301 adds r3, #1 80042ba: 617b str r3, [r7, #20] 80042bc: 697a ldr r2, [r7, #20] 80042be: 683b ldr r3, [r7, #0] 80042c0: 429a cmp r2, r3 80042c2: dbe3 blt.n 800428c 80042c4: f7ff f980 bl 80035c8 80042c8: 4a08 ldr r2, [pc, #32] ; (80042ec ) 80042ca: 693b ldr r3, [r7, #16] 80042cc: 6293 str r3, [r2, #40] ; 0x28 80042ce: 4b07 ldr r3, [pc, #28] ; (80042ec ) 80042d0: 8e1a ldrh r2, [r3, #48] ; 0x30 80042d2: 683b ldr r3, [r7, #0] 80042d4: b29b uxth r3, r3 80042d6: 1ad3 subs r3, r2, r3 80042d8: b29a uxth r2, r3 80042da: 4b04 ldr r3, [pc, #16] ; (80042ec ) 80042dc: 861a strh r2, [r3, #48] ; 0x30 80042de: f7ff f985 bl 80035ec 80042e2: 683b ldr r3, [r7, #0] 80042e4: 4618 mov r0, r3 80042e6: 3718 adds r7, #24 80042e8: 46bd mov sp, r7 80042ea: bd80 pop {r7, pc} 80042ec: 20000f7c .word 0x20000f7c 080042f0 : 80042f0: b580 push {r7, lr} 80042f2: b082 sub sp, #8 80042f4: af00 add r7, sp, #0 80042f6: f7ff f967 bl 80035c8 80042fa: 4b08 ldr r3, [pc, #32] ; (800431c ) 80042fc: 6adb ldr r3, [r3, #44] ; 0x2c 80042fe: 4a07 ldr r2, [pc, #28] ; (800431c ) 8004300: 6293 str r3, [r2, #40] ; 0x28 8004302: 4b06 ldr r3, [pc, #24] ; (800431c ) 8004304: 8e1b ldrh r3, [r3, #48] ; 0x30 8004306: 607b str r3, [r7, #4] 8004308: 4b04 ldr r3, [pc, #16] ; (800431c ) 800430a: 2200 movs r2, #0 800430c: 861a strh r2, [r3, #48] ; 0x30 800430e: f7ff f96d bl 80035ec 8004312: 687b ldr r3, [r7, #4] 8004314: 4618 mov r0, r3 8004316: 3708 adds r7, #8 8004318: 46bd mov sp, r7 800431a: bd80 pop {r7, pc} 800431c: 20000f7c .word 0x20000f7c 08004320 : 8004320: b580 push {r7, lr} 8004322: b082 sub sp, #8 8004324: af00 add r7, sp, #0 8004326: f7ff f94f bl 80035c8 800432a: 4b07 ldr r3, [pc, #28] ; (8004348 ) 800432c: 8bdb ldrh r3, [r3, #30] 800432e: 607b str r3, [r7, #4] 8004330: f7ff f95c bl 80035ec 8004334: 687b ldr r3, [r7, #4] 8004336: 2b01 cmp r3, #1 8004338: d101 bne.n 800433e 800433a: 2300 movs r3, #0 800433c: e000 b.n 8004340 800433e: 2301 movs r3, #1 8004340: 4618 mov r0, r3 8004342: 3708 adds r7, #8 8004344: 46bd mov sp, r7 8004346: bd80 pop {r7, pc} 8004348: 20000f7c .word 0x20000f7c 0800434c : 800434c: b580 push {r7, lr} 800434e: b082 sub sp, #8 8004350: af00 add r7, sp, #0 8004352: 4b46 ldr r3, [pc, #280] ; (800446c ) 8004354: 685b ldr r3, [r3, #4] 8004356: 4618 mov r0, r3 8004358: f7ff f9be bl 80036d8 800435c: 4603 mov r3, r0 800435e: 2b00 cmp r3, #0 8004360: d039 beq.n 80043d6 8004362: 4b42 ldr r3, [pc, #264] ; (800446c ) 8004364: 685b ldr r3, [r3, #4] 8004366: 4618 mov r0, r3 8004368: f7ff fa28 bl 80037bc 800436c: 4603 mov r3, r0 800436e: 71fb strb r3, [r7, #7] 8004370: 4b3e ldr r3, [pc, #248] ; (800446c ) 8004372: 881b ldrh r3, [r3, #0] 8004374: f245 52aa movw r2, #21930 ; 0x55aa 8004378: 4293 cmp r3, r2 800437a: d173 bne.n 8004464 800437c: 4b3b ldr r3, [pc, #236] ; (800446c ) 800437e: 8e1b ldrh r3, [r3, #48] ; 0x30 8004380: 461a mov r2, r3 8004382: 4b3a ldr r3, [pc, #232] ; (800446c ) 8004384: 6a1b ldr r3, [r3, #32] 8004386: 429a cmp r2, r3 8004388: da1c bge.n 80043c4 800438a: 4b38 ldr r3, [pc, #224] ; (800446c ) 800438c: 6adb ldr r3, [r3, #44] ; 0x2c 800438e: 79fa ldrb r2, [r7, #7] 8004390: 701a strb r2, [r3, #0] 8004392: 4b36 ldr r3, [pc, #216] ; (800446c ) 8004394: 6adb ldr r3, [r3, #44] ; 0x2c 8004396: 3301 adds r3, #1 8004398: 4a34 ldr r2, [pc, #208] ; (800446c ) 800439a: 62d3 str r3, [r2, #44] ; 0x2c 800439c: 4b33 ldr r3, [pc, #204] ; (800446c ) 800439e: 6ada ldr r2, [r3, #44] ; 0x2c 80043a0: 4b32 ldr r3, [pc, #200] ; (800446c ) 80043a2: 6a59 ldr r1, [r3, #36] ; 0x24 80043a4: 4b31 ldr r3, [pc, #196] ; (800446c ) 80043a6: 6a1b ldr r3, [r3, #32] 80043a8: 3b01 subs r3, #1 80043aa: 440b add r3, r1 80043ac: 429a cmp r2, r3 80043ae: d903 bls.n 80043b8 80043b0: 4b2e ldr r3, [pc, #184] ; (800446c ) 80043b2: 6a5b ldr r3, [r3, #36] ; 0x24 80043b4: 4a2d ldr r2, [pc, #180] ; (800446c ) 80043b6: 62d3 str r3, [r2, #44] ; 0x2c 80043b8: 4b2c ldr r3, [pc, #176] ; (800446c ) 80043ba: 8e1b ldrh r3, [r3, #48] ; 0x30 80043bc: 3301 adds r3, #1 80043be: b29a uxth r2, r3 80043c0: 4b2a ldr r3, [pc, #168] ; (800446c ) 80043c2: 861a strh r2, [r3, #48] ; 0x30 80043c4: 4b29 ldr r3, [pc, #164] ; (800446c ) 80043c6: 6b5b ldr r3, [r3, #52] ; 0x34 80043c8: 2b00 cmp r3, #0 80043ca: d004 beq.n 80043d6 80043cc: 4b27 ldr r3, [pc, #156] ; (800446c ) 80043ce: 6b5b ldr r3, [r3, #52] ; 0x34 80043d0: 79fa ldrb r2, [r7, #7] 80043d2: 4610 mov r0, r2 80043d4: 4798 blx r3 80043d6: 4b25 ldr r3, [pc, #148] ; (800446c ) 80043d8: 685b ldr r3, [r3, #4] 80043da: 4618 mov r0, r3 80043dc: f7ff f9a0 bl 8003720 80043e0: 4603 mov r3, r0 80043e2: 2b00 cmp r3, #0 80043e4: d03f beq.n 8004466 80043e6: 4b21 ldr r3, [pc, #132] ; (800446c ) 80043e8: 881b ldrh r3, [r3, #0] 80043ea: f245 52aa movw r2, #21930 ; 0x55aa 80043ee: 4293 cmp r3, r2 80043f0: d005 beq.n 80043fe 80043f2: 4b1e ldr r3, [pc, #120] ; (800446c ) 80043f4: 685b ldr r3, [r3, #4] 80043f6: 4618 mov r0, r3 80043f8: f7ff f9d1 bl 800379e 80043fc: e033 b.n 8004466 80043fe: 4b1b ldr r3, [pc, #108] ; (800446c ) 8004400: 8b9b ldrh r3, [r3, #28] 8004402: 2b00 cmp r3, #0 8004404: d025 beq.n 8004452 8004406: 4b19 ldr r3, [pc, #100] ; (800446c ) 8004408: 685a ldr r2, [r3, #4] 800440a: 4b18 ldr r3, [pc, #96] ; (800446c ) 800440c: 695b ldr r3, [r3, #20] 800440e: 781b ldrb r3, [r3, #0] 8004410: 4619 mov r1, r3 8004412: 4610 mov r0, r2 8004414: f7ff f9de bl 80037d4 8004418: 4b14 ldr r3, [pc, #80] ; (800446c ) 800441a: 695b ldr r3, [r3, #20] 800441c: 3301 adds r3, #1 800441e: 4a13 ldr r2, [pc, #76] ; (800446c ) 8004420: 6153 str r3, [r2, #20] 8004422: 4b12 ldr r3, [pc, #72] ; (800446c ) 8004424: 695a ldr r2, [r3, #20] 8004426: 4b11 ldr r3, [pc, #68] ; (800446c ) 8004428: 6919 ldr r1, [r3, #16] 800442a: 4b10 ldr r3, [pc, #64] ; (800446c ) 800442c: 68db ldr r3, [r3, #12] 800442e: 3b01 subs r3, #1 8004430: 440b add r3, r1 8004432: 429a cmp r2, r3 8004434: d903 bls.n 800443e 8004436: 4b0d ldr r3, [pc, #52] ; (800446c ) 8004438: 691b ldr r3, [r3, #16] 800443a: 4a0c ldr r2, [pc, #48] ; (800446c ) 800443c: 6153 str r3, [r2, #20] 800443e: 4b0b ldr r3, [pc, #44] ; (800446c ) 8004440: 8b9b ldrh r3, [r3, #28] 8004442: 3b01 subs r3, #1 8004444: b29a uxth r2, r3 8004446: 4b09 ldr r3, [pc, #36] ; (800446c ) 8004448: 839a strh r2, [r3, #28] 800444a: 4b08 ldr r3, [pc, #32] ; (800446c ) 800444c: 2201 movs r2, #1 800444e: 83da strh r2, [r3, #30] 8004450: e009 b.n 8004466 8004452: 4b06 ldr r3, [pc, #24] ; (800446c ) 8004454: 2200 movs r2, #0 8004456: 83da strh r2, [r3, #30] 8004458: 4b04 ldr r3, [pc, #16] ; (800446c ) 800445a: 685b ldr r3, [r3, #4] 800445c: 4618 mov r0, r3 800445e: f7ff f99e bl 800379e 8004462: e000 b.n 8004466 8004464: bf00 nop 8004466: 3708 adds r7, #8 8004468: 46bd mov sp, r7 800446a: bd80 pop {r7, pc} 800446c: 20000f7c .word 0x20000f7c 08004470 : int g_cmdNum = 0; //------------------------------------------------------------------------- void ChangeToUper(char * str) { 8004470: b480 push {r7} 8004472: b085 sub sp, #20 8004474: af00 add r7, sp, #0 8004476: 6078 str r0, [r7, #4] char tmp; while (str != NULL) 8004478: e014 b.n 80044a4 { tmp = *str; 800447a: 687b ldr r3, [r7, #4] 800447c: 781b ldrb r3, [r3, #0] 800447e: 73fb strb r3, [r7, #15] if (tmp == 0) 8004480: 7bfb ldrb r3, [r7, #15] 8004482: 2b00 cmp r3, #0 8004484: d012 beq.n 80044ac { break; } if (tmp >= 'a' && tmp <= 'z') 8004486: 7bfb ldrb r3, [r7, #15] 8004488: 2b60 cmp r3, #96 ; 0x60 800448a: d908 bls.n 800449e 800448c: 7bfb ldrb r3, [r7, #15] 800448e: 2b7a cmp r3, #122 ; 0x7a 8004490: d805 bhi.n 800449e { tmp -= ('a'-'A'); 8004492: 7bfb ldrb r3, [r7, #15] 8004494: 3b20 subs r3, #32 8004496: 73fb strb r3, [r7, #15] *str = tmp; 8004498: 687b ldr r3, [r7, #4] 800449a: 7bfa ldrb r2, [r7, #15] 800449c: 701a strb r2, [r3, #0] } str++; 800449e: 687b ldr r3, [r7, #4] 80044a0: 3301 adds r3, #1 80044a2: 607b str r3, [r7, #4] while (str != NULL) 80044a4: 687b ldr r3, [r7, #4] 80044a6: 2b00 cmp r3, #0 80044a8: d1e7 bne.n 800447a } } 80044aa: e000 b.n 80044ae break; 80044ac: bf00 nop } 80044ae: bf00 nop 80044b0: 3714 adds r7, #20 80044b2: 46bd mov sp, r7 80044b4: bc80 pop {r7} 80044b6: 4770 bx lr 080044b8 : int AddShellCmd(const char*pCmd, const char*pHelp, ShellFunc func) { 80044b8: b580 push {r7, lr} 80044ba: b084 sub sp, #16 80044bc: af00 add r7, sp, #0 80044be: 60f8 str r0, [r7, #12] 80044c0: 60b9 str r1, [r7, #8] 80044c2: 607a str r2, [r7, #4] if (g_cmdNum < MAX_CMD_NUM) 80044c4: 4b31 ldr r3, [pc, #196] ; (800458c ) 80044c6: 681b ldr r3, [r3, #0] 80044c8: 2b1f cmp r3, #31 80044ca: dc53 bgt.n 8004574 { if ((strlen(pCmd) >= MAX_CMD_STR)) 80044cc: 68f8 ldr r0, [r7, #12] 80044ce: f7fb fea9 bl 8000224 80044d2: 4603 mov r3, r0 80044d4: 2b0b cmp r3, #11 80044d6: d918 bls.n 800450a { memcpy(g_cmdList[g_cmdNum].cmdstr, pCmd, MAX_CMD_STR-1); 80044d8: 4b2c ldr r3, [pc, #176] ; (800458c ) 80044da: 681a ldr r2, [r3, #0] 80044dc: 4613 mov r3, r2 80044de: 009b lsls r3, r3, #2 80044e0: 4413 add r3, r2 80044e2: 009b lsls r3, r3, #2 80044e4: 4a2a ldr r2, [pc, #168] ; (8004590 ) 80044e6: 4413 add r3, r2 80044e8: 220b movs r2, #11 80044ea: 68f9 ldr r1, [r7, #12] 80044ec: 4618 mov r0, r3 80044ee: f005 f9f9 bl 80098e4 g_cmdList[g_cmdNum].cmdstr[MAX_CMD_STR-1] = 0; 80044f2: 4b26 ldr r3, [pc, #152] ; (800458c ) 80044f4: 681a ldr r2, [r3, #0] 80044f6: 4926 ldr r1, [pc, #152] ; (8004590 ) 80044f8: 4613 mov r3, r2 80044fa: 009b lsls r3, r3, #2 80044fc: 4413 add r3, r2 80044fe: 009b lsls r3, r3, #2 8004500: 440b add r3, r1 8004502: 330b adds r3, #11 8004504: 2200 movs r2, #0 8004506: 701a strb r2, [r3, #0] 8004508: e00b b.n 8004522 } else { strcpy(g_cmdList[g_cmdNum].cmdstr, pCmd); 800450a: 4b20 ldr r3, [pc, #128] ; (800458c ) 800450c: 681a ldr r2, [r3, #0] 800450e: 4613 mov r3, r2 8004510: 009b lsls r3, r3, #2 8004512: 4413 add r3, r2 8004514: 009b lsls r3, r3, #2 8004516: 4a1e ldr r2, [pc, #120] ; (8004590 ) 8004518: 4413 add r3, r2 800451a: 68f9 ldr r1, [r7, #12] 800451c: 4618 mov r0, r3 800451e: f005 fa71 bl 8009a04 } ChangeToUper(g_cmdList[g_cmdNum].cmdstr); 8004522: 4b1a ldr r3, [pc, #104] ; (800458c ) 8004524: 681a ldr r2, [r3, #0] 8004526: 4613 mov r3, r2 8004528: 009b lsls r3, r3, #2 800452a: 4413 add r3, r2 800452c: 009b lsls r3, r3, #2 800452e: 4a18 ldr r2, [pc, #96] ; (8004590 ) 8004530: 4413 add r3, r2 8004532: 4618 mov r0, r3 8004534: f7ff ff9c bl 8004470 #if (1) // ¸ÄΪָÕë g_cmdList[g_cmdNum].helpstr = pHelp; 8004538: 4b14 ldr r3, [pc, #80] ; (800458c ) 800453a: 681a ldr r2, [r3, #0] 800453c: 4914 ldr r1, [pc, #80] ; (8004590 ) 800453e: 4613 mov r3, r2 8004540: 009b lsls r3, r3, #2 8004542: 4413 add r3, r2 8004544: 009b lsls r3, r3, #2 8004546: 440b add r3, r1 8004548: 330c adds r3, #12 800454a: 68ba ldr r2, [r7, #8] 800454c: 601a str r2, [r3, #0] else { strcpy(g_cmdList[g_cmdNum].helpstr, pHelp); } #endif g_cmdList[g_cmdNum].shellfunc = func; 800454e: 4b0f ldr r3, [pc, #60] ; (800458c ) 8004550: 681a ldr r2, [r3, #0] 8004552: 490f ldr r1, [pc, #60] ; (8004590 ) 8004554: 4613 mov r3, r2 8004556: 009b lsls r3, r3, #2 8004558: 4413 add r3, r2 800455a: 009b lsls r3, r3, #2 800455c: 440b add r3, r1 800455e: 3310 adds r3, #16 8004560: 687a ldr r2, [r7, #4] 8004562: 601a str r2, [r3, #0] g_cmdNum++; 8004564: 4b09 ldr r3, [pc, #36] ; (800458c ) 8004566: 681b ldr r3, [r3, #0] 8004568: 3301 adds r3, #1 800456a: 4a08 ldr r2, [pc, #32] ; (800458c ) 800456c: 6013 str r3, [r2, #0] return g_cmdNum; 800456e: 4b07 ldr r3, [pc, #28] ; (800458c ) 8004570: 681b ldr r3, [r3, #0] 8004572: e007 b.n 8004584 } else { printf("AddShellCmd failed, g_cmdNum=%d\r\n", g_cmdNum); 8004574: 4b05 ldr r3, [pc, #20] ; (800458c ) 8004576: 681b ldr r3, [r3, #0] 8004578: 4619 mov r1, r3 800457a: 4806 ldr r0, [pc, #24] ; (8004594 ) 800457c: f005 f9c6 bl 800990c return -1; 8004580: f04f 33ff mov.w r3, #4294967295 } } 8004584: 4618 mov r0, r3 8004586: 3710 adds r7, #16 8004588: 46bd mov sp, r7 800458a: bd80 pop {r7, pc} 800458c: 20000560 .word 0x20000560 8004590: 20001034 .word 0x20001034 8004594: 0800ab5c .word 0x0800ab5c 08004598 <__NVIC_SetPriority>: { 8004598: b480 push {r7} 800459a: b083 sub sp, #12 800459c: af00 add r7, sp, #0 800459e: 4603 mov r3, r0 80045a0: 6039 str r1, [r7, #0] 80045a2: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) 80045a4: f997 3007 ldrsb.w r3, [r7, #7] 80045a8: 2b00 cmp r3, #0 80045aa: db0a blt.n 80045c2 <__NVIC_SetPriority+0x2a> NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 80045ac: 683b ldr r3, [r7, #0] 80045ae: b2da uxtb r2, r3 80045b0: 490c ldr r1, [pc, #48] ; (80045e4 <__NVIC_SetPriority+0x4c>) 80045b2: f997 3007 ldrsb.w r3, [r7, #7] 80045b6: 0112 lsls r2, r2, #4 80045b8: b2d2 uxtb r2, r2 80045ba: 440b add r3, r1 80045bc: f883 2300 strb.w r2, [r3, #768] ; 0x300 } 80045c0: e00a b.n 80045d8 <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); 80045c2: 683b ldr r3, [r7, #0] 80045c4: b2da uxtb r2, r3 80045c6: 4908 ldr r1, [pc, #32] ; (80045e8 <__NVIC_SetPriority+0x50>) 80045c8: 79fb ldrb r3, [r7, #7] 80045ca: f003 030f and.w r3, r3, #15 80045ce: 3b04 subs r3, #4 80045d0: 0112 lsls r2, r2, #4 80045d2: b2d2 uxtb r2, r2 80045d4: 440b add r3, r1 80045d6: 761a strb r2, [r3, #24] } 80045d8: bf00 nop 80045da: 370c adds r7, #12 80045dc: 46bd mov sp, r7 80045de: bc80 pop {r7} 80045e0: 4770 bx lr 80045e2: bf00 nop 80045e4: e000e100 .word 0xe000e100 80045e8: e000ed00 .word 0xe000ed00 080045ec : { 80045ec: b580 push {r7, lr} 80045ee: b082 sub sp, #8 80045f0: af00 add r7, sp, #0 80045f2: 6078 str r0, [r7, #4] if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) 80045f4: 687b ldr r3, [r7, #4] 80045f6: 3b01 subs r3, #1 80045f8: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 80045fc: d301 bcc.n 8004602 return (1UL); /* Reload value impossible */ 80045fe: 2301 movs r3, #1 8004600: e00f b.n 8004622 SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ 8004602: 4a0a ldr r2, [pc, #40] ; (800462c ) 8004604: 687b ldr r3, [r7, #4] 8004606: 3b01 subs r3, #1 8004608: 6053 str r3, [r2, #4] NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ 800460a: 210f movs r1, #15 800460c: f04f 30ff mov.w r0, #4294967295 8004610: f7ff ffc2 bl 8004598 <__NVIC_SetPriority> SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ 8004614: 4b05 ldr r3, [pc, #20] ; (800462c ) 8004616: 2200 movs r2, #0 8004618: 609a str r2, [r3, #8] SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | 800461a: 4b04 ldr r3, [pc, #16] ; (800462c ) 800461c: 2207 movs r2, #7 800461e: 601a str r2, [r3, #0] return (0UL); /* Function successful */ 8004620: 2300 movs r3, #0 } 8004622: 4618 mov r0, r3 8004624: 3708 adds r7, #8 8004626: 46bd mov sp, r7 8004628: bd80 pop {r7, pc} 800462a: bf00 nop 800462c: e000e010 .word 0xe000e010 08004630 : int g_triggerInited = 0; //------------------------------------------------------- void InitTrigger(void) { 8004630: b580 push {r7, lr} 8004632: af00 add r7, sp, #0 if (g_triggerInited == 0) 8004634: 4b12 ldr r3, [pc, #72] ; (8004680 ) 8004636: 681b ldr r3, [r3, #0] 8004638: 2b00 cmp r3, #0 800463a: d11f bne.n 800467c { SysTick_Config(MS_SYS_TICK); // ϵͳʱÖÓ²úÉú1msÖÐ¶Ï 800463c: 4811 ldr r0, [pc, #68] ; (8004684 ) 800463e: f7ff ffd5 bl 80045ec NVIC_SetPriority(SysTick_IRQn, 0); 8004642: 2100 movs r1, #0 8004644: f04f 30ff mov.w r0, #4294967295 8004648: f7ff ffa6 bl 8004598 <__NVIC_SetPriority> g_mstimer = 0; 800464c: 4b0e ldr r3, [pc, #56] ; (8004688 ) 800464e: 2200 movs r2, #0 8004650: 601a str r2, [r3, #0] // ±äÁ¿ g_triggerListNum = 0; 8004652: 4b0e ldr r3, [pc, #56] ; (800468c ) 8004654: 2200 movs r2, #0 8004656: 601a str r2, [r3, #0] memset(&g_triggerCtrlList, 0, sizeof(TriggerCtrl)*MAX_TRIGGER_TASK); 8004658: 22a0 movs r2, #160 ; 0xa0 800465a: 2100 movs r1, #0 800465c: 480c ldr r0, [pc, #48] ; (8004690 ) 800465e: f005 f94c bl 80098fa g_triggerTimer = 0; 8004662: 4b0c ldr r3, [pc, #48] ; (8004694 ) 8004664: 2200 movs r2, #0 8004666: 601a str r2, [r3, #0] g_triggerTask = 0; 8004668: 4b0b ldr r3, [pc, #44] ; (8004698 ) 800466a: 2200 movs r2, #0 800466c: 601a str r2, [r3, #0] g_triggerInited = 1; 800466e: 4b04 ldr r3, [pc, #16] ; (8004680 ) 8004670: 2201 movs r2, #1 8004672: 601a str r2, [r3, #0] InitIWDog(1000); // 1Ã븴λ¿´ÃŹ· 8004674: f44f 707a mov.w r0, #1000 ; 0x3e8 8004678: f7ff f800 bl 800367c } } 800467c: bf00 nop 800467e: bd80 pop {r7, pc} 8004680: 20000574 .word 0x20000574 8004684: 00011940 .word 0x00011940 8004688: 20000564 .word 0x20000564 800468c: 20000568 .word 0x20000568 8004690: 200012b4 .word 0x200012b4 8004694: 2000056c .word 0x2000056c 8004698: 20000570 .word 0x20000570 0800469c : return rslt; } void TriggerExTask(void) { 800469c: b580 push {r7, lr} 800469e: b082 sub sp, #8 80046a0: af00 add r7, sp, #0 int i; if (g_triggerInited != 0) 80046a2: 4b21 ldr r3, [pc, #132] ; (8004728 ) 80046a4: 681b ldr r3, [r3, #0] 80046a6: 2b00 cmp r3, #0 80046a8: d03a beq.n 8004720 { for (i = 0; i < g_triggerListNum; i++) 80046aa: 2300 movs r3, #0 80046ac: 607b str r3, [r7, #4] 80046ae: e032 b.n 8004716 { if ((g_mstimer % g_triggerCtrlList[i].triggerTimer) == 0) 80046b0: 4b1e ldr r3, [pc, #120] ; (800472c ) 80046b2: 681b ldr r3, [r3, #0] 80046b4: 461a mov r2, r3 80046b6: 491e ldr r1, [pc, #120] ; (8004730 ) 80046b8: 687b ldr r3, [r7, #4] 80046ba: 011b lsls r3, r3, #4 80046bc: 440b add r3, r1 80046be: 681b ldr r3, [r3, #0] 80046c0: fbb2 f1f3 udiv r1, r2, r3 80046c4: fb03 f301 mul.w r3, r3, r1 80046c8: 1ad3 subs r3, r2, r3 80046ca: 2b00 cmp r3, #0 80046cc: d120 bne.n 8004710 { if (g_triggerCtrlList[i].triggerExFunc != NULL) 80046ce: 4a18 ldr r2, [pc, #96] ; (8004730 ) 80046d0: 687b ldr r3, [r7, #4] 80046d2: 011b lsls r3, r3, #4 80046d4: 4413 add r3, r2 80046d6: 3304 adds r3, #4 80046d8: 681b ldr r3, [r3, #0] 80046da: 2b00 cmp r3, #0 80046dc: d006 beq.n 80046ec { g_triggerCtrlList[i].triggerExFunc(); 80046de: 4a14 ldr r2, [pc, #80] ; (8004730 ) 80046e0: 687b ldr r3, [r7, #4] 80046e2: 011b lsls r3, r3, #4 80046e4: 4413 add r3, r2 80046e6: 3304 adds r3, #4 80046e8: 681b ldr r3, [r3, #0] 80046ea: 4798 blx r3 } if (g_triggerCtrlList[i].triggerTaskFunc != NULL) 80046ec: 4a10 ldr r2, [pc, #64] ; (8004730 ) 80046ee: 687b ldr r3, [r7, #4] 80046f0: 011b lsls r3, r3, #4 80046f2: 4413 add r3, r2 80046f4: 330c adds r3, #12 80046f6: 681b ldr r3, [r3, #0] 80046f8: 2b00 cmp r3, #0 80046fa: d009 beq.n 8004710 { g_triggerCtrlList[i].triggerTask = 1; 80046fc: 4a0c ldr r2, [pc, #48] ; (8004730 ) 80046fe: 687b ldr r3, [r7, #4] 8004700: 011b lsls r3, r3, #4 8004702: 4413 add r3, r2 8004704: 3308 adds r3, #8 8004706: 2201 movs r2, #1 8004708: 601a str r2, [r3, #0] g_triggerTask = 1; 800470a: 4b0a ldr r3, [pc, #40] ; (8004734 ) 800470c: 2201 movs r2, #1 800470e: 601a str r2, [r3, #0] for (i = 0; i < g_triggerListNum; i++) 8004710: 687b ldr r3, [r7, #4] 8004712: 3301 adds r3, #1 8004714: 607b str r3, [r7, #4] 8004716: 4b08 ldr r3, [pc, #32] ; (8004738 ) 8004718: 681b ldr r3, [r3, #0] 800471a: 687a ldr r2, [r7, #4] 800471c: 429a cmp r2, r3 800471e: dbc7 blt.n 80046b0 } } } } } 8004720: bf00 nop 8004722: 3708 adds r7, #8 8004724: 46bd mov sp, r7 8004726: bd80 pop {r7, pc} 8004728: 20000574 .word 0x20000574 800472c: 20000564 .word 0x20000564 8004730: 200012b4 .word 0x200012b4 8004734: 20000570 .word 0x20000570 8004738: 20000568 .word 0x20000568 0800473c : } } #else // ¶¨Ê±´¥·¢ÈÎÎñ void TriggerTask(void) { 800473c: b580 push {r7, lr} 800473e: b082 sub sp, #8 8004740: af00 add r7, sp, #0 int i; if (g_triggerInited != 0 && g_triggerTask != 0) 8004742: 4b16 ldr r3, [pc, #88] ; (800479c ) 8004744: 681b ldr r3, [r3, #0] 8004746: 2b00 cmp r3, #0 8004748: d024 beq.n 8004794 800474a: 4b15 ldr r3, [pc, #84] ; (80047a0 ) 800474c: 681b ldr r3, [r3, #0] 800474e: 2b00 cmp r3, #0 8004750: d020 beq.n 8004794 { for (i = 0; i < g_triggerListNum; i++) 8004752: 2300 movs r3, #0 8004754: 607b str r3, [r7, #4] 8004756: e018 b.n 800478a { if (g_triggerCtrlList[i].triggerTask != 0) 8004758: 4a12 ldr r2, [pc, #72] ; (80047a4 ) 800475a: 687b ldr r3, [r7, #4] 800475c: 011b lsls r3, r3, #4 800475e: 4413 add r3, r2 8004760: 3308 adds r3, #8 8004762: 681b ldr r3, [r3, #0] 8004764: 2b00 cmp r3, #0 8004766: d00d beq.n 8004784 { g_triggerCtrlList[i].triggerTask = 0; 8004768: 4a0e ldr r2, [pc, #56] ; (80047a4 ) 800476a: 687b ldr r3, [r7, #4] 800476c: 011b lsls r3, r3, #4 800476e: 4413 add r3, r2 8004770: 3308 adds r3, #8 8004772: 2200 movs r2, #0 8004774: 601a str r2, [r3, #0] g_triggerCtrlList[i].triggerTaskFunc(); 8004776: 4a0b ldr r2, [pc, #44] ; (80047a4 ) 8004778: 687b ldr r3, [r7, #4] 800477a: 011b lsls r3, r3, #4 800477c: 4413 add r3, r2 800477e: 330c adds r3, #12 8004780: 681b ldr r3, [r3, #0] 8004782: 4798 blx r3 for (i = 0; i < g_triggerListNum; i++) 8004784: 687b ldr r3, [r7, #4] 8004786: 3301 adds r3, #1 8004788: 607b str r3, [r7, #4] 800478a: 4b07 ldr r3, [pc, #28] ; (80047a8 ) 800478c: 681b ldr r3, [r3, #0] 800478e: 687a ldr r2, [r7, #4] 8004790: 429a cmp r2, r3 8004792: dbe1 blt.n 8004758 } } } } 8004794: bf00 nop 8004796: 3708 adds r7, #8 8004798: 46bd mov sp, r7 800479a: bd80 pop {r7, pc} 800479c: 20000574 .word 0x20000574 80047a0: 20000570 .word 0x20000570 80047a4: 200012b4 .word 0x200012b4 80047a8: 20000568 .word 0x20000568 080047ac : #endif // 1ms ÖÐ¶Ï void TriggerIntProc(void) { 80047ac: b580 push {r7, lr} 80047ae: af00 add r7, sp, #0 g_mstimer++; 80047b0: 4b0f ldr r3, [pc, #60] ; (80047f0 ) 80047b2: 681b ldr r3, [r3, #0] 80047b4: 3301 adds r3, #1 80047b6: 4a0e ldr r2, [pc, #56] ; (80047f0 ) 80047b8: 6013 str r3, [r2, #0] TriggerExTask(); 80047ba: f7ff ff6f bl 800469c if ((g_mstimer%TRIGGER_TIME) == 0) // ÿ10msÖ´ÐÐÒ»´Î 80047be: 4b0c ldr r3, [pc, #48] ; (80047f0 ) 80047c0: 6819 ldr r1, [r3, #0] 80047c2: 4b0c ldr r3, [pc, #48] ; (80047f4 ) 80047c4: fb83 2301 smull r2, r3, r3, r1 80047c8: 109a asrs r2, r3, #2 80047ca: 17cb asrs r3, r1, #31 80047cc: 1ad2 subs r2, r2, r3 80047ce: 4613 mov r3, r2 80047d0: 009b lsls r3, r3, #2 80047d2: 4413 add r3, r2 80047d4: 005b lsls r3, r3, #1 80047d6: 1aca subs r2, r1, r3 80047d8: 2a00 cmp r2, #0 80047da: d106 bne.n 80047ea { g_triggerTimer++; 80047dc: 4b06 ldr r3, [pc, #24] ; (80047f8 ) 80047de: 681b ldr r3, [r3, #0] 80047e0: 3301 adds r3, #1 80047e2: 4a05 ldr r2, [pc, #20] ; (80047f8 ) 80047e4: 6013 str r3, [r2, #0] FeedIWDog(); // ι¿´ÃŹ· 80047e6: f7fe ff62 bl 80036ae } } 80047ea: bf00 nop 80047ec: bd80 pop {r7, pc} 80047ee: bf00 nop 80047f0: 20000564 .word 0x20000564 80047f4: 66666667 .word 0x66666667 80047f8: 2000056c .word 0x2000056c 080047fc : return (stim + 1) * 10000 - ((val+1) / NS100_SYS_TICK); } // µÃµ½Ê±¼ä¼ÆÊý, µ¥Î»1us u32 GetUsSoftTimer(void) { 80047fc: b480 push {r7} 80047fe: b085 sub sp, #20 8004800: af00 add r7, sp, #0 u32 volatile val, stim, stim2; stim = g_mstimer; // ¶ÁÈ¡ 8004802: 4b12 ldr r3, [pc, #72] ; (800484c ) 8004804: 681b ldr r3, [r3, #0] 8004806: 60bb str r3, [r7, #8] val = SysTick->VAL; 8004808: 4b11 ldr r3, [pc, #68] ; (8004850 ) 800480a: 689b ldr r3, [r3, #8] 800480c: 60fb str r3, [r7, #12] stim2 = g_mstimer; // ÔٴζÁÈ¡ 800480e: 4b0f ldr r3, [pc, #60] ; (800484c ) 8004810: 681b ldr r3, [r3, #0] 8004812: 607b str r3, [r7, #4] if (stim != stim2) // Èç¹û²»Í¬, ˵Ã÷Öмä²úÉúÁËÖÐ¶Ï 8004814: 68ba ldr r2, [r7, #8] 8004816: 687b ldr r3, [r7, #4] 8004818: 429a cmp r2, r3 800481a: d004 beq.n 8004826 { val = SysTick->VAL; // ÖØÐ¶ÁÈ¡ 800481c: 4b0c ldr r3, [pc, #48] ; (8004850 ) 800481e: 689b ldr r3, [r3, #8] 8004820: 60fb str r3, [r7, #12] stim = stim2; 8004822: 687b ldr r3, [r7, #4] 8004824: 60bb str r3, [r7, #8] } return (stim + 1) * 1000 - ((val+1) / US_SYS_TICK); 8004826: 68bb ldr r3, [r7, #8] 8004828: 3301 adds r3, #1 800482a: f44f 727a mov.w r2, #1000 ; 0x3e8 800482e: fb02 f203 mul.w r2, r2, r3 8004832: 68fb ldr r3, [r7, #12] 8004834: 3301 adds r3, #1 8004836: 4907 ldr r1, [pc, #28] ; (8004854 ) 8004838: fba1 1303 umull r1, r3, r1, r3 800483c: 091b lsrs r3, r3, #4 800483e: 1ad3 subs r3, r2, r3 } 8004840: 4618 mov r0, r3 8004842: 3714 adds r7, #20 8004844: 46bd mov sp, r7 8004846: bc80 pop {r7} 8004848: 4770 bx lr 800484a: bf00 nop 800484c: 20000564 .word 0x20000564 8004850: e000e010 .word 0xe000e010 8004854: 38e38e39 .word 0x38e38e39 08004858 : return g_mstimer; } // µÃµ½Ê±¼ä¼ÆÊý, µ¥Î»:1ms ¾«¶È:10ms u32 GetMsSoftTimer10(void) { 8004858: b480 push {r7} 800485a: af00 add r7, sp, #0 return g_mstimer; 800485c: 4b02 ldr r3, [pc, #8] ; (8004868 ) 800485e: 681b ldr r3, [r3, #0] // return g_triggerTimer*TRIGGER_TIME; } 8004860: 4618 mov r0, r3 8004862: 46bd mov sp, r7 8004864: bc80 pop {r7} 8004866: 4770 bx lr 8004868: 20000564 .word 0x20000564 0800486c : #include "sewhdcontrol.h" #if (CONTROL_BUS == COMM_CAN) void InitSewHeadControl(SewHeadControl * pCtrl) { 800486c: b580 push {r7, lr} 800486e: b082 sub sp, #8 8004870: af00 add r7, sp, #0 8004872: 6078 str r0, [r7, #4] if (pCtrl != NULL) 8004874: 687b ldr r3, [r7, #4] 8004876: 2b00 cmp r3, #0 8004878: d004 beq.n 8004884 { memset(pCtrl, 0, sizeof(SewHeadControl)); 800487a: 228c movs r2, #140 ; 0x8c 800487c: 2100 movs r1, #0 800487e: 6878 ldr r0, [r7, #4] 8004880: f005 f83b bl 80098fa } } 8004884: bf00 nop 8004886: 3708 adds r7, #8 8004888: 46bd mov sp, r7 800488a: bd80 pop {r7, pc} 0800488c : #include "modbus_def.h" // ×¢²ámodbusͨѶº¯Êý void RegisterModbusCommFunc(ModbusCtrl* pCtrl, UsartSendData send, UsartGetData get, UsartCleanRsBuf clean, IsUsartSendOver sdover, OnOffFunc outen, OnOffFunc outdis) { 800488c: b480 push {r7} 800488e: b085 sub sp, #20 8004890: af00 add r7, sp, #0 8004892: 60f8 str r0, [r7, #12] 8004894: 60b9 str r1, [r7, #8] 8004896: 607a str r2, [r7, #4] 8004898: 603b str r3, [r7, #0] pCtrl->ModBusCommSend = send; 800489a: 68fb ldr r3, [r7, #12] 800489c: 68ba ldr r2, [r7, #8] 800489e: 60da str r2, [r3, #12] pCtrl->ModBusCommReceive = get; 80048a0: 68fb ldr r3, [r7, #12] 80048a2: 687a ldr r2, [r7, #4] 80048a4: 611a str r2, [r3, #16] pCtrl->ModBusCommCleanRsBuf = clean; 80048a6: 68fb ldr r3, [r7, #12] 80048a8: 683a ldr r2, [r7, #0] 80048aa: 615a str r2, [r3, #20] pCtrl->IsModBusCommSendOver = sdover; 80048ac: 68fb ldr r3, [r7, #12] 80048ae: 69ba ldr r2, [r7, #24] 80048b0: 619a str r2, [r3, #24] pCtrl->CommOutEn = outen; 80048b2: 68fb ldr r3, [r7, #12] 80048b4: 69fa ldr r2, [r7, #28] 80048b6: 61da str r2, [r3, #28] pCtrl->CommOutDis = outdis; 80048b8: 68fb ldr r3, [r7, #12] 80048ba: 6a3a ldr r2, [r7, #32] 80048bc: 621a str r2, [r3, #32] } 80048be: bf00 nop 80048c0: 3714 adds r7, #20 80048c2: 46bd mov sp, r7 80048c4: bc80 pop {r7} 80048c6: 4770 bx lr 080048c8 : //----------------------------------------------------------------- // ĬÈϺ¯Êý int DefSendData(u8 * pDatBuf, int len) { 80048c8: b480 push {r7} 80048ca: b083 sub sp, #12 80048cc: af00 add r7, sp, #0 80048ce: 6078 str r0, [r7, #4] 80048d0: 6039 str r1, [r7, #0] return 0; 80048d2: 2300 movs r3, #0 } 80048d4: 4618 mov r0, r3 80048d6: 370c adds r7, #12 80048d8: 46bd mov sp, r7 80048da: bc80 pop {r7} 80048dc: 4770 bx lr 080048de : int DefGetData(u8 * pDat, int expectLen) { 80048de: b480 push {r7} 80048e0: b083 sub sp, #12 80048e2: af00 add r7, sp, #0 80048e4: 6078 str r0, [r7, #4] 80048e6: 6039 str r1, [r7, #0] return 0; 80048e8: 2300 movs r3, #0 } 80048ea: 4618 mov r0, r3 80048ec: 370c adds r7, #12 80048ee: 46bd mov sp, r7 80048f0: bc80 pop {r7} 80048f2: 4770 bx lr 080048f4 : int DefCleanRsBuf(void) { 80048f4: b480 push {r7} 80048f6: af00 add r7, sp, #0 return 0; 80048f8: 2300 movs r3, #0 } 80048fa: 4618 mov r0, r3 80048fc: 46bd mov sp, r7 80048fe: bc80 pop {r7} 8004900: 4770 bx lr 08004902 : int DefIsSendOver(void) { 8004902: b480 push {r7} 8004904: af00 add r7, sp, #0 return 0; 8004906: 2300 movs r3, #0 } 8004908: 4618 mov r0, r3 800490a: 46bd mov sp, r7 800490c: bc80 pop {r7} 800490e: 4770 bx lr 08004910 : void DefOutEn(void) { 8004910: b480 push {r7} 8004912: af00 add r7, sp, #0 } 8004914: bf00 nop 8004916: 46bd mov sp, r7 8004918: bc80 pop {r7} 800491a: 4770 bx lr 0800491c : void DefOutDis(void) { 800491c: b480 push {r7} 800491e: af00 add r7, sp, #0 } 8004920: bf00 nop 8004922: 46bd mov sp, r7 8004924: bc80 pop {r7} 8004926: 4770 bx lr 08004928 : // ASCIIÂëģʽ //----------------------------------------------------------------- // ¹¦ÄÜ:ASCII -> RTU u8 AsciiToRtu(u8 ascii) { 8004928: b480 push {r7} 800492a: b083 sub sp, #12 800492c: af00 add r7, sp, #0 800492e: 4603 mov r3, r0 8004930: 71fb strb r3, [r7, #7] if ((ascii >= '0') && (ascii <= '9')) 8004932: 79fb ldrb r3, [r7, #7] 8004934: 2b2f cmp r3, #47 ; 0x2f 8004936: d906 bls.n 8004946 8004938: 79fb ldrb r3, [r7, #7] 800493a: 2b39 cmp r3, #57 ; 0x39 800493c: d803 bhi.n 8004946 { return ascii - '0'; 800493e: 79fb ldrb r3, [r7, #7] 8004940: 3b30 subs r3, #48 ; 0x30 8004942: b2db uxtb r3, r3 8004944: e014 b.n 8004970 } else if ((ascii >= 'A') && (ascii <= 'F')) 8004946: 79fb ldrb r3, [r7, #7] 8004948: 2b40 cmp r3, #64 ; 0x40 800494a: d906 bls.n 800495a 800494c: 79fb ldrb r3, [r7, #7] 800494e: 2b46 cmp r3, #70 ; 0x46 8004950: d803 bhi.n 800495a { return ascii - 'A' + 10; 8004952: 79fb ldrb r3, [r7, #7] 8004954: 3b37 subs r3, #55 ; 0x37 8004956: b2db uxtb r3, r3 8004958: e00a b.n 8004970 } else if ((ascii >= 'a') && (ascii <= 'f')) 800495a: 79fb ldrb r3, [r7, #7] 800495c: 2b60 cmp r3, #96 ; 0x60 800495e: d906 bls.n 800496e 8004960: 79fb ldrb r3, [r7, #7] 8004962: 2b66 cmp r3, #102 ; 0x66 8004964: d803 bhi.n 800496e { return ascii - 'a' + 10; 8004966: 79fb ldrb r3, [r7, #7] 8004968: 3b57 subs r3, #87 ; 0x57 800496a: b2db uxtb r3, r3 800496c: e000 b.n 8004970 } else { return 0; 800496e: 2300 movs r3, #0 } } 8004970: 4618 mov r0, r3 8004972: 370c adds r7, #12 8004974: 46bd mov sp, r7 8004976: bc80 pop {r7} 8004978: 4770 bx lr 0800497a : //----------------------------------------------------------------- // ¹¦ÄÜ:RTU -> ASCII u8 RtuToAscii(u8 rtu) { 800497a: b480 push {r7} 800497c: b083 sub sp, #12 800497e: af00 add r7, sp, #0 8004980: 4603 mov r3, r0 8004982: 71fb strb r3, [r7, #7] if (rtu < 10) 8004984: 79fb ldrb r3, [r7, #7] 8004986: 2b09 cmp r3, #9 8004988: d803 bhi.n 8004992 { return rtu + '0'; 800498a: 79fb ldrb r3, [r7, #7] 800498c: 3330 adds r3, #48 ; 0x30 800498e: b2db uxtb r3, r3 8004990: e007 b.n 80049a2 } else if (rtu < 16) 8004992: 79fb ldrb r3, [r7, #7] 8004994: 2b0f cmp r3, #15 8004996: d803 bhi.n 80049a0 { return rtu + 'A' - 10; 8004998: 79fb ldrb r3, [r7, #7] 800499a: 3337 adds r3, #55 ; 0x37 800499c: b2db uxtb r3, r3 800499e: e000 b.n 80049a2 } else { return rtu; 80049a0: 79fb ldrb r3, [r7, #7] } } 80049a2: 4618 mov r0, r3 80049a4: 370c adds r7, #12 80049a6: 46bd mov sp, r7 80049a8: bc80 pop {r7} 80049aa: 4770 bx lr 080049ac : 0x43,0x83,0x41,0x81,0x80,0x40 }; //Ìí¼ÓÒ»¸öcrcУÑéÖµ void ModbusAddCrc16(u8 Data, u8 * pcrch, u8 * pcrcl) { 80049ac: b480 push {r7} 80049ae: b087 sub sp, #28 80049b0: af00 add r7, sp, #0 80049b2: 4603 mov r3, r0 80049b4: 60b9 str r1, [r7, #8] 80049b6: 607a str r2, [r7, #4] 80049b8: 73fb strb r3, [r7, #15] int idx; idx = *pcrch ^ Data; /*¼ÆËãCRC*/ 80049ba: 68bb ldr r3, [r7, #8] 80049bc: 781a ldrb r2, [r3, #0] 80049be: 7bfb ldrb r3, [r7, #15] 80049c0: 4053 eors r3, r2 80049c2: b2db uxtb r3, r3 80049c4: 617b str r3, [r7, #20] *pcrch = *pcrcl ^ auchCRCHi[idx]; 80049c6: 687b ldr r3, [r7, #4] 80049c8: 781a ldrb r2, [r3, #0] 80049ca: 4909 ldr r1, [pc, #36] ; (80049f0 ) 80049cc: 697b ldr r3, [r7, #20] 80049ce: 440b add r3, r1 80049d0: 781b ldrb r3, [r3, #0] 80049d2: 4053 eors r3, r2 80049d4: b2da uxtb r2, r3 80049d6: 68bb ldr r3, [r7, #8] 80049d8: 701a strb r2, [r3, #0] *pcrcl = auchCRCLo[idx]; 80049da: 4a06 ldr r2, [pc, #24] ; (80049f4 ) 80049dc: 697b ldr r3, [r7, #20] 80049de: 4413 add r3, r2 80049e0: 781a ldrb r2, [r3, #0] 80049e2: 687b ldr r3, [r7, #4] 80049e4: 701a strb r2, [r3, #0] } 80049e6: bf00 nop 80049e8: 371c adds r7, #28 80049ea: 46bd mov sp, r7 80049ec: bc80 pop {r7} 80049ee: 4770 bx lr 80049f0: 20000014 .word 0x20000014 80049f4: 20000114 .word 0x20000114 080049f8 : //----------------------------------------------------- // u8 *puchMsg; //Òª½øÐÐCRCУÑéµÄÏûÏ¢ // u16 usDataLen;// ÏûÏ¢ÖÐ×Ö½ÚÊý u16 ModbusCrc16(u8 *puchMsg, u16 usDataLen) { 80049f8: b580 push {r7, lr} 80049fa: b084 sub sp, #16 80049fc: af00 add r7, sp, #0 80049fe: 6078 str r0, [r7, #4] 8004a00: 460b mov r3, r1 8004a02: 807b strh r3, [r7, #2] u8 crch, crcl; crch = 0xff; 8004a04: 23ff movs r3, #255 ; 0xff 8004a06: 73fb strb r3, [r7, #15] crcl = 0xff; 8004a08: 23ff movs r3, #255 ; 0xff 8004a0a: 73bb strb r3, [r7, #14] while(usDataLen) /// ´«ÊäÏûÏ¢»º³åÇø 8004a0c: e00e b.n 8004a2c { ModbusAddCrc16(*puchMsg, &crch, &crcl); 8004a0e: 687b ldr r3, [r7, #4] 8004a10: 781b ldrb r3, [r3, #0] 8004a12: f107 020e add.w r2, r7, #14 8004a16: f107 010f add.w r1, r7, #15 8004a1a: 4618 mov r0, r3 8004a1c: f7ff ffc6 bl 80049ac usDataLen--; 8004a20: 887b ldrh r3, [r7, #2] 8004a22: 3b01 subs r3, #1 8004a24: 807b strh r3, [r7, #2] puchMsg++; 8004a26: 687b ldr r3, [r7, #4] 8004a28: 3301 adds r3, #1 8004a2a: 607b str r3, [r7, #4] while(usDataLen) /// ´«ÊäÏûÏ¢»º³åÇø 8004a2c: 887b ldrh r3, [r7, #2] 8004a2e: 2b00 cmp r3, #0 8004a30: d1ed bne.n 8004a0e } return((crch<<8)|crcl); 8004a32: 7bfb ldrb r3, [r7, #15] 8004a34: 021b lsls r3, r3, #8 8004a36: b21a sxth r2, r3 8004a38: 7bbb ldrb r3, [r7, #14] 8004a3a: b21b sxth r3, r3 8004a3c: 4313 orrs r3, r2 8004a3e: b21b sxth r3, r3 8004a40: b29b uxth r3, r3 } 8004a42: 4618 mov r0, r3 8004a44: 3710 adds r7, #16 8004a46: 46bd mov sp, r7 8004a48: bd80 pop {r7, pc} ... 08004a4c : stop: ֹͣλ mode: Êý¾Ýģʽ */ void InitModbus_m(int midx, int usart, BAUD_TypeDef baud, char dat, char parity, char stop, char mode) { 8004a4c: b580 push {r7, lr} 8004a4e: b088 sub sp, #32 8004a50: af04 add r7, sp, #16 8004a52: 60f8 str r0, [r7, #12] 8004a54: 60b9 str r1, [r7, #8] 8004a56: 607a str r2, [r7, #4] 8004a58: 70fb strb r3, [r7, #3] if (midx < 0 || midx >= MODBUS_M_NUM) 8004a5a: 68fb ldr r3, [r7, #12] 8004a5c: 2b00 cmp r3, #0 8004a5e: db02 blt.n 8004a66 8004a60: 68fb ldr r3, [r7, #12] 8004a62: 2b00 cmp r3, #0 8004a64: dd03 ble.n 8004a6e { printf("init modbus_m, idx error\r\n"); 8004a66: 48a2 ldr r0, [pc, #648] ; (8004cf0 ) 8004a68: f004 ffc4 bl 80099f4 return; 8004a6c: e185 b.n 8004d7a } memset(&g_modBusMCtrl[midx], 0, sizeof(ModbusCtrl)); 8004a6e: 68fa ldr r2, [r7, #12] 8004a70: 4613 mov r3, r2 8004a72: 00db lsls r3, r3, #3 8004a74: 4413 add r3, r2 8004a76: 009b lsls r3, r3, #2 8004a78: 4a9e ldr r2, [pc, #632] ; (8004cf4 ) 8004a7a: 4413 add r3, r2 8004a7c: 2224 movs r2, #36 ; 0x24 8004a7e: 2100 movs r1, #0 8004a80: 4618 mov r0, r3 8004a82: f004 ff3a bl 80098fa if (mode == 'A' || mode == 'a') 8004a86: f897 3020 ldrb.w r3, [r7, #32] 8004a8a: 2b41 cmp r3, #65 ; 0x41 8004a8c: d003 beq.n 8004a96 8004a8e: f897 3020 ldrb.w r3, [r7, #32] 8004a92: 2b61 cmp r3, #97 ; 0x61 8004a94: d109 bne.n 8004aaa { g_modBusMCtrl[midx].modBusMode = 1; 8004a96: 4997 ldr r1, [pc, #604] ; (8004cf4 ) 8004a98: 68fa ldr r2, [r7, #12] 8004a9a: 4613 mov r3, r2 8004a9c: 00db lsls r3, r3, #3 8004a9e: 4413 add r3, r2 8004aa0: 009b lsls r3, r3, #2 8004aa2: 440b add r3, r1 8004aa4: 2201 movs r2, #1 8004aa6: 601a str r2, [r3, #0] 8004aa8: e008 b.n 8004abc } else { g_modBusMCtrl[midx].modBusMode = 0; 8004aaa: 4992 ldr r1, [pc, #584] ; (8004cf4 ) 8004aac: 68fa ldr r2, [r7, #12] 8004aae: 4613 mov r3, r2 8004ab0: 00db lsls r3, r3, #3 8004ab2: 4413 add r3, r2 8004ab4: 009b lsls r3, r3, #2 8004ab6: 440b add r3, r1 8004ab8: 2200 movs r2, #0 8004aba: 601a str r2, [r3, #0] } // ÑÓʱ switch(baud) 8004abc: 687b ldr r3, [r7, #4] 8004abe: f5b3 4f16 cmp.w r3, #38400 ; 0x9600 8004ac2: d057 beq.n 8004b74 8004ac4: f5b3 4f16 cmp.w r3, #38400 ; 0x9600 8004ac8: d810 bhi.n 8004aec 8004aca: f5b3 5f16 cmp.w r3, #9600 ; 0x2580 8004ace: d02d beq.n 8004b2c 8004ad0: f5b3 5f16 cmp.w r3, #9600 ; 0x2580 8004ad4: d803 bhi.n 8004ade 8004ad6: f5b3 5f96 cmp.w r3, #4800 ; 0x12c0 8004ada: d01b beq.n 8004b14 8004adc: e08d b.n 8004bfa 8004ade: f5b3 5f61 cmp.w r3, #14400 ; 0x3840 8004ae2: d02f beq.n 8004b44 8004ae4: f5b3 4f96 cmp.w r3, #19200 ; 0x4b00 8004ae8: d038 beq.n 8004b5c 8004aea: e086 b.n 8004bfa 8004aec: f5b3 3f61 cmp.w r3, #230400 ; 0x38400 8004af0: d062 beq.n 8004bb8 8004af2: f5b3 3f61 cmp.w r3, #230400 ; 0x38400 8004af6: d806 bhi.n 8004b06 8004af8: f5b3 4f61 cmp.w r3, #57600 ; 0xe100 8004afc: d046 beq.n 8004b8c 8004afe: f5b3 3fe1 cmp.w r3, #115200 ; 0x1c200 8004b02: d04e beq.n 8004ba2 8004b04: e079 b.n 8004bfa 8004b06: f5b3 2fe1 cmp.w r3, #460800 ; 0x70800 8004b0a: d060 beq.n 8004bce 8004b0c: f5b3 2f61 cmp.w r3, #921600 ; 0xe1000 8004b10: d068 beq.n 8004be4 8004b12: e072 b.n 8004bfa { // Êý¾Ýλ + 1¸öÆðʼλ + ÆæÅ¼Ð£Ñéλ(ÎÞУÑéÔòûÓÐ) + ֹͣλ // ¸ù¾Ý²¨ÌØÂÊÀ´¼ÆËã ͨѶÑÓʱ, µ¥Î»us = 10000000 / baud(°´ÕÕÒ»¸ö×Ö½Ú10λ¼ÆËã, 8 N 1) case B4800: { g_modBusMCtrl[midx].modBusWait = 2200; 8004b14: 4977 ldr r1, [pc, #476] ; (8004cf4 ) 8004b16: 68fa ldr r2, [r7, #12] 8004b18: 4613 mov r3, r2 8004b1a: 00db lsls r3, r3, #3 8004b1c: 4413 add r3, r2 8004b1e: 009b lsls r3, r3, #2 8004b20: 440b add r3, r1 8004b22: 3308 adds r3, #8 8004b24: f640 0298 movw r2, #2200 ; 0x898 8004b28: 601a str r2, [r3, #0] break; 8004b2a: e070 b.n 8004c0e } case B9600: { g_modBusMCtrl[midx].modBusWait = 1100; 8004b2c: 4971 ldr r1, [pc, #452] ; (8004cf4 ) 8004b2e: 68fa ldr r2, [r7, #12] 8004b30: 4613 mov r3, r2 8004b32: 00db lsls r3, r3, #3 8004b34: 4413 add r3, r2 8004b36: 009b lsls r3, r3, #2 8004b38: 440b add r3, r1 8004b3a: 3308 adds r3, #8 8004b3c: f240 424c movw r2, #1100 ; 0x44c 8004b40: 601a str r2, [r3, #0] break; 8004b42: e064 b.n 8004c0e } case B14400: { g_modBusMCtrl[midx].modBusWait = 750; 8004b44: 496b ldr r1, [pc, #428] ; (8004cf4 ) 8004b46: 68fa ldr r2, [r7, #12] 8004b48: 4613 mov r3, r2 8004b4a: 00db lsls r3, r3, #3 8004b4c: 4413 add r3, r2 8004b4e: 009b lsls r3, r3, #2 8004b50: 440b add r3, r1 8004b52: 3308 adds r3, #8 8004b54: f240 22ee movw r2, #750 ; 0x2ee 8004b58: 601a str r2, [r3, #0] break; 8004b5a: e058 b.n 8004c0e } case B19200: { g_modBusMCtrl[midx].modBusWait = 600; 8004b5c: 4965 ldr r1, [pc, #404] ; (8004cf4 ) 8004b5e: 68fa ldr r2, [r7, #12] 8004b60: 4613 mov r3, r2 8004b62: 00db lsls r3, r3, #3 8004b64: 4413 add r3, r2 8004b66: 009b lsls r3, r3, #2 8004b68: 440b add r3, r1 8004b6a: 3308 adds r3, #8 8004b6c: f44f 7216 mov.w r2, #600 ; 0x258 8004b70: 601a str r2, [r3, #0] break; 8004b72: e04c b.n 8004c0e } case B38400: { g_modBusMCtrl[midx].modBusWait = 300; 8004b74: 495f ldr r1, [pc, #380] ; (8004cf4 ) 8004b76: 68fa ldr r2, [r7, #12] 8004b78: 4613 mov r3, r2 8004b7a: 00db lsls r3, r3, #3 8004b7c: 4413 add r3, r2 8004b7e: 009b lsls r3, r3, #2 8004b80: 440b add r3, r1 8004b82: 3308 adds r3, #8 8004b84: f44f 7296 mov.w r2, #300 ; 0x12c 8004b88: 601a str r2, [r3, #0] break; 8004b8a: e040 b.n 8004c0e } case B57600: { g_modBusMCtrl[midx].modBusWait = 200; 8004b8c: 4959 ldr r1, [pc, #356] ; (8004cf4 ) 8004b8e: 68fa ldr r2, [r7, #12] 8004b90: 4613 mov r3, r2 8004b92: 00db lsls r3, r3, #3 8004b94: 4413 add r3, r2 8004b96: 009b lsls r3, r3, #2 8004b98: 440b add r3, r1 8004b9a: 3308 adds r3, #8 8004b9c: 22c8 movs r2, #200 ; 0xc8 8004b9e: 601a str r2, [r3, #0] break; 8004ba0: e035 b.n 8004c0e } case B115200: { g_modBusMCtrl[midx].modBusWait = 100; 8004ba2: 4954 ldr r1, [pc, #336] ; (8004cf4 ) 8004ba4: 68fa ldr r2, [r7, #12] 8004ba6: 4613 mov r3, r2 8004ba8: 00db lsls r3, r3, #3 8004baa: 4413 add r3, r2 8004bac: 009b lsls r3, r3, #2 8004bae: 440b add r3, r1 8004bb0: 3308 adds r3, #8 8004bb2: 2264 movs r2, #100 ; 0x64 8004bb4: 601a str r2, [r3, #0] break; 8004bb6: e02a b.n 8004c0e } case B230400: { g_modBusMCtrl[midx].modBusWait = 50; 8004bb8: 494e ldr r1, [pc, #312] ; (8004cf4 ) 8004bba: 68fa ldr r2, [r7, #12] 8004bbc: 4613 mov r3, r2 8004bbe: 00db lsls r3, r3, #3 8004bc0: 4413 add r3, r2 8004bc2: 009b lsls r3, r3, #2 8004bc4: 440b add r3, r1 8004bc6: 3308 adds r3, #8 8004bc8: 2232 movs r2, #50 ; 0x32 8004bca: 601a str r2, [r3, #0] break; 8004bcc: e01f b.n 8004c0e } case B460800: { g_modBusMCtrl[midx].modBusWait = 25; 8004bce: 4949 ldr r1, [pc, #292] ; (8004cf4 ) 8004bd0: 68fa ldr r2, [r7, #12] 8004bd2: 4613 mov r3, r2 8004bd4: 00db lsls r3, r3, #3 8004bd6: 4413 add r3, r2 8004bd8: 009b lsls r3, r3, #2 8004bda: 440b add r3, r1 8004bdc: 3308 adds r3, #8 8004bde: 2219 movs r2, #25 8004be0: 601a str r2, [r3, #0] break; 8004be2: e014 b.n 8004c0e } case B921600: { g_modBusMCtrl[midx].modBusWait = 13; 8004be4: 4943 ldr r1, [pc, #268] ; (8004cf4 ) 8004be6: 68fa ldr r2, [r7, #12] 8004be8: 4613 mov r3, r2 8004bea: 00db lsls r3, r3, #3 8004bec: 4413 add r3, r2 8004bee: 009b lsls r3, r3, #2 8004bf0: 440b add r3, r1 8004bf2: 3308 adds r3, #8 8004bf4: 220d movs r2, #13 8004bf6: 601a str r2, [r3, #0] break; 8004bf8: e009 b.n 8004c0e } default: { g_modBusMCtrl[midx].modBusWait = 0; 8004bfa: 493e ldr r1, [pc, #248] ; (8004cf4 ) 8004bfc: 68fa ldr r2, [r7, #12] 8004bfe: 4613 mov r3, r2 8004c00: 00db lsls r3, r3, #3 8004c02: 4413 add r3, r2 8004c04: 009b lsls r3, r3, #2 8004c06: 440b add r3, r1 8004c08: 3308 adds r3, #8 8004c0a: 2200 movs r2, #0 8004c0c: 601a str r2, [r3, #0] } } if ((dat == '8') && (parity != 'N') && (parity != 'n')) // 7λÊý¾Ý¹ýÂËУÑéλ 8004c0e: 78fb ldrb r3, [r7, #3] 8004c10: 2b38 cmp r3, #56 ; 0x38 8004c12: d110 bne.n 8004c36 8004c14: 7e3b ldrb r3, [r7, #24] 8004c16: 2b4e cmp r3, #78 ; 0x4e 8004c18: d00d beq.n 8004c36 8004c1a: 7e3b ldrb r3, [r7, #24] 8004c1c: 2b6e cmp r3, #110 ; 0x6e 8004c1e: d00a beq.n 8004c36 { g_modBusMCtrl[midx].filterChk = 1; 8004c20: 4934 ldr r1, [pc, #208] ; (8004cf4 ) 8004c22: 68fa ldr r2, [r7, #12] 8004c24: 4613 mov r3, r2 8004c26: 00db lsls r3, r3, #3 8004c28: 4413 add r3, r2 8004c2a: 009b lsls r3, r3, #2 8004c2c: 440b add r3, r1 8004c2e: 3304 adds r3, #4 8004c30: 2201 movs r2, #1 8004c32: 601a str r2, [r3, #0] 8004c34: e009 b.n 8004c4a } else { g_modBusMCtrl[midx].filterChk = 0; 8004c36: 492f ldr r1, [pc, #188] ; (8004cf4 ) 8004c38: 68fa ldr r2, [r7, #12] 8004c3a: 4613 mov r3, r2 8004c3c: 00db lsls r3, r3, #3 8004c3e: 4413 add r3, r2 8004c40: 009b lsls r3, r3, #2 8004c42: 440b add r3, r1 8004c44: 3304 adds r3, #4 8004c46: 2200 movs r2, #0 8004c48: 601a str r2, [r3, #0] #ifndef USART6_485OutDis #define USART6_485OutDis DefOutDis #endif // ³õʼ»¯´®¿Ú switch(usart) 8004c4a: 68bb ldr r3, [r7, #8] 8004c4c: 2b02 cmp r3, #2 8004c4e: d01c beq.n 8004c8a 8004c50: 2b03 cmp r3, #3 8004c52: d033 beq.n 8004cbc 8004c54: 2b01 cmp r3, #1 8004c56: d173 bne.n 8004d40 { #ifdef COMM_USART1 case COMM_USART1: { InitUsart1(baud, dat, parity, stop); // ´®¿Ú1 8004c58: 7f3b ldrb r3, [r7, #28] 8004c5a: 7e3a ldrb r2, [r7, #24] 8004c5c: 78f9 ldrb r1, [r7, #3] 8004c5e: 6878 ldr r0, [r7, #4] 8004c60: f7fe fdc6 bl 80037f0 RegisterModbusCommFunc(&g_modBusMCtrl[midx], Usart1SendData, Usart1GetData, Usart1CleanRsBuf, IsUsart1SendOver, USART1_485OutEn, USART1_485OutDis); 8004c64: 68fa ldr r2, [r7, #12] 8004c66: 4613 mov r3, r2 8004c68: 00db lsls r3, r3, #3 8004c6a: 4413 add r3, r2 8004c6c: 009b lsls r3, r3, #2 8004c6e: 4a21 ldr r2, [pc, #132] ; (8004cf4 ) 8004c70: 1898 adds r0, r3, r2 8004c72: 4b21 ldr r3, [pc, #132] ; (8004cf8 ) 8004c74: 9302 str r3, [sp, #8] 8004c76: 4b21 ldr r3, [pc, #132] ; (8004cfc ) 8004c78: 9301 str r3, [sp, #4] 8004c7a: 4b21 ldr r3, [pc, #132] ; (8004d00 ) 8004c7c: 9300 str r3, [sp, #0] 8004c7e: 4b21 ldr r3, [pc, #132] ; (8004d04 ) 8004c80: 4a21 ldr r2, [pc, #132] ; (8004d08 ) 8004c82: 4922 ldr r1, [pc, #136] ; (8004d0c ) 8004c84: f7ff fe02 bl 800488c break; 8004c88: e06d b.n 8004d66 } #endif #ifdef COMM_USART2 case COMM_USART2: { InitUsart2(baud, dat, parity, stop); // ´®¿Ú2 8004c8a: 7f3b ldrb r3, [r7, #28] 8004c8c: 7e3a ldrb r2, [r7, #24] 8004c8e: 78f9 ldrb r1, [r7, #3] 8004c90: 6878 ldr r0, [r7, #4] 8004c92: f7ff f801 bl 8003c98 RegisterModbusCommFunc(&g_modBusMCtrl[midx], Usart2SendData, Usart2GetData, Usart2CleanRsBuf, IsUsart2SendOver, USART2_485OutEn, USART2_485OutDis); 8004c96: 68fa ldr r2, [r7, #12] 8004c98: 4613 mov r3, r2 8004c9a: 00db lsls r3, r3, #3 8004c9c: 4413 add r3, r2 8004c9e: 009b lsls r3, r3, #2 8004ca0: 4a14 ldr r2, [pc, #80] ; (8004cf4 ) 8004ca2: 1898 adds r0, r3, r2 8004ca4: 4b1a ldr r3, [pc, #104] ; (8004d10 ) 8004ca6: 9302 str r3, [sp, #8] 8004ca8: 4b1a ldr r3, [pc, #104] ; (8004d14 ) 8004caa: 9301 str r3, [sp, #4] 8004cac: 4b1a ldr r3, [pc, #104] ; (8004d18 ) 8004cae: 9300 str r3, [sp, #0] 8004cb0: 4b1a ldr r3, [pc, #104] ; (8004d1c ) 8004cb2: 4a1b ldr r2, [pc, #108] ; (8004d20 ) 8004cb4: 491b ldr r1, [pc, #108] ; (8004d24 ) 8004cb6: f7ff fde9 bl 800488c break; 8004cba: e054 b.n 8004d66 } #endif #ifdef COMM_USART3 case COMM_USART3: { InitUsart3(baud, dat, parity, stop); // ´®¿Ú3 8004cbc: 7f3b ldrb r3, [r7, #28] 8004cbe: 7e3a ldrb r2, [r7, #24] 8004cc0: 78f9 ldrb r1, [r7, #3] 8004cc2: 6878 ldr r0, [r7, #4] 8004cc4: f7ff f9de bl 8004084 RegisterModbusCommFunc(&g_modBusMCtrl[midx], Usart3SendData, Usart3GetData, Usart3CleanRsBuf, IsUsart3SendOver, USART3_485OutEn, USART3_485OutDis); 8004cc8: 68fa ldr r2, [r7, #12] 8004cca: 4613 mov r3, r2 8004ccc: 00db lsls r3, r3, #3 8004cce: 4413 add r3, r2 8004cd0: 009b lsls r3, r3, #2 8004cd2: 4a08 ldr r2, [pc, #32] ; (8004cf4 ) 8004cd4: 1898 adds r0, r3, r2 8004cd6: 4b14 ldr r3, [pc, #80] ; (8004d28 ) 8004cd8: 9302 str r3, [sp, #8] 8004cda: 4b14 ldr r3, [pc, #80] ; (8004d2c ) 8004cdc: 9301 str r3, [sp, #4] 8004cde: 4b14 ldr r3, [pc, #80] ; (8004d30 ) 8004ce0: 9300 str r3, [sp, #0] 8004ce2: 4b14 ldr r3, [pc, #80] ; (8004d34 ) 8004ce4: 4a14 ldr r2, [pc, #80] ; (8004d38 ) 8004ce6: 4915 ldr r1, [pc, #84] ; (8004d3c ) 8004ce8: f7ff fdd0 bl 800488c break; 8004cec: e03b b.n 8004d66 8004cee: bf00 nop 8004cf0: 0800ac28 .word 0x0800ac28 8004cf4: 20001354 .word 0x20001354 8004cf8: 0800491d .word 0x0800491d 8004cfc: 08004911 .word 0x08004911 8004d00: 08003a8d .word 0x08003a8d 8004d04: 08003a5d .word 0x08003a5d 8004d08: 08003999 .word 0x08003999 8004d0c: 080038ad .word 0x080038ad 8004d10: 0800901d .word 0x0800901d 8004d14: 08009035 .word 0x08009035 8004d18: 08003f35 .word 0x08003f35 8004d1c: 08003f05 .word 0x08003f05 8004d20: 08003e41 .word 0x08003e41 8004d24: 08003d55 .word 0x08003d55 8004d28: 0800904d .word 0x0800904d 8004d2c: 08009065 .word 0x08009065 8004d30: 08004321 .word 0x08004321 8004d34: 080042f1 .word 0x080042f1 8004d38: 0800422d .word 0x0800422d 8004d3c: 08004141 .word 0x08004141 break; } #endif default: { RegisterModbusCommFunc(&g_modBusMCtrl[midx], DefSendData, DefGetData, DefCleanRsBuf, DefIsSendOver, DefOutEn, DefOutDis); 8004d40: 68fa ldr r2, [r7, #12] 8004d42: 4613 mov r3, r2 8004d44: 00db lsls r3, r3, #3 8004d46: 4413 add r3, r2 8004d48: 009b lsls r3, r3, #2 8004d4a: 4a0d ldr r2, [pc, #52] ; (8004d80 ) 8004d4c: 1898 adds r0, r3, r2 8004d4e: 4b0d ldr r3, [pc, #52] ; (8004d84 ) 8004d50: 9302 str r3, [sp, #8] 8004d52: 4b0d ldr r3, [pc, #52] ; (8004d88 ) 8004d54: 9301 str r3, [sp, #4] 8004d56: 4b0d ldr r3, [pc, #52] ; (8004d8c ) 8004d58: 9300 str r3, [sp, #0] 8004d5a: 4b0d ldr r3, [pc, #52] ; (8004d90 ) 8004d5c: 4a0d ldr r2, [pc, #52] ; (8004d94 ) 8004d5e: 490e ldr r1, [pc, #56] ; (8004d98 ) 8004d60: f7ff fd94 bl 800488c break; 8004d64: bf00 nop } } g_modBusMCtrl[midx].CommOutDis(); // ¹Ø±Õ·¢ËÍ 8004d66: 4906 ldr r1, [pc, #24] ; (8004d80 ) 8004d68: 68fa ldr r2, [r7, #12] 8004d6a: 4613 mov r3, r2 8004d6c: 00db lsls r3, r3, #3 8004d6e: 4413 add r3, r2 8004d70: 009b lsls r3, r3, #2 8004d72: 440b add r3, r1 8004d74: 3320 adds r3, #32 8004d76: 681b ldr r3, [r3, #0] 8004d78: 4798 blx r3 } 8004d7a: 3710 adds r7, #16 8004d7c: 46bd mov sp, r7 8004d7e: bd80 pop {r7, pc} 8004d80: 20001354 .word 0x20001354 8004d84: 0800491d .word 0x0800491d 8004d88: 08004911 .word 0x08004911 8004d8c: 08004903 .word 0x08004903 8004d90: 080048f5 .word 0x080048f5 8004d94: 080048df .word 0x080048df 8004d98: 080048c9 .word 0x080048c9 08004d9c : * ²½Öè2:Êý¾Ý·¢ËÍ * ²½Öè3:µÈ´ý·¢ËÍÍê³É * ²½Öè4:¹Ø±Õ·¢ËÍ */ int ModbusTx(int midx, u8 index, u8 cmd, u16 addr, u16 * pData, u16 len, int steps) { 8004d9c: b590 push {r4, r7, lr} 8004d9e: b0c1 sub sp, #260 ; 0x104 8004da0: af00 add r7, sp, #0 8004da2: 6078 str r0, [r7, #4] 8004da4: 4608 mov r0, r1 8004da6: 4611 mov r1, r2 8004da8: 461a mov r2, r3 8004daa: 4603 mov r3, r0 8004dac: 70fb strb r3, [r7, #3] 8004dae: 460b mov r3, r1 8004db0: 70bb strb r3, [r7, #2] 8004db2: 463b mov r3, r7 8004db4: 801a strh r2, [r3, #0] u8 checksum, temp; // ºÍУÑé(ASCII) u16 checkcrc; // CRC УÑé(RTU) u16 data; u8 pSDat[MDBSRXLEN_MAX]; // ´ý·¢ËÍÊý¾Ý if ((cmd != MODBUS_RD) && (cmd != MODBUS_WR) && (cmd != MODBUS_WR_MULTI)) 8004db6: 78bb ldrb r3, [r7, #2] 8004db8: 2b03 cmp r3, #3 8004dba: d00d beq.n 8004dd8 8004dbc: 78bb ldrb r3, [r7, #2] 8004dbe: 2b06 cmp r3, #6 8004dc0: d00a beq.n 8004dd8 8004dc2: 78bb ldrb r3, [r7, #2] 8004dc4: 2b10 cmp r3, #16 8004dc6: d007 beq.n 8004dd8 { result = -1; 8004dc8: f04f 33ff mov.w r3, #4294967295 8004dcc: f8c7 30f0 str.w r3, [r7, #240] ; 0xf0 return result; 8004dd0: f8d7 30f0 ldr.w r3, [r7, #240] ; 0xf0 8004dd4: f000 bc05 b.w 80055e2 } if (pData == NULL || len == 0) 8004dd8: f8d7 3110 ldr.w r3, [r7, #272] ; 0x110 8004ddc: 2b00 cmp r3, #0 8004dde: d003 beq.n 8004de8 8004de0: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 8004de4: 2b00 cmp r3, #0 8004de6: d106 bne.n 8004df6 { result = -1; 8004de8: f04f 33ff mov.w r3, #4294967295 8004dec: f8c7 30f0 str.w r3, [r7, #240] ; 0xf0 return result; 8004df0: f8d7 30f0 ldr.w r3, [r7, #240] ; 0xf0 8004df4: e3f5 b.n 80055e2 } if (midx < 0 || midx >= MODBUS_M_NUM) 8004df6: 687b ldr r3, [r7, #4] 8004df8: 2b00 cmp r3, #0 8004dfa: db02 blt.n 8004e02 8004dfc: 687b ldr r3, [r7, #4] 8004dfe: 2b00 cmp r3, #0 8004e00: dd06 ble.n 8004e10 { result = -1; 8004e02: f04f 33ff mov.w r3, #4294967295 8004e06: f8c7 30f0 str.w r3, [r7, #240] ; 0xf0 return result; 8004e0a: f8d7 30f0 ldr.w r3, [r7, #240] ; 0xf0 8004e0e: e3e8 b.n 80055e2 } if (steps == 1 || steps == -1) 8004e10: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8004e14: 2b01 cmp r3, #1 8004e16: d004 beq.n 8004e22 8004e18: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8004e1c: f1b3 3fff cmp.w r3, #4294967295 8004e20: d111 bne.n 8004e46 { g_modBusMCtrl[midx].CommOutEn(); // ´ò¿ª·¢ËÍ 8004e22: 49e6 ldr r1, [pc, #920] ; (80051bc ) 8004e24: 687a ldr r2, [r7, #4] 8004e26: 4613 mov r3, r2 8004e28: 00db lsls r3, r3, #3 8004e2a: 4413 add r3, r2 8004e2c: 009b lsls r3, r3, #2 8004e2e: 440b add r3, r1 8004e30: 331c adds r3, #28 8004e32: 681b ldr r3, [r3, #0] 8004e34: 4798 blx r3 if (steps == -1) 8004e36: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8004e3a: f1b3 3fff cmp.w r3, #4294967295 8004e3e: d102 bne.n 8004e46 { DelayUs(100); 8004e40: 2064 movs r0, #100 ; 0x64 8004e42: f7fe fbe9 bl 8003618 } } if (steps == 2 || steps == -1) 8004e46: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8004e4a: 2b02 cmp r3, #2 8004e4c: d005 beq.n 8004e5a 8004e4e: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8004e52: f1b3 3fff cmp.w r3, #4294967295 8004e56: f040 834a bne.w 80054ee { i = 0; 8004e5a: 2300 movs r3, #0 8004e5c: f8c7 30fc str.w r3, [r7, #252] ; 0xfc result = 0; 8004e60: 2300 movs r3, #0 8004e62: f8c7 30f0 str.w r3, [r7, #240] ; 0xf0 if (g_modBusMCtrl[midx].modBusMode != 0) // ASCIIÂëģʽ 8004e66: 49d5 ldr r1, [pc, #852] ; (80051bc ) 8004e68: 687a ldr r2, [r7, #4] 8004e6a: 4613 mov r3, r2 8004e6c: 00db lsls r3, r3, #3 8004e6e: 4413 add r3, r2 8004e70: 009b lsls r3, r3, #2 8004e72: 440b add r3, r1 8004e74: 681b ldr r3, [r3, #0] 8004e76: 2b00 cmp r3, #0 8004e78: f000 826e beq.w 8005358 { checksum = 0; 8004e7c: 2300 movs r3, #0 8004e7e: f887 30ef strb.w r3, [r7, #239] ; 0xef pSDat[i++] = ':'; //':' 8004e82: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8004e86: 1c5a adds r2, r3, #1 8004e88: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 8004e8c: f507 7280 add.w r2, r7, #256 ; 0x100 8004e90: 4413 add r3, r2 8004e92: 223a movs r2, #58 ; 0x3a 8004e94: f803 2cf4 strb.w r2, [r3, #-244] temp = HIHFBYTE(index); 8004e98: 78fb ldrb r3, [r7, #3] 8004e9a: 091b lsrs r3, r3, #4 8004e9c: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // IDX_H 8004ea0: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004ea4: 1c63 adds r3, r4, #1 8004ea6: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004eaa: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004eae: 4618 mov r0, r3 8004eb0: f7ff fd63 bl 800497a 8004eb4: 4603 mov r3, r0 8004eb6: 461a mov r2, r3 8004eb8: f507 7380 add.w r3, r7, #256 ; 0x100 8004ebc: 4423 add r3, r4 8004ebe: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(index); 8004ec2: 78fb ldrb r3, [r7, #3] 8004ec4: f003 030f and.w r3, r3, #15 8004ec8: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // IDX_L 8004ecc: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004ed0: 1c63 adds r3, r4, #1 8004ed2: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004ed6: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004eda: 4618 mov r0, r3 8004edc: f7ff fd4d bl 800497a 8004ee0: 4603 mov r3, r0 8004ee2: 461a mov r2, r3 8004ee4: f507 7380 add.w r3, r7, #256 ; 0x100 8004ee8: 4423 add r3, r4 8004eea: f803 2cf4 strb.w r2, [r3, #-244] checksum += index; 8004eee: f897 20ef ldrb.w r2, [r7, #239] ; 0xef 8004ef2: 78fb ldrb r3, [r7, #3] 8004ef4: 4413 add r3, r2 8004ef6: f887 30ef strb.w r3, [r7, #239] ; 0xef temp = HIHFBYTE(cmd); 8004efa: 78bb ldrb r3, [r7, #2] 8004efc: 091b lsrs r3, r3, #4 8004efe: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // CMD_H 8004f02: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004f06: 1c63 adds r3, r4, #1 8004f08: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004f0c: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004f10: 4618 mov r0, r3 8004f12: f7ff fd32 bl 800497a 8004f16: 4603 mov r3, r0 8004f18: 461a mov r2, r3 8004f1a: f507 7380 add.w r3, r7, #256 ; 0x100 8004f1e: 4423 add r3, r4 8004f20: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(cmd); 8004f24: 78bb ldrb r3, [r7, #2] 8004f26: f003 030f and.w r3, r3, #15 8004f2a: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // CMD_L 8004f2e: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004f32: 1c63 adds r3, r4, #1 8004f34: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004f38: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004f3c: 4618 mov r0, r3 8004f3e: f7ff fd1c bl 800497a 8004f42: 4603 mov r3, r0 8004f44: 461a mov r2, r3 8004f46: f507 7380 add.w r3, r7, #256 ; 0x100 8004f4a: 4423 add r3, r4 8004f4c: f803 2cf4 strb.w r2, [r3, #-244] checksum += cmd; 8004f50: f897 20ef ldrb.w r2, [r7, #239] ; 0xef 8004f54: 78bb ldrb r3, [r7, #2] 8004f56: 4413 add r3, r2 8004f58: f887 30ef strb.w r3, [r7, #239] ; 0xef temp = HIHFBYTE(HIBYTE(addr)); 8004f5c: 463b mov r3, r7 8004f5e: 881b ldrh r3, [r3, #0] 8004f60: 0a1b lsrs r3, r3, #8 8004f62: b29b uxth r3, r3 8004f64: b2db uxtb r3, r3 8004f66: 091b lsrs r3, r3, #4 8004f68: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // ADDR_HH 8004f6c: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004f70: 1c63 adds r3, r4, #1 8004f72: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004f76: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004f7a: 4618 mov r0, r3 8004f7c: f7ff fcfd bl 800497a 8004f80: 4603 mov r3, r0 8004f82: 461a mov r2, r3 8004f84: f507 7380 add.w r3, r7, #256 ; 0x100 8004f88: 4423 add r3, r4 8004f8a: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(HIBYTE(addr)); 8004f8e: 463b mov r3, r7 8004f90: 881b ldrh r3, [r3, #0] 8004f92: 0a1b lsrs r3, r3, #8 8004f94: b29b uxth r3, r3 8004f96: b2db uxtb r3, r3 8004f98: f003 030f and.w r3, r3, #15 8004f9c: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // ADDR_HL 8004fa0: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004fa4: 1c63 adds r3, r4, #1 8004fa6: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004faa: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004fae: 4618 mov r0, r3 8004fb0: f7ff fce3 bl 800497a 8004fb4: 4603 mov r3, r0 8004fb6: 461a mov r2, r3 8004fb8: f507 7380 add.w r3, r7, #256 ; 0x100 8004fbc: 4423 add r3, r4 8004fbe: f803 2cf4 strb.w r2, [r3, #-244] checksum += HIBYTE(addr); 8004fc2: 463b mov r3, r7 8004fc4: 881b ldrh r3, [r3, #0] 8004fc6: 0a1b lsrs r3, r3, #8 8004fc8: b29b uxth r3, r3 8004fca: b2da uxtb r2, r3 8004fcc: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8004fd0: 4413 add r3, r2 8004fd2: f887 30ef strb.w r3, [r7, #239] ; 0xef temp = HIHFBYTE(LOBYTE(addr)); 8004fd6: 463b mov r3, r7 8004fd8: 881b ldrh r3, [r3, #0] 8004fda: b2db uxtb r3, r3 8004fdc: 091b lsrs r3, r3, #4 8004fde: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // ADDR_LH 8004fe2: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8004fe6: 1c63 adds r3, r4, #1 8004fe8: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8004fec: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8004ff0: 4618 mov r0, r3 8004ff2: f7ff fcc2 bl 800497a 8004ff6: 4603 mov r3, r0 8004ff8: 461a mov r2, r3 8004ffa: f507 7380 add.w r3, r7, #256 ; 0x100 8004ffe: 4423 add r3, r4 8005000: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(LOBYTE(addr)); 8005004: 463b mov r3, r7 8005006: 881b ldrh r3, [r3, #0] 8005008: b2db uxtb r3, r3 800500a: f003 030f and.w r3, r3, #15 800500e: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // ADDR_LL 8005012: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8005016: 1c63 adds r3, r4, #1 8005018: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 800501c: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8005020: 4618 mov r0, r3 8005022: f7ff fcaa bl 800497a 8005026: 4603 mov r3, r0 8005028: 461a mov r2, r3 800502a: f507 7380 add.w r3, r7, #256 ; 0x100 800502e: 4423 add r3, r4 8005030: f803 2cf4 strb.w r2, [r3, #-244] checksum += LOBYTE(addr); 8005034: 463b mov r3, r7 8005036: 881b ldrh r3, [r3, #0] 8005038: b2da uxtb r2, r3 800503a: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 800503e: 4413 add r3, r2 8005040: f887 30ef strb.w r3, [r7, #239] ; 0xef if (cmd == MODBUS_WR_MULTI) 8005044: 78bb ldrb r3, [r7, #2] 8005046: 2b10 cmp r3, #16 8005048: f040 80b3 bne.w 80051b2 {//¶à×Ö ·¢ËÍ // Êý¾Ý¸öÊý,µ¥Î»×Ö temp = HIHFBYTE(HIBYTE(len)); 800504c: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 8005050: 0a1b lsrs r3, r3, #8 8005052: b29b uxth r3, r3 8005054: b2db uxtb r3, r3 8005056: 091b lsrs r3, r3, #4 8005058: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // LEN_HH 800505c: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8005060: 1c63 adds r3, r4, #1 8005062: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005066: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 800506a: 4618 mov r0, r3 800506c: f7ff fc85 bl 800497a 8005070: 4603 mov r3, r0 8005072: 461a mov r2, r3 8005074: f507 7380 add.w r3, r7, #256 ; 0x100 8005078: 4423 add r3, r4 800507a: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(HIBYTE(len)); 800507e: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 8005082: 0a1b lsrs r3, r3, #8 8005084: b29b uxth r3, r3 8005086: b2db uxtb r3, r3 8005088: f003 030f and.w r3, r3, #15 800508c: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // LEN_HL 8005090: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8005094: 1c63 adds r3, r4, #1 8005096: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 800509a: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 800509e: 4618 mov r0, r3 80050a0: f7ff fc6b bl 800497a 80050a4: 4603 mov r3, r0 80050a6: 461a mov r2, r3 80050a8: f507 7380 add.w r3, r7, #256 ; 0x100 80050ac: 4423 add r3, r4 80050ae: f803 2cf4 strb.w r2, [r3, #-244] checksum += HIBYTE(len); 80050b2: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80050b6: 0a1b lsrs r3, r3, #8 80050b8: b29b uxth r3, r3 80050ba: b2da uxtb r2, r3 80050bc: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 80050c0: 4413 add r3, r2 80050c2: f887 30ef strb.w r3, [r7, #239] ; 0xef temp = HIHFBYTE(LOBYTE(len)); 80050c6: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80050ca: b2db uxtb r3, r3 80050cc: 091b lsrs r3, r3, #4 80050ce: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // LEN_LH 80050d2: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 80050d6: 1c63 adds r3, r4, #1 80050d8: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 80050dc: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 80050e0: 4618 mov r0, r3 80050e2: f7ff fc4a bl 800497a 80050e6: 4603 mov r3, r0 80050e8: 461a mov r2, r3 80050ea: f507 7380 add.w r3, r7, #256 ; 0x100 80050ee: 4423 add r3, r4 80050f0: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(LOBYTE(len)); 80050f4: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80050f8: b2db uxtb r3, r3 80050fa: f003 030f and.w r3, r3, #15 80050fe: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // LEN_LL 8005102: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8005106: 1c63 adds r3, r4, #1 8005108: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 800510c: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8005110: 4618 mov r0, r3 8005112: f7ff fc32 bl 800497a 8005116: 4603 mov r3, r0 8005118: 461a mov r2, r3 800511a: f507 7380 add.w r3, r7, #256 ; 0x100 800511e: 4423 add r3, r4 8005120: f803 2cf4 strb.w r2, [r3, #-244] checksum += LOBYTE(len); 8005124: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 8005128: b2da uxtb r2, r3 800512a: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 800512e: 4413 add r3, r2 8005130: f887 30ef strb.w r3, [r7, #239] ; 0xef // Êý¾ÝÇø×Ö½ÚÊý temp = HIHFBYTE(LOBYTE(len)<<1); 8005134: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 8005138: b2db uxtb r3, r3 800513a: 005b lsls r3, r3, #1 800513c: 111b asrs r3, r3, #4 800513e: b2db uxtb r3, r3 8005140: f003 030f and.w r3, r3, #15 8005144: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // LEN_H 8005148: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 800514c: 1c63 adds r3, r4, #1 800514e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005152: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8005156: 4618 mov r0, r3 8005158: f7ff fc0f bl 800497a 800515c: 4603 mov r3, r0 800515e: 461a mov r2, r3 8005160: f507 7380 add.w r3, r7, #256 ; 0x100 8005164: 4423 add r3, r4 8005166: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(LOBYTE(len)<<1); 800516a: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 800516e: b2db uxtb r3, r3 8005170: 005b lsls r3, r3, #1 8005172: b2db uxtb r3, r3 8005174: f003 030f and.w r3, r3, #15 8005178: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // LEN_L 800517c: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8005180: 1c63 adds r3, r4, #1 8005182: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005186: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 800518a: 4618 mov r0, r3 800518c: f7ff fbf5 bl 800497a 8005190: 4603 mov r3, r0 8005192: 461a mov r2, r3 8005194: f507 7380 add.w r3, r7, #256 ; 0x100 8005198: 4423 add r3, r4 800519a: f803 2cf4 strb.w r2, [r3, #-244] checksum += LOBYTE(len<<1); 800519e: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80051a2: 005b lsls r3, r3, #1 80051a4: b29b uxth r3, r3 80051a6: b2da uxtb r2, r3 80051a8: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 80051ac: 4413 add r3, r2 80051ae: f887 30ef strb.w r3, [r7, #239] ; 0xef } for (j = 0; j < len; j++) 80051b2: 2300 movs r3, #0 80051b4: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80051b8: e084 b.n 80052c4 80051ba: bf00 nop 80051bc: 20001354 .word 0x20001354 { data = pData[j]; 80051c0: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 80051c4: 005b lsls r3, r3, #1 80051c6: f8d7 2110 ldr.w r2, [r7, #272] ; 0x110 80051ca: 4413 add r3, r2 80051cc: 881b ldrh r3, [r3, #0] 80051ce: f8a7 30ea strh.w r3, [r7, #234] ; 0xea temp = HIHFBYTE(HIBYTE(data)); 80051d2: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 80051d6: 0a1b lsrs r3, r3, #8 80051d8: b29b uxth r3, r3 80051da: b2db uxtb r3, r3 80051dc: 091b lsrs r3, r3, #4 80051de: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // DATA_HH 80051e2: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 80051e6: 1c63 adds r3, r4, #1 80051e8: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 80051ec: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 80051f0: 4618 mov r0, r3 80051f2: f7ff fbc2 bl 800497a 80051f6: 4603 mov r3, r0 80051f8: 461a mov r2, r3 80051fa: f507 7380 add.w r3, r7, #256 ; 0x100 80051fe: 4423 add r3, r4 8005200: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(HIBYTE(data)); 8005204: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 8005208: 0a1b lsrs r3, r3, #8 800520a: b29b uxth r3, r3 800520c: b2db uxtb r3, r3 800520e: f003 030f and.w r3, r3, #15 8005212: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // DATA_HL 8005216: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 800521a: 1c63 adds r3, r4, #1 800521c: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005220: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8005224: 4618 mov r0, r3 8005226: f7ff fba8 bl 800497a 800522a: 4603 mov r3, r0 800522c: 461a mov r2, r3 800522e: f507 7380 add.w r3, r7, #256 ; 0x100 8005232: 4423 add r3, r4 8005234: f803 2cf4 strb.w r2, [r3, #-244] checksum += HIBYTE(data); 8005238: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 800523c: 0a1b lsrs r3, r3, #8 800523e: b29b uxth r3, r3 8005240: b2da uxtb r2, r3 8005242: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005246: 4413 add r3, r2 8005248: f887 30ef strb.w r3, [r7, #239] ; 0xef temp = HIHFBYTE(LOBYTE(data)); 800524c: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 8005250: b2db uxtb r3, r3 8005252: 091b lsrs r3, r3, #4 8005254: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // DATA_LH 8005258: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 800525c: 1c63 adds r3, r4, #1 800525e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005262: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8005266: 4618 mov r0, r3 8005268: f7ff fb87 bl 800497a 800526c: 4603 mov r3, r0 800526e: 461a mov r2, r3 8005270: f507 7380 add.w r3, r7, #256 ; 0x100 8005274: 4423 add r3, r4 8005276: f803 2cf4 strb.w r2, [r3, #-244] temp = LOHFBYTE(LOBYTE(data)); 800527a: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 800527e: b2db uxtb r3, r3 8005280: f003 030f and.w r3, r3, #15 8005284: f887 30e9 strb.w r3, [r7, #233] ; 0xe9 pSDat[i++] = RtuToAscii(temp); // DATA_LL 8005288: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 800528c: 1c63 adds r3, r4, #1 800528e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005292: f897 30e9 ldrb.w r3, [r7, #233] ; 0xe9 8005296: 4618 mov r0, r3 8005298: f7ff fb6f bl 800497a 800529c: 4603 mov r3, r0 800529e: 461a mov r2, r3 80052a0: f507 7380 add.w r3, r7, #256 ; 0x100 80052a4: 4423 add r3, r4 80052a6: f803 2cf4 strb.w r2, [r3, #-244] checksum += LOBYTE(data); 80052aa: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 80052ae: b2da uxtb r2, r3 80052b0: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 80052b4: 4413 add r3, r2 80052b6: f887 30ef strb.w r3, [r7, #239] ; 0xef for (j = 0; j < len; j++) 80052ba: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 80052be: 3301 adds r3, #1 80052c0: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80052c4: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80052c8: f8d7 20f8 ldr.w r2, [r7, #248] ; 0xf8 80052cc: 429a cmp r2, r3 80052ce: f6ff af77 blt.w 80051c0 } checksum = ~checksum + 1; 80052d2: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 80052d6: 425b negs r3, r3 80052d8: f887 30ef strb.w r3, [r7, #239] ; 0xef pSDat[i++] = RtuToAscii(HIHFBYTE(checksum)); // LRC_H 80052dc: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 80052e0: 091b lsrs r3, r3, #4 80052e2: b2da uxtb r2, r3 80052e4: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 80052e8: 1c63 adds r3, r4, #1 80052ea: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 80052ee: 4610 mov r0, r2 80052f0: f7ff fb43 bl 800497a 80052f4: 4603 mov r3, r0 80052f6: 461a mov r2, r3 80052f8: f507 7380 add.w r3, r7, #256 ; 0x100 80052fc: 4423 add r3, r4 80052fe: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = RtuToAscii(LOHFBYTE(checksum)); // LRC_L 8005302: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005306: f003 030f and.w r3, r3, #15 800530a: b2da uxtb r2, r3 800530c: f8d7 40fc ldr.w r4, [r7, #252] ; 0xfc 8005310: 1c63 adds r3, r4, #1 8005312: f8c7 30fc str.w r3, [r7, #252] ; 0xfc 8005316: 4610 mov r0, r2 8005318: f7ff fb2f bl 800497a 800531c: 4603 mov r3, r0 800531e: 461a mov r2, r3 8005320: f507 7380 add.w r3, r7, #256 ; 0x100 8005324: 4423 add r3, r4 8005326: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = '\r'; // CR 800532a: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 800532e: 1c5a adds r2, r3, #1 8005330: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 8005334: f507 7280 add.w r2, r7, #256 ; 0x100 8005338: 4413 add r3, r2 800533a: 220d movs r2, #13 800533c: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = '\n'; // LF 8005340: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005344: 1c5a adds r2, r3, #1 8005346: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 800534a: f507 7280 add.w r2, r7, #256 ; 0x100 800534e: 4413 add r3, r2 8005350: 220a movs r2, #10 8005352: f803 2cf4 strb.w r2, [r3, #-244] 8005356: e0bb b.n 80054d0 } else // RTUģʽ { pSDat[i++] = index; // IDX 8005358: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 800535c: 1c5a adds r2, r3, #1 800535e: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 8005362: f507 7280 add.w r2, r7, #256 ; 0x100 8005366: 4413 add r3, r2 8005368: 78fa ldrb r2, [r7, #3] 800536a: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = cmd; // CMD 800536e: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005372: 1c5a adds r2, r3, #1 8005374: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 8005378: f507 7280 add.w r2, r7, #256 ; 0x100 800537c: 4413 add r3, r2 800537e: 78ba ldrb r2, [r7, #2] 8005380: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = HIBYTE(addr); // ADDR_H 8005384: 463b mov r3, r7 8005386: 881b ldrh r3, [r3, #0] 8005388: 0a1b lsrs r3, r3, #8 800538a: b299 uxth r1, r3 800538c: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005390: 1c5a adds r2, r3, #1 8005392: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 8005396: b2ca uxtb r2, r1 8005398: f507 7180 add.w r1, r7, #256 ; 0x100 800539c: 440b add r3, r1 800539e: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = LOBYTE(addr); // ADDR_L 80053a2: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80053a6: 1c5a adds r2, r3, #1 80053a8: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 80053ac: 463a mov r2, r7 80053ae: 8812 ldrh r2, [r2, #0] 80053b0: b2d2 uxtb r2, r2 80053b2: f507 7180 add.w r1, r7, #256 ; 0x100 80053b6: 440b add r3, r1 80053b8: f803 2cf4 strb.w r2, [r3, #-244] if (cmd == MODBUS_WR_MULTI) 80053bc: 78bb ldrb r3, [r7, #2] 80053be: 2b10 cmp r3, #16 80053c0: d12a bne.n 8005418 {//¶à×Ö ·¢ËÍ // Êý¾Ý¸öÊý,µ¥Î»×Ö pSDat[i++] = HIBYTE(len); // LEN_H 80053c2: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80053c6: 0a1b lsrs r3, r3, #8 80053c8: b299 uxth r1, r3 80053ca: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80053ce: 1c5a adds r2, r3, #1 80053d0: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 80053d4: b2ca uxtb r2, r1 80053d6: f507 7180 add.w r1, r7, #256 ; 0x100 80053da: 440b add r3, r1 80053dc: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = LOBYTE(len); // LEN_L 80053e0: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80053e4: 1c5a adds r2, r3, #1 80053e6: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 80053ea: f8b7 2114 ldrh.w r2, [r7, #276] ; 0x114 80053ee: b2d2 uxtb r2, r2 80053f0: f507 7180 add.w r1, r7, #256 ; 0x100 80053f4: 440b add r3, r1 80053f6: f803 2cf4 strb.w r2, [r3, #-244] // Êý¾ÝÇø×Ö½ÚÊý pSDat[i++] = LOBYTE(len)<<1; // LEN_L * 2 80053fa: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 80053fe: b2da uxtb r2, r3 8005400: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005404: 1c59 adds r1, r3, #1 8005406: f8c7 10fc str.w r1, [r7, #252] ; 0xfc 800540a: 0052 lsls r2, r2, #1 800540c: b2d2 uxtb r2, r2 800540e: f507 7180 add.w r1, r7, #256 ; 0x100 8005412: 440b add r3, r1 8005414: f803 2cf4 strb.w r2, [r3, #-244] } for (j = 0; j < len; j++) 8005418: 2300 movs r3, #0 800541a: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 800541e: e029 b.n 8005474 { data = pData[j]; 8005420: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 8005424: 005b lsls r3, r3, #1 8005426: f8d7 2110 ldr.w r2, [r7, #272] ; 0x110 800542a: 4413 add r3, r2 800542c: 881b ldrh r3, [r3, #0] 800542e: f8a7 30ea strh.w r3, [r7, #234] ; 0xea pSDat[i++] = HIBYTE(data); // DATA_H 8005432: f8b7 30ea ldrh.w r3, [r7, #234] ; 0xea 8005436: 0a1b lsrs r3, r3, #8 8005438: b299 uxth r1, r3 800543a: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 800543e: 1c5a adds r2, r3, #1 8005440: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 8005444: b2ca uxtb r2, r1 8005446: f507 7180 add.w r1, r7, #256 ; 0x100 800544a: 440b add r3, r1 800544c: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = LOBYTE(data); // DATA_L 8005450: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005454: 1c5a adds r2, r3, #1 8005456: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 800545a: f8b7 20ea ldrh.w r2, [r7, #234] ; 0xea 800545e: b2d2 uxtb r2, r2 8005460: f507 7180 add.w r1, r7, #256 ; 0x100 8005464: 440b add r3, r1 8005466: f803 2cf4 strb.w r2, [r3, #-244] for (j = 0; j < len; j++) 800546a: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 800546e: 3301 adds r3, #1 8005470: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 8005474: f8b7 3114 ldrh.w r3, [r7, #276] ; 0x114 8005478: f8d7 20f8 ldr.w r2, [r7, #248] ; 0xf8 800547c: 429a cmp r2, r3 800547e: dbcf blt.n 8005420 } checkcrc = ModbusCrc16(&pSDat[0], i); 8005480: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005484: b29a uxth r2, r3 8005486: f107 030c add.w r3, r7, #12 800548a: 4611 mov r1, r2 800548c: 4618 mov r0, r3 800548e: f7ff fab3 bl 80049f8 8005492: 4603 mov r3, r0 8005494: f8a7 30ec strh.w r3, [r7, #236] ; 0xec pSDat[i++] = HIBYTE(checkcrc); // CRC_H 8005498: f8b7 30ec ldrh.w r3, [r7, #236] ; 0xec 800549c: 0a1b lsrs r3, r3, #8 800549e: b299 uxth r1, r3 80054a0: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80054a4: 1c5a adds r2, r3, #1 80054a6: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 80054aa: b2ca uxtb r2, r1 80054ac: f507 7180 add.w r1, r7, #256 ; 0x100 80054b0: 440b add r3, r1 80054b2: f803 2cf4 strb.w r2, [r3, #-244] pSDat[i++] = LOBYTE(checkcrc); // CRC_L 80054b6: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80054ba: 1c5a adds r2, r3, #1 80054bc: f8c7 20fc str.w r2, [r7, #252] ; 0xfc 80054c0: f8b7 20ec ldrh.w r2, [r7, #236] ; 0xec 80054c4: b2d2 uxtb r2, r2 80054c6: f507 7180 add.w r1, r7, #256 ; 0x100 80054ca: 440b add r3, r1 80054cc: f803 2cf4 strb.w r2, [r3, #-244] } g_modBusMCtrl[midx].ModBusCommSend(pSDat, i); 80054d0: 4946 ldr r1, [pc, #280] ; (80055ec ) 80054d2: 687a ldr r2, [r7, #4] 80054d4: 4613 mov r3, r2 80054d6: 00db lsls r3, r3, #3 80054d8: 4413 add r3, r2 80054da: 009b lsls r3, r3, #2 80054dc: 440b add r3, r1 80054de: 330c adds r3, #12 80054e0: 681b ldr r3, [r3, #0] 80054e2: f107 020c add.w r2, r7, #12 80054e6: f8d7 10fc ldr.w r1, [r7, #252] ; 0xfc 80054ea: 4610 mov r0, r2 80054ec: 4798 blx r3 } if (steps == 3) 80054ee: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 80054f2: 2b03 cmp r3, #3 80054f4: d10e bne.n 8005514 { if (g_modBusMCtrl[midx].IsModBusCommSendOver() != TRUE) 80054f6: 493d ldr r1, [pc, #244] ; (80055ec ) 80054f8: 687a ldr r2, [r7, #4] 80054fa: 4613 mov r3, r2 80054fc: 00db lsls r3, r3, #3 80054fe: 4413 add r3, r2 8005500: 009b lsls r3, r3, #2 8005502: 440b add r3, r1 8005504: 3318 adds r3, #24 8005506: 681b ldr r3, [r3, #0] 8005508: 4798 blx r3 800550a: 4603 mov r3, r0 800550c: 2b01 cmp r3, #1 800550e: d041 beq.n 8005594 { return 0; 8005510: 2300 movs r3, #0 8005512: e066 b.n 80055e2 } } else if (steps == -1) // ͬ²½·¢ËÍ 8005514: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8005518: f1b3 3fff cmp.w r3, #4294967295 800551c: d13a bne.n 8005594 { timeout = (i*2 + 4) * g_modBusMCtrl[midx].modBusWait; // ³¬Ê±Ê±¼ä,µ¥Î»us((×Ö½ÚÊý*2 + 4) * ÿ¸ö×Ö½Ú·¢ËÍʱ³¤) 800551e: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005522: 3302 adds r3, #2 8005524: 4618 mov r0, r3 8005526: 4931 ldr r1, [pc, #196] ; (80055ec ) 8005528: 687a ldr r2, [r7, #4] 800552a: 4613 mov r3, r2 800552c: 00db lsls r3, r3, #3 800552e: 4413 add r3, r2 8005530: 009b lsls r3, r3, #2 8005532: 440b add r3, r1 8005534: 3308 adds r3, #8 8005536: 681b ldr r3, [r3, #0] 8005538: fb03 f300 mul.w r3, r3, r0 800553c: 005b lsls r3, r3, #1 800553e: f8c7 30f4 str.w r3, [r7, #244] ; 0xf4 do //µÈ´ý·¢ËÍÍê³É { if (g_modBusMCtrl[midx].IsModBusCommSendOver() == TRUE) 8005542: 492a ldr r1, [pc, #168] ; (80055ec ) 8005544: 687a ldr r2, [r7, #4] 8005546: 4613 mov r3, r2 8005548: 00db lsls r3, r3, #3 800554a: 4413 add r3, r2 800554c: 009b lsls r3, r3, #2 800554e: 440b add r3, r1 8005550: 3318 adds r3, #24 8005552: 681b ldr r3, [r3, #0] 8005554: 4798 blx r3 8005556: 4603 mov r3, r0 8005558: 2b01 cmp r3, #1 800555a: d00e beq.n 800557a { break; } DelayUs(1); 800555c: 2001 movs r0, #1 800555e: f7fe f85b bl 8003618 if (timeout-- <= 0) 8005562: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 8005566: 1e5a subs r2, r3, #1 8005568: f8c7 20f4 str.w r2, [r7, #244] ; 0xf4 800556c: 2b00 cmp r3, #0 800556e: dce8 bgt.n 8005542 { result = -2; 8005570: f06f 0301 mvn.w r3, #1 8005574: f8c7 30f0 str.w r3, [r7, #240] ; 0xf0 break; 8005578: e000 b.n 800557c break; 800557a: bf00 nop } }while(1); DelayUs(g_modBusMCtrl[midx].modBusWait); // µÈ´ý×îºóÒ»¸ö×Ö½Ú·¢ËÍÍê³É 800557c: 491b ldr r1, [pc, #108] ; (80055ec ) 800557e: 687a ldr r2, [r7, #4] 8005580: 4613 mov r3, r2 8005582: 00db lsls r3, r3, #3 8005584: 4413 add r3, r2 8005586: 009b lsls r3, r3, #2 8005588: 440b add r3, r1 800558a: 3308 adds r3, #8 800558c: 681b ldr r3, [r3, #0] 800558e: 4618 mov r0, r3 8005590: f7fe f842 bl 8003618 } if (steps == 4 || steps == -1) 8005594: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 8005598: 2b04 cmp r3, #4 800559a: d004 beq.n 80055a6 800559c: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 80055a0: f1b3 3fff cmp.w r3, #4294967295 80055a4: d113 bne.n 80055ce { g_modBusMCtrl[midx].ModBusCommCleanRsBuf(); // Çå¿ÕÒѽÓÊÕµÄÊý¾Ý 80055a6: 4911 ldr r1, [pc, #68] ; (80055ec ) 80055a8: 687a ldr r2, [r7, #4] 80055aa: 4613 mov r3, r2 80055ac: 00db lsls r3, r3, #3 80055ae: 4413 add r3, r2 80055b0: 009b lsls r3, r3, #2 80055b2: 440b add r3, r1 80055b4: 3314 adds r3, #20 80055b6: 681b ldr r3, [r3, #0] 80055b8: 4798 blx r3 g_modBusMCtrl[midx].CommOutDis(); // ¹Ø±Õ·¢ËÍ 80055ba: 490c ldr r1, [pc, #48] ; (80055ec ) 80055bc: 687a ldr r2, [r7, #4] 80055be: 4613 mov r3, r2 80055c0: 00db lsls r3, r3, #3 80055c2: 4413 add r3, r2 80055c4: 009b lsls r3, r3, #2 80055c6: 440b add r3, r1 80055c8: 3320 adds r3, #32 80055ca: 681b ldr r3, [r3, #0] 80055cc: 4798 blx r3 } if (steps != -1) 80055ce: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 80055d2: f1b3 3fff cmp.w r3, #4294967295 80055d6: d002 beq.n 80055de { return steps; 80055d8: f8d7 3118 ldr.w r3, [r7, #280] ; 0x118 80055dc: e001 b.n 80055e2 } return result; 80055de: f8d7 30f0 ldr.w r3, [r7, #240] ; 0xf0 } 80055e2: 4618 mov r0, r3 80055e4: f507 7782 add.w r7, r7, #260 ; 0x104 80055e8: 46bd mov sp, r7 80055ea: bd90 pop {r4, r7, pc} 80055ec: 20001354 .word 0x20001354 080055f0 : // ¿ÉÒÔ·Ö²½Öè½ÓÊÕ // steps == -1, ͬ²½µ÷Óã¬Ö±µ½ÊÕµ½Êý¾Ý»ò³¬Ê± // steps == 1, Òì²½µ÷ÓñêÖ¾£¬ÕýÈ·µÃµ½Êý¾Ý½á¹ûΪ³¤¶È len, 0ΪûÓÐÊý¾Ý£¬ÆäËûΪ´íÎó int ModbusRx(int midx, u8 index, u8 cmd, u16 addr, u16 * pData, u16 len, int steps) { 80055f0: b590 push {r4, r7, lr} 80055f2: b0c3 sub sp, #268 ; 0x10c 80055f4: af00 add r7, sp, #0 80055f6: 1d3c adds r4, r7, #4 80055f8: 6020 str r0, [r4, #0] 80055fa: 460c mov r4, r1 80055fc: 4610 mov r0, r2 80055fe: 4619 mov r1, r3 8005600: 1cfb adds r3, r7, #3 8005602: 4622 mov r2, r4 8005604: 701a strb r2, [r3, #0] 8005606: 1cbb adds r3, r7, #2 8005608: 4602 mov r2, r0 800560a: 701a strb r2, [r3, #0] 800560c: 463b mov r3, r7 800560e: 460a mov r2, r1 8005610: 801a strh r2, [r3, #0] u8 pRDat[MDBSRXLEN_MAX]; // ´ý½ÓÊÕÊý¾Ý»º³åÇø u16 checkcrc; // crcУÑé(RTU) u8 checksum; // ºÍУÑé(ASCII) u8 temp_h, temp_l, tempH, tempL; // if ((cmd != MODBUS_RD) && (cmd != MODBUS_WR) && (cmd != MODBUS_WR_MULTI)) 8005612: 1cbb adds r3, r7, #2 8005614: 781b ldrb r3, [r3, #0] 8005616: 2b03 cmp r3, #3 8005618: d00b beq.n 8005632 800561a: 1cbb adds r3, r7, #2 800561c: 781b ldrb r3, [r3, #0] 800561e: 2b06 cmp r3, #6 8005620: d007 beq.n 8005632 8005622: 1cbb adds r3, r7, #2 8005624: 781b ldrb r3, [r3, #0] 8005626: 2b10 cmp r3, #16 8005628: d003 beq.n 8005632 { return -1; //²ÎÊý´íÎó 800562a: f04f 33ff mov.w r3, #4294967295 800562e: f000 bf74 b.w 800651a } if ((len > MODBUS_LENMAX) || (len == 0)) 8005632: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005636: 2b32 cmp r3, #50 ; 0x32 8005638: d803 bhi.n 8005642 800563a: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 800563e: 2b00 cmp r3, #0 8005640: d103 bne.n 800564a { return -1; //²ÎÊý´íÎó 8005642: f04f 33ff mov.w r3, #4294967295 8005646: f000 bf68 b.w 800651a } if (midx < 0 || midx >= MODBUS_M_NUM) 800564a: 1d3b adds r3, r7, #4 800564c: 681b ldr r3, [r3, #0] 800564e: 2b00 cmp r3, #0 8005650: db03 blt.n 800565a 8005652: 1d3b adds r3, r7, #4 8005654: 681b ldr r3, [r3, #0] 8005656: 2b00 cmp r3, #0 8005658: dd07 ble.n 800566a { result = -1; 800565a: f04f 33ff mov.w r3, #4294967295 800565e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc return result; 8005662: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8005666: f000 bf58 b.w 800651a } if (g_modBusMCtrl[midx].modBusMode != 0) // ASCIIÂëģʽ 800566a: 49b9 ldr r1, [pc, #740] ; (8005950 ) 800566c: 1d3b adds r3, r7, #4 800566e: 681a ldr r2, [r3, #0] 8005670: 4613 mov r3, r2 8005672: 00db lsls r3, r3, #3 8005674: 4413 add r3, r2 8005676: 009b lsls r3, r3, #2 8005678: 440b add r3, r1 800567a: 681b ldr r3, [r3, #0] 800567c: 2b00 cmp r3, #0 800567e: d023 beq.n 80056c8 { if (cmd == MODBUS_RD) // ¶ÁÊý¾Ý 8005680: 1cbb adds r3, r7, #2 8005682: 781b ldrb r3, [r3, #0] 8005684: 2b03 cmp r3, #3 8005686: d106 bne.n 8005696 { exlen = len * 4 + 11; //°ü³¤¶È 8005688: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 800568c: 009b lsls r3, r3, #2 800568e: 330b adds r3, #11 8005690: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 8005694: e012 b.n 80056bc } else if (cmd == MODBUS_WR) // дÊý¾Ý 8005696: 1cbb adds r3, r7, #2 8005698: 781b ldrb r3, [r3, #0] 800569a: 2b06 cmp r3, #6 800569c: d103 bne.n 80056a6 { exlen = 17; //°ü³¤¶È 800569e: 2311 movs r3, #17 80056a0: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80056a4: e00a b.n 80056bc } else if (cmd == MODBUS_WR_MULTI) // д¶à¸ö×ÖÊý¾Ý 80056a6: 1cbb adds r3, r7, #2 80056a8: 781b ldrb r3, [r3, #0] 80056aa: 2b10 cmp r3, #16 80056ac: d103 bne.n 80056b6 { exlen = 17; //°ü³¤¶È 80056ae: 2311 movs r3, #17 80056b0: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80056b4: e002 b.n 80056bc } else { exlen = 17; //°ü³¤¶È 80056b6: 2311 movs r3, #17 80056b8: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 } exlen -= 1; // ¼õÈ¥Æðʼ·û : 80056bc: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 80056c0: 3b01 subs r3, #1 80056c2: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80056c6: e01d b.n 8005704 } else // RTU ģʽ { if (cmd == MODBUS_RD) // ¶ÁÊý¾Ý 80056c8: 1cbb adds r3, r7, #2 80056ca: 781b ldrb r3, [r3, #0] 80056cc: 2b03 cmp r3, #3 80056ce: d106 bne.n 80056de { exlen = len * 2 + 5; //°ü³¤¶È 80056d0: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 80056d4: 005b lsls r3, r3, #1 80056d6: 3305 adds r3, #5 80056d8: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80056dc: e012 b.n 8005704 } else if (cmd == MODBUS_WR) // дÊý¾Ý 80056de: 1cbb adds r3, r7, #2 80056e0: 781b ldrb r3, [r3, #0] 80056e2: 2b06 cmp r3, #6 80056e4: d103 bne.n 80056ee { exlen = 8; //°ü³¤¶È 80056e6: 2308 movs r3, #8 80056e8: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80056ec: e00a b.n 8005704 } else if (cmd == MODBUS_WR_MULTI) // д¶à¸ö×ÖÊý¾Ý 80056ee: 1cbb adds r3, r7, #2 80056f0: 781b ldrb r3, [r3, #0] 80056f2: 2b10 cmp r3, #16 80056f4: d103 bne.n 80056fe { exlen = 8; //°ü³¤¶È 80056f6: 2308 movs r3, #8 80056f8: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 80056fc: e002 b.n 8005704 } else { exlen = 8; //°ü³¤¶È 80056fe: 2308 movs r3, #8 8005700: f8c7 30f8 str.w r3, [r7, #248] ; 0xf8 } } if (steps == 1 || steps == -1) 8005704: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 8005708: 2b01 cmp r3, #1 800570a: d004 beq.n 8005716 800570c: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 8005710: f1b3 3fff cmp.w r3, #4294967295 8005714: d163 bne.n 80057de { memset(pRDat, 0, MDBSRXLEN_MAX); 8005716: f107 030c add.w r3, r7, #12 800571a: 22dd movs r2, #221 ; 0xdd 800571c: 2100 movs r1, #0 800571e: 4618 mov r0, r3 8005720: f004 f8eb bl 80098fa if (g_modBusMCtrl[midx].modBusMode != 0) // ASCIIÂëģʽ 8005724: 498a ldr r1, [pc, #552] ; (8005950 ) 8005726: 1d3b adds r3, r7, #4 8005728: 681a ldr r2, [r3, #0] 800572a: 4613 mov r3, r2 800572c: 00db lsls r3, r3, #3 800572e: 4413 add r3, r2 8005730: 009b lsls r3, r3, #2 8005732: 440b add r3, r1 8005734: 681b ldr r3, [r3, #0] 8005736: 2b00 cmp r3, #0 8005738: d051 beq.n 80057de { timeout = exlen*2 + 400; // ³¬Ê±Ê±¼ä 800573a: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 800573e: 33c8 adds r3, #200 ; 0xc8 8005740: 005b lsls r3, r3, #1 8005742: f8c7 30f4 str.w r3, [r7, #244] ; 0xf4 do { result = g_modBusMCtrl[midx].ModBusCommReceive(pRDat, 1); // ´Ó»º³åÇø¶ÁÈ¡Êý¾Ý 8005746: 4982 ldr r1, [pc, #520] ; (8005950 ) 8005748: 1d3b adds r3, r7, #4 800574a: 681a ldr r2, [r3, #0] 800574c: 4613 mov r3, r2 800574e: 00db lsls r3, r3, #3 8005750: 4413 add r3, r2 8005752: 009b lsls r3, r3, #2 8005754: 440b add r3, r1 8005756: 3310 adds r3, #16 8005758: 681b ldr r3, [r3, #0] 800575a: f107 020c add.w r2, r7, #12 800575e: 2101 movs r1, #1 8005760: 4610 mov r0, r2 8005762: 4798 blx r3 8005764: f8c7 00fc str.w r0, [r7, #252] ; 0xfc if (result == 1) 8005768: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 800576c: 2b01 cmp r3, #1 800576e: d10e bne.n 800578e { if (pRDat[0] == ':') // ÕÒµ½¿ªÊ¼±êÖ¾ 8005770: 7b3b ldrb r3, [r7, #12] 8005772: 2b3a cmp r3, #58 ; 0x3a 8005774: d103 bne.n 800577e { result = 0; 8005776: 2300 movs r3, #0 8005778: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800577c: e027 b.n 80057ce } else { if (steps == 1) 800577e: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 8005782: 2b01 cmp r3, #1 8005784: d103 bne.n 800578e { result = 1; // Òì²½µ÷ÓÃ,·µ»ØÖ´Ðв½Öè 8005786: 2301 movs r3, #1 8005788: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800578c: e01f b.n 80057ce } } } if (steps == -1) 800578e: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 8005792: f1b3 3fff cmp.w r3, #4294967295 8005796: d1d6 bne.n 8005746 { DelayUs(g_modBusMCtrl[midx].modBusWait); 8005798: 496d ldr r1, [pc, #436] ; (8005950 ) 800579a: 1d3b adds r3, r7, #4 800579c: 681a ldr r2, [r3, #0] 800579e: 4613 mov r3, r2 80057a0: 00db lsls r3, r3, #3 80057a2: 4413 add r3, r2 80057a4: 009b lsls r3, r3, #2 80057a6: 440b add r3, r1 80057a8: 3308 adds r3, #8 80057aa: 681b ldr r3, [r3, #0] 80057ac: 4618 mov r0, r3 80057ae: f7fd ff33 bl 8003618 if (timeout-- <= 0) 80057b2: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 80057b6: 1e5a subs r2, r3, #1 80057b8: f8c7 20f4 str.w r2, [r7, #244] ; 0xf4 80057bc: 2b00 cmp r3, #0 80057be: dcc2 bgt.n 8005746 { printf("1. call ModbusRx timeout\r\n"); 80057c0: 4864 ldr r0, [pc, #400] ; (8005954 ) 80057c2: f004 f917 bl 80099f4 result = -2; //½ÓÊÕ³¬Ê± 80057c6: f06f 0301 mvn.w r3, #1 80057ca: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; } } }while(1); if (result != 0) 80057ce: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80057d2: 2b00 cmp r3, #0 80057d4: d003 beq.n 80057de { return result; 80057d6: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80057da: f000 be9e b.w 800651a } } } if (steps != -1 && g_modBusMCtrl[midx].modBusMode == 0) // RTU Âëģʽ 80057de: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 80057e2: f1b3 3fff cmp.w r3, #4294967295 80057e6: d00d beq.n 8005804 80057e8: 4959 ldr r1, [pc, #356] ; (8005950 ) 80057ea: 1d3b adds r3, r7, #4 80057ec: 681a ldr r2, [r3, #0] 80057ee: 4613 mov r3, r2 80057f0: 00db lsls r3, r3, #3 80057f2: 4413 add r3, r2 80057f4: 009b lsls r3, r3, #2 80057f6: 440b add r3, r1 80057f8: 681b ldr r3, [r3, #0] 80057fa: 2b00 cmp r3, #0 80057fc: d102 bne.n 8005804 { steps = 2; 80057fe: 2302 movs r3, #2 8005800: f8c7 3120 str.w r3, [r7, #288] ; 0x120 } if (steps == 2 || steps == -1) 8005804: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 8005808: 2b02 cmp r3, #2 800580a: d005 beq.n 8005818 800580c: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 8005810: f1b3 3fff cmp.w r3, #4294967295 8005814: f040 8674 bne.w 8006500 { timeout = exlen*2 + 400; // ³¬Ê±Ê±¼ä 8005818: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 800581c: 33c8 adds r3, #200 ; 0xc8 800581e: 005b lsls r3, r3, #1 8005820: f8c7 30f4 str.w r3, [r7, #244] ; 0xf4 do { result = g_modBusMCtrl[midx].ModBusCommReceive(pRDat, exlen); // ´Ó»º³åÇø¶ÁÈ¡Êý¾Ý 8005824: 494a ldr r1, [pc, #296] ; (8005950 ) 8005826: 1d3b adds r3, r7, #4 8005828: 681a ldr r2, [r3, #0] 800582a: 4613 mov r3, r2 800582c: 00db lsls r3, r3, #3 800582e: 4413 add r3, r2 8005830: 009b lsls r3, r3, #2 8005832: 440b add r3, r1 8005834: 3310 adds r3, #16 8005836: 681b ldr r3, [r3, #0] 8005838: f107 020c add.w r2, r7, #12 800583c: f8d7 10f8 ldr.w r1, [r7, #248] ; 0xf8 8005840: 4610 mov r0, r2 8005842: 4798 blx r3 8005844: f8c7 00fc str.w r0, [r7, #252] ; 0xfc if (result >= exlen) 8005848: f8d7 20fc ldr.w r2, [r7, #252] ; 0xfc 800584c: f8d7 30f8 ldr.w r3, [r7, #248] ; 0xf8 8005850: 429a cmp r2, r3 8005852: f2c0 85f6 blt.w 8006442 { if (g_modBusMCtrl[midx].modBusMode != 0) // ASCIIÂëģʽ 8005856: 493e ldr r1, [pc, #248] ; (8005950 ) 8005858: 1d3b adds r3, r7, #4 800585a: 681a ldr r2, [r3, #0] 800585c: 4613 mov r3, r2 800585e: 00db lsls r3, r3, #3 8005860: 4413 add r3, r2 8005862: 009b lsls r3, r3, #2 8005864: 440b add r3, r1 8005866: 681b ldr r3, [r3, #0] 8005868: 2b00 cmp r3, #0 800586a: f000 84a7 beq.w 80061bc { if (g_modBusMCtrl[midx].filterChk != 0) // 7λÊý¾Ý¹ýÂËУÑéλ 800586e: 4938 ldr r1, [pc, #224] ; (8005950 ) 8005870: 1d3b adds r3, r7, #4 8005872: 681a ldr r2, [r3, #0] 8005874: 4613 mov r3, r2 8005876: 00db lsls r3, r3, #3 8005878: 4413 add r3, r2 800587a: 009b lsls r3, r3, #2 800587c: 440b add r3, r1 800587e: 3304 adds r3, #4 8005880: 681b ldr r3, [r3, #0] 8005882: 2b00 cmp r3, #0 8005884: d01e beq.n 80058c4 { for (i = 0; i < result; i++) 8005886: 2300 movs r3, #0 8005888: f8c7 3104 str.w r3, [r7, #260] ; 0x104 800588c: e014 b.n 80058b8 { pRDat[i] &= 0x7F; 800588e: f107 020c add.w r2, r7, #12 8005892: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005896: 4413 add r3, r2 8005898: 781b ldrb r3, [r3, #0] 800589a: f003 037f and.w r3, r3, #127 ; 0x7f 800589e: b2d9 uxtb r1, r3 80058a0: f107 020c add.w r2, r7, #12 80058a4: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80058a8: 4413 add r3, r2 80058aa: 460a mov r2, r1 80058ac: 701a strb r2, [r3, #0] for (i = 0; i < result; i++) 80058ae: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80058b2: 3301 adds r3, #1 80058b4: f8c7 3104 str.w r3, [r7, #260] ; 0x104 80058b8: f8d7 2104 ldr.w r2, [r7, #260] ; 0x104 80058bc: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80058c0: 429a cmp r2, r3 80058c2: dbe4 blt.n 800588e } } // ´¦ÀíÊý¾Ý°ü result = 0; 80058c4: 2300 movs r3, #0 80058c6: f8c7 30fc str.w r3, [r7, #252] ; 0xfc i = 0; 80058ca: 2300 movs r3, #0 80058cc: f8c7 3104 str.w r3, [r7, #260] ; 0x104 checksum = 0; 80058d0: 2300 movs r3, #0 80058d2: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i] != RtuToAscii(HIHFBYTE(index))) // INDEX_H 80058d6: f107 020c add.w r2, r7, #12 80058da: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80058de: 4413 add r3, r2 80058e0: 781c ldrb r4, [r3, #0] 80058e2: 1cfb adds r3, r7, #3 80058e4: 781b ldrb r3, [r3, #0] 80058e6: 091b lsrs r3, r3, #4 80058e8: b2db uxtb r3, r3 80058ea: 4618 mov r0, r3 80058ec: f7ff f845 bl 800497a 80058f0: 4603 mov r3, r0 80058f2: 429c cmp r4, r3 80058f4: d005 beq.n 8005902 { result = -3; // ½ÓÊÕ´íÎó 80058f6: f06f 0302 mvn.w r3, #2 80058fa: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80058fe: f000 bdff b.w 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005902: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005906: 1c5a adds r2, r3, #1 8005908: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800590c: f507 7284 add.w r2, r7, #264 ; 0x108 8005910: 4413 add r3, r2 8005912: f813 3cfc ldrb.w r3, [r3, #-252] 8005916: 4618 mov r0, r3 8005918: f7ff f806 bl 8004928 800591c: 4603 mov r3, r0 800591e: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(index))) // INDEX_L 8005922: f107 020c add.w r2, r7, #12 8005926: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 800592a: 4413 add r3, r2 800592c: 781c ldrb r4, [r3, #0] 800592e: 1cfb adds r3, r7, #3 8005930: 781b ldrb r3, [r3, #0] 8005932: f003 030f and.w r3, r3, #15 8005936: b2db uxtb r3, r3 8005938: 4618 mov r0, r3 800593a: f7ff f81e bl 800497a 800593e: 4603 mov r3, r0 8005940: 429c cmp r4, r3 8005942: d009 beq.n 8005958 { result = -3; // ½ÓÊÕ´íÎó 8005944: f06f 0302 mvn.w r3, #2 8005948: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800594c: f000 bdd8 b.w 8006500 8005950: 20001354 .word 0x20001354 8005954: 0800ac44 .word 0x0800ac44 } temp_l = AsciiToRtu(pRDat[i++]); 8005958: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 800595c: 1c5a adds r2, r3, #1 800595e: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005962: f507 7284 add.w r2, r7, #264 ; 0x108 8005966: 4413 add r3, r2 8005968: f813 3cfc ldrb.w r3, [r3, #-252] 800596c: 4618 mov r0, r3 800596e: f7fe ffdb bl 8004928 8005972: 4603 mov r3, r0 8005974: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005978: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 800597c: f003 030f and.w r3, r3, #15 8005980: b25a sxtb r2, r3 8005982: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005986: 011b lsls r3, r3, #4 8005988: b2db uxtb r3, r3 800598a: b25b sxtb r3, r3 800598c: 4313 orrs r3, r2 800598e: b25b sxtb r3, r3 8005990: b2da uxtb r2, r3 8005992: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005996: 4413 add r3, r2 8005998: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i] != RtuToAscii(HIHFBYTE(cmd))) // CMD_H 800599c: f107 020c add.w r2, r7, #12 80059a0: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80059a4: 4413 add r3, r2 80059a6: 781c ldrb r4, [r3, #0] 80059a8: 1cbb adds r3, r7, #2 80059aa: 781b ldrb r3, [r3, #0] 80059ac: 091b lsrs r3, r3, #4 80059ae: b2db uxtb r3, r3 80059b0: 4618 mov r0, r3 80059b2: f7fe ffe2 bl 800497a 80059b6: 4603 mov r3, r0 80059b8: 429c cmp r4, r3 80059ba: d005 beq.n 80059c8 { result = -3; // ½ÓÊÕ´íÎó 80059bc: f06f 0302 mvn.w r3, #2 80059c0: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80059c4: f000 bd9c b.w 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 80059c8: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80059cc: 1c5a adds r2, r3, #1 80059ce: f8c7 2104 str.w r2, [r7, #260] ; 0x104 80059d2: f507 7284 add.w r2, r7, #264 ; 0x108 80059d6: 4413 add r3, r2 80059d8: f813 3cfc ldrb.w r3, [r3, #-252] 80059dc: 4618 mov r0, r3 80059de: f7fe ffa3 bl 8004928 80059e2: 4603 mov r3, r0 80059e4: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(cmd))) // CMD_L 80059e8: f107 020c add.w r2, r7, #12 80059ec: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80059f0: 4413 add r3, r2 80059f2: 781c ldrb r4, [r3, #0] 80059f4: 1cbb adds r3, r7, #2 80059f6: 781b ldrb r3, [r3, #0] 80059f8: f003 030f and.w r3, r3, #15 80059fc: b2db uxtb r3, r3 80059fe: 4618 mov r0, r3 8005a00: f7fe ffbb bl 800497a 8005a04: 4603 mov r3, r0 8005a06: 429c cmp r4, r3 8005a08: d005 beq.n 8005a16 { result = -3; // ½ÓÊÕ´íÎó 8005a0a: f06f 0302 mvn.w r3, #2 8005a0e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005a12: f000 bd75 b.w 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005a16: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005a1a: 1c5a adds r2, r3, #1 8005a1c: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005a20: f507 7284 add.w r2, r7, #264 ; 0x108 8005a24: 4413 add r3, r2 8005a26: f813 3cfc ldrb.w r3, [r3, #-252] 8005a2a: 4618 mov r0, r3 8005a2c: f7fe ff7c bl 8004928 8005a30: 4603 mov r3, r0 8005a32: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005a36: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005a3a: f003 030f and.w r3, r3, #15 8005a3e: b25a sxtb r2, r3 8005a40: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005a44: 011b lsls r3, r3, #4 8005a46: b2db uxtb r3, r3 8005a48: b25b sxtb r3, r3 8005a4a: 4313 orrs r3, r2 8005a4c: b25b sxtb r3, r3 8005a4e: b2da uxtb r2, r3 8005a50: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005a54: 4413 add r3, r2 8005a56: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (cmd == MODBUS_RD) // ¶ÁÊý¾Ý 8005a5a: 1cbb adds r3, r7, #2 8005a5c: 781b ldrb r3, [r3, #0] 8005a5e: 2b03 cmp r3, #3 8005a60: d167 bne.n 8005b32 { if (pRDat[i] != RtuToAscii(HIHFBYTE(LOBYTE(len) << 1))) // LEN_H 8005a62: f107 020c add.w r2, r7, #12 8005a66: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005a6a: 4413 add r3, r2 8005a6c: 781c ldrb r4, [r3, #0] 8005a6e: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005a72: b2db uxtb r3, r3 8005a74: 005b lsls r3, r3, #1 8005a76: 111b asrs r3, r3, #4 8005a78: b2db uxtb r3, r3 8005a7a: f003 030f and.w r3, r3, #15 8005a7e: b2db uxtb r3, r3 8005a80: 4618 mov r0, r3 8005a82: f7fe ff7a bl 800497a 8005a86: 4603 mov r3, r0 8005a88: 429c cmp r4, r3 8005a8a: d005 beq.n 8005a98 { result = -3; // ½ÓÊÕ´íÎó 8005a8c: f06f 0302 mvn.w r3, #2 8005a90: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005a94: f000 bd34 b.w 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005a98: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005a9c: 1c5a adds r2, r3, #1 8005a9e: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005aa2: f507 7284 add.w r2, r7, #264 ; 0x108 8005aa6: 4413 add r3, r2 8005aa8: f813 3cfc ldrb.w r3, [r3, #-252] 8005aac: 4618 mov r0, r3 8005aae: f7fe ff3b bl 8004928 8005ab2: 4603 mov r3, r0 8005ab4: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(LOBYTE(len) << 1))) // LEN_L 8005ab8: f107 020c add.w r2, r7, #12 8005abc: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005ac0: 4413 add r3, r2 8005ac2: 781c ldrb r4, [r3, #0] 8005ac4: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005ac8: b2db uxtb r3, r3 8005aca: 005b lsls r3, r3, #1 8005acc: b2db uxtb r3, r3 8005ace: f003 030f and.w r3, r3, #15 8005ad2: b2db uxtb r3, r3 8005ad4: 4618 mov r0, r3 8005ad6: f7fe ff50 bl 800497a 8005ada: 4603 mov r3, r0 8005adc: 429c cmp r4, r3 8005ade: d005 beq.n 8005aec { result = -3; // ½ÓÊÕ´íÎó 8005ae0: f06f 0302 mvn.w r3, #2 8005ae4: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005ae8: f000 bd0a b.w 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005aec: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005af0: 1c5a adds r2, r3, #1 8005af2: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005af6: f507 7284 add.w r2, r7, #264 ; 0x108 8005afa: 4413 add r3, r2 8005afc: f813 3cfc ldrb.w r3, [r3, #-252] 8005b00: 4618 mov r0, r3 8005b02: f7fe ff11 bl 8004928 8005b06: 4603 mov r3, r0 8005b08: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005b0c: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005b10: f003 030f and.w r3, r3, #15 8005b14: b25a sxtb r2, r3 8005b16: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005b1a: 011b lsls r3, r3, #4 8005b1c: b2db uxtb r3, r3 8005b1e: b25b sxtb r3, r3 8005b20: 4313 orrs r3, r2 8005b22: b25b sxtb r3, r3 8005b24: b2da uxtb r2, r3 8005b26: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005b2a: 4413 add r3, r2 8005b2c: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 8005b30: e254 b.n 8005fdc } else if (cmd == MODBUS_WR) // дÊý¾Ý 8005b32: 1cbb adds r3, r7, #2 8005b34: 781b ldrb r3, [r3, #0] 8005b36: 2b06 cmp r3, #6 8005b38: f040 80c7 bne.w 8005cca { if (pRDat[i] != RtuToAscii(HIHFBYTE(HIBYTE(addr)))) // ADDR_HH 8005b3c: f107 020c add.w r2, r7, #12 8005b40: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005b44: 4413 add r3, r2 8005b46: 781c ldrb r4, [r3, #0] 8005b48: 463b mov r3, r7 8005b4a: 881b ldrh r3, [r3, #0] 8005b4c: 0a1b lsrs r3, r3, #8 8005b4e: b29b uxth r3, r3 8005b50: b2db uxtb r3, r3 8005b52: 091b lsrs r3, r3, #4 8005b54: b2db uxtb r3, r3 8005b56: 4618 mov r0, r3 8005b58: f7fe ff0f bl 800497a 8005b5c: 4603 mov r3, r0 8005b5e: 429c cmp r4, r3 8005b60: d005 beq.n 8005b6e { result = -3; //½ÓÊÕ´íÎó 8005b62: f06f 0302 mvn.w r3, #2 8005b66: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005b6a: f000 bcc9 b.w 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005b6e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005b72: 1c5a adds r2, r3, #1 8005b74: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005b78: f507 7284 add.w r2, r7, #264 ; 0x108 8005b7c: 4413 add r3, r2 8005b7e: f813 3cfc ldrb.w r3, [r3, #-252] 8005b82: 4618 mov r0, r3 8005b84: f7fe fed0 bl 8004928 8005b88: 4603 mov r3, r0 8005b8a: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(HIBYTE(addr)))) // ADDR_HL 8005b8e: f107 020c add.w r2, r7, #12 8005b92: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005b96: 4413 add r3, r2 8005b98: 781c ldrb r4, [r3, #0] 8005b9a: 463b mov r3, r7 8005b9c: 881b ldrh r3, [r3, #0] 8005b9e: 0a1b lsrs r3, r3, #8 8005ba0: b29b uxth r3, r3 8005ba2: b2db uxtb r3, r3 8005ba4: f003 030f and.w r3, r3, #15 8005ba8: b2db uxtb r3, r3 8005baa: 4618 mov r0, r3 8005bac: f7fe fee5 bl 800497a 8005bb0: 4603 mov r3, r0 8005bb2: 429c cmp r4, r3 8005bb4: d005 beq.n 8005bc2 { result = -3; //½ÓÊÕ´íÎó 8005bb6: f06f 0302 mvn.w r3, #2 8005bba: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005bbe: f000 bc9f b.w 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005bc2: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005bc6: 1c5a adds r2, r3, #1 8005bc8: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005bcc: f507 7284 add.w r2, r7, #264 ; 0x108 8005bd0: 4413 add r3, r2 8005bd2: f813 3cfc ldrb.w r3, [r3, #-252] 8005bd6: 4618 mov r0, r3 8005bd8: f7fe fea6 bl 8004928 8005bdc: 4603 mov r3, r0 8005bde: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005be2: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005be6: f003 030f and.w r3, r3, #15 8005bea: b25a sxtb r2, r3 8005bec: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005bf0: 011b lsls r3, r3, #4 8005bf2: b2db uxtb r3, r3 8005bf4: b25b sxtb r3, r3 8005bf6: 4313 orrs r3, r2 8005bf8: b25b sxtb r3, r3 8005bfa: b2da uxtb r2, r3 8005bfc: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005c00: 4413 add r3, r2 8005c02: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i] != RtuToAscii(HIHFBYTE(LOBYTE(addr)))) // ADDR_LH 8005c06: f107 020c add.w r2, r7, #12 8005c0a: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005c0e: 4413 add r3, r2 8005c10: 781c ldrb r4, [r3, #0] 8005c12: 463b mov r3, r7 8005c14: 881b ldrh r3, [r3, #0] 8005c16: b2db uxtb r3, r3 8005c18: 091b lsrs r3, r3, #4 8005c1a: b2db uxtb r3, r3 8005c1c: 4618 mov r0, r3 8005c1e: f7fe feac bl 800497a 8005c22: 4603 mov r3, r0 8005c24: 429c cmp r4, r3 8005c26: d005 beq.n 8005c34 { result = -3; //½ÓÊÕ´íÎó 8005c28: f06f 0302 mvn.w r3, #2 8005c2c: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005c30: f000 bc66 b.w 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005c34: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005c38: 1c5a adds r2, r3, #1 8005c3a: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005c3e: f507 7284 add.w r2, r7, #264 ; 0x108 8005c42: 4413 add r3, r2 8005c44: f813 3cfc ldrb.w r3, [r3, #-252] 8005c48: 4618 mov r0, r3 8005c4a: f7fe fe6d bl 8004928 8005c4e: 4603 mov r3, r0 8005c50: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(LOBYTE(addr)))) // ADDR_LL 8005c54: f107 020c add.w r2, r7, #12 8005c58: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005c5c: 4413 add r3, r2 8005c5e: 781c ldrb r4, [r3, #0] 8005c60: 463b mov r3, r7 8005c62: 881b ldrh r3, [r3, #0] 8005c64: b2db uxtb r3, r3 8005c66: f003 030f and.w r3, r3, #15 8005c6a: b2db uxtb r3, r3 8005c6c: 4618 mov r0, r3 8005c6e: f7fe fe84 bl 800497a 8005c72: 4603 mov r3, r0 8005c74: 429c cmp r4, r3 8005c76: d005 beq.n 8005c84 { result = -3; //½ÓÊÕ´íÎó 8005c78: f06f 0302 mvn.w r3, #2 8005c7c: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005c80: f000 bc3e b.w 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005c84: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005c88: 1c5a adds r2, r3, #1 8005c8a: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005c8e: f507 7284 add.w r2, r7, #264 ; 0x108 8005c92: 4413 add r3, r2 8005c94: f813 3cfc ldrb.w r3, [r3, #-252] 8005c98: 4618 mov r0, r3 8005c9a: f7fe fe45 bl 8004928 8005c9e: 4603 mov r3, r0 8005ca0: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005ca4: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005ca8: f003 030f and.w r3, r3, #15 8005cac: b25a sxtb r2, r3 8005cae: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005cb2: 011b lsls r3, r3, #4 8005cb4: b2db uxtb r3, r3 8005cb6: b25b sxtb r3, r3 8005cb8: 4313 orrs r3, r2 8005cba: b25b sxtb r3, r3 8005cbc: b2da uxtb r2, r3 8005cbe: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005cc2: 4413 add r3, r2 8005cc4: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 8005cc8: e188 b.n 8005fdc } else if (cmd == MODBUS_WR_MULTI) // д¶à¸ö×ÖÊý¾Ý 8005cca: 1cbb adds r3, r7, #2 8005ccc: 781b ldrb r3, [r3, #0] 8005cce: 2b10 cmp r3, #16 8005cd0: f040 8184 bne.w 8005fdc { if (pRDat[i] != RtuToAscii(HIHFBYTE(HIBYTE(addr)))) // ADDR_HH 8005cd4: f107 020c add.w r2, r7, #12 8005cd8: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005cdc: 4413 add r3, r2 8005cde: 781c ldrb r4, [r3, #0] 8005ce0: 463b mov r3, r7 8005ce2: 881b ldrh r3, [r3, #0] 8005ce4: 0a1b lsrs r3, r3, #8 8005ce6: b29b uxth r3, r3 8005ce8: b2db uxtb r3, r3 8005cea: 091b lsrs r3, r3, #4 8005cec: b2db uxtb r3, r3 8005cee: 4618 mov r0, r3 8005cf0: f7fe fe43 bl 800497a 8005cf4: 4603 mov r3, r0 8005cf6: 429c cmp r4, r3 8005cf8: d004 beq.n 8005d04 { result = -3; //½ÓÊÕ´íÎó 8005cfa: f06f 0302 mvn.w r3, #2 8005cfe: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005d02: e3fd b.n 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005d04: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005d08: 1c5a adds r2, r3, #1 8005d0a: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005d0e: f507 7284 add.w r2, r7, #264 ; 0x108 8005d12: 4413 add r3, r2 8005d14: f813 3cfc ldrb.w r3, [r3, #-252] 8005d18: 4618 mov r0, r3 8005d1a: f7fe fe05 bl 8004928 8005d1e: 4603 mov r3, r0 8005d20: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(HIBYTE(addr)))) // ADDR_HL 8005d24: f107 020c add.w r2, r7, #12 8005d28: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005d2c: 4413 add r3, r2 8005d2e: 781c ldrb r4, [r3, #0] 8005d30: 463b mov r3, r7 8005d32: 881b ldrh r3, [r3, #0] 8005d34: 0a1b lsrs r3, r3, #8 8005d36: b29b uxth r3, r3 8005d38: b2db uxtb r3, r3 8005d3a: f003 030f and.w r3, r3, #15 8005d3e: b2db uxtb r3, r3 8005d40: 4618 mov r0, r3 8005d42: f7fe fe1a bl 800497a 8005d46: 4603 mov r3, r0 8005d48: 429c cmp r4, r3 8005d4a: d004 beq.n 8005d56 { result = -3; //½ÓÊÕ´íÎó 8005d4c: f06f 0302 mvn.w r3, #2 8005d50: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005d54: e3d4 b.n 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005d56: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005d5a: 1c5a adds r2, r3, #1 8005d5c: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005d60: f507 7284 add.w r2, r7, #264 ; 0x108 8005d64: 4413 add r3, r2 8005d66: f813 3cfc ldrb.w r3, [r3, #-252] 8005d6a: 4618 mov r0, r3 8005d6c: f7fe fddc bl 8004928 8005d70: 4603 mov r3, r0 8005d72: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005d76: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005d7a: f003 030f and.w r3, r3, #15 8005d7e: b25a sxtb r2, r3 8005d80: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005d84: 011b lsls r3, r3, #4 8005d86: b2db uxtb r3, r3 8005d88: b25b sxtb r3, r3 8005d8a: 4313 orrs r3, r2 8005d8c: b25b sxtb r3, r3 8005d8e: b2da uxtb r2, r3 8005d90: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005d94: 4413 add r3, r2 8005d96: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i] != RtuToAscii(HIHFBYTE(LOBYTE(addr)))) // ADDR_LH 8005d9a: f107 020c add.w r2, r7, #12 8005d9e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005da2: 4413 add r3, r2 8005da4: 781c ldrb r4, [r3, #0] 8005da6: 463b mov r3, r7 8005da8: 881b ldrh r3, [r3, #0] 8005daa: b2db uxtb r3, r3 8005dac: 091b lsrs r3, r3, #4 8005dae: b2db uxtb r3, r3 8005db0: 4618 mov r0, r3 8005db2: f7fe fde2 bl 800497a 8005db6: 4603 mov r3, r0 8005db8: 429c cmp r4, r3 8005dba: d004 beq.n 8005dc6 { result = -3; //½ÓÊÕ´íÎó 8005dbc: f06f 0302 mvn.w r3, #2 8005dc0: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005dc4: e39c b.n 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005dc6: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005dca: 1c5a adds r2, r3, #1 8005dcc: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005dd0: f507 7284 add.w r2, r7, #264 ; 0x108 8005dd4: 4413 add r3, r2 8005dd6: f813 3cfc ldrb.w r3, [r3, #-252] 8005dda: 4618 mov r0, r3 8005ddc: f7fe fda4 bl 8004928 8005de0: 4603 mov r3, r0 8005de2: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(LOBYTE(addr)))) // ADDR_LL 8005de6: f107 020c add.w r2, r7, #12 8005dea: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005dee: 4413 add r3, r2 8005df0: 781c ldrb r4, [r3, #0] 8005df2: 463b mov r3, r7 8005df4: 881b ldrh r3, [r3, #0] 8005df6: b2db uxtb r3, r3 8005df8: f003 030f and.w r3, r3, #15 8005dfc: b2db uxtb r3, r3 8005dfe: 4618 mov r0, r3 8005e00: f7fe fdbb bl 800497a 8005e04: 4603 mov r3, r0 8005e06: 429c cmp r4, r3 8005e08: d004 beq.n 8005e14 { result = -3; //½ÓÊÕ´íÎó 8005e0a: f06f 0302 mvn.w r3, #2 8005e0e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005e12: e375 b.n 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005e14: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005e18: 1c5a adds r2, r3, #1 8005e1a: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005e1e: f507 7284 add.w r2, r7, #264 ; 0x108 8005e22: 4413 add r3, r2 8005e24: f813 3cfc ldrb.w r3, [r3, #-252] 8005e28: 4618 mov r0, r3 8005e2a: f7fe fd7d bl 8004928 8005e2e: 4603 mov r3, r0 8005e30: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005e34: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005e38: f003 030f and.w r3, r3, #15 8005e3c: b25a sxtb r2, r3 8005e3e: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005e42: 011b lsls r3, r3, #4 8005e44: b2db uxtb r3, r3 8005e46: b25b sxtb r3, r3 8005e48: 4313 orrs r3, r2 8005e4a: b25b sxtb r3, r3 8005e4c: b2da uxtb r2, r3 8005e4e: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005e52: 4413 add r3, r2 8005e54: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i] != RtuToAscii(HIHFBYTE(HIBYTE(len)))) // LEN_HH 8005e58: f107 020c add.w r2, r7, #12 8005e5c: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005e60: 4413 add r3, r2 8005e62: 781c ldrb r4, [r3, #0] 8005e64: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005e68: 0a1b lsrs r3, r3, #8 8005e6a: b29b uxth r3, r3 8005e6c: b2db uxtb r3, r3 8005e6e: 091b lsrs r3, r3, #4 8005e70: b2db uxtb r3, r3 8005e72: 4618 mov r0, r3 8005e74: f7fe fd81 bl 800497a 8005e78: 4603 mov r3, r0 8005e7a: 429c cmp r4, r3 8005e7c: d004 beq.n 8005e88 { result = -3; //½ÓÊÕ´íÎó 8005e7e: f06f 0302 mvn.w r3, #2 8005e82: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005e86: e33b b.n 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005e88: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005e8c: 1c5a adds r2, r3, #1 8005e8e: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005e92: f507 7284 add.w r2, r7, #264 ; 0x108 8005e96: 4413 add r3, r2 8005e98: f813 3cfc ldrb.w r3, [r3, #-252] 8005e9c: 4618 mov r0, r3 8005e9e: f7fe fd43 bl 8004928 8005ea2: 4603 mov r3, r0 8005ea4: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(HIBYTE(len)))) // LEN_HL 8005ea8: f107 020c add.w r2, r7, #12 8005eac: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005eb0: 4413 add r3, r2 8005eb2: 781c ldrb r4, [r3, #0] 8005eb4: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005eb8: 0a1b lsrs r3, r3, #8 8005eba: b29b uxth r3, r3 8005ebc: b2db uxtb r3, r3 8005ebe: f003 030f and.w r3, r3, #15 8005ec2: b2db uxtb r3, r3 8005ec4: 4618 mov r0, r3 8005ec6: f7fe fd58 bl 800497a 8005eca: 4603 mov r3, r0 8005ecc: 429c cmp r4, r3 8005ece: d004 beq.n 8005eda { result = -3; //½ÓÊÕ´íÎó 8005ed0: f06f 0302 mvn.w r3, #2 8005ed4: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005ed8: e312 b.n 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005eda: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005ede: 1c5a adds r2, r3, #1 8005ee0: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005ee4: f507 7284 add.w r2, r7, #264 ; 0x108 8005ee8: 4413 add r3, r2 8005eea: f813 3cfc ldrb.w r3, [r3, #-252] 8005eee: 4618 mov r0, r3 8005ef0: f7fe fd1a bl 8004928 8005ef4: 4603 mov r3, r0 8005ef6: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005efa: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005efe: f003 030f and.w r3, r3, #15 8005f02: b25a sxtb r2, r3 8005f04: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005f08: 011b lsls r3, r3, #4 8005f0a: b2db uxtb r3, r3 8005f0c: b25b sxtb r3, r3 8005f0e: 4313 orrs r3, r2 8005f10: b25b sxtb r3, r3 8005f12: b2da uxtb r2, r3 8005f14: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005f18: 4413 add r3, r2 8005f1a: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i] != RtuToAscii(HIHFBYTE(LOBYTE(len)))) // LEN_LH 8005f1e: f107 020c add.w r2, r7, #12 8005f22: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005f26: 4413 add r3, r2 8005f28: 781c ldrb r4, [r3, #0] 8005f2a: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005f2e: b2db uxtb r3, r3 8005f30: 091b lsrs r3, r3, #4 8005f32: b2db uxtb r3, r3 8005f34: 4618 mov r0, r3 8005f36: f7fe fd20 bl 800497a 8005f3a: 4603 mov r3, r0 8005f3c: 429c cmp r4, r3 8005f3e: d004 beq.n 8005f4a { result = -3; //½ÓÊÕ´íÎó 8005f40: f06f 0302 mvn.w r3, #2 8005f44: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005f48: e2da b.n 8006500 } temp_h = AsciiToRtu(pRDat[i++]); 8005f4a: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005f4e: 1c5a adds r2, r3, #1 8005f50: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005f54: f507 7284 add.w r2, r7, #264 ; 0x108 8005f58: 4413 add r3, r2 8005f5a: f813 3cfc ldrb.w r3, [r3, #-252] 8005f5e: 4618 mov r0, r3 8005f60: f7fe fce2 bl 8004928 8005f64: 4603 mov r3, r0 8005f66: f887 30ef strb.w r3, [r7, #239] ; 0xef if (pRDat[i] != RtuToAscii(LOHFBYTE(LOBYTE(len)))) // LEN_LL 8005f6a: f107 020c add.w r2, r7, #12 8005f6e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005f72: 4413 add r3, r2 8005f74: 781c ldrb r4, [r3, #0] 8005f76: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8005f7a: b2db uxtb r3, r3 8005f7c: f003 030f and.w r3, r3, #15 8005f80: b2db uxtb r3, r3 8005f82: 4618 mov r0, r3 8005f84: f7fe fcf9 bl 800497a 8005f88: 4603 mov r3, r0 8005f8a: 429c cmp r4, r3 8005f8c: d004 beq.n 8005f98 { result = -3; //½ÓÊÕ´íÎó 8005f8e: f06f 0302 mvn.w r3, #2 8005f92: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8005f96: e2b3 b.n 8006500 } temp_l = AsciiToRtu(pRDat[i++]); 8005f98: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005f9c: 1c5a adds r2, r3, #1 8005f9e: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8005fa2: f507 7284 add.w r2, r7, #264 ; 0x108 8005fa6: 4413 add r3, r2 8005fa8: f813 3cfc ldrb.w r3, [r3, #-252] 8005fac: 4618 mov r0, r3 8005fae: f7fe fcbb bl 8004928 8005fb2: 4603 mov r3, r0 8005fb4: f887 30ee strb.w r3, [r7, #238] ; 0xee checksum += MAKEBYTE(temp_l,temp_h); 8005fb8: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 8005fbc: f003 030f and.w r3, r3, #15 8005fc0: b25a sxtb r2, r3 8005fc2: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8005fc6: 011b lsls r3, r3, #4 8005fc8: b2db uxtb r3, r3 8005fca: b25b sxtb r3, r3 8005fcc: 4313 orrs r3, r2 8005fce: b25b sxtb r3, r3 8005fd0: b2da uxtb r2, r3 8005fd2: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8005fd6: 4413 add r3, r2 8005fd8: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 } if (cmd == MODBUS_RD || // ¶ÁÊý¾Ý 8005fdc: 1cbb adds r3, r7, #2 8005fde: 781b ldrb r3, [r3, #0] 8005fe0: 2b03 cmp r3, #3 8005fe2: d004 beq.n 8005fee cmd == MODBUS_WR || // дÊý¾Ý 8005fe4: 1cbb adds r3, r7, #2 8005fe6: 781b ldrb r3, [r3, #0] 8005fe8: 2b06 cmp r3, #6 8005fea: f040 808b bne.w 8006104 0) { for (j = 0; j < len; j++) 8005fee: 2300 movs r3, #0 8005ff0: f8c7 3100 str.w r3, [r7, #256] ; 0x100 8005ff4: e07f b.n 80060f6 { temp_h = AsciiToRtu(pRDat[i++]); 8005ff6: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8005ffa: 1c5a adds r2, r3, #1 8005ffc: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006000: f507 7284 add.w r2, r7, #264 ; 0x108 8006004: 4413 add r3, r2 8006006: f813 3cfc ldrb.w r3, [r3, #-252] 800600a: 4618 mov r0, r3 800600c: f7fe fc8c bl 8004928 8006010: 4603 mov r3, r0 8006012: f887 30ef strb.w r3, [r7, #239] ; 0xef temp_l = AsciiToRtu(pRDat[i++]); 8006016: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 800601a: 1c5a adds r2, r3, #1 800601c: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006020: f507 7284 add.w r2, r7, #264 ; 0x108 8006024: 4413 add r3, r2 8006026: f813 3cfc ldrb.w r3, [r3, #-252] 800602a: 4618 mov r0, r3 800602c: f7fe fc7c bl 8004928 8006030: 4603 mov r3, r0 8006032: f887 30ee strb.w r3, [r7, #238] ; 0xee tempH = MAKEBYTE(temp_l, temp_h); 8006036: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 800603a: f003 030f and.w r3, r3, #15 800603e: b25a sxtb r2, r3 8006040: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 8006044: 011b lsls r3, r3, #4 8006046: b2db uxtb r3, r3 8006048: b25b sxtb r3, r3 800604a: 4313 orrs r3, r2 800604c: b25b sxtb r3, r3 800604e: f887 30ed strb.w r3, [r7, #237] ; 0xed checksum += tempH; 8006052: f897 20f3 ldrb.w r2, [r7, #243] ; 0xf3 8006056: f897 30ed ldrb.w r3, [r7, #237] ; 0xed 800605a: 4413 add r3, r2 800605c: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 temp_h = AsciiToRtu(pRDat[i++]); 8006060: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006064: 1c5a adds r2, r3, #1 8006066: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800606a: f507 7284 add.w r2, r7, #264 ; 0x108 800606e: 4413 add r3, r2 8006070: f813 3cfc ldrb.w r3, [r3, #-252] 8006074: 4618 mov r0, r3 8006076: f7fe fc57 bl 8004928 800607a: 4603 mov r3, r0 800607c: f887 30ef strb.w r3, [r7, #239] ; 0xef temp_l = AsciiToRtu(pRDat[i++]); 8006080: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006084: 1c5a adds r2, r3, #1 8006086: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800608a: f507 7284 add.w r2, r7, #264 ; 0x108 800608e: 4413 add r3, r2 8006090: f813 3cfc ldrb.w r3, [r3, #-252] 8006094: 4618 mov r0, r3 8006096: f7fe fc47 bl 8004928 800609a: 4603 mov r3, r0 800609c: f887 30ee strb.w r3, [r7, #238] ; 0xee tempL = MAKEBYTE(temp_l, temp_h); 80060a0: f997 30ee ldrsb.w r3, [r7, #238] ; 0xee 80060a4: f003 030f and.w r3, r3, #15 80060a8: b25a sxtb r2, r3 80060aa: f897 30ef ldrb.w r3, [r7, #239] ; 0xef 80060ae: 011b lsls r3, r3, #4 80060b0: b2db uxtb r3, r3 80060b2: b25b sxtb r3, r3 80060b4: 4313 orrs r3, r2 80060b6: b25b sxtb r3, r3 80060b8: f887 30ec strb.w r3, [r7, #236] ; 0xec checksum += tempL; 80060bc: f897 20f3 ldrb.w r2, [r7, #243] ; 0xf3 80060c0: f897 30ec ldrb.w r3, [r7, #236] ; 0xec 80060c4: 4413 add r3, r2 80060c6: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 pData[j] = MAKEWORD(tempL, tempH); 80060ca: f897 30ec ldrb.w r3, [r7, #236] ; 0xec 80060ce: b21a sxth r2, r3 80060d0: f897 30ed ldrb.w r3, [r7, #237] ; 0xed 80060d4: 021b lsls r3, r3, #8 80060d6: b21b sxth r3, r3 80060d8: 4313 orrs r3, r2 80060da: b219 sxth r1, r3 80060dc: f8d7 3100 ldr.w r3, [r7, #256] ; 0x100 80060e0: 005b lsls r3, r3, #1 80060e2: f8d7 2118 ldr.w r2, [r7, #280] ; 0x118 80060e6: 4413 add r3, r2 80060e8: b28a uxth r2, r1 80060ea: 801a strh r2, [r3, #0] for (j = 0; j < len; j++) 80060ec: f8d7 3100 ldr.w r3, [r7, #256] ; 0x100 80060f0: 3301 adds r3, #1 80060f2: f8c7 3100 str.w r3, [r7, #256] ; 0x100 80060f6: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 80060fa: f8d7 2100 ldr.w r2, [r7, #256] ; 0x100 80060fe: 429a cmp r2, r3 8006100: f6ff af79 blt.w 8005ff6 } } checksum = ~checksum + 1; 8006104: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8006108: 425b negs r3, r3 800610a: f887 30f3 strb.w r3, [r7, #243] ; 0xf3 if (pRDat[i++] != RtuToAscii(HIHFBYTE(checksum))) // LRC_H 800610e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006112: 1c5a adds r2, r3, #1 8006114: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006118: f507 7284 add.w r2, r7, #264 ; 0x108 800611c: 4413 add r3, r2 800611e: f813 4cfc ldrb.w r4, [r3, #-252] 8006122: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8006126: 091b lsrs r3, r3, #4 8006128: b2db uxtb r3, r3 800612a: 4618 mov r0, r3 800612c: f7fe fc25 bl 800497a 8006130: 4603 mov r3, r0 8006132: 429c cmp r4, r3 8006134: d004 beq.n 8006140 { result = -3; //½ÓÊÕ´íÎó 8006136: f06f 0302 mvn.w r3, #2 800613a: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800613e: e1df b.n 8006500 } if (pRDat[i++] != RtuToAscii(LOHFBYTE(checksum))) // LRC_L 8006140: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006144: 1c5a adds r2, r3, #1 8006146: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800614a: f507 7284 add.w r2, r7, #264 ; 0x108 800614e: 4413 add r3, r2 8006150: f813 4cfc ldrb.w r4, [r3, #-252] 8006154: f897 30f3 ldrb.w r3, [r7, #243] ; 0xf3 8006158: f003 030f and.w r3, r3, #15 800615c: b2db uxtb r3, r3 800615e: 4618 mov r0, r3 8006160: f7fe fc0b bl 800497a 8006164: 4603 mov r3, r0 8006166: 429c cmp r4, r3 8006168: d004 beq.n 8006174 { result = -3; //½ÓÊÕ´íÎó 800616a: f06f 0302 mvn.w r3, #2 800616e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006172: e1c5 b.n 8006500 } if (pRDat[i++] != '\r') // CR 8006174: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006178: 1c5a adds r2, r3, #1 800617a: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800617e: f507 7284 add.w r2, r7, #264 ; 0x108 8006182: 4413 add r3, r2 8006184: f813 3cfc ldrb.w r3, [r3, #-252] 8006188: 2b0d cmp r3, #13 800618a: f040 81b2 bne.w 80064f2 { // result = -3; //½ÓÊÕ´íÎó break; } if (pRDat[i++] != '\n') // LF 800618e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006192: 1c5a adds r2, r3, #1 8006194: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006198: f507 7284 add.w r2, r7, #264 ; 0x108 800619c: 4413 add r3, r2 800619e: f813 3cfc ldrb.w r3, [r3, #-252] 80061a2: 2b0a cmp r3, #10 80061a4: f040 81a7 bne.w 80064f6 { //result = -3; //½ÓÊÕ´íÎó break; } if (result == 0) 80061a8: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 80061ac: 2b00 cmp r3, #0 80061ae: f040 81a4 bne.w 80064fa { result = len; 80061b2: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 80061b6: f8c7 30fc str.w r3, [r7, #252] ; 0xfc } break; 80061ba: e19e b.n 80064fa } else // RTU ģʽ { // ´¦ÀíÊý¾Ý°ü result = 0; 80061bc: 2300 movs r3, #0 80061be: f8c7 30fc str.w r3, [r7, #252] ; 0xfc i = 0; 80061c2: 2300 movs r3, #0 80061c4: f8c7 3104 str.w r3, [r7, #260] ; 0x104 if (pRDat[i++] != index) // ´ÓÕ¾µØÖ· 80061c8: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80061cc: 1c5a adds r2, r3, #1 80061ce: f8c7 2104 str.w r2, [r7, #260] ; 0x104 80061d2: f507 7284 add.w r2, r7, #264 ; 0x108 80061d6: 4413 add r3, r2 80061d8: f813 3cfc ldrb.w r3, [r3, #-252] 80061dc: 1cfa adds r2, r7, #3 80061de: 7812 ldrb r2, [r2, #0] 80061e0: 429a cmp r2, r3 80061e2: d004 beq.n 80061ee { result = -3; // ½ÓÊÕ´íÎó 80061e4: f06f 0302 mvn.w r3, #2 80061e8: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80061ec: e188 b.n 8006500 } if (pRDat[i++] != cmd) 80061ee: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80061f2: 1c5a adds r2, r3, #1 80061f4: f8c7 2104 str.w r2, [r7, #260] ; 0x104 80061f8: f507 7284 add.w r2, r7, #264 ; 0x108 80061fc: 4413 add r3, r2 80061fe: f813 3cfc ldrb.w r3, [r3, #-252] 8006202: 1cba adds r2, r7, #2 8006204: 7812 ldrb r2, [r2, #0] 8006206: 429a cmp r2, r3 8006208: d004 beq.n 8006214 { result = -3; // ½ÓÊÕ´íÎó 800620a: f06f 0302 mvn.w r3, #2 800620e: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006212: e175 b.n 8006500 } if (cmd == MODBUS_RD) // ¶ÁÊý¾Ý 8006214: 1cbb adds r3, r7, #2 8006216: 781b ldrb r3, [r3, #0] 8006218: 2b03 cmp r3, #3 800621a: d116 bne.n 800624a { if (pRDat[i++] != (LOBYTE(len) << 1)) // LEN 800621c: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006220: 1c5a adds r2, r3, #1 8006222: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006226: f507 7284 add.w r2, r7, #264 ; 0x108 800622a: 4413 add r3, r2 800622c: f813 3cfc ldrb.w r3, [r3, #-252] 8006230: 461a mov r2, r3 8006232: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8006236: b2db uxtb r3, r3 8006238: 005b lsls r3, r3, #1 800623a: 429a cmp r2, r3 800623c: f000 808b beq.w 8006356 { result = -3; // ½ÓÊÕ´íÎó 8006240: f06f 0302 mvn.w r3, #2 8006244: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006248: e15a b.n 8006500 } } else if (cmd == MODBUS_WR) // дÊý¾Ý 800624a: 1cbb adds r3, r7, #2 800624c: 781b ldrb r3, [r3, #0] 800624e: 2b06 cmp r3, #6 8006250: d129 bne.n 80062a6 { if (pRDat[i++] != HIBYTE(addr)) // ADDR_H 8006252: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006256: 1c5a adds r2, r3, #1 8006258: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800625c: f507 7284 add.w r2, r7, #264 ; 0x108 8006260: 4413 add r3, r2 8006262: f813 2cfc ldrb.w r2, [r3, #-252] 8006266: 463b mov r3, r7 8006268: 881b ldrh r3, [r3, #0] 800626a: 0a1b lsrs r3, r3, #8 800626c: b29b uxth r3, r3 800626e: b2db uxtb r3, r3 8006270: 429a cmp r2, r3 8006272: d004 beq.n 800627e { result = -3; // ½ÓÊÕ´íÎó 8006274: f06f 0302 mvn.w r3, #2 8006278: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800627c: e140 b.n 8006500 } if (pRDat[i++] != LOBYTE(addr)) // ADDR_L 800627e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006282: 1c5a adds r2, r3, #1 8006284: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006288: f507 7284 add.w r2, r7, #264 ; 0x108 800628c: 4413 add r3, r2 800628e: f813 2cfc ldrb.w r2, [r3, #-252] 8006292: 463b mov r3, r7 8006294: 881b ldrh r3, [r3, #0] 8006296: b2db uxtb r3, r3 8006298: 429a cmp r2, r3 800629a: d05c beq.n 8006356 { result = -3; // ½ÓÊÕ´íÎó 800629c: f06f 0302 mvn.w r3, #2 80062a0: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80062a4: e12c b.n 8006500 } } else if (cmd == MODBUS_WR_MULTI) // д¶à¸ö×ÖÊý¾Ý 80062a6: 1cbb adds r3, r7, #2 80062a8: 781b ldrb r3, [r3, #0] 80062aa: 2b10 cmp r3, #16 80062ac: d153 bne.n 8006356 { if (pRDat[i++] != HIBYTE(addr)) // ADDR_H 80062ae: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80062b2: 1c5a adds r2, r3, #1 80062b4: f8c7 2104 str.w r2, [r7, #260] ; 0x104 80062b8: f507 7284 add.w r2, r7, #264 ; 0x108 80062bc: 4413 add r3, r2 80062be: f813 2cfc ldrb.w r2, [r3, #-252] 80062c2: 463b mov r3, r7 80062c4: 881b ldrh r3, [r3, #0] 80062c6: 0a1b lsrs r3, r3, #8 80062c8: b29b uxth r3, r3 80062ca: b2db uxtb r3, r3 80062cc: 429a cmp r2, r3 80062ce: d004 beq.n 80062da { result = -3; // ½ÓÊÕ´íÎó 80062d0: f06f 0302 mvn.w r3, #2 80062d4: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80062d8: e112 b.n 8006500 } if (pRDat[i++] != LOBYTE(addr)) // ADDR_L 80062da: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80062de: 1c5a adds r2, r3, #1 80062e0: f8c7 2104 str.w r2, [r7, #260] ; 0x104 80062e4: f507 7284 add.w r2, r7, #264 ; 0x108 80062e8: 4413 add r3, r2 80062ea: f813 2cfc ldrb.w r2, [r3, #-252] 80062ee: 463b mov r3, r7 80062f0: 881b ldrh r3, [r3, #0] 80062f2: b2db uxtb r3, r3 80062f4: 429a cmp r2, r3 80062f6: d004 beq.n 8006302 { result = -3; // ½ÓÊÕ´íÎó 80062f8: f06f 0302 mvn.w r3, #2 80062fc: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006300: e0fe b.n 8006500 } if (pRDat[i++] != HIBYTE(len)) // LEN_H 8006302: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006306: 1c5a adds r2, r3, #1 8006308: f8c7 2104 str.w r2, [r7, #260] ; 0x104 800630c: f507 7284 add.w r2, r7, #264 ; 0x108 8006310: 4413 add r3, r2 8006312: f813 2cfc ldrb.w r2, [r3, #-252] 8006316: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 800631a: 0a1b lsrs r3, r3, #8 800631c: b29b uxth r3, r3 800631e: b2db uxtb r3, r3 8006320: 429a cmp r2, r3 8006322: d004 beq.n 800632e { result = -3; // ½ÓÊÕ´íÎó 8006324: f06f 0302 mvn.w r3, #2 8006328: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800632c: e0e8 b.n 8006500 } if (pRDat[i++] != LOBYTE(len)) // LEN_L 800632e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006332: 1c5a adds r2, r3, #1 8006334: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006338: f507 7284 add.w r2, r7, #264 ; 0x108 800633c: 4413 add r3, r2 800633e: f813 2cfc ldrb.w r2, [r3, #-252] 8006342: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 8006346: b2db uxtb r3, r3 8006348: 429a cmp r2, r3 800634a: d004 beq.n 8006356 { result = -3; // ½ÓÊÕ´íÎó 800634c: f06f 0302 mvn.w r3, #2 8006350: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006354: e0d4 b.n 8006500 } } if (cmd == MODBUS_RD || // ¶ÁÊý¾Ý 8006356: 1cbb adds r3, r7, #2 8006358: 781b ldrb r3, [r3, #0] 800635a: 2b03 cmp r3, #3 800635c: d003 beq.n 8006366 cmd == MODBUS_WR || // дÊý¾Ý 800635e: 1cbb adds r3, r7, #2 8006360: 781b ldrb r3, [r3, #0] 8006362: 2b06 cmp r3, #6 8006364: d12e bne.n 80063c4 0) { for (j = 0; j < len; j++) 8006366: 2300 movs r3, #0 8006368: f8c7 3100 str.w r3, [r7, #256] ; 0x100 800636c: e024 b.n 80063b8 { pData[j] = MAKEWORD(pRDat[i+1], pRDat[i]); 800636e: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006372: 3301 adds r3, #1 8006374: f507 7284 add.w r2, r7, #264 ; 0x108 8006378: 4413 add r3, r2 800637a: f813 3cfc ldrb.w r3, [r3, #-252] 800637e: b21a sxth r2, r3 8006380: f107 010c add.w r1, r7, #12 8006384: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 8006388: 440b add r3, r1 800638a: 781b ldrb r3, [r3, #0] 800638c: 021b lsls r3, r3, #8 800638e: b21b sxth r3, r3 8006390: 4313 orrs r3, r2 8006392: b219 sxth r1, r3 8006394: f8d7 3100 ldr.w r3, [r7, #256] ; 0x100 8006398: 005b lsls r3, r3, #1 800639a: f8d7 2118 ldr.w r2, [r7, #280] ; 0x118 800639e: 4413 add r3, r2 80063a0: b28a uxth r2, r1 80063a2: 801a strh r2, [r3, #0] i += 2; 80063a4: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80063a8: 3302 adds r3, #2 80063aa: f8c7 3104 str.w r3, [r7, #260] ; 0x104 for (j = 0; j < len; j++) 80063ae: f8d7 3100 ldr.w r3, [r7, #256] ; 0x100 80063b2: 3301 adds r3, #1 80063b4: f8c7 3100 str.w r3, [r7, #256] ; 0x100 80063b8: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 80063bc: f8d7 2100 ldr.w r2, [r7, #256] ; 0x100 80063c0: 429a cmp r2, r3 80063c2: dbd4 blt.n 800636e } } checkcrc = ModbusCrc16(&pRDat[0], i); 80063c4: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80063c8: b29a uxth r2, r3 80063ca: f107 030c add.w r3, r7, #12 80063ce: 4611 mov r1, r2 80063d0: 4618 mov r0, r3 80063d2: f7fe fb11 bl 80049f8 80063d6: 4603 mov r3, r0 80063d8: f8a7 30f0 strh.w r3, [r7, #240] ; 0xf0 if (pRDat[i++] != HIBYTE(checkcrc)) // LRC_H 80063dc: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 80063e0: 1c5a adds r2, r3, #1 80063e2: f8c7 2104 str.w r2, [r7, #260] ; 0x104 80063e6: f507 7284 add.w r2, r7, #264 ; 0x108 80063ea: 4413 add r3, r2 80063ec: f813 2cfc ldrb.w r2, [r3, #-252] 80063f0: f8b7 30f0 ldrh.w r3, [r7, #240] ; 0xf0 80063f4: 0a1b lsrs r3, r3, #8 80063f6: b29b uxth r3, r3 80063f8: b2db uxtb r3, r3 80063fa: 429a cmp r2, r3 80063fc: d004 beq.n 8006408 { result = -3; // ½ÓÊÕ´íÎó 80063fe: f06f 0302 mvn.w r3, #2 8006402: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006406: e07b b.n 8006500 } if (pRDat[i++] != LOBYTE(checkcrc)) // LRC_L 8006408: f8d7 3104 ldr.w r3, [r7, #260] ; 0x104 800640c: 1c5a adds r2, r3, #1 800640e: f8c7 2104 str.w r2, [r7, #260] ; 0x104 8006412: f507 7284 add.w r2, r7, #264 ; 0x108 8006416: 4413 add r3, r2 8006418: f813 2cfc ldrb.w r2, [r3, #-252] 800641c: f8b7 30f0 ldrh.w r3, [r7, #240] ; 0xf0 8006420: b2db uxtb r3, r3 8006422: 429a cmp r2, r3 8006424: d004 beq.n 8006430 { result = -3; // ½ÓÊÕ´íÎó 8006426: f06f 0302 mvn.w r3, #2 800642a: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800642e: e067 b.n 8006500 } if (result == 0) 8006430: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8006434: 2b00 cmp r3, #0 8006436: d162 bne.n 80064fe { result = len; 8006438: f8b7 311c ldrh.w r3, [r7, #284] ; 0x11c 800643c: f8c7 30fc str.w r3, [r7, #252] ; 0xfc } break; 8006440: e05d b.n 80064fe } } else if (result < 0) 8006442: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8006446: 2b00 cmp r3, #0 8006448: da1e bge.n 8006488 { if (result == -1) // ÊäÈë²ÎÊý´íÎó 800644a: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 800644e: f1b3 3fff cmp.w r3, #4294967295 8006452: d103 bne.n 800645c { printf("para error\r\n"); 8006454: 4833 ldr r0, [pc, #204] ; (8006524 ) 8006456: f003 facd bl 80099f4 800645a: e010 b.n 800647e } else if (result == -2) // ´®¿ÚûÓгõʼ»¯ 800645c: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8006460: f113 0f02 cmn.w r3, #2 8006464: d103 bne.n 800646e { printf("usart is not inited\r\n"); 8006466: 4830 ldr r0, [pc, #192] ; (8006528 ) 8006468: f003 fac4 bl 80099f4 800646c: e007 b.n 800647e } else if (result == -3) // ½ÓÊÕ»º³åÇø¿ØÖÆ´íÎó 800646e: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8006472: f113 0f03 cmn.w r3, #3 8006476: d102 bne.n 800647e { printf("usart receive buf ctrl error\r\n"); 8006478: 482c ldr r0, [pc, #176] ; (800652c ) 800647a: f003 fabb bl 80099f4 } else { } result = -4; 800647e: f06f 0303 mvn.w r3, #3 8006482: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 8006486: e03b b.n 8006500 } else if (result > 0) 8006488: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 800648c: 2b00 cmp r3, #0 800648e: dd07 ble.n 80064a0 { printf("receive data len error\r\n"); 8006490: 4827 ldr r0, [pc, #156] ; (8006530 ) 8006492: f003 faaf bl 80099f4 result = -3; 8006496: f06f 0302 mvn.w r3, #2 800649a: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 800649e: e02f b.n 8006500 } else // result == 0 { } if (steps == -1) 80064a0: f8d7 3120 ldr.w r3, [r7, #288] ; 0x120 80064a4: f1b3 3fff cmp.w r3, #4294967295 80064a8: d11f bne.n 80064ea { // µÈ´ý½ÓÊÕÍê³É DelayUs(g_modBusMCtrl[midx].modBusWait); 80064aa: 4922 ldr r1, [pc, #136] ; (8006534 ) 80064ac: 1d3b adds r3, r7, #4 80064ae: 681a ldr r2, [r3, #0] 80064b0: 4613 mov r3, r2 80064b2: 00db lsls r3, r3, #3 80064b4: 4413 add r3, r2 80064b6: 009b lsls r3, r3, #2 80064b8: 440b add r3, r1 80064ba: 3308 adds r3, #8 80064bc: 681b ldr r3, [r3, #0] 80064be: 4618 mov r0, r3 80064c0: f7fd f8aa bl 8003618 if (timeout-- <= 0) 80064c4: f8d7 30f4 ldr.w r3, [r7, #244] ; 0xf4 80064c8: 1e5a subs r2, r3, #1 80064ca: f8c7 20f4 str.w r2, [r7, #244] ; 0xf4 80064ce: 2b00 cmp r3, #0 80064d0: f73f a9a8 bgt.w 8005824 { printf("2. call ModbusRx timeout, index=%d\r\n", index); 80064d4: 1cfb adds r3, r7, #3 80064d6: 781b ldrb r3, [r3, #0] 80064d8: 4619 mov r1, r3 80064da: 4817 ldr r0, [pc, #92] ; (8006538 ) 80064dc: f003 fa16 bl 800990c result = -2; //½ÓÊÕ³¬Ê± 80064e0: f06f 0301 mvn.w r3, #1 80064e4: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80064e8: e00a b.n 8006500 } } else { result = 0; 80064ea: 2300 movs r3, #0 80064ec: f8c7 30fc str.w r3, [r7, #252] ; 0xfc break; 80064f0: e006 b.n 8006500 break; 80064f2: bf00 nop 80064f4: e004 b.n 8006500 break; 80064f6: bf00 nop 80064f8: e002 b.n 8006500 break; 80064fa: bf00 nop 80064fc: e000 b.n 8006500 break; 80064fe: bf00 nop } }while(1); } if (result == -3) // ½ÓÊÕ´íÎó 8006500: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc 8006504: f113 0f03 cmn.w r3, #3 8006508: d105 bne.n 8006516 { printf("Rx data error, index=%d\r\n", index); 800650a: 1cfb adds r3, r7, #3 800650c: 781b ldrb r3, [r3, #0] 800650e: 4619 mov r1, r3 8006510: 480a ldr r0, [pc, #40] ; (800653c ) 8006512: f003 f9fb bl 800990c } return result; 8006516: f8d7 30fc ldr.w r3, [r7, #252] ; 0xfc } 800651a: 4618 mov r0, r3 800651c: f507 7786 add.w r7, r7, #268 ; 0x10c 8006520: 46bd mov sp, r7 8006522: bd90 pop {r4, r7, pc} 8006524: 0800ac60 .word 0x0800ac60 8006528: 0800ac6c .word 0x0800ac6c 800652c: 0800ac84 .word 0x0800ac84 8006530: 0800aca4 .word 0x0800aca4 8006534: 20001354 .word 0x20001354 8006538: 0800acbc .word 0x0800acbc 800653c: 0800ace4 .word 0x0800ace4 08006540 : //----------------------------------------------------------------- Rs485Ctrl g_rs485Ctrl; void InitRs485Ctrl(int rsvtimout) { 8006540: b580 push {r7, lr} 8006542: b082 sub sp, #8 8006544: af00 add r7, sp, #0 8006546: 6078 str r0, [r7, #4] memset(&g_rs485Ctrl, 0, sizeof(Rs485Ctrl)); 8006548: f240 5204 movw r2, #1284 ; 0x504 800654c: 2100 movs r1, #0 800654e: 480e ldr r0, [pc, #56] ; (8006588 ) 8006550: f003 f9d3 bl 80098fa // ¶ÁÈ¡³¬Ê±Ê±¼ä if (rsvtimout < 50) 8006554: 687b ldr r3, [r7, #4] 8006556: 2b31 cmp r3, #49 ; 0x31 8006558: dc04 bgt.n 8006564 { g_rs485Ctrl.modrsvTimout = 50; 800655a: 4b0b ldr r3, [pc, #44] ; (8006588 ) 800655c: 2232 movs r2, #50 ; 0x32 800655e: f8c3 2500 str.w r2, [r3, #1280] ; 0x500 } else { g_rs485Ctrl.modrsvTimout = rsvtimout; } } 8006562: e00d b.n 8006580 else if (rsvtimout > 500) 8006564: 687b ldr r3, [r7, #4] 8006566: f5b3 7ffa cmp.w r3, #500 ; 0x1f4 800656a: dd05 ble.n 8006578 g_rs485Ctrl.modrsvTimout = 500; 800656c: 4b06 ldr r3, [pc, #24] ; (8006588 ) 800656e: f44f 72fa mov.w r2, #500 ; 0x1f4 8006572: f8c3 2500 str.w r2, [r3, #1280] ; 0x500 } 8006576: e003 b.n 8006580 g_rs485Ctrl.modrsvTimout = rsvtimout; 8006578: 4a03 ldr r2, [pc, #12] ; (8006588 ) 800657a: 687b ldr r3, [r7, #4] 800657c: f8c2 3500 str.w r3, [r2, #1280] ; 0x500 } 8006580: bf00 nop 8006582: 3708 adds r7, #8 8006584: 46bd mov sp, r7 8006586: bd80 pop {r7, pc} 8006588: 20001378 .word 0x20001378 0800658c : void RegRsCmdProc(Resv485ExProc proc) { 800658c: b480 push {r7} 800658e: b083 sub sp, #12 8006590: af00 add r7, sp, #0 8006592: 6078 str r0, [r7, #4] g_rs485Ctrl.resv485exproc = proc; 8006594: 4a04 ldr r2, [pc, #16] ; (80065a8 ) 8006596: 687b ldr r3, [r7, #4] 8006598: f8c2 34fc str.w r3, [r2, #1276] ; 0x4fc } 800659c: bf00 nop 800659e: 370c adds r7, #12 80065a0: 46bd mov sp, r7 80065a2: bc80 pop {r7} 80065a4: 4770 bx lr 80065a6: bf00 nop 80065a8: 20001378 .word 0x20001378 080065ac : int AddRs485Cmd(Rs485Cmd * pCmd) { 80065ac: b580 push {r7, lr} 80065ae: b084 sub sp, #16 80065b0: af00 add r7, sp, #0 80065b2: 6078 str r0, [r7, #4] Rs485Ctrl * p485Ctrl = &g_rs485Ctrl; 80065b4: 4b22 ldr r3, [pc, #136] ; (8006640 ) 80065b6: 60fb str r3, [r7, #12] if (p485Ctrl != NULL && pCmd != NULL) 80065b8: 68fb ldr r3, [r7, #12] 80065ba: 2b00 cmp r3, #0 80065bc: d039 beq.n 8006632 80065be: 687b ldr r3, [r7, #4] 80065c0: 2b00 cmp r3, #0 80065c2: d036 beq.n 8006632 { if (p485Ctrl->bufCmdNum < MAX_485CMD && p485Ctrl->bufTail < MAX_485CMD) 80065c4: 68fb ldr r3, [r7, #12] 80065c6: f8d3 34e8 ldr.w r3, [r3, #1256] ; 0x4e8 80065ca: 2b13 cmp r3, #19 80065cc: dc2e bgt.n 800662c 80065ce: 68fb ldr r3, [r7, #12] 80065d0: f8d3 34f0 ldr.w r3, [r3, #1264] ; 0x4f0 80065d4: 2b13 cmp r3, #19 80065d6: dc29 bgt.n 800662c { memcpy(&(p485Ctrl->cmdbuf[p485Ctrl->bufTail]), pCmd, sizeof(Rs485Cmd)); 80065d8: 68fb ldr r3, [r7, #12] 80065da: f8d3 34f0 ldr.w r3, [r3, #1264] ; 0x4f0 80065de: 2232 movs r2, #50 ; 0x32 80065e0: fb02 f303 mul.w r3, r2, r3 80065e4: 33f8 adds r3, #248 ; 0xf8 80065e6: 68fa ldr r2, [r7, #12] 80065e8: 4413 add r3, r2 80065ea: 3304 adds r3, #4 80065ec: 2232 movs r2, #50 ; 0x32 80065ee: 6879 ldr r1, [r7, #4] 80065f0: 4618 mov r0, r3 80065f2: f003 f977 bl 80098e4 p485Ctrl->bufTail++; 80065f6: 68fb ldr r3, [r7, #12] 80065f8: f8d3 34f0 ldr.w r3, [r3, #1264] ; 0x4f0 80065fc: 1c5a adds r2, r3, #1 80065fe: 68fb ldr r3, [r7, #12] 8006600: f8c3 24f0 str.w r2, [r3, #1264] ; 0x4f0 if (p485Ctrl->bufTail >= MAX_485CMD) 8006604: 68fb ldr r3, [r7, #12] 8006606: f8d3 34f0 ldr.w r3, [r3, #1264] ; 0x4f0 800660a: 2b13 cmp r3, #19 800660c: dd03 ble.n 8006616 { p485Ctrl->bufTail = 0; 800660e: 68fb ldr r3, [r7, #12] 8006610: 2200 movs r2, #0 8006612: f8c3 24f0 str.w r2, [r3, #1264] ; 0x4f0 } p485Ctrl->bufCmdNum++; 8006616: 68fb ldr r3, [r7, #12] 8006618: f8d3 34e8 ldr.w r3, [r3, #1256] ; 0x4e8 800661c: 1c5a adds r2, r3, #1 800661e: 68fb ldr r3, [r7, #12] 8006620: f8c3 24e8 str.w r2, [r3, #1256] ; 0x4e8 return p485Ctrl->bufCmdNum; 8006624: 68fb ldr r3, [r7, #12] 8006626: f8d3 34e8 ldr.w r3, [r3, #1256] ; 0x4e8 800662a: e004 b.n 8006636 } return -2; 800662c: f06f 0301 mvn.w r3, #1 8006630: e001 b.n 8006636 } return -1; 8006632: f04f 33ff mov.w r3, #4294967295 } 8006636: 4618 mov r0, r3 8006638: 3710 adds r7, #16 800663a: 46bd mov sp, r7 800663c: bd80 pop {r7, pc} 800663e: bf00 nop 8006640: 20001378 .word 0x20001378 08006644 : { return g_rs485Ctrl.bufCmdNum; } int Rs485Task(void) { 8006644: b5f0 push {r4, r5, r6, r7, lr} 8006646: b089 sub sp, #36 ; 0x24 8006648: af04 add r7, sp, #16 int rslt; u32 curIime; Rs485Cmd *pCmd; Rs485Ctrl * p485Ctrl = &g_rs485Ctrl; 800664a: 4ba6 ldr r3, [pc, #664] ; (80068e4 ) 800664c: 60bb str r3, [r7, #8] if (p485Ctrl == NULL) 800664e: 68bb ldr r3, [r7, #8] 8006650: 2b00 cmp r3, #0 8006652: d102 bne.n 800665a { return -1; 8006654: f04f 33ff mov.w r3, #4294967295 8006658: e140 b.n 80068dc } pCmd = &(p485Ctrl->cmdbuf[p485Ctrl->bufHead]); 800665a: 68bb ldr r3, [r7, #8] 800665c: f8d3 34ec ldr.w r3, [r3, #1260] ; 0x4ec 8006660: 2232 movs r2, #50 ; 0x32 8006662: fb02 f303 mul.w r3, r2, r3 8006666: 33f8 adds r3, #248 ; 0xf8 8006668: 68ba ldr r2, [r7, #8] 800666a: 4413 add r3, r2 800666c: 3304 adds r3, #4 800666e: 607b str r3, [r7, #4] // ¶ÁÈ¡µ±Ç°Ê±¼ä curIime = GetUsSoftTimer(); 8006670: f7fe f8c4 bl 80047fc 8006674: 6038 str r0, [r7, #0] if ((curIime - p485Ctrl->stepTime) > g_modBusMCtrl[pCmd->midx].modBusWait) 8006676: 68bb ldr r3, [r7, #8] 8006678: f8d3 34f8 ldr.w r3, [r3, #1272] ; 0x4f8 800667c: 683a ldr r2, [r7, #0] 800667e: 1ad2 subs r2, r2, r3 8006680: 687b ldr r3, [r7, #4] 8006682: 781b ldrb r3, [r3, #0] 8006684: 4618 mov r0, r3 8006686: 4998 ldr r1, [pc, #608] ; (80068e8 ) 8006688: 4603 mov r3, r0 800668a: 00db lsls r3, r3, #3 800668c: 4403 add r3, r0 800668e: 009b lsls r3, r3, #2 8006690: 440b add r3, r1 8006692: 3308 adds r3, #8 8006694: 681b ldr r3, [r3, #0] 8006696: 429a cmp r2, r3 8006698: f240 811d bls.w 80068d6 { p485Ctrl->stepTime = curIime; 800669c: 68bb ldr r3, [r7, #8] 800669e: 683a ldr r2, [r7, #0] 80066a0: f8c3 24f8 str.w r2, [r3, #1272] ; 0x4f8 if (p485Ctrl->working == 0 && 80066a4: 68bb ldr r3, [r7, #8] 80066a6: f8d3 34e4 ldr.w r3, [r3, #1252] ; 0x4e4 80066aa: 2b00 cmp r3, #0 80066ac: d111 bne.n 80066d2 p485Ctrl->bufCmdNum > 0 && 80066ae: 68bb ldr r3, [r7, #8] 80066b0: f8d3 34e8 ldr.w r3, [r3, #1256] ; 0x4e8 if (p485Ctrl->working == 0 && 80066b4: 2b00 cmp r3, #0 80066b6: dd0c ble.n 80066d2 p485Ctrl->steps == 0) 80066b8: 68bb ldr r3, [r7, #8] 80066ba: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 p485Ctrl->bufCmdNum > 0 && 80066be: 2b00 cmp r3, #0 80066c0: d107 bne.n 80066d2 { p485Ctrl->working = 1; 80066c2: 68bb ldr r3, [r7, #8] 80066c4: 2201 movs r2, #1 80066c6: f8c3 24e4 str.w r2, [r3, #1252] ; 0x4e4 p485Ctrl->steps = 1; 80066ca: 68bb ldr r3, [r7, #8] 80066cc: 2201 movs r2, #1 80066ce: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 } if (p485Ctrl->working == 0) 80066d2: 68bb ldr r3, [r7, #8] 80066d4: f8d3 34e4 ldr.w r3, [r3, #1252] ; 0x4e4 80066d8: 2b00 cmp r3, #0 80066da: d105 bne.n 80066e8 { p485Ctrl->steps = 0; 80066dc: 68bb ldr r3, [r7, #8] 80066de: 2200 movs r2, #0 80066e0: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 return 0; 80066e4: 2300 movs r3, #0 80066e6: e0f9 b.n 80068dc } if (p485Ctrl->steps > 0 && p485Ctrl->steps < 5) 80066e8: 68bb ldr r3, [r7, #8] 80066ea: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 80066ee: 2b00 cmp r3, #0 80066f0: dd4a ble.n 8006788 80066f2: 68bb ldr r3, [r7, #8] 80066f4: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 80066f8: 2b04 cmp r3, #4 80066fa: dc45 bgt.n 8006788 { if (pCmd->cmd == MODBUS_RD) 80066fc: 687b ldr r3, [r7, #4] 80066fe: 789b ldrb r3, [r3, #2] 8006700: 2b03 cmp r3, #3 8006702: d118 bne.n 8006736 { rslt = ModbusTx(pCmd->midx, pCmd->index, pCmd->cmd, pCmd->addr, &(pCmd->rlen), 1, p485Ctrl->steps); 8006704: 687b ldr r3, [r7, #4] 8006706: 781b ldrb r3, [r3, #0] 8006708: 461d mov r5, r3 800670a: 687b ldr r3, [r7, #4] 800670c: 7859 ldrb r1, [r3, #1] 800670e: 687b ldr r3, [r7, #4] 8006710: 7898 ldrb r0, [r3, #2] 8006712: 687b ldr r3, [r7, #4] 8006714: 889c ldrh r4, [r3, #4] 8006716: 687b ldr r3, [r7, #4] 8006718: 3330 adds r3, #48 ; 0x30 800671a: 68ba ldr r2, [r7, #8] 800671c: f8d2 24f4 ldr.w r2, [r2, #1268] ; 0x4f4 8006720: 9202 str r2, [sp, #8] 8006722: 2201 movs r2, #1 8006724: 9201 str r2, [sp, #4] 8006726: 9300 str r3, [sp, #0] 8006728: 4623 mov r3, r4 800672a: 4602 mov r2, r0 800672c: 4628 mov r0, r5 800672e: f7fe fb35 bl 8004d9c 8006732: 60f8 str r0, [r7, #12] 8006734: e019 b.n 800676a } else { rslt = ModbusTx(pCmd->midx, pCmd->index, pCmd->cmd, pCmd->addr, pCmd->wrdat, pCmd->wlen, p485Ctrl->steps); 8006736: 687b ldr r3, [r7, #4] 8006738: 781b ldrb r3, [r3, #0] 800673a: 461e mov r6, r3 800673c: 687b ldr r3, [r7, #4] 800673e: 7858 ldrb r0, [r3, #1] 8006740: 687b ldr r3, [r7, #4] 8006742: 789c ldrb r4, [r3, #2] 8006744: 687b ldr r3, [r7, #4] 8006746: 889d ldrh r5, [r3, #4] 8006748: 687b ldr r3, [r7, #4] 800674a: 3306 adds r3, #6 800674c: 687a ldr r2, [r7, #4] 800674e: 8b52 ldrh r2, [r2, #26] 8006750: 68b9 ldr r1, [r7, #8] 8006752: f8d1 14f4 ldr.w r1, [r1, #1268] ; 0x4f4 8006756: 9102 str r1, [sp, #8] 8006758: 9201 str r2, [sp, #4] 800675a: 9300 str r3, [sp, #0] 800675c: 462b mov r3, r5 800675e: 4622 mov r2, r4 8006760: 4601 mov r1, r0 8006762: 4630 mov r0, r6 8006764: f7fe fb1a bl 8004d9c 8006768: 60f8 str r0, [r7, #12] } if (rslt == p485Ctrl->steps) 800676a: 68bb ldr r3, [r7, #8] 800676c: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 8006770: 68fa ldr r2, [r7, #12] 8006772: 429a cmp r2, r3 8006774: f040 8083 bne.w 800687e { p485Ctrl->steps++; 8006778: 68bb ldr r3, [r7, #8] 800677a: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 800677e: 1c5a adds r2, r3, #1 8006780: 68bb ldr r3, [r7, #8] 8006782: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 if (rslt == p485Ctrl->steps) 8006786: e07a b.n 800687e } } else if (p485Ctrl->steps >= 5 && p485Ctrl->steps < p485Ctrl->modrsvTimout) 8006788: 68bb ldr r3, [r7, #8] 800678a: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 800678e: 2b04 cmp r3, #4 8006790: dd6e ble.n 8006870 8006792: 68bb ldr r3, [r7, #8] 8006794: f8d3 24f4 ldr.w r2, [r3, #1268] ; 0x4f4 8006798: 68bb ldr r3, [r7, #8] 800679a: f8d3 3500 ldr.w r3, [r3, #1280] ; 0x500 800679e: 429a cmp r2, r3 80067a0: da66 bge.n 8006870 { // µÈ´ý»Ø°ü if (pCmd->index != 0 && 80067a2: 687b ldr r3, [r7, #4] 80067a4: 785b ldrb r3, [r3, #1] 80067a6: 2b00 cmp r3, #0 80067a8: d05a beq.n 8006860 ((pCmd->index & 0x80) == 0 || pCmd->cmd == MODBUS_RD) && 80067aa: 687b ldr r3, [r7, #4] 80067ac: 785b ldrb r3, [r3, #1] 80067ae: b25b sxtb r3, r3 80067b0: 2b00 cmp r3, #0 80067b2: da03 bge.n 80067bc 80067b4: 687b ldr r3, [r7, #4] 80067b6: 789b ldrb r3, [r3, #2] 80067b8: 2b03 cmp r3, #3 80067ba: d151 bne.n 8006860 1) { if (pCmd->cmd == MODBUS_RD) 80067bc: 687b ldr r3, [r7, #4] 80067be: 789b ldrb r3, [r3, #2] 80067c0: 2b03 cmp r3, #3 80067c2: d118 bne.n 80067f6 { rslt = ModbusRx(pCmd->midx, pCmd->index, pCmd->cmd, pCmd->addr, pCmd->rddat, pCmd->rlen, 1); 80067c4: 687b ldr r3, [r7, #4] 80067c6: 781b ldrb r3, [r3, #0] 80067c8: 461e mov r6, r3 80067ca: 687b ldr r3, [r7, #4] 80067cc: 7858 ldrb r0, [r3, #1] 80067ce: 687b ldr r3, [r7, #4] 80067d0: 789c ldrb r4, [r3, #2] 80067d2: 687b ldr r3, [r7, #4] 80067d4: 889d ldrh r5, [r3, #4] 80067d6: 687b ldr r3, [r7, #4] 80067d8: 331c adds r3, #28 80067da: 687a ldr r2, [r7, #4] 80067dc: 8e12 ldrh r2, [r2, #48] ; 0x30 80067de: 2101 movs r1, #1 80067e0: 9102 str r1, [sp, #8] 80067e2: 9201 str r2, [sp, #4] 80067e4: 9300 str r3, [sp, #0] 80067e6: 462b mov r3, r5 80067e8: 4622 mov r2, r4 80067ea: 4601 mov r1, r0 80067ec: 4630 mov r0, r6 80067ee: f7fe feff bl 80055f0 80067f2: 60f8 str r0, [r7, #12] 80067f4: e015 b.n 8006822 } else { rslt = ModbusRx(pCmd->midx, pCmd->index, pCmd->cmd, pCmd->addr, pCmd->rddat, 1, 1); 80067f6: 687b ldr r3, [r7, #4] 80067f8: 781b ldrb r3, [r3, #0] 80067fa: 461d mov r5, r3 80067fc: 687b ldr r3, [r7, #4] 80067fe: 7859 ldrb r1, [r3, #1] 8006800: 687b ldr r3, [r7, #4] 8006802: 7898 ldrb r0, [r3, #2] 8006804: 687b ldr r3, [r7, #4] 8006806: 889c ldrh r4, [r3, #4] 8006808: 687b ldr r3, [r7, #4] 800680a: 331c adds r3, #28 800680c: 2201 movs r2, #1 800680e: 9202 str r2, [sp, #8] 8006810: 2201 movs r2, #1 8006812: 9201 str r2, [sp, #4] 8006814: 9300 str r3, [sp, #0] 8006816: 4623 mov r3, r4 8006818: 4602 mov r2, r0 800681a: 4628 mov r0, r5 800681c: f7fe fee8 bl 80055f0 8006820: 60f8 str r0, [r7, #12] } if (rslt == pCmd->rlen) // ¶Áµ½ÕýÈ·Êý¾Ý 8006822: 687b ldr r3, [r7, #4] 8006824: 8e1b ldrh r3, [r3, #48] ; 0x30 8006826: 461a mov r2, r3 8006828: 68fb ldr r3, [r7, #12] 800682a: 4293 cmp r3, r2 800682c: d110 bne.n 8006850 { // Ö´ÐжÁµ½Êý¾Ýº¯Êý if (p485Ctrl->resv485exproc != NULL) 800682e: 68bb ldr r3, [r7, #8] 8006830: f8d3 34fc ldr.w r3, [r3, #1276] ; 0x4fc 8006834: 2b00 cmp r3, #0 8006836: d004 beq.n 8006842 { p485Ctrl->resv485exproc(pCmd); 8006838: 68bb ldr r3, [r7, #8] 800683a: f8d3 34fc ldr.w r3, [r3, #1276] ; 0x4fc 800683e: 6878 ldr r0, [r7, #4] 8006840: 4798 blx r3 } p485Ctrl->steps = p485Ctrl->modrsvTimout; 8006842: 68bb ldr r3, [r7, #8] 8006844: f8d3 2500 ldr.w r2, [r3, #1280] ; 0x500 8006848: 68bb ldr r3, [r7, #8] 800684a: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 if (rslt == pCmd->rlen) // ¶Áµ½ÕýÈ·Êý¾Ý 800684e: e00e b.n 800686e } else { p485Ctrl->steps++; 8006850: 68bb ldr r3, [r7, #8] 8006852: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 8006856: 1c5a adds r2, r3, #1 8006858: 68bb ldr r3, [r7, #8] 800685a: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 if (rslt == pCmd->rlen) // ¶Áµ½ÕýÈ·Êý¾Ý 800685e: e006 b.n 800686e } } else { p485Ctrl->steps = p485Ctrl->modrsvTimout; 8006860: 68bb ldr r3, [r7, #8] 8006862: f8d3 2500 ldr.w r2, [r3, #1280] ; 0x500 8006866: 68bb ldr r3, [r7, #8] 8006868: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 if (pCmd->index != 0 && 800686c: e007 b.n 800687e 800686e: e006 b.n 800687e } } else { p485Ctrl->steps++; 8006870: 68bb ldr r3, [r7, #8] 8006872: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 8006876: 1c5a adds r2, r3, #1 8006878: 68bb ldr r3, [r7, #8] 800687a: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 } if (p485Ctrl->steps >= p485Ctrl->modrsvTimout) 800687e: 68bb ldr r3, [r7, #8] 8006880: f8d3 24f4 ldr.w r2, [r3, #1268] ; 0x4f4 8006884: 68bb ldr r3, [r7, #8] 8006886: f8d3 3500 ldr.w r3, [r3, #1280] ; 0x500 800688a: 429a cmp r2, r3 800688c: db23 blt.n 80068d6 { if (p485Ctrl->bufCmdNum > 0) 800688e: 68bb ldr r3, [r7, #8] 8006890: f8d3 34e8 ldr.w r3, [r3, #1256] ; 0x4e8 8006894: 2b00 cmp r3, #0 8006896: dd06 ble.n 80068a6 { p485Ctrl->bufCmdNum--; 8006898: 68bb ldr r3, [r7, #8] 800689a: f8d3 34e8 ldr.w r3, [r3, #1256] ; 0x4e8 800689e: 1e5a subs r2, r3, #1 80068a0: 68bb ldr r3, [r7, #8] 80068a2: f8c3 24e8 str.w r2, [r3, #1256] ; 0x4e8 } p485Ctrl->steps = 0; 80068a6: 68bb ldr r3, [r7, #8] 80068a8: 2200 movs r2, #0 80068aa: f8c3 24f4 str.w r2, [r3, #1268] ; 0x4f4 p485Ctrl->working = 0; 80068ae: 68bb ldr r3, [r7, #8] 80068b0: 2200 movs r2, #0 80068b2: f8c3 24e4 str.w r2, [r3, #1252] ; 0x4e4 p485Ctrl->bufHead++; 80068b6: 68bb ldr r3, [r7, #8] 80068b8: f8d3 34ec ldr.w r3, [r3, #1260] ; 0x4ec 80068bc: 1c5a adds r2, r3, #1 80068be: 68bb ldr r3, [r7, #8] 80068c0: f8c3 24ec str.w r2, [r3, #1260] ; 0x4ec if (p485Ctrl->bufHead >= MAX_485CMD) 80068c4: 68bb ldr r3, [r7, #8] 80068c6: f8d3 34ec ldr.w r3, [r3, #1260] ; 0x4ec 80068ca: 2b13 cmp r3, #19 80068cc: dd03 ble.n 80068d6 { p485Ctrl->bufHead = 0; 80068ce: 68bb ldr r3, [r7, #8] 80068d0: 2200 movs r2, #0 80068d2: f8c3 24ec str.w r2, [r3, #1260] ; 0x4ec } } } return p485Ctrl->steps; 80068d6: 68bb ldr r3, [r7, #8] 80068d8: f8d3 34f4 ldr.w r3, [r3, #1268] ; 0x4f4 } 80068dc: 4618 mov r0, r3 80068de: 3714 adds r7, #20 80068e0: 46bd mov sp, r7 80068e2: bdf0 pop {r4, r5, r6, r7, pc} 80068e4: 20001378 .word 0x20001378 80068e8: 20001354 .word 0x20001354 080068ec : #include "trigger.h" #include "workctrl.h" void AppMainTask(void) { 80068ec: b580 push {r7, lr} 80068ee: af00 add r7, sp, #0 InitTrigger(); // ³õʼ»¯¶¨Ê±´¥·¢¹¦ÄÜ 80068f0: f7fd fe9e bl 8004630 InitWorkCtrl(); // ³õʼ»¯¿ØÖÆ 80068f4: f002 fb14 bl 8008f20 do { TriggerTask(); // 80068f8: f7fd ff20 bl 800473c WorkCtrlTask(); 80068fc: f002 fb3c bl 8008f78 TriggerTask(); // 8006900: e7fa b.n 80068f8 08006902 : { 8006902: b480 push {r7} 8006904: b083 sub sp, #12 8006906: af00 add r7, sp, #0 8006908: 6078 str r0, [r7, #4] SET_BIT(TIMx->CR1, TIM_CR1_CEN); 800690a: 687b ldr r3, [r7, #4] 800690c: 681b ldr r3, [r3, #0] 800690e: f043 0201 orr.w r2, r3, #1 8006912: 687b ldr r3, [r7, #4] 8006914: 601a str r2, [r3, #0] } 8006916: bf00 nop 8006918: 370c adds r7, #12 800691a: 46bd mov sp, r7 800691c: bc80 pop {r7} 800691e: 4770 bx lr 08006920 : { 8006920: b480 push {r7} 8006922: b083 sub sp, #12 8006924: af00 add r7, sp, #0 8006926: 6078 str r0, [r7, #4] CLEAR_BIT(TIMx->CR1, TIM_CR1_CEN); 8006928: 687b ldr r3, [r7, #4] 800692a: 681b ldr r3, [r3, #0] 800692c: f023 0201 bic.w r2, r3, #1 8006930: 687b ldr r3, [r7, #4] 8006932: 601a str r2, [r3, #0] } 8006934: bf00 nop 8006936: 370c adds r7, #12 8006938: 46bd mov sp, r7 800693a: bc80 pop {r7} 800693c: 4770 bx lr 0800693e : { 800693e: b480 push {r7} 8006940: b083 sub sp, #12 8006942: af00 add r7, sp, #0 8006944: 6078 str r0, [r7, #4] SET_BIT(TIMx->DIER, TIM_DIER_UIE); 8006946: 687b ldr r3, [r7, #4] 8006948: 68db ldr r3, [r3, #12] 800694a: f043 0201 orr.w r2, r3, #1 800694e: 687b ldr r3, [r7, #4] 8006950: 60da str r2, [r3, #12] } 8006952: bf00 nop 8006954: 370c adds r7, #12 8006956: 46bd mov sp, r7 8006958: bc80 pop {r7} 800695a: 4770 bx lr 0800695c : HeadCtrl g_headCtrl; //------------------------------------------------------------------------------- u8 GetBoardSwitchValue(void) { 800695c: b580 push {r7, lr} 800695e: b082 sub sp, #8 8006960: af00 add r7, sp, #0 u8 val = 0; 8006962: 2300 movs r3, #0 8006964: 71fb strb r3, [r7, #7] if(GetSwitch1Status() == SENSOR_ON) 8006966: f002 fdbd bl 80094e4 800696a: 4603 mov r3, r0 800696c: 2b00 cmp r3, #0 800696e: d103 bne.n 8006978 { val |= 0x01; 8006970: 79fb ldrb r3, [r7, #7] 8006972: f043 0301 orr.w r3, r3, #1 8006976: 71fb strb r3, [r7, #7] } if(GetSwitch2Status() == SENSOR_ON) 8006978: f002 fdc2 bl 8009500 800697c: 4603 mov r3, r0 800697e: 2b00 cmp r3, #0 8006980: d103 bne.n 800698a { val |= 0x02; 8006982: 79fb ldrb r3, [r7, #7] 8006984: f043 0302 orr.w r3, r3, #2 8006988: 71fb strb r3, [r7, #7] } if(GetSwitch3Status() == SENSOR_ON) 800698a: f002 fdc7 bl 800951c 800698e: 4603 mov r3, r0 8006990: 2b00 cmp r3, #0 8006992: d103 bne.n 800699c { val |= 0x04; 8006994: 79fb ldrb r3, [r7, #7] 8006996: f043 0304 orr.w r3, r3, #4 800699a: 71fb strb r3, [r7, #7] } if(GetSwitch4Status() == SENSOR_ON) 800699c: f002 fdcc bl 8009538 80069a0: 4603 mov r3, r0 80069a2: 2b00 cmp r3, #0 80069a4: d103 bne.n 80069ae { val |= 0x08; 80069a6: 79fb ldrb r3, [r7, #7] 80069a8: f043 0308 orr.w r3, r3, #8 80069ac: 71fb strb r3, [r7, #7] } return val; 80069ae: 79fb ldrb r3, [r7, #7] } 80069b0: 4618 mov r0, r3 80069b2: 3708 adds r7, #8 80069b4: 46bd mov sp, r7 80069b6: bd80 pop {r7, pc} 080069b8 : // ³õʼ»¯ void InitSewHeadBoard(void) { 80069b8: b580 push {r7, lr} 80069ba: b084 sub sp, #16 80069bc: af04 add r7, sp, #16 memset(&g_headCtrl, 0, sizeof(HeadCtrl)); 80069be: f242 4218 movw r2, #9240 ; 0x2418 80069c2: 2100 movs r1, #0 80069c4: 4833 ldr r0, [pc, #204] ; (8006a94 ) 80069c6: f002 ff98 bl 80098fa g_headCtrl.boardId = GetBoardSwitchValue(); 80069ca: f7ff ffc7 bl 800695c 80069ce: 4603 mov r3, r0 80069d0: 461a mov r2, r3 80069d2: 4b30 ldr r3, [pc, #192] ; (8006a94 ) 80069d4: 701a strb r2, [r3, #0] if((g_headCtrl.boardId & 0x04) == 0) 80069d6: 4b2f ldr r3, [pc, #188] ; (8006a94 ) 80069d8: 781b ldrb r3, [r3, #0] 80069da: f003 0304 and.w r3, r3, #4 80069de: 2b00 cmp r3, #0 80069e0: d108 bne.n 80069f4 { InitSoftPwmCtrl(PwmCtrlTask); 80069e2: 482d ldr r0, [pc, #180] ; (8006a98 ) 80069e4: f000 f87a bl 8006adc #if(PWM_TIMER_CTRL == 1) g_headCtrl.pwmOutputFlag = 1; 80069e8: 4b2a ldr r3, [pc, #168] ; (8006a94 ) 80069ea: 2201 movs r2, #1 80069ec: 711a strb r2, [r3, #4] #endif printf("initsoftpwmctrl."); 80069ee: 482b ldr r0, [pc, #172] ; (8006a9c ) 80069f0: f002 ff8c bl 800990c InitModbusSCtrl(D29_BOARD_ID,30); // ÅäÖÃmodbus(ÊÕ°ü³¬Ê±Ê±¼ä:2ms) RegModbusSCmdProc(ModBusCmdProcTask); // Íⲿº¯Êý #endif InitModbus_m(0,COMM_USART3, B115200, '8', 'N', '1','R'); // ³õʼ»¯485 80069f4: 2352 movs r3, #82 ; 0x52 80069f6: 9302 str r3, [sp, #8] 80069f8: 2331 movs r3, #49 ; 0x31 80069fa: 9301 str r3, [sp, #4] 80069fc: 234e movs r3, #78 ; 0x4e 80069fe: 9300 str r3, [sp, #0] 8006a00: 2338 movs r3, #56 ; 0x38 8006a02: f44f 32e1 mov.w r2, #115200 ; 0x1c200 8006a06: 2103 movs r1, #3 8006a08: 2000 movs r0, #0 8006a0a: f7fe f81f bl 8004a4c InitRs485Ctrl(MODRSV_TIMEOUT); 8006a0e: f44f 704d mov.w r0, #820 ; 0x334 8006a12: f7ff fd95 bl 8006540 RegRsCmdProc(ModBusReceiveProc); 8006a16: 4822 ldr r0, [pc, #136] ; (8006aa0 ) 8006a18: f7ff fdb8 bl 800658c CheckParasValue(); 8006a1c: f000 fab4 bl 8006f88 g_headCtrl.pfootFlLowPos = g_headCtrl.pfootRunLowPos; 8006a20: 4b1c ldr r3, [pc, #112] ; (8006a94 ) 8006a22: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006a26: 331c adds r3, #28 8006a28: 681a ldr r2, [r3, #0] 8006a2a: 4b1a ldr r3, [pc, #104] ; (8006a94 ) 8006a2c: f503 530e add.w r3, r3, #9088 ; 0x2380 8006a30: 3314 adds r3, #20 8006a32: 601a str r2, [r3, #0] g_headCtrl.enflag = EN_FALG; 8006a34: 4b17 ldr r3, [pc, #92] ; (8006a94 ) 8006a36: f503 530d add.w r3, r3, #9024 ; 0x2340 8006a3a: 3330 adds r3, #48 ; 0x30 8006a3c: f245 52aa movw r2, #21930 ; 0x55aa 8006a40: 601a str r2, [r3, #0] g_headCtrl.FollowMotoPulseOn = FollowEcdOutPulseOn; 8006a42: 4b14 ldr r3, [pc, #80] ; (8006a94 ) 8006a44: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006a48: 332c adds r3, #44 ; 0x2c 8006a4a: 4a16 ldr r2, [pc, #88] ; (8006aa4 ) 8006a4c: 601a str r2, [r3, #0] g_headCtrl.FollowMotoPulseOff = FollowEcdOutPulseOff; 8006a4e: 4b11 ldr r3, [pc, #68] ; (8006a94 ) 8006a50: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006a54: 3330 adds r3, #48 ; 0x30 8006a56: 4a14 ldr r2, [pc, #80] ; (8006aa8 ) 8006a58: 601a str r2, [r3, #0] g_headCtrl.FollowMotoSignOn = FollowEcdOutDirOn; 8006a5a: 4b0e ldr r3, [pc, #56] ; (8006a94 ) 8006a5c: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006a60: 3334 adds r3, #52 ; 0x34 8006a62: 4a12 ldr r2, [pc, #72] ; (8006aac ) 8006a64: 601a str r2, [r3, #0] g_headCtrl.FollowMotoSignOff = FollowEcdOutDirOff; 8006a66: 4b0b ldr r3, [pc, #44] ; (8006a94 ) 8006a68: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006a6c: 3338 adds r3, #56 ; 0x38 8006a6e: 4a10 ldr r2, [pc, #64] ; (8006ab0 ) 8006a70: 601a str r2, [r3, #0] DelayRef(500); 8006a72: f44f 70fa mov.w r0, #500 ; 0x1f4 8006a76: f002 fa6b bl 8008f50 FootMotoToZero(); 8006a7a: f000 f901 bl 8006c80 SetEn485OutOff(); 8006a7e: f002 fad9 bl 8009034 AddShellCmd("KEY", "test action", TestAction); 8006a82: 4a0c ldr r2, [pc, #48] ; (8006ab4 ) 8006a84: 490c ldr r1, [pc, #48] ; (8006ab8 ) 8006a86: 480d ldr r0, [pc, #52] ; (8006abc ) 8006a88: f7fd fd16 bl 80044b8 } 8006a8c: bf00 nop 8006a8e: 46bd mov sp, r7 8006a90: bd80 pop {r7, pc} 8006a92: bf00 nop 8006a94: 2000187c .word 0x2000187c 8006a98: 08006b11 .word 0x08006b11 8006a9c: 0800ad00 .word 0x0800ad00 8006aa0: 08006c0d .word 0x08006c0d 8006aa4: 08006d6d .word 0x08006d6d 8006aa8: 08006ed1 .word 0x08006ed1 8006aac: 08006f21 .word 0x08006f21 8006ab0: 08006f55 .word 0x08006f55 8006ab4: 080075c1 .word 0x080075c1 8006ab8: 0800ad14 .word 0x0800ad14 8006abc: 0800ad20 .word 0x0800ad20 08006ac0 : #endif } void SoftPwmIntProc(void) { 8006ac0: b580 push {r7, lr} 8006ac2: af00 add r7, sp, #0 #if(PWM_TIMER_CTRL == 1) if (D29PwmProc != NULL) 8006ac4: 4b04 ldr r3, [pc, #16] ; (8006ad8 ) 8006ac6: 681b ldr r3, [r3, #0] 8006ac8: 2b00 cmp r3, #0 8006aca: d002 beq.n 8006ad2 { D29PwmProc(); 8006acc: 4b02 ldr r3, [pc, #8] ; (8006ad8 ) 8006ace: 681b ldr r3, [r3, #0] 8006ad0: 4798 blx r3 { D29PwmProc(); } } #endif } 8006ad2: bf00 nop 8006ad4: bd80 pop {r7, pc} 8006ad6: bf00 nop 8006ad8: 20000578 .word 0x20000578 08006adc : void InitSoftPwmCtrl(PwmFunc proc) { 8006adc: b480 push {r7} 8006ade: b083 sub sp, #12 8006ae0: af00 add r7, sp, #0 8006ae2: 6078 str r0, [r7, #4] // InitSTM32PwmTimer(); #if(PWM_TIMER_CTRL == 1) // Tim1IntProc = SoftPwmIntProc; D29PwmProc = proc; 8006ae4: 4a08 ldr r2, [pc, #32] ; (8006b08 ) 8006ae6: 687b ldr r3, [r7, #4] 8006ae8: 6013 str r3, [r2, #0] g_headCtrl.pwmFreq = 100; 8006aea: 4b08 ldr r3, [pc, #32] ; (8006b0c ) 8006aec: 2264 movs r2, #100 ; 0x64 8006aee: 811a strh r2, [r3, #8] g_headCtrl.pwmCount = 0; 8006af0: 4b06 ldr r3, [pc, #24] ; (8006b0c ) 8006af2: 2200 movs r2, #0 8006af4: 815a strh r2, [r3, #10] g_headCtrl.pwmCtrl = 0; // ³õʼռ¿Õ±ÈΪ0 8006af6: 4b05 ldr r3, [pc, #20] ; (8006b0c ) 8006af8: 2200 movs r2, #0 8006afa: 80da strh r2, [r3, #6] Tim3IntProc = SoftPwmIntProc; D29PwmProc = proc; g_headCtrl.pwmCtrl = 0; g_headCtrl.pwmFreq = 3334; #endif } 8006afc: bf00 nop 8006afe: 370c adds r7, #12 8006b00: 46bd mov sp, r7 8006b02: bc80 pop {r7} 8006b04: 4770 bx lr 8006b06: bf00 nop 8006b08: 20000578 .word 0x20000578 8006b0c: 2000187c .word 0x2000187c 08006b10 : void PwmCtrlTask(void) { 8006b10: b580 push {r7, lr} 8006b12: af00 add r7, sp, #0 #if(PWM_TIMER_CTRL == 1) if(g_headCtrl.pwmCount < g_headCtrl.pwmCtrl) 8006b14: 4b24 ldr r3, [pc, #144] ; (8006ba8 ) 8006b16: 895a ldrh r2, [r3, #10] 8006b18: 4b23 ldr r3, [pc, #140] ; (8006ba8 ) 8006b1a: 88db ldrh r3, [r3, #6] 8006b1c: 429a cmp r2, r3 8006b1e: d20a bcs.n 8006b36 { g_headCtrl.pwmCount ++; 8006b20: 4b21 ldr r3, [pc, #132] ; (8006ba8 ) 8006b22: 895b ldrh r3, [r3, #10] 8006b24: 3301 adds r3, #1 8006b26: b29a uxth r2, r3 8006b28: 4b1f ldr r3, [pc, #124] ; (8006ba8 ) 8006b2a: 815a strh r2, [r3, #10] // if((g_headCtrl.pwmIOSta & 0x20) != 0) { SetOutputPWM1On(); 8006b2c: f002 fb0a bl 8009144 SetOutputPWM2On(); 8006b30: f002 fb20 bl 8009174 // g_headCtrl.timeCount = 0; // // printf("timer 1s,time:%d,pwmƵÂÊ = %dHz,pwmÕ¼¿Õ±È %d.\r\n",ntime,1000000/g_headCtrl.pwmFreq,g_headCtrl.pwmCtrl); // } #endif } 8006b34: e035 b.n 8006ba2 else if(g_headCtrl.pwmCount < g_headCtrl.pwmFreq) 8006b36: 4b1c ldr r3, [pc, #112] ; (8006ba8 ) 8006b38: 895a ldrh r2, [r3, #10] 8006b3a: 4b1b ldr r3, [pc, #108] ; (8006ba8 ) 8006b3c: 891b ldrh r3, [r3, #8] 8006b3e: 429a cmp r2, r3 8006b40: d22c bcs.n 8006b9c g_headCtrl.pwmCount ++; 8006b42: 4b19 ldr r3, [pc, #100] ; (8006ba8 ) 8006b44: 895b ldrh r3, [r3, #10] 8006b46: 3301 adds r3, #1 8006b48: b29a uxth r2, r3 8006b4a: 4b17 ldr r3, [pc, #92] ; (8006ba8 ) 8006b4c: 815a strh r2, [r3, #10] if(g_headCtrl.pwmCount >= g_headCtrl.pwmFreq) 8006b4e: 4b16 ldr r3, [pc, #88] ; (8006ba8 ) 8006b50: 895a ldrh r2, [r3, #10] 8006b52: 4b15 ldr r3, [pc, #84] ; (8006ba8 ) 8006b54: 891b ldrh r3, [r3, #8] 8006b56: 429a cmp r2, r3 8006b58: d31b bcc.n 8006b92 g_headCtrl.pwmCount = 0; 8006b5a: 4b13 ldr r3, [pc, #76] ; (8006ba8 ) 8006b5c: 2200 movs r2, #0 8006b5e: 815a strh r2, [r3, #10] if(g_headCtrl.timeCount != 0) 8006b60: 4b11 ldr r3, [pc, #68] ; (8006ba8 ) 8006b62: 68db ldr r3, [r3, #12] 8006b64: 2b00 cmp r3, #0 8006b66: d014 beq.n 8006b92 if(g_headCtrl.timeCount == 1) 8006b68: 4b0f ldr r3, [pc, #60] ; (8006ba8 ) 8006b6a: 68db ldr r3, [r3, #12] 8006b6c: 2b01 cmp r3, #1 8006b6e: d104 bne.n 8006b7a g_headCtrl.pwmPulsTime = GetUsSoftTimer(); 8006b70: f7fd fe44 bl 80047fc 8006b74: 4602 mov r2, r0 8006b76: 4b0c ldr r3, [pc, #48] ; (8006ba8 ) 8006b78: 611a str r2, [r3, #16] g_headCtrl.timeCount ++; 8006b7a: 4b0b ldr r3, [pc, #44] ; (8006ba8 ) 8006b7c: 68db ldr r3, [r3, #12] 8006b7e: 3301 adds r3, #1 8006b80: 4a09 ldr r2, [pc, #36] ; (8006ba8 ) 8006b82: 60d3 str r3, [r2, #12] if(g_headCtrl.timeCount >= 11) 8006b84: 4b08 ldr r3, [pc, #32] ; (8006ba8 ) 8006b86: 68db ldr r3, [r3, #12] 8006b88: 2b0a cmp r3, #10 8006b8a: d902 bls.n 8006b92 g_headCtrl.timeCount = 0; 8006b8c: 4b06 ldr r3, [pc, #24] ; (8006ba8 ) 8006b8e: 2200 movs r2, #0 8006b90: 60da str r2, [r3, #12] SetOutputPWM1Off(); 8006b92: f002 fae3 bl 800915c SetOutputPWM2Off(); 8006b96: f002 faf9 bl 800918c } 8006b9a: e002 b.n 8006ba2 g_headCtrl.pwmCount = 0; 8006b9c: 4b02 ldr r3, [pc, #8] ; (8006ba8 ) 8006b9e: 2200 movs r2, #0 8006ba0: 815a strh r2, [r3, #10] } 8006ba2: bf00 nop 8006ba4: bd80 pop {r7, pc} 8006ba6: bf00 nop 8006ba8: 2000187c .word 0x2000187c 08006bac : void SysLedTask(void) { 8006bac: b580 push {r7, lr} 8006bae: af00 add r7, sp, #0 static u32 ledsta = 0; static u32 ledtime = 0; if(GetMsSoftTimer10() - ledtime >= 1000) 8006bb0: f7fd fe52 bl 8004858 8006bb4: 4602 mov r2, r0 8006bb6: 4b0e ldr r3, [pc, #56] ; (8006bf0 ) 8006bb8: 681b ldr r3, [r3, #0] 8006bba: 1ad3 subs r3, r2, r3 8006bbc: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 8006bc0: d313 bcc.n 8006bea { if(ledsta == 0) 8006bc2: 4b0c ldr r3, [pc, #48] ; (8006bf4 ) 8006bc4: 681b ldr r3, [r3, #0] 8006bc6: 2b00 cmp r3, #0 8006bc8: d105 bne.n 8006bd6 { SetSysLedOn(); 8006bca: f002 faa3 bl 8009114 ledsta = 1; 8006bce: 4b09 ldr r3, [pc, #36] ; (8006bf4 ) 8006bd0: 2201 movs r2, #1 8006bd2: 601a str r2, [r3, #0] 8006bd4: e004 b.n 8006be0 } else { SetSysLedOff(); 8006bd6: f002 faa9 bl 800912c ledsta = 0; 8006bda: 4b06 ldr r3, [pc, #24] ; (8006bf4 ) 8006bdc: 2200 movs r2, #0 8006bde: 601a str r2, [r3, #0] } ledtime = GetMsSoftTimer10(); 8006be0: f7fd fe3a bl 8004858 8006be4: 4602 mov r2, r0 8006be6: 4b02 ldr r3, [pc, #8] ; (8006bf0 ) 8006be8: 601a str r2, [r3, #0] } } 8006bea: bf00 nop 8006bec: bd80 pop {r7, pc} 8006bee: bf00 nop 8006bf0: 2000057c .word 0x2000057c 8006bf4: 20000580 .word 0x20000580 08006bf8 : void SewHeadBoardTask(void) { 8006bf8: b580 push {r7, lr} 8006bfa: af00 add r7, sp, #0 //SetParasTask(); Rs485Task(); 8006bfc: f7ff fd22 bl 8006644 #if(CONTROL_BUS == COMM_485) ModbusSTask(); #endif InOutStaRefreshTask(); 8006c00: f000 fafe bl 8007200 SysLedTask(); 8006c04: f7ff ffd2 bl 8006bac } 8006c08: bf00 nop 8006c0a: bd80 pop {r7, pc} 08006c0c : void ModBusReceiveProc(Rs485Cmd *cmd) { 8006c0c: b580 push {r7, lr} 8006c0e: b082 sub sp, #8 8006c10: af00 add r7, sp, #0 8006c12: 6078 str r0, [r7, #4] if (cmd == NULL) 8006c14: 687b ldr r3, [r7, #4] 8006c16: 2b00 cmp r3, #0 8006c18: d007 beq.n 8006c2a { return; } memcpy(g_headCtrl.mtWkSta,cmd->rddat,16); 8006c1a: 687b ldr r3, [r7, #4] 8006c1c: 331c adds r3, #28 8006c1e: 2210 movs r2, #16 8006c20: 4619 mov r1, r3 8006c22: 4804 ldr r0, [pc, #16] ; (8006c34 ) 8006c24: f002 fe5e bl 80098e4 8006c28: e000 b.n 8006c2c return; 8006c2a: bf00 nop } 8006c2c: 3708 adds r7, #8 8006c2e: 46bd mov sp, r7 8006c30: bd80 pop {r7, pc} 8006c32: bf00 nop 8006c34: 20003bd6 .word 0x20003bd6 08006c38 : void SendMotoCtrlCmd(u16 cmd,u16 act) { 8006c38: b580 push {r7, lr} 8006c3a: b090 sub sp, #64 ; 0x40 8006c3c: af00 add r7, sp, #0 8006c3e: 4603 mov r3, r0 8006c40: 460a mov r2, r1 8006c42: 80fb strh r3, [r7, #6] 8006c44: 4613 mov r3, r2 8006c46: 80bb strh r3, [r7, #4] Rs485Cmd ccmd; memset(&ccmd,0,sizeof(Rs485Cmd)); 8006c48: f107 030c add.w r3, r7, #12 8006c4c: 2232 movs r2, #50 ; 0x32 8006c4e: 2100 movs r1, #0 8006c50: 4618 mov r0, r3 8006c52: f002 fe52 bl 80098fa ccmd.index = 10; 8006c56: 230a movs r3, #10 8006c58: 737b strb r3, [r7, #13] ccmd.cmd = MODBUS_WR; 8006c5a: 2306 movs r3, #6 8006c5c: 73bb strb r3, [r7, #14] ccmd.addr = cmd; 8006c5e: 88fb ldrh r3, [r7, #6] 8006c60: 823b strh r3, [r7, #16] ccmd.wrdat[0] = act; 8006c62: 88bb ldrh r3, [r7, #4] 8006c64: 827b strh r3, [r7, #18] ccmd.wlen = 1; 8006c66: 2301 movs r3, #1 8006c68: 84fb strh r3, [r7, #38] ; 0x26 ccmd.rlen = 0; 8006c6a: 2300 movs r3, #0 8006c6c: 87bb strh r3, [r7, #60] ; 0x3c AddRs485Cmd(&ccmd); 8006c6e: f107 030c add.w r3, r7, #12 8006c72: 4618 mov r0, r3 8006c74: f7ff fc9a bl 80065ac } 8006c78: bf00 nop 8006c7a: 3740 adds r7, #64 ; 0x40 8006c7c: 46bd mov sp, r7 8006c7e: bd80 pop {r7, pc} 08006c80 : { SendMotoCtrlCmd(MOTO_CTRL_CMD,MOTO_CMD_RST); } void FootMotoToZero(void) { 8006c80: b580 push {r7, lr} 8006c82: af00 add r7, sp, #0 SendMotoCtrlCmd(MOTO_CTRL_CMD,MOTO_TO_ZERO); 8006c84: 2101 movs r1, #1 8006c86: f44f 5010 mov.w r0, #9216 ; 0x2400 8006c8a: f7ff ffd5 bl 8006c38 // SetSTM32Moto1RealPos(0); } 8006c8e: bf00 nop 8006c90: bd80 pop {r7, pc} ... 08006c94 : { SendMotoCtrlCmd(MOTO_CTRL_CMD,MOTO_RESET); } void OutputStepOn(void) { 8006c94: b580 push {r7, lr} 8006c96: af00 add r7, sp, #0 if(g_headCtrl.followEcdDir == 1) 8006c98: 4b10 ldr r3, [pc, #64] ; (8006cdc ) 8006c9a: f503 530e add.w r3, r3, #9088 ; 0x2380 8006c9e: 3330 adds r3, #48 ; 0x30 8006ca0: 681b ldr r3, [r3, #0] 8006ca2: 2b01 cmp r3, #1 8006ca4: d10b bne.n 8006cbe { g_headCtrl.footMtPos ++; 8006ca6: 4b0d ldr r3, [pc, #52] ; (8006cdc ) 8006ca8: f503 530d add.w r3, r3, #9024 ; 0x2340 8006cac: 333c adds r3, #60 ; 0x3c 8006cae: 681b ldr r3, [r3, #0] 8006cb0: 1c5a adds r2, r3, #1 8006cb2: 4b0a ldr r3, [pc, #40] ; (8006cdc ) 8006cb4: f503 530d add.w r3, r3, #9024 ; 0x2340 8006cb8: 333c adds r3, #60 ; 0x3c 8006cba: 601a str r2, [r3, #0] 8006cbc: e00a b.n 8006cd4 } else { g_headCtrl.footMtPos --; 8006cbe: 4b07 ldr r3, [pc, #28] ; (8006cdc ) 8006cc0: f503 530d add.w r3, r3, #9024 ; 0x2340 8006cc4: 333c adds r3, #60 ; 0x3c 8006cc6: 681b ldr r3, [r3, #0] 8006cc8: 1e5a subs r2, r3, #1 8006cca: 4b04 ldr r3, [pc, #16] ; (8006cdc ) 8006ccc: f503 530d add.w r3, r3, #9024 ; 0x2340 8006cd0: 333c adds r3, #60 ; 0x3c 8006cd2: 601a str r2, [r3, #0] } SetMoto1StepOn(); 8006cd4: f002 f9d2 bl 800907c } 8006cd8: bf00 nop 8006cda: bd80 pop {r7, pc} 8006cdc: 2000187c .word 0x2000187c 08006ce0 : 6, 3, }; void GetFollowTableValue(u32 angle,u32 puls) { 8006ce0: b480 push {r7} 8006ce2: b089 sub sp, #36 ; 0x24 8006ce4: af00 add r7, sp, #0 8006ce6: 6078 str r0, [r7, #4] 8006ce8: 6039 str r1, [r7, #0] int i, temp,value,followec,sum = 0; 8006cea: 2300 movs r3, #0 8006cec: 61bb str r3, [r7, #24] followec = angle*1000/360; 8006cee: 687b ldr r3, [r7, #4] 8006cf0: f44f 727a mov.w r2, #1000 ; 0x3e8 8006cf4: fb02 f303 mul.w r3, r2, r3 8006cf8: 08db lsrs r3, r3, #3 8006cfa: 4a1a ldr r2, [pc, #104] ; (8006d64 ) 8006cfc: fba2 2303 umull r2, r3, r2, r3 8006d00: 089b lsrs r3, r3, #2 8006d02: 617b str r3, [r7, #20] value = followec/puls; 8006d04: 697a ldr r2, [r7, #20] 8006d06: 683b ldr r3, [r7, #0] 8006d08: fbb2 f3f3 udiv r3, r2, r3 8006d0c: 613b str r3, [r7, #16] for(i = 0; i { FOLLOW_TABLE[i] = value + (4*(FOLLOW_TAB_NUM -2 - i)); 8006d14: 69fb ldr r3, [r7, #28] 8006d16: f1c3 0304 rsb r3, r3, #4 8006d1a: 009a lsls r2, r3, #2 8006d1c: 693b ldr r3, [r7, #16] 8006d1e: 441a add r2, r3 8006d20: 4911 ldr r1, [pc, #68] ; (8006d68 ) 8006d22: 69fb ldr r3, [r7, #28] 8006d24: f841 2023 str.w r2, [r1, r3, lsl #2] sum += FOLLOW_TABLE[i]; 8006d28: 4a0f ldr r2, [pc, #60] ; (8006d68 ) 8006d2a: 69fb ldr r3, [r7, #28] 8006d2c: f852 3023 ldr.w r3, [r2, r3, lsl #2] 8006d30: 69ba ldr r2, [r7, #24] 8006d32: 4413 add r3, r2 8006d34: 61bb str r3, [r7, #24] for(i = 0; i } temp = puls-((FOLLOW_TAB_NUM-1)*2); 8006d42: 683b ldr r3, [r7, #0] 8006d44: 3b0a subs r3, #10 8006d46: 60fb str r3, [r7, #12] FOLLOW_TABLE[FOLLOW_TAB_NUM-1] = (followec - sum*2)/temp; 8006d48: 69bb ldr r3, [r7, #24] 8006d4a: 005b lsls r3, r3, #1 8006d4c: 697a ldr r2, [r7, #20] 8006d4e: 1ad2 subs r2, r2, r3 8006d50: 68fb ldr r3, [r7, #12] 8006d52: fb92 f3f3 sdiv r3, r2, r3 8006d56: 4a04 ldr r2, [pc, #16] ; (8006d68 ) 8006d58: 6153 str r3, [r2, #20] } 8006d5a: bf00 nop 8006d5c: 3724 adds r7, #36 ; 0x24 8006d5e: 46bd mov sp, r7 8006d60: bc80 pop {r7} 8006d62: 4770 bx lr 8006d64: 16c16c17 .word 0x16c16c17 8006d68: 20000214 .word 0x20000214 08006d6c : void FollowEcdOutPulseOn(void) { 8006d6c: b580 push {r7, lr} 8006d6e: af00 add r7, sp, #0 if (g_headCtrl.followEcdEn != 0) 8006d70: 4b55 ldr r3, [pc, #340] ; (8006ec8 ) 8006d72: f503 530e add.w r3, r3, #9088 ; 0x2380 8006d76: 3318 adds r3, #24 8006d78: 681b ldr r3, [r3, #0] 8006d7a: 2b00 cmp r3, #0 8006d7c: f000 80a2 beq.w 8006ec4 { g_headCtrl.followCountr++; 8006d80: 4b51 ldr r3, [pc, #324] ; (8006ec8 ) 8006d82: f503 530e add.w r3, r3, #9088 ; 0x2380 8006d86: 331c adds r3, #28 8006d88: 681b ldr r3, [r3, #0] 8006d8a: 1c5a adds r2, r3, #1 8006d8c: 4b4e ldr r3, [pc, #312] ; (8006ec8 ) 8006d8e: f503 530e add.w r3, r3, #9088 ; 0x2380 8006d92: 331c adds r3, #28 8006d94: 601a str r2, [r3, #0] if (g_headCtrl.followCountr >= g_headCtrl.followStepNum) 8006d96: 4b4c ldr r3, [pc, #304] ; (8006ec8 ) 8006d98: f503 530e add.w r3, r3, #9088 ; 0x2380 8006d9c: 331c adds r3, #28 8006d9e: 681a ldr r2, [r3, #0] 8006da0: 4b49 ldr r3, [pc, #292] ; (8006ec8 ) 8006da2: f503 530e add.w r3, r3, #9088 ; 0x2380 8006da6: 3320 adds r3, #32 8006da8: 681b ldr r3, [r3, #0] 8006daa: 429a cmp r2, r3 8006dac: f0c0 808a bcc.w 8006ec4 { if(g_headCtrl.followNumHigh > g_headCtrl.followRunNum) 8006db0: 4b45 ldr r3, [pc, #276] ; (8006ec8 ) 8006db2: f503 530e add.w r3, r3, #9088 ; 0x2380 8006db6: 3328 adds r3, #40 ; 0x28 8006db8: 681a ldr r2, [r3, #0] 8006dba: 4b43 ldr r3, [pc, #268] ; (8006ec8 ) 8006dbc: f503 530e add.w r3, r3, #9088 ; 0x2380 8006dc0: 681b ldr r3, [r3, #0] 8006dc2: 429a cmp r2, r3 8006dc4: d912 bls.n 8006dec { g_headCtrl.followNumHigh = 0; 8006dc6: 4b40 ldr r3, [pc, #256] ; (8006ec8 ) 8006dc8: f503 530e add.w r3, r3, #9088 ; 0x2380 8006dcc: 3328 adds r3, #40 ; 0x28 8006dce: 2200 movs r2, #0 8006dd0: 601a str r2, [r3, #0] g_headCtrl.followNumLow = 0; 8006dd2: 4b3d ldr r3, [pc, #244] ; (8006ec8 ) 8006dd4: f503 530e add.w r3, r3, #9088 ; 0x2380 8006dd8: 3324 adds r3, #36 ; 0x24 8006dda: 2200 movs r2, #0 8006ddc: 601a str r2, [r3, #0] g_headCtrl.followEcdEn = 0; 8006dde: 4b3a ldr r3, [pc, #232] ; (8006ec8 ) 8006de0: f503 530e add.w r3, r3, #9088 ; 0x2380 8006de4: 3318 adds r3, #24 8006de6: 2200 movs r2, #0 8006de8: 601a str r2, [r3, #0] return; 8006dea: e06b b.n 8006ec4 } OutputStepOn(); 8006dec: f7ff ff52 bl 8006c94 g_headCtrl.followCountr = 0; 8006df0: 4b35 ldr r3, [pc, #212] ; (8006ec8 ) 8006df2: f503 530e add.w r3, r3, #9088 ; 0x2380 8006df6: 331c adds r3, #28 8006df8: 2200 movs r2, #0 8006dfa: 601a str r2, [r3, #0] g_headCtrl.followNumHigh++; 8006dfc: 4b32 ldr r3, [pc, #200] ; (8006ec8 ) 8006dfe: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e02: 3328 adds r3, #40 ; 0x28 8006e04: 681b ldr r3, [r3, #0] 8006e06: 1c5a adds r2, r3, #1 8006e08: 4b2f ldr r3, [pc, #188] ; (8006ec8 ) 8006e0a: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e0e: 3328 adds r3, #40 ; 0x28 8006e10: 601a str r2, [r3, #0] // ¼ÓËÙ if (g_headCtrl.followTableIdx < FOLLOW_TAB_NUM && g_headCtrl.followNumHigh < FOLLOW_TAB_NUM) 8006e12: 4b2d ldr r3, [pc, #180] ; (8006ec8 ) 8006e14: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e18: 332c adds r3, #44 ; 0x2c 8006e1a: 681b ldr r3, [r3, #0] 8006e1c: 2b05 cmp r3, #5 8006e1e: dc1f bgt.n 8006e60 8006e20: 4b29 ldr r3, [pc, #164] ; (8006ec8 ) 8006e22: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e26: 3328 adds r3, #40 ; 0x28 8006e28: 681b ldr r3, [r3, #0] 8006e2a: 2b05 cmp r3, #5 8006e2c: d818 bhi.n 8006e60 { g_headCtrl.followTableIdx++; // ¸úËæÔ˶¯µÄË÷Òý 8006e2e: 4b26 ldr r3, [pc, #152] ; (8006ec8 ) 8006e30: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e34: 332c adds r3, #44 ; 0x2c 8006e36: 681b ldr r3, [r3, #0] 8006e38: 1c5a adds r2, r3, #1 8006e3a: 4b23 ldr r3, [pc, #140] ; (8006ec8 ) 8006e3c: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e40: 332c adds r3, #44 ; 0x2c 8006e42: 601a str r2, [r3, #0] g_headCtrl.followStepNum = FOLLOW_TABLE[g_headCtrl.followTableIdx]; // ×°ÔØÐµÄÖµ 8006e44: 4b20 ldr r3, [pc, #128] ; (8006ec8 ) 8006e46: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e4a: 332c adds r3, #44 ; 0x2c 8006e4c: 681b ldr r3, [r3, #0] 8006e4e: 4a1f ldr r2, [pc, #124] ; (8006ecc ) 8006e50: f852 3023 ldr.w r3, [r2, r3, lsl #2] 8006e54: 461a mov r2, r3 8006e56: 4b1c ldr r3, [pc, #112] ; (8006ec8 ) 8006e58: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e5c: 3320 adds r3, #32 8006e5e: 601a str r2, [r3, #0] } // ½µËÙ if(g_headCtrl.followNumHigh >= g_headCtrl.followRunNum - FOLLOW_TAB_NUM) 8006e60: 4b19 ldr r3, [pc, #100] ; (8006ec8 ) 8006e62: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e66: 3328 adds r3, #40 ; 0x28 8006e68: 681a ldr r2, [r3, #0] 8006e6a: 4b17 ldr r3, [pc, #92] ; (8006ec8 ) 8006e6c: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e70: 681b ldr r3, [r3, #0] 8006e72: 3b06 subs r3, #6 8006e74: 429a cmp r2, r3 8006e76: d325 bcc.n 8006ec4 { if(g_headCtrl.followTableIdx <= 0) 8006e78: 4b13 ldr r3, [pc, #76] ; (8006ec8 ) 8006e7a: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e7e: 332c adds r3, #44 ; 0x2c 8006e80: 681b ldr r3, [r3, #0] 8006e82: 2b00 cmp r3, #0 8006e84: dc05 bgt.n 8006e92 { g_headCtrl.followTableIdx = 0; 8006e86: 4b10 ldr r3, [pc, #64] ; (8006ec8 ) 8006e88: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e8c: 332c adds r3, #44 ; 0x2c 8006e8e: 2200 movs r2, #0 8006e90: 601a str r2, [r3, #0] } g_headCtrl.followStepNum = FOLLOW_TABLE[g_headCtrl.followTableIdx]; // ×°ÔØÐµÄÖµ 8006e92: 4b0d ldr r3, [pc, #52] ; (8006ec8 ) 8006e94: f503 530e add.w r3, r3, #9088 ; 0x2380 8006e98: 332c adds r3, #44 ; 0x2c 8006e9a: 681b ldr r3, [r3, #0] 8006e9c: 4a0b ldr r2, [pc, #44] ; (8006ecc ) 8006e9e: f852 3023 ldr.w r3, [r2, r3, lsl #2] 8006ea2: 461a mov r2, r3 8006ea4: 4b08 ldr r3, [pc, #32] ; (8006ec8 ) 8006ea6: f503 530e add.w r3, r3, #9088 ; 0x2380 8006eaa: 3320 adds r3, #32 8006eac: 601a str r2, [r3, #0] g_headCtrl.followTableIdx--; // ¸úËæÔ˶¯µÄË÷Òý 8006eae: 4b06 ldr r3, [pc, #24] ; (8006ec8 ) 8006eb0: f503 530e add.w r3, r3, #9088 ; 0x2380 8006eb4: 332c adds r3, #44 ; 0x2c 8006eb6: 681b ldr r3, [r3, #0] 8006eb8: 1e5a subs r2, r3, #1 8006eba: 4b03 ldr r3, [pc, #12] ; (8006ec8 ) 8006ebc: f503 530e add.w r3, r3, #9088 ; 0x2380 8006ec0: 332c adds r3, #44 ; 0x2c 8006ec2: 601a str r2, [r3, #0] } } } } 8006ec4: bd80 pop {r7, pc} 8006ec6: bf00 nop 8006ec8: 2000187c .word 0x2000187c 8006ecc: 20000214 .word 0x20000214 08006ed0 : void FollowEcdOutPulseOff(void) { 8006ed0: b580 push {r7, lr} 8006ed2: af00 add r7, sp, #0 if (g_headCtrl.followEcdEn != 0) 8006ed4: 4b11 ldr r3, [pc, #68] ; (8006f1c ) 8006ed6: f503 530e add.w r3, r3, #9088 ; 0x2380 8006eda: 3318 adds r3, #24 8006edc: 681b ldr r3, [r3, #0] 8006ede: 2b00 cmp r3, #0 8006ee0: d01a beq.n 8006f18 { if (g_headCtrl.followCountr * 2 + 1 >= g_headCtrl.followStepNum) 8006ee2: 4b0e ldr r3, [pc, #56] ; (8006f1c ) 8006ee4: f503 530e add.w r3, r3, #9088 ; 0x2380 8006ee8: 331c adds r3, #28 8006eea: 681b ldr r3, [r3, #0] 8006eec: 005b lsls r3, r3, #1 8006eee: 1c5a adds r2, r3, #1 8006ef0: 4b0a ldr r3, [pc, #40] ; (8006f1c ) 8006ef2: f503 530e add.w r3, r3, #9088 ; 0x2380 8006ef6: 3320 adds r3, #32 8006ef8: 681b ldr r3, [r3, #0] 8006efa: 429a cmp r2, r3 8006efc: d30c bcc.n 8006f18 { OutputStepOff(); 8006efe: f002 f8c9 bl 8009094 g_headCtrl.followNumLow++; 8006f02: 4b06 ldr r3, [pc, #24] ; (8006f1c ) 8006f04: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f08: 3324 adds r3, #36 ; 0x24 8006f0a: 681b ldr r3, [r3, #0] 8006f0c: 1c5a adds r2, r3, #1 8006f0e: 4b03 ldr r3, [pc, #12] ; (8006f1c ) 8006f10: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f14: 3324 adds r3, #36 ; 0x24 8006f16: 601a str r2, [r3, #0] } } } 8006f18: bf00 nop 8006f1a: bd80 pop {r7, pc} 8006f1c: 2000187c .word 0x2000187c 08006f20 : void FollowEcdOutDirOn(void) { 8006f20: b580 push {r7, lr} 8006f22: af00 add r7, sp, #0 if (g_headCtrl.followEcdCheck != 0) 8006f24: 4b0a ldr r3, [pc, #40] ; (8006f50 ) 8006f26: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f2a: 3334 adds r3, #52 ; 0x34 8006f2c: 681b ldr r3, [r3, #0] 8006f2e: 2b00 cmp r3, #0 8006f30: d00b beq.n 8006f4a { if (g_headCtrl.followEcdDir == 1) 8006f32: 4b07 ldr r3, [pc, #28] ; (8006f50 ) 8006f34: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f38: 3330 adds r3, #48 ; 0x30 8006f3a: 681b ldr r3, [r3, #0] 8006f3c: 2b01 cmp r3, #1 8006f3e: d102 bne.n 8006f46 { OutputDirOn(); 8006f40: f002 f8b4 bl 80090ac else { OutputDirOff(); } } } 8006f44: e001 b.n 8006f4a OutputDirOff(); 8006f46: f002 f8bd bl 80090c4 } 8006f4a: bf00 nop 8006f4c: bd80 pop {r7, pc} 8006f4e: bf00 nop 8006f50: 2000187c .word 0x2000187c 08006f54 : void FollowEcdOutDirOff(void) { 8006f54: b580 push {r7, lr} 8006f56: af00 add r7, sp, #0 if (g_headCtrl.followEcdCheck != 0) 8006f58: 4b0a ldr r3, [pc, #40] ; (8006f84 ) 8006f5a: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f5e: 3334 adds r3, #52 ; 0x34 8006f60: 681b ldr r3, [r3, #0] 8006f62: 2b00 cmp r3, #0 8006f64: d00b beq.n 8006f7e { if (g_headCtrl.followEcdDir == 1) 8006f66: 4b07 ldr r3, [pc, #28] ; (8006f84 ) 8006f68: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f6c: 3330 adds r3, #48 ; 0x30 8006f6e: 681b ldr r3, [r3, #0] 8006f70: 2b01 cmp r3, #1 8006f72: d102 bne.n 8006f7a { OutputDirOff(); 8006f74: f002 f8a6 bl 80090c4 else { OutputDirOn(); } } } 8006f78: e001 b.n 8006f7e OutputDirOn(); 8006f7a: f002 f897 bl 80090ac } 8006f7e: bf00 nop 8006f80: bd80 pop {r7, pc} 8006f82: bf00 nop 8006f84: 2000187c .word 0x2000187c 08006f88 : void CheckParasValue(void) { 8006f88: b580 push {r7, lr} 8006f8a: af00 add r7, sp, #0 g_headCtrl.followRunNum = g_headCtrl.pfootFlowPuls; 8006f8c: 4b9a ldr r3, [pc, #616] ; (80071f8 ) 8006f8e: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006f92: 3318 adds r3, #24 8006f94: 681a ldr r2, [r3, #0] 8006f96: 4b98 ldr r3, [pc, #608] ; (80071f8 ) 8006f98: f503 530e add.w r3, r3, #9088 ; 0x2380 8006f9c: 601a str r2, [r3, #0] if(g_headCtrl.followRunNum == 0) 8006f9e: 4b96 ldr r3, [pc, #600] ; (80071f8 ) 8006fa0: f503 530e add.w r3, r3, #9088 ; 0x2380 8006fa4: 681b ldr r3, [r3, #0] 8006fa6: 2b00 cmp r3, #0 8006fa8: d104 bne.n 8006fb4 { g_headCtrl.followRunNum = 40; 8006faa: 4b93 ldr r3, [pc, #588] ; (80071f8 ) 8006fac: f503 530e add.w r3, r3, #9088 ; 0x2380 8006fb0: 2228 movs r2, #40 ; 0x28 8006fb2: 601a str r2, [r3, #0] } g_headCtrl.followStepNum = 3; 8006fb4: 4b90 ldr r3, [pc, #576] ; (80071f8 ) 8006fb6: f503 530e add.w r3, r3, #9088 ; 0x2380 8006fba: 3320 adds r3, #32 8006fbc: 2203 movs r2, #3 8006fbe: 601a str r2, [r3, #0] g_headCtrl.followStartPPos = g_headCtrl.pfootFlowPAng*1000/360 + g_headCtrl.ecOfstValue; 8006fc0: 4b8d ldr r3, [pc, #564] ; (80071f8 ) 8006fc2: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006fc6: 3310 adds r3, #16 8006fc8: 681b ldr r3, [r3, #0] 8006fca: f44f 727a mov.w r2, #1000 ; 0x3e8 8006fce: fb02 f303 mul.w r3, r2, r3 8006fd2: 08db lsrs r3, r3, #3 8006fd4: 4a89 ldr r2, [pc, #548] ; (80071fc ) 8006fd6: fba2 2303 umull r2, r3, r2, r3 8006fda: 089a lsrs r2, r3, #2 8006fdc: 4b86 ldr r3, [pc, #536] ; (80071f8 ) 8006fde: f503 530f add.w r3, r3, #9152 ; 0x23c0 8006fe2: 3324 adds r3, #36 ; 0x24 8006fe4: 681b ldr r3, [r3, #0] 8006fe6: 4413 add r3, r2 8006fe8: 461a mov r2, r3 8006fea: 4b83 ldr r3, [pc, #524] ; (80071f8 ) 8006fec: f503 530e add.w r3, r3, #9088 ; 0x2380 8006ff0: 3304 adds r3, #4 8006ff2: 601a str r2, [r3, #0] if(g_headCtrl.followStartPPos >= 1000) 8006ff4: 4b80 ldr r3, [pc, #512] ; (80071f8 ) 8006ff6: f503 530e add.w r3, r3, #9088 ; 0x2380 8006ffa: 3304 adds r3, #4 8006ffc: 681b ldr r3, [r3, #0] 8006ffe: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 8007002: db0b blt.n 800701c { g_headCtrl.followStartPPos -= 1000; 8007004: 4b7c ldr r3, [pc, #496] ; (80071f8 ) 8007006: f503 530e add.w r3, r3, #9088 ; 0x2380 800700a: 3304 adds r3, #4 800700c: 681b ldr r3, [r3, #0] 800700e: f5a3 727a sub.w r2, r3, #1000 ; 0x3e8 8007012: 4b79 ldr r3, [pc, #484] ; (80071f8 ) 8007014: f503 530e add.w r3, r3, #9088 ; 0x2380 8007018: 3304 adds r3, #4 800701a: 601a str r2, [r3, #0] } if(g_headCtrl.followStartPPos < 0) 800701c: 4b76 ldr r3, [pc, #472] ; (80071f8 ) 800701e: f503 530e add.w r3, r3, #9088 ; 0x2380 8007022: 3304 adds r3, #4 8007024: 681b ldr r3, [r3, #0] 8007026: 2b00 cmp r3, #0 8007028: da0b bge.n 8007042 { g_headCtrl.followStartPPos += 1000; 800702a: 4b73 ldr r3, [pc, #460] ; (80071f8 ) 800702c: f503 530e add.w r3, r3, #9088 ; 0x2380 8007030: 3304 adds r3, #4 8007032: 681b ldr r3, [r3, #0] 8007034: f503 727a add.w r2, r3, #1000 ; 0x3e8 8007038: 4b6f ldr r3, [pc, #444] ; (80071f8 ) 800703a: f503 530e add.w r3, r3, #9088 ; 0x2380 800703e: 3304 adds r3, #4 8007040: 601a str r2, [r3, #0] } if(g_headCtrl.followStartPPos == 0) 8007042: 4b6d ldr r3, [pc, #436] ; (80071f8 ) 8007044: f503 530e add.w r3, r3, #9088 ; 0x2380 8007048: 3304 adds r3, #4 800704a: 681b ldr r3, [r3, #0] 800704c: 2b00 cmp r3, #0 800704e: d105 bne.n 800705c { g_headCtrl.followStartPPos = 100; 8007050: 4b69 ldr r3, [pc, #420] ; (80071f8 ) 8007052: f503 530e add.w r3, r3, #9088 ; 0x2380 8007056: 3304 adds r3, #4 8007058: 2264 movs r2, #100 ; 0x64 800705a: 601a str r2, [r3, #0] } g_headCtrl.followStartNPos = g_headCtrl.pfootFlowNAng*1000/360 + g_headCtrl.ecOfstValue; 800705c: 4b66 ldr r3, [pc, #408] ; (80071f8 ) 800705e: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007062: 3314 adds r3, #20 8007064: 681b ldr r3, [r3, #0] 8007066: f44f 727a mov.w r2, #1000 ; 0x3e8 800706a: fb02 f303 mul.w r3, r2, r3 800706e: 08db lsrs r3, r3, #3 8007070: 4a62 ldr r2, [pc, #392] ; (80071fc ) 8007072: fba2 2303 umull r2, r3, r2, r3 8007076: 089a lsrs r2, r3, #2 8007078: 4b5f ldr r3, [pc, #380] ; (80071f8 ) 800707a: f503 530f add.w r3, r3, #9152 ; 0x23c0 800707e: 3324 adds r3, #36 ; 0x24 8007080: 681b ldr r3, [r3, #0] 8007082: 4413 add r3, r2 8007084: 461a mov r2, r3 8007086: 4b5c ldr r3, [pc, #368] ; (80071f8 ) 8007088: f503 530e add.w r3, r3, #9088 ; 0x2380 800708c: 3308 adds r3, #8 800708e: 601a str r2, [r3, #0] if(g_headCtrl.followStartNPos >= 1000) 8007090: 4b59 ldr r3, [pc, #356] ; (80071f8 ) 8007092: f503 530e add.w r3, r3, #9088 ; 0x2380 8007096: 3308 adds r3, #8 8007098: 681b ldr r3, [r3, #0] 800709a: f5b3 7f7a cmp.w r3, #1000 ; 0x3e8 800709e: db0b blt.n 80070b8 { g_headCtrl.followStartNPos -= 1000; 80070a0: 4b55 ldr r3, [pc, #340] ; (80071f8 ) 80070a2: f503 530e add.w r3, r3, #9088 ; 0x2380 80070a6: 3308 adds r3, #8 80070a8: 681b ldr r3, [r3, #0] 80070aa: f5a3 727a sub.w r2, r3, #1000 ; 0x3e8 80070ae: 4b52 ldr r3, [pc, #328] ; (80071f8 ) 80070b0: f503 530e add.w r3, r3, #9088 ; 0x2380 80070b4: 3308 adds r3, #8 80070b6: 601a str r2, [r3, #0] } if(g_headCtrl.followStartNPos < 0) 80070b8: 4b4f ldr r3, [pc, #316] ; (80071f8 ) 80070ba: f503 530e add.w r3, r3, #9088 ; 0x2380 80070be: 3308 adds r3, #8 80070c0: 681b ldr r3, [r3, #0] 80070c2: 2b00 cmp r3, #0 80070c4: da0b bge.n 80070de { g_headCtrl.followStartNPos += 1000; 80070c6: 4b4c ldr r3, [pc, #304] ; (80071f8 ) 80070c8: f503 530e add.w r3, r3, #9088 ; 0x2380 80070cc: 3308 adds r3, #8 80070ce: 681b ldr r3, [r3, #0] 80070d0: f503 727a add.w r2, r3, #1000 ; 0x3e8 80070d4: 4b48 ldr r3, [pc, #288] ; (80071f8 ) 80070d6: f503 530e add.w r3, r3, #9088 ; 0x2380 80070da: 3308 adds r3, #8 80070dc: 601a str r2, [r3, #0] } if(g_headCtrl.followStartNPos == 0) 80070de: 4b46 ldr r3, [pc, #280] ; (80071f8 ) 80070e0: f503 530e add.w r3, r3, #9088 ; 0x2380 80070e4: 3308 adds r3, #8 80070e6: 681b ldr r3, [r3, #0] 80070e8: 2b00 cmp r3, #0 80070ea: d106 bne.n 80070fa { g_headCtrl.followStartNPos = 600; 80070ec: 4b42 ldr r3, [pc, #264] ; (80071f8 ) 80070ee: f503 530e add.w r3, r3, #9088 ; 0x2380 80070f2: 3308 adds r3, #8 80070f4: f44f 7216 mov.w r2, #600 ; 0x258 80070f8: 601a str r2, [r3, #0] } g_headCtrl.pfootRunLowPos = g_headCtrl.pfootRunLowPos; 80070fa: 4b3f ldr r3, [pc, #252] ; (80071f8 ) 80070fc: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007100: 331c adds r3, #28 8007102: 681a ldr r2, [r3, #0] 8007104: 4b3c ldr r3, [pc, #240] ; (80071f8 ) 8007106: f503 530f add.w r3, r3, #9152 ; 0x23c0 800710a: 331c adds r3, #28 800710c: 601a str r2, [r3, #0] if(g_headCtrl.pfootRunLowPos == 0) 800710e: 4b3a ldr r3, [pc, #232] ; (80071f8 ) 8007110: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007114: 331c adds r3, #28 8007116: 681b ldr r3, [r3, #0] 8007118: 2b00 cmp r3, #0 800711a: d105 bne.n 8007128 { g_headCtrl.pfootRunLowPos = 10; 800711c: 4b36 ldr r3, [pc, #216] ; (80071f8 ) 800711e: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007122: 331c adds r3, #28 8007124: 220a movs r2, #10 8007126: 601a str r2, [r3, #0] } g_headCtrl.pfootRunBackPos = g_headCtrl.pfootRunBackPos; 8007128: 4b33 ldr r3, [pc, #204] ; (80071f8 ) 800712a: f503 530f add.w r3, r3, #9152 ; 0x23c0 800712e: 3320 adds r3, #32 8007130: 681a ldr r2, [r3, #0] 8007132: 4b31 ldr r3, [pc, #196] ; (80071f8 ) 8007134: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007138: 3320 adds r3, #32 800713a: 601a str r2, [r3, #0] if(g_headCtrl.pfootRunBackPos == 0) 800713c: 4b2e ldr r3, [pc, #184] ; (80071f8 ) 800713e: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007142: 3320 adds r3, #32 8007144: 681b ldr r3, [r3, #0] 8007146: 2b00 cmp r3, #0 8007148: d105 bne.n 8007156 { g_headCtrl.pfootRunBackPos = 10; 800714a: 4b2b ldr r3, [pc, #172] ; (80071f8 ) 800714c: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007150: 3320 adds r3, #32 8007152: 220a movs r2, #10 8007154: 601a str r2, [r3, #0] } g_headCtrl.pfootRunHighPos = g_headCtrl.pfootRunLowPos + g_headCtrl.followRunNum; 8007156: 4b28 ldr r3, [pc, #160] ; (80071f8 ) 8007158: f503 530f add.w r3, r3, #9152 ; 0x23c0 800715c: 331c adds r3, #28 800715e: 681a ldr r2, [r3, #0] 8007160: 4b25 ldr r3, [pc, #148] ; (80071f8 ) 8007162: f503 530e add.w r3, r3, #9088 ; 0x2380 8007166: 681b ldr r3, [r3, #0] 8007168: 441a add r2, r3 800716a: 4b23 ldr r3, [pc, #140] ; (80071f8 ) 800716c: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007170: 330c adds r3, #12 8007172: 601a str r2, [r3, #0] if(g_headCtrl.pfootRunHighPos == 0) 8007174: 4b20 ldr r3, [pc, #128] ; (80071f8 ) 8007176: f503 530f add.w r3, r3, #9152 ; 0x23c0 800717a: 330c adds r3, #12 800717c: 681b ldr r3, [r3, #0] 800717e: 2b00 cmp r3, #0 8007180: d105 bne.n 800718e { g_headCtrl.pfootRunHighPos = 50; 8007182: 4b1d ldr r3, [pc, #116] ; (80071f8 ) 8007184: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007188: 330c adds r3, #12 800718a: 2232 movs r2, #50 ; 0x32 800718c: 601a str r2, [r3, #0] } g_headCtrl.followConPAng = g_headCtrl.pfootRunConAng; 800718e: 4b1a ldr r3, [pc, #104] ; (80071f8 ) 8007190: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007194: 3328 adds r3, #40 ; 0x28 8007196: 681a ldr r2, [r3, #0] 8007198: 4b17 ldr r3, [pc, #92] ; (80071f8 ) 800719a: f503 530e add.w r3, r3, #9088 ; 0x2380 800719e: 330c adds r3, #12 80071a0: 601a str r2, [r3, #0] if(g_headCtrl.followConPAng == 0) 80071a2: 4b15 ldr r3, [pc, #84] ; (80071f8 ) 80071a4: f503 530e add.w r3, r3, #9088 ; 0x2380 80071a8: 330c adds r3, #12 80071aa: 681b ldr r3, [r3, #0] 80071ac: 2b00 cmp r3, #0 80071ae: d106 bne.n 80071be { g_headCtrl.followConPAng = 140; 80071b0: 4b11 ldr r3, [pc, #68] ; (80071f8 ) 80071b2: f503 530e add.w r3, r3, #9088 ; 0x2380 80071b6: 330c adds r3, #12 80071b8: 228c movs r2, #140 ; 0x8c 80071ba: 601a str r2, [r3, #0] 80071bc: e00c b.n 80071d8 } else if(g_headCtrl.followConPAng >160) 80071be: 4b0e ldr r3, [pc, #56] ; (80071f8 ) 80071c0: f503 530e add.w r3, r3, #9088 ; 0x2380 80071c4: 330c adds r3, #12 80071c6: 681b ldr r3, [r3, #0] 80071c8: 2ba0 cmp r3, #160 ; 0xa0 80071ca: d905 bls.n 80071d8 { g_headCtrl.followConPAng = 160; 80071cc: 4b0a ldr r3, [pc, #40] ; (80071f8 ) 80071ce: f503 530e add.w r3, r3, #9088 ; 0x2380 80071d2: 330c adds r3, #12 80071d4: 22a0 movs r2, #160 ; 0xa0 80071d6: 601a str r2, [r3, #0] } GetFollowTableValue(g_headCtrl.followConPAng,g_headCtrl.followRunNum); 80071d8: 4b07 ldr r3, [pc, #28] ; (80071f8 ) 80071da: f503 530e add.w r3, r3, #9088 ; 0x2380 80071de: 330c adds r3, #12 80071e0: 681a ldr r2, [r3, #0] 80071e2: 4b05 ldr r3, [pc, #20] ; (80071f8 ) 80071e4: f503 530e add.w r3, r3, #9088 ; 0x2380 80071e8: 681b ldr r3, [r3, #0] 80071ea: 4619 mov r1, r3 80071ec: 4610 mov r0, r2 80071ee: f7ff fd77 bl 8006ce0 //GetFollowTableValue(g_headCtrl.followConNAng,g_headCtrl.followRunNum); } 80071f2: bf00 nop 80071f4: bd80 pop {r7, pc} 80071f6: bf00 nop 80071f8: 2000187c .word 0x2000187c 80071fc: 16c16c17 .word 0x16c16c17 08007200 : } } // Ë¢ÐÂÊäÈëÊä³ö״̬ void InOutStaRefreshTask(void) { 8007200: b580 push {r7, lr} 8007202: af00 add r7, sp, #0 if(GetInput1Status() == SENSOR_ON) 8007204: f002 f8fe bl 8009404 8007208: 4603 mov r3, r0 800720a: 2b00 cmp r3, #0 800720c: d107 bne.n 800721e { g_headCtrl.inputSta |= 0x01; 800720e: 4b52 ldr r3, [pc, #328] ; (8007358 ) 8007210: 789b ldrb r3, [r3, #2] 8007212: f043 0301 orr.w r3, r3, #1 8007216: b2da uxtb r2, r3 8007218: 4b4f ldr r3, [pc, #316] ; (8007358 ) 800721a: 709a strb r2, [r3, #2] 800721c: e006 b.n 800722c } else { g_headCtrl.inputSta &= ~0x01; 800721e: 4b4e ldr r3, [pc, #312] ; (8007358 ) 8007220: 789b ldrb r3, [r3, #2] 8007222: f023 0301 bic.w r3, r3, #1 8007226: b2da uxtb r2, r3 8007228: 4b4b ldr r3, [pc, #300] ; (8007358 ) 800722a: 709a strb r2, [r3, #2] } if(GetInput2Status() == SENSOR_ON) 800722c: f002 f8f8 bl 8009420 8007230: 4603 mov r3, r0 8007232: 2b00 cmp r3, #0 8007234: d107 bne.n 8007246 { g_headCtrl.inputSta |= 0x02; 8007236: 4b48 ldr r3, [pc, #288] ; (8007358 ) 8007238: 789b ldrb r3, [r3, #2] 800723a: f043 0302 orr.w r3, r3, #2 800723e: b2da uxtb r2, r3 8007240: 4b45 ldr r3, [pc, #276] ; (8007358 ) 8007242: 709a strb r2, [r3, #2] 8007244: e006 b.n 8007254 } else { g_headCtrl.inputSta &= ~0x02; 8007246: 4b44 ldr r3, [pc, #272] ; (8007358 ) 8007248: 789b ldrb r3, [r3, #2] 800724a: f023 0302 bic.w r3, r3, #2 800724e: b2da uxtb r2, r3 8007250: 4b41 ldr r3, [pc, #260] ; (8007358 ) 8007252: 709a strb r2, [r3, #2] } if(GetInput3Status() == SENSOR_ON) 8007254: f002 f8f2 bl 800943c 8007258: 4603 mov r3, r0 800725a: 2b00 cmp r3, #0 800725c: d107 bne.n 800726e { g_headCtrl.inputSta |= 0x04; 800725e: 4b3e ldr r3, [pc, #248] ; (8007358 ) 8007260: 789b ldrb r3, [r3, #2] 8007262: f043 0304 orr.w r3, r3, #4 8007266: b2da uxtb r2, r3 8007268: 4b3b ldr r3, [pc, #236] ; (8007358 ) 800726a: 709a strb r2, [r3, #2] 800726c: e006 b.n 800727c } else { g_headCtrl.inputSta &= ~0x04; 800726e: 4b3a ldr r3, [pc, #232] ; (8007358 ) 8007270: 789b ldrb r3, [r3, #2] 8007272: f023 0304 bic.w r3, r3, #4 8007276: b2da uxtb r2, r3 8007278: 4b37 ldr r3, [pc, #220] ; (8007358 ) 800727a: 709a strb r2, [r3, #2] } if(GetInput4Status() == SENSOR_ON) 800727c: f002 f8ec bl 8009458 8007280: 4603 mov r3, r0 8007282: 2b00 cmp r3, #0 8007284: d107 bne.n 8007296 { g_headCtrl.inputSta |= 0x08; 8007286: 4b34 ldr r3, [pc, #208] ; (8007358 ) 8007288: 789b ldrb r3, [r3, #2] 800728a: f043 0308 orr.w r3, r3, #8 800728e: b2da uxtb r2, r3 8007290: 4b31 ldr r3, [pc, #196] ; (8007358 ) 8007292: 709a strb r2, [r3, #2] 8007294: e006 b.n 80072a4 } else { g_headCtrl.inputSta &= ~0x08; 8007296: 4b30 ldr r3, [pc, #192] ; (8007358 ) 8007298: 789b ldrb r3, [r3, #2] 800729a: f023 0308 bic.w r3, r3, #8 800729e: b2da uxtb r2, r3 80072a0: 4b2d ldr r3, [pc, #180] ; (8007358 ) 80072a2: 709a strb r2, [r3, #2] } if(GetInput5Status() == SENSOR_ON) 80072a4: f002 f8e6 bl 8009474 80072a8: 4603 mov r3, r0 80072aa: 2b00 cmp r3, #0 80072ac: d107 bne.n 80072be { g_headCtrl.inputSta |= 0x10; 80072ae: 4b2a ldr r3, [pc, #168] ; (8007358 ) 80072b0: 789b ldrb r3, [r3, #2] 80072b2: f043 0310 orr.w r3, r3, #16 80072b6: b2da uxtb r2, r3 80072b8: 4b27 ldr r3, [pc, #156] ; (8007358 ) 80072ba: 709a strb r2, [r3, #2] 80072bc: e006 b.n 80072cc } else { g_headCtrl.inputSta &= ~0x10; 80072be: 4b26 ldr r3, [pc, #152] ; (8007358 ) 80072c0: 789b ldrb r3, [r3, #2] 80072c2: f023 0310 bic.w r3, r3, #16 80072c6: b2da uxtb r2, r3 80072c8: 4b23 ldr r3, [pc, #140] ; (8007358 ) 80072ca: 709a strb r2, [r3, #2] } if(GetInput6Status() == SENSOR_ON) 80072cc: f002 f8e0 bl 8009490 80072d0: 4603 mov r3, r0 80072d2: 2b00 cmp r3, #0 80072d4: d107 bne.n 80072e6 { g_headCtrl.inputSta |= 0x20; 80072d6: 4b20 ldr r3, [pc, #128] ; (8007358 ) 80072d8: 789b ldrb r3, [r3, #2] 80072da: f043 0320 orr.w r3, r3, #32 80072de: b2da uxtb r2, r3 80072e0: 4b1d ldr r3, [pc, #116] ; (8007358 ) 80072e2: 709a strb r2, [r3, #2] 80072e4: e006 b.n 80072f4 } else { g_headCtrl.inputSta &= ~0x20; 80072e6: 4b1c ldr r3, [pc, #112] ; (8007358 ) 80072e8: 789b ldrb r3, [r3, #2] 80072ea: f023 0320 bic.w r3, r3, #32 80072ee: b2da uxtb r2, r3 80072f0: 4b19 ldr r3, [pc, #100] ; (8007358 ) 80072f2: 709a strb r2, [r3, #2] } if(GetInput7Status() == SENSOR_ON) 80072f4: f002 f8da bl 80094ac 80072f8: 4603 mov r3, r0 80072fa: 2b00 cmp r3, #0 80072fc: d107 bne.n 800730e { g_headCtrl.inputSta |= 0x40; 80072fe: 4b16 ldr r3, [pc, #88] ; (8007358 ) 8007300: 789b ldrb r3, [r3, #2] 8007302: f043 0340 orr.w r3, r3, #64 ; 0x40 8007306: b2da uxtb r2, r3 8007308: 4b13 ldr r3, [pc, #76] ; (8007358 ) 800730a: 709a strb r2, [r3, #2] 800730c: e006 b.n 800731c } else { g_headCtrl.inputSta &= ~0x40; 800730e: 4b12 ldr r3, [pc, #72] ; (8007358 ) 8007310: 789b ldrb r3, [r3, #2] 8007312: f023 0340 bic.w r3, r3, #64 ; 0x40 8007316: b2da uxtb r2, r3 8007318: 4b0f ldr r3, [pc, #60] ; (8007358 ) 800731a: 709a strb r2, [r3, #2] } if(GetInput8Status() == SENSOR_ON) 800731c: f002 f8d4 bl 80094c8 8007320: 4603 mov r3, r0 8007322: 2b00 cmp r3, #0 8007324: d107 bne.n 8007336 { g_headCtrl.inputSta |= 0x80; 8007326: 4b0c ldr r3, [pc, #48] ; (8007358 ) 8007328: 789b ldrb r3, [r3, #2] 800732a: f063 037f orn r3, r3, #127 ; 0x7f 800732e: b2da uxtb r2, r3 8007330: 4b09 ldr r3, [pc, #36] ; (8007358 ) 8007332: 709a strb r2, [r3, #2] 8007334: e006 b.n 8007344 } else { g_headCtrl.inputSta &= ~0x80; 8007336: 4b08 ldr r3, [pc, #32] ; (8007358 ) 8007338: 789b ldrb r3, [r3, #2] 800733a: f003 037f and.w r3, r3, #127 ; 0x7f 800733e: b2da uxtb r2, r3 8007340: 4b05 ldr r3, [pc, #20] ; (8007358 ) 8007342: 709a strb r2, [r3, #2] } g_headCtrl.headCmdReg[0] = g_headCtrl.inputSta; 8007344: 4b04 ldr r3, [pc, #16] ; (8007358 ) 8007346: 789b ldrb r3, [r3, #2] 8007348: b29a uxth r2, r3 800734a: 4b03 ldr r3, [pc, #12] ; (8007358 ) 800734c: f503 5310 add.w r3, r3, #9216 ; 0x2400 8007350: 3304 adds r3, #4 8007352: 801a strh r2, [r3, #0] } 8007354: bf00 nop 8007356: bd80 pop {r7, pc} 8007358: 2000187c .word 0x2000187c 0800735c : } //------------------------------------------------------------------------------- // APÖÐ¶Ï void APIntProc(void) { 800735c: b580 push {r7, lr} 800735e: af00 add r7, sp, #0 if (g_headCtrl.enflag != EN_FALG) 8007360: 4b81 ldr r3, [pc, #516] ; (8007568 ) 8007362: f503 530d add.w r3, r3, #9024 ; 0x2340 8007366: 3330 adds r3, #48 ; 0x30 8007368: 681b ldr r3, [r3, #0] 800736a: f245 52aa movw r2, #21930 ; 0x55aa 800736e: 4293 cmp r3, r2 8007370: f040 80f7 bne.w 8007562 { return; } #if (TRIGGER_TYPE == TRG_ECD_AP || TRIGGER_TYPE == TRG_ECD_AB2) if (GetInputAPStatus() == SENSOR_ON) // ϽµÑØ´¥·¢ 8007374: f001 feb2 bl 80090dc 8007378: 4603 mov r3, r0 800737a: 2b00 cmp r3, #0 800737c: f040 80ea bne.w 8007554 { if (GetInputBPStatus() == SENSOR_OFF) 8007380: f001 feba bl 80090f8 8007384: 4603 mov r3, r0 8007386: 2b01 cmp r3, #1 8007388: f040 80cc bne.w 8007524 { g_headCtrl.encoderValue++; 800738c: 4b76 ldr r3, [pc, #472] ; (8007568 ) 800738e: f503 530d add.w r3, r3, #9024 ; 0x2340 8007392: 3338 adds r3, #56 ; 0x38 8007394: 681b ldr r3, [r3, #0] 8007396: 1c5a adds r2, r3, #1 8007398: 4b73 ldr r3, [pc, #460] ; (8007568 ) 800739a: f503 530d add.w r3, r3, #9024 ; 0x2340 800739e: 3338 adds r3, #56 ; 0x38 80073a0: 601a str r2, [r3, #0] if(g_headCtrl.followEcdCheck == 1) 80073a2: 4b71 ldr r3, [pc, #452] ; (8007568 ) 80073a4: f503 530e add.w r3, r3, #9088 ; 0x2380 80073a8: 3334 adds r3, #52 ; 0x34 80073aa: 681b ldr r3, [r3, #0] 80073ac: 2b01 cmp r3, #1 80073ae: f040 80b2 bne.w 8007516 { if(g_headCtrl.encoderValue == g_headCtrl.followStartPPos) // ÉÏÉý 80073b2: 4b6d ldr r3, [pc, #436] ; (8007568 ) 80073b4: f503 530d add.w r3, r3, #9024 ; 0x2340 80073b8: 3338 adds r3, #56 ; 0x38 80073ba: 681a ldr r2, [r3, #0] 80073bc: 4b6a ldr r3, [pc, #424] ; (8007568 ) 80073be: f503 530e add.w r3, r3, #9088 ; 0x2380 80073c2: 3304 adds r3, #4 80073c4: 681b ldr r3, [r3, #0] 80073c6: 429a cmp r2, r3 80073c8: d13b bne.n 8007442 { if(g_headCtrl.pfootSta == 2 || g_headCtrl.pfootSta == 3) 80073ca: 4b67 ldr r3, [pc, #412] ; (8007568 ) 80073cc: f503 530f add.w r3, r3, #9152 ; 0x23c0 80073d0: 3308 adds r3, #8 80073d2: 681b ldr r3, [r3, #0] 80073d4: 2b02 cmp r3, #2 80073d6: d007 beq.n 80073e8 80073d8: 4b63 ldr r3, [pc, #396] ; (8007568 ) 80073da: f503 530f add.w r3, r3, #9152 ; 0x23c0 80073de: 3308 adds r3, #8 80073e0: 681b ldr r3, [r3, #0] 80073e2: 2b03 cmp r3, #3 80073e4: f040 8097 bne.w 8007516 { g_headCtrl.pfootSta = 3; 80073e8: 4b5f ldr r3, [pc, #380] ; (8007568 ) 80073ea: f503 530f add.w r3, r3, #9152 ; 0x23c0 80073ee: 3308 adds r3, #8 80073f0: 2203 movs r2, #3 80073f2: 601a str r2, [r3, #0] g_headCtrl.followEcdDir = 1; 80073f4: 4b5c ldr r3, [pc, #368] ; (8007568 ) 80073f6: f503 530e add.w r3, r3, #9088 ; 0x2380 80073fa: 3330 adds r3, #48 ; 0x30 80073fc: 2201 movs r2, #1 80073fe: 601a str r2, [r3, #0] g_headCtrl.followEcdEn = 1; 8007400: 4b59 ldr r3, [pc, #356] ; (8007568 ) 8007402: f503 530e add.w r3, r3, #9088 ; 0x2380 8007406: 3318 adds r3, #24 8007408: 2201 movs r2, #1 800740a: 601a str r2, [r3, #0] g_headCtrl.followTableIdx = 0; 800740c: 4b56 ldr r3, [pc, #344] ; (8007568 ) 800740e: f503 530e add.w r3, r3, #9088 ; 0x2380 8007412: 332c adds r3, #44 ; 0x2c 8007414: 2200 movs r2, #0 8007416: 601a str r2, [r3, #0] g_headCtrl.followStepNum = FOLLOW_TABLE[0]; 8007418: 4b54 ldr r3, [pc, #336] ; (800756c ) 800741a: 681b ldr r3, [r3, #0] 800741c: 461a mov r2, r3 800741e: 4b52 ldr r3, [pc, #328] ; (8007568 ) 8007420: f503 530e add.w r3, r3, #9088 ; 0x2380 8007424: 3320 adds r3, #32 8007426: 601a str r2, [r3, #0] g_headCtrl.followNumHigh = 0; 8007428: 4b4f ldr r3, [pc, #316] ; (8007568 ) 800742a: f503 530e add.w r3, r3, #9088 ; 0x2380 800742e: 3328 adds r3, #40 ; 0x28 8007430: 2200 movs r2, #0 8007432: 601a str r2, [r3, #0] g_headCtrl.followNumLow = 0; 8007434: 4b4c ldr r3, [pc, #304] ; (8007568 ) 8007436: f503 530e add.w r3, r3, #9088 ; 0x2380 800743a: 3324 adds r3, #36 ; 0x24 800743c: 2200 movs r2, #0 800743e: 601a str r2, [r3, #0] 8007440: e069 b.n 8007516 } } else if(g_headCtrl.encoderValue == g_headCtrl.followStartNPos) // Ͻµ 8007442: 4b49 ldr r3, [pc, #292] ; (8007568 ) 8007444: f503 530d add.w r3, r3, #9024 ; 0x2340 8007448: 3338 adds r3, #56 ; 0x38 800744a: 681a ldr r2, [r3, #0] 800744c: 4b46 ldr r3, [pc, #280] ; (8007568 ) 800744e: f503 530e add.w r3, r3, #9088 ; 0x2380 8007452: 3308 adds r3, #8 8007454: 681b ldr r3, [r3, #0] 8007456: 429a cmp r2, r3 8007458: d15d bne.n 8007516 { if(g_headCtrl.pfootSta == 1 || g_headCtrl.pfootSta == 3) 800745a: 4b43 ldr r3, [pc, #268] ; (8007568 ) 800745c: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007460: 3308 adds r3, #8 8007462: 681b ldr r3, [r3, #0] 8007464: 2b01 cmp r3, #1 8007466: d006 beq.n 8007476 8007468: 4b3f ldr r3, [pc, #252] ; (8007568 ) 800746a: f503 530f add.w r3, r3, #9152 ; 0x23c0 800746e: 3308 adds r3, #8 8007470: 681b ldr r3, [r3, #0] 8007472: 2b03 cmp r3, #3 8007474: d14f bne.n 8007516 { g_headCtrl.pfootSta = 3; 8007476: 4b3c ldr r3, [pc, #240] ; (8007568 ) 8007478: f503 530f add.w r3, r3, #9152 ; 0x23c0 800747c: 3308 adds r3, #8 800747e: 2203 movs r2, #3 8007480: 601a str r2, [r3, #0] g_headCtrl.followEcdDir = -1; 8007482: 4b39 ldr r3, [pc, #228] ; (8007568 ) 8007484: f503 530e add.w r3, r3, #9088 ; 0x2380 8007488: 3330 adds r3, #48 ; 0x30 800748a: f04f 32ff mov.w r2, #4294967295 800748e: 601a str r2, [r3, #0] g_headCtrl.followEcdEn = 1; 8007490: 4b35 ldr r3, [pc, #212] ; (8007568 ) 8007492: f503 530e add.w r3, r3, #9088 ; 0x2380 8007496: 3318 adds r3, #24 8007498: 2201 movs r2, #1 800749a: 601a str r2, [r3, #0] g_headCtrl.followTableIdx = 0; 800749c: 4b32 ldr r3, [pc, #200] ; (8007568 ) 800749e: f503 530e add.w r3, r3, #9088 ; 0x2380 80074a2: 332c adds r3, #44 ; 0x2c 80074a4: 2200 movs r2, #0 80074a6: 601a str r2, [r3, #0] g_headCtrl.followStepNum = FOLLOW_TABLE[0]; 80074a8: 4b30 ldr r3, [pc, #192] ; (800756c ) 80074aa: 681b ldr r3, [r3, #0] 80074ac: 461a mov r2, r3 80074ae: 4b2e ldr r3, [pc, #184] ; (8007568 ) 80074b0: f503 530e add.w r3, r3, #9088 ; 0x2380 80074b4: 3320 adds r3, #32 80074b6: 601a str r2, [r3, #0] g_headCtrl.followNumHigh = 0; 80074b8: 4b2b ldr r3, [pc, #172] ; (8007568 ) 80074ba: f503 530e add.w r3, r3, #9088 ; 0x2380 80074be: 3328 adds r3, #40 ; 0x28 80074c0: 2200 movs r2, #0 80074c2: 601a str r2, [r3, #0] g_headCtrl.followNumLow = 0; 80074c4: 4b28 ldr r3, [pc, #160] ; (8007568 ) 80074c6: f503 530e add.w r3, r3, #9088 ; 0x2380 80074ca: 3324 adds r3, #36 ; 0x24 80074cc: 2200 movs r2, #0 80074ce: 601a str r2, [r3, #0] if(g_headCtrl.followChangeFlag == 1) 80074d0: 4b25 ldr r3, [pc, #148] ; (8007568 ) 80074d2: f503 530e add.w r3, r3, #9088 ; 0x2380 80074d6: 3338 adds r3, #56 ; 0x38 80074d8: 681b ldr r3, [r3, #0] 80074da: 2b01 cmp r3, #1 80074dc: d11b bne.n 8007516 { g_headCtrl.followRunNum = g_headCtrl.followChangeNum; 80074de: 4b22 ldr r3, [pc, #136] ; (8007568 ) 80074e0: f503 530e add.w r3, r3, #9088 ; 0x2380 80074e4: 333c adds r3, #60 ; 0x3c 80074e6: 681a ldr r2, [r3, #0] 80074e8: 4b1f ldr r3, [pc, #124] ; (8007568 ) 80074ea: f503 530e add.w r3, r3, #9088 ; 0x2380 80074ee: 601a str r2, [r3, #0] g_headCtrl.followChangeFlag = 0; 80074f0: 4b1d ldr r3, [pc, #116] ; (8007568 ) 80074f2: f503 530e add.w r3, r3, #9088 ; 0x2380 80074f6: 3338 adds r3, #56 ; 0x38 80074f8: 2200 movs r2, #0 80074fa: 601a str r2, [r3, #0] GetFollowTableValue(g_headCtrl.followConPAng,g_headCtrl.followRunNum); 80074fc: 4b1a ldr r3, [pc, #104] ; (8007568 ) 80074fe: f503 530e add.w r3, r3, #9088 ; 0x2380 8007502: 330c adds r3, #12 8007504: 681a ldr r2, [r3, #0] 8007506: 4b18 ldr r3, [pc, #96] ; (8007568 ) 8007508: f503 530e add.w r3, r3, #9088 ; 0x2380 800750c: 681b ldr r3, [r3, #0] 800750e: 4619 mov r1, r3 8007510: 4610 mov r0, r2 8007512: f7ff fbe5 bl 8006ce0 } } } } g_headCtrl.FollowMotoSignOn(); 8007516: 4b14 ldr r3, [pc, #80] ; (8007568 ) 8007518: f503 530f add.w r3, r3, #9152 ; 0x23c0 800751c: 3334 adds r3, #52 ; 0x34 800751e: 681b ldr r3, [r3, #0] 8007520: 4798 blx r3 8007522: e010 b.n 8007546 } else { g_headCtrl.encoderValue--; 8007524: 4b10 ldr r3, [pc, #64] ; (8007568 ) 8007526: f503 530d add.w r3, r3, #9024 ; 0x2340 800752a: 3338 adds r3, #56 ; 0x38 800752c: 681b ldr r3, [r3, #0] 800752e: 1e5a subs r2, r3, #1 8007530: 4b0d ldr r3, [pc, #52] ; (8007568 ) 8007532: f503 530d add.w r3, r3, #9024 ; 0x2340 8007536: 3338 adds r3, #56 ; 0x38 8007538: 601a str r2, [r3, #0] g_headCtrl.FollowMotoSignOff(); 800753a: 4b0b ldr r3, [pc, #44] ; (8007568 ) 800753c: f503 530f add.w r3, r3, #9152 ; 0x23c0 8007540: 3338 adds r3, #56 ; 0x38 8007542: 681b ldr r3, [r3, #0] 8007544: 4798 blx r3 } g_headCtrl.FollowMotoPulseOn(); 8007546: 4b08 ldr r3, [pc, #32] ; (8007568 ) 8007548: f503 530f add.w r3, r3, #9152 ; 0x23c0 800754c: 332c adds r3, #44 ; 0x2c 800754e: 681b ldr r3, [r3, #0] 8007550: 4798 blx r3 8007552: e007 b.n 8007564 } else { g_headCtrl.FollowMotoPulseOff(); 8007554: 4b04 ldr r3, [pc, #16] ; (8007568 ) 8007556: f503 530f add.w r3, r3, #9152 ; 0x23c0 800755a: 3330 adds r3, #48 ; 0x30 800755c: 681b ldr r3, [r3, #0] 800755e: 4798 blx r3 8007560: e000 b.n 8007564 return; 8007562: bf00 nop g_headCtrl.FollowMotoSignOff(); } g_headCtrl.FollowMotoPulseOn(); #endif // printf("AP, evalue=%d\r\n", g_headCtrl.encoderValue); } 8007564: bd80 pop {r7, pc} 8007566: bf00 nop 8007568: 2000187c .word 0x2000187c 800756c: 20000214 .word 0x20000214 08007570 : void BPIntProc(void) { 8007570: b480 push {r7} 8007572: af00 add r7, sp, #0 if (g_headCtrl.enflag != EN_FALG) 8007574: 4b05 ldr r3, [pc, #20] ; (800758c ) 8007576: f503 530d add.w r3, r3, #9024 ; 0x2340 800757a: 3330 adds r3, #48 ; 0x30 800757c: 681b ldr r3, [r3, #0] 800757e: f245 52aa movw r2, #21930 ; 0x55aa 8007582: 4293 cmp r3, r2 g_headCtrl.FollowMotoPulseOff(); #endif // printf("BP\r\n"); } 8007584: 46bd mov sp, r7 8007586: bc80 pop {r7} 8007588: 4770 bx lr 800758a: bf00 nop 800758c: 2000187c .word 0x2000187c 08007590 : // ZPÖÐ¶Ï void ZPIntProc(void) { 8007590: b480 push {r7} 8007592: af00 add r7, sp, #0 if (g_headCtrl.enflag != EN_FALG) 8007594: 4b09 ldr r3, [pc, #36] ; (80075bc ) 8007596: f503 530d add.w r3, r3, #9024 ; 0x2340 800759a: 3330 adds r3, #48 ; 0x30 800759c: 681b ldr r3, [r3, #0] 800759e: f245 52aa movw r2, #21930 ; 0x55aa 80075a2: 4293 cmp r3, r2 80075a4: d106 bne.n 80075b4 { return; } // printf("zp, evalue=%d\r\n", g_headCtrl.encoderValue); g_headCtrl.encoderValue = 0; 80075a6: 4b05 ldr r3, [pc, #20] ; (80075bc ) 80075a8: f503 530d add.w r3, r3, #9024 ; 0x2340 80075ac: 3338 adds r3, #56 ; 0x38 80075ae: 2200 movs r2, #0 80075b0: 601a str r2, [r3, #0] 80075b2: e000 b.n 80075b6 return; 80075b4: bf00 nop } 80075b6: 46bd mov sp, r7 80075b8: bc80 pop {r7} 80075ba: 4770 bx lr 80075bc: 2000187c .word 0x2000187c 080075c0 : void TestAction(char * para1, char * para2) { 80075c0: b580 push {r7, lr} 80075c2: b084 sub sp, #16 80075c4: af00 add r7, sp, #0 80075c6: 6078 str r0, [r7, #4] 80075c8: 6039 str r1, [r7, #0] int p1, p2; if (para1 == NULL || para2 == NULL) 80075ca: 687b ldr r3, [r7, #4] 80075cc: 2b00 cmp r3, #0 80075ce: f000 8092 beq.w 80076f6 80075d2: 683b ldr r3, [r7, #0] 80075d4: 2b00 cmp r3, #0 80075d6: f000 808e beq.w 80076f6 { return; } printf("para1=%s, para2=%s\r\n", para1, para2); 80075da: 683a ldr r2, [r7, #0] 80075dc: 6879 ldr r1, [r7, #4] 80075de: 4849 ldr r0, [pc, #292] ; (8007704 ) 80075e0: f002 f994 bl 800990c if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0) 80075e4: 687b ldr r3, [r7, #4] 80075e6: 781b ldrb r3, [r3, #0] 80075e8: 2b00 cmp r3, #0 80075ea: f000 8086 beq.w 80076fa 80075ee: 683b ldr r3, [r7, #0] 80075f0: 781b ldrb r3, [r3, #0] 80075f2: 2b00 cmp r3, #0 80075f4: f000 8081 beq.w 80076fa { return; } p1 = atoi(para1); 80075f8: 6878 ldr r0, [r7, #4] 80075fa: f002 f945 bl 8009888 80075fe: 60f8 str r0, [r7, #12] p2 = atoi(para2); 8007600: 6838 ldr r0, [r7, #0] 8007602: f002 f941 bl 8009888 8007606: 60b8 str r0, [r7, #8] if (p1 == p2) 8007608: 68fa ldr r2, [r7, #12] 800760a: 68bb ldr r3, [r7, #8] 800760c: 429a cmp r2, r3 800760e: d075 beq.n 80076fc { TIM_Cmd(TIM3, DISABLE); } } #else else if(p1 == 1) 8007610: 68fb ldr r3, [r7, #12] 8007612: 2b01 cmp r3, #1 8007614: d10d bne.n 8007632 { g_headCtrl.pwmCtrl = p2; 8007616: 68bb ldr r3, [r7, #8] 8007618: b29a uxth r2, r3 800761a: 4b3b ldr r3, [pc, #236] ; (8007708 ) 800761c: 80da strh r2, [r3, #6] LL_TIM_EnableCounter(TIM1); 800761e: 483b ldr r0, [pc, #236] ; (800770c ) 8007620: f7ff f96f bl 8006902 printf("Õ¼¿Õ±È£º%d \r\n",g_headCtrl.pwmCtrl); 8007624: 4b38 ldr r3, [pc, #224] ; (8007708 ) 8007626: 88db ldrh r3, [r3, #6] 8007628: 4619 mov r1, r3 800762a: 4839 ldr r0, [pc, #228] ; (8007710 ) 800762c: f002 f96e bl 800990c 8007630: e064 b.n 80076fc } else if(p1 == 2) 8007632: 68fb ldr r3, [r7, #12] 8007634: 2b02 cmp r3, #2 8007636: d10d bne.n 8007654 { LL_TIM_EnableIT_UPDATE(TIM1); /* ¿ªÆôÖÐ¶Ï */ 8007638: 4834 ldr r0, [pc, #208] ; (800770c ) 800763a: f7ff f980 bl 800693e LL_TIM_DisableCounter(TIM1); // ¹Ø±Õ¶¨Ê±Æ÷ 800763e: 4833 ldr r0, [pc, #204] ; (800770c ) 8007640: f7ff f96e bl 8006920 printf("¹Ø±Õ¶¨Ê±Æ÷ \r\n"); 8007644: 4833 ldr r0, [pc, #204] ; (8007714 ) 8007646: f002 f9d5 bl 80099f4 SetOutput7Off(); 800764a: f001 fe9b bl 8009384 SetOutput6Off(); 800764e: f001 fe73 bl 8009338 8007652: e053 b.n 80076fc } else if(p1 == 3) 8007654: 68fb ldr r3, [r7, #12] 8007656: 2b03 cmp r3, #3 8007658: d104 bne.n 8007664 { g_headCtrl.pwmFreq = p2; 800765a: 68bb ldr r3, [r7, #8] 800765c: b29a uxth r2, r3 800765e: 4b2a ldr r3, [pc, #168] ; (8007708 ) 8007660: 811a strh r2, [r3, #8] 8007662: e04b b.n 80076fc } else if(p1 == 4) 8007664: 68fb ldr r3, [r7, #12] 8007666: 2b04 cmp r3, #4 8007668: d103 bne.n 8007672 { g_headCtrl.timeCount = 1; 800766a: 4b27 ldr r3, [pc, #156] ; (8007708 ) 800766c: 2201 movs r2, #1 800766e: 60da str r2, [r3, #12] 8007670: e044 b.n 80076fc } #endif else if(p1 == 11) 8007672: 68fb ldr r3, [r7, #12] 8007674: 2b0b cmp r3, #11 8007676: d11d bne.n 80076b4 { if(p2 == 1) 8007678: 68bb ldr r3, [r7, #8] 800767a: 2b01 cmp r3, #1 800767c: d102 bne.n 8007684 { SetOutput1On(); 800767e: f001 fd91 bl 80091a4 8007682: e03b b.n 80076fc } else if(p2 == 2) 8007684: 68bb ldr r3, [r7, #8] 8007686: 2b02 cmp r3, #2 8007688: d102 bne.n 8007690 { SetOutput2On(); 800768a: f001 fdb1 bl 80091f0 800768e: e035 b.n 80076fc } else if(p2 == 6) 8007690: 68bb ldr r3, [r7, #8] 8007692: 2b06 cmp r3, #6 8007694: d102 bne.n 800769c { SetOutput6On(); 8007696: f001 fe43 bl 8009320 800769a: e02f b.n 80076fc } else if(p2 == 7) 800769c: 68bb ldr r3, [r7, #8] 800769e: 2b07 cmp r3, #7 80076a0: d102 bne.n 80076a8 { SetOutput7On(); 80076a2: f001 fe63 bl 800936c 80076a6: e029 b.n 80076fc } else if(p2 == 8) 80076a8: 68bb ldr r3, [r7, #8] 80076aa: 2b08 cmp r3, #8 80076ac: d126 bne.n 80076fc { SetOutput8On(); 80076ae: f001 fe83 bl 80093b8 80076b2: e023 b.n 80076fc } } else if(p1 == 12) 80076b4: 68fb ldr r3, [r7, #12] 80076b6: 2b0c cmp r3, #12 80076b8: d120 bne.n 80076fc { if(p2 == 1) 80076ba: 68bb ldr r3, [r7, #8] 80076bc: 2b01 cmp r3, #1 80076be: d102 bne.n 80076c6 { SetOutput1Off(); 80076c0: f001 fd7c bl 80091bc 80076c4: e01a b.n 80076fc } else if(p2 == 2) 80076c6: 68bb ldr r3, [r7, #8] 80076c8: 2b02 cmp r3, #2 80076ca: d102 bne.n 80076d2 { SetOutput2Off(); 80076cc: f001 fd9c bl 8009208 80076d0: e014 b.n 80076fc } else if(p2 == 6) 80076d2: 68bb ldr r3, [r7, #8] 80076d4: 2b06 cmp r3, #6 80076d6: d102 bne.n 80076de { SetOutput6Off(); 80076d8: f001 fe2e bl 8009338 80076dc: e00e b.n 80076fc } else if(p2 == 7) 80076de: 68bb ldr r3, [r7, #8] 80076e0: 2b07 cmp r3, #7 80076e2: d102 bne.n 80076ea { SetOutput7Off(); 80076e4: f001 fe4e bl 8009384 80076e8: e008 b.n 80076fc } else if(p2 == 8) 80076ea: 68bb ldr r3, [r7, #8] 80076ec: 2b08 cmp r3, #8 80076ee: d105 bne.n 80076fc { SetOutput8Off(); 80076f0: f001 fe6e bl 80093d0 80076f4: e002 b.n 80076fc return; 80076f6: bf00 nop 80076f8: e000 b.n 80076fc return; 80076fa: bf00 nop } } } 80076fc: 3710 adds r7, #16 80076fe: 46bd mov sp, r7 8007700: bd80 pop {r7, pc} 8007702: bf00 nop 8007704: 0800ad70 .word 0x0800ad70 8007708: 2000187c .word 0x2000187c 800770c: 40012c00 .word 0x40012c00 8007710: 0800ad88 .word 0x0800ad88 8007714: 0800ad98 .word 0x0800ad98 08007718 : //-------------------------------------------------------------------- //-------------------------------------------------------------------- void InitDebug(void) { 8007718: b580 push {r7, lr} 800771a: af00 add r7, sp, #0 AddShellCmd("INPUT", "input detect", TestInputs); 800771c: 4a05 ldr r2, [pc, #20] ; (8007734 ) 800771e: 4906 ldr r1, [pc, #24] ; (8007738 ) 8007720: 4806 ldr r0, [pc, #24] ; (800773c ) 8007722: f7fc fec9 bl 80044b8 AddShellCmd("OUTPUT", "output control", TestOutput); 8007726: 4a06 ldr r2, [pc, #24] ; (8007740 ) 8007728: 4906 ldr r1, [pc, #24] ; (8007744 ) 800772a: 4807 ldr r0, [pc, #28] ; (8007748 ) 800772c: f7fc fec4 bl 80044b8 do { TestOutput("1", "1000"); }while(1); #endif } 8007730: bf00 nop 8007732: bd80 pop {r7, pc} 8007734: 0800774d .word 0x0800774d 8007738: 0800ada8 .word 0x0800ada8 800773c: 0800adb8 .word 0x0800adb8 8007740: 0800791d .word 0x0800791d 8007744: 0800adc0 .word 0x0800adc0 8007748: 0800add0 .word 0x0800add0 0800774c : }\ }while(0) void TestInputs(char * para1, char * para2) { 800774c: b580 push {r7, lr} 800774e: b088 sub sp, #32 8007750: af00 add r7, sp, #0 8007752: 6078 str r0, [r7, #4] 8007754: 6039 str r1, [r7, #0] int p1, p2; if (para1 == NULL || para2 == NULL) 8007756: 687b ldr r3, [r7, #4] 8007758: 2b00 cmp r3, #0 800775a: f000 80c6 beq.w 80078ea 800775e: 683b ldr r3, [r7, #0] 8007760: 2b00 cmp r3, #0 8007762: f000 80c2 beq.w 80078ea { return; } printf("para1=%s, para2=%s\r\n", para1, para2); 8007766: 683a ldr r2, [r7, #0] 8007768: 6879 ldr r1, [r7, #4] 800776a: 4862 ldr r0, [pc, #392] ; (80078f4 ) 800776c: f002 f8ce bl 800990c p1 = 0; 8007770: 2300 movs r3, #0 8007772: 61fb str r3, [r7, #28] p2 = 0; 8007774: 2300 movs r3, #0 8007776: 617b str r3, [r7, #20] if (strcmp(para1, "") != 0) 8007778: 687b ldr r3, [r7, #4] 800777a: 781b ldrb r3, [r3, #0] 800777c: 2b00 cmp r3, #0 800777e: d00b beq.n 8007798 { p1 = atoi(para1); 8007780: 6878 ldr r0, [r7, #4] 8007782: f002 f881 bl 8009888 8007786: 61f8 str r0, [r7, #28] if (strcmp(para2, "") != 0) 8007788: 683b ldr r3, [r7, #0] 800778a: 781b ldrb r3, [r3, #0] 800778c: 2b00 cmp r3, #0 800778e: d003 beq.n 8007798 { p2 = atoi(para2); 8007790: 6838 ldr r0, [r7, #0] 8007792: f002 f879 bl 8009888 8007796: 6178 str r0, [r7, #20] { } //-------------------------------- { int inidx = 0; 8007798: 2300 movs r3, #0 800779a: 61bb str r3, [r7, #24] u8 inputsta[INPUT_NUM]; u8 temp; memset(inputsta, 0xff, INPUT_NUM); 800779c: f107 0308 add.w r3, r7, #8 80077a0: 2208 movs r2, #8 80077a2: 21ff movs r1, #255 ; 0xff 80077a4: 4618 mov r0, r3 80077a6: f002 f8a8 bl 80098fa do { INPUT_OP(0, GetInput1Status); 80077aa: f001 fe2b bl 8009404 80077ae: 4603 mov r3, r0 80077b0: 74fb strb r3, [r7, #19] 80077b2: 7a3b ldrb r3, [r7, #8] 80077b4: 7cfa ldrb r2, [r7, #19] 80077b6: 429a cmp r2, r3 80077b8: d009 beq.n 80077ce 80077ba: 7cfb ldrb r3, [r7, #19] 80077bc: 723b strb r3, [r7, #8] 80077be: 69b9 ldr r1, [r7, #24] 80077c0: 1c4b adds r3, r1, #1 80077c2: 61bb str r3, [r7, #24] 80077c4: 7cfb ldrb r3, [r7, #19] 80077c6: 4a4c ldr r2, [pc, #304] ; (80078f8 ) 80077c8: 484c ldr r0, [pc, #304] ; (80078fc ) 80077ca: f002 f89f bl 800990c INPUT_OP(1, GetInput2Status); 80077ce: f001 fe27 bl 8009420 80077d2: 4603 mov r3, r0 80077d4: 74fb strb r3, [r7, #19] 80077d6: 7a7b ldrb r3, [r7, #9] 80077d8: 7cfa ldrb r2, [r7, #19] 80077da: 429a cmp r2, r3 80077dc: d009 beq.n 80077f2 80077de: 7cfb ldrb r3, [r7, #19] 80077e0: 727b strb r3, [r7, #9] 80077e2: 69b9 ldr r1, [r7, #24] 80077e4: 1c4b adds r3, r1, #1 80077e6: 61bb str r3, [r7, #24] 80077e8: 7cfb ldrb r3, [r7, #19] 80077ea: 4a45 ldr r2, [pc, #276] ; (8007900 ) 80077ec: 4843 ldr r0, [pc, #268] ; (80078fc ) 80077ee: f002 f88d bl 800990c INPUT_OP(2, GetInput3Status); 80077f2: f001 fe23 bl 800943c 80077f6: 4603 mov r3, r0 80077f8: 74fb strb r3, [r7, #19] 80077fa: 7abb ldrb r3, [r7, #10] 80077fc: 7cfa ldrb r2, [r7, #19] 80077fe: 429a cmp r2, r3 8007800: d009 beq.n 8007816 8007802: 7cfb ldrb r3, [r7, #19] 8007804: 72bb strb r3, [r7, #10] 8007806: 69b9 ldr r1, [r7, #24] 8007808: 1c4b adds r3, r1, #1 800780a: 61bb str r3, [r7, #24] 800780c: 7cfb ldrb r3, [r7, #19] 800780e: 4a3d ldr r2, [pc, #244] ; (8007904 ) 8007810: 483a ldr r0, [pc, #232] ; (80078fc ) 8007812: f002 f87b bl 800990c INPUT_OP(3, GetInput4Status); 8007816: f001 fe1f bl 8009458 800781a: 4603 mov r3, r0 800781c: 74fb strb r3, [r7, #19] 800781e: 7afb ldrb r3, [r7, #11] 8007820: 7cfa ldrb r2, [r7, #19] 8007822: 429a cmp r2, r3 8007824: d009 beq.n 800783a 8007826: 7cfb ldrb r3, [r7, #19] 8007828: 72fb strb r3, [r7, #11] 800782a: 69b9 ldr r1, [r7, #24] 800782c: 1c4b adds r3, r1, #1 800782e: 61bb str r3, [r7, #24] 8007830: 7cfb ldrb r3, [r7, #19] 8007832: 4a35 ldr r2, [pc, #212] ; (8007908 ) 8007834: 4831 ldr r0, [pc, #196] ; (80078fc ) 8007836: f002 f869 bl 800990c INPUT_OP(4, GetInput5Status); 800783a: f001 fe1b bl 8009474 800783e: 4603 mov r3, r0 8007840: 74fb strb r3, [r7, #19] 8007842: 7b3b ldrb r3, [r7, #12] 8007844: 7cfa ldrb r2, [r7, #19] 8007846: 429a cmp r2, r3 8007848: d009 beq.n 800785e 800784a: 7cfb ldrb r3, [r7, #19] 800784c: 733b strb r3, [r7, #12] 800784e: 69b9 ldr r1, [r7, #24] 8007850: 1c4b adds r3, r1, #1 8007852: 61bb str r3, [r7, #24] 8007854: 7cfb ldrb r3, [r7, #19] 8007856: 4a2d ldr r2, [pc, #180] ; (800790c ) 8007858: 4828 ldr r0, [pc, #160] ; (80078fc ) 800785a: f002 f857 bl 800990c INPUT_OP(5, GetInput6Status); 800785e: f001 fe17 bl 8009490 8007862: 4603 mov r3, r0 8007864: 74fb strb r3, [r7, #19] 8007866: 7b7b ldrb r3, [r7, #13] 8007868: 7cfa ldrb r2, [r7, #19] 800786a: 429a cmp r2, r3 800786c: d009 beq.n 8007882 800786e: 7cfb ldrb r3, [r7, #19] 8007870: 737b strb r3, [r7, #13] 8007872: 69b9 ldr r1, [r7, #24] 8007874: 1c4b adds r3, r1, #1 8007876: 61bb str r3, [r7, #24] 8007878: 7cfb ldrb r3, [r7, #19] 800787a: 4a25 ldr r2, [pc, #148] ; (8007910 ) 800787c: 481f ldr r0, [pc, #124] ; (80078fc ) 800787e: f002 f845 bl 800990c INPUT_OP(6, GetInput7Status); 8007882: f001 fe13 bl 80094ac 8007886: 4603 mov r3, r0 8007888: 74fb strb r3, [r7, #19] 800788a: 7bbb ldrb r3, [r7, #14] 800788c: 7cfa ldrb r2, [r7, #19] 800788e: 429a cmp r2, r3 8007890: d009 beq.n 80078a6 8007892: 7cfb ldrb r3, [r7, #19] 8007894: 73bb strb r3, [r7, #14] 8007896: 69b9 ldr r1, [r7, #24] 8007898: 1c4b adds r3, r1, #1 800789a: 61bb str r3, [r7, #24] 800789c: 7cfb ldrb r3, [r7, #19] 800789e: 4a1d ldr r2, [pc, #116] ; (8007914 ) 80078a0: 4816 ldr r0, [pc, #88] ; (80078fc ) 80078a2: f002 f833 bl 800990c INPUT_OP(7, GetInput8Status); 80078a6: f001 fe0f bl 80094c8 80078aa: 4603 mov r3, r0 80078ac: 74fb strb r3, [r7, #19] 80078ae: 7bfb ldrb r3, [r7, #15] 80078b0: 7cfa ldrb r2, [r7, #19] 80078b2: 429a cmp r2, r3 80078b4: d009 beq.n 80078ca 80078b6: 7cfb ldrb r3, [r7, #19] 80078b8: 73fb strb r3, [r7, #15] 80078ba: 69b9 ldr r1, [r7, #24] 80078bc: 1c4b adds r3, r1, #1 80078be: 61bb str r3, [r7, #24] 80078c0: 7cfb ldrb r3, [r7, #19] 80078c2: 4a15 ldr r2, [pc, #84] ; (8007918 ) 80078c4: 480d ldr r0, [pc, #52] ; (80078fc ) 80078c6: f002 f821 bl 800990c DelayMs(10); 80078ca: 200a movs r0, #10 80078cc: f7fb feba bl 8003644 if (IsConsoleCancel() != 0 || p1 == 0) // ÖÕ¶ËÊäÈëÍ£Ö¹ 80078d0: f7fb fe68 bl 80035a4 80078d4: 4603 mov r3, r0 80078d6: 2b00 cmp r3, #0 80078d8: d108 bne.n 80078ec 80078da: 69fb ldr r3, [r7, #28] 80078dc: 2b00 cmp r3, #0 80078de: d005 beq.n 80078ec { break; } }while(p1 != 0); 80078e0: 69fb ldr r3, [r7, #28] 80078e2: 2b00 cmp r3, #0 80078e4: f47f af61 bne.w 80077aa 80078e8: e000 b.n 80078ec return; 80078ea: bf00 nop } } 80078ec: 3720 adds r7, #32 80078ee: 46bd mov sp, r7 80078f0: bd80 pop {r7, pc} 80078f2: bf00 nop 80078f4: 0800add8 .word 0x0800add8 80078f8: 2000022c .word 0x2000022c 80078fc: 0800adf0 .word 0x0800adf0 8007900: 20000240 .word 0x20000240 8007904: 20000254 .word 0x20000254 8007908: 20000268 .word 0x20000268 800790c: 2000027c .word 0x2000027c 8007910: 20000290 .word 0x20000290 8007914: 200002a4 .word 0x200002a4 8007918: 200002b8 .word 0x200002b8 0800791c : }\ }while(0) void TestOutput(char * para1, char * para2) { 800791c: b580 push {r7, lr} 800791e: b086 sub sp, #24 8007920: af00 add r7, sp, #0 8007922: 6078 str r0, [r7, #4] 8007924: 6039 str r1, [r7, #0] int p1, p2; int count, delay; if (para1 == NULL || para2 == NULL) 8007926: 687b ldr r3, [r7, #4] 8007928: 2b00 cmp r3, #0 800792a: f001 82db beq.w 8008ee4 800792e: 683b ldr r3, [r7, #0] 8007930: 2b00 cmp r3, #0 8007932: f001 82d7 beq.w 8008ee4 { return; } printf("para1=%s, para2=%s\r\n", para1, para2); 8007936: 683a ldr r2, [r7, #0] 8007938: 6879 ldr r1, [r7, #4] 800793a: 48b8 ldr r0, [pc, #736] ; (8007c1c ) 800793c: f001 ffe6 bl 800990c if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0) 8007940: 687b ldr r3, [r7, #4] 8007942: 781b ldrb r3, [r3, #0] 8007944: 2b00 cmp r3, #0 8007946: f001 82cf beq.w 8008ee8 800794a: 683b ldr r3, [r7, #0] 800794c: 781b ldrb r3, [r3, #0] 800794e: 2b00 cmp r3, #0 8007950: f001 82ca beq.w 8008ee8 { return; } p1 = atoi(para1); 8007954: 6878 ldr r0, [r7, #4] 8007956: f001 ff97 bl 8009888 800795a: 60f8 str r0, [r7, #12] p2 = atoi(para2); 800795c: 6838 ldr r0, [r7, #0] 800795e: f001 ff93 bl 8009888 8007962: 60b8 str r0, [r7, #8] if (p1 == p2) { } //-------------------------------- if (p1 == 0) 8007964: 68fb ldr r3, [r7, #12] 8007966: 2b00 cmp r3, #0 8007968: f040 8543 bne.w 80083f2 { if (p2 == 0) 800796c: 68bb ldr r3, [r7, #8] 800796e: 2b00 cmp r3, #0 8007970: f041 82cd bne.w 8008f0e { TOUT_OP(0, Output1, 1000); 8007974: 68bb ldr r3, [r7, #8] 8007976: 2b00 cmp r3, #0 8007978: d10a bne.n 8007990 800797a: f001 fc1f bl 80091bc 800797e: f001 fc29 bl 80091d4 8007982: 4603 mov r3, r0 8007984: 4aa6 ldr r2, [pc, #664] ; (8007c20 ) 8007986: 2101 movs r1, #1 8007988: 48a6 ldr r0, [pc, #664] ; (8007c24 ) 800798a: f001 ffbf bl 800990c 800798e: e094 b.n 8007aba 8007990: 68bb ldr r3, [r7, #8] 8007992: 2b01 cmp r3, #1 8007994: d10a bne.n 80079ac 8007996: f001 fc05 bl 80091a4 800799a: f001 fc1b bl 80091d4 800799e: 4603 mov r3, r0 80079a0: 4a9f ldr r2, [pc, #636] ; (8007c20 ) 80079a2: 2101 movs r1, #1 80079a4: 489f ldr r0, [pc, #636] ; (8007c24 ) 80079a6: f001 ffb1 bl 800990c 80079aa: e086 b.n 8007aba 80079ac: 68bb ldr r3, [r7, #8] 80079ae: 2b02 cmp r3, #2 80079b0: d118 bne.n 80079e4 80079b2: f001 fbf7 bl 80091a4 80079b6: f001 fc0d bl 80091d4 80079ba: 4603 mov r3, r0 80079bc: 4a98 ldr r2, [pc, #608] ; (8007c20 ) 80079be: 2101 movs r1, #1 80079c0: 4898 ldr r0, [pc, #608] ; (8007c24 ) 80079c2: f001 ffa3 bl 800990c 80079c6: f44f 707a mov.w r0, #1000 ; 0x3e8 80079ca: f7fb fe3b bl 8003644 80079ce: f001 fbf5 bl 80091bc 80079d2: f001 fbff bl 80091d4 80079d6: 4603 mov r3, r0 80079d8: 4a91 ldr r2, [pc, #580] ; (8007c20 ) 80079da: 2101 movs r1, #1 80079dc: 4891 ldr r0, [pc, #580] ; (8007c24 ) 80079de: f001 ff95 bl 800990c 80079e2: e06a b.n 8007aba 80079e4: 68bb ldr r3, [r7, #8] 80079e6: 2b00 cmp r3, #0 80079e8: dd67 ble.n 8007aba 80079ea: 68bb ldr r3, [r7, #8] 80079ec: f44f 727a mov.w r2, #1000 ; 0x3e8 80079f0: fb02 f303 mul.w r3, r2, r3 80079f4: 617b str r3, [r7, #20] 80079f6: e051 b.n 8007a9c 80079f8: 697b ldr r3, [r7, #20] 80079fa: 3b01 subs r3, #1 80079fc: 617b str r3, [r7, #20] 80079fe: f001 fbd1 bl 80091a4 8007a02: f001 fbe7 bl 80091d4 8007a06: 4603 mov r3, r0 8007a08: 4a85 ldr r2, [pc, #532] ; (8007c20 ) 8007a0a: 2101 movs r1, #1 8007a0c: 4885 ldr r0, [pc, #532] ; (8007c24 ) 8007a0e: f001 ff7d bl 800990c 8007a12: 68bb ldr r3, [r7, #8] 8007a14: 3309 adds r3, #9 8007a16: 4a84 ldr r2, [pc, #528] ; (8007c28 ) 8007a18: fb82 1203 smull r1, r2, r2, r3 8007a1c: 1092 asrs r2, r2, #2 8007a1e: 17db asrs r3, r3, #31 8007a20: 1ad3 subs r3, r2, r3 8007a22: 613b str r3, [r7, #16] 8007a24: 200a movs r0, #10 8007a26: f7fb fe0d bl 8003644 8007a2a: f7fb fdbb bl 80035a4 8007a2e: 4603 mov r3, r0 8007a30: 2b00 cmp r3, #0 8007a32: d106 bne.n 8007a42 8007a34: 693b ldr r3, [r7, #16] 8007a36: 3b01 subs r3, #1 8007a38: 613b str r3, [r7, #16] 8007a3a: 693b ldr r3, [r7, #16] 8007a3c: 2b00 cmp r3, #0 8007a3e: d1f1 bne.n 8007a24 8007a40: e000 b.n 8007a44 8007a42: bf00 nop 8007a44: 693b ldr r3, [r7, #16] 8007a46: 2b00 cmp r3, #0 8007a48: d12c bne.n 8007aa4 8007a4a: f001 fbb7 bl 80091bc 8007a4e: f001 fbc1 bl 80091d4 8007a52: 4603 mov r3, r0 8007a54: 4a72 ldr r2, [pc, #456] ; (8007c20 ) 8007a56: 2101 movs r1, #1 8007a58: 4872 ldr r0, [pc, #456] ; (8007c24 ) 8007a5a: f001 ff57 bl 800990c 8007a5e: 68bb ldr r3, [r7, #8] 8007a60: 3309 adds r3, #9 8007a62: 4a71 ldr r2, [pc, #452] ; (8007c28 ) 8007a64: fb82 1203 smull r1, r2, r2, r3 8007a68: 1092 asrs r2, r2, #2 8007a6a: 17db asrs r3, r3, #31 8007a6c: 1ad3 subs r3, r2, r3 8007a6e: 613b str r3, [r7, #16] 8007a70: 693b ldr r3, [r7, #16] 8007a72: 009b lsls r3, r3, #2 8007a74: 613b str r3, [r7, #16] 8007a76: 200a movs r0, #10 8007a78: f7fb fde4 bl 8003644 8007a7c: f7fb fd92 bl 80035a4 8007a80: 4603 mov r3, r0 8007a82: 2b00 cmp r3, #0 8007a84: d106 bne.n 8007a94 8007a86: 693b ldr r3, [r7, #16] 8007a88: 3b01 subs r3, #1 8007a8a: 613b str r3, [r7, #16] 8007a8c: 693b ldr r3, [r7, #16] 8007a8e: 2b00 cmp r3, #0 8007a90: d1f1 bne.n 8007a76 8007a92: e000 b.n 8007a96 8007a94: bf00 nop 8007a96: 693b ldr r3, [r7, #16] 8007a98: 2b00 cmp r3, #0 8007a9a: d103 bne.n 8007aa4 8007a9c: 697b ldr r3, [r7, #20] 8007a9e: 2b00 cmp r3, #0 8007aa0: dcaa bgt.n 80079f8 8007aa2: e000 b.n 8007aa6 8007aa4: bf00 nop 8007aa6: f001 fb89 bl 80091bc 8007aaa: f001 fb93 bl 80091d4 8007aae: 4603 mov r3, r0 8007ab0: 4a5b ldr r2, [pc, #364] ; (8007c20 ) 8007ab2: 2101 movs r1, #1 8007ab4: 485b ldr r0, [pc, #364] ; (8007c24 ) 8007ab6: f001 ff29 bl 800990c TOUT_OP(1, Output2, 1000); 8007aba: 68bb ldr r3, [r7, #8] 8007abc: 2b00 cmp r3, #0 8007abe: d10a bne.n 8007ad6 8007ac0: f001 fba2 bl 8009208 8007ac4: f001 fbac bl 8009220 8007ac8: 4603 mov r3, r0 8007aca: 4a58 ldr r2, [pc, #352] ; (8007c2c ) 8007acc: 2102 movs r1, #2 8007ace: 4855 ldr r0, [pc, #340] ; (8007c24 ) 8007ad0: f001 ff1c bl 800990c 8007ad4: e094 b.n 8007c00 8007ad6: 68bb ldr r3, [r7, #8] 8007ad8: 2b01 cmp r3, #1 8007ada: d10a bne.n 8007af2 8007adc: f001 fb88 bl 80091f0 8007ae0: f001 fb9e bl 8009220 8007ae4: 4603 mov r3, r0 8007ae6: 4a51 ldr r2, [pc, #324] ; (8007c2c ) 8007ae8: 2102 movs r1, #2 8007aea: 484e ldr r0, [pc, #312] ; (8007c24 ) 8007aec: f001 ff0e bl 800990c 8007af0: e086 b.n 8007c00 8007af2: 68bb ldr r3, [r7, #8] 8007af4: 2b02 cmp r3, #2 8007af6: d118 bne.n 8007b2a 8007af8: f001 fb7a bl 80091f0 8007afc: f001 fb90 bl 8009220 8007b00: 4603 mov r3, r0 8007b02: 4a4a ldr r2, [pc, #296] ; (8007c2c ) 8007b04: 2102 movs r1, #2 8007b06: 4847 ldr r0, [pc, #284] ; (8007c24 ) 8007b08: f001 ff00 bl 800990c 8007b0c: f44f 707a mov.w r0, #1000 ; 0x3e8 8007b10: f7fb fd98 bl 8003644 8007b14: f001 fb78 bl 8009208 8007b18: f001 fb82 bl 8009220 8007b1c: 4603 mov r3, r0 8007b1e: 4a43 ldr r2, [pc, #268] ; (8007c2c ) 8007b20: 2102 movs r1, #2 8007b22: 4840 ldr r0, [pc, #256] ; (8007c24 ) 8007b24: f001 fef2 bl 800990c 8007b28: e06a b.n 8007c00 8007b2a: 68bb ldr r3, [r7, #8] 8007b2c: 2b00 cmp r3, #0 8007b2e: dd67 ble.n 8007c00 8007b30: 68bb ldr r3, [r7, #8] 8007b32: f44f 727a mov.w r2, #1000 ; 0x3e8 8007b36: fb02 f303 mul.w r3, r2, r3 8007b3a: 617b str r3, [r7, #20] 8007b3c: e051 b.n 8007be2 8007b3e: 697b ldr r3, [r7, #20] 8007b40: 3b01 subs r3, #1 8007b42: 617b str r3, [r7, #20] 8007b44: f001 fb54 bl 80091f0 8007b48: f001 fb6a bl 8009220 8007b4c: 4603 mov r3, r0 8007b4e: 4a37 ldr r2, [pc, #220] ; (8007c2c ) 8007b50: 2102 movs r1, #2 8007b52: 4834 ldr r0, [pc, #208] ; (8007c24 ) 8007b54: f001 feda bl 800990c 8007b58: 68bb ldr r3, [r7, #8] 8007b5a: 3309 adds r3, #9 8007b5c: 4a32 ldr r2, [pc, #200] ; (8007c28 ) 8007b5e: fb82 1203 smull r1, r2, r2, r3 8007b62: 1092 asrs r2, r2, #2 8007b64: 17db asrs r3, r3, #31 8007b66: 1ad3 subs r3, r2, r3 8007b68: 613b str r3, [r7, #16] 8007b6a: 200a movs r0, #10 8007b6c: f7fb fd6a bl 8003644 8007b70: f7fb fd18 bl 80035a4 8007b74: 4603 mov r3, r0 8007b76: 2b00 cmp r3, #0 8007b78: d106 bne.n 8007b88 8007b7a: 693b ldr r3, [r7, #16] 8007b7c: 3b01 subs r3, #1 8007b7e: 613b str r3, [r7, #16] 8007b80: 693b ldr r3, [r7, #16] 8007b82: 2b00 cmp r3, #0 8007b84: d1f1 bne.n 8007b6a 8007b86: e000 b.n 8007b8a 8007b88: bf00 nop 8007b8a: 693b ldr r3, [r7, #16] 8007b8c: 2b00 cmp r3, #0 8007b8e: d12c bne.n 8007bea 8007b90: f001 fb3a bl 8009208 8007b94: f001 fb44 bl 8009220 8007b98: 4603 mov r3, r0 8007b9a: 4a24 ldr r2, [pc, #144] ; (8007c2c ) 8007b9c: 2102 movs r1, #2 8007b9e: 4821 ldr r0, [pc, #132] ; (8007c24 ) 8007ba0: f001 feb4 bl 800990c 8007ba4: 68bb ldr r3, [r7, #8] 8007ba6: 3309 adds r3, #9 8007ba8: 4a1f ldr r2, [pc, #124] ; (8007c28 ) 8007baa: fb82 1203 smull r1, r2, r2, r3 8007bae: 1092 asrs r2, r2, #2 8007bb0: 17db asrs r3, r3, #31 8007bb2: 1ad3 subs r3, r2, r3 8007bb4: 613b str r3, [r7, #16] 8007bb6: 693b ldr r3, [r7, #16] 8007bb8: 009b lsls r3, r3, #2 8007bba: 613b str r3, [r7, #16] 8007bbc: 200a movs r0, #10 8007bbe: f7fb fd41 bl 8003644 8007bc2: f7fb fcef bl 80035a4 8007bc6: 4603 mov r3, r0 8007bc8: 2b00 cmp r3, #0 8007bca: d106 bne.n 8007bda 8007bcc: 693b ldr r3, [r7, #16] 8007bce: 3b01 subs r3, #1 8007bd0: 613b str r3, [r7, #16] 8007bd2: 693b ldr r3, [r7, #16] 8007bd4: 2b00 cmp r3, #0 8007bd6: d1f1 bne.n 8007bbc 8007bd8: e000 b.n 8007bdc 8007bda: bf00 nop 8007bdc: 693b ldr r3, [r7, #16] 8007bde: 2b00 cmp r3, #0 8007be0: d103 bne.n 8007bea 8007be2: 697b ldr r3, [r7, #20] 8007be4: 2b00 cmp r3, #0 8007be6: dcaa bgt.n 8007b3e 8007be8: e000 b.n 8007bec 8007bea: bf00 nop 8007bec: f001 fb0c bl 8009208 8007bf0: f001 fb16 bl 8009220 8007bf4: 4603 mov r3, r0 8007bf6: 4a0d ldr r2, [pc, #52] ; (8007c2c ) 8007bf8: 2102 movs r1, #2 8007bfa: 480a ldr r0, [pc, #40] ; (8007c24 ) 8007bfc: f001 fe86 bl 800990c TOUT_OP(2, Output3, 1000); 8007c00: 68bb ldr r3, [r7, #8] 8007c02: 2b00 cmp r3, #0 8007c04: d116 bne.n 8007c34 8007c06: f001 fb25 bl 8009254 8007c0a: f001 fb2f bl 800926c 8007c0e: 4603 mov r3, r0 8007c10: 4a07 ldr r2, [pc, #28] ; (8007c30 ) 8007c12: 2103 movs r1, #3 8007c14: 4803 ldr r0, [pc, #12] ; (8007c24 ) 8007c16: f001 fe79 bl 800990c 8007c1a: e0a0 b.n 8007d5e 8007c1c: 0800add8 .word 0x0800add8 8007c20: 200002cc .word 0x200002cc 8007c24: 0800adf0 .word 0x0800adf0 8007c28: 66666667 .word 0x66666667 8007c2c: 200002e0 .word 0x200002e0 8007c30: 200002f4 .word 0x200002f4 8007c34: 68bb ldr r3, [r7, #8] 8007c36: 2b01 cmp r3, #1 8007c38: d10a bne.n 8007c50 8007c3a: f001 faff bl 800923c 8007c3e: f001 fb15 bl 800926c 8007c42: 4603 mov r3, r0 8007c44: 4ab8 ldr r2, [pc, #736] ; (8007f28 ) 8007c46: 2103 movs r1, #3 8007c48: 48b8 ldr r0, [pc, #736] ; (8007f2c ) 8007c4a: f001 fe5f bl 800990c 8007c4e: e086 b.n 8007d5e 8007c50: 68bb ldr r3, [r7, #8] 8007c52: 2b02 cmp r3, #2 8007c54: d118 bne.n 8007c88 8007c56: f001 faf1 bl 800923c 8007c5a: f001 fb07 bl 800926c 8007c5e: 4603 mov r3, r0 8007c60: 4ab1 ldr r2, [pc, #708] ; (8007f28 ) 8007c62: 2103 movs r1, #3 8007c64: 48b1 ldr r0, [pc, #708] ; (8007f2c ) 8007c66: f001 fe51 bl 800990c 8007c6a: f44f 707a mov.w r0, #1000 ; 0x3e8 8007c6e: f7fb fce9 bl 8003644 8007c72: f001 faef bl 8009254 8007c76: f001 faf9 bl 800926c 8007c7a: 4603 mov r3, r0 8007c7c: 4aaa ldr r2, [pc, #680] ; (8007f28 ) 8007c7e: 2103 movs r1, #3 8007c80: 48aa ldr r0, [pc, #680] ; (8007f2c ) 8007c82: f001 fe43 bl 800990c 8007c86: e06a b.n 8007d5e 8007c88: 68bb ldr r3, [r7, #8] 8007c8a: 2b00 cmp r3, #0 8007c8c: dd67 ble.n 8007d5e 8007c8e: 68bb ldr r3, [r7, #8] 8007c90: f44f 727a mov.w r2, #1000 ; 0x3e8 8007c94: fb02 f303 mul.w r3, r2, r3 8007c98: 617b str r3, [r7, #20] 8007c9a: e051 b.n 8007d40 8007c9c: 697b ldr r3, [r7, #20] 8007c9e: 3b01 subs r3, #1 8007ca0: 617b str r3, [r7, #20] 8007ca2: f001 facb bl 800923c 8007ca6: f001 fae1 bl 800926c 8007caa: 4603 mov r3, r0 8007cac: 4a9e ldr r2, [pc, #632] ; (8007f28 ) 8007cae: 2103 movs r1, #3 8007cb0: 489e ldr r0, [pc, #632] ; (8007f2c ) 8007cb2: f001 fe2b bl 800990c 8007cb6: 68bb ldr r3, [r7, #8] 8007cb8: 3309 adds r3, #9 8007cba: 4a9d ldr r2, [pc, #628] ; (8007f30 ) 8007cbc: fb82 1203 smull r1, r2, r2, r3 8007cc0: 1092 asrs r2, r2, #2 8007cc2: 17db asrs r3, r3, #31 8007cc4: 1ad3 subs r3, r2, r3 8007cc6: 613b str r3, [r7, #16] 8007cc8: 200a movs r0, #10 8007cca: f7fb fcbb bl 8003644 8007cce: f7fb fc69 bl 80035a4 8007cd2: 4603 mov r3, r0 8007cd4: 2b00 cmp r3, #0 8007cd6: d106 bne.n 8007ce6 8007cd8: 693b ldr r3, [r7, #16] 8007cda: 3b01 subs r3, #1 8007cdc: 613b str r3, [r7, #16] 8007cde: 693b ldr r3, [r7, #16] 8007ce0: 2b00 cmp r3, #0 8007ce2: d1f1 bne.n 8007cc8 8007ce4: e000 b.n 8007ce8 8007ce6: bf00 nop 8007ce8: 693b ldr r3, [r7, #16] 8007cea: 2b00 cmp r3, #0 8007cec: d12c bne.n 8007d48 8007cee: f001 fab1 bl 8009254 8007cf2: f001 fabb bl 800926c 8007cf6: 4603 mov r3, r0 8007cf8: 4a8b ldr r2, [pc, #556] ; (8007f28 ) 8007cfa: 2103 movs r1, #3 8007cfc: 488b ldr r0, [pc, #556] ; (8007f2c ) 8007cfe: f001 fe05 bl 800990c 8007d02: 68bb ldr r3, [r7, #8] 8007d04: 3309 adds r3, #9 8007d06: 4a8a ldr r2, [pc, #552] ; (8007f30 ) 8007d08: fb82 1203 smull r1, r2, r2, r3 8007d0c: 1092 asrs r2, r2, #2 8007d0e: 17db asrs r3, r3, #31 8007d10: 1ad3 subs r3, r2, r3 8007d12: 613b str r3, [r7, #16] 8007d14: 693b ldr r3, [r7, #16] 8007d16: 009b lsls r3, r3, #2 8007d18: 613b str r3, [r7, #16] 8007d1a: 200a movs r0, #10 8007d1c: f7fb fc92 bl 8003644 8007d20: f7fb fc40 bl 80035a4 8007d24: 4603 mov r3, r0 8007d26: 2b00 cmp r3, #0 8007d28: d106 bne.n 8007d38 8007d2a: 693b ldr r3, [r7, #16] 8007d2c: 3b01 subs r3, #1 8007d2e: 613b str r3, [r7, #16] 8007d30: 693b ldr r3, [r7, #16] 8007d32: 2b00 cmp r3, #0 8007d34: d1f1 bne.n 8007d1a 8007d36: e000 b.n 8007d3a 8007d38: bf00 nop 8007d3a: 693b ldr r3, [r7, #16] 8007d3c: 2b00 cmp r3, #0 8007d3e: d103 bne.n 8007d48 8007d40: 697b ldr r3, [r7, #20] 8007d42: 2b00 cmp r3, #0 8007d44: dcaa bgt.n 8007c9c 8007d46: e000 b.n 8007d4a 8007d48: bf00 nop 8007d4a: f001 fa83 bl 8009254 8007d4e: f001 fa8d bl 800926c 8007d52: 4603 mov r3, r0 8007d54: 4a74 ldr r2, [pc, #464] ; (8007f28 ) 8007d56: 2103 movs r1, #3 8007d58: 4874 ldr r0, [pc, #464] ; (8007f2c ) 8007d5a: f001 fdd7 bl 800990c TOUT_OP(3, Output4, 1000); 8007d5e: 68bb ldr r3, [r7, #8] 8007d60: 2b00 cmp r3, #0 8007d62: d10a bne.n 8007d7a 8007d64: f001 fa9c bl 80092a0 8007d68: f001 faa6 bl 80092b8 8007d6c: 4603 mov r3, r0 8007d6e: 4a71 ldr r2, [pc, #452] ; (8007f34 ) 8007d70: 2104 movs r1, #4 8007d72: 486e ldr r0, [pc, #440] ; (8007f2c ) 8007d74: f001 fdca bl 800990c 8007d78: e094 b.n 8007ea4 8007d7a: 68bb ldr r3, [r7, #8] 8007d7c: 2b01 cmp r3, #1 8007d7e: d10a bne.n 8007d96 8007d80: f001 fa82 bl 8009288 8007d84: f001 fa98 bl 80092b8 8007d88: 4603 mov r3, r0 8007d8a: 4a6a ldr r2, [pc, #424] ; (8007f34 ) 8007d8c: 2104 movs r1, #4 8007d8e: 4867 ldr r0, [pc, #412] ; (8007f2c ) 8007d90: f001 fdbc bl 800990c 8007d94: e086 b.n 8007ea4 8007d96: 68bb ldr r3, [r7, #8] 8007d98: 2b02 cmp r3, #2 8007d9a: d118 bne.n 8007dce 8007d9c: f001 fa74 bl 8009288 8007da0: f001 fa8a bl 80092b8 8007da4: 4603 mov r3, r0 8007da6: 4a63 ldr r2, [pc, #396] ; (8007f34 ) 8007da8: 2104 movs r1, #4 8007daa: 4860 ldr r0, [pc, #384] ; (8007f2c ) 8007dac: f001 fdae bl 800990c 8007db0: f44f 707a mov.w r0, #1000 ; 0x3e8 8007db4: f7fb fc46 bl 8003644 8007db8: f001 fa72 bl 80092a0 8007dbc: f001 fa7c bl 80092b8 8007dc0: 4603 mov r3, r0 8007dc2: 4a5c ldr r2, [pc, #368] ; (8007f34 ) 8007dc4: 2104 movs r1, #4 8007dc6: 4859 ldr r0, [pc, #356] ; (8007f2c ) 8007dc8: f001 fda0 bl 800990c 8007dcc: e06a b.n 8007ea4 8007dce: 68bb ldr r3, [r7, #8] 8007dd0: 2b00 cmp r3, #0 8007dd2: dd67 ble.n 8007ea4 8007dd4: 68bb ldr r3, [r7, #8] 8007dd6: f44f 727a mov.w r2, #1000 ; 0x3e8 8007dda: fb02 f303 mul.w r3, r2, r3 8007dde: 617b str r3, [r7, #20] 8007de0: e051 b.n 8007e86 8007de2: 697b ldr r3, [r7, #20] 8007de4: 3b01 subs r3, #1 8007de6: 617b str r3, [r7, #20] 8007de8: f001 fa4e bl 8009288 8007dec: f001 fa64 bl 80092b8 8007df0: 4603 mov r3, r0 8007df2: 4a50 ldr r2, [pc, #320] ; (8007f34 ) 8007df4: 2104 movs r1, #4 8007df6: 484d ldr r0, [pc, #308] ; (8007f2c ) 8007df8: f001 fd88 bl 800990c 8007dfc: 68bb ldr r3, [r7, #8] 8007dfe: 3309 adds r3, #9 8007e00: 4a4b ldr r2, [pc, #300] ; (8007f30 ) 8007e02: fb82 1203 smull r1, r2, r2, r3 8007e06: 1092 asrs r2, r2, #2 8007e08: 17db asrs r3, r3, #31 8007e0a: 1ad3 subs r3, r2, r3 8007e0c: 613b str r3, [r7, #16] 8007e0e: 200a movs r0, #10 8007e10: f7fb fc18 bl 8003644 8007e14: f7fb fbc6 bl 80035a4 8007e18: 4603 mov r3, r0 8007e1a: 2b00 cmp r3, #0 8007e1c: d106 bne.n 8007e2c 8007e1e: 693b ldr r3, [r7, #16] 8007e20: 3b01 subs r3, #1 8007e22: 613b str r3, [r7, #16] 8007e24: 693b ldr r3, [r7, #16] 8007e26: 2b00 cmp r3, #0 8007e28: d1f1 bne.n 8007e0e 8007e2a: e000 b.n 8007e2e 8007e2c: bf00 nop 8007e2e: 693b ldr r3, [r7, #16] 8007e30: 2b00 cmp r3, #0 8007e32: d12c bne.n 8007e8e 8007e34: f001 fa34 bl 80092a0 8007e38: f001 fa3e bl 80092b8 8007e3c: 4603 mov r3, r0 8007e3e: 4a3d ldr r2, [pc, #244] ; (8007f34 ) 8007e40: 2104 movs r1, #4 8007e42: 483a ldr r0, [pc, #232] ; (8007f2c ) 8007e44: f001 fd62 bl 800990c 8007e48: 68bb ldr r3, [r7, #8] 8007e4a: 3309 adds r3, #9 8007e4c: 4a38 ldr r2, [pc, #224] ; (8007f30 ) 8007e4e: fb82 1203 smull r1, r2, r2, r3 8007e52: 1092 asrs r2, r2, #2 8007e54: 17db asrs r3, r3, #31 8007e56: 1ad3 subs r3, r2, r3 8007e58: 613b str r3, [r7, #16] 8007e5a: 693b ldr r3, [r7, #16] 8007e5c: 009b lsls r3, r3, #2 8007e5e: 613b str r3, [r7, #16] 8007e60: 200a movs r0, #10 8007e62: f7fb fbef bl 8003644 8007e66: f7fb fb9d bl 80035a4 8007e6a: 4603 mov r3, r0 8007e6c: 2b00 cmp r3, #0 8007e6e: d106 bne.n 8007e7e 8007e70: 693b ldr r3, [r7, #16] 8007e72: 3b01 subs r3, #1 8007e74: 613b str r3, [r7, #16] 8007e76: 693b ldr r3, [r7, #16] 8007e78: 2b00 cmp r3, #0 8007e7a: d1f1 bne.n 8007e60 8007e7c: e000 b.n 8007e80 8007e7e: bf00 nop 8007e80: 693b ldr r3, [r7, #16] 8007e82: 2b00 cmp r3, #0 8007e84: d103 bne.n 8007e8e 8007e86: 697b ldr r3, [r7, #20] 8007e88: 2b00 cmp r3, #0 8007e8a: dcaa bgt.n 8007de2 8007e8c: e000 b.n 8007e90 8007e8e: bf00 nop 8007e90: f001 fa06 bl 80092a0 8007e94: f001 fa10 bl 80092b8 8007e98: 4603 mov r3, r0 8007e9a: 4a26 ldr r2, [pc, #152] ; (8007f34 ) 8007e9c: 2104 movs r1, #4 8007e9e: 4823 ldr r0, [pc, #140] ; (8007f2c ) 8007ea0: f001 fd34 bl 800990c TOUT_OP(4, Output5, 1000); 8007ea4: 68bb ldr r3, [r7, #8] 8007ea6: 2b00 cmp r3, #0 8007ea8: d10a bne.n 8007ec0 8007eaa: f001 fa1f bl 80092ec 8007eae: f001 fa29 bl 8009304 8007eb2: 4603 mov r3, r0 8007eb4: 4a20 ldr r2, [pc, #128] ; (8007f38 ) 8007eb6: 2105 movs r1, #5 8007eb8: 481c ldr r0, [pc, #112] ; (8007f2c ) 8007eba: f001 fd27 bl 800990c 8007ebe: e09e b.n 8007ffe 8007ec0: 68bb ldr r3, [r7, #8] 8007ec2: 2b01 cmp r3, #1 8007ec4: d10a bne.n 8007edc 8007ec6: f001 fa05 bl 80092d4 8007eca: f001 fa1b bl 8009304 8007ece: 4603 mov r3, r0 8007ed0: 4a19 ldr r2, [pc, #100] ; (8007f38 ) 8007ed2: 2105 movs r1, #5 8007ed4: 4815 ldr r0, [pc, #84] ; (8007f2c ) 8007ed6: f001 fd19 bl 800990c 8007eda: e090 b.n 8007ffe 8007edc: 68bb ldr r3, [r7, #8] 8007ede: 2b02 cmp r3, #2 8007ee0: d118 bne.n 8007f14 8007ee2: f001 f9f7 bl 80092d4 8007ee6: f001 fa0d bl 8009304 8007eea: 4603 mov r3, r0 8007eec: 4a12 ldr r2, [pc, #72] ; (8007f38 ) 8007eee: 2105 movs r1, #5 8007ef0: 480e ldr r0, [pc, #56] ; (8007f2c ) 8007ef2: f001 fd0b bl 800990c 8007ef6: f44f 707a mov.w r0, #1000 ; 0x3e8 8007efa: f7fb fba3 bl 8003644 8007efe: f001 f9f5 bl 80092ec 8007f02: f001 f9ff bl 8009304 8007f06: 4603 mov r3, r0 8007f08: 4a0b ldr r2, [pc, #44] ; (8007f38 ) 8007f0a: 2105 movs r1, #5 8007f0c: 4807 ldr r0, [pc, #28] ; (8007f2c ) 8007f0e: f001 fcfd bl 800990c 8007f12: e074 b.n 8007ffe 8007f14: 68bb ldr r3, [r7, #8] 8007f16: 2b00 cmp r3, #0 8007f18: dd71 ble.n 8007ffe 8007f1a: 68bb ldr r3, [r7, #8] 8007f1c: f44f 727a mov.w r2, #1000 ; 0x3e8 8007f20: fb02 f303 mul.w r3, r2, r3 8007f24: 617b str r3, [r7, #20] 8007f26: e05b b.n 8007fe0 8007f28: 200002f4 .word 0x200002f4 8007f2c: 0800adf0 .word 0x0800adf0 8007f30: 66666667 .word 0x66666667 8007f34: 20000308 .word 0x20000308 8007f38: 2000031c .word 0x2000031c 8007f3c: 697b ldr r3, [r7, #20] 8007f3e: 3b01 subs r3, #1 8007f40: 617b str r3, [r7, #20] 8007f42: f001 f9c7 bl 80092d4 8007f46: f001 f9dd bl 8009304 8007f4a: 4603 mov r3, r0 8007f4c: 4ab1 ldr r2, [pc, #708] ; (8008214 ) 8007f4e: 2105 movs r1, #5 8007f50: 48b1 ldr r0, [pc, #708] ; (8008218 ) 8007f52: f001 fcdb bl 800990c 8007f56: 68bb ldr r3, [r7, #8] 8007f58: 3309 adds r3, #9 8007f5a: 4ab0 ldr r2, [pc, #704] ; (800821c ) 8007f5c: fb82 1203 smull r1, r2, r2, r3 8007f60: 1092 asrs r2, r2, #2 8007f62: 17db asrs r3, r3, #31 8007f64: 1ad3 subs r3, r2, r3 8007f66: 613b str r3, [r7, #16] 8007f68: 200a movs r0, #10 8007f6a: f7fb fb6b bl 8003644 8007f6e: f7fb fb19 bl 80035a4 8007f72: 4603 mov r3, r0 8007f74: 2b00 cmp r3, #0 8007f76: d106 bne.n 8007f86 8007f78: 693b ldr r3, [r7, #16] 8007f7a: 3b01 subs r3, #1 8007f7c: 613b str r3, [r7, #16] 8007f7e: 693b ldr r3, [r7, #16] 8007f80: 2b00 cmp r3, #0 8007f82: d1f1 bne.n 8007f68 8007f84: e000 b.n 8007f88 8007f86: bf00 nop 8007f88: 693b ldr r3, [r7, #16] 8007f8a: 2b00 cmp r3, #0 8007f8c: d12c bne.n 8007fe8 8007f8e: f001 f9ad bl 80092ec 8007f92: f001 f9b7 bl 8009304 8007f96: 4603 mov r3, r0 8007f98: 4a9e ldr r2, [pc, #632] ; (8008214 ) 8007f9a: 2105 movs r1, #5 8007f9c: 489e ldr r0, [pc, #632] ; (8008218 ) 8007f9e: f001 fcb5 bl 800990c 8007fa2: 68bb ldr r3, [r7, #8] 8007fa4: 3309 adds r3, #9 8007fa6: 4a9d ldr r2, [pc, #628] ; (800821c ) 8007fa8: fb82 1203 smull r1, r2, r2, r3 8007fac: 1092 asrs r2, r2, #2 8007fae: 17db asrs r3, r3, #31 8007fb0: 1ad3 subs r3, r2, r3 8007fb2: 613b str r3, [r7, #16] 8007fb4: 693b ldr r3, [r7, #16] 8007fb6: 009b lsls r3, r3, #2 8007fb8: 613b str r3, [r7, #16] 8007fba: 200a movs r0, #10 8007fbc: f7fb fb42 bl 8003644 8007fc0: f7fb faf0 bl 80035a4 8007fc4: 4603 mov r3, r0 8007fc6: 2b00 cmp r3, #0 8007fc8: d106 bne.n 8007fd8 8007fca: 693b ldr r3, [r7, #16] 8007fcc: 3b01 subs r3, #1 8007fce: 613b str r3, [r7, #16] 8007fd0: 693b ldr r3, [r7, #16] 8007fd2: 2b00 cmp r3, #0 8007fd4: d1f1 bne.n 8007fba 8007fd6: e000 b.n 8007fda 8007fd8: bf00 nop 8007fda: 693b ldr r3, [r7, #16] 8007fdc: 2b00 cmp r3, #0 8007fde: d103 bne.n 8007fe8 8007fe0: 697b ldr r3, [r7, #20] 8007fe2: 2b00 cmp r3, #0 8007fe4: dcaa bgt.n 8007f3c 8007fe6: e000 b.n 8007fea 8007fe8: bf00 nop 8007fea: f001 f97f bl 80092ec 8007fee: f001 f989 bl 8009304 8007ff2: 4603 mov r3, r0 8007ff4: 4a87 ldr r2, [pc, #540] ; (8008214 ) 8007ff6: 2105 movs r1, #5 8007ff8: 4887 ldr r0, [pc, #540] ; (8008218 ) 8007ffa: f001 fc87 bl 800990c TOUT_OP(5, Output6, 1000); 8007ffe: 68bb ldr r3, [r7, #8] 8008000: 2b00 cmp r3, #0 8008002: d10a bne.n 800801a 8008004: f001 f998 bl 8009338 8008008: f001 f9a2 bl 8009350 800800c: 4603 mov r3, r0 800800e: 4a84 ldr r2, [pc, #528] ; (8008220 ) 8008010: 2106 movs r1, #6 8008012: 4881 ldr r0, [pc, #516] ; (8008218 ) 8008014: f001 fc7a bl 800990c 8008018: e094 b.n 8008144 800801a: 68bb ldr r3, [r7, #8] 800801c: 2b01 cmp r3, #1 800801e: d10a bne.n 8008036 8008020: f001 f97e bl 8009320 8008024: f001 f994 bl 8009350 8008028: 4603 mov r3, r0 800802a: 4a7d ldr r2, [pc, #500] ; (8008220 ) 800802c: 2106 movs r1, #6 800802e: 487a ldr r0, [pc, #488] ; (8008218 ) 8008030: f001 fc6c bl 800990c 8008034: e086 b.n 8008144 8008036: 68bb ldr r3, [r7, #8] 8008038: 2b02 cmp r3, #2 800803a: d118 bne.n 800806e 800803c: f001 f970 bl 8009320 8008040: f001 f986 bl 8009350 8008044: 4603 mov r3, r0 8008046: 4a76 ldr r2, [pc, #472] ; (8008220 ) 8008048: 2106 movs r1, #6 800804a: 4873 ldr r0, [pc, #460] ; (8008218 ) 800804c: f001 fc5e bl 800990c 8008050: f44f 707a mov.w r0, #1000 ; 0x3e8 8008054: f7fb faf6 bl 8003644 8008058: f001 f96e bl 8009338 800805c: f001 f978 bl 8009350 8008060: 4603 mov r3, r0 8008062: 4a6f ldr r2, [pc, #444] ; (8008220 ) 8008064: 2106 movs r1, #6 8008066: 486c ldr r0, [pc, #432] ; (8008218 ) 8008068: f001 fc50 bl 800990c 800806c: e06a b.n 8008144 800806e: 68bb ldr r3, [r7, #8] 8008070: 2b00 cmp r3, #0 8008072: dd67 ble.n 8008144 8008074: 68bb ldr r3, [r7, #8] 8008076: f44f 727a mov.w r2, #1000 ; 0x3e8 800807a: fb02 f303 mul.w r3, r2, r3 800807e: 617b str r3, [r7, #20] 8008080: e051 b.n 8008126 8008082: 697b ldr r3, [r7, #20] 8008084: 3b01 subs r3, #1 8008086: 617b str r3, [r7, #20] 8008088: f001 f94a bl 8009320 800808c: f001 f960 bl 8009350 8008090: 4603 mov r3, r0 8008092: 4a63 ldr r2, [pc, #396] ; (8008220 ) 8008094: 2106 movs r1, #6 8008096: 4860 ldr r0, [pc, #384] ; (8008218 ) 8008098: f001 fc38 bl 800990c 800809c: 68bb ldr r3, [r7, #8] 800809e: 3309 adds r3, #9 80080a0: 4a5e ldr r2, [pc, #376] ; (800821c ) 80080a2: fb82 1203 smull r1, r2, r2, r3 80080a6: 1092 asrs r2, r2, #2 80080a8: 17db asrs r3, r3, #31 80080aa: 1ad3 subs r3, r2, r3 80080ac: 613b str r3, [r7, #16] 80080ae: 200a movs r0, #10 80080b0: f7fb fac8 bl 8003644 80080b4: f7fb fa76 bl 80035a4 80080b8: 4603 mov r3, r0 80080ba: 2b00 cmp r3, #0 80080bc: d106 bne.n 80080cc 80080be: 693b ldr r3, [r7, #16] 80080c0: 3b01 subs r3, #1 80080c2: 613b str r3, [r7, #16] 80080c4: 693b ldr r3, [r7, #16] 80080c6: 2b00 cmp r3, #0 80080c8: d1f1 bne.n 80080ae 80080ca: e000 b.n 80080ce 80080cc: bf00 nop 80080ce: 693b ldr r3, [r7, #16] 80080d0: 2b00 cmp r3, #0 80080d2: d12c bne.n 800812e 80080d4: f001 f930 bl 8009338 80080d8: f001 f93a bl 8009350 80080dc: 4603 mov r3, r0 80080de: 4a50 ldr r2, [pc, #320] ; (8008220 ) 80080e0: 2106 movs r1, #6 80080e2: 484d ldr r0, [pc, #308] ; (8008218 ) 80080e4: f001 fc12 bl 800990c 80080e8: 68bb ldr r3, [r7, #8] 80080ea: 3309 adds r3, #9 80080ec: 4a4b ldr r2, [pc, #300] ; (800821c ) 80080ee: fb82 1203 smull r1, r2, r2, r3 80080f2: 1092 asrs r2, r2, #2 80080f4: 17db asrs r3, r3, #31 80080f6: 1ad3 subs r3, r2, r3 80080f8: 613b str r3, [r7, #16] 80080fa: 693b ldr r3, [r7, #16] 80080fc: 009b lsls r3, r3, #2 80080fe: 613b str r3, [r7, #16] 8008100: 200a movs r0, #10 8008102: f7fb fa9f bl 8003644 8008106: f7fb fa4d bl 80035a4 800810a: 4603 mov r3, r0 800810c: 2b00 cmp r3, #0 800810e: d106 bne.n 800811e 8008110: 693b ldr r3, [r7, #16] 8008112: 3b01 subs r3, #1 8008114: 613b str r3, [r7, #16] 8008116: 693b ldr r3, [r7, #16] 8008118: 2b00 cmp r3, #0 800811a: d1f1 bne.n 8008100 800811c: e000 b.n 8008120 800811e: bf00 nop 8008120: 693b ldr r3, [r7, #16] 8008122: 2b00 cmp r3, #0 8008124: d103 bne.n 800812e 8008126: 697b ldr r3, [r7, #20] 8008128: 2b00 cmp r3, #0 800812a: dcaa bgt.n 8008082 800812c: e000 b.n 8008130 800812e: bf00 nop 8008130: f001 f902 bl 8009338 8008134: f001 f90c bl 8009350 8008138: 4603 mov r3, r0 800813a: 4a39 ldr r2, [pc, #228] ; (8008220 ) 800813c: 2106 movs r1, #6 800813e: 4836 ldr r0, [pc, #216] ; (8008218 ) 8008140: f001 fbe4 bl 800990c TOUT_OP(6, Output7, 1000); 8008144: 68bb ldr r3, [r7, #8] 8008146: 2b00 cmp r3, #0 8008148: d10a bne.n 8008160 800814a: f001 f91b bl 8009384 800814e: f001 f925 bl 800939c 8008152: 4603 mov r3, r0 8008154: 4a33 ldr r2, [pc, #204] ; (8008224 ) 8008156: 2107 movs r1, #7 8008158: 482f ldr r0, [pc, #188] ; (8008218 ) 800815a: f001 fbd7 bl 800990c 800815e: e09f b.n 80082a0 8008160: 68bb ldr r3, [r7, #8] 8008162: 2b01 cmp r3, #1 8008164: d10a bne.n 800817c 8008166: f001 f901 bl 800936c 800816a: f001 f917 bl 800939c 800816e: 4603 mov r3, r0 8008170: 4a2c ldr r2, [pc, #176] ; (8008224 ) 8008172: 2107 movs r1, #7 8008174: 4828 ldr r0, [pc, #160] ; (8008218 ) 8008176: f001 fbc9 bl 800990c 800817a: e091 b.n 80082a0 800817c: 68bb ldr r3, [r7, #8] 800817e: 2b02 cmp r3, #2 8008180: d118 bne.n 80081b4 8008182: f001 f8f3 bl 800936c 8008186: f001 f909 bl 800939c 800818a: 4603 mov r3, r0 800818c: 4a25 ldr r2, [pc, #148] ; (8008224 ) 800818e: 2107 movs r1, #7 8008190: 4821 ldr r0, [pc, #132] ; (8008218 ) 8008192: f001 fbbb bl 800990c 8008196: f44f 707a mov.w r0, #1000 ; 0x3e8 800819a: f7fb fa53 bl 8003644 800819e: f001 f8f1 bl 8009384 80081a2: f001 f8fb bl 800939c 80081a6: 4603 mov r3, r0 80081a8: 4a1e ldr r2, [pc, #120] ; (8008224 ) 80081aa: 2107 movs r1, #7 80081ac: 481a ldr r0, [pc, #104] ; (8008218 ) 80081ae: f001 fbad bl 800990c 80081b2: e075 b.n 80082a0 80081b4: 68bb ldr r3, [r7, #8] 80081b6: 2b00 cmp r3, #0 80081b8: dd72 ble.n 80082a0 80081ba: 68bb ldr r3, [r7, #8] 80081bc: f44f 727a mov.w r2, #1000 ; 0x3e8 80081c0: fb02 f303 mul.w r3, r2, r3 80081c4: 617b str r3, [r7, #20] 80081c6: e05c b.n 8008282 80081c8: 697b ldr r3, [r7, #20] 80081ca: 3b01 subs r3, #1 80081cc: 617b str r3, [r7, #20] 80081ce: f001 f8cd bl 800936c 80081d2: f001 f8e3 bl 800939c 80081d6: 4603 mov r3, r0 80081d8: 4a12 ldr r2, [pc, #72] ; (8008224 ) 80081da: 2107 movs r1, #7 80081dc: 480e ldr r0, [pc, #56] ; (8008218 ) 80081de: f001 fb95 bl 800990c 80081e2: 68bb ldr r3, [r7, #8] 80081e4: 3309 adds r3, #9 80081e6: 4a0d ldr r2, [pc, #52] ; (800821c ) 80081e8: fb82 1203 smull r1, r2, r2, r3 80081ec: 1092 asrs r2, r2, #2 80081ee: 17db asrs r3, r3, #31 80081f0: 1ad3 subs r3, r2, r3 80081f2: 613b str r3, [r7, #16] 80081f4: 200a movs r0, #10 80081f6: f7fb fa25 bl 8003644 80081fa: f7fb f9d3 bl 80035a4 80081fe: 4603 mov r3, r0 8008200: 2b00 cmp r3, #0 8008202: d111 bne.n 8008228 8008204: 693b ldr r3, [r7, #16] 8008206: 3b01 subs r3, #1 8008208: 613b str r3, [r7, #16] 800820a: 693b ldr r3, [r7, #16] 800820c: 2b00 cmp r3, #0 800820e: d1f1 bne.n 80081f4 8008210: e00b b.n 800822a 8008212: bf00 nop 8008214: 2000031c .word 0x2000031c 8008218: 0800adf0 .word 0x0800adf0 800821c: 66666667 .word 0x66666667 8008220: 20000330 .word 0x20000330 8008224: 20000344 .word 0x20000344 8008228: bf00 nop 800822a: 693b ldr r3, [r7, #16] 800822c: 2b00 cmp r3, #0 800822e: d12c bne.n 800828a 8008230: f001 f8a8 bl 8009384 8008234: f001 f8b2 bl 800939c 8008238: 4603 mov r3, r0 800823a: 4ab2 ldr r2, [pc, #712] ; (8008504 ) 800823c: 2107 movs r1, #7 800823e: 48b2 ldr r0, [pc, #712] ; (8008508 ) 8008240: f001 fb64 bl 800990c 8008244: 68bb ldr r3, [r7, #8] 8008246: 3309 adds r3, #9 8008248: 4ab0 ldr r2, [pc, #704] ; (800850c ) 800824a: fb82 1203 smull r1, r2, r2, r3 800824e: 1092 asrs r2, r2, #2 8008250: 17db asrs r3, r3, #31 8008252: 1ad3 subs r3, r2, r3 8008254: 613b str r3, [r7, #16] 8008256: 693b ldr r3, [r7, #16] 8008258: 009b lsls r3, r3, #2 800825a: 613b str r3, [r7, #16] 800825c: 200a movs r0, #10 800825e: f7fb f9f1 bl 8003644 8008262: f7fb f99f bl 80035a4 8008266: 4603 mov r3, r0 8008268: 2b00 cmp r3, #0 800826a: d106 bne.n 800827a 800826c: 693b ldr r3, [r7, #16] 800826e: 3b01 subs r3, #1 8008270: 613b str r3, [r7, #16] 8008272: 693b ldr r3, [r7, #16] 8008274: 2b00 cmp r3, #0 8008276: d1f1 bne.n 800825c 8008278: e000 b.n 800827c 800827a: bf00 nop 800827c: 693b ldr r3, [r7, #16] 800827e: 2b00 cmp r3, #0 8008280: d103 bne.n 800828a 8008282: 697b ldr r3, [r7, #20] 8008284: 2b00 cmp r3, #0 8008286: dc9f bgt.n 80081c8 8008288: e000 b.n 800828c 800828a: bf00 nop 800828c: f001 f87a bl 8009384 8008290: f001 f884 bl 800939c 8008294: 4603 mov r3, r0 8008296: 4a9b ldr r2, [pc, #620] ; (8008504 ) 8008298: 2107 movs r1, #7 800829a: 489b ldr r0, [pc, #620] ; (8008508 ) 800829c: f001 fb36 bl 800990c TOUT_OP(7, Output8, 1000); 80082a0: 68bb ldr r3, [r7, #8] 80082a2: 2b00 cmp r3, #0 80082a4: d10b bne.n 80082be 80082a6: f001 f893 bl 80093d0 80082aa: f001 f89d bl 80093e8 80082ae: 4603 mov r3, r0 80082b0: 4a97 ldr r2, [pc, #604] ; (8008510 ) 80082b2: 2108 movs r1, #8 80082b4: 4894 ldr r0, [pc, #592] ; (8008508 ) 80082b6: f001 fb29 bl 800990c 80082ba: f000 be28 b.w 8008f0e 80082be: 68bb ldr r3, [r7, #8] 80082c0: 2b01 cmp r3, #1 80082c2: d10b bne.n 80082dc 80082c4: f001 f878 bl 80093b8 80082c8: f001 f88e bl 80093e8 80082cc: 4603 mov r3, r0 80082ce: 4a90 ldr r2, [pc, #576] ; (8008510 ) 80082d0: 2108 movs r1, #8 80082d2: 488d ldr r0, [pc, #564] ; (8008508 ) 80082d4: f001 fb1a bl 800990c 80082d8: f000 be19 b.w 8008f0e 80082dc: 68bb ldr r3, [r7, #8] 80082de: 2b02 cmp r3, #2 80082e0: d119 bne.n 8008316 80082e2: f001 f869 bl 80093b8 80082e6: f001 f87f bl 80093e8 80082ea: 4603 mov r3, r0 80082ec: 4a88 ldr r2, [pc, #544] ; (8008510 ) 80082ee: 2108 movs r1, #8 80082f0: 4885 ldr r0, [pc, #532] ; (8008508 ) 80082f2: f001 fb0b bl 800990c 80082f6: f44f 707a mov.w r0, #1000 ; 0x3e8 80082fa: f7fb f9a3 bl 8003644 80082fe: f001 f867 bl 80093d0 8008302: f001 f871 bl 80093e8 8008306: 4603 mov r3, r0 8008308: 4a81 ldr r2, [pc, #516] ; (8008510 ) 800830a: 2108 movs r1, #8 800830c: 487e ldr r0, [pc, #504] ; (8008508 ) 800830e: f001 fafd bl 800990c 8008312: f000 bdfc b.w 8008f0e 8008316: 68bb ldr r3, [r7, #8] 8008318: 2b00 cmp r3, #0 800831a: f340 85f8 ble.w 8008f0e 800831e: 68bb ldr r3, [r7, #8] 8008320: f44f 727a mov.w r2, #1000 ; 0x3e8 8008324: fb02 f303 mul.w r3, r2, r3 8008328: 617b str r3, [r7, #20] 800832a: e051 b.n 80083d0 800832c: 697b ldr r3, [r7, #20] 800832e: 3b01 subs r3, #1 8008330: 617b str r3, [r7, #20] 8008332: f001 f841 bl 80093b8 8008336: f001 f857 bl 80093e8 800833a: 4603 mov r3, r0 800833c: 4a74 ldr r2, [pc, #464] ; (8008510 ) 800833e: 2108 movs r1, #8 8008340: 4871 ldr r0, [pc, #452] ; (8008508 ) 8008342: f001 fae3 bl 800990c 8008346: 68bb ldr r3, [r7, #8] 8008348: 3309 adds r3, #9 800834a: 4a70 ldr r2, [pc, #448] ; (800850c ) 800834c: fb82 1203 smull r1, r2, r2, r3 8008350: 1092 asrs r2, r2, #2 8008352: 17db asrs r3, r3, #31 8008354: 1ad3 subs r3, r2, r3 8008356: 613b str r3, [r7, #16] 8008358: 200a movs r0, #10 800835a: f7fb f973 bl 8003644 800835e: f7fb f921 bl 80035a4 8008362: 4603 mov r3, r0 8008364: 2b00 cmp r3, #0 8008366: d106 bne.n 8008376 8008368: 693b ldr r3, [r7, #16] 800836a: 3b01 subs r3, #1 800836c: 613b str r3, [r7, #16] 800836e: 693b ldr r3, [r7, #16] 8008370: 2b00 cmp r3, #0 8008372: d1f1 bne.n 8008358 8008374: e000 b.n 8008378 8008376: bf00 nop 8008378: 693b ldr r3, [r7, #16] 800837a: 2b00 cmp r3, #0 800837c: d12c bne.n 80083d8 800837e: f001 f827 bl 80093d0 8008382: f001 f831 bl 80093e8 8008386: 4603 mov r3, r0 8008388: 4a61 ldr r2, [pc, #388] ; (8008510 ) 800838a: 2108 movs r1, #8 800838c: 485e ldr r0, [pc, #376] ; (8008508 ) 800838e: f001 fabd bl 800990c 8008392: 68bb ldr r3, [r7, #8] 8008394: 3309 adds r3, #9 8008396: 4a5d ldr r2, [pc, #372] ; (800850c ) 8008398: fb82 1203 smull r1, r2, r2, r3 800839c: 1092 asrs r2, r2, #2 800839e: 17db asrs r3, r3, #31 80083a0: 1ad3 subs r3, r2, r3 80083a2: 613b str r3, [r7, #16] 80083a4: 693b ldr r3, [r7, #16] 80083a6: 009b lsls r3, r3, #2 80083a8: 613b str r3, [r7, #16] 80083aa: 200a movs r0, #10 80083ac: f7fb f94a bl 8003644 80083b0: f7fb f8f8 bl 80035a4 80083b4: 4603 mov r3, r0 80083b6: 2b00 cmp r3, #0 80083b8: d106 bne.n 80083c8 80083ba: 693b ldr r3, [r7, #16] 80083bc: 3b01 subs r3, #1 80083be: 613b str r3, [r7, #16] 80083c0: 693b ldr r3, [r7, #16] 80083c2: 2b00 cmp r3, #0 80083c4: d1f1 bne.n 80083aa 80083c6: e000 b.n 80083ca 80083c8: bf00 nop 80083ca: 693b ldr r3, [r7, #16] 80083cc: 2b00 cmp r3, #0 80083ce: d103 bne.n 80083d8 80083d0: 697b ldr r3, [r7, #20] 80083d2: 2b00 cmp r3, #0 80083d4: dcaa bgt.n 800832c 80083d6: e000 b.n 80083da 80083d8: bf00 nop 80083da: f000 fff9 bl 80093d0 80083de: f001 f803 bl 80093e8 80083e2: 4603 mov r3, r0 80083e4: 4a4a ldr r2, [pc, #296] ; (8008510 ) 80083e6: 2108 movs r1, #8 80083e8: 4847 ldr r0, [pc, #284] ; (8008508 ) 80083ea: f001 fa8f bl 800990c 80083ee: f000 bd8e b.w 8008f0e else if (p2 == 1) { } } else if (p1 < 100) 80083f2: 68fb ldr r3, [r7, #12] 80083f4: 2b63 cmp r3, #99 ; 0x63 80083f6: f300 858a bgt.w 8008f0e { switch(p1) 80083fa: 68fb ldr r3, [r7, #12] 80083fc: 3b01 subs r3, #1 80083fe: 2b07 cmp r3, #7 8008400: f200 8574 bhi.w 8008eec 8008404: a201 add r2, pc, #4 ; (adr r2, 800840c ) 8008406: f852 f023 ldr.w pc, [r2, r3, lsl #2] 800840a: bf00 nop 800840c: 0800842d .word 0x0800842d 8008410: 08008595 .word 0x08008595 8008414: 080086e7 .word 0x080086e7 8008418: 08008845 .word 0x08008845 800841c: 0800898f .word 0x0800898f 8008420: 08008ad9 .word 0x08008ad9 8008424: 08008c3b .word 0x08008c3b 8008428: 08008d85 .word 0x08008d85 { case 1: TOUT_OP(0, Output1, 1000); 800842c: 68bb ldr r3, [r7, #8] 800842e: 2b00 cmp r3, #0 8008430: d10b bne.n 800844a 8008432: f000 fec3 bl 80091bc 8008436: f000 fecd bl 80091d4 800843a: 4603 mov r3, r0 800843c: 4a35 ldr r2, [pc, #212] ; (8008514 ) 800843e: 2101 movs r1, #1 8008440: 4831 ldr r0, [pc, #196] ; (8008508 ) 8008442: f001 fa63 bl 800990c break; 8008446: f000 bd53 b.w 8008ef0 TOUT_OP(0, Output1, 1000); 800844a: 68bb ldr r3, [r7, #8] 800844c: 2b01 cmp r3, #1 800844e: d10b bne.n 8008468 8008450: f000 fea8 bl 80091a4 8008454: f000 febe bl 80091d4 8008458: 4603 mov r3, r0 800845a: 4a2e ldr r2, [pc, #184] ; (8008514 ) 800845c: 2101 movs r1, #1 800845e: 482a ldr r0, [pc, #168] ; (8008508 ) 8008460: f001 fa54 bl 800990c break; 8008464: f000 bd44 b.w 8008ef0 TOUT_OP(0, Output1, 1000); 8008468: 68bb ldr r3, [r7, #8] 800846a: 2b02 cmp r3, #2 800846c: d119 bne.n 80084a2 800846e: f000 fe99 bl 80091a4 8008472: f000 feaf bl 80091d4 8008476: 4603 mov r3, r0 8008478: 4a26 ldr r2, [pc, #152] ; (8008514 ) 800847a: 2101 movs r1, #1 800847c: 4822 ldr r0, [pc, #136] ; (8008508 ) 800847e: f001 fa45 bl 800990c 8008482: f44f 707a mov.w r0, #1000 ; 0x3e8 8008486: f7fb f8dd bl 8003644 800848a: f000 fe97 bl 80091bc 800848e: f000 fea1 bl 80091d4 8008492: 4603 mov r3, r0 8008494: 4a1f ldr r2, [pc, #124] ; (8008514 ) 8008496: 2101 movs r1, #1 8008498: 481b ldr r0, [pc, #108] ; (8008508 ) 800849a: f001 fa37 bl 800990c break; 800849e: f000 bd27 b.w 8008ef0 TOUT_OP(0, Output1, 1000); 80084a2: 68bb ldr r3, [r7, #8] 80084a4: 2b00 cmp r3, #0 80084a6: f340 8523 ble.w 8008ef0 80084aa: 68bb ldr r3, [r7, #8] 80084ac: f44f 727a mov.w r2, #1000 ; 0x3e8 80084b0: fb02 f303 mul.w r3, r2, r3 80084b4: 617b str r3, [r7, #20] 80084b6: e05c b.n 8008572 80084b8: 697b ldr r3, [r7, #20] 80084ba: 3b01 subs r3, #1 80084bc: 617b str r3, [r7, #20] 80084be: f000 fe71 bl 80091a4 80084c2: f000 fe87 bl 80091d4 80084c6: 4603 mov r3, r0 80084c8: 4a12 ldr r2, [pc, #72] ; (8008514 ) 80084ca: 2101 movs r1, #1 80084cc: 480e ldr r0, [pc, #56] ; (8008508 ) 80084ce: f001 fa1d bl 800990c 80084d2: 68bb ldr r3, [r7, #8] 80084d4: 3309 adds r3, #9 80084d6: 4a0d ldr r2, [pc, #52] ; (800850c ) 80084d8: fb82 1203 smull r1, r2, r2, r3 80084dc: 1092 asrs r2, r2, #2 80084de: 17db asrs r3, r3, #31 80084e0: 1ad3 subs r3, r2, r3 80084e2: 613b str r3, [r7, #16] 80084e4: 200a movs r0, #10 80084e6: f7fb f8ad bl 8003644 80084ea: f7fb f85b bl 80035a4 80084ee: 4603 mov r3, r0 80084f0: 2b00 cmp r3, #0 80084f2: d111 bne.n 8008518 80084f4: 693b ldr r3, [r7, #16] 80084f6: 3b01 subs r3, #1 80084f8: 613b str r3, [r7, #16] 80084fa: 693b ldr r3, [r7, #16] 80084fc: 2b00 cmp r3, #0 80084fe: d1f1 bne.n 80084e4 8008500: e00b b.n 800851a 8008502: bf00 nop 8008504: 20000344 .word 0x20000344 8008508: 0800adf0 .word 0x0800adf0 800850c: 66666667 .word 0x66666667 8008510: 20000358 .word 0x20000358 8008514: 200002cc .word 0x200002cc 8008518: bf00 nop 800851a: 693b ldr r3, [r7, #16] 800851c: 2b00 cmp r3, #0 800851e: d12c bne.n 800857a 8008520: f000 fe4c bl 80091bc 8008524: f000 fe56 bl 80091d4 8008528: 4603 mov r3, r0 800852a: 4abb ldr r2, [pc, #748] ; (8008818 ) 800852c: 2101 movs r1, #1 800852e: 48bb ldr r0, [pc, #748] ; (800881c ) 8008530: f001 f9ec bl 800990c 8008534: 68bb ldr r3, [r7, #8] 8008536: 3309 adds r3, #9 8008538: 4ab9 ldr r2, [pc, #740] ; (8008820 ) 800853a: fb82 1203 smull r1, r2, r2, r3 800853e: 1092 asrs r2, r2, #2 8008540: 17db asrs r3, r3, #31 8008542: 1ad3 subs r3, r2, r3 8008544: 613b str r3, [r7, #16] 8008546: 693b ldr r3, [r7, #16] 8008548: 009b lsls r3, r3, #2 800854a: 613b str r3, [r7, #16] 800854c: 200a movs r0, #10 800854e: f7fb f879 bl 8003644 8008552: f7fb f827 bl 80035a4 8008556: 4603 mov r3, r0 8008558: 2b00 cmp r3, #0 800855a: d106 bne.n 800856a 800855c: 693b ldr r3, [r7, #16] 800855e: 3b01 subs r3, #1 8008560: 613b str r3, [r7, #16] 8008562: 693b ldr r3, [r7, #16] 8008564: 2b00 cmp r3, #0 8008566: d1f1 bne.n 800854c 8008568: e000 b.n 800856c 800856a: bf00 nop 800856c: 693b ldr r3, [r7, #16] 800856e: 2b00 cmp r3, #0 8008570: d103 bne.n 800857a 8008572: 697b ldr r3, [r7, #20] 8008574: 2b00 cmp r3, #0 8008576: dc9f bgt.n 80084b8 8008578: e000 b.n 800857c 800857a: bf00 nop 800857c: f000 fe1e bl 80091bc 8008580: f000 fe28 bl 80091d4 8008584: 4603 mov r3, r0 8008586: 4aa4 ldr r2, [pc, #656] ; (8008818 ) 8008588: 2101 movs r1, #1 800858a: 48a4 ldr r0, [pc, #656] ; (800881c ) 800858c: f001 f9be bl 800990c break; 8008590: f000 bcae b.w 8008ef0 case 2: TOUT_OP(1, Output2, 1000); 8008594: 68bb ldr r3, [r7, #8] 8008596: 2b00 cmp r3, #0 8008598: d10b bne.n 80085b2 800859a: f000 fe35 bl 8009208 800859e: f000 fe3f bl 8009220 80085a2: 4603 mov r3, r0 80085a4: 4a9f ldr r2, [pc, #636] ; (8008824 ) 80085a6: 2102 movs r1, #2 80085a8: 489c ldr r0, [pc, #624] ; (800881c ) 80085aa: f001 f9af bl 800990c break; 80085ae: f000 bca1 b.w 8008ef4 TOUT_OP(1, Output2, 1000); 80085b2: 68bb ldr r3, [r7, #8] 80085b4: 2b01 cmp r3, #1 80085b6: d10b bne.n 80085d0 80085b8: f000 fe1a bl 80091f0 80085bc: f000 fe30 bl 8009220 80085c0: 4603 mov r3, r0 80085c2: 4a98 ldr r2, [pc, #608] ; (8008824 ) 80085c4: 2102 movs r1, #2 80085c6: 4895 ldr r0, [pc, #596] ; (800881c ) 80085c8: f001 f9a0 bl 800990c break; 80085cc: f000 bc92 b.w 8008ef4 TOUT_OP(1, Output2, 1000); 80085d0: 68bb ldr r3, [r7, #8] 80085d2: 2b02 cmp r3, #2 80085d4: d119 bne.n 800860a 80085d6: f000 fe0b bl 80091f0 80085da: f000 fe21 bl 8009220 80085de: 4603 mov r3, r0 80085e0: 4a90 ldr r2, [pc, #576] ; (8008824 ) 80085e2: 2102 movs r1, #2 80085e4: 488d ldr r0, [pc, #564] ; (800881c ) 80085e6: f001 f991 bl 800990c 80085ea: f44f 707a mov.w r0, #1000 ; 0x3e8 80085ee: f7fb f829 bl 8003644 80085f2: f000 fe09 bl 8009208 80085f6: f000 fe13 bl 8009220 80085fa: 4603 mov r3, r0 80085fc: 4a89 ldr r2, [pc, #548] ; (8008824 ) 80085fe: 2102 movs r1, #2 8008600: 4886 ldr r0, [pc, #536] ; (800881c ) 8008602: f001 f983 bl 800990c break; 8008606: f000 bc75 b.w 8008ef4 TOUT_OP(1, Output2, 1000); 800860a: 68bb ldr r3, [r7, #8] 800860c: 2b00 cmp r3, #0 800860e: f340 8471 ble.w 8008ef4 8008612: 68bb ldr r3, [r7, #8] 8008614: f44f 727a mov.w r2, #1000 ; 0x3e8 8008618: fb02 f303 mul.w r3, r2, r3 800861c: 617b str r3, [r7, #20] 800861e: e051 b.n 80086c4 8008620: 697b ldr r3, [r7, #20] 8008622: 3b01 subs r3, #1 8008624: 617b str r3, [r7, #20] 8008626: f000 fde3 bl 80091f0 800862a: f000 fdf9 bl 8009220 800862e: 4603 mov r3, r0 8008630: 4a7c ldr r2, [pc, #496] ; (8008824 ) 8008632: 2102 movs r1, #2 8008634: 4879 ldr r0, [pc, #484] ; (800881c ) 8008636: f001 f969 bl 800990c 800863a: 68bb ldr r3, [r7, #8] 800863c: 3309 adds r3, #9 800863e: 4a78 ldr r2, [pc, #480] ; (8008820 ) 8008640: fb82 1203 smull r1, r2, r2, r3 8008644: 1092 asrs r2, r2, #2 8008646: 17db asrs r3, r3, #31 8008648: 1ad3 subs r3, r2, r3 800864a: 613b str r3, [r7, #16] 800864c: 200a movs r0, #10 800864e: f7fa fff9 bl 8003644 8008652: f7fa ffa7 bl 80035a4 8008656: 4603 mov r3, r0 8008658: 2b00 cmp r3, #0 800865a: d106 bne.n 800866a 800865c: 693b ldr r3, [r7, #16] 800865e: 3b01 subs r3, #1 8008660: 613b str r3, [r7, #16] 8008662: 693b ldr r3, [r7, #16] 8008664: 2b00 cmp r3, #0 8008666: d1f1 bne.n 800864c 8008668: e000 b.n 800866c 800866a: bf00 nop 800866c: 693b ldr r3, [r7, #16] 800866e: 2b00 cmp r3, #0 8008670: d12c bne.n 80086cc 8008672: f000 fdc9 bl 8009208 8008676: f000 fdd3 bl 8009220 800867a: 4603 mov r3, r0 800867c: 4a69 ldr r2, [pc, #420] ; (8008824 ) 800867e: 2102 movs r1, #2 8008680: 4866 ldr r0, [pc, #408] ; (800881c ) 8008682: f001 f943 bl 800990c 8008686: 68bb ldr r3, [r7, #8] 8008688: 3309 adds r3, #9 800868a: 4a65 ldr r2, [pc, #404] ; (8008820 ) 800868c: fb82 1203 smull r1, r2, r2, r3 8008690: 1092 asrs r2, r2, #2 8008692: 17db asrs r3, r3, #31 8008694: 1ad3 subs r3, r2, r3 8008696: 613b str r3, [r7, #16] 8008698: 693b ldr r3, [r7, #16] 800869a: 009b lsls r3, r3, #2 800869c: 613b str r3, [r7, #16] 800869e: 200a movs r0, #10 80086a0: f7fa ffd0 bl 8003644 80086a4: f7fa ff7e bl 80035a4 80086a8: 4603 mov r3, r0 80086aa: 2b00 cmp r3, #0 80086ac: d106 bne.n 80086bc 80086ae: 693b ldr r3, [r7, #16] 80086b0: 3b01 subs r3, #1 80086b2: 613b str r3, [r7, #16] 80086b4: 693b ldr r3, [r7, #16] 80086b6: 2b00 cmp r3, #0 80086b8: d1f1 bne.n 800869e 80086ba: e000 b.n 80086be 80086bc: bf00 nop 80086be: 693b ldr r3, [r7, #16] 80086c0: 2b00 cmp r3, #0 80086c2: d103 bne.n 80086cc 80086c4: 697b ldr r3, [r7, #20] 80086c6: 2b00 cmp r3, #0 80086c8: dcaa bgt.n 8008620 80086ca: e000 b.n 80086ce 80086cc: bf00 nop 80086ce: f000 fd9b bl 8009208 80086d2: f000 fda5 bl 8009220 80086d6: 4603 mov r3, r0 80086d8: 4a52 ldr r2, [pc, #328] ; (8008824 ) 80086da: 2102 movs r1, #2 80086dc: 484f ldr r0, [pc, #316] ; (800881c ) 80086de: f001 f915 bl 800990c break; 80086e2: f000 bc07 b.w 8008ef4 case 3: TOUT_OP(2, Output3, 1000); 80086e6: 68bb ldr r3, [r7, #8] 80086e8: 2b00 cmp r3, #0 80086ea: d10a bne.n 8008702 80086ec: f000 fdb2 bl 8009254 80086f0: f000 fdbc bl 800926c 80086f4: 4603 mov r3, r0 80086f6: 4a4c ldr r2, [pc, #304] ; (8008828 ) 80086f8: 2103 movs r1, #3 80086fa: 4848 ldr r0, [pc, #288] ; (800881c ) 80086fc: f001 f906 bl 800990c break; 8008700: e3fa b.n 8008ef8 TOUT_OP(2, Output3, 1000); 8008702: 68bb ldr r3, [r7, #8] 8008704: 2b01 cmp r3, #1 8008706: d10a bne.n 800871e 8008708: f000 fd98 bl 800923c 800870c: f000 fdae bl 800926c 8008710: 4603 mov r3, r0 8008712: 4a45 ldr r2, [pc, #276] ; (8008828 ) 8008714: 2103 movs r1, #3 8008716: 4841 ldr r0, [pc, #260] ; (800881c ) 8008718: f001 f8f8 bl 800990c break; 800871c: e3ec b.n 8008ef8 TOUT_OP(2, Output3, 1000); 800871e: 68bb ldr r3, [r7, #8] 8008720: 2b02 cmp r3, #2 8008722: d118 bne.n 8008756 8008724: f000 fd8a bl 800923c 8008728: f000 fda0 bl 800926c 800872c: 4603 mov r3, r0 800872e: 4a3e ldr r2, [pc, #248] ; (8008828 ) 8008730: 2103 movs r1, #3 8008732: 483a ldr r0, [pc, #232] ; (800881c ) 8008734: f001 f8ea bl 800990c 8008738: f44f 707a mov.w r0, #1000 ; 0x3e8 800873c: f7fa ff82 bl 8003644 8008740: f000 fd88 bl 8009254 8008744: f000 fd92 bl 800926c 8008748: 4603 mov r3, r0 800874a: 4a37 ldr r2, [pc, #220] ; (8008828 ) 800874c: 2103 movs r1, #3 800874e: 4833 ldr r0, [pc, #204] ; (800881c ) 8008750: f001 f8dc bl 800990c break; 8008754: e3d0 b.n 8008ef8 TOUT_OP(2, Output3, 1000); 8008756: 68bb ldr r3, [r7, #8] 8008758: 2b00 cmp r3, #0 800875a: f340 83cd ble.w 8008ef8 800875e: 68bb ldr r3, [r7, #8] 8008760: f44f 727a mov.w r2, #1000 ; 0x3e8 8008764: fb02 f303 mul.w r3, r2, r3 8008768: 617b str r3, [r7, #20] 800876a: e051 b.n 8008810 800876c: 697b ldr r3, [r7, #20] 800876e: 3b01 subs r3, #1 8008770: 617b str r3, [r7, #20] 8008772: f000 fd63 bl 800923c 8008776: f000 fd79 bl 800926c 800877a: 4603 mov r3, r0 800877c: 4a2a ldr r2, [pc, #168] ; (8008828 ) 800877e: 2103 movs r1, #3 8008780: 4826 ldr r0, [pc, #152] ; (800881c ) 8008782: f001 f8c3 bl 800990c 8008786: 68bb ldr r3, [r7, #8] 8008788: 3309 adds r3, #9 800878a: 4a25 ldr r2, [pc, #148] ; (8008820 ) 800878c: fb82 1203 smull r1, r2, r2, r3 8008790: 1092 asrs r2, r2, #2 8008792: 17db asrs r3, r3, #31 8008794: 1ad3 subs r3, r2, r3 8008796: 613b str r3, [r7, #16] 8008798: 200a movs r0, #10 800879a: f7fa ff53 bl 8003644 800879e: f7fa ff01 bl 80035a4 80087a2: 4603 mov r3, r0 80087a4: 2b00 cmp r3, #0 80087a6: d106 bne.n 80087b6 80087a8: 693b ldr r3, [r7, #16] 80087aa: 3b01 subs r3, #1 80087ac: 613b str r3, [r7, #16] 80087ae: 693b ldr r3, [r7, #16] 80087b0: 2b00 cmp r3, #0 80087b2: d1f1 bne.n 8008798 80087b4: e000 b.n 80087b8 80087b6: bf00 nop 80087b8: 693b ldr r3, [r7, #16] 80087ba: 2b00 cmp r3, #0 80087bc: d136 bne.n 800882c 80087be: f000 fd49 bl 8009254 80087c2: f000 fd53 bl 800926c 80087c6: 4603 mov r3, r0 80087c8: 4a17 ldr r2, [pc, #92] ; (8008828 ) 80087ca: 2103 movs r1, #3 80087cc: 4813 ldr r0, [pc, #76] ; (800881c ) 80087ce: f001 f89d bl 800990c 80087d2: 68bb ldr r3, [r7, #8] 80087d4: 3309 adds r3, #9 80087d6: 4a12 ldr r2, [pc, #72] ; (8008820 ) 80087d8: fb82 1203 smull r1, r2, r2, r3 80087dc: 1092 asrs r2, r2, #2 80087de: 17db asrs r3, r3, #31 80087e0: 1ad3 subs r3, r2, r3 80087e2: 613b str r3, [r7, #16] 80087e4: 693b ldr r3, [r7, #16] 80087e6: 009b lsls r3, r3, #2 80087e8: 613b str r3, [r7, #16] 80087ea: 200a movs r0, #10 80087ec: f7fa ff2a bl 8003644 80087f0: f7fa fed8 bl 80035a4 80087f4: 4603 mov r3, r0 80087f6: 2b00 cmp r3, #0 80087f8: d106 bne.n 8008808 80087fa: 693b ldr r3, [r7, #16] 80087fc: 3b01 subs r3, #1 80087fe: 613b str r3, [r7, #16] 8008800: 693b ldr r3, [r7, #16] 8008802: 2b00 cmp r3, #0 8008804: d1f1 bne.n 80087ea 8008806: e000 b.n 800880a 8008808: bf00 nop 800880a: 693b ldr r3, [r7, #16] 800880c: 2b00 cmp r3, #0 800880e: d10d bne.n 800882c 8008810: 697b ldr r3, [r7, #20] 8008812: 2b00 cmp r3, #0 8008814: dcaa bgt.n 800876c 8008816: e00a b.n 800882e 8008818: 200002cc .word 0x200002cc 800881c: 0800adf0 .word 0x0800adf0 8008820: 66666667 .word 0x66666667 8008824: 200002e0 .word 0x200002e0 8008828: 200002f4 .word 0x200002f4 800882c: bf00 nop 800882e: f000 fd11 bl 8009254 8008832: f000 fd1b bl 800926c 8008836: 4603 mov r3, r0 8008838: 4ab5 ldr r2, [pc, #724] ; (8008b10 ) 800883a: 2103 movs r1, #3 800883c: 48b5 ldr r0, [pc, #724] ; (8008b14 ) 800883e: f001 f865 bl 800990c break; 8008842: e359 b.n 8008ef8 case 4: TOUT_OP(3, Output4, 1000); 8008844: 68bb ldr r3, [r7, #8] 8008846: 2b00 cmp r3, #0 8008848: d10a bne.n 8008860 800884a: f000 fd29 bl 80092a0 800884e: f000 fd33 bl 80092b8 8008852: 4603 mov r3, r0 8008854: 4ab0 ldr r2, [pc, #704] ; (8008b18 ) 8008856: 2104 movs r1, #4 8008858: 48ae ldr r0, [pc, #696] ; (8008b14 ) 800885a: f001 f857 bl 800990c break; 800885e: e34d b.n 8008efc TOUT_OP(3, Output4, 1000); 8008860: 68bb ldr r3, [r7, #8] 8008862: 2b01 cmp r3, #1 8008864: d10a bne.n 800887c 8008866: f000 fd0f bl 8009288 800886a: f000 fd25 bl 80092b8 800886e: 4603 mov r3, r0 8008870: 4aa9 ldr r2, [pc, #676] ; (8008b18 ) 8008872: 2104 movs r1, #4 8008874: 48a7 ldr r0, [pc, #668] ; (8008b14 ) 8008876: f001 f849 bl 800990c break; 800887a: e33f b.n 8008efc TOUT_OP(3, Output4, 1000); 800887c: 68bb ldr r3, [r7, #8] 800887e: 2b02 cmp r3, #2 8008880: d118 bne.n 80088b4 8008882: f000 fd01 bl 8009288 8008886: f000 fd17 bl 80092b8 800888a: 4603 mov r3, r0 800888c: 4aa2 ldr r2, [pc, #648] ; (8008b18 ) 800888e: 2104 movs r1, #4 8008890: 48a0 ldr r0, [pc, #640] ; (8008b14 ) 8008892: f001 f83b bl 800990c 8008896: f44f 707a mov.w r0, #1000 ; 0x3e8 800889a: f7fa fed3 bl 8003644 800889e: f000 fcff bl 80092a0 80088a2: f000 fd09 bl 80092b8 80088a6: 4603 mov r3, r0 80088a8: 4a9b ldr r2, [pc, #620] ; (8008b18 ) 80088aa: 2104 movs r1, #4 80088ac: 4899 ldr r0, [pc, #612] ; (8008b14 ) 80088ae: f001 f82d bl 800990c break; 80088b2: e323 b.n 8008efc TOUT_OP(3, Output4, 1000); 80088b4: 68bb ldr r3, [r7, #8] 80088b6: 2b00 cmp r3, #0 80088b8: f340 8320 ble.w 8008efc 80088bc: 68bb ldr r3, [r7, #8] 80088be: f44f 727a mov.w r2, #1000 ; 0x3e8 80088c2: fb02 f303 mul.w r3, r2, r3 80088c6: 617b str r3, [r7, #20] 80088c8: e051 b.n 800896e 80088ca: 697b ldr r3, [r7, #20] 80088cc: 3b01 subs r3, #1 80088ce: 617b str r3, [r7, #20] 80088d0: f000 fcda bl 8009288 80088d4: f000 fcf0 bl 80092b8 80088d8: 4603 mov r3, r0 80088da: 4a8f ldr r2, [pc, #572] ; (8008b18 ) 80088dc: 2104 movs r1, #4 80088de: 488d ldr r0, [pc, #564] ; (8008b14 ) 80088e0: f001 f814 bl 800990c 80088e4: 68bb ldr r3, [r7, #8] 80088e6: 3309 adds r3, #9 80088e8: 4a8c ldr r2, [pc, #560] ; (8008b1c ) 80088ea: fb82 1203 smull r1, r2, r2, r3 80088ee: 1092 asrs r2, r2, #2 80088f0: 17db asrs r3, r3, #31 80088f2: 1ad3 subs r3, r2, r3 80088f4: 613b str r3, [r7, #16] 80088f6: 200a movs r0, #10 80088f8: f7fa fea4 bl 8003644 80088fc: f7fa fe52 bl 80035a4 8008900: 4603 mov r3, r0 8008902: 2b00 cmp r3, #0 8008904: d106 bne.n 8008914 8008906: 693b ldr r3, [r7, #16] 8008908: 3b01 subs r3, #1 800890a: 613b str r3, [r7, #16] 800890c: 693b ldr r3, [r7, #16] 800890e: 2b00 cmp r3, #0 8008910: d1f1 bne.n 80088f6 8008912: e000 b.n 8008916 8008914: bf00 nop 8008916: 693b ldr r3, [r7, #16] 8008918: 2b00 cmp r3, #0 800891a: d12c bne.n 8008976 800891c: f000 fcc0 bl 80092a0 8008920: f000 fcca bl 80092b8 8008924: 4603 mov r3, r0 8008926: 4a7c ldr r2, [pc, #496] ; (8008b18 ) 8008928: 2104 movs r1, #4 800892a: 487a ldr r0, [pc, #488] ; (8008b14 ) 800892c: f000 ffee bl 800990c 8008930: 68bb ldr r3, [r7, #8] 8008932: 3309 adds r3, #9 8008934: 4a79 ldr r2, [pc, #484] ; (8008b1c ) 8008936: fb82 1203 smull r1, r2, r2, r3 800893a: 1092 asrs r2, r2, #2 800893c: 17db asrs r3, r3, #31 800893e: 1ad3 subs r3, r2, r3 8008940: 613b str r3, [r7, #16] 8008942: 693b ldr r3, [r7, #16] 8008944: 009b lsls r3, r3, #2 8008946: 613b str r3, [r7, #16] 8008948: 200a movs r0, #10 800894a: f7fa fe7b bl 8003644 800894e: f7fa fe29 bl 80035a4 8008952: 4603 mov r3, r0 8008954: 2b00 cmp r3, #0 8008956: d106 bne.n 8008966 8008958: 693b ldr r3, [r7, #16] 800895a: 3b01 subs r3, #1 800895c: 613b str r3, [r7, #16] 800895e: 693b ldr r3, [r7, #16] 8008960: 2b00 cmp r3, #0 8008962: d1f1 bne.n 8008948 8008964: e000 b.n 8008968 8008966: bf00 nop 8008968: 693b ldr r3, [r7, #16] 800896a: 2b00 cmp r3, #0 800896c: d103 bne.n 8008976 800896e: 697b ldr r3, [r7, #20] 8008970: 2b00 cmp r3, #0 8008972: dcaa bgt.n 80088ca 8008974: e000 b.n 8008978 8008976: bf00 nop 8008978: f000 fc92 bl 80092a0 800897c: f000 fc9c bl 80092b8 8008980: 4603 mov r3, r0 8008982: 4a65 ldr r2, [pc, #404] ; (8008b18 ) 8008984: 2104 movs r1, #4 8008986: 4863 ldr r0, [pc, #396] ; (8008b14 ) 8008988: f000 ffc0 bl 800990c break; 800898c: e2b6 b.n 8008efc case 5: TOUT_OP(4, Output5, 1000); 800898e: 68bb ldr r3, [r7, #8] 8008990: 2b00 cmp r3, #0 8008992: d10a bne.n 80089aa 8008994: f000 fcaa bl 80092ec 8008998: f000 fcb4 bl 8009304 800899c: 4603 mov r3, r0 800899e: 4a60 ldr r2, [pc, #384] ; (8008b20 ) 80089a0: 2105 movs r1, #5 80089a2: 485c ldr r0, [pc, #368] ; (8008b14 ) 80089a4: f000 ffb2 bl 800990c break; 80089a8: e2aa b.n 8008f00 TOUT_OP(4, Output5, 1000); 80089aa: 68bb ldr r3, [r7, #8] 80089ac: 2b01 cmp r3, #1 80089ae: d10a bne.n 80089c6 80089b0: f000 fc90 bl 80092d4 80089b4: f000 fca6 bl 8009304 80089b8: 4603 mov r3, r0 80089ba: 4a59 ldr r2, [pc, #356] ; (8008b20 ) 80089bc: 2105 movs r1, #5 80089be: 4855 ldr r0, [pc, #340] ; (8008b14 ) 80089c0: f000 ffa4 bl 800990c break; 80089c4: e29c b.n 8008f00 TOUT_OP(4, Output5, 1000); 80089c6: 68bb ldr r3, [r7, #8] 80089c8: 2b02 cmp r3, #2 80089ca: d118 bne.n 80089fe 80089cc: f000 fc82 bl 80092d4 80089d0: f000 fc98 bl 8009304 80089d4: 4603 mov r3, r0 80089d6: 4a52 ldr r2, [pc, #328] ; (8008b20 ) 80089d8: 2105 movs r1, #5 80089da: 484e ldr r0, [pc, #312] ; (8008b14 ) 80089dc: f000 ff96 bl 800990c 80089e0: f44f 707a mov.w r0, #1000 ; 0x3e8 80089e4: f7fa fe2e bl 8003644 80089e8: f000 fc80 bl 80092ec 80089ec: f000 fc8a bl 8009304 80089f0: 4603 mov r3, r0 80089f2: 4a4b ldr r2, [pc, #300] ; (8008b20 ) 80089f4: 2105 movs r1, #5 80089f6: 4847 ldr r0, [pc, #284] ; (8008b14 ) 80089f8: f000 ff88 bl 800990c break; 80089fc: e280 b.n 8008f00 TOUT_OP(4, Output5, 1000); 80089fe: 68bb ldr r3, [r7, #8] 8008a00: 2b00 cmp r3, #0 8008a02: f340 827d ble.w 8008f00 8008a06: 68bb ldr r3, [r7, #8] 8008a08: f44f 727a mov.w r2, #1000 ; 0x3e8 8008a0c: fb02 f303 mul.w r3, r2, r3 8008a10: 617b str r3, [r7, #20] 8008a12: e051 b.n 8008ab8 8008a14: 697b ldr r3, [r7, #20] 8008a16: 3b01 subs r3, #1 8008a18: 617b str r3, [r7, #20] 8008a1a: f000 fc5b bl 80092d4 8008a1e: f000 fc71 bl 8009304 8008a22: 4603 mov r3, r0 8008a24: 4a3e ldr r2, [pc, #248] ; (8008b20 ) 8008a26: 2105 movs r1, #5 8008a28: 483a ldr r0, [pc, #232] ; (8008b14 ) 8008a2a: f000 ff6f bl 800990c 8008a2e: 68bb ldr r3, [r7, #8] 8008a30: 3309 adds r3, #9 8008a32: 4a3a ldr r2, [pc, #232] ; (8008b1c ) 8008a34: fb82 1203 smull r1, r2, r2, r3 8008a38: 1092 asrs r2, r2, #2 8008a3a: 17db asrs r3, r3, #31 8008a3c: 1ad3 subs r3, r2, r3 8008a3e: 613b str r3, [r7, #16] 8008a40: 200a movs r0, #10 8008a42: f7fa fdff bl 8003644 8008a46: f7fa fdad bl 80035a4 8008a4a: 4603 mov r3, r0 8008a4c: 2b00 cmp r3, #0 8008a4e: d106 bne.n 8008a5e 8008a50: 693b ldr r3, [r7, #16] 8008a52: 3b01 subs r3, #1 8008a54: 613b str r3, [r7, #16] 8008a56: 693b ldr r3, [r7, #16] 8008a58: 2b00 cmp r3, #0 8008a5a: d1f1 bne.n 8008a40 8008a5c: e000 b.n 8008a60 8008a5e: bf00 nop 8008a60: 693b ldr r3, [r7, #16] 8008a62: 2b00 cmp r3, #0 8008a64: d12c bne.n 8008ac0 8008a66: f000 fc41 bl 80092ec 8008a6a: f000 fc4b bl 8009304 8008a6e: 4603 mov r3, r0 8008a70: 4a2b ldr r2, [pc, #172] ; (8008b20 ) 8008a72: 2105 movs r1, #5 8008a74: 4827 ldr r0, [pc, #156] ; (8008b14 ) 8008a76: f000 ff49 bl 800990c 8008a7a: 68bb ldr r3, [r7, #8] 8008a7c: 3309 adds r3, #9 8008a7e: 4a27 ldr r2, [pc, #156] ; (8008b1c ) 8008a80: fb82 1203 smull r1, r2, r2, r3 8008a84: 1092 asrs r2, r2, #2 8008a86: 17db asrs r3, r3, #31 8008a88: 1ad3 subs r3, r2, r3 8008a8a: 613b str r3, [r7, #16] 8008a8c: 693b ldr r3, [r7, #16] 8008a8e: 009b lsls r3, r3, #2 8008a90: 613b str r3, [r7, #16] 8008a92: 200a movs r0, #10 8008a94: f7fa fdd6 bl 8003644 8008a98: f7fa fd84 bl 80035a4 8008a9c: 4603 mov r3, r0 8008a9e: 2b00 cmp r3, #0 8008aa0: d106 bne.n 8008ab0 8008aa2: 693b ldr r3, [r7, #16] 8008aa4: 3b01 subs r3, #1 8008aa6: 613b str r3, [r7, #16] 8008aa8: 693b ldr r3, [r7, #16] 8008aaa: 2b00 cmp r3, #0 8008aac: d1f1 bne.n 8008a92 8008aae: e000 b.n 8008ab2 8008ab0: bf00 nop 8008ab2: 693b ldr r3, [r7, #16] 8008ab4: 2b00 cmp r3, #0 8008ab6: d103 bne.n 8008ac0 8008ab8: 697b ldr r3, [r7, #20] 8008aba: 2b00 cmp r3, #0 8008abc: dcaa bgt.n 8008a14 8008abe: e000 b.n 8008ac2 8008ac0: bf00 nop 8008ac2: f000 fc13 bl 80092ec 8008ac6: f000 fc1d bl 8009304 8008aca: 4603 mov r3, r0 8008acc: 4a14 ldr r2, [pc, #80] ; (8008b20 ) 8008ace: 2105 movs r1, #5 8008ad0: 4810 ldr r0, [pc, #64] ; (8008b14 ) 8008ad2: f000 ff1b bl 800990c break; 8008ad6: e213 b.n 8008f00 case 6: TOUT_OP(5, Output6, 1000); 8008ad8: 68bb ldr r3, [r7, #8] 8008ada: 2b00 cmp r3, #0 8008adc: d10a bne.n 8008af4 8008ade: f000 fc2b bl 8009338 8008ae2: f000 fc35 bl 8009350 8008ae6: 4603 mov r3, r0 8008ae8: 4a0e ldr r2, [pc, #56] ; (8008b24 ) 8008aea: 2106 movs r1, #6 8008aec: 4809 ldr r0, [pc, #36] ; (8008b14 ) 8008aee: f000 ff0d bl 800990c break; 8008af2: e207 b.n 8008f04 TOUT_OP(5, Output6, 1000); 8008af4: 68bb ldr r3, [r7, #8] 8008af6: 2b01 cmp r3, #1 8008af8: d116 bne.n 8008b28 8008afa: f000 fc11 bl 8009320 8008afe: f000 fc27 bl 8009350 8008b02: 4603 mov r3, r0 8008b04: 4a07 ldr r2, [pc, #28] ; (8008b24 ) 8008b06: 2106 movs r1, #6 8008b08: 4802 ldr r0, [pc, #8] ; (8008b14 ) 8008b0a: f000 feff bl 800990c break; 8008b0e: e1f9 b.n 8008f04 8008b10: 200002f4 .word 0x200002f4 8008b14: 0800adf0 .word 0x0800adf0 8008b18: 20000308 .word 0x20000308 8008b1c: 66666667 .word 0x66666667 8008b20: 2000031c .word 0x2000031c 8008b24: 20000330 .word 0x20000330 TOUT_OP(5, Output6, 1000); 8008b28: 68bb ldr r3, [r7, #8] 8008b2a: 2b02 cmp r3, #2 8008b2c: d118 bne.n 8008b60 8008b2e: f000 fbf7 bl 8009320 8008b32: f000 fc0d bl 8009350 8008b36: 4603 mov r3, r0 8008b38: 4ab4 ldr r2, [pc, #720] ; (8008e0c ) 8008b3a: 2106 movs r1, #6 8008b3c: 48b4 ldr r0, [pc, #720] ; (8008e10 ) 8008b3e: f000 fee5 bl 800990c 8008b42: f44f 707a mov.w r0, #1000 ; 0x3e8 8008b46: f7fa fd7d bl 8003644 8008b4a: f000 fbf5 bl 8009338 8008b4e: f000 fbff bl 8009350 8008b52: 4603 mov r3, r0 8008b54: 4aad ldr r2, [pc, #692] ; (8008e0c ) 8008b56: 2106 movs r1, #6 8008b58: 48ad ldr r0, [pc, #692] ; (8008e10 ) 8008b5a: f000 fed7 bl 800990c break; 8008b5e: e1d1 b.n 8008f04 TOUT_OP(5, Output6, 1000); 8008b60: 68bb ldr r3, [r7, #8] 8008b62: 2b00 cmp r3, #0 8008b64: f340 81ce ble.w 8008f04 8008b68: 68bb ldr r3, [r7, #8] 8008b6a: f44f 727a mov.w r2, #1000 ; 0x3e8 8008b6e: fb02 f303 mul.w r3, r2, r3 8008b72: 617b str r3, [r7, #20] 8008b74: e051 b.n 8008c1a 8008b76: 697b ldr r3, [r7, #20] 8008b78: 3b01 subs r3, #1 8008b7a: 617b str r3, [r7, #20] 8008b7c: f000 fbd0 bl 8009320 8008b80: f000 fbe6 bl 8009350 8008b84: 4603 mov r3, r0 8008b86: 4aa1 ldr r2, [pc, #644] ; (8008e0c ) 8008b88: 2106 movs r1, #6 8008b8a: 48a1 ldr r0, [pc, #644] ; (8008e10 ) 8008b8c: f000 febe bl 800990c 8008b90: 68bb ldr r3, [r7, #8] 8008b92: 3309 adds r3, #9 8008b94: 4a9f ldr r2, [pc, #636] ; (8008e14 ) 8008b96: fb82 1203 smull r1, r2, r2, r3 8008b9a: 1092 asrs r2, r2, #2 8008b9c: 17db asrs r3, r3, #31 8008b9e: 1ad3 subs r3, r2, r3 8008ba0: 613b str r3, [r7, #16] 8008ba2: 200a movs r0, #10 8008ba4: f7fa fd4e bl 8003644 8008ba8: f7fa fcfc bl 80035a4 8008bac: 4603 mov r3, r0 8008bae: 2b00 cmp r3, #0 8008bb0: d106 bne.n 8008bc0 8008bb2: 693b ldr r3, [r7, #16] 8008bb4: 3b01 subs r3, #1 8008bb6: 613b str r3, [r7, #16] 8008bb8: 693b ldr r3, [r7, #16] 8008bba: 2b00 cmp r3, #0 8008bbc: d1f1 bne.n 8008ba2 8008bbe: e000 b.n 8008bc2 8008bc0: bf00 nop 8008bc2: 693b ldr r3, [r7, #16] 8008bc4: 2b00 cmp r3, #0 8008bc6: d12c bne.n 8008c22 8008bc8: f000 fbb6 bl 8009338 8008bcc: f000 fbc0 bl 8009350 8008bd0: 4603 mov r3, r0 8008bd2: 4a8e ldr r2, [pc, #568] ; (8008e0c ) 8008bd4: 2106 movs r1, #6 8008bd6: 488e ldr r0, [pc, #568] ; (8008e10 ) 8008bd8: f000 fe98 bl 800990c 8008bdc: 68bb ldr r3, [r7, #8] 8008bde: 3309 adds r3, #9 8008be0: 4a8c ldr r2, [pc, #560] ; (8008e14 ) 8008be2: fb82 1203 smull r1, r2, r2, r3 8008be6: 1092 asrs r2, r2, #2 8008be8: 17db asrs r3, r3, #31 8008bea: 1ad3 subs r3, r2, r3 8008bec: 613b str r3, [r7, #16] 8008bee: 693b ldr r3, [r7, #16] 8008bf0: 009b lsls r3, r3, #2 8008bf2: 613b str r3, [r7, #16] 8008bf4: 200a movs r0, #10 8008bf6: f7fa fd25 bl 8003644 8008bfa: f7fa fcd3 bl 80035a4 8008bfe: 4603 mov r3, r0 8008c00: 2b00 cmp r3, #0 8008c02: d106 bne.n 8008c12 8008c04: 693b ldr r3, [r7, #16] 8008c06: 3b01 subs r3, #1 8008c08: 613b str r3, [r7, #16] 8008c0a: 693b ldr r3, [r7, #16] 8008c0c: 2b00 cmp r3, #0 8008c0e: d1f1 bne.n 8008bf4 8008c10: e000 b.n 8008c14 8008c12: bf00 nop 8008c14: 693b ldr r3, [r7, #16] 8008c16: 2b00 cmp r3, #0 8008c18: d103 bne.n 8008c22 8008c1a: 697b ldr r3, [r7, #20] 8008c1c: 2b00 cmp r3, #0 8008c1e: dcaa bgt.n 8008b76 8008c20: e000 b.n 8008c24 8008c22: bf00 nop 8008c24: f000 fb88 bl 8009338 8008c28: f000 fb92 bl 8009350 8008c2c: 4603 mov r3, r0 8008c2e: 4a77 ldr r2, [pc, #476] ; (8008e0c ) 8008c30: 2106 movs r1, #6 8008c32: 4877 ldr r0, [pc, #476] ; (8008e10 ) 8008c34: f000 fe6a bl 800990c break; 8008c38: e164 b.n 8008f04 case 7: TOUT_OP(6, Output7, 1000); 8008c3a: 68bb ldr r3, [r7, #8] 8008c3c: 2b00 cmp r3, #0 8008c3e: d10a bne.n 8008c56 8008c40: f000 fba0 bl 8009384 8008c44: f000 fbaa bl 800939c 8008c48: 4603 mov r3, r0 8008c4a: 4a73 ldr r2, [pc, #460] ; (8008e18 ) 8008c4c: 2107 movs r1, #7 8008c4e: 4870 ldr r0, [pc, #448] ; (8008e10 ) 8008c50: f000 fe5c bl 800990c break; 8008c54: e158 b.n 8008f08 TOUT_OP(6, Output7, 1000); 8008c56: 68bb ldr r3, [r7, #8] 8008c58: 2b01 cmp r3, #1 8008c5a: d10a bne.n 8008c72 8008c5c: f000 fb86 bl 800936c 8008c60: f000 fb9c bl 800939c 8008c64: 4603 mov r3, r0 8008c66: 4a6c ldr r2, [pc, #432] ; (8008e18 ) 8008c68: 2107 movs r1, #7 8008c6a: 4869 ldr r0, [pc, #420] ; (8008e10 ) 8008c6c: f000 fe4e bl 800990c break; 8008c70: e14a b.n 8008f08 TOUT_OP(6, Output7, 1000); 8008c72: 68bb ldr r3, [r7, #8] 8008c74: 2b02 cmp r3, #2 8008c76: d118 bne.n 8008caa 8008c78: f000 fb78 bl 800936c 8008c7c: f000 fb8e bl 800939c 8008c80: 4603 mov r3, r0 8008c82: 4a65 ldr r2, [pc, #404] ; (8008e18 ) 8008c84: 2107 movs r1, #7 8008c86: 4862 ldr r0, [pc, #392] ; (8008e10 ) 8008c88: f000 fe40 bl 800990c 8008c8c: f44f 707a mov.w r0, #1000 ; 0x3e8 8008c90: f7fa fcd8 bl 8003644 8008c94: f000 fb76 bl 8009384 8008c98: f000 fb80 bl 800939c 8008c9c: 4603 mov r3, r0 8008c9e: 4a5e ldr r2, [pc, #376] ; (8008e18 ) 8008ca0: 2107 movs r1, #7 8008ca2: 485b ldr r0, [pc, #364] ; (8008e10 ) 8008ca4: f000 fe32 bl 800990c break; 8008ca8: e12e b.n 8008f08 TOUT_OP(6, Output7, 1000); 8008caa: 68bb ldr r3, [r7, #8] 8008cac: 2b00 cmp r3, #0 8008cae: f340 812b ble.w 8008f08 8008cb2: 68bb ldr r3, [r7, #8] 8008cb4: f44f 727a mov.w r2, #1000 ; 0x3e8 8008cb8: fb02 f303 mul.w r3, r2, r3 8008cbc: 617b str r3, [r7, #20] 8008cbe: e051 b.n 8008d64 8008cc0: 697b ldr r3, [r7, #20] 8008cc2: 3b01 subs r3, #1 8008cc4: 617b str r3, [r7, #20] 8008cc6: f000 fb51 bl 800936c 8008cca: f000 fb67 bl 800939c 8008cce: 4603 mov r3, r0 8008cd0: 4a51 ldr r2, [pc, #324] ; (8008e18 ) 8008cd2: 2107 movs r1, #7 8008cd4: 484e ldr r0, [pc, #312] ; (8008e10 ) 8008cd6: f000 fe19 bl 800990c 8008cda: 68bb ldr r3, [r7, #8] 8008cdc: 3309 adds r3, #9 8008cde: 4a4d ldr r2, [pc, #308] ; (8008e14 ) 8008ce0: fb82 1203 smull r1, r2, r2, r3 8008ce4: 1092 asrs r2, r2, #2 8008ce6: 17db asrs r3, r3, #31 8008ce8: 1ad3 subs r3, r2, r3 8008cea: 613b str r3, [r7, #16] 8008cec: 200a movs r0, #10 8008cee: f7fa fca9 bl 8003644 8008cf2: f7fa fc57 bl 80035a4 8008cf6: 4603 mov r3, r0 8008cf8: 2b00 cmp r3, #0 8008cfa: d106 bne.n 8008d0a 8008cfc: 693b ldr r3, [r7, #16] 8008cfe: 3b01 subs r3, #1 8008d00: 613b str r3, [r7, #16] 8008d02: 693b ldr r3, [r7, #16] 8008d04: 2b00 cmp r3, #0 8008d06: d1f1 bne.n 8008cec 8008d08: e000 b.n 8008d0c 8008d0a: bf00 nop 8008d0c: 693b ldr r3, [r7, #16] 8008d0e: 2b00 cmp r3, #0 8008d10: d12c bne.n 8008d6c 8008d12: f000 fb37 bl 8009384 8008d16: f000 fb41 bl 800939c 8008d1a: 4603 mov r3, r0 8008d1c: 4a3e ldr r2, [pc, #248] ; (8008e18 ) 8008d1e: 2107 movs r1, #7 8008d20: 483b ldr r0, [pc, #236] ; (8008e10 ) 8008d22: f000 fdf3 bl 800990c 8008d26: 68bb ldr r3, [r7, #8] 8008d28: 3309 adds r3, #9 8008d2a: 4a3a ldr r2, [pc, #232] ; (8008e14 ) 8008d2c: fb82 1203 smull r1, r2, r2, r3 8008d30: 1092 asrs r2, r2, #2 8008d32: 17db asrs r3, r3, #31 8008d34: 1ad3 subs r3, r2, r3 8008d36: 613b str r3, [r7, #16] 8008d38: 693b ldr r3, [r7, #16] 8008d3a: 009b lsls r3, r3, #2 8008d3c: 613b str r3, [r7, #16] 8008d3e: 200a movs r0, #10 8008d40: f7fa fc80 bl 8003644 8008d44: f7fa fc2e bl 80035a4 8008d48: 4603 mov r3, r0 8008d4a: 2b00 cmp r3, #0 8008d4c: d106 bne.n 8008d5c 8008d4e: 693b ldr r3, [r7, #16] 8008d50: 3b01 subs r3, #1 8008d52: 613b str r3, [r7, #16] 8008d54: 693b ldr r3, [r7, #16] 8008d56: 2b00 cmp r3, #0 8008d58: d1f1 bne.n 8008d3e 8008d5a: e000 b.n 8008d5e 8008d5c: bf00 nop 8008d5e: 693b ldr r3, [r7, #16] 8008d60: 2b00 cmp r3, #0 8008d62: d103 bne.n 8008d6c 8008d64: 697b ldr r3, [r7, #20] 8008d66: 2b00 cmp r3, #0 8008d68: dcaa bgt.n 8008cc0 8008d6a: e000 b.n 8008d6e 8008d6c: bf00 nop 8008d6e: f000 fb09 bl 8009384 8008d72: f000 fb13 bl 800939c 8008d76: 4603 mov r3, r0 8008d78: 4a27 ldr r2, [pc, #156] ; (8008e18 ) 8008d7a: 2107 movs r1, #7 8008d7c: 4824 ldr r0, [pc, #144] ; (8008e10 ) 8008d7e: f000 fdc5 bl 800990c break; 8008d82: e0c1 b.n 8008f08 case 8: TOUT_OP(7, Output8, 1000); 8008d84: 68bb ldr r3, [r7, #8] 8008d86: 2b00 cmp r3, #0 8008d88: d10a bne.n 8008da0 8008d8a: f000 fb21 bl 80093d0 8008d8e: f000 fb2b bl 80093e8 8008d92: 4603 mov r3, r0 8008d94: 4a21 ldr r2, [pc, #132] ; (8008e1c ) 8008d96: 2108 movs r1, #8 8008d98: 481d ldr r0, [pc, #116] ; (8008e10 ) 8008d9a: f000 fdb7 bl 800990c break; 8008d9e: e0b5 b.n 8008f0c TOUT_OP(7, Output8, 1000); 8008da0: 68bb ldr r3, [r7, #8] 8008da2: 2b01 cmp r3, #1 8008da4: d10a bne.n 8008dbc 8008da6: f000 fb07 bl 80093b8 8008daa: f000 fb1d bl 80093e8 8008dae: 4603 mov r3, r0 8008db0: 4a1a ldr r2, [pc, #104] ; (8008e1c ) 8008db2: 2108 movs r1, #8 8008db4: 4816 ldr r0, [pc, #88] ; (8008e10 ) 8008db6: f000 fda9 bl 800990c break; 8008dba: e0a7 b.n 8008f0c TOUT_OP(7, Output8, 1000); 8008dbc: 68bb ldr r3, [r7, #8] 8008dbe: 2b02 cmp r3, #2 8008dc0: d118 bne.n 8008df4 8008dc2: f000 faf9 bl 80093b8 8008dc6: f000 fb0f bl 80093e8 8008dca: 4603 mov r3, r0 8008dcc: 4a13 ldr r2, [pc, #76] ; (8008e1c ) 8008dce: 2108 movs r1, #8 8008dd0: 480f ldr r0, [pc, #60] ; (8008e10 ) 8008dd2: f000 fd9b bl 800990c 8008dd6: f44f 707a mov.w r0, #1000 ; 0x3e8 8008dda: f7fa fc33 bl 8003644 8008dde: f000 faf7 bl 80093d0 8008de2: f000 fb01 bl 80093e8 8008de6: 4603 mov r3, r0 8008de8: 4a0c ldr r2, [pc, #48] ; (8008e1c ) 8008dea: 2108 movs r1, #8 8008dec: 4808 ldr r0, [pc, #32] ; (8008e10 ) 8008dee: f000 fd8d bl 800990c break; 8008df2: e08b b.n 8008f0c TOUT_OP(7, Output8, 1000); 8008df4: 68bb ldr r3, [r7, #8] 8008df6: 2b00 cmp r3, #0 8008df8: f340 8088 ble.w 8008f0c 8008dfc: 68bb ldr r3, [r7, #8] 8008dfe: f44f 727a mov.w r2, #1000 ; 0x3e8 8008e02: fb02 f303 mul.w r3, r2, r3 8008e06: 617b str r3, [r7, #20] 8008e08: e05c b.n 8008ec4 8008e0a: bf00 nop 8008e0c: 20000330 .word 0x20000330 8008e10: 0800adf0 .word 0x0800adf0 8008e14: 66666667 .word 0x66666667 8008e18: 20000344 .word 0x20000344 8008e1c: 20000358 .word 0x20000358 8008e20: 697b ldr r3, [r7, #20] 8008e22: 3b01 subs r3, #1 8008e24: 617b str r3, [r7, #20] 8008e26: f000 fac7 bl 80093b8 8008e2a: f000 fadd bl 80093e8 8008e2e: 4603 mov r3, r0 8008e30: 4a38 ldr r2, [pc, #224] ; (8008f14 ) 8008e32: 2108 movs r1, #8 8008e34: 4838 ldr r0, [pc, #224] ; (8008f18 ) 8008e36: f000 fd69 bl 800990c 8008e3a: 68bb ldr r3, [r7, #8] 8008e3c: 3309 adds r3, #9 8008e3e: 4a37 ldr r2, [pc, #220] ; (8008f1c ) 8008e40: fb82 1203 smull r1, r2, r2, r3 8008e44: 1092 asrs r2, r2, #2 8008e46: 17db asrs r3, r3, #31 8008e48: 1ad3 subs r3, r2, r3 8008e4a: 613b str r3, [r7, #16] 8008e4c: 200a movs r0, #10 8008e4e: f7fa fbf9 bl 8003644 8008e52: f7fa fba7 bl 80035a4 8008e56: 4603 mov r3, r0 8008e58: 2b00 cmp r3, #0 8008e5a: d106 bne.n 8008e6a 8008e5c: 693b ldr r3, [r7, #16] 8008e5e: 3b01 subs r3, #1 8008e60: 613b str r3, [r7, #16] 8008e62: 693b ldr r3, [r7, #16] 8008e64: 2b00 cmp r3, #0 8008e66: d1f1 bne.n 8008e4c 8008e68: e000 b.n 8008e6c 8008e6a: bf00 nop 8008e6c: 693b ldr r3, [r7, #16] 8008e6e: 2b00 cmp r3, #0 8008e70: d12c bne.n 8008ecc 8008e72: f000 faad bl 80093d0 8008e76: f000 fab7 bl 80093e8 8008e7a: 4603 mov r3, r0 8008e7c: 4a25 ldr r2, [pc, #148] ; (8008f14 ) 8008e7e: 2108 movs r1, #8 8008e80: 4825 ldr r0, [pc, #148] ; (8008f18 ) 8008e82: f000 fd43 bl 800990c 8008e86: 68bb ldr r3, [r7, #8] 8008e88: 3309 adds r3, #9 8008e8a: 4a24 ldr r2, [pc, #144] ; (8008f1c ) 8008e8c: fb82 1203 smull r1, r2, r2, r3 8008e90: 1092 asrs r2, r2, #2 8008e92: 17db asrs r3, r3, #31 8008e94: 1ad3 subs r3, r2, r3 8008e96: 613b str r3, [r7, #16] 8008e98: 693b ldr r3, [r7, #16] 8008e9a: 009b lsls r3, r3, #2 8008e9c: 613b str r3, [r7, #16] 8008e9e: 200a movs r0, #10 8008ea0: f7fa fbd0 bl 8003644 8008ea4: f7fa fb7e bl 80035a4 8008ea8: 4603 mov r3, r0 8008eaa: 2b00 cmp r3, #0 8008eac: d106 bne.n 8008ebc 8008eae: 693b ldr r3, [r7, #16] 8008eb0: 3b01 subs r3, #1 8008eb2: 613b str r3, [r7, #16] 8008eb4: 693b ldr r3, [r7, #16] 8008eb6: 2b00 cmp r3, #0 8008eb8: d1f1 bne.n 8008e9e 8008eba: e000 b.n 8008ebe 8008ebc: bf00 nop 8008ebe: 693b ldr r3, [r7, #16] 8008ec0: 2b00 cmp r3, #0 8008ec2: d103 bne.n 8008ecc 8008ec4: 697b ldr r3, [r7, #20] 8008ec6: 2b00 cmp r3, #0 8008ec8: dcaa bgt.n 8008e20 8008eca: e000 b.n 8008ece 8008ecc: bf00 nop 8008ece: f000 fa7f bl 80093d0 8008ed2: f000 fa89 bl 80093e8 8008ed6: 4603 mov r3, r0 8008ed8: 4a0e ldr r2, [pc, #56] ; (8008f14 ) 8008eda: 2108 movs r1, #8 8008edc: 480e ldr r0, [pc, #56] ; (8008f18 ) 8008ede: f000 fd15 bl 800990c break; 8008ee2: e013 b.n 8008f0c return; 8008ee4: bf00 nop 8008ee6: e012 b.n 8008f0e return; 8008ee8: bf00 nop 8008eea: e010 b.n 8008f0e default: break; 8008eec: bf00 nop 8008eee: e00e b.n 8008f0e break; 8008ef0: bf00 nop 8008ef2: e00c b.n 8008f0e break; 8008ef4: bf00 nop 8008ef6: e00a b.n 8008f0e break; 8008ef8: bf00 nop 8008efa: e008 b.n 8008f0e break; 8008efc: bf00 nop 8008efe: e006 b.n 8008f0e break; 8008f00: bf00 nop 8008f02: e004 b.n 8008f0e break; 8008f04: bf00 nop 8008f06: e002 b.n 8008f0e break; 8008f08: bf00 nop 8008f0a: e000 b.n 8008f0e break; 8008f0c: bf00 nop } } } 8008f0e: 3718 adds r7, #24 8008f10: 46bd mov sp, r7 8008f12: bd80 pop {r7, pc} 8008f14: 20000358 .word 0x20000358 8008f18: 0800adf0 .word 0x0800adf0 8008f1c: 66666667 .word 0x66666667 08008f20 : //------------------------------------------------------------------------------- void InitWorkCtrl(void) { 8008f20: b580 push {r7, lr} 8008f22: af00 add r7, sp, #0 DelayMs(1000); 8008f24: f44f 707a mov.w r0, #1000 ; 0x3e8 8008f28: f7fa fb8c bl 8003644 memset(&g_workCtrl, 0, sizeof(WorkCtrl)); 8008f2c: 2298 movs r2, #152 ; 0x98 8008f2e: 2100 movs r1, #0 8008f30: 4806 ldr r0, [pc, #24] ; (8008f4c ) 8008f32: f000 fce2 bl 80098fa g_workCtrl.workSta = 1; 8008f36: 4b05 ldr r3, [pc, #20] ; (8008f4c ) 8008f38: 2201 movs r2, #1 8008f3a: 601a str r2, [r3, #0] #if (BOARD_USE_FOR == SEW_HEAD) InitSewHeadBoard(); 8008f3c: f7fd fd3c bl 80069b8 #endif #if (CONTROL_BUS == COMM_CAN) InitCAN(); 8008f40: f000 fb08 bl 8009554 #endif InitDebug(); 8008f44: f7fe fbe8 bl 8007718 //printf("Init work finish.\r\n"); } 8008f48: bf00 nop 8008f4a: bd80 pop {r7, pc} 8008f4c: 20003c94 .word 0x20003c94 08008f50 : //------------------------------------------------------------------------------- void DelayRef(u32 ms) { 8008f50: b580 push {r7, lr} 8008f52: b082 sub sp, #8 8008f54: af00 add r7, sp, #0 8008f56: 6078 str r0, [r7, #4] while(ms != 0) 8008f58: e007 b.n 8008f6a { TriggerTask(); // ¶¨Ê±´¥·¢ÈÎÎñÖ´ÐУ¬TCP Á¬½Ó£¬·ìÈÒÈÎÎñ 8008f5a: f7fb fbef bl 800473c //CanBusTask(); // ÊäÈëÊä³öÈÎÎñÖ´ÐÐ DelayMs(1); 8008f5e: 2001 movs r0, #1 8008f60: f7fa fb70 bl 8003644 ms--; 8008f64: 687b ldr r3, [r7, #4] 8008f66: 3b01 subs r3, #1 8008f68: 607b str r3, [r7, #4] while(ms != 0) 8008f6a: 687b ldr r3, [r7, #4] 8008f6c: 2b00 cmp r3, #0 8008f6e: d1f4 bne.n 8008f5a } } 8008f70: bf00 nop 8008f72: 3708 adds r7, #8 8008f74: 46bd mov sp, r7 8008f76: bd80 pop {r7, pc} 08008f78 : //------------------------------------------------------------------------------- void WorkCtrlTask(void) { 8008f78: b580 push {r7, lr} 8008f7a: af00 add r7, sp, #0 #if (BOARD_USE_FOR == SEW_HEAD) SewHeadBoardTask(); 8008f7c: f7fd fe3c bl 8006bf8 #endif #if (CONTROL_BUS == COMM_CAN) CanBusTask(); 8008f80: f000 fba4 bl 80096cc #endif } 8008f84: bf00 nop 8008f86: bd80 pop {r7, pc} 08008f88 : { 8008f88: b480 push {r7} 8008f8a: b083 sub sp, #12 8008f8c: af00 add r7, sp, #0 8008f8e: 6078 str r0, [r7, #4] 8008f90: 6039 str r1, [r7, #0] return (READ_BIT(GPIOx->IDR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU) == ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU)); 8008f92: 687b ldr r3, [r7, #4] 8008f94: 689b ldr r3, [r3, #8] 8008f96: 43da mvns r2, r3 8008f98: 683b ldr r3, [r7, #0] 8008f9a: 0a1b lsrs r3, r3, #8 8008f9c: 4013 ands r3, r2 8008f9e: b29b uxth r3, r3 8008fa0: 2b00 cmp r3, #0 8008fa2: bf0c ite eq 8008fa4: 2301 moveq r3, #1 8008fa6: 2300 movne r3, #0 8008fa8: b2db uxtb r3, r3 } 8008faa: 4618 mov r0, r3 8008fac: 370c adds r7, #12 8008fae: 46bd mov sp, r7 8008fb0: bc80 pop {r7} 8008fb2: 4770 bx lr 08008fb4 : { 8008fb4: b480 push {r7} 8008fb6: b083 sub sp, #12 8008fb8: af00 add r7, sp, #0 8008fba: 6078 str r0, [r7, #4] 8008fbc: 6039 str r1, [r7, #0] return (READ_BIT(GPIOx->ODR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU) == ((PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU)); 8008fbe: 687b ldr r3, [r7, #4] 8008fc0: 68db ldr r3, [r3, #12] 8008fc2: 43da mvns r2, r3 8008fc4: 683b ldr r3, [r7, #0] 8008fc6: 0a1b lsrs r3, r3, #8 8008fc8: 4013 ands r3, r2 8008fca: b29b uxth r3, r3 8008fcc: 2b00 cmp r3, #0 8008fce: bf0c ite eq 8008fd0: 2301 moveq r3, #1 8008fd2: 2300 movne r3, #0 8008fd4: b2db uxtb r3, r3 } 8008fd6: 4618 mov r0, r3 8008fd8: 370c adds r7, #12 8008fda: 46bd mov sp, r7 8008fdc: bc80 pop {r7} 8008fde: 4770 bx lr 08008fe0 : { 8008fe0: b480 push {r7} 8008fe2: b083 sub sp, #12 8008fe4: af00 add r7, sp, #0 8008fe6: 6078 str r0, [r7, #4] 8008fe8: 6039 str r1, [r7, #0] WRITE_REG(GPIOx->BSRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU); 8008fea: 683b ldr r3, [r7, #0] 8008fec: 0a1b lsrs r3, r3, #8 8008fee: b29a uxth r2, r3 8008ff0: 687b ldr r3, [r7, #4] 8008ff2: 611a str r2, [r3, #16] } 8008ff4: bf00 nop 8008ff6: 370c adds r7, #12 8008ff8: 46bd mov sp, r7 8008ffa: bc80 pop {r7} 8008ffc: 4770 bx lr 08008ffe : { 8008ffe: b480 push {r7} 8009000: b083 sub sp, #12 8009002: af00 add r7, sp, #0 8009004: 6078 str r0, [r7, #4] 8009006: 6039 str r1, [r7, #0] WRITE_REG(GPIOx->BRR, (PinMask >> GPIO_PIN_MASK_POS) & 0x0000FFFFU); 8009008: 683b ldr r3, [r7, #0] 800900a: 0a1b lsrs r3, r3, #8 800900c: b29a uxth r2, r3 800900e: 687b ldr r3, [r7, #4] 8009010: 615a str r2, [r3, #20] } 8009012: bf00 nop 8009014: 370c adds r7, #12 8009016: 46bd mov sp, r7 8009018: bc80 pop {r7} 800901a: 4770 bx lr 0800901c : #include "inout.h" #include "funcs.h" //-------------ͨѶ²¿·Ö------------------------- OUTPUT_FUNCS(En485Out, RS485_EN); // 485Êä³öÔÊÐí 800901c: b580 push {r7, lr} 800901e: af00 add r7, sp, #0 8009020: f240 2102 movw r1, #514 ; 0x202 8009024: 4802 ldr r0, [pc, #8] ; (8009030 ) 8009026: f7ff ffea bl 8008ffe 800902a: bf00 nop 800902c: bd80 pop {r7, pc} 800902e: bf00 nop 8009030: 40010c00 .word 0x40010c00 08009034 : 8009034: b580 push {r7, lr} 8009036: af00 add r7, sp, #0 8009038: f240 2102 movw r1, #514 ; 0x202 800903c: 4802 ldr r0, [pc, #8] ; (8009048 ) 800903e: f7ff ffcf bl 8008fe0 8009042: bf00 nop 8009044: bd80 pop {r7, pc} 8009046: bf00 nop 8009048: 40010c00 .word 0x40010c00 0800904c : OUTPUT_FUNCS(En485_2_Out, RS485_2_EN); // 485Êä³öÔÊÐí 800904c: b580 push {r7, lr} 800904e: af00 add r7, sp, #0 8009050: f240 2102 movw r1, #514 ; 0x202 8009054: 4802 ldr r0, [pc, #8] ; (8009060 ) 8009056: f7ff ffd2 bl 8008ffe 800905a: bf00 nop 800905c: bd80 pop {r7, pc} 800905e: bf00 nop 8009060: 40010800 .word 0x40010800 08009064 : 8009064: b580 push {r7, lr} 8009066: af00 add r7, sp, #0 8009068: f240 2102 movw r1, #514 ; 0x202 800906c: 4802 ldr r0, [pc, #8] ; (8009078 ) 800906e: f7ff ffb7 bl 8008fe0 8009072: bf00 nop 8009074: bd80 pop {r7, pc} 8009076: bf00 nop 8009078: 40010800 .word 0x40010800 0800907c : //-----------------µç»ú¿ØÖÆÐźÅ--------------------- // Moto1 OUTPUT_FUNCS(Moto1Step, MT_STEP); 800907c: b580 push {r7, lr} 800907e: af00 add r7, sp, #0 8009080: f242 0120 movw r1, #8224 ; 0x2020 8009084: 4802 ldr r0, [pc, #8] ; (8009090 ) 8009086: f7ff ffba bl 8008ffe 800908a: bf00 nop 800908c: bd80 pop {r7, pc} 800908e: bf00 nop 8009090: 40010800 .word 0x40010800 08009094 : 8009094: b580 push {r7, lr} 8009096: af00 add r7, sp, #0 8009098: f242 0120 movw r1, #8224 ; 0x2020 800909c: 4802 ldr r0, [pc, #8] ; (80090a8 ) 800909e: f7ff ff9f bl 8008fe0 80090a2: bf00 nop 80090a4: bd80 pop {r7, pc} 80090a6: bf00 nop 80090a8: 40010800 .word 0x40010800 080090ac : OUTPUT_FUNCS(Moto1Dir, MT_DIR); 80090ac: b580 push {r7, lr} 80090ae: af00 add r7, sp, #0 80090b0: f241 0110 movw r1, #4112 ; 0x1010 80090b4: 4802 ldr r0, [pc, #8] ; (80090c0 ) 80090b6: f7ff ffa2 bl 8008ffe 80090ba: bf00 nop 80090bc: bd80 pop {r7, pc} 80090be: bf00 nop 80090c0: 40010800 .word 0x40010800 080090c4 : 80090c4: b580 push {r7, lr} 80090c6: af00 add r7, sp, #0 80090c8: f241 0110 movw r1, #4112 ; 0x1010 80090cc: 4802 ldr r0, [pc, #8] ; (80090d8 ) 80090ce: f7ff ff87 bl 8008fe0 80090d2: bf00 nop 80090d4: bd80 pop {r7, pc} 80090d6: bf00 nop 80090d8: 40010800 .word 0x40010800 080090dc : OUTPUT_FUNCS(Moto1En, MT_SON); //----------------------------------------- INPUT_FUNCS(InputAP,AP); 80090dc: b580 push {r7, lr} 80090de: af00 add r7, sp, #0 80090e0: 4903 ldr r1, [pc, #12] ; (80090f0 ) 80090e2: 4804 ldr r0, [pc, #16] ; (80090f4 ) 80090e4: f7ff ff50 bl 8008f88 80090e8: 4603 mov r3, r0 80090ea: b2db uxtb r3, r3 80090ec: 4618 mov r0, r3 80090ee: bd80 pop {r7, pc} 80090f0: 04010001 .word 0x04010001 80090f4: 40010800 .word 0x40010800 080090f8 : INPUT_FUNCS(InputBP,BP); 80090f8: b580 push {r7, lr} 80090fa: af00 add r7, sp, #0 80090fc: 4903 ldr r1, [pc, #12] ; (800910c ) 80090fe: 4804 ldr r0, [pc, #16] ; (8009110 ) 8009100: f7ff ff42 bl 8008f88 8009104: 4603 mov r3, r0 8009106: b2db uxtb r3, r3 8009108: 4618 mov r0, r3 800910a: bd80 pop {r7, pc} 800910c: 04020002 .word 0x04020002 8009110: 40010800 .word 0x40010800 08009114 : INPUT_FUNCS(InputZP,ZP); //-----------------Êä³öÐźÅ--------------------- OUTPUT_FUNCS(SysLed, SYS_LED); 8009114: b580 push {r7, lr} 8009116: af00 add r7, sp, #0 8009118: 4902 ldr r1, [pc, #8] ; (8009124 ) 800911a: 4803 ldr r0, [pc, #12] ; (8009128 ) 800911c: f7ff ff6f bl 8008ffe 8009120: bf00 nop 8009122: bd80 pop {r7, pc} 8009124: 04400040 .word 0x04400040 8009128: 40011000 .word 0x40011000 0800912c : 800912c: b580 push {r7, lr} 800912e: af00 add r7, sp, #0 8009130: 4902 ldr r1, [pc, #8] ; (800913c ) 8009132: 4803 ldr r0, [pc, #12] ; (8009140 ) 8009134: f7ff ff54 bl 8008fe0 8009138: bf00 nop 800913a: bd80 pop {r7, pc} 800913c: 04400040 .word 0x04400040 8009140: 40011000 .word 0x40011000 08009144 : OUTPUT_FUNCS(ErrLed, ERR_LED); OUTPUT_FUNCS(OutputPWM1, OUTPWM1); 8009144: b580 push {r7, lr} 8009146: af00 add r7, sp, #0 8009148: f244 0140 movw r1, #16448 ; 0x4040 800914c: 4802 ldr r0, [pc, #8] ; (8009158 ) 800914e: f7ff ff56 bl 8008ffe 8009152: bf00 nop 8009154: bd80 pop {r7, pc} 8009156: bf00 nop 8009158: 40011000 .word 0x40011000 0800915c : 800915c: b580 push {r7, lr} 800915e: af00 add r7, sp, #0 8009160: f244 0140 movw r1, #16448 ; 0x4040 8009164: 4802 ldr r0, [pc, #8] ; (8009170 ) 8009166: f7ff ff3b bl 8008fe0 800916a: bf00 nop 800916c: bd80 pop {r7, pc} 800916e: bf00 nop 8009170: 40011000 .word 0x40011000 08009174 : OUTPUT_FUNCS(OutputPWM2, OUTPWM2); 8009174: b580 push {r7, lr} 8009176: af00 add r7, sp, #0 8009178: f240 1101 movw r1, #257 ; 0x101 800917c: 4802 ldr r0, [pc, #8] ; (8009188 ) 800917e: f7ff ff3e bl 8008ffe 8009182: bf00 nop 8009184: bd80 pop {r7, pc} 8009186: bf00 nop 8009188: 40010800 .word 0x40010800 0800918c : 800918c: b580 push {r7, lr} 800918e: af00 add r7, sp, #0 8009190: f240 1101 movw r1, #257 ; 0x101 8009194: 4802 ldr r0, [pc, #8] ; (80091a0 ) 8009196: f7ff ff23 bl 8008fe0 800919a: bf00 nop 800919c: bd80 pop {r7, pc} 800919e: bf00 nop 80091a0: 40010800 .word 0x40010800 080091a4 : OUTPUT_FUNCS(Output1, OUTPUT1); 80091a4: b580 push {r7, lr} 80091a6: af00 add r7, sp, #0 80091a8: f248 0180 movw r1, #32896 ; 0x8080 80091ac: 4802 ldr r0, [pc, #8] ; (80091b8 ) 80091ae: f7ff ff26 bl 8008ffe 80091b2: bf00 nop 80091b4: bd80 pop {r7, pc} 80091b6: bf00 nop 80091b8: 40010800 .word 0x40010800 080091bc : 80091bc: b580 push {r7, lr} 80091be: af00 add r7, sp, #0 80091c0: f248 0180 movw r1, #32896 ; 0x8080 80091c4: 4802 ldr r0, [pc, #8] ; (80091d0 ) 80091c6: f7ff ff0b bl 8008fe0 80091ca: bf00 nop 80091cc: bd80 pop {r7, pc} 80091ce: bf00 nop 80091d0: 40010800 .word 0x40010800 080091d4 : 80091d4: b580 push {r7, lr} 80091d6: af00 add r7, sp, #0 80091d8: f248 0180 movw r1, #32896 ; 0x8080 80091dc: 4803 ldr r0, [pc, #12] ; (80091ec ) 80091de: f7ff fee9 bl 8008fb4 80091e2: 4603 mov r3, r0 80091e4: b2db uxtb r3, r3 80091e6: 4618 mov r0, r3 80091e8: bd80 pop {r7, pc} 80091ea: bf00 nop 80091ec: 40010800 .word 0x40010800 080091f0 : OUTPUT_FUNCS(Output2, OUTPUT2); 80091f0: b580 push {r7, lr} 80091f2: af00 add r7, sp, #0 80091f4: f241 0110 movw r1, #4112 ; 0x1010 80091f8: 4802 ldr r0, [pc, #8] ; (8009204 ) 80091fa: f7ff ff00 bl 8008ffe 80091fe: bf00 nop 8009200: bd80 pop {r7, pc} 8009202: bf00 nop 8009204: 40011000 .word 0x40011000 08009208 : 8009208: b580 push {r7, lr} 800920a: af00 add r7, sp, #0 800920c: f241 0110 movw r1, #4112 ; 0x1010 8009210: 4802 ldr r0, [pc, #8] ; (800921c ) 8009212: f7ff fee5 bl 8008fe0 8009216: bf00 nop 8009218: bd80 pop {r7, pc} 800921a: bf00 nop 800921c: 40011000 .word 0x40011000 08009220 : 8009220: b580 push {r7, lr} 8009222: af00 add r7, sp, #0 8009224: f241 0110 movw r1, #4112 ; 0x1010 8009228: 4803 ldr r0, [pc, #12] ; (8009238 ) 800922a: f7ff fec3 bl 8008fb4 800922e: 4603 mov r3, r0 8009230: b2db uxtb r3, r3 8009232: 4618 mov r0, r3 8009234: bd80 pop {r7, pc} 8009236: bf00 nop 8009238: 40011000 .word 0x40011000 0800923c : OUTPUT_FUNCS(Output3, OUTPUT3); 800923c: b580 push {r7, lr} 800923e: af00 add r7, sp, #0 8009240: f242 0120 movw r1, #8224 ; 0x2020 8009244: 4802 ldr r0, [pc, #8] ; (8009250 ) 8009246: f7ff feda bl 8008ffe 800924a: bf00 nop 800924c: bd80 pop {r7, pc} 800924e: bf00 nop 8009250: 40011000 .word 0x40011000 08009254 : 8009254: b580 push {r7, lr} 8009256: af00 add r7, sp, #0 8009258: f242 0120 movw r1, #8224 ; 0x2020 800925c: 4802 ldr r0, [pc, #8] ; (8009268 ) 800925e: f7ff febf bl 8008fe0 8009262: bf00 nop 8009264: bd80 pop {r7, pc} 8009266: bf00 nop 8009268: 40011000 .word 0x40011000 0800926c : 800926c: b580 push {r7, lr} 800926e: af00 add r7, sp, #0 8009270: f242 0120 movw r1, #8224 ; 0x2020 8009274: 4803 ldr r0, [pc, #12] ; (8009284 ) 8009276: f7ff fe9d bl 8008fb4 800927a: 4603 mov r3, r0 800927c: b2db uxtb r3, r3 800927e: 4618 mov r0, r3 8009280: bd80 pop {r7, pc} 8009282: bf00 nop 8009284: 40011000 .word 0x40011000 08009288 : OUTPUT_FUNCS(Output4, OUTPUT4); 8009288: b580 push {r7, lr} 800928a: af00 add r7, sp, #0 800928c: f240 1101 movw r1, #257 ; 0x101 8009290: 4802 ldr r0, [pc, #8] ; (800929c ) 8009292: f7ff feb4 bl 8008ffe 8009296: bf00 nop 8009298: bd80 pop {r7, pc} 800929a: bf00 nop 800929c: 40010c00 .word 0x40010c00 080092a0 : 80092a0: b580 push {r7, lr} 80092a2: af00 add r7, sp, #0 80092a4: f240 1101 movw r1, #257 ; 0x101 80092a8: 4802 ldr r0, [pc, #8] ; (80092b4 ) 80092aa: f7ff fe99 bl 8008fe0 80092ae: bf00 nop 80092b0: bd80 pop {r7, pc} 80092b2: bf00 nop 80092b4: 40010c00 .word 0x40010c00 080092b8 : 80092b8: b580 push {r7, lr} 80092ba: af00 add r7, sp, #0 80092bc: f240 1101 movw r1, #257 ; 0x101 80092c0: 4803 ldr r0, [pc, #12] ; (80092d0 ) 80092c2: f7ff fe77 bl 8008fb4 80092c6: 4603 mov r3, r0 80092c8: b2db uxtb r3, r3 80092ca: 4618 mov r0, r3 80092cc: bd80 pop {r7, pc} 80092ce: bf00 nop 80092d0: 40010c00 .word 0x40010c00 080092d4 : OUTPUT_FUNCS(Output5, OUTPUT5); 80092d4: b580 push {r7, lr} 80092d6: af00 add r7, sp, #0 80092d8: 4902 ldr r1, [pc, #8] ; (80092e4 ) 80092da: 4803 ldr r0, [pc, #12] ; (80092e8 ) 80092dc: f7ff fe8f bl 8008ffe 80092e0: bf00 nop 80092e2: bd80 pop {r7, pc} 80092e4: 04100010 .word 0x04100010 80092e8: 40010c00 .word 0x40010c00 080092ec : 80092ec: b580 push {r7, lr} 80092ee: af00 add r7, sp, #0 80092f0: 4902 ldr r1, [pc, #8] ; (80092fc ) 80092f2: 4803 ldr r0, [pc, #12] ; (8009300 ) 80092f4: f7ff fe74 bl 8008fe0 80092f8: bf00 nop 80092fa: bd80 pop {r7, pc} 80092fc: 04100010 .word 0x04100010 8009300: 40010c00 .word 0x40010c00 08009304 : 8009304: b580 push {r7, lr} 8009306: af00 add r7, sp, #0 8009308: 4903 ldr r1, [pc, #12] ; (8009318 ) 800930a: 4804 ldr r0, [pc, #16] ; (800931c ) 800930c: f7ff fe52 bl 8008fb4 8009310: 4603 mov r3, r0 8009312: b2db uxtb r3, r3 8009314: 4618 mov r0, r3 8009316: bd80 pop {r7, pc} 8009318: 04100010 .word 0x04100010 800931c: 40010c00 .word 0x40010c00 08009320 : OUTPUT_FUNCS(Output6, OUTPUT6); 8009320: b580 push {r7, lr} 8009322: af00 add r7, sp, #0 8009324: 4902 ldr r1, [pc, #8] ; (8009330 ) 8009326: 4803 ldr r0, [pc, #12] ; (8009334 ) 8009328: f7ff fe69 bl 8008ffe 800932c: bf00 nop 800932e: bd80 pop {r7, pc} 8009330: 04200020 .word 0x04200020 8009334: 40010c00 .word 0x40010c00 08009338 : 8009338: b580 push {r7, lr} 800933a: af00 add r7, sp, #0 800933c: 4902 ldr r1, [pc, #8] ; (8009348 ) 800933e: 4803 ldr r0, [pc, #12] ; (800934c ) 8009340: f7ff fe4e bl 8008fe0 8009344: bf00 nop 8009346: bd80 pop {r7, pc} 8009348: 04200020 .word 0x04200020 800934c: 40010c00 .word 0x40010c00 08009350 : 8009350: b580 push {r7, lr} 8009352: af00 add r7, sp, #0 8009354: 4903 ldr r1, [pc, #12] ; (8009364 ) 8009356: 4804 ldr r0, [pc, #16] ; (8009368 ) 8009358: f7ff fe2c bl 8008fb4 800935c: 4603 mov r3, r0 800935e: b2db uxtb r3, r3 8009360: 4618 mov r0, r3 8009362: bd80 pop {r7, pc} 8009364: 04200020 .word 0x04200020 8009368: 40010c00 .word 0x40010c00 0800936c : OUTPUT_FUNCS(Output7, OUTPUT7); 800936c: b580 push {r7, lr} 800936e: af00 add r7, sp, #0 8009370: 4902 ldr r1, [pc, #8] ; (800937c ) 8009372: 4803 ldr r0, [pc, #12] ; (8009380 ) 8009374: f7ff fe43 bl 8008ffe 8009378: bf00 nop 800937a: bd80 pop {r7, pc} 800937c: 04400040 .word 0x04400040 8009380: 40010c00 .word 0x40010c00 08009384 : 8009384: b580 push {r7, lr} 8009386: af00 add r7, sp, #0 8009388: 4902 ldr r1, [pc, #8] ; (8009394 ) 800938a: 4803 ldr r0, [pc, #12] ; (8009398 ) 800938c: f7ff fe28 bl 8008fe0 8009390: bf00 nop 8009392: bd80 pop {r7, pc} 8009394: 04400040 .word 0x04400040 8009398: 40010c00 .word 0x40010c00 0800939c : 800939c: b580 push {r7, lr} 800939e: af00 add r7, sp, #0 80093a0: 4903 ldr r1, [pc, #12] ; (80093b0 ) 80093a2: 4804 ldr r0, [pc, #16] ; (80093b4 ) 80093a4: f7ff fe06 bl 8008fb4 80093a8: 4603 mov r3, r0 80093aa: b2db uxtb r3, r3 80093ac: 4618 mov r0, r3 80093ae: bd80 pop {r7, pc} 80093b0: 04400040 .word 0x04400040 80093b4: 40010c00 .word 0x40010c00 080093b8 : OUTPUT_FUNCS(Output8, OUTPUT8); 80093b8: b580 push {r7, lr} 80093ba: af00 add r7, sp, #0 80093bc: 4902 ldr r1, [pc, #8] ; (80093c8 ) 80093be: 4803 ldr r0, [pc, #12] ; (80093cc ) 80093c0: f7ff fe1d bl 8008ffe 80093c4: bf00 nop 80093c6: bd80 pop {r7, pc} 80093c8: 04800080 .word 0x04800080 80093cc: 40010c00 .word 0x40010c00 080093d0 : 80093d0: b580 push {r7, lr} 80093d2: af00 add r7, sp, #0 80093d4: 4902 ldr r1, [pc, #8] ; (80093e0 ) 80093d6: 4803 ldr r0, [pc, #12] ; (80093e4 ) 80093d8: f7ff fe02 bl 8008fe0 80093dc: bf00 nop 80093de: bd80 pop {r7, pc} 80093e0: 04800080 .word 0x04800080 80093e4: 40010c00 .word 0x40010c00 080093e8 : 80093e8: b580 push {r7, lr} 80093ea: af00 add r7, sp, #0 80093ec: 4903 ldr r1, [pc, #12] ; (80093fc ) 80093ee: 4804 ldr r0, [pc, #16] ; (8009400 ) 80093f0: f7ff fde0 bl 8008fb4 80093f4: 4603 mov r3, r0 80093f6: b2db uxtb r3, r3 80093f8: 4618 mov r0, r3 80093fa: bd80 pop {r7, pc} 80093fc: 04800080 .word 0x04800080 8009400: 40010c00 .word 0x40010c00 08009404 : //-----------------ÊäÈëÐźÅ--------------------- INPUT_FUNCS(Input1,INPUT1); 8009404: b580 push {r7, lr} 8009406: af00 add r7, sp, #0 8009408: f242 0120 movw r1, #8224 ; 0x2020 800940c: 4803 ldr r0, [pc, #12] ; (800941c ) 800940e: f7ff fdbb bl 8008f88 8009412: 4603 mov r3, r0 8009414: b2db uxtb r3, r3 8009416: 4618 mov r0, r3 8009418: bd80 pop {r7, pc} 800941a: bf00 nop 800941c: 40010c00 .word 0x40010c00 08009420 : INPUT_FUNCS(Input2,INPUT2); 8009420: b580 push {r7, lr} 8009422: af00 add r7, sp, #0 8009424: f241 0110 movw r1, #4112 ; 0x1010 8009428: 4803 ldr r0, [pc, #12] ; (8009438 ) 800942a: f7ff fdad bl 8008f88 800942e: 4603 mov r3, r0 8009430: b2db uxtb r3, r3 8009432: 4618 mov r0, r3 8009434: bd80 pop {r7, pc} 8009436: bf00 nop 8009438: 40010c00 .word 0x40010c00 0800943c : INPUT_FUNCS(Input3,INPUT3); 800943c: b580 push {r7, lr} 800943e: af00 add r7, sp, #0 8009440: f640 0108 movw r1, #2056 ; 0x808 8009444: 4803 ldr r0, [pc, #12] ; (8009454 ) 8009446: f7ff fd9f bl 8008f88 800944a: 4603 mov r3, r0 800944c: b2db uxtb r3, r3 800944e: 4618 mov r0, r3 8009450: bd80 pop {r7, pc} 8009452: bf00 nop 8009454: 40010c00 .word 0x40010c00 08009458 : INPUT_FUNCS(Input4,INPUT4); 8009458: b580 push {r7, lr} 800945a: af00 add r7, sp, #0 800945c: f240 4104 movw r1, #1028 ; 0x404 8009460: 4803 ldr r0, [pc, #12] ; (8009470 ) 8009462: f7ff fd91 bl 8008f88 8009466: 4603 mov r3, r0 8009468: b2db uxtb r3, r3 800946a: 4618 mov r0, r3 800946c: bd80 pop {r7, pc} 800946e: bf00 nop 8009470: 40011400 .word 0x40011400 08009474 : INPUT_FUNCS(Input5,INPUT5); 8009474: b580 push {r7, lr} 8009476: af00 add r7, sp, #0 8009478: 4903 ldr r1, [pc, #12] ; (8009488 ) 800947a: 4804 ldr r0, [pc, #16] ; (800948c ) 800947c: f7ff fd84 bl 8008f88 8009480: 4603 mov r3, r0 8009482: b2db uxtb r3, r3 8009484: 4618 mov r0, r3 8009486: bd80 pop {r7, pc} 8009488: 04100010 .word 0x04100010 800948c: 40011000 .word 0x40011000 08009490 : INPUT_FUNCS(Input6,INPUT6); 8009490: b580 push {r7, lr} 8009492: af00 add r7, sp, #0 8009494: 4903 ldr r1, [pc, #12] ; (80094a4 ) 8009496: 4804 ldr r0, [pc, #16] ; (80094a8 ) 8009498: f7ff fd76 bl 8008f88 800949c: 4603 mov r3, r0 800949e: b2db uxtb r3, r3 80094a0: 4618 mov r0, r3 80094a2: bd80 pop {r7, pc} 80094a4: 04080008 .word 0x04080008 80094a8: 40011000 .word 0x40011000 080094ac : INPUT_FUNCS(Input7,INPUT7); 80094ac: b580 push {r7, lr} 80094ae: af00 add r7, sp, #0 80094b0: 4903 ldr r1, [pc, #12] ; (80094c0 ) 80094b2: 4804 ldr r0, [pc, #16] ; (80094c4 ) 80094b4: f7ff fd68 bl 8008f88 80094b8: 4603 mov r3, r0 80094ba: b2db uxtb r3, r3 80094bc: 4618 mov r0, r3 80094be: bd80 pop {r7, pc} 80094c0: 04040004 .word 0x04040004 80094c4: 40011000 .word 0x40011000 080094c8 : INPUT_FUNCS(Input8,INPUT8); 80094c8: b580 push {r7, lr} 80094ca: af00 add r7, sp, #0 80094cc: 4903 ldr r1, [pc, #12] ; (80094dc ) 80094ce: 4804 ldr r0, [pc, #16] ; (80094e0 ) 80094d0: f7ff fd5a bl 8008f88 80094d4: 4603 mov r3, r0 80094d6: b2db uxtb r3, r3 80094d8: 4618 mov r0, r3 80094da: bd80 pop {r7, pc} 80094dc: 04800080 .word 0x04800080 80094e0: 40010800 .word 0x40010800 080094e4 : //-----------------²¦Â뿪¹Ø--------------------- INPUT_FUNCS(Switch1,SW1); 80094e4: b580 push {r7, lr} 80094e6: af00 add r7, sp, #0 80094e8: f248 0180 movw r1, #32896 ; 0x8080 80094ec: 4803 ldr r0, [pc, #12] ; (80094fc ) 80094ee: f7ff fd4b bl 8008f88 80094f2: 4603 mov r3, r0 80094f4: b2db uxtb r3, r3 80094f6: 4618 mov r0, r3 80094f8: bd80 pop {r7, pc} 80094fa: bf00 nop 80094fc: 40011000 .word 0x40011000 08009500 : INPUT_FUNCS(Switch2,SW2); 8009500: b580 push {r7, lr} 8009502: af00 add r7, sp, #0 8009504: 4903 ldr r1, [pc, #12] ; (8009514 ) 8009506: 4804 ldr r0, [pc, #16] ; (8009518 ) 8009508: f7ff fd3e bl 8008f88 800950c: 4603 mov r3, r0 800950e: b2db uxtb r3, r3 8009510: 4618 mov r0, r3 8009512: bd80 pop {r7, pc} 8009514: 04010001 .word 0x04010001 8009518: 40011000 .word 0x40011000 0800951c : INPUT_FUNCS(Switch3,SW3); 800951c: b580 push {r7, lr} 800951e: af00 add r7, sp, #0 8009520: 4903 ldr r1, [pc, #12] ; (8009530 ) 8009522: 4804 ldr r0, [pc, #16] ; (8009534 ) 8009524: f7ff fd30 bl 8008f88 8009528: 4603 mov r3, r0 800952a: b2db uxtb r3, r3 800952c: 4618 mov r0, r3 800952e: bd80 pop {r7, pc} 8009530: 04020002 .word 0x04020002 8009534: 40011000 .word 0x40011000 08009538 : INPUT_FUNCS(Switch4,SW4); 8009538: b580 push {r7, lr} 800953a: af00 add r7, sp, #0 800953c: 4903 ldr r1, [pc, #12] ; (800954c ) 800953e: 4804 ldr r0, [pc, #16] ; (8009550 ) 8009540: f7ff fd22 bl 8008f88 8009544: 4603 mov r3, r0 8009546: b2db uxtb r3, r3 8009548: 4618 mov r0, r3 800954a: bd80 pop {r7, pc} 800954c: 04010001 .word 0x04010001 8009550: 40010c00 .word 0x40010c00 08009554 : #if (CONTROL_BUS == COMM_CAN) void ExA1CanFilter(u8 fifo); void InitCAN(void) { 8009554: b580 push {r7, lr} 8009556: af00 add r7, sp, #0 // CAN ½Úµã g_workCtrl.hostId = 1; 8009558: 4b0d ldr r3, [pc, #52] ; (8009590 ) 800955a: 2201 movs r2, #1 800955c: 71da strb r2, [r3, #7] g_workCtrl.device = BN_DEVICE_EXA1; 800955e: 4b0c ldr r3, [pc, #48] ; (8009590 ) 8009560: 22a1 movs r2, #161 ; 0xa1 8009562: 711a strb r2, [r3, #4] g_workCtrl.nodeId = CUR_EXA1_NODE_ID; 8009564: 4b0a ldr r3, [pc, #40] ; (8009590 ) 8009566: 2221 movs r2, #33 ; 0x21 8009568: 715a strb r2, [r3, #5] g_workCtrl.workSta = 2; 800956a: 4b09 ldr r3, [pc, #36] ; (8009590 ) 800956c: 2202 movs r2, #2 800956e: 601a str r2, [r3, #0] printf("g_workCtrl.nodeId is %d\r\n",g_workCtrl.nodeId); 8009570: 4b07 ldr r3, [pc, #28] ; (8009590 ) 8009572: 795b ldrb r3, [r3, #5] 8009574: 4619 mov r1, r3 8009576: 4807 ldr r0, [pc, #28] ; (8009594 ) 8009578: f000 f9c8 bl 800990c RegistFilter(ExA1CanFilter); 800957c: 4806 ldr r0, [pc, #24] ; (8009598 ) 800957e: f7f9 fd5d bl 800303c InitCanCtrl(); 8009582: f7f9 fd69 bl 8003058 InitSewHeadControl(&g_workCtrl.curBdCtrl); 8009586: 4805 ldr r0, [pc, #20] ; (800959c ) 8009588: f7fb f970 bl 800486c } 800958c: bf00 nop 800958e: bd80 pop {r7, pc} 8009590: 20003c94 .word 0x20003c94 8009594: 0800ae04 .word 0x0800ae04 8009598: 080095a1 .word 0x080095a1 800959c: 20003c9c .word 0x20003c9c 080095a0 : void ExA1CanFilter(u8 fifo) { 80095a0: b580 push {r7, lr} 80095a2: b08c sub sp, #48 ; 0x30 80095a4: af00 add r7, sp, #0 80095a6: 4603 mov r3, r0 80095a8: 71fb strb r3, [r7, #7] CAN_FilterTypeDef CAN_FilterInitStructure; // ÇëÇó±¾½Úµã״̬±ä»¯µÄÔ¶³ÌÖ¡ºÍ¿ØÖƱ¾½ÚµãÃüÁîµÄÊý¾ÝÖ¡ CAN_FilterInitStructure.FilterBank = 0; // ÉèÖùýÂËÆ÷×é0£¬·¶Î§Îª0~13 80095aa: 2300 movs r3, #0 80095ac: 61fb str r3, [r7, #28] CAN_FilterInitStructure.FilterMode = CAN_FILTERMODE_IDLIST; // ¹ýÂËÆ÷×é0Ϊ±êʶ·ûÁбíģʽ 80095ae: 2301 movs r3, #1 80095b0: 623b str r3, [r7, #32] CAN_FilterInitStructure.FilterScale = CAN_FILTERSCALE_32BIT; // ¹ýÂËÆ÷×é0λ¿íΪ32λ 80095b2: 2301 movs r3, #1 80095b4: 627b str r3, [r7, #36] ; 0x24 CAN_FilterInitStructure.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, 0, BN_CMD_EXSTA), CAN_RTR_REMOTE)); // É趨µÚÒ»¸ö¹ýÂËÆ÷¸ß16λ 80095b6: 4b43 ldr r3, [pc, #268] ; (80096c4 ) 80095b8: 791b ldrb r3, [r3, #4] 80095ba: 061b lsls r3, r3, #24 80095bc: f003 52f8 and.w r2, r3, #520093696 ; 0x1f000000 80095c0: 4b40 ldr r3, [pc, #256] ; (80096c4 ) 80095c2: 795b ldrb r3, [r3, #5] 80095c4: 041b lsls r3, r3, #16 80095c6: 4313 orrs r3, r2 80095c8: 00db lsls r3, r3, #3 80095ca: 0c1b lsrs r3, r3, #16 80095cc: b29b uxth r3, r3 80095ce: 60bb str r3, [r7, #8] CAN_FilterInitStructure.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, 0, BN_CMD_EXSTA), CAN_RTR_REMOTE)); // É趨µÚÒ»¸ö¹ýÂËÆ÷µÍ16λ 80095d0: 2346 movs r3, #70 ; 0x46 80095d2: 60fb str r3, [r7, #12] CAN_FilterInitStructure.FilterMaskIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // É趨µÚ¶þ¸ö¹ýÂËÆ÷¸ß16λ 80095d4: 4b3b ldr r3, [pc, #236] ; (80096c4 ) 80095d6: 791b ldrb r3, [r3, #4] 80095d8: 061b lsls r3, r3, #24 80095da: f003 52f8 and.w r2, r3, #520093696 ; 0x1f000000 80095de: 4b39 ldr r3, [pc, #228] ; (80096c4 ) 80095e0: 795b ldrb r3, [r3, #5] 80095e2: 041b lsls r3, r3, #16 80095e4: 4313 orrs r3, r2 80095e6: 00db lsls r3, r3, #3 80095e8: 0c1b lsrs r3, r3, #16 80095ea: b29b uxth r3, r3 80095ec: 613b str r3, [r7, #16] CAN_FilterInitStructure.FilterMaskIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, 0, BN_CMD_EXSTA), CAN_RTR_DATA)); // É趨µÚ¶þ¸ö¹ýÂËÆ÷µÍ16λ 80095ee: 2344 movs r3, #68 ; 0x44 80095f0: 617b str r3, [r7, #20] CAN_FilterInitStructure.FilterFIFOAssignment = fifo; // ¹ØÁªµ½½ÓÊÕFIFO 80095f2: 79fb ldrb r3, [r7, #7] 80095f4: 61bb str r3, [r7, #24] CAN_FilterInitStructure.FilterActivation = ENABLE; // ʹÄܹýÂËÆ÷ 80095f6: 2301 movs r3, #1 80095f8: 62bb str r3, [r7, #40] ; 0x28 HAL_CAN_ConfigFilter(&HCAN,&CAN_FilterInitStructure); // дÈëÉèÖà 80095fa: f107 0308 add.w r3, r7, #8 80095fe: 4619 mov r1, r3 8009600: 4831 ldr r0, [pc, #196] ; (80096c8 ) 8009602: f7f8 f81e bl 8001642 // ¹ã²¥ÃüÁԶ³ÌÖ¡ºÍÊý¾ÝÖ¡ CAN_FilterInitStructure.FilterBank = 1; // ÉèÖùýÂËÆ÷×é1£¬·¶Î§Îª0~13 8009606: 2301 movs r3, #1 8009608: 61fb str r3, [r7, #28] CAN_FilterInitStructure.FilterMode = CAN_FILTERMODE_IDLIST; // ¹ýÂËÆ÷×é1Ϊ±êʶ·ûÁбíģʽ 800960a: 2301 movs r3, #1 800960c: 623b str r3, [r7, #32] CAN_FilterInitStructure.FilterScale = CAN_FILTERSCALE_32BIT; // ¹ýÂËÆ÷×é1λ¿íΪ32λ 800960e: 2301 movs r3, #1 8009610: 627b str r3, [r7, #36] ; 0x24 CAN_FilterInitStructure.FilterIdHigh = HIWORD(MAKE_FILTER(BROADCAST_EXID, CAN_RTR_REMOTE)); // É趨µÚÈý¸ö¹ýÂËÆ÷¸ß16λ 8009612: 2300 movs r3, #0 8009614: 60bb str r3, [r7, #8] CAN_FilterInitStructure.FilterIdLow = LOWORD(MAKE_FILTER(BROADCAST_EXID, CAN_RTR_REMOTE)); // É趨µÚÈý¸ö¹ýÂËÆ÷µÍ16λ 8009616: 2306 movs r3, #6 8009618: 60fb str r3, [r7, #12] CAN_FilterInitStructure.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT, CAN_RTR_DATA)); // É趨µÚËĸö¹ýÂËÆ÷¸ß16λ 800961a: f44f 4378 mov.w r3, #63488 ; 0xf800 800961e: 613b str r3, [r7, #16] CAN_FilterInitStructure.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT, CAN_RTR_DATA)); // É趨µÚËĸö¹ýÂËÆ÷µÍ16λ 8009620: 2304 movs r3, #4 8009622: 617b str r3, [r7, #20] CAN_FilterInitStructure.FilterFIFOAssignment = fifo; // ¹ØÁªµ½½ÓÊÕFIFO 8009624: 79fb ldrb r3, [r7, #7] 8009626: 61bb str r3, [r7, #24] CAN_FilterInitStructure.FilterActivation = ENABLE; // ʹÄܹýÂËÆ÷ 8009628: 2301 movs r3, #1 800962a: 62bb str r3, [r7, #40] ; 0x28 HAL_CAN_ConfigFilter(&HCAN,&CAN_FilterInitStructure); // дÈëÉèÖà 800962c: f107 0308 add.w r3, r7, #8 8009630: 4619 mov r1, r3 8009632: 4825 ldr r0, [pc, #148] ; (80096c8 ) 8009634: f7f8 f805 bl 8001642 // Õë¶Ô±¾ÀàÉ豸µÄËùÓÐIDµÄ¹ã²¥µÄÔ¶³ÌÖ¡ºÍÊý¾ÝÖ¡ CAN_FilterInitStructure.FilterBank = 2; // ÉèÖùýÂËÆ÷×é2£¬·¶Î§Îª0~13 8009638: 2302 movs r3, #2 800963a: 61fb str r3, [r7, #28] CAN_FilterInitStructure.FilterMode = CAN_FILTERMODE_IDLIST; // ¹ýÂËÆ÷×é2Ϊ±êʶ·ûÆÁ±Îλģʽ 800963c: 2301 movs r3, #1 800963e: 623b str r3, [r7, #32] CAN_FilterInitStructure.FilterScale = CAN_FILTERSCALE_32BIT; // ¹ýÂËÆ÷λ¿íΪ1¸ö32λ¹ýÂËÆ÷ 8009640: 2301 movs r3, #1 8009642: 627b str r3, [r7, #36] ; 0x24 CAN_FilterInitStructure.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, BN_ID_BROADCAST, 0, 0), 0)); // É趨¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱΪµÚÒ»¸ö£© 8009644: 4b1f ldr r3, [pc, #124] ; (80096c4 ) 8009646: 791b ldrb r3, [r3, #4] 8009648: 06db lsls r3, r3, #27 800964a: 0c1b lsrs r3, r3, #16 800964c: b29b uxth r3, r3 800964e: 60bb str r3, [r7, #8] CAN_FilterInitStructure.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, BN_ID_BROADCAST, 0, 0), 0)); // É趨¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱΪµÚ¶þ¸ö£© 8009650: 2304 movs r3, #4 8009652: 60fb str r3, [r7, #12] CAN_FilterInitStructure.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_TID, 0)); // É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱΪµÚÒ»¸ö£© 8009654: f64f 73f8 movw r3, #65528 ; 0xfff8 8009658: 613b str r3, [r7, #16] CAN_FilterInitStructure.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_TID, 0)); // É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱΪµÚ¶þ¸ö) 800965a: 2304 movs r3, #4 800965c: 617b str r3, [r7, #20] CAN_FilterInitStructure.FilterFIFOAssignment = fifo; // ¹ØÁªµ½½ÓÊÕFIFO 800965e: 79fb ldrb r3, [r7, #7] 8009660: 61bb str r3, [r7, #24] CAN_FilterInitStructure.FilterActivation = ENABLE; // ʹÄܹýÂËÆ÷ 8009662: 2301 movs r3, #1 8009664: 62bb str r3, [r7, #40] ; 0x28 HAL_CAN_ConfigFilter(&HCAN,&CAN_FilterInitStructure); // дÈëÉèÖà 8009666: f107 0308 add.w r3, r7, #8 800966a: 4619 mov r1, r3 800966c: 4816 ldr r0, [pc, #88] ; (80096c8 ) 800966e: f7f7 ffe8 bl 8001642 // Õë¶Ô±¾ÀàÉ豸µÄ±¾½Úµã¿ØÖƵÄÔ¶³ÌÖ¡ºÍÊý¾ÝÖ¡ CAN_FilterInitStructure.FilterBank = 3; // ÉèÖùýÂËÆ÷×é2£¬·¶Î§Îª0~13 8009672: 2303 movs r3, #3 8009674: 61fb str r3, [r7, #28] CAN_FilterInitStructure.FilterMode = CAN_FILTERMODE_IDLIST; // ¹ýÂËÆ÷×é2Ϊ±êʶ·ûÆÁ±Îλģʽ 8009676: 2301 movs r3, #1 8009678: 623b str r3, [r7, #32] CAN_FilterInitStructure.FilterScale = CAN_FILTERSCALE_32BIT; // ¹ýÂËÆ÷λ¿íΪ1¸ö32λ¹ýÂËÆ÷ 800967a: 2301 movs r3, #1 800967c: 627b str r3, [r7, #36] ; 0x24 CAN_FilterInitStructure.FilterIdHigh = HIWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, 0, 0), 0)); // É趨¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱΪµÚÒ»¸ö£© 800967e: 4b11 ldr r3, [pc, #68] ; (80096c4 ) 8009680: 791b ldrb r3, [r3, #4] 8009682: 061b lsls r3, r3, #24 8009684: f003 52f8 and.w r2, r3, #520093696 ; 0x1f000000 8009688: 4b0e ldr r3, [pc, #56] ; (80096c4 ) 800968a: 795b ldrb r3, [r3, #5] 800968c: 041b lsls r3, r3, #16 800968e: 4313 orrs r3, r2 8009690: 00db lsls r3, r3, #3 8009692: 0c1b lsrs r3, r3, #16 8009694: b29b uxth r3, r3 8009696: 60bb str r3, [r7, #8] CAN_FilterInitStructure.FilterIdLow = LOWORD(MAKE_FILTER(MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, 0, 0), 0)); // É趨¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱΪµÚ¶þ¸ö£© 8009698: 2304 movs r3, #4 800969a: 60fb str r3, [r7, #12] CAN_FilterInitStructure.FilterMaskIdHigh = HIWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_TID, 0)); // É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆä¸ß¶Î룬16λλ¿íʱΪµÚÒ»¸ö£© 800969c: f64f 73f8 movw r3, #65528 ; 0xfff8 80096a0: 613b str r3, [r7, #16] CAN_FilterInitStructure.FilterMaskIdLow = LOWORD(MAKE_FILTER(BNMASK_PRT|BNMASK_TID, 0)); // É趨¹ýÂËÆ÷ÆÁ±Î±êʶ·û»òÕß¹ýÂËÆ÷±êʶ·û£¨32λλ¿íʱΪÆäµÍ¶Î룬16λλ¿íʱΪµÚ¶þ¸ö) 80096a2: 2304 movs r3, #4 80096a4: 617b str r3, [r7, #20] CAN_FilterInitStructure.FilterFIFOAssignment = fifo; // ¹ØÁªµ½½ÓÊÕFIFO 80096a6: 79fb ldrb r3, [r7, #7] 80096a8: 61bb str r3, [r7, #24] CAN_FilterInitStructure.FilterActivation = ENABLE; // ʹÄܹýÂËÆ÷ 80096aa: 2301 movs r3, #1 80096ac: 62bb str r3, [r7, #40] ; 0x28 HAL_CAN_ConfigFilter(&HCAN,&CAN_FilterInitStructure); 80096ae: f107 0308 add.w r3, r7, #8 80096b2: 4619 mov r1, r3 80096b4: 4804 ldr r0, [pc, #16] ; (80096c8 ) 80096b6: f7f7 ffc4 bl 8001642 } 80096ba: bf00 nop 80096bc: 3730 adds r7, #48 ; 0x30 80096be: 46bd mov sp, r7 80096c0: bd80 pop {r7, pc} 80096c2: bf00 nop 80096c4: 20003c94 .word 0x20003c94 80096c8: 2000058c .word 0x2000058c 080096cc : //------------------------------------------------------------------------------- void CanBusTask(void) { 80096cc: b580 push {r7, lr} 80096ce: b098 sub sp, #96 ; 0x60 80096d0: af00 add r7, sp, #0 int sendflag; CanRxMsg rxMsg; CanTxMsg txMsg; int dev, tid, sid, cmd; sendflag = 0; 80096d2: 2300 movs r3, #0 80096d4: 65fb str r3, [r7, #92] ; 0x5c // ¼ì²éCANÊý¾Ý rslt = GetACanDataPacket(&rxMsg); 80096d6: f107 0324 add.w r3, r7, #36 ; 0x24 80096da: 4618 mov r0, r3 80096dc: f7f9 fe4e bl 800337c 80096e0: 6578 str r0, [r7, #84] ; 0x54 if (rslt == 0) 80096e2: 6d7b ldr r3, [r7, #84] ; 0x54 80096e4: 2b00 cmp r3, #0 80096e6: d16c bne.n 80097c2 { dev = GET_PRT_FROM_EXID(rxMsg.canRxhead.ExtId); 80096e8: 6abb ldr r3, [r7, #40] ; 0x28 80096ea: 0e1b lsrs r3, r3, #24 80096ec: b2db uxtb r3, r3 80096ee: f003 031f and.w r3, r3, #31 80096f2: 653b str r3, [r7, #80] ; 0x50 tid = GET_TID_FROM_EXID(rxMsg.canRxhead.ExtId); 80096f4: 6abb ldr r3, [r7, #40] ; 0x28 80096f6: 0c1b lsrs r3, r3, #16 80096f8: b2db uxtb r3, r3 80096fa: 64fb str r3, [r7, #76] ; 0x4c sid = GET_SID_FROM_EXID(rxMsg.canRxhead.ExtId); 80096fc: 6abb ldr r3, [r7, #40] ; 0x28 80096fe: 0a1b lsrs r3, r3, #8 8009700: b2db uxtb r3, r3 8009702: 65bb str r3, [r7, #88] ; 0x58 cmd = GET_CMD_FROM_EXID(rxMsg.canRxhead.ExtId); 8009704: 6abb ldr r3, [r7, #40] ; 0x28 8009706: b2db uxtb r3, r3 8009708: 64bb str r3, [r7, #72] ; 0x48 if (rxMsg.canRxhead.RTR == CAN_RTR_REMOTE) // Ô¶³ÌÖ¡ 800970a: 6b3b ldr r3, [r7, #48] ; 0x30 800970c: 2b02 cmp r3, #2 800970e: d125 bne.n 800975c { if ((dev == BN_PROTOCOL_ALL || dev == g_workCtrl.device) && // È«²¿É豸»ò±¾É豸 8009710: 6d3b ldr r3, [r7, #80] ; 0x50 8009712: 2b00 cmp r3, #0 8009714: d005 beq.n 8009722 8009716: 4b53 ldr r3, [pc, #332] ; (8009864 ) 8009718: 791b ldrb r3, [r3, #4] 800971a: 461a mov r2, r3 800971c: 6d3b ldr r3, [r7, #80] ; 0x50 800971e: 4293 cmp r3, r2 8009720: d116 bne.n 8009750 8009722: 6cfb ldr r3, [r7, #76] ; 0x4c 8009724: 2b00 cmp r3, #0 8009726: d005 beq.n 8009734 (tid == BN_ID_BROADCAST || tid == g_workCtrl.nodeId) ) // È«²¿ID»ò±¾°å 8009728: 4b4e ldr r3, [pc, #312] ; (8009864 ) 800972a: 795b ldrb r3, [r3, #5] 800972c: 461a mov r2, r3 800972e: 6cfb ldr r3, [r7, #76] ; 0x4c 8009730: 4293 cmp r3, r2 8009732: d10d bne.n 8009750 { if (cmd == BN_CMD_EXSTA) // ״̬ÃüÁî 8009734: 6cbb ldr r3, [r7, #72] ; 0x48 8009736: 2b08 cmp r3, #8 8009738: d105 bne.n 8009746 { sendflag = 1; // ·¢ËÍ״̬ 800973a: 2301 movs r3, #1 800973c: 65fb str r3, [r7, #92] ; 0x5c printf("receive sta request packet\r\n"); 800973e: 484a ldr r0, [pc, #296] ; (8009868 ) 8009740: f000 f958 bl 80099f4 if (cmd == BN_CMD_EXSTA) // ״̬ÃüÁî 8009744: e03d b.n 80097c2 } else { printf("other Remote cmd, cmd=0x%x\r\n", cmd); 8009746: 6cb9 ldr r1, [r7, #72] ; 0x48 8009748: 4848 ldr r0, [pc, #288] ; (800986c ) 800974a: f000 f8df bl 800990c if (cmd == BN_CMD_EXSTA) // ״̬ÃüÁî 800974e: e038 b.n 80097c2 } } else { printf("other Remote packet, exid=0x%x\r\n", (int)rxMsg.canRxhead.ExtId); 8009750: 6abb ldr r3, [r7, #40] ; 0x28 8009752: 4619 mov r1, r3 8009754: 4846 ldr r0, [pc, #280] ; (8009870 ) 8009756: f000 f8d9 bl 800990c 800975a: e032 b.n 80097c2 } } else // if (rxMsg.canRxhead.RTR == CAN_RTR_DATA) // Êý¾ÝÖ¡ { if ((dev == BN_PROTOCOL_ALL ||dev == g_workCtrl.device) && // exa1 800975c: 6d3b ldr r3, [r7, #80] ; 0x50 800975e: 2b00 cmp r3, #0 8009760: d005 beq.n 800976e 8009762: 4b40 ldr r3, [pc, #256] ; (8009864 ) 8009764: 791b ldrb r3, [r3, #4] 8009766: 461a mov r2, r3 8009768: 6d3b ldr r3, [r7, #80] ; 0x50 800976a: 4293 cmp r3, r2 800976c: d123 bne.n 80097b6 800976e: 6cfb ldr r3, [r7, #76] ; 0x4c 8009770: 2b00 cmp r3, #0 8009772: d005 beq.n 8009780 (tid == BN_ID_BROADCAST || tid == g_workCtrl.nodeId) ) // È«²¿ID»ò±¾°å 8009774: 4b3b ldr r3, [pc, #236] ; (8009864 ) 8009776: 795b ldrb r3, [r3, #5] 8009778: 461a mov r2, r3 800977a: 6cfb ldr r3, [r7, #76] ; 0x4c 800977c: 4293 cmp r3, r2 800977e: d11a bne.n 80097b6 { if (cmd == BN_CMD_EXCTRL || // ¿ØÖÆÃüÁî 8009780: 6cbb ldr r3, [r7, #72] ; 0x48 8009782: 2b07 cmp r3, #7 8009784: d002 beq.n 800978c cmd == BN_CMD_TRAVERSE || // ±éÀúÃüÁî 8009786: 6cbb ldr r3, [r7, #72] ; 0x48 8009788: 2b01 cmp r3, #1 800978a: d10f bne.n 80097ac 0 ) { g_workCtrl.curBdCtrl.ctrlCmd.cancomm.exId.id = rxMsg.canRxhead.ExtId; 800978c: 6abb ldr r3, [r7, #40] ; 0x28 800978e: 4a35 ldr r2, [pc, #212] ; (8009864 ) 8009790: 60d3 str r3, [r2, #12] memcpy(g_workCtrl.curBdCtrl.ctrlCmd.cancomm.data.buff, rxMsg.data, CAN_DATA_LEN); // Ìî³äÊý¾Ý³¡ 8009792: 4b34 ldr r3, [pc, #208] ; (8009864 ) 8009794: 3310 adds r3, #16 8009796: f107 0240 add.w r2, r7, #64 ; 0x40 800979a: e892 0003 ldmia.w r2, {r0, r1} 800979e: e883 0003 stmia.w r3, {r0, r1} g_workCtrl.curBdCtrl.cmdFlag = 1; // ÐÂÃüÁî±êÖ¾ 80097a2: 4b30 ldr r3, [pc, #192] ; (8009864 ) 80097a4: 2201 movs r2, #1 80097a6: f883 2084 strb.w r2, [r3, #132] ; 0x84 if (cmd == BN_CMD_EXCTRL || // ¿ØÖÆÃüÁî 80097aa: e00a b.n 80097c2 // printf("get ex ctrl cmd\r\n"); } else { printf("get other data cmd=0x%x\r\n", cmd); 80097ac: 6cb9 ldr r1, [r7, #72] ; 0x48 80097ae: 4831 ldr r0, [pc, #196] ; (8009874 ) 80097b0: f000 f8ac bl 800990c if (cmd == BN_CMD_EXCTRL || // ¿ØÖÆÃüÁî 80097b4: e005 b.n 80097c2 } } else { printf("other data packet, dev=0x%x, tid=%d, exid=0x%x\r\n", dev, (int)tid, (int)rxMsg.canRxhead.ExtId); 80097b6: 6abb ldr r3, [r7, #40] ; 0x28 80097b8: 6cfa ldr r2, [r7, #76] ; 0x4c 80097ba: 6d39 ldr r1, [r7, #80] ; 0x50 80097bc: 482e ldr r0, [pc, #184] ; (8009878 ) 80097be: f000 f8a5 bl 800990c } } } if (sendflag == 0) 80097c2: 6dfb ldr r3, [r7, #92] ; 0x5c 80097c4: 2b00 cmp r3, #0 80097c6: d102 bne.n 80097ce { sid = g_workCtrl.hostId; 80097c8: 4b26 ldr r3, [pc, #152] ; (8009864 ) 80097ca: 79db ldrb r3, [r3, #7] 80097cc: 65bb str r3, [r7, #88] ; 0x58 } // ·¢ËÍ״̬ÐÅÏ¢ if (g_workCtrl.curBdCtrl.staFlag != 0) 80097ce: 4b25 ldr r3, [pc, #148] ; (8009864 ) 80097d0: f893 3085 ldrb.w r3, [r3, #133] ; 0x85 80097d4: 2b00 cmp r3, #0 80097d6: d005 beq.n 80097e4 { g_workCtrl.curBdCtrl.staFlag = 0; 80097d8: 4b22 ldr r3, [pc, #136] ; (8009864 ) 80097da: 2200 movs r2, #0 80097dc: f883 2085 strb.w r2, [r3, #133] ; 0x85 sendflag = 1; // ·¢ËÍ״̬ 80097e0: 2301 movs r3, #1 80097e2: 65fb str r3, [r7, #92] ; 0x5c } if (sendflag == 1) 80097e4: 6dfb ldr r3, [r7, #92] ; 0x5c 80097e6: 2b01 cmp r3, #1 80097e8: d137 bne.n 800985a { if(g_workCtrl.workSta == 1) 80097ea: 4b1e ldr r3, [pc, #120] ; (8009864 ) 80097ec: 681b ldr r3, [r3, #0] 80097ee: 2b01 cmp r3, #1 80097f0: d110 bne.n 8009814 { txMsg.canTxhead.ExtId = MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, sid, BN_CMD_TRAVERSE); // ״̬ÃüÁî 80097f2: 4b1c ldr r3, [pc, #112] ; (8009864 ) 80097f4: 791b ldrb r3, [r3, #4] 80097f6: 061b lsls r3, r3, #24 80097f8: f003 52f8 and.w r2, r3, #520093696 ; 0x1f000000 80097fc: 4b19 ldr r3, [pc, #100] ; (8009864 ) 80097fe: 795b ldrb r3, [r3, #5] 8009800: 041b lsls r3, r3, #16 8009802: 431a orrs r2, r3 8009804: 6dbb ldr r3, [r7, #88] ; 0x58 8009806: 021b lsls r3, r3, #8 8009808: b29b uxth r3, r3 800980a: 4313 orrs r3, r2 800980c: f043 0301 orr.w r3, r3, #1 8009810: 60bb str r3, [r7, #8] 8009812: e00f b.n 8009834 } else { txMsg.canTxhead.ExtId = MAKE_EXID(g_workCtrl.device, g_workCtrl.nodeId, sid, BN_CMD_EXSTA); // ״̬ÃüÁî 8009814: 4b13 ldr r3, [pc, #76] ; (8009864 ) 8009816: 791b ldrb r3, [r3, #4] 8009818: 061b lsls r3, r3, #24 800981a: f003 52f8 and.w r2, r3, #520093696 ; 0x1f000000 800981e: 4b11 ldr r3, [pc, #68] ; (8009864 ) 8009820: 795b ldrb r3, [r3, #5] 8009822: 041b lsls r3, r3, #16 8009824: 431a orrs r2, r3 8009826: 6dbb ldr r3, [r7, #88] ; 0x58 8009828: 021b lsls r3, r3, #8 800982a: b29b uxth r3, r3 800982c: 4313 orrs r3, r2 800982e: f043 0308 orr.w r3, r3, #8 8009832: 60bb str r3, [r7, #8] } txMsg.canTxhead.RTR = CAN_RTR_DATA; // Êý¾ÝÖ¡ 8009834: 2300 movs r3, #0 8009836: 613b str r3, [r7, #16] txMsg.canTxhead.IDE = CAN_ID_EXT; // À©Õ¹Ö¡ 8009838: 2304 movs r3, #4 800983a: 60fb str r3, [r7, #12] txMsg.canTxhead.DLC = CAN_DATA_LEN; // Êý¾Ý³¡³¤¶È 800983c: 2308 movs r3, #8 800983e: 617b str r3, [r7, #20] memcpy(txMsg.data, g_workCtrl.curBdCtrl.exbSta.cancomm.data.buff, CAN_DATA_LEN); // Ìî³äÊý¾Ý³¡ 8009840: 4a08 ldr r2, [pc, #32] ; (8009864 ) 8009842: f107 031c add.w r3, r7, #28 8009846: 3220 adds r2, #32 8009848: e892 0003 ldmia.w r2, {r0, r1} 800984c: e883 0003 stmia.w r3, {r0, r1} rslt = SendACANDataPacket(&txMsg); 8009850: 1d3b adds r3, r7, #4 8009852: 4618 mov r0, r3 8009854: f7f9 fd1a bl 800328c 8009858: 6578 str r0, [r7, #84] ; 0x54 //printf("send sta data by can, exid=0x%x\r\n", (int)txMsg.ExtId); } } 800985a: bf00 nop 800985c: 3760 adds r7, #96 ; 0x60 800985e: 46bd mov sp, r7 8009860: bd80 pop {r7, pc} 8009862: bf00 nop 8009864: 20003c94 .word 0x20003c94 8009868: 0800ae20 .word 0x0800ae20 800986c: 0800ae3c .word 0x0800ae3c 8009870: 0800ae5c .word 0x0800ae5c 8009874: 0800ae80 .word 0x0800ae80 8009878: 0800ae9c .word 0x0800ae9c 0800987c : SET_ALL_INT(); #endif } void MainTasks(void) { 800987c: b580 push {r7, lr} 800987e: af00 add r7, sp, #0 #if (CUR_CORE_BOARD == CORE_BOARD_BOOT) BootMainTask(); // Æô¶¯´úÂë #else AppMainTask(); // Ó¦ÓôúÂë 8009880: f7fd f834 bl 80068ec #endif } 8009884: bf00 nop 8009886: bd80 pop {r7, pc} 08009888 : 8009888: 220a movs r2, #10 800988a: 2100 movs r1, #0 800988c: f000 b93e b.w 8009b0c 08009890 <__errno>: 8009890: 4b01 ldr r3, [pc, #4] ; (8009898 <__errno+0x8>) 8009892: 6818 ldr r0, [r3, #0] 8009894: 4770 bx lr 8009896: bf00 nop 8009898: 2000036c .word 0x2000036c 0800989c <__libc_init_array>: 800989c: b570 push {r4, r5, r6, lr} 800989e: 2500 movs r5, #0 80098a0: 4e0c ldr r6, [pc, #48] ; (80098d4 <__libc_init_array+0x38>) 80098a2: 4c0d ldr r4, [pc, #52] ; (80098d8 <__libc_init_array+0x3c>) 80098a4: 1ba4 subs r4, r4, r6 80098a6: 10a4 asrs r4, r4, #2 80098a8: 42a5 cmp r5, r4 80098aa: d109 bne.n 80098c0 <__libc_init_array+0x24> 80098ac: f001 f83c bl 800a928 <_init> 80098b0: 2500 movs r5, #0 80098b2: 4e0a ldr r6, [pc, #40] ; (80098dc <__libc_init_array+0x40>) 80098b4: 4c0a ldr r4, [pc, #40] ; (80098e0 <__libc_init_array+0x44>) 80098b6: 1ba4 subs r4, r4, r6 80098b8: 10a4 asrs r4, r4, #2 80098ba: 42a5 cmp r5, r4 80098bc: d105 bne.n 80098ca <__libc_init_array+0x2e> 80098be: bd70 pop {r4, r5, r6, pc} 80098c0: f856 3025 ldr.w r3, [r6, r5, lsl #2] 80098c4: 4798 blx r3 80098c6: 3501 adds r5, #1 80098c8: e7ee b.n 80098a8 <__libc_init_array+0xc> 80098ca: f856 3025 ldr.w r3, [r6, r5, lsl #2] 80098ce: 4798 blx r3 80098d0: 3501 adds r5, #1 80098d2: e7f2 b.n 80098ba <__libc_init_array+0x1e> 80098d4: 0800b08c .word 0x0800b08c 80098d8: 0800b08c .word 0x0800b08c 80098dc: 0800b08c .word 0x0800b08c 80098e0: 0800b090 .word 0x0800b090 080098e4 : 80098e4: b510 push {r4, lr} 80098e6: 1e43 subs r3, r0, #1 80098e8: 440a add r2, r1 80098ea: 4291 cmp r1, r2 80098ec: d100 bne.n 80098f0 80098ee: bd10 pop {r4, pc} 80098f0: f811 4b01 ldrb.w r4, [r1], #1 80098f4: f803 4f01 strb.w r4, [r3, #1]! 80098f8: e7f7 b.n 80098ea 080098fa : 80098fa: 4603 mov r3, r0 80098fc: 4402 add r2, r0 80098fe: 4293 cmp r3, r2 8009900: d100 bne.n 8009904 8009902: 4770 bx lr 8009904: f803 1b01 strb.w r1, [r3], #1 8009908: e7f9 b.n 80098fe ... 0800990c : 800990c: b40f push {r0, r1, r2, r3} 800990e: 4b0a ldr r3, [pc, #40] ; (8009938 ) 8009910: b513 push {r0, r1, r4, lr} 8009912: 681c ldr r4, [r3, #0] 8009914: b124 cbz r4, 8009920 8009916: 69a3 ldr r3, [r4, #24] 8009918: b913 cbnz r3, 8009920 800991a: 4620 mov r0, r4 800991c: f000 fabc bl 8009e98 <__sinit> 8009920: ab05 add r3, sp, #20 8009922: 9a04 ldr r2, [sp, #16] 8009924: 68a1 ldr r1, [r4, #8] 8009926: 4620 mov r0, r4 8009928: 9301 str r3, [sp, #4] 800992a: f000 fc87 bl 800a23c <_vfiprintf_r> 800992e: b002 add sp, #8 8009930: e8bd 4010 ldmia.w sp!, {r4, lr} 8009934: b004 add sp, #16 8009936: 4770 bx lr 8009938: 2000036c .word 0x2000036c 0800993c <_puts_r>: 800993c: b570 push {r4, r5, r6, lr} 800993e: 460e mov r6, r1 8009940: 4605 mov r5, r0 8009942: b118 cbz r0, 800994c <_puts_r+0x10> 8009944: 6983 ldr r3, [r0, #24] 8009946: b90b cbnz r3, 800994c <_puts_r+0x10> 8009948: f000 faa6 bl 8009e98 <__sinit> 800994c: 69ab ldr r3, [r5, #24] 800994e: 68ac ldr r4, [r5, #8] 8009950: b913 cbnz r3, 8009958 <_puts_r+0x1c> 8009952: 4628 mov r0, r5 8009954: f000 faa0 bl 8009e98 <__sinit> 8009958: 4b23 ldr r3, [pc, #140] ; (80099e8 <_puts_r+0xac>) 800995a: 429c cmp r4, r3 800995c: d117 bne.n 800998e <_puts_r+0x52> 800995e: 686c ldr r4, [r5, #4] 8009960: 89a3 ldrh r3, [r4, #12] 8009962: 071b lsls r3, r3, #28 8009964: d51d bpl.n 80099a2 <_puts_r+0x66> 8009966: 6923 ldr r3, [r4, #16] 8009968: b1db cbz r3, 80099a2 <_puts_r+0x66> 800996a: 3e01 subs r6, #1 800996c: 68a3 ldr r3, [r4, #8] 800996e: f816 1f01 ldrb.w r1, [r6, #1]! 8009972: 3b01 subs r3, #1 8009974: 60a3 str r3, [r4, #8] 8009976: b9e9 cbnz r1, 80099b4 <_puts_r+0x78> 8009978: 2b00 cmp r3, #0 800997a: da2e bge.n 80099da <_puts_r+0x9e> 800997c: 4622 mov r2, r4 800997e: 210a movs r1, #10 8009980: 4628 mov r0, r5 8009982: f000 f8d9 bl 8009b38 <__swbuf_r> 8009986: 3001 adds r0, #1 8009988: d011 beq.n 80099ae <_puts_r+0x72> 800998a: 200a movs r0, #10 800998c: e011 b.n 80099b2 <_puts_r+0x76> 800998e: 4b17 ldr r3, [pc, #92] ; (80099ec <_puts_r+0xb0>) 8009990: 429c cmp r4, r3 8009992: d101 bne.n 8009998 <_puts_r+0x5c> 8009994: 68ac ldr r4, [r5, #8] 8009996: e7e3 b.n 8009960 <_puts_r+0x24> 8009998: 4b15 ldr r3, [pc, #84] ; (80099f0 <_puts_r+0xb4>) 800999a: 429c cmp r4, r3 800999c: bf08 it eq 800999e: 68ec ldreq r4, [r5, #12] 80099a0: e7de b.n 8009960 <_puts_r+0x24> 80099a2: 4621 mov r1, r4 80099a4: 4628 mov r0, r5 80099a6: f000 f919 bl 8009bdc <__swsetup_r> 80099aa: 2800 cmp r0, #0 80099ac: d0dd beq.n 800996a <_puts_r+0x2e> 80099ae: f04f 30ff mov.w r0, #4294967295 80099b2: bd70 pop {r4, r5, r6, pc} 80099b4: 2b00 cmp r3, #0 80099b6: da04 bge.n 80099c2 <_puts_r+0x86> 80099b8: 69a2 ldr r2, [r4, #24] 80099ba: 429a cmp r2, r3 80099bc: dc06 bgt.n 80099cc <_puts_r+0x90> 80099be: 290a cmp r1, #10 80099c0: d004 beq.n 80099cc <_puts_r+0x90> 80099c2: 6823 ldr r3, [r4, #0] 80099c4: 1c5a adds r2, r3, #1 80099c6: 6022 str r2, [r4, #0] 80099c8: 7019 strb r1, [r3, #0] 80099ca: e7cf b.n 800996c <_puts_r+0x30> 80099cc: 4622 mov r2, r4 80099ce: 4628 mov r0, r5 80099d0: f000 f8b2 bl 8009b38 <__swbuf_r> 80099d4: 3001 adds r0, #1 80099d6: d1c9 bne.n 800996c <_puts_r+0x30> 80099d8: e7e9 b.n 80099ae <_puts_r+0x72> 80099da: 200a movs r0, #10 80099dc: 6823 ldr r3, [r4, #0] 80099de: 1c5a adds r2, r3, #1 80099e0: 6022 str r2, [r4, #0] 80099e2: 7018 strb r0, [r3, #0] 80099e4: e7e5 b.n 80099b2 <_puts_r+0x76> 80099e6: bf00 nop 80099e8: 0800af0c .word 0x0800af0c 80099ec: 0800af2c .word 0x0800af2c 80099f0: 0800aeec .word 0x0800aeec 080099f4 : 80099f4: 4b02 ldr r3, [pc, #8] ; (8009a00 ) 80099f6: 4601 mov r1, r0 80099f8: 6818 ldr r0, [r3, #0] 80099fa: f7ff bf9f b.w 800993c <_puts_r> 80099fe: bf00 nop 8009a00: 2000036c .word 0x2000036c 08009a04 : 8009a04: 4603 mov r3, r0 8009a06: f811 2b01 ldrb.w r2, [r1], #1 8009a0a: f803 2b01 strb.w r2, [r3], #1 8009a0e: 2a00 cmp r2, #0 8009a10: d1f9 bne.n 8009a06 8009a12: 4770 bx lr 08009a14 <_strtol_l.isra.0>: 8009a14: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} 8009a18: 4680 mov r8, r0 8009a1a: 4689 mov r9, r1 8009a1c: 4692 mov sl, r2 8009a1e: 461e mov r6, r3 8009a20: 460f mov r7, r1 8009a22: 463d mov r5, r7 8009a24: 9808 ldr r0, [sp, #32] 8009a26: f815 4b01 ldrb.w r4, [r5], #1 8009a2a: f000 fabf bl 8009fac <__locale_ctype_ptr_l> 8009a2e: 4420 add r0, r4 8009a30: 7843 ldrb r3, [r0, #1] 8009a32: f013 0308 ands.w r3, r3, #8 8009a36: d132 bne.n 8009a9e <_strtol_l.isra.0+0x8a> 8009a38: 2c2d cmp r4, #45 ; 0x2d 8009a3a: d132 bne.n 8009aa2 <_strtol_l.isra.0+0x8e> 8009a3c: 2201 movs r2, #1 8009a3e: 787c ldrb r4, [r7, #1] 8009a40: 1cbd adds r5, r7, #2 8009a42: 2e00 cmp r6, #0 8009a44: d05d beq.n 8009b02 <_strtol_l.isra.0+0xee> 8009a46: 2e10 cmp r6, #16 8009a48: d109 bne.n 8009a5e <_strtol_l.isra.0+0x4a> 8009a4a: 2c30 cmp r4, #48 ; 0x30 8009a4c: d107 bne.n 8009a5e <_strtol_l.isra.0+0x4a> 8009a4e: 782b ldrb r3, [r5, #0] 8009a50: f003 03df and.w r3, r3, #223 ; 0xdf 8009a54: 2b58 cmp r3, #88 ; 0x58 8009a56: d14f bne.n 8009af8 <_strtol_l.isra.0+0xe4> 8009a58: 2610 movs r6, #16 8009a5a: 786c ldrb r4, [r5, #1] 8009a5c: 3502 adds r5, #2 8009a5e: 2a00 cmp r2, #0 8009a60: bf14 ite ne 8009a62: f04f 4100 movne.w r1, #2147483648 ; 0x80000000 8009a66: f06f 4100 mvneq.w r1, #2147483648 ; 0x80000000 8009a6a: 2700 movs r7, #0 8009a6c: fbb1 fcf6 udiv ip, r1, r6 8009a70: 4638 mov r0, r7 8009a72: fb06 1e1c mls lr, r6, ip, r1 8009a76: f1a4 0330 sub.w r3, r4, #48 ; 0x30 8009a7a: 2b09 cmp r3, #9 8009a7c: d817 bhi.n 8009aae <_strtol_l.isra.0+0x9a> 8009a7e: 461c mov r4, r3 8009a80: 42a6 cmp r6, r4 8009a82: dd23 ble.n 8009acc <_strtol_l.isra.0+0xb8> 8009a84: 1c7b adds r3, r7, #1 8009a86: d007 beq.n 8009a98 <_strtol_l.isra.0+0x84> 8009a88: 4584 cmp ip, r0 8009a8a: d31c bcc.n 8009ac6 <_strtol_l.isra.0+0xb2> 8009a8c: d101 bne.n 8009a92 <_strtol_l.isra.0+0x7e> 8009a8e: 45a6 cmp lr, r4 8009a90: db19 blt.n 8009ac6 <_strtol_l.isra.0+0xb2> 8009a92: 2701 movs r7, #1 8009a94: fb00 4006 mla r0, r0, r6, r4 8009a98: f815 4b01 ldrb.w r4, [r5], #1 8009a9c: e7eb b.n 8009a76 <_strtol_l.isra.0+0x62> 8009a9e: 462f mov r7, r5 8009aa0: e7bf b.n 8009a22 <_strtol_l.isra.0+0xe> 8009aa2: 2c2b cmp r4, #43 ; 0x2b 8009aa4: bf04 itt eq 8009aa6: 1cbd addeq r5, r7, #2 8009aa8: 787c ldrbeq r4, [r7, #1] 8009aaa: 461a mov r2, r3 8009aac: e7c9 b.n 8009a42 <_strtol_l.isra.0+0x2e> 8009aae: f1a4 0341 sub.w r3, r4, #65 ; 0x41 8009ab2: 2b19 cmp r3, #25 8009ab4: d801 bhi.n 8009aba <_strtol_l.isra.0+0xa6> 8009ab6: 3c37 subs r4, #55 ; 0x37 8009ab8: e7e2 b.n 8009a80 <_strtol_l.isra.0+0x6c> 8009aba: f1a4 0361 sub.w r3, r4, #97 ; 0x61 8009abe: 2b19 cmp r3, #25 8009ac0: d804 bhi.n 8009acc <_strtol_l.isra.0+0xb8> 8009ac2: 3c57 subs r4, #87 ; 0x57 8009ac4: e7dc b.n 8009a80 <_strtol_l.isra.0+0x6c> 8009ac6: f04f 37ff mov.w r7, #4294967295 8009aca: e7e5 b.n 8009a98 <_strtol_l.isra.0+0x84> 8009acc: 1c7b adds r3, r7, #1 8009ace: d108 bne.n 8009ae2 <_strtol_l.isra.0+0xce> 8009ad0: 2322 movs r3, #34 ; 0x22 8009ad2: 4608 mov r0, r1 8009ad4: f8c8 3000 str.w r3, [r8] 8009ad8: f1ba 0f00 cmp.w sl, #0 8009adc: d107 bne.n 8009aee <_strtol_l.isra.0+0xda> 8009ade: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} 8009ae2: b102 cbz r2, 8009ae6 <_strtol_l.isra.0+0xd2> 8009ae4: 4240 negs r0, r0 8009ae6: f1ba 0f00 cmp.w sl, #0 8009aea: d0f8 beq.n 8009ade <_strtol_l.isra.0+0xca> 8009aec: b10f cbz r7, 8009af2 <_strtol_l.isra.0+0xde> 8009aee: f105 39ff add.w r9, r5, #4294967295 8009af2: f8ca 9000 str.w r9, [sl] 8009af6: e7f2 b.n 8009ade <_strtol_l.isra.0+0xca> 8009af8: 2430 movs r4, #48 ; 0x30 8009afa: 2e00 cmp r6, #0 8009afc: d1af bne.n 8009a5e <_strtol_l.isra.0+0x4a> 8009afe: 2608 movs r6, #8 8009b00: e7ad b.n 8009a5e <_strtol_l.isra.0+0x4a> 8009b02: 2c30 cmp r4, #48 ; 0x30 8009b04: d0a3 beq.n 8009a4e <_strtol_l.isra.0+0x3a> 8009b06: 260a movs r6, #10 8009b08: e7a9 b.n 8009a5e <_strtol_l.isra.0+0x4a> ... 08009b0c : 8009b0c: 4b08 ldr r3, [pc, #32] ; (8009b30 ) 8009b0e: b537 push {r0, r1, r2, r4, r5, lr} 8009b10: 681c ldr r4, [r3, #0] 8009b12: 4d08 ldr r5, [pc, #32] ; (8009b34 ) 8009b14: 6a23 ldr r3, [r4, #32] 8009b16: 2b00 cmp r3, #0 8009b18: bf08 it eq 8009b1a: 462b moveq r3, r5 8009b1c: 9300 str r3, [sp, #0] 8009b1e: 4613 mov r3, r2 8009b20: 460a mov r2, r1 8009b22: 4601 mov r1, r0 8009b24: 4620 mov r0, r4 8009b26: f7ff ff75 bl 8009a14 <_strtol_l.isra.0> 8009b2a: b003 add sp, #12 8009b2c: bd30 pop {r4, r5, pc} 8009b2e: bf00 nop 8009b30: 2000036c .word 0x2000036c 8009b34: 200003d0 .word 0x200003d0 08009b38 <__swbuf_r>: 8009b38: b5f8 push {r3, r4, r5, r6, r7, lr} 8009b3a: 460e mov r6, r1 8009b3c: 4614 mov r4, r2 8009b3e: 4605 mov r5, r0 8009b40: b118 cbz r0, 8009b4a <__swbuf_r+0x12> 8009b42: 6983 ldr r3, [r0, #24] 8009b44: b90b cbnz r3, 8009b4a <__swbuf_r+0x12> 8009b46: f000 f9a7 bl 8009e98 <__sinit> 8009b4a: 4b21 ldr r3, [pc, #132] ; (8009bd0 <__swbuf_r+0x98>) 8009b4c: 429c cmp r4, r3 8009b4e: d12a bne.n 8009ba6 <__swbuf_r+0x6e> 8009b50: 686c ldr r4, [r5, #4] 8009b52: 69a3 ldr r3, [r4, #24] 8009b54: 60a3 str r3, [r4, #8] 8009b56: 89a3 ldrh r3, [r4, #12] 8009b58: 071a lsls r2, r3, #28 8009b5a: d52e bpl.n 8009bba <__swbuf_r+0x82> 8009b5c: 6923 ldr r3, [r4, #16] 8009b5e: b363 cbz r3, 8009bba <__swbuf_r+0x82> 8009b60: 6923 ldr r3, [r4, #16] 8009b62: 6820 ldr r0, [r4, #0] 8009b64: b2f6 uxtb r6, r6 8009b66: 1ac0 subs r0, r0, r3 8009b68: 6963 ldr r3, [r4, #20] 8009b6a: 4637 mov r7, r6 8009b6c: 4283 cmp r3, r0 8009b6e: dc04 bgt.n 8009b7a <__swbuf_r+0x42> 8009b70: 4621 mov r1, r4 8009b72: 4628 mov r0, r5 8009b74: f000 f926 bl 8009dc4 <_fflush_r> 8009b78: bb28 cbnz r0, 8009bc6 <__swbuf_r+0x8e> 8009b7a: 68a3 ldr r3, [r4, #8] 8009b7c: 3001 adds r0, #1 8009b7e: 3b01 subs r3, #1 8009b80: 60a3 str r3, [r4, #8] 8009b82: 6823 ldr r3, [r4, #0] 8009b84: 1c5a adds r2, r3, #1 8009b86: 6022 str r2, [r4, #0] 8009b88: 701e strb r6, [r3, #0] 8009b8a: 6963 ldr r3, [r4, #20] 8009b8c: 4283 cmp r3, r0 8009b8e: d004 beq.n 8009b9a <__swbuf_r+0x62> 8009b90: 89a3 ldrh r3, [r4, #12] 8009b92: 07db lsls r3, r3, #31 8009b94: d519 bpl.n 8009bca <__swbuf_r+0x92> 8009b96: 2e0a cmp r6, #10 8009b98: d117 bne.n 8009bca <__swbuf_r+0x92> 8009b9a: 4621 mov r1, r4 8009b9c: 4628 mov r0, r5 8009b9e: f000 f911 bl 8009dc4 <_fflush_r> 8009ba2: b190 cbz r0, 8009bca <__swbuf_r+0x92> 8009ba4: e00f b.n 8009bc6 <__swbuf_r+0x8e> 8009ba6: 4b0b ldr r3, [pc, #44] ; (8009bd4 <__swbuf_r+0x9c>) 8009ba8: 429c cmp r4, r3 8009baa: d101 bne.n 8009bb0 <__swbuf_r+0x78> 8009bac: 68ac ldr r4, [r5, #8] 8009bae: e7d0 b.n 8009b52 <__swbuf_r+0x1a> 8009bb0: 4b09 ldr r3, [pc, #36] ; (8009bd8 <__swbuf_r+0xa0>) 8009bb2: 429c cmp r4, r3 8009bb4: bf08 it eq 8009bb6: 68ec ldreq r4, [r5, #12] 8009bb8: e7cb b.n 8009b52 <__swbuf_r+0x1a> 8009bba: 4621 mov r1, r4 8009bbc: 4628 mov r0, r5 8009bbe: f000 f80d bl 8009bdc <__swsetup_r> 8009bc2: 2800 cmp r0, #0 8009bc4: d0cc beq.n 8009b60 <__swbuf_r+0x28> 8009bc6: f04f 37ff mov.w r7, #4294967295 8009bca: 4638 mov r0, r7 8009bcc: bdf8 pop {r3, r4, r5, r6, r7, pc} 8009bce: bf00 nop 8009bd0: 0800af0c .word 0x0800af0c 8009bd4: 0800af2c .word 0x0800af2c 8009bd8: 0800aeec .word 0x0800aeec 08009bdc <__swsetup_r>: 8009bdc: 4b32 ldr r3, [pc, #200] ; (8009ca8 <__swsetup_r+0xcc>) 8009bde: b570 push {r4, r5, r6, lr} 8009be0: 681d ldr r5, [r3, #0] 8009be2: 4606 mov r6, r0 8009be4: 460c mov r4, r1 8009be6: b125 cbz r5, 8009bf2 <__swsetup_r+0x16> 8009be8: 69ab ldr r3, [r5, #24] 8009bea: b913 cbnz r3, 8009bf2 <__swsetup_r+0x16> 8009bec: 4628 mov r0, r5 8009bee: f000 f953 bl 8009e98 <__sinit> 8009bf2: 4b2e ldr r3, [pc, #184] ; (8009cac <__swsetup_r+0xd0>) 8009bf4: 429c cmp r4, r3 8009bf6: d10f bne.n 8009c18 <__swsetup_r+0x3c> 8009bf8: 686c ldr r4, [r5, #4] 8009bfa: f9b4 300c ldrsh.w r3, [r4, #12] 8009bfe: b29a uxth r2, r3 8009c00: 0715 lsls r5, r2, #28 8009c02: d42c bmi.n 8009c5e <__swsetup_r+0x82> 8009c04: 06d0 lsls r0, r2, #27 8009c06: d411 bmi.n 8009c2c <__swsetup_r+0x50> 8009c08: 2209 movs r2, #9 8009c0a: 6032 str r2, [r6, #0] 8009c0c: f043 0340 orr.w r3, r3, #64 ; 0x40 8009c10: 81a3 strh r3, [r4, #12] 8009c12: f04f 30ff mov.w r0, #4294967295 8009c16: e03e b.n 8009c96 <__swsetup_r+0xba> 8009c18: 4b25 ldr r3, [pc, #148] ; (8009cb0 <__swsetup_r+0xd4>) 8009c1a: 429c cmp r4, r3 8009c1c: d101 bne.n 8009c22 <__swsetup_r+0x46> 8009c1e: 68ac ldr r4, [r5, #8] 8009c20: e7eb b.n 8009bfa <__swsetup_r+0x1e> 8009c22: 4b24 ldr r3, [pc, #144] ; (8009cb4 <__swsetup_r+0xd8>) 8009c24: 429c cmp r4, r3 8009c26: bf08 it eq 8009c28: 68ec ldreq r4, [r5, #12] 8009c2a: e7e6 b.n 8009bfa <__swsetup_r+0x1e> 8009c2c: 0751 lsls r1, r2, #29 8009c2e: d512 bpl.n 8009c56 <__swsetup_r+0x7a> 8009c30: 6b61 ldr r1, [r4, #52] ; 0x34 8009c32: b141 cbz r1, 8009c46 <__swsetup_r+0x6a> 8009c34: f104 0344 add.w r3, r4, #68 ; 0x44 8009c38: 4299 cmp r1, r3 8009c3a: d002 beq.n 8009c42 <__swsetup_r+0x66> 8009c3c: 4630 mov r0, r6 8009c3e: f000 fa2f bl 800a0a0 <_free_r> 8009c42: 2300 movs r3, #0 8009c44: 6363 str r3, [r4, #52] ; 0x34 8009c46: 89a3 ldrh r3, [r4, #12] 8009c48: f023 0324 bic.w r3, r3, #36 ; 0x24 8009c4c: 81a3 strh r3, [r4, #12] 8009c4e: 2300 movs r3, #0 8009c50: 6063 str r3, [r4, #4] 8009c52: 6923 ldr r3, [r4, #16] 8009c54: 6023 str r3, [r4, #0] 8009c56: 89a3 ldrh r3, [r4, #12] 8009c58: f043 0308 orr.w r3, r3, #8 8009c5c: 81a3 strh r3, [r4, #12] 8009c5e: 6923 ldr r3, [r4, #16] 8009c60: b94b cbnz r3, 8009c76 <__swsetup_r+0x9a> 8009c62: 89a3 ldrh r3, [r4, #12] 8009c64: f403 7320 and.w r3, r3, #640 ; 0x280 8009c68: f5b3 7f00 cmp.w r3, #512 ; 0x200 8009c6c: d003 beq.n 8009c76 <__swsetup_r+0x9a> 8009c6e: 4621 mov r1, r4 8009c70: 4630 mov r0, r6 8009c72: f000 f9c3 bl 8009ffc <__smakebuf_r> 8009c76: 89a2 ldrh r2, [r4, #12] 8009c78: f012 0301 ands.w r3, r2, #1 8009c7c: d00c beq.n 8009c98 <__swsetup_r+0xbc> 8009c7e: 2300 movs r3, #0 8009c80: 60a3 str r3, [r4, #8] 8009c82: 6963 ldr r3, [r4, #20] 8009c84: 425b negs r3, r3 8009c86: 61a3 str r3, [r4, #24] 8009c88: 6923 ldr r3, [r4, #16] 8009c8a: b953 cbnz r3, 8009ca2 <__swsetup_r+0xc6> 8009c8c: f9b4 300c ldrsh.w r3, [r4, #12] 8009c90: f013 0080 ands.w r0, r3, #128 ; 0x80 8009c94: d1ba bne.n 8009c0c <__swsetup_r+0x30> 8009c96: bd70 pop {r4, r5, r6, pc} 8009c98: 0792 lsls r2, r2, #30 8009c9a: bf58 it pl 8009c9c: 6963 ldrpl r3, [r4, #20] 8009c9e: 60a3 str r3, [r4, #8] 8009ca0: e7f2 b.n 8009c88 <__swsetup_r+0xac> 8009ca2: 2000 movs r0, #0 8009ca4: e7f7 b.n 8009c96 <__swsetup_r+0xba> 8009ca6: bf00 nop 8009ca8: 2000036c .word 0x2000036c 8009cac: 0800af0c .word 0x0800af0c 8009cb0: 0800af2c .word 0x0800af2c 8009cb4: 0800aeec .word 0x0800aeec 08009cb8 <__sflush_r>: 8009cb8: 898a ldrh r2, [r1, #12] 8009cba: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} 8009cbe: 4605 mov r5, r0 8009cc0: 0710 lsls r0, r2, #28 8009cc2: 460c mov r4, r1 8009cc4: d458 bmi.n 8009d78 <__sflush_r+0xc0> 8009cc6: 684b ldr r3, [r1, #4] 8009cc8: 2b00 cmp r3, #0 8009cca: dc05 bgt.n 8009cd8 <__sflush_r+0x20> 8009ccc: 6c0b ldr r3, [r1, #64] ; 0x40 8009cce: 2b00 cmp r3, #0 8009cd0: dc02 bgt.n 8009cd8 <__sflush_r+0x20> 8009cd2: 2000 movs r0, #0 8009cd4: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} 8009cd8: 6ae6 ldr r6, [r4, #44] ; 0x2c 8009cda: 2e00 cmp r6, #0 8009cdc: d0f9 beq.n 8009cd2 <__sflush_r+0x1a> 8009cde: 2300 movs r3, #0 8009ce0: f412 5280 ands.w r2, r2, #4096 ; 0x1000 8009ce4: 682f ldr r7, [r5, #0] 8009ce6: 6a21 ldr r1, [r4, #32] 8009ce8: 602b str r3, [r5, #0] 8009cea: d032 beq.n 8009d52 <__sflush_r+0x9a> 8009cec: 6d60 ldr r0, [r4, #84] ; 0x54 8009cee: 89a3 ldrh r3, [r4, #12] 8009cf0: 075a lsls r2, r3, #29 8009cf2: d505 bpl.n 8009d00 <__sflush_r+0x48> 8009cf4: 6863 ldr r3, [r4, #4] 8009cf6: 1ac0 subs r0, r0, r3 8009cf8: 6b63 ldr r3, [r4, #52] ; 0x34 8009cfa: b10b cbz r3, 8009d00 <__sflush_r+0x48> 8009cfc: 6c23 ldr r3, [r4, #64] ; 0x40 8009cfe: 1ac0 subs r0, r0, r3 8009d00: 2300 movs r3, #0 8009d02: 4602 mov r2, r0 8009d04: 6ae6 ldr r6, [r4, #44] ; 0x2c 8009d06: 6a21 ldr r1, [r4, #32] 8009d08: 4628 mov r0, r5 8009d0a: 47b0 blx r6 8009d0c: 1c43 adds r3, r0, #1 8009d0e: 89a3 ldrh r3, [r4, #12] 8009d10: d106 bne.n 8009d20 <__sflush_r+0x68> 8009d12: 6829 ldr r1, [r5, #0] 8009d14: 291d cmp r1, #29 8009d16: d848 bhi.n 8009daa <__sflush_r+0xf2> 8009d18: 4a29 ldr r2, [pc, #164] ; (8009dc0 <__sflush_r+0x108>) 8009d1a: 40ca lsrs r2, r1 8009d1c: 07d6 lsls r6, r2, #31 8009d1e: d544 bpl.n 8009daa <__sflush_r+0xf2> 8009d20: 2200 movs r2, #0 8009d22: 6062 str r2, [r4, #4] 8009d24: 6922 ldr r2, [r4, #16] 8009d26: 04d9 lsls r1, r3, #19 8009d28: 6022 str r2, [r4, #0] 8009d2a: d504 bpl.n 8009d36 <__sflush_r+0x7e> 8009d2c: 1c42 adds r2, r0, #1 8009d2e: d101 bne.n 8009d34 <__sflush_r+0x7c> 8009d30: 682b ldr r3, [r5, #0] 8009d32: b903 cbnz r3, 8009d36 <__sflush_r+0x7e> 8009d34: 6560 str r0, [r4, #84] ; 0x54 8009d36: 6b61 ldr r1, [r4, #52] ; 0x34 8009d38: 602f str r7, [r5, #0] 8009d3a: 2900 cmp r1, #0 8009d3c: d0c9 beq.n 8009cd2 <__sflush_r+0x1a> 8009d3e: f104 0344 add.w r3, r4, #68 ; 0x44 8009d42: 4299 cmp r1, r3 8009d44: d002 beq.n 8009d4c <__sflush_r+0x94> 8009d46: 4628 mov r0, r5 8009d48: f000 f9aa bl 800a0a0 <_free_r> 8009d4c: 2000 movs r0, #0 8009d4e: 6360 str r0, [r4, #52] ; 0x34 8009d50: e7c0 b.n 8009cd4 <__sflush_r+0x1c> 8009d52: 2301 movs r3, #1 8009d54: 4628 mov r0, r5 8009d56: 47b0 blx r6 8009d58: 1c41 adds r1, r0, #1 8009d5a: d1c8 bne.n 8009cee <__sflush_r+0x36> 8009d5c: 682b ldr r3, [r5, #0] 8009d5e: 2b00 cmp r3, #0 8009d60: d0c5 beq.n 8009cee <__sflush_r+0x36> 8009d62: 2b1d cmp r3, #29 8009d64: d001 beq.n 8009d6a <__sflush_r+0xb2> 8009d66: 2b16 cmp r3, #22 8009d68: d101 bne.n 8009d6e <__sflush_r+0xb6> 8009d6a: 602f str r7, [r5, #0] 8009d6c: e7b1 b.n 8009cd2 <__sflush_r+0x1a> 8009d6e: 89a3 ldrh r3, [r4, #12] 8009d70: f043 0340 orr.w r3, r3, #64 ; 0x40 8009d74: 81a3 strh r3, [r4, #12] 8009d76: e7ad b.n 8009cd4 <__sflush_r+0x1c> 8009d78: 690f ldr r7, [r1, #16] 8009d7a: 2f00 cmp r7, #0 8009d7c: d0a9 beq.n 8009cd2 <__sflush_r+0x1a> 8009d7e: 0793 lsls r3, r2, #30 8009d80: bf18 it ne 8009d82: 2300 movne r3, #0 8009d84: 680e ldr r6, [r1, #0] 8009d86: bf08 it eq 8009d88: 694b ldreq r3, [r1, #20] 8009d8a: eba6 0807 sub.w r8, r6, r7 8009d8e: 600f str r7, [r1, #0] 8009d90: 608b str r3, [r1, #8] 8009d92: f1b8 0f00 cmp.w r8, #0 8009d96: dd9c ble.n 8009cd2 <__sflush_r+0x1a> 8009d98: 4643 mov r3, r8 8009d9a: 463a mov r2, r7 8009d9c: 6a21 ldr r1, [r4, #32] 8009d9e: 4628 mov r0, r5 8009da0: 6aa6 ldr r6, [r4, #40] ; 0x28 8009da2: 47b0 blx r6 8009da4: 2800 cmp r0, #0 8009da6: dc06 bgt.n 8009db6 <__sflush_r+0xfe> 8009da8: 89a3 ldrh r3, [r4, #12] 8009daa: f043 0340 orr.w r3, r3, #64 ; 0x40 8009dae: 81a3 strh r3, [r4, #12] 8009db0: f04f 30ff mov.w r0, #4294967295 8009db4: e78e b.n 8009cd4 <__sflush_r+0x1c> 8009db6: 4407 add r7, r0 8009db8: eba8 0800 sub.w r8, r8, r0 8009dbc: e7e9 b.n 8009d92 <__sflush_r+0xda> 8009dbe: bf00 nop 8009dc0: 20400001 .word 0x20400001 08009dc4 <_fflush_r>: 8009dc4: b538 push {r3, r4, r5, lr} 8009dc6: 690b ldr r3, [r1, #16] 8009dc8: 4605 mov r5, r0 8009dca: 460c mov r4, r1 8009dcc: b1db cbz r3, 8009e06 <_fflush_r+0x42> 8009dce: b118 cbz r0, 8009dd8 <_fflush_r+0x14> 8009dd0: 6983 ldr r3, [r0, #24] 8009dd2: b90b cbnz r3, 8009dd8 <_fflush_r+0x14> 8009dd4: f000 f860 bl 8009e98 <__sinit> 8009dd8: 4b0c ldr r3, [pc, #48] ; (8009e0c <_fflush_r+0x48>) 8009dda: 429c cmp r4, r3 8009ddc: d109 bne.n 8009df2 <_fflush_r+0x2e> 8009dde: 686c ldr r4, [r5, #4] 8009de0: f9b4 300c ldrsh.w r3, [r4, #12] 8009de4: b17b cbz r3, 8009e06 <_fflush_r+0x42> 8009de6: 4621 mov r1, r4 8009de8: 4628 mov r0, r5 8009dea: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} 8009dee: f7ff bf63 b.w 8009cb8 <__sflush_r> 8009df2: 4b07 ldr r3, [pc, #28] ; (8009e10 <_fflush_r+0x4c>) 8009df4: 429c cmp r4, r3 8009df6: d101 bne.n 8009dfc <_fflush_r+0x38> 8009df8: 68ac ldr r4, [r5, #8] 8009dfa: e7f1 b.n 8009de0 <_fflush_r+0x1c> 8009dfc: 4b05 ldr r3, [pc, #20] ; (8009e14 <_fflush_r+0x50>) 8009dfe: 429c cmp r4, r3 8009e00: bf08 it eq 8009e02: 68ec ldreq r4, [r5, #12] 8009e04: e7ec b.n 8009de0 <_fflush_r+0x1c> 8009e06: 2000 movs r0, #0 8009e08: bd38 pop {r3, r4, r5, pc} 8009e0a: bf00 nop 8009e0c: 0800af0c .word 0x0800af0c 8009e10: 0800af2c .word 0x0800af2c 8009e14: 0800aeec .word 0x0800aeec 08009e18 : 8009e18: 2300 movs r3, #0 8009e1a: b510 push {r4, lr} 8009e1c: 4604 mov r4, r0 8009e1e: e9c0 3300 strd r3, r3, [r0] 8009e22: 6083 str r3, [r0, #8] 8009e24: 8181 strh r1, [r0, #12] 8009e26: 6643 str r3, [r0, #100] ; 0x64 8009e28: 81c2 strh r2, [r0, #14] 8009e2a: e9c0 3304 strd r3, r3, [r0, #16] 8009e2e: 6183 str r3, [r0, #24] 8009e30: 4619 mov r1, r3 8009e32: 2208 movs r2, #8 8009e34: 305c adds r0, #92 ; 0x5c 8009e36: f7ff fd60 bl 80098fa 8009e3a: 4b05 ldr r3, [pc, #20] ; (8009e50 ) 8009e3c: 6224 str r4, [r4, #32] 8009e3e: 6263 str r3, [r4, #36] ; 0x24 8009e40: 4b04 ldr r3, [pc, #16] ; (8009e54 ) 8009e42: 62a3 str r3, [r4, #40] ; 0x28 8009e44: 4b04 ldr r3, [pc, #16] ; (8009e58 ) 8009e46: 62e3 str r3, [r4, #44] ; 0x2c 8009e48: 4b04 ldr r3, [pc, #16] ; (8009e5c ) 8009e4a: 6323 str r3, [r4, #48] ; 0x30 8009e4c: bd10 pop {r4, pc} 8009e4e: bf00 nop 8009e50: 0800a799 .word 0x0800a799 8009e54: 0800a7bb .word 0x0800a7bb 8009e58: 0800a7f3 .word 0x0800a7f3 8009e5c: 0800a817 .word 0x0800a817 08009e60 <_cleanup_r>: 8009e60: 4901 ldr r1, [pc, #4] ; (8009e68 <_cleanup_r+0x8>) 8009e62: f000 b885 b.w 8009f70 <_fwalk_reent> 8009e66: bf00 nop 8009e68: 08009dc5 .word 0x08009dc5 08009e6c <__sfmoreglue>: 8009e6c: b570 push {r4, r5, r6, lr} 8009e6e: 2568 movs r5, #104 ; 0x68 8009e70: 1e4a subs r2, r1, #1 8009e72: 4355 muls r5, r2 8009e74: 460e mov r6, r1 8009e76: f105 0174 add.w r1, r5, #116 ; 0x74 8009e7a: f000 f95d bl 800a138 <_malloc_r> 8009e7e: 4604 mov r4, r0 8009e80: b140 cbz r0, 8009e94 <__sfmoreglue+0x28> 8009e82: 2100 movs r1, #0 8009e84: e9c0 1600 strd r1, r6, [r0] 8009e88: 300c adds r0, #12 8009e8a: 60a0 str r0, [r4, #8] 8009e8c: f105 0268 add.w r2, r5, #104 ; 0x68 8009e90: f7ff fd33 bl 80098fa 8009e94: 4620 mov r0, r4 8009e96: bd70 pop {r4, r5, r6, pc} 08009e98 <__sinit>: 8009e98: 6983 ldr r3, [r0, #24] 8009e9a: b510 push {r4, lr} 8009e9c: 4604 mov r4, r0 8009e9e: bb33 cbnz r3, 8009eee <__sinit+0x56> 8009ea0: e9c0 3312 strd r3, r3, [r0, #72] ; 0x48 8009ea4: 6503 str r3, [r0, #80] ; 0x50 8009ea6: 4b12 ldr r3, [pc, #72] ; (8009ef0 <__sinit+0x58>) 8009ea8: 4a12 ldr r2, [pc, #72] ; (8009ef4 <__sinit+0x5c>) 8009eaa: 681b ldr r3, [r3, #0] 8009eac: 6282 str r2, [r0, #40] ; 0x28 8009eae: 4298 cmp r0, r3 8009eb0: bf04 itt eq 8009eb2: 2301 moveq r3, #1 8009eb4: 6183 streq r3, [r0, #24] 8009eb6: f000 f81f bl 8009ef8 <__sfp> 8009eba: 6060 str r0, [r4, #4] 8009ebc: 4620 mov r0, r4 8009ebe: f000 f81b bl 8009ef8 <__sfp> 8009ec2: 60a0 str r0, [r4, #8] 8009ec4: 4620 mov r0, r4 8009ec6: f000 f817 bl 8009ef8 <__sfp> 8009eca: 2200 movs r2, #0 8009ecc: 60e0 str r0, [r4, #12] 8009ece: 2104 movs r1, #4 8009ed0: 6860 ldr r0, [r4, #4] 8009ed2: f7ff ffa1 bl 8009e18 8009ed6: 2201 movs r2, #1 8009ed8: 2109 movs r1, #9 8009eda: 68a0 ldr r0, [r4, #8] 8009edc: f7ff ff9c bl 8009e18 8009ee0: 2202 movs r2, #2 8009ee2: 2112 movs r1, #18 8009ee4: 68e0 ldr r0, [r4, #12] 8009ee6: f7ff ff97 bl 8009e18 8009eea: 2301 movs r3, #1 8009eec: 61a3 str r3, [r4, #24] 8009eee: bd10 pop {r4, pc} 8009ef0: 0800aee8 .word 0x0800aee8 8009ef4: 08009e61 .word 0x08009e61 08009ef8 <__sfp>: 8009ef8: b5f8 push {r3, r4, r5, r6, r7, lr} 8009efa: 4b1b ldr r3, [pc, #108] ; (8009f68 <__sfp+0x70>) 8009efc: 4607 mov r7, r0 8009efe: 681e ldr r6, [r3, #0] 8009f00: 69b3 ldr r3, [r6, #24] 8009f02: b913 cbnz r3, 8009f0a <__sfp+0x12> 8009f04: 4630 mov r0, r6 8009f06: f7ff ffc7 bl 8009e98 <__sinit> 8009f0a: 3648 adds r6, #72 ; 0x48 8009f0c: e9d6 3401 ldrd r3, r4, [r6, #4] 8009f10: 3b01 subs r3, #1 8009f12: d503 bpl.n 8009f1c <__sfp+0x24> 8009f14: 6833 ldr r3, [r6, #0] 8009f16: b133 cbz r3, 8009f26 <__sfp+0x2e> 8009f18: 6836 ldr r6, [r6, #0] 8009f1a: e7f7 b.n 8009f0c <__sfp+0x14> 8009f1c: f9b4 500c ldrsh.w r5, [r4, #12] 8009f20: b16d cbz r5, 8009f3e <__sfp+0x46> 8009f22: 3468 adds r4, #104 ; 0x68 8009f24: e7f4 b.n 8009f10 <__sfp+0x18> 8009f26: 2104 movs r1, #4 8009f28: 4638 mov r0, r7 8009f2a: f7ff ff9f bl 8009e6c <__sfmoreglue> 8009f2e: 6030 str r0, [r6, #0] 8009f30: 2800 cmp r0, #0 8009f32: d1f1 bne.n 8009f18 <__sfp+0x20> 8009f34: 230c movs r3, #12 8009f36: 4604 mov r4, r0 8009f38: 603b str r3, [r7, #0] 8009f3a: 4620 mov r0, r4 8009f3c: bdf8 pop {r3, r4, r5, r6, r7, pc} 8009f3e: 4b0b ldr r3, [pc, #44] ; (8009f6c <__sfp+0x74>) 8009f40: 6665 str r5, [r4, #100] ; 0x64 8009f42: e9c4 5500 strd r5, r5, [r4] 8009f46: 60a5 str r5, [r4, #8] 8009f48: e9c4 3503 strd r3, r5, [r4, #12] 8009f4c: e9c4 5505 strd r5, r5, [r4, #20] 8009f50: 2208 movs r2, #8 8009f52: 4629 mov r1, r5 8009f54: f104 005c add.w r0, r4, #92 ; 0x5c 8009f58: f7ff fccf bl 80098fa 8009f5c: e9c4 550d strd r5, r5, [r4, #52] ; 0x34 8009f60: e9c4 5512 strd r5, r5, [r4, #72] ; 0x48 8009f64: e7e9 b.n 8009f3a <__sfp+0x42> 8009f66: bf00 nop 8009f68: 0800aee8 .word 0x0800aee8 8009f6c: ffff0001 .word 0xffff0001 08009f70 <_fwalk_reent>: 8009f70: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} 8009f74: 4680 mov r8, r0 8009f76: 4689 mov r9, r1 8009f78: 2600 movs r6, #0 8009f7a: f100 0448 add.w r4, r0, #72 ; 0x48 8009f7e: b914 cbnz r4, 8009f86 <_fwalk_reent+0x16> 8009f80: 4630 mov r0, r6 8009f82: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} 8009f86: e9d4 7501 ldrd r7, r5, [r4, #4] 8009f8a: 3f01 subs r7, #1 8009f8c: d501 bpl.n 8009f92 <_fwalk_reent+0x22> 8009f8e: 6824 ldr r4, [r4, #0] 8009f90: e7f5 b.n 8009f7e <_fwalk_reent+0xe> 8009f92: 89ab ldrh r3, [r5, #12] 8009f94: 2b01 cmp r3, #1 8009f96: d907 bls.n 8009fa8 <_fwalk_reent+0x38> 8009f98: f9b5 300e ldrsh.w r3, [r5, #14] 8009f9c: 3301 adds r3, #1 8009f9e: d003 beq.n 8009fa8 <_fwalk_reent+0x38> 8009fa0: 4629 mov r1, r5 8009fa2: 4640 mov r0, r8 8009fa4: 47c8 blx r9 8009fa6: 4306 orrs r6, r0 8009fa8: 3568 adds r5, #104 ; 0x68 8009faa: e7ee b.n 8009f8a <_fwalk_reent+0x1a> 08009fac <__locale_ctype_ptr_l>: 8009fac: f8d0 00ec ldr.w r0, [r0, #236] ; 0xec 8009fb0: 4770 bx lr 08009fb2 <__swhatbuf_r>: 8009fb2: b570 push {r4, r5, r6, lr} 8009fb4: 460e mov r6, r1 8009fb6: f9b1 100e ldrsh.w r1, [r1, #14] 8009fba: b096 sub sp, #88 ; 0x58 8009fbc: 2900 cmp r1, #0 8009fbe: 4614 mov r4, r2 8009fc0: 461d mov r5, r3 8009fc2: da07 bge.n 8009fd4 <__swhatbuf_r+0x22> 8009fc4: 2300 movs r3, #0 8009fc6: 602b str r3, [r5, #0] 8009fc8: 89b3 ldrh r3, [r6, #12] 8009fca: 061a lsls r2, r3, #24 8009fcc: d410 bmi.n 8009ff0 <__swhatbuf_r+0x3e> 8009fce: f44f 6380 mov.w r3, #1024 ; 0x400 8009fd2: e00e b.n 8009ff2 <__swhatbuf_r+0x40> 8009fd4: 466a mov r2, sp 8009fd6: f000 fc51 bl 800a87c <_fstat_r> 8009fda: 2800 cmp r0, #0 8009fdc: dbf2 blt.n 8009fc4 <__swhatbuf_r+0x12> 8009fde: 9a01 ldr r2, [sp, #4] 8009fe0: f402 4270 and.w r2, r2, #61440 ; 0xf000 8009fe4: f5a2 5300 sub.w r3, r2, #8192 ; 0x2000 8009fe8: 425a negs r2, r3 8009fea: 415a adcs r2, r3 8009fec: 602a str r2, [r5, #0] 8009fee: e7ee b.n 8009fce <__swhatbuf_r+0x1c> 8009ff0: 2340 movs r3, #64 ; 0x40 8009ff2: 2000 movs r0, #0 8009ff4: 6023 str r3, [r4, #0] 8009ff6: b016 add sp, #88 ; 0x58 8009ff8: bd70 pop {r4, r5, r6, pc} ... 08009ffc <__smakebuf_r>: 8009ffc: 898b ldrh r3, [r1, #12] 8009ffe: b573 push {r0, r1, r4, r5, r6, lr} 800a000: 079d lsls r5, r3, #30 800a002: 4606 mov r6, r0 800a004: 460c mov r4, r1 800a006: d507 bpl.n 800a018 <__smakebuf_r+0x1c> 800a008: f104 0347 add.w r3, r4, #71 ; 0x47 800a00c: 6023 str r3, [r4, #0] 800a00e: 6123 str r3, [r4, #16] 800a010: 2301 movs r3, #1 800a012: 6163 str r3, [r4, #20] 800a014: b002 add sp, #8 800a016: bd70 pop {r4, r5, r6, pc} 800a018: ab01 add r3, sp, #4 800a01a: 466a mov r2, sp 800a01c: f7ff ffc9 bl 8009fb2 <__swhatbuf_r> 800a020: 9900 ldr r1, [sp, #0] 800a022: 4605 mov r5, r0 800a024: 4630 mov r0, r6 800a026: f000 f887 bl 800a138 <_malloc_r> 800a02a: b948 cbnz r0, 800a040 <__smakebuf_r+0x44> 800a02c: f9b4 300c ldrsh.w r3, [r4, #12] 800a030: 059a lsls r2, r3, #22 800a032: d4ef bmi.n 800a014 <__smakebuf_r+0x18> 800a034: f023 0303 bic.w r3, r3, #3 800a038: f043 0302 orr.w r3, r3, #2 800a03c: 81a3 strh r3, [r4, #12] 800a03e: e7e3 b.n 800a008 <__smakebuf_r+0xc> 800a040: 4b0d ldr r3, [pc, #52] ; (800a078 <__smakebuf_r+0x7c>) 800a042: 62b3 str r3, [r6, #40] ; 0x28 800a044: 89a3 ldrh r3, [r4, #12] 800a046: 6020 str r0, [r4, #0] 800a048: f043 0380 orr.w r3, r3, #128 ; 0x80 800a04c: 81a3 strh r3, [r4, #12] 800a04e: 9b00 ldr r3, [sp, #0] 800a050: 6120 str r0, [r4, #16] 800a052: 6163 str r3, [r4, #20] 800a054: 9b01 ldr r3, [sp, #4] 800a056: b15b cbz r3, 800a070 <__smakebuf_r+0x74> 800a058: f9b4 100e ldrsh.w r1, [r4, #14] 800a05c: 4630 mov r0, r6 800a05e: f000 fc1f bl 800a8a0 <_isatty_r> 800a062: b128 cbz r0, 800a070 <__smakebuf_r+0x74> 800a064: 89a3 ldrh r3, [r4, #12] 800a066: f023 0303 bic.w r3, r3, #3 800a06a: f043 0301 orr.w r3, r3, #1 800a06e: 81a3 strh r3, [r4, #12] 800a070: 89a3 ldrh r3, [r4, #12] 800a072: 431d orrs r5, r3 800a074: 81a5 strh r5, [r4, #12] 800a076: e7cd b.n 800a014 <__smakebuf_r+0x18> 800a078: 08009e61 .word 0x08009e61 0800a07c <__ascii_mbtowc>: 800a07c: b082 sub sp, #8 800a07e: b901 cbnz r1, 800a082 <__ascii_mbtowc+0x6> 800a080: a901 add r1, sp, #4 800a082: b142 cbz r2, 800a096 <__ascii_mbtowc+0x1a> 800a084: b14b cbz r3, 800a09a <__ascii_mbtowc+0x1e> 800a086: 7813 ldrb r3, [r2, #0] 800a088: 600b str r3, [r1, #0] 800a08a: 7812 ldrb r2, [r2, #0] 800a08c: 1c10 adds r0, r2, #0 800a08e: bf18 it ne 800a090: 2001 movne r0, #1 800a092: b002 add sp, #8 800a094: 4770 bx lr 800a096: 4610 mov r0, r2 800a098: e7fb b.n 800a092 <__ascii_mbtowc+0x16> 800a09a: f06f 0001 mvn.w r0, #1 800a09e: e7f8 b.n 800a092 <__ascii_mbtowc+0x16> 0800a0a0 <_free_r>: 800a0a0: b538 push {r3, r4, r5, lr} 800a0a2: 4605 mov r5, r0 800a0a4: 2900 cmp r1, #0 800a0a6: d043 beq.n 800a130 <_free_r+0x90> 800a0a8: f851 3c04 ldr.w r3, [r1, #-4] 800a0ac: 1f0c subs r4, r1, #4 800a0ae: 2b00 cmp r3, #0 800a0b0: bfb8 it lt 800a0b2: 18e4 addlt r4, r4, r3 800a0b4: f000 fc24 bl 800a900 <__malloc_lock> 800a0b8: 4a1e ldr r2, [pc, #120] ; (800a134 <_free_r+0x94>) 800a0ba: 6813 ldr r3, [r2, #0] 800a0bc: 4610 mov r0, r2 800a0be: b933 cbnz r3, 800a0ce <_free_r+0x2e> 800a0c0: 6063 str r3, [r4, #4] 800a0c2: 6014 str r4, [r2, #0] 800a0c4: 4628 mov r0, r5 800a0c6: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} 800a0ca: f000 bc1a b.w 800a902 <__malloc_unlock> 800a0ce: 42a3 cmp r3, r4 800a0d0: d90b bls.n 800a0ea <_free_r+0x4a> 800a0d2: 6821 ldr r1, [r4, #0] 800a0d4: 1862 adds r2, r4, r1 800a0d6: 4293 cmp r3, r2 800a0d8: bf01 itttt eq 800a0da: 681a ldreq r2, [r3, #0] 800a0dc: 685b ldreq r3, [r3, #4] 800a0de: 1852 addeq r2, r2, r1 800a0e0: 6022 streq r2, [r4, #0] 800a0e2: 6063 str r3, [r4, #4] 800a0e4: 6004 str r4, [r0, #0] 800a0e6: e7ed b.n 800a0c4 <_free_r+0x24> 800a0e8: 4613 mov r3, r2 800a0ea: 685a ldr r2, [r3, #4] 800a0ec: b10a cbz r2, 800a0f2 <_free_r+0x52> 800a0ee: 42a2 cmp r2, r4 800a0f0: d9fa bls.n 800a0e8 <_free_r+0x48> 800a0f2: 6819 ldr r1, [r3, #0] 800a0f4: 1858 adds r0, r3, r1 800a0f6: 42a0 cmp r0, r4 800a0f8: d10b bne.n 800a112 <_free_r+0x72> 800a0fa: 6820 ldr r0, [r4, #0] 800a0fc: 4401 add r1, r0 800a0fe: 1858 adds r0, r3, r1 800a100: 4282 cmp r2, r0 800a102: 6019 str r1, [r3, #0] 800a104: d1de bne.n 800a0c4 <_free_r+0x24> 800a106: 6810 ldr r0, [r2, #0] 800a108: 6852 ldr r2, [r2, #4] 800a10a: 4401 add r1, r0 800a10c: 6019 str r1, [r3, #0] 800a10e: 605a str r2, [r3, #4] 800a110: e7d8 b.n 800a0c4 <_free_r+0x24> 800a112: d902 bls.n 800a11a <_free_r+0x7a> 800a114: 230c movs r3, #12 800a116: 602b str r3, [r5, #0] 800a118: e7d4 b.n 800a0c4 <_free_r+0x24> 800a11a: 6820 ldr r0, [r4, #0] 800a11c: 1821 adds r1, r4, r0 800a11e: 428a cmp r2, r1 800a120: bf01 itttt eq 800a122: 6811 ldreq r1, [r2, #0] 800a124: 6852 ldreq r2, [r2, #4] 800a126: 1809 addeq r1, r1, r0 800a128: 6021 streq r1, [r4, #0] 800a12a: 6062 str r2, [r4, #4] 800a12c: 605c str r4, [r3, #4] 800a12e: e7c9 b.n 800a0c4 <_free_r+0x24> 800a130: bd38 pop {r3, r4, r5, pc} 800a132: bf00 nop 800a134: 20000584 .word 0x20000584 0800a138 <_malloc_r>: 800a138: b570 push {r4, r5, r6, lr} 800a13a: 1ccd adds r5, r1, #3 800a13c: f025 0503 bic.w r5, r5, #3 800a140: 3508 adds r5, #8 800a142: 2d0c cmp r5, #12 800a144: bf38 it cc 800a146: 250c movcc r5, #12 800a148: 2d00 cmp r5, #0 800a14a: 4606 mov r6, r0 800a14c: db01 blt.n 800a152 <_malloc_r+0x1a> 800a14e: 42a9 cmp r1, r5 800a150: d903 bls.n 800a15a <_malloc_r+0x22> 800a152: 230c movs r3, #12 800a154: 6033 str r3, [r6, #0] 800a156: 2000 movs r0, #0 800a158: bd70 pop {r4, r5, r6, pc} 800a15a: f000 fbd1 bl 800a900 <__malloc_lock> 800a15e: 4a21 ldr r2, [pc, #132] ; (800a1e4 <_malloc_r+0xac>) 800a160: 6814 ldr r4, [r2, #0] 800a162: 4621 mov r1, r4 800a164: b991 cbnz r1, 800a18c <_malloc_r+0x54> 800a166: 4c20 ldr r4, [pc, #128] ; (800a1e8 <_malloc_r+0xb0>) 800a168: 6823 ldr r3, [r4, #0] 800a16a: b91b cbnz r3, 800a174 <_malloc_r+0x3c> 800a16c: 4630 mov r0, r6 800a16e: f000 fb03 bl 800a778 <_sbrk_r> 800a172: 6020 str r0, [r4, #0] 800a174: 4629 mov r1, r5 800a176: 4630 mov r0, r6 800a178: f000 fafe bl 800a778 <_sbrk_r> 800a17c: 1c43 adds r3, r0, #1 800a17e: d124 bne.n 800a1ca <_malloc_r+0x92> 800a180: 230c movs r3, #12 800a182: 4630 mov r0, r6 800a184: 6033 str r3, [r6, #0] 800a186: f000 fbbc bl 800a902 <__malloc_unlock> 800a18a: e7e4 b.n 800a156 <_malloc_r+0x1e> 800a18c: 680b ldr r3, [r1, #0] 800a18e: 1b5b subs r3, r3, r5 800a190: d418 bmi.n 800a1c4 <_malloc_r+0x8c> 800a192: 2b0b cmp r3, #11 800a194: d90f bls.n 800a1b6 <_malloc_r+0x7e> 800a196: 600b str r3, [r1, #0] 800a198: 18cc adds r4, r1, r3 800a19a: 50cd str r5, [r1, r3] 800a19c: 4630 mov r0, r6 800a19e: f000 fbb0 bl 800a902 <__malloc_unlock> 800a1a2: f104 000b add.w r0, r4, #11 800a1a6: 1d23 adds r3, r4, #4 800a1a8: f020 0007 bic.w r0, r0, #7 800a1ac: 1ac3 subs r3, r0, r3 800a1ae: d0d3 beq.n 800a158 <_malloc_r+0x20> 800a1b0: 425a negs r2, r3 800a1b2: 50e2 str r2, [r4, r3] 800a1b4: e7d0 b.n 800a158 <_malloc_r+0x20> 800a1b6: 684b ldr r3, [r1, #4] 800a1b8: 428c cmp r4, r1 800a1ba: bf16 itet ne 800a1bc: 6063 strne r3, [r4, #4] 800a1be: 6013 streq r3, [r2, #0] 800a1c0: 460c movne r4, r1 800a1c2: e7eb b.n 800a19c <_malloc_r+0x64> 800a1c4: 460c mov r4, r1 800a1c6: 6849 ldr r1, [r1, #4] 800a1c8: e7cc b.n 800a164 <_malloc_r+0x2c> 800a1ca: 1cc4 adds r4, r0, #3 800a1cc: f024 0403 bic.w r4, r4, #3 800a1d0: 42a0 cmp r0, r4 800a1d2: d005 beq.n 800a1e0 <_malloc_r+0xa8> 800a1d4: 1a21 subs r1, r4, r0 800a1d6: 4630 mov r0, r6 800a1d8: f000 face bl 800a778 <_sbrk_r> 800a1dc: 3001 adds r0, #1 800a1de: d0cf beq.n 800a180 <_malloc_r+0x48> 800a1e0: 6025 str r5, [r4, #0] 800a1e2: e7db b.n 800a19c <_malloc_r+0x64> 800a1e4: 20000584 .word 0x20000584 800a1e8: 20000588 .word 0x20000588 0800a1ec <__sfputc_r>: 800a1ec: 6893 ldr r3, [r2, #8] 800a1ee: b410 push {r4} 800a1f0: 3b01 subs r3, #1 800a1f2: 2b00 cmp r3, #0 800a1f4: 6093 str r3, [r2, #8] 800a1f6: da07 bge.n 800a208 <__sfputc_r+0x1c> 800a1f8: 6994 ldr r4, [r2, #24] 800a1fa: 42a3 cmp r3, r4 800a1fc: db01 blt.n 800a202 <__sfputc_r+0x16> 800a1fe: 290a cmp r1, #10 800a200: d102 bne.n 800a208 <__sfputc_r+0x1c> 800a202: bc10 pop {r4} 800a204: f7ff bc98 b.w 8009b38 <__swbuf_r> 800a208: 6813 ldr r3, [r2, #0] 800a20a: 1c58 adds r0, r3, #1 800a20c: 6010 str r0, [r2, #0] 800a20e: 7019 strb r1, [r3, #0] 800a210: 4608 mov r0, r1 800a212: bc10 pop {r4} 800a214: 4770 bx lr 0800a216 <__sfputs_r>: 800a216: b5f8 push {r3, r4, r5, r6, r7, lr} 800a218: 4606 mov r6, r0 800a21a: 460f mov r7, r1 800a21c: 4614 mov r4, r2 800a21e: 18d5 adds r5, r2, r3 800a220: 42ac cmp r4, r5 800a222: d101 bne.n 800a228 <__sfputs_r+0x12> 800a224: 2000 movs r0, #0 800a226: e007 b.n 800a238 <__sfputs_r+0x22> 800a228: 463a mov r2, r7 800a22a: f814 1b01 ldrb.w r1, [r4], #1 800a22e: 4630 mov r0, r6 800a230: f7ff ffdc bl 800a1ec <__sfputc_r> 800a234: 1c43 adds r3, r0, #1 800a236: d1f3 bne.n 800a220 <__sfputs_r+0xa> 800a238: bdf8 pop {r3, r4, r5, r6, r7, pc} ... 0800a23c <_vfiprintf_r>: 800a23c: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} 800a240: 460c mov r4, r1 800a242: b09d sub sp, #116 ; 0x74 800a244: 4617 mov r7, r2 800a246: 461d mov r5, r3 800a248: 4606 mov r6, r0 800a24a: b118 cbz r0, 800a254 <_vfiprintf_r+0x18> 800a24c: 6983 ldr r3, [r0, #24] 800a24e: b90b cbnz r3, 800a254 <_vfiprintf_r+0x18> 800a250: f7ff fe22 bl 8009e98 <__sinit> 800a254: 4b7c ldr r3, [pc, #496] ; (800a448 <_vfiprintf_r+0x20c>) 800a256: 429c cmp r4, r3 800a258: d158 bne.n 800a30c <_vfiprintf_r+0xd0> 800a25a: 6874 ldr r4, [r6, #4] 800a25c: 89a3 ldrh r3, [r4, #12] 800a25e: 0718 lsls r0, r3, #28 800a260: d55e bpl.n 800a320 <_vfiprintf_r+0xe4> 800a262: 6923 ldr r3, [r4, #16] 800a264: 2b00 cmp r3, #0 800a266: d05b beq.n 800a320 <_vfiprintf_r+0xe4> 800a268: 2300 movs r3, #0 800a26a: 9309 str r3, [sp, #36] ; 0x24 800a26c: 2320 movs r3, #32 800a26e: f88d 3029 strb.w r3, [sp, #41] ; 0x29 800a272: 2330 movs r3, #48 ; 0x30 800a274: f04f 0b01 mov.w fp, #1 800a278: f88d 302a strb.w r3, [sp, #42] ; 0x2a 800a27c: 9503 str r5, [sp, #12] 800a27e: 46b8 mov r8, r7 800a280: 4645 mov r5, r8 800a282: f815 3b01 ldrb.w r3, [r5], #1 800a286: b10b cbz r3, 800a28c <_vfiprintf_r+0x50> 800a288: 2b25 cmp r3, #37 ; 0x25 800a28a: d154 bne.n 800a336 <_vfiprintf_r+0xfa> 800a28c: ebb8 0a07 subs.w sl, r8, r7 800a290: d00b beq.n 800a2aa <_vfiprintf_r+0x6e> 800a292: 4653 mov r3, sl 800a294: 463a mov r2, r7 800a296: 4621 mov r1, r4 800a298: 4630 mov r0, r6 800a29a: f7ff ffbc bl 800a216 <__sfputs_r> 800a29e: 3001 adds r0, #1 800a2a0: f000 80c2 beq.w 800a428 <_vfiprintf_r+0x1ec> 800a2a4: 9b09 ldr r3, [sp, #36] ; 0x24 800a2a6: 4453 add r3, sl 800a2a8: 9309 str r3, [sp, #36] ; 0x24 800a2aa: f898 3000 ldrb.w r3, [r8] 800a2ae: 2b00 cmp r3, #0 800a2b0: f000 80ba beq.w 800a428 <_vfiprintf_r+0x1ec> 800a2b4: 2300 movs r3, #0 800a2b6: f04f 32ff mov.w r2, #4294967295 800a2ba: e9cd 2305 strd r2, r3, [sp, #20] 800a2be: 9304 str r3, [sp, #16] 800a2c0: 9307 str r3, [sp, #28] 800a2c2: f88d 3053 strb.w r3, [sp, #83] ; 0x53 800a2c6: 931a str r3, [sp, #104] ; 0x68 800a2c8: 46a8 mov r8, r5 800a2ca: 2205 movs r2, #5 800a2cc: f818 1b01 ldrb.w r1, [r8], #1 800a2d0: 485e ldr r0, [pc, #376] ; (800a44c <_vfiprintf_r+0x210>) 800a2d2: f000 fb07 bl 800a8e4 800a2d6: 9b04 ldr r3, [sp, #16] 800a2d8: bb78 cbnz r0, 800a33a <_vfiprintf_r+0xfe> 800a2da: 06d9 lsls r1, r3, #27 800a2dc: bf44 itt mi 800a2de: 2220 movmi r2, #32 800a2e0: f88d 2053 strbmi.w r2, [sp, #83] ; 0x53 800a2e4: 071a lsls r2, r3, #28 800a2e6: bf44 itt mi 800a2e8: 222b movmi r2, #43 ; 0x2b 800a2ea: f88d 2053 strbmi.w r2, [sp, #83] ; 0x53 800a2ee: 782a ldrb r2, [r5, #0] 800a2f0: 2a2a cmp r2, #42 ; 0x2a 800a2f2: d02a beq.n 800a34a <_vfiprintf_r+0x10e> 800a2f4: 46a8 mov r8, r5 800a2f6: 2000 movs r0, #0 800a2f8: 250a movs r5, #10 800a2fa: 9a07 ldr r2, [sp, #28] 800a2fc: 4641 mov r1, r8 800a2fe: f811 3b01 ldrb.w r3, [r1], #1 800a302: 3b30 subs r3, #48 ; 0x30 800a304: 2b09 cmp r3, #9 800a306: d969 bls.n 800a3dc <_vfiprintf_r+0x1a0> 800a308: b360 cbz r0, 800a364 <_vfiprintf_r+0x128> 800a30a: e024 b.n 800a356 <_vfiprintf_r+0x11a> 800a30c: 4b50 ldr r3, [pc, #320] ; (800a450 <_vfiprintf_r+0x214>) 800a30e: 429c cmp r4, r3 800a310: d101 bne.n 800a316 <_vfiprintf_r+0xda> 800a312: 68b4 ldr r4, [r6, #8] 800a314: e7a2 b.n 800a25c <_vfiprintf_r+0x20> 800a316: 4b4f ldr r3, [pc, #316] ; (800a454 <_vfiprintf_r+0x218>) 800a318: 429c cmp r4, r3 800a31a: bf08 it eq 800a31c: 68f4 ldreq r4, [r6, #12] 800a31e: e79d b.n 800a25c <_vfiprintf_r+0x20> 800a320: 4621 mov r1, r4 800a322: 4630 mov r0, r6 800a324: f7ff fc5a bl 8009bdc <__swsetup_r> 800a328: 2800 cmp r0, #0 800a32a: d09d beq.n 800a268 <_vfiprintf_r+0x2c> 800a32c: f04f 30ff mov.w r0, #4294967295 800a330: b01d add sp, #116 ; 0x74 800a332: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} 800a336: 46a8 mov r8, r5 800a338: e7a2 b.n 800a280 <_vfiprintf_r+0x44> 800a33a: 4a44 ldr r2, [pc, #272] ; (800a44c <_vfiprintf_r+0x210>) 800a33c: 4645 mov r5, r8 800a33e: 1a80 subs r0, r0, r2 800a340: fa0b f000 lsl.w r0, fp, r0 800a344: 4318 orrs r0, r3 800a346: 9004 str r0, [sp, #16] 800a348: e7be b.n 800a2c8 <_vfiprintf_r+0x8c> 800a34a: 9a03 ldr r2, [sp, #12] 800a34c: 1d11 adds r1, r2, #4 800a34e: 6812 ldr r2, [r2, #0] 800a350: 9103 str r1, [sp, #12] 800a352: 2a00 cmp r2, #0 800a354: db01 blt.n 800a35a <_vfiprintf_r+0x11e> 800a356: 9207 str r2, [sp, #28] 800a358: e004 b.n 800a364 <_vfiprintf_r+0x128> 800a35a: 4252 negs r2, r2 800a35c: f043 0302 orr.w r3, r3, #2 800a360: 9207 str r2, [sp, #28] 800a362: 9304 str r3, [sp, #16] 800a364: f898 3000 ldrb.w r3, [r8] 800a368: 2b2e cmp r3, #46 ; 0x2e 800a36a: d10e bne.n 800a38a <_vfiprintf_r+0x14e> 800a36c: f898 3001 ldrb.w r3, [r8, #1] 800a370: 2b2a cmp r3, #42 ; 0x2a 800a372: d138 bne.n 800a3e6 <_vfiprintf_r+0x1aa> 800a374: 9b03 ldr r3, [sp, #12] 800a376: f108 0802 add.w r8, r8, #2 800a37a: 1d1a adds r2, r3, #4 800a37c: 681b ldr r3, [r3, #0] 800a37e: 9203 str r2, [sp, #12] 800a380: 2b00 cmp r3, #0 800a382: bfb8 it lt 800a384: f04f 33ff movlt.w r3, #4294967295 800a388: 9305 str r3, [sp, #20] 800a38a: 4d33 ldr r5, [pc, #204] ; (800a458 <_vfiprintf_r+0x21c>) 800a38c: 2203 movs r2, #3 800a38e: f898 1000 ldrb.w r1, [r8] 800a392: 4628 mov r0, r5 800a394: f000 faa6 bl 800a8e4 800a398: b140 cbz r0, 800a3ac <_vfiprintf_r+0x170> 800a39a: 2340 movs r3, #64 ; 0x40 800a39c: 1b40 subs r0, r0, r5 800a39e: fa03 f000 lsl.w r0, r3, r0 800a3a2: 9b04 ldr r3, [sp, #16] 800a3a4: f108 0801 add.w r8, r8, #1 800a3a8: 4303 orrs r3, r0 800a3aa: 9304 str r3, [sp, #16] 800a3ac: f898 1000 ldrb.w r1, [r8] 800a3b0: 2206 movs r2, #6 800a3b2: 482a ldr r0, [pc, #168] ; (800a45c <_vfiprintf_r+0x220>) 800a3b4: f108 0701 add.w r7, r8, #1 800a3b8: f88d 1028 strb.w r1, [sp, #40] ; 0x28 800a3bc: f000 fa92 bl 800a8e4 800a3c0: 2800 cmp r0, #0 800a3c2: d037 beq.n 800a434 <_vfiprintf_r+0x1f8> 800a3c4: 4b26 ldr r3, [pc, #152] ; (800a460 <_vfiprintf_r+0x224>) 800a3c6: bb1b cbnz r3, 800a410 <_vfiprintf_r+0x1d4> 800a3c8: 9b03 ldr r3, [sp, #12] 800a3ca: 3307 adds r3, #7 800a3cc: f023 0307 bic.w r3, r3, #7 800a3d0: 3308 adds r3, #8 800a3d2: 9303 str r3, [sp, #12] 800a3d4: 9b09 ldr r3, [sp, #36] ; 0x24 800a3d6: 444b add r3, r9 800a3d8: 9309 str r3, [sp, #36] ; 0x24 800a3da: e750 b.n 800a27e <_vfiprintf_r+0x42> 800a3dc: fb05 3202 mla r2, r5, r2, r3 800a3e0: 2001 movs r0, #1 800a3e2: 4688 mov r8, r1 800a3e4: e78a b.n 800a2fc <_vfiprintf_r+0xc0> 800a3e6: 2300 movs r3, #0 800a3e8: 250a movs r5, #10 800a3ea: 4619 mov r1, r3 800a3ec: f108 0801 add.w r8, r8, #1 800a3f0: 9305 str r3, [sp, #20] 800a3f2: 4640 mov r0, r8 800a3f4: f810 2b01 ldrb.w r2, [r0], #1 800a3f8: 3a30 subs r2, #48 ; 0x30 800a3fa: 2a09 cmp r2, #9 800a3fc: d903 bls.n 800a406 <_vfiprintf_r+0x1ca> 800a3fe: 2b00 cmp r3, #0 800a400: d0c3 beq.n 800a38a <_vfiprintf_r+0x14e> 800a402: 9105 str r1, [sp, #20] 800a404: e7c1 b.n 800a38a <_vfiprintf_r+0x14e> 800a406: fb05 2101 mla r1, r5, r1, r2 800a40a: 2301 movs r3, #1 800a40c: 4680 mov r8, r0 800a40e: e7f0 b.n 800a3f2 <_vfiprintf_r+0x1b6> 800a410: ab03 add r3, sp, #12 800a412: 9300 str r3, [sp, #0] 800a414: 4622 mov r2, r4 800a416: 4b13 ldr r3, [pc, #76] ; (800a464 <_vfiprintf_r+0x228>) 800a418: a904 add r1, sp, #16 800a41a: 4630 mov r0, r6 800a41c: f3af 8000 nop.w 800a420: f1b0 3fff cmp.w r0, #4294967295 800a424: 4681 mov r9, r0 800a426: d1d5 bne.n 800a3d4 <_vfiprintf_r+0x198> 800a428: 89a3 ldrh r3, [r4, #12] 800a42a: 065b lsls r3, r3, #25 800a42c: f53f af7e bmi.w 800a32c <_vfiprintf_r+0xf0> 800a430: 9809 ldr r0, [sp, #36] ; 0x24 800a432: e77d b.n 800a330 <_vfiprintf_r+0xf4> 800a434: ab03 add r3, sp, #12 800a436: 9300 str r3, [sp, #0] 800a438: 4622 mov r2, r4 800a43a: 4b0a ldr r3, [pc, #40] ; (800a464 <_vfiprintf_r+0x228>) 800a43c: a904 add r1, sp, #16 800a43e: 4630 mov r0, r6 800a440: f000 f888 bl 800a554 <_printf_i> 800a444: e7ec b.n 800a420 <_vfiprintf_r+0x1e4> 800a446: bf00 nop 800a448: 0800af0c .word 0x0800af0c 800a44c: 0800af56 .word 0x0800af56 800a450: 0800af2c .word 0x0800af2c 800a454: 0800aeec .word 0x0800aeec 800a458: 0800af5c .word 0x0800af5c 800a45c: 0800af60 .word 0x0800af60 800a460: 00000000 .word 0x00000000 800a464: 0800a217 .word 0x0800a217 0800a468 <_printf_common>: 800a468: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} 800a46c: 4691 mov r9, r2 800a46e: 461f mov r7, r3 800a470: 688a ldr r2, [r1, #8] 800a472: 690b ldr r3, [r1, #16] 800a474: 4606 mov r6, r0 800a476: 4293 cmp r3, r2 800a478: bfb8 it lt 800a47a: 4613 movlt r3, r2 800a47c: f8c9 3000 str.w r3, [r9] 800a480: f891 2043 ldrb.w r2, [r1, #67] ; 0x43 800a484: 460c mov r4, r1 800a486: f8dd 8020 ldr.w r8, [sp, #32] 800a48a: b112 cbz r2, 800a492 <_printf_common+0x2a> 800a48c: 3301 adds r3, #1 800a48e: f8c9 3000 str.w r3, [r9] 800a492: 6823 ldr r3, [r4, #0] 800a494: 0699 lsls r1, r3, #26 800a496: bf42 ittt mi 800a498: f8d9 3000 ldrmi.w r3, [r9] 800a49c: 3302 addmi r3, #2 800a49e: f8c9 3000 strmi.w r3, [r9] 800a4a2: 6825 ldr r5, [r4, #0] 800a4a4: f015 0506 ands.w r5, r5, #6 800a4a8: d107 bne.n 800a4ba <_printf_common+0x52> 800a4aa: f104 0a19 add.w sl, r4, #25 800a4ae: 68e3 ldr r3, [r4, #12] 800a4b0: f8d9 2000 ldr.w r2, [r9] 800a4b4: 1a9b subs r3, r3, r2 800a4b6: 42ab cmp r3, r5 800a4b8: dc29 bgt.n 800a50e <_printf_common+0xa6> 800a4ba: f894 3043 ldrb.w r3, [r4, #67] ; 0x43 800a4be: 6822 ldr r2, [r4, #0] 800a4c0: 3300 adds r3, #0 800a4c2: bf18 it ne 800a4c4: 2301 movne r3, #1 800a4c6: 0692 lsls r2, r2, #26 800a4c8: d42e bmi.n 800a528 <_printf_common+0xc0> 800a4ca: f104 0243 add.w r2, r4, #67 ; 0x43 800a4ce: 4639 mov r1, r7 800a4d0: 4630 mov r0, r6 800a4d2: 47c0 blx r8 800a4d4: 3001 adds r0, #1 800a4d6: d021 beq.n 800a51c <_printf_common+0xb4> 800a4d8: 6823 ldr r3, [r4, #0] 800a4da: 68e5 ldr r5, [r4, #12] 800a4dc: f003 0306 and.w r3, r3, #6 800a4e0: 2b04 cmp r3, #4 800a4e2: bf18 it ne 800a4e4: 2500 movne r5, #0 800a4e6: f8d9 2000 ldr.w r2, [r9] 800a4ea: f04f 0900 mov.w r9, #0 800a4ee: bf08 it eq 800a4f0: 1aad subeq r5, r5, r2 800a4f2: 68a3 ldr r3, [r4, #8] 800a4f4: 6922 ldr r2, [r4, #16] 800a4f6: bf08 it eq 800a4f8: ea25 75e5 biceq.w r5, r5, r5, asr #31 800a4fc: 4293 cmp r3, r2 800a4fe: bfc4 itt gt 800a500: 1a9b subgt r3, r3, r2 800a502: 18ed addgt r5, r5, r3 800a504: 341a adds r4, #26 800a506: 454d cmp r5, r9 800a508: d11a bne.n 800a540 <_printf_common+0xd8> 800a50a: 2000 movs r0, #0 800a50c: e008 b.n 800a520 <_printf_common+0xb8> 800a50e: 2301 movs r3, #1 800a510: 4652 mov r2, sl 800a512: 4639 mov r1, r7 800a514: 4630 mov r0, r6 800a516: 47c0 blx r8 800a518: 3001 adds r0, #1 800a51a: d103 bne.n 800a524 <_printf_common+0xbc> 800a51c: f04f 30ff mov.w r0, #4294967295 800a520: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} 800a524: 3501 adds r5, #1 800a526: e7c2 b.n 800a4ae <_printf_common+0x46> 800a528: 2030 movs r0, #48 ; 0x30 800a52a: 18e1 adds r1, r4, r3 800a52c: f881 0043 strb.w r0, [r1, #67] ; 0x43 800a530: 1c5a adds r2, r3, #1 800a532: f894 1045 ldrb.w r1, [r4, #69] ; 0x45 800a536: 4422 add r2, r4 800a538: 3302 adds r3, #2 800a53a: f882 1043 strb.w r1, [r2, #67] ; 0x43 800a53e: e7c4 b.n 800a4ca <_printf_common+0x62> 800a540: 2301 movs r3, #1 800a542: 4622 mov r2, r4 800a544: 4639 mov r1, r7 800a546: 4630 mov r0, r6 800a548: 47c0 blx r8 800a54a: 3001 adds r0, #1 800a54c: d0e6 beq.n 800a51c <_printf_common+0xb4> 800a54e: f109 0901 add.w r9, r9, #1 800a552: e7d8 b.n 800a506 <_printf_common+0x9e> 0800a554 <_printf_i>: 800a554: e92d 43f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, lr} 800a558: f101 0c43 add.w ip, r1, #67 ; 0x43 800a55c: 460c mov r4, r1 800a55e: 7e09 ldrb r1, [r1, #24] 800a560: b085 sub sp, #20 800a562: 296e cmp r1, #110 ; 0x6e 800a564: 4617 mov r7, r2 800a566: 4606 mov r6, r0 800a568: 4698 mov r8, r3 800a56a: 9a0c ldr r2, [sp, #48] ; 0x30 800a56c: f000 80b3 beq.w 800a6d6 <_printf_i+0x182> 800a570: d822 bhi.n 800a5b8 <_printf_i+0x64> 800a572: 2963 cmp r1, #99 ; 0x63 800a574: d036 beq.n 800a5e4 <_printf_i+0x90> 800a576: d80a bhi.n 800a58e <_printf_i+0x3a> 800a578: 2900 cmp r1, #0 800a57a: f000 80b9 beq.w 800a6f0 <_printf_i+0x19c> 800a57e: 2958 cmp r1, #88 ; 0x58 800a580: f000 8083 beq.w 800a68a <_printf_i+0x136> 800a584: f104 0542 add.w r5, r4, #66 ; 0x42 800a588: f884 1042 strb.w r1, [r4, #66] ; 0x42 800a58c: e032 b.n 800a5f4 <_printf_i+0xa0> 800a58e: 2964 cmp r1, #100 ; 0x64 800a590: d001 beq.n 800a596 <_printf_i+0x42> 800a592: 2969 cmp r1, #105 ; 0x69 800a594: d1f6 bne.n 800a584 <_printf_i+0x30> 800a596: 6820 ldr r0, [r4, #0] 800a598: 6813 ldr r3, [r2, #0] 800a59a: 0605 lsls r5, r0, #24 800a59c: f103 0104 add.w r1, r3, #4 800a5a0: d52a bpl.n 800a5f8 <_printf_i+0xa4> 800a5a2: 681b ldr r3, [r3, #0] 800a5a4: 6011 str r1, [r2, #0] 800a5a6: 2b00 cmp r3, #0 800a5a8: da03 bge.n 800a5b2 <_printf_i+0x5e> 800a5aa: 222d movs r2, #45 ; 0x2d 800a5ac: 425b negs r3, r3 800a5ae: f884 2043 strb.w r2, [r4, #67] ; 0x43 800a5b2: 486f ldr r0, [pc, #444] ; (800a770 <_printf_i+0x21c>) 800a5b4: 220a movs r2, #10 800a5b6: e039 b.n 800a62c <_printf_i+0xd8> 800a5b8: 2973 cmp r1, #115 ; 0x73 800a5ba: f000 809d beq.w 800a6f8 <_printf_i+0x1a4> 800a5be: d808 bhi.n 800a5d2 <_printf_i+0x7e> 800a5c0: 296f cmp r1, #111 ; 0x6f 800a5c2: d020 beq.n 800a606 <_printf_i+0xb2> 800a5c4: 2970 cmp r1, #112 ; 0x70 800a5c6: d1dd bne.n 800a584 <_printf_i+0x30> 800a5c8: 6823 ldr r3, [r4, #0] 800a5ca: f043 0320 orr.w r3, r3, #32 800a5ce: 6023 str r3, [r4, #0] 800a5d0: e003 b.n 800a5da <_printf_i+0x86> 800a5d2: 2975 cmp r1, #117 ; 0x75 800a5d4: d017 beq.n 800a606 <_printf_i+0xb2> 800a5d6: 2978 cmp r1, #120 ; 0x78 800a5d8: d1d4 bne.n 800a584 <_printf_i+0x30> 800a5da: 2378 movs r3, #120 ; 0x78 800a5dc: 4865 ldr r0, [pc, #404] ; (800a774 <_printf_i+0x220>) 800a5de: f884 3045 strb.w r3, [r4, #69] ; 0x45 800a5e2: e055 b.n 800a690 <_printf_i+0x13c> 800a5e4: 6813 ldr r3, [r2, #0] 800a5e6: f104 0542 add.w r5, r4, #66 ; 0x42 800a5ea: 1d19 adds r1, r3, #4 800a5ec: 681b ldr r3, [r3, #0] 800a5ee: 6011 str r1, [r2, #0] 800a5f0: f884 3042 strb.w r3, [r4, #66] ; 0x42 800a5f4: 2301 movs r3, #1 800a5f6: e08c b.n 800a712 <_printf_i+0x1be> 800a5f8: 681b ldr r3, [r3, #0] 800a5fa: f010 0f40 tst.w r0, #64 ; 0x40 800a5fe: 6011 str r1, [r2, #0] 800a600: bf18 it ne 800a602: b21b sxthne r3, r3 800a604: e7cf b.n 800a5a6 <_printf_i+0x52> 800a606: 6813 ldr r3, [r2, #0] 800a608: 6825 ldr r5, [r4, #0] 800a60a: 1d18 adds r0, r3, #4 800a60c: 6010 str r0, [r2, #0] 800a60e: 0628 lsls r0, r5, #24 800a610: d501 bpl.n 800a616 <_printf_i+0xc2> 800a612: 681b ldr r3, [r3, #0] 800a614: e002 b.n 800a61c <_printf_i+0xc8> 800a616: 0668 lsls r0, r5, #25 800a618: d5fb bpl.n 800a612 <_printf_i+0xbe> 800a61a: 881b ldrh r3, [r3, #0] 800a61c: 296f cmp r1, #111 ; 0x6f 800a61e: bf14 ite ne 800a620: 220a movne r2, #10 800a622: 2208 moveq r2, #8 800a624: 4852 ldr r0, [pc, #328] ; (800a770 <_printf_i+0x21c>) 800a626: 2100 movs r1, #0 800a628: f884 1043 strb.w r1, [r4, #67] ; 0x43 800a62c: 6865 ldr r5, [r4, #4] 800a62e: 2d00 cmp r5, #0 800a630: 60a5 str r5, [r4, #8] 800a632: f2c0 8095 blt.w 800a760 <_printf_i+0x20c> 800a636: 6821 ldr r1, [r4, #0] 800a638: f021 0104 bic.w r1, r1, #4 800a63c: 6021 str r1, [r4, #0] 800a63e: 2b00 cmp r3, #0 800a640: d13d bne.n 800a6be <_printf_i+0x16a> 800a642: 2d00 cmp r5, #0 800a644: f040 808e bne.w 800a764 <_printf_i+0x210> 800a648: 4665 mov r5, ip 800a64a: 2a08 cmp r2, #8 800a64c: d10b bne.n 800a666 <_printf_i+0x112> 800a64e: 6823 ldr r3, [r4, #0] 800a650: 07db lsls r3, r3, #31 800a652: d508 bpl.n 800a666 <_printf_i+0x112> 800a654: 6923 ldr r3, [r4, #16] 800a656: 6862 ldr r2, [r4, #4] 800a658: 429a cmp r2, r3 800a65a: bfde ittt le 800a65c: 2330 movle r3, #48 ; 0x30 800a65e: f805 3c01 strble.w r3, [r5, #-1] 800a662: f105 35ff addle.w r5, r5, #4294967295 800a666: ebac 0305 sub.w r3, ip, r5 800a66a: 6123 str r3, [r4, #16] 800a66c: f8cd 8000 str.w r8, [sp] 800a670: 463b mov r3, r7 800a672: aa03 add r2, sp, #12 800a674: 4621 mov r1, r4 800a676: 4630 mov r0, r6 800a678: f7ff fef6 bl 800a468 <_printf_common> 800a67c: 3001 adds r0, #1 800a67e: d14d bne.n 800a71c <_printf_i+0x1c8> 800a680: f04f 30ff mov.w r0, #4294967295 800a684: b005 add sp, #20 800a686: e8bd 83f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, pc} 800a68a: 4839 ldr r0, [pc, #228] ; (800a770 <_printf_i+0x21c>) 800a68c: f884 1045 strb.w r1, [r4, #69] ; 0x45 800a690: 6813 ldr r3, [r2, #0] 800a692: 6821 ldr r1, [r4, #0] 800a694: 1d1d adds r5, r3, #4 800a696: 681b ldr r3, [r3, #0] 800a698: 6015 str r5, [r2, #0] 800a69a: 060a lsls r2, r1, #24 800a69c: d50b bpl.n 800a6b6 <_printf_i+0x162> 800a69e: 07ca lsls r2, r1, #31 800a6a0: bf44 itt mi 800a6a2: f041 0120 orrmi.w r1, r1, #32 800a6a6: 6021 strmi r1, [r4, #0] 800a6a8: b91b cbnz r3, 800a6b2 <_printf_i+0x15e> 800a6aa: 6822 ldr r2, [r4, #0] 800a6ac: f022 0220 bic.w r2, r2, #32 800a6b0: 6022 str r2, [r4, #0] 800a6b2: 2210 movs r2, #16 800a6b4: e7b7 b.n 800a626 <_printf_i+0xd2> 800a6b6: 064d lsls r5, r1, #25 800a6b8: bf48 it mi 800a6ba: b29b uxthmi r3, r3 800a6bc: e7ef b.n 800a69e <_printf_i+0x14a> 800a6be: 4665 mov r5, ip 800a6c0: fbb3 f1f2 udiv r1, r3, r2 800a6c4: fb02 3311 mls r3, r2, r1, r3 800a6c8: 5cc3 ldrb r3, [r0, r3] 800a6ca: f805 3d01 strb.w r3, [r5, #-1]! 800a6ce: 460b mov r3, r1 800a6d0: 2900 cmp r1, #0 800a6d2: d1f5 bne.n 800a6c0 <_printf_i+0x16c> 800a6d4: e7b9 b.n 800a64a <_printf_i+0xf6> 800a6d6: 6813 ldr r3, [r2, #0] 800a6d8: 6825 ldr r5, [r4, #0] 800a6da: 1d18 adds r0, r3, #4 800a6dc: 6961 ldr r1, [r4, #20] 800a6de: 6010 str r0, [r2, #0] 800a6e0: 0628 lsls r0, r5, #24 800a6e2: 681b ldr r3, [r3, #0] 800a6e4: d501 bpl.n 800a6ea <_printf_i+0x196> 800a6e6: 6019 str r1, [r3, #0] 800a6e8: e002 b.n 800a6f0 <_printf_i+0x19c> 800a6ea: 066a lsls r2, r5, #25 800a6ec: d5fb bpl.n 800a6e6 <_printf_i+0x192> 800a6ee: 8019 strh r1, [r3, #0] 800a6f0: 2300 movs r3, #0 800a6f2: 4665 mov r5, ip 800a6f4: 6123 str r3, [r4, #16] 800a6f6: e7b9 b.n 800a66c <_printf_i+0x118> 800a6f8: 6813 ldr r3, [r2, #0] 800a6fa: 1d19 adds r1, r3, #4 800a6fc: 6011 str r1, [r2, #0] 800a6fe: 681d ldr r5, [r3, #0] 800a700: 6862 ldr r2, [r4, #4] 800a702: 2100 movs r1, #0 800a704: 4628 mov r0, r5 800a706: f000 f8ed bl 800a8e4 800a70a: b108 cbz r0, 800a710 <_printf_i+0x1bc> 800a70c: 1b40 subs r0, r0, r5 800a70e: 6060 str r0, [r4, #4] 800a710: 6863 ldr r3, [r4, #4] 800a712: 6123 str r3, [r4, #16] 800a714: 2300 movs r3, #0 800a716: f884 3043 strb.w r3, [r4, #67] ; 0x43 800a71a: e7a7 b.n 800a66c <_printf_i+0x118> 800a71c: 6923 ldr r3, [r4, #16] 800a71e: 462a mov r2, r5 800a720: 4639 mov r1, r7 800a722: 4630 mov r0, r6 800a724: 47c0 blx r8 800a726: 3001 adds r0, #1 800a728: d0aa beq.n 800a680 <_printf_i+0x12c> 800a72a: 6823 ldr r3, [r4, #0] 800a72c: 079b lsls r3, r3, #30 800a72e: d413 bmi.n 800a758 <_printf_i+0x204> 800a730: 68e0 ldr r0, [r4, #12] 800a732: 9b03 ldr r3, [sp, #12] 800a734: 4298 cmp r0, r3 800a736: bfb8 it lt 800a738: 4618 movlt r0, r3 800a73a: e7a3 b.n 800a684 <_printf_i+0x130> 800a73c: 2301 movs r3, #1 800a73e: 464a mov r2, r9 800a740: 4639 mov r1, r7 800a742: 4630 mov r0, r6 800a744: 47c0 blx r8 800a746: 3001 adds r0, #1 800a748: d09a beq.n 800a680 <_printf_i+0x12c> 800a74a: 3501 adds r5, #1 800a74c: 68e3 ldr r3, [r4, #12] 800a74e: 9a03 ldr r2, [sp, #12] 800a750: 1a9b subs r3, r3, r2 800a752: 42ab cmp r3, r5 800a754: dcf2 bgt.n 800a73c <_printf_i+0x1e8> 800a756: e7eb b.n 800a730 <_printf_i+0x1dc> 800a758: 2500 movs r5, #0 800a75a: f104 0919 add.w r9, r4, #25 800a75e: e7f5 b.n 800a74c <_printf_i+0x1f8> 800a760: 2b00 cmp r3, #0 800a762: d1ac bne.n 800a6be <_printf_i+0x16a> 800a764: 7803 ldrb r3, [r0, #0] 800a766: f104 0542 add.w r5, r4, #66 ; 0x42 800a76a: f884 3042 strb.w r3, [r4, #66] ; 0x42 800a76e: e76c b.n 800a64a <_printf_i+0xf6> 800a770: 0800af67 .word 0x0800af67 800a774: 0800af78 .word 0x0800af78 0800a778 <_sbrk_r>: 800a778: b538 push {r3, r4, r5, lr} 800a77a: 2300 movs r3, #0 800a77c: 4c05 ldr r4, [pc, #20] ; (800a794 <_sbrk_r+0x1c>) 800a77e: 4605 mov r5, r0 800a780: 4608 mov r0, r1 800a782: 6023 str r3, [r4, #0] 800a784: f7f6 fa5a bl 8000c3c <_sbrk> 800a788: 1c43 adds r3, r0, #1 800a78a: d102 bne.n 800a792 <_sbrk_r+0x1a> 800a78c: 6823 ldr r3, [r4, #0] 800a78e: b103 cbz r3, 800a792 <_sbrk_r+0x1a> 800a790: 602b str r3, [r5, #0] 800a792: bd38 pop {r3, r4, r5, pc} 800a794: 20003d2c .word 0x20003d2c 0800a798 <__sread>: 800a798: b510 push {r4, lr} 800a79a: 460c mov r4, r1 800a79c: f9b1 100e ldrsh.w r1, [r1, #14] 800a7a0: f000 f8b0 bl 800a904 <_read_r> 800a7a4: 2800 cmp r0, #0 800a7a6: bfab itete ge 800a7a8: 6d63 ldrge r3, [r4, #84] ; 0x54 800a7aa: 89a3 ldrhlt r3, [r4, #12] 800a7ac: 181b addge r3, r3, r0 800a7ae: f423 5380 biclt.w r3, r3, #4096 ; 0x1000 800a7b2: bfac ite ge 800a7b4: 6563 strge r3, [r4, #84] ; 0x54 800a7b6: 81a3 strhlt r3, [r4, #12] 800a7b8: bd10 pop {r4, pc} 0800a7ba <__swrite>: 800a7ba: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} 800a7be: 461f mov r7, r3 800a7c0: 898b ldrh r3, [r1, #12] 800a7c2: 4605 mov r5, r0 800a7c4: 05db lsls r3, r3, #23 800a7c6: 460c mov r4, r1 800a7c8: 4616 mov r6, r2 800a7ca: d505 bpl.n 800a7d8 <__swrite+0x1e> 800a7cc: 2302 movs r3, #2 800a7ce: 2200 movs r2, #0 800a7d0: f9b1 100e ldrsh.w r1, [r1, #14] 800a7d4: f000 f874 bl 800a8c0 <_lseek_r> 800a7d8: 89a3 ldrh r3, [r4, #12] 800a7da: 4632 mov r2, r6 800a7dc: f423 5380 bic.w r3, r3, #4096 ; 0x1000 800a7e0: 81a3 strh r3, [r4, #12] 800a7e2: f9b4 100e ldrsh.w r1, [r4, #14] 800a7e6: 463b mov r3, r7 800a7e8: 4628 mov r0, r5 800a7ea: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} 800a7ee: f000 b823 b.w 800a838 <_write_r> 0800a7f2 <__sseek>: 800a7f2: b510 push {r4, lr} 800a7f4: 460c mov r4, r1 800a7f6: f9b1 100e ldrsh.w r1, [r1, #14] 800a7fa: f000 f861 bl 800a8c0 <_lseek_r> 800a7fe: 1c43 adds r3, r0, #1 800a800: 89a3 ldrh r3, [r4, #12] 800a802: bf15 itete ne 800a804: 6560 strne r0, [r4, #84] ; 0x54 800a806: f423 5380 biceq.w r3, r3, #4096 ; 0x1000 800a80a: f443 5380 orrne.w r3, r3, #4096 ; 0x1000 800a80e: 81a3 strheq r3, [r4, #12] 800a810: bf18 it ne 800a812: 81a3 strhne r3, [r4, #12] 800a814: bd10 pop {r4, pc} 0800a816 <__sclose>: 800a816: f9b1 100e ldrsh.w r1, [r1, #14] 800a81a: f000 b81f b.w 800a85c <_close_r> 0800a81e <__ascii_wctomb>: 800a81e: b149 cbz r1, 800a834 <__ascii_wctomb+0x16> 800a820: 2aff cmp r2, #255 ; 0xff 800a822: bf8b itete hi 800a824: 238a movhi r3, #138 ; 0x8a 800a826: 700a strbls r2, [r1, #0] 800a828: 6003 strhi r3, [r0, #0] 800a82a: 2001 movls r0, #1 800a82c: bf88 it hi 800a82e: f04f 30ff movhi.w r0, #4294967295 800a832: 4770 bx lr 800a834: 4608 mov r0, r1 800a836: 4770 bx lr 0800a838 <_write_r>: 800a838: b538 push {r3, r4, r5, lr} 800a83a: 4605 mov r5, r0 800a83c: 4608 mov r0, r1 800a83e: 4611 mov r1, r2 800a840: 2200 movs r2, #0 800a842: 4c05 ldr r4, [pc, #20] ; (800a858 <_write_r+0x20>) 800a844: 6022 str r2, [r4, #0] 800a846: 461a mov r2, r3 800a848: f7f8 fe9c bl 8003584 <_write> 800a84c: 1c43 adds r3, r0, #1 800a84e: d102 bne.n 800a856 <_write_r+0x1e> 800a850: 6823 ldr r3, [r4, #0] 800a852: b103 cbz r3, 800a856 <_write_r+0x1e> 800a854: 602b str r3, [r5, #0] 800a856: bd38 pop {r3, r4, r5, pc} 800a858: 20003d2c .word 0x20003d2c 0800a85c <_close_r>: 800a85c: b538 push {r3, r4, r5, lr} 800a85e: 2300 movs r3, #0 800a860: 4c05 ldr r4, [pc, #20] ; (800a878 <_close_r+0x1c>) 800a862: 4605 mov r5, r0 800a864: 4608 mov r0, r1 800a866: 6023 str r3, [r4, #0] 800a868: f7f6 f9b7 bl 8000bda <_close> 800a86c: 1c43 adds r3, r0, #1 800a86e: d102 bne.n 800a876 <_close_r+0x1a> 800a870: 6823 ldr r3, [r4, #0] 800a872: b103 cbz r3, 800a876 <_close_r+0x1a> 800a874: 602b str r3, [r5, #0] 800a876: bd38 pop {r3, r4, r5, pc} 800a878: 20003d2c .word 0x20003d2c 0800a87c <_fstat_r>: 800a87c: b538 push {r3, r4, r5, lr} 800a87e: 2300 movs r3, #0 800a880: 4c06 ldr r4, [pc, #24] ; (800a89c <_fstat_r+0x20>) 800a882: 4605 mov r5, r0 800a884: 4608 mov r0, r1 800a886: 4611 mov r1, r2 800a888: 6023 str r3, [r4, #0] 800a88a: f7f6 f9b1 bl 8000bf0 <_fstat> 800a88e: 1c43 adds r3, r0, #1 800a890: d102 bne.n 800a898 <_fstat_r+0x1c> 800a892: 6823 ldr r3, [r4, #0] 800a894: b103 cbz r3, 800a898 <_fstat_r+0x1c> 800a896: 602b str r3, [r5, #0] 800a898: bd38 pop {r3, r4, r5, pc} 800a89a: bf00 nop 800a89c: 20003d2c .word 0x20003d2c 0800a8a0 <_isatty_r>: 800a8a0: b538 push {r3, r4, r5, lr} 800a8a2: 2300 movs r3, #0 800a8a4: 4c05 ldr r4, [pc, #20] ; (800a8bc <_isatty_r+0x1c>) 800a8a6: 4605 mov r5, r0 800a8a8: 4608 mov r0, r1 800a8aa: 6023 str r3, [r4, #0] 800a8ac: f7f6 f9af bl 8000c0e <_isatty> 800a8b0: 1c43 adds r3, r0, #1 800a8b2: d102 bne.n 800a8ba <_isatty_r+0x1a> 800a8b4: 6823 ldr r3, [r4, #0] 800a8b6: b103 cbz r3, 800a8ba <_isatty_r+0x1a> 800a8b8: 602b str r3, [r5, #0] 800a8ba: bd38 pop {r3, r4, r5, pc} 800a8bc: 20003d2c .word 0x20003d2c 0800a8c0 <_lseek_r>: 800a8c0: b538 push {r3, r4, r5, lr} 800a8c2: 4605 mov r5, r0 800a8c4: 4608 mov r0, r1 800a8c6: 4611 mov r1, r2 800a8c8: 2200 movs r2, #0 800a8ca: 4c05 ldr r4, [pc, #20] ; (800a8e0 <_lseek_r+0x20>) 800a8cc: 6022 str r2, [r4, #0] 800a8ce: 461a mov r2, r3 800a8d0: f7f6 f9a7 bl 8000c22 <_lseek> 800a8d4: 1c43 adds r3, r0, #1 800a8d6: d102 bne.n 800a8de <_lseek_r+0x1e> 800a8d8: 6823 ldr r3, [r4, #0] 800a8da: b103 cbz r3, 800a8de <_lseek_r+0x1e> 800a8dc: 602b str r3, [r5, #0] 800a8de: bd38 pop {r3, r4, r5, pc} 800a8e0: 20003d2c .word 0x20003d2c 0800a8e4 : 800a8e4: b510 push {r4, lr} 800a8e6: b2c9 uxtb r1, r1 800a8e8: 4402 add r2, r0 800a8ea: 4290 cmp r0, r2 800a8ec: 4603 mov r3, r0 800a8ee: d101 bne.n 800a8f4 800a8f0: 2300 movs r3, #0 800a8f2: e003 b.n 800a8fc 800a8f4: 781c ldrb r4, [r3, #0] 800a8f6: 3001 adds r0, #1 800a8f8: 428c cmp r4, r1 800a8fa: d1f6 bne.n 800a8ea 800a8fc: 4618 mov r0, r3 800a8fe: bd10 pop {r4, pc} 0800a900 <__malloc_lock>: 800a900: 4770 bx lr 0800a902 <__malloc_unlock>: 800a902: 4770 bx lr 0800a904 <_read_r>: 800a904: b538 push {r3, r4, r5, lr} 800a906: 4605 mov r5, r0 800a908: 4608 mov r0, r1 800a90a: 4611 mov r1, r2 800a90c: 2200 movs r2, #0 800a90e: 4c05 ldr r4, [pc, #20] ; (800a924 <_read_r+0x20>) 800a910: 6022 str r2, [r4, #0] 800a912: 461a mov r2, r3 800a914: f7f8 fe26 bl 8003564 <_read> 800a918: 1c43 adds r3, r0, #1 800a91a: d102 bne.n 800a922 <_read_r+0x1e> 800a91c: 6823 ldr r3, [r4, #0] 800a91e: b103 cbz r3, 800a922 <_read_r+0x1e> 800a920: 602b str r3, [r5, #0] 800a922: bd38 pop {r3, r4, r5, pc} 800a924: 20003d2c .word 0x20003d2c 0800a928 <_init>: 800a928: b5f8 push {r3, r4, r5, r6, r7, lr} 800a92a: bf00 nop 800a92c: bcf8 pop {r3, r4, r5, r6, r7} 800a92e: bc08 pop {r3} 800a930: 469e mov lr, r3 800a932: 4770 bx lr 0800a934 <_fini>: 800a934: b5f8 push {r3, r4, r5, r6, r7, lr} 800a936: bf00 nop 800a938: bcf8 pop {r3, r4, r5, r6, r7} 800a93a: bc08 pop {r3} 800a93c: 469e mov lr, r3 800a93e: 4770 bx lr