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

📄 mmc.lst

📁 实现了avr下对sd卡的读写,支持文件存取,删除的功能
💻 LST
📖 第 1 页 / 共 3 页
字号:
 634               	.LM78:
 635 025e 80E0      		ldi r24,lo8(0)
 636 0260 90E0      		ldi r25,hi8(0)
 637               	.L55:
 638               	/* epilogue: frame size=0 */
 639 0262 DF91      		pop r29
 640 0264 CF91      		pop r28
 641 0266 1F91      		pop r17
 642 0268 0895      		ret
 643               	/* epilogue end (size=4) */
 644               	/* function Read_CID_MMC size 43 (36) */
 650               	.Lscope7:
 653               	.global	Read_CSD_MMC
 655               	Read_CSD_MMC:
 134:mmc.c         **** }
 135:mmc.c         **** //-------------------------------------------------------------------------
 136:mmc.c         **** //Routine for reading CSD Registers from MMC/SD-Card (16Bytes)
 137:mmc.c         **** //Return 0 if no Error.
 138:mmc.c         **** uint8_t Read_CSD_MMC(uint8_t *buffer){
 657               	.LM79:
 658               	/* prologue: frame size=0 */
 659 026a 1F93      		push r17
 660 026c CF93      		push r28
 661 026e DF93      		push r29
 662               	/* prologue end (size=3) */
 663 0270 EC01      		movw r28,r24
 139:mmc.c         **** 	uint8_t r1,i;
 140:mmc.c         **** 		
 141:mmc.c         **** 	CSL;											// assert chip select
 665               	.LM80:
 666 0272 C498      		cbi 56-0x20,4
 142:mmc.c         **** 	r1 = mmcCommand(MMC_SEND_CSD,0);				// reading CSD Registers
 668               	.LM81:
 669 0274 40E0      		ldi r20,lo8(0)
 670 0276 50E0      		ldi r21,hi8(0)
 671 0278 60E0      		ldi r22,hlo8(0)
 672 027a 70E0      		ldi r23,hhi8(0)
 673 027c 89E0      		ldi r24,lo8(9)
 674 027e 0E94 0000 		call mmcCommand
 143:mmc.c         **** 	if(r1 != 0)return r1;
 676               	.LM82:
 677 0282 8823      		tst r24
 678 0284 11F0      		breq .L68
 680               	.LM83:
 681 0286 9927      		clr r25
 682 0288 17C0      		rjmp .L66
 683               	.L68:
 144:mmc.c         **** 	while(spiTransferByte(0xFF)!=MMC_STARTBLOCK_READ);// wait for block start
 685               	.LM84:
 686 028a 8FEF      		ldi r24,lo8(-1)
 687 028c 0E94 0000 		call spiTransferByte
 688 0290 8E3F      		cpi r24,lo8(-2)
 689 0292 D9F7      		brne .L68
 690 0294 1FE0      		ldi r17,lo8(15)
 691               	.L74:
 145:mmc.c         **** 	for(i=0; i<16; i++){
 146:mmc.c         **** 		*buffer++=spiTransferByte(0xFF);			// read in data
 693               	.LM85:
 694 0296 8FEF      		ldi r24,lo8(-1)
 695 0298 0E94 0000 		call spiTransferByte
 696 029c 8993      		st Y+,r24
 698               	.LM86:
 699 029e 1150      		subi r17,lo8(-(-1))
 700 02a0 17FF      		sbrs r17,7
 701 02a2 F9CF      		rjmp .L74
 702 02a4 1FEF      		ldi r17,lo8(-1)
 147:mmc.c         **** 	}
 148:mmc.c         **** 	spiTransferByte(0xFF);							// read 16-bit CRC
 704               	.LM87:
 705 02a6 812F      		mov r24,r17
 706 02a8 0E94 0000 		call spiTransferByte
 149:mmc.c         **** 	spiTransferByte(0xFF);
 708               	.LM88:
 709 02ac 812F      		mov r24,r17
 710 02ae 0E94 0000 		call spiTransferByte
 150:mmc.c         **** 	CSH;
 712               	.LM89:
 713 02b2 C49A      		sbi 56-0x20,4
 151:mmc.c         **** 	
 152:mmc.c         **** 	return(0);
 715               	.LM90:
 716 02b4 80E0      		ldi r24,lo8(0)
 717 02b6 90E0      		ldi r25,hi8(0)
 718               	.L66:
 719               	/* epilogue: frame size=0 */
 720 02b8 DF91      		pop r29
 721 02ba CF91      		pop r28
 722 02bc 1F91      		pop r17
 723 02be 0895      		ret
 724               	/* epilogue end (size=4) */
 725               	/* function Read_CSD_MMC size 43 (36) */
 731               	.Lscope8:
 733               	.global	MMC_get_volume_info
 735               	MMC_get_volume_info:
 153:mmc.c         **** }
 154:mmc.c         **** //-------------------------------------------------------------------------
 155:mmc.c         **** //returns the :
 156:mmc.c         **** // 	size of the card in MB ( ret * 1024^2) == bytes
 157:mmc.c         **** // 	sector count and multiplier MB are in u08 == C_SIZE / (2^(9-C_SIZE_MULT))
 158:mmc.c         **** // 	name of the media 
 159:mmc.c         **** void MMC_get_volume_info(void){
 737               	.LM91:
 738               	/* prologue: frame size=31 */
 739 02c0 0F93      		push r16
 740 02c2 1F93      		push r17
 741 02c4 CF93      		push r28
 742 02c6 DF93      		push r29
 743 02c8 CDB7      		in r28,__SP_L__
 744 02ca DEB7      		in r29,__SP_H__
 745 02cc 6F97      		sbiw r28,31
 746 02ce 0FB6      		in __tmp_reg__,__SREG__
 747 02d0 F894      		cli
 748 02d2 DEBF      		out __SP_H__,r29
 749 02d4 0FBE      		out __SREG__,__tmp_reg__
 750 02d6 CDBF      		out __SP_L__,r28
 751               	/* prologue end (size=12) */
 752 02d8 8E01      		movw r16,r28
 753 02da 0F5F      		subi r16,lo8(-(1))
 754 02dc 1F4F      		sbci r17,hi8(-(1))
 755 02de F801      		movw r30,r16
 756 02e0 8FE0      		ldi r24,lo8(15)
 757               	.L81:
 160:mmc.c         **** 	uint8_t i,buffer[16];
 161:mmc.c         ****     struct MMC_VOLUME_INFO vinf;
 162:mmc.c         ****     
 163:mmc.c         **** 	for(i=0;i<16;i++)buffer[i]=0;
 759               	.LM92:
 760 02e2 1192      		st Z+,__zero_reg__
 761 02e4 8150      		subi r24,lo8(-(-1))
 762 02e6 87FF      		sbrs r24,7
 763 02e8 FCCF      		rjmp .L81
 164:mmc.c         **** 	Read_CSD_MMC(buffer);
 765               	.LM93:
 766 02ea CE01      		movw r24,r28
 767 02ec 0196      		adiw r24,1
 768 02ee 0E94 0000 		call Read_CSD_MMC
 165:mmc.c         **** 	
 166:mmc.c         **** 	vinf.sector_count=buffer[6]&0x03;
 770               	.LM94:
 771 02f2 8F81      		ldd r24,Y+7
 772 02f4 9927      		clr r25
 773 02f6 AA27      		clr r26
 774 02f8 BB27      		clr r27
 775 02fa 8370      		andi r24,lo8(3)
 776 02fc 9070      		andi r25,hi8(3)
 777 02fe A070      		andi r26,hlo8(3)
 778 0300 B070      		andi r27,hhi8(3)
 167:mmc.c         **** 	vinf.sector_count<<=8;
 780               	.LM95:
 781 0302 2227      		clr r18
 782 0304 382F      		mov r19,r24
 783 0306 492F      		mov r20,r25
 784 0308 5A2F      		mov r21,r26
 168:mmc.c         **** 	vinf.sector_count+=buffer[7];
 786               	.LM96:
 787 030a 8885      		ldd r24,Y+8
 788 030c 280F      		add r18,r24
 789 030e 311D      		adc r19,__zero_reg__
 790 0310 411D      		adc r20,__zero_reg__
 791 0312 511D      		adc r21,__zero_reg__
 169:mmc.c         **** 	vinf.sector_count<<=2;
 793               	.LM97:
 794 0314 F2E0      		ldi r31,2
 795 0316 220F      	1:	lsl r18
 796 0318 331F      		rol r19
 797 031a 441F      		rol r20
 798 031c 551F      		rol r21
 799 031e FA95      		dec r31
 800 0320 D1F7      		brne 1b
 170:mmc.c         **** 	vinf.sector_count+=(buffer[8]&0xc0)>>6;
 802               	.LM98:
 803 0322 8985      		ldd r24,Y+9
 804 0324 9927      		clr r25
 805 0326 E6E0      		ldi r30,6
 806 0328 9695      	1:	lsr r25
 807 032a 8795      		ror r24
 808 032c EA95      		dec r30
 809 032e E1F7      		brne 1b
 810 0330 AA27      		clr r26
 811 0332 97FD      		sbrc r25,7
 812 0334 A095      		com r26
 813 0336 BA2F      		mov r27,r26
 814 0338 280F      		add r18,r24
 815 033a 391F      		adc r19,r25
 816 033c 4A1F      		adc r20,r26
 817 033e 5B1F      		adc r21,r27
 818 0340 2E8B      		std Y+22,r18
 819 0342 3F8B      		std Y+23,r19
 820 0344 488F      		std Y+24,r20
 821 0346 598F      		std Y+25,r21
 171:mmc.c         **** 		
 172:mmc.c         **** 	vinf.sector_multiply=buffer[9]&0x03;
 823               	.LM99:
 824 0348 6A85      		ldd r22,Y+10
 825 034a 6370      		andi r22,lo8(3)
 173:mmc.c         **** 	vinf.sector_multiply<<=1;
 827               	.LM100:
 828 034c 660F      		lsl r22
 174:mmc.c         **** 	vinf.sector_multiply+=(buffer[10]&0x80)>>7;
 830               	.LM101:
 831 034e 8B85      		ldd r24,Y+11
 832 0350 9927      		clr r25
 833 0352 880F      		lsl r24
 834 0354 892F      		mov r24,r25
 835 0356 881F      		rol r24
 836 0358 990B      		sbc r25,r25
 837 035a 9195      		neg r25
 838 035c 680F      		add r22,r24
 839 035e 6D8B      		std Y+21,r22
 175:mmc.c         **** 	//SD的容量
 176:mmc.c         **** 	vinf.size_MB=vinf.sector_count>>(9-vinf.sector_multiply);
 841               	.LM102:
 842 0360 89E0      		ldi r24,lo8(9)
 843 0362 90E0      		ldi r25,hi8(9)
 844 0364 861B      		sub r24,r22
 845 0366 9109      		sbc r25,__zero_reg__
 846 0368 04C0      		rjmp 2f
 847 036a 5695      	1:	lsr r21
 848 036c 4795      		ror r20
 849 036e 3795      		ror r19
 850 0370 2795      		ror r18
 851 0372 8A95      	2:	dec r24
 852 0374 D2F7      		brpl 1b
 853 0376 298B      		std Y+17,r18
 854 0378 3A8B      		std Y+18,r19
 855 037a 4B8B      		std Y+19,r20
 856 037c 5C8B      		std Y+20,r21
 857 037e F801      		movw r30,r16
 858 0380 8FE0      		ldi r24,lo8(15)
 859               	.L85:
 177:mmc.c         **** 
 178:mmc.c         **** 	for(i=0;i<16;i++)buffer[i]=0;
 861               	.LM103:
 862 0382 1192      		st Z+,__zero_reg__
 863 0384 8150      		subi r24,lo8(-(-1))
 864 0386 87FF      		sbrs r24,7
 865 0388 FCCF      		rjmp .L85
 179:mmc.c         **** 	Read_CID_MMC(buffer);
 867               	.LM104:
 868 038a CE01      		movw r24,r28
 869 038c 0196      		adiw r24,1
 870 038e 0E94 0000 		call Read_CID_MMC
 871               	/* epilogue: frame size=31 */
 872 0392 6F96      		adiw r28,31
 873 0394 0FB6      		in __tmp_reg__,__SREG__
 874 0396 F894      		cli
 875 0398 DEBF      		out __SP_H__,r29
 876 039a 0FBE      		out __SREG__,__tmp_reg__
 877 039c CDBF      		out __SP_L__,r28
 878 039e DF91      		pop r29
 879 03a0 CF91      		pop r28
 880 03a2 1F91      		pop r17
 881 03a4 0F91      		pop r16
 882 03a6 0895      		ret
 883               	/* epilogue end (size=11) */
 884               	/* function MMC_get_volume_info size 117 (94) */
 891               	.Lscope9:
 892               		.text
 894               	Letext:
 895               	/* File "mmc.c": code  470 = 0x01d6 ( 394), prologues  34, epilogues  42 */
DEFINED SYMBOLS
                            *ABS*:00000000 mmc.c
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:3      *ABS*:0000003f __SREG__
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:4      *ABS*:0000003e __SP_H__
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:5      *ABS*:0000003d __SP_L__
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:6      *ABS*:00000000 __tmp_reg__
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:7      *ABS*:00000001 __zero_reg__
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:79     .text:00000000 mmcInit
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:104    .text:0000000a mmcCommand
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:192    .text:00000074 mmcSendCommand
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:222    .text:00000088 mmcReset_1
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:324    .text:000000fa mmcReset
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:366    .text:0000011a mmcRead
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:459    .text:00000186 mmcWrite
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:574    .text:00000214 Read_CID_MMC
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:655    .text:0000026a Read_CSD_MMC
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:735    .text:000002c0 MMC_get_volume_info
C:\Users\summer\AppData\Local\Temp/ccSGcaaa.s:894    .text:000003a8 Letext

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
spiInit
spiTransferByte

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -