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

📄 sd.lis

📁 AVR单片机做的MP3
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00BE 0FEF              ldi R16,255
 00C0 A5DF              rcall _SPI_TransferByte
 00C2                   .dbline 90
 00C2           ;               SD_Enable();
 00C2 C498              cbi 0x18,4
 00C4                   .dbline 91
 00C4           ;               for(i=0;i<6;i++)
 00C4 6627              clr R22
 00C6 05C0              rjmp L35
 00C8           L32:
 00C8                   .dbline 92
 00C8                   .dbline 93
 00C8 F601              movw R30,R12
 00CA 0191              ld R16,Z+
 00CC 6F01              movw R12,R30
 00CE 9EDF              rcall _SPI_TransferByte
 00D0                   .dbline 94
 00D0           L33:
 00D0                   .dbline 91
 00D0 6395              inc R22
 00D2           L35:
 00D2                   .dbline 91
 00D2 6630              cpi R22,6
 00D4 C8F3              brlo L32
 00D6                   .dbline 95
 00D6           ;               {
 00D6           ;         SPI_TransferByte(*cmd++);
 00D6           ;         }
 00D6           ;         SPI_ReadByte();
 00D6 94DF              rcall _SPI_ReadByte
 00D8           L36:
 00D8                   .dbline 97
 00D8           ;         
 00D8           ;         do{
 00D8                   .dbline 98
 00D8           ;                 tmp = SPI_ReadByte();
 00D8 93DF              rcall _SPI_ReadByte
 00DA A02E              mov R10,R16
 00DC                   .dbline 99
 00DC           L37:
 00DC                   .dbline 99
 00DC           ;         }while((tmp==0xff)&&(retry++ <100));
 00DC 8A2D              mov R24,R10
 00DE 8F3F              cpi R24,255
 00E0 31F4              brne L39
 00E2 242E              mov R2,R20
 00E4 3324              clr R3
 00E6 4F5F              subi R20,255    ; addi 1
 00E8 822D              mov R24,R2
 00EA 8436              cpi R24,100
 00EC A8F3              brlo L36
 00EE           L39:
 00EE                   .dbline 100
 00EE           ;         return(tmp);
 00EE 0A2D              mov R16,R10
 00F0                   .dbline -2
 00F0           L31:
 00F0 00D0              rcall pop_gset4
 00F2                   .dbline 0 ; func end
 00F2 0895              ret
 00F4                   .dbsym r retry 20 c
 00F4                   .dbsym r i 22 c
 00F4                   .dbsym r tmp 10 c
 00F4                   .dbsym r cmd 12 pc
 00F4                   .dbend
 00F4                   .dbfunc e SD_Read_Block _SD_Read_Block fc
 00F4           ;          retry -> R20
 00F4           ;           temp -> R22
 00F4           ;              i -> R22,R23
 00F4           ;          Bytes -> R10,R11
 00F4           ;         Buffer -> R12,R13
 00F4           ;            CMD -> R14,R15
                        .even
 00F4           _SD_Read_Block::
 00F4 00D0              rcall push_gset5
 00F6 6901              movw R12,R18
 00F8 7801              movw R14,R16
 00FA AA84              ldd R10,y+10
 00FC BB84              ldd R11,y+11
 00FE                   .dbline -1
 00FE                   .dbline 105
 00FE           ; }
 00FE           ; 
 00FE           ; uint8 SD_Read_Block(uint8 *CMD,uint8 *Buffer,uint16 Bytes)
 00FE           ; //****************************************************************************
 00FE           ; {  
 00FE                   .dbline 110
 00FE           ;    uint16 i;
 00FE           ;    uint8 retry, temp;
 00FE           ;     
 00FE           ;    //Send Command CMD to MMC/SD-Card
 00FE           ;    retry=0;
 00FE 4427              clr R20
 0100           L41:
 0100                   .dbline 112
 0100           ;    do
 0100           ;    {  //Retry 100 times to send command.
 0100                   .dbline 113
 0100           ;       temp=Write_Command_SD(CMD);
 0100 8701              movw R16,R14
 0102 D9DF              rcall _Write_Command_SD
 0104 602F              mov R22,R16
 0106                   .dbline 114
 0106           ;       if(retry++ == 100) 
 0106 242E              mov R2,R20
 0108 3324              clr R3
 010A 4F5F              subi R20,255    ; addi 1
 010C 822D              mov R24,R2
 010E 8436              cpi R24,100
 0110 11F4              brne L44
 0112                   .dbline 115
 0112           ;         return READ_BLOCK_ERROR; //block write Error!
 0112 04E0              ldi R16,4
 0114 15C0              rjmp L40
 0116           L44:
 0116                   .dbline 116
 0116           ;    }
 0116           L42:
 0116                   .dbline 117
 0116           ;    while (temp != 0); 
 0116 6623              tst R22
 0118 99F7              brne L41
 011A           L46:
 011A                   .dbline 120
 011A           L47:
 011A                   .dbline 120
 011A           ;                       
 011A           ;    //Read Start Byte form MMC/SD-Card (FEh/Start Byte)
 011A           ;    while (SPI_ReadByte() != 0xfe);
 011A 72DF              rcall _SPI_ReadByte
 011C 0E3F              cpi R16,254
 011E E9F7              brne L46
 0120                   .dbline 123
 0120           ;       
 0120           ;    //Write blocks(normal 512Bytes) to MMC/SD-Card
 0120           ;    for (i = 0; i < Bytes; i++)
 0120 6627              clr R22
 0122 7727              clr R23
 0124 06C0              rjmp L52
 0126           L49:
 0126                   .dbline 124
 0126                   .dbline 125
 0126 6CDF              rcall _SPI_ReadByte
 0128 F601              movw R30,R12
 012A 0193              st Z+,R16
 012C 6F01              movw R12,R30
 012E                   .dbline 127
 012E           L50:
 012E                   .dbline 123
 012E 6F5F              subi R22,255  ; offset = 1
 0130 7F4F              sbci R23,255
 0132           L52:
 0132                   .dbline 123
 0132 6A15              cp R22,R10
 0134 7B05              cpc R23,R11
 0136 B8F3              brlo L49
 0138                   .dbline 130
 0138           ;    {
 0138           ;       *Buffer++ = SPI_ReadByte();
 0138           ;        // put_c(*Buffer);
 0138           ;    }
 0138           ;    
 0138           ;    //CRC-Byte
 0138           ;    SPI_ReadByte();//CRC - Byte 
 0138 63DF              rcall _SPI_ReadByte
 013A                   .dbline 131
 013A           ;    SPI_ReadByte();//CRC - Byte
 013A 62DF              rcall _SPI_ReadByte
 013C                   .dbline 134
 013C           ;       
 013C           ;    //set MMC_Chip_Select to high (MMC/SD-Card invalid)
 013C           ;    SD_Disable();
 013C C49A              sbi 0x18,4
 013E                   .dbline 135
 013E           ;    return READ_BLOCK_OK;
 013E 0027              clr R16
 0140                   .dbline -2
 0140           L40:
 0140 00D0              rcall pop_gset5
 0142                   .dbline 0 ; func end
 0142 0895              ret
 0144                   .dbsym r retry 20 c
 0144                   .dbsym r temp 22 c
 0144                   .dbsym r i 22 i
 0144                   .dbsym r Bytes 10 i
 0144                   .dbsym r Buffer 12 pc
 0144                   .dbsym r CMD 14 pc
 0144                   .dbend
                        .area lit(rom, con, rel)
 0006           L54:
 0006 5100              .byte 'Q,0
 0008 0000              .byte 0,0
 000A 00FF              .byte 0,255
                        .area text(rom, con, rel)
 0144                   .dbfile D:\ICCFIL~1\五键MP3ICC\sd.c
 0144                   .dbfunc e SD_read_sector _SD_read_sector fc
 0144           ;            CMD -> y+2
 0144           ;         Buffer -> y+16
 0144           ;           addr -> y+12
                        .even
 0144           _SD_read_sector::
 0144 00D0              rcall push_arg4
 0146 00D0              rcall push_gset2
 0148 2897              sbiw R28,8
 014A                   .dbline -1
 014A                   .dbline 143
 014A           ; }
 014A           ; 
 014A           ; //****************************************************************************
 014A           ; //Routine for writing a Block(512Byte) to MMC/SD-Card
 014A           ; //Return 0 if sector writing is completed.
 014A           ; uint8 SD_read_sector(uint32 addr,uint8 *Buffer)
 014A           ; //****************************************************************************
 014A           ; {
 014A                   .dbline 145
 014A           ;        //Command 16 is reading Blocks from MMC/SD-Card
 014A           ;    uint8 CMD[] = {0x51,0x00,0x00,0x00,0x00,0xFF}; 
 014A 80E0              ldi R24,<L54
 014C 90E0              ldi R25,>L54
 014E FE01              movw R30,R28
 0150 3296              adiw R30,2
 0152 06E0              ldi R16,6
 0154 10E0              ldi R17,0
 0156 FA93              st -y,R31
 0158 EA93              st -y,R30
 015A 9A93              st -y,R25
 015C 8A93              st -y,R24
 015E 00D0              rcall asgncblk
 0160                   .dbline 147
 0160           ;    
 0160           ;    asm("cli"); //clear all interrupt.
 0160 F894              cli
 0162                   .dbline 149
 0162           ;    //Address conversation(logic block address-->byte address)  
 0162           ;    addr = addr << 9; //addr = addr * 512
 0162 89E0              ldi R24,9
 0164 90E0              ldi R25,0
 0166 FE01              movw R30,R28
 0168 2484              ldd R2,z+12
 016A 3584              ldd R3,z+13
 016C 4684              ldd R4,z+14
 016E 5784              ldd R5,z+15
 0170 8A93              st -y,R24
 0172 8101              movw R16,R2
 0174 9201              movw R18,R4
 0176 00D0              rcall lsl32
 0178 FE01              movw R30,R28
 017A 0487              std z+12,R16
 017C 1587              std z+13,R17
 017E 2687              std z+14,R18
 0180 3787              std z+15,R19
 0182                   .dbline 151
 0182           ; 
 0182           ;    CMD[1] = ((addr & 0xFF000000) >>24 );
 0182 40E0              ldi R20,0
 0184 50E0              ldi R21,0
 0186 60E0              ldi R22,0
 0188 7FEF              ldi R23,255
 018A FE01              movw R30,R28
 018C 2484              ldd R2,z+12
 018E 3584              ldd R3,z+13
 0190 4684              ldd R4,z+14
 0192 5784              ldd R5,z+15
 0194 2422              and R2,R20
 0196 3522              and R3,R21
 0198 4622              and R4,R22
 019A 5722              and R5,R23
 019C 88E1              ldi R24,24
 019E 90E0              ldi R25,0
 01A0 8A93              st -y,R24
 01A2 8101              movw R16,R2
 01A4 9201              movw R18,R4
 01A6 00D0              rcall lsr32
 01A8 0B83              std y+3,R16
 01AA                   .dbline 152
 01AA           ;    CMD[2] = ((addr & 0x00FF0000) >>16 );
 01AA 40E0              ldi R20,0
 01AC 50E0              ldi R21,0
 01AE 6FEF              ldi R22,255
 01B0 70E0              ldi R23,0
 01B2 FE01              movw R30,R28
 01B4 2484              ldd R2,z+12
 01B6 3584              ldd R3,z+13
 01B8 4684              ldd R4,z+14
 01BA 5784              ldd R5,z+15
 01BC 2422              and R2,R20
 01BE 3522              and R3,R21
 01C0 4622              and R4,R22
 01C2 5722              and R5,R23
 01C4 1201              movw R2,R4
 01C6 4424              clr R4
 01C8 5524              clr R5
 01CA 2C82              std y+4,R2
 01CC                   .dbline 153
 01CC           ;    CMD[3] = ((addr & 0x0000FF00) >>8 );
 01CC 40E0              ldi R20,0
 01CE 5FEF              ldi R21,255
 01D0 60E0              ldi R22,0
 01D2 70E0              ldi R23,0
 01D4 FE01              movw R30,R28
 01D6 2484              ldd R2,z+12
 01D8 3584              ldd R3,z+13
 01DA 4684              ldd R4,z+14
 01DC 5784              ldd R5,z+15
 01DE 2422              and R2,R20
 01E0 3522              and R3,R21
 01E2 4622              and R4,R22
 01E4 5722              and R5,R23
 01E6 88E0              ldi R24,8
 01E8 90E0              ldi R25,0
 01EA 8A93              st -y,R24
 01EC 8101              movw R16,R2

⌨️ 快捷键说明

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