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

📄 sdmmc.lis

📁 mp3代码 要用的干净下啊 希望用东西共享啊
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0094 09C0              xjmp L8
 0096           L27:
 0096                   .dbline 145
 0096           ;      }
 0096           ;    } 
 0096           L25:
 0096                   .dbline 146
 0096           ;    while(temp!=0);
 0096 AA20              tst R10
 0098 A9F7              brne L24
 009A                   .dbline 148
 009A           ;    
 009A           ;    Init_Flag=0; //Init is completed,clear the flag 
 009A 2224              clr R2
 009C 20920000          sts _Init_Flag,R2
 00A0                   .dbline 150
 00A0           ;    
 00A0           ;    MMC_Disable();  //set MMC_Chip_Select to high 
 00A0 C49A              sbi 0x18,4
 00A2                   .dbline 150
 00A2                   .dbline 151
 00A2           ;    SPCR=spimode; 
 00A2 6DB9              out 0xd,R22
 00A4                   .dbline 152
 00A4           ;    SPSR=spispeeddub;
 00A4 4EB9              out 0xe,R20
 00A6                   .dbline 153
 00A6           ;    return(0); //All commands have been taken.
 00A6 0027              clr R16
 00A8                   .dbline -2
 00A8           L8:
 00A8 2696              adiw R28,6
 00AA 0E940000          xcall pop_gset5
 00AE                   .dbline 0 ; func end
 00AE 0895              ret
 00B0                   .dbsym r spispeeddub 20 c
 00B0                   .dbsym r spimode 22 c
 00B0                   .dbsym l CMD 0 A[6:6]c
 00B0                   .dbsym r temp 10 c
 00B0                   .dbsym r i 12 c
 00B0                   .dbsym r retry 14 c
 00B0                   .dbend
 00B0                   .dbfunc e MMC_get_volume_info _MMC_get_volume_info fV
 00B0                   .dbstruct 0 11 MMC_VOLUME_INFO
 00B0                   .dbfield 0 size_MB i
 00B0                   .dbfield 2 sector_multiply c
 00B0                   .dbfield 3 sector_count i
 00B0                   .dbfield 5 name A[6:6]c
 00B0                   .dbend
 00B0           ;            tmp -> y+16
 00B0           ;    spispeeddub -> R20
 00B0           ;        spimode -> R22
 00B0           ;         buffer -> y+0
 00B0           ;           vinf -> R10,R11
                        .even
 00B0           _MMC_get_volume_info::
 00B0 0E940000          xcall push_gset3
 00B4 5801              movw R10,R16
 00B6 6497              sbiw R28,20
 00B8                   .dbline -1
 00B8                   .dbline 163
 00B8           ; } 
 00B8           ; 
 00B8           ; //****************************************************************************
 00B8           ; //returns the :
 00B8           ; //    size of the card in MB ( ret * 1024^2) == bytes
 00B8           ; //    sector count and multiplier MB are in u08 == C_SIZE / (2^(9-C_SIZE_MULT))
 00B8           ; //    name of the media 
 00B8           ; void MMC_get_volume_info(VOLUME_INFO_TYPE *vinf)
 00B8           ; //****************************************************************************
 00B8           ; {   
 00B8                   .dbline 168
 00B8           ; 
 00B8           ;    uint8 tmp[4],buffer[16];
 00B8           ;    #if !(HW_SPI_Mode) 
 00B8           ;    uint8 spimode,spispeeddub;
 00B8           ;    spimode=SPCR; 
 00B8 6DB1              in R22,0xd
 00BA                   .dbline 169
 00BA           ;    spispeeddub=SPSR;
 00BA 4EB1              in R20,0xe
 00BC                   .dbline 170
 00BC           ;    SPCR&=~(1<<SPIE);
 00BC 6F98              cbi 0xd,7
 00BE                   .dbline 174
 00BE           ;    #endif     
 00BE           ;     
 00BE           ;       // read the CSD register
 00BE           ;     Read_CSD_MMC(buffer);
 00BE 8E01              movw R16,R28
 00C0 6FD2              xcall _Read_CSD_MMC
 00C2                   .dbline 179
 00C2           ;       // get the C_SIZE value. bits [73:62] of data
 00C2           ;       // [73:72] == buffer[6] && 0x03
 00C2           ;       // [71:64] == buffer[7]
 00C2           ;       // [63:62] == buffer[8] && 0xc0
 00C2           ;       vinf->sector_count = buffer[6] & 0x03;
 00C2 8E81              ldd R24,y+6
 00C4 9927              clr R25
 00C6 8370              andi R24,3
 00C8 9070              andi R25,0
 00CA F501              movw R30,R10
 00CC 9483              std z+4,R25
 00CE 8383              std z+3,R24
 00D0                   .dbline 180
 00D0           ;       vinf->sector_count <<= 8;
 00D0 C501              movw R24,R10
 00D2 0396              adiw R24,3
 00D4 FC01              movw R30,R24
 00D6 4080              ldd R4,z+0
 00D8 5180              ldd R5,z+1
 00DA 542C              mov R5,R4
 00DC 4424              clr R4
 00DE 5182              std z+1,R5
 00E0 4082              std z+0,R4
 00E2                   .dbline 181
 00E2           ;       vinf->sector_count += buffer[7];
 00E2 C501              movw R24,R10
 00E4 0396              adiw R24,3
 00E6 4F80              ldd R4,y+7
 00E8 5524              clr R5
 00EA FC01              movw R30,R24
 00EC 6080              ldd R6,z+0
 00EE 7180              ldd R7,z+1
 00F0 640C              add R6,R4
 00F2 751C              adc R7,R5
 00F4 7182              std z+1,R7
 00F6 6082              std z+0,R6
 00F8                   .dbline 182
 00F8           ;       vinf->sector_count <<= 2;
 00F8 C501              movw R24,R10
 00FA 0396              adiw R24,3
 00FC FC01              movw R30,R24
 00FE 4080              ldd R4,z+0
 0100 5180              ldd R5,z+1
 0102 440C              lsl R4
 0104 551C              rol R5
 0106 440C              lsl R4
 0108 551C              rol R5
 010A 5182              std z+1,R5
 010C 4082              std z+0,R4
 010E                   .dbline 183
 010E           ;       vinf->sector_count += (buffer[8] & 0xc0) >> 6;
 010E C501              movw R24,R10
 0110 0396              adiw R24,3
 0112 1C01              movw R2,R24
 0114 26E0              ldi R18,6
 0116 30E0              ldi R19,0
 0118 0885              ldd R16,y+8
 011A 1127              clr R17
 011C 007C              andi R16,192
 011E 1070              andi R17,0
 0120 0E940000          xcall asr16
 0124 F101              movw R30,R2
 0126 4080              ldd R4,z+0
 0128 5180              ldd R5,z+1
 012A 400E              add R4,R16
 012C 511E              adc R5,R17
 012E 5182              std z+1,R5
 0130 4082              std z+0,R4
 0132                   .dbline 188
 0132           ;               
 0132           ;       // get the val for C_SIZE_MULT. bits [49:47] of sectorBuffer.data
 0132           ;       // [49:48] == buffer[5] && 0x03
 0132           ;       // [47]    == buffer[4] && 0x80
 0132           ;       vinf->sector_multiply = buffer[9] & 0x03;
 0132 8985              ldd R24,y+9
 0134 8370              andi R24,3
 0136 F501              movw R30,R10
 0138 8283              std z+2,R24
 013A                   .dbline 189
 013A           ;       vinf->sector_multiply <<= 1;
 013A C501              movw R24,R10
 013C 0296              adiw R24,2
 013E FC01              movw R30,R24
 0140 4080              ldd R4,z+0
 0142 440C              lsl R4
 0144 4082              std z+0,R4
 0146                   .dbline 190
 0146           ;       vinf->sector_multiply += (buffer[10] & 0x80) >> 7;
 0146 C501              movw R24,R10
 0148 0296              adiw R24,2
 014A 1C01              movw R2,R24
 014C 8A85              ldd R24,y+10
 014E 8078              andi R24,128
 0150 8695              lsr R24
 0152 8695              lsr R24
 0154 8695              lsr R24
 0156 8695              lsr R24
 0158 8695              lsr R24
 015A 8695              lsr R24
 015C 8695              lsr R24
 015E F101              movw R30,R2
 0160 4080              ldd R4,z+0
 0162 480E              add R4,R24
 0164 4082              std z+0,R4
 0166                   .dbline 194
 0166           ; 
 0166           ;       // work out the MBs
 0166           ;       // mega bytes in u08 == C_SIZE / (2^(9-C_SIZE_MULT))
 0166           ;       vinf->size_MB = vinf->sector_count >> (9-vinf->sector_multiply);
 0166 F501              movw R30,R10
 0168 2280              ldd R2,z+2
 016A 3324              clr R3
 016C 29E0              ldi R18,9
 016E 30E0              ldi R19,0
 0170 2219              sub R18,R2
 0172 3309              sbc R19,R3
 0174 F501              movw R30,R10
 0176 0381              ldd R16,z+3
 0178 1481              ldd R17,z+4
 017A 0E940000          xcall lsr16
 017E F501              movw R30,R10
 0180 1183              std z+1,R17
 0182 0083              std z+0,R16
 0184                   .dbline 196
 0184           ;       // get the name of the card
 0184           ;       Read_CID_MMC(buffer);
 0184 8E01              movw R16,R28
 0186 EED1              xcall _Read_CID_MMC
 0188                   .dbline 197
 0188           ;       vinf->name[0] = buffer[3];
 0188 2B80              ldd R2,y+3
 018A F501              movw R30,R10
 018C 2582              std z+5,R2
 018E                   .dbline 198
 018E           ;       vinf->name[1] = buffer[4];
 018E 2C80              ldd R2,y+4
 0190 F501              movw R30,R10
 0192 2682              std z+6,R2
 0194                   .dbline 199
 0194           ;       vinf->name[2] = buffer[5];
 0194 2D80              ldd R2,y+5
 0196 F501              movw R30,R10
 0198 2782              std z+7,R2
 019A                   .dbline 200
 019A           ;       vinf->name[3] = buffer[6];
 019A 2E80              ldd R2,y+6
 019C F501              movw R30,R10
 019E 2086              std z+8,R2
 01A0                   .dbline 201
 01A0           ;       vinf->name[4] = buffer[7];
 01A0 2F80              ldd R2,y+7
 01A2 F501              movw R30,R10
 01A4 2186              std z+9,R2
 01A6                   .dbline 202
 01A6           ;       vinf->name[5] = 0x00; //end flag
 01A6 2224              clr R2
 01A8 F501              movw R30,R10
 01AA 2286              std z+10,R2
 01AC                   .dbline 232
 01AC           ; /*    //----------------------------------------------------------
 01AC           ; //    LCDclrscr();
 01AC           ;     //Print Product name on lcd
 01AC           ;     Com_putstring("Product:\r\n",10,&RTbuf_UART0);
 01AC           ;       Com_putstring(vinf->name,6,&RTbuf_UART0);
 01AC           ;       Com_putstring("\r\n",2,&RTbuf_UART0);
 01AC           ;     //Print Card Size(eg:128MB)
 01AC           ;       Com_putstring("Tot:",4,&RTbuf_UART0);
 01AC           ;       tmp[0]=((vinf->size_MB>>12)&0x0f)+0x30;
 01AC           ;       tmp[1]=(vinf->size_MB>>8)&0x0f+0x30;
 01AC           ;       tmp[2]=(vinf->size_MB>>4)&0x0f+0x30;
 01AC           ;       tmp[3]=vinf->size_MB&0x0f+0x30;
 01AC           ;       Com_putstring(tmp,4,&RTbuf_UART0);
 01AC           ;       Com_putstring("MB\r\n",4,&RTbuf_UART0);
 01AC           ;       Com_putstring("sector_mult:",12,&RTbuf_UART0);
 01AC           ; //    tmp[0]=((vinf->sector_multiply>>12)&0x0f)+0x30;
 01AC           ; //    tmp[1]=(vinf->sector_multiply>>8)&0x0f+0x30;
 01AC           ;       tmp[0]=(vinf->sector_multiply>>4)&0x0f+0x30;
 01AC           ;       tmp[1]=vinf->sector_multiply&0x0f+0x30;
 01AC           ;       Com_putstring(tmp,2,&RTbuf_UART0);
 01AC           ;       Com_putstring("\r\n",2,&RTbuf_UART0);
 01AC           ;       Com_putstring("sect_cnt:",9,&RTbuf_UART0);
 01AC           ;       tmp[0]=((vinf->sector_count>>12)&0x0f)+0x30;
 01AC           ;       tmp[1]=(vinf->sector_count>>8)&0x0f+0x30;
 01AC           ;       tmp[2]=(vinf->sector_count>>4)&0x0f+0x30;
 01AC           ;       tmp[3]=vinf->sector_count&0x0f+0x30;
 01AC           ;       Com_putstring(tmp,4,&RTbuf_UART0);
 01AC           ; */
 01AC           ;     #if !(HW_SPI_Mode) 
 01AC           ;     SPCR=spimode; 
 01AC 6DB9              out 0xd,R22
 01AE                   .dbline 233
 01AE           ;     SPSR=spispeeddub;
 01AE 4EB9              out 0xe,R20
 01B0                   .dbline 235
 01B0           ;       #endif
 01B0           ;     MMC_Disable();
 01B0 C49A              sbi 0x18,4
 01B2                   .dbline 235
 01B2                   .dbline -2
 01B2           L29:
 01B2 6496              adiw R28,20
 01B4 0E940000          xcall pop_gset3
 01B8                   .dbline 0 ; func end
 01B8 0895              ret
 01BA                   .dbsym l tmp 16 A[4:4]c
 01BA                   .dbsym r spispeeddub 20 c
 01BA                   .dbsym r spimode 22 c
 01BA                   .dbsym l buffer 0 A[16:16]c
 01BA                   .dbsym r vinf 10 pS[MMC_VOLUME_INFO]
 01BA                   .dbend
 01BA                   .dbfunc e Write_Command_MMC _Write_Command_MMC fc
 01BA           ;              i -> R20
 01BA           ;          retry -> R22
 01BA           ;            tmp -> R10
 01BA           ;            CMD -> R12,R13
                        .even
 01BA           _Write_Command_MMC::
 01BA 0E940000          xcall push_gset4
 01BE 6801              movw R12,R16
 01C0                   .dbline -1
 01C0                   .dbline 243
 01C0           ; }
 01C0           ; 
 01C0           ; //****************************************************************************
 01C0           ; //Send a Command to MMC/SD-Card
 01C0           ; //Return: the second byte of response register of MMC/SD-Card
 01C0           ; uint8 Write_Command_MMC(uint8 *CMD)
 01C0           ; //****************************************************************************
 01C0           ; {
 01C0                   .dbline 245
 01C0           ;    uint8 tmp;

⌨️ 快捷键说明

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