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

📄 sd.lis

📁 M16-Mp3.rar
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0162 4A2D              mov R20,R10
 0164                   .dbline 107
 0164           ;       return 0;//正常返回             //normal return
 0164 0027              clr R16
 0166                   .dbline -2
 0166           L11:
 0166                   .dbline 0 ; func end
 0166 2296              adiw R28,2
 0168 0C940000          xjmp pop_xgsetF00C
 016C                   .dbsym r retry 10 c
 016C                   .dbsym r r1 20 c
 016C                   .dbsym r i 22 c
 016C                   .dbend
 016C                   .dbfunc e SD_ReadBlock _SD_ReadBlock fc
 016C           ;             r1 -> R12
 016C           ;          retry -> R20,R21
 016C           ;              i -> R20,R21
 016C           ;         buffer -> R10,R11
 016C           ;         sector -> y+10
                        .even
 016C           _SD_ReadBlock::
 016C 0E940000          xcall push_arg4
 0170 0E940000          xcall push_xgsetF03C
 0174 2297              sbiw R28,2
 0176 AE84              ldd R10,y+14
 0178 BF84              ldd R11,y+15
 017A                   .dbline -1
 017A                   .dbline 120
 017A           ; }
 017A           ; 
 017A           ; 
 017A           ; 
 017A           ; //---------------------------------------------
 017A           ; //
 017A           ; // SD卡扇区读取函数 
 017A           ; // sector:扇区号
 017A           ; // buffer:数据缓存
 017A           ; //
 017A           ; //---------------------------------------------
 017A           ; uint8 SD_ReadBlock(uint32 sector, uint8* buffer)
 017A           ; {
 017A                   .dbline 123
 017A           ;       uint8 r1;
 017A           ;       uint16 i;
 017A           ;       uint16 retry=0;
 017A 4427              clr R20
 017C 5527              clr R21
 017E                   .dbline 125
 017E           ; 
 017E           ;       SPI_High();             /* Use High Speed SPI*/
 017E 0E940000          xcall _SPI_High
 0182                   .dbline 127
 0182           ; 
 0182           ;       r1 = SD_SendCommand(17, sector<<9);//读命令     //read command
 0182 89E0              ldi R24,9
 0184 90E0              ldi R25,0
 0186 0A85              ldd R16,y+10
 0188 1B85              ldd R17,y+11
 018A 2C85              ldd R18,y+12
 018C 3D85              ldd R19,y+13
 018E 8A93              st -y,R24
 0190 0E940000          xcall lsl32
 0194 2883              std y+0,R18
 0196 3983              std y+1,R19
 0198 9801              movw R18,R16
 019A 01E1              ldi R16,17
 019C 34DF              xcall _SD_SendCommand
 019E C02E              mov R12,R16
 01A0                   .dbline 129
 01A0           ;       
 01A0           ;       if(r1 != 0x00)
 01A0 0023              tst R16
 01A2 09F0              breq L27
 01A4           X8:
 01A4                   .dbline 130
 01A4           ;               return r1;
 01A4 2EC0              xjmp L26
 01A6           L27:
 01A6                   .dbline 132
 01A6           ; 
 01A6           ;       SPI_CS_Assert;
 01A6 D998              cbi 0x1b,1
 01A8 0BC0              xjmp L30
 01AA           L29:
 01AA                   .dbline 135
 01AA           ;       //等数据的开始  //wait to start recieve data
 01AA           ;       while(SPI_SrByte(0xff) != 0xfe)
 01AA           ;        if(retry++ > 0xfffe)
 01AA 1A01              movw R2,R20
 01AC 4F5F              subi R20,255  ; offset = 1
 01AE 5F4F              sbci R21,255
 01B0 8EEF              ldi R24,65534
 01B2 9FEF              ldi R25,255
 01B4 8215              cp R24,R2
 01B6 9305              cpc R25,R3
 01B8 18F4              brsh L32
 01BA           X9:
 01BA                   .dbline 136
 01BA           ;                {SPI_CS_Deassert;return 1;}
 01BA                   .dbline 136
 01BA D99A              sbi 0x1b,1
 01BC                   .dbline 136
 01BC 01E0              ldi R16,1
 01BE 21C0              xjmp L26
 01C0           L32:
 01C0           L30:
 01C0                   .dbline 134
 01C0 0FEF              ldi R16,255
 01C2 0E940000          xcall _SPI_SrByte
 01C6 602F              mov R22,R16
 01C8 0E3F              cpi R16,254
 01CA 79F7              brne L29
 01CC           X10:
 01CC                   .dbline 138
 01CC           ; 
 01CC           ;       for(i=0; i<512; i++)//读512个数据       //read 512 bytes
 01CC 4427              clr R20
 01CE 5527              clr R21
 01D0 09C0              xjmp L37
 01D2           L34:
 01D2                   .dbline 139
 01D2           ;       {
 01D2                   .dbline 140
 01D2           ;               *buffer++ = SPI_SrByte(0xff);
 01D2 0FEF              ldi R16,255
 01D4 0E940000          xcall _SPI_SrByte
 01D8 C02E              mov R12,R16
 01DA F501              movw R30,R10
 01DC C192              st Z+,R12
 01DE 5F01              movw R10,R30
 01E0                   .dbline 141
 01E0           ;       }
 01E0           L35:
 01E0                   .dbline 138
 01E0 4F5F              subi R20,255  ; offset = 1
 01E2 5F4F              sbci R21,255
 01E4           L37:
 01E4                   .dbline 138
 01E4 4030              cpi R20,0
 01E6 E2E0              ldi R30,2
 01E8 5E07              cpc R21,R30
 01EA 98F3              brlo L34
 01EC           X11:
 01EC                   .dbline 143
 01EC           ; 
 01EC           ;       SPI_SrByte(0xff);//伪crc    //dummy crc
 01EC 0FEF              ldi R16,255
 01EE 0E940000          xcall _SPI_SrByte
 01F2                   .dbline 144
 01F2           ;       SPI_SrByte(0xff);
 01F2 0FEF              ldi R16,255
 01F4 0E940000          xcall _SPI_SrByte
 01F8                   .dbline 146
 01F8           ;       
 01F8           ;       SPI_CS_Deassert;
 01F8 D99A              sbi 0x1b,1
 01FA                   .dbline 147
 01FA           ;       SPI_SrByte(0xff);// extra 8 CLK
 01FA 0FEF              ldi R16,255
 01FC 0E940000          xcall _SPI_SrByte
 0200                   .dbline 149
 0200           ; 
 0200           ;       return 0;
 0200 0027              clr R16
 0202                   .dbline -2
 0202           L26:
 0202                   .dbline 0 ; func end
 0202 2296              adiw R28,2
 0204 0E940000          xcall pop_xgsetF03C
 0208 2496              adiw R28,4
 020A 0895              ret
 020C                   .dbsym r r1 12 c
 020C                   .dbsym r retry 20 i
 020C                   .dbsym r i 20 i
 020C                   .dbsym r buffer 10 pc
 020C                   .dbsym l sector 10 l
 020C                   .dbend
 020C                   .dbfunc e SD_WriteSingleBlock _SD_WriteSingleBlock fc
 020C           ;             r1 -> R22
 020C           ;          retry -> R20,R21
 020C           ;              i -> R10,R11
 020C           ;         buffer -> y+12
 020C           ;         sector -> y+8
                        .even
 020C           _SD_WriteSingleBlock::
 020C 0E940000          xcall push_arg4
 0210 0E940000          xcall push_xgsetF00C
 0214 2297              sbiw R28,2
 0216                   .dbline -1
 0216                   .dbline 161
 0216           ; }
 0216           ; 
 0216           ; 
 0216           ; //---------------------------------------------
 0216           ; //
 0216           ; // SD卡扇区写入函数 
 0216           ; // sector:扇区号
 0216           ; // buffer:数据缓存
 0216           ; //
 0216           ; //---------------------------------------------
 0216           ; uint8 SD_WriteSingleBlock(uint32 sector, uint8* buffer)
 0216           ; {
 0216                   .dbline 164
 0216           ;       uint8 r1;
 0216           ;       uint16 i;
 0216           ;       uint16 retry=0;
 0216 4427              clr R20
 0218 5527              clr R21
 021A                   .dbline 168
 021A           ;       
 021A           ;       //SPI_High();           /* Use High Speed SPI*/
 021A           ; 
 021A           ;       r1 = SD_SendCommand(24, sector<<9);//写命令     //send command
 021A 89E0              ldi R24,9
 021C 90E0              ldi R25,0
 021E 0885              ldd R16,y+8
 0220 1985              ldd R17,y+9
 0222 2A85              ldd R18,y+10
 0224 3B85              ldd R19,y+11
 0226 8A93              st -y,R24
 0228 0E940000          xcall lsl32
 022C 2883              std y+0,R18
 022E 3983              std y+1,R19
 0230 9801              movw R18,R16
 0232 08E1              ldi R16,24
 0234 E8DE              xcall _SD_SendCommand
 0236 602F              mov R22,R16
 0238                   .dbline 169
 0238           ;       if(r1 != 0x00)
 0238 0023              tst R16
 023A 09F0              breq L39
 023C           X12:
 023C                   .dbline 170
 023C           ;               return r1;
 023C 43C0              xjmp L38
 023E           L39:
 023E                   .dbline 172
 023E           ; 
 023E           ;       SPI_CS_Assert;
 023E D998              cbi 0x1b,1
 0240                   .dbline 174
 0240           ;       
 0240           ;       SPI_SrByte(0xff);
 0240 0FEF              ldi R16,255
 0242 0E940000          xcall _SPI_SrByte
 0246                   .dbline 175
 0246           ;       SPI_SrByte(0xff);
 0246 0FEF              ldi R16,255
 0248 0E940000          xcall _SPI_SrByte
 024C                   .dbline 176
 024C           ;       SPI_SrByte(0xff);
 024C 0FEF              ldi R16,255
 024E 0E940000          xcall _SPI_SrByte
 0252                   .dbline 178
 0252           ; 
 0252           ;       SPI_SrByte(0xfe);//发开始符                     //send start byte "token"
 0252 0EEF              ldi R16,254
 0254 0E940000          xcall _SPI_SrByte
 0258                   .dbline 180
 0258           ;       
 0258           ;       for(i=0; i<512; i++)//送512字节数据             //send 512 bytes data
 0258 AA24              clr R10
 025A BB24              clr R11
 025C 0BC0              xjmp L44
 025E           L41:
 025E                   .dbline 181
 025E           ;       {
 025E                   .dbline 182
 025E           ;               SPI_SrByte(buffer[i]);
 025E F501              movw R30,R10
 0260 0C84              ldd R0,y+12
 0262 1D84              ldd R1,y+13
 0264 E00D              add R30,R0
 0266 F11D              adc R31,R1
 0268 0081              ldd R16,z+0
 026A 0E940000          xcall _SPI_SrByte
 026E                   .dbline 183
 026E           ;       }
 026E           L42:
 026E                   .dbline 180
 026E C501              movw R24,R10
 0270 0196              adiw R24,1
 0272 5C01              movw R10,R24
 0274           L44:
 0274                   .dbline 180
 0274 C501              movw R24,R10
 0276 8030              cpi R24,0
 0278 E2E0              ldi R30,2
 027A 9E07              cpc R25,R30
 027C 80F3              brlo L41
 027E           X13:
 027E                   .dbline 185
 027E           ;       
 027E           ;       SPI_SrByte(0xff);                       //dummy crc
 027E 0FEF              ldi R16,255
 0280 0E940000          xcall _SPI_SrByte
 0284                   .dbline 186
 0284           ;       SPI_SrByte(0xff);
 0284 0FEF              ldi R16,255
 0286 0E940000          xcall _SPI_SrByte
 028A                   .dbline 188
 028A           ;       
 028A           ;       r1 = SPI_SrByte(0xff);
 028A 0FEF              ldi R16,255
 028C 0E940000          xcall _SPI_SrByte
 0290 602F              mov R22,R16
 0292                   .dbline 190
 0292           ;       
 0292           ;       if( (r1&0x1f) != 0x05)//等待是否成功    //judge if it successful
 0292 862F              mov R24,R22
 0294 8F71              andi R24,31
 0296 8530              cpi R24,5
 0298 69F0              breq L48
 029A           X14:
 029A                   .dbline 191
 029A           ;       {
 029A                   .dbline 192
 029A           ;               SPI_CS_Deassert;
 029A D99A              sbi 0x1b,1
 029C                   .dbline 193
 029C           ;               return r1;
 029C 13C0              xjmp L38
 029E           L47:
 029E                   .dbline 196
 029E           ;       }
 029E           ;       //等待操作完            //wait no busy
 029E           ;       while(!SPI_SrByte(0xff))if(retry++ > 0xfffe){SPI_CS_Deassert;return 1;}
 029E BA01              movw R22,R20
 02A0 4F5F              subi R20,255  ; offset = 1
 02A2 5F4F              sbci R21,255
 02A4 8EEF              ldi R24,65534
 02A6 9FEF              ldi R25,255
 02A8 8617              cp R24,R22
 02AA 9707              cpc R25,R23
 02AC 18F4              brsh L50
 02AE           X15:
 02AE                   .dbline 196
 02AE                   .dbline 196
 02AE D99A              sbi 0x1b,1
 02B0                   .dbline 196
 02B0 01E0              ldi R16,1
 02B2 08C0              xjmp L38
 02B4           L50:
 02B4           L48:
 02B4                   .dbline 196
 02B4 0FEF              ldi R16,255
 02B6 0E940000          xcall _SPI_SrByte
 02BA A02E              mov R10,R16
 02BC 0023              tst R16
 02BE 79F3              breq L47
 02C0           X16:
 02C0                   .dbline 198
 02C0           ; 
 02C0           ;       SPI_CS_Deassert;
 02C0 D99A              sbi 0x1b,1
 02C2                   .dbline 201
 02C2           ;       //SPI_SrByte(0xff);// extra 8 CLK
 02C2           ; 
 02C2           ;       return 0;
 02C2 0027              clr R16
 02C4                   .dbline -2
 02C4           L38:
 02C4                   .dbline 0 ; func end
 02C4 2296              adiw R28,2
 02C6 0E940000          xcall pop_xgsetF00C
 02CA 2496              adiw R28,4
 02CC 0895              ret
 02CE                   .dbsym r r1 22 c
 02CE                   .dbsym r retry 20 i
 02CE                   .dbsym r i 10 i
 02CE                   .dbsym l buffer 12 pc
 02CE                   .dbsym l sector 8 l
 02CE                   .dbend
 02CE           ; }

⌨️ 快捷键说明

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