📄 stm32f10x_nvic.txt
字号:
0001a6 485b LDR r0,|L1.788|
;;;381 return (SCB->CPUID);
0001a8 6800 LDR r0,[r0,#0]
;;;382 }
0001aa 4770 BX lr
ENDP
NVIC_SetVectorTable PROC
;;;402
;;;403 SCB->ExceptionTableOffset = NVIC_VectTab | (Offset & (u32)0x1FFFFF80);
0001ac f021f021 BIC r1,r1,#0x7f
0001b0 f021f021 BIC r1,r1,#0xe0000000
0001b4 4308 ORRS r0,r0,r1
0001b6 4958 LDR r1,|L1.792|
0001b8 6008 STR r0,[r1,#0]
;;;404 }
0001ba 4770 BX lr
ENDP
NVIC_GenerateSystemReset PROC
;;;414 {
;;;415 SCB->AIRC = AIRC_VECTKEY_MASK | (u32)0x04;
0001bc 4953 LDR r1,|L1.780|
0001be 4857 LDR r0,|L1.796|
0001c0 6008 STR r0,[r1,#0]
;;;416 }
0001c2 4770 BX lr
ENDP
NVIC_GenerateCoreReset PROC
;;;426 {
;;;427 SCB->AIRC = AIRC_VECTKEY_MASK | (u32)0x01;
0001c4 4951 LDR r1,|L1.780|
0001c6 4856 LDR r0,|L1.800|
0001c8 6008 STR r0,[r1,#0]
;;;428 }
0001ca 4770 BX lr
ENDP
NVIC_SystemLPConfig PROC
;;;444 void NVIC_SystemLPConfig(u8 LowPowerMode, FunctionalState NewState)
;;;445 {
0001cc f04ff04f MOV r2,#0xe000e000
;;;446 /* Check the parameters */
;;;447 assert(IS_NVIC_LP(LowPowerMode));
;;;448 assert(IS_FUNCTIONAL_STATE(NewState));
;;;449
;;;450 if (NewState != DISABLE)
0001d0 2900 CMP r1,#0
;;;451 {
;;;452 SCB->SysCtrl |= LowPowerMode;
0001d2 f8d2f8d2 LDR r1,[r2,#0xd10]
;;;453 }
;;;454 else
;;;455 {
;;;456 SCB->SysCtrl &= (u32)(~(u32)LowPowerMode);
0001d6 bf0c ITE EQ
0001d8 ea21ea21 BICEQ r0,r1,r0
0001dc 4308 ORRNE r0,r0,r1
0001de f8c2f8c2 STR r0,[r2,#0xd10]
;;;457 }
;;;458 }
0001e2 4770 BX lr
ENDP
NVIC_SystemHandlerConfig PROC
;;;481
;;;482 tmpreg = (u32)0x01 << (SystemHandler & (u32)0x1F);
0001e4 f000f000 AND r0,r0,#0x1f
0001e8 2201 MOVS r2,#1
0001ea fa02fa02 LSL r0,r2,r0
0001ee f04ff04f MOV r2,#0xe000e000
;;;483
;;;484 if (NewState != DISABLE)
0001f2 2900 CMP r1,#0
;;;485 {
;;;486 SCB->SysHandlerCtrl |= tmpreg;
0001f4 f8d2f8d2 LDR r1,[r2,#0xd24]
;;;487 }
;;;488 else
;;;489 {
;;;490 SCB->SysHandlerCtrl &= ~tmpreg;
0001f8 bf0c ITE EQ
0001fa ea21ea21 BICEQ r0,r1,r0
0001fe 4308 ORRNE r0,r0,r1
000200 f8c2f8c2 STR r0,[r2,#0xd24]
;;;491 }
;;;492 }
000204 4770 BX lr
ENDP
NVIC_SystemHandlerPriorityConfig PROC
;;;515 u8 SystemHandlerSubPriority)
;;;516 {
000206 b430 PUSH {r4,r5}
;;;517 u32 tmp1 = 0x00, tmp2 = 0xFF, handlermask = 0x00;
;;;518 u32 tmppriority = 0x00;
;;;519
;;;520 /* Check the parameters */
;;;521 assert(IS_PRIORITY_SYSTEM_HANDLER(SystemHandler));
;;;522 assert(IS_NVIC_PREEMPTION_PRIORITY(SystemHandlerPreemptionPriority));
;;;523 assert(IS_NVIC_SUB_PRIORITY(SystemHandlerSubPriority));
;;;524
;;;525 tmppriority = (0x700 - (SCB->AIRC & (u32)0x700))>> 0x08;
000208 f04ff04f MOV r5,#0xe000e000
00020c f8d5f8d5 LDR r3,[r5,#0xd0c]
000210 24ff MOVS r4,#0xff
000212 f403f403 AND r3,r3,#0x700
000216 f5c3f5c3 RSB r3,r3,#0x700
00021a 0a1b LSRS r3,r3,#8
;;;526 tmp1 = (0x4 - tmppriority);
00021c f1c3f1c3 RSB r12,r3,#4
;;;527 tmp2 = tmp2 >> tmppriority;
000220 fa24fa24 LSR r3,r4,r3
;;;528
;;;529 tmppriority = (u32)SystemHandlerPreemptionPriority << tmp1;
;;;530 tmppriority |= SystemHandlerSubPriority & tmp2;
000224 401a ANDS r2,r2,r3
000226 fa01fa01 LSL r1,r1,r12
00022a 4311 ORRS r1,r1,r2
;;;531
;;;532 tmppriority = tmppriority << 0x04;
;;;533 tmp1 = SystemHandler & (u32)0xC0;
00022c f000f000 AND r2,r0,#0xc0
000230 0109 LSLS r1,r1,#4
;;;534 tmp1 = tmp1 >> 0x06;
000232 0992 LSRS r2,r2,#6
;;;535 tmp2 = (SystemHandler >> 0x08) & (u32)0x03;
000234 f3c0f3c0 UBFX r0,r0,#8,#2
;;;536 tmppriority = tmppriority << (tmp2 * 0x08);
000238 00c0 LSLS r0,r0,#3
00023a 4081 LSLS r1,r1,r0
;;;537 handlermask = (u32)0xFF << (tmp2 * 0x08);
00023c 23ff MOVS r3,#0xff
00023e 4083 LSLS r3,r3,r0
;;;538
;;;539 SCB->SystemPriority[tmp1] &= ~handlermask;
000240 eb05eb05 ADD r0,r5,r2,LSL #2
000244 f8d0f8d0 LDR r2,[r0,#0xd18]
000248 439a BICS r2,r2,r3
;;;540 SCB->SystemPriority[tmp1] |= tmppriority;
00024a 4311 ORRS r1,r1,r2
;;;541 }
00024c f8c0f8c0 STR r1,[r0,#0xd18]
000250 bc30 POP {r4,r5}
000252 4770 BX lr
ENDP
NVIC_GetSystemHandlerPendingBitStatus PROC
;;;556 ITStatus NVIC_GetSystemHandlerPendingBitStatus(u32 SystemHandler)
;;;557 {
000254 4601 MOV r1,r0
;;;558 ITStatus bitstatus = RESET;
000256 2000 MOVS r0,#0
;;;559 u32 tmp = 0x00, tmppos = 0x00;
;;;560
;;;561 /* Check the parameters */
;;;562 assert(IS_GET_PENDING_SYSTEM_HANDLER(SystemHandler));
;;;563
;;;564 tmppos = (SystemHandler >> 0x0A);
;;;565 tmppos &= (u32)0x0F;
000258 f3c1f3c1 UBFX r1,r1,#10,#4
;;;566
;;;567 tmppos = (u32)0x01 << tmppos;
00025c 2201 MOVS r2,#1
00025e fa02fa02 LSL r1,r2,r1
000262 4a30 LDR r2,|L1.804|
;;;568
;;;569 tmp = SCB->SysHandlerCtrl & tmppos;
000264 6812 LDR r2,[r2,#0]
000266 400a ANDS r2,r2,r1
;;;570
;;;571 if (tmp == tmppos)
000268 428a CMP r2,r1
;;;572 {
;;;573 bitstatus = SET;
00026a bf08 IT EQ
00026c 2001 MOVEQ r0,#1
;;;574 }
;;;575 else
;;;576 {
;;;577 bitstatus = RESET;
;;;578 }
;;;579 return bitstatus;
;;;580 }
00026e 4770 BX lr
ENDP
NVIC_SetSystemHandlerPendingBit PROC
;;;601 /* Get the System Handler pending bit position */
;;;602 tmp = SystemHandler & (u32)0x1F;
000270 f000f000 AND r0,r0,#0x1f
000274 4923 LDR r1,|L1.772|
;;;603 /* Set the corresponding System Handler pending bit */
;;;604 SCB->IRQControlState |= ((u32)0x01 << tmp);
000276 680a LDR r2,[r1,#0]
000278 2301 MOVS r3,#1
00027a fa03fa03 LSL r0,r3,r0
00027e 4310 ORRS r0,r0,r2
000280 6008 STR r0,[r1,#0]
;;;605 }
000282 4770 BX lr
ENDP
NVIC_ClearSystemHandlerPendingBit PROC
;;;625 /* Get the System Handler pending bit position */
;;;626 tmp = SystemHandler & (u32)0x1F;
000284 491f LDR r1,|L1.772|
000286 f000f000 AND r0,r0,#0x1f
;;;627 /* Clear the corresponding System Handler pending bit */
;;;628 SCB->IRQControlState |= ((u32)0x01 << (tmp - 0x01));
00028a 680a LDR r2,[r1,#0]
00028c 1e40 SUBS r0,r0,#1
00028e 2301 MOVS r3,#1
000290 fa03fa03 LSL r0,r3,r0
000294 4310 ORRS r0,r0,r2
000296 6008 STR r0,[r1,#0]
;;;629 }
000298 4770 BX lr
ENDP
NVIC_GetSystemHandlerActiveBitStatus PROC
;;;648 ITStatus NVIC_GetSystemHandlerActiveBitStatus(u32 SystemHandler)
;;;649 {
00029a 4601 MOV r1,r0
;;;650 ITStatus bitstatus = RESET;
00029c 2000 MOVS r0,#0
;;;651
;;;652 u32 tmp = 0x00, tmppos = 0x00;
;;;653
;;;654 /* Check the parameters */
;;;655 assert(IS_GET_ACTIVE_SYSTEM_HANDLER(SystemHandler));
;;;656
;;;657 tmppos = (SystemHandler >> 0x0E) & (u32)0x0F;
00029e f3c1f3c1 UBFX r1,r1,#14,#4
;;;658
;;;659 tmppos = (u32)0x01 << tmppos;
0002a2 2201 MOVS r2,#1
0002a4 fa02fa02 LSL r1,r2,r1
0002a8 4a1e LDR r2,|L1.804|
;;;660
;;;661 tmp = SCB->SysHandlerCtrl & tmppos;
0002aa 6812 LDR r2,[r2,#0]
0002ac 400a ANDS r2,r2,r1
;;;662
;;;663 if (tmp == tmppos)
0002ae 428a CMP r2,r1
;;;664 {
;;;665 bitstatus = SET;
0002b0 bf08 IT EQ
0002b2 2001 MOVEQ r0,#1
;;;666 }
;;;667 else
;;;668 {
;;;669 bitstatus = RESET;
;;;670 }
;;;671 return bitstatus;
;;;672 }
0002b4 4770 BX lr
ENDP
NVIC_GetFaultHandlerSources PROC
;;;695
;;;696 tmpreg = (SystemHandler >> 0x12) & (u32)0x03;
0002b6 f3c0f3c0 UBFX r1,r0,#18,#2
;;;697 tmppos = (SystemHandler >> 0x14) & (u32)0x03;
0002ba f3c0f3c0 UBFX r0,r0,#20,#2
0002be f04ff04f MOV r2,#0xe000e000
;;;698
;;;699 if (tmpreg == 0x00)
0002c2 2900 CMP r1,#0
;;;700 {
;;;701 faultsources = SCB->HardFaultStatus;
0002c4 bf04 ITT EQ
0002c6 f8d2f8d2 LDREQ r0,[r2,#0xd2c]
;;;702 }
;;;703 else if (tmpreg == 0x01)
;;;704 {
;;;705 faultsources = SCB->ConfigFaultStatus >> (tmppos * 0x08);
;;;706 if (tmppos != 0x02)
;;;707 {
;;;708 faultsources &= (u32)0x0F;
;;;709 }
;;;710 else
;;;711 {
;;;712 faultsources &= (u32)0xFF;
;;;713 }
;;;714 }
;;;715 else
;;;716 {
;;;717 faultsources = SCB->DebugFaultStatus;
;;;718 }
;;;719 return faultsources;
;;;720 }
0002ca 4770 BXEQ lr
0002cc 2901 CMP r1,#1
0002ce bf1c ITT NE
0002d0 f8d2f8d2 LDRNE r0,[r2,#0xd30]
0002d4 4770 BXNE lr
0002d6 f8d2f8d2 LDR r1,[r2,#0xd28]
0002da 00c2 LSLS r2,r0,#3
0002dc 2802 CMP r0,#2
0002de fa21fa21 LSR r0,r1,r2
0002e2 bf0c ITE EQ
0002e4 b2c0 UXTBEQ r0,r0
0002e6 f000f000 ANDNE r0,r0,#0xf
0002ea 4770 BX lr
ENDP
NVIC_GetFaultAddress PROC
;;;741
;;;742 tmp = (SystemHandler >> 0x16) & (u32)0x01;
0002ec f3c0f3c0 UBFX r0,r0,#22,#1
0002f0 f04ff04f MOV r1,#0xe000e000
;;;743
;;;744 if (tmp == 0x00)
0002f4 2800 CMP r0,#0
;;;745 {
;;;746 faultaddress = SCB->MemoryManageFaultAddr;
;;;747 }
;;;748 else
;;;749 {
;;;750 faultaddress = SCB->BusFaultAddr;
0002f6 bf14 ITE NE
0002f8 f8d1f8d1 LDRNE r0,[r1,#0xd38]
0002fc f8d1f8d1 LDREQ r0,[r1,#0xd34]
;;;751 }
;;;752 return faultaddress;
;;;753 }
000300 4770 BX lr
ENDP
000302 0000 DCW 0x0000
|L1.772|
000304 e000ed04 DCD 0xe000ed04
|L1.776|
000308 05fa0000 DCD 0x05fa0000
|L1.780|
00030c e000ed0c DCD 0xe000ed0c
|L1.784|
000310 e000ef00 DCD 0xe000ef00
|L1.788|
000314 e000ed00 DCD 0xe000ed00
|L1.792|
000318 e000ed08 DCD 0xe000ed08
|L1.796|
00031c 05fa0004 DCD 0x05fa0004
|L1.800|
000320 05fa0001 DCD 0x05fa0001
|L1.804|
000324 e000ed24 DCD 0xe000ed24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -