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

📄 fsmc_nor.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\fsmc_nor.o --depend=.\Obj\fsmc_nor.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\source\fsmc_nor.c]
                          THUMB

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

                  FSMC_NOR_EraseBlock PROC
;;;150    *******************************************************************************/
;;;151    NOR_Status FSMC_NOR_EraseBlock(u32 BlockAddr)
000000  b430              PUSH     {r4,r5}
;;;152    {
;;;153      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000002  4909              LDR      r1,|L1.40|
000004  24aa              MOVS     r4,#0xaa
000006  800c              STRH     r4,[r1,#0]
;;;154      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000008  4b08              LDR      r3,|L1.44|
00000a  2255              MOVS     r2,#0x55
00000c  801a              STRH     r2,[r3,#0]
;;;155      NOR_WRITE(ADDR_SHIFT(0x5555), 0x0080);
00000e  2580              MOVS     r5,#0x80
000010  800d              STRH     r5,[r1,#0]
;;;156      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000012  800c              STRH     r4,[r1,#0]
;;;157      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000014  801a              STRH     r2,[r3,#0]
;;;158      NOR_WRITE((Bank1_NOR2_ADDR + BlockAddr), 0x30);
000016  2130              MOVS     r1,#0x30
000018  f10040c8          ADD      r0,r0,#0x64000000
00001c  8001              STRH     r1,[r0,#0]
;;;159    
;;;160      return (FSMC_NOR_GetStatus(BlockErase_Timeout));
00001e  bc30              POP      {r4,r5}
000020  f44f0020          MOV      r0,#0xa00000
000024  f7ffbffe          B.W      FSMC_NOR_GetStatus
;;;161    }
;;;162    
                          ENDP

                  |L1.40|
                          DCD      0x6400aaaa
                  |L1.44|
                          DCD      0x64005554

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

                  FSMC_NOR_EraseChip PROC
;;;170    *******************************************************************************/
;;;171    NOR_Status FSMC_NOR_EraseChip(void)
000000  b410              PUSH     {r4}
;;;172    {
;;;173      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000002  4808              LDR      r0,|L2.36|
000004  21aa              MOVS     r1,#0xaa
000006  8001              STRH     r1,[r0,#0]
;;;174      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000008  4b07              LDR      r3,|L2.40|
00000a  2255              MOVS     r2,#0x55
00000c  801a              STRH     r2,[r3,#0]
;;;175      NOR_WRITE(ADDR_SHIFT(0x5555), 0x0080);
00000e  2480              MOVS     r4,#0x80
000010  8004              STRH     r4,[r0,#0]
;;;176      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000012  8001              STRH     r1,[r0,#0]
;;;177      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000014  801a              STRH     r2,[r3,#0]
;;;178      NOR_WRITE(ADDR_SHIFT(0x5555), 0x0010);
000016  2110              MOVS     r1,#0x10
000018  8001              STRH     r1,[r0,#0]
;;;179    
;;;180      return (FSMC_NOR_GetStatus(ChipErase_Timeout));
00001a  bc10              POP      {r4}
00001c  f04f5040          MOV      r0,#0x30000000
000020  f7ffbffe          B.W      FSMC_NOR_GetStatus
;;;181    }
;;;182    
                          ENDP

                  |L2.36|
                          DCD      0x6400aaaa
                  |L2.40|
                          DCD      0x64005554

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

                  FSMC_NOR_GetStatus PROC
;;;355    *******************************************************************************/
;;;356    NOR_Status FSMC_NOR_GetStatus(u32 Timeout)
000000  b510              PUSH     {r4,lr}
;;;357    { 
;;;358      u16 val1 = 0x00, val2 = 0x00;
;;;359      NOR_Status status = NOR_ONGOING; 
000002  2101              MOVS     r1,#1
;;;360     // u32 timeout = 0x00140;
;;;361    
;;;362      /* Poll on NOR memory Ready/Busy signal ------------------------------------*/
;;;363     // while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) != RESET) && (timeout > 0)) 
;;;364      /* while(timeout > 10)	
;;;365      {
;;;366        timeout--;
;;;367      }	 */
;;;368     	/*
;;;369      timeout = Timeout;
;;;370      
;;;371      while((GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_6) == RESET) && (timeout > 0))   
;;;372      {
;;;373        timeout--;
;;;374      }		*/	
;;;375      
;;;376      /* Get the NOR memory operation status -------------------------------------*/
;;;377      while((Timeout != 0x00) && (status != NOR_SUCCESS))
;;;378      {
;;;379        Timeout--;
;;;380    
;;;381    	  /* Read DQ6 and DQ5 */
;;;382        val1 = *(vu16 *)(Bank1_NOR2_ADDR);
000004  f04f44c8          MOV      r4,#0x64000000
;;;383        val2 = *(vu16 *)(Bank1_NOR2_ADDR);
;;;384    //    val3 = *(vu16 *)(Bank1_NOR2_ADDR);
;;;385        /* If DQ6 did not toggle between the two reads then return NOR_Success */
;;;386        if((val1 & 0x0040) == (val2 & 0x0040)) 
;;;387        {
;;;388          return NOR_SUCCESS;
000008  e00a              B        |L3.32|
                  |L3.10|
00000a  8822              LDRH     r2,[r4,#0]            ;382
00000c  1e40              SUBS     r0,r0,#1              ;379
00000e  8823              LDRH     r3,[r4,#0]            ;383
000010  f0020240          AND      r2,r2,#0x40           ;386
000014  f0030340          AND      r3,r3,#0x40           ;386
000018  429a              CMP      r2,r3                 ;386
00001a  d101              BNE      |L3.32|
00001c  2000              MOVS     r0,#0
;;;389        }
;;;390    
;;;391       /* if((val1 & 0x0020) != 0x0020)
;;;392        {
;;;393          status = NOR_ONGOING;
;;;394        }	*/  
;;;395    
;;;396        /*val1 = *(vu16 *)(Bank1_NOR2_ADDR);
;;;397        val2 = *(vu16 *)(Bank1_NOR2_ADDR);
;;;398        
;;;399        if((val1 & 0x0040) == (val2 & 0x0040)) 
;;;400        {
;;;401          return NOR_SUCCESS;
;;;402        }
;;;403        else if((val1 & 0x0020) == 0x0020)
;;;404        {
;;;405          return NOR_ERROR;
;;;406        }		 */
;;;407      }
;;;408    
;;;409      if(Timeout == 0x00)
;;;410      {
;;;411        status = NOR_TIMEOUT;
;;;412      } 
;;;413    
;;;414      /* Return the operation status */
;;;415      return  (status);
;;;416    }
00001e  bd10              POP      {r4,pc}
                  |L3.32|
000020  b110              CBZ      r0,|L3.40|
000022  2900              CMP      r1,#0                 ;377
000024  d1f1              BNE      |L3.10|
000026  e000              B        |L3.42|
                  |L3.40|
000028  2103              MOVS     r1,#3                 ;411
                  |L3.42|
00002a  4608              MOV      r0,r1                 ;415
00002c  bd10              POP      {r4,pc}
;;;417    
                          ENDP


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

                  FSMC_NOR_Init PROC
;;;45     *******************************************************************************/
;;;46     void FSMC_NOR_Init(void)
000000  b570              PUSH     {r4-r6,lr}
;;;47     {
000002  b098              SUB      sp,sp,#0x60
;;;48       FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
;;;49       FSMC_NORSRAMTimingInitTypeDef  p;
;;;50       GPIO_InitTypeDef GPIO_InitStructure;
;;;51     
;;;52       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | 
000004  2101              MOVS     r1,#1
000006  f44f70f0          MOV      r0,#0x1e0
00000a  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;53                              RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
;;;54     
;;;55       /*-- GPIO Configuration ------------------------------------------------------*/
;;;56       /* NOR Data lines configuration */
;;;57       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
00000e  f24c7003          MOV      r0,#0xc703
000012  f8ad0004          STRH     r0,[sp,#4]
;;;58                                     GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
;;;59       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
000016  2018              MOVS     r0,#0x18
000018  f88d0007          STRB     r0,[sp,#7]
;;;60       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00001c  2003              MOVS     r0,#3
;;;61       GPIO_Init(GPIOD, &GPIO_InitStructure);
00001e  4c32              LDR      r4,|L4.232|
000020  f88d0006          STRB     r0,[sp,#6]            ;60
000024  a901              ADD      r1,sp,#4
000026  4620              MOV      r0,r4
000028  f7fffffe          BL       GPIO_Init
;;;62     
;;;63       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
00002c  f64f7080          MOV      r0,#0xff80
;;;64                                     GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 |
;;;65                                     GPIO_Pin_14 | GPIO_Pin_15;
;;;66       GPIO_Init(GPIOE, &GPIO_InitStructure);
000030  4d2e              LDR      r5,|L4.236|
000032  f8ad0004          STRH     r0,[sp,#4]            ;63
000036  a901              ADD      r1,sp,#4
000038  4628              MOV      r0,r5
00003a  f7fffffe          BL       GPIO_Init
;;;67     
;;;68       /* NOR Address lines configuration */
;;;69       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
00003e  f24f003f          MOV      r0,#0xf03f
000042  f8ad0004          STRH     r0,[sp,#4]
;;;70                                     GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 |
;;;71                                     GPIO_Pin_14 | GPIO_Pin_15;
;;;72       GPIO_Init(GPIOF, &GPIO_InitStructure);
000046  a901              ADD      r1,sp,#4
000048  4829              LDR      r0,|L4.240|
00004a  f7fffffe          BL       GPIO_Init
;;;73     
;;;74       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 |
00004e  203f              MOVS     r0,#0x3f
;;;75                                     GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;                            
;;;76       GPIO_Init(GPIOG, &GPIO_InitStructure);
000050  4e28              LDR      r6,|L4.244|
000052  f8ad0004          STRH     r0,[sp,#4]            ;74
000056  a901              ADD      r1,sp,#4
000058  4630              MOV      r0,r6
00005a  f7fffffe          BL       GPIO_Init
;;;77     
;;;78       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
00005e  f44f5060          MOV      r0,#0x3800
000062  f8ad0004          STRH     r0,[sp,#4]
;;;79       GPIO_Init(GPIOD, &GPIO_InitStructure);
000066  a901              ADD      r1,sp,#4
000068  4620              MOV      r0,r4
00006a  f7fffffe          BL       GPIO_Init
;;;80     
;;;81       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
00006e  2078              MOVS     r0,#0x78
000070  f8ad0004          STRH     r0,[sp,#4]
;;;82       GPIO_Init(GPIOE, &GPIO_InitStructure);
000074  a901              ADD      r1,sp,#4
000076  4628              MOV      r0,r5
000078  f7fffffe          BL       GPIO_Init
;;;83     
;;;84       /* NOE and NWE configuration */
;;;85       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
00007c  2030              MOVS     r0,#0x30
00007e  f8ad0004          STRH     r0,[sp,#4]
;;;86       GPIO_Init(GPIOD, &GPIO_InitStructure);
000082  a901              ADD      r1,sp,#4
000084  4620              MOV      r0,r4
000086  f7fffffe          BL       GPIO_Init
;;;87     
;;;88       /* NE2 configuration */
;;;89       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
00008a  1560              ASRS     r0,r4,#21
00008c  f8ad0004          STRH     r0,[sp,#4]
;;;90       GPIO_Init(GPIOG, &GPIO_InitStructure);
000090  a901              ADD      r1,sp,#4
000092  4630              MOV      r0,r6
000094  f7fffffe          BL       GPIO_Init
;;;91     
;;;92       /*-- FSMC Configuration ----------------------------------------------------*/
;;;93       p.FSMC_AddressSetupTime = 0x0f;
;;;94       p.FSMC_AddressHoldTime = 0x00;
000098  2000              MOVS     r0,#0
00009a  210f              MOVS     r1,#0xf               ;93
;;;95       p.FSMC_DataSetupTime = 0x0f;
00009c  e9cd1002          STRD     r1,r0,[sp,#8]
;;;96       p.FSMC_BusTurnAroundDuration = 0x00;
;;;97       p.FSMC_CLKDivision = 0x00;
0000a0  e9cd1004          STRD     r1,r0,[sp,#0x10]
;;;98       p.FSMC_DataLatency = 0x00;
0000a4  9006              STR      r0,[sp,#0x18]
;;;99       p.FSMC_AccessMode = FSMC_AccessMode_B;
0000a6  f04f5180          MOV      r1,#0x10000000
;;;100    
;;;101      FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
0000aa  e9cd0107          STRD     r0,r1,[sp,#0x1c]
0000ae  2102              MOVS     r1,#2
;;;102      FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
;;;103      FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
0000b0  e9cd1009          STRD     r1,r0,[sp,#0x24]

⌨️ 快捷键说明

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