📄 mass_mal.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\mass_mal.o --depend=.\Obj\mass_mal.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\mass_mal.c]
THUMB
AREA ||i.MAL_GetStatus||, CODE, READONLY, ALIGN=2
MAL_GetStatus PROC
;;;118 *******************************************************************************/
;;;119 u16 MAL_GetStatus (u8 lun)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;120 {
;;;121 SD_CardInfo SD_cardinfo;
;;;122 u32 DeviceSizeMul = 0;
;;;123 NAND_IDTypeDef NAND_ID;
;;;124
;;;125
;;;126 if (lun == 0)
;;;127 {
;;;128 if (SD_Init() == SD_OK)
;;;129 {
;;;130 SD_GetCardInfo(&SD_cardinfo);
;;;131 DeviceSizeMul = (SD_cardinfo.SD_csd.DeviceSizeMul + 2);
;;;132 SD_SelectDeselect((u32) (SD_cardinfo.RCA << 16));
;;;133 Mass_Block_Count[0] = (SD_cardinfo.SD_csd.DeviceSize + 1) * (1 << DeviceSizeMul);
000004 4d1f LDR r5,|L1.132|
;;;134 Mass_Block_Size[0] = 1 << (SD_cardinfo.SD_csd.RdBlockLen);
;;;135
;;;136 Mass_Memory_Size[0] = Mass_Block_Count[0] * Mass_Block_Size[0];
;;;137 GPIO_SetBits(USB_LED_PORT, GPIO_Pin_7);
000006 f8df8080 LDR r8,|L1.136|
00000a b092 SUB sp,sp,#0x48 ;120
00000c f1a50608 SUB r6,r5,#8 ;134
000010 f1a50710 SUB r7,r5,#0x10 ;136
000014 b9f8 CBNZ r0,|L1.86|
000016 f7fffffe BL SD_Init
00001a 282a CMP r0,#0x2a ;128
00001c d12c BNE |L1.120|
00001e a801 ADD r0,sp,#4 ;130
000020 f7fffffe BL SD_GetCardInfo
000024 f89d4018 LDRB r4,[sp,#0x18] ;131
000028 f8bd0046 LDRH r0,[sp,#0x46] ;132
00002c 1ca4 ADDS r4,r4,#2 ;131
00002e 0400 LSLS r0,r0,#16 ;132
000030 f7fffffe BL SD_SelectDeselect
000034 f8bd0012 LDRH r0,[sp,#0x12] ;133
000038 1c40 ADDS r0,r0,#1 ;133
00003a 40a0 LSLS r0,r0,r4 ;133
00003c 6028 STR r0,[r5,#0] ;134 ; Mass_Block_Count
00003e f89d200c LDRB r2,[sp,#0xc] ;134
000042 2101 MOVS r1,#1 ;134
000044 4091 LSLS r1,r1,r2 ;134
000046 4348 MULS r0,r1,r0 ;136
000048 6031 STR r1,[r6,#0] ;136 ; Mass_Block_Size
00004a 6038 STR r0,[r7,#0] ; Mass_Memory_Size
00004c 2180 MOVS r1,#0x80
00004e 4640 MOV r0,r8
000050 f7fffffe BL GPIO_SetBits
;;;138 return MAL_OK;
000054 e00c B |L1.112|
|L1.86|
;;;139 }
;;;140 }
;;;141 else
;;;142 {
;;;143 FSMC_NAND_ReadID(&NAND_ID);
000056 4668 MOV r0,sp
000058 f7fffffe BL FSMC_NAND_ReadID
;;;144 if (NAND_ID.Device_ID != 0 )
00005c f89d0001 LDRB r0,[sp,#1]
000060 b150 CBZ r0,|L1.120|
;;;145 {
;;;146 /* only one zone is used */
;;;147 Mass_Block_Count[1] = NAND_ZONE_SIZE * NAND_BLOCK_SIZE * NAND_MAX_ZONE ;
000062 f44f3000 MOV r0,#0x20000
;;;148 Mass_Block_Size[1] = NAND_PAGE_SIZE;
000066 6068 STR r0,[r5,#4] ; Mass_Block_Count
000068 1200 ASRS r0,r0,#8
;;;149 Mass_Memory_Size[1] = (Mass_Block_Count[1] * Mass_Block_Size[1]);
00006a 6070 STR r0,[r6,#4] ; Mass_Block_Size
00006c 0440 LSLS r0,r0,#17
00006e 6078 STR r0,[r7,#4] ; Mass_Memory_Size
|L1.112|
;;;150 return MAL_OK;
000070 2000 MOVS r0,#0
|L1.114|
;;;151 }
;;;152 }
;;;153 GPIO_ResetBits(USB_LED_PORT, GPIO_Pin_7);
;;;154 return MAL_FAIL;
;;;155 }
000072 b012 ADD sp,sp,#0x48
000074 e8bd81f0 POP {r4-r8,pc}
|L1.120|
000078 2180 MOVS r1,#0x80 ;153
00007a 4640 MOV r0,r8 ;153
00007c f7fffffe BL GPIO_ResetBits
000080 2001 MOVS r0,#1 ;154
000082 e7f6 B |L1.114|
;;;156
ENDP
|L1.132|
DCD ||.data||+0x10
|L1.136|
DCD 0x40011c00
AREA ||i.MAL_Init||, CODE, READONLY, ALIGN=1
MAL_Init PROC
;;;39 *******************************************************************************/
;;;40 u16 MAL_Init(u8 lun)
000000 b510 PUSH {r4,lr}
;;;41 {
;;;42 u16 status = MAL_OK;
;;;43
;;;44 switch (lun)
000002 b128 CBZ r0,|L2.16|
000004 2801 CMP r0,#1
000006 d10f BNE |L2.40|
;;;45 {
;;;46 case 0:
;;;47 status = SD_Init();
;;;48 SD_EnableWideBusOperation(SDIO_BusWide_4b);
;;;49 SD_SetDeviceMode(SD_POLLING_MODE);
;;;50 break;
;;;51 case 1:
;;;52 status = NAND_Init();
000008 f7fffffe BL NAND_Init
00000c 4604 MOV r4,r0
;;;53 break;
00000e e009 B |L2.36|
|L2.16|
000010 f7fffffe BL SD_Init
000014 4604 MOV r4,r0 ;47
000016 f44f6000 MOV r0,#0x800 ;48
00001a f7fffffe BL SD_EnableWideBusOperation
00001e 2002 MOVS r0,#2 ;49
000020 f7fffffe BL SD_SetDeviceMode
|L2.36|
;;;54 default:
;;;55 return MAL_FAIL;
;;;56 }
;;;57 return status;
000024 4620 MOV r0,r4
;;;58 }
000026 bd10 POP {r4,pc}
|L2.40|
000028 2001 MOVS r0,#1 ;55
00002a bd10 POP {r4,pc}
;;;59 /*******************************************************************************
ENDP
AREA ||i.MAL_Read||, CODE, READONLY, ALIGN=1
MAL_Read PROC
;;;91 *******************************************************************************/
;;;92 u16 MAL_Read(u8 lun, u32 Memory_Offset, u32 *Readbuff, u16 Transfer_Length)
000000 b510 PUSH {r4,lr}
;;;93 {
000002 0004 MOVS r4,r0
000004 4608 MOV r0,r1
000006 4611 MOV r1,r2
000008 461a MOV r2,r3
;;;94
;;;95 switch (lun)
00000a d004 BEQ |L3.22|
00000c 2c01 CMP r4,#1
00000e d106 BNE |L3.30|
;;;96 {
;;;97 case 0:
;;;98
;;;99 SD_ReadBlock(Memory_Offset, Readbuff, Transfer_Length);
;;;100 break;
;;;101
;;;102 case 1:
;;;103 NAND_Read(Memory_Offset, Readbuff, Transfer_Length);
000010 f7fffffe BL NAND_Read
;;;104 break;
000014 e001 B |L3.26|
|L3.22|
000016 f7fffffe BL SD_ReadBlock
|L3.26|
;;;105
;;;106 default:
;;;107 return MAL_FAIL;
;;;108 }
;;;109 return MAL_OK;
00001a 2000 MOVS r0,#0
;;;110 }
00001c bd10 POP {r4,pc}
|L3.30|
00001e 2001 MOVS r0,#1 ;107
000020 bd10 POP {r4,pc}
;;;111
ENDP
AREA ||i.MAL_Write||, CODE, READONLY, ALIGN=1
MAL_Write PROC
;;;65 *******************************************************************************/
;;;66 u16 MAL_Write(u8 lun, u32 Memory_Offset, u32 *Writebuff, u16 Transfer_Length)
000000 b510 PUSH {r4,lr}
;;;67 {
000002 0004 MOVS r4,r0
000004 4608 MOV r0,r1
000006 4611 MOV r1,r2
000008 461a MOV r2,r3
;;;68
;;;69 switch (lun)
00000a d004 BEQ |L4.22|
00000c 2c01 CMP r4,#1
00000e d106 BNE |L4.30|
;;;70 {
;;;71 case 0:
;;;72 SD_WriteBlock(Memory_Offset, Writebuff, Transfer_Length);
;;;73 break;
;;;74
;;;75 case 1:
;;;76 NAND_Write(Memory_Offset, Writebuff, Transfer_Length);
000010 f7fffffe BL NAND_Write
;;;77 break;
000014 e001 B |L4.26|
|L4.22|
000016 f7fffffe BL SD_WriteBlock
|L4.26|
;;;78
;;;79 default:
;;;80 return MAL_FAIL;
;;;81 }
;;;82 return MAL_OK;
00001a 2000 MOVS r0,#0
;;;83 }
00001c bd10 POP {r4,pc}
|L4.30|
00001e 2001 MOVS r0,#1 ;80
000020 bd10 POP {r4,pc}
;;;84
ENDP
AREA ||.data||, DATA, ALIGN=2
Mass_Memory_Size
% 8
Mass_Block_Size
% 8
Mass_Block_Count
% 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -