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

📄 sd.lst

📁 mp3播放器
💻 LST
📖 第 1 页 / 共 5 页
字号:
 885            while(!(STATUS07_00 & CMDSEND));
 886          
 887            while(!(STATUS07_00 & RSPRXVP))
 888            {
 889              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 890                  {
 891                    SDVar.ErrVal = 1;
 892                    break;
 893                  }
 894            }
 895            while(!(STATUS07_00 & XFEREND))
 896            {
 897              if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
 898                  {
 899                    SDVar.ErrVal = 1;
 900                    break;
 901                  }
 902            }
 903            while(!(STATUS15_08 & BUSYEND));
 904            SDH_DMA_ACK &= ~DMA_ACK_F;//DMA acknowledge flag
 905          
 906            STATUS07_00 = 0xFF;
 907            STATUS15_08 = BUSYEND;
 908          }
 909          /************************************************
 910          函 数 名: SDCIF_CMD55()
 911          功    能:Indicates to the card that the next command is an
 912                    application specific command rather than a
 913                    standard command
 914          说    明:
 915          调    用:
 916          全局变量:RCA
 917          入口参数:无
 918          出口参数:无
 919          返 回 值:无
 920          ************************************************/
 921          bit SDCIF_CMD55(void)
 922          {
 923   1        ARG31_24 = SDVar.RCA[1];//argument = RCA
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 16  

 924   1        ARG23_16 = SDVar.RCA[0];
 925   1        ARG15_08 = 0;
 926   1        ARG07_00 = 0;
 927   1        CMDCON = WAITRSP;
 928   1        CMDINDEX = APP_CMD;
 929   1        while(!(STATUS07_00 & CMDSEND));
 930   1        while(!(STATUS07_00 & RSPRXVP))
 931   1        {
 932   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 933   2              {
 934   3                STATUS07_00 = 0xFF;
 935   3                return KO;
 936   3              }
 937   2        }
 938   1        STATUS07_00 = 0xFF;
 939   1        return OK;
 940   1      }
 941          
 942          /************************************************
 943          函 数 名: SDCIF_ACMD06()
 944          功    能:Defines the data bus width('00' = 1bit or '10' = 4 bits bus)to be used for data transfer
 945          说    明:用于SD卡
 946          调    用:
 947          全局变量:ErrVal, BusBits
 948          入口参数:无
 949          出口参数:无
 950          返 回 值:无
 951          ************************************************/
 952          //设置SD卡数据总线宽度
 953          bit SDCIF_ACMD06(void)
 954          {
 955   1        ARG31_24 = 0;
 956   1        ARG23_16 = 0;
 957   1        ARG15_08 = 0;
 958   1        ARG07_00 = SDVar.BusBits;//argument = bus wide
 959   1        CMDCON = WAITRSP;
 960   1        CMDINDEX = SET_BUS_WIDTH;
 961   1        while(!(STATUS07_00 & CMDSEND));
 962   1        while(!(STATUS07_00 & RSPRXVP))
 963   1        {
 964   2          if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
 965   2              {
 966   3                STATUS07_00 = 0xFF;
 967   3                return KO;
 968   3              }
 969   2        }
 970   1        STATUS07_00 = 0xFF;
 971   1      
 972   1        if(SDVar.BusBits == 2)
 973   1      //    SDIFCON0 = (WIDEBUS | CLK_EN );
 974   1                SDIFCON0 = (WIDEBUS | CLK_EN | HISPEED );
 975   1        else
 976   1          //SDIFCON0 = WIDEBUS;
 977   1          SDIFCON0 = CLK_EN;
 978   1        return OK;
 979   1      }
 980          /************************************************
 981          函 数 名: SDCIF_ACMD13()
 982          功    能:Send the SD Card status(512 bits)
 983          说    明:数据存放地址由SDH_DMA_CS决定
 984          调    用:必须先调用SDCIF_CMD55()
 985          全局变量:ErrVal
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 17  

 986          入口参数:无
 987          出口参数:无
 988          返 回 值:无
 989          ************************************************/
 990          /*void SDCIF_ACMD13(void)
 991          {
 992            SDVar.ErrVal = 0;
 993            //argument dont't care
 994            BLKLEN11_08 = 0x00;//SET_BLOCKLEN
 995            BLKLEN07_00 = 512 / 8;
 996            CMDCON = (WAITRSP | DATA_WITH);
 997            CMDINDEX = SD_STATUS;
 998            while(!(STATUS07_00 & CMDSEND));
 999            while(!(STATUS07_00 & RSPRXVP))
1000            {
1001              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
1002                  {
1003                    SDVar.ErrVal = 1;
1004                    STATUS07_00 = 0xFF;
1005                    return;
1006                  }
1007            }
1008            while(!(STATUS07_00 & XFEREND))
1009            {
1010              if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
1011                  {
1012                    SDVar.ErrVal = 1;
1013                    STATUS07_00 = 0xFF;
1014                    return;
1015                  }
1016            }
1017            STATUS07_00 = 0xFF;
1018          }
1019          /************************************************
1020          函 数 名: SDCIF_ACMD22()
1021          功    能:Send the number of the written (without errors) write blocks
1022                    Responds with 32 bits + CRC data block
1023          说    明:数据存放地址由SDH_DMA_CS决定
1024          调    用:必须先调用SDCIF_CMD55()
1025          全局变量:ErrVal
1026          入口参数:无
1027          出口参数:无
1028          返 回 值:无
1029          ************************************************/
1030          /*void SDCIF_ACMD22(void)
1031          {
1032            SDVar.ErrVal = 0;
1033            //argument dont't care
1034            BLKLEN11_08 = 0x00;//SET_BLOCKLEN
1035            BLKLEN07_00 = 32 / 8;
1036            CMDCON = (WAITRSP | DATA_WITH);
1037            CMDINDEX = SEND_NUMBER_WR_BLOCKS;
1038            while(!(STATUS07_00 & CMDSEND));
1039            while(!(STATUS07_00 & RSPRXVP))
1040            {
1041              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
1042                  {
1043                    SDVar.ErrVal = 1;
1044                    STATUS07_00 = 0xFF;
1045                    return;
1046                  }
1047            }
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 18  

1048            while(!(STATUS07_00 & XFEREND))
1049            {
1050              if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
1051                  {
1052                    SDVar.ErrVal = 1;
1053                    STATUS07_00 = 0xFF;
1054                    return;
1055                  }
1056            }
1057            STATUS07_00 = 0xFF;
1058          }
1059          /************************************************
1060          函 数 名: SDCIF_ACMD41()
1061          功    能:Asks the accessed card to send its operating
1062                    condition register (OCR) content in the 
1063                            response on the CMD line
1064          说    明:
1065          调    用:必须先调用SDCIF_CMD55()
1066          全局变量:ErrVal, OCR
1067          入口参数:无
1068          出口参数:无
1069          返 回 值:无
1070          ************************************************/
1071          bit SDCIF_ACMD41(void)
1072          {
1073   1        //SDVar.ErrVal = 0;
1074   1        ARG31_24 = SDVar.OCR[3];//argument = OCR
1075   1        ARG23_16 = SDVar.OCR[2];
1076   1        ARG15_08 = SDVar.OCR[1];
1077   1        ARG07_00 = SDVar.OCR[0];
1078   1        CMDCON = WAITRSP;
1079   1        CMDINDEX = SD_SEND_OP_COND;
1080   1        while(!(STATUS07_00 & CMDSEND));
1081   1        while(!(STATUS07_00 & RSPRXVP))
1082   1        {
1083   2          if((STATUS07_00 & RSPTIMEOUT))
1084   2              {
1085   3                STATUS07_00 = 0xFF;
1086   3                return KO;
1087   3              }
1088   2        }
1089   1        STATUS07_00 = 0xFF;
1090   1        return OK;
1091   1      }
1092          /************************************************
1093          函 数 名: SDCIF_ACMD51()
1094          功    能:Reads the SD Configuration Register (SCR)(64 bits)
1095          说    明:数据存放地址由SDH_DMA_CS决定
1096          调    用:必须先调用SDCIF_CMD55()
1097          全局变量:ErrVal
1098          入口参数:无
1099          出口参数:无
1100          返 回 值:无
1101          ************************************************/
1102          /*void SDCIF_ACMD51(void)
1103          {
1104            SDVar.ErrVal = 0;
1105            //argument dont't care
1106            //ARG31_24 = SDVar.OCR[3];
1107            //ARG23_16 = SDVar.OCR[2];
1108            //ARG15_08 = SDVar.OCR[1];
1109            //ARG07_00 = SDVar.OCR[0];
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 19  

1110            BLKLEN11_08 = 0x00;//SET_BLOCKLEN
1111            BLKLEN07_00 = 64 / 8;
1112            CMDCON = (WAITRSP | DATA_WITH);
1113            CMDINDEX = SEND_SCR;
1114            while(!(STATUS07_00 & CMDSEND));
1115            while(!(STATUS07_00 & RSPRXVP))
1116            {
1117              if((STATUS07_00 & RSPTIMEOUT)||(STATUS07_00 & CRC7ERROR))
1118                  {
1119                    SDVar.ErrVal = 1;
1120                    STATUS07_00 = 0xFF;
1121                    return;
1122                  }
1123            }
1124            while(!(STATUS07_00 & XFEREND))
1125            {
1126              if((STATUS07_00 & DTIMEOUT)||(STATUS07_00 & CRC16ERROR))
1127                  {
1128                    SDVar.ErrVal = 1;
1129                    STATUS07_00 = 0xFF;
1130                    return;
1131                  }
1132            }
1133            STATUS07_00 = 0xFF;
1134          }
1135          /************************************************
1136          函 数 名: ChkCurrentState()
1137          功    能:检查SD卡状态
1138          说    明:
1139          调    用:
1140          全局变量:CardStatus
1141          入口参数:无
1142          出口参数:无
1143          返 回 值:无
1144          ************************************************/
1145          /*void ChkCurrentState(void)
1146          {
1147            SDVar.CardStatus[1] = RREP103_096;
1148            SDVar.CardStatus[1] &= 0x1E;
1149            //
1150            SDVar.CardStatus[1] >>= 1;
1151          
1152            //
1153          }
1154          /************************************************
1155          函 数 名: SDHostRead512B_LBA
1156          功    能:从逻辑块地址开始读取512字节
1157          说    明:数据存放地址由SDH_DMA_CS决定
1158          调    用:
1159          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
1160          入口参数:无
1161          出口参数:无
1162          返 回 值:1 -> success, 0 -> failure
1163          ************************************************/
1164          bit SDHostRead512B_LBA(U32 logic_address, U8 dma_section)
1165          {
1166   1              SDH_DMA_CS = dma_section;
1167   1              SD_lba = logic_address << 9;
1168   1              if(SDCIF_CMD17())
1169   1                      return OK;
1170   1              else
1171   1                      return KO;
C51 COMPILER V8.08   SD                                                                    07/28/2007 11:42:15 PAGE 20  

1172   1      }
1173          /************************************************
1174          函 数 名: DMA_load_sector()
1175          功    能:从逻辑块地址开始读取512字节
1176          说    明:数据存放地址由SDH_DMA_CS决定
1177          调    用:
1178          全局变量:ErrVal, SD_lba(FlashAddr[3:0])
1179          入口参数:无
1180          出口参数:无
1181          返 回 值:1 -> success, 0 -> failure

⌨️ 快捷键说明

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