📄 sd.lis
字号:
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 + -