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

📄 main.lst

📁 用ATMEL AVR单片机开发的MMC程式在SPI模式
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -