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

📄 stm32f10x_flash.txt

📁 ucos2.86版本结合STM板极支持包
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\stm32f10x_flash.o --depend=.\rvmdk\stm32f10x_flash.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\CPU\ST\STM32\src\stm32f10x_flash.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  FLASH_SetLatency PROC
;;;93       /* Sets the Latency value */
;;;94       FLASH->ACR &= ACR_LATENCY_Mask;
000000  49fc              LDR      r1,|L1.1012|
000002  680a              LDR      r2,[r1,#0]
000004  f002f002          AND      r2,r2,#0x38
000008  600a              STR      r2,[r1,#0]
;;;95       FLASH->ACR |= FLASH_Latency;
00000a  680a              LDR      r2,[r1,#0]
00000c  4310              ORRS     r0,r0,r2
00000e  6008              STR      r0,[r1,#0]
;;;96     }
000010  4770              BX       lr
;;;97     
                          ENDP

                  FLASH_HalfCycleAccessCmd PROC
;;;113      /* Enable or disable the Half cycle access */
;;;114      FLASH->ACR &= ACR_HLFCYA_Mask;
000012  49f8              LDR      r1,|L1.1012|
000014  680a              LDR      r2,[r1,#0]
000016  f022f022          BIC      r2,r2,#8
00001a  600a              STR      r2,[r1,#0]
;;;115      FLASH->ACR |= FLASH_HalfCycleAccess;
00001c  680a              LDR      r2,[r1,#0]
00001e  4310              ORRS     r0,r0,r2
000020  6008              STR      r0,[r1,#0]
;;;116    }
000022  4770              BX       lr
;;;117    
                          ENDP

                  FLASH_PrefetchBufferCmd PROC
;;;133      /* Enable or disable the Prefetch Buffer */
;;;134      FLASH->ACR &= ACR_PRFTBE_Mask;
000024  49f3              LDR      r1,|L1.1012|
000026  680a              LDR      r2,[r1,#0]
000028  f022f022          BIC      r2,r2,#0x10
00002c  600a              STR      r2,[r1,#0]
;;;135      FLASH->ACR |= FLASH_PrefetchBuffer;
00002e  680a              LDR      r2,[r1,#0]
000030  4310              ORRS     r0,r0,r2
000032  6008              STR      r0,[r1,#0]
;;;136    }
000034  4770              BX       lr
;;;137    
                          ENDP

                  FLASH_Unlock PROC
;;;148      /* Authorize the FPEC Access */
;;;149      FLASH->KEYR = FLASH_KEY1;
000036  48ef              LDR      r0,|L1.1012|
000038  49ef              LDR      r1,|L1.1016|
00003a  6041              STR      r1,[r0,#4]
;;;150      FLASH->KEYR = FLASH_KEY2;
00003c  49ef              LDR      r1,|L1.1020|
00003e  6041              STR      r1,[r0,#4]
;;;151    }
000040  4770              BX       lr
;;;152    
                          ENDP

                  FLASH_Lock PROC
;;;162      /* Set the Lock Bit to lock the FPEC and the FCR */
;;;163      FLASH->CR |= CR_LOCK_Set;
000042  48ec              LDR      r0,|L1.1012|
000044  6901              LDR      r1,[r0,#0x10]
000046  f041f041          ORR      r1,r1,#0x80
00004a  6101              STR      r1,[r0,#0x10]
;;;164    }
00004c  4770              BX       lr
;;;165    
                          ENDP

                  FLASH_GetStatus PROC
;;;827    {
;;;828      FLASH_Status flashstatus = FLASH_COMPLETE;
00004e  2004              MOVS     r0,#4
;;;829      
;;;830      if((FLASH->SR & FLASH_FLAG_BSY) == FLASH_FLAG_BSY) 
000050  49e8              LDR      r1,|L1.1012|
000052  68ca              LDR      r2,[r1,#0xc]
000054  f012f012          TST      r2,#1
000058  d001              BEQ      |L1.94|
;;;831      {
;;;832        flashstatus = FLASH_BUSY;
00005a  2001              MOVS     r0,#1
;;;833      }
;;;834      else 
;;;835      {  
;;;836        if(FLASH->SR & FLASH_FLAG_PGERR)
;;;837        { 
;;;838          flashstatus = FLASH_ERROR_PG;
;;;839        }
;;;840        else 
;;;841        {
;;;842          if(FLASH->SR & FLASH_FLAG_WRPRTERR)
;;;843          {
;;;844            flashstatus = FLASH_ERROR_WRP;
;;;845          }
;;;846          else
;;;847          {
;;;848            flashstatus = FLASH_COMPLETE;
;;;849          }
;;;850        }
;;;851      }
;;;852      /* Return the Flash Status */
;;;853      return flashstatus;
;;;854    }
00005c  4770              BX       lr
                  |L1.94|
00005e  68ca              LDR      r2,[r1,#0xc]
000060  f012f012          TST      r2,#4
000064  d001              BEQ      |L1.106|
000066  2002              MOVS     r0,#2
                  |L1.104|
000068  4770              BX       lr
                  |L1.106|
00006a  68c9              LDR      r1,[r1,#0xc]
00006c  f011f011          TST      r1,#0x10
000070  d0fa              BEQ      |L1.104|
000072  2003              MOVS     r0,#3
000074  4770              BX       lr
;;;855    
                          ENDP

                  delay PROC
;;;899    
;;;900      for(i = 0xFF; i != 0; i--)
000076  20ff              MOVS     r0,#0xff
                  |L1.120|
000078  1e40              SUBS     r0,r0,#1
00007a  2800              CMP      r0,#0
00007c  d1fc              BNE      |L1.120|
;;;901      {
;;;902      }
;;;903    }
00007e  4770              BX       lr
;;;904    #endif
                          ENDP

                  FLASH_WaitForLastOperation PROC
;;;865    FLASH_Status FLASH_WaitForLastOperation(u32 Timeout)
;;;866    { 
000080  b500              PUSH     {lr}
000082  4603              MOV      r3,r0
;;;867      FLASH_Status status = FLASH_COMPLETE;
;;;868       
;;;869      /* Check for the Flash Status */
;;;870      status = FLASH_GetStatus();
000084  f7fff7ff          BL       FLASH_GetStatus
;;;871    
;;;872      /* Wait for a Flash operation to complete or a TIMEOUT to occur */
;;;873      while((status == FLASH_BUSY) && (Timeout != 0x00))
000088  e004              B        |L1.148|
                  |L1.138|
;;;874      {
;;;875        delay();
00008a  f7fff7ff          BL       delay
;;;876        status = FLASH_GetStatus();
00008e  f7fff7ff          BL       FLASH_GetStatus
;;;877        Timeout--;
000092  1e5b              SUBS     r3,r3,#1
                  |L1.148|
000094  2801              CMP      r0,#1
000096  d101              BNE      |L1.156|
000098  2b00              CMP      r3,#0
00009a  d1f6              BNE      |L1.138|
                  |L1.156|
;;;878      }
;;;879    
;;;880      if(Timeout == 0x00 )
00009c  2b00              CMP      r3,#0
00009e  d100              BNE      |L1.162|
;;;881      {
;;;882        status = FLASH_TIMEOUT;
0000a0  2005              MOVS     r0,#5
                  |L1.162|
;;;883      }
;;;884    
;;;885      /* Return the operation status */
;;;886      return status;
;;;887    }
0000a2  bd00              POP      {pc}
;;;888    
                          ENDP

                  FLASH_ErasePage PROC
;;;175    FLASH_Status FLASH_ErasePage(u32 Page_Address)
;;;176    {
0000a4  b530              PUSH     {r4,r5,lr}
0000a6  4605              MOV      r5,r0
;;;177      FLASH_Status status = FLASH_COMPLETE;
;;;178    
;;;179      /* Check the parameters */
;;;180      assert(IS_FLASH_ADDRESS(Page_Address));
;;;181    
;;;182      /* Wait for last operation to be completed */
;;;183      status = FLASH_WaitForLastOperation(EraseTimeout);
0000a8  f640f640          MOV      r0,#0xfff
0000ac  f7fff7ff          BL       FLASH_WaitForLastOperation
;;;184      
;;;185      if(status == FLASH_COMPLETE)
0000b0  2804              CMP      r0,#4
0000b2  d114              BNE      |L1.222|
;;;186      { 
;;;187        /* if the previous operation is completed, proceed to erase the page */
;;;188        FLASH->CR|= CR_PER_Set;
0000b4  4ccf              LDR      r4,|L1.1012|
0000b6  6920              LDR      r0,[r4,#0x10]
0000b8  f040f040          ORR      r0,r0,#2
0000bc  6120              STR      r0,[r4,#0x10]
;;;189        FLASH->AR = Page_Address; 
0000be  6165              STR      r5,[r4,#0x14]
;;;190        FLASH->CR|= CR_STRT_Set;
0000c0  6920              LDR      r0,[r4,#0x10]
0000c2  f040f040          ORR      r0,r0,#0x40
0000c6  6120              STR      r0,[r4,#0x10]
;;;191        
;;;192        /* Wait for last operation to be completed */
;;;193        status = FLASH_WaitForLastOperation(EraseTimeout);
0000c8  f640f640          MOV      r0,#0xfff
0000cc  f7fff7ff          BL       FLASH_WaitForLastOperation
;;;194    
;;;195        if(status != FLASH_BUSY)
0000d0  2801              CMP      r0,#1
0000d2  d004              BEQ      |L1.222|
;;;196        {
;;;197          /* if the erase operation is completed, disable the PER Bit */
;;;198          FLASH->CR &= CR_PER_Reset;
0000d4  6921              LDR      r1,[r4,#0x10]
0000d6  f641f641          MOV      r2,#0x1ffd
0000da  4011              ANDS     r1,r1,r2
0000dc  6121              STR      r1,[r4,#0x10]
                  |L1.222|
;;;199        }
;;;200      }
;;;201      /* Return the Erase Status */
;;;202      return status;
;;;203    }
0000de  bd30              POP      {r4,r5,pc}
;;;204    
                          ENDP

                  FLASH_EraseAllPages PROC
;;;214    FLASH_Status FLASH_EraseAllPages(void)
;;;215    {
0000e0  b510              PUSH     {r4,lr}
;;;216      FLASH_Status status = FLASH_COMPLETE;
;;;217    
;;;218      /* Wait for last operation to be completed */
;;;219      status = FLASH_WaitForLastOperation(EraseTimeout);
0000e2  f640f640          MOV      r0,#0xfff
0000e6  f7fff7ff          BL       FLASH_WaitForLastOperation
;;;220      
;;;221      if(status == FLASH_COMPLETE)
0000ea  2804              CMP      r0,#4
0000ec  d113              BNE      |L1.278|
;;;222      {
;;;223        /* if the previous operation is completed, proceed to erase all pages */
;;;224         FLASH->CR |= CR_MER_Set;
0000ee  4cc1              LDR      r4,|L1.1012|
0000f0  6920              LDR      r0,[r4,#0x10]
0000f2  f040f040          ORR      r0,r0,#4
0000f6  6120              STR      r0,[r4,#0x10]
;;;225         FLASH->CR |= CR_STRT_Set;
0000f8  6920              LDR      r0,[r4,#0x10]
0000fa  f040f040          ORR      r0,r0,#0x40
0000fe  6120              STR      r0,[r4,#0x10]
;;;226        
;;;227        /* Wait for last operation to be completed */
;;;228        status = FLASH_WaitForLastOperation(EraseTimeout);
000100  f640f640          MOV      r0,#0xfff
000104  f7fff7ff          BL       FLASH_WaitForLastOperation
;;;229    
;;;230        if(status != FLASH_BUSY)
000108  2801              CMP      r0,#1
00010a  d004              BEQ      |L1.278|
;;;231        {
;;;232          /* if the erase operation is completed, disable the MER Bit */
;;;233          FLASH->CR &= CR_MER_Reset;
00010c  6921              LDR      r1,[r4,#0x10]
00010e  f641f641          MOV      r2,#0x1ffb
000112  4011              ANDS     r1,r1,r2
000114  6121              STR      r1,[r4,#0x10]
                  |L1.278|
;;;234        }
;;;235      }	   
;;;236      /* Return the Erase Status */
;;;237      return status;
;;;238    }
000116  bd10              POP      {r4,pc}
;;;239    
                          ENDP

                  FLASH_EraseOptionBytes PROC
;;;249    FLASH_Status FLASH_EraseOptionBytes(void)
;;;250    {
000118  b530              PUSH     {r4,r5,lr}
;;;251      FLASH_Status status = FLASH_COMPLETE;
;;;252      
;;;253      /* Wait for last operation to be completed */
;;;254      status = FLASH_WaitForLastOperation(EraseTimeout);
00011a  f640f640          MOV      r0,#0xfff
00011e  f7fff7ff          BL       FLASH_WaitForLastOperation
;;;255    
;;;256      if(status == FLASH_COMPLETE)
000122  2804              CMP      r0,#4
000124  d128              BNE      |L1.376|
;;;257      {
;;;258        /* Authorize the small information block programming */
;;;259        FLASH->OPTKEYR = FLASH_KEY1;
000126  4cb3              LDR      r4,|L1.1012|
000128  48b3              LDR      r0,|L1.1016|
00012a  60a0              STR      r0,[r4,#8]
;;;260        FLASH->OPTKEYR = FLASH_KEY2;
00012c  48b3              LDR      r0,|L1.1020|
00012e  60a0              STR      r0,[r4,#8]
;;;261        
;;;262        /* if the previous operation is completed, proceed to erase the option bytes */
;;;263        FLASH->CR |= CR_OPTER_Set;
000130  6920              LDR      r0,[r4,#0x10]
000132  f040f040          ORR      r0,r0,#0x20
000136  6120              STR      r0,[r4,#0x10]
;;;264        FLASH->CR |= CR_STRT_Set;
000138  6920              LDR      r0,[r4,#0x10]
00013a  f040f040          ORR      r0,r0,#0x40
00013e  6120              STR      r0,[r4,#0x10]
;;;265    
;;;266        /* Wait for last operation to be completed */
;;;267        status = FLASH_WaitForLastOperation(EraseTimeout);
000140  f640f640          MOV      r0,#0xfff
000144  f7fff7ff          BL       FLASH_WaitForLastOperation
;;;268        
;;;269        if(status == FLASH_COMPLETE)
000148  f641f641          MOV      r5,#0x1fef
00014c  2804              CMP      r0,#4
00014e  d114              BNE      |L1.378|
;;;270        {
;;;271          /* if the erase operation is completed, disable the OPTER Bit */
;;;272          FLASH->CR &= CR_OPTER_Reset;
000150  6920              LDR      r0,[r4,#0x10]
000152  f641f641          MOV      r1,#0x1fdf
000156  4008              ANDS     r0,r0,r1
000158  6120              STR      r0,[r4,#0x10]
;;;273           
;;;274          /* Enable the Option Bytes Programming operation */
;;;275          FLASH->CR |= CR_OPTPG_Set;
00015a  6920              LDR      r0,[r4,#0x10]
00015c  f040f040          ORR      r0,r0,#0x10
000160  6120              STR      r0,[r4,#0x10]
;;;276    
;;;277          /* Enable the readout access */
;;;278          OB->RDP= RDP_Key; 
000162  49a7              LDR      r1,|L1.1024|
000164  20a5              MOVS     r0,#0xa5
000166  8008              STRH     r0,[r1,#0]
;;;279    
;;;280          /* Wait for last operation to be completed */
;;;281          status = FLASH_WaitForLastOperation(ProgramTimeout);

⌨️ 快捷键说明

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