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

📄 fsmc_nor.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
0000b4  2108              MOVS     r1,#8
;;;104      FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
0000b6  910b              STR      r1,[sp,#0x2c]
0000b8  2110              MOVS     r1,#0x10
;;;105      FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
;;;106      FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
0000ba  e9cd100c          STRD     r1,r0,[sp,#0x30]
;;;107      FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
;;;108      FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
;;;109      FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
0000be  0209              LSLS     r1,r1,#8
0000c0  900e              STR      r0,[sp,#0x38]         ;107
0000c2  900f              STR      r0,[sp,#0x3c]         ;108
;;;110      FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
0000c4  e9cd0110          STRD     r0,r1,[sp,#0x40]
;;;111      FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
0000c8  9012              STR      r0,[sp,#0x48]
;;;112      FSMC_NORSRAMInitStructure.FSMC_AsyncWait = FSMC_AsyncWait_Disable;
0000ca  9013              STR      r0,[sp,#0x4c]
;;;113      FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
0000cc  9014              STR      r0,[sp,#0x50]
;;;114      FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
0000ce  9015              STR      r0,[sp,#0x54]
0000d0  a802              ADD      r0,sp,#8
;;;115      FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
0000d2  9016              STR      r0,[sp,#0x58]
;;;116    
;;;117      FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
0000d4  9017              STR      r0,[sp,#0x5c]
0000d6  a809              ADD      r0,sp,#0x24
0000d8  f7fffffe          BL       FSMC_NORSRAMInit
;;;118    
;;;119      /* Enable FSMC Bank1_NOR Bank */
;;;120      FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
0000dc  2101              MOVS     r1,#1
0000de  2002              MOVS     r0,#2
0000e0  f7fffffe          BL       FSMC_NORSRAMCmd
;;;121    }
0000e4  b018              ADD      sp,sp,#0x60
0000e6  bd70              POP      {r4-r6,pc}
;;;122    
                          ENDP

                  |L4.232|
                          DCD      0x40011400
                  |L4.236|
                          DCD      0x40011800
                  |L4.240|
                          DCD      0x40011c00
                  |L4.244|
                          DCD      0x40012000

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

                  FSMC_NOR_ReadBuffer PROC
;;;302    *******************************************************************************/
;;;303    void FSMC_NOR_ReadBuffer(u16* pBuffer, u32 ReadAddr, u32 NumHalfwordToRead)
000000  b510              PUSH     {r4,lr}
;;;304    {
;;;305      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000002  4c0b              LDR      r4,|L5.48|
000004  23aa              MOVS     r3,#0xaa
000006  8023              STRH     r3,[r4,#0]
;;;306      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000008  4c0a              LDR      r4,|L5.52|
00000a  2355              MOVS     r3,#0x55
00000c  f8a43554          STRH     r3,[r4,#0x554]
;;;307      NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0);
000010  24f0              MOVS     r4,#0xf0
000012  f04f43c8          MOV      r3,#0x64000000
000016  525c              STRH     r4,[r3,r1]
;;;308    
;;;309      for(; NumHalfwordToRead != 0x00; NumHalfwordToRead--) /* while there is data to read */
000018  2a00              CMP      r2,#0
00001a  d008              BEQ      |L5.46|
                  |L5.28|
;;;310      {
;;;311        /* Read a Halfword from the NOR */
;;;312        *pBuffer++ = *(vu16 *)((Bank1_NOR2_ADDR + ReadAddr));
00001c  f04f43c8          MOV      r3,#0x64000000
000020  5a5b              LDRH     r3,[r3,r1]
000022  4604              MOV      r4,r0
000024  1c80              ADDS     r0,r0,#2
;;;313        ReadAddr = ReadAddr + 1; 
000026  1c49              ADDS     r1,r1,#1
000028  8023              STRH     r3,[r4,#0]            ;312
00002a  1e52              SUBS     r2,r2,#1              ;309
00002c  d1f6              BNE      |L5.28|
                  |L5.46|
;;;314      }  
;;;315    }
00002e  bd10              POP      {r4,pc}
;;;316    
                          ENDP

                  |L5.48|
                          DCD      0x6400aaaa
                  |L5.52|
                          DCD      0x64005000

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

                  FSMC_NOR_ReadHalfWord PROC
;;;283    *******************************************************************************/
;;;284    u16 FSMC_NOR_ReadHalfWord(u32 ReadAddr)
000000  4a06              LDR      r2,|L6.28|
;;;285    {
;;;286      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA); 
000002  21aa              MOVS     r1,#0xaa
000004  8011              STRH     r1,[r2,#0]
;;;287      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);  
000006  4a06              LDR      r2,|L6.32|
000008  2155              MOVS     r1,#0x55
00000a  f8a21554          STRH     r1,[r2,#0x554]
;;;288      NOR_WRITE((Bank1_NOR2_ADDR + ReadAddr), 0x00F0 );
00000e  21f0              MOVS     r1,#0xf0
000010  f10040c8          ADD      r0,r0,#0x64000000
000014  8001              STRH     r1,[r0,#0]
;;;289    
;;;290      return (*(vu16 *)((Bank1_NOR2_ADDR + ReadAddr)));
000016  8800              LDRH     r0,[r0,#0]
;;;291    }
000018  4770              BX       lr
;;;292    
                          ENDP

00001a  0000              DCW      0x0000
                  |L6.28|
                          DCD      0x6400aaaa
                  |L6.32|
                          DCD      0x64005000

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

                  FSMC_NOR_ReadID PROC
;;;130    *******************************************************************************/
;;;131    void FSMC_NOR_ReadID(NOR_IDTypeDef* NOR_ID)
000000  4909              LDR      r1,|L7.40|
;;;132    {
;;;133      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000002  22aa              MOVS     r2,#0xaa
000004  800a              STRH     r2,[r1,#0]
;;;134      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000006  4b09              LDR      r3,|L7.44|
000008  2255              MOVS     r2,#0x55
00000a  f8a32554          STRH     r2,[r3,#0x554]
;;;135      NOR_WRITE(ADDR_SHIFT(0x5555), 0x0090);
00000e  2290              MOVS     r2,#0x90
000010  800a              STRH     r2,[r1,#0]
;;;136    
;;;137      NOR_ID->Manufacturer_Code = *(vu16 *) ADDR_SHIFT(0x0000);
000012  f04f41c8          MOV      r1,#0x64000000
000016  880a              LDRH     r2,[r1,#0]
000018  8002              STRH     r2,[r0,#0]
;;;138      NOR_ID->Device_Code1 = *(vu16 *) ADDR_SHIFT(0x0001);
00001a  884a              LDRH     r2,[r1,#2]
00001c  8042              STRH     r2,[r0,#2]
;;;139      NOR_ID->Device_Code2 = *(vu16 *) ADDR_SHIFT(0x000E);
00001e  8b8a              LDRH     r2,[r1,#0x1c]
000020  8082              STRH     r2,[r0,#4]
;;;140      NOR_ID->Device_Code3 = *(vu16 *) ADDR_SHIFT(0x000F);
000022  8bc9              LDRH     r1,[r1,#0x1e]
000024  80c1              STRH     r1,[r0,#6]
;;;141    }
000026  4770              BX       lr
;;;142    
                          ENDP

                  |L7.40|
                          DCD      0x6400aaaa
                  |L7.44|
                          DCD      0x64005000

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

                  FSMC_NOR_Reset PROC
;;;338    *******************************************************************************/
;;;339    NOR_Status FSMC_NOR_Reset(void)
000000  4906              LDR      r1,|L8.28|
;;;340    {
;;;341      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA); 
000002  20aa              MOVS     r0,#0xaa
000004  8008              STRH     r0,[r1,#0]
;;;342      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055); 
000006  4906              LDR      r1,|L8.32|
000008  2055              MOVS     r0,#0x55
00000a  f8a10554          STRH     r0,[r1,#0x554]
;;;343      NOR_WRITE(Bank1_NOR2_ADDR, 0x00F0); 
00000e  20f0              MOVS     r0,#0xf0
000010  f04f41c8          MOV      r1,#0x64000000
000014  8008              STRH     r0,[r1,#0]
;;;344    
;;;345      return (NOR_SUCCESS);
000016  2000              MOVS     r0,#0
;;;346    }
000018  4770              BX       lr
;;;347    
                          ENDP

00001a  0000              DCW      0x0000
                  |L8.28|
                          DCD      0x6400aaaa
                  |L8.32|
                          DCD      0x64005000

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

                  FSMC_NOR_ReturnToReadMode PROC
;;;323    *******************************************************************************/
;;;324    NOR_Status FSMC_NOR_ReturnToReadMode(void)
000000  20f0              MOVS     r0,#0xf0
;;;325    {
;;;326      NOR_WRITE(Bank1_NOR2_ADDR, 0x00F0);
000002  f04f41c8          MOV      r1,#0x64000000
000006  8008              STRH     r0,[r1,#0]
;;;327    
;;;328      return (NOR_SUCCESS);
000008  2000              MOVS     r0,#0
;;;329    }
00000a  4770              BX       lr
;;;330    
                          ENDP


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

                  FSMC_NOR_WriteBuffer PROC
;;;212    *******************************************************************************/
;;;213    NOR_Status FSMC_NOR_WriteBuffer(u16* pBuffer, u32 WriteAddr, u32 NumHalfwordToWrite)
000000  b570              PUSH     {r4-r6,lr}
;;;214    {
000002  4604              MOV      r4,r0
000004  460e              MOV      r6,r1
000006  4615              MOV      r5,r2
                  |L10.8|
;;;215      NOR_Status status = NOR_ONGOING; 
;;;216    
;;;217      do
;;;218      {
;;;219        /* Transfer data to the memory */
;;;220        status = FSMC_NOR_WriteHalfWord(WriteAddr, *pBuffer++);
000008  f8341b02          LDRH     r1,[r4],#2
00000c  4630              MOV      r0,r6
00000e  f7fffffe          BL       FSMC_NOR_WriteHalfWord
;;;221        WriteAddr = WriteAddr + 2;
000012  1cb6              ADDS     r6,r6,#2
;;;222        NumHalfwordToWrite--;
000014  1e6d              SUBS     r5,r5,#1
;;;223      }
;;;224      while((status == NOR_SUCCESS) && (NumHalfwordToWrite != 0));
000016  2800              CMP      r0,#0
000018  d101              BNE      |L10.30|
00001a  2d00              CMP      r5,#0
00001c  d1f4              BNE      |L10.8|
                  |L10.30|
;;;225      
;;;226      return (status); 
;;;227    }
00001e  bd70              POP      {r4-r6,pc}
;;;228    
                          ENDP


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

                  FSMC_NOR_WriteHalfWord PROC
;;;191    *******************************************************************************/
;;;192    NOR_Status FSMC_NOR_WriteHalfWord(u32 WriteAddr, u16 Data)
000000  b410              PUSH     {r4}
;;;193    {
;;;194      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00AA);
000002  4a08              LDR      r2,|L11.36|
000004  23aa              MOVS     r3,#0xaa
000006  8013              STRH     r3,[r2,#0]
;;;195      NOR_WRITE(ADDR_SHIFT(0x2AAA), 0x0055);
000008  4c07              LDR      r4,|L11.40|
00000a  2355              MOVS     r3,#0x55
00000c  f8a43554          STRH     r3,[r4,#0x554]
;;;196      NOR_WRITE(ADDR_SHIFT(0x5555), 0x00A0);
000010  23a0              MOVS     r3,#0xa0
000012  8013              STRH     r3,[r2,#0]
;;;197      NOR_WRITE((Bank1_NOR2_ADDR + WriteAddr), Data);
000014  f10040c8          ADD      r0,r0,#0x64000000
000018  8001              STRH     r1,[r0,#0]
;;;198     // NOR_WRITE((Bank1_NOR2_ADDR), 0x55);
;;;199      return (FSMC_NOR_GetStatus(Program_Timeout));
00001a  bc10              POP      {r4}
00001c  0158              LSLS     r0,r3,#5
00001e  f7ffbffe          B.W      FSMC_NOR_GetStatus
;;;200    }
;;;201    
                          ENDP

000022  0000              DCW      0x0000
                  |L11.36|
                          DCD      0x6400aaaa
                  |L11.40|
                          DCD      0x64005000

⌨️ 快捷键说明

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