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