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

📄 sd.lis

📁 AVR单片机做的MP3
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01EE 9201              movw R18,R4
 01F0 00D0              rcall lsr32
 01F2 0D83              std y+5,R16
 01F4                   .dbline 155
 01F4           ; 
 01F4           ;    return SD_Read_Block(CMD, Buffer, 512);
 01F4 80E0              ldi R24,512
 01F6 92E0              ldi R25,2
 01F8 9983              std y+1,R25
 01FA 8883              std y+0,R24
 01FC 2889              ldd R18,y+16
 01FE 3989              ldd R19,y+17
 0200 8E01              movw R16,R28
 0202 0E5F              subi R16,254  ; offset = 2
 0204 1F4F              sbci R17,255
 0206 76DF              rcall _SD_Read_Block
 0208                   .dbline -2
 0208           L53:
 0208 2896              adiw R28,8
 020A 00D0              rcall pop_gset2
 020C 2496              adiw R28,4
 020E                   .dbline 0 ; func end
 020E 0895              ret
 0210                   .dbsym l CMD 2 A[6:6]c
 0210                   .dbsym l Buffer 16 pc
 0210                   .dbsym l addr 12 l
 0210                   .dbend
                        .area lit(rom, con, rel)
 000C           L59:
 000C 5800              .byte 'X,0
 000E 0000              .byte 0,0
 0010 00FF              .byte 0,255
                        .area text(rom, con, rel)
 0210                   .dbfile D:\ICCFIL~1\五键MP3ICC\sd.c
 0210                   .dbfunc e SD_write_sector _SD_write_sector fc
 0210           ;          retry -> R10
 0210           ;            CMD -> y+0
 0210           ;            tmp -> R14
 0210           ;              i -> R12,R13
 0210           ;         Buffer -> y+20
 0210           ;           addr -> y+16
                        .even
 0210           _SD_write_sector::
 0210 00D0              rcall push_arg4
 0212 00D0              rcall push_gset5
 0214 2697              sbiw R28,6
 0216                   .dbline -1
 0216                   .dbline 160
 0216           ;         
 0216           ; }
 0216           ; uint8 SD_write_sector(uint32 addr,uint8 *Buffer)
 0216           ; //****************************************************************************
 0216           ; {  
 0216                   .dbline 164
 0216           ;    uint8 tmp,retry;
 0216           ;    uint16 i;
 0216           ;    //Command 24 is a writing blocks command for MMC/SD-Card.
 0216           ;    uint8 CMD[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
 0216 80E0              ldi R24,<L59
 0218 90E0              ldi R25,>L59
 021A FE01              movw R30,R28
 021C 06E0              ldi R16,6
 021E 10E0              ldi R17,0
 0220 FA93              st -y,R31
 0222 EA93              st -y,R30
 0224 9A93              st -y,R25
 0226 8A93              st -y,R24
 0228 00D0              rcall asgncblk
 022A                   .dbline 166
 022A           ;    
 022A           ;    asm("cli"); //clear all interrupt.
 022A F894              cli
 022C                   .dbline 167
 022C           ;    addr = addr << 9; //addr = addr * 512
 022C 89E0              ldi R24,9
 022E 90E0              ldi R25,0
 0230 FE01              movw R30,R28
 0232 2088              ldd R2,z+16
 0234 3188              ldd R3,z+17
 0236 4288              ldd R4,z+18
 0238 5388              ldd R5,z+19
 023A 8A93              st -y,R24
 023C 8101              movw R16,R2
 023E 9201              movw R18,R4
 0240 00D0              rcall lsl32
 0242 FE01              movw R30,R28
 0244 008B              std z+16,R16
 0246 118B              std z+17,R17
 0248 228B              std z+18,R18
 024A 338B              std z+19,R19
 024C                   .dbline 169
 024C           ;       
 024C           ;    CMD[1] = ((addr & 0xFF000000) >>24 );
 024C 40E0              ldi R20,0
 024E 50E0              ldi R21,0
 0250 60E0              ldi R22,0
 0252 7FEF              ldi R23,255
 0254 FE01              movw R30,R28
 0256 2088              ldd R2,z+16
 0258 3188              ldd R3,z+17
 025A 4288              ldd R4,z+18
 025C 5388              ldd R5,z+19
 025E 2422              and R2,R20
 0260 3522              and R3,R21
 0262 4622              and R4,R22
 0264 5722              and R5,R23
 0266 88E1              ldi R24,24
 0268 90E0              ldi R25,0
 026A 8A93              st -y,R24
 026C 8101              movw R16,R2
 026E 9201              movw R18,R4
 0270 00D0              rcall lsr32
 0272 0983              std y+1,R16
 0274                   .dbline 170
 0274           ;    CMD[2] = ((addr & 0x00FF0000) >>16 );
 0274 40E0              ldi R20,0
 0276 50E0              ldi R21,0
 0278 6FEF              ldi R22,255
 027A 70E0              ldi R23,0
 027C FE01              movw R30,R28
 027E 2088              ldd R2,z+16
 0280 3188              ldd R3,z+17
 0282 4288              ldd R4,z+18
 0284 5388              ldd R5,z+19
 0286 2422              and R2,R20
 0288 3522              and R3,R21
 028A 4622              and R4,R22
 028C 5722              and R5,R23
 028E 1201              movw R2,R4
 0290 4424              clr R4
 0292 5524              clr R5
 0294 2A82              std y+2,R2
 0296                   .dbline 171
 0296           ;    CMD[3] = ((addr & 0x0000FF00) >>8 );
 0296 40E0              ldi R20,0
 0298 5FEF              ldi R21,255
 029A 60E0              ldi R22,0
 029C 70E0              ldi R23,0
 029E FE01              movw R30,R28
 02A0 2088              ldd R2,z+16
 02A2 3188              ldd R3,z+17
 02A4 4288              ldd R4,z+18
 02A6 5388              ldd R5,z+19
 02A8 2422              and R2,R20
 02AA 3522              and R3,R21
 02AC 4622              and R4,R22
 02AE 5722              and R5,R23
 02B0 88E0              ldi R24,8
 02B2 90E0              ldi R25,0
 02B4 8A93              st -y,R24
 02B6 8101              movw R16,R2
 02B8 9201              movw R18,R4
 02BA 00D0              rcall lsr32
 02BC 0B83              std y+3,R16
 02BE                   .dbline 174
 02BE           ; 
 02BE           ;    //Send Command CMD24 to MMC/SD-Card (Write 1 Block/512 Bytes)
 02BE           ;    retry=0;
 02BE AA24              clr R10
 02C0           L63:
 02C0                   .dbline 176
 02C0           ;    do
 02C0           ;    {  //Retry 100 times to send command.
 02C0                   .dbline 177
 02C0           ;       tmp = Write_Command_SD(CMD);
 02C0 8E01              movw R16,R28
 02C2 F9DE              rcall _Write_Command_SD
 02C4 E02E              mov R14,R16
 02C6                   .dbline 178
 02C6           ;       if(retry++ == 100) 
 02C6 2A2C              mov R2,R10
 02C8 3324              clr R3
 02CA 822D              mov R24,R2
 02CC 8F5F              subi R24,255    ; addi 1
 02CE A82E              mov R10,R24
 02D0 822D              mov R24,R2
 02D2 8436              cpi R24,100
 02D4 09F4              brne L66
 02D6                   .dbline 179
 02D6           ;         return(tmp); //send commamd Error!
 02D6 33C0              rjmp L58
 02D8           L66:
 02D8                   .dbline 180
 02D8           ;    }
 02D8           L64:
 02D8                   .dbline 181
 02D8           ;    while(tmp != 0); 
 02D8 EE20              tst R14
 02DA 91F7              brne L63
 02DC                   .dbline 184
 02DC           ;    
 02DC           ;    //Before writing,send 100 clock to MMC/SD-Card
 02DC           ;    for (i = 0; i < 100; i++)
 02DC CC24              clr R12
 02DE DD24              clr R13
 02E0 04C0              rjmp L71
 02E2           L68:
 02E2                   .dbline 185
 02E2 8EDE              rcall _SPI_ReadByte
 02E4           L69:
 02E4                   .dbline 184
 02E4 C601              movw R24,R12
 02E6 0196              adiw R24,1
 02E8 6C01              movw R12,R24
 02EA           L71:
 02EA                   .dbline 184
 02EA C601              movw R24,R12
 02EC 8436              cpi R24,100
 02EE E0E0              ldi R30,0
 02F0 9E07              cpc R25,R30
 02F2 B8F3              brlo L68
 02F4                   .dbline 188
 02F4           ;       SPI_ReadByte();
 02F4           ;       
 02F4           ;    //Send Start Byte to MMC/SD-Card
 02F4           ;    SPI_TransferByte(0xFE);    
 02F4 0EEF              ldi R16,254
 02F6 8ADE              rcall _SPI_TransferByte
 02F8                   .dbline 191
 02F8           ;       
 02F8           ;    //Now send real data Bolck (512Bytes) to MMC/SD-Card
 02F8           ;    for (i = 0; i < 512; i++)
 02F8 CC24              clr R12
 02FA DD24              clr R13
 02FC 09C0              rjmp L75
 02FE           L72:
 02FE                   .dbline 192
 02FE EC89              ldd R30,y+20
 0300 FD89              ldd R31,y+21
 0302 0191              ld R16,Z+
 0304 FD8B              std y+21,R31
 0306 EC8B              std y+20,R30
 0308 81DE              rcall _SPI_TransferByte
 030A           L73:
 030A                   .dbline 191
 030A C601              movw R24,R12
 030C 0196              adiw R24,1
 030E 6C01              movw R12,R24
 0310           L75:
 0310                   .dbline 191
 0310 C601              movw R24,R12
 0312 8030              cpi R24,0
 0314 E2E0              ldi R30,2
 0316 9E07              cpc R25,R30
 0318 90F3              brlo L72
 031A                   .dbline 195
 031A           ;       SPI_TransferByte(*Buffer++); //send 512 bytes to Card
 031A           ; 
 031A           ;    //CRC-Byte 
 031A           ;    SPI_TransferByte(0xFF); //Dummy CRC
 031A 0FEF              ldi R16,255
 031C 77DE              rcall _SPI_TransferByte
 031E                   .dbline 196
 031E           ;    SPI_TransferByte(0xFF); //CRC Code
 031E 0FEF              ldi R16,255
 0320 75DE              rcall _SPI_TransferByte
 0322                   .dbline 199
 0322           ;    
 0322           ;     
 0322           ;    tmp=SPI_ReadByte();   // read response
 0322 6EDE              rcall _SPI_ReadByte
 0324 E02E              mov R14,R16
 0326                   .dbline 200
 0326           ;    if((tmp & 0x1F) != 0x05) // data block accepted ?
 0326 8E2D              mov R24,R14
 0328 8F71              andi R24,31
 032A 8530              cpi R24,5
 032C 19F0              breq L79
 032E                   .dbline 201
 032E           ;    {
 032E                   .dbline 202
 032E           ;      SD_Disable();
 032E C49A              sbi 0x18,4
 0330                   .dbline 203
 0330           ;      return WRITE_BLOCK_ERROR; //Error!
 0330 03E0              ldi R16,3
 0332 05C0              rjmp L58
 0334           L78:
 0334                   .dbline 206
 0334                   .dbline 206
 0334           L79:
 0334                   .dbline 206
 0334           ;    }
 0334           ;    //Wait till MMC/SD-Card is not busy
 0334           ;    while (SPI_ReadByte() != 0xFF){};
 0334 65DE              rcall _SPI_ReadByte
 0336 0F3F              cpi R16,255
 0338 E9F7              brne L78
 033A                   .dbline 206
 033A                   .dbline 209
 033A           ;       
 033A           ;    //set MMC_Chip_Select to high (MMC/SD-Card Invalid)
 033A           ;    SD_Disable();
 033A C49A              sbi 0x18,4
 033C                   .dbline 210
 033C           ;    return 0;
 033C 0027              clr R16
 033E                   .dbline -2
 033E           L58:
 033E 2696              adiw R28,6
 0340 00D0              rcall pop_gset5
 0342 2496              adiw R28,4
 0344                   .dbline 0 ; func end
 0344 0895              ret
 0346                   .dbsym r retry 10 c
 0346                   .dbsym l CMD 0 A[6:6]c
 0346                   .dbsym r tmp 14 c
 0346                   .dbsym r i 12 i
 0346                   .dbsym l Buffer 20 pc
 0346                   .dbsym l addr 16 l
 0346                   .dbend

⌨️ 快捷键说明

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