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

📄 sdmmc.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 03FC           ;    }
 03FC           ;    //Wait till MMC/SD-Card is not busy
 03FC           ;    while (Read_Byte_MMC()!=0xff){};
 03FC FCDE              xcall _Read_Byte_MMC
 03FE 0F3F              cpi R16,255
 0400 E9F7              brne L99
 0402                   .dbline 417
 0402                   .dbline 420
 0402           ;       
 0402           ;    //set MMC_Chip_Select to high (MMC/SD-Card Invalid)
 0402           ;    MMC_Disable();
 0402 C49A              sbi 0x18,4
 0404                   .dbline 420
 0404                   .dbline 422
 0404           ;    #if !(HW_SPI_Mode) 
 0404           ;    SPCR=spimode; 
 0404 0E80              ldd R0,y+6
 0406 0DB8              out 0xd,R0
 0408                   .dbline 423
 0408           ;    SPSR=spispeeddub;
 0408 0F80              ldd R0,y+7
 040A 0EB8              out 0xe,R0
 040C                   .dbline 425
 040C           ;    #endif
 040C           ;    return(TRUE);
 040C 01E0              ldi R16,1
 040E                   .dbline -2
 040E           L79:
 040E 2896              adiw R28,8
 0410 0E940000          xcall pop_gset5
 0414 2496              adiw R28,4
 0416                   .dbline 0 ; func end
 0416 0895              ret
 0418                   .dbsym l spispeeddub 7 c
 0418                   .dbsym l spimode 6 c
 0418                   .dbsym l CMD 0 A[6:6]c
 0418                   .dbsym r retry 14 c
 0418                   .dbsym r tmp 12 c
 0418                   .dbsym r i 10 i
 0418                   .dbsym l Buffer 22 pc
 0418                   .dbsym l addr 18 l
 0418                   .dbend
 0418                   .dbfunc e MMC_Read_Block _MMC_Read_Block fc
 0418           ;    spispeeddub -> R20
 0418           ;        spimode -> R22
 0418           ;           temp -> R12
 0418           ;          retry -> R10
 0418           ;              i -> R12,R13
 0418           ;          Bytes -> R14,R15
 0418           ;         Buffer -> y+12
 0418           ;            CMD -> y+10
                        .even
 0418           _MMC_Read_Block::
 0418 0E940000          xcall push_arg4
 041C 0E940000          xcall push_gset5
 0420 EE84              ldd R14,y+14
 0422 FF84              ldd R15,y+15
 0424                   .dbline -1
 0424                   .dbline 433
 0424           ; } 
 0424           ; 
 0424           ; //****************************************************************************
 0424           ; //Routine for reading data Registers of MMC/SD-Card
 0424           ; //Return 0 if no Error.
 0424           ; uint8 MMC_Read_Block(uint8 *CMD,uint8 *Buffer,uint16 Bytes)
 0424           ; //****************************************************************************
 0424           ; {  
 0424                   .dbline 438
 0424           ;    uint16 i; 
 0424           ;    uint8 retry,temp;
 0424           ;    #if !(HW_SPI_Mode) 
 0424           ;    uint8 spimode,spispeeddub;
 0424           ;    spimode=SPCR; 
 0424 6DB1              in R22,0xd
 0426                   .dbline 439
 0426           ;    spispeeddub=SPSR;
 0426 4EB1              in R20,0xe
 0428                   .dbline 440
 0428           ;    SPCR&=~(1<<SPIE);
 0428 6F98              cbi 0xd,7
 042A                   .dbline 443
 042A           ;    #endif
 042A           ;    //Send Command CMD to MMC/SD-Card
 042A           ;    retry=0;
 042A AA24              clr R10
 042C           L103:
 042C                   .dbline 445
 042C           ;    do
 042C           ;    {  //Retry 100 times to send command.
 042C                   .dbline 446
 042C           ;       temp=Write_Command_MMC(CMD);
 042C 0A85              ldd R16,y+10
 042E 1B85              ldd R17,y+11
 0430 C4DE              xcall _Write_Command_MMC
 0432 C02E              mov R12,R16
 0434                   .dbline 447
 0434           ;       retry++;
 0434 A394              inc R10
 0436                   .dbline 448
 0436           ;       if(retry==100) 
 0436 8A2D              mov R24,R10
 0438 8436              cpi R24,100
 043A 21F4              brne L106
 043C                   .dbline 449
 043C           ;       {
 043C                   .dbline 451
 043C           ;             #if !(HW_SPI_Mode) 
 043C           ;                 SPCR=spimode; 
 043C 6DB9              out 0xd,R22
 043E                   .dbline 452
 043E           ;                 SPSR=spispeeddub;
 043E 4EB9              out 0xe,R20
 0440                   .dbline 454
 0440           ;                 #endif
 0440           ;         return(READ_BLOCK_ERROR); //block read Error!
 0440 04E0              ldi R16,4
 0442 1BC0              xjmp L102
 0444           L106:
 0444                   .dbline 456
 0444           ;       }
 0444           ;    }
 0444           L104:
 0444                   .dbline 457
 0444           ;    while(temp!=0); 
 0444 CC20              tst R12
 0446 91F7              brne L103
 0448           L108:
 0448                   .dbline 460
 0448                   .dbline 460
 0448           L109:
 0448                   .dbline 460
 0448           ;                       
 0448           ;    //Read Start Byte form MMC/SD-Card (FEh/Start Byte)
 0448           ;    while (Read_Byte_MMC() != 0xfe){};
 0448 D6DE              xcall _Read_Byte_MMC
 044A 0E3F              cpi R16,254
 044C E9F7              brne L108
 044E                   .dbline 460
 044E                   .dbline 463
 044E           ;       
 044E           ;    //Write blocks(normal 512Bytes) to MMC/SD-Card
 044E           ;    for (i=0;i<Bytes;i++)
 044E CC24              clr R12
 0450 DD24              clr R13
 0452 0AC0              xjmp L114
 0454           L111:
 0454                   .dbline 464
 0454                   .dbline 465
 0454 D0DE              xcall _Read_Byte_MMC
 0456 202E              mov R2,R16
 0458 EC85              ldd R30,y+12
 045A FD85              ldd R31,y+13
 045C 2192              st Z+,R2
 045E FD87              std y+13,R31
 0460 EC87              std y+12,R30
 0462                   .dbline 466
 0462           L112:
 0462                   .dbline 463
 0462 C601              movw R24,R12
 0464 0196              adiw R24,1
 0466 6C01              movw R12,R24
 0468           L114:
 0468                   .dbline 463
 0468 CE14              cp R12,R14
 046A DF04              cpc R13,R15
 046C 98F3              brlo L111
 046E                   .dbline 469
 046E           ;    {
 046E           ;       *Buffer++ = Read_Byte_MMC();
 046E           ;    }
 046E           ;    
 046E           ;    //CRC-Byte
 046E           ;    Read_Byte_MMC();//CRC - Byte 
 046E C3DE              xcall _Read_Byte_MMC
 0470                   .dbline 470
 0470           ;    Read_Byte_MMC();//CRC - Byte
 0470 C2DE              xcall _Read_Byte_MMC
 0472                   .dbline 473
 0472           ;       
 0472           ;    //set MMC_Chip_Select to high (MMC/SD-Card invalid)
 0472           ;    MMC_Disable();
 0472 C49A              sbi 0x18,4
 0474                   .dbline 473
 0474                   .dbline 475
 0474           ;    #if !(HW_SPI_Mode) 
 0474           ;    SPCR=spimode; 
 0474 6DB9              out 0xd,R22
 0476                   .dbline 476
 0476           ;    SPSR=spispeeddub;
 0476 4EB9              out 0xe,R20
 0478                   .dbline 478
 0478           ;    #endif
 0478           ;    return(0);
 0478 0027              clr R16
 047A                   .dbline -2
 047A           L102:
 047A 0E940000          xcall pop_gset5
 047E 2496              adiw R28,4
 0480                   .dbline 0 ; func end
 0480 0895              ret
 0482                   .dbsym r spispeeddub 20 c
 0482                   .dbsym r spimode 22 c
 0482                   .dbsym r temp 12 c
 0482                   .dbsym r retry 10 c
 0482                   .dbsym r i 12 i
 0482                   .dbsym r Bytes 14 i
 0482                   .dbsym l Buffer 12 pc
 0482                   .dbsym l CMD 10 pc
 0482                   .dbend
                        .area lit(rom, con, rel)
 000C           L116:
 000C 5100              .byte 'Q,0
 000E 0000              .byte 0,0
 0010 00FF              .byte 0,255
                        .area text(rom, con, rel)
 0482                   .dbfile D:\桌面\mp3\sdmmc\sdmmc.c
 0482                   .dbfunc e MMC_Read_Sector _MMC_Read_Sector fc
 0482           ;           temp -> <dead>
 0482           ;            CMD -> y+2
 0482           ;         Buffer -> y+16
 0482           ;           addr -> y+12
                        .even
 0482           _MMC_Read_Sector::
 0482 0E940000          xcall push_arg4
 0486 0E940000          xcall push_gset2
 048A 2897              sbiw R28,8
 048C                   .dbline -1
 048C                   .dbline 487
 048C           ; }
 048C           ; 
 048C           ; 
 048C           ; //****************************************************************************
 048C           ; //Routine for reading Blocks(512Byte) from MMC/SD-Card
 048C           ; //Return 0 if no Error.
 048C           ; uint8 MMC_Read_Sector(uint32 addr,uint8 *Buffer)
 048C           ; //****************************************************************************
 048C           ; {     
 048C                   .dbline 489
 048C           ;    //Command 16 is reading Blocks from MMC/SD-Card
 048C           ;    uint8 CMD[] = {0x51,0x00,0x00,0x00,0x00,0xFF}; 
 048C 80E0              ldi R24,<L116
 048E 90E0              ldi R25,>L116
 0490 FE01              movw R30,R28
 0492 3296              adiw R30,2
 0494 06E0              ldi R16,6
 0496 10E0              ldi R17,0
 0498 FA93              st -y,R31
 049A EA93              st -y,R30
 049C 9A93              st -y,R25
 049E 8A93              st -y,R24
 04A0 0E940000          xcall asgncblk
 04A4                   .dbline 494
 04A4           ;    uint8 temp;
 04A4           ;    
 04A4           ;    //#asm("cli"); //clear all interrupt.
 04A4           ;    //Address conversation(logic block address-->byte address)  
 04A4           ;    addr = addr << 9; //addr = addr * 512
 04A4 89E0              ldi R24,9
 04A6 90E0              ldi R25,0
 04A8 FE01              movw R30,R28
 04AA 2484              ldd R2,z+12
 04AC 3584              ldd R3,z+13
 04AE 4684              ldd R4,z+14
 04B0 5784              ldd R5,z+15
 04B2 8A93              st -y,R24
 04B4 8101              movw R16,R2
 04B6 9201              movw R18,R4
 04B8 0E940000          xcall lsl32
 04BC FE01              movw R30,R28
 04BE 0487              std z+12,R16
 04C0 1587              std z+13,R17
 04C2 2687              std z+14,R18
 04C4 3787              std z+15,R19
 04C6                   .dbline 496
 04C6           ; 
 04C6           ;    CMD[1] = ((addr & 0xFF000000) >>24 );
 04C6 40E0              ldi R20,0
 04C8 50E0              ldi R21,0
 04CA 60E0              ldi R22,0
 04CC 7FEF              ldi R23,255
 04CE FE01              movw R30,R28
 04D0 2484              ldd R2,z+12
 04D2 3584              ldd R3,z+13
 04D4 4684              ldd R4,z+14
 04D6 5784              ldd R5,z+15
 04D8 2422              and R2,R20
 04DA 3522              and R3,R21
 04DC 4622              and R4,R22
 04DE 5722              and R5,R23
 04E0 88E1              ldi R24,24
 04E2 90E0              ldi R25,0
 04E4 8A93              st -y,R24
 04E6 8101              movw R16,R2
 04E8 9201              movw R18,R4
 04EA 0E940000          xcall lsr32
 04EE 0B83              std y+3,R16
 04F0                   .dbline 497
 04F0           ;    CMD[2] = ((addr & 0x00FF0000) >>16 );
 04F0 40E0              ldi R20,0
 04F2 50E0              ldi R21,0
 04F4 6FEF              ldi R22,255
 04F6 70E0              ldi R23,0
 04F8 FE01              movw R30,R28
 04FA 2484              ldd R2,z+12
 04FC 3584              ldd R3,z+13
 04FE 4684              ldd R4,z+14
 0500 5784              ldd R5,z+15
 0502 2422              and R2,R20
 0504 3522              and R3,R21
 0506 4622              and R4,R22
 0508 5722              and R5,R23
 050A 1201              movw R2,R4
 050C 4424              clr R4
 050E 5524              clr R5
 0510 2C82              std y+4,R2
 0512                   .dbline 498
 0512           ;    CMD[3] = ((addr & 0x0000FF00) >>8 );
 0512 40E0              ldi R20,0
 0514 5FEF              ldi R21,255
 0516 

⌨️ 快捷键说明

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