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

📄 main.lst

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