📄 main.lst
字号:
298 00d8 C198 cbi 56-0x20,1
95:mmc.c ****
96:mmc.c **** for (int a = 0;a<0x06;a++) //sendet 6 Byte Commando zur MMC/SD-Karte
300 .LM37:
301 00da C5E0 ldi r28,lo8(5)
302 00dc D0E0 ldi r29,hi8(5)
303 .L85:
97:mmc.c **** {
98:mmc.c **** Write_Byte_MMC(*CMD++);
305 .LM38:
306 00de F801 movw r30,r16
307 .LBB5:
308 00e0 8191 ld r24,Z+
309 00e2 8F01 movw r16,r30
310 00e4 24D0 rcall Write_Byte_MMC
312 .LM39:
313 00e6 2197 sbiw r28,1
314 00e8 D7FF sbrs r29,7
315 00ea F9CF rjmp .L85
99:mmc.c **** }
100:mmc.c ****
101:mmc.c **** while (tmp == 0xff) //Wartet auf ein g黮tige Antwort von der MMC/SD-Karte
317 .LM40:
318 00ec FFEF ldi r31,lo8(-1)
319 .LBE5:
320 00ee DF16 cp r13,r31
321 00f0 69F4 brne .L87
322 .L90:
102:mmc.c **** {
103:mmc.c **** tmp = Read_Byte_MMC();
324 .LM41:
325 00f2 16D0 rcall Read_Byte_MMC
326 00f4 D82E mov r13,r24
104:mmc.c **** Timeout++;
328 .LM42:
329 00f6 0894 sec
330 00f8 E11C adc r14,__zero_reg__
331 00fa F11C adc r15,__zero_reg__
105:mmc.c **** if (Timeout > 400)
333 .LM43:
334 00fc 81E9 ldi r24,lo8(401)
335 00fe E816 cp r14,r24
336 0100 81E0 ldi r24,hi8(401)
337 0102 F806 cpc r15,r24
338 0104 18F4 brsh .L87
106:mmc.c **** {
107:mmc.c **** break; //Abbruch da die MMC/SD-Karte nicht Antwortet
340 .LM44:
341 0106 EFEF ldi r30,lo8(-1)
342 0108 DE16 cp r13,r30
343 010a 99F3 breq .L90
344 .L87:
108:mmc.c **** }
109:mmc.c **** }
110:mmc.c ****
111:mmc.c **** return(tmp);
346 .LM45:
347 010c 8D2D mov r24,r13
348 010e 9927 clr r25
112:mmc.c **** }
350 .LM46:
351 .LBE4:
352 /* epilogue: frame size=0 */
353 0110 DF91 pop r29
354 0112 CF91 pop r28
355 0114 1F91 pop r17
356 0116 0F91 pop r16
357 0118 FF90 pop r15
358 011a EF90 pop r14
359 011c DF90 pop r13
360 011e 0895 ret
361 /* epilogue end (size=8) */
362 /* function Write_Command_MMC size 51 (36) */
371 .Lscope1:
374 .global Read_Byte_MMC
376 Read_Byte_MMC:
113:mmc.c ****
114:mmc.c **** //Routine zum Empfangen eines Bytes von der MMC-Karte (Soft_SPI)
115:mmc.c **** char Read_Byte_MMC (void)
116:mmc.c **** {
378 .LM47:
379 /* prologue: frame size=0 */
380 /* prologue end (size=0) */
117:mmc.c **** char Byte = 0;
118:mmc.c **** outb(SPDR,0xff);
382 .LM48:
383 .LBB6:
384 0120 8FEF ldi r24,lo8(-1)
385 0122 8FB9 out 47-0x20,r24
119:mmc.c **** while(!(SPSR & (1<<SPIF)))
387 .LM49:
388 .L95:
389 0124 779B sbis 46-0x20,7
390 0126 FECF rjmp .L95
120:mmc.c **** {
121:mmc.c **** }
122:mmc.c **** Byte = inp(SPDR);
392 .LM50:
393 0128 8FB1 in r24,47-0x20
123:mmc.c **** return (Byte);
395 .LM51:
396 012a 9927 clr r25
124:mmc.c **** }
398 .LM52:
399 .LBE6:
400 /* epilogue: frame size=0 */
401 012c 0895 ret
402 /* epilogue end (size=1) */
403 /* function Read_Byte_MMC size 7 (6) */
408 .Lscope2:
412 .global Write_Byte_MMC
414 Write_Byte_MMC:
125:mmc.c ****
126:mmc.c **** //Routine zum Senden eines Bytes zur MMC-Karte (Soft_SPI)
127:mmc.c **** void Write_Byte_MMC (char Byte)
128:mmc.c **** {
416 .LM53:
417 /* prologue: frame size=0 */
418 /* prologue end (size=0) */
129:mmc.c **** outb(SPDR,Byte);
420 .LM54:
421 012e 8FB9 out 47-0x20,r24
130:mmc.c **** while(!(SPSR & (1<<SPIF)))
423 .LM55:
424 .L100:
425 0130 779B sbis 46-0x20,7
426 0132 FECF rjmp .L100
131:mmc.c **** {
132:mmc.c **** }
133:mmc.c **** }
428 .LM56:
429 /* epilogue: frame size=0 */
430 0134 0895 ret
431 /* epilogue end (size=1) */
432 /* function Write_Byte_MMC size 4 (3) */
434 .Lscope3:
436 .data
437 .LC1:
438 0006 51 .byte 81
439 0007 00 .byte 0
440 0008 00 .byte 0
441 0009 00 .byte 0
442 000a 00 .byte 0
443 000b FF .byte -1
444 .text
448 .global Read_Block_MMC
450 Read_Block_MMC:
134:mmc.c ****
135:mmc.c **** //Routine zum lesen eines Blocks(512Byte) von der MMC/SD-Karte
136:mmc.c **** char Read_Block_MMC (unsigned long addr,char *Buffer)
137:mmc.c **** {
452 .LM57:
453 /* prologue: frame size=6 */
454 0136 AF92 push r10
455 0138 BF92 push r11
456 013a CF92 push r12
457 013c DF92 push r13
458 013e EF92 push r14
459 0140 FF92 push r15
460 0142 0F93 push r16
461 0144 1F93 push r17
462 0146 CF93 push r28
463 0148 DF93 push r29
464 014a CDB7 in r28,__SP_L__
465 014c DEB7 in r29,__SP_H__
466 014e 2697 sbiw r28,6
467 0150 0FB6 in __tmp_reg__,__SREG__
468 0152 F894 cli
469 0154 DEBF out __SP_H__,r29
470 0156 0FBE out __SREG__,__tmp_reg__
471 0158 CDBF out __SP_L__,r28
472 /* prologue end (size=18) */
473 015a 5B01 movw r10,r22
474 015c 6C01 movw r12,r24
475 015e 7A01 movw r14,r20
138:mmc.c **** char tmp;
139:mmc.c **** int Timeout;
140:mmc.c ****
141:mmc.c **** char CMD17[] = {0x51,0x00,0x00,0x00,0x00,0xFF}; //Commando 16 zum lesen eines Blocks
477 .LM58:
478 .LBB7:
479 0160 46E0 ldi r20,lo8(6)
480 0162 9E01 movw r18,r28
481 0164 2F5F subi r18,lo8(-(1))
482 0166 3F4F sbci r19,hi8(-(1))
483 0168 60E0 ldi r22,lo8(.LC1)
484 016a 70E0 ldi r23,hi8(.LC1)
485 016c D901 movw r26,r18
486 016e FB01 movw r30,r22
487 0170 0190 ld __tmp_reg__,Z+
488 0172 0D92 st X+,__tmp_reg__
489 0174 4A95 dec r20
490 0176 E1F7 brne .-8
142:mmc.c ****
143:mmc.c **** /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
144:mmc.c **** addr wird von Blocks zu Bytes umgerechnet danach werden
145:mmc.c **** diese in das Commando eingef黦t*/
146:mmc.c ****
147:mmc.c **** addr = addr << 9; //addr = addr * 512
492 .LM59:
493 0178 39E0 ldi r19,9
494 017a AA0C 1: lsl r10
495 017c BB1C rol r11
496 017e CC1C rol r12
497 0180 DD1C rol r13
498 0182 3A95 dec r19
499 0184 D1F7 brne 1b
148:mmc.c ****
149:mmc.c **** CMD17[1] = ((addr & 0xFF000000) >>24 );
501 .LM60:
502 0186 2D2D mov r18,r13
503 0188 3327 clr r19
504 018a 4427 clr r20
505 018c 5527 clr r21
506 018e 2A83 std Y+2,r18
150:mmc.c **** CMD17[2] = ((addr & 0x00FF0000) >>16 );
508 .LM61:
509 0190 CB82 std Y+3,r12
151:mmc.c **** CMD17[3] = ((addr & 0x0000FF00) >>8 );
511 .LM62:
512 0192 80E0 ldi r24,lo8(65280)
513 0194 9FEF ldi r25,hi8(65280)
514 0196 A0E0 ldi r26,hlo8(65280)
515 0198 B0E0 ldi r27,hhi8(65280)
516 019a A822 and r10,r24
517 019c B922 and r11,r25
518 019e CA22 and r12,r26
519 01a0 DB22 and r13,r27
520 01a2 BB27 clr r27
521 01a4 AD2D mov r26,r13
522 01a6 9C2D mov r25,r12
523 01a8 8B2D mov r24,r11
524 01aa 8C83 std Y+4,r24
152:mmc.c ****
153:mmc.c **** //Sendet Commando CMD16 an MMC/SD-Karte (Read 1 Block/512 Bytes)
154:mmc.c **** tmp = Write_Command_MMC (CMD17);
526 .LM63:
527 01ac CE01 movw r24,r28
528 01ae 0196 adiw r24,1
529 01b0 84DF rcall Write_Command_MMC
155:mmc.c **** if (tmp != 0)
531 .LM64:
532 01b2 8823 tst r24
533 01b4 29F0 breq .L105
156:mmc.c **** {
157:mmc.c **** return(tmp);
535 .LM65:
536 01b6 9927 clr r25
537 01b8 1CC0 rjmp .L104
538 .L120:
158:mmc.c **** }
159:mmc.c ****
160:mmc.c **** //Wartet auf Start Byte von der MMC/SD-Karte (FEh/Start Byte)
161:mmc.c **** Timeout = 0;
162:mmc.c **** while (tmp != 0xfe)
163:mmc.c **** {
164:mmc.c **** tmp = Read_Byte_MMC();
165:mmc.c **** Timeout++;
166:mmc.c **** if (Timeout > 400)
167:mmc.c **** {
168:mmc.c **** return(1);
540 .LM66:
541 01ba 81E0 ldi r24,lo8(1)
542 01bc 90E0 ldi r25,hi8(1)
543 01be 19C0 rjmp .L104
544 .L105:
546 .LM67:
547 01c0 00E0 ldi r16,lo8(0)
548 01c2 10E0 ldi r17,hi8(0)
549 .L110:
551 .LM68:
552 01c4 ADDF rcall Read_Byte_MMC
554 .LM69:
555 01c6 0F5F subi r16,lo8(-(1))
556 01c8 1F4F sbci r17,hi8(-(1))
558 .LM70:
559 01ca 91E0 ldi r25,hi8(401)
560 01cc 0139 cpi r16,lo8(401)
561 01ce 1907 cpc r17,r25
562 01d0 A4F7 brge .L120
563 01d2 8E3F cpi r24,lo8(-2)
564 01d4 B9F7 brne .L110
169:mmc.c **** }
170:mmc.c **** }
171:mmc.c ****
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -