📄 fsmc_nor.txt
字号:
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 + -