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

📄 sd.lis

📁 自制MP3程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00CC 0E940000          xcall _delay_nus
 00D0                   .dbline 71
 00D0           ;    for (i=0;i<0x0f;i++) 
 00D0 AA24              clr R10
 00D2 04C0              xjmp L13
 00D4           L10:
 00D4                   .dbline 72
 00D4                   .dbline 73
 00D4 0FEF              ldi R16,255
 00D6 0E940000          xcall _Write_Byte_SPI
 00DA                   .dbline 74
 00DA           L11:
 00DA                   .dbline 71
 00DA A394              inc R10
 00DC           L13:
 00DC                   .dbline 71
 00DC 8A2D              mov R24,R10
 00DE 8F30              cpi R24,15
 00E0 C8F3              brlo L10
 00E2                   .dbline 76
 00E2           ;    {
 00E2           ;       Write_Byte_SPI(0xff); //send 74 clock at least!!!
 00E2           ;    }
 00E2           ;    //Send Command CMD0 to MMC/SD Card
 00E2           ;    retry=0;
 00E2 EE24              clr R14
 00E4           L14:
 00E4                   .dbline 79
 00E4           ;    
 00E4           ;    do
 00E4           ;    { //retry 200 times to send CMD0 command 
 00E4                   .dbline 80
 00E4           ;      temp=SD_Write_Command(0,0);
 00E4 40E0              ldi R20,0
 00E6 50E0              ldi R21,0
 00E8 60E0              ldi R22,0
 00EA 70E0              ldi R23,0
 00EC 6883              std y+0,R22
 00EE 7983              std y+1,R23
 00F0 9A01              movw R18,R20
 00F2 0027              clr R16
 00F4 87DF              xcall _SD_Write_Command
 00F6 C02E              mov R12,R16
 00F8                   .dbline 81
 00F8           ;      retry++;
 00F8 E394              inc R14
 00FA                   .dbline 82
 00FA           ;      if(retry==100) 
 00FA 8E2D              mov R24,R14
 00FC 8436              cpi R24,100
 00FE 01F4              brne L17
 0100                   .dbline 83
 0100           ;      { 
 0100                   .dbline 84
 0100           ;       ;//CMD0 Error!
 0100                   .dbline 85
 0100           ;      }
 0100           L17:
 0100                   .dbline 86
 0100           ;    } 
 0100           L15:
 0100                   .dbline 87
 0100           ;    while(temp!=1);  
 0100 8C2D              mov R24,R12
 0102 8130              cpi R24,1
 0104 79F7              brne L14
 0106                   .dbline 90
 0106           ;    
 0106           ;    //Send Command CMD1 to MMC/SD-Card
 0106           ;    retry=0;
 0106 EE24              clr R14
 0108           L19:
 0108                   .dbline 92
 0108           ;    do
 0108           ;    { //retry 100 times to send CMD1 command 
 0108                   .dbline 93
 0108           ;      temp=SD_Write_Command(1,0);
 0108 40E0              ldi R20,0
 010A 50E0              ldi R21,0
 010C 60E0              ldi R22,0
 010E 70E0              ldi R23,0
 0110 6883              std y+0,R22
 0112 7983              std y+1,R23
 0114 9A01              movw R18,R20
 0116 01E0              ldi R16,1
 0118 75DF              xcall _SD_Write_Command
 011A C02E              mov R12,R16
 011C                   .dbline 94
 011C           ;      retry++;
 011C E394              inc R14
 011E                   .dbline 95
 011E           ;      if(retry==100) 
 011E 8E2D              mov R24,R14
 0120 8436              cpi R24,100
 0122 01F4              brne L22
 0124                   .dbline 96
 0124           ;      { 
 0124                   .dbline 97
 0124           ;      ;
 0124                   .dbline 98
 0124           ;      }
 0124           L22:
 0124                   .dbline 99
 0124           ;    } 
 0124           L20:
 0124                   .dbline 100
 0124           ;    while(temp!=0); 
 0124 CC20              tst R12
 0126 81F7              brne L19
 0128                   .dbline 101
 0128           ;    retry=0; 
 0128 EE24              clr R14
 012A                   .dbline 102
 012A           ;     SD_Write_Command(16,512);     //设置一次读写BLOCK的长度为512个字节
 012A 40E0              ldi R20,0
 012C 52E0              ldi R21,2
 012E 60E0              ldi R22,0
 0130 70E0              ldi R23,0
 0132 6883              std y+0,R22
 0134 7983              std y+1,R23
 0136 9A01              movw R18,R20
 0138 00E1              ldi R16,16
 013A 64DF              xcall _SD_Write_Command
 013C                   .dbline 104
 013C           ;   
 013C           ;    MMC_PORT|=MMC_CS_PIN;   //MMC_CS_PIN=1;  //set MMC_Chip_Select to high 
 013C C09A              sbi 0x18,0
 013E                   .dbline 105
 013E           ;    return(0); //All commands have been taken.
 013E 0027              clr R16
 0140                   .dbline -2
 0140           L9:
 0140 2296              adiw R28,2
 0142 0E940000          xcall pop_gset5
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbsym r i 10 c
 0148                   .dbsym r temp 12 c
 0148                   .dbsym r retry 14 c
 0148                   .dbend
 0148                   .dbfunc e SD_Read_Block _SD_Read_Block fc
 0148           ;           temp -> R20
 0148           ;              i -> R22,R23
 0148           ;        address -> y+6
                        .even
 0148           _SD_Read_Block::
 0148 0E940000          xcall push_arg4
 014C 0E940000          xcall push_gset2
 0150 2297              sbiw R28,2
 0152                   .dbline -1
 0152                   .dbline 111
 0152           ; } 
 0152           ; //****************************************************************************
 0152           ; //从SD卡读一个扇区  Return 0 if no Error.
 0152           ; //****************************************************************************
 0152           ; uchar SD_Read_Block(unsigned long address)
 0152           ; {  
 0152                   .dbline 112
 0152           ;    uchar temp=0;uint i=0;
 0152 4427              clr R20
 0154                   .dbline 112
 0154 6627              clr R22
 0156 7727              clr R23
 0158                   .dbline 113
 0158           ;    reading=1; 
 0158 81E0              ldi R24,1
 015A 80930000          sts _reading,R24
 015E                   .dbline 114
 015E           ;    temp=SD_Write_Command(17,address);     //读出RESPONSE     
 015E FE01              movw R30,R28
 0160 2680              ldd R2,z+6
 0162 3780              ldd R3,z+7
 0164 4084              ldd R4,z+8
 0166 5184              ldd R5,z+9
 0168 4882              std y+0,R4
 016A 5982              std y+1,R5
 016C 9101              movw R18,R2
 016E 01E1              ldi R16,17
 0170 49DF              xcall _SD_Write_Command
 0172 402F              mov R20,R16
 0174           L25:
 0174                   .dbline 116
 0174                   .dbline 116
 0174                   .dbline 116
 0174           L26:
 0174                   .dbline 115
 0174           ;    while (Read_Byte_SPI()!= 0xfe)
 0174 0E940000          xcall _Read_Byte_SPI
 0178 0E3F              cpi R16,254
 017A E1F7              brne L25
 017C                   .dbline 117
 017C           ;    {;}  //直到读取到了数据的开始头0XFE,才继续
 017C           ;    for(i=0; i<512; i++)
 017C 6627              clr R22
 017E 7727              clr R23
 0180 0AC0              xjmp L31
 0182           L28:
 0182                   .dbline 118
 0182                   .dbline 119
 0182 0E940000          xcall _Read_Byte_SPI
 0186 80E0              ldi R24,<_BUFFER
 0188 90E0              ldi R25,>_BUFFER
 018A FB01              movw R30,R22
 018C E80F              add R30,R24
 018E F91F              adc R31,R25
 0190 0083              std z+0,R16
 0192                   .dbline 120
 0192           L29:
 0192                   .dbline 117
 0192 6F5F              subi R22,255  ; offset = 1
 0194 7F4F              sbci R23,255
 0196           L31:
 0196                   .dbline 117
 0196 6030              cpi R22,0
 0198 E2E0              ldi R30,2
 019A 7E07              cpc R23,R30
 019C 90F3              brlo L28
 019E                   .dbline 121
 019E           ;       {
 019E           ;       BUFFER[i]=Read_Byte_SPI();
 019E           ;       }
 019E           ;    Read_Byte_SPI();//CRC - Byte 
 019E 0E940000          xcall _Read_Byte_SPI
 01A2                   .dbline 122
 01A2           ;    Read_Byte_SPI();//CRC - Byte
 01A2 0E940000          xcall _Read_Byte_SPI
 01A6                   .dbline 123
 01A6           ;    reading=0; 
 01A6 2224              clr R2
 01A8 20920000          sts _reading,R2
 01AC                   .dbline 124
 01AC           ;    MMC_PORT|=MMC_CS_PIN;        //关闭SD卡
 01AC C09A              sbi 0x18,0
 01AE                   .dbline 125
 01AE           ;    return(temp);
 01AE 042F              mov R16,R20
 01B0                   .dbline -2
 01B0           L24:
 01B0 2296              adiw R28,2
 01B2 0E940000          xcall pop_gset2
 01B6 2496              adiw R28,4
 01B8                   .dbline 0 ; func end
 01B8 0895              ret
 01BA                   .dbsym r temp 20 c
 01BA                   .dbsym r i 22 i
 01BA                   .dbsym l address 6 l
 01BA                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\V3U~1\sd\M64-SD卡MP3程序\sd.c
 0000           _BUFFER::
 0000                   .blkb 512
 0200                   .dbsym e BUFFER _BUFFER A[512:512]c

⌨️ 快捷键说明

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