📄 mmc.lis
字号:
00C4 10F4 brsh L26
00C6 .dbline 78
00C6 ; return 0; /* 容量大的MMC卡需要用比较长时间 */
00C6 0027 clr R16
00C8 07C0 xjmp L14
00CA L26:
00CA .dbline 79
00CA L24:
00CA .dbline 75
00CA 8E01 movw R16,R28
00CC 9FDF xcall _MMCWrCmd
00CE 0023 tst R16
00D0 91F7 brne L23
00D2 .dbline 80
00D2 ; }
00D2 ; SPIHiSPD(); /* 提高MCU SPI速度 */
00D2 0E940000 xcall _SPIHiSPD
00D6 .dbline 81
00D6 ; return 1;
00D6 01E0 ldi R16,1
00D8 .dbline -2
00D8 L14:
00D8 2696 adiw R28,6
00DA 0E940000 xcall pop_gset2
00DE .dbline 0 ; func end
00DE 0895 ret
00E0 .dbsym r temp 22 c
00E0 .dbsym r timeout 20 i
00E0 .dbsym l cmd 0 A[6:6]c
00E0 .dbsym r i 20 c
00E0 .dbend
.area lit(rom, con, rel)
0006 L29:
0006 4000 .byte 64,0
0008 0000 .byte 0,0
000A 00FF .byte 0,255
.area text(rom, con, rel)
00E0 .dbfile E:\SOUCER~1\M162MMC\mmc.c
00E0 .dbfunc e MMCCID _MMCCID fc
00E0 ; cmd -> y+0
00E0 ; i -> R20
.even
00E0 _MMCCID::
00E0 0E940000 xcall push_gset1
00E4 2697 sbiw R28,6
00E6 .dbline -1
00E6 .dbline 88
00E6 ; }
00E6 ;
00E6 ; /*******************************
00E6 ; * 读取MMC-CID寄存器
00E6 ; *******************************/
00E6 ; unsigned char MMCCID(void)
00E6 ; {
00E6 .dbline 90
00E6 ; unsigned char i;
00E6 ; unsigned char cmd[]={0x40,0x00,0x00,0x00,0x00,0xff};
00E6 80E0 ldi R24,<L29
00E8 90E0 ldi R25,>L29
00EA FE01 movw R30,R28
00EC 06E0 ldi R16,6
00EE 10E0 ldi R17,0
00F0 FA93 st -y,R31
00F2 EA93 st -y,R30
00F4 9A93 st -y,R25
00F6 8A93 st -y,R24
00F8 0E940000 xcall asgncblk
00FC .dbline 91
00FC ; cmd[0]=0X40+10;
00FC 8AE4 ldi R24,74
00FE 8883 std y+0,R24
0100 .dbline 92
0100 ; if(MMCWrCmd(cmd)!=0X00) /* 发送CMD9 */
0100 8E01 movw R16,R28
0102 84DF xcall _MMCWrCmd
0104 0023 tst R16
0106 11F0 breq L30
0108 .dbline 93
0108 ; return 0; /* 读取失败 */
0108 0027 clr R16
010A 0AC0 xjmp L28
010C L30:
010C .dbline 94
010C ; for(i=0;i<16;i++)
010C 4427 clr R20
010E 05C0 xjmp L35
0110 L32:
0110 .dbline 96
0110 0FEF ldi R16,255
0112 10E0 ldi R17,0
0114 0E940000 xcall _spi_send
0118 L33:
0118 .dbline 94
0118 4395 inc R20
011A L35:
011A .dbline 94
011A 4031 cpi R20,16
011C C8F3 brlo L32
011E .dbline 97
011E ; //uart1_send(spi_send(0XFF));
011E ; spi_send(0XFF);
011E ; return 1;
011E 01E0 ldi R16,1
0120 .dbline -2
0120 L28:
0120 2696 adiw R28,6
0122 0E940000 xcall pop_gset1
0126 .dbline 0 ; func end
0126 0895 ret
0128 .dbsym l cmd 0 A[6:6]c
0128 .dbsym r i 20 c
0128 .dbend
.area lit(rom, con, rel)
000C L37:
000C 4000 .byte 64,0
000E 0000 .byte 0,0
0010 00FF .byte 0,255
.area text(rom, con, rel)
0128 .dbfile E:\SOUCER~1\M162MMC\mmc.c
0128 .dbfunc e MMCRdBolck1 _MMCRdBolck1 fc
0128 ; temp -> <dead>
0128 ; cmd -> y+0
0128 ; i -> R20,R21
0128 ; address -> y+8
.even
0128 _MMCRdBolck1::
0128 0E940000 xcall push_arg4
012C 0E940000 xcall push_gset1
0130 2697 sbiw R28,6
0132 .dbline -1
0132 .dbline 105
0132 ; }
0132 ;
0132 ; /*******************************
0132 ; * 读取ONE BLOCK数据
0132 ; * address-扇区地址
0132 ; *******************************/
0132 ; unsigned char MMCRdBolck1(unsigned long address)
0132 ; {
0132 .dbline 108
0132 ; unsigned int i;
0132 ; unsigned char temp;
0132 ; unsigned char cmd[]={0x40,0x00,0x00,0x00,0x00,0xff};
0132 80E0 ldi R24,<L37
0134 90E0 ldi R25,>L37
0136 FE01 movw R30,R28
0138 06E0 ldi R16,6
013A 10E0 ldi R17,0
013C FA93 st -y,R31
013E EA93 st -y,R30
0140 9A93 st -y,R25
0142 8A93 st -y,R24
0144 0E940000 xcall asgncblk
0148 .dbline 109
0148 ; cmd[0]=0X40+17; /* READ SINGLE BLOCK */
0148 81E5 ldi R24,81
014A 8883 std y+0,R24
014C .dbline 110
014C ; address=address<<9; /* address*512,取512的整数倍 */
014C 89E0 ldi R24,9
014E 90E0 ldi R25,0
0150 FE01 movw R30,R28
0152 2084 ldd R2,z+8
0154 3184 ldd R3,z+9
0156 4284 ldd R4,z+10
0158 5384 ldd R5,z+11
015A 8A93 st -y,R24
015C 8101 movw R16,R2
015E 9201 movw R18,R4
0160 0E940000 xcall lsl32
0164 FE01 movw R30,R28
0166 0087 std z+8,R16
0168 1187 std z+9,R17
016A 2287 std z+10,R18
016C 3387 std z+11,R19
016E .dbline 111
016E ; cmd[1]=(address>>24);
016E 88E1 ldi R24,24
0170 90E0 ldi R25,0
0172 FE01 movw R30,R28
0174 2084 ldd R2,z+8
0176 3184 ldd R3,z+9
0178 4284 ldd R4,z+10
017A 5384 ldd R5,z+11
017C 8A93 st -y,R24
017E 8101 movw R16,R2
0180 9201 movw R18,R4
0182 0E940000 xcall lsr32
0186 0983 std y+1,R16
0188 .dbline 112
0188 ; cmd[2]=(address>>16);
0188 FE01 movw R30,R28
018A 2084 ldd R2,z+8
018C 3184 ldd R3,z+9
018E 4284 ldd R4,z+10
0190 5384 ldd R5,z+11
0192 1201 movw R2,R4
0194 4424 clr R4
0196 5524 clr R5
0198 2A82 std y+2,R2
019A .dbline 113
019A ; cmd[3]=(address>>8);
019A 88E0 ldi R24,8
019C 90E0 ldi R25,0
019E FE01 movw R30,R28
01A0 2084 ldd R2,z+8
01A2 3184 ldd R3,z+9
01A4 4284 ldd R4,z+10
01A6 5384 ldd R5,z+11
01A8 8A93 st -y,R24
01AA 8101 movw R16,R2
01AC 9201 movw R18,R4
01AE 0E940000 xcall lsr32
01B2 0B83 std y+3,R16
01B4 .dbline 114
01B4 ; cmd[4]=(address>>0);
01B4 FE01 movw R30,R28
01B6 2084 ldd R2,z+8
01B8 3184 ldd R3,z+9
01BA 4284 ldd R4,z+10
01BC 5384 ldd R5,z+11
01BE 2C82 std y+4,R2
01C0 .dbline 115
01C0 ; if(MMCWrCmd(cmd)!=0X00) /* 发送CMD17 */
01C0 8E01 movw R16,R28
01C2 24DF xcall _MMCWrCmd
01C4 0023 tst R16
01C6 19F0 breq L45
01C8 .dbline 116
01C8 ; return 0; /* 读取失败 */
01C8 0027 clr R16
01CA 25C0 xjmp L36
01CC L44:
01CC .dbline 118
01CC .dbline 119
01CC 0000 nop
01CE .dbline 120
01CE L45:
01CE .dbline 117
01CE ; while(spi_send(0XFF)!=0XFE)
01CE 0FEF ldi R16,255
01D0 10E0 ldi R17,0
01D2 0E940000 xcall _spi_send
01D6 0E3F cpi R16,254
01D8 E0E0 ldi R30,0
01DA 1E07 cpc R17,R30
01DC B9F7 brne L44
01DE .dbline 121
01DE ; {
01DE ; asm("nop"); /* 等待数据接受开始,受到0XFE表示开始 */
01DE ; }
01DE ; for(i=0;i<512;i++) /* 读取数据 */
01DE 4427 clr R20
01E0 5527 clr R21
01E2 0CC0 xjmp L50
01E4 L47:
01E4 .dbline 122
01E4 .dbline 123
01E4 0FEF ldi R16,255
01E6 10E0 ldi R17,0
01E8 0E940000 xcall _spi_send
01EC 80E0 ldi R24,<_sector
01EE 90E0 ldi R25,>_sector
01F0 FA01 movw R30,R20
01F2 E80F add R30,R24
01F4 F91F adc R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -