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

📄 mass_mal.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] 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..\..\SRAM -I"D:\Program Files\MDK KEIL\ARM\INC\ST\STM32F10x" -D__MICROLIB --omf_browse=.\Obj\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  b128              CBZ      r0,|L1.16|
000004  2801              CMP      r0,#1
000006  d10f              BNE      |L1.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  f7fff7ff          BL       NAND_Init
00000c  4604              MOV      r4,r0
;;;53           break;
00000e  e009              B        |L1.36|
                  |L1.16|
000010  f7fff7ff          BL       SD_Init
000014  4604              MOV      r4,r0                 ;47
000016  f44ff44f          MOV      r0,#0x800             ;48
00001a  f7fff7ff          BL       SD_EnableWideBusOperation
00001e  2002              MOVS     r0,#2                 ;49
000020  f7fff7ff          BL       SD_SetDeviceMode
                  |L1.36|
;;;54         default:
;;;55           return MAL_FAIL;
;;;56       }
;;;57       return status;
000024  4620              MOV      r0,r4
;;;58     }
000026  bd10              POP      {r4,pc}
                  |L1.40|
000028  2001              MOVS     r0,#1                 ;55
00002a  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  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      |L2.22|
00000c  2c01              CMP      r4,#1
00000e  d106              BNE      |L2.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  f7fff7ff          BL       NAND_Write
;;;77           break;
000014  e001              B        |L2.26|
                  |L2.22|
000016  f7fff7ff          BL       SD_WriteBlock
                  |L2.26|
;;;78     
;;;79         default:
;;;80           return MAL_FAIL;
;;;81       }
;;;82       return MAL_OK;
00001a  2000              MOVS     r0,#0
;;;83     }
00001c  bd10              POP      {r4,pc}
                  |L2.30|
00001e  2001              MOVS     r0,#1                 ;80
000020  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  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  f7fff7ff          BL       NAND_Read
;;;104          break;
000014  e001              B        |L3.26|
                  |L3.22|
000016  f7fff7ff          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_GetStatus||, CODE, READONLY, ALIGN=2

                  MAL_GetStatus PROC
;;;119    u16 MAL_GetStatus (u8 lun)
;;;120    {
000000  e92de92d          PUSH     {r4-r8,lr}
000004  f8dff8df          LDR      r8,|L4.136|
000008  4e20              LDR      r6,|L4.140|
00000a  f1a8f1a8          SUB      r7,r8,#8
00000e  b092              SUB      sp,sp,#0x48
000010  f1a7f1a7          SUB      r5,r7,#8
;;;121      SD_CardInfo SD_cardinfo;
;;;122      u32 DeviceSizeMul = 0;
;;;123      NAND_IDTypeDef NAND_ID;
;;;124    
;;;125    
;;;126      if (lun == 0)
000014  bb00              CBNZ     r0,|L4.88|
;;;127      {
;;;128        if (SD_Init() == SD_OK)
000016  f7fff7ff          BL       SD_Init
00001a  282a              CMP      r0,#0x2a
00001c  d12e              BNE      |L4.124|
;;;129        {
;;;130          SD_GetCardInfo(&SD_cardinfo);
00001e  a801              ADD      r0,sp,#4
000020  f7fff7ff          BL       SD_GetCardInfo
;;;131          DeviceSizeMul = (SD_cardinfo.SD_csd.DeviceSizeMul + 2);
000024  f89df89d          LDRB     r4,[sp,#0x18]
;;;132          SD_SelectDeselect((u32) (SD_cardinfo.RCA << 16));
000028  f8bdf8bd          LDRH     r0,[sp,#0x46]
00002c  1ca4              ADDS     r4,r4,#2              ;131
00002e  0400              LSLS     r0,r0,#16
000030  f7fff7ff          BL       SD_SelectDeselect
;;;133          Mass_Block_Count[0] = (SD_cardinfo.SD_csd.DeviceSize + 1) * (1 << DeviceSizeMul);
000034  f8bdf8bd          LDRH     r0,[sp,#0x12]
000038  1c40              ADDS     r0,r0,#1
00003a  40a0              LSLS     r0,r0,r4
;;;134          Mass_Block_Size[0]  = 1 << (SD_cardinfo.SD_csd.RdBlockLen);
00003c  f8c8f8c8          STR      r0,[r8,#0]  ; Mass_Block_Count
000040  f89df89d          LDRB     r2,[sp,#0xc]
000044  2101              MOVS     r1,#1
000046  4091              LSLS     r1,r1,r2
;;;135    
;;;136          Mass_Memory_Size[0] = Mass_Block_Count[0] * Mass_Block_Size[0];
000048  4348              MULS     r0,r1,r0
00004a  6039              STR      r1,[r7,#0]  ; Mass_Block_Size
;;;137          GPIO_SetBits(USB_LED_PORT, GPIO_Pin_7);
00004c  6028              STR      r0,[r5,#0]  ; Mass_Memory_Size
00004e  2180              MOVS     r1,#0x80
000050  4630              MOV      r0,r6
000052  f7fff7ff          BL       GPIO_SetBits
;;;138          return MAL_OK;
000056  e00d              B        |L4.116|
                  |L4.88|
;;;139        }
;;;140      }
;;;141      else
;;;142      {
;;;143        FSMC_NAND_ReadID(&NAND_ID);
000058  4668              MOV      r0,sp
00005a  f7fff7ff          BL       FSMC_NAND_ReadID
;;;144        if (NAND_ID.Device_ID != 0 )
00005e  f89df89d          LDRB     r0,[sp,#1]
000062  b158              CBZ      r0,|L4.124|
;;;145        {
;;;146          /* only one zone is used */
;;;147          Mass_Block_Count[1] = NAND_ZONE_SIZE * NAND_BLOCK_SIZE * NAND_MAX_ZONE ;
000064  f44ff44f          MOV      r0,#0x20000
;;;148          Mass_Block_Size[1]  = NAND_PAGE_SIZE;
000068  f8c8f8c8          STR      r0,[r8,#4]  ; Mass_Block_Count
00006c  1200              ASRS     r0,r0,#8
;;;149          Mass_Memory_Size[1] = (Mass_Block_Count[1] * Mass_Block_Size[1]);
00006e  6078              STR      r0,[r7,#4]  ; Mass_Block_Size
000070  0440              LSLS     r0,r0,#17
000072  6068              STR      r0,[r5,#4]  ; Mass_Memory_Size
                  |L4.116|
;;;150          return MAL_OK;
000074  2000              MOVS     r0,#0
                  |L4.118|
;;;151        }
;;;152      }
;;;153      GPIO_ResetBits(USB_LED_PORT, GPIO_Pin_7);
;;;154      return MAL_FAIL;
;;;155    }
000076  b012              ADD      sp,sp,#0x48
000078  e8bde8bd          POP      {r4-r8,pc}
                  |L4.124|
00007c  2180              MOVS     r1,#0x80              ;153
00007e  4630              MOV      r0,r6                 ;153
000080  f7fff7ff          BL       GPIO_ResetBits
000084  2001              MOVS     r0,#1                 ;154
000086  e7f6              B        |L4.118|
;;;156    
                          ENDP

                  |L4.136|
000088  00000010          DCD      ||.data||+0x10
                  |L4.140|
00008c  40011c00          DCD      0x40011c00

                          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 + -