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

📄 sd.lst

📁 mp3播放器
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE SD
OBJECT MODULE PLACED IN sd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sd.c OMF2 OPTIMIZE(6,SPEED) BROWSE VARBANKING DEBUG

line level    source

   1          #include "dp8051.h"
   2          #include "config.h"
   3          #include "absacc.h"
   4          #include "constant.h"
   5          #include "variable.h"
   6          #include "function.h"
   7          #include "sdhost.h"
   8          #include "sssmp3_regs.h"
   9          #include "fat.h"
  10          #include "mp3_appl.h"
  11          //***********************************************
  12          idata   Uint32  sd_mem_size;                /* memory disk size in pages */
  13          
  14          #define Sd_disk_size()         ((Uint32)(sd_mem_size))
  15          
  16          /************************************************
  17          函 数 名: SYSDelay()
  18          功    能:系统延时
  19          说    明:
  20          调    用:
  21          全局变量:i
  22          入口参数:无
  23          出口参数:无
  24          返 回 值:无
  25          ************************************************/
  26          void SYSDelay(void)
  27          {
  28   1              for(varAl.i = 0; varAl.i < 0x1fff; varAl.i++);  
  29   1      }
  30          /************************************************
  31          函 数 名: SDCIF_Init()
  32          功    能:SD Host初始化
  33          说    明:
  34          调    用:
  35          全局变量:
  36          入口参数:无
  37          出口参数:无
  38          返 回 值:无
  39          ************************************************/
  40          void SDCIF_Init(void)
  41          {                                
  42   1              SDH_CLOCK = 0x03;//32分频
  43   1              SDH_DMA_CS = 0x05;//SRAM5
  44   1              SDIFCON0 = CLK_EN;//clock enable
  45   1              BLKCNT11_08 = 0;
  46   1              BLKCNT07_00 = 0;
  47   1              BLKLEN11_08 = 0x02;
  48   1              BLKLEN07_00 = 0x00;
  49   1              DATACON = 0x00;
  50   1              DTIMER15_08 = 0xFF;
  51   1              DTIMER07_00 = 0xFF;
  52   1      }
  53          /************************************************
  54          函 数 名: GetSDMemoryOCR()
  55          功    能:获得SD卡Operating Conditions Register
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 2   

  56          说    明:SDCIF_IF:  0 -> SD Memory,1 -> SDIO,2 --> MMC
  57          调    用:
  58          全局变量:RCA, OCR, SDCIF_IF
  59          入口参数:无
  60          出口参数:无
  61          返 回 值:OK or KO
  62          ************************************************/
  63          bit GetSDMemoryOCR(void)
  64          {
  65   1              bit flag = 0;
  66   1              SDCIF_CMD0();
  67   1      
  68   1              SDVar.RCA[1] = 0;
  69   1              SDVar.RCA[0] = 0;
  70   1      
  71   1              SDVar.OCR[3] = 0;
  72   1              SDVar.OCR[2] = 0;
  73   1              SDVar.OCR[1] = 0;
  74   1              SDVar.OCR[0] = 0;
  75   1              do
  76   1              {
  77   2              if(SDCIF_CMD55())
  78   2              {
  79   3                      if(SDCIF_ACMD41())
  80   3                      {
  81   4                              SDVar.OCR[3] = RESP119_112 & 0x7F;
  82   4                              SDVar.OCR[2] = RREP111_104;
  83   4                              SDVar.OCR[1] = RREP103_096;
  84   4                              SDVar.OCR[0] = RREP095_088;
  85   4                              }
  86   3                      else
  87   3                              {
  88   4                              flag = 1;
  89   4                              break;
  90   4                              }
  91   3              }
  92   2              else
  93   2                      {
  94   3                              flag = 1;
  95   3                              break;
  96   3                      }
  97   2              }while(!(RESP119_112 & 0x80));
  98   1              SDVar.SDCIF_IF = 0;//0 -> SD Memory
  99   1      
 100   1              //MMC
 101   1              if(!flag)
 102   1              return OK;
 103   1              else
 104   1              {
 105   2              SDCIF_CMD0();
 106   2              SDVar.OCR[3] = 0;
 107   2                      SDVar.OCR[2] = 0;
 108   2                      SDVar.OCR[1] = 0;
 109   2                      SDVar.OCR[0] = 0;
 110   2                      do
 111   2                      {
 112   3                              if(SDCIF_CMD1())
 113   3                              {
 114   4                              SDVar.OCR[3] = RESP119_112 & 0x7F;
 115   4                              SDVar.OCR[2] = RREP111_104;
 116   4                              SDVar.OCR[1] = RREP103_096;
 117   4                              SDVar.OCR[0] = RREP095_088;
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 3   

 118   4                              }
 119   3                              else
 120   3                              return KO;
 121   3              }while(!(RESP119_112 & 0x80));
 122   2                      SDVar.SDCIF_IF = 2;//2 --> MMC
 123   2                      return OK;
 124   2              }
 125   1      }
 126          /************************************************
 127          函 数 名: SDMemoryCardInit()
 128          功    能:SD卡初始化
 129          说    明:
 130          调    用:
 131          全局变量:BusBits
 132          入口参数:无
 133          出口参数:无
 134          返 回 值:无
 135          ************************************************/
 136          void SDMemoryCardInit(void)
 137          {
 138   1        if(!SDCIF_CMD2())
 139   1        {
 140   2          if(SDVar.SDCIF_IF == 2)
 141   2              {
 142   3                SDH_CLOCK = 0x19;
 143   3                SYSDelay();
 144   3                GetSDMemoryOCR();
 145   3                if(!SDCIF_CMD2())
 146   3                {
 147   4                  SDH_CLOCK = 0x7F;
 148   4                      SYSDelay();
 149   4                  GetSDMemoryOCR();
 150   4                  SDCIF_CMD2();
 151   4                }
 152   3              }
 153   2        }
 154   1      
 155   1        SDCIF_CMD3();
 156   1      
 157   1        SDCIF_CMD09();
 158   1        SDCIF_SDIOCMD7();
 159   1      
 160   1        if(!SDVar.SDCIF_IF)
 161   1        {
 162   2          SDCIF_CMD55();
 163   2              SDVar.BusBits = 2;//2 -> 4-bit bus
 164   2              SDCIF_ACMD06();//set bus wide
 165   2              /*if(SDVar.ErrVal)
 166   2              {
 167   2                //while(P1_6);
 168   2                SDIFCON0 = 0x00;
 169   2                SYSDelay();
 170   2            (*(void(*)())0)();
 171   2              }*/
 172   2        }
 173   1        SDH_CLOCK = CLK_SEL;//system clock
 174   1      
 175   1        DTIMER15_08 = 0x00;
 176   1        DTIMER07_00 = 0x2E;
 177   1      }
 178          /************************************************
 179          函 数 名: SDCIF_CMD0()
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 4   

 180          功    能:Resets all cards to Idle State
 181          说    明:
 182          调    用:
 183          全局变量:
 184          入口参数:无
 185          出口参数:无
 186          返 回 值:无
 187          ************************************************/
 188          //复位SD卡,进入空闲状态
 189          void SDCIF_CMD0(void)
 190          {
 191   1        //ARG31_24 = 0;//argument dont't care
 192   1        //ARG23_16 = 0;
 193   1        //ARG15_08 = 0;
 194   1        //ARG07_00 = 0;
 195   1        CMDCON = 0;
 196   1        CMDINDEX = GO_IDLE_STATE;
 197   1        while(!(STATUS07_00 & CMDSEND));
 198   1        STATUS07_00 = 0xFF;
 199   1      }
 200          /************************************************
 201          函 数 名: SDCIF_CMD1()
 202          功    能:ask MMC to send their Operation Conditions
 203          说    明:
 204          调    用:
 205          全局变量:OCR
 206          入口参数:无
 207          出口参数:无
 208          返 回 值:OK or KO
 209          ************************************************/
 210          bit SDCIF_CMD1(void)// MMC card used
 211          {
 212   1        ARG31_24 = SDVar.OCR[3];//argument = OCR
 213   1        ARG23_16 = SDVar.OCR[2];
 214   1        ARG15_08 = SDVar.OCR[1];
 215   1        ARG07_00 = SDVar.OCR[0];
 216   1        CMDCON = WAITRSP;
 217   1        CMDINDEX = SEND_OP_COND;
 218   1        while(!(STATUS07_00 & CMDSEND));
 219   1        while(!(STATUS07_00 & RSPRXVP))
 220   1        {
 221   2          if((STATUS07_00 & RSPTIMEOUT))
 222   2              {
 223   3                STATUS07_00 = 0xFF;
 224   3                return KO;
 225   3              }
 226   2        }
 227   1        STATUS07_00 = 0xFF;
 228   1        return OK;
 229   1      }
 230          /************************************************
 231          函 数 名: SDCIF_CMD2()
 232          功    能:Asks any card to send their CID numbers on the CMD line
 233          说    明:
 234          调    用:
 235          全局变量:
 236          入口参数:无
 237          出口参数:无
 238          返 回 值:OK or KO
 239          ************************************************/
 240          //获得CID(card identification)  进入识别状态
 241          bit SDCIF_CMD2(void)
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 5   

 242          {
 243   1        //argument dont't care
 244   1      
 245   1        CMDCON = (LONGRSP | WAITRSP);
 246   1        CMDINDEX = ALL_SEND_CID;
 247   1        while(!(STATUS07_00 & CMDSEND));
 248   1        while(!(STATUS07_00 & RSPRXVP))
 249   1        {
 250   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 251   2              {
 252   3                STATUS07_00 = 0xFF;
 253   3                return KO;
 254   3                break;
 255   3              }
 256   2        }
 257   1        STATUS07_00 = 0xFF;
 258   1        return OK;
 259   1      }
 260          /************************************************
 261          函 数 名: SDCIF_CMD3()
 262          功    能:Asks the card to publish a new relative address
 263          说    明:get RCA
 264          调    用:
 265          全局变量:RCA
 266          入口参数:无
 267          出口参数:无
 268          返 回 值:OK or KO
 269          ************************************************/
 270          //获得RCA(relative card address)
 271          bit SDCIF_CMD3(void)
 272          {
 273   1        //argument dont't care if SD
 274   1        if(SDVar.SDCIF_IF)//MMC or SDIO
 275   1        {
 276   2          SDVar.RCA[1] = 0;
 277   2              SDVar.RCA[0] = 1;
 278   2              ARG31_24 = SDVar.RCA[1];
 279   2          ARG23_16 = SDVar.RCA[0];
 280   2          ARG15_08 = 0;
 281   2          ARG07_00 = 0;
 282   2        }
 283   1        CMDCON = WAITRSP;
 284   1        CMDINDEX = SEND_RCA;
 285   1        while(!(STATUS07_00 & CMDSEND));
 286   1        while(!(STATUS07_00 & RSPRXVP))
 287   1        {
 288   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 289   2              {
 290   3                STATUS07_00 = 0xFF;

⌨️ 快捷键说明

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