?? sd.lis
字號(hào):
.module SD.c
.area text(rom, con, rel)
0000 .dbfile D:\TDDownload\MP3BOA~1.8\SD.c
0000 .dbfunc e Read_Byte_SD _Read_Byte_SD fc
.even
0000 _Read_Byte_SD::
0000 .dbline -1
0000 .dbline 13
0000 ; //ICC-AVR application builder : 2005-11-12 17:11:59
0000 ; // Target : M16
0000 ; // Crystal: 8.0000Mhz
0000 ; // copyright:魯軍波(endylu)
0000 ; // www.shop34612283.taobao.com
0000 ; // www.adembed.com
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "main.h"
0000 ;
0000 ; //=======================================================================
0000 ; uint8 Read_Byte_SD(void)
0000 ; {
0000 .dbline 15
0000 ; //char Byte;
0000 ; SPDR=0xff;
0000 8FEF ldi R24,255
0002 8FB9 out 0xf,R24
0004 L2:
0004 .dbline 16
0004 L3:
0004 .dbline 16
0004 ; while(!(SPSR&(1<<SPIF)));
0004 779B sbis 0xe,7
0006 FECF rjmp L2
0008 .dbline 19
0008 ;
0008 ; //Byte=SPDR;
0008 ; return(SPDR);
0008 0FB1 in R16,0xf
000A .dbline -2
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e Write_Byte_SD _Write_Byte_SD fV
000C ; Byte -> R16
.even
000C _Write_Byte_SD::
000C .dbline -1
000C .dbline 24
000C ; }
000C ;
000C ; //=======================================================================
000C ; void Write_Byte_SD(uint8 Byte)
000C ; {
000C .dbline 25
000C ; SPDR=Byte;
000C 0FB9 out 0xf,R16
000E L6:
000E .dbline 26
000E L7:
000E .dbline 26
000E ; while(!(SPSR&(1<<SPIF)));
000E 779B sbis 0xe,7
0010 FECF rjmp L6
0012 .dbline -2
0012 L5:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r Byte 16 c
0014 .dbend
0014 .dbfunc e Write_Command_SD1 _Write_Command_SD1 fc
0014 ; Timeout -> R20
0014 ; a -> R22
0014 ; tmp -> R10
0014 ; CMD -> R12,R13
.even
0014 _Write_Command_SD1::
0014 0E940000 xcall push_gset4
0018 6801 movw R12,R16
001A .dbline -1
001A .dbline 31
001A ; }
001A ;
001A ; //=======================================================================
001A ; uint8 Write_Command_SD1(uint8*CMD)
001A ; {
001A .dbline 33
001A ; uint8 a;
001A ; uint8 tmp=0xff;
001A 8FEF ldi R24,255
001C A82E mov R10,R24
001E .dbline 34
001E ; uint8 Timeout=0;
001E 4427 clr R20
0020 .dbline 37
0020 ;
0020 ; // Raise chip select
0020 ; SD_Disable();
0020 C49A sbi 0x18,4
0022 .dbline 37
0022 .dbline 40
0022 ;
0022 ; // Send an 8 bit pulse
0022 ; Write_Byte_SD(0xFF);
0022 0FEF ldi R16,255
0024 F3DF xcall _Write_Byte_SD
0026 .dbline 43
0026 ;
0026 ; // Lower chip select
0026 ; SD_Enable();
0026 C498 cbi 0x18,4
0028 .dbline 43
0028 .dbline 46
0028 ;
0028 ; //Send the 6 byte command
0028 ; for(a=0;a<0x06;a++)
0028 6627 clr R22
002A 05C0 xjmp L13
002C L10:
002C .dbline 47
002C .dbline 48
002C F601 movw R30,R12
002E 0191 ld R16,Z+
0030 6F01 movw R12,R30
0032 ECDF xcall _Write_Byte_SD
0034 .dbline 49
0034 L11:
0034 .dbline 46
0034 6395 inc R22
0036 L13:
0036 .dbline 46
0036 6630 cpi R22,6
0038 C8F3 brlo L10
003A 09C0 xjmp L15
003C L14:
003C .dbline 53
003C ; {
003C ; Write_Byte_SD(*CMD++);
003C ; }
003C ;
003C ; //Wait for the response
003C ; while(tmp==0xff)
003C ; {
003C .dbline 54
003C ; tmp=Read_Byte_SD();
003C E1DF xcall _Read_Byte_SD
003E A02E mov R10,R16
0040 .dbline 55
0040 ; if(Timeout++>100)
0040 242E mov R2,R20
0042 3324 clr R3
0044 4F5F subi R20,255 ; addi 1
0046 84E6 ldi R24,100
0048 8215 cp R24,R2
004A 08F4 brsh L17
004C .dbline 56
004C ; {
004C .dbline 57
004C ; break;
004C 03C0 xjmp L16
004E L17:
004E .dbline 59
004E L15:
004E .dbline 52
004E 8A2D mov R24,R10
0050 8F3F cpi R24,255
0052 A1F3 breq L14
0054 L16:
0054 .dbline 62
0054 ; }
0054 ; }
0054 ; //SD_Disable();
0054 ; //for some reason we need to delay 10here
0054 ; return(tmp);
0054 0A2D mov R16,R10
0056 .dbline -2
0056 L9:
0056 0E940000 xcall pop_gset4
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r Timeout 20 c
005C .dbsym r a 22 c
005C .dbsym r tmp 10 c
005C .dbsym r CMD 12 pc
005C .dbend
005C .dbfunc e Write_Command_SD _Write_Command_SD fc
005C ; Timeout -> R20
005C ; tmp -> R22
005C ; address -> y+8
005C ; CMD -> R22
.even
005C _Write_Command_SD::
005C 3A93 st -y,r19
005E 2A93 st -y,r18
0060 0E940000 xcall push_gset4
0064 602F mov R22,R16
0066 .dbline -1
0066 .dbline 67
0066 ; }
0066 ;
0066 ; //=======================================================================
0066 ; uint8 Write_Command_SD(uint8 CMD,uint32 address)
0066 ; {
0066 .dbline 70
0066 ;
0066 ; uint8 tmp;
0066 ; uint8 Timeout=0;
0066 4427 clr R20
0068 .dbline 73
0068 ;
0068 ; // Raise chip select
0068 ; SD_Disable();
0068 C49A sbi 0x18,4
006A .dbline 73
006A .dbline 76
006A ;
006A ; // Send an 8 bit pulse
006A ; Write_Byte_SD(0xFF);
006A 0FEF ldi R16,255
006C CFDF xcall _Write_Byte_SD
006E .dbline 79
006E ;
006E ; // Lower chip select
006E ; SD_Enable();
006E C498 cbi 0x18,4
0070 .dbline 79
0070 .dbline 81
0070 ; //Send the 6 byte command
0070 ; Write_Byte_SD(CMD);
0070 062F mov R16,R22
0072 CCDF xcall _Write_Byte_SD
0074 .dbline 82
0074 ; Write_Byte_SD(address>>24);
0074 88E1 ldi R24,24
0076 90E0 ldi R25,0
0078 FE01 movw R30,R28
007A 2084 ldd R2,z+8
007C 3184 ldd R3,z+9
007E 4284 ldd R4,z+10
0080 5384 ldd R5,z+11
0082 8A93 st -y,R24
0084 8101 movw R16,R2
0086 9201 movw R18,R4
0088 0E940000 xcall lsr32
008C BFDF xcall _Write_Byte_SD
008E .dbline 83
008E ; Write_Byte_SD(address>>16);
008E FE01 movw R30,R28
0090 2084 ldd R2,z+8
0092 3184 ldd R3,z+9
0094 4284 ldd R4,z+10
0096 5384 ldd R5,z+11
0098 1201 movw R2,R4
009A 4424 clr R4
009C 5524 clr R5
009E 022D mov R16,R2
00A0 B5DF xcall _Write_Byte_SD
00A2 .dbline 84
00A2 ; Write_Byte_SD(address>>8);
00A2 88E0 ldi R24,8
00A4 90E0 ldi R25,0
00A6 FE01 movw R30,R28
00A8 2084 ldd R2,z+8
00AA 3184 ldd R3,z+9
00AC 4284 ldd R4,z+10
00AE 5384 ldd R5,z+11
00B0 8A93 st -y,R24
00B2 8101 movw R16,R2
00B4 9201 movw R18,R4
00B6 0E940000 xcall lsr32
00BA A8DF xcall _Write_Byte_SD
00BC .dbline 85
00BC ; Write_Byte_SD(address);
00BC FE01 movw R30,R28
00BE 0085 ldd R16,z+8
00C0 A5DF xcall _Write_Byte_SD
00C2 .dbline 86
00C2 ; Write_Byte_SD(0xff);
00C2 0FEF ldi R16,255
00C4 A3DF xcall _Write_Byte_SD
00C6 .dbline 90
00C6 ;
00C6 ;
00C6 ; //Wait for the response
00C6 ; tmp=Read_Byte_SD();
00C6 9CDF xcall _Read_Byte_SD
00C8 602F mov R22,R16
00CA 02C0 xjmp L21
00CC L20:
00CC .dbline 92
00CC .dbline 93
00CC 99DF xcall _Read_Byte_SD
00CE 602F mov R22,R16
00D0 .dbline 94
00D0 L21:
00D0 .dbline 91
00D0 ; while((tmp==0xff)&(Timeout++<8))
00D0 6F3F cpi R22,255
00D2 21F4 brne L23
00D4 81E0 ldi R24,1
00D6 90E0 ldi R25,0
00D8 6C01 movw R12,R24
00DA 02C0 xjmp L24
00DC L23:
00DC CC24 clr R12
00DE DD24 clr R13
00E0 L24:
00E0 242E mov R2,R20
00E2 3324 clr R3
00E4 4F5F subi R20,255 ; addi 1
00E6 822D mov R24,R2
00E8 8830 cpi R24,8
00EA 20F4 brsh L25
00EC 81E0 ldi R24,1
00EE 90E0 ldi R25,0
00F0 5C01 movw R10,R24
00F2 02C0 xjmp L26
00F4 L25:
00F4 AA24 clr R10
00F6 BB24 clr R11
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -