⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_nvic.txt

📁 STM32 demo板的例程
💻 TXT
📖 第 1 页 / 共 2 页
字号:
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 + -