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

📄 stm32f10x_nvic.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                          ENDP


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

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


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

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

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

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

                  NVIC_SetSystemHandlerPendingBit PROC
;;;597      /* Get the System Handler pending bit position */
;;;598      tmp = SystemHandler & (u32)0x1F;
000000  4904              LDR      r1,|L26.20|
000002  f000f000          AND      r0,r0,#0x1f
;;;599      /* Set the corresponding System Handler pending bit */
;;;600      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]
;;;601    }
000010  4770              BX       lr
;;;602    
                          ENDP

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

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

                  NVIC_ClearSystemHandlerPendingBit PROC
;;;621      /* Get the System Handler pending bit position */
;;;622      tmp = SystemHandler & (u32)0x1F;
000000  4b04              LDR      r3,|L27.20|
000002  f000f000          AND      r0,r0,#0x1f
;;;623      /* Clear the corresponding System Handler pending bit */
;;;624      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]
;;;625    }
000012  4770              BX       lr
;;;626    
                          ENDP

                  |L27.20|
000014  e000ed04          DCD      0xe000ed04

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

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

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

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

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


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

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

⌨️ 快捷键说明

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