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

📄 sd.lst

📁 mp3播放器
💻 LST
📖 第 1 页 / 共 5 页
字号:
 588   3              }
 589   2        }
 590   1        while(!(STATUS07_00 & XFEREND))
 591   1        {
 592   2          if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
 593   2              {
 594   3                STATUS07_00 = 0xFF;
 595   3            STATUS15_08 = BUSYEND;
 596   3                return KO;
 597   3              }
 598   2        }
 599   1        SDH_DMA_ACK &= ~DMA_ACK_F;//DMA acknowledge flag
 600   1      
 601   1        STATUS07_00 = 0xFF;
 602   1        STATUS15_08 = BUSYEND;
 603   1        do
 604   1        {
 605   2          if(SDCIF_CMD13())
 606   2              {
 607   3            //ChkCurrentState();
 608   3            //if(SDVar.CardStatus[1] == 4)
 609   3                if(((RREP103_096 & 0X1E) >> 1) == 4)
 610   3                  return OK;
 611   3              }
 612   2        }
 613   1        while(1);
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 11  

 614   1      }
 615          /************************************************
 616          函 数 名: SDCIF_CMD27()
 617          功    能:Programming of the programmable bits of the CSD(128 bits)
 618          说    明:数据存放地址由SDH_DMA_CS决定
 619          调    用:
 620          全局变量:ErrVal
 621          入口参数:无
 622          出口参数:无
 623          返 回 值:无
 624          ************************************************/
 625          /*void SDCIF_CMD27(void)
 626          {
 627            SDVar.ErrVal = 0;
 628            BLKLEN11_08 = 0x00;//SET_BLOCKLEN
 629            BLKLEN07_00 = 128 / 8;
 630            DATACON = XFER_MODE_1;//block write
 631            //argument dont't care
 632            CMDCON = (WAITRSP | DATA_WITH);
 633            CMDINDEX = PROGRAM_CSD;
 634            while(!(STATUS07_00 & CMDSEND));
 635          
 636            while(!(STATUS07_00 & RSPRXVP))
 637            {
 638              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 639                  {
 640                    SDVar.ErrVal = 1;
 641                    break;
 642                  }
 643            }
 644            while(!(STATUS07_00 & XFEREND))
 645            {
 646              if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
 647                  {
 648                    SDVar.ErrVal = 1;
 649                    break;
 650                  }
 651            }
 652            while(!(STATUS15_08 & BUSYEND));
 653            SDH_DMA_ACK &= ~DMA_ACK_F;//DMA acknowledge flag
 654          
 655            STATUS07_00 = 0xFF;
 656            STATUS15_08 = BUSYEND;
 657          }
 658          /************************************************
 659          函 数 名: SDCIF_CMD28()
 660          功    能:This command sets the write protection bit of the addressed group. 
 661                    The properties of write protection are coded in the card specific data(WP_GRP_SIZE)
 662          说    明:
 663          调    用:
 664          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
 665          入口参数:无
 666          出口参数:无
 667          返 回 值:无
 668          ************************************************/
 669          /*void SDCIF_CMD28(void)
 670          {
 671            SDVar.ErrVal = 0;
 672            DATACON = XFER_MODE_2;//check busy
 673            ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 674            ARG23_16 = SDVar.FlashAddr[1];
 675            ARG15_08 = SDVar.FlashAddr[2];
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 12  

 676            ARG07_00 = SDVar.FlashAddr[3];
 677            CMDCON = (WAITRSP | DATA_WITH);
 678            CMDINDEX = SET_WRITE_PROT;
 679            while(!(STATUS07_00 & CMDSEND));
 680          
 681            while(!(STATUS07_00 & RSPRXVP))
 682            {
 683              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 684                  {
 685                    SDVar.ErrVal = 1;
 686                    break;
 687                  }
 688            }
 689            while(!(STATUS15_08 & BUSYEND));
 690          
 691            STATUS07_00 = 0xFF;
 692            STATUS15_08 = BUSYEND;
 693          }
 694          /************************************************
 695          函 数 名: SDCIF_CMD29()
 696          功    能:This command clears the write protection bit of the addressed group
 697          说    明:
 698          调    用:
 699          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
 700          入口参数:无
 701          出口参数:无
 702          返 回 值:无
 703          ************************************************/
 704          /*void SDCIF_CMD29(void)
 705          {
 706            SDVar.ErrVal = 0;
 707            DATACON = XFER_MODE_2;//check busy
 708            ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 709            ARG23_16 = SDVar.FlashAddr[1];
 710            ARG15_08 = SDVar.FlashAddr[2];
 711            ARG07_00 = SDVar.FlashAddr[3];
 712            CMDCON = (WAITRSP | DATA_WITH);
 713            CMDINDEX = CLR_WRITE_PROT;
 714            while(!(STATUS07_00 & CMDSEND));
 715          
 716            while(!(STATUS07_00 & RSPRXVP))
 717            {
 718              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 719                  {
 720                    SDVar.ErrVal = 1;
 721                    break;
 722                  }
 723            }
 724            while(!(STATUS15_08 & BUSYEND));
 725          
 726            STATUS07_00 = 0xFF;
 727            STATUS15_08 = BUSYEND;
 728          }
 729          /************************************************
 730          函 数 名: SDCIF_CMD30()
 731          功    能:This command asks the card to send the status of the write protection bits
 732          说    明:数据存放地址由SDH_DMA_CS决定
 733          调    用:
 734          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
 735          入口参数:无
 736          出口参数:无
 737          返 回 值:无
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 13  

 738          ************************************************/
 739          /*void SDCIF_CMD30(void)
 740          {
 741            SDVar.ErrVal = 0;
 742            BLKLEN11_08 = 0x00;//SET_BLOCKLEN
 743            BLKLEN07_00 = 4;
 744            DATACON = XFER_MODE_0;//block read
 745            ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 746            ARG23_16 = SDVar.FlashAddr[1];
 747            ARG15_08 = SDVar.FlashAddr[2];
 748            ARG07_00 = SDVar.FlashAddr[3];
 749            CMDCON = (WAITRSP | DATA_WITH);
 750            CMDINDEX = SEND_WRITE_PROT;
 751            while(!(STATUS07_00 & CMDSEND));
 752          
 753            while(!(STATUS07_00 & RSPRXVP))
 754            {
 755              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 756                  {
 757                    SDVar.ErrVal = 1;
 758                    break;
 759                  }
 760            }
 761          
 762            while(!(STATUS07_00 & XFEREND))
 763            {
 764              if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
 765                  {
 766                    SDVar.ErrVal = 1;
 767                    break;
 768                  }
 769            }
 770            STATUS07_00 = 0xFF;
 771          }
 772          /************************************************
 773          函 数 名: SDCIF_CMD32()
 774          功    能:Sets the address of the first write block to be erased
 775          说    明:
 776          调    用:
 777          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
 778          入口参数:无
 779          出口参数:无
 780          返 回 值:无
 781          ************************************************/
 782          /*void SDCIF_CMD32(void)
 783          {
 784            SDVar.ErrVal = 0;
 785            ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 786            ARG23_16 = SDVar.FlashAddr[1];
 787            ARG15_08 = SDVar.FlashAddr[2];
 788            ARG07_00 = SDVar.FlashAddr[3];
 789            CMDCON = WAITRSP;
 790            CMDINDEX = ERASE_WR_BLK_START;
 791            while(!(STATUS07_00 & CMDSEND));
 792          
 793            while(!(STATUS07_00 & RSPRXVP))
 794            {
 795              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 796                  {
 797                    SDVar.ErrVal = 1;
 798                    break;
 799                  }
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 14  

 800            }
 801            STATUS07_00 = 0xFF;
 802          }
 803          /************************************************
 804          函 数 名: SDCIF_CMD33()
 805          功    能:Sets the address of the last write block of the continuous range to be erased
 806          说    明:
 807          调    用:
 808          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
 809          入口参数:无
 810          出口参数:无
 811          返 回 值:无
 812          ************************************************/
 813          /*void SDCIF_CMD33(void)
 814          {
 815            SDVar.ErrVal = 0;
 816            ARG31_24 = SDVar.FlashAddr[0];//argument = SD_lba(FlashAddr[3:0])
 817            ARG23_16 = SDVar.FlashAddr[1];
 818            ARG15_08 = SDVar.FlashAddr[2];
 819            ARG07_00 = SDVar.FlashAddr[3];
 820            CMDCON = WAITRSP;
 821            CMDINDEX = ERASE_WR_BLK_END;
 822            while(!(STATUS07_00 & CMDSEND));
 823          
 824            while(!(STATUS07_00 & RSPRXVP))
 825            {
 826              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 827                  {
 828                    SDVar.ErrVal = 1;
 829                    break;
 830                  }
 831            }
 832            STATUS07_00 = 0xFF;
 833          }
 834          /************************************************
 835          函 数 名: SDCIF_CMD38()
 836          功    能:Erases all previously selected write blocks
 837          说    明:
 838          调    用:
 839          全局变量:ErrVal
 840          入口参数:无
 841          出口参数:无
 842          返 回 值:无
 843          ************************************************/
 844          /*void SDCIF_CMD38(void)
 845          {
 846            SDVar.ErrVal = 0;
 847            //argument dont't care
 848            DATACON = XFER_MODE_2;//check busy
 849            CMDCON = WAITRSP;
 850            CMDINDEX = ERASE;
 851            while(!(STATUS07_00 & CMDSEND));
 852          
 853            while(!(STATUS07_00 & RSPRXVP))
 854            {
 855              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 856                  {
 857                    SDVar.ErrVal = 1;
 858                    break;
 859                  }
 860            }
 861            while(!(STATUS15_08 & BUSYEND));
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 15  

 862            STATUS07_00 = 0xFF;
 863            STATUS15_08 = BUSYEND;
 864          }
 865          /************************************************
 866          函 数 名: SDCIF_CMD42()
 867          功    能:Used to set/reset the password or lock/unlock the card
 868                    The size of the data block is set by the SET_BLOCK_LEN command
 869          说    明:数据存放地址由SDH_DMA_CS决定
 870          调    用:
 871          全局变量:ErrVal
 872          入口参数:BlockLen: 块长度, 由CMD16设置
 873          出口参数:无
 874          返 回 值:无
 875          ************************************************/
 876          /*void SDCIF_CMD42(unsigned int BlockLen)
 877          {
 878            SDVar.ErrVal = 0;
 879            BLKLEN11_08 = (Uint8)(BlockLen >> 8);//SET_BLOCKLEN
 880            BLKLEN07_00 = (Uint8)BlockLen;
 881            DATACON = XFER_MODE_1;//block write
 882            //argument dont't care
 883            CMDCON = (WAITRSP | DATA_WITH);
 884            CMDINDEX = LOCK_UNLOCK;

⌨️ 快捷键说明

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