📄 stm32f10x_nvic.txt
字号:
0002ae f000f000 AND r3,r0,#0xc0
;;;534 tmp1 = tmp1 >> 0x06;
0002b2 099b LSRS r3,r3,#6
;;;535 tmp2 = (SystemHandler >> 0x08) & (u32)0x03;
0002b4 f3c0f3c0 UBFX r4,r0,#8,#2
;;;536 tmppriority = tmppriority << (tmp2 * 0x08);
0002b8 00e7 LSLS r7,r4,#3
0002ba 40be LSLS r6,r6,r7
;;;537 handlermask = (u32)0xFF << (tmp2 * 0x08);
0002bc ea4fea4f LSL r12,r4,#3
0002c0 27ff MOVS r7,#0xff
0002c2 fa07fa07 LSL r5,r7,r12
;;;538
;;;539 SCB->SystemPriority[tmp1] &= ~handlermask;
0002c6 4f45 LDR r7,|L1.988|
0002c8 3714 ADDS r7,r7,#0x14
0002ca f857f857 LDR r12,[r7,r3,LSL #2]
0002ce ea2cea2c BIC r12,r12,r5
0002d2 f847f847 STR r12,[r7,r3,LSL #2]
;;;540 SCB->SystemPriority[tmp1] |= tmppriority;
0002d6 f857f857 LDR r12,[r7,r3,LSL #2]
0002da ea4cea4c ORR r12,r12,r6
0002de f847f847 STR r12,[r7,r3,LSL #2]
;;;541 }
0002e2 bdf0 POP {r4-r7,pc}
ENDP
NVIC_GetSystemHandlerPendingBitStatus PROC
;;;556 ITStatus NVIC_GetSystemHandlerPendingBitStatus(u32 SystemHandler)
;;;557 {
0002e4 b510 PUSH {r4,lr}
0002e6 4601 MOV r1,r0
;;;558 ITStatus bitstatus = RESET;
0002e8 2000 MOVS r0,#0
;;;559 u32 tmp = 0x00, tmppos = 0x00;
0002ea 2200 MOVS r2,#0
0002ec 2300 MOVS r3,#0
;;;560
;;;561 /* Check the parameters */
;;;562 assert(IS_GET_PENDING_SYSTEM_HANDLER(SystemHandler));
;;;563
;;;564 tmppos = (SystemHandler >> 0x0A);
0002ee 0a8b LSRS r3,r1,#10
;;;565 tmppos &= (u32)0x0F;
0002f0 f003f003 AND r3,r3,#0xf
;;;566
;;;567 tmppos = (u32)0x01 << tmppos;
0002f4 2401 MOVS r4,#1
0002f6 fa04fa04 LSL r3,r4,r3
;;;568
;;;569 tmp = SCB->SysHandlerCtrl & tmppos;
0002fa 4c38 LDR r4,|L1.988|
0002fc 3420 ADDS r4,r4,#0x20
0002fe 6824 LDR r4,[r4,#0]
000300 ea04ea04 AND r2,r4,r3
;;;570
;;;571 if (tmp == tmppos)
000304 429a CMP r2,r3
000306 d101 BNE |L1.780|
;;;572 {
;;;573 bitstatus = SET;
000308 2001 MOVS r0,#1
00030a e000 B |L1.782|
|L1.780|
;;;574 }
;;;575 else
;;;576 {
;;;577 bitstatus = RESET;
00030c 2000 MOVS r0,#0
|L1.782|
;;;578 }
;;;579 return bitstatus;
;;;580 }
00030e bd10 POP {r4,pc}
ENDP
NVIC_SetSystemHandlerPendingBit PROC
;;;595 {
;;;596 u32 tmp = 0x00;
000310 2100 MOVS r1,#0
;;;597
;;;598 /* Check the parameters */
;;;599 assert(IS_SET_PENDING_SYSTEM_HANDLER(SystemHandler));
;;;600
;;;601 /* Get the System Handler pending bit position */
;;;602 tmp = SystemHandler & (u32)0x1F;
000312 f000f000 AND r1,r0,#0x1f
;;;603 /* Set the corresponding System Handler pending bit */
;;;604 SCB->IRQControlState |= ((u32)0x01 << tmp);
000316 4a31 LDR r2,|L1.988|
000318 6813 LDR r3,[r2,#0]
00031a 2201 MOVS r2,#1
00031c 408a LSLS r2,r2,r1
00031e 4313 ORRS r3,r3,r2
000320 f04ff04f MOV r2,#0xe000e000
000324 f8c2f8c2 STR r3,[r2,#0xd04]
;;;605 }
000328 4770 BX lr
ENDP
NVIC_ClearSystemHandlerPendingBit PROC
;;;618 void NVIC_ClearSystemHandlerPendingBit(u32 SystemHandler)
;;;619 {
00032a b510 PUSH {r4,lr}
;;;620 u32 tmp = 0x00;
00032c 2100 MOVS r1,#0
;;;621
;;;622 /* Check the parameters */
;;;623 assert(IS_CLEAR_SYSTEM_HANDLER(SystemHandler));
;;;624
;;;625 /* Get the System Handler pending bit position */
;;;626 tmp = SystemHandler & (u32)0x1F;
00032e f000f000 AND r1,r0,#0x1f
;;;627 /* Clear the corresponding System Handler pending bit */
;;;628 SCB->IRQControlState |= ((u32)0x01 << (tmp - 0x01));
000332 4a2a LDR r2,|L1.988|
000334 6813 LDR r3,[r2,#0]
000336 1e4c SUBS r4,r1,#1
000338 2201 MOVS r2,#1
00033a 40a2 LSLS r2,r2,r4
00033c 4313 ORRS r3,r3,r2
00033e f04ff04f MOV r2,#0xe000e000
000342 f8c2f8c2 STR r3,[r2,#0xd04]
;;;629 }
000346 bd10 POP {r4,pc}
ENDP
NVIC_GetSystemHandlerActiveBitStatus PROC
;;;648 ITStatus NVIC_GetSystemHandlerActiveBitStatus(u32 SystemHandler)
;;;649 {
000348 b510 PUSH {r4,lr}
00034a 4601 MOV r1,r0
;;;650 ITStatus bitstatus = RESET;
00034c 2000 MOVS r0,#0
;;;651
;;;652 u32 tmp = 0x00, tmppos = 0x00;
00034e 2300 MOVS r3,#0
000350 2200 MOVS r2,#0
;;;653
;;;654 /* Check the parameters */
;;;655 assert(IS_GET_ACTIVE_SYSTEM_HANDLER(SystemHandler));
;;;656
;;;657 tmppos = (SystemHandler >> 0x0E) & (u32)0x0F;
000352 f3c1f3c1 UBFX r2,r1,#14,#4
;;;658
;;;659 tmppos = (u32)0x01 << tmppos;
000356 2401 MOVS r4,#1
000358 fa04fa04 LSL r2,r4,r2
;;;660
;;;661 tmp = SCB->SysHandlerCtrl & tmppos;
00035c 4c1f LDR r4,|L1.988|
00035e 3420 ADDS r4,r4,#0x20
000360 6824 LDR r4,[r4,#0]
000362 ea04ea04 AND r3,r4,r2
;;;662
;;;663 if (tmp == tmppos)
000366 4293 CMP r3,r2
000368 d101 BNE |L1.878|
;;;664 {
;;;665 bitstatus = SET;
00036a 2001 MOVS r0,#1
00036c e000 B |L1.880|
|L1.878|
;;;666 }
;;;667 else
;;;668 {
;;;669 bitstatus = RESET;
00036e 2000 MOVS r0,#0
|L1.880|
;;;670 }
;;;671 return bitstatus;
;;;672 }
000370 bd10 POP {r4,pc}
ENDP
NVIC_GetFaultHandlerSources PROC
;;;688 u32 NVIC_GetFaultHandlerSources(u32 SystemHandler)
;;;689 {
000372 b530 PUSH {r4,r5,lr}
000374 4601 MOV r1,r0
;;;690 u32 faultsources = 0x00;
000376 2000 MOVS r0,#0
;;;691 u32 tmpreg = 0x00, tmppos = 0x00;
000378 2200 MOVS r2,#0
00037a 2300 MOVS r3,#0
;;;692
;;;693 /* Check the parameters */
;;;694 assert(IS_FAULT_SOURCE_SYSTEM_HANDLER(SystemHandler));
;;;695
;;;696 tmpreg = (SystemHandler >> 0x12) & (u32)0x03;
00037c f3c1f3c1 UBFX r2,r1,#18,#2
;;;697 tmppos = (SystemHandler >> 0x14) & (u32)0x03;
000380 f3c1f3c1 UBFX r3,r1,#20,#2
;;;698
;;;699 if (tmpreg == 0x00)
000384 b91a CBNZ r2,|L1.910|
;;;700 {
;;;701 faultsources = SCB->HardFaultStatus;
000386 4c15 LDR r4,|L1.988|
000388 3428 ADDS r4,r4,#0x28
00038a 6820 LDR r0,[r4,#0]
00038c e011 B |L1.946|
|L1.910|
;;;702 }
;;;703 else if (tmpreg == 0x01)
00038e 2a01 CMP r2,#1
000390 d10c BNE |L1.940|
;;;704 {
;;;705 faultsources = SCB->ConfigFaultStatus >> (tmppos * 0x08);
000392 4c12 LDR r4,|L1.988|
000394 3424 ADDS r4,r4,#0x24
000396 6824 LDR r4,[r4,#0]
000398 00dd LSLS r5,r3,#3
00039a fa24fa24 LSR r0,r4,r5
;;;706 if (tmppos != 0x02)
00039e 2b02 CMP r3,#2
0003a0 d002 BEQ |L1.936|
;;;707 {
;;;708 faultsources &= (u32)0x0F;
0003a2 f000f000 AND r0,r0,#0xf
0003a6 e004 B |L1.946|
|L1.936|
;;;709 }
;;;710 else
;;;711 {
;;;712 faultsources &= (u32)0xFF;
0003a8 b2c0 UXTB r0,r0
0003aa e002 B |L1.946|
|L1.940|
;;;713 }
;;;714 }
;;;715 else
;;;716 {
;;;717 faultsources = SCB->DebugFaultStatus;
0003ac 4c0b LDR r4,|L1.988|
0003ae 342c ADDS r4,r4,#0x2c
0003b0 6820 LDR r0,[r4,#0]
|L1.946|
;;;718 }
;;;719 return faultsources;
;;;720 }
0003b2 bd30 POP {r4,r5,pc}
ENDP
NVIC_GetFaultAddress PROC
;;;734 u32 NVIC_GetFaultAddress(u32 SystemHandler)
;;;735 {
0003b4 4601 MOV r1,r0
;;;736 u32 faultaddress = 0x00;
0003b6 2000 MOVS r0,#0
;;;737 u32 tmp = 0x00;
0003b8 2200 MOVS r2,#0
;;;738
;;;739 /* Check the parameters */
;;;740 assert(IS_FAULT_ADDRESS_SYSTEM_HANDLER(SystemHandler));
;;;741
;;;742 tmp = (SystemHandler >> 0x16) & (u32)0x01;
0003ba f3c1f3c1 UBFX r2,r1,#22,#1
;;;743
;;;744 if (tmp == 0x00)
0003be b91a CBNZ r2,|L1.968|
;;;745 {
;;;746 faultaddress = SCB->MemoryManageFaultAddr;
0003c0 4b06 LDR r3,|L1.988|
0003c2 3330 ADDS r3,r3,#0x30
0003c4 6818 LDR r0,[r3,#0]
0003c6 e002 B |L1.974|
|L1.968|
;;;747 }
;;;748 else
;;;749 {
;;;750 faultaddress = SCB->BusFaultAddr;
0003c8 4b04 LDR r3,|L1.988|
0003ca 3334 ADDS r3,r3,#0x34
0003cc 6818 LDR r0,[r3,#0]
|L1.974|
;;;751 }
;;;752 return faultaddress;
;;;753 }
0003ce 4770 BX lr
ENDP
|L1.976|
0003d0 e000e180 DCD 0xe000e180
|L1.980|
0003d4 e000e284 DCD 0xe000e284
|L1.984|
0003d8 e000e400 DCD 0xe000e400
|L1.988|
0003dc e000ed04 DCD 0xe000ed04
|L1.992|
0003e0 05fa0000 DCD 0x05fa0000
|L1.996|
0003e4 e000ef00 DCD 0xe000ef00
|L1.1000|
0003e8 1fffff80 DCD 0x1fffff80
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -