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

📄 storage.lst

📁 增强型51单片机fs7821sd卡、mmc卡读写程序
💻 LST
字号:
C51 COMPILER V7.02b   STORAGE                                                              02/01/2007 10:35:43 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE STORAGE
OBJECT MODULE PLACED IN .\Output\Storage.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Storage.c OPTIMIZE(9,SPEED) BROWSE INCDIR(Include) DEFINE(READER) DEBUG OBJ
                    -ECTEXTEND PRINT(.\Output\Storage.lst) OBJECT(.\Output\Storage.obj)

stmt level    source

   1          /*
   2          **********************************************************************************************
   3          * Project:      TK7821
   4          * File:         Storage.c
   5          * Contents: 
   6          *          The storage access wrapper 
   7          *
   8          * $Date: 02/25/05    Jason    v0.1
   9          *        05/12/05    Mingo    v0.2   www.fameg.com
  10          *
  11          * Copyright (c) 2005 Fameg, Inc. All rights reserved
  12          ***********************************************************************************************
  13          */
  14          
  15          #include <reg51.h>
  16          #include <string.h>
  17          #include "Device.h"
  18          #include "UsbDisk.h"
  19          #include "Storage.h"
  20          #include "ScsiCmd.h"
  21          #include "FlashDisk.h"
  22          
  23          bit AccessStatus;          // ??? what for ??? 
  24          bit AccessWritable = false;// ??? what for ??? 
  25          BYTE AccessDevice;         // ??? what for ??? 
  26          BYTE CmdTimer;
  27          
  28          BYTE LastDevice;
  29          idata BYTE DeviceType[MAX_DEVICE_NUM];
  30          
  31          UINT16 CopyBuffer = DMA_BUFFER2; // Address of temporary block copy buffer
  32          UINT16 CurrentBuffer;
  33          bit Authenticated = false;
  34          xdata TDeviceInfo DeviceInfo;
  35          xdata TConfigData ConfigData;
  36          idata STATUS SdMediaStatus = STATUS_NO_MEDIA;
  37          
  38          //----------------------------------------------------------------------------
  39          // Description:
  40          //   Initiate the storage interfaces
  41          //----------------------------------------------------------------------------
  42          void StorageInit()
  43          {
  44   1        LastDevice = 0;
  45   1        CurrentBuffer = DMA_BUFFER0;
  46   1      
  47   1        // Init Parameters.
  48   1        memset((BYTE xdata *)ConfigData.ReadOnly, 0, MAX_DEVICE_NUM); //不可去除此条语句,否则会导致SD卡成写保护
             -模式,只能读不能写也不能删除文件
  49   1      
  50   1        SdInit();
  51   1        DeviceType[LastDevice] = DEVICE_SD;
  52   1      }
  53          
C51 COMPILER V7.02b   STORAGE                                                              02/01/2007 10:35:43 PAGE 2   

  54          //--------------------------------------------------------------------
  55          // Make the storage devices into suspend mode
  56          //--------------------------------------------------------------------
  57          void StorageSuspend()
  58          {
  59   1          SdSuspend();
  60   1      }
  61          
  62          //--------------------------------------------------------------------
  63          // Make the storage devices resume
  64          //--------------------------------------------------------------------
  65          void StorageResume()
  66          {
  67   1          SdResume(); // Resume SD first or CF will fail
  68   1      }
  69          
  70          //----------------------------------------------------------------------------
  71          // Description:
  72          //   Get the next buffer address
  73          //----------------------------------------------------------------------------
  74          UINT16 GetNextBuffer(UINT16 Buffer)
  75          {
  76   1        if (((TDataCast *)&Buffer)->ucByte[0] == (DMA_BUFFER0 >> 8))
  77   1          return DMA_BUFFER1;
  78   1        else
  79   1          return DMA_BUFFER0;
  80   1      }
  81          
  82          //---------------------------------------------------------------------------
  83          // Used to change device STATUS when StartStopUint "Start" cmd issued 
  84          //---------------------------------------------------------------------------
  85          void StorageStart()
  86          {   
  87   1              SdStart(); 
  88   1      }
  89          
  90          //---------------------------------------------------------------------------
  91          // Used to change device STATUS when StartStopUint "Stop" cmd issued
  92          //---------------------------------------------------------------------------
  93          void StorageEject()
  94          { 
  95   1              SdEject();       
  96   1      }
  97          
  98          //----------------------------------------------------------------------------
  99          //   Query one storage device for status
 100          //----------------------------------------------------------------------------
 101          STATUS QueryDevice()
 102          {
 103   1          xdata BYTE Status;
 104   1      
 105   1          switch (DeviceType[ScsiLun])
 106   1          {
 107   2              case DEVICE_SD: Status = SdQueryDevice(); break;
 108   2              default:
 109   2                  return STATUS_PARAM_ERROR;
 110   2          }
 111   1      
 112   1          if(ConfigData.ReadOnly[ScsiLun])
 113   1              DeviceInfo.WriteProtect = true;
 114   1      
 115   1          return Status;
C51 COMPILER V7.02b   STORAGE                                                              02/01/2007 10:35:43 PAGE 3   

 116   1      }
 117          
 118          //----------------------------------------------------------------------------
 119          //   Storage sector read routine
 120          //----------------------------------------------------------------------------
 121          STATUS ReadSector()
 122          {
 123   1          BYTE Status;
 124   1      
 125   1          AccessStatus = true; 
 126   1          AccessDevice = ScsiLun;
 127   1          CurrentBuffer = GetNextBuffer(CurrentBuffer);
 128   1      
 129   1          switch (DeviceType[ScsiLun])
 130   1          {
 131   2              case DEVICE_SD: Status = SdReadSector(); break;
 132   2              default:
 133   2                  return STATUS_PARAM_ERROR;
 134   2          }
 135   1          return Status;
 136   1      }
 137          
 138          //----------------------------------------------------------------------------
 139          //   Storage next sector read routine
 140          //----------------------------------------------------------------------------
 141          STATUS ReadNextSector()
 142          {
 143   1          BYTE Status;
 144   1        
 145   1          CurrentBuffer = GetNextBuffer(CurrentBuffer);
 146   1      
 147   1          switch (DeviceType[ScsiLun])
 148   1          {
 149   2              case DEVICE_SD: Status = SdReadNextSector(); break;
 150   2              default:
 151   2                  return STATUS_PARAM_ERROR;
 152   2          }
 153   1          return Status;
 154   1      }
 155          
 156          //----------------------------------------------------------------------------
 157          //   Storage sector write routine
 158          //----------------------------------------------------------------------------
 159          STATUS WriteSector()
 160          {
 161   1          BYTE Status;
 162   1      
 163   1          AccessStatus = true;
 164   1          AccessDevice = ScsiLun;
 165   1      
 166   1          switch (DeviceType[ScsiLun])
 167   1          {
 168   2              case DEVICE_SD: Status = SdWriteSector(); break;
 169   2              default:
 170   2                  Status = STATUS_PARAM_ERROR;
 171   2          }
 172   1          return Status;
 173   1      }
 174          
 175          //----------------------------------------------------------------------------
 176          //   Storage next sector write routine
 177          //----------------------------------------------------------------------------
C51 COMPILER V7.02b   STORAGE                                                              02/01/2007 10:35:43 PAGE 4   

 178          STATUS WriteNextSector()
 179          {
 180   1          BYTE Status;
 181   1      
 182   1          switch (DeviceType[ScsiLun])
 183   1          {
 184   2              case DEVICE_SD: Status = SdWriteNextSector(); break;
 185   2              default:
 186   2                  Status = STATUS_PARAM_ERROR;
 187   2          }
 188   1          return Status;
 189   1      }
 190          
 191          
 192          UINT32 ConvertEndian32(UINT32 Src)
 193          {
 194   1        UINT32 Des;
 195   1        PBYTE pSrc = (PBYTE)(&Src);
 196   1        PBYTE pDesc = (PBYTE)(&Des);
 197   1              
 198   1        pDesc[0] = pSrc[3];   
 199   1        pDesc[1] = pSrc[2];   
 200   1        pDesc[2] = pSrc[1];
 201   1        pDesc[3] = pSrc[0];   
 202   1        
 203   1        return Des; 
 204   1      }
 205          
 206          //----------------------------------------------------------------------------
 207          // Convert Big/Little endian to Little/Big endian, UINT16 applyed. 
 208          //  (Due to Keil simulation result,system was Big Endian)
 209          //----------------------------------------------------------------------------
 210          UINT16 ConvertEndian16(UINT16 Src)
 211          {
 212   1        UINT16 Des;
 213   1        PBYTE pSrc = (PBYTE)(&Src);
 214   1        PBYTE pDesc = (PBYTE)(&Des);
 215   1              
 216   1        pDesc[0] = pSrc[1];   
 217   1        pDesc[1] = pSrc[0];   
 218   1      
 219   1        return Des; 
 220   1      }    
 221          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    389    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     32       1
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      30
   IDATA SIZE       =      2    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -