📄 main.lst
字号:
172:mmc.c **** //Lesen des Bolcks (512Bytes) von MMC/SD-Karte
173:mmc.c **** for (int a=0;a<512;a++)
566 .LM71:
567 01d6 0FEF ldi r16,lo8(511)
568 01d8 11E0 ldi r17,hi8(511)
569 .L115:
174:mmc.c **** {
175:mmc.c **** *Buffer++ = Read_Byte_MMC();
571 .LM72:
572 .LBB8:
573 01da A2DF rcall Read_Byte_MMC
574 01dc D701 movw r26,r14
575 01de 8D93 st X+,r24
576 01e0 7D01 movw r14,r26
578 .LM73:
579 01e2 0150 subi r16,lo8(-(-1))
580 01e4 1040 sbci r17,hi8(-(-1))
581 01e6 17FF sbrs r17,7
582 01e8 F8CF rjmp .L115
176:mmc.c **** }
177:mmc.c ****
178:mmc.c **** //CRC-Byte auslesen
179:mmc.c **** tmp = Read_Byte_MMC();//CRC - Byte wird nicht ausgewertet
584 .LM74:
585 .LBE8:
586 01ea 9ADF rcall Read_Byte_MMC
180:mmc.c **** tmp = Read_Byte_MMC();
588 .LM75:
589 01ec 99DF rcall Read_Byte_MMC
181:mmc.c ****
182:mmc.c ****
183:mmc.c **** return(0);
591 .LM76:
592 01ee 80E0 ldi r24,lo8(0)
593 01f0 90E0 ldi r25,hi8(0)
184:mmc.c **** }
595 .LM77:
596 .L104:
597 .LBE7:
598 /* epilogue: frame size=6 */
599 01f2 2696 adiw r28,6
600 01f4 0FB6 in __tmp_reg__,__SREG__
601 01f6 F894 cli
602 01f8 DEBF out __SP_H__,r29
603 01fa 0FBE out __SREG__,__tmp_reg__
604 01fc CDBF out __SP_L__,r28
605 01fe DF91 pop r29
606 0200 CF91 pop r28
607 0202 1F91 pop r17
608 0204 0F91 pop r16
609 0206 FF90 pop r15
610 0208 EF90 pop r14
611 020a DF90 pop r13
612 020c CF90 pop r12
613 020e BF90 pop r11
614 0210 AF90 pop r10
615 0212 0895 ret
616 /* epilogue end (size=17) */
617 /* function Read_Block_MMC size 111 (76) */
627 .Lscope4:
629 .data
630 .LC2:
631 000c 58 .byte 88
632 000d 00 .byte 0
633 000e 00 .byte 0
634 000f 00 .byte 0
635 0010 00 .byte 0
636 0011 FF .byte -1
637 .text
641 .global Write_Block_MMC
643 Write_Block_MMC:
185:mmc.c ****
186:mmc.c **** //Routine zum schreiben eines Blocks(512Byte) auf die MMC/SD-Karte
187:mmc.c **** char Write_Block_MMC (unsigned long addr, char *Buffer)
188:mmc.c **** {
645 .LM78:
646 /* prologue: frame size=6 */
647 0214 AF92 push r10
648 0216 BF92 push r11
649 0218 CF92 push r12
650 021a DF92 push r13
651 021c EF92 push r14
652 021e FF92 push r15
653 0220 0F93 push r16
654 0222 1F93 push r17
655 0224 CF93 push r28
656 0226 DF93 push r29
657 0228 CDB7 in r28,__SP_L__
658 022a DEB7 in r29,__SP_H__
659 022c 2697 sbiw r28,6
660 022e 0FB6 in __tmp_reg__,__SREG__
661 0230 F894 cli
662 0232 DEBF out __SP_H__,r29
663 0234 0FBE out __SREG__,__tmp_reg__
664 0236 CDBF out __SP_L__,r28
665 /* prologue end (size=18) */
666 0238 5B01 movw r10,r22
667 023a 6C01 movw r12,r24
668 023c 7A01 movw r14,r20
189:mmc.c **** char tmp;
190:mmc.c ****
191:mmc.c **** char CMD24[] = {0x58,0x00,0x00,0x00,0x00,0xFF}; //Commando 24 zum schreiben eines Blocks
670 .LM79:
671 .LBB9:
672 023e 46E0 ldi r20,lo8(6)
673 0240 9E01 movw r18,r28
674 0242 2F5F subi r18,lo8(-(1))
675 0244 3F4F sbci r19,hi8(-(1))
676 0246 60E0 ldi r22,lo8(.LC2)
677 0248 70E0 ldi r23,hi8(.LC2)
678 024a D901 movw r26,r18
679 024c FB01 movw r30,r22
680 024e 0190 ld __tmp_reg__,Z+
681 0250 0D92 st X+,__tmp_reg__
682 0252 4A95 dec r20
683 0254 E1F7 brne .-8
192:mmc.c ****
193:mmc.c **** /*Die Adressierung der MMC/SD-Karte wird in Bytes angegeben,
194:mmc.c **** addr wird von Blocks zu Bytes umgerechnet danach werden
195:mmc.c **** diese in das Commando eingef黦t*/
196:mmc.c ****
197:mmc.c **** addr = addr << 9; //addr = addr * 512
685 .LM80:
686 0256 69E0 ldi r22,9
687 0258 AA0C 1: lsl r10
688 025a BB1C rol r11
689 025c CC1C rol r12
690 025e DD1C rol r13
691 0260 6A95 dec r22
692 0262 D1F7 brne 1b
198:mmc.c ****
199:mmc.c **** CMD24[1] = ((addr & 0xFF000000) >>24 );
694 .LM81:
695 0264 2D2D mov r18,r13
696 0266 3327 clr r19
697 0268 4427 clr r20
698 026a 5527 clr r21
699 026c 2A83 std Y+2,r18
200:mmc.c **** CMD24[2] = ((addr & 0x00FF0000) >>16 );
701 .LM82:
702 026e CB82 std Y+3,r12
201:mmc.c **** CMD24[3] = ((addr & 0x0000FF00) >>8 );
704 .LM83:
705 0270 80E0 ldi r24,lo8(65280)
706 0272 9FEF ldi r25,hi8(65280)
707 0274 A0E0 ldi r26,hlo8(65280)
708 0276 B0E0 ldi r27,hhi8(65280)
709 0278 A822 and r10,r24
710 027a B922 and r11,r25
711 027c CA22 and r12,r26
712 027e DB22 and r13,r27
713 0280 BB27 clr r27
714 0282 AD2D mov r26,r13
715 0284 9C2D mov r25,r12
716 0286 8B2D mov r24,r11
717 0288 8C83 std Y+4,r24
202:mmc.c ****
203:mmc.c **** //Sendet Commando CMD24 an MMC/SD-Karte (Write 1 Block/512 Bytes)
204:mmc.c **** tmp = Write_Command_MMC (CMD24);
719 .LM84:
720 028a CE01 movw r24,r28
721 028c 0196 adiw r24,1
722 028e 15DF rcall Write_Command_MMC
205:mmc.c **** if (tmp != 0)
724 .LM85:
725 0290 8823 tst r24
726 0292 11F0 breq .L122
206:mmc.c **** {
207:mmc.c **** return(tmp);
728 .LM86:
729 0294 9927 clr r25
730 0296 1CC0 rjmp .L121
731 .L122:
208:mmc.c **** }
209:mmc.c ****
210:mmc.c **** //Wartet einen Moment und sendet einen Clock an die MMC/SD-Karte
211:mmc.c **** for (int a=0;a<100;a++)
733 .LM87:
734 0298 03E6 ldi r16,lo8(99)
735 029a 10E0 ldi r17,hi8(99)
736 .L127:
212:mmc.c **** {
213:mmc.c **** tmp = Read_Byte_MMC();
738 .LM88:
739 .LBB10:
740 029c 41DF rcall Read_Byte_MMC
742 .LM89:
743 029e 0150 subi r16,lo8(-(-1))
744 02a0 1040 sbci r17,hi8(-(-1))
745 02a2 17FF sbrs r17,7
746 02a4 FBCF rjmp .L127
214:mmc.c **** }
215:mmc.c ****
216:mmc.c **** //Sendet Start Byte an MMC/SD-Karte
217:mmc.c **** Write_Byte_MMC(0xFE);
748 .LM90:
749 .LBE10:
750 02a6 8EEF ldi r24,lo8(-2)
751 02a8 42DF rcall Write_Byte_MMC
218:mmc.c ****
219:mmc.c **** //Schreiben des Bolcks (512Bytes) auf MMC/SD-Karte
220:mmc.c **** for (int a=0;a<512;a++)
753 .LM91:
754 02aa 0FEF ldi r16,lo8(511)
755 02ac 11E0 ldi r17,hi8(511)
756 .L132:
221:mmc.c **** {
222:mmc.c **** Write_Byte_MMC(*Buffer++);
758 .LM92:
759 02ae D701 movw r26,r14
760 .LBB11:
761 02b0 8D91 ld r24,X+
762 02b2 7D01 movw r14,r26
763 02b4 3CDF rcall Write_Byte_MMC
765 .LM93:
766 02b6 0150 subi r16,lo8(-(-1))
767 02b8 1040 sbci r17,hi8(-(-1))
768 02ba 17FF sbrs r17,7
769 02bc F8CF rjmp .L132
223:mmc.c **** }
224:mmc.c ****
225:mmc.c **** //CRC-Byte schreiben
226:mmc.c **** Write_Byte_MMC(0xFF); //Schreibt Dummy CRC
771 .LM94:
772 .LBE11:
773 02be 8FEF ldi r24,lo8(-1)
774 02c0 36DF rcall Write_Byte_MMC
227:mmc.c **** Write_Byte_MMC(0xFF); //CRC Code wird nicht benutzt
776 .LM95:
777 02c2 8FEF ldi r24,lo8(-1)
778 02c4 34DF rcall Write_Byte_MMC
779 .L136:
228:mmc.c ****
229:mmc.c **** //Wartet auf MMC/SD-Karte Bussy
230:mmc.c **** tmp = 0;
231:mmc.c **** while (tmp != 0xff)
232:mmc.c **** {
233:mmc.c **** tmp = Read_Byte_MMC();
781 .LM96:
782 02c6 2CDF rcall Read_Byte_MMC
783 02c8 8F3F cpi r24,lo8(-1)
784 02ca E9F7 brne .L136
234:mmc.c **** }
235:mmc.c ****
236:mmc.c **** return(0);
786 .LM97:
787 02cc 80E0 ldi r24,lo8(0)
788 02ce 90E0 ldi r25,hi8(0)
237:mmc.c **** }
790 .LM98:
791 .L121:
792 .LBE9:
793 /* epilogue: frame size=6 */
794 02d0 2696 adiw r28,6
795 02d2 0FB6 in __tmp_reg__,__SREG__
796 02d4 F894 cli
797 02d6 DEBF out __SP_H__,r29
798 02d8 0FBE out __SREG__,__tmp_reg__
799 02da CDBF out __SP_L__,r28
800 02dc DF91 pop r29
801 02de CF91 pop r28
802 02e0 1F91 pop r17
803 02e2 0F91 pop r16
804 02e4 FF90 pop r15
805 02e6 EF90 pop r14
806 02e8 DF90 pop r13
807 02ea CF90 pop r12
808 02ec BF90 pop r11
809 02ee AF90 pop r10
810 02f0 0895 ret
811 /* epilogue end (size=17) */
812 /* function Write_Block_MMC size 111 (76) */
824 .Lscope5:
828 .global IOInit
830 IOInit:
832 .Ltext2:
1:main.c **** /*
2:main.c **** Copyright: Radig Ulrich mailto: mail@ulrichradig.de
3:main.c **** Author: Radig Ulrich
4:main.c **** Remarks:
5:main.c **** known Problems: none
6:main.c **** Version: 28.05.2004
7:main.c **** Description: Dieses Programm dient als Beispiel zur Ansteuerung einer MMC/SD-Memory-Card.
8:main.c **** Zum Zugriff auf eine MMC/SD-Karte, mu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -