can_uds_bootloader.elf: file format elf32-kungfu32-little Disassembly of section .text: 00000000 <_start>: __vector_entry__: 0: 00 00 01 10 b4 08 00 00 1a 1b 00 00 1e 1b 00 00 ................ 10: 00 00 00 00 22 1b 00 00 00 00 00 00 f2 a5 fe ef ...."........... ... 2c: 26 1b 00 00 00 00 00 00 00 00 00 00 2a 1b 00 00 &...........*... 3c: 2e 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ... 80: 34 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4............... ... 00000200 : CAN_Reset(): ..\src\kf32a156_can.c:59 * 描述 复位CAN外设,使能外设时钟。 * 输入 CANx: 指向CAN内存结构的指针,取值为CAN4_SFR。 * 返回 无。 */ void CAN_Reset(CAN_SFRmap* CANx) { 200: 81 5f PUSH {R6,LR} ..\src\kf32a156_can.c:63 /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); if(CANx == CAN4_SFR) 202: 04 45 LD R5, [PC + #4] ;->0x210 :=0x40002880 204: 05 70 CMP R0, R5 206: 07 f0 JZ $+7 ;->0x214 ..\src\kf32a156_can.c:70 RST_CTL3_Peripheral_Reset_Enable(RST_CTL3_CAN4RST, TRUE); PCLK_CTL3_Peripheral_Clock_Enable(PCLK_CTL3_CAN4CLKEN, TRUE);//huanglt clk顺序?? RST_CTL3_Peripheral_Reset_Enable(RST_CTL3_CAN4RST, FALSE); CAN_RAM_ERASE(); } } 208: 06 5d POP R6 20a: 0d 5d POP LR 20c: 1d 5c JMP LR 20e: 00 00 NOP NOP 210: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x210 :=0x40002880 ..\src\kf32a156_can.c:65 /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); if(CANx == CAN4_SFR) { RST_CTL3_Peripheral_Reset_Enable(RST_CTL3_CAN4RST, TRUE); 214: 01 10 MOV R0, #1 216: 01 7b LSL R0, #17 218: 11 10 MOV R1, #1 21a: 0b 46 LD R6, [PC + #11] ;->0x244 :=0x71c 21c: 06 5c LJMP R6 ..\src\kf32a156_can.c:66 PCLK_CTL3_Peripheral_Clock_Enable(PCLK_CTL3_CAN4CLKEN, TRUE);//huanglt clk顺序?? 21e: 01 10 MOV R0, #1 220: 01 7b LSL R0, #17 222: 11 10 MOV R1, #1 224: 09 45 LD R5, [PC + #9] ;->0x248 :=0x6c8 226: 05 5c LJMP R5 ..\src\kf32a156_can.c:67 RST_CTL3_Peripheral_Reset_Enable(RST_CTL3_CAN4RST, FALSE); 228: 01 10 MOV R0, #1 22a: 01 7b LSL R0, #17 22c: 10 10 MOV R1, #0 22e: 06 5c LJMP R6 230: 07 45 LD R5, [PC + #7] ;->0x24c :=0x1ffef800 ..\src\kf32a156_can.c:46 */ static void CAN_RAM_ERASE(void) { for(uint16_t i = 0;i< 1024;i++) { *((uint8_t *)CAN4_RECEIVE_ADDR + i) = 0x00; 232: 30 10 MOV R3, #0 ..\src\kf32a156_can.c:44 /** * 先初始化RAM区,RAM区全部清零 */ static void CAN_RAM_ERASE(void) { for(uint16_t i = 0;i< 1024;i++) 234: 07 44 LD R4, [PC + #7] ;->0x250 :=0x1ffefc00 ..\src\kf32a156_can.c:46 { *((uint8_t *)CAN4_RECEIVE_ADDR + i) = 0x00; 236: 53 77 ST.B [R5++], R3 ..\src\kf32a156_can.c:44 /** * 先初始化RAM区,RAM区全部清零 */ static void CAN_RAM_ERASE(void) { for(uint16_t i = 0;i< 1024;i++) 238: 54 70 CMP R5, R4 23a: fe f1 JNZ $-2 ;->0x236 ..\src\kf32a156_can.c:70 RST_CTL3_Peripheral_Reset_Enable(RST_CTL3_CAN4RST, TRUE); PCLK_CTL3_Peripheral_Clock_Enable(PCLK_CTL3_CAN4CLKEN, TRUE);//huanglt clk顺序?? RST_CTL3_Peripheral_Reset_Enable(RST_CTL3_CAN4RST, FALSE); CAN_RAM_ERASE(); } } 23c: 06 5d POP R6 23e: 0d 5d POP LR 240: 1d 5c JMP LR 242: 00 00 NOP NOP 244: 1c 07 00 00 .long 0x0000071c ->000001820 [!!!@2@:SJMP $-228 ;->0x7c @@: NOP 248: c8 06 00 00 .long 0x000006c8 ->000001736 [!!!@2@:SJMP $-312 ;->0xffffffd8 @@: NOP 24c: 00 f8 fe 1f .long 0x1ffef800 ->536803328 [!!!@2@:JHI $+0 ;->0x24c @@: MOV PC, #254 250: 00 fc fe 1f .long 0x1ffefc00 ->536804352 [!!!@2@:JGT $+0 ;->0x250 @@: MOV PC, #254 00000254 : CAN_Get_Receive_Message_Counter(): ..\src\kf32a156_can.c:171 /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); /*---------------- 读取CANx_CTLR寄存器CANRMC位 ----------------*/ tmpreg = CANx->CTLR; 254: 00 82 LD.W R0, [R0] ..\src\kf32a156_can.c:172 tmpreg &= CAN_CTLR_CANRMC; 256: 03 45 LD R5, [PC + #3] ;->0x260 :=0x7f000000 258: 40 d5 ANL R0, R0, R5 ..\src\kf32a156_can.c:176 tmpreg >>= CAN_CTLR_CANRMC0_POS; return tmpreg; } 25a: 80 7d LSR R0, #24 25c: 1d 5c JMP LR 25e: 00 00 NOP NOP 260: 00 00 00 7f .long 0x7f000000 ->2130706432 [!!!@2@:NOP @@: ROR R0, #16 00000264 : CAN_Get_Transmit_Status(): ..\src\kf32a156_can.c:204 /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); CHECK_RESTRICTION(CHECK_CAN_STATUS(Type)); /*---------------- 读取CANx_CTLR寄存器对应位 ----------------*/ tmpreg = CANx->CTLR; 264: 50 82 LD.W R5, [R0] ..\src\kf32a156_can.c:206 if (tmpreg & Type) 266: 49 d5 ANL R1, R1, R5 268: 50 10 MOV R5, #0 26a: 6d c6 SUB R5, R5, R1 26c: 45 d6 ORL R0, R5, R1 ..\src\kf32a156_can.c:216 else { /* 状态位为0 */ return RESET; } } 26e: 87 7d LSR R0, #31 270: 1d 5c JMP LR ... 00000274 : CAN_Get_Point_Of_RAM_Mailbox(): ..\src\kf32a156_can.c:359 { uint32_t tmpreg; /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); tmpreg = (CANx->RCR & CAN_RCR_RAMMB) >> CAN_RCR_RAMMB0_POS; 274: 80 98 LD.W R0, [R0 + #2] 276: 03 45 LD R5, [PC + #3] ;->0x280 :=0x3f0000 278: 40 d5 ANL R0, R0, R5 ..\src\kf32a156_can.c:362 return (uint8_t)tmpreg; } 27a: 00 7d LSR R0, #16 27c: 1d 5c JMP LR 27e: 00 00 NOP NOP 280: 00 00 3f 00 .long 0x003f0000 ->004128768 00000284 : CAN_Release_Receive_Buffer(): ..\src\kf32a156_can.c:853 * 输入 CANx: 指向CAN内存结构的指针,取值为CAN4_SFR。 * ReleaseCount: 释放缓冲器次数 * 返回 无。 */ void CAN_Release_Receive_Buffer (CAN_SFRmap* CANx, uint32_t ReleaseCount)//add release status huanglt { 284: 26 5d PUSH R6 286: e4 30 SUB SP, #4 ..\src\kf32a156_can.c:860 volatile uint32_t delaytime; /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); /*-------------------- 设置CANx_CTLR寄存器RELRX位 --------------------*/ for(i=0;i0x2be ..\src\kf32a156_can.c:862 { tmprmc = (CANx->CTLR&CAN_CTLR_CANRMC)>>CAN_CTLR_CANRMC0_POS; 28c: 50 82 LD.W R5, [R0] 28e: 0e 46 LD R6, [PC + #14] ;->0x2c4 :=0x7f000000 ..\src\kf32a156_can.c:863 if(tmprmc == 0) 290: ad d5 ANL R5, R5, R6 292: 16 f0 JZ $+22 ;->0x2be 294: 30 10 MOV R3, #0 ..\src\kf32a156_can.c:869 { return ; }else { SFR_SET_BIT_ASM(CANx->CTLR, CAN_CTLR_RELRX_POS); delaytime = 0x50; 296: 20 15 MOV R2, #80 ..\src\kf32a156_can.c:868 if(tmprmc == 0) { return ; }else { SFR_SET_BIT_ASM(CANx->CTLR, CAN_CTLR_RELRX_POS); 298: 82 4c SET [R0], #10 ..\src\kf32a156_can.c:869 delaytime = 0x50; 29a: e2 85 ST.W [SP], R2 ..\src\kf32a156_can.c:870 while(delaytime--) 29c: 5e 82 LD.W R5, [SP] 29e: 65 cc SUB R4, R5, #1 2a0: e4 85 ST.W [SP], R4 2a2: 50 38 CMP R5, #0 2a4: 07 f0 JZ $+7 ;->0x2b2 ..\src\kf32a156_can.c:872 { asm("nop"); 2a6: 00 00 NOP NOP ..\src\kf32a156_can.c:870 return ; }else { SFR_SET_BIT_ASM(CANx->CTLR, CAN_CTLR_RELRX_POS); delaytime = 0x50; while(delaytime--) 2a8: 5e 82 LD.W R5, [SP] 2aa: 65 cc SUB R4, R5, #1 2ac: e4 85 ST.W [SP], R4 2ae: 50 38 CMP R5, #0 2b0: fb f1 JNZ $-5 ;->0x2a6 ..\src\kf32a156_can.c:860 volatile uint32_t delaytime; /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); /*-------------------- 设置CANx_CTLR寄存器RELRX位 --------------------*/ for(i=0;i0x2be ..\src\kf32a156_can.c:862 { tmprmc = (CANx->CTLR&CAN_CTLR_CANRMC)>>CAN_CTLR_CANRMC0_POS; 2b8: 50 82 LD.W R5, [R0] ..\src\kf32a156_can.c:863 if(tmprmc == 0) 2ba: ad d5 ANL R5, R5, R6 2bc: ee f1 JNZ $-18 ;->0x298 ..\src\kf32a156_can.c:876 { asm("nop"); } } } } 2be: e4 28 ADD SP, #4 2c0: 06 5d POP R6 2c2: 1d 5c JMP LR 2c4: 00 00 00 7f .long 0x7f000000 ->2130706432 [!!!@2@:NOP @@: ROR R0, #16 000002c8 : CAN_Transmit_Single(): ..\src\kf32a156_can.c:885 * 输入 CANx: 指向CAN内存结构的指针,取值为CAN4_SFR。 * 返回 :已发送状态,不确保发送成功。 * 备注:调用之前需确保总线开启,并处于空闲状态 */ RetStatus CAN_Transmit_Single (CAN_SFRmap* CANx) { 2c8: e4 30 SUB SP, #4 ..\src\kf32a156_can.c:886 volatile uint32_t wait_flag = 0x0000; 2ca: 50 10 MOV R5, #0 2cc: e5 85 ST.W [SP], R5 ..\src\kf32a156_can.c:891 /* 参数校验 */ CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); /*-------------------- 设置CANx_CTLR寄存器TXR位 --------------------*/ SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_ATX_POS); 2ce: 81 4e CLR [R0], #9 ..\src\kf32a156_can.c:892 SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_TXR_POS); 2d0: 80 4e CLR [R0], #8 ..\src\kf32a156_can.c:893 CANx->CTLR = CANx->CTLR | 0x300; 2d2: 50 82 LD.W R5, [R0] 2d4: a8 48 SET R5, #8 2d6: a9 48 SET R5, #9 2d8: 05 85 ST.W [R0], R5 ..\src\kf32a156_can.c:894 while((!(CANx->CTLR & CAN_CTLR_TXSTA))&& (wait_flag != FLAG_TIMEOUT)) 2da: 50 82 LD.W R5, [R0] 2dc: 41 10 MOV R4, #1 2de: 25 7b LSL R4, #21 2e0: 2d d5 ANL R5, R5, R4 2e2: 0f f1 JNZ $+15 ;->0x300 2e4: 5e 82 LD.W R5, [SP] 2e6: 0d 43 LD R3, [PC + #13] ;->0x318 :=0xffff 2e8: 53 70 CMP R5, R3 2ea: 05 f1 JNZ $+5 ;->0x2f4 2ec: 0a 04 SJMP $+10 ;->0x300 2ee: 5e 82 LD.W R5, [SP] 2f0: 53 70 CMP R5, R3 2f2: 07 f0 JZ $+7 ;->0x300 ..\src\kf32a156_can.c:896 { wait_flag++; 2f4: 5e 82 LD.W R5, [SP] 2f6: 6d c0 ADD R5, R5, #1 2f8: e5 85 ST.W [SP], R5 ..\src\kf32a156_can.c:894 /*-------------------- 设置CANx_CTLR寄存器TXR位 --------------------*/ SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_ATX_POS); SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_TXR_POS); CANx->CTLR = CANx->CTLR | 0x300; while((!(CANx->CTLR & CAN_CTLR_TXSTA))&& (wait_flag != FLAG_TIMEOUT)) 2fa: 50 82 LD.W R5, [R0] 2fc: 2d d5 ANL R5, R5, R4 2fe: f8 f0 JZ $-8 ;->0x2ee ..\src\kf32a156_can.c:898 { wait_flag++; } SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_ATX_POS); 300: 81 4e CLR [R0], #9 ..\src\kf32a156_can.c:899 SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_TXR_POS); 302: 80 4e CLR [R0], #8 ..\src\kf32a156_can.c:900 if(wait_flag==FLAG_TIMEOUT) 304: 0e 82 LD.W R0, [SP] 306: 05 45 LD R5, [PC + #5] ;->0x318 :=0xffff 308: 68 d9 XRL R5, R0, R5 30a: 00 10 MOV R0, #0 30c: 40 c7 SUB R0, R0, R5 30e: 40 d7 ORL R0, R0, R5 310: 87 7d LSR R0, #31 ..\src\kf32a156_can.c:905 { return FAILURE; } return SUCCESS; } 312: e4 28 ADD SP, #4 314: 1d 5c JMP LR 316: 00 00 NOP NOP 318: ff ff 00 00 .long 0x0000ffff ->000065535 0000031c : CAN_Get_INT_Flag(): ..\src\kf32a156_can.c:969 CHECK_RESTRICTION(CHECK_CAN_INT_ONE_EVENT(InterruptType)); /* 配置中断标志掩码 */ tmpreg = InterruptType << CAN_IFR_CANRXIF_POS; /*---------------- 读取CAN_IFR寄存器中断标志位 ----------------*/ if (CANx->IFR & tmpreg) 31c: e8 99 LD.W R5, [R0 + #7] 31e: 49 d5 ANL R1, R1, R5 320: 50 10 MOV R5, #0 322: 6d c6 SUB R5, R5, R1 324: 45 d6 ORL R0, R5, R1 ..\src\kf32a156_can.c:979 else { /* 未发生中断 */ return RESET; } } 326: 87 7d LSR R0, #31 328: 1d 5c JMP LR 0000032a : CAN_Clear_INT_Flag(): ..\src\kf32a156_can.c:1007 CHECK_RESTRICTION(CHECK_CAN_INT_EVENT(InterruptType)); /*---------------- 清零CAN_IER寄存器中断标志位 ----------------*/ tmpreg = InterruptType << CAN_IFR_CANRXIF_POS; if(InterruptType == CAN_INT_RECEIVED_SUCCESSFULLY) 32a: 51 10 MOV R5, #1 32c: aa 7a LSL R5, #10 32e: 15 70 CMP R1, R5 330: 0e f0 JZ $+14 ;->0x34c ..\src\kf32a156_can.c:1012 { CANx->IER |= InterruptType << 6; }else { CANx->IER |= InterruptType << CAN_IER_CANRXIC_POS; 332: a8 99 LD.W R5, [R0 + #6] 334: 30 11 MOV R3, #16 336: e1 da LSL R4, R1, R3 338: 6c d7 ORL R5, R4, R5 33a: 85 a1 ST.W [R0 + #6], R5 ..\src\kf32a156_can.c:1014 } while((CANx->IFR & tmpreg)>0); 33c: e8 99 LD.W R5, [R0 + #7] 33e: 69 d5 ANL R5, R1, R5 340: fe f1 JNZ $-2 ;->0x33c ..\src\kf32a156_can.c:1015 CANx->IER &= ~(InterruptType << CAN_IER_CANRXIC_POS); 342: a8 99 LD.W R5, [R0 + #6] 344: 44 68 NOT R4, R4 346: 64 d5 ANL R4, R4, R5 348: 84 a1 ST.W [R0 + #6], R4 ..\src\kf32a156_can.c:1016 } 34a: 1d 5c JMP LR ..\src\kf32a156_can.c:1009 /*---------------- 清零CAN_IER寄存器中断标志位 ----------------*/ tmpreg = InterruptType << CAN_IFR_CANRXIF_POS; if(InterruptType == CAN_INT_RECEIVED_SUCCESSFULLY) { CANx->IER |= InterruptType << 6; 34c: a8 99 LD.W R5, [R0 + #6] 34e: 28 49 SET R5, #16 350: 85 a1 ST.W [R0 + #6], R5 352: 41 10 MOV R4, #1 354: a2 7b LSL R4, #26 356: f3 07 SJMP $-13 ;->0x33c 00000358 : CAN_Set_INT_Enable(): ..\src\kf32a156_can.c:1046 /*---------------- 配置CAN_IER寄存器中断使能位 ----------------*/ if (NewState != FALSE) { /* 使能中断 */ CANx->IER |= InterruptType << CAN_IER_CANRXIE_POS; 358: a8 99 LD.W R5, [R0 + #6] ..\src\kf32a156_can.c:1043 CHECK_RESTRICTION(CHECK_CAN_ALL_PERIPH(CANx)); CHECK_RESTRICTION(CHECK_CAN_INT_EVENT(InterruptType)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 配置CAN_IER寄存器中断使能位 ----------------*/ if (NewState != FALSE) 35a: 20 38 CMP R2, #0 35c: 05 f1 JNZ $+5 ;->0x366 ..\src\kf32a156_can.c:1051 CANx->IER |= InterruptType << CAN_IER_CANRXIE_POS; } else { /* 禁止中断 */ CANx->IER &= ~(InterruptType << CAN_IER_CANRXIE_POS); 35e: 11 68 NOT R1, R1 360: 49 d5 ANL R1, R1, R5 362: 81 a1 ST.W [R0 + #6], R1 ..\src\kf32a156_can.c:1053 } } 364: 1d 5c JMP LR ..\src\kf32a156_can.c:1046 /*---------------- 配置CAN_IER寄存器中断使能位 ----------------*/ if (NewState != FALSE) { /* 使能中断 */ CANx->IER |= InterruptType << CAN_IER_CANRXIE_POS; 366: 49 d7 ORL R1, R1, R5 368: 81 a1 ST.W [R0 + #6], R1 ..\src\kf32a156_can.c:1053 else { /* 禁止中断 */ CANx->IER &= ~(InterruptType << CAN_IER_CANRXIE_POS); } } 36a: 1d 5c JMP LR 0000036c : GPIO_Configuration(): ..\src\kf32a156_gpio.c:116 * 输入 GPIOx: 指向GPIO内存结构的指针,取值为GPIOA_SFR~GPIOH_SFR。 * gpioInitStruct: GPIO配置信息结构体指针。 * 返回 无。 **/ void GPIO_Configuration (GPIO_SFRmap* GPIOx, GPIO_InitTypeDef* gpioInitStruct) { 36c: 1f 5f PUSH {R6-R10} 36e: 61 82 LD.W R6, [R1] ..\src\kf32a156_gpio.c:131 CHECK_RESTRICTION(CHECK_GPIO_SPEED(gpioInitStruct->m_Speed)); CHECK_RESTRICTION(CHECK_GPIO_PU(gpioInitStruct->m_PullUp)); CHECK_RESTRICTION(CHECK_GPIO_PD(gpioInitStruct->m_PullDown)); /* 配置一个引脚信息 */ for (pinpos = 0x00; pinpos < 0x10; pinpos++) 370: 50 10 MOV R5, #0 ..\src\kf32a156_gpio.c:133 { pos = ((uint32_t)0x01) << pinpos; 372: 21 10 MOV R2, #1 ..\src\kf32a156_gpio.c:143 { /*----------- 设置GPIOx_PMOD寄存器 -----------*/ /* 根据结构体成员m_Mode,设置PXPMDy位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_Mode) << (pinpos * 2)); GPIOx->PMOD = SFR_Config (GPIOx->PMOD, ~(GPIO_PMOD_PXPMD0 << (pinpos * 2)), 374: a3 10 MOV R10, #3 376: 04 04 SJMP $+4 ;->0x37e ..\src\kf32a156_gpio.c:131 CHECK_RESTRICTION(CHECK_GPIO_SPEED(gpioInitStruct->m_Speed)); CHECK_RESTRICTION(CHECK_GPIO_PU(gpioInitStruct->m_PullUp)); CHECK_RESTRICTION(CHECK_GPIO_PD(gpioInitStruct->m_PullDown)); /* 配置一个引脚信息 */ for (pinpos = 0x00; pinpos < 0x10; pinpos++) 378: 6d c0 ADD R5, R5, #1 37a: 50 39 CMP R5, #16 37c: 31 f0 JZ $+49 ;->0x3de ..\src\kf32a156_gpio.c:133 { pos = ((uint32_t)0x01) << pinpos; 37e: 62 db LSL R4, R2, R5 ..\src\kf32a156_gpio.c:135 /* 获取引脚位置信息 */ currentpin = (gpioInitStruct->m_Pin) & pos; 380: 9c d5 ANL R3, R4, R6 ..\src\kf32a156_gpio.c:137 if (currentpin == pos) 382: 34 70 CMP R3, R4 384: fa f1 JNZ $-6 ;->0x378 ..\src\kf32a156_gpio.c:115 * 描述 通用输入输出端口(GPIO)初始化配置。 * 输入 GPIOx: 指向GPIO内存结构的指针,取值为GPIOA_SFR~GPIOH_SFR。 * gpioInitStruct: GPIO配置信息结构体指针。 * 返回 无。 **/ void GPIO_Configuration (GPIO_SFRmap* GPIOx, GPIO_InitTypeDef* gpioInitStruct) 386: 65 c3 ADD R4, R5, R5 ..\src\kf32a156_gpio.c:142 if (currentpin == pos) { /*----------- 设置GPIOx_PMOD寄存器 -----------*/ /* 根据结构体成员m_Mode,设置PXPMDy位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_Mode) << (pinpos * 2)); GPIOx->PMOD = SFR_Config (GPIOx->PMOD, 388: 78 99 LD.W R7, [R0 + #5] 38a: 27 59 MOV R9, R7 ..\src\kf32a156_gpio.c:143 ~(GPIO_PMOD_PXPMD0 << (pinpos * 2)), 38c: ea 58 MOV R7, R10 38e: 3f db LSL R7, R7, R4 ..\src\kf32a156_gpio.c:142 if (currentpin == pos) { /*----------- 设置GPIOx_PMOD寄存器 -----------*/ /* 根据结构体成员m_Mode,设置PXPMDy位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_Mode) << (pinpos * 2)); GPIOx->PMOD = SFR_Config (GPIOx->PMOD, 390: 87 68 NOT R8, R7 KF32A156.h:14083 ---------------------------------------------------------------------------- */ /* 写特殊功能寄存器 */ static inline uint32_t SFR_Config (uint32_t SfrMem, uint32_t SfrMask, uint32_t WriteVal) { return ((SfrMem & SfrMask) | (WriteVal)); 392: 89 69 ANL R8, R9 ..\src\kf32a156_gpio.c:141 if (currentpin == pos) { /*----------- 设置GPIOx_PMOD寄存器 -----------*/ /* 根据结构体成员m_Mode,设置PXPMDy位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_Mode) << (pinpos * 2)); 394: 79 98 LD.W R7, [R1 + #1] 396: 3f db LSL R7, R7, R4 KF32A156.h:14083 398: 87 6a ORL R8, R7 ..\src\kf32a156_gpio.c:142 GPIOx->PMOD = SFR_Config (GPIOx->PMOD, 39a: e8 58 MOV R7, R8 39c: 47 a1 ST.W [R0 + #5], R7 ..\src\kf32a156_gpio.c:147 ~(GPIO_PMOD_PXPMD0 << (pinpos * 2)), tmpreg); if ((gpioInitStruct->m_Mode == GPIO_MODE_OUT) || (gpioInitStruct->m_Mode == GPIO_MODE_RMP)) 39e: 79 98 LD.W R7, [R1 + #1] 3a0: 7f cc SUB R7, R7, #1 ..\src\kf32a156_gpio.c:146 tmpreg = (((uint32_t)gpioInitStruct->m_Mode) << (pinpos * 2)); GPIOx->PMOD = SFR_Config (GPIOx->PMOD, ~(GPIO_PMOD_PXPMD0 << (pinpos * 2)), tmpreg); if ((gpioInitStruct->m_Mode == GPIO_MODE_OUT) 3a2: 71 38 CMP R7, #1 3a4: 1f f9 JLS $+31 ;->0x3e2 3a6: 33 68 NOT R3, R3 ..\src\kf32a156_gpio.c:167 } /*----------- 设置GPIOx_OMOD寄存器 -----------*/ /* 根据结构体成员m_Speed,设置PXOMD位域 */ tmpreg = ((uint32_t)gpioInitStruct->m_Speed) << (pinpos * 2); GPIOx->OMOD = SFR_Config (GPIOx->OMOD, 3a8: b8 99 LD.W R7, [R0 + #6] 3aa: 27 59 MOV R9, R7 ..\src\kf32a156_gpio.c:168 ~(GPIO_OMOD_PXOMD0 << (pinpos * 2)), 3ac: 3a db LSL R7, R2, R4 ..\src\kf32a156_gpio.c:167 } /*----------- 设置GPIOx_OMOD寄存器 -----------*/ /* 根据结构体成员m_Speed,设置PXOMD位域 */ tmpreg = ((uint32_t)gpioInitStruct->m_Speed) << (pinpos * 2); GPIOx->OMOD = SFR_Config (GPIOx->OMOD, 3ae: 87 68 NOT R8, R7 KF32A156.h:14083 3b0: 89 69 ANL R8, R9 ..\src\kf32a156_gpio.c:166 ; } /*----------- 设置GPIOx_OMOD寄存器 -----------*/ /* 根据结构体成员m_Speed,设置PXOMD位域 */ tmpreg = ((uint32_t)gpioInitStruct->m_Speed) << (pinpos * 2); 3b2: b9 98 LD.W R7, [R1 + #2] 3b4: 27 db LSL R4, R7, R4 KF32A156.h:14083 3b6: e8 58 MOV R7, R8 3b8: 27 d7 ORL R4, R7, R4 ..\src\kf32a156_gpio.c:167 GPIOx->OMOD = SFR_Config (GPIOx->OMOD, 3ba: 84 a1 ST.W [R0 + #6], R4 ..\src\kf32a156_gpio.c:174 tmpreg); /*----------- 设置GPIOx_PUR寄存器 -----------*/ /* 根据结构体成员m_PullUp,设置PXPUR位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_PullUp) << (pinpos)); GPIOx->PUR = SFR_Config (GPIOx->PUR, 3bc: a0 98 LD.W R4, [R0 + #2] KF32A156.h:14083 3be: 23 d5 ANL R4, R3, R4 3c0: 04 59 MOV R8, R4 ..\src\kf32a156_gpio.c:173 ~(GPIO_OMOD_PXOMD0 << (pinpos * 2)), tmpreg); /*----------- 设置GPIOx_PUR寄存器 -----------*/ /* 根据结构体成员m_PullUp,设置PXPUR位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_PullUp) << (pinpos)); 3c2: 39 99 LD.W R7, [R1 + #4] 3c4: 67 db LSL R4, R7, R5 KF32A156.h:14083 3c6: e8 58 MOV R7, R8 3c8: 27 d7 ORL R4, R7, R4 ..\src\kf32a156_gpio.c:174 GPIOx->PUR = SFR_Config (GPIOx->PUR, 3ca: 84 a0 ST.W [R0 + #2], R4 ..\src\kf32a156_gpio.c:181 tmpreg); /*----------- 设置GPIOx_PDR寄存器 -----------*/ /* 根据结构体成员m_PullDown,设置PXPDR位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_PullDown) << (pinpos)); GPIOx->PDR = SFR_Config (GPIOx->PDR, 3cc: e0 98 LD.W R4, [R0 + #3] KF32A156.h:14083 3ce: 1b d5 ANL R3, R3, R4 ..\src\kf32a156_gpio.c:180 ~(GPIO_PUR_PXPUR0 << pinpos), tmpreg); /*----------- 设置GPIOx_PDR寄存器 -----------*/ /* 根据结构体成员m_PullDown,设置PXPDR位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_PullDown) << (pinpos)); 3d0: 79 99 LD.W R7, [R1 + #5] 3d2: 67 db LSL R4, R7, R5 KF32A156.h:14083 3d4: 1b d7 ORL R3, R3, R4 ..\src\kf32a156_gpio.c:181 GPIOx->PDR = SFR_Config (GPIOx->PDR, 3d6: c3 a0 ST.W [R0 + #3], R3 ..\src\kf32a156_gpio.c:131 CHECK_RESTRICTION(CHECK_GPIO_SPEED(gpioInitStruct->m_Speed)); CHECK_RESTRICTION(CHECK_GPIO_PU(gpioInitStruct->m_PullUp)); CHECK_RESTRICTION(CHECK_GPIO_PD(gpioInitStruct->m_PullDown)); /* 配置一个引脚信息 */ for (pinpos = 0x00; pinpos < 0x10; pinpos++) 3d8: 6d c0 ADD R5, R5, #1 3da: 50 39 CMP R5, #16 3dc: d1 f1 JNZ $-47 ;->0x37e ..\src\kf32a156_gpio.c:190 else { ; } } } 3de: 1f 5e POP {R6-R10} 3e0: 1d 5c JMP LR ..\src\kf32a156_gpio.c:155 CHECK_RESTRICTION(CHECK_GPIO_POD(gpioInitStruct->m_OpenDrain)); /*----------- 设置GPIOx_PODR寄存器 -----------*/ /* 根据结构体成员m_OpenDrain,设置PXPODR位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_OpenDrain) << (pinpos)); GPIOx->PODR = SFR_Config (GPIOx->PODR, 3e2: 38 99 LD.W R7, [R0 + #4] 3e4: 07 59 MOV R8, R7 3e6: 33 68 NOT R3, R3 KF32A156.h:14083 3e8: e3 58 MOV R7, R3 3ea: 78 69 ANL R7, R8 3ec: 07 59 MOV R8, R7 ..\src\kf32a156_gpio.c:154 /* GPIO开漏控制参数校验 */ CHECK_RESTRICTION(CHECK_GPIO_POD(gpioInitStruct->m_OpenDrain)); /*----------- 设置GPIOx_PODR寄存器 -----------*/ /* 根据结构体成员m_OpenDrain,设置PXPODR位域 */ tmpreg = (((uint32_t)gpioInitStruct->m_OpenDrain) << (pinpos)); 3ee: f9 98 LD.W R7, [R1 + #3] 3f0: 7f db LSL R7, R7, R5 KF32A156.h:14083 3f2: 87 6a ORL R8, R7 ..\src\kf32a156_gpio.c:155 GPIOx->PODR = SFR_Config (GPIOx->PODR, 3f4: e8 58 MOV R7, R8 3f6: 07 a1 ST.W [R0 + #4], R7 3f8: d8 07 SJMP $-40 ;->0x3a8 000003fa : GPIO_Pull_Up_Enable(): ..\src\kf32a156_gpio.c:263 * 一个或多个组合。 * NewState: GPIO端口上拉使能状态,取值范围为TRUE 或 FALSE。 * 返回 无。 */ void GPIO_Pull_Up_Enable (GPIO_SFRmap* GPIOx,uint16_t GpioPin, FunctionalState NewState) { 3fa: 11 d0 ZXT.H R1, R1 ..\src\kf32a156_gpio.c:273 /* ----------- 设置GPIOx_PUR寄存器 ----------- */ if(NewState != FALSE) { /* 使能上拉功能 */ GPIOx->PUR |= (uint32_t)GpioPin; 3fc: a8 98 LD.W R5, [R0 + #2] ..\src\kf32a156_gpio.c:270 CHECK_RESTRICTION(CHECK_GPIO_ALL_PERIPH(GPIOx)); CHECK_RESTRICTION(CHECK_GPIO_PIN_MASK(GpioPin)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /* ----------- 设置GPIOx_PUR寄存器 ----------- */ if(NewState != FALSE) 3fe: 20 38 CMP R2, #0 400: 05 f1 JNZ $+5 ;->0x40a ..\src\kf32a156_gpio.c:278 GPIOx->PUR |= (uint32_t)GpioPin; } else { /* 禁止上拉功能 */ GPIOx->PUR &= ~((uint32_t)GpioPin); 402: 11 68 NOT R1, R1 404: 49 d5 ANL R1, R1, R5 406: 81 a0 ST.W [R0 + #2], R1 ..\src\kf32a156_gpio.c:280 } } 408: 1d 5c JMP LR ..\src\kf32a156_gpio.c:273 /* ----------- 设置GPIOx_PUR寄存器 ----------- */ if(NewState != FALSE) { /* 使能上拉功能 */ GPIOx->PUR |= (uint32_t)GpioPin; 40a: 49 d7 ORL R1, R1, R5 40c: 81 a0 ST.W [R0 + #2], R1 ..\src\kf32a156_gpio.c:280 else { /* 禁止上拉功能 */ GPIOx->PUR &= ~((uint32_t)GpioPin); } } 40e: 1d 5c JMP LR 00000410 : GPIO_Write_Mode_Bits(): ..\src\kf32a156_gpio.c:404 * GPIO_MODE_RMP: 重映射IO口功能模式 * GPIO_MODE_AN: 模拟模式 * 返回 无。 */ void GPIO_Write_Mode_Bits (GPIO_SFRmap* GPIOx,uint16_t GpioPin, GPIOMode_TypeDef NewState) { 410: 03 5f PUSH {R6-R7} 412: 11 d0 ZXT.H R1, R1 ..\src\kf32a156_gpio.c:414 CHECK_RESTRICTION(CHECK_GPIO_ALL_PERIPH(GPIOx)); CHECK_RESTRICTION(CHECK_GPIO_PIN_MASK(GpioPin)); CHECK_RESTRICTION(CHECK_GPIO_MODE(NewState)); /*----------- 获取GPIOx_PMOD寄存器 -----------*/ tmpreg = GPIOx->PMOD; 414: 58 99 LD.W R3, [R0 + #5] ..\src\kf32a156_gpio.c:415 while(GpioPin) 416: 10 38 CMP R1, #0 418: 0f f0 JZ $+15 ;->0x436 41a: 50 10 MOV R5, #0 ..\src\kf32a156_gpio.c:417 { if(GpioPin & (uint16_t)0x01) 41c: 61 10 MOV R6, #1 ..\src\kf32a156_gpio.c:420 { /* 记录配置信息 */ tmpreg &= ~(GPIO_PMOD_PXPMD0 << pinpos); 41e: 73 10 MOV R7, #3 ..\src\kf32a156_gpio.c:417 /*----------- 获取GPIOx_PMOD寄存器 -----------*/ tmpreg = GPIOx->PMOD; while(GpioPin) { if(GpioPin & (uint16_t)0x01) 420: a1 d5 ANL R4, R1, R6 422: 06 f0 JZ $+6 ;->0x42e ..\src\kf32a156_gpio.c:420 { /* 记录配置信息 */ tmpreg &= ~(GPIO_PMOD_PXPMD0 << pinpos); 424: 67 db LSL R4, R7, R5 426: 44 68 NOT R4, R4 428: dc d4 ANL R3, R4, R3 ..\src\kf32a156_gpio.c:421 tmpreg |= (uint32_t)NewState << pinpos; 42a: 62 db LSL R4, R2, R5 42c: 1b d7 ORL R3, R3, R4 ..\src\kf32a156_gpio.c:427 } else { ; } GpioPin >>= 1; 42e: 09 7c LSR R1, #1 ..\src\kf32a156_gpio.c:428 pinpos += 2; 430: ad c0 ADD R5, R5, #2 ..\src\kf32a156_gpio.c:415 CHECK_RESTRICTION(CHECK_GPIO_PIN_MASK(GpioPin)); CHECK_RESTRICTION(CHECK_GPIO_MODE(NewState)); /*----------- 获取GPIOx_PMOD寄存器 -----------*/ tmpreg = GPIOx->PMOD; while(GpioPin) 432: 10 38 CMP R1, #0 434: f6 f1 JNZ $-10 ;->0x420 ..\src\kf32a156_gpio.c:432 GpioPin >>= 1; pinpos += 2; } /*----------- 配置GPIOx_PMOD寄存器 -----------*/ GPIOx->PMOD = tmpreg; 436: 43 a1 ST.W [R0 + #5], R3 ..\src\kf32a156_gpio.c:433 } 438: 03 5e POP {R6-R7} 43a: 1d 5c JMP LR 0000043c : GPIO_Pin_RMP_Config(): ..\src\kf32a156_gpio.c:693 * GPIO_RMP_AF14 * GPIO_RMP_AF15 * 返回 无。 */ void GPIO_Pin_RMP_Config(GPIO_SFRmap* GPIOx, uint16_t GpioPinNum, uint32_t PinRemap) { 43c: 03 5f PUSH {R6-R7} 43e: 11 d0 ZXT.H R1, R1 ..\src\kf32a156_gpio.c:703 /* 参数校验 */ CHECK_RESTRICTION(CHECK_GPIO_ALL_PERIPH(GPIOx)); CHECK_RESTRICTION(CHECK_GPIO_PIN_NUM(GpioPinNum)); /* 配置GPIOx_RMP_MSB寄存器 */ tmask = ((uint32_t)1 << (GpioPinNum+16)) + ((uint32_t)1 << GpioPinNum); 440: 50 11 MOV R5, #16 442: 61 c3 ADD R4, R1, R5 ..\src\kf32a156_gpio.c:696 */ void GPIO_Pin_RMP_Config(GPIO_SFRmap* GPIOx, uint16_t GpioPinNum, uint32_t PinRemap) { uint32_t tmask; uint32_t tmpreg; uint32_t PageNum = (PinRemap&0x300)>>8; 444: 12 43 LD R3, [PC + #18] ;->0x48c :=0x300 446: da d4 ANL R3, R2, R3 448: 98 7c LSR R3, #8 ..\src\kf32a156_gpio.c:704 CHECK_RESTRICTION(CHECK_GPIO_ALL_PERIPH(GPIOx)); CHECK_RESTRICTION(CHECK_GPIO_PIN_NUM(GpioPinNum)); /* 配置GPIOx_RMP_MSB寄存器 */ tmask = ((uint32_t)1 << (GpioPinNum+16)) + ((uint32_t)1 << GpioPinNum); tmpreg = ((uint32_t)((PageNum-1)/2) << (GpioPinNum+16)) + ((uint32_t)((PageNum-1)%2) << GpioPinNum); 44a: 5b cc SUB R3, R3, #1 ..\src\kf32a156_gpio.c:705 GPIOx->RMP_MSB = SFR_Config(GPIOx->RMP_MSB,~tmask,tmpreg); 44c: 70 9b LD.W R6, [R0 + #13] ..\src\kf32a156_gpio.c:704 CHECK_RESTRICTION(CHECK_GPIO_ALL_PERIPH(GPIOx)); CHECK_RESTRICTION(CHECK_GPIO_PIN_NUM(GpioPinNum)); /* 配置GPIOx_RMP_MSB寄存器 */ tmask = ((uint32_t)1 << (GpioPinNum+16)) + ((uint32_t)1 << GpioPinNum); tmpreg = ((uint32_t)((PageNum-1)/2) << (GpioPinNum+16)) + ((uint32_t)((PageNum-1)%2) << GpioPinNum); 44e: 51 10 MOV R5, #1 450: 7b d5 ANL R7, R3, R5 452: 7f da LSL R7, R7, R1 454: 5b dd LSR R3, R3, R5 456: 1b db LSL R3, R3, R4 458: df c2 ADD R3, R7, R3 ..\src\kf32a156_gpio.c:703 /* 参数校验 */ CHECK_RESTRICTION(CHECK_GPIO_ALL_PERIPH(GPIOx)); CHECK_RESTRICTION(CHECK_GPIO_PIN_NUM(GpioPinNum)); /* 配置GPIOx_RMP_MSB寄存器 */ tmask = ((uint32_t)1 << (GpioPinNum+16)) + ((uint32_t)1 << GpioPinNum); 45a: 25 db LSL R4, R5, R4 45c: 6d da LSL R5, R5, R1 45e: 6c c3 ADD R5, R4, R5 ..\src\kf32a156_gpio.c:705 tmpreg = ((uint32_t)((PageNum-1)/2) << (GpioPinNum+16)) + ((uint32_t)((PageNum-1)%2) << GpioPinNum); GPIOx->RMP_MSB = SFR_Config(GPIOx->RMP_MSB,~tmask,tmpreg); 460: 55 68 NOT R5, R5 KF32A156.h:14083 462: ad d5 ANL R5, R5, R6 464: 5b d7 ORL R3, R3, R5 ..\src\kf32a156_gpio.c:705 466: 43 a3 ST.W [R0 + #13], R3 ..\src\kf32a156_gpio.c:708 /* 配置GPIOx_RMPH\L寄存器 */ if(GpioPinNum <= GPIO_Pin_Num_7) 468: 17 38 CMP R1, #7 46a: 13 f9 JLS $+19 ;->0x490 ..\src\kf32a156_gpio.c:714 { tmask = 0xF << (GpioPinNum*4); tmpreg = (PinRemap&0xF) << (GpioPinNum*4); GPIOx->RMP[0] = SFR_Config(GPIOx->RMP[0],~tmask,tmpreg); } else if(GpioPinNum <= GPIO_Pin_Num_15) 46c: 1f 38 CMP R1, #15 46e: 0c f8 JHI $+12 ;->0x486 ..\src\kf32a156_gpio.c:716 { tmask = 0xF << ((GpioPinNum - 8)*4); 470: 18 30 SUB R1, #8 472: 0a 7a LSL R1, #2 ..\src\kf32a156_gpio.c:718 tmpreg = (PinRemap&0xF) << ((GpioPinNum - 8)*4); GPIOx->RMP[1] = SFR_Config(GPIOx->RMP[1],~tmask,tmpreg); 474: 58 9a LD.W R3, [R0 + #9] ..\src\kf32a156_gpio.c:716 tmpreg = (PinRemap&0xF) << (GpioPinNum*4); GPIOx->RMP[0] = SFR_Config(GPIOx->RMP[0],~tmask,tmpreg); } else if(GpioPinNum <= GPIO_Pin_Num_15) { tmask = 0xF << ((GpioPinNum - 8)*4); 476: 5f 10 MOV R5, #15 478: 65 da LSL R4, R5, R1 ..\src\kf32a156_gpio.c:718 tmpreg = (PinRemap&0xF) << ((GpioPinNum - 8)*4); GPIOx->RMP[1] = SFR_Config(GPIOx->RMP[1],~tmask,tmpreg); 47a: 44 68 NOT R4, R4 KF32A156.h:14083 47c: e4 d4 ANL R4, R4, R3 ..\src\kf32a156_gpio.c:717 GPIOx->RMP[0] = SFR_Config(GPIOx->RMP[0],~tmask,tmpreg); } else if(GpioPinNum <= GPIO_Pin_Num_15) { tmask = 0xF << ((GpioPinNum - 8)*4); tmpreg = (PinRemap&0xF) << ((GpioPinNum - 8)*4); 47e: 52 d5 ANL R2, R2, R5 480: 4a da LSL R1, R2, R1 KF32A156.h:14083 482: 4c d6 ORL R1, R4, R1 ..\src\kf32a156_gpio.c:718 GPIOx->RMP[1] = SFR_Config(GPIOx->RMP[1],~tmask,tmpreg); 484: 41 a2 ST.W [R0 + #9], R1 ..\src\kf32a156_gpio.c:720 } } 486: 03 5e POP {R6-R7} 488: 1d 5c JMP LR 48a: 00 00 NOP NOP 48c: 00 03 00 00 .long 0x00000300 ->000000768 [!!!@4@:JMP $+0 ;->0x48c ..\src\kf32a156_gpio.c:710 GPIOx->RMP_MSB = SFR_Config(GPIOx->RMP_MSB,~tmask,tmpreg); /* 配置GPIOx_RMPH\L寄存器 */ if(GpioPinNum <= GPIO_Pin_Num_7) { tmask = 0xF << (GpioPinNum*4); 490: 0a 7a LSL R1, #2 ..\src\kf32a156_gpio.c:712 tmpreg = (PinRemap&0xF) << (GpioPinNum*4); GPIOx->RMP[0] = SFR_Config(GPIOx->RMP[0],~tmask,tmpreg); 492: 18 9a LD.W R3, [R0 + #8] ..\src\kf32a156_gpio.c:710 GPIOx->RMP_MSB = SFR_Config(GPIOx->RMP_MSB,~tmask,tmpreg); /* 配置GPIOx_RMPH\L寄存器 */ if(GpioPinNum <= GPIO_Pin_Num_7) { tmask = 0xF << (GpioPinNum*4); 494: 5f 10 MOV R5, #15 496: 65 da LSL R4, R5, R1 ..\src\kf32a156_gpio.c:712 tmpreg = (PinRemap&0xF) << (GpioPinNum*4); GPIOx->RMP[0] = SFR_Config(GPIOx->RMP[0],~tmask,tmpreg); 498: 44 68 NOT R4, R4 KF32A156.h:14083 49a: e4 d4 ANL R4, R4, R3 ..\src\kf32a156_gpio.c:711 /* 配置GPIOx_RMPH\L寄存器 */ if(GpioPinNum <= GPIO_Pin_Num_7) { tmask = 0xF << (GpioPinNum*4); tmpreg = (PinRemap&0xF) << (GpioPinNum*4); 49c: 52 d5 ANL R2, R2, R5 49e: 4a da LSL R1, R2, R1 KF32A156.h:14083 4a0: 4c d6 ORL R1, R4, R1 ..\src\kf32a156_gpio.c:712 GPIOx->RMP[0] = SFR_Config(GPIOx->RMP[0],~tmask,tmpreg); 4a2: 01 a2 ST.W [R0 + #8], R1 ..\src\kf32a156_gpio.c:720 { tmask = 0xF << ((GpioPinNum - 8)*4); tmpreg = (PinRemap&0xF) << ((GpioPinNum - 8)*4); GPIOx->RMP[1] = SFR_Config(GPIOx->RMP[1],~tmask,tmpreg); } } 4a4: 03 5e POP {R6-R7} 4a6: 1d 5c JMP LR 000004a8 : INT_All_Enable(): ..\src\kf32a156_int.c:241 /*---------------- 设置INT_CTL0寄存器AIE位 ----------------*/ if (NewState != FALSE) { /* 全局可屏蔽中断使能 */ SFR_SET_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); 4a8: 03 45 LD R5, [PC + #3] ;->0x4b4 :=0x40200000 ..\src\kf32a156_int.c:238 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置INT_CTL0寄存器AIE位 ----------------*/ if (NewState != FALSE) 4aa: 00 38 CMP R0, #0 4ac: 06 f1 JNZ $+6 ;->0x4b8 ..\src\kf32a156_int.c:246 SFR_SET_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); } else { /* 全局可屏蔽中断禁止 */ SFR_CLR_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); 4ae: 28 4e CLR [R5], #0 ..\src\kf32a156_int.c:248 } } 4b0: 1d 5c JMP LR 4b2: 00 00 NOP NOP 4b4: 00 00 20 40 .long 0x40200000 ->1075838976 [!!!@2@:NOP @@: LD R0, [PC + #32] ;->0x534 :=0x7b048245 ..\src\kf32a156_int.c:241 /*---------------- 设置INT_CTL0寄存器AIE位 ----------------*/ if (NewState != FALSE) { /* 全局可屏蔽中断使能 */ SFR_SET_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); 4b8: 28 4c SET [R5], #0 ..\src\kf32a156_int.c:248 else { /* 全局可屏蔽中断禁止 */ SFR_CLR_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); } } 4ba: 1d 5c JMP LR 000004bc : INT_Interrupt_Enable(): ..\src\kf32a156_int.c:268 /* 参数校验 */ CHECK_RESTRICTION(CHECK_PERIPHERAL_INTERRUPT_INDEX(Peripheral)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(Peripheral <= INT_SysTick) 4bc: 0f 38 CMP R0, #15 4be: 21 f9 JLS $+33 ;->0x500 ..\src\kf32a156_int.c:275 /*---------------- 设置INT_EIE0寄存器 ----------------*/ tmask = ((uint32_t)1 << Peripheral); tmpreg = ((uint32_t)NewState << Peripheral); INT_EIE0 = SFR_Config(INT_EIE0, ~tmask, tmpreg); } else if(Peripheral <= INT_SPI1) 4c0: 0f 3a CMP R0, #47 4c2: 11 f9 JLS $+17 ;->0x4e4 ..\src\kf32a156_int.c:282 /*---------------- 设置INT_EIE1寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_WWDT)); tmpreg = ((uint32_t)NewState << (Peripheral - INT_WWDT)); INT_EIE1 = SFR_Config(INT_EIE1, ~tmask, tmpreg); } else if(Peripheral <= INT_USART7) 4c4: 0f 3c CMP R0, #79 4c6: 0b f8 JHI $+11 ;->0x4dc ..\src\kf32a156_int.c:285 { /*---------------- 设置INT_EIE2寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_DMA1)); 4c8: 00 33 SUB R0, #48 ..\src\kf32a156_int.c:287 tmpreg = ((uint32_t)NewState << (Peripheral - INT_DMA1)); INT_EIE2 = SFR_Config(INT_EIE2, ~tmask, tmpreg); 4ca: 06 45 LD R5, [PC + #6] ;->0x4e0 :=0x40200000 4cc: 5d 99 LD.W R3, [R5 + #5] ..\src\kf32a156_int.c:285 INT_EIE1 = SFR_Config(INT_EIE1, ~tmask, tmpreg); } else if(Peripheral <= INT_USART7) { /*---------------- 设置INT_EIE2寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_DMA1)); 4ce: 41 10 MOV R4, #1 4d0: 24 da LSL R4, R4, R0 ..\src\kf32a156_int.c:287 tmpreg = ((uint32_t)NewState << (Peripheral - INT_DMA1)); INT_EIE2 = SFR_Config(INT_EIE2, ~tmask, tmpreg); 4d2: 44 68 NOT R4, R4 KF32A156.h:14083 4d4: e4 d4 ANL R4, R4, R3 ..\src\kf32a156_int.c:286 } else if(Peripheral <= INT_USART7) { /*---------------- 设置INT_EIE2寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_DMA1)); tmpreg = ((uint32_t)NewState << (Peripheral - INT_DMA1)); 4d6: 01 da LSL R0, R1, R0 KF32A156.h:14083 4d8: 04 d6 ORL R0, R4, R0 ..\src\kf32a156_int.c:287 INT_EIE2 = SFR_Config(INT_EIE2, ~tmask, tmpreg); 4da: 68 a1 ST.W [R5 + #5], R0 ..\src\kf32a156_int.c:293 } else { ; } } 4dc: 1d 5c JMP LR 4de: 00 00 NOP NOP 4e0: 00 00 20 40 .long 0x40200000 ->1075838976 [!!!@2@:NOP @@: LD R0, [PC + #32] ;->0x560 :=0x7bae1051 ..\src\kf32a156_int.c:278 INT_EIE0 = SFR_Config(INT_EIE0, ~tmask, tmpreg); } else if(Peripheral <= INT_SPI1) { /*---------------- 设置INT_EIE1寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_WWDT)); 4e4: 00 31 SUB R0, #16 ..\src\kf32a156_int.c:280 tmpreg = ((uint32_t)NewState << (Peripheral - INT_WWDT)); INT_EIE1 = SFR_Config(INT_EIE1, ~tmask, tmpreg); 4e6: 06 45 LD R5, [PC + #6] ;->0x4fc :=0x40200000 4e8: dd 98 LD.W R3, [R5 + #3] ..\src\kf32a156_int.c:278 INT_EIE0 = SFR_Config(INT_EIE0, ~tmask, tmpreg); } else if(Peripheral <= INT_SPI1) { /*---------------- 设置INT_EIE1寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_WWDT)); 4ea: 41 10 MOV R4, #1 4ec: 24 da LSL R4, R4, R0 ..\src\kf32a156_int.c:280 tmpreg = ((uint32_t)NewState << (Peripheral - INT_WWDT)); INT_EIE1 = SFR_Config(INT_EIE1, ~tmask, tmpreg); 4ee: 44 68 NOT R4, R4 KF32A156.h:14083 4f0: e4 d4 ANL R4, R4, R3 ..\src\kf32a156_int.c:279 } else if(Peripheral <= INT_SPI1) { /*---------------- 设置INT_EIE1寄存器 ----------------*/ tmask = ((uint32_t)1 << (Peripheral - INT_WWDT)); tmpreg = ((uint32_t)NewState << (Peripheral - INT_WWDT)); 4f2: 01 da LSL R0, R1, R0 KF32A156.h:14083 4f4: 04 d6 ORL R0, R4, R0 ..\src\kf32a156_int.c:280 INT_EIE1 = SFR_Config(INT_EIE1, ~tmask, tmpreg); 4f6: e8 a0 ST.W [R5 + #3], R0 ..\src\kf32a156_int.c:293 } else { ; } } 4f8: 1d 5c JMP LR 4fa: 00 00 NOP NOP 4fc: 00 00 20 40 .long 0x40200000 ->1075838976 [!!!@2@:NOP @@: LD R0, [PC + #32] ;->0x57c :=0x8554d720 ..\src\kf32a156_int.c:273 if(Peripheral <= INT_SysTick) { /*---------------- 设置INT_EIE0寄存器 ----------------*/ tmask = ((uint32_t)1 << Peripheral); tmpreg = ((uint32_t)NewState << Peripheral); INT_EIE0 = SFR_Config(INT_EIE0, ~tmask, tmpreg); 500: 05 45 LD R5, [PC + #5] ;->0x514 :=0x40200000 502: 5d 98 LD.W R3, [R5 + #1] ..\src\kf32a156_int.c:271 CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(Peripheral <= INT_SysTick) { /*---------------- 设置INT_EIE0寄存器 ----------------*/ tmask = ((uint32_t)1 << Peripheral); 504: 41 10 MOV R4, #1 506: 24 da LSL R4, R4, R0 ..\src\kf32a156_int.c:273 tmpreg = ((uint32_t)NewState << Peripheral); INT_EIE0 = SFR_Config(INT_EIE0, ~tmask, tmpreg); 508: 44 68 NOT R4, R4 KF32A156.h:14083 50a: e4 d4 ANL R4, R4, R3 ..\src\kf32a156_int.c:272 if(Peripheral <= INT_SysTick) { /*---------------- 设置INT_EIE0寄存器 ----------------*/ tmask = ((uint32_t)1 << Peripheral); tmpreg = ((uint32_t)NewState << Peripheral); 50c: 01 da LSL R0, R1, R0 KF32A156.h:14083 50e: 0c d6 ORL R1, R4, R0 ..\src\kf32a156_int.c:273 INT_EIE0 = SFR_Config(INT_EIE0, ~tmask, tmpreg); 510: 69 a0 ST.W [R5 + #1], R1 ..\src\kf32a156_int.c:293 } else { ; } } 512: 1d 5c JMP LR 514: 00 00 20 40 .long 0x40200000 ->1075838976 [!!!@2@:NOP @@: LD R0, [PC + #32] ;->0x594 :=0x5c1d4ca8 00000518 : OSC_LFCK_Division_Config(): ..\src\kf32a156_osc.c:197 /* 参数校验 */ CHECK_RESTRICTION(CHECK_LFCK_DIVISION(LFDivision)); /*---------------- 设置OSC_CTL0寄存器LFCKDIV位 ----------------*/ tmpreg = LFDivision << OSC_CTL0_LFCKDIV0_POS; OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_LFCKDIV, tmpreg); 518: 51 10 MOV R5, #1 51a: ae 7b LSL R5, #30 51c: 45 82 LD.W R4, [R5] ..\src\kf32a156_osc.c:196 /* 参数校验 */ CHECK_RESTRICTION(CHECK_LFCK_DIVISION(LFDivision)); /*---------------- 设置OSC_CTL0寄存器LFCKDIV位 ----------------*/ tmpreg = LFDivision << OSC_CTL0_LFCKDIV0_POS; 51e: 80 7b LSL R0, #24 KF32A156.h:14083 520: 03 43 LD R3, [PC + #3] ;->0x52c :=0xf8ffffff 522: e4 d4 ANL R4, R4, R3 524: 20 d7 ORL R4, R0, R4 ..\src\kf32a156_osc.c:197 OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_LFCKDIV, tmpreg); 526: 54 85 ST.W [R5], R4 ..\src\kf32a156_osc.c:198 } 528: 1d 5c JMP LR 52a: 00 00 NOP NOP 52c: ff ff ff f8 .long 0xf8ffffff ->-117440513 00000530 : OSC_HFCK_Division_Config(): ..\src\kf32a156_osc.c:224 /* 参数校验 */ CHECK_RESTRICTION(CHECK_HFCK_DIVISION(HFDivision)); /*---------------- 设置OSC_CTL0寄存器HFCKDIV位 ----------------*/ tmpreg = HFDivision << OSC_CTL0_HFCKDIV0_POS; OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_HFCKDIV, tmpreg); 530: 51 10 MOV R5, #1 532: ae 7b LSL R5, #30 534: 45 82 LD.W R4, [R5] ..\src\kf32a156_osc.c:223 /* 参数校验 */ CHECK_RESTRICTION(CHECK_HFCK_DIVISION(HFDivision)); /*---------------- 设置OSC_CTL0寄存器HFCKDIV位 ----------------*/ tmpreg = HFDivision << OSC_CTL0_HFCKDIV0_POS; 536: 04 7b LSL R0, #20 KF32A156.h:14083 538: 03 43 LD R3, [PC + #3] ;->0x544 :=0xff0fffff 53a: e4 d4 ANL R4, R4, R3 53c: 20 d7 ORL R4, R0, R4 ..\src\kf32a156_osc.c:224 OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_HFCKDIV, tmpreg); 53e: 54 85 ST.W [R5], R4 ..\src\kf32a156_osc.c:225 } 540: 1d 5c JMP LR 542: 00 00 NOP NOP 544: ff ff 0f ff .long 0xff0fffff ->-15728641 00000548 : OSC_SCK_Division_Config(): ..\src\kf32a156_osc.c:249 /* 参数校验 */ CHECK_RESTRICTION(CHECK_SCLK_DIVISION(SclkDivision)); /*---------------- 设置OSC_CTL0寄存器SCKDIV位 ----------------*/ tmpreg = SclkDivision << OSC_CTL0_SCKDIV0_POS; OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_SCKDIV, tmpreg); 548: 51 10 MOV R5, #1 54a: ae 7b LSL R5, #30 54c: 45 82 LD.W R4, [R5] ..\src\kf32a156_osc.c:248 /* 参数校验 */ CHECK_RESTRICTION(CHECK_SCLK_DIVISION(SclkDivision)); /*---------------- 设置OSC_CTL0寄存器SCKDIV位 ----------------*/ tmpreg = SclkDivision << OSC_CTL0_SCKDIV0_POS; 54e: 00 7b LSL R0, #16 KF32A156.h:14083 550: 03 43 LD R3, [PC + #3] ;->0x55c :=0xfff8ffff 552: e4 d4 ANL R4, R4, R3 554: 20 d7 ORL R4, R0, R4 ..\src\kf32a156_osc.c:249 OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_SCKDIV, tmpreg); 556: 54 85 ST.W [R5], R4 ..\src\kf32a156_osc.c:250 } 558: 1d 5c JMP LR 55a: 00 00 NOP NOP 55c: ff ff f8 ff .long 0xfff8ffff ->-00458753 00000560 : OSC_PLL_Input_Source_Config(): ..\src\kf32a156_osc.c:268 /*---------------- 设置OSC_CTL0寄存器PLL0CKS位 ----------------*/ if (NewState != PLL_INPUT_INTHF) { /* 选择EXTHF作为PLL输入时钟 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_PLLCKS_POS); 560: 51 10 MOV R5, #1 562: ae 7b LSL R5, #30 ..\src\kf32a156_osc.c:265 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_PLL_INPUT(NewState)); /*---------------- 设置OSC_CTL0寄存器PLL0CKS位 ----------------*/ if (NewState != PLL_INPUT_INTHF) 564: 00 38 CMP R0, #0 566: 03 f1 JNZ $+3 ;->0x56c ..\src\kf32a156_osc.c:273 SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_PLLCKS_POS); } else { /* 选择INTHF作为PLL输入时钟 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_PLLCKS_POS); 568: ac 4e CLR [R5], #12 ..\src\kf32a156_osc.c:275 } } 56a: 1d 5c JMP LR ..\src\kf32a156_osc.c:268 /*---------------- 设置OSC_CTL0寄存器PLL0CKS位 ----------------*/ if (NewState != PLL_INPUT_INTHF) { /* 选择EXTHF作为PLL输入时钟 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_PLLCKS_POS); 56c: ac 4c SET [R5], #12 ..\src\kf32a156_osc.c:275 else { /* 选择INTHF作为PLL输入时钟 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_PLLCKS_POS); } } 56e: 1d 5c JMP LR 00000570 : OSC_HFCK_Source_Config(): ..\src\kf32a156_osc.c:295 /* 参数校验 */ CHECK_RESTRICTION(CHECK_HFCK_SOURCE(HFSource)); /*---------------- 设置OSC_CTL0寄存器HFCKS位 ----------------*/ tmpreg = HFSource << OSC_CTL0_HFCKS0_POS; OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_HFCKS, tmpreg); 570: 51 10 MOV R5, #1 572: ae 7b LSL R5, #30 574: 45 82 LD.W R4, [R5] ..\src\kf32a156_osc.c:294 /* 参数校验 */ CHECK_RESTRICTION(CHECK_HFCK_SOURCE(HFSource)); /*---------------- 设置OSC_CTL0寄存器HFCKS位 ----------------*/ tmpreg = HFSource << OSC_CTL0_HFCKS0_POS; 576: 81 7a LSL R0, #9 KF32A156.h:14083 578: 03 43 LD R3, [PC + #3] ;->0x584 :=0xfffff1ff 57a: e4 d4 ANL R4, R4, R3 57c: 20 d7 ORL R4, R0, R4 ..\src\kf32a156_osc.c:295 OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_HFCKS, tmpreg); 57e: 54 85 ST.W [R5], R4 ..\src\kf32a156_osc.c:296 } 580: 1d 5c JMP LR 582: 00 00 NOP NOP 584: ff f1 ff ff .long 0xfffff1ff ->-00003585 00000588 : OSC_HFCK_Enable(): ..\src\kf32a156_osc.c:313 /*---------------- 设置OSC_CTL0寄存器HFCKEN位 ----------------*/ if (NewState != FALSE) { /* HFCLK时钟信号允许 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_HFCKEN_POS); 588: 51 10 MOV R5, #1 58a: ae 7b LSL R5, #30 ..\src\kf32a156_osc.c:310 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置OSC_CTL0寄存器HFCKEN位 ----------------*/ if (NewState != FALSE) 58c: 00 38 CMP R0, #0 58e: 03 f1 JNZ $+3 ;->0x594 ..\src\kf32a156_osc.c:318 SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_HFCKEN_POS); } else { /* HFCLK时钟信号禁止 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_HFCKEN_POS); 590: a8 4e CLR [R5], #8 ..\src\kf32a156_osc.c:320 } } 592: 1d 5c JMP LR ..\src\kf32a156_osc.c:313 /*---------------- 设置OSC_CTL0寄存器HFCKEN位 ----------------*/ if (NewState != FALSE) { /* HFCLK时钟信号允许 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_HFCKEN_POS); 594: a8 4c SET [R5], #8 ..\src\kf32a156_osc.c:320 else { /* HFCLK时钟信号禁止 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_HFCKEN_POS); } } 596: 1d 5c JMP LR 00000598 : OSC_LFCK_Source_Config(): ..\src\kf32a156_osc.c:338 /*---------------- 设置OSC_CTL0寄存器LFCKS位 ----------------*/ if (NewState != LFCK_INPUT_INTLF) { /* 选择EXTLF作为LFCLK时钟 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKS_POS); 598: 51 10 MOV R5, #1 59a: ae 7b LSL R5, #30 ..\src\kf32a156_osc.c:335 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_LFCK_INPUT(NewState)); /*---------------- 设置OSC_CTL0寄存器LFCKS位 ----------------*/ if (NewState != LFCK_INPUT_INTLF) 59c: 00 38 CMP R0, #0 59e: 03 f1 JNZ $+3 ;->0x5a4 ..\src\kf32a156_osc.c:343 SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKS_POS); } else { /* 选择INTLF作为LFCLK时钟 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKS_POS); 5a0: 2e 4e CLR [R5], #6 ..\src\kf32a156_osc.c:345 } } 5a2: 1d 5c JMP LR ..\src\kf32a156_osc.c:338 /*---------------- 设置OSC_CTL0寄存器LFCKS位 ----------------*/ if (NewState != LFCK_INPUT_INTLF) { /* 选择EXTLF作为LFCLK时钟 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKS_POS); 5a4: 2e 4c SET [R5], #6 ..\src\kf32a156_osc.c:345 else { /* 选择INTLF作为LFCLK时钟 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKS_POS); } } 5a6: 1d 5c JMP LR 000005a8 : OSC_LFCK_Enable(): ..\src\kf32a156_osc.c:362 /*---------------- 设置OSC_CTL0寄存器LFCKEN位 ----------------*/ if (NewState != FALSE) { /* LFCLK时钟信号允许 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKEN_POS); 5a8: 51 10 MOV R5, #1 5aa: ae 7b LSL R5, #30 ..\src\kf32a156_osc.c:359 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置OSC_CTL0寄存器LFCKEN位 ----------------*/ if (NewState != FALSE) 5ac: 00 38 CMP R0, #0 5ae: 03 f1 JNZ $+3 ;->0x5b4 ..\src\kf32a156_osc.c:367 SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKEN_POS); } else { /* LFCLK时钟信号禁止 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKEN_POS); 5b0: 2c 4e CLR [R5], #4 ..\src\kf32a156_osc.c:369 } } 5b2: 1d 5c JMP LR ..\src\kf32a156_osc.c:362 /*---------------- 设置OSC_CTL0寄存器LFCKEN位 ----------------*/ if (NewState != FALSE) { /* LFCLK时钟信号允许 */ SFR_SET_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKEN_POS); 5b4: 2c 4c SET [R5], #4 ..\src\kf32a156_osc.c:369 else { /* LFCLK时钟信号禁止 */ SFR_CLR_BIT_ASM(OSC_CTL0, OSC_CTL0_LFCKEN_POS); } } 5b6: 1d 5c JMP LR 000005b8 : OSC_SCK_Source_Config(): ..\src\kf32a156_osc.c:391 /* 参数校验 */ CHECK_RESTRICTION(CHECK_SCLK_SOURCE(SclkSource)); /*---------------- 设置OSC_CTL0寄存器SCKS位 ----------------*/ tmpreg = SclkSource << OSC_CTL0_SCKS0_POS; OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_SCKS, tmpreg); 5b8: 51 10 MOV R5, #1 5ba: ae 7b LSL R5, #30 5bc: 45 82 LD.W R4, [R5] ..\src\kf32a156_osc.c:390 /* 参数校验 */ CHECK_RESTRICTION(CHECK_SCLK_SOURCE(SclkSource)); /*---------------- 设置OSC_CTL0寄存器SCKS位 ----------------*/ tmpreg = SclkSource << OSC_CTL0_SCKS0_POS; 5be: 00 c2 ADD R0, R0, R0 KF32A156.h:14083 5c0: 3e 10 MOV R3, #14 5c2: 33 68 NOT R3, R3 5c4: e4 d4 ANL R4, R4, R3 5c6: 20 d7 ORL R4, R0, R4 ..\src\kf32a156_osc.c:391 OSC_CTL0 = SFR_Config (OSC_CTL0, ~OSC_CTL0_SCKS, tmpreg); 5c8: 54 85 ST.W [R5], R4 ..\src\kf32a156_osc.c:392 } 5ca: 1d 5c JMP LR 000005cc : OSC_PLL_Multiple_Value_Select(): ..\src\kf32a156_osc.c:578 /* 参数校验 */ CHECK_RESTRICTION(CHECK_PLL_MULTIPLE_MValue(PLLmultiple_M)); CHECK_RESTRICTION(CHECK_PLL_MULTIPLE_NValue(PLLmultiple_N)); CHECK_RESTRICTION(CHECK_PLL_MULTIPLE_NOValue(PLLmultiple_NO)); if(PLLmultiple_NO==8){PLLmultiple_NO=3;} 5cc: 28 38 CMP R2, #8 5ce: 19 f0 JZ $+25 ;->0x600 ..\src\kf32a156_osc.c:579 else if(PLLmultiple_NO==4){PLLmultiple_NO=2;} 5d0: 24 38 CMP R2, #4 5d2: 19 f0 JZ $+25 ;->0x604 ..\src\kf32a156_osc.c:580 else if(PLLmultiple_NO==2){PLLmultiple_NO=1;} 5d4: 22 38 CMP R2, #2 5d6: 1a f0 JZ $+26 ;->0x60a ..\src\kf32a156_osc.c:581 else if(PLLmultiple_NO==1){PLLmultiple_NO=0;} 5d8: 40 10 MOV R4, #0 5da: 21 38 CMP R2, #1 5dc: 03 f0 JZ $+3 ;->0x5e2 5de: 54 11 MOV R5, #20 5e0: 62 db LSL R4, R2, R5 ..\src\kf32a156_osc.c:588 /*---------------- 设置PLL_CTL寄存器OD位N位M位 ----------------*/ tmpreg = ((PLLmultiple_M << PLL_CTL_M0_POS) \ | (PLLmultiple_N << PLL_CTL_N0_POS) \ | (PLLmultiple_NO << PLL_CTL_OD0_POS)); PLL_CTL = SFR_Config (PLL_CTL, ~(PLL_CTL_M | PLL_CTL_N | PLL_CTL_OD), tmpreg); 5e2: 06 45 LD R5, [PC + #6] ;->0x5f8 :=0x40002580 5e4: 25 82 LD.W R2, [R5] ..\src\kf32a156_osc.c:584 else if(PLLmultiple_NO==4){PLLmultiple_NO=2;} else if(PLLmultiple_NO==2){PLLmultiple_NO=1;} else if(PLLmultiple_NO==1){PLLmultiple_NO=0;} /*---------------- 设置PLL_CTL寄存器OD位N位M位 ----------------*/ tmpreg = ((PLLmultiple_M << PLL_CTL_M0_POS) \ 5e6: 02 7a LSL R0, #2 KF32A156.h:14083 5e8: 05 43 LD R3, [PC + #5] ;->0x5fc :=0xffc00003 5ea: da d4 ANL R3, R2, R3 ..\src\kf32a156_osc.c:585 | (PLLmultiple_N << PLL_CTL_N0_POS) \ 5ec: c0 d6 ORL R0, R0, R3 5ee: 08 7b LSL R1, #16 ..\src\kf32a156_osc.c:584 else if(PLLmultiple_NO==4){PLLmultiple_NO=2;} else if(PLLmultiple_NO==2){PLLmultiple_NO=1;} else if(PLLmultiple_NO==1){PLLmultiple_NO=0;} /*---------------- 设置PLL_CTL寄存器OD位N位M位 ----------------*/ tmpreg = ((PLLmultiple_M << PLL_CTL_M0_POS) \ 5f0: 48 d6 ORL R1, R0, R1 KF32A156.h:14083 5f2: 21 d7 ORL R4, R1, R4 ..\src\kf32a156_osc.c:588 | (PLLmultiple_N << PLL_CTL_N0_POS) \ | (PLLmultiple_NO << PLL_CTL_OD0_POS)); PLL_CTL = SFR_Config (PLL_CTL, ~(PLL_CTL_M | PLL_CTL_N | PLL_CTL_OD), tmpreg); 5f4: 54 85 ST.W [R5], R4 ..\src\kf32a156_osc.c:589 } 5f6: 1d 5c JMP LR 5f8: 80 25 00 40 .long 0x40002580 ->1073751424 [!!!@2@:ST.W [SP + #128], R5 @@: LD R0, [PC + #0] ;->0x5f8 :=0x40002580 5fc: 03 00 c0 ff .long 0xffc00003 ->-04194301 ..\src\kf32a156_osc.c:578 /* 参数校验 */ CHECK_RESTRICTION(CHECK_PLL_MULTIPLE_MValue(PLLmultiple_M)); CHECK_RESTRICTION(CHECK_PLL_MULTIPLE_NValue(PLLmultiple_N)); CHECK_RESTRICTION(CHECK_PLL_MULTIPLE_NOValue(PLLmultiple_NO)); if(PLLmultiple_NO==8){PLLmultiple_NO=3;} 600: 04 44 LD R4, [PC + #4] ;->0x610 :=0x300000 602: f0 07 SJMP $-16 ;->0x5e2 ..\src\kf32a156_osc.c:579 else if(PLLmultiple_NO==4){PLLmultiple_NO=2;} 604: 41 10 MOV R4, #1 606: 25 7b LSL R4, #21 608: ed 07 SJMP $-19 ;->0x5e2 ..\src\kf32a156_osc.c:580 else if(PLLmultiple_NO==2){PLLmultiple_NO=1;} 60a: 41 10 MOV R4, #1 60c: 24 7b LSL R4, #20 60e: ea 07 SJMP $-22 ;->0x5e2 610: 00 00 30 00 .long 0x00300000 ->003145728 00000614 : OSC_PLL_RST(): ..\src\kf32a156_osc.c:599 * 返回 :无 */ void OSC_PLL_RST(void) { /*---------------- 设置PLL_CTL寄存器PDRST位 ----------------*/ SFR_SET_BIT_ASM(PLL_CTL, PLL_CTL_PDRST_POS); 614: 02 45 LD R5, [PC + #2] ;->0x61c :=0x40002580 616: 28 4c SET [R5], #0 ..\src\kf32a156_osc.c:600 } 618: 1d 5c JMP LR 61a: 00 00 NOP NOP 61c: 80 25 00 40 .long 0x40002580 ->1073751424 [!!!@2@:ST.W [SP + #128], R5 @@: LD R0, [PC + #0] ;->0x61c :=0x40002580 00000620 : OSC_PLL_Start_Delay_Config(): ..\src\kf32a156_osc.c:626 /* 参数校验 */ CHECK_RESTRICTION(CHECK_PLL_START_DELAY(PLLDelay)); /*---------------- 设置OSC_CTL2寄存器PLLDLY位 ----------------*/ tmpreg = PLLDelay << OSC_CTL2_PLLDLY0_POS; OSC_CTL2 = SFR_Config (OSC_CTL2, ~OSC_CTL2_PLLDLY, tmpreg); 620: 51 10 MOV R5, #1 622: ae 7b LSL R5, #30 624: e5 98 LD.W R4, [R5 + #3] ..\src\kf32a156_osc.c:625 /* 参数校验 */ CHECK_RESTRICTION(CHECK_PLL_START_DELAY(PLLDelay)); /*---------------- 设置OSC_CTL2寄存器PLLDLY位 ----------------*/ tmpreg = PLLDelay << OSC_CTL2_PLLDLY0_POS; 626: 80 7b LSL R0, #24 KF32A156.h:14083 628: 03 43 LD R3, [PC + #3] ;->0x634 :=0xf0ffffff 62a: e4 d4 ANL R4, R4, R3 62c: 20 d7 ORL R4, R0, R4 ..\src\kf32a156_osc.c:626 OSC_CTL2 = SFR_Config (OSC_CTL2, ~OSC_CTL2_PLLDLY, tmpreg); 62e: ec a0 ST.W [R5 + #3], R4 ..\src\kf32a156_osc.c:627 } 630: 1d 5c JMP LR 632: 00 00 NOP NOP 634: ff ff ff f0 .long 0xf0ffffff ->-251658241 00000638 : OSC_PLL_Software_Enable(): ..\src\kf32a156_osc.c:720 /*---------------- 设置OSC_CTL2寄存器PLLSWEN位 ----------------*/ if (NewState != FALSE) { /* 使能PLL工作 */ SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_PLLSWEN_POS); 638: 03 45 LD R5, [PC + #3] ;->0x644 :=0x4000000c ..\src\kf32a156_osc.c:717 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置OSC_CTL2寄存器PLLSWEN位 ----------------*/ if (NewState != FALSE) 63a: 00 38 CMP R0, #0 63c: 06 f1 JNZ $+6 ;->0x648 ..\src\kf32a156_osc.c:725 SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_PLLSWEN_POS); } else { /* 无效 */ SFR_CLR_BIT_ASM(OSC_CTL2, OSC_CTL2_PLLSWEN_POS); 63e: 2c 4e CLR [R5], #4 ..\src\kf32a156_osc.c:727 } } 640: 1d 5c JMP LR 642: 00 00 NOP NOP 644: 0c 00 00 40 .long 0x4000000c ->1073741836 ..\src\kf32a156_osc.c:720 /*---------------- 设置OSC_CTL2寄存器PLLSWEN位 ----------------*/ if (NewState != FALSE) { /* 使能PLL工作 */ SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_PLLSWEN_POS); 648: 2c 4c SET [R5], #4 ..\src\kf32a156_osc.c:727 else { /* 无效 */ SFR_CLR_BIT_ASM(OSC_CTL2, OSC_CTL2_PLLSWEN_POS); } } 64a: 1d 5c JMP LR 0000064c : OSC_INTHF_Software_Enable(): ..\src\kf32a156_osc.c:789 /*---------------- 设置OSC_CTL2寄存器INTHFSWEN位 ----------------*/ if (NewState != FALSE) { /* 使能内部高频振荡器工作 */ SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_INTHFSWEN_POS); 64c: 03 45 LD R5, [PC + #3] ;->0x658 :=0x4000000c ..\src\kf32a156_osc.c:786 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置OSC_CTL2寄存器INTHFSWEN位 ----------------*/ if (NewState != FALSE) 64e: 00 38 CMP R0, #0 650: 06 f1 JNZ $+6 ;->0x65c ..\src\kf32a156_osc.c:794 SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_INTHFSWEN_POS); } else { /* 无效 */ SFR_CLR_BIT_ASM(OSC_CTL2, OSC_CTL2_INTHFSWEN_POS); 652: 29 4e CLR [R5], #1 ..\src\kf32a156_osc.c:796 } } 654: 1d 5c JMP LR 656: 00 00 NOP NOP 658: 0c 00 00 40 .long 0x4000000c ->1073741836 ..\src\kf32a156_osc.c:789 /*---------------- 设置OSC_CTL2寄存器INTHFSWEN位 ----------------*/ if (NewState != FALSE) { /* 使能内部高频振荡器工作 */ SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_INTHFSWEN_POS); 65c: 29 4c SET [R5], #1 ..\src\kf32a156_osc.c:796 else { /* 无效 */ SFR_CLR_BIT_ASM(OSC_CTL2, OSC_CTL2_INTHFSWEN_POS); } } 65e: 1d 5c JMP LR 00000660 : OSC_INTLF_Software_Enable(): ..\src\kf32a156_osc.c:812 /*---------------- 设置OSC_CTL2寄存器INTLFSWEN位 ----------------*/ if (NewState != FALSE) { /* 使能内部低频振荡器工作 */ SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_INTLFSWEN_POS); 660: 03 45 LD R5, [PC + #3] ;->0x66c :=0x4000000c ..\src\kf32a156_osc.c:809 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置OSC_CTL2寄存器INTLFSWEN位 ----------------*/ if (NewState != FALSE) 662: 00 38 CMP R0, #0 664: 06 f1 JNZ $+6 ;->0x670 ..\src\kf32a156_osc.c:817 SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_INTLFSWEN_POS); } else { /* 无效 */ SFR_CLR_BIT_ASM(OSC_CTL2, OSC_CTL2_INTLFSWEN_POS); 666: 28 4e CLR [R5], #0 ..\src\kf32a156_osc.c:819 } } 668: 1d 5c JMP LR 66a: 00 00 NOP NOP 66c: 0c 00 00 40 .long 0x4000000c ->1073741836 ..\src\kf32a156_osc.c:812 /*---------------- 设置OSC_CTL2寄存器INTLFSWEN位 ----------------*/ if (NewState != FALSE) { /* 使能内部低频振荡器工作 */ SFR_SET_BIT_ASM(OSC_CTL2, OSC_CTL2_INTLFSWEN_POS); 670: 28 4c SET [R5], #0 ..\src\kf32a156_osc.c:819 else { /* 无效 */ SFR_CLR_BIT_ASM(OSC_CTL2, OSC_CTL2_INTLFSWEN_POS); } } 672: 1d 5c JMP LR 00000674 : OSC_Get_PLL_INT_Flag(): ..\src\kf32a156_osc.c:1173 * 返回 中断状态,0:未发生中断,1:发生中断。 */ FlagStatus OSC_Get_PLL_INT_Flag (void) { /*---------------- 设置OSC_INT寄存器PLLIF位 ----------------*/ if (OSC_INT & OSC_INT_PLLIF) 674: 51 10 MOV R5, #1 676: ae 7b LSL R5, #30 678: 85 98 LD.W R0, [R5 + #2] 67a: 04 7c LSR R0, #4 ..\src\kf32a156_osc.c:1183 else { /* PLL未锁定 */ return RESET; } } 67c: 51 10 MOV R5, #1 67e: 40 d5 ANL R0, R0, R5 680: 1d 5c JMP LR 00000682 : OSC_Get_INTHF_INT_Flag(): ..\src\kf32a156_osc.c:1233 * 返回 中断状态,0:未发生中断,1:发生中断。 */ FlagStatus OSC_Get_INTHF_INT_Flag (void) { /*---------------- 设置OSC_INT寄存器IHFIF位 ----------------*/ if (OSC_INT & OSC_INT_IHFIF) 682: 51 10 MOV R5, #1 684: ae 7b LSL R5, #30 686: 85 98 LD.W R0, [R5 + #2] 688: 01 7c LSR R0, #1 ..\src\kf32a156_osc.c:1243 else { /* PLL未锁定 */ return RESET; } } 68a: 51 10 MOV R5, #1 68c: 40 d5 ANL R0, R0, R5 68e: 1d 5c JMP LR 00000690 : PCLK_CTL1_Peripheral_Clock_Enable(): ..\src\kf32a156_pclk.c:107 CHECK_RESTRICTION(CHECK_PCLK_CTL1_PERIPH(PCLK_CTL1_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) { PCLK_CTL1 |= PCLK_CTL1_bit; 690: 04 45 LD R5, [PC + #4] ;->0x6a0 :=0x40002640 692: 65 98 LD.W R4, [R5 + #1] ..\src\kf32a156_pclk.c:105 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_PCLK_CTL1_PERIPH(PCLK_CTL1_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) 694: 10 38 CMP R1, #0 696: 07 f1 JNZ $+7 ;->0x6a4 ..\src\kf32a156_pclk.c:111 { PCLK_CTL1 |= PCLK_CTL1_bit; } else { PCLK_CTL1 &= ~PCLK_CTL1_bit; 698: 00 68 NOT R0, R0 69a: 00 d5 ANL R0, R0, R4 69c: 68 a0 ST.W [R5 + #1], R0 ..\src\kf32a156_pclk.c:113 } } 69e: 1d 5c JMP LR 6a0: 40 26 00 40 .long 0x40002640 ->1073751616 [!!!@2@:ST.W [SP + #64], R6 @@: LD R0, [PC + #0] ;->0x6a0 :=0x40002640 ..\src\kf32a156_pclk.c:107 CHECK_RESTRICTION(CHECK_PCLK_CTL1_PERIPH(PCLK_CTL1_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) { PCLK_CTL1 |= PCLK_CTL1_bit; 6a4: 00 d7 ORL R0, R0, R4 6a6: 68 a0 ST.W [R5 + #1], R0 ..\src\kf32a156_pclk.c:113 } else { PCLK_CTL1 &= ~PCLK_CTL1_bit; } } 6a8: 1d 5c JMP LR ... 000006ac : PCLK_CTL2_Peripheral_Clock_Enable(): ..\src\kf32a156_pclk.c:146 CHECK_RESTRICTION(CHECK_PCLK_CTL2_PERIPH(PCLK_CTL2_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) { PCLK_CTL2 |= PCLK_CTL2_bit; 6ac: 04 45 LD R5, [PC + #4] ;->0x6bc :=0x40002640 6ae: a5 98 LD.W R4, [R5 + #2] ..\src\kf32a156_pclk.c:144 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_PCLK_CTL2_PERIPH(PCLK_CTL2_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) 6b0: 10 38 CMP R1, #0 6b2: 07 f1 JNZ $+7 ;->0x6c0 ..\src\kf32a156_pclk.c:150 { PCLK_CTL2 |= PCLK_CTL2_bit; } else { PCLK_CTL2 &= ~PCLK_CTL2_bit; 6b4: 00 68 NOT R0, R0 6b6: 00 d5 ANL R0, R0, R4 6b8: a8 a0 ST.W [R5 + #2], R0 ..\src\kf32a156_pclk.c:152 } } 6ba: 1d 5c JMP LR 6bc: 40 26 00 40 .long 0x40002640 ->1073751616 [!!!@2@:ST.W [SP + #64], R6 @@: LD R0, [PC + #0] ;->0x6bc :=0x40002640 ..\src\kf32a156_pclk.c:146 CHECK_RESTRICTION(CHECK_PCLK_CTL2_PERIPH(PCLK_CTL2_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) { PCLK_CTL2 |= PCLK_CTL2_bit; 6c0: 00 d7 ORL R0, R0, R4 6c2: a8 a0 ST.W [R5 + #2], R0 ..\src\kf32a156_pclk.c:152 } else { PCLK_CTL2 &= ~PCLK_CTL2_bit; } } 6c4: 1d 5c JMP LR ... 000006c8 : PCLK_CTL3_Peripheral_Clock_Enable(): ..\src\kf32a156_pclk.c:193 CHECK_RESTRICTION(CHECK_PCLK_CTL3_PERIPH(PCLK_CTL3_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) { PCLK_CTL3 |= PCLK_CTL3_bit; 6c8: 04 45 LD R5, [PC + #4] ;->0x6d8 :=0x40002640 6ca: e5 98 LD.W R4, [R5 + #3] ..\src\kf32a156_pclk.c:191 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_PCLK_CTL3_PERIPH(PCLK_CTL3_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) 6cc: 10 38 CMP R1, #0 6ce: 07 f1 JNZ $+7 ;->0x6dc ..\src\kf32a156_pclk.c:197 { PCLK_CTL3 |= PCLK_CTL3_bit; } else { PCLK_CTL3 &= ~PCLK_CTL3_bit; 6d0: 00 68 NOT R0, R0 6d2: 00 d5 ANL R0, R0, R4 6d4: e8 a0 ST.W [R5 + #3], R0 ..\src\kf32a156_pclk.c:199 } } 6d6: 1d 5c JMP LR 6d8: 40 26 00 40 .long 0x40002640 ->1073751616 [!!!@2@:ST.W [SP + #64], R6 @@: LD R0, [PC + #0] ;->0x6d8 :=0x40002640 ..\src\kf32a156_pclk.c:193 CHECK_RESTRICTION(CHECK_PCLK_CTL3_PERIPH(PCLK_CTL3_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) { PCLK_CTL3 |= PCLK_CTL3_bit; 6dc: 00 d7 ORL R0, R0, R4 6de: e8 a0 ST.W [R5 + #3], R0 ..\src\kf32a156_pclk.c:199 } else { PCLK_CTL3 &= ~PCLK_CTL3_bit; } } 6e0: 1d 5c JMP LR ... 000006e4 : RST_CTL1_Peripheral_Reset_Enable(): ..\src\kf32a156_rst.c:108 CHECK_RESTRICTION(CHECK_RST_CTL1_RESET_PERIPH(RST_CTL1_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) { RST_CTL1 |= RST_CTL1_bit; 6e4: 04 45 LD R5, [PC + #4] ;->0x6f4 :=0x40001500 6e6: 65 98 LD.W R4, [R5 + #1] ..\src\kf32a156_rst.c:106 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_RST_CTL1_RESET_PERIPH(RST_CTL1_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) 6e8: 10 38 CMP R1, #0 6ea: 07 f1 JNZ $+7 ;->0x6f8 ..\src\kf32a156_rst.c:112 { RST_CTL1 |= RST_CTL1_bit; } else { RST_CTL1 &= ~RST_CTL1_bit; 6ec: 00 68 NOT R0, R0 6ee: 00 d5 ANL R0, R0, R4 6f0: 68 a0 ST.W [R5 + #1], R0 ..\src\kf32a156_rst.c:114 } } 6f2: 1d 5c JMP LR 6f4: 00 15 00 40 .long 0x40001500 ->1073747200 [!!!@2@:MOV R0, #80 @@: LD R0, [PC + #0] ;->0x6f4 :=0x40001500 ..\src\kf32a156_rst.c:108 CHECK_RESTRICTION(CHECK_RST_CTL1_RESET_PERIPH(RST_CTL1_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if(NewState != FALSE) { RST_CTL1 |= RST_CTL1_bit; 6f8: 00 d7 ORL R0, R0, R4 6fa: 68 a0 ST.W [R5 + #1], R0 ..\src\kf32a156_rst.c:114 } else { RST_CTL1 &= ~RST_CTL1_bit; } } 6fc: 1d 5c JMP LR ... 00000700 : RST_CTL2_Peripheral_Reset_Enable(): ..\src\kf32a156_rst.c:147 CHECK_RESTRICTION(CHECK_RST_CTL2_RESET_PERIPH(RST_CTL2_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) { RST_CTL2 |= RST_CTL2_bit; 700: 04 45 LD R5, [PC + #4] ;->0x710 :=0x40001500 702: a5 98 LD.W R4, [R5 + #2] ..\src\kf32a156_rst.c:145 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_RST_CTL2_RESET_PERIPH(RST_CTL2_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) 704: 10 38 CMP R1, #0 706: 07 f1 JNZ $+7 ;->0x714 ..\src\kf32a156_rst.c:151 { RST_CTL2 |= RST_CTL2_bit; } else { RST_CTL2 &= ~RST_CTL2_bit; 708: 00 68 NOT R0, R0 70a: 00 d5 ANL R0, R0, R4 70c: a8 a0 ST.W [R5 + #2], R0 ..\src\kf32a156_rst.c:153 } } 70e: 1d 5c JMP LR 710: 00 15 00 40 .long 0x40001500 ->1073747200 [!!!@2@:MOV R0, #80 @@: LD R0, [PC + #0] ;->0x710 :=0x40001500 ..\src\kf32a156_rst.c:147 CHECK_RESTRICTION(CHECK_RST_CTL2_RESET_PERIPH(RST_CTL2_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) { RST_CTL2 |= RST_CTL2_bit; 714: 00 d7 ORL R0, R0, R4 716: a8 a0 ST.W [R5 + #2], R0 ..\src\kf32a156_rst.c:153 } else { RST_CTL2 &= ~RST_CTL2_bit; } } 718: 1d 5c JMP LR ... 0000071c : RST_CTL3_Peripheral_Reset_Enable(): ..\src\kf32a156_rst.c:192 CHECK_RESTRICTION(CHECK_RST_CTL3_RESET_PERIPH(RST_CTL3_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) { RST_CTL3 |= RST_CTL3_bit; 71c: 04 45 LD R5, [PC + #4] ;->0x72c :=0x40001500 71e: e5 98 LD.W R4, [R5 + #3] ..\src\kf32a156_rst.c:190 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_RST_CTL3_RESET_PERIPH(RST_CTL3_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) 720: 10 38 CMP R1, #0 722: 07 f1 JNZ $+7 ;->0x730 ..\src\kf32a156_rst.c:196 { RST_CTL3 |= RST_CTL3_bit; } else { RST_CTL3 &= ~RST_CTL3_bit; 724: 00 68 NOT R0, R0 726: 00 d5 ANL R0, R0, R4 728: e8 a0 ST.W [R5 + #3], R0 ..\src\kf32a156_rst.c:198 } } 72a: 1d 5c JMP LR 72c: 00 15 00 40 .long 0x40001500 ->1073747200 [!!!@2@:MOV R0, #80 @@: LD R0, [PC + #0] ;->0x72c :=0x40001500 ..\src\kf32a156_rst.c:192 CHECK_RESTRICTION(CHECK_RST_CTL3_RESET_PERIPH(RST_CTL3_bit)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); if (NewState != FALSE) { RST_CTL3 |= RST_CTL3_bit; 730: 00 d7 ORL R0, R0, R4 732: e8 a0 ST.W [R5 + #3], R0 ..\src\kf32a156_rst.c:198 } else { RST_CTL3 &= ~RST_CTL3_bit; } } 734: 1d 5c JMP LR ... 00000738 : SYSTICK_Cmd(): ..\src\kf32a156_systick.c:117 /*---------------- 设置ST_CTL寄存器STEN位 ----------------*/ if (NewState != FALSE) { /* 使能系统节拍定时器 */ SFR_SET_BIT_ASM(ST_CTL, ST_CTL_STEN_POS); 738: 03 45 LD R5, [PC + #3] ;->0x744 :=0x402000a0 ..\src\kf32a156_systick.c:114 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置ST_CTL寄存器STEN位 ----------------*/ if (NewState != FALSE) 73a: 00 38 CMP R0, #0 73c: 06 f1 JNZ $+6 ;->0x748 ..\src\kf32a156_systick.c:122 SFR_SET_BIT_ASM(ST_CTL, ST_CTL_STEN_POS); } else { /* 禁止系统节拍定时器 */ SFR_CLR_BIT_ASM(ST_CTL, ST_CTL_STEN_POS); 73e: 28 4e CLR [R5], #0 ..\src\kf32a156_systick.c:124 } } 740: 1d 5c JMP LR 742: 00 00 NOP NOP 744: a0 00 20 40 .long 0x402000a0 ->1075839136 [!!!@4@:DO #16, $+32 ;->0x784 ..\src\kf32a156_systick.c:117 /*---------------- 设置ST_CTL寄存器STEN位 ----------------*/ if (NewState != FALSE) { /* 使能系统节拍定时器 */ SFR_SET_BIT_ASM(ST_CTL, ST_CTL_STEN_POS); 748: 28 4c SET [R5], #0 ..\src\kf32a156_systick.c:124 else { /* 禁止系统节拍定时器 */ SFR_CLR_BIT_ASM(ST_CTL, ST_CTL_STEN_POS); } } 74a: 1d 5c JMP LR 0000074c : SYSTICK_Clock_Config(): ..\src\kf32a156_systick.c:144 /*---------------- 设置ST_CTL寄存器STCLKS位 ----------------*/ if (SysClock != SYSTICK_SYS_CLOCK_DIV_2) { /* 选择SCLK作为时钟 */ SFR_SET_BIT_ASM(ST_CTL, ST_CTL_STCLKS_POS); 74c: 03 45 LD R5, [PC + #3] ;->0x758 :=0x402000a0 ..\src\kf32a156_systick.c:141 { /* 参数校验 */ CHECK_RESTRICTION(CHECK_SYSTICK_CLOCK(SysClock)); /*---------------- 设置ST_CTL寄存器STCLKS位 ----------------*/ if (SysClock != SYSTICK_SYS_CLOCK_DIV_2) 74e: 00 38 CMP R0, #0 750: 06 f1 JNZ $+6 ;->0x75c ..\src\kf32a156_systick.c:149 SFR_SET_BIT_ASM(ST_CTL, ST_CTL_STCLKS_POS); } else { /* 选择SCLK/2作为时钟 */ SFR_CLR_BIT_ASM(ST_CTL, ST_CTL_STCLKS_POS); 752: 2a 4e CLR [R5], #2 ..\src\kf32a156_systick.c:151 } } 754: 1d 5c JMP LR 756: 00 00 NOP NOP 758: a0 00 20 40 .long 0x402000a0 ->1075839136 [!!!@4@:DO #16, $+32 ;->0x798 ..\src\kf32a156_systick.c:144 /*---------------- 设置ST_CTL寄存器STCLKS位 ----------------*/ if (SysClock != SYSTICK_SYS_CLOCK_DIV_2) { /* 选择SCLK作为时钟 */ SFR_SET_BIT_ASM(ST_CTL, ST_CTL_STCLKS_POS); 75c: 2a 4c SET [R5], #2 ..\src\kf32a156_systick.c:151 else { /* 选择SCLK/2作为时钟 */ SFR_CLR_BIT_ASM(ST_CTL, ST_CTL_STCLKS_POS); } } 75e: 1d 5c JMP LR 00000760 : USART_Reset(): ..\src\kf32a156_usart.c:83 * 描述 USART外设复位 * 输入 USARTx: 指向USART内存结构的指针,取值为USART0_SFR/USART1_SFR/USART2_SFR/USART5_SFR * 返回 无。 */ void USART_Reset (USART_SFRmap* USARTx) { 760: 81 5f PUSH {R6,LR} ..\src\kf32a156_usart.c:87 /* 参数校验 */ CHECK_RESTRICTION(CHECK_USART_ALL_PERIPH(USARTx)); if (USARTx == USART0_SFR) 762: 08 45 LD R5, [PC + #8] ;->0x780 :=0x40000980 764: 05 70 CMP R0, R5 766: 24 f0 JZ $+36 ;->0x7ae ..\src\kf32a156_usart.c:93 { RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART0RST, TRUE); RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART0RST, FALSE); PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART0CLKEN, TRUE); } else if (USARTx == USART1_SFR) 768: 07 45 LD R5, [PC + #7] ;->0x784 :=0x40000a00 76a: 05 70 CMP R0, R5 76c: 30 f0 JZ $+48 ;->0x7cc ..\src\kf32a156_usart.c:99 { RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART1RST, TRUE); RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART1RST, FALSE); PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART1CLKEN, TRUE); } else if (USARTx == USART2_SFR) 76e: 07 45 LD R5, [PC + #7] ;->0x788 :=0x40000a80 770: 05 70 CMP R0, R5 772: 3c f0 JZ $+60 ;->0x7ea ..\src\kf32a156_usart.c:105 { RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART2RST, TRUE); RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART2RST, FALSE); PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART2CLKEN, TRUE); } else if (USARTx == USART5_SFR) 774: 06 45 LD R5, [PC + #6] ;->0x78c :=0x40001e80 776: 05 70 CMP R0, R5 778: 0c f0 JZ $+12 ;->0x790 ..\src\kf32a156_usart.c:115 } else { ; } } 77a: 06 5d POP R6 77c: 0d 5d POP LR 77e: 1d 5c JMP LR 780: 80 09 00 40 .long 0x40000980 ->1073744256 [!!!@2@:LD.W R1, [SP + #128] @@: LD R0, [PC + #0] ;->0x780 :=0x40000980 784: 00 0a 00 40 .long 0x40000a00 ->1073744384 [!!!@2@:LD.W R2, [SP + #0] @@: LD R0, [PC + #0] ;->0x784 :=0x40000a00 788: 80 0a 00 40 .long 0x40000a80 ->1073744512 [!!!@2@:LD.W R2, [SP + #128] @@: LD R0, [PC + #0] ;->0x788 :=0x40000a80 78c: 80 1e 00 40 .long 0x40001e80 ->1073749632 [!!!@2@:MOV R8, #224 @@: LD R0, [PC + #0] ;->0x78c :=0x40001e80 ..\src\kf32a156_usart.c:107 RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART2RST, FALSE); PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART2CLKEN, TRUE); } else if (USARTx == USART5_SFR) { RST_CTL2_Peripheral_Reset_Enable(RST_CTL2_USART5RST, TRUE); 790: 01 10 MOV R0, #1 792: 85 7b LSL R0, #29 794: 11 10 MOV R1, #1 796: 1d 46 LD R6, [PC + #29] ;->0x808 :=0x700 798: 06 5c LJMP R6 ..\src\kf32a156_usart.c:108 RST_CTL2_Peripheral_Reset_Enable(RST_CTL2_USART5RST, FALSE); 79a: 01 10 MOV R0, #1 79c: 85 7b LSL R0, #29 79e: 10 10 MOV R1, #0 7a0: 06 5c LJMP R6 ..\src\kf32a156_usart.c:109 PCLK_CTL2_Peripheral_Clock_Enable(PCLK_CTL2_USART5CLKEN, TRUE); 7a2: 01 10 MOV R0, #1 7a4: 85 7b LSL R0, #29 7a6: 11 10 MOV R1, #1 7a8: 19 45 LD R5, [PC + #25] ;->0x80c :=0x6ac 7aa: 05 5c LJMP R5 7ac: e7 07 SJMP $-25 ;->0x77a ..\src\kf32a156_usart.c:89 /* 参数校验 */ CHECK_RESTRICTION(CHECK_USART_ALL_PERIPH(USARTx)); if (USARTx == USART0_SFR) { RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART0RST, TRUE); 7ae: 01 10 MOV R0, #1 7b0: 03 7b LSL R0, #19 7b2: 11 10 MOV R1, #1 7b4: 17 46 LD R6, [PC + #23] ;->0x810 :=0x6e4 7b6: 06 5c LJMP R6 ..\src\kf32a156_usart.c:90 RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART0RST, FALSE); 7b8: 01 10 MOV R0, #1 7ba: 03 7b LSL R0, #19 7bc: 10 10 MOV R1, #0 7be: 06 5c LJMP R6 ..\src\kf32a156_usart.c:91 PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART0CLKEN, TRUE); 7c0: 01 10 MOV R0, #1 7c2: 03 7b LSL R0, #19 7c4: 11 10 MOV R1, #1 7c6: 14 45 LD R5, [PC + #20] ;->0x814 :=0x690 7c8: 05 5c LJMP R5 7ca: d8 07 SJMP $-40 ;->0x77a ..\src\kf32a156_usart.c:95 } else if (USARTx == USART1_SFR) { RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART1RST, TRUE); 7cc: 01 10 MOV R0, #1 7ce: 04 7b LSL R0, #20 7d0: 11 10 MOV R1, #1 7d2: 10 46 LD R6, [PC + #16] ;->0x810 :=0x6e4 7d4: 06 5c LJMP R6 ..\src\kf32a156_usart.c:96 RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART1RST, FALSE); 7d6: 01 10 MOV R0, #1 7d8: 04 7b LSL R0, #20 7da: 10 10 MOV R1, #0 7dc: 06 5c LJMP R6 ..\src\kf32a156_usart.c:97 PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART1CLKEN, TRUE); 7de: 01 10 MOV R0, #1 7e0: 04 7b LSL R0, #20 7e2: 11 10 MOV R1, #1 7e4: 0c 45 LD R5, [PC + #12] ;->0x814 :=0x690 7e6: 05 5c LJMP R5 7e8: c9 07 SJMP $-55 ;->0x77a ..\src\kf32a156_usart.c:101 } else if (USARTx == USART2_SFR) { RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART2RST, TRUE); 7ea: 01 10 MOV R0, #1 7ec: 05 7b LSL R0, #21 7ee: 11 10 MOV R1, #1 7f0: 08 46 LD R6, [PC + #8] ;->0x810 :=0x6e4 7f2: 06 5c LJMP R6 ..\src\kf32a156_usart.c:102 RST_CTL1_Peripheral_Reset_Enable(RST_CTL1_USART2RST, FALSE); 7f4: 01 10 MOV R0, #1 7f6: 05 7b LSL R0, #21 7f8: 10 10 MOV R1, #0 7fa: 06 5c LJMP R6 ..\src\kf32a156_usart.c:103 PCLK_CTL1_Peripheral_Clock_Enable(PCLK_CTL1_USART2CLKEN, TRUE); 7fc: 01 10 MOV R0, #1 7fe: 05 7b LSL R0, #21 800: 11 10 MOV R1, #1 802: 05 45 LD R5, [PC + #5] ;->0x814 :=0x690 804: 05 5c LJMP R5 806: ba 07 SJMP $-70 ;->0x77a 808: 00 07 00 00 .long 0x00000700 ->000001792 [!!!@2@:SJMP $-256 ;->0x608 @@: NOP 80c: ac 06 00 00 .long 0x000006ac ->000001708 [!!!@2@:SJMP $-340 ;->0x564 @@: NOP 810: e4 06 00 00 .long 0x000006e4 ->000001764 [!!!@2@:SJMP $-284 ;->0x5d8 @@: NOP 814: 90 06 00 00 .long 0x00000690 ->000001680 [!!!@2@:SJMP $-368 ;->0x534 @@: NOP 00000818 : USART_Configuration(): ..\src\kf32a156_usart.c:166 | (usartInitStruct->m_Parity) \ | (usartInitStruct->m_BRAutoDetect) \ | (usartInitStruct->m_HardwareFlowControl) \ | (usartInitStruct->m_BaudRateBRCKS)); USARTx->CTLR = SFR_Config (USARTx->CTLR, ~USART_CTLR_INIT_MASK, tmpreg); 818: 30 82 LD.W R3, [R0] ..\src\kf32a156_usart.c:154 /* 根据结构体成员m_StopBits,设置STPW位域 */ /* 根据结构体成员m_Bit9SEL,设置TX9SEL位域 */ /* 根据结构体成员m_Parity,设置PARM位域 */ /* 根据结构体成员m_HardwareFlowControl,设置RTSEN/CTSEN位域 */ tmpreg = ((usartInitStruct->m_Mode) \ | (usartInitStruct->m_HalfDuplexClkSource) \ 81a: 51 98 LD.W R2, [R1 + #1] 81c: 41 82 LD.W R4, [R1] 81e: 2a d7 ORL R5, R2, R4 ..\src\kf32a156_usart.c:155 | (usartInitStruct->m_TransferDir) \ 820: 91 98 LD.W R2, [R1 + #2] 822: ad d6 ORL R5, R5, R2 ..\src\kf32a156_usart.c:156 | (usartInitStruct->m_WordLength) \ 824: e1 98 LD.W R4, [R1 + #3] 826: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:157 | (usartInitStruct->m_Bit9SEL) \ 828: 51 99 LD.W R2, [R1 + #5] 82a: ad d6 ORL R5, R5, R2 ..\src\kf32a156_usart.c:158 | (usartInitStruct->m_StopBits) \ 82c: 21 99 LD.W R4, [R1 + #4] 82e: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:159 | (usartInitStruct->m_ReceiveOrder) \ 830: d1 99 LD.W R2, [R1 + #7] 832: ad d6 ORL R5, R5, R2 ..\src\kf32a156_usart.c:160 | (usartInitStruct->m_TransmitOrder) \ 834: 21 9a LD.W R4, [R1 + #8] 836: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:161 | (usartInitStruct->m_Parity) \ 838: 91 99 LD.W R2, [R1 + #6] 83a: ad d6 ORL R5, R5, R2 ..\src\kf32a156_usart.c:162 | (usartInitStruct->m_BRAutoDetect) \ 83c: 61 9a LD.W R4, [R1 + #9] 83e: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:163 | (usartInitStruct->m_HardwareFlowControl) \ 840: 91 9a LD.W R2, [R1 + #10] 842: ad d6 ORL R5, R5, R2 ..\src\kf32a156_usart.c:164 | (usartInitStruct->m_BaudRateBRCKS)); 844: a1 ad LD.H R4, [R1 + #22] ..\src\kf32a156_usart.c:153 /* 根据结构体成员m_WordLength,设置DT9EN位域 */ /* 根据结构体成员m_StopBits,设置STPW位域 */ /* 根据结构体成员m_Bit9SEL,设置TX9SEL位域 */ /* 根据结构体成员m_Parity,设置PARM位域 */ /* 根据结构体成员m_HardwareFlowControl,设置RTSEN/CTSEN位域 */ tmpreg = ((usartInitStruct->m_Mode) \ 846: 2d d7 ORL R5, R5, R4 KF32A156.h:14083 848: 09 44 LD R4, [PC + #9] ;->0x86c :=0xfcca3eff 84a: 23 d5 ANL R4, R3, R4 84c: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:166 | (usartInitStruct->m_Parity) \ | (usartInitStruct->m_BRAutoDetect) \ | (usartInitStruct->m_HardwareFlowControl) \ | (usartInitStruct->m_BaudRateBRCKS)); USARTx->CTLR = SFR_Config (USARTx->CTLR, ~USART_CTLR_INIT_MASK, tmpreg); 84e: 05 85 ST.W [R0], R5 ..\src\kf32a156_usart.c:175 /* 根据结构体成员m_BaudRateNumerator,设置BRGF1位域 */ /* 根据结构体成员m_BaudRateDenominator,设置BRGF2位域 */ tmpreg = ((uint32_t)usartInitStruct->m_BaudRateInteger << USART_BRGR_BRGM0_POS) \ | ((uint32_t)usartInitStruct->m_BaudRateNumerator << USART_BRGR_BRGF1_0_POS) \ | ((uint32_t)usartInitStruct->m_BaudRateDenominator << USART_BRGR_BRGF2_0_POS); USARTx->BRGR = SFR_Config (USARTx->BRGR, ~USART_BRGR_INIT_MASK, tmpreg); 850: 60 98 LD.W R4, [R0 + #1] KF32A156.h:14083 852: 08 45 LD R5, [PC + #8] ;->0x870 :=0xff000000 854: 6c d5 ANL R5, R4, R5 ..\src\kf32a156_usart.c:172 /*------------------- USART_BRGR寄存器配置 -----------------*/ /* 根据结构体成员m_BaudRateInteger,设置BRGM位域 */ /* 根据结构体成员m_BaudRateNumerator,设置BRGF1位域 */ /* 根据结构体成员m_BaudRateDenominator,设置BRGF2位域 */ tmpreg = ((uint32_t)usartInitStruct->m_BaudRateInteger << USART_BRGR_BRGM0_POS) \ 856: e1 ad LD.H R4, [R1 + #23] ..\src\kf32a156_usart.c:173 | ((uint32_t)usartInitStruct->m_BaudRateNumerator << USART_BRGR_BRGF1_0_POS) \ 858: 2d d7 ORL R5, R5, R4 85a: 21 ae LD.H R4, [R1 + #24] 85c: 20 7b LSL R4, #16 ..\src\kf32a156_usart.c:172 /*------------------- USART_BRGR寄存器配置 -----------------*/ /* 根据结构体成员m_BaudRateInteger,设置BRGM位域 */ /* 根据结构体成员m_BaudRateNumerator,设置BRGF1位域 */ /* 根据结构体成员m_BaudRateDenominator,设置BRGF2位域 */ tmpreg = ((uint32_t)usartInitStruct->m_BaudRateInteger << USART_BRGR_BRGM0_POS) \ 85e: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:174 | ((uint32_t)usartInitStruct->m_BaudRateNumerator << USART_BRGR_BRGF1_0_POS) \ | ((uint32_t)usartInitStruct->m_BaudRateDenominator << USART_BRGR_BRGF2_0_POS); 860: 61 ae LD.H R4, [R1 + #25] 862: 24 7b LSL R4, #20 KF32A156.h:14083 864: 2d d7 ORL R5, R5, R4 ..\src\kf32a156_usart.c:175 USARTx->BRGR = SFR_Config (USARTx->BRGR, ~USART_BRGR_INIT_MASK, tmpreg); 866: 45 a0 ST.W [R0 + #1], R5 ..\src\kf32a156_usart.c:176 } 868: 1d 5c JMP LR 86a: 00 00 NOP NOP 86c: ff 3e ca fc .long 0xfcca3eff ->-53854465 [!!!@2@:CMP PC, #111 @@: JGT $-54 ;->0x800 870: 00 00 00 ff .long 0xff000000 ->-16777216 00000874 : USART_Struct_Init(): ..\src\kf32a156_usart.c:223 * 返回 无。 */ void USART_Struct_Init(USART_InitTypeDef* usartInitStruct) { /* 初始化 USART模式 */ usartInitStruct->m_Mode = USART_MODE_FULLDUPLEXASY; 874: 50 10 MOV R5, #0 876: 05 85 ST.W [R0], R5 ..\src\kf32a156_usart.c:226 /* 初始化 USART时钟源选择 */ usartInitStruct->m_HalfDuplexClkSource = USART_SLAVE_CLOCKSOURCE_EXTER; 878: 45 a0 ST.W [R0 + #1], R5 ..\src\kf32a156_usart.c:229 /* 初始化 USART传输方向 */ usartInitStruct->m_TransferDir = USART_DIRECTION_TRANSMIT; 87a: 41 10 MOV R4, #1 87c: a7 7a LSL R4, #15 87e: 84 a0 ST.W [R0 + #2], R4 ..\src\kf32a156_usart.c:232 /* 初始化 USART字长 */ usartInitStruct->m_WordLength = USART_WORDLENGTH_8B; 880: c5 a0 ST.W [R0 + #3], R5 ..\src\kf32a156_usart.c:235 /* 初始化 USART停止位 */ usartInitStruct->m_StopBits = USART_STOPBITS_1; 882: 05 a1 ST.W [R0 + #4], R5 ..\src\kf32a156_usart.c:238 /* 初始化 USART发送数据第9位数据 */ usartInitStruct->m_Bit9SEL = USART_BIT9_PAR; 884: 45 a1 ST.W [R0 + #5], R5 ..\src\kf32a156_usart.c:241 /* 初始化 USART奇偶校验位 */ usartInitStruct->m_Parity = USART_PARITY_ODD; 886: 85 a1 ST.W [R0 + #6], R5 ..\src\kf32a156_usart.c:244 /* 初始化 USART接收次序 */ usartInitStruct->m_ReceiveOrder = USART_RECEIVE_LSB; 888: c5 a1 ST.W [R0 + #7], R5 ..\src\kf32a156_usart.c:247 /* 初始化USART发送次序 */ usartInitStruct->m_TransmitOrder = USART_TRANSMIT_LSB; 88a: 05 a2 ST.W [R0 + #8], R5 ..\src\kf32a156_usart.c:250 /* 初始化 USART自动波特率检测使能位 */ usartInitStruct->m_BRAutoDetect = USART_ABRDEN_OFF; 88c: 45 a2 ST.W [R0 + #9], R5 ..\src\kf32a156_usart.c:253 /* 初始化 USART硬件流控制 */ usartInitStruct->m_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE; 88e: 85 a2 ST.W [R0 + #10], R5 ..\src\kf32a156_usart.c:256 /* 初始化 USART波特率发生器时钟选择 */ usartInitStruct->m_BaudRateBRCKS = USART_CLK_SCLK; 890: 85 b5 ST.H [R0 + #22], R5 ..\src\kf32a156_usart.c:259 /* 初始化 USART波特率整数部分 */ usartInitStruct->m_BaudRateInteger = 1; 892: 41 10 MOV R4, #1 894: c4 b5 ST.H [R0 + #23], R4 ..\src\kf32a156_usart.c:262 /* 初始化 USART波特率小数分子部分 */ usartInitStruct->m_BaudRateNumerator = 0; 896: 05 b6 ST.H [R0 + #24], R5 ..\src\kf32a156_usart.c:265 /* 初始化 USART波特率小数分母部分 */ usartInitStruct->m_BaudRateDenominator = 1; 898: 44 b6 ST.H [R0 + #25], R4 ..\src\kf32a156_usart.c:266 } 89a: 1d 5c JMP LR 0000089c : USART_Cmd(): ..\src\kf32a156_usart.c:317 /* 参数校验 */ CHECK_RESTRICTION(CHECK_USART_ALL_PERIPH(USARTx)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 配置USART_CTLR寄存器USARTEN位 ----------------*/ if (NewState != FALSE) 89c: 10 38 CMP R1, #0 89e: 03 f1 JNZ $+3 ;->0x8a4 ..\src\kf32a156_usart.c:325 SFR_SET_BIT_ASM(USARTx->CTLR, USART_CTLR_USARTEN_POS); } else { /* 禁止USART */ SFR_CLR_BIT_ASM(USARTx->CTLR, USART_CTLR_USARTEN_POS); 8a0: 00 4e CLR [R0], #0 ..\src\kf32a156_usart.c:327 } } 8a2: 1d 5c JMP LR ..\src\kf32a156_usart.c:320 /*---------------- 配置USART_CTLR寄存器USARTEN位 ----------------*/ if (NewState != FALSE) { /* 使能USART */ SFR_SET_BIT_ASM(USARTx->CTLR, USART_CTLR_USARTEN_POS); 8a4: 00 4c SET [R0], #0 ..\src\kf32a156_usart.c:327 else { /* 禁止USART */ SFR_CLR_BIT_ASM(USARTx->CTLR, USART_CTLR_USARTEN_POS); } } 8a6: 1d 5c JMP LR 000008a8 : USART_RESHD_Enable(): ..\src\kf32a156_usart.c:896 /* 参数校验 */ CHECK_RESTRICTION(CHECK_USART_ALL_PERIPH(USARTx)); CHECK_RESTRICTION(CHECK_FUNCTIONAL_STATE(NewState)); /*---------------- 设置USART_CTLR寄存器RESHD位 ----------------*/ if (NewState != FALSE) 8a8: 10 38 CMP R1, #0 8aa: 03 f1 JNZ $+3 ;->0x8b0 ..\src\kf32a156_usart.c:904 SFR_SET_BIT_ASM(USARTx->CTLR, USART_CTLR_RESHD_POS); } else { /* 禁止单线模式*/ SFR_CLR_BIT_ASM(USARTx->CTLR, USART_CTLR_RESHD_POS); 8ac: 86 4f CLR [R0], #30 ..\src\kf32a156_usart.c:906 } } 8ae: 1d 5c JMP LR ..\src\kf32a156_usart.c:899 /*---------------- 设置USART_CTLR寄存器RESHD位 ----------------*/ if (NewState != FALSE) { /* 使能单线模式*/ SFR_SET_BIT_ASM(USARTx->CTLR, USART_CTLR_RESHD_POS); 8b0: 86 4d SET [R0], #30 ..\src\kf32a156_usart.c:906 else { /* 禁止单线模式*/ SFR_CLR_BIT_ASM(USARTx->CTLR, USART_CTLR_RESHD_POS); } } 8b2: 1d 5c JMP LR 000008b4 : startup(): ..\_config\startup.c:20 #endif //####################################################################// extern int main(); //####################################################################// void startup() { 8b4: 2d 5d PUSH LR ..\_config\startup.c:27 #ifdef Project_Type__cplusplus void (*pf)(void); #endif //############# init work for the chip #############// // HWREG(0x40000000)=1; HWREG(0x40000000)=0; 8b6: 40 10 MOV R4, #0 8b8: 51 10 MOV R5, #1 8ba: ae 7b LSL R5, #30 8bc: 54 85 ST.W [R5], R4 ..\_config\startup.c:32 //############# init variable who have initialization #############// s = (unsigned int*)&__text_end__; begin = (unsigned int*)&__data_start__; end = (unsigned int*)&__bss_start__; while(begin < end) 8be: 12 45 LD R5, [PC + #18] ;->0x904 :=0x10000000 8c0: 12 41 LD R1, [PC + #18] ;->0x908 :=0x10000460 8c2: 15 70 CMP R1, R5 8c4: 0d f9 JLS $+13 ;->0x8de 8c6: 12 44 LD R4, [PC + #18] ;->0x90c :=0x2ce8 ..\_config\startup.c:19 extern unsigned int __init_class_end; #endif //####################################################################// extern int main(); //####################################################################// void startup() 8c8: 12 43 LD R3, [PC + #18] ;->0x910 :=0x10000004 8ca: 13 42 LD R2, [PC + #19] ;->0x914 :=0x10000463 8cc: d2 c6 SUB R2, R2, R3 8ce: 12 7c LSR R2, #2 8d0: 52 c0 ADD R2, R2, #1 8d2: 12 7a LSL R2, #2 8d4: 52 c3 ADD R2, R2, R5 ..\_config\startup.c:33 //############# init variable who have initialization #############// s = (unsigned int*)&__text_end__; begin = (unsigned int*)&__data_start__; end = (unsigned int*)&__bss_start__; while(begin < end) *begin++ = *s++; 8d6: 34 72 LD.W R3, [R4++] 8d8: 53 73 ST.W [R5++], R3 ..\_config\startup.c:32 HWREG(0x40000000)=0; //############# init variable who have initialization #############// s = (unsigned int*)&__text_end__; begin = (unsigned int*)&__data_start__; end = (unsigned int*)&__bss_start__; while(begin < end) 8da: 52 70 CMP R5, R2 8dc: fd f1 JNZ $-3 ;->0x8d6 ..\_config\startup.c:48 #endif //############# init variable who have no initialization #############// #if 1 // 0 not init this type variable begin = (unsigned int*)&__bss_start__; end = (unsigned int*)&__bss_end__; while(begin < end) 8de: 0b 45 LD R5, [PC + #11] ;->0x908 :=0x10000460 8e0: 0e 44 LD R4, [PC + #14] ;->0x918 :=0x10000aac 8e2: 41 70 CMP R4, R1 8e4: 0c f9 JLS $+12 ;->0x8fc ..\_config\startup.c:19 extern unsigned int __init_class_end; #endif //####################################################################// extern int main(); //####################################################################// void startup() 8e6: 0e 44 LD R4, [PC + #14] ;->0x91c :=0x10000464 8e8: 0e 43 LD R3, [PC + #14] ;->0x920 :=0x10000aaf 8ea: 1b c7 SUB R3, R3, R4 8ec: 1a 7c LSR R3, #2 8ee: 5b c0 ADD R3, R3, #1 8f0: 1a 7a LSL R3, #2 8f2: 5b c3 ADD R3, R3, R5 ..\_config\startup.c:49 //############# init variable who have no initialization #############// #if 1 // 0 not init this type variable begin = (unsigned int*)&__bss_start__; end = (unsigned int*)&__bss_end__; while(begin < end) *begin++ = 0; 8f4: 40 10 MOV R4, #0 8f6: 54 73 ST.W [R5++], R4 ..\_config\startup.c:48 #endif //############# init variable who have no initialization #############// #if 1 // 0 not init this type variable begin = (unsigned int*)&__bss_start__; end = (unsigned int*)&__bss_end__; while(begin < end) 8f8: 53 70 CMP R5, R3 8fa: fe f1 JNZ $-2 ;->0x8f6 ..\_config\startup.c:52 *begin++ = 0; #endif //############# begin to run main function #############// main(); 8fc: 0a 40 LD R0, [PC + #10] ;->0x924 :=0x1d0c 8fe: 00 5c LJMP R0 ..\_config\startup.c:53 } 900: 0d 5d POP LR 902: 1d 5c JMP LR 904: 00 00 00 10 .long 0x10000000 ->268435456 [!!!@2@:NOP @@: MOV R0, #0 908: 60 04 00 10 .long 0x10000460 ->268436576 [!!!@2@:SJMP $+96 ;->0x9c8 @@: MOV R0, #0 90c: e8 2c 00 00 .long 0x00002ce8 ->000011496 [!!!@2@:ADD SP, #72 @@: NOP 910: 04 00 00 10 .long 0x10000004 ->268435460 914: 63 04 00 10 .long 0x10000463 ->268436579 [!!!@2@:SJMP $+99 ;->0x9da @@: MOV R0, #0 918: ac 0a 00 10 .long 0x10000aac ->268438188 [!!!@2@:LD.W R2, [SP + #172] @@: MOV R0, #0 91c: 64 04 00 10 .long 0x10000464 ->268436580 [!!!@2@:SJMP $+100 ;->0x9e4 @@: MOV R0, #0 920: af 0a 00 10 .long 0x10000aaf ->268438191 [!!!@2@:LD.W R2, [SP + #175] @@: MOV R0, #0 924: 0c 1d 00 00 .long 0x00001d0c ->000007436 [!!!@2@:MOV R0, #220 @@: NOP 00000928 : FlashWriteNKBytes(): ..\Flash.c:101 * INVALID_SECTOR 0x07 * SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 0x09 * BUSY 0x0B */ uint32_t FlashWriteNKBytes(unsigned int Address, unsigned int Length, unsigned char *Buffers) { 928: 8f 5f PUSH {R6-R9,LR} 92a: e0 58 MOV R7, R0 92c: c1 58 MOV R6, R1 92e: 22 59 MOV R9, R2 ..\Flash.c:103 uint32_t i,FlashRetVal, IntState; IntState = (INT_CTL0 & INT_CTL0_AIE); 930: 0a 45 LD R5, [PC + #10] ;->0x958 :=0x40200000 932: 85 82 LD.W R8, [R5] 934: 41 10 MOV R4, #1 936: 84 69 ANL R8, R4 ..\Flash.c:104 SFR_CLR_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); 938: 28 4e CLR [R5], #0 ..\Flash.c:105 FlashRetVal = __FLASH_Erase__(Function_Parameter_Validate, Address, Length); 93a: 09 40 LD R0, [PC + #9] ;->0x95c :=0x5a5a6688 93c: 27 58 MOV R1, R7 93e: 46 58 MOV R2, R6 940: 08 45 LD R5, [PC + #8] ;->0x960 :=0x2624 942: 05 5c LJMP R5 ..\Flash.c:106 if (FlashRetVal == CMD_SUCCESS) 944: 00 38 CMP R0, #0 946: 0f f0 JZ $+15 ;->0x964 ..\Flash.c:110 { FlashRetVal = __FLASH_Program__(Function_Parameter_Validate, Address, Length, Buffers); } if (IntState != 0) 948: 80 38 CMP R8, #0 94a: 03 f0 JZ $+3 ;->0x950 ..\Flash.c:111 SFR_SET_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); 94c: 03 45 LD R5, [PC + #3] ;->0x958 :=0x40200000 94e: 28 4c SET [R5], #0 ..\Flash.c:113 return FlashRetVal; } 950: 0f 5e POP {R6-R9} 952: 0d 5d POP LR 954: 1d 5c JMP LR 956: 00 00 NOP NOP 958: 00 00 20 40 .long 0x40200000 ->1075838976 [!!!@2@:NOP @@: LD R0, [PC + #32] ;->0x9d8 :=0x5c035983 95c: 88 66 5a 5a .long 0x5a5a6688 ->1515873928 [!!!@2@:SUB R8, R8 @@: MOV R18, R26 960: 24 26 00 00 .long 0x00002624 ->000009764 [!!!@2@:ST.W [SP + #36], R6 @@: NOP ..\Flash.c:108 IntState = (INT_CTL0 & INT_CTL0_AIE); SFR_CLR_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); FlashRetVal = __FLASH_Erase__(Function_Parameter_Validate, Address, Length); if (FlashRetVal == CMD_SUCCESS) { FlashRetVal = __FLASH_Program__(Function_Parameter_Validate, Address, Length, Buffers); 964: 04 40 LD R0, [PC + #4] ;->0x974 :=0x5a5a6688 966: 27 58 MOV R1, R7 968: 46 58 MOV R2, R6 96a: 69 58 MOV R3, R9 96c: 03 45 LD R5, [PC + #3] ;->0x978 :=0x2688 96e: 05 5c LJMP R5 970: ec 07 SJMP $-20 ;->0x948 972: 00 00 NOP NOP 974: 88 66 5a 5a .long 0x5a5a6688 ->1515873928 [!!!@2@:SUB R8, R8 @@: MOV R18, R26 978: 88 26 00 00 .long 0x00002688 ->000009864 [!!!@2@:ST.W [SP + #136], R6 @@: NOP 0000097c : FlashEEWriteNBytes(): ..\Flash.c:136 * INVALID_SECTOR 0x07 * SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 0x09 * BUSY 0x0B */ uint32_t FlashEEWriteNBytes(unsigned int Address, unsigned int Length, unsigned char *Buffers) { 97c: ff 5f PUSH {R6-R12,LR} 97e: 3f 45 LD R5, [PC + #63] ;->0xa78 :=0x408 980: e5 66 SUB SP, R5 982: a0 58 MOV R5, R0 984: 01 59 MOV R8, R1 986: e2 58 MOV R7, R2 ..\Flash.c:142 uint8_t ReadTempBuffer[1024]; uint32_t FlashRetVal = CMD_SUCCESS, IntState; uint32_t i,PageNum, AddrNum, Writelen; if (Length > 0x400) FlashRetVal = INVALID_SECTOR; 988: 07 10 MOV R0, #7 ..\Flash.c:141 { uint8_t ReadTempBuffer[1024]; uint32_t FlashRetVal = CMD_SUCCESS, IntState; uint32_t i,PageNum, AddrNum, Writelen; if (Length > 0x400) 98a: 41 10 MOV R4, #1 98c: a2 7a LSL R4, #10 98e: 14 70 CMP R1, R4 990: 6e f8 JHI $+110 ;->0xa6c ..\Flash.c:145 FlashRetVal = INVALID_SECTOR; while((FlashRetVal == CMD_SUCCESS)) { IntState = (INT_CTL0 & INT_CTL0_AIE); 992: 3b 44 LD R4, [PC + #59] ;->0xa7c :=0x40200000 994: 24 82 LD.W R2, [R4] 996: 31 10 MOV R3, #1 998: ca d4 ANL R1, R2, R3 99a: 3a 40 LD R0, [PC + #58] ;->0xa80 :=0x404 99c: 0e 64 ADD R0, SP 99e: 01 85 ST.W [R0], R1 ..\Flash.c:146 SFR_CLR_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); 9a0: 20 4e CLR [R4], #0 ..\Flash.c:147 PageNum = Address / 0x400; 9a2: 2a 10 MOV R2, #10 9a4: 9d dc LSR R3, R5, R2 9a6: 21 10 MOV R2, #1 9a8: 92 7a LSL R2, #10 9aa: 2e 64 ADD R2, SP 9ac: 23 85 ST.W [R2], R3 ..\Flash.c:148 AddrNum = Address % 0x400; 9ae: 36 44 LD R4, [PC + #54] ;->0xa84 :=0x3ff 9b0: 2d d5 ANL R5, R5, R4 9b2: 45 59 MOV R10, R5 ..\Flash.c:149 FlashReadNByte((PageNum << 10), 0x400, ReadTempBuffer); 9b4: 9a 7a LSL R3, #10 9b6: 23 59 MOV R9, R3 9b8: 83 58 MOV R4, R3 ..\Flash.c:50 * @param out :Buffers :Read data to Buffers * @retval :None */ void FlashReadNByte(unsigned int Address, unsigned int Length, unsigned char *Buffers) { for (int i = 0; i < Length; i++) 9ba: 60 10 MOV R6, #0 9bc: a6 58 MOV R5, R6 9be: 21 10 MOV R2, #1 9c0: 92 7a LSL R2, #10 ..\Flash.c:52 { Buffers[i] = *(unsigned char *)Address++; 9c2: 34 76 LD.B R3, [R4++] 9c4: 5e 64 ADD R5, SP 9c6: 53 83 ST.B [R5], R3 ..\Flash.c:50 * @param out :Buffers :Read data to Buffers * @retval :None */ void FlashReadNByte(unsigned int Address, unsigned int Length, unsigned char *Buffers) { for (int i = 0; i < Length; i++) 9c8: 76 c0 ADD R6, R6, #1 9ca: a6 58 MOV R5, R6 9cc: 62 70 CMP R6, R2 9ce: fa f1 JNZ $-6 ;->0x9c2 ..\Flash.c:150 IntState = (INT_CTL0 & INT_CTL0_AIE); SFR_CLR_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); PageNum = Address / 0x400; AddrNum = Address % 0x400; FlashReadNByte((PageNum << 10), 0x400, ReadTempBuffer); __FLASH_Erase__(Function_Parameter_Validate, (PageNum << 10), 0x400); 9d0: 2e 40 LD R0, [PC + #46] ;->0xa88 :=0x5a5a6688 9d2: 29 58 MOV R1, R9 9d4: 46 58 MOV R2, R6 9d6: 2e 43 LD R3, [PC + #46] ;->0xa8c :=0x2624 9d8: 83 59 MOV R12, R3 9da: 03 5c LJMP R3 ..\Flash.c:151 if ((AddrNum + Length) <= 0x400) 9dc: 8a 58 MOV R4, R10 9de: 48 64 ADD R4, R8 9e0: 64 59 MOV R11, R4 9e2: 46 70 CMP R4, R6 9e4: 58 f9 JLS $+88 ;->0xa94 ..\Flash.c:157 { Writelen = Length; } else { Writelen = 0x400 - AddrNum; 9e6: 6a 66 SUB R6, R10 9e8: 06 59 MOV R8, R6 ..\Flash.c:159 } for (i = 0; i < Writelen; i++) 9ea: 50 10 MOV R5, #0 9ec: 6e 58 MOV R3, SP 9ee: 3a 64 ADD R3, R10 ..\Flash.c:161 { ReadTempBuffer[AddrNum + i] = *Buffers++; 9f0: 67 e5 LD.B R4, [R7 + R5] 9f2: 5c eb ST.B [R3 + R5], R4 ..\Flash.c:159 } else { Writelen = 0x400 - AddrNum; } for (i = 0; i < Writelen; i++) 9f4: 6d c0 ADD R5, R5, #1 9f6: 58 70 CMP R5, R8 9f8: fc f1 JNZ $-4 ;->0x9f0 9fa: 7f c3 ADD R7, R7, R5 ..\Flash.c:163 { ReadTempBuffer[AddrNum + i] = *Buffers++; } __FLASH_Program__(Function_Parameter_Validate, (PageNum << 10), 0x400, ReadTempBuffer); 9fc: 81 10 MOV R8, #1 9fe: c2 7a LSL R8, #10 a00: 22 40 LD R0, [PC + #34] ;->0xa88 :=0x5a5a6688 a02: 29 58 MOV R1, R9 a04: 48 58 MOV R2, R8 a06: 6e 58 MOV R3, SP a08: 22 45 LD R5, [PC + #34] ;->0xa90 :=0x2688 a0a: 25 59 MOV R9, R5 a0c: 05 5c LJMP R5 ..\Flash.c:164 if ((AddrNum + Length) > 0x400) a0e: b8 70 CMP R11, R8 a10: 26 f9 JLS $+38 ;->0xa5c ..\Flash.c:166 { FlashReadNByte((PageNum + 1) << 10, 0x400, ReadTempBuffer); a12: 01 10 MOV R0, #1 a14: 82 7a LSL R0, #10 a16: 0e 64 ADD R0, SP a18: 10 82 LD.W R1, [R0] a1a: 49 c0 ADD R1, R1, #1 a1c: 41 59 MOV R10, R1 a1e: d2 7a LSL R10, #10 a20: 8a 58 MOV R4, R10 ..\Flash.c:50 * @param out :Buffers :Read data to Buffers * @retval :None */ void FlashReadNByte(unsigned int Address, unsigned int Length, unsigned char *Buffers) { for (int i = 0; i < Length; i++) a22: 60 10 MOV R6, #0 a24: a6 58 MOV R5, R6 ..\Flash.c:52 { Buffers[i] = *(unsigned char *)Address++; a26: 34 76 LD.B R3, [R4++] a28: 5e 64 ADD R5, SP a2a: 53 83 ST.B [R5], R3 ..\Flash.c:50 * @param out :Buffers :Read data to Buffers * @retval :None */ void FlashReadNByte(unsigned int Address, unsigned int Length, unsigned char *Buffers) { for (int i = 0; i < Length; i++) a2c: 76 c0 ADD R6, R6, #1 a2e: a6 58 MOV R5, R6 a30: 68 70 CMP R6, R8 a32: fa f1 JNZ $-6 ;->0xa26 ..\Flash.c:167 } __FLASH_Program__(Function_Parameter_Validate, (PageNum << 10), 0x400, ReadTempBuffer); if ((AddrNum + Length) > 0x400) { FlashReadNByte((PageNum + 1) << 10, 0x400, ReadTempBuffer); __FLASH_Erase__(Function_Parameter_Validate, ((PageNum + 1) << 10), 0x400); a34: 15 40 LD R0, [PC + #21] ;->0xa88 :=0x5a5a6688 a36: 2a 58 MOV R1, R10 a38: 46 58 MOV R2, R6 a3a: 0c 5c LJMP R12 ..\Flash.c:168 Writelen = (AddrNum + Length) - 0x400; a3c: 4b 58 MOV R2, R11 a3e: b2 c7 SUB R6, R2, R6 ..\Flash.c:169 for (i = 0; i < Writelen; i++) a40: 50 10 MOV R5, #0 ..\Flash.c:171 { ReadTempBuffer[i] = *Buffers++; a42: 5f e5 LD.B R3, [R7 + R5] a44: 0e 58 MOV R0, SP a46: 60 c3 ADD R4, R0, R5 a48: 43 83 ST.B [R4], R3 ..\Flash.c:169 if ((AddrNum + Length) > 0x400) { FlashReadNByte((PageNum + 1) << 10, 0x400, ReadTempBuffer); __FLASH_Erase__(Function_Parameter_Validate, ((PageNum + 1) << 10), 0x400); Writelen = (AddrNum + Length) - 0x400; for (i = 0; i < Writelen; i++) a4a: 6d c0 ADD R5, R5, #1 a4c: 65 70 CMP R6, R5 a4e: fa f1 JNZ $-6 ;->0xa42 ..\Flash.c:173 { ReadTempBuffer[i] = *Buffers++; } __FLASH_Program__(Function_Parameter_Validate, (PageNum + 1) << 10, 0x400, ReadTempBuffer); a50: 0e 40 LD R0, [PC + #14] ;->0xa88 :=0x5a5a6688 a52: 2a 58 MOV R1, R10 a54: 21 10 MOV R2, #1 a56: 92 7a LSL R2, #10 a58: 6e 58 MOV R3, SP a5a: 09 5c LJMP R9 ..\Flash.c:177 } if (IntState != 0) SFR_SET_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); FlashRetVal = CMD_SUCCESS; a5c: 00 10 MOV R0, #0 ..\Flash.c:175 { ReadTempBuffer[i] = *Buffers++; } __FLASH_Program__(Function_Parameter_Validate, (PageNum + 1) << 10, 0x400, ReadTempBuffer); } if (IntState != 0) a5e: 09 41 LD R1, [PC + #9] ;->0xa80 :=0x404 a60: 1e 64 ADD R1, SP a62: 11 82 LD.W R1, [R1] a64: 10 70 CMP R1, R0 a66: 03 f0 JZ $+3 ;->0xa6c ..\Flash.c:176 SFR_SET_BIT_ASM(INT_CTL0, INT_CTL0_AIE_POS); a68: 05 45 LD R5, [PC + #5] ;->0xa7c :=0x40200000 a6a: 28 4c SET [R5], #0 ..\Flash.c:181 FlashRetVal = CMD_SUCCESS; break; } return FlashRetVal; } a6c: 03 45 LD R5, [PC + #3] ;->0xa78 :=0x408 a6e: e5 64 ADD SP, R5 a70: 7f 5e POP {R6-R12} a72: 0d 5d POP LR a74: 1d 5c JMP LR a76: 00 00 NOP NOP a78: 08 04 00 00 .long 0x00000408 ->000001032 [!!!@2@:SJMP $+8 ;->0xa88 @@: NOP a7c: 00 00 20 40 .long 0x40200000 ->1075838976 [!!!@2@:NOP @@: LD R0, [PC + #32] ;->0xafc :=0x5c1d a80: 04 04 00 00 .long 0x00000404 ->000001028 [!!!@2@:SJMP $+4 ;->0xa88 @@: NOP a84: ff 03 00 00 .long 0x000003ff ->000001023 [!!!@4@:JMP $-65536 ;->0xfffe0a84 a88: 88 66 5a 5a .long 0x5a5a6688 ->1515873928 [!!!@2@:SUB R8, R8 @@: MOV R18, R26 a8c: 24 26 00 00 .long 0x00002624 ->000009764 [!!!@2@:ST.W [SP + #36], R6 @@: NOP a90: 88 26 00 00 .long 0x00002688 ->000009864 [!!!@2@:ST.W [SP + #136], R6 @@: NOP ..\Flash.c:159 } else { Writelen = 0x400 - AddrNum; } for (i = 0; i < Writelen; i++) a94: 80 38 CMP R8, #0 a96: aa f1 JNZ $-86 ;->0x9ea ..\Flash.c:163 { ReadTempBuffer[AddrNum + i] = *Buffers++; } __FLASH_Program__(Function_Parameter_Validate, (PageNum << 10), 0x400, ReadTempBuffer); a98: 04 40 LD R0, [PC + #4] ;->0xaa8 :=0x5a5a6688 a9a: 29 58 MOV R1, R9 a9c: 46 58 MOV R2, R6 a9e: 6e 58 MOV R3, SP aa0: 03 45 LD R5, [PC + #3] ;->0xaac :=0x2688 aa2: 05 5c LJMP R5 aa4: dc 07 SJMP $-36 ;->0xa5c aa6: 00 00 NOP NOP aa8: 88 66 5a 5a .long 0x5a5a6688 ->1515873928 [!!!@2@:SUB R8, R8 @@: MOV R18, R26 aac: 88 26 00 00 .long 0x00002688 ->000009864 [!!!@2@:ST.W [SP + #136], R6 @@: NOP 00000ab0 : USART_Async_config(): ..\Usart.c:67 * with a value of USART0_SFR/USART1_SFR/USART2_SFR/USART5_SFR * @param out :None * @retval :None */ void USART_Async_config(USART_SFRmap *USARTx) { ab0: 81 5f PUSH {R6,LR} ab2: e4 33 SUB SP, #52 ab4: c0 58 MOV R6, R0 ..\Usart.c:71 USART_InitTypeDef USART_InitStructure; /* configure USARTx to LIN mode */ USART_Struct_Init(&USART_InitStructure); ab6: 0e 58 MOV R0, SP ab8: 12 45 LD R5, [PC + #18] ;->0xb00 :=0x874 aba: 05 5c LJMP R5 ..\Usart.c:72 USART_InitStructure.m_Mode = USART_MODE_FULLDUPLEXASY; abc: 50 10 MOV R5, #0 abe: e5 85 ST.W [SP], R5 ..\Usart.c:73 USART_InitStructure.m_TransferDir = USART_DIRECTION_FULL_DUPLEX; ac0: 11 44 LD R4, [PC + #17] ;->0xb04 :=0x18000 ac2: 02 24 ST.W [SP + #2], R4 ..\Usart.c:74 USART_InitStructure.m_WordLength = USART_WORDLENGTH_8B; ac4: 03 25 ST.W [SP + #3], R5 ..\Usart.c:75 USART_InitStructure.m_StopBits = USART_STOPBITS_1; ac6: 04 25 ST.W [SP + #4], R5 ..\Usart.c:76 USART_InitStructure.m_BaudRateBRCKS = USART_CLK_HFCLK; ac8: 52 10 MOV R5, #2 aca: b6 e2 ST.H [SP + #22], R5 ..\Usart.c:84 * 9600 z:104 x:0 y:0 * 19200 z:52 x:0 y:0 * 115200 z:8 x:1 y:13 */ /* Integer part z, get value range is 0 ~ 0xFFFF */ USART_InitStructure.m_BaudRateInteger = 8; acc: 58 10 MOV R5, #8 ace: b7 e2 ST.H [SP + #23], R5 ..\Usart.c:86 /* Numerator part x, get value range is 0 ~ 0x0f */ USART_InitStructure.m_BaudRateNumerator = 1; ad0: 51 10 MOV R5, #1 ad2: b8 e2 ST.H [SP + #24], R5 ..\Usart.c:88 /* Denominator part y, get value range is 0 ~ 0x0f */ USART_InitStructure.m_BaudRateDenominator = 13; ad4: 5d 10 MOV R5, #13 ad6: b9 e2 ST.H [SP + #25], R5 ..\Usart.c:90 /* Reset and enable USARTx */ USART_Reset(USARTx); ad8: 06 58 MOV R0, R6 ada: 0c 45 LD R5, [PC + #12] ;->0xb08 :=0x760 adc: 05 5c LJMP R5 ..\Usart.c:91 USART_Configuration(USARTx,&USART_InitStructure); ade: 06 58 MOV R0, R6 ae0: 2e 58 MOV R1, SP ae2: 0b 45 LD R5, [PC + #11] ;->0xb0c :=0x818 ae4: 05 5c LJMP R5 ..\Usart.c:93 /* Enable UART moudle */ USART_RESHD_Enable (USARTx, TRUE); ae6: 06 58 MOV R0, R6 ae8: 11 10 MOV R1, #1 aea: 0a 45 LD R5, [PC + #10] ;->0xb10 :=0x8a8 aec: 05 5c LJMP R5 ..\Usart.c:94 USART_Cmd(USARTx,TRUE); aee: 06 58 MOV R0, R6 af0: 11 10 MOV R1, #1 af2: 09 45 LD R5, [PC + #9] ;->0xb14 :=0x89c af4: 05 5c LJMP R5 ..\Usart.c:95 } af6: e4 2b ADD SP, #52 af8: 06 5d POP R6 afa: 0d 5d POP LR afc: 1d 5c JMP LR afe: 00 00 NOP NOP b00: 74 08 00 00 .long 0x00000874 ->000002164 [!!!@2@:LD.W R0, [SP + #116] @@: NOP b04: 00 80 01 00 .long 0x00018000 ->000098304 [!!!@2@:LD.B R0, [R0] @@: .short 0x0001 b08: 60 07 00 00 .long 0x00000760 ->000001888 [!!!@2@:SJMP $-160 ;->0x9c8 @@: NOP b0c: 18 08 00 00 .long 0x00000818 ->000002072 [!!!@2@:LD.W R0, [SP + #24] @@: NOP b10: a8 08 00 00 .long 0x000008a8 ->000002216 [!!!@2@:LD.W R0, [SP + #168] @@: NOP b14: 9c 08 00 00 .long 0x0000089c ->000002204 [!!!@2@:LD.W R0, [SP + #156] @@: NOP 00000b18 : CAN_BOOT_GetProgRequest(): ..\can_boot.c:49 * @retval 0 鍥轰欢鍗囩骇鏍囧織鏃犳晥 */ uint8_t CAN_BOOT_GetProgRequest(void) { //璇诲彇璇锋眰鍥轰欢鍗囩骇鏍囧織锛岄渶瑕佽嚜宸卞疄鐜 if(*((uint32_t *)BOOT_REQ_FLAG_ADDR)==BOOT_REQ_FLAG){ b18: 01 10 MOV R0, #1 b1a: 05 45 LD R5, [PC + #5] ;->0xb2c :=0x30000 b1c: 45 82 LD.W R4, [R5] b1e: 05 45 LD R5, [PC + #5] ;->0xb30 :=0xaa55aa55 b20: 45 70 CMP R4, R5 b22: 02 f0 JZ $+2 ;->0xb26 b24: 00 10 MOV R0, #0 b26: 00 d1 ZXT.B R0, R0 ..\can_boot.c:54 return 1; }else{ return 0; } } b28: 1d 5c JMP LR b2a: 00 00 NOP NOP b2c: 00 00 03 00 .long 0x00030000 ->000196608 b30: 55 aa 55 aa .long 0xaa55aa55 ->-1437226411 [!!!@2@:LD.H R2, [R5 + #9] @@: LD.H R2, [R5 + #9] 00000b34 : CAN_BOOT_SetProgRequest(): ..\can_boot.c:59 /** * @brief 灏嗗浐浠跺崌绾ф爣蹇楃疆浣 */ void CAN_BOOT_SetProgRequest(void) { b34: 81 5f PUSH {R6,LR} b36: e8 30 SUB SP, #8 ..\can_boot.c:61 uint32_t FlashRetVal; uint32_t AppValidFlag = 0xFFFFFFFF; b38: 50 10 MOV R5, #0 b3a: 55 68 NOT R5, R5 b3c: 01 25 ST.W [SP + #1], R5 ..\can_boot.c:62 FlashRetVal = FlashEEWriteNBytes(APP_VALID_FLAG_ADDR, 4, (uint8_t *)(&AppValidFlag)); b3e: 0c 40 LD R0, [PC + #12] ;->0xb6c :=0x30010 b40: 14 10 MOV R1, #4 b42: ae 58 MOV R5, SP b44: 55 c2 ADD R2, R5, R1 b46: 0b 46 LD R6, [PC + #11] ;->0xb70 :=0x97c b48: 06 5c LJMP R6 ..\can_boot.c:63 if(FlashRetVal != CMD_SUCCESS) b4a: 00 38 CMP R0, #0 b4c: 1c f1 JNZ $+28 ;->0xb84 ..\can_boot.c:67 { printf("CAN_BOOT_SetProgRequest failed\r\n"); } uint32_t BootReqFlag = BOOT_REQ_FLAG; b4e: 0a 45 LD R5, [PC + #10] ;->0xb74 :=0xaa55aa55 b50: e5 85 ST.W [SP], R5 ..\can_boot.c:68 FlashRetVal = FlashEEWriteNBytes(BOOT_REQ_FLAG_ADDR, 4, (uint8_t *)(&BootReqFlag)); b52: 0a 40 LD R0, [PC + #10] ;->0xb78 :=0x30000 b54: 14 10 MOV R1, #4 b56: 4e 58 MOV R2, SP b58: 06 5c LJMP R6 ..\can_boot.c:69 if(FlashRetVal != CMD_SUCCESS) b5a: 00 38 CMP R0, #0 b5c: 04 f0 JZ $+4 ;->0xb64 ..\can_boot.c:71 { printf("CAN_BOOT_SetProgRequest failed\r\n"); b5e: 08 40 LD R0, [PC + #8] ;->0xb7c :=0x2a3c b60: 08 45 LD R5, [PC + #8] ;->0xb80 :=0x1fc4 b62: 05 5c LJMP R5 ..\can_boot.c:73 } } b64: e8 28 ADD SP, #8 b66: 06 5d POP R6 b68: 0d 5d POP LR b6a: 1d 5c JMP LR b6c: 10 00 03 00 .long 0x00030010 ->000196624 [!!!@4@:DMAC16LL ACC0, ACC0, R0, R3 b70: 7c 09 00 00 .long 0x0000097c ->000002428 [!!!@2@:LD.W R1, [SP + #124] @@: NOP b74: 55 aa 55 aa .long 0xaa55aa55 ->-1437226411 [!!!@2@:LD.H R2, [R5 + #9] @@: LD.H R2, [R5 + #9] b78: 00 00 03 00 .long 0x00030000 ->000196608 b7c: 3c 2a 00 00 .long 0x00002a3c ->000010812 [!!!@2@:ADD R3, #44 @@: NOP b80: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP ..\can_boot.c:65 uint32_t FlashRetVal; uint32_t AppValidFlag = 0xFFFFFFFF; FlashRetVal = FlashEEWriteNBytes(APP_VALID_FLAG_ADDR, 4, (uint8_t *)(&AppValidFlag)); if(FlashRetVal != CMD_SUCCESS) { printf("CAN_BOOT_SetProgRequest failed\r\n"); b84: 02 40 LD R0, [PC + #2] ;->0xb8c :=0x2a3c b86: 03 45 LD R5, [PC + #3] ;->0xb90 :=0x1fc4 b88: 05 5c LJMP R5 b8a: e2 07 SJMP $-30 ;->0xb4e b8c: 3c 2a 00 00 .long 0x00002a3c ->000010812 [!!!@2@:ADD R3, #44 @@: NOP b90: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 00000b94 : CAN_BOOT_ResetProgRequest(): ..\can_boot.c:79 /** * @brief 灏嗗浐浠跺崌绾ф爣蹇楀浣 */ void CAN_BOOT_ResetProgRequest(void) { b94: 2d 5d PUSH LR b96: e4 30 SUB SP, #4 ..\can_boot.c:81 uint32_t FlashRetVal; uint32_t BootReqFlag = 0xFFFFFFFF; b98: 50 10 MOV R5, #0 b9a: 55 68 NOT R5, R5 b9c: e5 85 ST.W [SP], R5 ..\can_boot.c:82 FlashRetVal = FlashEEWriteNBytes(BOOT_REQ_FLAG_ADDR, 4, (uint8_t *)(&BootReqFlag)); b9e: 07 40 LD R0, [PC + #7] ;->0xbb8 :=0x30000 ba0: 14 10 MOV R1, #4 ba2: 4e 58 MOV R2, SP ba4: 06 45 LD R5, [PC + #6] ;->0xbbc :=0x97c ba6: 05 5c LJMP R5 ..\can_boot.c:83 if(FlashRetVal != CMD_SUCCESS) ba8: 00 38 CMP R0, #0 baa: 04 f0 JZ $+4 ;->0xbb2 ..\can_boot.c:85 { printf("CAN_BOOT_SetProgRequest failed\r\n"); bac: 05 40 LD R0, [PC + #5] ;->0xbc0 :=0x2a3c bae: 06 45 LD R5, [PC + #6] ;->0xbc4 :=0x1fc4 bb0: 05 5c LJMP R5 ..\can_boot.c:87 } } bb2: e4 28 ADD SP, #4 bb4: 0d 5d POP LR bb6: 1d 5c JMP LR bb8: 00 00 03 00 .long 0x00030000 ->000196608 bbc: 7c 09 00 00 .long 0x0000097c ->000002428 [!!!@2@:LD.W R1, [SP + #124] @@: NOP bc0: 3c 2a 00 00 .long 0x00002a3c ->000010812 [!!!@2@:ADD R3, #44 @@: NOP bc4: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 00000bc8 : CAN_BOOT_SetAppValid(): ..\can_boot.c:93 /** * @brief 灏嗗浐浠跺崌绾ф爣蹇楃疆浣 */ void CAN_BOOT_SetAppValid(void) { bc8: 2d 5d PUSH LR bca: e4 30 SUB SP, #4 ..\can_boot.c:95 uint32_t FlashRetVal; uint32_t AppValidFlag = APP_VALID_FLAG; bcc: 08 45 LD R5, [PC + #8] ;->0xbec :=0x55aa55aa bce: e5 85 ST.W [SP], R5 ..\can_boot.c:96 FlashRetVal = FlashEEWriteNBytes(APP_VALID_FLAG_ADDR, 4, (uint8_t *)(&AppValidFlag)); bd0: 08 40 LD R0, [PC + #8] ;->0xbf0 :=0x30010 bd2: 14 10 MOV R1, #4 bd4: 4e 58 MOV R2, SP bd6: 08 45 LD R5, [PC + #8] ;->0xbf4 :=0x97c bd8: 05 5c LJMP R5 ..\can_boot.c:97 if(FlashRetVal != CMD_SUCCESS) bda: 00 38 CMP R0, #0 bdc: 04 f0 JZ $+4 ;->0xbe4 ..\can_boot.c:99 { printf("CAN_BOOT_SetAppValid failed\r\n"); bde: 07 40 LD R0, [PC + #7] ;->0xbf8 :=0x2a60 be0: 07 45 LD R5, [PC + #7] ;->0xbfc :=0x1fc4 be2: 05 5c LJMP R5 ..\can_boot.c:101 } } be4: e4 28 ADD SP, #4 be6: 0d 5d POP LR be8: 1d 5c JMP LR bea: 00 00 NOP NOP bec: aa 55 aa 55 .long 0x55aa55aa ->1437226410 [!!!@2@:JB R5, #26 @@: JB R5, #26 bf0: 10 00 03 00 .long 0x00030010 ->000196624 [!!!@4@:DMAC16LL ACC0, ACC0, R0, R3 bf4: 7c 09 00 00 .long 0x0000097c ->000002428 [!!!@2@:LD.W R1, [SP + #124] @@: NOP bf8: 60 2a 00 00 .long 0x00002a60 ->000010848 [!!!@2@:ADD R6, #32 @@: NOP bfc: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 00000c00 : CAN_BOOT_Reset(): ..\can_boot.c:108 /** * @brief 杞欢澶嶄綅绋嬪簭 */ void CAN_BOOT_Reset(void) { asm("RESET"); c00: 05 00 RESET RESET ..\can_boot.c:109 } c02: 1d 5c JMP LR 00000c04 : CAN_BOOT_ExeApp(): ..\can_boot.c:118 } /** * @brief 鎵цAPP绋嬪簭 */ void CAN_BOOT_ExeApp(void) { c04: 81 5f PUSH {R6,LR} ..\can_boot.c:120 typedef void (*pFunction)(void); //瀹氫箟void鍑芥暟鎸囬拡绫诲瀷锛 uint32_t JumpAddress = *(volatile uint32_t*) (APP_START_ADDR + 4); //鑾峰彇APP鐨剆tartup()鍏ュ彛鍦板潃; c06: 08 45 LD R5, [PC + #8] ;->0xc24 :=0x8004 c08: 65 82 LD.W R6, [R5] ..\can_boot.c:122 pFunction Jump_To_Application = (pFunction) JumpAddress; //瀹冨彲浠ユ帴鍙椾换浣曠被鍨嬪嚱鏁扮殑璧嬪 printf("Go to APP!\r\n"); c0a: 08 40 LD R0, [PC + #8] ;->0xc28 :=0x2a80 c0c: 08 45 LD R5, [PC + #8] ;->0xc2c :=0x1fc4 c0e: 05 5c LJMP R5 ..\can_boot.c:123 SYS_VECTOFF = APP_START_ADDR ; //璁剧疆鍚戦噺琛ㄥ亸绉诲硷紝鍗抽噸鏄犲皠鍚戦噺琛紝杩欏涓柇鏈嶅姟鍑芥暟姝g‘鎵ц鑷冲叧閲嶈 c10: 51 10 MOV R5, #1 c12: af 7a LSL R5, #15 c14: 07 44 LD R4, [PC + #7] ;->0xc30 :=0x402000b0 c16: e5 a0 ST.W [R4 + #3], R5 ..\can_boot.c:112 { asm("RESET"); } void __set_MSP(uint32_t value){ asm(" MOV SP,%0 \n": :"r"(value): "sp"); c18: 55 82 LD.W R5, [R5] c1a: c5 59 MOV SP, R5 ..\can_boot.c:125 uint32_t JumpAddress = *(volatile uint32_t*) (APP_START_ADDR + 4); //鑾峰彇APP鐨剆tartup()鍏ュ彛鍦板潃; pFunction Jump_To_Application = (pFunction) JumpAddress; //瀹冨彲浠ユ帴鍙椾换浣曠被鍨嬪嚱鏁扮殑璧嬪 printf("Go to APP!\r\n"); SYS_VECTOFF = APP_START_ADDR ; //璁剧疆鍚戦噺琛ㄥ亸绉诲硷紝鍗抽噸鏄犲皠鍚戦噺琛紝杩欏涓柇鏈嶅姟鍑芥暟姝g‘鎵ц鑷冲叧閲嶈 __set_MSP(*(uint32_t*) APP_START_ADDR); Jump_To_Application(); //浣跨敤鏂扮殑鍑芥暟鎸囬拡锛岃浆鍚戞墽琛孉PP鐨剆tartup()鍑芥暟锛岃繖灏嗗鑷碅PP绋嬪簭鍚姩 c1c: 06 5c LJMP R6 ..\can_boot.c:126 } c1e: 06 5d POP R6 c20: 0d 5d POP LR c22: 1d 5c JMP LR c24: 04 80 00 00 .long 0x00008004 ->000032772 [!!!@2@:LD.B R0, [R4] @@: NOP c28: 80 2a 00 00 .long 0x00002a80 ->000010880 [!!!@2@:ADD R8, #32 @@: NOP c2c: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP c30: b0 00 20 40 .long 0x402000b0 ->1075839152 [!!!@4@:DO #1040, $+32 ;->0xc70 00000c34 : CAN_BOOT_EraseApp(): ..\can_boot.c:136 * @retval 1 澶辫触 */ uint8_t CAN_BOOT_EraseApp(void) { return 0; } c34: 00 10 MOV R0, #0 c36: 1d 5c JMP LR 00000c38 : CAN_BOOT_CheckApp(): ..\can_boot.c:147 * @retval 1 鏈夋晥 */ uint8_t CAN_BOOT_CheckApp(void) { return 1; } c38: 01 10 MOV R0, #1 c3a: 1d 5c JMP LR 00000c3c : CAN_BOOT_WriteDataToFlash(): ..\can_boot.c:159 * @return 鍐欏叆鐘舵 * @retval 0 鎴愬姛 * @retval 1 澶辫触 */ uint8_t CAN_BOOT_WriteDataToFlash(uint32_t Addr,uint8_t *pData,uint32_t DataLen) { c3c: 2d 5d PUSH LR c3e: 41 58 MOV R2, R1 ..\can_boot.c:160 uint32_t ret = FlashWriteNKBytes(Addr, 1024, pData); c40: 11 10 MOV R1, #1 c42: 8a 7a LSL R1, #10 c44: 03 45 LD R5, [PC + #3] ;->0xc50 :=0x928 c46: 05 5c LJMP R5 ..\can_boot.c:162 return ret; } c48: 00 d1 ZXT.B R0, R0 c4a: 0d 5d POP LR c4c: 1d 5c JMP LR c4e: 00 00 NOP NOP c50: 28 09 00 00 .long 0x00000928 ->000002344 [!!!@2@:LD.W R1, [SP + #40] @@: NOP 00000c54 : CAN_BUF_Init(): ..\can_buffer.c:9 CAN_MSG CANFIFOBuffer[32];//瀹氫箟CAN娑堟伅缂撳啿鍖猴紝娣卞害鍊煎繀椤绘槸2鐨刵娆℃柟 CAN_BUFFER CANRxBuffer[2]; void CAN_BUF_Init(uint8_t Channel) { c54: 00 d1 ZXT.B R0, R0 ..\can_buffer.c:10 CANRxBuffer[Channel].BufferSize = 16; c56: 08 43 LD R3, [PC + #8] ;->0xc74 :=0x10000460 c58: 54 11 MOV R5, #20 c5a: 40 cb MULS R0, R0, R5 c5c: 00 00 NOP NOP c5e: 2b c2 ADD R5, R3, R0 c60: 40 11 MOV R4, #16 c62: ec a0 ST.W [R5 + #3], R4 ..\can_buffer.c:11 CANRxBuffer[Channel].pBuffer = CANFIFOBuffer; c64: 05 44 LD R4, [PC + #5] ;->0xc78 :=0x10000488 c66: 2c a1 ST.W [R5 + #4], R4 ..\can_buffer.c:12 CANRxBuffer[Channel].ReadIndex = 0; c68: 40 10 MOV R4, #0 c6a: 6c a0 ST.W [R5 + #1], R4 ..\can_buffer.c:13 CANRxBuffer[Channel].WriteIndex = 0; c6c: 1c ee ST.W [R3 + R0], R4 ..\can_buffer.c:14 CANRxBuffer[Channel].GotMsgNum = 0; c6e: ac a0 ST.W [R5 + #2], R4 ..\can_buffer.c:15 } c70: 1d 5c JMP LR c72: 00 00 NOP NOP c74: 60 04 00 10 .long 0x10000460 ->268436576 [!!!@2@:SJMP $+96 ;->0xd34 @@: MOV R0, #0 c78: 88 04 00 10 .long 0x10000488 ->268436616 [!!!@2@:SJMP $+136 ;->0xd88 @@: MOV R0, #0 00000c7c : CAN_BUF_PickMsg(): ..\can_buffer.c:19 //鑾峰彇褰撳墠姝e湪鎺ユ敹鏁版嵁甯 CAN_MSG *CAN_BUF_PickMsg(uint8_t Channel) { c7c: 00 d1 ZXT.B R0, R0 ..\can_buffer.c:20 return &CANRxBuffer[Channel].pBuffer[CANRxBuffer[Channel].WriteIndex]; c7e: 06 45 LD R5, [PC + #6] ;->0xc94 :=0x10000460 c80: 44 11 MOV R4, #20 c82: 00 cb MULS R0, R0, R4 c84: 00 00 NOP NOP c86: 25 c2 ADD R4, R5, R0 c88: 05 e8 LD.W R0, [R5 + R0] c8a: 04 7a LSL R0, #4 c8c: 2c 99 LD.W R5, [R4 + #4] ..\can_buffer.c:21 } c8e: 05 c2 ADD R0, R5, R0 c90: 1d 5c JMP LR c92: 00 00 NOP NOP c94: 60 04 00 10 .long 0x10000460 ->268436576 [!!!@2@:SJMP $+96 ;->0xd54 @@: MOV R0, #0 00000c98 : CAN_BUF_ApendMsg(): ..\can_buffer.c:24 //琛ㄧず鎴愬姛璇诲彇鍒颁竴甯ф暟鎹 void CAN_BUF_ApendMsg(uint8_t Channel) { c98: 83 5f PUSH {R6-R7,LR} c9a: 70 d1 ZXT.B R7, R0 ..\can_buffer.c:25 INT_Interrupt_Enable(INT_CAN4,FALSE); c9c: 00 12 MOV R0, #32 c9e: 10 10 MOV R1, #0 ca0: 0d 46 LD R6, [PC + #13] ;->0xcd4 :=0x4bc ca2: 06 5c LJMP R6 ..\can_buffer.c:26 CANRxBuffer[Channel].WriteIndex = (++CANRxBuffer[Channel].WriteIndex)&(CANRxBuffer[Channel].BufferSize-1);//鍐欑紦鍐插尯閫掑 ca4: 0d 44 LD R4, [PC + #13] ;->0xcd8 :=0x10000460 ca6: 04 11 MOV R0, #20 ca8: 07 ca MULS R0, R7, R0 caa: 00 00 NOP NOP cac: 2c c2 ADD R5, R4, R0 cae: 0c e8 LD.W R1, [R4 + R0] cb0: 59 c0 ADD R3, R1, #1 cb2: cd 98 LD.W R1, [R5 + #3] cb4: 51 cc SUB R2, R1, #1 cb6: da d4 ANL R3, R2, R3 cb8: 23 ee ST.W [R4 + R0], R3 ..\can_buffer.c:28 //鍒ゆ柇缂撳啿鍖烘槸鍚﹀凡婊 if(CANRxBuffer[Channel].WriteIndex==CANRxBuffer[Channel].ReadIndex){ cba: 65 98 LD.W R4, [R5 + #1] cbc: 34 70 CMP R3, R4 cbe: 0f f0 JZ $+15 ;->0xcdc ..\can_buffer.c:31 CANRxBuffer[Channel].ReadIndex = (++CANRxBuffer[Channel].ReadIndex)&(CANRxBuffer[Channel].BufferSize-1);//璇荤紦鍐插尯閫掑 }else{ CANRxBuffer[Channel].GotMsgNum++; //鏈夋晥鏁版嵁鍔1 cc0: 95 98 LD.W R2, [R5 + #2] cc2: 62 c0 ADD R4, R2, #1 cc4: ac a0 ST.W [R5 + #2], R4 ..\can_buffer.c:33 } INT_Interrupt_Enable(INT_CAN4,TRUE); cc6: 00 12 MOV R0, #32 cc8: 11 10 MOV R1, #1 cca: 06 5c LJMP R6 ..\can_buffer.c:34 } ccc: 03 5e POP {R6-R7} cce: 0d 5d POP LR cd0: 1d 5c JMP LR cd2: 00 00 NOP NOP cd4: bc 04 00 00 .long 0x000004bc ->000001212 [!!!@2@:SJMP $+188 ;->0xe4c @@: NOP cd8: 60 04 00 10 .long 0x10000460 ->268436576 [!!!@2@:SJMP $+96 ;->0xd98 @@: MOV R0, #0 ..\can_buffer.c:29 { INT_Interrupt_Enable(INT_CAN4,FALSE); CANRxBuffer[Channel].WriteIndex = (++CANRxBuffer[Channel].WriteIndex)&(CANRxBuffer[Channel].BufferSize-1);//鍐欑紦鍐插尯閫掑 //鍒ゆ柇缂撳啿鍖烘槸鍚﹀凡婊 if(CANRxBuffer[Channel].WriteIndex==CANRxBuffer[Channel].ReadIndex){ CANRxBuffer[Channel].ReadIndex = (++CANRxBuffer[Channel].ReadIndex)&(CANRxBuffer[Channel].BufferSize-1);//璇荤紦鍐插尯閫掑 cdc: 5b c0 ADD R3, R3, #1 cde: 93 d4 ANL R2, R3, R2 ce0: 6a a0 ST.W [R5 + #1], R2 ..\can_buffer.c:33 }else{ CANRxBuffer[Channel].GotMsgNum++; //鏈夋晥鏁版嵁鍔1 } INT_Interrupt_Enable(INT_CAN4,TRUE); ce2: 00 12 MOV R0, #32 ce4: 11 10 MOV R1, #1 ce6: 06 5c LJMP R6 ..\can_buffer.c:34 } ce8: 03 5e POP {R6-R7} cea: 0d 5d POP LR cec: 1d 5c JMP LR ... 00000cf0 : CAN_BUF_PopMsg(): ..\can_buffer.c:45 CAN_BUF_ApendMsg(Channel); } //鑾峰彇鎴愬姛璇诲埌鐨勬秷鎭 int CAN_BUF_PopMsg(uint8_t Channel,CAN_MSG **pMsg,uint8_t MsgLen) { cf0: 9f 5f PUSH {R6-R10,LR} cf2: 41 59 MOV R10, R1 cf4: 70 d1 ZXT.B R7, R0 cf6: 92 d1 ZXT.B R9, R2 ..\can_buffer.c:46 INT_Interrupt_Enable(INT_CAN4,FALSE); cf8: 00 12 MOV R0, #32 cfa: 10 10 MOV R1, #0 cfc: 17 42 LD R2, [PC + #23] ;->0xd58 :=0x4bc cfe: 02 59 MOV R8, R2 d00: 02 5c LJMP R2 ..\can_buffer.c:47 int MsgNum = ((CANRxBuffer[Channel].WriteIndex>=CANRxBuffer[Channel].ReadIndex)?CANRxBuffer[Channel].GotMsgNum:(CANRxBuffer[Channel].BufferSize-CANRxBuffer[Channel].ReadIndex)); d02: 17 44 LD R4, [PC + #23] ;->0xd5c :=0x10000460 d04: 24 11 MOV R2, #20 d06: 97 ca MULS R2, R7, R2 d08: 00 00 NOP NOP d0a: 9c c2 ADD R3, R4, R2 d0c: 6b 98 LD.W R5, [R3 + #1] d0e: 94 e8 LD.W R2, [R4 + R2] d10: 25 70 CMP R2, R5 d12: 27 fa JGE $+39 ;->0xd60 d14: d3 98 LD.W R2, [R3 + #3] d16: 72 c7 SUB R6, R2, R5 d18: 9b 98 LD.W R3, [R3 + #2] ..\can_buffer.c:48 *pMsg = &CANRxBuffer[Channel].pBuffer[CANRxBuffer[Channel].ReadIndex]; d1a: 24 11 MOV R2, #20 d1c: 97 ca MULS R2, R7, R2 d1e: 00 00 NOP NOP d20: 94 c2 ADD R2, R4, R2 d22: 2c 7a LSL R5, #4 d24: 12 99 LD.W R2, [R2 + #4] d26: 6a c3 ADD R5, R2, R5 d28: a5 85 ST.W [R10], R5 ..\can_buffer.c:49 MsgNum = (MsgNum0xd30 d2e: c9 58 MOV R6, R9 ..\can_buffer.c:50 CANRxBuffer[Channel].GotMsgNum -= MsgNum; d30: 54 11 MOV R5, #20 d32: 6f cb MULS R5, R7, R5 d34: 00 00 NOP NOP d36: 6c c3 ADD R5, R4, R5 d38: a3 c7 SUB R4, R3, R6 d3a: ac a0 ST.W [R5 + #2], R4 ..\can_buffer.c:51 CANRxBuffer[Channel].ReadIndex = (CANRxBuffer[Channel].ReadIndex+MsgNum)&(CANRxBuffer[Channel].BufferSize-1); d3c: 65 98 LD.W R4, [R5 + #1] d3e: 1e c3 ADD R3, R6, R4 d40: d5 98 LD.W R2, [R5 + #3] d42: 62 cc SUB R4, R2, #1 d44: 23 d5 ANL R4, R3, R4 d46: 6c a0 ST.W [R5 + #1], R4 ..\can_buffer.c:52 INT_Interrupt_Enable(INT_CAN4,TRUE); d48: 00 12 MOV R0, #32 d4a: 11 10 MOV R1, #1 d4c: 08 5c LJMP R8 ..\can_buffer.c:54 return MsgNum; } d4e: 06 58 MOV R0, R6 d50: 1f 5e POP {R6-R10} d52: 0d 5d POP LR d54: 1d 5c JMP LR d56: 00 00 NOP NOP d58: bc 04 00 00 .long 0x000004bc ->000001212 [!!!@2@:SJMP $+188 ;->0xed0 @@: NOP d5c: 60 04 00 10 .long 0x10000460 ->268436576 [!!!@2@:SJMP $+96 ;->0xe1c @@: MOV R0, #0 ..\can_buffer.c:47 //鑾峰彇鎴愬姛璇诲埌鐨勬秷鎭 int CAN_BUF_PopMsg(uint8_t Channel,CAN_MSG **pMsg,uint8_t MsgLen) { INT_Interrupt_Enable(INT_CAN4,FALSE); int MsgNum = ((CANRxBuffer[Channel].WriteIndex>=CANRxBuffer[Channel].ReadIndex)?CANRxBuffer[Channel].GotMsgNum:(CANRxBuffer[Channel].BufferSize-CANRxBuffer[Channel].ReadIndex)); d60: b3 98 LD.W R6, [R3 + #2] d62: 66 58 MOV R3, R6 d64: db 07 SJMP $-37 ;->0xd1a ... 00000d68 : CAN_Gpio_Init(): ..\can_driver.c:77 * @param in :None * @param out :None * @retval :None */ void CAN_Gpio_Init(void) { d68: 87 5f PUSH {R6-R8,LR} ..\can_driver.c:79 //PC10=CAN4TX,PC11=CNA4RX GPIO_Pull_Up_Enable(GPIOC_SFR, GPIO_PIN_MASK_10 | GPIO_PIN_MASK_11, TRUE); d6a: 0e 46 LD R6, [PC + #14] ;->0xda0 :=0x50000080 d6c: 0e 47 LD R7, [PC + #14] ;->0xda4 :=0xc00 d6e: 06 58 MOV R0, R6 d70: 27 58 MOV R1, R7 d72: 21 10 MOV R2, #1 d74: 0d 45 LD R5, [PC + #13] ;->0xda8 :=0x3fa d76: 05 5c LJMP R5 ..\can_driver.c:80 GPIO_Write_Mode_Bits(GPIOC_SFR, GPIO_PIN_MASK_10 | GPIO_PIN_MASK_11, GPIO_MODE_RMP); d78: 06 58 MOV R0, R6 d7a: 27 58 MOV R1, R7 d7c: 22 10 MOV R2, #2 d7e: 0c 45 LD R5, [PC + #12] ;->0xdac :=0x410 d80: 05 5c LJMP R5 ..\can_driver.c:82 GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_10, GPIO_RMP_AF6); d82: 0c 45 LD R5, [PC + #12] ;->0xdb0 :=0x306 d84: 05 59 MOV R8, R5 d86: 06 58 MOV R0, R6 d88: 1a 10 MOV R1, #10 d8a: 45 58 MOV R2, R5 d8c: 0a 47 LD R7, [PC + #10] ;->0xdb4 :=0x43c d8e: 07 5c LJMP R7 ..\can_driver.c:83 GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_11, GPIO_RMP_AF6); d90: 06 58 MOV R0, R6 d92: 1b 10 MOV R1, #11 d94: 48 58 MOV R2, R8 d96: 07 5c LJMP R7 ..\can_driver.c:84 } d98: 07 5e POP {R6-R8} d9a: 0d 5d POP LR d9c: 1d 5c JMP LR d9e: 00 00 NOP NOP da0: 80 00 00 50 .long 0x50000080 ->1342177408 [!!!@4@:LJMP $+20480 ;->0xada0 da4: 00 0c 00 00 .long 0x00000c00 ->000003072 [!!!@2@:LD.W R4, [SP + #0] @@: NOP da8: fa 03 00 00 .long 0x000003fa ->000001018 [!!!@4@:JMP $-393216 ;->0xfff40da8 dac: 10 04 00 00 .long 0x00000410 ->000001040 [!!!@2@:SJMP $+16 ;->0xdcc @@: NOP db0: 06 03 00 00 .long 0x00000306 ->000000774 [!!!@4@:JMP $+393216 ;->0xc0db0 db4: 3c 04 00 00 .long 0x0000043c ->000001084 [!!!@2@:SJMP $+60 ;->0xe2c @@: NOP 00000db8 : CAN_Init(): ..\can_driver.c:87 void CAN_Init(CAN_SFRmap* CANx, CAN_InitTypeDef* canInitStruct) { db8: 9f 5f PUSH {R6-R10,LR} dba: c0 58 MOV R6, R0 dbc: e1 58 MOV R7, R1 ..\can_driver.c:88 CAN_Reset(CANx); dbe: 25 45 LD R5, [PC + #37] ;->0xe50 :=0x200 dc0: 05 5c LJMP R5 ..\can_driver.c:111 /* 锟斤拷锟斤拷RSMOD锟斤拷锟斤拷锟诫复位模式 */ tmpreg = ((uint32_t)canInitStruct->m_Enable << CAN_CTLR_CANEN_POS) \ | canInitStruct->m_Mode \ | canInitStruct->m_WorkSource \ | CAN_CTLR_RSMOD; CANx->CTLR = SFR_Config (CANx->CTLR, ~CAN_CTLR_INIT_MASK, tmpreg); dc2: 36 82 LD.W R3, [R6] ..\can_driver.c:108 /* 锟斤拷萁峁癸拷锟斤拷员m_Enable锟斤拷锟斤拷锟斤拷CANEN位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_Mode锟斤拷锟斤拷锟斤拷LBACK锟斤拷SILENT位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_WorkSource锟斤拷锟斤拷锟斤拷CANCKS位锟斤拷 */ /* 锟斤拷锟斤拷RSMOD锟斤拷锟斤拷锟诫复位模式 */ tmpreg = ((uint32_t)canInitStruct->m_Enable << CAN_CTLR_CANEN_POS) \ | canInitStruct->m_Mode \ dc4: 4f 98 LD.W R1, [R7 + #1] dc6: 97 98 LD.W R2, [R7 + #2] dc8: a1 d6 ORL R4, R1, R2 ..\can_driver.c:109 | canInitStruct->m_WorkSource \ dca: 20 48 SET R4, #0 ..\can_driver.c:107 /*---------------- 锟斤拷锟斤拷CANx_CTLR锟侥达拷锟斤拷 ----------------*/ /* 锟斤拷萁峁癸拷锟斤拷员m_Enable锟斤拷锟斤拷锟斤拷CANEN位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_Mode锟斤拷锟斤拷锟斤拷LBACK锟斤拷SILENT位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_WorkSource锟斤拷锟斤拷锟斤拷CANCKS位锟斤拷 */ /* 锟斤拷锟斤拷RSMOD锟斤拷锟斤拷锟诫复位模式 */ tmpreg = ((uint32_t)canInitStruct->m_Enable << CAN_CTLR_CANEN_POS) \ dcc: 27 82 LD.W R2, [R7] dce: 17 7a LSL R2, #7 dd0: a4 d6 ORL R4, R4, R2 KF32A156.h:14083 dd2: 57 1e MOV R5, #231 dd4: 55 68 NOT R5, R5 dd6: 6b d5 ANL R5, R3, R5 dd8: 6c d7 ORL R5, R4, R5 ..\can_driver.c:111 | canInitStruct->m_Mode \ | canInitStruct->m_WorkSource \ | CAN_CTLR_RSMOD; CANx->CTLR = SFR_Config (CANx->CTLR, ~CAN_CTLR_INIT_MASK, tmpreg); dda: 65 85 ST.W [R6], R5 ..\can_driver.c:113 CANx->CTLR |= (0x01<<12); ddc: 56 82 LD.W R5, [R6] dde: ac 48 SET R5, #12 de0: 65 85 ST.W [R6], R5 ..\can_driver.c:125 tmpreg = ((uint32_t)canInitStruct->m_BaudRate << CAN_BRGR_CANBRP0_POS) \ | ((uint32_t)canInitStruct->m_SyncJumpWidth << CAN_BRGR_SJW0_POS) \ | ((uint32_t)canInitStruct->m_TimeSeg1 << CAN_BRGR_TSEG1_0_POS) \ | ((uint32_t)canInitStruct->m_TimeSeg2 << CAN_BRGR_TSEG2_0_POS) \ | (canInitStruct->m_BusSample); CANx->BRGR = SFR_Config (CANx->BRGR, ~CAN_BRGR_INIT_MASK, tmpreg); de2: 5e 98 LD.W R3, [R6 + #1] ..\can_driver.c:120 /* 锟斤拷萁峁癸拷锟斤拷员m_BaudRate锟斤拷锟斤拷锟斤拷CANBRP位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_SyncJumpWidth锟斤拷锟斤拷锟斤拷SJW位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg1锟斤拷锟斤拷锟斤拷TSEG1位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg2锟斤拷锟斤拷锟斤拷TSEG2位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_BusSample锟斤拷锟斤拷锟斤拷SAM位锟斤拷 */ tmpreg = ((uint32_t)canInitStruct->m_BaudRate << CAN_BRGR_CANBRP0_POS) \ de4: 2f 8b LD.B R5, [R7 + #12] KF32A156.h:14083 de6: 1c 44 LD R4, [PC + #28] ;->0xe54 :=0xffff0000 de8: 23 d5 ANL R4, R3, R4 ..\can_driver.c:121 | ((uint32_t)canInitStruct->m_SyncJumpWidth << CAN_BRGR_SJW0_POS) \ dea: 25 d7 ORL R4, R5, R4 ..\can_driver.c:122 | ((uint32_t)canInitStruct->m_TimeSeg1 << CAN_BRGR_TSEG1_0_POS) \ dec: 1f 99 LD.W R3, [R7 + #4] dee: e4 d6 ORL R4, R4, R3 ..\can_driver.c:121 /* 锟斤拷萁峁癸拷锟斤拷员m_SyncJumpWidth锟斤拷锟斤拷锟斤拷SJW位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg1锟斤拷锟斤拷锟斤拷TSEG1位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg2锟斤拷锟斤拷锟斤拷TSEG2位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_BusSample锟斤拷锟斤拷锟斤拷SAM位锟斤拷 */ tmpreg = ((uint32_t)canInitStruct->m_BaudRate << CAN_BRGR_CANBRP0_POS) \ | ((uint32_t)canInitStruct->m_SyncJumpWidth << CAN_BRGR_SJW0_POS) \ df0: 6f 8b LD.B R5, [R7 + #13] df2: 2e 7a LSL R5, #6 ..\can_driver.c:123 | ((uint32_t)canInitStruct->m_TimeSeg1 << CAN_BRGR_TSEG1_0_POS) \ | ((uint32_t)canInitStruct->m_TimeSeg2 << CAN_BRGR_TSEG2_0_POS) \ df4: 6c d7 ORL R5, R4, R5 ..\can_driver.c:122 /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg1锟斤拷锟斤拷锟斤拷TSEG1位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg2锟斤拷锟斤拷锟斤拷TSEG2位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_BusSample锟斤拷锟斤拷锟斤拷SAM位锟斤拷 */ tmpreg = ((uint32_t)canInitStruct->m_BaudRate << CAN_BRGR_CANBRP0_POS) \ | ((uint32_t)canInitStruct->m_SyncJumpWidth << CAN_BRGR_SJW0_POS) \ | ((uint32_t)canInitStruct->m_TimeSeg1 << CAN_BRGR_TSEG1_0_POS) \ df6: a7 8b LD.B R4, [R7 + #14] df8: a0 7a LSL R4, #8 ..\can_driver.c:120 /* 锟斤拷萁峁癸拷锟斤拷员m_BaudRate锟斤拷锟斤拷锟斤拷CANBRP位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_SyncJumpWidth锟斤拷锟斤拷锟斤拷SJW位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg1锟斤拷锟斤拷锟斤拷TSEG1位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_TimeSeg2锟斤拷锟斤拷锟斤拷TSEG2位锟斤拷 */ /* 锟斤拷萁峁癸拷锟斤拷员m_BusSample锟斤拷锟斤拷锟斤拷SAM位锟斤拷 */ tmpreg = ((uint32_t)canInitStruct->m_BaudRate << CAN_BRGR_CANBRP0_POS) \ dfa: 2d d7 ORL R5, R5, R4 ..\can_driver.c:123 | ((uint32_t)canInitStruct->m_SyncJumpWidth << CAN_BRGR_SJW0_POS) \ | ((uint32_t)canInitStruct->m_TimeSeg1 << CAN_BRGR_TSEG1_0_POS) \ | ((uint32_t)canInitStruct->m_TimeSeg2 << CAN_BRGR_TSEG2_0_POS) \ dfc: e7 8b LD.B R4, [R7 + #15] dfe: a4 7a LSL R4, #12 KF32A156.h:14083 e00: 2d d7 ORL R5, R5, R4 ..\can_driver.c:125 | (canInitStruct->m_BusSample); CANx->BRGR = SFR_Config (CANx->BRGR, ~CAN_BRGR_INIT_MASK, tmpreg); e02: 75 a0 ST.W [R6 + #1], R5 ..\can_driver.c:127 /* Enable Bus Off Hardware Recovery*/ CANx->CTLR |= (0x01<<13); e04: 56 82 LD.W R5, [R6] e06: ad 48 SET R5, #13 e08: 65 85 ST.W [R6], R5 ..\can_driver.c:129 /* Enable Specific Filter */ CANx->CTLR |= (0x01<<4); e0a: 56 82 LD.W R5, [R6] e0c: 2c 48 SET R5, #4 e0e: 65 85 ST.W [R6], R5 e10: 57 99 LD.W R2, [R7 + #5] ..\can_driver.c:86 GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_10, GPIO_RMP_AF6); GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_11, GPIO_RMP_AF6); } void CAN_Init(CAN_SFRmap* CANx, CAN_InitTypeDef* canInitStruct) e12: 2a c1 ADD R5, R2, #4 e14: 40 10 MOV R4, #0 ..\can_driver.c:139 *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x1FFFFF; }else if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Extended_Frame) { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<3; e16: 11 47 LD R7, [PC + #17] ;->0xe58 :=0x2810 ..\can_driver.c:86 GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_10, GPIO_RMP_AF6); GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_11, GPIO_RMP_AF6); } void CAN_Init(CAN_SFRmap* CANx, CAN_InitTypeDef* canInitStruct) e18: 03 10 MOV R0, #3 ..\can_driver.c:141 *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x1FFFFF; }else if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Extended_Frame) { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<3; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<3; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x07; e1a: 97 10 MOV R9, #7 ..\can_driver.c:136 { if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Standard_Frame) { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x1FFFFF; e1c: 10 41 LD R1, [PC + #16] ;->0xe5c :=0x1fffff e1e: 01 59 MOV R8, R1 ..\can_driver.c:132 CANx->CTLR |= (0x01<<13); /* Enable Specific Filter */ CANx->CTLR |= (0x01<<4); for(uint8_t filter_number = 0;filter_number<2;filter_number++) { if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Standard_Frame) e20: 5d 98 LD.W R3, [R5 + #1] e22: 30 38 CMP R3, #0 e24: 1e f1 JNZ $+30 ;->0xe60 ..\can_driver.c:134 { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<21; e26: dc e9 LD.W R3, [R4 + R7] ..\can_driver.c:86 GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_10, GPIO_RMP_AF6); GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_11, GPIO_RMP_AF6); } void CAN_Init(CAN_SFRmap* CANx, CAN_InitTypeDef* canInitStruct) e28: 0c ca MULS R1, R4, R0 e2a: 00 00 NOP NOP ..\can_driver.c:134 CANx->CTLR |= (0x01<<4); for(uint8_t filter_number = 0;filter_number<2;filter_number++) { if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Standard_Frame) { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<21; e2c: 4a e8 LD.W R1, [R2 + R1] e2e: 0d 7b LSL R1, #21 e30: 31 85 ST.W [R3], R1 ..\can_driver.c:135 *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<21; e32: 15 82 LD.W R1, [R5] e34: 0d 7b LSL R1, #21 e36: 59 a0 ST.W [R3 + #1], R1 ..\can_driver.c:136 *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x1FFFFF; e38: 15 82 LD.W R1, [R5] e3a: 18 6a ORL R1, R8 e3c: 51 85 ST.W [R5], R1 e3e: 59 a0 ST.W [R3 + #1], R1 e40: 24 c1 ADD R4, R4, #4 e42: 5c 28 ADD R5, #12 ..\can_driver.c:130 CANx->BRGR = SFR_Config (CANx->BRGR, ~CAN_BRGR_INIT_MASK, tmpreg); /* Enable Bus Off Hardware Recovery*/ CANx->CTLR |= (0x01<<13); /* Enable Specific Filter */ CANx->CTLR |= (0x01<<4); for(uint8_t filter_number = 0;filter_number<2;filter_number++) e44: 48 38 CMP R4, #8 e46: ed f1 JNZ $-19 ;->0xe20 ..\can_driver.c:145 *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<3; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x07; } } /* 锟剿筹拷锟斤拷位模式 */ SFR_CLR_BIT_ASM(CANx->CTLR, CAN_CTLR_RSMOD_POS); e48: 30 4e CLR [R6], #0 ..\can_driver.c:146 } e4a: 1f 5e POP {R6-R10} e4c: 0d 5d POP LR e4e: 1d 5c JMP LR e50: 00 02 00 00 .long 0x00000200 ->000000512 [!!!@2@:SVC @@: NOP e54: 00 00 ff ff .long 0xffff0000 ->-00065536 e58: 10 28 00 00 .long 0x00002810 ->000010256 [!!!@2@:ADD R1, #0 @@: NOP e5c: ff ff 1f 00 .long 0x001fffff ->002097151 ..\can_driver.c:137 if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Standard_Frame) { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x1FFFFF; }else if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Extended_Frame) e60: 31 38 CMP R3, #1 e62: ef f1 JNZ $-17 ;->0xe40 ..\can_driver.c:139 { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<3; e64: dc e9 LD.W R3, [R4 + R7] ..\can_driver.c:86 GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_10, GPIO_RMP_AF6); GPIO_Pin_RMP_Config(GPIOC_SFR, GPIO_Pin_Num_11, GPIO_RMP_AF6); } void CAN_Init(CAN_SFRmap* CANx, CAN_InitTypeDef* canInitStruct) e66: 0c ca MULS R1, R4, R0 e68: 00 00 NOP NOP ..\can_driver.c:139 *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<21; *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x1FFFFF; }else if((canInitStruct->Filter_Group_Ptr+filter_number)->Frame_Type == Extended_Frame) { *(uint32_t *)Filter_Group_Address[filter_number] = ((canInitStruct->Filter_Group_Ptr+filter_number)->Acceptance_Code)<<3; e6a: 4a e8 LD.W R1, [R2 + R1] e6c: cb bb STP.W [R3], R1 << #3 ..\can_driver.c:140 *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code)<<3; e6e: cd ba LDP.W R1, [R5] << #3 e70: 59 a0 ST.W [R3 + #1], R1 ..\can_driver.c:141 *(uint32_t *)(Filter_Group_Address[filter_number]+4) = ((canInitStruct->Filter_Group_Ptr+filter_number)->Mask_Code) |= 0x07; e72: 15 82 LD.W R1, [R5] e74: 19 6a ORL R1, R9 e76: 51 85 ST.W [R5], R1 e78: 59 a0 ST.W [R3 + #1], R1 e7a: e3 07 SJMP $-29 ;->0xe40 00000e7c : CAN_Transmit_Message_Once(): ..\can_driver.c:155 * @param in :None * @param out :None * @retval :None */ RetStatus CAN_Transmit_Message_Once(volatile CAN_MessageTypeDef *CAN_Message) { e7c: 83 5f PUSH {R6-R7,LR} e7e: c0 58 MOV R6, R0 ..\can_driver.c:157 RetStatus ret = FAILURE; if (CAN_Message->m_DataLength > 8) e80: a8 98 LD.W R5, [R0 + #2] e82: 58 38 CMP R5, #8 e84: 03 f9 JLS $+3 ;->0xe8a ..\can_driver.c:159 { CAN_Message->m_DataLength = 8; e86: 58 10 MOV R5, #8 e88: 85 a0 ST.W [R0 + #2], R5 ..\can_driver.c:161 } if ((!CAN_Get_Transmit_Status(CAN4_SFR, CAN_TX_BUFFER_STATUS))) e8a: 26 47 LD R7, [PC + #38] ;->0xf20 :=0x40002880 e8c: 07 58 MOV R0, R7 e8e: 11 10 MOV R1, #1 e90: 0a 7b LSL R1, #18 e92: 25 45 LD R5, [PC + #37] ;->0xf24 :=0x264 e94: 05 5c LJMP R5 ..\can_driver.c:163 { ret = FAILURE; e96: 50 10 MOV R5, #0 ..\can_driver.c:161 RetStatus ret = FAILURE; if (CAN_Message->m_DataLength > 8) { CAN_Message->m_DataLength = 8; } if ((!CAN_Get_Transmit_Status(CAN4_SFR, CAN_TX_BUFFER_STATUS))) e98: 05 70 CMP R0, R5 e9a: 3f f0 JZ $+63 ;->0xf18 ..\can_driver.c:166 { ret = FAILURE; }else { CAN4_SFR->CanTxBuffer.SFF.TXINFR.RTR = CAN_Message->m_RemoteTransmit; e9c: 5e 98 LD.W R3, [R6 + #1] e9e: 51 10 MOV R5, #1 ea0: 5b d5 ANL R3, R3, R5 ea2: 1e 7a LSL R3, #6 ea4: 27 9a LD.W R4, [R7 + #8] ea6: 26 4a CLR R4, #6 ea8: e4 d6 ORL R4, R4, R3 eaa: 3c a2 ST.W [R7 + #8], R4 ..\can_driver.c:167 CAN4_SFR->CanTxBuffer.SFF.TXINFR.IDE = CAN_Message->m_FrameFormat; eac: 46 82 LD.W R4, [R6] eae: 6c d5 ANL R5, R4, R5 eb0: 2f 7a LSL R5, #7 eb2: 27 9a LD.W R4, [R7 + #8] eb4: 27 4a CLR R4, #7 eb6: 6c d7 ORL R5, R4, R5 eb8: 3d a2 ST.W [R7 + #8], R5 ..\can_driver.c:168 CAN4_SFR->CanTxBuffer.SFF.TXINFR.DLC = CAN_Message->m_DataLength; eba: a6 98 LD.W R4, [R6 + #2] ebc: 5f 10 MOV R5, #15 ebe: 64 d5 ANL R4, R4, R5 ec0: 1f 9a LD.W R3, [R7 + #8] ec2: 5f 10 MOV R5, #15 ec4: 55 68 NOT R5, R5 ec6: 6b d5 ANL R5, R3, R5 ec8: 2d d7 ORL R5, R5, R4 eca: 3d a2 ST.W [R7 + #8], R5 ..\can_driver.c:170 if(CAN_Message->m_FrameFormat == CAN_FRAME_FORMAT_SFF) ecc: 56 82 LD.W R5, [R6] ..\can_driver.c:172 { CAN4_SFR->CanTxBuffer.SFF.TXDATA0.ID = CAN_Message->m_Can_ID; ece: e6 98 LD.W R4, [R6 + #3] ..\can_driver.c:170 { CAN4_SFR->CanTxBuffer.SFF.TXINFR.RTR = CAN_Message->m_RemoteTransmit; CAN4_SFR->CanTxBuffer.SFF.TXINFR.IDE = CAN_Message->m_FrameFormat; CAN4_SFR->CanTxBuffer.SFF.TXINFR.DLC = CAN_Message->m_DataLength; if(CAN_Message->m_FrameFormat == CAN_FRAME_FORMAT_SFF) ed0: 50 38 CMP R5, #0 ed2: 3d f0 JZ $+61 ;->0xf4c ..\can_driver.c:183 CAN4_SFR->CanTxBuffer.SFF.TXDATA1.DATA5 = CAN_Message->m_Data[5]; CAN4_SFR->CanTxBuffer.SFF.TXDATA2.DATA6 = CAN_Message->m_Data[6]; CAN4_SFR->CanTxBuffer.SFF.TXDATA2.DATA7 = CAN_Message->m_Data[7]; }else { CAN4_SFR->CanTxBuffer.EFF.TXDATA0.ID = CAN_Message->m_Can_ID; ed4: 23 7a LSL R4, #3 ed6: 5f 9a LD.W R3, [R7 + #9] ed8: 57 10 MOV R5, #7 eda: 6b d5 ANL R5, R3, R5 edc: 2d d7 ORL R5, R5, R4 ede: 7d a2 ST.W [R7 + #9], R5 ..\can_driver.c:184 CAN4_SFR->CanTxBuffer.EFF.TXDATA1.DATA0 = CAN_Message->m_Data[0]; ee0: 26 8c LD.B R4, [R6 + #16] ee2: 12 45 LD R5, [PC + #18] ;->0xf28 :=0x400028ab ee4: 54 83 ST.B [R5], R4 ..\can_driver.c:185 CAN4_SFR->CanTxBuffer.EFF.TXDATA1.DATA1 = CAN_Message->m_Data[1]; ee6: 66 8c LD.B R4, [R6 + #17] ee8: 11 45 LD R5, [PC + #17] ;->0xf2c :=0x400028aa eea: 54 83 ST.B [R5], R4 ..\can_driver.c:186 CAN4_SFR->CanTxBuffer.EFF.TXDATA1.DATA2 = CAN_Message->m_Data[2]; eec: a6 8c LD.B R4, [R6 + #18] eee: 11 45 LD R5, [PC + #17] ;->0xf30 :=0x400028a9 ef0: 54 83 ST.B [R5], R4 ..\can_driver.c:187 CAN4_SFR->CanTxBuffer.EFF.TXDATA1.DATA3 = CAN_Message->m_Data[3]; ef2: e6 8c LD.B R4, [R6 + #19] ef4: 10 45 LD R5, [PC + #16] ;->0xf34 :=0x400028a8 ef6: 54 83 ST.B [R5], R4 ..\can_driver.c:188 CAN4_SFR->CanTxBuffer.EFF.TXDATA2.DATA4 = CAN_Message->m_Data[4]; ef8: 26 8d LD.B R4, [R6 + #20] efa: 10 45 LD R5, [PC + #16] ;->0xf38 :=0x400028af efc: 54 83 ST.B [R5], R4 ..\can_driver.c:189 CAN4_SFR->CanTxBuffer.EFF.TXDATA2.DATA5 = CAN_Message->m_Data[5]; efe: 66 8d LD.B R4, [R6 + #21] f00: 0f 45 LD R5, [PC + #15] ;->0xf3c :=0x400028ae f02: 54 83 ST.B [R5], R4 ..\can_driver.c:190 CAN4_SFR->CanTxBuffer.EFF.TXDATA2.DATA6 = CAN_Message->m_Data[6]; f04: a6 8d LD.B R4, [R6 + #22] f06: 0f 45 LD R5, [PC + #15] ;->0xf40 :=0x400028ad f08: 54 83 ST.B [R5], R4 ..\can_driver.c:191 CAN4_SFR->CanTxBuffer.EFF.TXDATA2.DATA7 = CAN_Message->m_Data[7]; f0a: e6 8d LD.B R4, [R6 + #23] f0c: 0e 45 LD R5, [PC + #14] ;->0xf44 :=0x400028ac f0e: 54 83 ST.B [R5], R4 ..\can_driver.c:193 } ret = CAN_Transmit_Single(CAN4_SFR); f10: 04 40 LD R0, [PC + #4] ;->0xf20 :=0x40002880 f12: 0e 45 LD R5, [PC + #14] ;->0xf48 :=0x2c8 f14: 05 5c LJMP R5 f16: a0 58 MOV R5, R0 ..\can_driver.c:196 } return ret; } f18: 05 58 MOV R0, R5 f1a: 03 5e POP {R6-R7} f1c: 0d 5d POP LR f1e: 1d 5c JMP LR f20: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0xf20 :=0x40002880 f24: 64 02 00 00 .long 0x00000264 ->000000612 [!!!@2@:SVC SVC, #100 @@: NOP f28: ab 28 00 40 .long 0x400028ab ->1073752235 [!!!@2@:ADD R10, #11 @@: LD R0, [PC + #0] ;->0xf28 :=0x400028ab f2c: aa 28 00 40 .long 0x400028aa ->1073752234 [!!!@2@:ADD R10, #10 @@: LD R0, [PC + #0] ;->0xf2c :=0x400028aa f30: a9 28 00 40 .long 0x400028a9 ->1073752233 [!!!@2@:ADD R10, #9 @@: LD R0, [PC + #0] ;->0xf30 :=0x400028a9 f34: a8 28 00 40 .long 0x400028a8 ->1073752232 [!!!@2@:ADD R10, #8 @@: LD R0, [PC + #0] ;->0xf34 :=0x400028a8 f38: af 28 00 40 .long 0x400028af ->1073752239 [!!!@2@:ADD R10, #15 @@: LD R0, [PC + #0] ;->0xf38 :=0x400028af f3c: ae 28 00 40 .long 0x400028ae ->1073752238 [!!!@2@:ADD R10, #14 @@: LD R0, [PC + #0] ;->0xf3c :=0x400028ae f40: ad 28 00 40 .long 0x400028ad ->1073752237 [!!!@2@:ADD R10, #13 @@: LD R0, [PC + #0] ;->0xf40 :=0x400028ad f44: ac 28 00 40 .long 0x400028ac ->1073752236 [!!!@2@:ADD R10, #12 @@: LD R0, [PC + #0] ;->0xf44 :=0x400028ac f48: c8 02 00 00 .long 0x000002c8 ->000000712 [!!!@2@:SVC SVC, #200 @@: NOP ..\can_driver.c:172 CAN4_SFR->CanTxBuffer.SFF.TXINFR.IDE = CAN_Message->m_FrameFormat; CAN4_SFR->CanTxBuffer.SFF.TXINFR.DLC = CAN_Message->m_DataLength; if(CAN_Message->m_FrameFormat == CAN_FRAME_FORMAT_SFF) { CAN4_SFR->CanTxBuffer.SFF.TXDATA0.ID = CAN_Message->m_Can_ID; f4c: 25 7b LSL R4, #21 f4e: 5f 9a LD.W R3, [R7 + #9] f50: 0f 45 LD R5, [PC + #15] ;->0xf8c :=0x1fffff f52: 6b d5 ANL R5, R3, R5 f54: 2d d7 ORL R5, R5, R4 f56: 7d a2 ST.W [R7 + #9], R5 ..\can_driver.c:173 CAN4_SFR->CanTxBuffer.SFF.TXDATA0.DATA0 = CAN_Message->m_Data[0]; f58: 26 8c LD.B R4, [R6 + #16] f5a: 0e 45 LD R5, [PC + #14] ;->0xf90 :=0x400028a5 f5c: 54 83 ST.B [R5], R4 ..\can_driver.c:174 CAN4_SFR->CanTxBuffer.SFF.TXDATA0.DATA1 = CAN_Message->m_Data[1]; f5e: 66 8c LD.B R4, [R6 + #17] f60: 0d 45 LD R5, [PC + #13] ;->0xf94 :=0x400028a4 f62: 54 83 ST.B [R5], R4 ..\can_driver.c:175 CAN4_SFR->CanTxBuffer.SFF.TXDATA1.DATA2 = CAN_Message->m_Data[2]; f64: a6 8c LD.B R4, [R6 + #18] f66: 0d 45 LD R5, [PC + #13] ;->0xf98 :=0x400028ab f68: 54 83 ST.B [R5], R4 ..\can_driver.c:176 CAN4_SFR->CanTxBuffer.SFF.TXDATA1.DATA3 = CAN_Message->m_Data[3]; f6a: e6 8c LD.B R4, [R6 + #19] f6c: 0c 45 LD R5, [PC + #12] ;->0xf9c :=0x400028aa f6e: 54 83 ST.B [R5], R4 ..\can_driver.c:177 CAN4_SFR->CanTxBuffer.SFF.TXDATA1.DATA4 = CAN_Message->m_Data[4]; f70: 26 8d LD.B R4, [R6 + #20] f72: 0c 45 LD R5, [PC + #12] ;->0xfa0 :=0x400028a9 f74: 54 83 ST.B [R5], R4 ..\can_driver.c:178 CAN4_SFR->CanTxBuffer.SFF.TXDATA1.DATA5 = CAN_Message->m_Data[5]; f76: 66 8d LD.B R4, [R6 + #21] f78: 0b 45 LD R5, [PC + #11] ;->0xfa4 :=0x400028a8 f7a: 54 83 ST.B [R5], R4 ..\can_driver.c:179 CAN4_SFR->CanTxBuffer.SFF.TXDATA2.DATA6 = CAN_Message->m_Data[6]; f7c: a6 8d LD.B R4, [R6 + #22] f7e: 0b 45 LD R5, [PC + #11] ;->0xfa8 :=0x400028af f80: 54 83 ST.B [R5], R4 ..\can_driver.c:180 CAN4_SFR->CanTxBuffer.SFF.TXDATA2.DATA7 = CAN_Message->m_Data[7]; f82: e6 8d LD.B R4, [R6 + #23] f84: 0a 45 LD R5, [PC + #10] ;->0xfac :=0x400028ae f86: 54 83 ST.B [R5], R4 f88: c4 07 SJMP $-60 ;->0xf10 f8a: 00 00 NOP NOP f8c: ff ff 1f 00 .long 0x001fffff ->002097151 f90: a5 28 00 40 .long 0x400028a5 ->1073752229 [!!!@2@:ADD R10, #5 @@: LD R0, [PC + #0] ;->0xf90 :=0x400028a5 f94: a4 28 00 40 .long 0x400028a4 ->1073752228 [!!!@2@:ADD R10, #4 @@: LD R0, [PC + #0] ;->0xf94 :=0x400028a4 f98: ab 28 00 40 .long 0x400028ab ->1073752235 [!!!@2@:ADD R10, #11 @@: LD R0, [PC + #0] ;->0xf98 :=0x400028ab f9c: aa 28 00 40 .long 0x400028aa ->1073752234 [!!!@2@:ADD R10, #10 @@: LD R0, [PC + #0] ;->0xf9c :=0x400028aa fa0: a9 28 00 40 .long 0x400028a9 ->1073752233 [!!!@2@:ADD R10, #9 @@: LD R0, [PC + #0] ;->0xfa0 :=0x400028a9 fa4: a8 28 00 40 .long 0x400028a8 ->1073752232 [!!!@2@:ADD R10, #8 @@: LD R0, [PC + #0] ;->0xfa4 :=0x400028a8 fa8: af 28 00 40 .long 0x400028af ->1073752239 [!!!@2@:ADD R10, #15 @@: LD R0, [PC + #0] ;->0xfa8 :=0x400028af fac: ae 28 00 40 .long 0x400028ae ->1073752238 [!!!@2@:ADD R10, #14 @@: LD R0, [PC + #0] ;->0xfac :=0x400028ae 00000fb0 : CAN_Receive_Message(): ..\can_driver.c:252 * @param in :None * @param out :None * @retval :None */ RetStatus CAN_Receive_Message(volatile Can_Pdu_TypeDef *Pdu) { fb0: ff 5f PUSH {R6-R12,LR} fb2: e4 30 SUB SP, #4 fb4: e0 58 MOV R7, R0 ..\can_driver.c:255 RetStatus ret; uint32_t tmpaddr = 0; uint8_t mailboxpoint = CAN_Get_Point_Of_RAM_Mailbox(CAN4_SFR); fb6: 3e 40 LD R0, [PC + #62] ;->0x10ac :=0x40002880 fb8: 3e 45 LD R5, [PC + #62] ;->0x10b0 :=0x274 fba: 05 5c LJMP R5 fbc: c0 58 MOV R6, R0 ..\can_driver.c:256 uint8_t RmcCount = CAN_Get_Receive_Message_Counter(CAN4_SFR); fbe: 3c 40 LD R0, [PC + #60] ;->0x10ac :=0x40002880 fc0: 3d 45 LD R5, [PC + #61] ;->0x10b4 :=0x254 fc2: 05 5c LJMP R5 fc4: 50 d1 ZXT.B R5, R0 ..\can_driver.c:406 do{ ret = CAN_Transmit_Message_Once(&Can_Pdu_Send.CAN_Message[0]); }while(ret==FAILURE); //printf("TX[0x%03X]:%02X %02X %02X %02X %02X %02X %02X %02X\r\n",pMsg->ID,pMsg->Data[0],pMsg->Data[1],pMsg->Data[2],pMsg->Data[3],pMsg->Data[4],pMsg->Data[5],pMsg->Data[6],pMsg->Data[7]); //systick_delay_ms(5); } fc6: e5 85 ST.W [SP], R5 ..\can_driver.c:257 { RetStatus ret; uint32_t tmpaddr = 0; uint8_t mailboxpoint = CAN_Get_Point_Of_RAM_Mailbox(CAN4_SFR); uint8_t RmcCount = CAN_Get_Receive_Message_Counter(CAN4_SFR); int32_t ReceiveOffset = (mailboxpoint-RmcCount); fc8: 66 c7 SUB R4, R6, R5 ..\can_driver.c:258 if(ReceiveOffset>=0) fca: 40 38 CMP R4, #0 fcc: 7e f4 JMI $+126 ;->0x10c8 ..\can_driver.c:263 { ReceiveOffset = ReceiveOffset*0x10; }else { ReceiveOffset = (ReceiveOffset+64)*0x10; fce: 24 7a LSL R4, #4 ..\can_driver.c:265 } Pdu->Frame_length = RmcCount; fd0: 3a 43 LD R3, [PC + #58] ;->0x10b8 :=0x600 fd2: fd ea ST.B [R7 + R3], R5 ..\can_driver.c:266 for (uint8_t receive_count = 0; receive_count < RmcCount; receive_count++) fd4: 50 38 CMP R5, #0 fd6: 62 f0 JZ $+98 ;->0x109a ..\can_driver.c:251 * @brief : * @param in :None * @param out :None * @retval :None */ RetStatus CAN_Receive_Message(volatile Can_Pdu_TypeDef *Pdu) fd8: 6d cc SUB R5, R5, #1 fda: b5 d1 ZXT.B R11, R5 fdc: b1 28 ADD R11, #1 fde: 20 10 MOV R2, #0 ..\can_driver.c:269 } Pdu->Frame_length = RmcCount; for (uint8_t receive_count = 0; receive_count < RmcCount; receive_count++) { tmpaddr = CAN4_RECEIVE_ADDR; tmpaddr += ReceiveOffset; fe0: 37 41 LD R1, [PC + #55] ;->0x10bc :=0x1ffef800 ..\can_driver.c:271 volatile CanRxBufferTypeDef *CanRxBufferPtr = (volatile CanRxBufferTypeDef *)tmpaddr; Pdu->CAN_Message[receive_count].m_FrameFormat = CanRxBufferPtr->SFF.RXDATA0.IDE; fe2: a8 11 MOV R10, #24 ..\can_driver.c:272 Pdu->CAN_Message[receive_count].m_DataLength = CanRxBufferPtr->SFF.RXDATA0.DLC; fe4: 9f 10 MOV R9, #15 ..\can_driver.c:285 ReceiveOffset = 0; } continue; }else { Pdu->CAN_Message[receive_count].m_RemoteTransmit = CAN_DATA_FRAME; fe6: a2 59 MOV LR, R2 ..\can_driver.c:313 Pdu->CAN_Message[receive_count].m_Data[5] = CanRxBufferPtr->EFF.RXDATA3.DATA5; Pdu->CAN_Message[receive_count].m_Data[6] = CanRxBufferPtr->EFF.RXDATA3.DATA6; Pdu->CAN_Message[receive_count].m_Data[7] = CanRxBufferPtr->EFF.RXDATA3.DATA7; } ReceiveOffset += 0x10; if (ReceiveOffset > 1008) fe8: 36 45 LD R5, [PC + #54] ;->0x10c0 :=0x3f0 fea: 85 59 MOV R12, R5 fec: 1b 04 SJMP $+27 ;->0x1022 ..\can_driver.c:290 Pdu->CAN_Message[receive_count].m_RemoteTransmit = CAN_DATA_FRAME; } if(Pdu->CAN_Message[receive_count].m_FrameFormat == 0x00) { /* Standard Frame Format */ Pdu->CAN_Message[receive_count].m_Can_ID = CanRxBufferPtr->SFF.RXDATA1.ID; fee: 73 98 LD.W R6, [R3 + #1] ff0: 35 7d LSR R6, #21 ff2: ee a0 ST.W [R5 + #3], R6 ..\can_driver.c:291 Pdu->CAN_Message[receive_count].m_Data[0] = CanRxBufferPtr->SFF.RXDATA1.DATA0; ff4: 73 89 LD.B R6, [R3 + #5] ff6: 2e 94 ST.B [R5 + #16], R6 ..\can_driver.c:292 Pdu->CAN_Message[receive_count].m_Data[1] = CanRxBufferPtr->SFF.RXDATA1.DATA1; ff8: 33 89 LD.B R6, [R3 + #4] ffa: 6e 94 ST.B [R5 + #17], R6 ..\can_driver.c:293 Pdu->CAN_Message[receive_count].m_Data[2] = CanRxBufferPtr->SFF.RXDATA2.DATA2; ffc: f3 8a LD.B R6, [R3 + #11] ffe: ae 94 ST.B [R5 + #18], R6 ..\can_driver.c:294 Pdu->CAN_Message[receive_count].m_Data[3] = CanRxBufferPtr->SFF.RXDATA2.DATA3; 1000: b3 8a LD.B R6, [R3 + #10] 1002: ee 94 ST.B [R5 + #19], R6 ..\can_driver.c:295 Pdu->CAN_Message[receive_count].m_Data[4] = CanRxBufferPtr->SFF.RXDATA2.DATA4; 1004: 73 8a LD.B R6, [R3 + #9] 1006: 2e 95 ST.B [R5 + #20], R6 ..\can_driver.c:296 Pdu->CAN_Message[receive_count].m_Data[5] = CanRxBufferPtr->SFF.RXDATA2.DATA5; 1008: 33 8a LD.B R6, [R3 + #8] 100a: 6e 95 ST.B [R5 + #21], R6 ..\can_driver.c:297 Pdu->CAN_Message[receive_count].m_Data[6] = CanRxBufferPtr->SFF.RXDATA3.DATA6; 100c: f3 8b LD.B R6, [R3 + #15] 100e: ae 95 ST.B [R5 + #22], R6 ..\can_driver.c:298 Pdu->CAN_Message[receive_count].m_Data[7] = CanRxBufferPtr->SFF.RXDATA3.DATA7; 1010: 9b 8b LD.B R3, [R3 + #14] 1012: eb 95 ST.B [R5 + #23], R3 ..\can_driver.c:277 Pdu->CAN_Message[receive_count].m_DataLength = CanRxBufferPtr->SFF.RXDATA0.DLC; Pdu->CAN_Message[receive_count].m_RemoteTransmit = CanRxBufferPtr->SFF.RXDATA0.RTR; if(Pdu->CAN_Message[receive_count].m_RemoteTransmit == 0x01) { ReceiveOffset += 0x10; 1014: 40 29 ADD R4, #16 ..\can_driver.c:278 if (ReceiveOffset > 1008) 1016: 4c 70 CMP R4, R12 1018: 02 fd JLE $+2 ;->0x101c ..\can_driver.c:280 { ReceiveOffset = 0; 101a: 40 10 MOV R4, #0 101c: 52 c0 ADD R2, R2, #1 ..\can_driver.c:266 }else { ReceiveOffset = (ReceiveOffset+64)*0x10; } Pdu->Frame_length = RmcCount; for (uint8_t receive_count = 0; receive_count < RmcCount; receive_count++) 101e: 2b 70 CMP R2, R11 1020: 3d f0 JZ $+61 ;->0x109a ..\can_driver.c:269 { tmpaddr = CAN4_RECEIVE_ADDR; tmpaddr += ReceiveOffset; 1022: 5c c2 ADD R3, R4, R1 ..\can_driver.c:271 volatile CanRxBufferTypeDef *CanRxBufferPtr = (volatile CanRxBufferTypeDef *)tmpaddr; Pdu->CAN_Message[receive_count].m_FrameFormat = CanRxBufferPtr->SFF.RXDATA0.IDE; 1024: 24 5d PUSH R4 1026: 41 64 ADD R4, R1 1028: 84 82 LD.W R8, [R4] 102a: 04 5d POP R4 102c: 47 7c LSR R8, #7 102e: 01 10 MOV R0, #1 1030: 80 69 ANL R8, R0 1032: aa 58 MOV R5, R10 1034: 72 cb MULS R6, R2, R5 1036: 00 00 NOP NOP 1038: af c3 ADD R5, R7, R6 103a: 27 5d PUSH R7 103c: 76 64 ADD R7, R6 103e: 78 85 ST.W [R7], R8 1040: 07 5d POP R7 ..\can_driver.c:272 Pdu->CAN_Message[receive_count].m_DataLength = CanRxBufferPtr->SFF.RXDATA0.DLC; 1042: 24 5d PUSH R4 1044: 41 64 ADD R4, R1 1046: 84 82 LD.W R8, [R4] 1048: 04 5d POP R4 104a: 89 69 ANL R8, R9 104c: 08 58 MOV R0, R8 104e: a8 a0 ST.W [R5 + #2], R0 ..\can_driver.c:273 Pdu->CAN_Message[receive_count].m_RemoteTransmit = CanRxBufferPtr->SFF.RXDATA0.RTR; 1050: 24 5d PUSH R4 1052: 41 64 ADD R4, R1 1054: 84 82 LD.W R8, [R4] 1056: 04 5d POP R4 1058: 46 7c LSR R8, #6 105a: 01 10 MOV R0, #1 105c: 80 69 ANL R8, R0 105e: 08 58 MOV R0, R8 1060: 68 a0 ST.W [R5 + #1], R0 ..\can_driver.c:275 if(Pdu->CAN_Message[receive_count].m_RemoteTransmit == 0x01) 1062: 45 98 LD.W R0, [R5 + #1] 1064: 01 38 CMP R0, #1 1066: d7 f0 JZ $-41 ;->0x1014 ..\can_driver.c:285 ReceiveOffset = 0; } continue; }else { Pdu->CAN_Message[receive_count].m_RemoteTransmit = CAN_DATA_FRAME; 1068: 0d 58 MOV R0, LR 106a: 68 a0 ST.W [R5 + #1], R0 ..\can_driver.c:287 } if(Pdu->CAN_Message[receive_count].m_FrameFormat == 0x00) 106c: b7 e9 LD.W R6, [R7 + R6] 106e: 60 38 CMP R6, #0 1070: bf f0 JZ $-65 ;->0xfee ..\can_driver.c:302 Pdu->CAN_Message[receive_count].m_Data[6] = CanRxBufferPtr->SFF.RXDATA3.DATA6; Pdu->CAN_Message[receive_count].m_Data[7] = CanRxBufferPtr->SFF.RXDATA3.DATA7; }else { /* Extended Frame Format */ Pdu->CAN_Message[receive_count].m_Can_ID = CanRxBufferPtr->EFF.RXDATA1.ID; 1072: 73 98 LD.W R6, [R3 + #1] 1074: 33 7c LSR R6, #3 1076: ee a0 ST.W [R5 + #3], R6 ..\can_driver.c:303 Pdu->CAN_Message[receive_count].m_Data[0] = CanRxBufferPtr->EFF.RXDATA2.DATA0; 1078: f3 8a LD.B R6, [R3 + #11] 107a: 2e 94 ST.B [R5 + #16], R6 ..\can_driver.c:304 Pdu->CAN_Message[receive_count].m_Data[1] = CanRxBufferPtr->EFF.RXDATA2.DATA1; 107c: b3 8a LD.B R6, [R3 + #10] 107e: 6e 94 ST.B [R5 + #17], R6 ..\can_driver.c:305 Pdu->CAN_Message[receive_count].m_Data[2] = CanRxBufferPtr->EFF.RXDATA2.DATA2; 1080: 73 8a LD.B R6, [R3 + #9] 1082: ae 94 ST.B [R5 + #18], R6 ..\can_driver.c:306 Pdu->CAN_Message[receive_count].m_Data[3] = CanRxBufferPtr->EFF.RXDATA2.DATA3; 1084: 33 8a LD.B R6, [R3 + #8] 1086: ee 94 ST.B [R5 + #19], R6 ..\can_driver.c:307 Pdu->CAN_Message[receive_count].m_Data[4] = CanRxBufferPtr->EFF.RXDATA3.DATA4; 1088: f3 8b LD.B R6, [R3 + #15] 108a: 2e 95 ST.B [R5 + #20], R6 ..\can_driver.c:308 Pdu->CAN_Message[receive_count].m_Data[5] = CanRxBufferPtr->EFF.RXDATA3.DATA5; 108c: b3 8b LD.B R6, [R3 + #14] 108e: 6e 95 ST.B [R5 + #21], R6 ..\can_driver.c:309 Pdu->CAN_Message[receive_count].m_Data[6] = CanRxBufferPtr->EFF.RXDATA3.DATA6; 1090: 73 8b LD.B R6, [R3 + #13] 1092: ae 95 ST.B [R5 + #22], R6 ..\can_driver.c:310 Pdu->CAN_Message[receive_count].m_Data[7] = CanRxBufferPtr->EFF.RXDATA3.DATA7; 1094: 1b 8b LD.B R3, [R3 + #12] 1096: eb 95 ST.B [R5 + #23], R3 1098: be 07 SJMP $-66 ;->0x1014 ..\can_driver.c:318 if (ReceiveOffset > 1008) { ReceiveOffset = 0; } } CAN_Release_Receive_Buffer(CAN4_SFR, RmcCount); 109a: 05 40 LD R0, [PC + #5] ;->0x10ac :=0x40002880 109c: 1e 82 LD.W R1, [SP] 109e: 0a 45 LD R5, [PC + #10] ;->0x10c4 :=0x284 10a0: 05 5c LJMP R5 ..\can_driver.c:321 ret = SUCCESS; return ret; } 10a2: 01 10 MOV R0, #1 10a4: e4 28 ADD SP, #4 10a6: 7f 5e POP {R6-R12} 10a8: 0d 5d POP LR 10aa: 1d 5c JMP LR 10ac: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x10ac :=0x40002880 10b0: 74 02 00 00 .long 0x00000274 ->000000628 [!!!@2@:SVC SVC, #116 @@: NOP 10b4: 54 02 00 00 .long 0x00000254 ->000000596 [!!!@2@:SVC SVC, #84 @@: NOP 10b8: 00 06 00 00 .long 0x00000600 ->000001536 [!!!@2@:SJMP $-512 ;->0xcb8 @@: NOP 10bc: 00 f8 fe 1f .long 0x1ffef800 ->536803328 [!!!@2@:JHI $+0 ;->0x10bc @@: MOV PC, #254 10c0: f0 03 00 00 .long 0x000003f0 ->000001008 [!!!@4@:JMP $-1048576 ;->0xffe010c0 10c4: 84 02 00 00 .long 0x00000284 ->000000644 [!!!@2@:SVC SVC, #132 @@: NOP ..\can_driver.c:263 if(ReceiveOffset>=0) { ReceiveOffset = ReceiveOffset*0x10; }else { ReceiveOffset = (ReceiveOffset+64)*0x10; 10c8: 40 2c ADD R4, #64 10ca: 82 07 SJMP $-126 ;->0xfce 000010cc : CAN_Int_Config(): ..\can_driver.c:331 * @param in :None * @param out :None * @retval :None */ void CAN_Int_Config(Can_Interrupt_Type *Can_Interrupt) { 10cc: 81 5f PUSH {R6,LR} 10ce: c0 58 MOV R6, R0 ..\can_driver.c:332 if(Can_Interrupt->CAN_TRANSMIT_INTERRUPT == INTERRUPT_ENABLE) 10d0: 20 82 LD.W R2, [R0] 10d2: 21 38 CMP R2, #1 10d4: 23 f0 JZ $+35 ;->0x111a ..\can_driver.c:337 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_TRANSMIT,TRUE); } if(Can_Interrupt->CAN_RECEIVE_INTERRUPT == INTERRUPT_ENABLE) 10d6: 4e 98 LD.W R1, [R6 + #1] 10d8: 11 38 CMP R1, #1 10da: 27 f0 JZ $+39 ;->0x1128 ..\can_driver.c:342 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_RECEIVE,TRUE); } if(Can_Interrupt->CAN_OVERFLOW_INTERRUPT == INTERRUPT_ENABLE) 10dc: 96 98 LD.W R2, [R6 + #2] 10de: 21 38 CMP R2, #1 10e0: 2b f0 JZ $+43 ;->0x1136 ..\can_driver.c:347 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_DATA_OVERFLOW,TRUE); } if(Can_Interrupt->CAN_BUSERROR_INTERRUPT == INTERRUPT_ENABLE) 10e2: d6 98 LD.W R2, [R6 + #3] 10e4: 21 38 CMP R2, #1 10e6: 2f f0 JZ $+47 ;->0x1144 ..\can_driver.c:352 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_BUS_ERROR,TRUE); } if(Can_Interrupt->CAN_BUSOFF_INTERRUPT == INTERRUPT_ENABLE) 10e8: 16 99 LD.W R2, [R6 + #4] 10ea: 21 38 CMP R2, #1 10ec: 33 f0 JZ $+51 ;->0x1152 ..\can_driver.c:357 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_BUS_OFF,TRUE); } if(Can_Interrupt->CAN_ERRORNEGATIVE_INTERRUPT == INTERRUPT_ENABLE) 10ee: 56 99 LD.W R2, [R6 + #5] 10f0: 21 38 CMP R2, #1 10f2: 0f f0 JZ $+15 ;->0x1110 ..\can_driver.c:361 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_ERROR_NEGATIVE,TRUE); } INT_Interrupt_Enable(INT_CAN4,TRUE); 10f4: 00 12 MOV R0, #32 10f6: 11 10 MOV R1, #1 10f8: 04 45 LD R5, [PC + #4] ;->0x1108 :=0x4bc 10fa: 05 5c LJMP R5 ..\can_driver.c:362 INT_All_Enable(TRUE); 10fc: 01 10 MOV R0, #1 10fe: 04 45 LD R5, [PC + #4] ;->0x110c :=0x4a8 1100: 05 5c LJMP R5 ..\can_driver.c:363 } 1102: 06 5d POP R6 1104: 0d 5d POP LR 1106: 1d 5c JMP LR 1108: bc 04 00 00 .long 0x000004bc ->000001212 [!!!@2@:SJMP $+188 ;->0x1280 @@: NOP 110c: a8 04 00 00 .long 0x000004a8 ->000001192 [!!!@2@:SJMP $+168 ;->0x125c @@: NOP ..\can_driver.c:359 CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_BUS_OFF,TRUE); } if(Can_Interrupt->CAN_ERRORNEGATIVE_INTERRUPT == INTERRUPT_ENABLE) { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_ERROR_NEGATIVE,TRUE); 1110: 14 40 LD R0, [PC + #20] ;->0x1160 :=0x40002880 1112: 10 12 MOV R1, #32 1114: 14 45 LD R5, [PC + #20] ;->0x1164 :=0x358 1116: 05 5c LJMP R5 1118: ee 07 SJMP $-18 ;->0x10f4 ..\can_driver.c:334 */ void CAN_Int_Config(Can_Interrupt_Type *Can_Interrupt) { if(Can_Interrupt->CAN_TRANSMIT_INTERRUPT == INTERRUPT_ENABLE) { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_TRANSMIT,TRUE); 111a: 12 40 LD R0, [PC + #18] ;->0x1160 :=0x40002880 111c: 12 10 MOV R1, #2 111e: 12 45 LD R5, [PC + #18] ;->0x1164 :=0x358 1120: 05 5c LJMP R5 ..\can_driver.c:337 } if(Can_Interrupt->CAN_RECEIVE_INTERRUPT == INTERRUPT_ENABLE) 1122: 4e 98 LD.W R1, [R6 + #1] 1124: 11 38 CMP R1, #1 1126: db f1 JNZ $-37 ;->0x10dc ..\can_driver.c:339 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_RECEIVE,TRUE); 1128: 0e 40 LD R0, [PC + #14] ;->0x1160 :=0x40002880 112a: 41 58 MOV R2, R1 112c: 0e 45 LD R5, [PC + #14] ;->0x1164 :=0x358 112e: 05 5c LJMP R5 ..\can_driver.c:342 } if(Can_Interrupt->CAN_OVERFLOW_INTERRUPT == INTERRUPT_ENABLE) 1130: 96 98 LD.W R2, [R6 + #2] 1132: 21 38 CMP R2, #1 1134: d7 f1 JNZ $-41 ;->0x10e2 ..\can_driver.c:344 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_DATA_OVERFLOW,TRUE); 1136: 0b 40 LD R0, [PC + #11] ;->0x1160 :=0x40002880 1138: 18 10 MOV R1, #8 113a: 0b 45 LD R5, [PC + #11] ;->0x1164 :=0x358 113c: 05 5c LJMP R5 ..\can_driver.c:347 } if(Can_Interrupt->CAN_BUSERROR_INTERRUPT == INTERRUPT_ENABLE) 113e: d6 98 LD.W R2, [R6 + #3] 1140: 21 38 CMP R2, #1 1142: d3 f1 JNZ $-45 ;->0x10e8 ..\can_driver.c:349 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_BUS_ERROR,TRUE); 1144: 07 40 LD R0, [PC + #7] ;->0x1160 :=0x40002880 1146: 10 18 MOV R1, #128 1148: 07 45 LD R5, [PC + #7] ;->0x1164 :=0x358 114a: 05 5c LJMP R5 ..\can_driver.c:352 } if(Can_Interrupt->CAN_BUSOFF_INTERRUPT == INTERRUPT_ENABLE) 114c: 16 99 LD.W R2, [R6 + #4] 114e: 21 38 CMP R2, #1 1150: cf f1 JNZ $-49 ;->0x10ee ..\can_driver.c:354 { CAN_Set_INT_Enable(CAN4_SFR,CAN_INT_BUS_OFF,TRUE); 1152: 04 40 LD R0, [PC + #4] ;->0x1160 :=0x40002880 1154: 11 10 MOV R1, #1 1156: 8c 7a LSL R1, #12 1158: 03 45 LD R5, [PC + #3] ;->0x1164 :=0x358 115a: 05 5c LJMP R5 115c: c9 07 SJMP $-55 ;->0x10ee 115e: 00 00 NOP NOP 1160: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x1160 :=0x40002880 1164: 58 03 00 00 .long 0x00000358 ->000000856 [!!!@4@:JMP $+5767168 ;->0xb01164 00001168 : CAN_Configuration(): ..\can_driver.c:366 INT_Interrupt_Enable(INT_CAN4,TRUE); INT_All_Enable(TRUE); } void CAN_Configuration(void) { 1168: 2d 5d PUSH LR ..\can_driver.c:371 /* Initialize Can IOs * - PC10 = CAN4TX * - PC11 = CNA4RX */ CAN_Gpio_Init(); 116a: 06 45 LD R5, [PC + #6] ;->0x1180 :=0xd68 116c: 05 5c LJMP R5 ..\can_driver.c:373 /* Initialize Can Mode And Set Can Module To 500k baudrate*/ CAN_Init(CAN4_SFR,&CAN_Condition); 116e: 06 40 LD R0, [PC + #6] ;->0x1184 :=0x40002880 1170: 06 41 LD R1, [PC + #6] ;->0x1188 :=0x10000018 1172: 07 45 LD R5, [PC + #7] ;->0x118c :=0xdb8 1174: 05 5c LJMP R5 ..\can_driver.c:375 /* Initialize Can Interrupt */ CAN_Int_Config(&Can_Interrupt); 1176: 07 40 LD R0, [PC + #7] ;->0x1190 :=0x10000000 1178: 07 45 LD R5, [PC + #7] ;->0x1194 :=0x10cc 117a: 05 5c LJMP R5 ..\can_driver.c:376 } 117c: 0d 5d POP LR 117e: 1d 5c JMP LR 1180: 68 0d 00 00 .long 0x00000d68 ->000003432 [!!!@2@:LD.W R5, [SP + #104] @@: NOP 1184: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x1184 :=0x40002880 1188: 18 00 00 10 .long 0x10000018 ->268435480 [!!!@4@:MULS R4, R0, R0 118c: b8 0d 00 00 .long 0x00000db8 ->000003512 [!!!@2@:LD.W R5, [SP + #184] @@: NOP 1190: 00 00 00 10 .long 0x10000000 ->268435456 [!!!@2@:NOP @@: MOV R0, #0 1194: cc 10 00 00 .long 0x000010cc ->000004300 [!!!@2@:MOV R12, #12 @@: NOP 00001198 : CAN_WriteData(): ..\can_driver.c:385 * @param CANx CAN閫氶亾鍙 * @param TxMessage CAN娑堟伅鎸囬拡 * @retval 1-娑堟伅鍙戦佹垚鍔燂紝0-娑堟伅鍙戦佸け璐 */ uint8_t CAN_WriteData(uint8_t Channel,CAN_MSG *pMsg) { 1198: 81 5f PUSH {R6,LR} 119a: 19 45 LD R5, [PC + #25] ;->0x11fc :=0x604 119c: e5 66 SUB SP, R5 119e: c1 58 MOV R6, R1 ..\can_driver.c:386 Can_Pdu_TypeDef Can_Pdu_Send = { 11a0: 0e 58 MOV R0, SP 11a2: 10 10 MOV R1, #0 11a4: 16 42 LD R2, [PC + #22] ;->0x11fc :=0x604 11a6: 17 45 LD R5, [PC + #23] ;->0x1200 :=0x22ba 11a8: 05 5c LJMP R5 11aa: 58 10 MOV R5, #8 11ac: 02 25 ST.W [SP + #2], R5 11ae: 46 82 LD.W R4, [R6] 11b0: 03 24 ST.W [SP + #3], R4 11b2: 41 10 MOV R4, #1 11b4: 14 45 LD R5, [PC + #20] ;->0x1204 :=0x600 11b6: 5e 64 ADD R5, SP 11b8: 54 83 ST.B [R5], R4 ..\can_driver.c:398 {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}, }, }, 1, }; memcpy(Can_Pdu_Send.CAN_Message[0].m_Data,pMsg->Data,8); 11ba: 6e 89 LD.B R5, [R6 + #5] 11bc: b0 e3 ST.B [SP + #16], R5 11be: ae 89 LD.B R5, [R6 + #6] 11c0: b1 e3 ST.B [SP + #17], R5 11c2: ee 89 LD.B R5, [R6 + #7] 11c4: b2 e3 ST.B [SP + #18], R5 11c6: 2e 8a LD.B R5, [R6 + #8] 11c8: b3 e3 ST.B [SP + #19], R5 11ca: 6e 8a LD.B R5, [R6 + #9] 11cc: b4 e3 ST.B [SP + #20], R5 11ce: ae 8a LD.B R5, [R6 + #10] 11d0: b5 e3 ST.B [SP + #21], R5 11d2: ee 8a LD.B R5, [R6 + #11] 11d4: b6 e3 ST.B [SP + #22], R5 11d6: 2e 8b LD.B R5, [R6 + #12] 11d8: b7 e3 ST.B [SP + #23], R5 11da: 0c 46 LD R6, [PC + #12] ;->0x1208 :=0x264 ..\can_driver.c:399 while(!CAN_Get_Transmit_Status(CAN4_SFR, CAN_TX_BUFFER_STATUS)); 11dc: 0c 40 LD R0, [PC + #12] ;->0x120c :=0x40002880 11de: 11 10 MOV R1, #1 11e0: 0a 7b LSL R1, #18 11e2: 06 5c LJMP R6 11e4: 00 38 CMP R0, #0 11e6: fb f0 JZ $-5 ;->0x11dc 11e8: 0a 46 LD R6, [PC + #10] ;->0x1210 :=0xe7c ..\can_driver.c:402 RetStatus ret; do{ ret = CAN_Transmit_Message_Once(&Can_Pdu_Send.CAN_Message[0]); 11ea: 0e 58 MOV R0, SP 11ec: 06 5c LJMP R6 ..\can_driver.c:403 }while(ret==FAILURE); 11ee: 00 38 CMP R0, #0 11f0: fd f0 JZ $-3 ;->0x11ea ..\can_driver.c:406 //printf("TX[0x%03X]:%02X %02X %02X %02X %02X %02X %02X %02X\r\n",pMsg->ID,pMsg->Data[0],pMsg->Data[1],pMsg->Data[2],pMsg->Data[3],pMsg->Data[4],pMsg->Data[5],pMsg->Data[6],pMsg->Data[7]); //systick_delay_ms(5); } 11f2: 03 45 LD R5, [PC + #3] ;->0x11fc :=0x604 11f4: e5 64 ADD SP, R5 11f6: 06 5d POP R6 11f8: 0d 5d POP LR 11fa: 1d 5c JMP LR 11fc: 04 06 00 00 .long 0x00000604 ->000001540 [!!!@2@:SJMP $-508 ;->0xe04 @@: NOP 1200: ba 22 00 00 .long 0x000022ba ->000008890 [!!!@2@:ST.W [SP + #186], R2 @@: NOP 1204: 00 06 00 00 .long 0x00000600 ->000001536 [!!!@2@:SJMP $-512 ;->0xe04 @@: NOP 1208: 64 02 00 00 .long 0x00000264 ->000000612 [!!!@2@:SVC SVC, #100 @@: NOP 120c: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x120c :=0x40002880 1210: 7c 0e 00 00 .long 0x00000e7c ->000003708 [!!!@2@:LD.W R6, [SP + #124] @@: NOP 00001214 : CAN_UDS_GetMsg(): ..\can_uds.c:23 * @brief 寰幆浠嶧IFO璇诲彇1甯ф暟鎹 * @param pCANData 鏁版嵁鎸囬拡 * @return 鎴愬姛璇诲彇鍒扮殑鏁版嵁瀛楄妭鏁 */ uint8_t CAN_UDS_GetMsg(uint8_t *pCANData) { 1214: 87 5f PUSH {R6-R8,LR} 1216: e4 30 SUB SP, #4 1218: 00 59 MOV R8, R0 ..\can_uds.c:25 CAN_MSG *pMsg; if(CAN_BUF_PopMsg(0,&pMsg,1)){ 121a: 00 10 MOV R0, #0 121c: 2e 58 MOV R1, SP 121e: 21 10 MOV R2, #1 1220: 0d 45 LD R5, [PC + #13] ;->0x1254 :=0xcf0 1222: 05 5c LJMP R5 ..\can_uds.c:33 }else{ memcpy(pCANData,pMsg->Data,pMsg->Flags.DLC); return pMsg->Flags.DLC; } } return 0; 1224: 60 10 MOV R6, #0 ..\can_uds.c:25 * @return 鎴愬姛璇诲彇鍒扮殑鏁版嵁瀛楄妭鏁 */ uint8_t CAN_UDS_GetMsg(uint8_t *pCANData) { CAN_MSG *pMsg; if(CAN_BUF_PopMsg(0,&pMsg,1)){ 1226: 06 70 CMP R0, R6 1228: 11 f0 JZ $+17 ;->0x124a ..\can_uds.c:26 if(pMsg->Flags.DIR){ 122a: 7e 82 LD.W R7, [SP] 122c: 57 98 LD.W R2, [R7 + #1] 122e: 54 10 MOV R5, #4 1230: 6a d5 ANL R5, R2, R5 1232: 56 70 CMP R5, R6 1234: 14 f1 JNZ $+20 ;->0x125c ..\can_uds.c:29 CAN_WriteData(0,pMsg); }else{ memcpy(pCANData,pMsg->Data,pMsg->Flags.DLC); 1236: 13 7c LSR R2, #3 1238: 6f 10 MOV R6, #15 123a: 08 58 MOV R0, R8 123c: 4f c1 ADD R1, R7, #5 123e: 92 d5 ANL R2, R2, R6 1240: 06 45 LD R5, [PC + #6] ;->0x1258 :=0x22a8 1242: 05 5c LJMP R5 ..\can_uds.c:30 return pMsg->Flags.DLC; 1244: 6f 98 LD.W R5, [R7 + #1] 1246: 2b 7c LSR R5, #3 1248: b5 d5 ANL R6, R5, R6 ..\can_uds.c:34 } } return 0; } 124a: 06 58 MOV R0, R6 124c: e4 28 ADD SP, #4 124e: 07 5e POP {R6-R8} 1250: 0d 5d POP LR 1252: 1d 5c JMP LR 1254: f0 0c 00 00 .long 0x00000cf0 ->000003312 [!!!@2@:LD.W R4, [SP + #240] @@: NOP 1258: a8 22 00 00 .long 0x000022a8 ->000008872 [!!!@2@:ST.W [SP + #168], R2 @@: NOP ..\can_uds.c:27 uint8_t CAN_UDS_GetMsg(uint8_t *pCANData) { CAN_MSG *pMsg; if(CAN_BUF_PopMsg(0,&pMsg,1)){ if(pMsg->Flags.DIR){ CAN_WriteData(0,pMsg); 125c: 06 58 MOV R0, R6 125e: 27 58 MOV R1, R7 1260: 04 45 LD R5, [PC + #4] ;->0x1270 :=0x1198 1262: 05 5c LJMP R5 ..\can_uds.c:34 memcpy(pCANData,pMsg->Data,pMsg->Flags.DLC); return pMsg->Flags.DLC; } } return 0; } 1264: 06 58 MOV R0, R6 1266: e4 28 ADD SP, #4 1268: 07 5e POP {R6-R8} 126a: 0d 5d POP LR 126c: 1d 5c JMP LR 126e: 00 00 NOP NOP 1270: 98 11 00 00 .long 0x00001198 ->000004504 [!!!@2@:MOV R9, #24 @@: NOP 00001274 : CAN_UDS_WaitFC(): ..\can_uds.c:45 * @return 绛夊緟娴佹帶甯х姸鎬 * @retval 1 鎴愬姛鑾峰彇鍒版祦鎺у抚 * @retval 0 鏈幏鍙栧埌娴佹帶甯 */ uint8_t CAN_UDS_WaitFC(UDS_FC_HEAD *pUDSFC,int TimeOut) { 1274: bf 5f PUSH {R6-R11,LR} 1276: e0 34 SUB SP, #64 1278: 00 59 MOV R8, R0 127a: c1 58 MOV R6, R1 127c: 18 40 LD R0, [PC + #24] ;->0x12dc :=0x1214 127e: 20 59 MOV R9, R0 ..\can_uds.c:56 DataIndex = 0; if(UDS_ADDR_FORMATS!=NORMAL){ uint8_t AddrExt = buffer[DataIndex++]; } uint8_t PCI = buffer[DataIndex++]; pUDSFC->PCIBits.FC_FS = PCI&0xF; 1280: 7f 10 MOV R7, #15 ..\can_uds.c:57 pUDSFC->PCIBits.PCIType = (PCI>>4)&0xF; 1282: 17 68 NOT R1, R7 1284: 61 59 MOV R11, R1 ..\can_uds.c:68 }else if(pUDSFC->PCIBits.FC_FS==2){ return 0; } } } systick_delay_ms(1); 1286: 17 42 LD R2, [PC + #23] ;->0x12e0 :=0x1f88 1288: 42 59 MOV R10, R2 128a: 06 04 SJMP $+6 ;->0x1296 128c: 01 10 MOV R0, #1 128e: 0a 5c LJMP R10 ..\can_uds.c:69 TimeOut--; 1290: 76 cc SUB R6, R6, #1 ..\can_uds.c:70 }while(TimeOut>0); 1292: 60 38 CMP R6, #0 1294: 1f fd JLE $+31 ;->0x12d2 ..\can_uds.c:49 uint8_t CAN_UDS_WaitFC(UDS_FC_HEAD *pUDSFC,int TimeOut) { do{ uint8_t buffer[64]; int DataIndex = 0; int DataLen = CAN_UDS_GetMsg(buffer); 1296: 0e 58 MOV R0, SP 1298: 09 5c LJMP R9 ..\can_uds.c:50 if(((UDS_ADDR_FORMATS==NORMAL)&&(DataLen >= 3))||((UDS_ADDR_FORMATS!=NORMAL)&&(DataLen >= 4))){ 129a: 02 38 CMP R0, #2 129c: f8 fd JLE $-8 ;->0x128c ..\can_uds.c:55 DataIndex = 0; if(UDS_ADDR_FORMATS!=NORMAL){ uint8_t AddrExt = buffer[DataIndex++]; } uint8_t PCI = buffer[DataIndex++]; 129e: 4e 80 LD.B R4, [SP] ..\can_uds.c:56 pUDSFC->PCIBits.FC_FS = PCI&0xF; 12a0: dc d5 ANL R3, R4, R7 12a2: 54 10 MOV R5, #4 12a4: 53 db LSL R2, R3, R5 12a6: 58 80 LD.B R5, [R8] 12a8: ed d5 ANL R5, R5, R7 ..\can_uds.c:57 pUDSFC->PCIBits.PCIType = (PCI>>4)&0xF; 12aa: 24 7c LSR R4, #4 12ac: e4 d5 ANL R4, R4, R7 12ae: ad d6 ORL R5, R5, R2 12b0: 5b 69 ANL R5, R11 12b2: 2d d7 ORL R5, R5, R4 12b4: 85 83 ST.B [R8], R5 ..\can_uds.c:58 pUDSFC->FC_BS = buffer[DataIndex++]; 12b6: 81 e1 LD.B R4, [SP + #1] 12b8: 08 58 MOV R0, R8 12ba: 44 90 ST.B [R0 + #1], R4 ..\can_uds.c:59 pUDSFC->FC_STmin = buffer[DataIndex++]; 12bc: 82 e1 LD.B R4, [SP + #2] 12be: 84 90 ST.B [R0 + #2], R4 ..\can_uds.c:60 if((pUDSFC->PCIBits.PCIType==UDS_FC)&&(pUDSFC->PCIBits.FC_FS < 3)){ 12c0: e5 d5 ANL R4, R5, R7 12c2: 43 38 CMP R4, #3 12c4: e4 f1 JNZ $-28 ;->0x128c 12c6: 32 38 CMP R3, #2 12c8: e2 fc JGT $-30 ;->0x128c ..\can_uds.c:61 if(pUDSFC->PCIBits.FC_FS==0){ 12ca: 5b 69 ANL R5, R11 12cc: 0c f0 JZ $+12 ;->0x12e4 ..\can_uds.c:63 return 1; }else if(pUDSFC->PCIBits.FC_FS==2){ 12ce: 50 3a CMP R5, #32 12d0: de f1 JNZ $-34 ;->0x128c ..\can_uds.c:64 return 0; 12d2: 00 10 MOV R0, #0 ..\can_uds.c:72 } systick_delay_ms(1); TimeOut--; }while(TimeOut>0); return 0; } 12d4: e0 2c ADD SP, #64 12d6: 3f 5e POP {R6-R11} 12d8: 0d 5d POP LR 12da: 1d 5c JMP LR 12dc: 14 12 00 00 .long 0x00001214 ->000004628 [!!!@2@:MOV R1, #36 @@: NOP 12e0: 88 1f 00 00 .long 0x00001f88 ->000008072 [!!!@2@:MOV R8, #248 @@: NOP ..\can_uds.c:62 pUDSFC->PCIBits.PCIType = (PCI>>4)&0xF; pUDSFC->FC_BS = buffer[DataIndex++]; pUDSFC->FC_STmin = buffer[DataIndex++]; if((pUDSFC->PCIBits.PCIType==UDS_FC)&&(pUDSFC->PCIBits.FC_FS < 3)){ if(pUDSFC->PCIBits.FC_FS==0){ return 1; 12e4: 01 10 MOV R0, #1 12e6: f7 07 SJMP $-9 ;->0x12d4 000012e8 : CAN_UDS_SendData(): ..\can_uds.c:364 * @return 鍙戦佺姸鎬 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_SendData(uint8_t *pCANData,uint8_t DataLen) { 12e8: 87 5f PUSH {R6-R8,LR} 12ea: 00 59 MOV R8, R0 12ec: 71 d1 ZXT.B R7, R1 ..\can_uds.c:366 //璋冪敤CAN椹卞姩灞傚嚱鏁板彂閫丆AN鏁版嵁 CAN_MSG *pMsg = CAN_BUF_PickMsg(0); 12ee: 00 10 MOV R0, #0 12f0: 12 45 LD R5, [PC + #18] ;->0x1338 :=0xc7c 12f2: 05 5c LJMP R5 12f4: c0 58 MOV R6, R0 ..\can_uds.c:367 pMsg->Flags.DIR = 1; 12f6: 60 98 LD.W R4, [R0 + #1] 12f8: 22 48 SET R4, #2 ..\can_uds.c:369 pMsg->Flags.RTR = 0; pMsg->ID = RSP_ADDR_ID; 12fa: 11 45 LD R5, [PC + #17] ;->0x133c :=0x701 12fc: 05 85 ST.W [R0], R5 ..\can_uds.c:375 if(MSG_ID_TYPE==0){ pMsg->Flags.IDE = 0; }else{ pMsg->Flags.IDE = 1; } pMsg->Flags.DLC = 8; 12fe: 5b 17 MOV R5, #123 1300: 55 68 NOT R5, R5 1302: 6c d5 ANL R5, R4, R5 1304: 2e 48 SET R5, #6 1306: 45 a0 ST.W [R0 + #1], R5 ..\can_uds.c:376 memset(pMsg->Data,0xAA,8); 1308: 40 c1 ADD R0, R0, #5 130a: 5a 1a MOV R5, #170 130c: 75 91 ST.B [R6 + #5], R5 130e: b5 91 ST.B [R6 + #6], R5 1310: f5 91 ST.B [R6 + #7], R5 1312: 35 92 ST.B [R6 + #8], R5 1314: 75 92 ST.B [R6 + #9], R5 1316: b5 92 ST.B [R6 + #10], R5 1318: f5 92 ST.B [R6 + #11], R5 131a: 35 93 ST.B [R6 + #12], R5 ..\can_uds.c:377 memcpy(pMsg->Data,pCANData,(DataLen>8)?8:DataLen); 131c: 28 10 MOV R2, #8 131e: 72 70 CMP R7, R2 1320: 02 f8 JHI $+2 ;->0x1324 1322: 47 58 MOV R2, R7 1324: 28 58 MOV R1, R8 1326: 07 45 LD R5, [PC + #7] ;->0x1340 :=0x22a8 1328: 05 5c LJMP R5 ..\can_uds.c:378 return CAN_WriteData(0,pMsg); 132a: 00 10 MOV R0, #0 132c: 26 58 MOV R1, R6 132e: 06 45 LD R5, [PC + #6] ;->0x1344 :=0x1198 1330: 05 5c LJMP R5 ..\can_uds.c:379 } 1332: 07 5e POP {R6-R8} 1334: 0d 5d POP LR 1336: 1d 5c JMP LR 1338: 7c 0c 00 00 .long 0x00000c7c ->000003196 [!!!@2@:LD.W R4, [SP + #124] @@: NOP 133c: 01 07 00 00 .long 0x00000701 ->000001793 [!!!@2@:SJMP $-255 ;->0x113e @@: NOP 1340: a8 22 00 00 .long 0x000022a8 ->000008872 [!!!@2@:ST.W [SP + #168], R2 @@: NOP 1344: 98 11 00 00 .long 0x00001198 ->000004504 [!!!@2@:MOV R9, #24 @@: NOP 00001348 : CAN_UDS_ServiceRespond(): ..\can_uds.c:83 * @return 鍝嶅簲鐘舵 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_ServiceRespond(uint8_t RSID,uint8_t *pData,uint32_t DataLen) { 1348: ff 5f PUSH {R6-R12,LR} 134a: e8 34 SUB SP, #72 134c: c2 58 MOV R6, R2 134e: 00 d1 ZXT.B R0, R0 ..\can_uds.c:106 MaxSFDataLen = UDS_MAX_DLC-2; MaxFFDataLen = UDS_MAX_DLC-3; MaxCFDataLen = UDS_MAX_DLC-2; buffer[DataIndex++] = UDS_EXT_ADDR; } if((DataLen+1) <= MaxSFDataLen){//SF 1350: 6a c0 ADD R5, R2, #1 1352: 57 38 CMP R5, #7 1354: 1c f8 JHI $+28 ;->0x138c ..\can_uds.c:107 buffer[DataIndex++] = DataLen+1;//PCI 1356: e5 83 ST.B [SP], R5 ..\can_uds.c:108 buffer[DataIndex++] = RSID; 1358: 01 e3 ST.B [SP + #1], R0 ..\can_uds.c:109 for(int i=0;i0x1360 135e: 93 04 SJMP $+147 ;->0x1484 1360: e1 58 MOV R7, R1 1362: 4e 58 MOV R2, SP 1364: aa c0 ADD R5, R2, #2 ..\can_uds.c:82 * @param DataLen 鍝嶅簲鏁版嵁瀛楄妭鏁 * @return 鍝嶅簲鐘舵 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_ServiceRespond(uint8_t RSID,uint8_t *pData,uint32_t DataLen) 1366: 99 c3 ADD R3, R1, R6 ..\can_uds.c:110 } if((DataLen+1) <= MaxSFDataLen){//SF buffer[DataIndex++] = DataLen+1;//PCI buffer[DataIndex++] = RSID; for(int i=0;i0x1368 1370: 8e c0 ADD R1, R6, #2 1372: 11 d1 ZXT.B R1, R1 ..\can_uds.c:112 buffer[DataIndex++] = *pData++; } uint8_t ret = CAN_UDS_SendData(buffer,DataIndex); 1374: 0e 58 MOV R0, SP 1376: 05 45 LD R5, [PC + #5] ;->0x1388 :=0x12e8 1378: 05 5c LJMP R5 ..\can_uds.c:113 if(!ret){ 137a: 50 10 MOV R5, #0 137c: 05 c6 SUB R0, R5, R0 137e: 87 7d LSR R0, #31 ..\can_uds.c:175 } } } } return 1; } 1380: e8 2c ADD SP, #72 1382: 7f 5e POP {R6-R12} 1384: 0d 5d POP LR 1386: 1d 5c JMP LR 1388: e8 12 00 00 .long 0x000012e8 ->000004840 [!!!@2@:MOV SP, #40 @@: NOP ..\can_uds.c:119 return ret; } }else{//FF+CF UDS_FC_HEAD UDSFC; //FF buffer[DataIndex++] = (UDS_FF<<4)|(((DataLen+1)>>8)&0xF);//PCI 138c: 48 10 MOV R4, #8 138e: 1d dd LSR R3, R5, R4 1390: 4f 10 MOV R4, #15 1392: 23 d5 ANL R4, R3, R4 1394: 24 48 SET R4, #4 1396: e4 83 ST.B [SP], R4 ..\can_uds.c:120 buffer[DataIndex++] = (DataLen+1)&0xFF; 1398: a1 e3 ST.B [SP + #1], R5 ..\can_uds.c:121 buffer[DataIndex++] = RSID; 139a: 02 e3 ST.B [SP + #2], R0 139c: 81 58 MOV R4, R1 139e: 4e 58 MOV R2, SP 13a0: ea c0 ADD R5, R2, #3 ..\can_uds.c:82 * @param DataLen 鍝嶅簲鏁版嵁瀛楄妭鏁 * @return 鍝嶅簲鐘舵 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_ServiceRespond(uint8_t RSID,uint8_t *pData,uint32_t DataLen) 13a2: 28 28 ADD R2, #8 ..\can_uds.c:123 //FF buffer[DataIndex++] = (UDS_FF<<4)|(((DataLen+1)>>8)&0xF);//PCI buffer[DataIndex++] = (DataLen+1)&0xFF; buffer[DataIndex++] = RSID; for(int i=0;i<(MaxFFDataLen-1);i++){ buffer[DataIndex++] = *pData++; 13a4: 34 76 LD.B R3, [R4++] 13a6: 53 77 ST.B [R5++], R3 ..\can_uds.c:122 UDS_FC_HEAD UDSFC; //FF buffer[DataIndex++] = (UDS_FF<<4)|(((DataLen+1)>>8)&0xF);//PCI buffer[DataIndex++] = (DataLen+1)&0xFF; buffer[DataIndex++] = RSID; for(int i=0;i<(MaxFFDataLen-1);i++){ 13a8: 52 70 CMP R5, R2 13aa: fd f1 JNZ $-3 ;->0x13a4 13ac: 79 c1 ADD R7, R1, #5 ..\can_uds.c:125 buffer[DataIndex++] = *pData++; } uint8_t ret = CAN_UDS_SendData(buffer,DataIndex); 13ae: 0e 58 MOV R0, SP 13b0: 18 10 MOV R1, #8 13b2: 06 43 LD R3, [PC + #6] ;->0x13c8 :=0x12e8 13b4: 23 59 MOV R9, R3 13b6: 03 5c LJMP R3 ..\can_uds.c:126 if(!ret){ 13b8: 00 38 CMP R0, #0 13ba: 09 f1 JNZ $+9 ;->0x13cc 13bc: 00 10 MOV R0, #0 ..\can_uds.c:175 } } } } return 1; } 13be: e8 2c ADD SP, #72 13c0: 7f 5e POP {R6-R12} 13c2: 0d 5d POP LR 13c4: 1d 5c JMP LR 13c6: 00 00 NOP NOP 13c8: e8 12 00 00 .long 0x000012e8 ->000004840 [!!!@2@:MOV SP, #40 @@: NOP ..\can_uds.c:131 if(!ret){ return ret; } DataLen -= (MaxFFDataLen-1); //绛夊緟FC ret = CAN_UDS_WaitFC(&UDSFC,1000); 13cc: 0e 58 MOV R0, SP 13ce: 00 2c ADD R0, #64 13d0: 2f 41 LD R1, [PC + #47] ;->0x148c :=0x3e8 13d2: 30 44 LD R4, [PC + #48] ;->0x1490 :=0x1274 13d4: 04 5c LJMP R4 ..\can_uds.c:132 if(!ret){ 13d6: 00 38 CMP R0, #0 13d8: f2 f0 JZ $-14 ;->0x13bc ..\can_uds.c:129 } uint8_t ret = CAN_UDS_SendData(buffer,DataIndex); if(!ret){ return ret; } DataLen -= (MaxFFDataLen-1); 13da: 76 cd SUB R6, R6, #5 13dc: 06 59 MOV R8, R6 ..\can_uds.c:140 //鍙戦丆F int di=0; int CFNum=0; uint8_t CF_SN=1; for(di=0;diDataLen)?(DataLen%MaxCFDataLen):MaxCFDataLen; 13de: 57 10 MOV R5, #7 13e0: 66 d3 DIVU R4, R6, R5 13e2: 6c cb MULS R5, R4, R5 13e4: 00 00 NOP NOP 13e6: 56 c7 SUB R2, R6, R5 13e8: 62 59 MOV R11, R2 13ea: c1 10 MOV R12, #1 13ec: 40 10 MOV R4, #0 13ee: 11 24 ST.W [SP + #17], R4 13f0: 44 59 MOV R10, R4 ..\can_uds.c:139 } //鍙戦丆F int di=0; int CFNum=0; uint8_t CF_SN=1; for(di=0;di0x1480 13f6: 6a 58 MOV R3, R10 13f8: eb c1 ADD R5, R3, #7 ..\can_uds.c:140 int SendDataNum = ((di+MaxCFDataLen)>DataLen)?(DataLen%MaxCFDataLen):MaxCFDataLen; 13fa: 58 70 CMP R5, R8 13fc: 05 f9 JLS $+5 ;->0x1406 ..\can_uds.c:141 if(SendDataNum > 0){ 13fe: b0 38 CMP R11, #0 1400: fd f0 JZ $-3 ;->0x13fa 1402: cb 58 MOV R6, R11 1404: 02 04 SJMP $+2 ;->0x1408 ..\can_uds.c:140 //鍙戦丆F int di=0; int CFNum=0; uint8_t CF_SN=1; for(di=0;diDataLen)?(DataLen%MaxCFDataLen):MaxCFDataLen; 1406: 67 10 MOV R6, #7 ..\can_uds.c:146 if(SendDataNum > 0){ DataIndex = 0; if(UDS_ADDR_FORMATS!=NORMAL){ buffer[DataIndex++] = UDS_EXT_ADDR; } buffer[DataIndex++] = (UDS_CF<<4)|(CF_SN&0xF);//PCI 1408: 4c 58 MOV R2, R12 140a: 3f 10 MOV R3, #15 140c: ea d4 ANL R5, R2, R3 140e: 2d 48 SET R5, #5 1410: e5 83 ST.B [SP], R5 ..\can_uds.c:147 for(int i=0;i 0){ DataIndex = 0; if(UDS_ADDR_FORMATS!=NORMAL){ buffer[DataIndex++] = UDS_EXT_ADDR; } buffer[DataIndex++] = (UDS_CF<<4)|(CF_SN&0xF);//PCI 1414: 11 10 MOV R1, #1 ..\can_uds.c:148 for(int i=0;i0x1416 ..\can_uds.c:82 * @param DataLen 鍝嶅簲鏁版嵁瀛楄妭鏁 * @return 鍝嶅簲鐘舵 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_ServiceRespond(uint8_t RSID,uint8_t *pData,uint32_t DataLen) 1426: a6 58 MOV R5, R6 1428: 60 38 CMP R6, #0 142a: 2f fd JLE $+47 ;->0x1488 142c: 7f c3 ADD R7, R7, R5 ..\can_uds.c:150 } buffer[DataIndex++] = (UDS_CF<<4)|(CF_SN&0xF);//PCI for(int i=0;i0x13bc ..\can_uds.c:154 return ret; } CF_SN++; 1438: c1 28 ADD R12, #1 143a: cc d1 ZXT.B R12, R12 ..\can_uds.c:155 CFNum++; 143c: 11 0b LD.W R3, [SP + #17] 143e: 5b c0 ADD R3, R3, #1 1440: 11 23 ST.W [SP + #17], R3 ..\can_uds.c:156 di += SendDataNum; 1442: a6 64 ADD R10, R6 ..\can_uds.c:157 if((UDSFC.FC_STmin>=1)&&(UDSFC.FC_STmin<=127)){ 1444: 42 14 MOV R4, #66 1446: 4e 64 ADD R4, SP 1448: 44 80 LD.B R4, [R4] 144a: 04 d1 ZXT.B R0, R4 144c: 50 62 SXT.B R5, R0 144e: 50 38 CMP R5, #0 1450: 03 fd JLE $+3 ;->0x1456 ..\can_uds.c:158 systick_delay_ms(UDSFC.FC_STmin); 1452: 11 45 LD R5, [PC + #17] ;->0x1494 :=0x1f88 1454: 05 5c LJMP R5 ..\can_uds.c:161 } //鍐嶆璁$畻涓嬫鍙戦佸瓧鑺傛暟锛岀湅鏄惁澶т簬0 if((UDSFC.FC_BS > 0)&&(di < DataLen)){ 1456: 21 14 MOV R2, #65 1458: 2e 64 ADD R2, SP 145a: 22 80 LD.B R2, [R2] 145c: 52 d1 ZXT.B R5, R2 145e: 50 38 CMP R5, #0 1460: c9 f0 JZ $-55 ;->0x13f2 1462: 8a 70 CMP R8, R10 1464: 0e f9 JLS $+14 ;->0x1480 ..\can_uds.c:162 if(CFNum == UDSFC.FC_BS){ 1466: 11 0b LD.W R3, [SP + #17] 1468: 53 70 CMP R5, R3 146a: c4 f1 JNZ $-60 ;->0x13f2 ..\can_uds.c:164 //绛夊緟FC ret = CAN_UDS_WaitFC(&UDSFC,1000); 146c: 0e 58 MOV R0, SP 146e: 00 2c ADD R0, #64 1470: 07 41 LD R1, [PC + #7] ;->0x148c :=0x3e8 1472: 08 44 LD R4, [PC + #8] ;->0x1490 :=0x1274 1474: 04 5c LJMP R4 ..\can_uds.c:165 if(!ret){ 1476: 00 38 CMP R0, #0 1478: a2 f0 JZ $-94 ;->0x13bc ..\can_uds.c:168 return ret; } CFNum = 0; 147a: 20 10 MOV R2, #0 147c: 11 22 ST.W [SP + #17], R2 147e: ba 07 SJMP $-70 ;->0x13f2 ..\can_uds.c:174 } } } } } return 1; 1480: 01 10 MOV R0, #1 1482: 7f 07 SJMP $-129 ;->0x1380 ..\can_uds.c:109 buffer[DataIndex++] = UDS_EXT_ADDR; } if((DataLen+1) <= MaxSFDataLen){//SF buffer[DataIndex++] = DataLen+1;//PCI buffer[DataIndex++] = RSID; for(int i=0;i0x1374 ..\can_uds.c:82 * @param DataLen 鍝嶅簲鏁版嵁瀛楄妭鏁 * @return 鍝嶅簲鐘舵 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_ServiceRespond(uint8_t RSID,uint8_t *pData,uint32_t DataLen) 1488: 51 10 MOV R5, #1 148a: d1 07 SJMP $-47 ;->0x142c 148c: e8 03 00 00 .long 0x000003e8 ->000001000 [!!!@4@:JMP $-1572864 ;->0xffd0148c 1490: 74 12 00 00 .long 0x00001274 ->000004724 [!!!@2@:MOV R7, #36 @@: NOP 1494: 88 1f 00 00 .long 0x00001f88 ->000008072 [!!!@2@:MOV R8, #248 @@: NOP 00001498 : CAN_UDS_ServiceProcess(): ..\can_uds.c:186 * @return 鍑芥暟鎵ц鐘舵 * @retval 1 鎴愬姛 * @retval 0 澶辫触 */ uint8_t CAN_UDS_ServiceProcess(uint8_t SID,uint8_t *pData,uint32_t DataLen) { 1498: bf 5f PUSH {R6-R11,LR} 149a: e4 30 SUB SP, #4 149c: e1 58 MOV R7, R1 149e: 02 59 MOV R8, R2 14a0: 60 d1 ZXT.B R6, R0 ..\can_uds.c:194 static uint32_t AppCRC32=0xFFFFFFFF; //static uint8_t DataBuffer[1024+2]; static uint8_t FirstCRC=1; const uint32_t BlockSize = UDS_PACK_SIZE+2;//Max Number Of Block Length,闇瑕佸姞涓奡ID鍜孊SC static uint8_t BSC=1;//Block Sequence Counter switch(SID) 14a2: 61 3b CMP R6, #49 14a4: 02 f1 JNZ $+2 ;->0x14a8 14a6: dd 04 SJMP $+221 ;->0x1660 14a8: 61 3b CMP R6, #49 14aa: 16 f9 JLS $+22 ;->0x14d6 14ac: 66 3b CMP R6, #54 14ae: 5b f0 JZ $+91 ;->0x1564 14b0: 66 3b CMP R6, #54 14b2: 29 f9 JLS $+41 ;->0x1504 14b4: 67 3b CMP R6, #55 14b6: 02 f1 JNZ $+2 ;->0x14ba 14b8: aa 04 SJMP $+170 ;->0x160c 14ba: 55 18 MOV R5, #133 14bc: 65 70 CMP R6, R5 14be: 25 f1 JNZ $+37 ;->0x1508 ..\can_uds.c:320 pData[1] = 0x13;//Incorrect Message Length Or Invalid Format CAN_UDS_ServiceRespond(0x7F,pData,2); } break; case 0x85://ControlDTCSetting (0x85) service if(DataLen>=1){ 14c0: 20 38 CMP R2, #0 14c2: 23 f0 JZ $+35 ;->0x1508 ..\can_uds.c:321 printf("ControlDTCSetting\r\n"); 14c4: 14 40 LD R0, [PC + #20] ;->0x1514 :=0x2bc0 14c6: 15 45 LD R5, [PC + #21] ;->0x1518 :=0x1fc4 14c8: 05 5c LJMP R5 ..\can_uds.c:322 CAN_UDS_ServiceRespond(SID|0x40,pData,DataLen); 14ca: 05 1c MOV R0, #197 14cc: 27 58 MOV R1, R7 14ce: 48 58 MOV R2, R8 14d0: 13 45 LD R5, [PC + #19] ;->0x151c :=0x1348 14d2: 05 5c LJMP R5 14d4: 1a 04 SJMP $+26 ;->0x1508 ..\can_uds.c:194 static uint32_t AppCRC32=0xFFFFFFFF; //static uint8_t DataBuffer[1024+2]; static uint8_t FirstCRC=1; const uint32_t BlockSize = UDS_PACK_SIZE+2;//Max Number Of Block Length,闇瑕佸姞涓奡ID鍜孊SC static uint8_t BSC=1;//Block Sequence Counter switch(SID) 14d6: 61 39 CMP R6, #17 14d8: 02 f1 JNZ $+2 ;->0x14dc 14da: af 04 SJMP $+175 ;->0x1638 14dc: 61 39 CMP R6, #17 14de: 23 f9 JLS $+35 ;->0x1524 14e0: 67 3a CMP R6, #39 14e2: 7f f0 JZ $+127 ;->0x15e0 14e4: 68 3a CMP R6, #40 14e6: 11 f1 JNZ $+17 ;->0x1508 ..\can_uds.c:326 printf("ControlDTCSetting\r\n"); CAN_UDS_ServiceRespond(SID|0x40,pData,DataLen); } break; case 0x28://CommunicationControl (0x28) service if((DataLen>=1)&&(pData[0]==0x03)){//绂佹闈炶瘖鏂姤鏂囩殑鍙戦佸拰鎺ユ敹 14e8: 20 38 CMP R2, #0 14ea: 0f f0 JZ $+15 ;->0x1508 14ec: 51 80 LD.B R5, [R1] 14ee: 53 38 CMP R5, #3 14f0: 0c f1 JNZ $+12 ;->0x1508 ..\can_uds.c:327 printf("CommunicationControl\r\n"); 14f2: 0c 40 LD R0, [PC + #12] ;->0x1520 :=0x2bd4 14f4: 09 45 LD R5, [PC + #9] ;->0x1518 :=0x1fc4 14f6: 05 5c LJMP R5 ..\can_uds.c:328 CAN_UDS_ServiceRespond(SID|0x40,pData,DataLen); 14f8: 08 16 MOV R0, #104 14fa: 27 58 MOV R1, R7 14fc: 48 58 MOV R2, R8 14fe: 08 45 LD R5, [PC + #8] ;->0x151c :=0x1348 1500: 05 5c LJMP R5 1502: 03 04 SJMP $+3 ;->0x1508 ..\can_uds.c:194 static uint32_t AppCRC32=0xFFFFFFFF; //static uint8_t DataBuffer[1024+2]; static uint8_t FirstCRC=1; const uint32_t BlockSize = UDS_PACK_SIZE+2;//Max Number Of Block Length,闇瑕佸姞涓奡ID鍜孊SC static uint8_t BSC=1;//Block Sequence Counter switch(SID) 1504: 64 3b CMP R6, #52 1506: 45 f0 JZ $+69 ;->0x1590 ..\can_uds.c:353 break; default: break; } return 1; } 1508: 01 10 MOV R0, #1 150a: e4 28 ADD SP, #4 150c: 3f 5e POP {R6-R11} 150e: 0d 5d POP LR 1510: 1d 5c JMP LR 1512: 00 00 NOP NOP 1514: c0 2b 00 00 .long 0x00002bc0 ->000011200 [!!!@2@:ADD R12, #48 @@: NOP 1518: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 151c: 48 13 00 00 .long 0x00001348 ->000004936 [!!!@2@:MOV R4, #56 @@: NOP 1520: d4 2b 00 00 .long 0x00002bd4 ->000011220 [!!!@2@:ADD LR, #52 @@: NOP ..\can_uds.c:194 static uint32_t AppCRC32=0xFFFFFFFF; //static uint8_t DataBuffer[1024+2]; static uint8_t FirstCRC=1; const uint32_t BlockSize = UDS_PACK_SIZE+2;//Max Number Of Block Length,闇瑕佸姞涓奡ID鍜孊SC static uint8_t BSC=1;//Block Sequence Counter switch(SID) 1524: 60 39 CMP R6, #16 1526: f1 f1 JNZ $-15 ;->0x1508 ..\can_uds.c:197 { case 0x10: if((DataLen>=1)&&(pData[0]==0x03)){//extendedDiagnosticSession 1528: 20 38 CMP R2, #0 152a: ef f0 JZ $-17 ;->0x1508 152c: 51 80 LD.B R5, [R1] 152e: 53 38 CMP R5, #3 1530: 02 f1 JNZ $+2 ;->0x1534 1532: 05 05 SJMP $+261 ;->0x173c ..\can_uds.c:201 printf("Extended Diagnostic Session\r\n"); CAN_UDS_ServiceRespond(SID|0x40,pData,1); } else if((DataLen>=1)&&(pData[0]==0x02)){//Programming Mode 1534: 52 38 CMP R5, #2 1536: e9 f1 JNZ $-23 ;->0x1508 ..\can_uds.c:202 AppCRC32=0xFFFFFFFF; 1538: 40 10 MOV R4, #0 153a: 44 68 NOT R4, R4 153c: 1f 45 LD R5, [PC + #31] ;->0x15b8 :=0x10000048 153e: 54 85 ST.W [R5], R4 ..\can_uds.c:203 FirstCRC = 1; 1540: 81 10 MOV R8, #1 1542: 1f 45 LD R5, [PC + #31] ;->0x15bc :=0x1000004c 1544: 58 83 ST.B [R5], R8 ..\can_uds.c:204 printf("Programming Mode\r\n"); 1546: 1f 40 LD R0, [PC + #31] ;->0x15c0 :=0x2ab0 1548: 1f 46 LD R6, [PC + #31] ;->0x15c4 :=0x1fc4 154a: 06 5c LJMP R6 ..\can_uds.c:205 CAN_UDS_ServiceRespond(SID|0x40,pData,1); 154c: 00 15 MOV R0, #80 154e: 27 58 MOV R1, R7 1550: 48 58 MOV R2, R8 1552: 1e 45 LD R5, [PC + #30] ;->0x15c8 :=0x1348 1554: 05 5c LJMP R5 ..\can_uds.c:206 CAN_BOOT_SetProgRequest(); 1556: 1e 45 LD R5, [PC + #30] ;->0x15cc :=0xb34 1558: 05 5c LJMP R5 ..\can_uds.c:207 printf("ECU Reset\r\n"); 155a: 1e 40 LD R0, [PC + #30] ;->0x15d0 :=0x2ac4 155c: 06 5c LJMP R6 ..\can_uds.c:208 CAN_BOOT_Reset(); 155e: 1e 45 LD R5, [PC + #30] ;->0x15d4 :=0xc00 1560: 05 5c LJMP R5 1562: d3 07 SJMP $-45 ;->0x1508 ..\can_uds.c:284 pData[1] = 0x13; CAN_UDS_ServiceRespond(0x7F,pData,2); } break; case 0x36: if(DataLen>=2){//Transfer Data 1564: 21 38 CMP R2, #1 1566: 02 f8 JHI $+2 ;->0x156a 1568: 55 05 SJMP $+341 ;->0x1812 ..\can_uds.c:286 //printf("Transfer Data BSC=%d\r\n",BSC); if(pData[0]==BSC){ 156a: 1c 45 LD R5, [PC + #28] ;->0x15d8 :=0x1000004d 156c: 25 59 MOV R9, R5 156e: 41 80 LD.B R4, [R1] 1570: 55 80 LD.B R5, [R5] 1572: 45 70 CMP R4, R5 1574: 02 f1 JNZ $+2 ;->0x1578 1576: f2 04 SJMP $+242 ;->0x175a ..\can_uds.c:308 //printf("Transfer Data BSC=%d AppCRC=%08X\r\n",BSC,AppCRC32); printf("Write Data To Flash Addr=%08X\r\n",MemoryAddress+AddrOffset); //printf("AppCRC=%08X\r\n",AppCRC32); BSC++; }else{ pData[0] = SID; 1578: 16 83 ST.B [R1], R6 ..\can_uds.c:309 pData[1] = 0x73;//Wrong Block Sequence Counter 157a: 53 17 MOV R5, #115 157c: 4d 90 ST.B [R1 + #1], R5 ..\can_uds.c:310 CAN_UDS_ServiceRespond(0x7F,pData,2); 157e: 0f 17 MOV R0, #127 1580: 22 10 MOV R2, #2 1582: 12 45 LD R5, [PC + #18] ;->0x15c8 :=0x1348 1584: 05 5c LJMP R5 ..\can_uds.c:311 printf("Transfer Data BSC=%d\r\n",BSC); 1586: 16 40 LD R0, [PC + #22] ;->0x15dc :=0x2ba8 1588: 19 80 LD.B R1, [R9] 158a: 0f 45 LD R5, [PC + #15] ;->0x15c4 :=0x1fc4 158c: 05 5c LJMP R5 158e: bd 07 SJMP $-67 ;->0x1508 ..\can_uds.c:257 pData[1] = 0x73;//Wrong Block Sequence Counter CAN_UDS_ServiceRespond(0x7F,pData,2); } break; case 0x34: if((DataLen>=10)&&(pData[0]==0x00)&&(pData[1]==0x44)){//Request Download 1590: 29 38 CMP R2, #9 1592: 70 f9 JLS $+112 ;->0x1672 1594: 61 80 LD.B R6, [R1] 1596: 60 38 CMP R6, #0 1598: 02 f1 JNZ $+2 ;->0x159c 159a: 92 04 SJMP $+146 ;->0x16be ..\can_uds.c:278 pData[0] = 0x20; pData[1] = BlockSize>>8; pData[2] = BlockSize; CAN_UDS_ServiceRespond(SID|0x40,pData,3); }else{ pData[0] = SID; 159c: 54 13 MOV R5, #52 159e: 75 83 ST.B [R7], R5 ..\can_uds.c:279 pData[1] = 0x13; 15a0: 53 11 MOV R5, #19 15a2: 7d 90 ST.B [R7 + #1], R5 ..\can_uds.c:280 CAN_UDS_ServiceRespond(0x7F,pData,2); 15a4: 0f 17 MOV R0, #127 15a6: 27 58 MOV R1, R7 15a8: 22 10 MOV R2, #2 15aa: 08 45 LD R5, [PC + #8] ;->0x15c8 :=0x1348 15ac: 05 5c LJMP R5 ..\can_uds.c:353 break; default: break; } return 1; } 15ae: 01 10 MOV R0, #1 15b0: e4 28 ADD SP, #4 15b2: 3f 5e POP {R6-R11} 15b4: 0d 5d POP LR 15b6: 1d 5c JMP LR 15b8: 48 00 00 10 .long 0x10000048 ->268435528 [!!!@4@:LD.H R0, [R0 + #4] 15bc: 4c 00 00 10 .long 0x1000004c ->268435532 [!!!@4@:LD.H R0, [R0 + #-252] 15c0: b0 2a 00 00 .long 0x00002ab0 ->000010928 [!!!@2@:ADD R11, #32 @@: NOP 15c4: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 15c8: 48 13 00 00 .long 0x00001348 ->000004936 [!!!@2@:MOV R4, #56 @@: NOP 15cc: 34 0b 00 00 .long 0x00000b34 ->000002868 [!!!@2@:LD.W R3, [SP + #52] @@: NOP 15d0: c4 2a 00 00 .long 0x00002ac4 ->000010948 [!!!@2@:ADD R12, #36 @@: NOP 15d4: 00 0c 00 00 .long 0x00000c00 ->000003072 [!!!@2@:LD.W R4, [SP + #0] @@: NOP 15d8: 4d 00 00 10 .long 0x1000004d ->268435533 [!!!@4@:LD.H R0, [R0 + #-188] 15dc: a8 2b 00 00 .long 0x00002ba8 ->000011176 [!!!@2@:ADD R10, #56 @@: NOP ..\can_uds.c:332 printf("CommunicationControl\r\n"); CAN_UDS_ServiceRespond(SID|0x40,pData,DataLen); } break; case 0x27://SecurityAccess (0x27) service printf("SecurityAccess\r\n"); 15e0: 12 40 LD R0, [PC + #18] ;->0x1628 :=0x2bec 15e2: 13 45 LD R5, [PC + #19] ;->0x162c :=0x1fc4 15e4: 05 5c LJMP R5 ..\can_uds.c:333 if(pData[0]==0x01){ 15e6: 57 80 LD.B R5, [R7] 15e8: 51 38 CMP R5, #1 15ea: 02 f1 JNZ $+2 ;->0x15ee 15ec: 05 05 SJMP $+261 ;->0x17f6 ..\can_uds.c:336 pData[1] = 0x11;pData[2] = 0x22;pData[3] = 0x33;pData[4] = 0x44;//杩斿洖绉嶅瓙锛屽彲鏍规嵁瀹為檯鎯呭喌淇敼 CAN_UDS_ServiceRespond(SID|0x40,pData,5); }else if(pData[0]==0x02){ 15ee: 52 38 CMP R5, #2 15f0: 8c f1 JNZ $-116 ;->0x1508 ..\can_uds.c:337 if(((pData[1]^0x11)==0xFF)&&((pData[2]^0x22)==0xFF)&&((pData[3]^0x33)==0xFF)&&((pData[4]^0x44)==0xFF)){//鍒ゆ柇绉橀挜鏄惁姝g‘ 15f2: 67 88 LD.B R4, [R7 + #1] 15f4: 5e 1e MOV R5, #238 15f6: 45 70 CMP R4, R5 15f8: 02 f1 JNZ $+2 ;->0x15fc 15fa: ec 04 SJMP $+236 ;->0x17d2 ..\can_uds.c:340 pData[1] = 0; }else{ pData[1] = 1; 15fc: 51 10 MOV R5, #1 15fe: 7d 90 ST.B [R7 + #1], R5 ..\can_uds.c:342 } CAN_UDS_ServiceRespond(SID|0x40,pData,2); 1600: 07 16 MOV R0, #103 1602: 27 58 MOV R1, R7 1604: 22 10 MOV R2, #2 1606: 0b 45 LD R5, [PC + #11] ;->0x1630 :=0x1348 1608: 05 5c LJMP R5 160a: 7f 07 SJMP $-129 ;->0x1508 ..\can_uds.c:346 } break; case 0x37://Request Transfer Exit printf("Request Transfer Exit\r\n"); 160c: 0a 40 LD R0, [PC + #10] ;->0x1634 :=0x2c00 160e: 08 45 LD R5, [PC + #8] ;->0x162c :=0x1fc4 1610: 05 5c LJMP R5 ..\can_uds.c:347 CAN_UDS_ServiceRespond(SID|0x40,pData,0); 1612: 07 17 MOV R0, #119 1614: 27 58 MOV R1, R7 1616: 20 10 MOV R2, #0 1618: 06 45 LD R5, [PC + #6] ;->0x1630 :=0x1348 161a: 05 5c LJMP R5 ..\can_uds.c:353 break; default: break; } return 1; } 161c: 01 10 MOV R0, #1 161e: e4 28 ADD SP, #4 1620: 3f 5e POP {R6-R11} 1622: 0d 5d POP LR 1624: 1d 5c JMP LR 1626: 00 00 NOP NOP 1628: ec 2b 00 00 .long 0x00002bec ->000011244 [!!!@2@:ADD SP, #60 @@: NOP 162c: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 1630: 48 13 00 00 .long 0x00001348 ->000004936 [!!!@2@:MOV R4, #56 @@: NOP 1634: 00 2c 00 00 .long 0x00002c00 ->000011264 [!!!@2@:ADD R0, #64 @@: NOP ..\can_uds.c:213 CAN_BOOT_Reset(); } break; case 0x11: if((DataLen>=1)&&(pData[0]==0x01)){//ECU Reset 1638: 20 38 CMP R2, #0 163a: 02 f1 JNZ $+2 ;->0x163e 163c: 66 07 SJMP $-154 ;->0x1508 163e: 61 80 LD.B R6, [R1] 1640: 61 38 CMP R6, #1 1642: 02 f0 JZ $+2 ;->0x1646 1644: 62 07 SJMP $-158 ;->0x1508 ..\can_uds.c:214 printf("ECU Reset\r\n"); 1646: a4 40 LD R0, [PC + #164] ;->0x18d4 :=0x2ac4 1648: a4 45 LD R5, [PC + #164] ;->0x18d8 :=0x1fc4 164a: 05 5c LJMP R5 ..\can_uds.c:215 CAN_UDS_ServiceRespond(SID|0x40,pData,1); 164c: 01 15 MOV R0, #81 164e: 27 58 MOV R1, R7 1650: 46 58 MOV R2, R6 1652: a3 45 LD R5, [PC + #163] ;->0x18dc :=0x1348 1654: 05 5c LJMP R5 ..\can_uds.c:216 CAN_BOOT_ResetProgRequest();//娓呴櫎杩涘叆缂栫▼妯″紡鏍囧織 1656: a3 45 LD R5, [PC + #163] ;->0x18e0 :=0xb94 1658: 05 5c LJMP R5 ..\can_uds.c:217 CAN_BOOT_Reset(); 165a: a3 45 LD R5, [PC + #163] ;->0x18e4 :=0xc00 165c: 05 5c LJMP R5 165e: 55 07 SJMP $-171 ;->0x1508 ..\can_uds.c:221 } break; case 0x31: if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x00)){//Erase Flash Memory 1660: 22 38 CMP R2, #2 1662: 76 f9 JLS $+118 ;->0x174e 1664: 51 80 LD.B R5, [R1] 1666: 51 38 CMP R5, #1 1668: 5a f0 JZ $+90 ;->0x171c ..\can_uds.c:251 CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=1)&&(pData[0]==0x01)){ CAN_UDS_ServiceRespond(SID|0x40,pData,1); }else{ pData[0] = SID; 166a: 51 13 MOV R5, #49 166c: 75 83 ST.B [R7], R5 ..\can_uds.c:252 pData[1] = 0x73;//Wrong Block Sequence Counter 166e: 53 17 MOV R5, #115 1670: 99 07 SJMP $-103 ;->0x15a2 ..\can_uds.c:268 pData[1] = BlockSize>>24; pData[2] = BlockSize>>16; pData[3] = BlockSize>>8; pData[4] = BlockSize; CAN_UDS_ServiceRespond(SID|0x40,pData,5); }else if((DataLen>=6)&&(pData[0]==0x00)&&(pData[1]==0x22)){//Request Download 1672: 25 38 CMP R2, #5 1674: 94 f9 JLS $-108 ;->0x159c 1676: 51 80 LD.B R5, [R1] 1678: 50 38 CMP R5, #0 167a: 91 f1 JNZ $-111 ;->0x159c 167c: 69 88 LD.B R5, [R1 + #1] 167e: 52 3a CMP R5, #34 1680: 8e f1 JNZ $-114 ;->0x159c ..\can_uds.c:269 BSC = 1; 1682: 41 10 MOV R4, #1 1684: 99 45 LD R5, [PC + #153] ;->0x18e8 :=0x1000004d 1686: 54 83 ST.B [R5], R4 ..\can_uds.c:270 MemoryAddress = (pData[2]<<8)|(pData[3]<<0); 1688: 8f 88 LD.B R1, [R7 + #2] 168a: 88 7a LSL R1, #8 168c: ef 88 LD.B R5, [R7 + #3] 168e: 49 d7 ORL R1, R1, R5 1690: 97 45 LD R5, [PC + #151] ;->0x18ec :=0x10000688 1692: 51 85 ST.W [R5], R1 ..\can_uds.c:271 MemorySize = (pData[4]<<8)|(pData[5]<<0); 1694: 17 89 LD.B R2, [R7 + #4] 1696: 90 7a LSL R2, #8 1698: 6f 89 LD.B R5, [R7 + #5] 169a: 52 d7 ORL R2, R2, R5 169c: 95 45 LD R5, [PC + #149] ;->0x18f0 :=0x1000068c 169e: 52 85 ST.W [R5], R2 ..\can_uds.c:272 printf("Request Download MemoryAddress = 0x%08X MemorySize = %d Byte\r\n",MemoryAddress,MemorySize); 16a0: 95 40 LD R0, [PC + #149] ;->0x18f4 :=0x2b48 16a2: 8e 45 LD R5, [PC + #142] ;->0x18d8 :=0x1fc4 16a4: 05 5c LJMP R5 ..\can_uds.c:273 pData[0] = 0x20; 16a6: 50 12 MOV R5, #32 16a8: 75 83 ST.B [R7], R5 ..\can_uds.c:274 pData[1] = BlockSize>>8; 16aa: 54 10 MOV R5, #4 16ac: 7d 90 ST.B [R7 + #1], R5 ..\can_uds.c:275 pData[2] = BlockSize; 16ae: 52 10 MOV R5, #2 16b0: bd 90 ST.B [R7 + #2], R5 ..\can_uds.c:276 CAN_UDS_ServiceRespond(SID|0x40,pData,3); 16b2: 04 17 MOV R0, #116 16b4: 27 58 MOV R1, R7 16b6: 23 10 MOV R2, #3 16b8: 89 45 LD R5, [PC + #137] ;->0x18dc :=0x1348 16ba: 05 5c LJMP R5 16bc: 26 07 SJMP $-218 ;->0x1508 ..\can_uds.c:257 pData[1] = 0x73;//Wrong Block Sequence Counter CAN_UDS_ServiceRespond(0x7F,pData,2); } break; case 0x34: if((DataLen>=10)&&(pData[0]==0x00)&&(pData[1]==0x44)){//Request Download 16be: 69 88 LD.B R5, [R1 + #1] 16c0: 54 3c CMP R5, #68 16c2: de f1 JNZ $-34 ;->0x167e ..\can_uds.c:258 BSC = 1; 16c4: 41 10 MOV R4, #1 16c6: 89 45 LD R5, [PC + #137] ;->0x18e8 :=0x1000004d 16c8: 54 83 ST.B [R5], R4 ..\can_uds.c:259 MemoryAddress = (pData[2]<<24)|(pData[3]<<16)|(pData[4]<<8)|pData[5]; 16ca: 89 88 LD.B R1, [R1 + #2] 16cc: 88 7b LSL R1, #24 16ce: ef 88 LD.B R5, [R7 + #3] 16d0: 28 7b LSL R5, #16 16d2: 49 d7 ORL R1, R1, R5 16d4: 6f 89 LD.B R5, [R7 + #5] 16d6: 49 d7 ORL R1, R1, R5 16d8: 2f 89 LD.B R5, [R7 + #4] 16da: a8 7a LSL R5, #8 16dc: 49 d7 ORL R1, R1, R5 16de: 84 45 LD R5, [PC + #132] ;->0x18ec :=0x10000688 16e0: 51 85 ST.W [R5], R1 ..\can_uds.c:260 MemorySize = (pData[6]<<24)|(pData[7]<<16)|(pData[8]<<8)|pData[9]; 16e2: 97 89 LD.B R2, [R7 + #6] 16e4: 90 7b LSL R2, #24 16e6: ef 89 LD.B R5, [R7 + #7] 16e8: 28 7b LSL R5, #16 16ea: 52 d7 ORL R2, R2, R5 16ec: 6f 8a LD.B R5, [R7 + #9] 16ee: 52 d7 ORL R2, R2, R5 16f0: 2f 8a LD.B R5, [R7 + #8] 16f2: a8 7a LSL R5, #8 16f4: 52 d7 ORL R2, R2, R5 16f6: 7f 45 LD R5, [PC + #127] ;->0x18f0 :=0x1000068c 16f8: 52 85 ST.W [R5], R2 ..\can_uds.c:261 printf("Request Download MemoryAddress = 0x%08X MemorySize = %d Byte\r\n",MemoryAddress,MemorySize); 16fa: 7f 40 LD R0, [PC + #127] ;->0x18f4 :=0x2b48 16fc: 77 45 LD R5, [PC + #119] ;->0x18d8 :=0x1fc4 16fe: 05 5c LJMP R5 ..\can_uds.c:262 pData[0] = 0x40; 1700: 50 14 MOV R5, #64 1702: 75 83 ST.B [R7], R5 ..\can_uds.c:263 pData[1] = BlockSize>>24; 1704: 7e 90 ST.B [R7 + #1], R6 ..\can_uds.c:264 pData[2] = BlockSize>>16; 1706: be 90 ST.B [R7 + #2], R6 ..\can_uds.c:265 pData[3] = BlockSize>>8; 1708: 54 10 MOV R5, #4 170a: fd 90 ST.B [R7 + #3], R5 ..\can_uds.c:266 pData[4] = BlockSize; 170c: 52 10 MOV R5, #2 170e: 3d 91 ST.B [R7 + #4], R5 ..\can_uds.c:267 CAN_UDS_ServiceRespond(SID|0x40,pData,5); 1710: 04 17 MOV R0, #116 1712: 27 58 MOV R1, R7 1714: 25 10 MOV R2, #5 1716: 72 45 LD R5, [PC + #114] ;->0x18dc :=0x1348 1718: 05 5c LJMP R5 171a: f7 06 SJMP $-265 ;->0x1508 ..\can_uds.c:221 CAN_BOOT_ResetProgRequest();//娓呴櫎杩涘叆缂栫▼妯″紡鏍囧織 CAN_BOOT_Reset(); } break; case 0x31: if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x00)){//Erase Flash Memory 171c: 61 88 LD.B R4, [R1 + #1] 171e: 3f 1f MOV R3, #255 1720: 43 70 CMP R4, R3 1722: 02 f1 JNZ $+2 ;->0x1726 1724: b1 04 SJMP $+177 ;->0x1886 ..\can_uds.c:231 CAN_UDS_ServiceRespond(SID|0x40,pData,4); }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x01)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 pData[3] = CAN_BOOT_CheckApp(); CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=7)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x02)){//Check Programming Integrity,閫氳繃CRC32楠岃瘉 1726: 86 38 CMP R8, #6 1728: 02 f8 JHI $+2 ;->0x172c 172a: cb 04 SJMP $+203 ;->0x18c0 172c: 42 38 CMP R4, #2 172e: 7a f0 JZ $+122 ;->0x1822 ..\can_uds.c:249 }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x03)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 pData[3] = 0;//鐘舵佸 CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=1)&&(pData[0]==0x01)){ CAN_UDS_ServiceRespond(SID|0x40,pData,1); 1730: 01 17 MOV R0, #113 1732: 27 58 MOV R1, R7 1734: 21 10 MOV R2, #1 1736: 6a 45 LD R5, [PC + #106] ;->0x18dc :=0x1348 1738: 05 5c LJMP R5 173a: e7 06 SJMP $-281 ;->0x1508 ..\can_uds.c:198 static uint8_t BSC=1;//Block Sequence Counter switch(SID) { case 0x10: if((DataLen>=1)&&(pData[0]==0x03)){//extendedDiagnosticSession printf("Extended Diagnostic Session\r\n"); 173c: 6f 40 LD R0, [PC + #111] ;->0x18f8 :=0x2a90 173e: 67 45 LD R5, [PC + #103] ;->0x18d8 :=0x1fc4 1740: 05 5c LJMP R5 ..\can_uds.c:199 CAN_UDS_ServiceRespond(SID|0x40,pData,1); 1742: 00 15 MOV R0, #80 1744: 27 58 MOV R1, R7 1746: 21 10 MOV R2, #1 1748: 65 45 LD R5, [PC + #101] ;->0x18dc :=0x1348 174a: 05 5c LJMP R5 174c: de 06 SJMP $-290 ;->0x1508 ..\can_uds.c:248 FirstCRC = 1; }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x03)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 pData[3] = 0;//鐘舵佸 CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=1)&&(pData[0]==0x01)){ 174e: 20 38 CMP R2, #0 1750: 8d f0 JZ $-115 ;->0x166a 1752: 51 80 LD.B R5, [R1] 1754: 51 38 CMP R5, #1 1756: 8a f1 JNZ $-118 ;->0x166a 1758: ec 07 SJMP $-20 ;->0x1730 ..\can_uds.c:287 break; case 0x36: if(DataLen>=2){//Transfer Data //printf("Transfer Data BSC=%d\r\n",BSC); if(pData[0]==BSC){ uint8_t res[2]={SID,0x78};//Request Correctly Received Response Pending 175a: e6 83 ST.B [SP], R6 175c: 58 17 MOV R5, #120 175e: a1 e3 ST.B [SP + #1], R5 ..\can_uds.c:288 CAN_UDS_ServiceRespond(0x7F,res,2); 1760: 0f 17 MOV R0, #127 1762: 2e 58 MOV R1, SP 1764: 22 10 MOV R2, #2 1766: 5e 44 LD R4, [PC + #94] ;->0x18dc :=0x1348 1768: 64 59 MOV R11, R4 176a: 04 5c LJMP R4 ..\can_uds.c:291 uint16_t DataNum = DataLen-1; uint8_t *pGotData = &pData[1]; uint32_t AddrOffset = (BSC-1)*UDS_PACK_SIZE; 176c: 69 80 LD.B R6, [R9] 176e: 76 cc SUB R6, R6, #1 1770: b2 7a LSL R6, #10 ..\can_uds.c:289 if(DataLen>=2){//Transfer Data //printf("Transfer Data BSC=%d\r\n",BSC); if(pData[0]==BSC){ uint8_t res[2]={SID,0x78};//Request Correctly Received Response Pending CAN_UDS_ServiceRespond(0x7F,res,2); uint16_t DataNum = DataLen-1; 1772: 81 30 SUB R8, #1 ..\can_uds.c:292 uint8_t *pGotData = &pData[1]; uint32_t AddrOffset = (BSC-1)*UDS_PACK_SIZE; CAN_BOOT_WriteDataToFlash(MemoryAddress+AddrOffset,pGotData,DataNum); 1774: a8 d0 ZXT.H R10, R8 1776: 5e 45 LD R5, [PC + #94] ;->0x18ec :=0x10000688 1778: 05 59 MOV R8, R5 177a: 45 82 LD.W R4, [R5] 177c: 06 c3 ADD R0, R6, R4 177e: 4f c0 ADD R1, R7, #1 1780: 4a 58 MOV R2, R10 1782: 5f 45 LD R5, [PC + #95] ;->0x18fc :=0xc3c 1784: 05 5c LJMP R5 ..\can_uds.c:293 CAN_UDS_ServiceRespond(SID|0x40,pData,1); 1786: 06 17 MOV R0, #118 1788: 27 58 MOV R1, R7 178a: 21 10 MOV R2, #1 178c: 0b 5c LJMP R11 ..\can_uds.c:295 //璁$畻瀹為檯鍐欏叆Flash涓殑鏁版嵁CRC鍊 if(FirstCRC){ 178e: 5d 47 LD R7, [PC + #93] ;->0x1900 :=0x1000004c 1790: 57 80 LD.B R5, [R7] 1792: 50 38 CMP R5, #0 1794: 15 f0 JZ $+21 ;->0x17be ..\can_uds.c:297 //AppCRC32 = crc32(AppCRC32,(const uint8_t *)pGotData,DataNum); AppCRC32 = crc32(AppCRC32,(const uint8_t *)(MemoryAddress+AddrOffset),DataNum); 1796: 5c 45 LD R5, [PC + #92] ;->0x1904 :=0x10000048 1798: 65 59 MOV R11, R5 179a: 05 82 LD.W R0, [R5] 179c: 48 82 LD.W R4, [R8] 179e: 0e c3 ADD R1, R6, R4 17a0: 4a 58 MOV R2, R10 17a2: 5a 45 LD R5, [PC + #90] ;->0x1908 :=0x1a50 17a4: 05 5c LJMP R5 17a6: b0 85 ST.W [R11], R0 ..\can_uds.c:298 FirstCRC = 0; 17a8: 50 10 MOV R5, #0 17aa: 75 83 ST.B [R7], R5 ..\can_uds.c:304 }else{ //AppCRC32 = crc32(AppCRC32^0xFFFFFFFF,(const uint8_t *)pGotData,DataNum); AppCRC32 = crc32(AppCRC32^0xFFFFFFFF,(const uint8_t *)(MemoryAddress+AddrOffset),DataNum); } //printf("Transfer Data BSC=%d AppCRC=%08X\r\n",BSC,AppCRC32); printf("Write Data To Flash Addr=%08X\r\n",MemoryAddress+AddrOffset); 17ac: 18 82 LD.W R1, [R8] 17ae: 58 40 LD R0, [PC + #88] ;->0x190c :=0x2b88 17b0: 4e c2 ADD R1, R6, R1 17b2: 4a 45 LD R5, [PC + #74] ;->0x18d8 :=0x1fc4 17b4: 05 5c LJMP R5 ..\can_uds.c:306 //printf("AppCRC=%08X\r\n",AppCRC32); BSC++; 17b6: 59 80 LD.B R5, [R9] 17b8: 6d c0 ADD R5, R5, #1 17ba: 95 83 ST.B [R9], R5 17bc: a6 06 SJMP $-346 ;->0x1508 ..\can_uds.c:301 //AppCRC32 = crc32(AppCRC32,(const uint8_t *)pGotData,DataNum); AppCRC32 = crc32(AppCRC32,(const uint8_t *)(MemoryAddress+AddrOffset),DataNum); FirstCRC = 0; }else{ //AppCRC32 = crc32(AppCRC32^0xFFFFFFFF,(const uint8_t *)pGotData,DataNum); AppCRC32 = crc32(AppCRC32^0xFFFFFFFF,(const uint8_t *)(MemoryAddress+AddrOffset),DataNum); 17be: 52 47 LD R7, [PC + #82] ;->0x1904 :=0x10000048 17c0: 07 82 LD.W R0, [R7] 17c2: 00 68 NOT R0, R0 17c4: 58 82 LD.W R5, [R8] 17c6: 4e c3 ADD R1, R6, R5 17c8: 4a 58 MOV R2, R10 17ca: 50 45 LD R5, [PC + #80] ;->0x1908 :=0x1a50 17cc: 05 5c LJMP R5 17ce: 70 85 ST.W [R7], R0 17d0: ee 07 SJMP $-18 ;->0x17ac ..\can_uds.c:337 printf("SecurityAccess\r\n"); if(pData[0]==0x01){ pData[1] = 0x11;pData[2] = 0x22;pData[3] = 0x33;pData[4] = 0x44;//杩斿洖绉嶅瓙锛屽彲鏍规嵁瀹為檯鎯呭喌淇敼 CAN_UDS_ServiceRespond(SID|0x40,pData,5); }else if(pData[0]==0x02){ if(((pData[1]^0x11)==0xFF)&&((pData[2]^0x22)==0xFF)&&((pData[3]^0x33)==0xFF)&&((pData[4]^0x44)==0xFF)){//鍒ゆ柇绉橀挜鏄惁姝g‘ 17d2: a7 88 LD.B R4, [R7 + #2] 17d4: 5d 1d MOV R5, #221 17d6: 45 70 CMP R4, R5 17d8: 02 f0 JZ $+2 ;->0x17dc 17da: 11 07 SJMP $-239 ;->0x15fc 17dc: e7 88 LD.B R4, [R7 + #3] 17de: 5c 1c MOV R5, #204 17e0: 45 70 CMP R4, R5 17e2: 02 f0 JZ $+2 ;->0x17e6 17e4: 0c 07 SJMP $-244 ;->0x15fc 17e6: 27 89 LD.B R4, [R7 + #4] 17e8: 5b 1b MOV R5, #187 17ea: 45 70 CMP R4, R5 17ec: 02 f0 JZ $+2 ;->0x17f0 17ee: 07 07 SJMP $-249 ;->0x15fc ..\can_uds.c:338 pData[1] = 0; 17f0: 50 10 MOV R5, #0 17f2: 7d 90 ST.B [R7 + #1], R5 17f4: 06 07 SJMP $-250 ;->0x1600 ..\can_uds.c:334 } break; case 0x27://SecurityAccess (0x27) service printf("SecurityAccess\r\n"); if(pData[0]==0x01){ pData[1] = 0x11;pData[2] = 0x22;pData[3] = 0x33;pData[4] = 0x44;//杩斿洖绉嶅瓙锛屽彲鏍规嵁瀹為檯鎯呭喌淇敼 17f6: 51 11 MOV R5, #17 17f8: 7d 90 ST.B [R7 + #1], R5 17fa: 52 12 MOV R5, #34 17fc: bd 90 ST.B [R7 + #2], R5 17fe: 53 13 MOV R5, #51 1800: fd 90 ST.B [R7 + #3], R5 1802: 54 14 MOV R5, #68 1804: 3d 91 ST.B [R7 + #4], R5 ..\can_uds.c:335 CAN_UDS_ServiceRespond(SID|0x40,pData,5); 1806: 07 16 MOV R0, #103 1808: 27 58 MOV R1, R7 180a: 25 10 MOV R2, #5 180c: 34 45 LD R5, [PC + #52] ;->0x18dc :=0x1348 180e: 05 5c LJMP R5 1810: 7c 06 SJMP $-388 ;->0x1508 ..\can_uds.c:314 pData[1] = 0x73;//Wrong Block Sequence Counter CAN_UDS_ServiceRespond(0x7F,pData,2); printf("Transfer Data BSC=%d\r\n",BSC); } }else{ pData[0] = SID; 1812: 16 83 ST.B [R1], R6 ..\can_uds.c:315 pData[1] = 0x13;//Incorrect Message Length Or Invalid Format 1814: 53 11 MOV R5, #19 1816: 4d 90 ST.B [R1 + #1], R5 ..\can_uds.c:316 CAN_UDS_ServiceRespond(0x7F,pData,2); 1818: 0f 17 MOV R0, #127 181a: 22 10 MOV R2, #2 181c: 30 45 LD R5, [PC + #48] ;->0x18dc :=0x1348 181e: 05 5c LJMP R5 1820: 74 06 SJMP $-396 ;->0x1508 ..\can_uds.c:231 CAN_UDS_ServiceRespond(SID|0x40,pData,4); }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x01)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 pData[3] = CAN_BOOT_CheckApp(); CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=7)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x02)){//Check Programming Integrity,閫氳繃CRC32楠岃瘉 1822: 9f 88 LD.B R3, [R7 + #2] 1824: 32 38 CMP R3, #2 1826: 0f f0 JZ $+15 ;->0x1844 ..\can_uds.c:244 CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Integrity GetCRC=%08X AppCRC=%08X\r\n",CheckSum,AppCRC32); //澶嶄綅CRC锛屼笅娆″紑濮嬭绠楃殑鏃跺欏氨涓嶄細鍑洪敊 AppCRC32=0xFFFFFFFF; FirstCRC = 1; }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x03)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 1828: 33 38 CMP R3, #3 182a: 83 f1 JNZ $-125 ;->0x1730 ..\can_uds.c:245 pData[3] = 0;//鐘舵佸 182c: 50 10 MOV R5, #0 182e: fd 90 ST.B [R7 + #3], R5 ..\can_uds.c:246 CAN_UDS_ServiceRespond(SID|0x40,pData,4); 1830: 01 17 MOV R0, #113 1832: 27 58 MOV R1, R7 1834: 24 10 MOV R2, #4 1836: 2a 45 LD R5, [PC + #42] ;->0x18dc :=0x1348 1838: 05 5c LJMP R5 ..\can_uds.c:247 printf("Check Programming Dependencies res=%d\r\n",pData[3]); 183a: 36 40 LD R0, [PC + #54] ;->0x1910 :=0x2ae8 183c: cf 88 LD.B R1, [R7 + #3] 183e: 27 45 LD R5, [PC + #39] ;->0x18d8 :=0x1fc4 1840: 05 5c LJMP R5 1842: 63 06 SJMP $-413 ;->0x1508 ..\can_uds.c:232 }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x01)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 pData[3] = CAN_BOOT_CheckApp(); CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=7)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x02)){//Check Programming Integrity,閫氳繃CRC32楠岃瘉 uint32_t CheckSum = (pData[3]<<24)|(pData[4]<<16)|(pData[5]<<8)|pData[6]; 1844: e7 88 LD.B R4, [R7 + #3] 1846: a0 7b LSL R4, #24 1848: 04 59 MOV R8, R4 184a: 27 89 LD.B R4, [R7 + #4] 184c: 20 7b LSL R4, #16 184e: 84 6a ORL R8, R4 1850: a7 89 LD.B R4, [R7 + #6] 1852: 84 6a ORL R8, R4 1854: 67 89 LD.B R4, [R7 + #5] 1856: a0 7a LSL R4, #8 1858: 84 6a ORL R8, R4 ..\can_uds.c:233 if(AppCRC32==CheckSum){ 185a: 2b 46 LD R6, [PC + #43] ;->0x1904 :=0x10000048 185c: 46 82 LD.W R4, [R6] 185e: 48 70 CMP R4, R8 1860: 35 f0 JZ $+53 ;->0x18ca ..\can_uds.c:237 pData[3] = 0;//鏍¢獙鎴愬姛 CAN_BOOT_SetAppValid(); }else{ pData[3] = 1;//鏍¢獙澶辫触 1862: fd 90 ST.B [R7 + #3], R5 ..\can_uds.c:239 } CAN_UDS_ServiceRespond(SID|0x40,pData,4); 1864: 01 17 MOV R0, #113 1866: 27 58 MOV R1, R7 1868: 24 10 MOV R2, #4 186a: 1d 45 LD R5, [PC + #29] ;->0x18dc :=0x1348 186c: 05 5c LJMP R5 ..\can_uds.c:240 printf("Check Programming Integrity GetCRC=%08X AppCRC=%08X\r\n",CheckSum,AppCRC32); 186e: 2a 40 LD R0, [PC + #42] ;->0x1914 :=0x2b10 1870: 28 58 MOV R1, R8 1872: 26 82 LD.W R2, [R6] 1874: 19 45 LD R5, [PC + #25] ;->0x18d8 :=0x1fc4 1876: 05 5c LJMP R5 ..\can_uds.c:242 //澶嶄綅CRC锛屼笅娆″紑濮嬭绠楃殑鏃跺欏氨涓嶄細鍑洪敊 AppCRC32=0xFFFFFFFF; 1878: 50 10 MOV R5, #0 187a: 55 68 NOT R5, R5 187c: 65 85 ST.W [R6], R5 ..\can_uds.c:243 FirstCRC = 1; 187e: 41 10 MOV R4, #1 1880: 20 45 LD R5, [PC + #32] ;->0x1900 :=0x1000004c 1882: 54 83 ST.B [R5], R4 ..\can_uds.c:231 CAN_UDS_ServiceRespond(SID|0x40,pData,4); }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x01)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 pData[3] = CAN_BOOT_CheckApp(); CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=7)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x02)){//Check Programming Integrity,閫氳繃CRC32楠岃瘉 1884: 42 06 SJMP $-446 ;->0x1508 ..\can_uds.c:221 CAN_BOOT_ResetProgRequest();//娓呴櫎杩涘叆缂栫▼妯″紡鏍囧織 CAN_BOOT_Reset(); } break; case 0x31: if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x00)){//Erase Flash Memory 1886: 99 88 LD.B R3, [R1 + #2] 1888: 30 38 CMP R3, #0 188a: 08 f0 JZ $+8 ;->0x189a ..\can_uds.c:227 printf("Erase Flash Memory...\r\n"); uint8_t res[2]={SID,0x78};//Request Correctly Received Response Pending CAN_UDS_ServiceRespond(0x7F,res,2); pData[3] = CAN_BOOT_EraseApp(); CAN_UDS_ServiceRespond(SID|0x40,pData,4); }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x01)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 188c: 31 38 CMP R3, #1 188e: 02 f0 JZ $+2 ;->0x1892 1890: 4b 07 SJMP $-181 ;->0x1726 ..\can_uds.c:228 pData[3] = CAN_BOOT_CheckApp(); 1892: 22 40 LD R0, [PC + #34] ;->0x1918 :=0xc38 1894: 00 5c LJMP R0 1896: f8 90 ST.B [R7 + #3], R0 1898: cc 07 SJMP $-52 ;->0x1830 ..\can_uds.c:222 CAN_BOOT_Reset(); } break; case 0x31: if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x00)){//Erase Flash Memory printf("Erase Flash Memory...\r\n"); 189a: 21 40 LD R0, [PC + #33] ;->0x191c :=0x2ad0 189c: 0f 45 LD R5, [PC + #15] ;->0x18d8 :=0x1fc4 189e: 05 5c LJMP R5 ..\can_uds.c:223 uint8_t res[2]={SID,0x78};//Request Correctly Received Response Pending 18a0: e6 83 ST.B [SP], R6 18a2: 58 17 MOV R5, #120 18a4: a1 e3 ST.B [SP + #1], R5 ..\can_uds.c:224 CAN_UDS_ServiceRespond(0x7F,res,2); 18a6: 0f 17 MOV R0, #127 18a8: 2e 58 MOV R1, SP 18aa: 22 10 MOV R2, #2 18ac: 0c 46 LD R6, [PC + #12] ;->0x18dc :=0x1348 18ae: 06 5c LJMP R6 ..\can_uds.c:225 pData[3] = CAN_BOOT_EraseApp(); 18b0: 1c 40 LD R0, [PC + #28] ;->0x1920 :=0xc34 18b2: 00 5c LJMP R0 18b4: f8 90 ST.B [R7 + #3], R0 ..\can_uds.c:226 CAN_UDS_ServiceRespond(SID|0x40,pData,4); 18b6: 01 17 MOV R0, #113 18b8: 27 58 MOV R1, R7 18ba: 24 10 MOV R2, #4 18bc: 06 5c LJMP R6 ..\can_uds.c:221 CAN_BOOT_ResetProgRequest();//娓呴櫎杩涘叆缂栫▼妯″紡鏍囧織 CAN_BOOT_Reset(); } break; case 0x31: if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0xFF)&&(pData[2]==0x00)){//Erase Flash Memory 18be: 25 06 SJMP $-475 ;->0x1508 ..\can_uds.c:244 CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Integrity GetCRC=%08X AppCRC=%08X\r\n",CheckSum,AppCRC32); //澶嶄綅CRC锛屼笅娆″紑濮嬭绠楃殑鏃跺欏氨涓嶄細鍑洪敊 AppCRC32=0xFFFFFFFF; FirstCRC = 1; }else if((DataLen>=3)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x03)){//Check Programming Dependencies,楠岃瘉APP鐨勫悎娉曟 18c0: 42 38 CMP R4, #2 18c2: 02 f0 JZ $+2 ;->0x18c6 18c4: 36 07 SJMP $-202 ;->0x1730 18c6: 9f 88 LD.B R3, [R7 + #2] 18c8: b0 07 SJMP $-80 ;->0x1828 ..\can_uds.c:234 CAN_UDS_ServiceRespond(SID|0x40,pData,4); printf("Check Programming Dependencies res=%d\r\n",pData[3]); }else if((DataLen>=7)&&(pData[0]==0x01)&&(pData[1]==0x02)&&(pData[2]==0x02)){//Check Programming Integrity,閫氳繃CRC32楠岃瘉 uint32_t CheckSum = (pData[3]<<24)|(pData[4]<<16)|(pData[5]<<8)|pData[6]; if(AppCRC32==CheckSum){ pData[3] = 0;//鏍¢獙鎴愬姛 18ca: 50 10 MOV R5, #0 18cc: fd 90 ST.B [R7 + #3], R5 ..\can_uds.c:235 CAN_BOOT_SetAppValid(); 18ce: 16 45 LD R5, [PC + #22] ;->0x1924 :=0xbc8 18d0: 05 5c LJMP R5 18d2: c9 07 SJMP $-55 ;->0x1864 18d4: c4 2a 00 00 .long 0x00002ac4 ->000010948 [!!!@2@:ADD R12, #36 @@: NOP 18d8: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 18dc: 48 13 00 00 .long 0x00001348 ->000004936 [!!!@2@:MOV R4, #56 @@: NOP 18e0: 94 0b 00 00 .long 0x00000b94 ->000002964 [!!!@2@:LD.W R3, [SP + #148] @@: NOP 18e4: 00 0c 00 00 .long 0x00000c00 ->000003072 [!!!@2@:LD.W R4, [SP + #0] @@: NOP 18e8: 4d 00 00 10 .long 0x1000004d ->268435533 [!!!@4@:LD.H R0, [R0 + #-188] 18ec: 88 06 00 10 .long 0x10000688 ->268437128 [!!!@2@:SJMP $-376 ;->0x15fc @@: MOV R0, #0 18f0: 8c 06 00 10 .long 0x1000068c ->268437132 [!!!@2@:SJMP $-372 ;->0x1608 @@: MOV R0, #0 18f4: 48 2b 00 00 .long 0x00002b48 ->000011080 [!!!@2@:ADD R4, #56 @@: NOP 18f8: 90 2a 00 00 .long 0x00002a90 ->000010896 [!!!@2@:ADD R9, #32 @@: NOP 18fc: 3c 0c 00 00 .long 0x00000c3c ->000003132 [!!!@2@:LD.W R4, [SP + #60] @@: NOP 1900: 4c 00 00 10 .long 0x1000004c ->268435532 [!!!@4@:LD.H R0, [R0 + #-252] 1904: 48 00 00 10 .long 0x10000048 ->268435528 [!!!@4@:LD.H R0, [R0 + #4] 1908: 50 1a 00 00 .long 0x00001a50 ->000006736 [!!!@2@:MOV R5, #160 @@: NOP 190c: 88 2b 00 00 .long 0x00002b88 ->000011144 [!!!@2@:ADD R8, #56 @@: NOP 1910: e8 2a 00 00 .long 0x00002ae8 ->000010984 [!!!@2@:ADD SP, #40 @@: NOP 1914: 10 2b 00 00 .long 0x00002b10 ->000011024 [!!!@2@:ADD R1, #48 @@: NOP 1918: 38 0c 00 00 .long 0x00000c38 ->000003128 [!!!@2@:LD.W R4, [SP + #56] @@: NOP 191c: d0 2a 00 00 .long 0x00002ad0 ->000010960 [!!!@2@:ADD LR, #32 @@: NOP 1920: 34 0c 00 00 .long 0x00000c34 ->000003124 [!!!@2@:LD.W R4, [SP + #52] @@: NOP 1924: c8 0b 00 00 .long 0x00000bc8 ->000003016 [!!!@2@:LD.W R3, [SP + #200] @@: NOP 00001928 : CAN_UDS_Process(): ..\can_uds.c:388 * @param pCANData CAN鏁版嵁鎸囬拡 * @param DataLen CAN鏁版嵁鏈夋晥瀛楄妭鏁 * @retval 鏃 */ void CAN_UDS_Process(uint8_t *pCANData,uint8_t DataLen) { 1928: 8f 5f PUSH {R6-R9,LR} 192a: e8 30 SUB SP, #8 192c: 11 d1 ZXT.B R1, R1 ..\can_uds.c:408 } static uint32_t buffer[UDS_PACK_SIZE/4+2]; uint8_t *pBuffer = (uint8_t *)(&buffer[0])+2; uint8_t ResBuf[8]; int DataIndex = 0; if(((UDS_ADDR_FORMATS==NORMAL)&&(DataLen >= 2))||((UDS_ADDR_FORMATS!=NORMAL)&&(DataLen >= 3))){ 192e: 11 38 CMP R1, #1 1930: 20 f9 JLS $+32 ;->0x1970 ..\can_uds.c:412 if(UDS_ADDR_FORMATS!=NORMAL){ uint8_t AddrExt = *pCANData++; } uint8_t PCI = *pCANData++; 1932: a0 58 MOV R5, R0 1934: 35 76 LD.B R3, [R5++] ..\can_uds.c:414 uint8_t PCIType = (PCI>>4)&0xF; switch(PCIType){ 1936: 24 10 MOV R2, #4 1938: a3 dc LSR R4, R3, R2 193a: 41 38 CMP R4, #1 193c: 4c f0 JZ $+76 ;->0x19d4 193e: 40 38 CMP R4, #0 1940: 28 f1 JNZ $+40 ;->0x1990 ..\can_uds.c:416 case UDS_SF: GotDataNum = 0; 1942: 0e 41 LD R1, [PC + #14] ;->0x1978 :=0x10000050 1944: 14 85 ST.W [R1], R4 ..\can_uds.c:417 AllDataLen = PCI&0xF; 1946: 2f 10 MOV R2, #15 1948: 93 d4 ANL R2, R3, R2 194a: 0d 44 LD R4, [PC + #13] ;->0x197c :=0x10000054 194c: 42 85 ST.W [R4], R2 ..\can_uds.c:418 if(AllDataLen <= MaxSFDataLen){ 194e: 27 38 CMP R2, #7 1950: 10 fc JGT $+16 ;->0x1970 ..\can_uds.c:419 for(int i=0;i0x1a48 1956: 0b 44 LD R4, [PC + #11] ;->0x1980 :=0x10000692 ..\can_uds.c:387 * @brief 澶勭悊CAN鎺ユ敹鍒扮殑鏁版嵁锛屽鐞嗕箣鍓嶈鍏堝垽鏂帴鏀跺抚涓篣DS甯 * @param pCANData CAN鏁版嵁鎸囬拡 * @param DataLen CAN鏁版嵁鏈夋晥瀛楄妭鏁 * @retval 鏃 */ void CAN_UDS_Process(uint8_t *pCANData,uint8_t DataLen) 1958: 85 c2 ADD R0, R5, R2 ..\can_uds.c:420 case UDS_SF: GotDataNum = 0; AllDataLen = PCI&0xF; if(AllDataLen <= MaxSFDataLen){ for(int i=0;i0x195a 1962: 12 85 ST.W [R1], R2 1964: 52 cc SUB R2, R2, #1 ..\can_uds.c:430 for(int i=0;i0x1984 :=0x10000690 1968: 85 88 LD.B R0, [R5 + #2] 196a: 08 41 LD R1, [PC + #8] ;->0x1988 :=0x10000693 196c: 08 45 LD R5, [PC + #8] ;->0x198c :=0x1498 196e: 05 5c LJMP R5 ..\can_uds.c:483 break; default: break; } } } 1970: e8 28 ADD SP, #8 1972: 0f 5e POP {R6-R9} 1974: 0d 5d POP LR 1976: 1d 5c JMP LR 1978: 50 00 00 10 .long 0x10000050 ->268435536 [!!!@4@:LD.B R0, [R0 + #4] 197c: 54 00 00 10 .long 0x10000054 ->268435540 [!!!@4@:LD.B R0, [R0 + #-252] 1980: 92 06 00 10 .long 0x10000692 ->268437138 [!!!@2@:SJMP $-366 ;->0x16a4 @@: MOV R0, #0 1984: 90 06 00 10 .long 0x10000690 ->268437136 [!!!@2@:SJMP $-368 ;->0x16a4 @@: MOV R0, #0 1988: 93 06 00 10 .long 0x10000693 ->268437139 [!!!@2@:SJMP $-365 ;->0x16ae @@: MOV R0, #0 198c: 98 14 00 00 .long 0x00001498 ->000005272 [!!!@2@:MOV R9, #72 @@: NOP ..\can_uds.c:414 if(UDS_ADDR_FORMATS!=NORMAL){ uint8_t AddrExt = *pCANData++; } uint8_t PCI = *pCANData++; uint8_t PCIType = (PCI>>4)&0xF; switch(PCIType){ 1990: 42 38 CMP R4, #2 1992: ef f1 JNZ $-17 ;->0x1970 ..\can_uds.c:459 } printf("\r\n"); #endif break; case UDS_CF: if((PCI&0xF)==(CF_SN&0xF)){ 1994: 22 44 LD R4, [PC + #34] ;->0x1a1c :=0x10000058 1996: 04 59 MOV R8, R4 1998: 94 80 LD.B R9, [R4] 199a: 39 6b XRL R3, R9 199c: 4f 10 MOV R4, #15 199e: 1b d5 ANL R3, R3, R4 19a0: e8 f1 JNZ $-24 ;->0x1970 19a2: 20 41 LD R1, [PC + #32] ;->0x1a20 :=0x10000050 19a4: 21 82 LD.W R2, [R1] 19a6: 20 44 LD R4, [PC + #32] ;->0x1a24 :=0x10000054 19a8: 04 82 LD.W R0, [R4] ..\can_uds.c:387 * @brief 澶勭悊CAN鎺ユ敹鍒扮殑鏁版嵁锛屽鐞嗕箣鍓嶈鍏堝垽鏂帴鏀跺抚涓篣DS甯 * @param pCANData CAN鏁版嵁鎸囬拡 * @param DataLen CAN鏁版嵁鏈夋晥瀛楄妭鏁 * @retval 鏃 */ void CAN_UDS_Process(uint8_t *pCANData,uint8_t DataLen) 19aa: fa c1 ADD R7, R2, #7 19ac: 1f 46 LD R6, [PC + #31] ;->0x1a28 :=0x10000690 ..\can_uds.c:460 printf("\r\n"); #endif break; case UDS_CF: if((PCI&0xF)==(CF_SN&0xF)){ for(int i=0;(i0x1a40 ..\can_uds.c:461 pBuffer[GotDataNum++] = *pCANData++; 19b2: 35 76 LD.B R3, [R5++] ..\can_uds.c:387 * @brief 澶勭悊CAN鎺ユ敹鍒扮殑鏁版嵁锛屽鐞嗕箣鍓嶈鍏堝垽鏂帴鏀跺抚涓篣DS甯 * @param pCANData CAN鏁版嵁鎸囬拡 * @param DataLen CAN鏁版嵁鏈夋晥瀛楄妭鏁 * @retval 鏃 */ void CAN_UDS_Process(uint8_t *pCANData,uint8_t DataLen) 19b4: a6 c2 ADD R4, R6, R2 ..\can_uds.c:461 #endif break; case UDS_CF: if((PCI&0xF)==(CF_SN&0xF)){ for(int i=0;(i0x19ae 19be: 12 85 ST.W [R1], R2 ..\can_uds.c:463 pBuffer[GotDataNum++] = *pCANData++; } CF_SN++; 19c0: 91 28 ADD R9, #1 19c2: 89 83 ST.B [R8], R9 ..\can_uds.c:464 if(GotDataNum>=AllDataLen){ 19c4: 02 70 CMP R0, R2 19c6: d5 fc JGT $-43 ;->0x1970 ..\can_uds.c:473 for(int i=0;i0x1a2c :=0x10000693 19ce: 19 45 LD R5, [PC + #25] ;->0x1a30 :=0x1498 19d0: 05 5c LJMP R5 19d2: cf 07 SJMP $-49 ;->0x1970 ..\can_uds.c:434 #endif CAN_UDS_ServiceProcess(pBuffer[0],&pBuffer[1],GotDataNum-1); } break; case UDS_FF: GotDataNum = 0; 19d4: 13 41 LD R1, [PC + #19] ;->0x1a20 :=0x10000050 19d6: 50 10 MOV R5, #0 19d8: 15 85 ST.W [R1], R5 ..\can_uds.c:435 AllDataLen = ((PCI&0xF)<<8)|(*pCANData++); 19da: 5f 10 MOV R5, #15 19dc: 5b d5 ANL R3, R3, R5 19de: 98 7a LSL R3, #8 19e0: 68 88 LD.B R5, [R0 + #1] 19e2: 5b d7 ORL R3, R3, R5 19e4: 10 45 LD R5, [PC + #16] ;->0x1a24 :=0x10000054 19e6: 53 85 ST.W [R5], R3 19e8: 80 c0 ADD R0, R0, #2 19ea: 13 45 LD R5, [PC + #19] ;->0x1a34 :=0x10000692 ..\can_uds.c:387 * @brief 澶勭悊CAN鎺ユ敹鍒扮殑鏁版嵁锛屽鐞嗕箣鍓嶈鍏堝垽鏂帴鏀跺抚涓篣DS甯 * @param pCANData CAN鏁版嵁鎸囬拡 * @param DataLen CAN鏁版嵁鏈夋晥瀛楄妭鏁 * @retval 鏃 */ void CAN_UDS_Process(uint8_t *pCANData,uint8_t DataLen) 19ec: 13 43 LD R3, [PC + #19] ;->0x1a38 :=0x10000698 ..\can_uds.c:437 break; case UDS_FF: GotDataNum = 0; AllDataLen = ((PCI&0xF)<<8)|(*pCANData++); for(int i=0;i0x19ee 19f6: 56 10 MOV R5, #6 19f8: 15 85 ST.W [R1], R5 ..\can_uds.c:439 pBuffer[GotDataNum++] = *pCANData++; } CF_SN = 1; 19fa: 41 10 MOV R4, #1 19fc: 08 45 LD R5, [PC + #8] ;->0x1a1c :=0x10000058 19fe: 54 83 ST.B [R5], R4 ..\can_uds.c:445 //鍙戦丗C DataIndex = 0; if(UDS_ADDR_FORMATS!=NORMAL){ ResBuf[DataIndex++] = UDS_EXT_ADDR; } ResBuf[DataIndex++] = (UDS_FC<<4)&0xF0;//PCI 1a00: 50 13 MOV R5, #48 1a02: e5 83 ST.B [SP], R5 ..\can_uds.c:446 ResBuf[DataIndex++] = 0x00;//BS 1a04: 50 10 MOV R5, #0 1a06: a1 e3 ST.B [SP + #1], R5 ..\can_uds.c:447 ResBuf[DataIndex++] = 0x00;//STmin,甯ч棿闅旀椂闂达紝鑻ュ崟鐗囨満澶勭悊閫熷害鎱紝寤鸿璁剧疆璇ュ煎ぇ浜0 1a08: a2 e3 ST.B [SP + #2], R5 ..\can_uds.c:449 //璋冪敤鍙戦丆AN鏁版嵁鍑芥暟鍥炲娴佹帶甯 CAN_UDS_SendData(ResBuf,DataIndex); 1a0a: 0e 58 MOV R0, SP 1a0c: 13 10 MOV R1, #3 1a0e: 0c 45 LD R5, [PC + #12] ;->0x1a3c :=0x12e8 1a10: 05 5c LJMP R5 ..\can_uds.c:483 break; default: break; } } } 1a12: e8 28 ADD SP, #8 1a14: 0f 5e POP {R6-R9} 1a16: 0d 5d POP LR 1a18: 1d 5c JMP LR 1a1a: 00 00 NOP NOP 1a1c: 58 00 00 10 .long 0x10000058 ->268435544 [!!!@4@:LDS.H R0, [R0 + #4] 1a20: 50 00 00 10 .long 0x10000050 ->268435536 [!!!@4@:LD.B R0, [R0 + #4] 1a24: 54 00 00 10 .long 0x10000054 ->268435540 [!!!@4@:LD.B R0, [R0 + #-252] 1a28: 90 06 00 10 .long 0x10000690 ->268437136 [!!!@2@:SJMP $-368 ;->0x1748 @@: MOV R0, #0 1a2c: 93 06 00 10 .long 0x10000693 ->268437139 [!!!@2@:SJMP $-365 ;->0x1752 @@: MOV R0, #0 1a30: 98 14 00 00 .long 0x00001498 ->000005272 [!!!@2@:MOV R9, #72 @@: NOP 1a34: 92 06 00 10 .long 0x10000692 ->268437138 [!!!@2@:SJMP $-366 ;->0x1758 @@: MOV R0, #0 1a38: 98 06 00 10 .long 0x10000698 ->268437144 [!!!@2@:SJMP $-360 ;->0x1768 @@: MOV R0, #0 1a3c: e8 12 00 00 .long 0x000012e8 ->000004840 [!!!@2@:MOV SP, #40 @@: NOP 1a40: 12 85 ST.W [R1], R2 ..\can_uds.c:463 case UDS_CF: if((PCI&0xF)==(CF_SN&0xF)){ for(int i=0;(i0x19c8 ..\can_uds.c:419 switch(PCIType){ case UDS_SF: GotDataNum = 0; AllDataLen = PCI&0xF; if(AllDataLen <= MaxSFDataLen){ for(int i=0;i0x1966 ... 00001a50 : crc32(): ..\crc32.c:145 #define DO4(buf) DO2(buf); DO2(buf); #define DO8(buf) DO4(buf); DO4(buf); /* ========================================================================= */ uint32_t crc32(uint32_t crc, const uint8_t *buf, uint32_t len) { 1a50: 03 5f PUSH {R6-R7} ..\crc32.c:146 if (buf == NULL) return 0L; 1a52: 10 38 CMP R1, #0 1a54: 5c f0 JZ $+92 ;->0x1b0c ..\crc32.c:152 #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif /*crc = crc ^ 0xffffffffL;*/ while (len >= 8) 1a56: 27 38 CMP R2, #7 1a58: 5d f9 JLS $+93 ;->0x1b12 ..\crc32.c:144 #define DO2(buf) DO1(buf); DO1(buf); #define DO4(buf) DO2(buf); DO2(buf); #define DO8(buf) DO4(buf); DO4(buf); /* ========================================================================= */ uint32_t crc32(uint32_t crc, const uint8_t *buf, uint32_t len) 1a5a: 58 10 MOV R5, #8 1a5c: 7a c7 SUB R7, R2, R5 1a5e: 3b 7c LSR R7, #3 1a60: 7f c0 ADD R7, R7, #1 1a62: 3b 7a LSL R7, #3 1a64: f9 c3 ADD R7, R1, R7 1a66: 29 45 LD R5, [PC + #41] ;->0x1b08 :=0x1000005c ..\crc32.c:154 make_crc_table(); #endif /*crc = crc ^ 0xffffffffL;*/ while (len >= 8) { DO8(buf); 1a68: 4f 1f MOV R4, #255 1a6a: 31 80 LD.B R3, [R1] 1a6c: 1b d8 XRL R3, R3, R0 1a6e: 1b d5 ANL R3, R3, R4 1a70: 1a 7a LSL R3, #2 1a72: dd e8 LD.W R3, [R5 + R3] 1a74: 80 7c LSR R0, #8 1a76: 1b d8 XRL R3, R3, R0 1a78: 41 88 LD.B R0, [R1 + #1] 1a7a: 03 d8 XRL R0, R3, R0 1a7c: 00 d5 ANL R0, R0, R4 1a7e: 02 7a LSL R0, #2 1a80: 05 e8 LD.W R0, [R5 + R0] 1a82: 98 7c LSR R3, #8 1a84: c0 d8 XRL R0, R0, R3 1a86: 99 88 LD.B R3, [R1 + #2] 1a88: d8 d8 XRL R3, R0, R3 1a8a: 1b d5 ANL R3, R3, R4 1a8c: 1a 7a LSL R3, #2 1a8e: f5 e8 LD.W R6, [R5 + R3] 1a90: 80 7c LSR R0, #8 1a92: 36 d8 XRL R6, R6, R0 1a94: d9 88 LD.B R3, [R1 + #3] 1a96: de d8 XRL R3, R6, R3 1a98: 1b d5 ANL R3, R3, R4 1a9a: 1a 7a LSL R3, #2 1a9c: dd e8 LD.W R3, [R5 + R3] 1a9e: b0 7c LSR R6, #8 1aa0: 9b d9 XRL R3, R3, R6 1aa2: 01 89 LD.B R0, [R1 + #4] 1aa4: 03 d8 XRL R0, R3, R0 1aa6: 00 d5 ANL R0, R0, R4 1aa8: 02 7a LSL R0, #2 1aaa: 05 e8 LD.W R0, [R5 + R0] 1aac: 98 7c LSR R3, #8 1aae: c0 d8 XRL R0, R0, R3 1ab0: 59 89 LD.B R3, [R1 + #5] 1ab2: d8 d8 XRL R3, R0, R3 1ab4: 1b d5 ANL R3, R3, R4 1ab6: 1a 7a LSL R3, #2 1ab8: f5 e8 LD.W R6, [R5 + R3] 1aba: 80 7c LSR R0, #8 1abc: 36 d8 XRL R6, R6, R0 1abe: 99 89 LD.B R3, [R1 + #6] 1ac0: de d8 XRL R3, R6, R3 1ac2: 1b d5 ANL R3, R3, R4 1ac4: 1a 7a LSL R3, #2 1ac6: dd e8 LD.W R3, [R5 + R3] 1ac8: b0 7c LSR R6, #8 1aca: 9b d9 XRL R3, R3, R6 1acc: c1 89 LD.B R0, [R1 + #7] 1ace: 03 d8 XRL R0, R3, R0 1ad0: 00 d5 ANL R0, R0, R4 1ad2: 02 7a LSL R0, #2 1ad4: 05 e8 LD.W R0, [R5 + R0] 1ad6: 98 7c LSR R3, #8 1ad8: c0 d8 XRL R0, R0, R3 ..\crc32.c:144 #define DO2(buf) DO1(buf); DO1(buf); #define DO4(buf) DO2(buf); DO2(buf); #define DO8(buf) DO4(buf); DO4(buf); /* ========================================================================= */ uint32_t crc32(uint32_t crc, const uint8_t *buf, uint32_t len) 1ada: 18 28 ADD R1, #8 ..\crc32.c:152 #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif /*crc = crc ^ 0xffffffffL;*/ while (len >= 8) 1adc: 71 70 CMP R7, R1 1ade: c6 f1 JNZ $-58 ;->0x1a6a 1ae0: 57 10 MOV R5, #7 1ae2: 52 d5 ANL R2, R2, R5 ..\crc32.c:157 { DO8(buf); len -= 8; } if (len) do { 1ae4: 20 38 CMP R2, #0 1ae6: 0d f0 JZ $+13 ;->0x1b00 ..\crc32.c:144 #define DO2(buf) DO1(buf); DO1(buf); #define DO4(buf) DO2(buf); DO2(buf); #define DO8(buf) DO4(buf); DO4(buf); /* ========================================================================= */ uint32_t crc32(uint32_t crc, const uint8_t *buf, uint32_t len) 1ae8: 97 c2 ADD R2, R7, R2 1aea: 08 45 LD R5, [PC + #8] ;->0x1b08 :=0x1000005c ..\crc32.c:158 { DO8(buf); len -= 8; } if (len) do { DO1(buf); 1aec: 3f 1f MOV R3, #255 1aee: 47 76 LD.B R4, [R7++] 1af0: 24 d8 XRL R4, R4, R0 1af2: e4 d4 ANL R4, R4, R3 1af4: 22 7a LSL R4, #2 1af6: 25 e9 LD.W R4, [R5 + R4] 1af8: 80 7c LSR R0, #8 1afa: 04 d8 XRL R0, R4, R0 ..\crc32.c:159 } while (--len); 1afc: 72 70 CMP R7, R2 1afe: f8 f1 JNZ $-8 ;->0x1aee ..\crc32.c:160 return crc^0xffffffffL; 1b00: 00 68 NOT R0, R0 ..\crc32.c:161 } 1b02: 03 5e POP {R6-R7} 1b04: 1d 5c JMP LR 1b06: 00 00 NOP NOP 1b08: 5c 00 00 10 .long 0x1000005c ->268435548 [!!!@4@:LDS.H R0, [R0 + #-252] ..\crc32.c:146 #define DO8(buf) DO4(buf); DO4(buf); /* ========================================================================= */ uint32_t crc32(uint32_t crc, const uint8_t *buf, uint32_t len) { if (buf == NULL) return 0L; 1b0c: 01 58 MOV R0, R1 ..\crc32.c:161 } if (len) do { DO1(buf); } while (--len); return crc^0xffffffffL; } 1b0e: 03 5e POP {R6-R7} 1b10: 1d 5c JMP LR ..\crc32.c:152 #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif /*crc = crc ^ 0xffffffffL;*/ while (len >= 8) 1b12: e1 58 MOV R7, R1 ..\crc32.c:157 { DO8(buf); len -= 8; } if (len) do { 1b14: 20 38 CMP R2, #0 1b16: f5 f0 JZ $-11 ;->0x1b00 1b18: e8 07 SJMP $-24 ;->0x1ae8 00001b1a <_NMI_exception>: _NMI_exception(): ..\kf_it.c:45 // NMI Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _NMI_exception (void) { } 1b1a: 7d 5d CLR PSW, #29 1b1c: 1d 5c JMP LR 00001b1e <_HardFault_exception>: _HardFault_exception(): ..\kf_it.c:53 // HardFault Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _HardFault_exception (void) { } 1b1e: 7d 5d CLR PSW, #29 1b20: 1d 5c JMP LR 00001b22 <_StackFault_exception>: _StackFault_exception(): ..\kf_it.c:61 // StackFault Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _StackFault_exception (void) { } 1b22: 7d 5d CLR PSW, #29 1b24: 1d 5c JMP LR 00001b26 <_SVC_exception>: _SVC_exception(): ..\kf_it.c:69 // SVC Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _SVC_exception (void) { } 1b26: 7d 5d CLR PSW, #29 1b28: 1d 5c JMP LR 00001b2a <_SoftSV_exception>: _SoftSV_exception(): ..\kf_it.c:77 // SoftSV Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _SoftSV_exception (void) { } 1b2a: 7d 5d CLR PSW, #29 1b2c: 1d 5c JMP LR 00001b2e <_SysTick_exception>: _SysTick_exception(): ..\kf_it.c:85 // SysTick Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _SysTick_exception (void) { } 1b2e: 7d 5d CLR PSW, #29 1b30: 1d 5c JMP LR ... 00001b34 <_CAN4_exception>: _CAN4_exception(): ..\kf_it.c:91 //***************************************************************************************** // CAN4 Interrupt Course //***************************************************************************************** void __attribute__((interrupt)) _CAN4_exception (void) { 1b34: ff 5f PUSH {R6-R12,LR} 1b36: 25 5d PUSH R5 1b38: 1b 45 LD R5, [PC + #27] ;->0x1ba4 :=0x608 1b3a: e5 66 SUB SP, R5 ..\kf_it.c:93 volatile Can_Pdu_TypeDef Can_Pdu_Receive; volatile uint32_t Can_Rcr = 0x00; 1b3c: 1b 47 LD R7, [PC + #27] ;->0x1ba8 :=0x604 1b3e: 7e 64 ADD R7, SP 1b40: 50 10 MOV R5, #0 1b42: 75 85 ST.W [R7], R5 ..\kf_it.c:95 if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_BUS_ERROR)) 1b44: 1a 46 LD R6, [PC + #26] ;->0x1bac :=0x40002880 1b46: 06 58 MOV R0, R6 1b48: 10 18 MOV R1, #128 1b4a: 1a 42 LD R2, [PC + #26] ;->0x1bb0 :=0x31c 1b4c: 82 59 MOV R12, R2 1b4e: 02 5c LJMP R2 1b50: 00 38 CMP R0, #0 1b52: 02 f0 JZ $+2 ;->0x1b56 1b54: 93 04 SJMP $+147 ;->0x1c7a ..\kf_it.c:101 { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_BUS_ERROR); Can_Rcr = CAN4_SFR->RCR; } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_ERROR_NEGATIVE)) 1b56: 16 40 LD R0, [PC + #22] ;->0x1bac :=0x40002880 1b58: 10 12 MOV R1, #32 1b5a: 0c 5c LJMP R12 1b5c: 00 38 CMP R0, #0 1b5e: 02 f0 JZ $+2 ;->0x1b62 1b60: 88 04 SJMP $+136 ;->0x1c70 ..\kf_it.c:106 { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_ERROR_NEGATIVE); } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_TRANSMIT)) 1b62: 13 40 LD R0, [PC + #19] ;->0x1bac :=0x40002880 1b64: 12 10 MOV R1, #2 1b66: 0c 5c LJMP R12 1b68: 00 38 CMP R0, #0 1b6a: 7e f1 JNZ $+126 ;->0x1c66 ..\kf_it.c:111 { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_TRANSMIT); } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_BUS_OFF)) 1b6c: 10 46 LD R6, [PC + #16] ;->0x1bac :=0x40002880 1b6e: 06 58 MOV R0, R6 1b70: 11 10 MOV R1, #1 1b72: 8c 7a LSL R1, #12 1b74: 0c 5c LJMP R12 1b76: 00 38 CMP R0, #0 1b78: 6e f1 JNZ $+110 ;->0x1c54 ..\kf_it.c:117 { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_BUS_OFF); CAN4_SFR->CTLR &= ~(0x01); } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_RECEIVE)) 1b7a: 0d 40 LD R0, [PC + #13] ;->0x1bac :=0x40002880 1b7c: 11 10 MOV R1, #1 1b7e: 0c 5c LJMP R12 1b80: 00 38 CMP R0, #0 1b82: 1b f1 JNZ $+27 ;->0x1bb8 ..\kf_it.c:138 CAN_BUF_ApendMsg(0); } } } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_DATA_OVERFLOW)) 1b84: 0a 40 LD R0, [PC + #10] ;->0x1bac :=0x40002880 1b86: 18 10 MOV R1, #8 1b88: 0c 5c LJMP R12 1b8a: 00 38 CMP R0, #0 1b8c: 05 f0 JZ $+5 ;->0x1b96 ..\kf_it.c:140 { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_DATA_OVERFLOW); 1b8e: 08 40 LD R0, [PC + #8] ;->0x1bac :=0x40002880 1b90: 18 10 MOV R1, #8 1b92: 09 45 LD R5, [PC + #9] ;->0x1bb4 :=0x32a 1b94: 05 5c LJMP R5 ..\kf_it.c:142 } } 1b96: 04 45 LD R5, [PC + #4] ;->0x1ba4 :=0x608 1b98: e5 64 ADD SP, R5 1b9a: 7d 5d CLR PSW, #29 1b9c: 05 5d POP R5 1b9e: 7f 5e POP {R6-R12} 1ba0: 0d 5d POP LR 1ba2: 1d 5c JMP LR 1ba4: 08 06 00 00 .long 0x00000608 ->000001544 [!!!@2@:SJMP $-504 ;->0x17b4 @@: NOP 1ba8: 04 06 00 00 .long 0x00000604 ->000001540 [!!!@2@:SJMP $-508 ;->0x17b0 @@: NOP 1bac: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x1bac :=0x40002880 1bb0: 1c 03 00 00 .long 0x0000031c ->000000796 [!!!@4@:JMP $+1835008 ;->0x381bb0 1bb4: 2a 03 00 00 .long 0x0000032a ->000000810 [!!!@4@:JMP $+2752512 ;->0x541bb4 ..\kf_it.c:119 CAN4_SFR->CTLR &= ~(0x01); } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_RECEIVE)) { CAN_Receive_Message(&Can_Pdu_Receive); 1bb8: 0e 58 MOV R0, SP 1bba: 34 45 LD R5, [PC + #52] ;->0x1c88 :=0xfb0 1bbc: 05 5c LJMP R5 ..\kf_it.c:120 for(int i=0;i0x1c8c :=0x600 1bc0: 65 58 MOV R3, R5 1bc2: 3e 64 ADD R3, SP 1bc4: 03 59 MOV R8, R3 1bc6: 53 80 LD.B R5, [R3] 1bc8: 50 38 CMP R5, #0 1bca: dd f0 JZ $-35 ;->0x1b84 1bcc: 60 10 MOV R6, #0 1bce: 31 44 LD R4, [PC + #49] ;->0x1c90 :=0xc7c 1bd0: 24 59 MOV R9, R4 ..\kf_it.c:126 CAN_MSG *pRxMsg = CAN_BUF_PickMsg(0); //瀵规帴鏀跺埌鐨勬暟鎹厛鍋氱畝鍗曠殑鍒ゆ柇锛屽幓鎺夐敊璇殑鏁版嵁 #if MSG_ID_TYPE if((Can_Pdu_Receive.CAN_Message[i].m_FrameFormat==CAN_FRAME_FORMAT_EFF)&&((Can_Pdu_Receive.CAN_Message[i].m_Can_ID == PHY_ADDR_ID)||(Can_Pdu_Receive.CAN_Message[i].m_Can_ID == FUN_ADDR_ID))){ #else if((Can_Pdu_Receive.CAN_Message[i].m_FrameFormat==CAN_FRAME_FORMAT_SFF)&&((Can_Pdu_Receive.CAN_Message[i].m_Can_ID == PHY_ADDR_ID)||(Can_Pdu_Receive.CAN_Message[i].m_Can_ID == FUN_ADDR_ID))){ 1bd2: 78 11 MOV R7, #24 1bd4: 30 45 LD R5, [PC + #48] ;->0x1c94 :=0x700 1bd6: 45 59 MOV R10, R5 1bd8: 30 42 LD R2, [PC + #48] ;->0x1c98 :=0x7df 1bda: 62 59 MOV R11, R2 1bdc: 05 04 SJMP $+5 ;->0x1be6 ..\kf_it.c:120 } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_RECEIVE)) { CAN_Receive_Message(&Can_Pdu_Receive); for(int i=0;i0x1b84 ..\kf_it.c:121 CAN_MSG *pRxMsg = CAN_BUF_PickMsg(0); 1be6: 00 10 MOV R0, #0 1be8: 09 5c LJMP R9 ..\kf_it.c:126 //瀵规帴鏀跺埌鐨勬暟鎹厛鍋氱畝鍗曠殑鍒ゆ柇锛屽幓鎺夐敊璇殑鏁版嵁 #if MSG_ID_TYPE if((Can_Pdu_Receive.CAN_Message[i].m_FrameFormat==CAN_FRAME_FORMAT_EFF)&&((Can_Pdu_Receive.CAN_Message[i].m_Can_ID == PHY_ADDR_ID)||(Can_Pdu_Receive.CAN_Message[i].m_Can_ID == FUN_ADDR_ID))){ #else if((Can_Pdu_Receive.CAN_Message[i].m_FrameFormat==CAN_FRAME_FORMAT_SFF)&&((Can_Pdu_Receive.CAN_Message[i].m_Can_ID == PHY_ADDR_ID)||(Can_Pdu_Receive.CAN_Message[i].m_Can_ID == FUN_ADDR_ID))){ 1bea: ee cb MULS R5, R6, R7 1bec: 00 00 NOP NOP 1bee: 5e 64 ADD R5, SP 1bf0: 45 82 LD.W R4, [R5] 1bf2: 40 38 CMP R4, #0 1bf4: f5 f1 JNZ $-11 ;->0x1bde 1bf6: e5 98 LD.W R4, [R5 + #3] 1bf8: 4a 70 CMP R4, R10 1bfa: 04 f0 JZ $+4 ;->0x1c02 1bfc: ed 98 LD.W R5, [R5 + #3] 1bfe: 5b 70 CMP R5, R11 1c00: ef f1 JNZ $-17 ;->0x1bde ..\kf_it.c:128 #endif pRxMsg->Flags.IDE = Can_Pdu_Receive.CAN_Message[i].m_FrameFormat; 1c02: ee cb MULS R5, R6, R7 1c04: 00 00 NOP NOP 1c06: 5e 64 ADD R5, SP 1c08: 35 82 LD.W R3, [R5] 1c0a: 41 10 MOV R4, #1 1c0c: 23 d5 ANL R4, R3, R4 1c0e: 58 98 LD.W R3, [R0 + #1] 1c10: 18 4a CLR R3, #0 1c12: 23 d7 ORL R4, R3, R4 ..\kf_it.c:130 pRxMsg->Flags.RTR = 0; pRxMsg->Flags.DIR = 0; 1c14: 21 4a CLR R4, #1 1c16: 22 4a CLR R4, #2 1c18: 44 a0 ST.W [R0 + #1], R4 ..\kf_it.c:131 pRxMsg->Flags.DLC = Can_Pdu_Receive.CAN_Message[i].m_DataLength; 1c1a: 95 98 LD.W R2, [R5 + #2] 1c1c: 3f 10 MOV R3, #15 1c1e: da d4 ANL R3, R2, R3 1c20: 1b 7a LSL R3, #3 1c22: 28 17 MOV R2, #120 1c24: 22 68 NOT R2, R2 1c26: a4 d4 ANL R4, R4, R2 1c28: e4 d6 ORL R4, R4, R3 1c2a: 44 a0 ST.W [R0 + #1], R4 ..\kf_it.c:132 memcpy(pRxMsg->Data,(const void *)Can_Pdu_Receive.CAN_Message[i].m_Data,8); 1c2c: 25 8c LD.B R4, [R5 + #16] 1c2e: 44 91 ST.B [R0 + #5], R4 1c30: 65 8c LD.B R4, [R5 + #17] 1c32: 84 91 ST.B [R0 + #6], R4 1c34: a5 8c LD.B R4, [R5 + #18] 1c36: c4 91 ST.B [R0 + #7], R4 1c38: e5 8c LD.B R4, [R5 + #19] 1c3a: 04 92 ST.B [R0 + #8], R4 1c3c: 25 8d LD.B R4, [R5 + #20] 1c3e: 44 92 ST.B [R0 + #9], R4 1c40: 65 8d LD.B R4, [R5 + #21] 1c42: 84 92 ST.B [R0 + #10], R4 1c44: a5 8d LD.B R4, [R5 + #22] 1c46: c4 92 ST.B [R0 + #11], R4 1c48: ed 8d LD.B R5, [R5 + #23] 1c4a: 05 93 ST.B [R0 + #12], R5 ..\kf_it.c:133 CAN_BUF_ApendMsg(0); 1c4c: 00 10 MOV R0, #0 1c4e: 14 43 LD R3, [PC + #20] ;->0x1c9c :=0xc98 1c50: 03 5c LJMP R3 1c52: c6 07 SJMP $-58 ;->0x1bde ..\kf_it.c:113 CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_TRANSMIT); } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_BUS_OFF)) { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_BUS_OFF); 1c54: 06 58 MOV R0, R6 1c56: 11 10 MOV R1, #1 1c58: 8c 7a LSL R1, #12 1c5a: 12 45 LD R5, [PC + #18] ;->0x1ca0 :=0x32a 1c5c: 05 5c LJMP R5 ..\kf_it.c:114 CAN4_SFR->CTLR &= ~(0x01); 1c5e: 56 82 LD.W R5, [R6] 1c60: 28 4a CLR R5, #0 1c62: 65 85 ST.W [R6], R5 1c64: 8b 07 SJMP $-117 ;->0x1b7a ..\kf_it.c:108 CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_ERROR_NEGATIVE); } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_TRANSMIT)) { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_TRANSMIT); 1c66: 10 40 LD R0, [PC + #16] ;->0x1ca4 :=0x40002880 1c68: 12 10 MOV R1, #2 1c6a: 0e 45 LD R5, [PC + #14] ;->0x1ca0 :=0x32a 1c6c: 05 5c LJMP R5 1c6e: 7f 07 SJMP $-129 ;->0x1b6c ..\kf_it.c:103 Can_Rcr = CAN4_SFR->RCR; } if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_ERROR_NEGATIVE)) { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_ERROR_NEGATIVE); 1c70: 0d 40 LD R0, [PC + #13] ;->0x1ca4 :=0x40002880 1c72: 10 12 MOV R1, #32 1c74: 0b 45 LD R5, [PC + #11] ;->0x1ca0 :=0x32a 1c76: 05 5c LJMP R5 1c78: 75 07 SJMP $-139 ;->0x1b62 ..\kf_it.c:97 volatile Can_Pdu_TypeDef Can_Pdu_Receive; volatile uint32_t Can_Rcr = 0x00; if(CAN_Get_INT_Flag(CAN4_SFR,CAN_INT_BUS_ERROR)) { CAN_Clear_INT_Flag(CAN4_SFR,CAN_INT_BUS_ERROR); 1c7a: 06 58 MOV R0, R6 1c7c: 10 18 MOV R1, #128 1c7e: 09 45 LD R5, [PC + #9] ;->0x1ca0 :=0x32a 1c80: 05 5c LJMP R5 ..\kf_it.c:98 Can_Rcr = CAN4_SFR->RCR; 1c82: ae 98 LD.W R5, [R6 + #2] 1c84: 75 85 ST.W [R7], R5 1c86: 68 07 SJMP $-152 ;->0x1b56 1c88: b0 0f 00 00 .long 0x00000fb0 ->000004016 [!!!@2@:LD.W R7, [SP + #176] @@: NOP 1c8c: 00 06 00 00 .long 0x00000600 ->000001536 [!!!@2@:SJMP $-512 ;->0x188c @@: NOP 1c90: 7c 0c 00 00 .long 0x00000c7c ->000003196 [!!!@2@:LD.W R4, [SP + #124] @@: NOP 1c94: 00 07 00 00 .long 0x00000700 ->000001792 [!!!@2@:SJMP $-256 ;->0x1a94 @@: NOP 1c98: df 07 00 00 .long 0x000007df ->000002015 [!!!@2@:SJMP $-33 ;->0x1c56 @@: NOP 1c9c: 98 0c 00 00 .long 0x00000c98 ->000003224 [!!!@2@:LD.W R4, [SP + #152] @@: NOP 1ca0: 2a 03 00 00 .long 0x0000032a ->000000810 [!!!@4@:JMP $+2752512 ;->0x541ca0 1ca4: 80 28 00 40 .long 0x40002880 ->1073752192 [!!!@2@:ADD R8, #0 @@: LD R0, [PC + #0] ;->0x1ca4 :=0x40002880 00001ca8 : Usart_Gpio_Init(): ..\main.c:60 * @retval :PA3 -- USART0_TX0 * PE7 -- USART0_RX */ void Usart_Gpio_Init(void) { 1ca8: 87 5f PUSH {R6-R8,LR} 1caa: e8 31 SUB SP, #24 ..\main.c:66 GPIO_InitTypeDef GPIO_InitStructure; /* * Configure PA3 remap mode * as TX pin */ GPIO_InitStructure.m_Mode = GPIO_MODE_RMP; 1cac: 52 10 MOV R5, #2 1cae: 01 25 ST.W [SP + #1], R5 ..\main.c:67 GPIO_InitStructure.m_OpenDrain = GPIO_POD_PP; 1cb0: 50 10 MOV R5, #0 1cb2: 03 25 ST.W [SP + #3], R5 ..\main.c:68 GPIO_InitStructure.m_PullDown = GPIO_NOPULL; 1cb4: 05 25 ST.W [SP + #5], R5 ..\main.c:69 GPIO_InitStructure.m_PullUp = GPIO_NOPULL; 1cb6: 04 25 ST.W [SP + #4], R5 ..\main.c:70 GPIO_InitStructure.m_Speed = GPIO_LOW_SPEED; 1cb8: 02 25 ST.W [SP + #2], R5 ..\main.c:71 GPIO_InitStructure.m_Pin = GPIO_PIN_MASK_3; 1cba: 58 10 MOV R5, #8 1cbc: e5 85 ST.W [SP], R5 ..\main.c:72 GPIO_Configuration(GPIOA_SFR, &GPIO_InitStructure); 1cbe: 0f 46 LD R6, [PC + #15] ;->0x1cf8 :=0x50000000 1cc0: 06 58 MOV R0, R6 1cc2: 2e 58 MOV R1, SP 1cc4: 0e 47 LD R7, [PC + #14] ;->0x1cfc :=0x36c 1cc6: 07 5c LJMP R7 ..\main.c:78 /* * Configure PE7 remap mode * as RX pin * Configured in pull-up mode */ GPIO_InitStructure.m_PullUp = GPIO_PULLUP; 1cc8: 51 10 MOV R5, #1 1cca: 04 25 ST.W [SP + #4], R5 ..\main.c:79 GPIO_InitStructure.m_Pin = GPIO_PIN_MASK_7; 1ccc: 50 18 MOV R5, #128 1cce: e5 85 ST.W [SP], R5 ..\main.c:80 GPIO_Configuration(GPIOE_SFR, &GPIO_InitStructure); 1cd0: 0c 45 LD R5, [PC + #12] ;->0x1d00 :=0x50000100 1cd2: 05 59 MOV R8, R5 1cd4: 05 58 MOV R0, R5 1cd6: 2e 58 MOV R1, SP 1cd8: 07 5c LJMP R7 ..\main.c:82 /* Configure PA3 remap function to AF3 */ GPIO_Pin_RMP_Config(GPIOA_SFR, GPIO_Pin_Num_3, GPIO_RMP_AF3); 1cda: 0b 47 LD R7, [PC + #11] ;->0x1d04 :=0x303 1cdc: 06 58 MOV R0, R6 1cde: 13 10 MOV R1, #3 1ce0: 47 58 MOV R2, R7 1ce2: 0a 46 LD R6, [PC + #10] ;->0x1d08 :=0x43c 1ce4: 06 5c LJMP R6 ..\main.c:84 /* Configure PE7 remap function to AF3 */ GPIO_Pin_RMP_Config(GPIOE_SFR, GPIO_Pin_Num_7, GPIO_RMP_AF3); 1ce6: 08 58 MOV R0, R8 1ce8: 17 10 MOV R1, #7 1cea: 47 58 MOV R2, R7 1cec: 06 5c LJMP R6 ..\main.c:85 } 1cee: e8 29 ADD SP, #24 1cf0: 07 5e POP {R6-R8} 1cf2: 0d 5d POP LR 1cf4: 1d 5c JMP LR 1cf6: 00 00 NOP NOP 1cf8: 00 00 00 50 .long 0x50000000 ->1342177280 [!!!@2@:NOP @@: JB [R0], #0 1cfc: 6c 03 00 00 .long 0x0000036c ->000000876 [!!!@4@:JMP $+7077888 ;->0xd81cfc 1d00: 00 01 00 50 .long 0x50000100 ->1342177536 [!!!@2@:CMN R0, R0 @@: JB [R0], #0 1d04: 03 03 00 00 .long 0x00000303 ->000000771 [!!!@4@:JMP $+196608 ;->0x61d04 1d08: 3c 04 00 00 .long 0x0000043c ->000001084 [!!!@2@:SJMP $+60 ;->0x1d80 @@: NOP 00001d0c
: main(): ..\main.c:91 /******************************************************************************* ** main Functions ** *******************************************************************************/ int main() { 1d0c: 9f 5f PUSH {R6-R10,LR} 1d0e: e4 30 SUB SP, #4 ..\main.c:94 uint32_t i, FlashRetVal; /* Initialize the system clock is 120M */ SystemInit(120); 1d10: 08 17 MOV R0, #120 1d12: 2a 45 LD R5, [PC + #42] ;->0x1db8 :=0x1e18 1d14: 05 5c LJMP R5 ..\main.c:96 /* Setup SysTick Timer as delay function, and input frequency is 120M */ systick_delay_init(120); 1d16: 08 17 MOV R0, #120 1d18: 29 45 LD R5, [PC + #41] ;->0x1dbc :=0x1f40 1d1a: 05 5c LJMP R5 ..\main.c:98 /* Initialize the USART IOs */ Usart_Gpio_Init(); 1d1c: 29 45 LD R5, [PC + #41] ;->0x1dc0 :=0x1ca8 1d1e: 05 5c LJMP R5 ..\main.c:107 - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ USART_Async_config(USART0_SFR); 1d20: 29 40 LD R0, [PC + #41] ;->0x1dc4 :=0x40000980 1d22: 2a 45 LD R5, [PC + #42] ;->0x1dc8 :=0xab0 1d24: 05 5c LJMP R5 ..\main.c:108 printf("---------------------------------------------------------------------\r\n"); 1d26: 2a 40 LD R0, [PC + #42] ;->0x1dcc :=0x2c18 1d28: 2a 46 LD R6, [PC + #42] ;->0x1dd0 :=0x1fc4 1d2a: 06 5c LJMP R6 ..\main.c:109 printf("Start CAN UDS Bootloader\r\n"); 1d2c: 2a 40 LD R0, [PC + #42] ;->0x1dd4 :=0x2c60 1d2e: 06 5c LJMP R6 ..\main.c:110 if(!CAN_BOOT_GetProgRequest()){ 1d30: 2a 40 LD R0, [PC + #42] ;->0x1dd8 :=0xb18 1d32: 00 5c LJMP R0 1d34: 00 38 CMP R0, #0 1d36: 0d f1 JNZ $+13 ;->0x1d50 ..\main.c:111 if(*((uint32_t *)APP_VALID_FLAG_ADDR)==APP_VALID_FLAG){ 1d38: 29 45 LD R5, [PC + #41] ;->0x1ddc :=0x30010 1d3a: 45 82 LD.W R4, [R5] 1d3c: 29 45 LD R5, [PC + #41] ;->0x1de0 :=0x55aa55aa 1d3e: 45 70 CMP R4, R5 1d40: 08 f1 JNZ $+8 ;->0x1d50 ..\main.c:112 printf("Exe App...\r\n"); 1d42: 29 40 LD R0, [PC + #41] ;->0x1de4 :=0x2c7c 1d44: 06 5c LJMP R6 ..\main.c:113 systick_delay_ms(10); 1d46: 0a 10 MOV R0, #10 1d48: 28 45 LD R5, [PC + #40] ;->0x1de8 :=0x1f88 1d4a: 05 5c LJMP R5 ..\main.c:114 CAN_BOOT_ExeApp(); 1d4c: 28 45 LD R5, [PC + #40] ;->0x1dec :=0xc04 1d4e: 05 5c LJMP R5 ..\main.c:117 } } printf("Exe Boot...\r\n"); 1d50: 28 40 LD R0, [PC + #40] ;->0x1df0 :=0x2c8c 1d52: 06 5c LJMP R6 ..\main.c:118 CAN_BUF_Init(0); 1d54: 00 10 MOV R0, #0 1d56: 28 45 LD R5, [PC + #40] ;->0x1df4 :=0xc54 1d58: 05 5c LJMP R5 ..\main.c:119 CAN_Configuration(); 1d5a: 28 45 LD R5, [PC + #40] ;->0x1df8 :=0x1168 1d5c: 05 5c LJMP R5 ..\main.c:120 printf("CAN1 Config End\r\n"); 1d5e: 28 40 LD R0, [PC + #40] ;->0x1dfc :=0x2c9c 1d60: 06 5c LJMP R6 ..\main.c:121 printf("APP_VALID_FLAG = 0x%08X\r\n",*((uint32_t *)APP_VALID_FLAG_ADDR)); 1d62: 28 40 LD R0, [PC + #40] ;->0x1e00 :=0x2cb0 1d64: 1e 45 LD R5, [PC + #30] ;->0x1ddc :=0x30010 1d66: 15 82 LD.W R1, [R5] 1d68: 06 5c LJMP R6 ..\main.c:122 printf("BOOT_REQ_FLAG = 0x%08X\r\n",*((uint32_t *)BOOT_REQ_FLAG_ADDR)); 1d6a: 27 40 LD R0, [PC + #39] ;->0x1e04 :=0x2ccc 1d6c: 27 45 LD R5, [PC + #39] ;->0x1e08 :=0x30000 1d6e: 15 82 LD.W R1, [R5] 1d70: 06 5c LJMP R6 1d72: 27 46 LD R6, [PC + #39] ;->0x1e0c :=0xcf0 1d74: 27 44 LD R4, [PC + #39] ;->0x1e10 :=0x1198 1d76: 44 59 MOV R10, R4 1d78: 27 45 LD R5, [PC + #39] ;->0x1e14 :=0x1928 1d7a: 25 59 MOV R9, R5 ..\main.c:134 for(int i=0;iFlags.DLC;i++){ printf("%02X ",pMsg->Data[i]); } printf("\r\n"); #endif if(pMsg->Flags.DIR){ 1d7c: 74 10 MOV R7, #4 ..\main.c:137 CAN_WriteData(0,pMsg); }else{ CAN_UDS_Process(pMsg->Data,pMsg->Flags.DLC); 1d7e: 8f 10 MOV R8, #15 ..\main.c:126 printf("APP_VALID_FLAG = 0x%08X\r\n",*((uint32_t *)APP_VALID_FLAG_ADDR)); printf("BOOT_REQ_FLAG = 0x%08X\r\n",*((uint32_t *)BOOT_REQ_FLAG_ADDR)); while (1) { CAN_MSG *pMsg; if(CAN_BUF_PopMsg(0,&pMsg,1)){ 1d80: 00 10 MOV R0, #0 1d82: 2e 58 MOV R1, SP 1d84: 21 10 MOV R2, #1 1d86: 06 5c LJMP R6 1d88: 00 38 CMP R0, #0 1d8a: fb f0 JZ $-5 ;->0x1d80 ..\main.c:134 for(int i=0;iFlags.DLC;i++){ printf("%02X ",pMsg->Data[i]); } printf("\r\n"); #endif if(pMsg->Flags.DIR){ 1d8c: 1e 82 LD.W R1, [SP] 1d8e: 69 98 LD.W R5, [R1 + #1] 1d90: e5 d5 ANL R4, R5, R7 1d92: 0d f0 JZ $+13 ;->0x1dac ..\main.c:135 CAN_WriteData(0,pMsg); 1d94: 00 10 MOV R0, #0 1d96: 0a 5c LJMP R10 ..\main.c:126 printf("APP_VALID_FLAG = 0x%08X\r\n",*((uint32_t *)APP_VALID_FLAG_ADDR)); printf("BOOT_REQ_FLAG = 0x%08X\r\n",*((uint32_t *)BOOT_REQ_FLAG_ADDR)); while (1) { CAN_MSG *pMsg; if(CAN_BUF_PopMsg(0,&pMsg,1)){ 1d98: 00 10 MOV R0, #0 1d9a: 2e 58 MOV R1, SP 1d9c: 21 10 MOV R2, #1 1d9e: 06 5c LJMP R6 1da0: 00 38 CMP R0, #0 1da2: ef f0 JZ $-17 ;->0x1d80 ..\main.c:134 for(int i=0;iFlags.DLC;i++){ printf("%02X ",pMsg->Data[i]); } printf("\r\n"); #endif if(pMsg->Flags.DIR){ 1da4: 1e 82 LD.W R1, [SP] 1da6: 69 98 LD.W R5, [R1 + #1] 1da8: e5 d5 ANL R4, R5, R7 1daa: f5 f1 JNZ $-11 ;->0x1d94 ..\main.c:137 CAN_WriteData(0,pMsg); }else{ CAN_UDS_Process(pMsg->Data,pMsg->Flags.DLC); 1dac: 2b 7c LSR R5, #3 1dae: 41 c1 ADD R0, R1, #5 1db0: 88 58 MOV R4, R8 1db2: 0d d5 ANL R1, R5, R4 1db4: 09 5c LJMP R9 ..\main.c:140 } } } 1db6: e5 07 SJMP $-27 ;->0x1d80 1db8: 18 1e 00 00 .long 0x00001e18 ->000007704 [!!!@2@:MOV R1, #232 @@: NOP 1dbc: 40 1f 00 00 .long 0x00001f40 ->000008000 [!!!@2@:MOV R4, #240 @@: NOP 1dc0: a8 1c 00 00 .long 0x00001ca8 ->000007336 [!!!@2@:MOV R10, #200 @@: NOP 1dc4: 80 09 00 40 .long 0x40000980 ->1073744256 [!!!@2@:LD.W R1, [SP + #128] @@: LD R0, [PC + #0] ;->0x1dc4 :=0x40000980 1dc8: b0 0a 00 00 .long 0x00000ab0 ->000002736 [!!!@2@:LD.W R2, [SP + #176] @@: NOP 1dcc: 18 2c 00 00 .long 0x00002c18 ->000011288 [!!!@2@:ADD R1, #72 @@: NOP 1dd0: c4 1f 00 00 .long 0x00001fc4 ->000008132 [!!!@2@:MOV R12, #244 @@: NOP 1dd4: 60 2c 00 00 .long 0x00002c60 ->000011360 [!!!@2@:ADD R6, #64 @@: NOP 1dd8: 18 0b 00 00 .long 0x00000b18 ->000002840 [!!!@2@:LD.W R3, [SP + #24] @@: NOP 1ddc: 10 00 03 00 .long 0x00030010 ->000196624 [!!!@4@:DMAC16LL ACC0, ACC0, R0, R3 1de0: aa 55 aa 55 .long 0x55aa55aa ->1437226410 [!!!@2@:JB R5, #26 @@: JB R5, #26 1de4: 7c 2c 00 00 .long 0x00002c7c ->000011388 [!!!@2@:ADD R7, #76 @@: NOP 1de8: 88 1f 00 00 .long 0x00001f88 ->000008072 [!!!@2@:MOV R8, #248 @@: NOP 1dec: 04 0c 00 00 .long 0x00000c04 ->000003076 [!!!@2@:LD.W R4, [SP + #4] @@: NOP 1df0: 8c 2c 00 00 .long 0x00002c8c ->000011404 [!!!@2@:ADD R8, #76 @@: NOP 1df4: 54 0c 00 00 .long 0x00000c54 ->000003156 [!!!@2@:LD.W R4, [SP + #84] @@: NOP 1df8: 68 11 00 00 .long 0x00001168 ->000004456 [!!!@2@:MOV R6, #24 @@: NOP 1dfc: 9c 2c 00 00 .long 0x00002c9c ->000011420 [!!!@2@:ADD R9, #76 @@: NOP 1e00: b0 2c 00 00 .long 0x00002cb0 ->000011440 [!!!@2@:ADD R11, #64 @@: NOP 1e04: cc 2c 00 00 .long 0x00002ccc ->000011468 [!!!@2@:ADD R12, #76 @@: NOP 1e08: 00 00 03 00 .long 0x00030000 ->000196608 1e0c: f0 0c 00 00 .long 0x00000cf0 ->000003312 [!!!@2@:LD.W R4, [SP + #240] @@: NOP 1e10: 98 11 00 00 .long 0x00001198 ->000004504 [!!!@2@:MOV R9, #24 @@: NOP 1e14: 28 19 00 00 .long 0x00001928 ->000006440 [!!!@2@:MOV R2, #152 @@: NOP 00001e18 : SystemInit(): ..\system_init.c:231 * @param in :SCLK_Value System master clock frequency,MHZ * @param out :None * @retval :None */ void SystemInit(uint8_t SCLK_Value) { 1e18: 9f 5f PUSH {R6-R10,LR} 1e1a: e4 30 SUB SP, #4 1e1c: a0 d1 ZXT.B R10, R0 ..\system_init.c:113 * ****************************************************************************** * Enable INTHF & INTLF,and set the INTHF as the SCLK. * Wait till INTHF is ready and if Time out is reached exit. * ****************************************************************************** */ OSC_INTLF_Software_Enable(TRUE); 1e1e: 01 10 MOV R0, #1 1e20: 2f 45 LD R5, [PC + #47] ;->0x1edc :=0x660 1e22: 05 5c LJMP R5 ..\system_init.c:114 OSC_INTHF_Software_Enable(TRUE); 1e24: 01 10 MOV R0, #1 1e26: 2f 45 LD R5, [PC + #47] ;->0x1ee0 :=0x64c 1e28: 05 5c LJMP R5 ..\system_init.c:115 FLASH_CFG = 0xC7; 1e2a: 47 1c MOV R4, #199 1e2c: 2e 45 LD R5, [PC + #46] ;->0x1ee4 :=0x40200100 1e2e: 6c a1 ST.W [R5 + #5], R4 ..\system_init.c:117 /* Set the INTHF as the SCLK DIV<1:1> */ OSC_SCK_Division_Config(SCLK_DIVISION_1); 1e30: 00 10 MOV R0, #0 1e32: 2e 45 LD R5, [PC + #46] ;->0x1ee8 :=0x548 1e34: 25 59 MOV R9, R5 1e36: 05 5c LJMP R5 ..\system_init.c:118 OSC_SCK_Source_Config(SCLK_SOURCE_INTHF); 1e38: 00 10 MOV R0, #0 1e3a: 2d 45 LD R5, [PC + #45] ;->0x1eec :=0x5b8 1e3c: 05 59 MOV R8, R5 1e3e: 05 5c LJMP R5 ..\system_init.c:119 StartUpCounter = HSI_STARTUP_TIMEOUT; 1e40: 50 17 MOV R5, #112 1e42: e5 85 ST.W [SP], R5 ..\system_init.c:120 while (--StartUpCounter); 1e44: 5e 82 LD.W R5, [SP] 1e46: 6d cc SUB R5, R5, #1 1e48: e5 85 ST.W [SP], R5 1e4a: 50 38 CMP R5, #0 1e4c: fc f1 JNZ $-4 ;->0x1e44 1e4e: 29 47 LD R7, [PC + #41] ;->0x1ef0 :=0x682 ..\system_init.c:121 while (OSC_Get_INTHF_INT_Flag() != SET); 1e50: 07 5c LJMP R7 1e52: c0 58 MOV R6, R0 1e54: 01 38 CMP R0, #1 1e56: fd f1 JNZ $-3 ;->0x1e50 ..\system_init.c:131 * If an external clock source is used, must be wait till EXTHF is ready and if * Time out is reached exit. * ****************************************************************************** */ #ifdef SYSCLK_FREQ_HSI OSC_PLL_Input_Source_Config(PLL_INPUT_INTHF); 1e58: 00 10 MOV R0, #0 1e5a: 27 45 LD R5, [PC + #39] ;->0x1ef4 :=0x560 1e5c: 05 5c LJMP R5 ..\system_init.c:169 * Enable HFCLK and if EXTHF is invalid configure the HFCLK default clock source * is HSI. * Enable LFCLK and if configure the LFCLK default clock source is LSI. * ****************************************************************************** */ if((SCLK_Value >= 25) && (SCLK_Value <= 120)) 1e5e: aa 58 MOV R5, R10 1e60: 59 31 SUB R5, #25 1e62: 45 d1 ZXT.B R4, R5 1e64: 4f 3d CMP R4, #95 1e66: 21 f8 JHI $+33 ;->0x1ea8 ..\system_init.c:171 { OSC_PLL_Multiple_Value_Select(PLL_Value_Select[SCLK_Value-25][0], \ 1e68: 24 43 LD R3, [PC + #36] ;->0x1ef8 :=0x2818 1e6a: 43 10 MOV R4, #3 1e6c: 2d cb MULS R5, R5, R4 1e6e: 00 00 NOP NOP 1e70: 63 c3 ADD R4, R3, R5 1e72: 43 e5 LD.B R0, [R3 + R5] 1e74: 4c 88 LD.B R1, [R4 + #1] 1e76: 94 88 LD.B R2, [R4 + #2] 1e78: 21 45 LD R5, [PC + #33] ;->0x1efc :=0x5cc 1e7a: 05 5c LJMP R5 ..\system_init.c:174 PLL_Value_Select[SCLK_Value-25][1],PLL_Value_Select[SCLK_Value-25][2]); #ifdef SYSCLK_FREQ_HSI OSC_PLL_Start_Delay_Config(PLL_START_DELAY_8192); 1e7c: 07 10 MOV R0, #7 1e7e: 21 45 LD R5, [PC + #33] ;->0x1f00 :=0x620 1e80: 05 5c LJMP R5 ..\system_init.c:184 OSC_PLL_Start_Delay_Config(PLL_START_DELAY_8192); #else OSC_PLL_Start_Delay_Config(PLL_START_DELAY_16384); #endif #endif OSC_PLL_Software_Enable(TRUE); 1e82: 06 58 MOV R0, R6 1e84: 20 45 LD R5, [PC + #32] ;->0x1f04 :=0x638 1e86: 05 5c LJMP R5 ..\system_init.c:185 OSC_PLL_RST(); 1e88: 20 45 LD R5, [PC + #32] ;->0x1f08 :=0x614 1e8a: 05 5c LJMP R5 1e8c: 20 46 LD R6, [PC + #32] ;->0x1f0c :=0x674 ..\system_init.c:186 while (OSC_Get_PLL_INT_Flag() != SET); 1e8e: 06 5c LJMP R6 1e90: 01 38 CMP R0, #1 1e92: fe f1 JNZ $-2 ;->0x1e8e ..\system_init.c:187 if(SCLK_Value <= 48) 1e94: a0 3b CMP R10, #48 1e96: 49 f8 JHI $+73 ;->0x1f28 ..\system_init.c:188 FLASH_CFG = 0xC2; 1e98: 42 1c MOV R4, #194 1e9a: 13 45 LD R5, [PC + #19] ;->0x1ee4 :=0x40200100 1e9c: 6c a1 ST.W [R5 + #5], R4 ..\system_init.c:194 else if(SCLK_Value <= 96) FLASH_CFG = 0xC4; else if(SCLK_Value <= 120) FLASH_CFG = 0xC5; /* Configure the System clock source is PLL */ OSC_SCK_Division_Config(SCLK_DIVISION_1); 1e9e: 00 10 MOV R0, #0 1ea0: 09 5c LJMP R9 ..\system_init.c:195 OSC_SCK_Source_Config(SCLK_SOURCE_PLL); 1ea2: 04 10 MOV R0, #4 1ea4: 08 5c LJMP R8 1ea6: 05 04 SJMP $+5 ;->0x1eb0 ..\system_init.c:199 } else { OSC_SCK_Division_Config(SCLK_DIVISION_1); 1ea8: 00 10 MOV R0, #0 1eaa: 09 5c LJMP R9 ..\system_init.c:201 #ifdef SYSCLK_FREQ_HSI OSC_SCK_Source_Config(SCLK_SOURCE_INTHF); 1eac: 00 10 MOV R0, #0 1eae: 08 5c LJMP R8 ..\system_init.c:207 #else OSC_SCK_Source_Config(SCLK_SOURCE_EXTHF); #endif } /* Enable HFCLK and if EXTHF is invalid configure the HFCLK default clock source is HSI DIV<1:1> */ OSC_HFCK_Division_Config(HFCK_DIVISION_1); 1eb0: 00 10 MOV R0, #0 1eb2: 18 45 LD R5, [PC + #24] ;->0x1f10 :=0x530 1eb4: 05 5c LJMP R5 ..\system_init.c:209 #ifdef SYSCLK_FREQ_HSI OSC_HFCK_Source_Config(HFCK_SOURCE_INTHF); 1eb6: 00 10 MOV R0, #0 1eb8: 17 45 LD R5, [PC + #23] ;->0x1f14 :=0x570 1eba: 05 5c LJMP R5 ..\system_init.c:213 #else OSC_HFCK_Source_Config(HFCK_SOURCE_EXTHF); #endif OSC_HFCK_Enable(TRUE); 1ebc: 01 10 MOV R0, #1 1ebe: 17 45 LD R5, [PC + #23] ;->0x1f18 :=0x588 1ec0: 05 5c LJMP R5 ..\system_init.c:215 /* Enable LFCLK and if configure the LFCLK default clock source is LSI DIV<1:1> */ OSC_LFCK_Division_Config(LFCK_DIVISION_1); 1ec2: 00 10 MOV R0, #0 1ec4: 16 45 LD R5, [PC + #22] ;->0x1f1c :=0x518 1ec6: 05 5c LJMP R5 ..\system_init.c:216 OSC_LFCK_Source_Config(LFCK_INPUT_INTLF); 1ec8: 00 10 MOV R0, #0 1eca: 16 45 LD R5, [PC + #22] ;->0x1f20 :=0x598 1ecc: 05 5c LJMP R5 ..\system_init.c:217 OSC_LFCK_Enable(TRUE); 1ece: 01 10 MOV R0, #1 1ed0: 15 45 LD R5, [PC + #21] ;->0x1f24 :=0x5a8 1ed2: 05 5c LJMP R5 ..\system_init.c:234 */ void SystemInit(uint8_t SCLK_Value) { /* Configure the System clock source, PLL Multiplier and Divider factors */ SetSysClock(SCLK_Value); } 1ed4: e4 28 ADD SP, #4 1ed6: 1f 5e POP {R6-R10} 1ed8: 0d 5d POP LR 1eda: 1d 5c JMP LR 1edc: 60 06 00 00 .long 0x00000660 ->000001632 [!!!@2@:SJMP $-416 ;->0x1b9c @@: NOP 1ee0: 4c 06 00 00 .long 0x0000064c ->000001612 [!!!@2@:SJMP $-436 ;->0x1b78 @@: NOP 1ee4: 00 01 20 40 .long 0x40200100 ->1075839232 [!!!@2@:CMN R0, R0 @@: LD R0, [PC + #32] ;->0x1f64 :=0x84504508 1ee8: 48 05 00 00 .long 0x00000548 ->000001352 [!!!@2@:SJMP $+328 ;->0x2178 @@: NOP 1eec: b8 05 00 00 .long 0x000005b8 ->000001464 [!!!@2@:SJMP $+440 ;->0x225c @@: NOP 1ef0: 82 06 00 00 .long 0x00000682 ->000001666 [!!!@2@:SJMP $-382 ;->0x1bf4 @@: NOP 1ef4: 60 05 00 00 .long 0x00000560 ->000001376 [!!!@2@:SJMP $+352 ;->0x21b4 @@: NOP 1ef8: 18 28 00 00 .long 0x00002818 ->000010264 [!!!@2@:ADD R1, #8 @@: NOP 1efc: cc 05 00 00 .long 0x000005cc ->000001484 [!!!@2@:SJMP $+460 ;->0x2294 @@: NOP 1f00: 20 06 00 00 .long 0x00000620 ->000001568 [!!!@2@:SJMP $-480 ;->0x1b40 @@: NOP 1f04: 38 06 00 00 .long 0x00000638 ->000001592 [!!!@2@:SJMP $-456 ;->0x1b74 @@: NOP 1f08: 14 06 00 00 .long 0x00000614 ->000001556 [!!!@2@:SJMP $-492 ;->0x1b30 @@: NOP 1f0c: 74 06 00 00 .long 0x00000674 ->000001652 [!!!@2@:SJMP $-396 ;->0x1bf4 @@: NOP 1f10: 30 05 00 00 .long 0x00000530 ->000001328 [!!!@2@:SJMP $+304 ;->0x2170 @@: NOP 1f14: 70 05 00 00 .long 0x00000570 ->000001392 [!!!@2@:SJMP $+368 ;->0x21f4 @@: NOP 1f18: 88 05 00 00 .long 0x00000588 ->000001416 [!!!@2@:SJMP $+392 ;->0x2228 @@: NOP 1f1c: 18 05 00 00 .long 0x00000518 ->000001304 [!!!@2@:SJMP $+280 ;->0x214c @@: NOP 1f20: 98 05 00 00 .long 0x00000598 ->000001432 [!!!@2@:SJMP $+408 ;->0x2250 @@: NOP 1f24: a8 05 00 00 .long 0x000005a8 ->000001448 [!!!@2@:SJMP $+424 ;->0x2274 @@: NOP ..\system_init.c:189 OSC_PLL_Software_Enable(TRUE); OSC_PLL_RST(); while (OSC_Get_PLL_INT_Flag() != SET); if(SCLK_Value <= 48) FLASH_CFG = 0xC2; else if(SCLK_Value <= 96) 1f28: a0 3e CMP R10, #96 1f2a: 05 f8 JHI $+5 ;->0x1f34 ..\system_init.c:190 FLASH_CFG = 0xC4; 1f2c: 44 1c MOV R4, #196 1f2e: 04 45 LD R5, [PC + #4] ;->0x1f3c :=0x40200100 1f30: 6c a1 ST.W [R5 + #5], R4 1f32: b6 07 SJMP $-74 ;->0x1e9e ..\system_init.c:192 else if(SCLK_Value <= 120) FLASH_CFG = 0xC5; 1f34: 45 1c MOV R4, #197 1f36: 02 45 LD R5, [PC + #2] ;->0x1f3c :=0x40200100 1f38: 6c a1 ST.W [R5 + #5], R4 1f3a: b2 07 SJMP $-78 ;->0x1e9e 1f3c: 00 01 20 40 .long 0x40200100 ->1075839232 [!!!@2@:CMN R0, R0 @@: LD R0, [PC + #32] ;->0x1fbc :=0x402000a0 00001f40 : systick_delay_init(): ..\system_init.c:244 * @param in :SCLK_Value System master clock frequency,MHZ * @param out :None * @retval :None */ void systick_delay_init(uint32_t InputClock) { 1f40: 81 5f PUSH {R6,LR} 1f42: c0 58 MOV R6, R0 ..\system_init.c:245 SYSTICK_Cmd(FALSE); 1f44: 00 10 MOV R0, #0 1f46: 0b 45 LD R5, [PC + #11] ;->0x1f70 :=0x738 1f48: 05 5c LJMP R5 ..\system_init.c:246 SYSTICK_Clock_Config(SYSTICK_SYS_CLOCK_DIV_2); 1f4a: 00 10 MOV R0, #0 1f4c: 0a 45 LD R5, [PC + #10] ;->0x1f74 :=0x74c 1f4e: 05 5c LJMP R5 ..\system_init.c:247 SFR_CLR_BIT_ASM(ST_CALI, ST_CALII_STCLKREF_POS); 1f50: 0a 45 LD R5, [PC + #10] ;->0x1f78 :=0x402000ac 1f52: af 4f CLR [R5], #31 ..\system_init.c:248 fac_us = InputClock >> 1; 1f54: 51 10 MOV R5, #1 1f56: 46 dd LSR R0, R6, R5 1f58: 00 d1 ZXT.B R0, R0 1f5a: 09 45 LD R5, [PC + #9] ;->0x1f7c :=0x10000a98 1f5c: 50 83 ST.B [R5], R0 ..\system_init.c:249 fac_ms = fac_us * 1000; 1f5e: 09 45 LD R5, [PC + #9] ;->0x1f80 :=0x3e8 1f60: 40 cb MULS R0, R0, R5 1f62: 00 00 NOP NOP 1f64: 08 45 LD R5, [PC + #8] ;->0x1f84 :=0x10000a9a 1f66: 50 84 ST.H [R5], R0 ..\system_init.c:250 } 1f68: 06 5d POP R6 1f6a: 0d 5d POP LR 1f6c: 1d 5c JMP LR 1f6e: 00 00 NOP NOP 1f70: 38 07 00 00 .long 0x00000738 ->000001848 [!!!@2@:SJMP $-200 ;->0x1de0 @@: NOP 1f74: 4c 07 00 00 .long 0x0000074c ->000001868 [!!!@2@:SJMP $-180 ;->0x1e0c @@: NOP 1f78: ac 00 20 40 .long 0x402000ac ->1075839148 [!!!@4@:DO #784, $+32 ;->0x1fb8 1f7c: 98 0a 00 10 .long 0x10000a98 ->268438168 [!!!@2@:LD.W R2, [SP + #152] @@: MOV R0, #0 1f80: e8 03 00 00 .long 0x000003e8 ->000001000 [!!!@4@:JMP $-1572864 ;->0xffd01f80 1f84: 9a 0a 00 10 .long 0x10000a9a ->268438170 [!!!@2@:LD.W R2, [SP + #154] @@: MOV R0, #0 00001f88 : systick_delay_ms(): ..\system_init.c:293 * @retval :None */ void systick_delay_ms(unsigned int nms) { uint32_t temp; SYSTICK_SFR->RELOAD = (uint32_t)nms * fac_ms; 1f88: 0c 45 LD R5, [PC + #12] ;->0x1fb8 :=0x10000a9a 1f8a: 55 81 LD.H R5, [R5] 1f8c: 40 cb MULS R0, R0, R5 1f8e: 00 00 NOP NOP 1f90: 0b 42 LD R2, [PC + #11] ;->0x1fbc :=0x402000a0 1f92: 50 a0 ST.W [R2 + #1], R0 ..\system_init.c:294 SYSTICK_SFR->CV = 0; 1f94: 50 10 MOV R5, #0 1f96: 95 a0 ST.W [R2 + #2], R5 ..\system_init.c:295 SYSTICK_SFR->CTL |= ST_CTL_STEN; 1f98: 52 82 LD.W R5, [R2] 1f9a: 28 48 SET R5, #0 1f9c: 25 85 ST.W [R2], R5 ..\system_init.c:299 do { temp = ST_CTL; } while ((temp & 0x01) && !(temp & (1 << 16))); 1f9e: 09 43 LD R3, [PC + #9] ;->0x1fc0 :=0x10001 ..\system_init.c:298 SYSTICK_SFR->RELOAD = (uint32_t)nms * fac_ms; SYSTICK_SFR->CV = 0; SYSTICK_SFR->CTL |= ST_CTL_STEN; do { temp = ST_CTL; 1fa0: 07 44 LD R4, [PC + #7] ;->0x1fbc :=0x402000a0 1fa2: 52 82 LD.W R5, [R2] ..\system_init.c:299 } while ((temp & 0x01) && !(temp & (1 << 16))); 1fa4: ed d4 ANL R5, R5, R3 1fa6: 51 38 CMP R5, #1 1fa8: fc f0 JZ $-4 ;->0x1fa0 ..\system_init.c:300 SYSTICK_SFR->CTL &= ~ST_CTL_STEN; 1faa: 54 82 LD.W R5, [R4] 1fac: 28 4a CLR R5, #0 1fae: 45 85 ST.W [R4], R5 ..\system_init.c:301 SYSTICK_SFR->CV = 0; 1fb0: 50 10 MOV R5, #0 1fb2: a5 a0 ST.W [R4 + #2], R5 ..\system_init.c:302 } 1fb4: 1d 5c JMP LR 1fb6: 00 00 NOP NOP 1fb8: 9a 0a 00 10 .long 0x10000a9a ->268438170 [!!!@2@:LD.W R2, [SP + #154] @@: MOV R0, #0 1fbc: a0 00 20 40 .long 0x402000a0 ->1075839136 [!!!@4@:DO #16, $+32 ;->0x1ffc 1fc0: 01 00 01 00 .long 0x00010001 ->000065537 [!!!@2@:.short 0x0001 @@: .short 0x0001 00001fc4 : 1fc4: 24 5d PUSH R4 1fc6: 23 5d PUSH R3 1fc8: 22 5d PUSH R2 1fca: 21 5d PUSH R1 1fcc: 20 5d PUSH R0 1fce: 2d 5d PUSH LR 1fd0: 05 40 LD R0, [PC + #5] ;->0x1fe4 :=0x40000980 1fd2: 01 09 LD.W R1, [SP + #1] 1fd4: 4e 58 MOV R2, SP 1fd6: 28 28 ADD R2, #8 1fd8: 04 45 LD R5, [PC + #4] ;->0x1fe8 :=0x1fec 1fda: 05 5c LJMP R5 1fdc: 0d 5d POP LR 1fde: e4 29 ADD SP, #20 1fe0: 1d 5c JMP LR 1fe2: 00 00 NOP NOP 1fe4: 80 09 00 40 .long 0x40000980 ->1073744256 [!!!@2@:LD.W R1, [SP + #128] @@: LD R0, [PC + #0] ;->0x1fe4 :=0x40000980 1fe8: ec 1f 00 00 .long 0x00001fec ->000008172 [!!!@2@:MOV SP, #252 @@: NOP 00001fec : 1fec: ff 5f PUSH {R6-R12,LR} 1fee: ec 33 SUB SP, #60 1ff0: 0b 20 ST.W [SP + #11], R0 1ff2: 42 59 MOV R10, R2 1ff4: e1 58 MOV R7, R1 1ff6: 00 10 MOV R0, #0 1ff8: 0a 20 ST.W [SP + #10], R0 1ffa: 15 05 SJMP $+277 ;->0x2224 1ffc: 05 3a CMP R0, #37 1ffe: 02 f0 JZ $+2 ;->0x2002 2000: 09 05 SJMP $+265 ;->0x2212 2002: 47 88 LD.B R0, [R7 + #1] 2004: 05 3a CMP R0, #37 2006: 09 f1 JNZ $+9 ;->0x2018 2008: 0b 09 LD.W R1, [SP + #11] 200a: a2 43 LD R3, [PC + #162] ;->0x2290 :=0x26bc 200c: 03 5c LJMP R3 200e: 0a 0c LD.W R4, [SP + #10] 2010: 64 c0 ADD R4, R4, #1 2012: 0a 24 ST.W [SP + #10], R4 2014: bf c0 ADD R7, R7, #2 2016: 07 05 SJMP $+263 ;->0x2224 2018: 00 3b CMP R0, #48 201a: 05 f0 JZ $+5 ;->0x2024 201c: 7f c0 ADD R7, R7, #1 201e: 00 12 MOV R0, #32 2020: 0d 20 ST.W [SP + #13], R0 2022: 03 04 SJMP $+3 ;->0x2028 2024: bf c0 ADD R7, R7, #2 2026: 0d 20 ST.W [SP + #13], R0 2028: 57 80 LD.B R5, [R7] 202a: 00 10 MOV R0, #0 202c: 0c 20 ST.W [SP + #12], R0 202e: 5d 3a CMP R5, #45 2030: 04 f1 JNZ $+4 ;->0x2038 2032: 7f c0 ADD R7, R7, #1 2034: 31 10 MOV R3, #1 2036: 0c 23 ST.W [SP + #12], R3 2038: 57 80 LD.B R5, [R7] 203a: cb 12 MOV R12, #43 203c: 60 10 MOV R6, #0 203e: 50 3a CMP R5, #32 2040: 04 f1 JNZ $+4 ;->0x2048 2042: 7f c0 ADD R7, R7, #1 2044: 85 59 MOV R12, R5 2046: 61 10 MOV R6, #1 2048: 57 80 LD.B R5, [R7] 204a: 5b 3a CMP R5, #43 204c: 03 f1 JNZ $+3 ;->0x2052 204e: 7f c0 ADD R7, R7, #1 2050: 61 10 MOV R6, #1 2052: 57 80 LD.B R5, [R7] 2054: 51 33 SUB R5, #49 2056: 55 d1 ZXT.B R5, R5 2058: 80 10 MOV R8, #0 205a: 58 38 CMP R5, #8 205c: 12 f8 JHI $+18 ;->0x2080 205e: a7 58 MOV R5, R7 2060: 2a 10 MOV R2, #10 2062: 08 04 SJMP $+8 ;->0x2072 2064: 08 58 MOV R0, R8 2066: 98 ca MULS R3, R0, R2 2068: 00 00 NOP NOP 206a: 30 33 SUB R3, #48 206c: 03 59 MOV R8, R3 206e: 84 64 ADD R8, R4 2070: 88 d1 ZXT.B R8, R8 2072: e5 58 MOV R7, R5 2074: 45 76 LD.B R4, [R5++] 2076: 10 13 MOV R1, #48 2078: 5c c6 SUB R3, R4, R1 207a: 33 d1 ZXT.B R3, R3 207c: 39 38 CMP R3, #9 207e: f3 f9 JLS $-13 ;->0x2064 2080: 57 80 LD.B R5, [R7] 2082: 9f 1f MOV R9, #255 2084: 5e 3a CMP R5, #46 2086: 13 f1 JNZ $+19 ;->0x20ac 2088: 6f c0 ADD R5, R7, #1 208a: 90 10 MOV R9, #0 208c: 2a 10 MOV R2, #10 208e: 08 04 SJMP $+8 ;->0x209e 2090: 09 58 MOV R0, R9 2092: 98 ca MULS R3, R0, R2 2094: 00 00 NOP NOP 2096: 30 33 SUB R3, #48 2098: 23 59 MOV R9, R3 209a: 94 64 ADD R9, R4 209c: 99 d1 ZXT.B R9, R9 209e: e5 58 MOV R7, R5 20a0: 45 76 LD.B R4, [R5++] 20a2: 10 13 MOV R1, #48 20a4: 5c c6 SUB R3, R4, R1 20a6: 33 d1 ZXT.B R3, R3 20a8: 39 38 CMP R3, #9 20aa: f3 f9 JLS $-13 ;->0x2090 20ac: 57 80 LD.B R5, [R7] 20ae: 5c 3e CMP R5, #108 20b0: 05 f1 JNZ $+5 ;->0x20ba 20b2: 7f c0 ADD R7, R7, #1 20b4: 50 10 MOV R5, #0 20b6: 11 10 MOV R1, #1 20b8: 09 04 SJMP $+9 ;->0x20ca 20ba: 58 3e CMP R5, #104 20bc: 05 f1 JNZ $+5 ;->0x20c6 20be: 7f c0 ADD R7, R7, #1 20c0: 51 10 MOV R5, #1 20c2: 10 10 MOV R1, #0 20c4: 03 04 SJMP $+3 ;->0x20ca 20c6: 50 10 MOV R5, #0 20c8: 25 58 MOV R1, R5 20ca: 37 80 LD.B R3, [R7] 20cc: 40 10 MOV R4, #0 20ce: 35 3f CMP R3, #117 20d0: 03 f1 JNZ $+3 ;->0x20d6 20d2: 7f c0 ADD R7, R7, #1 20d4: 41 10 MOV R4, #1 20d6: 07 80 LD.B R0, [R7] 20d8: 03 3f CMP R0, #115 20da: 02 f1 JNZ $+2 ;->0x20de 20dc: ce 04 SJMP $+206 ;->0x2278 20de: 08 3f CMP R0, #120 20e0: 02 f1 JNZ $+2 ;->0x20e4 20e2: b5 04 SJMP $+181 ;->0x224c 20e4: 08 3d CMP R0, #88 20e6: 02 f1 JNZ $+2 ;->0x20ea 20e8: b4 04 SJMP $+180 ;->0x2250 20ea: 03 3e CMP R0, #99 20ec: 02 f1 JNZ $+2 ;->0x20f0 20ee: b4 04 SJMP $+180 ;->0x2256 20f0: 0f 3e CMP R0, #111 20f2: 02 f1 JNZ $+2 ;->0x20f6 20f4: b4 04 SJMP $+180 ;->0x225c 20f6: 02 3e CMP R0, #98 20f8: 02 f1 JNZ $+2 ;->0x20fc 20fa: b4 04 SJMP $+180 ;->0x2262 20fc: 06 3e CMP R0, #102 20fe: 02 f1 JNZ $+2 ;->0x2102 2100: 97 04 SJMP $+151 ;->0x222e 2102: 04 3e CMP R0, #100 2104: 02 f1 JNZ $+2 ;->0x2108 2106: b1 04 SJMP $+177 ;->0x2268 2108: 09 3e CMP R0, #105 210a: 02 f1 JNZ $+2 ;->0x210e 210c: ae 04 SJMP $+174 ;->0x2268 210e: 40 38 CMP R4, #0 2110: 03 f0 JZ $+3 ;->0x2116 2112: 7f cc SUB R7, R7, #1 2114: aa 04 SJMP $+170 ;->0x2268 2116: 0b 09 LD.W R1, [SP + #11] 2118: 5e 43 LD R3, [PC + #94] ;->0x2290 :=0x26bc 211a: 03 5c LJMP R3 211c: 0a 0c LD.W R4, [SP + #10] 211e: 64 c0 ADD R4, R4, #1 2120: 0a 24 ST.W [SP + #10], R4 2122: 7f c0 ADD R7, R7, #1 2124: 80 04 SJMP $+128 ;->0x2224 2126: 0a 82 LD.W R0, [R10] 2128: 05 04 SJMP $+5 ;->0x2132 212a: 0a 82 LD.W R0, [R10] 212c: 50 38 CMP R5, #0 212e: 02 f0 JZ $+2 ;->0x2132 2130: 00 d1 ZXT.B R0, R0 2132: 43 59 MOV R10, R3 2134: 20 38 CMP R2, #0 2136: 12 f0 JZ $+18 ;->0x215a 2138: 40 38 CMP R4, #0 213a: 05 f0 JZ $+5 ;->0x2144 213c: ae 58 MOV R5, SP 213e: 4d c0 ADD R1, R5, #1 2140: 55 45 LD R5, [PC + #85] ;->0x2294 :=0x25bc 2142: 04 04 SJMP $+4 ;->0x214a 2144: 6e 58 MOV R3, SP 2146: 4b c0 ADD R1, R3, #1 2148: 54 45 LD R5, [PC + #84] ;->0x2298 :=0x2604 214a: 05 5c LJMP R5 214c: 60 38 CMP R6, #0 214e: 0b f0 JZ $+11 ;->0x2164 2150: a1 e1 LD.B R5, [SP + #1] 2152: 5d 3a CMP R5, #45 2154: 0b f0 JZ $+11 ;->0x216a 2156: ec 83 ST.B [SP], R12 2158: 78 04 SJMP $+120 ;->0x2248 215a: 01 e3 ST.B [SP + #1], R0 215c: 42 e3 ST.B [SP + #2], R2 215e: 8e 58 MOV R4, SP 2160: 74 c0 ADD R6, R4, #1 2162: 06 04 SJMP $+6 ;->0x216e 2164: ae 58 MOV R5, SP 2166: 75 c0 ADD R6, R5, #1 2168: 03 04 SJMP $+3 ;->0x216e 216a: 0e 58 MOV R0, SP 216c: 70 c0 ADD R6, R0, #1 216e: 9f 1f MOV R9, #255 2170: a6 58 MOV R5, R6 2172: 03 04 SJMP $+3 ;->0x2178 2174: 81 30 SUB R8, #1 2176: 88 d1 ZXT.B R8, R8 2178: 80 38 CMP R8, #0 217a: 04 f0 JZ $+4 ;->0x2182 217c: 45 76 LD.B R4, [R5++] 217e: 40 38 CMP R4, #0 2180: fa f1 JNZ $-6 ;->0x2174 2182: 0c 09 LD.W R1, [SP + #12] 2184: 10 38 CMP R1, #0 2186: 03 f1 JNZ $+3 ;->0x218c 2188: 88 59 MOV R12, R8 218a: 0b 04 SJMP $+11 ;->0x21a0 218c: 0a 0b LD.W R3, [SP + #10] 218e: 83 59 MOV R12, R3 2190: f6 c6 SUB R6, R6, R3 2192: 23 04 SJMP $+35 ;->0x21d8 2194: 0d 08 LD.W R0, [SP + #13] 2196: 0b 09 LD.W R1, [SP + #11] 2198: 3e 44 LD R4, [PC + #62] ;->0x2290 :=0x26bc 219a: 04 5c LJMP R4 219c: c1 30 SUB R12, #1 219e: cc d1 ZXT.B R12, R12 21a0: c0 38 CMP R12, #0 21a2: f9 f1 JNZ $-7 ;->0x2194 21a4: 0a 0d LD.W R5, [SP + #10] 21a6: 58 64 ADD R5, R8 21a8: 0a 25 ST.W [SP + #10], R5 21aa: 0c 59 MOV R8, R12 21ac: f0 07 SJMP $-16 ;->0x218c 21ae: 25 59 MOV R9, R5 21b0: b0 38 CMP R11, #0 21b2: 0b f0 JZ $+11 ;->0x21c8 21b4: 3a 41 LD R1, [PC + #58] ;->0x229c :=0x1000045c 21b6: 31 82 LD.W R3, [R1] 21b8: 0e 23 ST.W [SP + #14], R3 21ba: 2b e4 LD.B R5, [R3 + R0] 21bc: 45 d1 ZXT.B R4, R5 21be: 50 11 MOV R5, #16 21c0: 6c d5 ANL R5, R4, R5 21c2: 03 f0 JZ $+3 ;->0x21c8 21c4: 00 32 SUB R0, #32 21c6: 00 d1 ZXT.B R0, R0 21c8: 0b 09 LD.W R1, [SP + #11] 21ca: 32 43 LD R3, [PC + #50] ;->0x2290 :=0x26bc 21cc: 03 5c LJMP R3 21ce: c1 28 ADD R12, #1 21d0: 80 38 CMP R8, #0 21d2: 03 f0 JZ $+3 ;->0x21d8 21d4: 81 30 SUB R8, #1 21d6: 88 d1 ZXT.B R8, R8 21d8: 8c 58 MOV R4, R12 21da: 26 e5 LD.B R4, [R6 + R4] 21dc: 04 d1 ZXT.B R0, R4 21de: 00 38 CMP R0, #0 21e0: 06 f1 JNZ $+6 ;->0x21ec 21e2: c8 58 MOV R6, R8 21e4: 0c 0d LD.W R5, [SP + #12] 21e6: 50 38 CMP R5, #0 21e8: 1b f0 JZ $+27 ;->0x221e 21ea: 10 04 SJMP $+16 ;->0x220a 21ec: 5f 1f MOV R5, #255 21ee: 95 70 CMP R9, R5 21f0: e0 f0 JZ $-32 ;->0x21b0 21f2: 29 58 MOV R1, R9 21f4: 69 cc SUB R5, R1, #1 21f6: 55 d1 ZXT.B R5, R5 21f8: 90 38 CMP R9, #0 21fa: da f1 JNZ $-38 ;->0x21ae 21fc: f3 07 SJMP $-13 ;->0x21e2 21fe: 00 12 MOV R0, #32 2200: 0b 09 LD.W R1, [SP + #11] 2202: 24 43 LD R3, [PC + #36] ;->0x2290 :=0x26bc 2204: 03 5c LJMP R3 2206: 81 30 SUB R8, #1 2208: 88 d1 ZXT.B R8, R8 220a: 80 38 CMP R8, #0 220c: f9 f1 JNZ $-7 ;->0x21fe 220e: c6 64 ADD R12, R6 2210: 07 04 SJMP $+7 ;->0x221e 2212: 0b 09 LD.W R1, [SP + #11] 2214: 1f 44 LD R4, [PC + #31] ;->0x2290 :=0x26bc 2216: 04 5c LJMP R4 2218: 0a 0d LD.W R5, [SP + #10] 221a: 6d c0 ADD R5, R5, #1 221c: 85 59 MOV R12, R5 221e: 7f c0 ADD R7, R7, #1 2220: 2c 58 MOV R1, R12 2222: 0a 21 ST.W [SP + #10], R1 2224: 07 80 LD.B R0, [R7] 2226: 00 38 CMP R0, #0 2228: 02 f0 JZ $+2 ;->0x222c 222a: e9 06 SJMP $-279 ;->0x1ffc 222c: 2c 04 SJMP $+44 ;->0x2284 222e: ca 58 MOV R6, R10 2230: 68 28 ADD R6, #8 2232: 6a 58 MOV R3, R10 2234: 03 82 LD.W R0, [R3] 2236: 4b 98 LD.W R1, [R3 + #1] 2238: 1a 45 LD R5, [PC + #26] ;->0x22a0 :=0x26e4 223a: 05 5c LJMP R5 223c: 2e 58 MOV R1, SP 223e: 49 58 MOV R2, R9 2240: 19 45 LD R5, [PC + #25] ;->0x22a4 :=0x2350 2242: 05 5c LJMP R5 2244: 46 59 MOV R10, R6 2246: b0 10 MOV R11, #0 2248: ce 58 MOV R6, SP 224a: 92 07 SJMP $-110 ;->0x216e 224c: b0 10 MOV R11, #0 224e: 02 04 SJMP $+2 ;->0x2252 2250: b1 10 MOV R11, #1 2252: 20 11 MOV R2, #16 2254: 0c 04 SJMP $+12 ;->0x226c 2256: b0 10 MOV R11, #0 2258: 4b 58 MOV R2, R11 225a: 09 04 SJMP $+9 ;->0x226c 225c: b0 10 MOV R11, #0 225e: 28 10 MOV R2, #8 2260: 06 04 SJMP $+6 ;->0x226c 2262: b0 10 MOV R11, #0 2264: 22 10 MOV R2, #2 2266: 03 04 SJMP $+3 ;->0x226c 2268: b0 10 MOV R11, #0 226a: 2a 10 MOV R2, #10 226c: 0a 58 MOV R0, R10 226e: 18 c1 ADD R3, R0, #4 2270: 10 38 CMP R1, #0 2272: 02 f0 JZ $+2 ;->0x2276 2274: 59 07 SJMP $-167 ;->0x2126 2276: 5a 07 SJMP $-166 ;->0x212a 2278: 6a 82 LD.W R6, [R10] 227a: a4 28 ADD R10, #4 227c: 30 12 MOV R3, #32 227e: 0d 23 ST.W [SP + #13], R3 2280: b0 10 MOV R11, #0 2282: 77 07 SJMP $-137 ;->0x2170 2284: 0a 08 LD.W R0, [SP + #10] 2286: ec 2b ADD SP, #60 2288: 7f 5e POP {R6-R12} 228a: 0d 5d POP LR 228c: 1d 5c JMP LR 228e: 00 00 NOP NOP 2290: bc 26 00 00 .long 0x000026bc ->000009916 [!!!@2@:ST.W [SP + #188], R6 @@: NOP 2294: bc 25 00 00 .long 0x000025bc ->000009660 [!!!@2@:ST.W [SP + #188], R5 @@: NOP 2298: 04 26 00 00 .long 0x00002604 ->000009732 [!!!@2@:ST.W [SP + #4], R6 @@: NOP 229c: 5c 04 00 10 .long 0x1000045c ->268436572 [!!!@2@:SJMP $+92 ;->0x2354 @@: MOV R0, #0 22a0: e4 26 00 00 .long 0x000026e4 ->000009956 [!!!@2@:ST.W [SP + #228], R6 @@: NOP 22a4: 50 23 00 00 .long 0x00002350 ->000009040 [!!!@2@:ST.W [SP + #80], R3 @@: NOP 000022a8 : 22a8: 20 38 CMP R2, #0 22aa: 07 f0 JZ $+7 ;->0x22b8 22ac: 90 c2 ADD R2, R0, R2 22ae: a0 58 MOV R5, R0 22b0: 41 76 LD.B R4, [R1++] 22b2: 54 77 ST.B [R5++], R4 22b4: 52 70 CMP R5, R2 22b6: fd f1 JNZ $-3 ;->0x22b0 22b8: 1d 5c JMP LR 000022ba : 22ba: 20 38 CMP R2, #0 22bc: 06 f0 JZ $+6 ;->0x22c8 22be: 90 c2 ADD R2, R0, R2 22c0: a0 58 MOV R5, R0 22c2: 51 77 ST.B [R5++], R1 22c4: 52 70 CMP R5, R2 22c6: fe f1 JNZ $-2 ;->0x22c2 22c8: 1d 5c JMP LR ... 000022cc <_ftoa_put_char>: 22cc: 03 44 LD R4, [PC + #3] ;->0x22d8 :=0x10000aa8 22ce: 54 82 LD.W R5, [R4] 22d0: 50 77 ST.B [R5++], R0 22d2: 45 85 ST.W [R4], R5 22d4: 1d 5c JMP LR 22d6: 00 00 NOP NOP 22d8: a8 0a 00 10 .long 0x10000aa8 ->268438184 [!!!@2@:LD.W R2, [SP + #168] @@: MOV R0, #0 000022dc <_ftoa_put_digit>: 22dc: 81 5f PUSH {R6,LR} 22de: 09 46 LD R6, [PC + #9] ;->0x2300 :=0x10000aa4 22e0: 06 82 LD.W R0, [R6] 22e2: 84 7d LSR R0, #28 22e4: 00 2b ADD R0, #48 22e6: 08 45 LD R5, [PC + #8] ;->0x2304 :=0x22cc 22e8: 05 5c LJMP R5 22ea: 08 45 LD R5, [PC + #8] ;->0x2308 :=0xfffffff 22ec: 36 82 LD.W R3, [R6] 22ee: 6b d5 ANL R5, R3, R5 22f0: 32 10 MOV R3, #2 22f2: e5 da LSL R4, R5, R3 22f4: 6c c3 ADD R5, R4, R5 22f6: 6d c3 ADD R5, R5, R5 22f8: 65 85 ST.W [R6], R5 22fa: 06 5d POP R6 22fc: 0d 5d POP LR 22fe: 1d 5c JMP LR 2300: a4 0a 00 10 .long 0x10000aa4 ->268438180 [!!!@2@:LD.W R2, [SP + #164] @@: MOV R0, #0 2304: cc 22 00 00 .long 0x000022cc ->000008908 [!!!@2@:ST.W [SP + #204], R2 @@: NOP 2308: ff ff ff 0f .long 0x0fffffff ->268435455 0000230c <_ftoa_round>: 230c: 00 38 CMP R0, #0 230e: 1a f4 JMI $+26 ;->0x2342 2310: 0d 45 LD R5, [PC + #13] ;->0x2344 :=0x10000aa4 2312: 45 82 LD.W R4, [R5] 2314: 51 10 MOV R5, #1 2316: ab 7b LSL R5, #27 2318: 3a 10 MOV R3, #10 231a: 04 04 SJMP $+4 ;->0x2322 231c: 6d c1 ADD R5, R5, #5 231e: ed d2 DIVU R5, R5, R3 2320: 40 cc SUB R0, R0, #1 2322: 00 38 CMP R0, #0 2324: fc f1 JNZ $-4 ;->0x231c 2326: 2d c3 ADD R5, R5, R4 2328: 07 44 LD R4, [PC + #7] ;->0x2344 :=0x10000aa4 232a: 45 85 ST.W [R4], R5 232c: 07 43 LD R3, [PC + #7] ;->0x2348 :=0x9fffffff 232e: 53 70 CMP R5, R3 2330: 09 f9 JLS $+9 ;->0x2342 2332: 6d c1 ADD R5, R5, #5 2334: 3a 10 MOV R3, #10 2336: ed d2 DIVU R5, R5, R3 2338: 45 85 ST.W [R4], R5 233a: 05 45 LD R5, [PC + #5] ;->0x234c :=0x10000a9c 233c: 35 82 LD.W R3, [R5] 233e: 63 c0 ADD R4, R3, #1 2340: 54 85 ST.W [R5], R4 2342: 1d 5c JMP LR 2344: a4 0a 00 10 .long 0x10000aa4 ->268438180 [!!!@2@:LD.W R2, [SP + #164] @@: MOV R0, #0 2348: ff ff ff 9f .long 0x9fffffff ->-1610612737 234c: 9c 0a 00 10 .long 0x10000a9c ->268438172 [!!!@2@:LD.W R2, [SP + #156] @@: MOV R0, #0 00002350 : 2350: 87 5f PUSH {R6-R8,LR} 2352: 62 d1 ZXT.B R6, R2 2354: 8a 47 LD R7, [PC + #138] ;->0x257c :=0x10000aa4 2356: 70 85 ST.W [R7], R0 2358: 8a 45 LD R5, [PC + #138] ;->0x2580 :=0x10000aa8 235a: 51 85 ST.W [R5], R1 235c: 00 38 CMP R0, #0 235e: 04 f5 JPL $+4 ;->0x2366 2360: 0d 12 MOV R0, #45 2362: 89 45 LD R5, [PC + #137] ;->0x2584 :=0x22cc 2364: 05 5c LJMP R5 2366: 57 82 LD.W R5, [R7] 2368: 07 11 MOV R0, #23 236a: 1d dc LSR R3, R5, R0 236c: 1f 1f MOV R1, #255 236e: 5b d4 ANL R3, R3, R1 2370: 86 44 LD R4, [PC + #134] ;->0x2588 :=0x10000aa0 2372: 43 85 ST.W [R4], R3 2374: 86 42 LD R2, [PC + #134] ;->0x258c :=0x7fffff 2376: ad d4 ANL R5, R5, R2 2378: 01 10 MOV R0, #1 237a: 07 7b LSL R0, #23 237c: 25 d6 ORL R4, R5, R0 237e: 74 85 ST.W [R7], R4 2380: 31 70 CMP R3, R1 2382: 16 f1 JNZ $+22 ;->0x23ae 2384: 80 46 LD R6, [PC + #128] ;->0x2584 :=0x22cc 2386: 51 10 MOV R5, #1 2388: 2f 7b LSL R5, #23 238a: 45 70 CMP R4, R5 238c: 07 f1 JNZ $+7 ;->0x239a 238e: 09 16 MOV R0, #105 2390: 06 5c LJMP R6 2392: 0e 16 MOV R0, #110 2394: 06 5c LJMP R6 2396: 06 14 MOV R0, #70 2398: 06 04 SJMP $+6 ;->0x23a4 239a: 0e 16 MOV R0, #110 239c: 06 5c LJMP R6 239e: 01 16 MOV R0, #97 23a0: 06 5c LJMP R6 23a2: 0e 16 MOV R0, #110 23a4: 06 5c LJMP R6 23a6: 00 10 MOV R0, #0 23a8: 77 45 LD R5, [PC + #119] ;->0x2584 :=0x22cc 23aa: 05 5c LJMP R5 23ac: e4 04 SJMP $+228 ;->0x2574 23ae: 30 38 CMP R3, #0 23b0: 0c f0 JZ $+12 ;->0x23c8 23b2: 73 45 LD R5, [PC + #115] ;->0x257c :=0x10000aa4 23b4: 55 82 LD.W R5, [R5] 23b6: 75 44 LD R4, [PC + #117] ;->0x2588 :=0x10000aa0 23b8: 44 82 LD.W R4, [R4] 23ba: 4f 37 SUB R4, #127 23bc: 2d 7a LSL R5, #5 23be: 44 58 MOV R2, R4 23c0: 30 10 MOV R3, #0 23c2: 74 41 LD R1, [PC + #116] ;->0x2590 :=0x4fffffff 23c4: 05 10 MOV R0, #5 23c6: 3a 04 SJMP $+58 ;->0x243a 23c8: 31 10 MOV R3, #1 23ca: 1f 7b LSL R3, #23 23cc: 43 70 CMP R4, R3 23ce: 22 f1 JNZ $+34 ;->0x2412 23d0: 00 13 MOV R0, #48 23d2: 6d 47 LD R7, [PC + #109] ;->0x2584 :=0x22cc 23d4: 07 5c LJMP R7 23d6: 5f 11 MOV R5, #31 23d8: 6e d5 ANL R5, R6, R5 23da: 6f 41 LD R1, [PC + #111] ;->0x2594 :=0x10000a9c 23dc: 01 59 MOV R8, R1 23de: 15 85 ST.W [R1], R5 23e0: 50 38 CMP R5, #0 23e2: 05 f1 JNZ $+5 ;->0x23ec 23e4: 50 14 MOV R5, #64 23e6: 76 d5 ANL R6, R6, R5 23e8: df f0 JZ $-33 ;->0x23a6 23ea: 0b 04 SJMP $+11 ;->0x2400 23ec: 0e 12 MOV R0, #46 23ee: 02 04 SJMP $+2 ;->0x23f2 23f0: 00 13 MOV R0, #48 23f2: 07 5c LJMP R7 23f4: 58 82 LD.W R5, [R8] 23f6: 65 cc SUB R4, R5, #1 23f8: 84 85 ST.W [R8], R4 23fa: 50 38 CMP R5, #0 23fc: fa f1 JNZ $-6 ;->0x23f0 23fe: f3 07 SJMP $-13 ;->0x23e4 2400: 05 14 MOV R0, #69 2402: 61 46 LD R6, [PC + #97] ;->0x2584 :=0x22cc 2404: 06 5c LJMP R6 2406: 0b 12 MOV R0, #43 2408: 06 5c LJMP R6 240a: 00 13 MOV R0, #48 240c: 06 5c LJMP R6 240e: 00 13 MOV R0, #48 2410: ca 07 SJMP $-54 ;->0x23a4 2412: 41 10 MOV R4, #1 2414: 02 04 SJMP $+2 ;->0x2418 2416: 6d c3 ADD R5, R5, R5 2418: 64 58 MOV R3, R4 241a: 64 cc SUB R4, R4, #1 241c: 52 70 CMP R5, R2 241e: fc f9 JLS $-4 ;->0x2416 2420: 57 44 LD R4, [PC + #87] ;->0x257c :=0x10000aa4 2422: 45 85 ST.W [R4], R5 2424: 59 45 LD R5, [PC + #89] ;->0x2588 :=0x10000aa0 2426: 53 85 ST.W [R5], R3 2428: c5 07 SJMP $-59 ;->0x23b2 242a: 51 70 CMP R5, R1 242c: 03 f8 JHI $+3 ;->0x2432 242e: 6d c3 ADD R5, R5, R5 2430: 04 04 SJMP $+4 ;->0x2438 2432: ad c0 ADD R5, R5, #2 2434: 2d d2 DIVU R5, R5, R0 2436: 5b c0 ADD R3, R3, #1 2438: 52 cc SUB R2, R2, #1 243a: 20 38 CMP R2, #0 243c: f7 fc JGT $-9 ;->0x242a 243e: 44 58 MOV R2, R4 2440: 40 38 CMP R4, #0 2442: 02 f5 JPL $+2 ;->0x2446 2444: 20 10 MOV R2, #0 2446: a4 c6 SUB R4, R4, R2 2448: 54 42 LD R2, [PC + #84] ;->0x2598 :=0x1fffffff 244a: 0b 04 SJMP $+11 ;->0x2460 244c: 52 70 CMP R5, R2 244e: 06 f8 JHI $+6 ;->0x245a 2450: 02 10 MOV R0, #2 2452: 0d da LSL R1, R5, R0 2454: 6d c2 ADD R5, R5, R1 2456: 5b cc SUB R3, R3, #1 2458: 03 04 SJMP $+3 ;->0x245e 245a: 6d c0 ADD R5, R5, #1 245c: 29 7c LSR R5, #1 245e: 64 c0 ADD R4, R4, #1 2460: 40 38 CMP R4, #0 2462: f5 f4 JMI $-11 ;->0x244c 2464: 49 42 LD R2, [PC + #73] ;->0x2588 :=0x10000aa0 2466: 24 85 ST.W [R2], R4 2468: 4d 42 LD R2, [PC + #77] ;->0x259c :=0xfffffff 246a: 05 04 SJMP $+5 ;->0x2474 246c: 12 10 MOV R1, #2 246e: 65 da LSL R4, R5, R1 2470: 6c c3 ADD R5, R4, R5 2472: 6d c3 ADD R5, R5, R5 2474: 83 58 MOV R4, R3 2476: 5b cc SUB R3, R3, #1 2478: 52 70 CMP R5, R2 247a: f9 f9 JLS $-7 ;->0x246c 247c: 46 43 LD R3, [PC + #70] ;->0x2594 :=0x10000a9c 247e: 34 85 ST.W [R3], R4 2480: 3f 43 LD R3, [PC + #63] ;->0x257c :=0x10000aa4 2482: 35 85 ST.W [R3], R5 2484: 50 16 MOV R5, #96 2486: 6e d5 ANL R5, R6, R5 2488: 0a f1 JNZ $+10 ;->0x249c 248a: 53 10 MOV R5, #3 248c: 55 68 NOT R5, R5 248e: 45 70 CMP R4, R5 2490: 03 fb JLT $+3 ;->0x2496 2492: 46 70 CMP R4, R6 2494: 03 fb JLT $+3 ;->0x249a 2496: 36 48 SET R6, #6 2498: 02 04 SJMP $+2 ;->0x249c 249a: 35 48 SET R6, #5 249c: 50 14 MOV R5, #64 249e: 6e d5 ANL R5, R6, R5 24a0: 7f 11 MOV R7, #31 24a2: fe d5 ANL R7, R6, R7 24a4: 50 38 CMP R5, #0 24a6: 30 f0 JZ $+48 ;->0x2506 24a8: 07 58 MOV R0, R7 24aa: 3e 45 LD R5, [PC + #62] ;->0x25a0 :=0x230c 24ac: 05 5c LJMP R5 24ae: 3e 44 LD R4, [PC + #62] ;->0x25a4 :=0x22dc 24b0: 04 59 MOV R8, R4 24b2: 04 5c LJMP R4 24b4: 35 46 LD R6, [PC + #53] ;->0x2588 :=0x10000aa0 24b6: 67 85 ST.W [R6], R7 24b8: 70 38 CMP R7, #0 24ba: 09 f1 JNZ $+9 ;->0x24cc 24bc: 05 14 MOV R0, #69 24be: 32 46 LD R6, [PC + #50] ;->0x2584 :=0x22cc 24c0: 06 5c LJMP R6 24c2: 35 47 LD R7, [PC + #53] ;->0x2594 :=0x10000a9c 24c4: 57 82 LD.W R5, [R7] 24c6: 50 38 CMP R5, #0 24c8: 15 f5 JPL $+21 ;->0x24f2 24ca: 0d 04 SJMP $+13 ;->0x24e4 24cc: 0e 12 MOV R0, #46 24ce: 2e 45 LD R5, [PC + #46] ;->0x2584 :=0x22cc 24d0: 05 5c LJMP R5 24d2: 05 04 SJMP $+5 ;->0x24dc 24d4: 08 5c LJMP R8 24d6: 06 82 LD.W R0, [R6] 24d8: 68 cc SUB R5, R0, #1 24da: 65 85 ST.W [R6], R5 24dc: 56 82 LD.W R5, [R6] 24de: 50 38 CMP R5, #0 24e0: fa fc JGT $-6 ;->0x24d4 24e2: ed 07 SJMP $-19 ;->0x24bc 24e4: 0d 12 MOV R0, #45 24e6: 06 5c LJMP R6 24e8: 50 10 MOV R5, #0 24ea: 17 82 LD.W R1, [R7] 24ec: 6d c6 SUB R5, R5, R1 24ee: 75 85 ST.W [R7], R5 24f0: 03 04 SJMP $+3 ;->0x24f6 24f2: 0b 12 MOV R0, #43 24f4: 06 5c LJMP R6 24f6: 28 45 LD R5, [PC + #40] ;->0x2594 :=0x10000a9c 24f8: 05 82 LD.W R0, [R5] 24fa: 22 45 LD R5, [PC + #34] ;->0x2580 :=0x10000aa8 24fc: 15 82 LD.W R1, [R5] 24fe: 2a 10 MOV R2, #10 2500: 2a 45 LD R5, [PC + #42] ;->0x25a8 :=0x25ac 2502: 05 5c LJMP R5 2504: 38 04 SJMP $+56 ;->0x2574 2506: 24 46 LD R6, [PC + #36] ;->0x2594 :=0x10000a9c 2508: 46 82 LD.W R4, [R6] 250a: 07 c3 ADD R0, R7, R4 250c: 25 45 LD R5, [PC + #37] ;->0x25a0 :=0x230c 250e: 05 5c LJMP R5 2510: 56 82 LD.W R5, [R6] 2512: 50 38 CMP R5, #0 2514: 07 f5 JPL $+7 ;->0x2522 2516: 0c 04 SJMP $+12 ;->0x252e 2518: 08 5c LJMP R8 251a: 06 82 LD.W R0, [R6] 251c: 68 cc SUB R5, R0, #1 251e: 65 85 ST.W [R6], R5 2520: 03 04 SJMP $+3 ;->0x2526 2522: 21 41 LD R1, [PC + #33] ;->0x25a4 :=0x22dc 2524: 01 59 MOV R8, R1 2526: 56 82 LD.W R5, [R6] 2528: 50 38 CMP R5, #0 252a: f7 f5 JPL $-9 ;->0x2518 252c: 04 04 SJMP $+4 ;->0x2534 252e: 00 13 MOV R0, #48 2530: 15 45 LD R5, [PC + #21] ;->0x2584 :=0x22cc 2532: 05 5c LJMP R5 2534: 15 46 LD R6, [PC + #21] ;->0x2588 :=0x10000aa0 2536: 67 85 ST.W [R6], R7 2538: 70 38 CMP R7, #0 253a: 02 f1 JNZ $+2 ;->0x253e 253c: 35 07 SJMP $-203 ;->0x23a6 253e: 0e 12 MOV R0, #46 2540: 11 45 LD R5, [PC + #17] ;->0x2584 :=0x22cc 2542: 05 5c LJMP R5 2544: 14 47 LD R7, [PC + #20] ;->0x2594 :=0x10000a9c 2546: 40 10 MOV R4, #0 2548: 44 68 NOT R4, R4 254a: 04 59 MOV R8, R4 254c: 10 04 SJMP $+16 ;->0x256c 254e: 57 82 LD.W R5, [R7] 2550: 58 70 CMP R5, R8 2552: 08 fa JGE $+8 ;->0x2562 2554: 00 13 MOV R0, #48 2556: 0c 45 LD R5, [PC + #12] ;->0x2584 :=0x22cc 2558: 05 5c LJMP R5 255a: 07 82 LD.W R0, [R7] 255c: 68 c0 ADD R5, R0, #1 255e: 75 85 ST.W [R7], R5 2560: 03 04 SJMP $+3 ;->0x2566 2562: 11 45 LD R5, [PC + #17] ;->0x25a4 :=0x22dc 2564: 05 5c LJMP R5 2566: 16 82 LD.W R1, [R6] 2568: 69 cc SUB R5, R1, #1 256a: 65 85 ST.W [R6], R5 256c: 56 82 LD.W R5, [R6] 256e: 50 38 CMP R5, #0 2570: ef fc JGT $-17 ;->0x254e 2572: 1a 07 SJMP $-230 ;->0x23a6 2574: 07 5e POP {R6-R8} 2576: 0d 5d POP LR 2578: 1d 5c JMP LR 257a: 00 00 NOP NOP 257c: a4 0a 00 10 .long 0x10000aa4 ->268438180 [!!!@2@:LD.W R2, [SP + #164] @@: MOV R0, #0 2580: a8 0a 00 10 .long 0x10000aa8 ->268438184 [!!!@2@:LD.W R2, [SP + #168] @@: MOV R0, #0 2584: cc 22 00 00 .long 0x000022cc ->000008908 [!!!@2@:ST.W [SP + #204], R2 @@: NOP 2588: a0 0a 00 10 .long 0x10000aa0 ->268438176 [!!!@2@:LD.W R2, [SP + #160] @@: MOV R0, #0 258c: ff ff 7f 00 .long 0x007fffff ->008388607 2590: ff ff ff 4f .long 0x4fffffff ->1342177279 2594: 9c 0a 00 10 .long 0x10000a9c ->268438172 [!!!@2@:LD.W R2, [SP + #156] @@: MOV R0, #0 2598: ff ff ff 1f .long 0x1fffffff ->536870911 259c: ff ff ff 0f .long 0x0fffffff ->268435455 25a0: 0c 23 00 00 .long 0x0000230c ->000008972 [!!!@2@:ST.W [SP + #12], R3 @@: NOP 25a4: dc 22 00 00 .long 0x000022dc ->000008924 [!!!@2@:ST.W [SP + #220], R2 @@: NOP 25a8: ac 25 00 00 .long 0x000025ac ->000009644 [!!!@2@:ST.W [SP + #172], R5 @@: NOP 000025ac : 25ac: 2d 5d PUSH LR 25ae: 22 d1 ZXT.B R2, R2 25b0: 02 45 LD R5, [PC + #2] ;->0x25b8 :=0x25bc 25b2: 05 5c LJMP R5 25b4: 0d 5d POP LR 25b6: 1d 5c JMP LR 25b8: bc 25 00 00 .long 0x000025bc ->000009660 [!!!@2@:ST.W [SP + #188], R5 @@: NOP 000025bc : 25bc: 03 5f PUSH {R6-R7} 25be: e0 32 SUB SP, #32 25c0: 22 d1 ZXT.B R2, R2 25c2: 50 12 MOV R5, #32 25c4: 98 d2 DIVU R3, R0, R2 25c6: a3 ca MULS R4, R3, R2 25c8: 00 00 NOP NOP 25ca: 00 c7 SUB R0, R0, R4 25cc: 00 d1 ZXT.B R0, R0 25ce: 60 13 MOV R6, #48 25d0: a0 c3 ADD R4, R0, R6 25d2: 44 d1 ZXT.B R4, R4 25d4: 49 3b CMP R4, #57 25d6: 03 f9 JLS $+3 ;->0x25dc 25d8: 07 2d ADD R0, #87 25da: 40 d1 ZXT.B R4, R0 25dc: 6d cc SUB R5, R5, #1 25de: ee 58 MOV R7, SP 25e0: 47 c3 ADD R0, R7, R5 25e2: 04 83 ST.B [R0], R4 25e4: 03 58 MOV R0, R3 25e6: 30 38 CMP R3, #0 25e8: ee f1 JNZ $-18 ;->0x25c4 25ea: 6e 58 MOV R3, SP 25ec: 63 c3 ADD R4, R3, R5 25ee: 44 80 LD.B R4, [R4] 25f0: 14 77 ST.B [R1++], R4 25f2: 6d c0 ADD R5, R5, #1 25f4: 5f 39 CMP R5, #31 25f6: fa f9 JLS $-6 ;->0x25ea 25f8: 50 10 MOV R5, #0 25fa: 15 83 ST.B [R1], R5 25fc: e0 2a ADD SP, #32 25fe: 03 5e POP {R6-R7} 2600: 1d 5c JMP LR ... 00002604 : 2604: 2d 5d PUSH LR 2606: 22 d1 ZXT.B R2, R2 2608: 00 38 CMP R0, #0 260a: 07 f5 JPL $+7 ;->0x2618 260c: 2a 38 CMP R2, #10 260e: 05 f1 JNZ $+5 ;->0x2618 2610: 5d 12 MOV R5, #45 2612: 15 77 ST.B [R1++], R5 2614: 50 10 MOV R5, #0 2616: 05 c6 SUB R0, R5, R0 2618: 02 45 LD R5, [PC + #2] ;->0x2620 :=0x25bc 261a: 05 5c LJMP R5 261c: 0d 5d POP LR 261e: 1d 5c JMP LR 2620: bc 25 00 00 .long 0x000025bc ->000009660 [!!!@2@:ST.W [SP + #188], R5 @@: NOP 00002624 <__FLASH_Erase__>: 2624: 2d 5d PUSH LR 2626: e8 31 SUB SP, #24 2628: 54 13 MOV R5, #52 262a: e5 85 ST.W [SP], R5 262c: 4a 10 MOV R4, #10 262e: 29 dd LSR R5, R1, R4 2630: 01 25 ST.W [SP + #1], R5 2632: 13 45 LD R5, [PC + #19] ;->0x267c :=0x3ff 2634: 49 d5 ANL R1, R1, R5 2636: 52 c2 ADD R2, R2, R1 2638: 03 22 ST.W [SP + #3], R2 263a: 03 0c LD.W R4, [SP + #3] 263c: 64 d5 ANL R4, R4, R5 263e: 09 f0 JZ $+9 ;->0x2650 2640: 03 0a LD.W R2, [SP + #3] 2642: 03 0b LD.W R3, [SP + #3] 2644: 41 10 MOV R4, #1 2646: a2 7a LSL R4, #10 2648: 22 c3 ADD R4, R2, R4 264a: 6b d5 ANL R5, R3, R5 264c: 6c c7 SUB R5, R4, R5 264e: 03 25 ST.W [SP + #3], R5 2650: 03 0d LD.W R5, [SP + #3] 2652: 6d cc SUB R5, R5, #1 2654: 03 25 ST.W [SP + #3], R5 2656: 01 0c LD.W R4, [SP + #1] 2658: 03 0d LD.W R5, [SP + #3] 265a: aa 7c LSR R5, #10 265c: 2d c3 ADD R5, R5, R4 265e: 02 25 ST.W [SP + #2], R5 2660: 57 10 MOV R5, #7 2662: 08 44 LD R4, [PC + #8] ;->0x2680 :=0x5a5a6688 2664: 04 70 CMP R0, R4 2666: 06 f1 JNZ $+6 ;->0x2672 2668: 0e 58 MOV R0, SP 266a: 2e 58 MOV R1, SP 266c: 06 45 LD R5, [PC + #6] ;->0x2684 :=0x1fff0b0c 266e: 05 5c LJMP R5 2670: 5e 82 LD.W R5, [SP] 2672: 05 58 MOV R0, R5 2674: e8 29 ADD SP, #24 2676: 0d 5d POP LR 2678: 1d 5c JMP LR 267a: 00 00 NOP NOP 267c: ff 03 00 00 .long 0x000003ff ->000001023 [!!!@4@:JMP $-65536 ;->0xfffe267c 2680: 88 66 5a 5a .long 0x5a5a6688 ->1515873928 [!!!@2@:SUB R8, R8 @@: MOV R18, R26 2684: 0c 0b ff 1f .long 0x1fff0b0c ->536808204 [!!!@2@:LD.W R3, [SP + #12] @@: MOV PC, #255 00002688 <__FLASH_Program__>: 2688: 2d 5d PUSH LR 268a: e8 31 SUB SP, #24 268c: 53 13 MOV R5, #51 268e: e5 85 ST.W [SP], R5 2690: 01 21 ST.W [SP + #1], R1 2692: 02 23 ST.W [SP + #2], R3 2694: 03 22 ST.W [SP + #3], R2 2696: 50 15 MOV R5, #80 2698: 04 25 ST.W [SP + #4], R5 269a: 5c 10 MOV R5, #12 269c: 06 44 LD R4, [PC + #6] ;->0x26b4 :=0x5a5a6688 269e: 04 70 CMP R0, R4 26a0: 06 f1 JNZ $+6 ;->0x26ac 26a2: 0e 58 MOV R0, SP 26a4: 2e 58 MOV R1, SP 26a6: 05 45 LD R5, [PC + #5] ;->0x26b8 :=0x1fff0b0c 26a8: 05 5c LJMP R5 26aa: 5e 82 LD.W R5, [SP] 26ac: 05 58 MOV R0, R5 26ae: e8 29 ADD SP, #24 26b0: 0d 5d POP LR 26b2: 1d 5c JMP LR 26b4: 88 66 5a 5a .long 0x5a5a6688 ->1515873928 [!!!@2@:SUB R8, R8 @@: MOV R18, R26 26b8: 0c 0b ff 1f .long 0x1fff0b0c ->536808204 [!!!@2@:LD.W R3, [SP + #12] @@: MOV PC, #255 000026bc : 26bc: c8 a0 ST.W [R1 + #3], R0 26be: 00 00 NOP NOP 26c0: 06 45 LD R5, [PC + #6] ;->0x26d8 :=0x4e21 26c2: 31 10 MOV R3, #1 26c4: 9b 7b LSL R3, #27 26c6: 03 04 SJMP $+3 ;->0x26cc 26c8: 6d cc SUB R5, R5, #1 26ca: 09 f0 JZ $+9 ;->0x26dc 26cc: a1 98 LD.W R4, [R1 + #2] 26ce: e4 d4 ANL R4, R4, R3 26d0: fc f0 JZ $-4 ;->0x26c8 26d2: 00 10 MOV R0, #0 26d4: 1d 5c JMP LR 26d6: 00 00 NOP NOP 26d8: 21 4e 00 00 .long 0x00004e21 ->000020001 [!!!@2@:CLR [R4], #1 @@: NOP 26dc: 00 10 MOV R0, #0 26de: 00 68 NOT R0, R0 26e0: 1d 5c JMP LR ... 000026e4 <__truncdfsf2>: 26e4: 03 5f PUSH {R6-R7} 26e6: e8 30 SUB SP, #8 26e8: e0 85 ST.W [SP], R0 26ea: 01 21 ST.W [SP + #1], R1 26ec: 0e 82 LD.W R0, [SP] 26ee: 01 0c LD.W R4, [SP + #1] 26f0: 41 41 LD R1, [PC + #65] ;->0x27f4 :=0xfffff 26f2: 4c d4 ANL R1, R4, R1 26f4: 54 11 MOV R5, #20 26f6: 5c dd LSR R3, R4, R5 26f8: 40 47 LD R7, [PC + #64] ;->0x27f8 :=0x7ff 26fa: db d5 ANL R3, R3, R7 26fc: 5f 11 MOV R5, #31 26fe: 74 dd LSR R6, R4, R5 2700: 0b 7a LSL R1, #3 2702: 5d 11 MOV R5, #29 2704: 60 dd LSR R4, R0, R5 2706: 09 d7 ORL R1, R1, R4 2708: 53 10 MOV R5, #3 270a: 50 db LSL R2, R0, R5 270c: 6b c0 ADD R5, R3, #1 270e: fd d5 ANL R7, R5, R7 2710: 71 38 CMP R7, #1 2712: 37 fd JLE $+55 ;->0x2780 2714: 3a 44 LD R4, [PC + #58] ;->0x27fc :=0x380 2716: 23 c7 SUB R4, R3, R4 2718: 5e 1f MOV R5, #254 271a: 45 70 CMP R4, R5 271c: 43 fc JGT $+67 ;->0x27a2 271e: 40 38 CMP R4, #0 2720: 26 fc JGT $+38 ;->0x276c 2722: 56 11 MOV R5, #22 2724: 55 68 NOT R5, R5 2726: 45 70 CMP R4, R5 2728: 40 fb JLT $+64 ;->0x27a8 272a: 0f 49 SET R1, #23 272c: 35 44 LD R4, [PC + #53] ;->0x2800 :=0x39e 272e: e4 c6 SUB R4, R4, R3 2730: 35 45 LD R5, [PC + #53] ;->0x2804 :=0x37e 2732: 4f 39 CMP R4, #31 2734: 0c fc JGT $+12 ;->0x274c 2736: 5b c7 SUB R3, R3, R5 2738: 02 dd LSR R0, R2, R4 273a: c9 da LSL R1, R1, R3 273c: d2 da LSL R2, R2, R3 273e: 40 10 MOV R4, #0 2740: ac c6 SUB R5, R4, R2 2742: 95 d6 ORL R2, R5, R2 2744: 97 7d LSR R2, #31 2746: a9 d6 ORL R5, R1, R2 2748: 2d d6 ORL R5, R5, R0 274a: 31 04 SJMP $+49 ;->0x27ac 274c: ed c6 SUB R5, R5, R3 274e: 79 dd LSR R7, R1, R5 2750: 00 10 MOV R0, #0 2752: 40 3a CMP R4, #32 2754: 04 f0 JZ $+4 ;->0x275c 2756: 2d 40 LD R0, [PC + #45] ;->0x2808 :=0x35e 2758: 1b c6 SUB R3, R3, R0 275a: c1 da LSL R0, R1, R3 275c: 90 d6 ORL R2, R0, R2 275e: 40 10 MOV R4, #0 2760: ac c6 SUB R5, R4, R2 2762: 95 d6 ORL R2, R5, R2 2764: 3f 11 MOV R3, #31 2766: ea dc LSR R5, R2, R3 2768: ed d7 ORL R5, R5, R7 276a: 21 04 SJMP $+33 ;->0x27ac 276c: 95 7d LSR R2, #29 276e: 0b 7a LSL R1, #3 2770: 06 7a LSL R0, #6 2772: 50 10 MOV R5, #0 2774: 2d c6 SUB R5, R5, R0 2776: 05 d6 ORL R0, R5, R0 2778: 87 7d LSR R0, #31 277a: 29 d6 ORL R5, R1, R0 277c: ad d6 ORL R5, R5, R2 277e: 17 04 SJMP $+23 ;->0x27ac 2780: 91 d6 ORL R2, R1, R2 2782: 30 38 CMP R3, #0 2784: 07 f1 JNZ $+7 ;->0x2792 2786: 51 10 MOV R5, #1 2788: 83 58 MOV R4, R3 278a: 20 38 CMP R2, #0 278c: 10 f1 JNZ $+16 ;->0x27ac 278e: a3 58 MOV R5, R3 2790: 0e 04 SJMP $+14 ;->0x27ac 2792: 50 10 MOV R5, #0 2794: 4f 1f MOV R4, #255 2796: 25 70 CMP R2, R5 2798: 0a f0 JZ $+10 ;->0x27ac 279a: 33 10 MOV R3, #3 279c: e9 da LSL R5, R1, R3 279e: a9 49 SET R5, #25 27a0: 06 04 SJMP $+6 ;->0x27ac 27a2: 50 10 MOV R5, #0 27a4: 4f 1f MOV R4, #255 27a6: 03 04 SJMP $+3 ;->0x27ac 27a8: 51 10 MOV R5, #1 27aa: 40 10 MOV R4, #0 27ac: 37 10 MOV R3, #7 27ae: dd d4 ANL R3, R5, R3 27b0: 06 f0 JZ $+6 ;->0x27bc 27b2: 3f 10 MOV R3, #15 27b4: dd d4 ANL R3, R5, R3 27b6: 34 38 CMP R3, #4 27b8: 02 f0 JZ $+2 ;->0x27bc 27ba: 2d c1 ADD R5, R5, #4 27bc: 31 10 MOV R3, #1 27be: 9a 7b LSL R3, #26 27c0: dd d4 ANL R3, R5, R3 27c2: 08 f0 JZ $+8 ;->0x27d2 27c4: 64 c0 ADD R4, R4, #1 27c6: 3f 1f MOV R3, #255 27c8: 43 70 CMP R4, R3 27ca: 03 f0 JZ $+3 ;->0x27d0 27cc: aa 4b CLR R5, #26 27ce: 02 04 SJMP $+2 ;->0x27d2 27d0: 50 10 MOV R5, #0 27d2: 2b 7c LSR R5, #3 27d4: 3f 1f MOV R3, #255 27d6: 43 70 CMP R4, R3 27d8: 04 f1 JNZ $+4 ;->0x27e0 27da: 50 38 CMP R5, #0 27dc: 02 f0 JZ $+2 ;->0x27e0 27de: 2e 49 SET R5, #22 27e0: 44 d1 ZXT.B R4, R4 27e2: 27 7b LSL R4, #23 27e4: 0a 40 LD R0, [PC + #10] ;->0x280c :=0x7fffff 27e6: 2d d4 ANL R5, R5, R0 27e8: b7 7b LSL R6, #31 27ea: 05 d7 ORL R0, R5, R4 27ec: 80 d7 ORL R0, R0, R6 27ee: e8 28 ADD SP, #8 27f0: 03 5e POP {R6-R7} 27f2: 1d 5c JMP LR 27f4: ff ff 0f 00 .long 0x000fffff ->001048575 27f8: ff 07 00 00 .long 0x000007ff ->000002047 [!!!@2@:SJMP $-1 ;->0x27f6 @@: NOP 27fc: 80 03 00 00 .long 0x00000380 ->000000896 [!!!@4@:JMP $-8388608 ;->0xff0027fc 2800: 9e 03 00 00 .long 0x0000039e ->000000926 [!!!@4@:JMP $-6422528 ;->0xff3c2800 2804: 7e 03 00 00 .long 0x0000037e ->000000894 [!!!@4@:JMP $+8257536 ;->0xfc2804 2808: 5e 03 00 00 .long 0x0000035e ->000000862 [!!!@4@:JMP $+6160384 ;->0xbc2808 280c: ff ff 7f 00 .long 0x007fffff ->008388607 00002810 <__init_class_end>: 2810: 90 28 ADD R9, #0 2812: 00 40 LD R0, [PC + #0] ;->0x2810 :=0x40002890 2814: 00 29 ADD R0, #16 2816: 00 40 LD R0, [PC + #0] ;->0x2814 :=0x40002900 00002818 : 2818: 19 02 08 0d 01 08 1b 02 08 0e 01 08 1d 02 08 0f ................ 2828: 01 08 1f 02 08 10 01 08 21 02 08 11 01 08 23 02 ........!.....#. 2838: 08 12 01 08 25 02 08 13 01 08 27 02 08 14 01 08 ....%.....'..... 2848: 29 02 08 15 01 08 2b 02 08 16 01 08 2d 02 08 17 ).....+.....-... 2858: 01 08 2f 02 08 18 01 08 31 02 08 19 01 08 33 04 ../.....1.....3. 2868: 04 0d 01 04 35 04 04 1b 02 04 37 04 04 0e 01 04 ....5.....7..... 2878: 39 04 04 1d 02 04 3b 04 04 0f 01 04 3d 04 04 1f 9.....;.....=... 2888: 02 04 3f 04 04 10 01 04 41 04 04 21 02 04 43 04 ..?.....A..!..C. 2898: 04 11 01 04 45 04 04 23 02 04 47 04 04 12 01 04 ....E..#..G..... 28a8: 49 04 04 25 02 04 4b 04 04 13 01 04 4d 04 04 27 I..%..K.....M..' 28b8: 02 04 4f 04 04 14 01 04 51 04 04 29 02 04 53 04 ..O.....Q..)..S. 28c8: 04 15 01 04 55 04 04 2b 02 04 57 04 04 16 01 04 ....U..+..W..... 28d8: 59 04 04 2d 02 04 5b 04 04 17 01 04 5d 04 04 2f Y..-..[.....]../ 28e8: 02 04 5f 04 04 18 01 04 61 04 04 31 02 04 63 04 .._.....a..1..c. 28f8: 04 19 01 04 65 08 02 33 04 02 67 08 02 0d 01 02 ....e..3..g..... 2908: 69 08 02 35 04 02 6b 08 02 1b 02 02 6d 08 02 37 i..5..k.....m..7 2918: 04 02 6f 08 02 0e 01 02 71 08 02 39 04 02 73 08 ..o.....q..9..s. 2928: 02 1d 02 02 75 08 02 3b 04 02 77 08 02 0f 01 02 ....u..;..w..... 00002938 : 2938: 00 80 80 80 80 80 80 80 80 80 40 40 40 40 40 80 ..........@@@@@. 2948: 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 ................ 2958: 80 04 08 08 08 08 08 08 08 08 08 08 08 08 08 08 ................ 2968: 08 21 21 21 21 21 21 21 21 21 21 08 08 08 08 08 .!!!!!!!!!!..... 2978: 08 08 03 03 03 03 03 03 02 02 02 02 02 02 02 02 ................ 2988: 02 02 02 02 02 02 02 02 02 02 02 02 08 08 08 08 ................ 2998: 08 08 11 11 11 11 11 11 10 10 10 10 10 10 10 10 ................ 29a8: 10 10 10 10 10 10 10 10 10 10 10 10 08 08 08 08 ................ 29b8: 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ ... 00002a3c <.rodata.str1.4$scode_loacal_2>: 2a3c: 43 41 LD R1, [PC + #67] ;->0x2b48 :=0x75716552 2a3e: 4e 5f PUSH {R7-R9,R12} 2a40: 42 4f CLR [R8], #18 2a42: 4f 54 JB R9, #7 2a44: 5f 53 JNB [R11], #23 2a46: 65 74 LD.H R6, [R5++] 2a48: 50 72 LD.W R5, [R0++] 2a4a: 6f 67 SUBC R6, PC 2a4c: 52 65 ADDC R5, R2 2a4e: 71 75 ST.H [R7++], R1 2a50: 65 73 ST.W [R6++], R5 2a52: 74 20 ST.W [SP + #116], R0 2a54: 66 61 SXT.H R6, R6 2a56: 69 6c LSL R6, R9 2a58: 65 64 ADD R6, R5 2a5a: 0d 0a LD.W R2, [SP + #13] ... 00002a5d <.rodata.str1.4$scode_loacal_5>: 2a5d: 00 00 NOP NOP 2a5f: 00 43 NOP NOP 2a61: 41 4e LD R1, [PC + #67] ;->0x2b6c :=0x20583830 2a63: 5f 42 PUSH {R7-R9,R12} 2a65: 4f 4f CLR [R8], #18 2a67: 54 5f JB R9, #7 2a69: 53 65 JNB [R11], #23 2a6b: 74 41 LD.H R6, [R5++] 2a6d: 70 70 CMP R4, R1 2a6f: 56 61 JNB SP, #0 2a71: 6c 69 LSL R6, R1 2a73: 64 20 ADD R6, R9 2a75: 66 61 SUB R2, R0 2a77: 69 6c ANL R6, R1 2a79: 65 64 ADDC R6, R12 2a7b: 0d 0a LD.W R5, [SP + #100] ... 00002a7e <.rodata.str1.4$scode_loacal_9>: 2a7e: 00 00 NOP NOP 2a80: 47 6f ROR R4, R7 2a82: 20 74 LD.H R2, [R0++] 2a84: 6f 20 ST.W [SP + #111], R0 2a86: 41 50 JB [R8], #1 2a88: 50 21 ST.W [SP + #80], R1 2a8a: 0d 0a LD.W R2, [SP + #13] 2a8c: 00 00 NOP NOP ... 00002a90 <.rodata.str1.4$scode_loacal_5>: 2a90: 45 78 ASR R8, #5 2a92: 74 65 ADDC R7, R4 2a94: 6e 64 ADD R6, SP 2a96: 65 64 ADD R6, R5 2a98: 20 44 LD R4, [PC + #32] ;->0x2b18 :=0x6172676f 2a9a: 69 61 SXT.H R6, R9 2a9c: 67 6e ASR R6, R7 2a9e: 6f 73 ST.W [R6++], PC 2aa0: 74 69 ANL R7, R4 2aa2: 63 20 ST.W [SP + #99], R0 2aa4: 53 65 ADDC R5, R3 2aa6: 73 73 ST.W [R7++], R3 2aa8: 69 6f ROR R6, R9 2aaa: 6e 0d LD.W R5, [SP + #110] 2aac: 0a 00 ENI ENI 2aae: 00 00 NOP NOP 2ab0: 50 72 LD.W R5, [R0++] 2ab2: 6f 67 SUBC R6, PC 2ab4: 72 61 SXT.H R7, R2 2ab6: 6d 6d LSR R6, LR 2ab8: 69 6e ASR R6, R9 2aba: 67 20 ST.W [SP + #103], R0 2abc: 4d 6f ROR R4, LR 2abe: 64 65 ADDC R6, R4 2ac0: 0d 0a LD.W R2, [SP + #13] 2ac2: 00 00 NOP NOP 2ac4: 45 43 LD R3, [PC + #69] ;->0x2bd8 :=0x63696e75 2ac6: 55 20 ST.W [SP + #85], R0 2ac8: 52 65 ADDC R5, R2 2aca: 73 65 ADDC R7, R3 2acc: 74 0d LD.W R5, [SP + #116] 2ace: 0a 00 ENI ENI 2ad0: 45 72 LD.W R4, [R5++] 2ad2: 61 73 ST.W [R6++], R1 2ad4: 65 20 ST.W [SP + #101], R0 2ad6: 46 6c LSL R4, R6 2ad8: 61 73 ST.W [R6++], R1 2ada: 68 20 ST.W [SP + #104], R0 2adc: 4d 65 ADDC R4, LR 2ade: 6d 6f ROR R6, LR 2ae0: 72 79 ASR SP, #18 2ae2: 2e 2e ADD R2, #110 2ae4: 2e 0d LD.W R5, [SP + #46] 2ae6: 0a 00 ENI ENI 2ae8: 43 68 NOT R4, R3 2aea: 65 63 XCH R6, R5 2aec: 6b 20 ST.W [SP + #107], R0 2aee: 50 72 LD.W R5, [R0++] 2af0: 6f 67 SUBC R6, PC 2af2: 72 61 SXT.H R7, R2 2af4: 6d 6d LSR R6, LR 2af6: 69 6e ASR R6, R9 2af8: 67 20 ST.W [SP + #103], R0 2afa: 44 65 ADDC R4, R4 2afc: 70 65 ADDC R7, R0 2afe: 6e 64 ADD R6, SP 2b00: 65 6e ASR R6, R5 2b02: 63 69 ANL R6, R3 2b04: 65 73 ST.W [R6++], R5 2b06: 20 72 LD.W R2, [R0++] 2b08: 65 73 ST.W [R6++], R5 2b0a: 3d 25 ST.W [SP + #61], R5 2b0c: 64 0d LD.W R5, [SP + #100] 2b0e: 0a 00 ENI ENI 2b10: 43 68 NOT R4, R3 2b12: 65 63 XCH R6, R5 2b14: 6b 20 ST.W [SP + #107], R0 2b16: 50 72 LD.W R5, [R0++] 2b18: 6f 67 72 61 .long 0x6172676f ->1634887535 [!!!@2@:SUBC R6, PC @@: SXT.H R7, R2 2b1c: 6d 6d LSR R6, LR 2b1e: 69 6e ASR R6, R9 2b20: 67 20 ST.W [SP + #103], R0 2b22: 49 6e ASR R4, R9 2b24: 74 65 ADDC R7, R4 2b26: 67 72 LD.W R6, [R7++] 2b28: 69 74 LD.H R6, [R9++] 2b2a: 79 20 ST.W [SP + #121], R0 2b2c: 47 65 ADDC R4, R7 2b2e: 74 43 LD R3, [PC + #116] ;->0x2cfc 2b30: 52 43 LD R3, [PC + #82] ;->0x2c78 :=0xa0d 2b32: 3d 25 ST.W [SP + #61], R5 2b34: 30 38 CMP R3, #0 2b36: 58 20 ST.W [SP + #88], R0 2b38: 41 70 CMP R4, R1 2b3a: 70 43 LD R3, [PC + #112] ;->0x2cf8 2b3c: 52 43 LD R3, [PC + #82] ;->0x2c84 :=0xa0d2e2e 2b3e: 3d 25 ST.W [SP + #61], R5 2b40: 30 38 CMP R3, #0 2b42: 58 0d LD.W R5, [SP + #88] 2b44: 0a 00 ENI ENI 2b46: 00 00 NOP NOP 2b48: 52 65 71 75 .long 0x75716552 ->1970365778 [!!!@2@:ADDC R5, R2 @@: ST.H [R7++], R1 2b4c: 65 73 ST.W [R6++], R5 2b4e: 74 20 ST.W [SP + #116], R0 2b50: 44 6f ROR R4, R4 2b52: 77 6e ASR R7, R7 2b54: 6c 6f ROR R6, R12 2b56: 61 64 ADD R6, R1 2b58: 20 4d SET [R4], #16 2b5a: 65 6d LSR R6, R5 2b5c: 6f 72 LD.W R6, [PC++] 2b5e: 79 41 LD R1, [PC + #121] ;->0x2d40 2b60: 64 64 ADD R6, R4 2b62: 72 65 ADDC R7, R2 2b64: 73 73 ST.W [R7++], R3 2b66: 20 3d CMP R2, #80 2b68: 20 30 SUB R2, #0 2b6a: 78 25 ST.W [SP + #120], R5 2b6c: 30 38 58 20 .long 0x20583830 ->542652464 [!!!@2@:CMP R3, #0 @@: ST.W [SP + #88], R0 2b70: 4d 65 ADDC R4, LR 2b72: 6d 6f ROR R6, LR 2b74: 72 79 ASR SP, #18 2b76: 53 69 ANL R5, R3 2b78: 7a 65 ADDC R7, R10 2b7a: 20 3d CMP R2, #80 2b7c: 20 25 ST.W [SP + #32], R5 2b7e: 64 20 ST.W [SP + #100], R0 2b80: 42 79 ASR R8, #18 2b82: 74 65 ADDC R7, R4 2b84: 0d 0a LD.W R2, [SP + #13] 2b86: 00 00 NOP NOP 2b88: 57 72 LD.W R5, [R7++] 2b8a: 69 74 LD.H R6, [R9++] 2b8c: 65 20 ST.W [SP + #101], R0 2b8e: 44 61 SXT.H R4, R4 2b90: 74 61 SXT.H R7, R4 2b92: 20 54 JB R4, #0 2b94: 6f 20 ST.W [SP + #111], R0 2b96: 46 6c LSL R4, R6 2b98: 61 73 ST.W [R6++], R1 2b9a: 68 20 ST.W [SP + #104], R0 2b9c: 41 64 ADD R4, R1 2b9e: 64 72 LD.W R6, [R4++] 2ba0: 3d 25 ST.W [SP + #61], R5 2ba2: 30 38 CMP R3, #0 2ba4: 58 0d LD.W R5, [SP + #88] 2ba6: 0a 00 ENI ENI 2ba8: 54 72 LD.W R5, [R4++] 2baa: 61 6e ASR R6, R1 2bac: 73 66 SUB R7, R3 2bae: 65 72 LD.W R6, [R5++] 2bb0: 20 44 LD R4, [PC + #32] ;->0x2c30 :=0x2d2d2d2d 2bb2: 61 74 LD.H R6, [R1++] 2bb4: 61 20 ST.W [SP + #97], R0 2bb6: 42 53 JNB [R8], #18 2bb8: 43 3d CMP R4, #83 2bba: 25 64 ADD R2, R5 2bbc: 0d 0a LD.W R2, [SP + #13] 2bbe: 00 00 NOP NOP 2bc0: 43 6f ROR R4, R3 2bc2: 6e 74 LD.H R6, [SP++] 2bc4: 72 6f ROR R7, R2 2bc6: 6c 44 LD R4, [PC + #108] ;->0x2d74 2bc8: 54 43 LD R3, [PC + #84] ;->0x2d18 2bca: 53 65 ADDC R5, R3 2bcc: 74 74 LD.H R7, [R4++] 2bce: 69 6e ASR R6, R9 2bd0: 67 0d LD.W R5, [SP + #103] 2bd2: 0a 00 ENI ENI 2bd4: 43 6f ROR R4, R3 2bd6: 6d 6d LSR R6, LR 2bd8: 75 6e 69 63 .long 0x63696e75 ->1667853941 [!!!@2@:ASR R7, R5 @@: XCH R6, R9 2bdc: 61 74 LD.H R6, [R1++] 2bde: 69 6f ROR R6, R9 2be0: 6e 43 LD R3, [PC + #110] ;->0x2d98 2be2: 6f 6e ASR R6, PC 2be4: 74 72 LD.W R7, [R4++] 2be6: 6f 6c LSL R6, PC 2be8: 0d 0a LD.W R2, [SP + #13] 2bea: 00 00 NOP NOP 2bec: 53 65 ADDC R5, R3 2bee: 63 75 ST.H [R6++], R3 2bf0: 72 69 ANL R7, R2 2bf2: 74 79 ASR SP, #20 2bf4: 41 63 XCH R4, R1 2bf6: 63 65 ADDC R6, R3 2bf8: 73 73 ST.W [R7++], R3 2bfa: 0d 0a LD.W R2, [SP + #13] 2bfc: 00 00 NOP NOP 2bfe: 00 00 NOP NOP 2c00: 52 65 ADDC R5, R2 2c02: 71 75 ST.H [R7++], R1 2c04: 65 73 ST.W [R6++], R5 2c06: 74 20 ST.W [SP + #116], R0 2c08: 54 72 LD.W R5, [R4++] 2c0a: 61 6e ASR R6, R1 2c0c: 73 66 SUB R7, R3 2c0e: 65 72 LD.W R6, [R5++] 2c10: 20 45 LD R5, [PC + #32] ;->0x2c90 :=0x746f6f42 2c12: 78 69 ANL R7, R8 2c14: 74 0d LD.W R5, [SP + #116] 2c16: 0a 00 ENI ENI 00002c18 <.rodata.str1.4$scode_loacal_2>: 2c18: 2d 2d ADD R2, #93 2c1a: 2d 2d ADD R2, #93 2c1c: 2d 2d ADD R2, #93 2c1e: 2d 2d ADD R2, #93 2c20: 2d 2d ADD R2, #93 2c22: 2d 2d ADD R2, #93 2c24: 2d 2d ADD R2, #93 2c26: 2d 2d ADD R2, #93 2c28: 2d 2d ADD R2, #93 2c2a: 2d 2d ADD R2, #93 2c2c: 2d 2d ADD R2, #93 2c2e: 2d 2d ADD R2, #93 2c30: 2d 2d 2d 2d .long 0x2d2d2d2d ->757935405 [!!!@2@:ADD R2, #93 @@: ADD R2, #93 2c34: 2d 2d ADD R2, #93 2c36: 2d 2d ADD R2, #93 2c38: 2d 2d ADD R2, #93 2c3a: 2d 2d ADD R2, #93 2c3c: 2d 2d ADD R2, #93 2c3e: 2d 2d ADD R2, #93 2c40: 2d 2d ADD R2, #93 2c42: 2d 2d ADD R2, #93 2c44: 2d 2d ADD R2, #93 2c46: 2d 2d ADD R2, #93 2c48: 2d 2d ADD R2, #93 2c4a: 2d 2d ADD R2, #93 2c4c: 2d 2d ADD R2, #93 2c4e: 2d 2d ADD R2, #93 2c50: 2d 2d ADD R2, #93 2c52: 2d 2d ADD R2, #93 2c54: 2d 2d ADD R2, #93 2c56: 2d 2d ADD R2, #93 2c58: 2d 2d ADD R2, #93 2c5a: 2d 2d ADD R2, #93 2c5c: 2d 0d LD.W R5, [SP + #45] 2c5e: 0a 00 ENI ENI 2c60: 53 74 LD.H R5, [R3++] 2c62: 61 72 LD.W R6, [R1++] 2c64: 74 20 ST.W [SP + #116], R0 2c66: 43 41 LD R1, [PC + #67] ;->0x2d70 2c68: 4e 20 ST.W [SP + #78], R0 2c6a: 55 44 LD R4, [PC + #85] ;->0x2dbc 2c6c: 53 20 ST.W [SP + #83], R0 2c6e: 42 6f ROR R4, R2 2c70: 6f 74 LD.H R6, [PC++] 2c72: 6c 6f ROR R6, R12 2c74: 61 64 ADD R6, R1 2c76: 65 72 LD.W R6, [R5++] 2c78: 0d 0a 00 00 .long 0x00000a0d ->000002573 [!!!@2@:LD.W R2, [SP + #13] @@: NOP 2c7c: 45 78 ASR R8, #5 2c7e: 65 20 ST.W [SP + #101], R0 2c80: 41 70 CMP R4, R1 2c82: 70 2e ADD R7, #96 2c84: 2e 2e 0d 0a .long 0x0a0d2e2e ->168635950 [!!!@2@:ADD R2, #110 @@: LD.W R2, [SP + #13] 2c88: 00 00 NOP NOP 2c8a: 00 00 NOP NOP 2c8c: 45 78 ASR R8, #5 2c8e: 65 20 ST.W [SP + #101], R0 2c90: 42 6f 6f 74 .long 0x746f6f42 ->1953460034 [!!!@2@:ROR R4, R2 @@: LD.H R6, [PC++] 2c94: 2e 2e ADD R2, #110 2c96: 2e 0d LD.W R5, [SP + #46] 2c98: 0a 00 ENI ENI 2c9a: 00 00 NOP NOP 2c9c: 43 41 LD R1, [PC + #67] ;->0x2da8 2c9e: 4e 31 SUB R4, #30 2ca0: 20 43 LD R3, [PC + #32] ;->0x2d20 2ca2: 6f 6e ASR R6, PC 2ca4: 66 69 ANL R6, R6 2ca6: 67 20 ST.W [SP + #103], R0 2ca8: 45 6e ASR R4, R5 2caa: 64 0d LD.W R5, [SP + #100] 2cac: 0a 00 ENI ENI 2cae: 00 00 NOP NOP 2cb0: 41 50 JB [R8], #1 2cb2: 50 5f PUSH {R10,R12} 2cb4: 56 41 LD R1, [PC + #86] ;->0x2e0c 2cb6: 4c 49 SET R9, #20 2cb8: 44 5f PUSH {R8,R12} 2cba: 46 4c SET [R8], #6 2cbc: 41 47 LD R7, [PC + #65] ;->0x2dc0 2cbe: 20 3d CMP R2, #80 2cc0: 20 30 SUB R2, #0 2cc2: 78 25 ST.W [SP + #120], R5 2cc4: 30 38 CMP R3, #0 2cc6: 58 0d LD.W R5, [SP + #88] 2cc8: 0a 00 ENI ENI 2cca: 00 00 NOP NOP 2ccc: 42 4f CLR [R8], #18 2cce: 4f 54 JB R9, #7 2cd0: 5f 52 JNB [R11], #7 2cd2: 45 51 JB [R8], #21 2cd4: 5f 46 LD R6, [PC + #95] ;->0x2e50 2cd6: 4c 41 LD R1, [PC + #76] ;->0x2e04 2cd8: 47 20 ST.W [SP + #71], R0 2cda: 3d 20 ST.W [SP + #61], R0 2cdc: 30 78 ASR R6, #0 2cde: 25 30 SUB R2, #5 2ce0: 38 58 MOV R1, R24 2ce2: 0d 0a LD.W R2, [SP + #13] 2ce4: 00 00 NOP NOP ... Disassembly of section .data: 10000000 : 10000000: 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 ................ 10000010: 01 00 00 00 00 00 00 00 ........ 10000018 : 10000018: 01 00 00 00 00 00 00 00 20 00 00 00 00 01 0b 02 ........ ....... 10000028: 00 80 00 00 30 00 00 10 ....0... 10000030 : 10000030: 00 07 00 00 00 00 00 00 00 00 00 00 df 07 00 00 ................ ... 10000048 : 10000048: ff ff ff ff .... 1000004c : 1000004c: 01 . 1000004d : 1000004d: 01 00 00 ... 10000050 : 10000050: 00 00 00 00 .... 10000054 : 10000054: 00 00 00 00 .... 10000058 : 10000058: 01 00 00 00 .... 1000005c : 1000005c: 00 00 00 00 96 30 07 77 2c 61 0e ee ba 51 09 99 .....0.w,a...Q.. 1000006c: 19 c4 6d 07 8f f4 6a 70 35 a5 63 e9 a3 95 64 9e ..m...jp5.c...d. 1000007c: 32 88 db 0e a4 b8 dc 79 1e e9 d5 e0 88 d9 d2 97 2......y........ 1000008c: 2b 4c b6 09 bd 7c b1 7e 07 2d b8 e7 91 1d bf 90 +L...|.~.-...... 1000009c: 64 10 b7 1d f2 20 b0 6a 48 71 b9 f3 de 41 be 84 d.... .jHq...A.. 100000ac: 7d d4 da 1a eb e4 dd 6d 51 b5 d4 f4 c7 85 d3 83 }......mQ....... 100000bc: 56 98 6c 13 c0 a8 6b 64 7a f9 62 fd ec c9 65 8a V.l...kdz.b...e. 100000cc: 4f 5c 01 14 d9 6c 06 63 63 3d 0f fa f5 0d 08 8d O\...l.cc=...... 100000dc: c8 20 6e 3b 5e 10 69 4c e4 41 60 d5 72 71 67 a2 . n;^.iL.A`.rqg. 100000ec: d1 e4 03 3c 47 d4 04 4b fd 85 0d d2 6b b5 0a a5 ...: 10000100: 6c 98 LD.W R5, [R4 + #1] 10000102: b2 42 LD R2, [PC + #178] ;->0x100003c8 :=0x11010b5c 10000104: d6 c9 SUBC R2, R6, R7 10000106: bb db LSL R7, R3, R6 10000108: 40 f9 JLS $+64 ;->0x10000188 1000010a: bc ac LD.H R7, [R4 + #18] 1000010c: e3 6c LSL SP, R3 1000010e: d8 32 SUB LR, #40 10000110: 75 5c .long 0x45df5c75 10000112: df 45 LD R5, [PC + #223] ;->0x1000048c :=0x0 10000114: cf 0d LD.W R5, [SP + #207] 10000116: d6 dc LSR R2, R6, R3 10000118: 59 3d CMP R5, #89 1000011a: d1 ab LD.H R2, [R1 + #15] 1000011c: ac 30 SUB R10, #12 1000011e: d9 26 ST.W [SP + #217], R6 10000120: 3a 00 .long 0x51de003a 10000122: de 51 JB [R11], #30 10000124: 80 51 JB [R0], #24 10000126: d7 c8 SUBC R2, R7, R3 10000128: 16 61 SXT.H R1, R6 1000012a: d0 bf MOV R16, 6 1000012c: b5 f4 JMI $-75 ;->0x10000096 1000012e: b4 21 ST.W [SP + #180], R1 10000130: 23 c4 ADDC R4, R3, R0 10000132: b3 56 JNB R6, #11 10000134: 99 95 ST.B [R3 + #22], R1 10000136: ba cf DIVS R7, R2, R6 10000138: 0f a5 ST.W [R1 + #20], R7 1000013a: bd b8 LDP.B R7, [R5] << #2 1000013c: 9e b8 LDP.B R3, [R6] << #2 1000013e: 02 28 ADD R0, #2 10000140: 08 88 LD.B R1, [R0 + #0] 10000142: 05 5f PUSH {R6,R8} 10000144: b2 d9 XRL R6, R2, R6 10000146: 0c c6 SUB R1, R4, R0 10000148: 24 e9 LD.W R4, [R4 + R4] 1000014a: 0b b1 ST.H [R1 + #4], R3 1000014c: 87 7c LSR R0, #15 1000014e: 6f 2f ADD R6, #127 10000150: 11 4c SET [R2], #1 10000152: 68 58 MOV R3, R8 10000154: ab 1d MOV R10, #219 10000156: 61 c1 ADD R4, R1, #5 10000158: 3d 2d ADD R3, #93 1000015a: 66 b6 ST.H [R4 + #25], R6 1000015c: 90 41 LD R1, [PC + #144] ;->0x1000039c :=0x86d3d2d4 1000015e: dc 76 LD.B LR, [R12++] 10000160: 06 71 TST R0, R6 10000162: db 01 CMN LR, R11 10000164: bc 20 ST.W [SP + #188], R0 10000166: d2 98 LD.W R2, [R2 + #3] 10000168: 2a 10 MOV R2, #10 1000016a: d5 ef ST.W [R2 + R7], R5 1000016c: 89 85 ST.W [R8], R9 1000016e: b1 71 TST R11, R1 10000170: 1f b5 ST.H [R3 + #20], R7 10000172: b6 06 SJMP $-330 ;->0xffffede 10000174: a5 e4 LD.B R4, [R5 + R2] 10000176: bf 9f LD.W R7, [R7 + #30] 10000178: 33 d4 ANL R6, R3, R0 1000017a: b8 e8 LD.W R7, [R0 + R2] 1000017c: a2 c9 SUBC R4, R2, R6 1000017e: 07 78 ASR R0, #7 10000180: 34 f9 JLS $+52 ;->0x100001e8 10000182: 00 0f LD.W R7, [SP + #0] 10000184: 8e a8 LD.H R1, [R6 + #2] 10000186: 09 96 ST.B [R1 + #24], R1 10000188: 18 98 LD.W R3, [R0 + #0] 1000018a: 0e e1 LD.B R0, [SP + #14] 1000018c: bb 0d LD.W R5, [SP + #187] 1000018e: 6a 7f ROR LR, #18 10000190: 2d 3d CMP R2, #93 10000192: 6d 08 LD.W R0, [SP + #109] 10000194: 97 6c LSL R9, R7 10000196: 64 91 ST.B [R4 + #5], R4 10000198: 01 5c LJMP R1 1000019a: 63 e6 LD.H R4, [R3 + R1] 1000019c: f4 51 JB [SP], #28 1000019e: 6b 6b XRL R6, R11 100001a0: 62 61 SXT.H R6, R2 100001a2: 6c 1c MOV R6, #204 100001a4: d8 30 SUB LR, #8 100001a6: 65 85 ST.W [R6], R5 100001a8: 4e 00 62 f2 LD.H R2, [R19 + #-68] 100001ac: ed 95 ST.B [R5 + #23], R5 100001ae: 06 6c LSL R0, R6 100001b0: 7b a5 ST.W [R7 + #21], R3 100001b2: 01 1b MOV R0, #177 100001b4: c1 f4 JMI $-63 ;->0x10000136 100001b6: 08 82 LD.W R0, [R8] 100001b8: 57 c4 ADDC R2, R7, R1 100001ba: 0f f5 JPL $+15 ;->0x100001d8 100001bc: c6 d9 XRL R0, R6, R7 100001be: b0 65 ADDC R11, R0 100001c0: 50 e9 LD.W R2, [R0 + R5] 100001c2: b7 12 MOV R11, #39 100001c4: ea b8 LDP.B R5, [R2] << #3 100001c6: be 8b LD.B R7, [R6 + #14] 100001c8: 7c 88 LD.B R7, [R4 + #1] 100001ca: b9 fc JGT $-71 ;->0x1000013c 100001cc: df 1d MOV LR, #223 100001ce: dd 62 SXT.B LR, LR 100001d0: 49 2d ADD R4, #89 100001d2: da 15 MOV LR, #90 100001d4: f3 7c LSR SP, #11 100001d6: d3 8c LD.B R2, [R3 + #19] 100001d8: 65 4c SET [R12], #5 100001da: d4 fb JLT $-44 ;->0x10000182 100001dc: 58 61 SXT.H R5, R8 100001de: b2 4d SET [R6], #26 100001e0: ce 51 JB [R9], #30 100001e2: b5 3a CMP R11, #37 100001e4: 74 00 bc a3 ST.H [R29 + #-216], R28 100001e8: e2 30 SUB SP, #2 100001ea: bb d4 ANL R7, R3, R2 100001ec: 41 a5 ST.W [R0 + #21], R1 100001ee: df 4a CLR R11, #15 100001f0: d7 95 ST.B [R2 + #23], R7 100001f2: d8 3d CMP LR, #88 100001f4: 6d c4 ADDC R5, R5, R1 100001f6: d1 a4 ST.W [R2 + #19], R1 100001f8: fb f4 JMI $-5 ;->0x100001ee 100001fa: d6 d3 DIVU R2, R6, R7 100001fc: 6a e9 LD.W R5, [R2 + R5] 100001fe: 69 43 LD R3, [PC + #105] ;->0x100003a0 :=0xf1d4e242 10000200: fc d9 XRL R7, R4, R7 10000202: 6e 34 SUB R6, #78 10000204: 46 88 LD.B R0, [R6 + #1] 10000206: 67 ad LD.H R4, [R7 + #21] 10000208: d0 b8 LDP.B R2, [R0] << #3 1000020a: 60 da LSL R4, R0, R1 1000020c: 73 2d ADD R7, #83 1000020e: 04 44 LD R4, [PC + #4] ;->0x1000021c :=0x5005713c 10000210: e5 1d MOV SP, #213 10000212: 03 33 SUB R0, #51 10000214: 5f 4c SET [R11], #7 10000216: 0a aa LD.H R1, [R2 + #8] 10000218: c9 7c LSR R9, #9 1000021a: 0d dd LSR R1, R5, R4 1000021c: 3c 71 05 50 .long 0x5005713c ->1342533948 [!!!@2@:TST R3, R12 @@: JB [R0], #5 10000220: aa 41 LD R1, [PC + #170] ;->0x100004c8 :=0x0 10000222: 02 27 ST.W [SP + #2], R7 10000224: 10 10 MOV R1, #0 10000226: 0b be MOV 0, R11 10000228: 86 20 ST.W [SP + #134], R0 1000022a: 0c c9 SUBC R1, R4, R4 1000022c: 25 b5 ST.H [R4 + #20], R5 1000022e: 68 57 JNB LR, #16 10000230: b3 85 ST.W [R11], R3 10000232: 6f 20 ST.W [SP + #111], R0 10000234: 09 d4 ANL R1, R1, R0 10000236: 66 b9 STP.B [R6], R4 << #1 10000238: 9f e4 LD.B R3, [R7 + R2] 1000023a: 61 ce DIVS R4, R1, R1 1000023c: 0e f9 JLS $+14 ;->0x10000258 1000023e: de 5e POP {R7-R10,R12,PC} 10000240: 98 c9 SUBC R3, R0, R6 10000242: d9 29 ADD LR, #25 10000244: 22 98 LD.W R4, [R2 + #0] 10000246: d0 b0 ST.H [R2 + #3], R0 10000248: b4 a8 LD.H R6, [R4 + #2] 1000024a: d7 c7 SUB R2, R7, R7 1000024c: 17 3d CMP R1, #87 1000024e: b3 59 MOV LR, R19 10000250: 81 0d LD.W R5, [SP + #129] 10000252: b4 2e ADD R11, #100 10000254: 3b 5c bd b7 MOVL R27, #47037 10000258: ad 6c LSL R10, LR 1000025a: ba c0 ADD R7, R2, #2 1000025c: 20 83 ST.B [R2], R0 1000025e: b8 ed ST.H [R7 + R6], R0 10000260: b6 b3 ST.H [R6 + #14], R6 10000262: bf 9a LD.W R7, [R7 + #10] 10000264: 0c e2 ST.H [SP + #12], R0 10000266: b6 03 9a d2 JMP $-4795750 ;->0xf6da79a 1000026a: b1 74 LD.H R11, [R1++] 1000026c: 39 47 LD R7, [PC + #57] ;->0x10000350 :=0xb5d0cf31 1000026e: d5 ea ST.B [R2 + R3], R5 10000270: af 77 ST.B [R10++], PC 10000272: d2 9d LD.W R2, [R2 + #23] 10000274: 15 26 ST.W [SP + #21], R6 10000276: db 04 SJMP $+219 ;->0x1000042c 10000278: 83 16 MOV R8, #99 1000027a: dc 73 ST.W [LR++], R12 1000027c: 12 0b LD.W R3, [SP + #18] 1000027e: 63 e3 ST.B [SP + #3], R3 10000280: 84 3b CMP R8, #52 10000282: 64 94 ST.B [R4 + #17], R4 10000284: 3e 6a ORL R3, SP 10000286: 6d 0d LD.W R5, [SP + #109] 10000288: a8 5a MOV R21, R8 1000028a: 6a 7a LSL LR, #2 1000028c: 0b cf DIVS R1, R3, R4 1000028e: 0e e4 LD.B R1, [R6 + R0] 10000290: 9d ff .long 0x9309ff9d 10000292: 09 93 ST.B [R1 + #12], R1 10000294: 27 ae LD.H R4, [R7 + #24] 10000296: 00 0a LD.W R2, [SP + #0] 10000298: b1 9e LD.W R6, [R1 + #26] 1000029a: 07 7d LSR R0, #23 1000029c: 44 93 ST.B [R0 + #13], R4 1000029e: 0f f0 JZ $+15 ;->0x100002bc 100002a0: d2 a3 ST.W [R2 + #15], R2 100002a2: 08 87 LDS.B R0, [R8] 100002a4: 68 f2 JC $+104 ;->0x10000374 100002a6: 01 1e MOV R0, #225 100002a8: fe c2 ADD R7, R6, R3 100002aa: 06 69 ANL R0, R6 100002ac: 5d 57 JNB R11, #21 100002ae: 62 f7 JVC $+98 ;->0x10000372 100002b0: cb 67 SUBC R12, R11 100002b2: 65 80 LD.B R6, [R5] 100002b4: 71 36 SUB R7, #97 100002b6: 6c 19 MOV R6, #156 100002b8: e7 06 SJMP $-281 ;->0x10000086 100002ba: 6b 6e ASR R6, R11 100002bc: 76 1b MOV R7, #182 100002be: d4 fe LJMP $-44 ;->0x10000266 100002c0: e0 2b ADD SP, #48 100002c2: d3 89 LD.B R2, [R3 + #7] 100002c4: 5a 7a LSL R11, #2 100002c6: da 10 MOV LR, #10 100002c8: cc 4a CLR R9, #12 100002ca: dd 67 SUBC LR, LR 100002cc: 6f df ASR R5, R7, R5 100002ce: b9 f9 JLS $-71 ;->0x10000240 100002d0: f9 ef ST.W [R7 + R7], R1 100002d2: be 8e LD.B R7, [R6 + #26] 100002d4: 43 be MOV 2, R3 100002d6: b7 17 MOV R11, #119 100002d8: d5 8e LD.B R2, [R5 + #27] 100002da: b0 60 REV R11, R0 100002dc: e8 a3 ST.W [R5 + #15], R0 100002de: d6 d6 ORL R2, R6, R3 100002e0: 7e 93 ST.B [R7 + #13], R6 100002e2: d1 a1 ST.W [R2 + #7], R1 100002e4: c4 c2 ADD R0, R4, R3 100002e6: d8 38 CMP LR, #8 100002e8: 52 f2 JC $+82 ;->0x1000038c 100002ea: df 4f CLR [R11], #31 100002ec: f1 67 SUBC PC, R1 100002ee: bb d1 ZXT.B R11, R11 100002f0: 67 57 JNB R12, #23 100002f2: bc a6 ST.W [R7 + #26], R4 100002f4: dd 06 SJMP $-291 ;->0x100000ae 100002f6: b5 3f CMP R11, #117 100002f8: 4b 36 SUB R4, #107 100002fa: b2 48 SET R6, #10 100002fc: da 2b ADD LR, #58 100002fe: 0d d8 XRL R1, R5, R0 10000300: 4c 1b MOV R4, #188 10000302: 0a af LD.H R1, [R2 + #28] 10000304: f6 4a CLR SP, #14 10000306: 03 36 SUB R0, #99 10000308: 60 7a LSL R12, #0 1000030a: 04 41 LD R1, [PC + #4] ;->0x10000318 :=0x4669be79 1000030c: c3 ef ST.W [R0 + R7], R3 1000030e: 60 df ASR R4, R0, R5 10000310: 55 df ASR R2, R5, R5 10000312: 67 a8 LD.H R4, [R7 + #1] 10000314: ef 8e LD.B R5, [R7 + #27] 10000316: 6e 31 SUB R6, #30 10000318: 79 be 69 46 .long 0x4669be79 ->1181335161 [!!!@2@:MOV 3, R25 @@: LD R6, [PC + #105] ;->0x100004bc :=0x0 1000031c: 8c b3 ST.H [R1 + #14], R4 1000031e: 61 cb MULS R4, R1, R5 10000320: 1a 83 ST.B [R1], R10 10000322: 66 bc LDP.H R4, [R6] << #1 10000324: a0 d2 DIVU R4, R0, R2 10000326: 6f 25 ST.W [SP + #111], R5 10000328: 36 e2 ST.H [SP + #22], R1 1000032a: 68 52 JNB [LR], #0 1000032c: 95 77 ST.B [R9++], R5 1000032e: 0c cc SUB R1, R4, #0 10000330: 03 47 LD R7, [PC + #3] ;->0x1000033c :=0xc5ba3bbe 10000332: 0b bb STP.W [R3], R1 << #0 10000334: b9 16 MOV R11, #105 10000336: 02 22 ST.W [SP + #2], R2 10000338: 2f 26 ST.W [SP + #47], R6 1000033a: 05 55 JB R0, #21 1000033c: be 3b ba c5 .long 0xc5ba3bbe ->-977650754 [!!!@2@:CMP R11, #62 @@: ADDC R7, R2, R6 10000340: 28 0b LD.W R3, [SP + #40] 10000342: bd b2 ST.H [R7 + #10], R5 10000344: 92 5a MOV R20, R18 10000346: b4 2b ADD R11, #52 10000348: 04 6a ORL R0, R4 1000034a: b3 5c .short 0x5cb3 1000034c: a7 ff .long 0xc2d7ffa7 1000034e: d7 c2 ADD R2, R7, R3 10000350: 31 cf d0 b5 .long 0xb5d0cf31 ->-1244606671 [!!!@2@:DIVS R6, R1, R4 @@: ST.H [R2 + #23], R0 10000354: 8b 9e LD.W R1, [R3 + #26] 10000356: d9 2c ADD LR, #73 10000358: 1d ae LD.H R3, [R5 + #24] 1000035a: de 5b MOV R30, R30 1000035c: b0 c2 ADD R6, R0, R2 1000035e: 64 9b LD.W R4, [R4 + #13] 10000360: 26 f2 JC $+38 ;->0x100003ac 10000362: 63 ec ST.H [R4 + R1], R3 10000364: 9c a3 ST.W [R3 + #14], R4 10000366: 6a 75 ST.H [R6++], R10 10000368: 0a 93 ST.B [R1 + #12], R2 1000036a: 6d 02 SVC SVC, #109 1000036c: a9 06 SJMP $-343 ;->0x100000be 1000036e: 09 9c LD.W R1, [R1 + #16] 10000370: 3f 36 SUB R3, #111 10000372: 0e eb ST.B [R1 + R4], R6 10000374: 85 67 SUBC R8, R5 10000376: 07 72 LD.W R0, [R7++] 10000378: 13 57 JNB R2, #19 1000037a: 00 05 SJMP $+256 ;->0x1000057a 1000037c: 82 4a CLR R0, #10 1000037e: bf 95 ST.B [R7 + #22], R7 10000380: 14 7a LSL R2, #4 10000382: b8 e2 ST.H [SP + #24], R5 10000384: ae 2b ADD R10, #62 10000386: b1 7b LSL R6, #25 10000388: 38 1b MOV R3, #184 1000038a: b6 0c LD.W R4, [SP + #182] 1000038c: 9b 8e LD.B R3, [R3 + #26] 1000038e: d2 92 ST.B [R2 + #11], R2 10000390: 0d be MOV 0, LR 10000392: d5 e5 LD.B R2, [R5 + R7] 10000394: b7 ef ST.W [R6 + R6], R7 10000396: dc 7c LSR R11, #12 10000398: 21 df ASR R4, R1, R4 1000039a: db 0b LD.W R3, [SP + #219] 1000039c: d4 d2 d3 86 .long 0x86d3d2d4 ->-2032938284 [!!!@2@:DIVU R2, R4, R3 @@: LDS.H LR, [R3] 100003a0: 42 e2 d4 f1 .long 0xf1d4e242 ->-237706686 [!!!@2@:ST.H [SP + #2], R2 @@: JNZ $-44 ;->0x10000348 100003a4: f8 b3 ST.H [R7 + #15], R0 100003a6: dd 68 NOT LR, LR 100003a8: 6e 83 ST.B [R6], SP 100003aa: da 1f MOV LR, #250 100003ac: cd 16 MOV R12, #109 100003ae: be 81 LD.H R11, [SP] 100003b0: 5b 26 ST.W [SP + #91], R6 100003b2: b9 f6 JVS $-71 ;->0x10000324 100003b4: e1 77 ST.B [SP++], R1 100003b6: b0 6f ROR R11, R0 100003b8: 77 47 LD R7, [PC + #119] ;->0x10000594 :=0x0 100003ba: b7 18 MOV R11, #135 100003bc: e6 5a MOV R23, R6 100003be: 08 88 LD.B R1, [R0 + #0] 100003c0: 70 6a ORL R7, R0 100003c2: 0f ff .short 0xff0f 100003c4: ca 3b CMP R12, #58 100003c6: 06 66 SUB R0, R6 100003c8: 5c 0b 01 11 .long 0x11010b5c ->285281116 [!!!@2@:LD.W R3, [SP + #92] @@: MOV R0, #17 100003cc: ff 9e LD.W R7, [R7 + #27] 100003ce: 65 8f LD.B R4, [R5 + #29] 100003d0: 69 ae LD.H R5, [R1 + #25] 100003d2: 62 f8 JHI $+98 ;->0x10000496 100003d4: d3 ff .long 0x616bffd3 100003d6: 6b 61 SXT.H R6, R11 100003d8: 45 cf DIVS R0, R5, R5 100003da: 6c 16 MOV R6, #108 100003dc: 78 e2 ST.H [SP + #24], R3 100003de: 0a a0 ST.W [R1 + #0], R2 100003e0: ee d2 DIVU R5, R6, R3 100003e2: 0d d7 ORL R1, R5, R4 100003e4: 54 83 ST.B [R5], R4 100003e6: 04 4e CLR [R0], #4 100003e8: c2 b3 ST.H [R0 + #15], R2 100003ea: 03 39 CMP R0, #19 100003ec: 61 26 ST.W [SP + #97], R6 100003ee: 67 a7 ST.W [R4 + #29], R7 100003f0: f7 16 MOV PC, #103 100003f2: 60 d0 ZXT.H R6, R0 100003f4: 4d 47 LD R7, [PC + #77] ;->0x10000528 :=0x0 100003f6: 69 49 SET LR, #17 100003f8: db 77 ST.B [LR++], R11 100003fa: 6e 3e CMP R6, #110 100003fc: 4a 6a ORL R4, R10 100003fe: d1 ae LD.H R2, [R1 + #27] 10000400: dc 5a MOV R22, R28 10000402: d6 d9 XRL R2, R6, R7 10000404: 66 0b LD.W R3, [SP + #102] 10000406: df 40 LD R0, [PC + #223] ;->0x10000780 :=0x0 10000408: f0 3b CMP PC, #48 1000040a: d8 37 SUB LR, #120 1000040c: 53 ae LD.H R2, [R3 + #25] 1000040e: bc a9 LD.H R7, [R4 + #6] 10000410: c5 9e LD.W R0, [R5 + #27] 10000412: bb de ASR R7, R3, R2 10000414: 7f cf DIVS R7, R7, R5 10000416: b2 47 LD R7, [PC + #178] ;->0x100006dc :=0x0 10000418: e9 ff .long 0x30b5ffe9 1000041a: b5 30 SUB R11, #5 1000041c: 1c f2 JC $+28 ;->0x10000454 1000041e: bd bd STP.H [R5], R7 << #2 10000420: 8a c2 ADD R1, R2, R2 10000422: ba ca MULS R7, R2, R2 10000424: 30 93 ST.B [R6 + #12], R0 10000426: b3 53 JNB [R6], #27 10000428: a6 a3 ST.W [R4 + #14], R6 1000042a: b4 24 ST.W [SP + #180], R4 1000042c: 05 36 SUB R0, #101 1000042e: d0 ba LDP.W R2, [R0] << #3 10000430: 93 06 SJMP $-365 ;->0x10000156 10000432: d7 cd SUB R2, R7, #7 10000434: 29 57 JNB R5, #17 10000436: de 54 JB R11, #14 10000438: bf 67 SUBC R11, PC 1000043a: d9 23 ST.W [SP + #217], R3 1000043c: 2e 7a LSL R5, #6 1000043e: 66 b3 ST.H [R4 + #13], R6 10000440: b8 4a CLR R7, #8 10000442: 61 c4 ADDC R4, R1, R1 10000444: 02 1b MOV R0, #178 10000446: 68 5d CLR PSW, #8 10000448: 94 2b ADD R9, #52 1000044a: 6f 2a ADD R6, #47 1000044c: 37 be MOV 1, R23 1000044e: 0b b4 ST.H [R1 + #16], R3 10000450: a1 8e LD.B R4, [R1 + #26] 10000452: 0c c3 ADD R1, R4, R4 10000454: 1b df ASR R3, R3, R4 10000456: 05 5a MOV R16, R5 10000458: 8d ef ST.W [R1 + R6], R5 1000045a: 02 2d ADD R0, #82 1000045c <_Ctype>: 1000045c: 39 29 00 00 9).. 10000460 : ... 10000488 : ... 10000688 : 10000688: 00 00 00 00 .... 1000068c : 1000068c: 00 00 00 00 .... 10000690 : ... 10000a98 : ... 10000a9a : ... 10000a9c : 10000a9c: 00 00 00 00 .... 10000aa0 : 10000aa0: 00 00 00 00 .... 10000aa4 : 10000aa4: 00 00 00 00 .... 10000aa8 : 10000aa8: 00 00 00 00 .... 10000aac <__Heap_Start__>: ...