📄 mass_mal.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Int_Flash\mass_mal.o --depend=.\Int_Flash\mass_mal.d --device=DARMSTM --apcs=interwork -O3 -I..\include -I..\..\..\..\..\INC\ST\STM32F10x\USB -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB --omf_browse=.\Int_Flash\mass_mal.crf ..\source\mass_mal.c]
THUMB
AREA ||i.MAL_Init||, CODE, READONLY, ALIGN=1
MAL_Init PROC
;;;40 u16 MAL_Init(u8 lun)
;;;41 {
000000 b510 PUSH {r4,lr}
;;;42 u16 status = MAL_OK;
;;;43
;;;44 switch (lun)
000002 b958 CBNZ r0,|L1.28|
;;;45 {
;;;46 case 0:
;;;47 status = SD_Init();
000004 f7fffffe BL SD_Init
000008 4604 MOV r4,r0
;;;48 SD_EnableWideBusOperation(SDIO_BusWide_4b);
00000a f44f6000 MOV r0,#0x800
00000e f7fffffe BL SD_EnableWideBusOperation
;;;49 SD_SetDeviceMode(SD_POLLING_MODE);
000012 2002 MOVS r0,#2
000014 f7fffffe BL SD_SetDeviceMode
;;;50 break;
;;;51 case 1:
;;;52 // status = NAND_Init();
;;;53 // break;
;;;54 default:
;;;55 return MAL_FAIL;
;;;56 }
;;;57 return status;
000018 4620 MOV r0,r4
;;;58 }
00001a bd10 POP {r4,pc}
|L1.28|
00001c 2001 MOVS r0,#1 ;55
00001e bd10 POP {r4,pc}
;;;59 /*******************************************************************************
ENDP
AREA ||i.MAL_Write||, CODE, READONLY, ALIGN=1
MAL_Write PROC
;;;66 u16 MAL_Write(u8 lun, u32 Memory_Offset, u32 *Writebuff, u16 Transfer_Length)
;;;67 {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
000004 4611 MOV r1,r2
000006 461a MOV r2,r3
;;;68
;;;69 switch (lun)
000008 b920 CBNZ r0,|L2.20|
;;;70 {
;;;71 case 0:
;;;72 SD_WriteBlock(Memory_Offset, Writebuff, Transfer_Length);
00000a 4620 MOV r0,r4
00000c f7fffffe BL SD_WriteBlock
;;;73 break;
;;;74
;;;75 case 1:
;;;76 // NAND_Write(Memory_Offset, Writebuff, Transfer_Length);
;;;77 // break;
;;;78
;;;79 default:
;;;80 return MAL_FAIL;
;;;81 }
;;;82 return MAL_OK;
000010 2000 MOVS r0,#0
;;;83 }
000012 bd10 POP {r4,pc}
|L2.20|
000014 2001 MOVS r0,#1 ;80
000016 bd10 POP {r4,pc}
;;;84
ENDP
AREA ||i.MAL_Read||, CODE, READONLY, ALIGN=1
MAL_Read PROC
;;;92 u16 MAL_Read(u8 lun, u32 Memory_Offset, u32 *Readbuff, u16 Transfer_Length)
;;;93 {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
000004 4611 MOV r1,r2
000006 461a MOV r2,r3
;;;94
;;;95 switch (lun)
000008 b920 CBNZ r0,|L3.20|
;;;96 {
;;;97 case 0:
;;;98
;;;99 SD_ReadBlock(Memory_Offset, Readbuff, Transfer_Length);
00000a 4620 MOV r0,r4
00000c f7fffffe BL SD_ReadBlock
;;;100 break;
;;;101
;;;102 case 1:
;;;103 // NAND_Read(Memory_Offset, Readbuff, Transfer_Length);
;;;104 // break;
;;;105
;;;106 default:
;;;107 return MAL_FAIL;
;;;108 }
;;;109 return MAL_OK;
000010 2000 MOVS r0,#0
;;;110 }
000012 bd10 POP {r4,pc}
|L3.20|
000014 2001 MOVS r0,#1 ;107
000016 bd10 POP {r4,pc}
;;;111
ENDP
AREA ||i.MAL_GetStatus||, CODE, READONLY, ALIGN=2
MAL_GetStatus PROC
;;;119 u16 MAL_GetStatus (u8 lun)
;;;120 {
000000 b530 PUSH {r4,r5,lr}
000002 4d18 LDR r5,|L4.100|
000004 b091 SUB sp,sp,#0x44
;;;121 SD_CardInfo SD_cardinfo;
;;;122 u32 DeviceSizeMul = 0;
;;;123 //NAND_IDTypeDef NAND_ID;
;;;124
;;;125
;;;126 if (lun == 0)
000006 bb30 CBNZ r0,|L4.86|
;;;127 {
;;;128 if (SD_Init() == SD_OK)
000008 f7fffffe BL SD_Init
00000c 282a CMP r0,#0x2a
00000e d122 BNE |L4.86|
;;;129 {
;;;130 SD_GetCardInfo(&SD_cardinfo);
000010 4668 MOV r0,sp
000012 f7fffffe BL SD_GetCardInfo
;;;131 DeviceSizeMul = (SD_cardinfo.SD_csd.DeviceSizeMul + 2);
000016 f89d4014 LDRB r4,[sp,#0x14]
;;;132 SD_SelectDeselect((u32) (SD_cardinfo.RCA << 16));
00001a f8bd0042 LDRH r0,[sp,#0x42]
00001e 1ca4 ADDS r4,r4,#2 ;131
000020 0400 LSLS r0,r0,#16
000022 f7fffffe BL SD_SelectDeselect
;;;133 Mass_Block_Count[0] = (SD_cardinfo.SD_csd.DeviceSize + 1) * (1 << DeviceSizeMul);
000026 f8bd000e LDRH r0,[sp,#0xe]
00002a 490f LDR r1,|L4.104|
00002c 1c40 ADDS r0,r0,#1
00002e 40a0 LSLS r0,r0,r4
;;;134 Mass_Block_Size[0] = 1 << (SD_cardinfo.SD_csd.RdBlockLen);
000030 6008 STR r0,[r1,#0] ; Mass_Block_Count
000032 f89d2008 LDRB r2,[sp,#8]
000036 2101 MOVS r1,#1
000038 4091 LSLS r1,r1,r2
00003a 4a0b LDR r2,|L4.104|
;;;135
;;;136 Mass_Memory_Size[0] = Mass_Block_Count[0] * Mass_Block_Size[0];
00003c 4348 MULS r0,r1,r0
00003e 3a08 SUBS r2,r2,#8 ;134
000040 6011 STR r1,[r2,#0] ; Mass_Block_Size
000042 f1a20108 SUB r1,r2,#8
;;;137 GPIO_SetBits(USB_LED_PORT, GPIO_Pin_7);
000046 6008 STR r0,[r1,#0] ; Mass_Memory_Size
000048 2180 MOVS r1,#0x80
00004a 4628 MOV r0,r5
00004c f7fffffe BL GPIO_SetBits
;;;138 return MAL_OK;
000050 2000 MOVS r0,#0
|L4.82|
;;;139 }
;;;140 }
;;;141 //else
;;;142 //{
;;;143 // FSMC_NAND_ReadID(&NAND_ID);
;;;144 // if (NAND_ID.Device_ID != 0 )
;;;145 // {
;;;146 // /* only one zone is used */
;;;147 // Mass_Block_Count[1] = NAND_ZONE_SIZE * NAND_BLOCK_SIZE * NAND_MAX_ZONE ;
;;;148 // Mass_Block_Size[1] = NAND_PAGE_SIZE;
;;;149 // Mass_Memory_Size[1] = (Mass_Block_Count[1] * Mass_Block_Size[1]);
;;;150 // return MAL_OK;
;;;151 // }
;;;152 //}
;;;153 GPIO_ResetBits(USB_LED_PORT, GPIO_Pin_7);
;;;154 return MAL_FAIL;
;;;155 }
000052 b011 ADD sp,sp,#0x44
000054 bd30 POP {r4,r5,pc}
|L4.86|
000056 2180 MOVS r1,#0x80 ;153
000058 4628 MOV r0,r5 ;153
00005a f7fffffe BL GPIO_ResetBits
00005e 2001 MOVS r0,#1 ;154
000060 e7f7 B |L4.82|
;;;156
ENDP
000062 0000 DCW 0x0000
|L4.100|
000064 40011c00 DCD 0x40011c00
|L4.104|
000068 00000010 DCD ||.data||+0x10
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 + -