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

📄 stm32f10x_nvic.txt

📁 基于cortex arm stm32f103RB的智能卡(SmartCard)程序。编译通过
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                          AREA ||i.NVIC_SystemHandlerPriorityConfig||, CODE, READONLY, ALIGN=1

                  NVIC_SystemHandlerPriorityConfig PROC
;;;510                                          u8 SystemHandlerSubPriority)
;;;511    {
000000  b570              PUSH     {r4-r6,lr}
;;;512      u32 tmp1 = 0x00, tmp2 = 0xFF, handlermask = 0x00;
;;;513      u32 tmppriority = 0x00;
;;;514    
;;;515      /* Check the parameters */
;;;516      assert_param(IS_PRIORITY_SYSTEM_HANDLER(SystemHandler));
;;;517      assert_param(IS_NVIC_PREEMPTION_PRIORITY(SystemHandlerPreemptionPriority));  
;;;518      assert_param(IS_NVIC_SUB_PRIORITY(SystemHandlerSubPriority));
;;;519        
;;;520      tmppriority = (0x700 - (SCB->AIRCR & (u32)0x700))>> 0x08;
000002  f04ff04f          MOV      r6,#0xe000e000
000006  f8d6f8d6          LDR      r3,[r6,#0xd0c]
00000a  24ff              MOVS     r4,#0xff
00000c  f403f403          AND      r3,r3,#0x700
000010  f5c3f5c3          RSB      r3,r3,#0x700
000014  0a1b              LSRS     r3,r3,#8
;;;521      tmp1 = (0x4 - tmppriority);
;;;522      tmp2 = tmp2 >> tmppriority;
000016  40dc              LSRS     r4,r4,r3
000018  f1c3f1c3          RSB      r5,r3,#4
;;;523        
;;;524      tmppriority = (u32)SystemHandlerPreemptionPriority << tmp1;
00001c  40a9              LSLS     r1,r1,r5
;;;525      tmppriority |=  SystemHandlerSubPriority & tmp2;
00001e  4022              ANDS     r2,r2,r4
000020  430a              ORRS     r2,r2,r1
;;;526    
;;;527      tmppriority = tmppriority << 0x04;
000022  0111              LSLS     r1,r2,#4
;;;528      tmp1 = SystemHandler & (u32)0xC0;
000024  f000f000          AND      r2,r0,#0xc0
;;;529      tmp1 = tmp1 >> 0x06; 
000028  0992              LSRS     r2,r2,#6
;;;530      tmp2 = (SystemHandler >> 0x08) & (u32)0x03;
00002a  f3c0f3c0          UBFX     r0,r0,#8,#2
;;;531      tmppriority = tmppriority << (tmp2 * 0x08);
00002e  00c0              LSLS     r0,r0,#3
000030  4081              LSLS     r1,r1,r0
;;;532      handlermask = (u32)0xFF << (tmp2 * 0x08);
000032  23ff              MOVS     r3,#0xff
000034  4083              LSLS     r3,r3,r0
;;;533      
;;;534      SCB->SHPR[tmp1] &= ~handlermask;
000036  eb06eb06          ADD      r0,r6,r2,LSL #2
00003a  f600f600          ADD      r0,r0,#0xd18
00003e  6802              LDR      r2,[r0,#0]
000040  439a              BICS     r2,r2,r3
000042  6002              STR      r2,[r0,#0]
;;;535      SCB->SHPR[tmp1] |= tmppriority;
000044  6802              LDR      r2,[r0,#0]
000046  430a              ORRS     r2,r2,r1
000048  6002              STR      r2,[r0,#0]
;;;536    }
00004a  bd70              POP      {r4-r6,pc}
                          ENDP


                          AREA ||i.NVIC_GetSystemHandlerPendingBitStatus||, CODE, READONLY, ALIGN=2

                  NVIC_GetSystemHandlerPendingBitStatus PROC
;;;551    ITStatus NVIC_GetSystemHandlerPendingBitStatus(u32 SystemHandler)
;;;552    {
000000  4601              MOV      r1,r0
;;;553      ITStatus bitstatus  = RESET;
;;;554      u32 tmp = 0x00, tmppos = 0x00;
;;;555    
;;;556      /* Check the parameters */
;;;557      assert_param(IS_GET_PENDING_SYSTEM_HANDLER(SystemHandler));
;;;558      
;;;559      tmppos = (SystemHandler >> 0x0A);
;;;560      tmppos &= (u32)0x0F;
000002  f3c1f3c1          UBFX     r2,r1,#10,#4
000006  2000              MOVS     r0,#0
;;;561    
;;;562      tmppos = (u32)0x01 << tmppos;
000008  2101              MOVS     r1,#1
00000a  4091              LSLS     r1,r1,r2
00000c  4a03              LDR      r2,|L25.28|
;;;563    
;;;564      tmp = SCB->SHCSR & tmppos;
00000e  6812              LDR      r2,[r2,#0]
000010  400a              ANDS     r2,r2,r1
;;;565    
;;;566      if (tmp == tmppos)
000012  428a              CMP      r2,r1
000014  d100              BNE      |L25.24|
;;;567      {
;;;568        bitstatus = SET;
000016  2001              MOVS     r0,#1
                  |L25.24|
;;;569      }
;;;570      else
;;;571      {
;;;572        bitstatus = RESET;
;;;573      }
;;;574      return bitstatus;
;;;575    }
000018  4770              BX       lr
                          ENDP

00001a  0000              DCW      0x0000
                  |L25.28|
00001c  e000ed24          DCD      0xe000ed24

                          AREA ||i.NVIC_SetSystemHandlerPendingBit||, CODE, READONLY, ALIGN=2

                  NVIC_SetSystemHandlerPendingBit PROC
;;;596      /* Get the System Handler pending bit position */
;;;597      tmp = SystemHandler & (u32)0x1F;
000000  4904              LDR      r1,|L26.20|
000002  f000f000          AND      r0,r0,#0x1f
;;;598      /* Set the corresponding System Handler pending bit */
;;;599      SCB->ICSR |= ((u32)0x01 << tmp);
000006  680b              LDR      r3,[r1,#0]
000008  2201              MOVS     r2,#1
00000a  4082              LSLS     r2,r2,r0
00000c  4313              ORRS     r3,r3,r2
00000e  600b              STR      r3,[r1,#0]
;;;600    }
000010  4770              BX       lr
                          ENDP

000012  0000              DCW      0x0000
                  |L26.20|
000014  e000ed04          DCD      0xe000ed04

                          AREA ||i.NVIC_ClearSystemHandlerPendingBit||, CODE, READONLY, ALIGN=2

                  NVIC_ClearSystemHandlerPendingBit PROC
;;;620      /* Get the System Handler pending bit position */
;;;621      tmp = SystemHandler & (u32)0x1F;
000000  4b04              LDR      r3,|L27.20|
000002  f000f000          AND      r0,r0,#0x1f
;;;622      /* Clear the corresponding System Handler pending bit */
;;;623      SCB->ICSR |= ((u32)0x01 << (tmp - 0x01));
000006  6819              LDR      r1,[r3,#0]
000008  1e40              SUBS     r0,r0,#1
00000a  2201              MOVS     r2,#1
00000c  4082              LSLS     r2,r2,r0
00000e  4311              ORRS     r1,r1,r2
000010  6019              STR      r1,[r3,#0]
;;;624    }
000012  4770              BX       lr
                          ENDP

                  |L27.20|
000014  e000ed04          DCD      0xe000ed04

                          AREA ||i.NVIC_GetSystemHandlerActiveBitStatus||, CODE, READONLY, ALIGN=2

                  NVIC_GetSystemHandlerActiveBitStatus PROC
;;;643    ITStatus NVIC_GetSystemHandlerActiveBitStatus(u32 SystemHandler)
;;;644    {
000000  4601              MOV      r1,r0
;;;645      ITStatus bitstatus  = RESET;
;;;646    
;;;647      u32 tmp = 0x00, tmppos = 0x00;
;;;648    
;;;649      /* Check the parameters */
;;;650      assert_param(IS_GET_ACTIVE_SYSTEM_HANDLER(SystemHandler));
;;;651      
;;;652      tmppos = (SystemHandler >> 0x0E) & (u32)0x0F;
000002  f3c1f3c1          UBFX     r2,r1,#14,#4
000006  2000              MOVS     r0,#0
;;;653    
;;;654      tmppos = (u32)0x01 << tmppos;
000008  2101              MOVS     r1,#1
00000a  4091              LSLS     r1,r1,r2
00000c  4a03              LDR      r2,|L28.28|
;;;655    
;;;656      tmp = SCB->SHCSR & tmppos;
00000e  6812              LDR      r2,[r2,#0]
000010  400a              ANDS     r2,r2,r1
;;;657    
;;;658      if (tmp == tmppos)
000012  428a              CMP      r2,r1
000014  d100              BNE      |L28.24|
;;;659      {
;;;660        bitstatus = SET;
000016  2001              MOVS     r0,#1
                  |L28.24|
;;;661      }
;;;662      else
;;;663      {
;;;664        bitstatus = RESET;
;;;665      }
;;;666      return bitstatus;
;;;667    }
000018  4770              BX       lr
                          ENDP

00001a  0000              DCW      0x0000
                  |L28.28|
00001c  e000ed24          DCD      0xe000ed24

                          AREA ||i.NVIC_GetFaultHandlerSources||, CODE, READONLY, ALIGN=1

                  NVIC_GetFaultHandlerSources PROC
;;;690      
;;;691      tmpreg = (SystemHandler >> 0x12) & (u32)0x03;
000000  f3c0f3c0          UBFX     r1,r0,#18,#2
;;;692      tmppos = (SystemHandler >> 0x14) & (u32)0x03;
000004  f3c0f3c0          UBFX     r0,r0,#20,#2
000008  f04ff04f          MOV      r2,#0xe000e000
;;;693    
;;;694      if (tmpreg == 0x00)
00000c  b911              CBNZ     r1,|L29.20|
;;;695      {
;;;696        faultsources = SCB->HFSR;
00000e  f8d2f8d2          LDR      r0,[r2,#0xd2c]
;;;697      }
;;;698      else if (tmpreg == 0x01)
;;;699      {
;;;700        faultsources = SCB->CFSR >> (tmppos * 0x08);
;;;701        if (tmppos != 0x02)
;;;702        {
;;;703          faultsources &= (u32)0x0F;
;;;704        }
;;;705        else
;;;706        {
;;;707          faultsources &= (u32)0xFF;
;;;708        }
;;;709      }
;;;710      else
;;;711      {
;;;712        faultsources = SCB->DFSR;
;;;713      }
;;;714      return faultsources;
;;;715    }
000012  4770              BX       lr
                  |L29.20|
000014  2901              CMP      r1,#1
000016  d10a              BNE      |L29.46|
000018  f8d2f8d2          LDR      r1,[r2,#0xd28]
00001c  00c2              LSLS     r2,r0,#3
00001e  40d1              LSRS     r1,r1,r2
000020  2802              CMP      r0,#2
000022  d002              BEQ      |L29.42|
000024  f001f001          AND      r0,r1,#0xf
000028  4770              BX       lr
                  |L29.42|
00002a  b2c8              UXTB     r0,r1
00002c  4770              BX       lr
                  |L29.46|
00002e  f8d2f8d2          LDR      r0,[r2,#0xd30]
000032  4770              BX       lr
                          ENDP


                          AREA ||i.NVIC_GetFaultAddress||, CODE, READONLY, ALIGN=1

                  NVIC_GetFaultAddress PROC
;;;736      
;;;737      tmp = (SystemHandler >> 0x16) & (u32)0x01;
000000  f3c0f3c0          UBFX     r0,r0,#22,#1
000004  f04ff04f          MOV      r1,#0xe000e000
;;;738    
;;;739      if (tmp == 0x00)
000008  b910              CBNZ     r0,|L30.16|
;;;740      {
;;;741        faultaddress = SCB->MMFAR;
00000a  f8d1f8d1          LDR      r0,[r1,#0xd34]
;;;742      }
;;;743      else
;;;744      {
;;;745        faultaddress = SCB->BFAR;
;;;746      }
;;;747      return faultaddress;
;;;748    }
00000e  4770              BX       lr
                  |L30.16|
000010  f8d1f8d1          LDR      r0,[r1,#0xd38]
000014  4770              BX       lr
                          ENDP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -