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

📄 mmc.lis

📁 ARM单片机控制SD卡的读写
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01F6 0083              std z+0,R16
 01F8                   .dbline 124
 01F8           L48:
 01F8                   .dbline 121
 01F8 4F5F              subi R20,255  ; offset = 1
 01FA 5F4F              sbci R21,255
 01FC           L50:
 01FC                   .dbline 121
 01FC 4030              cpi R20,0
 01FE E2E0              ldi R30,2
 0200 5E07              cpc R21,R30
 0202 80F3              brlo L47
 0204                   .dbline 125
 0204           ;        {
 0204           ;            sector[i]=spi_send(0XFF);
 0204           ;        }
 0204           ;        spi_send(0XFF);                         /* 取走CRC字节 */
 0204 0FEF              ldi R16,255
 0206 10E0              ldi R17,0
 0208 0E940000          xcall _spi_send
 020C                   .dbline 126
 020C           ;        spi_send(0XFF);
 020C 0FEF              ldi R16,255
 020E 10E0              ldi R17,0
 0210 0E940000          xcall _spi_send
 0214                   .dbline 127
 0214           ;        return 1; 
 0214 01E0              ldi R16,1
 0216                   .dbline -2
 0216           L36:
 0216 2696              adiw R28,6
 0218 0E940000          xcall pop_gset1
 021C 2496              adiw R28,4
 021E                   .dbline 0 ; func end
 021E 0895              ret
 0220                   .dbsym l temp 1 c
 0220                   .dbsym l cmd 0 A[6:6]c
 0220                   .dbsym r i 20 i
 0220                   .dbsym l address 8 l
 0220                   .dbend
                        .area lit(rom, con, rel)
 0012           L52:
 0012 4000              .byte 64,0
 0014 0000              .byte 0,0
 0016 00FF              .byte 0,255
                        .area text(rom, con, rel)
 0220                   .dbfile E:\SOUCER~1\M162MMC\mmc.c
 0220                   .dbfunc e MMCWrBlock1 _MMCWrBlock1 fc
 0220           ;           temp -> R22
 0220           ;            cmd -> y+0
 0220           ;              i -> R20,R21
 0220           ;         buffer -> y+14
 0220           ;        address -> y+10
                        .even
 0220           _MMCWrBlock1::
 0220 0E940000          xcall push_arg4
 0224 0E940000          xcall push_gset2
 0228 2697              sbiw R28,6
 022A                   .dbline -1
 022A                   .dbline 135
 022A           ; }
 022A           ;       
 022A           ; /*******************************
 022A           ; *        写ONE BLOCK数据
 022A           ; *        address-扇区地址
 022A           ; *******************************/
 022A           ; unsigned char MMCWrBlock1(unsigned long address,unsigned char *buffer)
 022A           ; {
 022A                   .dbline 138
 022A           ;      unsigned int i;
 022A           ;        unsigned char temp;
 022A           ;      unsigned char cmd[]={0x40,0x00,0x00,0x00,0x00,0xff};  
 022A 80E0              ldi R24,<L52
 022C 90E0              ldi R25,>L52
 022E FE01              movw R30,R28
 0230 06E0              ldi R16,6
 0232 10E0              ldi R17,0
 0234 FA93              st -y,R31
 0236 EA93              st -y,R30
 0238 9A93              st -y,R25
 023A 8A93              st -y,R24
 023C 0E940000          xcall asgncblk
 0240                   .dbline 139
 0240           ;        cmd[0]=0x40+24;              /* WRITE SINGLE BLOCK */
 0240 88E5              ldi R24,88
 0242 8883              std y+0,R24
 0244                   .dbline 140
 0244           ;        address=address<<9;          /* address*512,取512的整数倍 */
 0244 89E0              ldi R24,9
 0246 90E0              ldi R25,0
 0248 FE01              movw R30,R28
 024A 2284              ldd R2,z+10
 024C 3384              ldd R3,z+11
 024E 4484              ldd R4,z+12
 0250 5584              ldd R5,z+13
 0252 8A93              st -y,R24
 0254 8101              movw R16,R2
 0256 9201              movw R18,R4
 0258 0E940000          xcall lsl32
 025C FE01              movw R30,R28
 025E 0287              std z+10,R16
 0260 1387              std z+11,R17
 0262 2487              std z+12,R18
 0264 3587              std z+13,R19
 0266                   .dbline 141
 0266           ;        cmd[1]=(address>>24);
 0266 88E1              ldi R24,24
 0268 90E0              ldi R25,0
 026A FE01              movw R30,R28
 026C 2284              ldd R2,z+10
 026E 3384              ldd R3,z+11
 0270 4484              ldd R4,z+12
 0272 5584              ldd R5,z+13
 0274 8A93              st -y,R24
 0276 8101              movw R16,R2
 0278 9201              movw R18,R4
 027A 0E940000          xcall lsr32
 027E 0983              std y+1,R16
 0280                   .dbline 142
 0280           ;        cmd[2]=(address>>16);
 0280 FE01              movw R30,R28
 0282 2284              ldd R2,z+10
 0284 3384              ldd R3,z+11
 0286 4484              ldd R4,z+12
 0288 5584              ldd R5,z+13
 028A 1201              movw R2,R4
 028C 4424              clr R4
 028E 5524              clr R5
 0290 2A82              std y+2,R2
 0292                   .dbline 143
 0292           ;        cmd[3]=(address>>8);
 0292 88E0              ldi R24,8
 0294 90E0              ldi R25,0
 0296 FE01              movw R30,R28
 0298 2284              ldd R2,z+10
 029A 3384              ldd R3,z+11
 029C 4484              ldd R4,z+12
 029E 5584              ldd R5,z+13
 02A0 8A93              st -y,R24
 02A2 8101              movw R16,R2
 02A4 9201              movw R18,R4
 02A6 0E940000          xcall lsr32
 02AA 0B83              std y+3,R16
 02AC                   .dbline 144
 02AC           ;        cmd[4]=(address>>0);
 02AC FE01              movw R30,R28
 02AE 2284              ldd R2,z+10
 02B0 3384              ldd R3,z+11
 02B2 4484              ldd R4,z+12
 02B4 5584              ldd R5,z+13
 02B6 2C82              std y+4,R2
 02B8                   .dbline 145
 02B8           ;        if(MMCWrCmd(cmd)!=0X00)     /* 发送CMD24 */
 02B8 8E01              movw R16,R28
 02BA A8DE              xcall _MMCWrCmd
 02BC 0023              tst R16
 02BE 11F0              breq L57
 02C0                   .dbline 146
 02C0           ;            return 0;               /* 写入失败 */
 02C0 0027              clr R16
 02C2 35C0              xjmp L51
 02C4           L57:
 02C4                   .dbline 147
 02C4           ;        spi_send(0XFF);             /* 发送填冲字节 */
 02C4 0FEF              ldi R16,255
 02C6 10E0              ldi R17,0
 02C8 0E940000          xcall _spi_send
 02CC                   .dbline 148
 02CC           ;        spi_send(0XFE);             /* 发送数据开始标志0XFE */
 02CC 0EEF              ldi R16,254
 02CE 10E0              ldi R17,0
 02D0 0E940000          xcall _spi_send
 02D4                   .dbline 149
 02D4           ;        for(i=0;i<512;i++)          /* 写入数据 */
 02D4 4427              clr R20
 02D6 5527              clr R21
 02D8 0BC0              xjmp L62
 02DA           L59:
 02DA                   .dbline 150
 02DA                   .dbline 151
 02DA 80E0              ldi R24,<_sector
 02DC 90E0              ldi R25,>_sector
 02DE FA01              movw R30,R20
 02E0 E80F              add R30,R24
 02E2 F91F              adc R31,R25
 02E4 0081              ldd R16,z+0
 02E6 1127              clr R17
 02E8 0E940000          xcall _spi_send
 02EC                   .dbline 152
 02EC           L60:
 02EC                   .dbline 149
 02EC 4F5F              subi R20,255  ; offset = 1
 02EE 5F4F              sbci R21,255
 02F0           L62:
 02F0                   .dbline 149
 02F0 4030              cpi R20,0
 02F2 E2E0              ldi R30,2
 02F4 5E07              cpc R21,R30
 02F6 88F3              brlo L59
 02F8                   .dbline 153
 02F8           ;        {
 02F8           ;            spi_send(sector[i]);
 02F8           ;        }
 02F8           ;        spi_send(0XFF);                         /* 写入CRC字节 */
 02F8 0FEF              ldi R16,255
 02FA 10E0              ldi R17,0
 02FC 0E940000          xcall _spi_send
 0300                   .dbline 154
 0300           ;        spi_send(0XFF);
 0300 0FEF              ldi R16,255
 0302 10E0              ldi R17,0
 0304 0E940000          xcall _spi_send
 0308                   .dbline 155
 0308           ;        temp=spi_send(0XFF);            /* 读取XXX0 0101字节 */
 0308 0FEF              ldi R16,255
 030A 10E0              ldi R17,0
 030C 0E940000          xcall _spi_send
 0310 602F              mov R22,R16
 0312                   .dbline 156
 0312           ;        temp=temp&0X1F;
 0312 6F71              andi R22,31
 0314                   .dbline 157
 0314           ;        if(temp!=0X05)
 0314 6530              cpi R22,5
 0316 19F0              breq L66
 0318                   .dbline 158
 0318           ;            return 0;                           /* 写入失败 */
 0318 0027              clr R16
 031A 09C0              xjmp L51
 031C           L65:
 031C                   .dbline 160
 031C                   .dbline 161
 031C 0000              nop
 031E                   .dbline 162
 031E           L66:
 031E                   .dbline 159
 031E           ;        while(spi_send(0XFF)==0X00)
 031E 0FEF              ldi R16,255
 0320 10E0              ldi R17,0
 0322 0E940000          xcall _spi_send
 0326 0030              cpi R16,0
 0328 0107              cpc R16,R17
 032A C1F3              breq L65
 032C           X0:
 032C                   .dbline 163
 032C           ;        {
 032C           ;            asm("nop");                         /* BUSY等待 */
 032C           ;        }
 032C           ;        return 1;
 032C 01E0              ldi R16,1
 032E                   .dbline -2
 032E           L51:
 032E 2696              adiw R28,6
 0330 0E940000          xcall pop_gset2
 0334 2496              adiw R28,4
 0336                   .dbline 0 ; func end
 0336 0895              ret
 0338                   .dbsym r temp 22 c
 0338                   .dbsym l cmd 0 A[6:6]c
 0338                   .dbsym r i 20 i
 0338                   .dbsym l buffer 14 pc
 0338                   .dbsym l address 10 l
 0338                   .dbend

⌨️ 快捷键说明

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