📄 stm32f10x_nvic.txt
字号:
NVIC_GetBASEPRI PROC
;;;253 u32 NVIC_GetBASEPRI(void)
;;;254 {
000170 b510 PUSH {r4,lr}
;;;255 return (__GetBASEPRI());
000172 f7fff7ff BL __GetBASEPRI
;;;256 }
000176 bd10 POP {r4,pc}
ENDP
NVIC_GetCurrentPendingIRQChannel PROC
;;;266 {
;;;267 return ((u16)((SCB->IRQControlState & (u32)0x003FF000) >> 0x0C));
000178 4898 LDR r0,|L1.988|
00017a 6800 LDR r0,[r0,#0]
00017c f3c0f3c0 UBFX r0,r0,#12,#10
;;;268 }
000180 4770 BX lr
ENDP
NVIC_GetIRQChannelPendingBitStatus PROC
;;;278 ITStatus NVIC_GetIRQChannelPendingBitStatus(u8 NVIC_IRQChannel)
;;;279 {
000182 b510 PUSH {r4,lr}
000184 4601 MOV r1,r0
;;;280 ITStatus pendingirqstatus = RESET;
000186 2000 MOVS r0,#0
;;;281 u32 tmp = 0x00;
000188 2200 MOVS r2,#0
;;;282
;;;283 /* Check the parameters */
;;;284 assert(IS_NVIC_IRQ_CHANNEL(NVIC_IRQChannel));
;;;285
;;;286 tmp = ((u32)0x01 << (NVIC_IRQChannel & (u32)0x1F));
00018a f001f001 AND r4,r1,#0x1f
00018e 2301 MOVS r3,#1
000190 fa03fa03 LSL r2,r3,r4
;;;287
;;;288 if (((NVIC->Set[(NVIC_IRQChannel >> 0x05)]) & tmp) == tmp)
000194 4b8e LDR r3,|L1.976|
000196 3380 ADDS r3,r3,#0x80
000198 114c ASRS r4,r1,#5
00019a f853f853 LDR r3,[r3,r4,LSL #2]
00019e 4013 ANDS r3,r3,r2
0001a0 4293 CMP r3,r2
0001a2 d101 BNE |L1.424|
;;;289 {
;;;290 pendingirqstatus = SET;
0001a4 2001 MOVS r0,#1
0001a6 e000 B |L1.426|
|L1.424|
;;;291 }
;;;292 else
;;;293 {
;;;294 pendingirqstatus = RESET;
0001a8 2000 MOVS r0,#0
|L1.426|
;;;295 }
;;;296 return pendingirqstatus;
;;;297 }
0001aa bd10 POP {r4,pc}
ENDP
NVIC_SetIRQChannelPendingBit PROC
;;;310
;;;311 *(u32*)0xE000EF00 = (u32)NVIC_IRQChannel;
0001ac 498d LDR r1,|L1.996|
0001ae 6008 STR r0,[r1,#0]
;;;312 }
0001b0 4770 BX lr
ENDP
NVIC_ClearIRQChannelPendingBit PROC
;;;325
;;;326 NVIC->Clear[(NVIC_IRQChannel >> 0x05)] = (u32)0x01 << (NVIC_IRQChannel & (u32)0x1F);
0001b2 f000f000 AND r1,r0,#0x1f
0001b6 2201 MOVS r2,#1
0001b8 408a LSLS r2,r2,r1
0001ba 4986 LDR r1,|L1.980|
0001bc 1f09 SUBS r1,r1,#4
0001be 1143 ASRS r3,r0,#5
0001c0 f841f841 STR r2,[r1,r3,LSL #2]
;;;327 }
0001c4 4770 BX lr
ENDP
NVIC_GetCurrentActiveHandler PROC
;;;338 {
;;;339 return ((u16)(SCB->IRQControlState & (u32)0x3FF));
0001c6 4885 LDR r0,|L1.988|
0001c8 6800 LDR r0,[r0,#0]
0001ca f3c0f3c0 UBFX r0,r0,#0,#10
;;;340 }
0001ce 4770 BX lr
ENDP
NVIC_GetIRQChannelActiveBitStatus PROC
;;;350 ITStatus NVIC_GetIRQChannelActiveBitStatus(u8 NVIC_IRQChannel)
;;;351 {
0001d0 b510 PUSH {r4,lr}
0001d2 4601 MOV r1,r0
;;;352 ITStatus activeirqstatus = RESET;
0001d4 2000 MOVS r0,#0
;;;353 u32 tmp = 0x00;
0001d6 2200 MOVS r2,#0
;;;354
;;;355 /* Check the parameters */
;;;356 assert(IS_NVIC_IRQ_CHANNEL(NVIC_IRQChannel));
;;;357
;;;358 tmp = ((u32)0x01 << (NVIC_IRQChannel & (u32)0x1F));
0001d8 f001f001 AND r4,r1,#0x1f
0001dc 2301 MOVS r3,#1
0001de fa03fa03 LSL r2,r3,r4
;;;359
;;;360 if (((NVIC->Active[(NVIC_IRQChannel >> 0x05)]) & tmp) == tmp )
0001e2 4b7c LDR r3,|L1.980|
0001e4 337c ADDS r3,r3,#0x7c
0001e6 114c ASRS r4,r1,#5
0001e8 f853f853 LDR r3,[r3,r4,LSL #2]
0001ec 4013 ANDS r3,r3,r2
0001ee 4293 CMP r3,r2
0001f0 d101 BNE |L1.502|
;;;361 {
;;;362 activeirqstatus = SET;
0001f2 2001 MOVS r0,#1
0001f4 e000 B |L1.504|
|L1.502|
;;;363 }
;;;364 else
;;;365 {
;;;366 activeirqstatus = RESET;
0001f6 2000 MOVS r0,#0
|L1.504|
;;;367 }
;;;368 return activeirqstatus;
;;;369 }
0001f8 bd10 POP {r4,pc}
ENDP
NVIC_GetCPUID PROC
;;;380 {
;;;381 return (SCB->CPUID);
0001fa 4878 LDR r0,|L1.988|
0001fc 1f00 SUBS r0,r0,#4
0001fe 6800 LDR r0,[r0,#0]
;;;382 }
000200 4770 BX lr
ENDP
NVIC_SetVectorTable PROC
;;;402
;;;403 SCB->ExceptionTableOffset = NVIC_VectTab | (Offset & (u32)0x1FFFFF80);
000202 4a79 LDR r2,|L1.1000|
000204 400a ANDS r2,r2,r1
000206 4302 ORRS r2,r2,r0
000208 4b74 LDR r3,|L1.988|
00020a 1d1b ADDS r3,r3,#4
00020c 601a STR r2,[r3,#0]
;;;404 }
00020e 4770 BX lr
ENDP
NVIC_GenerateSystemReset PROC
;;;414 {
;;;415 SCB->AIRC = AIRC_VECTKEY_MASK | (u32)0x04;
000210 4873 LDR r0,|L1.992|
000212 1d00 ADDS r0,r0,#4
000214 4971 LDR r1,|L1.988|
000216 3108 ADDS r1,r1,#8
000218 6008 STR r0,[r1,#0]
;;;416 }
00021a 4770 BX lr
ENDP
NVIC_GenerateCoreReset PROC
;;;426 {
;;;427 SCB->AIRC = AIRC_VECTKEY_MASK | (u32)0x01;
00021c 4870 LDR r0,|L1.992|
00021e 1c40 ADDS r0,r0,#1
000220 496e LDR r1,|L1.988|
000222 3108 ADDS r1,r1,#8
000224 6008 STR r0,[r1,#0]
;;;428 }
000226 4770 BX lr
ENDP
NVIC_SystemLPConfig PROC
;;;449
;;;450 if (NewState != DISABLE)
000228 b141 CBZ r1,|L1.572|
;;;451 {
;;;452 SCB->SysCtrl |= LowPowerMode;
00022a 4a6c LDR r2,|L1.988|
00022c 320c ADDS r2,r2,#0xc
00022e 6812 LDR r2,[r2,#0]
000230 4302 ORRS r2,r2,r0
000232 f04ff04f MOV r3,#0xe000e000
000236 f8c3f8c3 STR r2,[r3,#0xd10]
00023a e007 B |L1.588|
|L1.572|
;;;453 }
;;;454 else
;;;455 {
;;;456 SCB->SysCtrl &= (u32)(~(u32)LowPowerMode);
00023c 4a67 LDR r2,|L1.988|
00023e 320c ADDS r2,r2,#0xc
000240 6812 LDR r2,[r2,#0]
000242 4382 BICS r2,r2,r0
000244 f04ff04f MOV r3,#0xe000e000
000248 f8c3f8c3 STR r2,[r3,#0xd10]
|L1.588|
;;;457 }
;;;458 }
00024c 4770 BX lr
ENDP
NVIC_SystemHandlerConfig PROC
;;;474 void NVIC_SystemHandlerConfig(u32 SystemHandler, FunctionalState NewState)
;;;475 {
00024e b510 PUSH {r4,lr}
;;;476 u32 tmpreg = 0x00;
000250 2200 MOVS r2,#0
;;;477
;;;478 /* Check the parameters */
;;;479 assert(IS_CONFIG_SYSTEM_HANDLER(SystemHandler));
;;;480 assert(IS_FUNCTIONAL_STATE(NewState));
;;;481
;;;482 tmpreg = (u32)0x01 << (SystemHandler & (u32)0x1F);
000252 f000f000 AND r4,r0,#0x1f
000256 2301 MOVS r3,#1
000258 fa03fa03 LSL r2,r3,r4
;;;483
;;;484 if (NewState != DISABLE)
00025c b141 CBZ r1,|L1.624|
;;;485 {
;;;486 SCB->SysHandlerCtrl |= tmpreg;
00025e 4b5f LDR r3,|L1.988|
000260 3320 ADDS r3,r3,#0x20
000262 681b LDR r3,[r3,#0]
000264 4313 ORRS r3,r3,r2
000266 f04ff04f MOV r4,#0xe000e000
00026a f8c4f8c4 STR r3,[r4,#0xd24]
00026e e007 B |L1.640|
|L1.624|
;;;487 }
;;;488 else
;;;489 {
;;;490 SCB->SysHandlerCtrl &= ~tmpreg;
000270 4b5a LDR r3,|L1.988|
000272 3320 ADDS r3,r3,#0x20
000274 681b LDR r3,[r3,#0]
000276 4393 BICS r3,r3,r2
000278 f04ff04f MOV r4,#0xe000e000
00027c f8c4f8c4 STR r3,[r4,#0xd24]
|L1.640|
;;;491 }
;;;492 }
000280 bd10 POP {r4,pc}
ENDP
NVIC_SystemHandlerPriorityConfig PROC
;;;515 u8 SystemHandlerSubPriority)
;;;516 {
000282 b5f0 PUSH {r4-r7,lr}
;;;517 u32 tmp1 = 0x00, tmp2 = 0xFF, handlermask = 0x00;
000284 2300 MOVS r3,#0
000286 24ff MOVS r4,#0xff
000288 2500 MOVS r5,#0
;;;518 u32 tmppriority = 0x00;
00028a 2600 MOVS r6,#0
;;;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;
00028c 4f53 LDR r7,|L1.988|
00028e 3708 ADDS r7,r7,#8
000290 683f LDR r7,[r7,#0]
000292 f407f407 AND r7,r7,#0x700
000296 f5c7f5c7 RSB r7,r7,#0x700
00029a 0a3e LSRS r6,r7,#8
;;;526 tmp1 = (0x4 - tmppriority);
00029c f1c6f1c6 RSB r3,r6,#4
;;;527 tmp2 = tmp2 >> tmppriority;
0002a0 40f4 LSRS r4,r4,r6
;;;528
;;;529 tmppriority = (u32)SystemHandlerPreemptionPriority << tmp1;
0002a2 fa01fa01 LSL r6,r1,r3
;;;530 tmppriority |= SystemHandlerSubPriority & tmp2;
0002a6 ea02ea02 AND r7,r2,r4
0002aa 433e ORRS r6,r6,r7
;;;531
;;;532 tmppriority = tmppriority << 0x04;
0002ac 0136 LSLS r6,r6,#4
;;;533 tmp1 = SystemHandler & (u32)0xC0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -