📄 sd.lis
字号:
01F2 .dbline 182
01F2 ; return 0;
01F2 0027 clr R16
01F4 .dbline -2
01F4 L48:
01F4 2296 adiw R28,2
01F6 0E940000 xcall pop_gset2
01FA .dbline 0 ; func end
01FA 0895 ret
01FC .dbsym r retry 20 c
01FC .dbsym r length 22 i
01FC .dbend
01FC .dbfunc e SD_start_read _SD_start_read fc
01FC ; retry -> R20
01FC ; addr -> y+4
.even
01FC _SD_start_read::
01FC 0E940000 xcall push_arg4
0200 0E940000 xcall push_gset1
0204 2297 sbiw R28,2
0206 .dbline -1
0206 .dbline 187
0206 ; }
0206 ;
0206 ; //=======================================================================
0206 ; uint8 SD_start_read(uint32 addr)
0206 ; {
0206 08C0 xjmp L56
0208 L55:
0208 .dbline 191
0208 ; uint8 retry;
0208 ; // Send the read command
0208 ; while(Write_Command_SD(0x51,addr<<9)!=0)
0208 ; {
0208 .dbline 192
0208 ; if (retry++>10)
0208 242E mov R2,R20
020A 3324 clr R3
020C 4F5F subi R20,255 ; addi 1
020E 8AE0 ldi R24,10
0210 8215 cp R24,R2
0212 10F4 brsh L58
0214 .dbline 193
0214 ; {
0214 .dbline 194
0214 ; return 1;
0214 01E0 ldi R16,1
0216 18C0 xjmp L54
0218 L58:
0218 .dbline 196
0218 L56:
0218 .dbline 190
0218 89E0 ldi R24,9
021A 90E0 ldi R25,0
021C FE01 movw R30,R28
021E 2480 ldd R2,z+4
0220 3580 ldd R3,z+5
0222 4680 ldd R4,z+6
0224 5780 ldd R5,z+7
0226 8A93 st -y,R24
0228 8101 movw R16,R2
022A 9201 movw R18,R4
022C 0E940000 xcall lsl32
0230 2883 std y+0,R18
0232 3983 std y+1,R19
0234 9801 movw R18,R16
0236 01E5 ldi R16,81
0238 11DF xcall _Write_Command_SD
023A 0023 tst R16
023C 29F7 brne L55
023E L60:
023E .dbline 199
023E L61:
023E .dbline 199
023E ; }
023E ; }
023E ; //SD_Enable();
023E ; //Send the start byte
023E ; while(Read_Byte_SD()!=0xfe);
023E E0DE xcall _Read_Byte_SD
0240 0E3F cpi R16,254
0242 E9F7 brne L60
0244 .dbline 201
0244 ;
0244 ; SD_Disable();
0244 C49A sbi 0x18,4
0246 .dbline 201
0246 .dbline 202
0246 ; return 0; //open successfully!
0246 0027 clr R16
0248 .dbline -2
0248 L54:
0248 2296 adiw R28,2
024A 0E940000 xcall pop_gset1
024E 2496 adiw R28,4
0250 .dbline 0 ; func end
0250 0895 ret
0252 .dbsym r retry 20 c
0252 .dbsym l addr 4 l
0252 .dbend
0252 .dbfunc e SD_get_date _SD_get_date fV
0252 ; a -> R20,R21
0252 ; Number -> R22,R23
0252 ; Buffer -> R10,R11
.even
0252 _SD_get_date::
0252 0E940000 xcall push_gset3
0256 B901 movw R22,R18
0258 5801 movw R10,R16
025A .dbline -1
025A .dbline 207
025A ; }
025A ;
025A ; //=======================================================================
025A ; void SD_get_date(uint8 *Buffer,uint16 Number)
025A ; {
025A .dbline 209
025A ; uint16 a;
025A ; SD_Enable();
025A C498 cbi 0x18,4
025C .dbline 209
025C .dbline 211
025C ;
025C ; for(a=0;a<Number;a++)
025C 4427 clr R20
025E 5527 clr R21
0260 06C0 xjmp L67
0262 L64:
0262 .dbline 212
0262 .dbline 213
0262 CEDE xcall _Read_Byte_SD
0264 F501 movw R30,R10
0266 0193 st Z+,R16
0268 5F01 movw R10,R30
026A .dbline 215
026A L65:
026A .dbline 211
026A 4F5F subi R20,255 ; offset = 1
026C 5F4F sbci R21,255
026E L67:
026E .dbline 211
026E 4617 cp R20,R22
0270 5707 cpc R21,R23
0272 B8F3 brlo L64
0274 .dbline 216
0274 ; {
0274 ; *Buffer++=Read_Byte_SD();
0274 ;
0274 ; }
0274 ; SD_Disable(); // Set SD_Chip_Select to high
0274 C49A sbi 0x18,4
0276 .dbline 216
0276 .dbline -2
0276 L63:
0276 0E940000 xcall pop_gset3
027A .dbline 0 ; func end
027A 0895 ret
027C .dbsym r a 20 i
027C .dbsym r Number 22 i
027C .dbsym r Buffer 10 pc
027C .dbend
027C .dbfunc e SD_read_sector2 _SD_read_sector2 fc
027C ; i -> <dead>
027C ; retry -> R20
027C ; a -> R22,R23
027C ; Bytes -> R10,R11
027C ; Buffer -> R12,R13
027C ; addr -> y+10
.even
027C _SD_read_sector2::
027C 0E940000 xcall push_arg4
0280 0E940000 xcall push_gset4
0284 2297 sbiw R28,2
0286 CE84 ldd R12,y+14
0288 DF84 ldd R13,y+15
028A A888 ldd R10,y+16
028C B988 ldd R11,y+17
028E .dbline -1
028E .dbline 221
028E ; }
028E ;
028E ; //=======================================================================
028E ; uint8 SD_read_sector2(uint32 addr,uint8*Buffer,uint16 Bytes)
028E ; {
028E .dbline 224
028E ; uint8 i;
028E ; uint16 a;
028E ; uint8 retry=0;
028E 4427 clr R20
0290 .dbline 226
0290 ;
0290 ; if(SD_set_length(Bytes))
0290 8501 movw R16,R10
0292 97DF xcall _SD_set_length
0294 0023 tst R16
0296 51F0 breq L72
0298 .dbline 227
0298 ; {
0298 .dbline 228
0298 ; return 1;
0298 01E0 ldi R16,1
029A 2AC0 xjmp L68
029C L71:
029C .dbline 233
029C ; }
029C ;
029C ; // Send the read command
029C ; while(Write_Command_SD(0x51,addr)!=0)
029C ; {
029C .dbline 234
029C ; if (retry++>10)
029C 242E mov R2,R20
029E 3324 clr R3
02A0 4F5F subi R20,255 ; addi 1
02A2 8AE0 ldi R24,10
02A4 8215 cp R24,R2
02A6 10F4 brsh L74
02A8 .dbline 235
02A8 ; {
02A8 .dbline 236
02A8 ; return 2;
02A8 02E0 ldi R16,2
02AA 22C0 xjmp L68
02AC L74:
02AC .dbline 238
02AC L72:
02AC .dbline 232
02AC FE01 movw R30,R28
02AE 2284 ldd R2,z+10
02B0 3384 ldd R3,z+11
02B2 4484 ldd R4,z+12
02B4 5584 ldd R5,z+13
02B6 4882 std y+0,R4
02B8 5982 std y+1,R5
02BA 9101 movw R18,R2
02BC 01E5 ldi R16,81
02BE CEDE xcall _Write_Command_SD
02C0 0023 tst R16
02C2 61F7 brne L71
02C4 L76:
02C4 .dbline 244
02C4 L77:
02C4 .dbline 244
02C4 ; }
02C4 ; }
02C4 ;
02C4 ; // Raise chip select
02C4 ;
02C4 ; //SD_Enable();
02C4 ; //receive the start byte
02C4 ; while(Read_Byte_SD()!=0xfe);
02C4 9DDE xcall _Read_Byte_SD
02C6 0E3F cpi R16,254
02C8 E9F7 brne L76
02CA .dbline 247
02CA ;
02CA ; //Read off all the bytes in the block
02CA ; for(a=0;a<Bytes;a++)
02CA 6627 clr R22
02CC 7727 clr R23
02CE 06C0 xjmp L82
02D0 L79:
02D0 .dbline 248
02D0 .dbline 249
02D0 97DE xcall _Read_Byte_SD
02D2 F601 movw R30,R12
02D4 0193 st Z+,R16
02D6 6F01 movw R12,R30
02D8 .dbline 250
02D8 L80:
02D8 .dbline 247
02D8 6F5F subi R22,255 ; offset = 1
02DA 7F4F sbci R23,255
02DC L82:
02DC .dbline 247
02DC 6A15 cp R22,R10
02DE 7B05 cpc R23,R11
02E0 B8F3 brlo L79
02E2 .dbline 252
02E2 ; {
02E2 ; *Buffer++=Read_Byte_SD();
02E2 ; }
02E2 ; //Read CRC byte
02E2 ; Read_Byte_SD();
02E2 8EDE xcall _Read_Byte_SD
02E4 .dbline 253
02E4 ; Read_Byte_SD();
02E4 8DDE xcall _Read_Byte_SD
02E6 .dbline 255
02E6 ;
02E6 ; SD_set_length(512);
02E6 00E0 ldi R16,512
02E8 12E0 ldi R17,2
02EA 6BDF xcall _SD_set_length
02EC .dbline 257
02EC ; // Set SD_Chip_Select to high
02EC ; SD_Disable();
02EC C49A sbi 0x18,4
02EE .dbline 257
02EE .dbline 259
02EE ;
02EE ; return 0;
02EE 0027 clr R16
02F0 .dbline -2
02F0 L68:
02F0 2296 adiw R28,2
02F2 0E940000 xcall pop_gset4
02F6 2496 adiw R28,4
02F8 .dbline 0 ; func end
02F8 0895 ret
02FA .dbsym l i 3 c
02FA .dbsym r retry 20 c
02FA .dbsym r a 22 i
02FA .dbsym r Bytes 10 i
02FA .dbsym r Buffer 12 pc
02FA .dbsym l addr 10 l
02FA .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -