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

📄 sdmmc.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01C0           ;    uint8 retry=0;
 01C0 6627              clr R22
 01C2                   .dbline 249
 01C2           ;    uint8 i;
 01C2           ; 
 01C2           ;    //set MMC_Chip_Select to high (MMC/SD-Card disable) 
 01C2           ;    MMC_Disable();
 01C2 C49A              sbi 0x18,4
 01C4                   .dbline 249
 01C4                   .dbline 251
 01C4           ;    //send 8 Clock Impulse
 01C4           ;    Write_Byte_MMC(0xFF);
 01C4 0FEF              ldi R16,255
 01C6 49D0              xcall _Write_Byte_MMC
 01C8                   .dbline 253
 01C8           ;    //set MMC_Chip_Select to low (MMC/SD-Card active)
 01C8           ;    MMC_Enable();
 01C8 C498              cbi 0x18,4
 01CA                   .dbline 253
 01CA                   .dbline 256
 01CA           ; 
 01CA           ;    //send 6 Byte Command to MMC/SD-Card
 01CA           ;    for (i=0;i<0x06;i++) 
 01CA 4427              clr R20
 01CC 05C0              xjmp L44
 01CE           L41:
 01CE                   .dbline 257
 01CE                   .dbline 258
 01CE F601              movw R30,R12
 01D0 0191              ld R16,Z+
 01D2 6F01              movw R12,R30
 01D4 42D0              xcall _Write_Byte_MMC
 01D6                   .dbline 259
 01D6           L42:
 01D6                   .dbline 256
 01D6 4395              inc R20
 01D8           L44:
 01D8                   .dbline 256
 01D8 4630              cpi R20,6
 01DA C8F3              brlo L41
 01DC                   .dbline 262
 01DC           ;    { 
 01DC           ;       Write_Byte_MMC(*CMD++);
 01DC           ;    }
 01DC           ;    
 01DC           ;    //get 16 bit response
 01DC           ;    Read_Byte_MMC(); //read the first byte,ignore it. 
 01DC 0CD0              xcall _Read_Byte_MMC
 01DE           L45:
 01DE                   .dbline 264
 01DE           ;    do 
 01DE           ;    {  //Only last 8 bit is used here.Read it out. 
 01DE                   .dbline 265
 01DE           ;       tmp = Read_Byte_MMC();
 01DE 0BD0              xcall _Read_Byte_MMC
 01E0 A02E              mov R10,R16
 01E2                   .dbline 266
 01E2           ;       retry++;
 01E2 6395              inc R22
 01E4                   .dbline 267
 01E4           ;    }
 01E4           L46:
 01E4                   .dbline 268
 01E4           ;    while((tmp==0xff)&&(retry<100)); 
 01E4 8A2D              mov R24,R10
 01E6 8F3F              cpi R24,255
 01E8 11F4              brne L48
 01EA 6436              cpi R22,100
 01EC C0F3              brlo L45
 01EE           L48:
 01EE                   .dbline 269
 01EE           ;    return(tmp);
 01EE 0A2D              mov R16,R10
 01F0                   .dbline -2
 01F0           L40:
 01F0 0E940000          xcall pop_gset4
 01F4                   .dbline 0 ; func end
 01F4 0895              ret
 01F6                   .dbsym r i 20 c
 01F6                   .dbsym r retry 22 c
 01F6                   .dbsym r tmp 10 c
 01F6                   .dbsym r CMD 12 pc
 01F6                   .dbend
 01F6                   .dbfunc e Read_Byte_MMC _Read_Byte_MMC fc
 01F6           ;              i -> R22
 01F6           ;           temp -> R20
                        .even
 01F6           _Read_Byte_MMC::
 01F6 0E940000          xcall push_gset2
 01FA                   .dbline -1
 01FA                   .dbline 276
 01FA           ; }
 01FA           ; 
 01FA           ; //****************************************************************************
 01FA           ; //Routine for reading a byte from MMC/SD-Card
 01FA           ; uint8 Read_Byte_MMC(void)
 01FA           ; //****************************************************************************
 01FA           ; { 
 01FA                   .dbline 277
 01FA           ;    uint8 temp=0;
 01FA 4427              clr R20
 01FC                   .dbline 279
 01FC           ;    uint8 i;
 01FC           ;    MMC_PORT&=~(1<<SPI_Busy);
 01FC C098              cbi 0x18,0
 01FE                   .dbline 281
 01FE           ;    //Software SPI
 01FE           ;    if(Init_Flag)
 01FE 20900000          lds R2,_Init_Flag
 0202 2220              tst R2
 0204 01F1              breq L50
 0206                   .dbline 282
 0206           ;       {
 0206                   .dbline 283
 0206           ;         for (i=0; i<8; i++) //MSB First
 0206 6627              clr R22
 0208 1BC0              xjmp L55
 020A           L52:
 020A                   .dbline 284
 020A           ;          {
 020A                   .dbline 285
 020A           ;                MMC_PORT&=~(1<<SPI_CLK); //Clock Impuls (Low)
 020A C798              cbi 0x18,7
 020C                   .dbline 286
 020C           ;                if(Init_Flag) 
 020C 20900000          lds R2,_Init_Flag
 0210 2220              tst R2
 0212 11F0              breq L56
 0214                   .dbline 287
 0214           ;                delay_us(200);
 0214 08EC              ldi R16,200
 0216 02D3              xcall _delay_us
 0218           L56:
 0218                   .dbline 288
 0218           ;                temp = (temp << 1) + ((MMC_PIN&(1<<SPI_MISO))>>SPI_MISO); //read mmc data out pin 
 0218 86B3              in R24,0x16
 021A 8074              andi R24,64
 021C 8695              lsr R24
 021E 8695              lsr R24
 0220 8695              lsr R24
 0222 8695              lsr R24
 0224 8695              lsr R24
 0226 8695              lsr R24
 0228 242E              mov R2,R20
 022A 220C              lsl R2
 022C 280E              add R2,R24
 022E 422D              mov R20,R2
 0230                   .dbline 289
 0230           ;                MMC_PORT|=(1<<SPI_CLK); //set Clock Impuls High
 0230 C79A              sbi 0x18,7
 0232                   .dbline 290
 0232           ;                if(Init_Flag) 
 0232 20900000          lds R2,_Init_Flag
 0236 2220              tst R2
 0238 11F0              breq L58
 023A                   .dbline 291
 023A           ;                delay_us(200); 
 023A 08EC              ldi R16,200
 023C EFD2              xcall _delay_us
 023E           L58:
 023E                   .dbline 292
 023E           L53:
 023E                   .dbline 283
 023E 6395              inc R22
 0240           L55:
 0240                   .dbline 283
 0240 6830              cpi R22,8
 0242 18F3              brlo L52
 0244                   .dbline 294
 0244           ;            }
 0244           ;    
 0244           ;       }
 0244 05C0              xjmp L51
 0246           L50:
 0246                   .dbline 296
 0246           ;    else
 0246           ;       {
 0246                   .dbline 298
 0246           ;         #if !(HW_SPI_Mode) 
 0246           ;         SPDR=0xFF; 
 0246 8FEF              ldi R24,255
 0248 8FB9              out 0xf,R24
 024A           L60:
 024A                   .dbline 299
 024A                   .dbline 299
 024A           L61:
 024A                   .dbline 299
 024A           ;       while(!(SPSR & 0x80)){}; 
 024A 779B              sbis 0xe,7
 024C FECF              rjmp L60
 024E                   .dbline 299
 024E                   .dbline 300
 024E           ;         temp=SPDR;
 024E 4FB1              in R20,0xf
 0250                   .dbline 304
 0250           ;         #else
 0250           ;         Spi_SendReceive(&temp,1,1);
 0250           ;         #endif
 0250           ;        }
 0250           L51:
 0250                   .dbline 305
 0250           ;    MMC_PORT|=(1<<SPI_Busy);
 0250 C09A              sbi 0x18,0
 0252                   .dbline 306
 0252           ;    return (temp);
 0252 042F              mov R16,R20
 0254                   .dbline -2
 0254           L49:
 0254 0E940000          xcall pop_gset2
 0258                   .dbline 0 ; func end
 0258 0895              ret
 025A                   .dbsym r i 22 c
 025A                   .dbsym r temp 20 c
 025A                   .dbend
 025A                   .dbfunc e Write_Byte_MMC _Write_Byte_MMC fV
 025A           ;              i -> R20
 025A           ;          value -> R22
                        .even
 025A           _Write_Byte_MMC::
 025A 0E940000          xcall push_gset2
 025E 602F              mov R22,R16
 0260                   .dbline -1
 0260                   .dbline 313
 0260           ; }
 0260           ; 
 0260           ; //****************************************************************************
 0260           ; //Routine for sending a byte to MMC/SD-Card
 0260           ; void Write_Byte_MMC(uint8 value)
 0260           ; //****************************************************************************
 0260           ; { 
 0260                   .dbline 315
 0260           ;    uint8 i;
 0260           ;    MMC_PORT&=~(1<<SPI_Busy); 
 0260 C098              cbi 0x18,0
 0262                   .dbline 317
 0262           ;    //Software SPI
 0262           ;    if(Init_Flag){
 0262 20900000          lds R2,_Init_Flag
 0266 2220              tst R2
 0268 09F1              breq L64
 026A                   .dbline 317
 026A                   .dbline 318
 026A           ;    for (i=0; i<8; i++) 
 026A 4427              clr R20
 026C 1BC0              xjmp L69
 026E           L66:
 026E                   .dbline 319
 026E           ;    {  //write a byte
 026E                   .dbline 320
 026E           ;       if (((value >> (7-i)) & 0x01)==0x01)
 026E 17E0              ldi R17,7
 0270 141B              sub R17,R20
 0272 062F              mov R16,R22
 0274 0E940000          xcall lsr8
 0278 802F              mov R24,R16
 027A 8170              andi R24,1
 027C 8130              cpi R24,1
 027E 11F4              brne L70
 0280                   .dbline 321
 0280           ;              MMC_PORT|=(1<<SPI_MOSI); //Send bit by bit(MSB First)
 0280 C59A              sbi 0x18,5
 0282 01C0              xjmp L71
 0284           L70:
 0284                   .dbline 323
 0284           ;       else 
 0284           ;              MMC_PORT&=~(1<<SPI_MOSI);
 0284 C598              cbi 0x18,5
 0286           L71:
 0286                   .dbline 324
 0286           ;       MMC_PORT&=~(1<<SPI_CLK); //set Clock Impuls low
 0286 C798              cbi 0x18,7
 0288                   .dbline 325
 0288           ;       if(Init_Flag) 
 0288 20900000          lds R2,_Init_Flag
 028C 2220              tst R2
 028E 11F0              breq L72
 0290                   .dbline 326
 0290           ;                 delay_us(200); 
 0290 08EC              ldi R16,200
 0292 C4D2              xcall _delay_us
 0294           L72:
 0294                   .dbline 327
 0294           ;       MMC_PORT|=(1<<SPI_CLK); //set Clock Impuls High
 0294 C79A              sbi 0x18,7
 0296                   .dbline 328
 0296           ;       if(Init_Flag) 
 0296 20900000          lds R2,_Init_Flag
 029A 2220              tst R2
 029C 11F0              breq L74
 029E                   .dbline 329
 029E           ;                 delay_us(200);     
 029E 08EC              ldi R16,200
 02A0 BDD2              xcall _delay_us
 02A2           L74:
 02A2                   .dbline 330
 02A2           L67:
 02A2                   .dbline 318
 02A2 4395              inc R20
 02A4           L69:
 02A4                   .dbline 318
 02A4 4830              cpi R20,8
 02A6 18F3              brlo L66
 02A8                   .dbline 331
 02A8           ;    }//write a byte
 02A8           ;    MMC_PORT|=(1<<SPI_MOSI);   //set Output High 
 02A8 C59A              sbi 0x18,5
 02AA                   .dbline 333
 02AA           ; 
 02AA           ;    }
 02AA 03C0              xjmp L65
 02AC           L64:
 02AC                   .dbline 335
 02AC           ;    else
 02AC           ;          {
 02AC                   .dbline 337
 02AC           ;          #if !(HW_SPI_Mode) 
 02AC           ;          SPDR=value;
 02AC 6FB9              out 0xf,R22
 02AE           L76:
 02AE                   .dbline 338
 02AE                   .dbline 338
 02AE           L77:
 02AE                   .dbline 338

⌨️ 快捷键说明

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