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

📄 sd.lst

📁 mp3播放器
💻 LST
📖 第 1 页 / 共 5 页
字号:
 291   3                return KO;
 292   3              }
 293   2        }
 294   1        STATUS07_00 = 0xFF;
 295   1      
 296   1        if(!SDVar.SDCIF_IF)//SD
 297   1        {
 298   2          SDVar.RCA[1] = RESP119_112;//get RCA
 299   2              SDVar.RCA[0] = RREP111_104;
 300   2        }
 301   1        //SDVar.CardStatus[1] = RREP103_096;
 302   1        //SDVar.CardStatus[0] = RREP095_088;
 303   1      
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 6   

 304   1        //ChkCurrentState();
 305   1        return OK;
 306   1      }
 307          /************************************************
 308          函 数 名: SDCIF_SDIOCMD7()
 309          功    能:选择/释放SD卡(RCA)
 310          说    明:
 311          调    用:
 312          全局变量:RCA
 313          入口参数:无
 314          出口参数:无
 315          返 回 值:OK or KO
 316          ************************************************/
 317          bit SDCIF_SDIOCMD7(void)
 318          {
 319   1        ARG31_24 = SDVar.RCA[1];//argument = RCA, form CMD3
 320   1        ARG23_16 = SDVar.RCA[0];
 321   1        //ARG15_08 = 0;//argument dont't care
 322   1        //ARG07_00 = 0;
 323   1        CMDCON = WAITRSP;
 324   1        CMDINDEX = SELECT_DESELECT;
 325   1        while(!(STATUS07_00 & CMDSEND));
 326   1        while(!(STATUS07_00 & RSPRXVP))
 327   1        {
 328   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 329   2              {
 330   3                STATUS07_00 = 0xFF;
 331   3                return KO;
 332   3              }
 333   2        }
 334   1        STATUS07_00 = 0xFF;
 335   1        return OK;
 336   1      }
 337          /************************************************
 338          函 数 名: SDCIF_CMD09()
 339          功    能:Addressed card sends its card-specific data (CSD) on the CMD line
 340          说    明:
 341          调    用:
 342          全局变量:RCA
 343          入口参数:无
 344          出口参数:无
 345          返 回 值:OK or KO
 346          ************************************************/
 347          bit SDCIF_CMD09(void)
 348          {
 349   1        Byte  tmp;
 350   1              
 351   1        ARG31_24 = SDVar.RCA[1];//argument = RCA, form CMD3
 352   1        ARG23_16 = SDVar.RCA[0];
 353   1        //ARG15_08 = 0;//argument dont't care
 354   1        //ARG07_00 = 0;
 355   1        CMDCON = (LONGRSP | WAITRSP);
 356   1        CMDINDEX = SEND_CSD;
 357   1        while(!(STATUS07_00 & CMDSEND));
 358   1        while(!(STATUS07_00 & RSPRXVP))
 359   1        {
 360   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 361   2              {
 362   3                STATUS07_00 = 0xFF;
 363   3                return KO;
 364   3              }
 365   2        }
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 7   

 366   1        STATUS07_00 = 0xFF;
 367   1      
 368   1              ((Byte*)&sd_mem_size)[0] = 0;
 369   1        ((Byte*)&sd_mem_size)[1] = 0;
 370   1        ((Byte*)&sd_mem_size)[2] = RREP079_072 & CSD_MSK_CSH;
 371   1        ((Byte*)&sd_mem_size)[3] = RREP071_064;
 372   1        sd_mem_size = sd_mem_size << 2;
 373   1        ((Byte*)&sd_mem_size)[3] |= ((RREP063_056 & CSD_MSK_CSL) >> 6);
 374   1        /* read C_SIZE_MULT */
 375   1        tmp = RREP055_048 << 1;
 376   1        tmp = (tmp | (RREP047_040 >> 7)) & CSD_MSK_CSM;
 377   1      
 378   1        sd_mem_size = ((sd_mem_size + 1) << (tmp + 2));
 379   1        sd_mem_size--;
 380   1              
 381   1        return OK;
 382   1      }
 383          /************************************************
 384          函 数 名: SDCIF_CMD10()
 385          功    能:Addressed card sends its card identification (CID) on the CMD line
 386          说    明:
 387          调    用:
 388          全局变量:RCA
 389          入口参数:无
 390          出口参数:无
 391          返 回 值:无
 392          ************************************************/
 393          /*void SDCIF_CMD10(void)
 394          {
 395            SDVar.ErrVal = 0;
 396            ARG31_24 = SDVar.RCA[1];//argument = RCA, form CMD3
 397            ARG23_16 = SDVar.RCA[0];
 398            //ARG15_08 = 0;//argument dont't care
 399            //ARG07_00 = 0;
 400            CMDCON = (LONGRSP | WAITRSP);
 401            CMDINDEX = SEND_CID;
 402            while(!(STATUS07_00 & CMDSEND));
 403            while(!(STATUS07_00 & RSPRXVP))
 404            {
 405              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 406                  {
 407                    SDVar.ErrVal = 1;
 408                //SYSDelay();
 409                    break;
 410                  }
 411            }
 412            STATUS07_00 = 0xFF;
 413          }
 414          /************************************************
 415          函 数 名: SDCIF_CMD12()
 416          功    能:Terminates a multiple block read/write operation
 417          说    明:
 418          调    用:
 419          全局变量:
 420          入口参数:无
 421          出口参数:无
 422          返 回 值:无
 423          ************************************************/
 424          bit SDCIF_CMD12(void)
 425          {
 426   1        //SDVar.ErrVal = 0;
 427   1        //argument dont't care
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 8   

 428   1        CMDCON = (STOP | WAITRSP);
 429   1        CMDINDEX = STOP_TRANSMISSION;
 430   1        while(!(STATUS07_00 & CMDSEND));
 431   1        while(!(STATUS07_00 & RSPRXVP))
 432   1        {
 433   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 434   2              {
 435   3                STATUS07_00 = 0xFF;
 436   3                return KO;
 437   3              }
 438   2        }
 439   1        STATUS07_00 = 0xFF;
 440   1        return OK;
 441   1      }
 442          /************************************************
 443          函 数 名: SDCIF_CMD13()
 444          功    能:Addressed card sends its status register
 445          说    明:
 446          调    用:
 447          全局变量:RCA
 448          入口参数:无
 449          出口参数:无
 450          返 回 值:无
 451          ************************************************/
 452          bit SDCIF_CMD13(void)
 453          {
 454   1        ARG31_24 = SDVar.RCA[1];//argument = RCA, form CMD3
 455   1        ARG23_16 = SDVar.RCA[0];
 456   1        //ARG15_08 = 0;//argument dont't care
 457   1        //ARG07_00 = 0;
 458   1        CMDCON = WAITRSP;
 459   1        CMDINDEX = SEND_STATUS;
 460   1        while(!(STATUS07_00 & CMDSEND));
 461   1        while(!(STATUS07_00 & RSPRXVP))
 462   1        {
 463   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 464   2              {
 465   3                STATUS07_00 = 0xFF;
 466   3                      STATUS15_08 = 0x03;
 467   3            return KO;
 468   3              }
 469   2        }
 470   1        STATUS07_00 = 0xFF;
 471   1              STATUS15_08 = 0x03;
 472   1        return OK;
 473   1      }
 474          /************************************************
 475          函 数 名: SDCIF_CMD16()
 476          功    能:Selects a block length (in bytes) for all following block commands (read and write)
 477          说    明:
 478          调    用:
 479          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
 480          入口参数:无
 481          出口参数:无
 482          返 回 值:无
 483          ************************************************/
 484          /*void SDCIF_CMD16(void)
 485          {
 486            SDVar.ErrVal = 0;
 487            ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])     = block length
 488            ARG23_16 = SDVar.FlashAddr[1];
 489            ARG15_08 = SDVar.FlashAddr[2];
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 9   

 490            ARG07_00 = SDVar.FlashAddr[3];
 491            CMDCON = WAITRSP;
 492            CMDINDEX = SET_BLOCKLEN;
 493            while(!(STATUS07_00 & CMDSEND));
 494          
 495            while(!(STATUS07_00 & RSPRXVP))
 496            {
 497              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 498                  {
 499                    SDVar.ErrVal = 1;
 500                    //STATUS07_00 = 0xFF;
 501                    //return;
 502                    break;
 503                  }
 504            }
 505            STATUS07_00 = 0xFF;
 506          }
 507          /************************************************
 508          函 数 名: SDCIF_CMD17()
 509          功    能:Reads a block of the size selected by the SET_BLOCKLEN command
 510          说    明:数据存放地址由SDH_DMA_CS决定
 511          调    用:
 512          全局变量:SD_lba(FlashAddr[3:0])
 513          入口参数:无
 514          出口参数:无
 515          返 回 值:OK or KO
 516          ************************************************/
 517          //读单块
 518          bit SDCIF_CMD17(void)
 519          {
 520   1        BLKLEN11_08 = 0x02;//SET_BLOCKLEN
 521   1        BLKLEN07_00 = 0x00;
 522   1        DATACON = XFER_MODE_0;//block read
 523   1        ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 524   1        ARG23_16 = SDVar.FlashAddr[1];
 525   1        ARG15_08 = SDVar.FlashAddr[2];
 526   1        ARG07_00 = SDVar.FlashAddr[3];
 527   1        CMDCON = (WAITRSP | DATA_WITH);
 528   1        CMDINDEX = READ_SINGLE_BLOCK;
 529   1        while(!(STATUS07_00 & CMDSEND));
 530   1      
 531   1        while(!(STATUS07_00 & RSPRXVP))
 532   1        {
 533   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 534   2              {
 535   3                STATUS07_00 = 0xFF;
 536   3                      STATUS15_08 = 0x03;
 537   3                return KO;
 538   3              }
 539   2        }
 540   1        //SDH_DMA_ACK &= ~DMA_ACK_F;
 541   1      
 542   1        while(!(STATUS07_00 & XFEREND))
 543   1        {
 544   2              if((STATUS07_00 & DTIMEOUT) || (STATUS07_00 & CRC16ERROR))
 545   2              {
 546   3                STATUS07_00 = 0xFF;
 547   3                      STATUS15_08 = 0x03;
 548   3                return KO;
 549   3              }
 550   2        }
 551   1        STATUS07_00 = 0xFF;
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 10  

 552   1              STATUS15_08 = 0x03;
 553   1      
 554   1              if(!SDCIF_CMD13())
 555   1                      return KO;
 556   1        return OK;
 557   1      }
 558          /************************************************
 559          函 数 名: SDCIF_CMD24()
 560          功    能:Writes a block of the size selected by the SET_BLOCKLEN command
 561          说    明:数据存放地址由SDH_DMA_CS决定
 562          调    用:
 563          全局变量:SD_lba(FlashAddr[3:0])
 564          入口参数:无
 565          出口参数:无
 566          返 回 值:OK or KO
 567          ************************************************/
 568          bit SDCIF_CMD24(void)
 569          {
 570   1        BLKLEN11_08 = 0x02;//SET_BLOCKLEN
 571   1        BLKLEN07_00 = 0x00;
 572   1        DATACON = XFER_MODE_1;//block write
 573   1        ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 574   1        ARG23_16 = SDVar.FlashAddr[1];
 575   1        ARG15_08 = SDVar.FlashAddr[2];
 576   1        ARG07_00 = SDVar.FlashAddr[3];
 577   1        CMDCON = (WAITRSP | DATA_WITH);
 578   1        CMDINDEX = WRITE_BLOCK;
 579   1        while(!(STATUS07_00 & CMDSEND));
 580   1      
 581   1        while(!(STATUS07_00 & RSPRXVP))
 582   1        {
 583   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 584   2              {
 585   3                STATUS07_00 = 0xFF;
 586   3            STATUS15_08 = BUSYEND;
 587   3                return KO;

⌨️ 快捷键说明

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