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

📄 sdmmc.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02AE           ;          while(!(SPSR & 0x80)){}; 
 02AE 779B              sbis 0xe,7
 02B0 FECF              rjmp L76
 02B2                   .dbline 338
 02B2                   .dbline 342
 02B2           ;          #else
 02B2           ;          Spi_SendReceive(&value,1,0);
 02B2           ;          #endif
 02B2           ;          }
 02B2           L65:
 02B2                   .dbline 343
 02B2           ;    MMC_PORT|=(1<<SPI_Busy);
 02B2 C09A              sbi 0x18,0
 02B4                   .dbline -2
 02B4           L63:
 02B4 0E940000          xcall pop_gset2
 02B8                   .dbline 0 ; func end
 02B8 0895              ret
 02BA                   .dbsym r i 20 c
 02BA                   .dbsym r value 22 c
 02BA                   .dbend
                        .area lit(rom, con, rel)
 0006           L80:
 0006 5800              .byte 'X,0
 0008 0000              .byte 0,0
 000A 00FF              .byte 0,255
                        .area text(rom, con, rel)
 02BA                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 02BA                   .dbfunc e MMC_Write_Sector _MMC_Write_Sector fc
 02BA           ;    spispeeddub -> y+7
 02BA           ;        spimode -> y+6
 02BA           ;            CMD -> y+0
 02BA           ;          retry -> R14
 02BA           ;            tmp -> R12
 02BA           ;              i -> R10,R11
 02BA           ;         Buffer -> y+22
 02BA           ;           addr -> y+18
                        .even
 02BA           _MMC_Write_Sector::
 02BA 0E940000          xcall push_arg4
 02BE 0E940000          xcall push_gset5
 02C2 2897              sbiw R28,8
 02C4                   .dbline -1
 02C4                   .dbline 351
 02C4           ; }
 02C4           ; 
 02C4           ; //****************************************************************************
 02C4           ; //Routine for writing a Block(512Byte) to MMC/SD-Card
 02C4           ; //Return 0 if sector writing is completed.
 02C4           ; uint8 MMC_Write_Sector(uint32 addr,uint8 *Buffer)
 02C4           ; //****************************************************************************
 02C4           ; {  
 02C4                   .dbline 355
 02C4           ;    uint8 tmp,retry;
 02C4           ;    uint16 i;
 02C4           ;    //Command 24 is a writing blocks command for MMC/SD-Card.
 02C4           ;    uint8 CMD[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; 
 02C4 80E0              ldi R24,<L80
 02C6 90E0              ldi R25,>L80
 02C8 FE01              movw R30,R28
 02CA 06E0              ldi R16,6
 02CC 10E0              ldi R17,0
 02CE FA93              st -y,R31
 02D0 EA93              st -y,R30
 02D2 9A93              st -y,R25
 02D4 8A93              st -y,R24
 02D6 0E940000          xcall asgncblk
 02DA                   .dbline 358
 02DA           ;    #if !(HW_SPI_Mode) 
 02DA           ;    uint8 spimode,spispeeddub;
 02DA           ;    spimode=SPCR; 
 02DA 2DB0              in R2,0xd
 02DC 2E82              std y+6,R2
 02DE                   .dbline 359
 02DE           ;    spispeeddub=SPSR;
 02DE 2EB0              in R2,0xe
 02E0 2F82              std y+7,R2
 02E2                   .dbline 360
 02E2           ;    SPCR&=~(1<<SPIE);
 02E2 6F98              cbi 0xd,7
 02E4                   .dbline 363
 02E4           ;    #endif
 02E4           ; //   CLI(); //clear all interrupt.
 02E4           ;    addr = addr << 9; //addr = addr * 512
 02E4 89E0              ldi R24,9
 02E6 90E0              ldi R25,0
 02E8 FE01              movw R30,R28
 02EA 2288              ldd R2,z+18
 02EC 3388              ldd R3,z+19
 02EE 4488              ldd R4,z+20
 02F0 5588              ldd R5,z+21
 02F2 8A93              st -y,R24
 02F4 8101              movw R16,R2
 02F6 9201              movw R18,R4
 02F8 0E940000          xcall lsl32
 02FC FE01              movw R30,R28
 02FE 028B              std z+18,R16
 0300 138B              std z+19,R17
 0302 248B              std z+20,R18
 0304 358B              std z+21,R19
 0306                   .dbline 365
 0306           ;       
 0306           ;    CMD[1] = ((addr & 0xFF000000) >>24 );
 0306 40E0              ldi R20,0
 0308 50E0              ldi R21,0
 030A 60E0              ldi R22,0
 030C 7FEF              ldi R23,255
 030E FE01              movw R30,R28
 0310 2288              ldd R2,z+18
 0312 3388              ldd R3,z+19
 0314 4488              ldd R4,z+20
 0316 5588              ldd R5,z+21
 0318 2422              and R2,R20
 031A 3522              and R3,R21
 031C 4622              and R4,R22
 031E 5722              and R5,R23
 0320 88E1              ldi R24,24
 0322 90E0              ldi R25,0
 0324 8A93              st -y,R24
 0326 8101              movw R16,R2
 0328 9201              movw R18,R4
 032A 0E940000          xcall lsr32
 032E 0983              std y+1,R16
 0330                   .dbline 366
 0330           ;    CMD[2] = ((addr & 0x00FF0000) >>16 );
 0330 40E0              ldi R20,0
 0332 50E0              ldi R21,0
 0334 6FEF              ldi R22,255
 0336 70E0              ldi R23,0
 0338 FE01              movw R30,R28
 033A 2288              ldd R2,z+18
 033C 3388              ldd R3,z+19
 033E 4488              ldd R4,z+20
 0340 5588              ldd R5,z+21
 0342 2422              and R2,R20
 0344 3522              and R3,R21
 0346 4622              and R4,R22
 0348 5722              and R5,R23
 034A 1201              movw R2,R4
 034C 4424              clr R4
 034E 5524              clr R5
 0350 2A82              std y+2,R2
 0352                   .dbline 367
 0352           ;    CMD[3] = ((addr & 0x0000FF00) >>8 );
 0352 40E0              ldi R20,0
 0354 5FEF              ldi R21,255
 0356 60E0              ldi R22,0
 0358 70E0              ldi R23,0
 035A FE01              movw R30,R28
 035C 2288              ldd R2,z+18
 035E 3388              ldd R3,z+19
 0360 4488              ldd R4,z+20
 0362 5588              ldd R5,z+21
 0364 2422              and R2,R20
 0366 3522              and R3,R21
 0368 4622              and R4,R22
 036A 5722              and R5,R23
 036C 88E0              ldi R24,8
 036E 90E0              ldi R25,0
 0370 8A93              st -y,R24
 0372 8101              movw R16,R2
 0374 9201              movw R18,R4
 0376 0E940000          xcall lsr32
 037A 0B83              std y+3,R16
 037C                   .dbline 370
 037C           ; 
 037C           ;    //Send Command CMD24 to MMC/SD-Card (Write 1 Block/512 Bytes)
 037C           ;    retry=0;
 037C EE24              clr R14
 037E           L84:
 037E                   .dbline 372
 037E           ;    do
 037E           ;    {  //Retry 100 times to send command.
 037E                   .dbline 373
 037E           ;       tmp=Write_Command_MMC(CMD);
 037E 8E01              movw R16,R28
 0380 1CDF              xcall _Write_Command_MMC
 0382 C02E              mov R12,R16
 0384                   .dbline 374
 0384           ;       retry++;
 0384 E394              inc R14
 0386                   .dbline 375
 0386           ;       if(retry==100) 
 0386 8E2D              mov R24,R14
 0388 8436              cpi R24,100
 038A 31F4              brne L87
 038C                   .dbline 376
 038C           ;       { 
 038C                   .dbline 378
 038C           ;            #if !(HW_SPI_Mode) 
 038C           ;                SPCR=spimode; 
 038C 0E80              ldd R0,y+6
 038E 0DB8              out 0xd,R0
 0390                   .dbline 379
 0390           ;                SPSR=spispeeddub;
 0390 0F80              ldd R0,y+7
 0392 0EB8              out 0xe,R0
 0394                   .dbline 381
 0394           ;                #endif
 0394           ;         return(FALSE); //send commamd Error!
 0394 0027              clr R16
 0396 3BC0              xjmp L79
 0398           L87:
 0398                   .dbline 383
 0398           ;       }
 0398           ;    }
 0398           L85:
 0398                   .dbline 384
 0398           ;    while(tmp!=0); 
 0398 CC20              tst R12
 039A 89F7              brne L84
 039C                   .dbline 387
 039C           ;    
 039C           ;    //Before writing,send 100 clock to MMC/SD-Card
 039C           ;    for (i=0;i<100;i++)
 039C AA24              clr R10
 039E BB24              clr R11
 03A0 04C0              xjmp L92
 03A2           L89:
 03A2                   .dbline 388
 03A2                   .dbline 389
 03A2 29DF              xcall _Read_Byte_MMC
 03A4                   .dbline 390
 03A4           L90:
 03A4                   .dbline 387
 03A4 C501              movw R24,R10
 03A6 0196              adiw R24,1
 03A8 5C01              movw R10,R24
 03AA           L92:
 03AA                   .dbline 387
 03AA C501              movw R24,R10
 03AC 8436              cpi R24,100
 03AE E0E0              ldi R30,0
 03B0 9E07              cpc R25,R30
 03B2 B8F3              brlo L89
 03B4                   .dbline 393
 03B4           ;    {
 03B4           ;       Read_Byte_MMC();       //此处会产生死等待
 03B4           ;    }
 03B4           ;       
 03B4           ;    //Send Start Byte to MMC/SD-Card
 03B4           ;    Write_Byte_MMC(0xFE);      
 03B4 0EEF              ldi R16,254
 03B6 51DF              xcall _Write_Byte_MMC
 03B8                   .dbline 396
 03B8           ;       
 03B8           ;    //Now send real data Bolck (512Bytes) to MMC/SD-Card
 03B8           ;    for (i=0;i<512;i++)
 03B8 AA24              clr R10
 03BA BB24              clr R11
 03BC 09C0              xjmp L96
 03BE           L93:
 03BE                   .dbline 397
 03BE                   .dbline 398
 03BE EE89              ldd R30,y+22
 03C0 FF89              ldd R31,y+23
 03C2 0191              ld R16,Z+
 03C4 FF8B              std y+23,R31
 03C6 EE8B              std y+22,R30
 03C8 48DF              xcall _Write_Byte_MMC
 03CA                   .dbline 399
 03CA           L94:
 03CA                   .dbline 396
 03CA C501              movw R24,R10
 03CC 0196              adiw R24,1
 03CE 5C01              movw R10,R24
 03D0           L96:
 03D0                   .dbline 396
 03D0 C501              movw R24,R10
 03D2 8030              cpi R24,0
 03D4 E2E0              ldi R30,2
 03D6 9E07              cpc R25,R30
 03D8 90F3              brlo L93
 03DA                   .dbline 402
 03DA           ;    {
 03DA           ;       Write_Byte_MMC(*Buffer++); //send 512 bytes to Card
 03DA           ;    }
 03DA           ; 
 03DA           ;    //CRC-Byte 
 03DA           ;    Write_Byte_MMC(0xFF); //Dummy CRC
 03DA 0FEF              ldi R16,255
 03DC 3EDF              xcall _Write_Byte_MMC
 03DE                   .dbline 403
 03DE           ;    Write_Byte_MMC(0xFF); //CRC Code
 03DE 0FEF              ldi R16,255
 03E0 3CDF              xcall _Write_Byte_MMC
 03E2                   .dbline 406
 03E2           ;    
 03E2           ;     
 03E2           ;    tmp=Read_Byte_MMC();   // read response
 03E2 09DF              xcall _Read_Byte_MMC
 03E4 C02E              mov R12,R16
 03E6                   .dbline 407
 03E6           ;    if((tmp & 0x1F)!=0x05) // data block accepted ?
 03E6 8C2D              mov R24,R12
 03E8 8F71              andi R24,31
 03EA 8530              cpi R24,5
 03EC 39F0              breq L100
 03EE                   .dbline 408
 03EE           ;    {
 03EE                   .dbline 409
 03EE           ;      MMC_Disable();
 03EE C49A              sbi 0x18,4
 03F0                   .dbline 409
 03F0                   .dbline 411
 03F0           ;        #if !(HW_SPI_Mode) 
 03F0           ;        SPCR=spimode; 
 03F0 0E80              ldd R0,y+6
 03F2 0DB8              out 0xd,R0
 03F4                   .dbline 412
 03F4           ;        SPSR=spispeeddub;
 03F4 0F80              ldd R0,y+7
 03F6 0EB8              out 0xe,R0
 03F8                   .dbline 414
 03F8           ;        #endif
 03F8           ;      return(FALSE); //Error!
 03F8 0027              clr R16
 03FA 09C0              xjmp L79
 03FC           L99:
 03FC                   .dbline 417
 03FC                   .dbline 417
 03FC           L100:
 03FC                   .dbline 417

⌨️ 快捷键说明

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