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

📄 fat16.lst

📁 sd卡 fat16文件系统 spi模式十分详细读写操作
💻 LST
📖 第 1 页 / 共 5 页
字号:
 740               	/* epilogue end (size=9) */
 741               	/* function WriteFAT size 47 (30) */
 746               	.Lscope14:
 748               	.global	GetEmptyDIR
 750               	GetEmptyDIR:
 120:FAT16.c       **** }
 121:FAT16.c       **** //-------------------------------------------------------------------------
 122:FAT16.c       **** uint16_t GetEmptyDIR(void){							//获取根目录中可以使用的一项
 752               	.LM67:
 753               	/* prologue: frame size=0 */
 754 030e CF92      		push r12
 755 0310 DF92      		push r13
 756 0312 EF92      		push r14
 757 0314 FF92      		push r15
 758 0316 0F93      		push r16
 759 0318 1F93      		push r17
 760 031a CF93      		push r28
 761 031c DF93      		push r29
 762               	/* prologue end (size=8) */
 123:FAT16.c       **** 	uint16_t i,DirSecCut,DirStart,m,ID=0;
 764               	.LM68:
 765 031e 00E0      		ldi r16,lo8(0)
 766 0320 10E0      		ldi r17,hi8(0)
 124:FAT16.c       **** 	
 125:FAT16.c       **** 	DirSecCut=GetDirSecCount();
 768               	.LM69:
 769 0322 0E94 0000 		call GetDirSecCount
 770 0326 6C01      		movw r12,r24
 126:FAT16.c       **** 	DirStart=DirStartSec();
 772               	.LM70:
 773 0328 0E94 0000 		call DirStartSec
 127:FAT16.c       **** 	for(i=0;i<DirSecCut;i++){
 775               	.LM71:
 776 032c 7801      		movw r14,r16
 777 032e 0C15      		cp r16,r12
 778 0330 1D05      		cpc r17,r13
 779 0332 F0F4      		brsh .L44
 780 0334 EB01      		movw r28,r22
 781               	.L54:
 128:FAT16.c       **** 		ReadFatBlock(DirStart+i);
 783               	.LM72:
 784 0336 CE01      		movw r24,r28
 785 0338 AA27      		clr r26
 786 033a BB27      		clr r27
 787 033c BC01      		movw r22,r24
 788 033e CD01      		movw r24,r26
 789 0340 0E94 0000 		call ReadFatBlock
 790 0344 E0E0      		ldi r30,lo8(BUFFER)
 791 0346 F0E0      		ldi r31,hi8(BUFFER)
 792               	.L53:
 129:FAT16.c       **** 		for(m=0;m<16;m++){
 130:FAT16.c       **** 			if(BUFFER[m*32]==0)return ID;
 794               	.LM73:
 795 0348 8081      		ld r24,Z
 796 034a B096      		adiw r30,32
 797 034c 8823      		tst r24
 798 034e 81F0      		breq .L44
 131:FAT16.c       **** 			if(BUFFER[m*32]==0xe5)return ID;
 800               	.LM74:
 801 0350 853E      		cpi r24,lo8(-27)
 802 0352 71F0      		breq .L44
 132:FAT16.c       **** 			ID++;
 804               	.LM75:
 805 0354 0F5F      		subi r16,lo8(-(1))
 806 0356 1F4F      		sbci r17,hi8(-(1))
 808               	.LM76:
 809 0358 80E0      		ldi r24,hi8(BUFFER+480)
 810 035a E030      		cpi r30,lo8(BUFFER+480)
 811 035c F807      		cpc r31,r24
 812 035e A1F3      		breq .L53
 813 0360 98F3      		brlo .L53
 815               	.LM77:
 816 0362 0894      		sec
 817 0364 E11C      		adc r14,__zero_reg__
 818 0366 F11C      		adc r15,__zero_reg__
 819 0368 2196      		adiw r28,1
 820 036a EC14      		cp r14,r12
 821 036c FD04      		cpc r15,r13
 822 036e 18F3      		brlo .L54
 823               	.L44:
 133:FAT16.c       **** 		}
 134:FAT16.c       **** 	}
 135:FAT16.c       **** 	return ID;
 136:FAT16.c       **** }
 825               	.LM78:
 826 0370 C801      		movw r24,r16
 827               	/* epilogue: frame size=0 */
 828 0372 DF91      		pop r29
 829 0374 CF91      		pop r28
 830 0376 1F91      		pop r17
 831 0378 0F91      		pop r16
 832 037a FF90      		pop r15
 833 037c EF90      		pop r14
 834 037e DF90      		pop r13
 835 0380 CF90      		pop r12
 836 0382 0895      		ret
 837               	/* epilogue end (size=9) */
 838               	/* function GetEmptyDIR size 59 (42) */
 845               	.Lscope15:
 850               	.global	GetFileID
 852               	GetFileID:
 137:FAT16.c       **** //-------------------------------------------------------------------------
 138:FAT16.c       **** //获得和文件名对应的目录
 139:FAT16.c       **** uint8_t GetFileID(uint8_t Name[11],DIR *ID,uint16_t *pIndex){
 854               	.LM79:
 855               	/* prologue: frame size=0 */
 856 0384 6F92      		push r6
 857 0386 7F92      		push r7
 858 0388 8F92      		push r8
 859 038a 9F92      		push r9
 860 038c AF92      		push r10
 861 038e BF92      		push r11
 862 0390 CF92      		push r12
 863 0392 DF92      		push r13
 864 0394 EF92      		push r14
 865 0396 FF92      		push r15
 866 0398 0F93      		push r16
 867 039a 1F93      		push r17
 868 039c CF93      		push r28
 869 039e DF93      		push r29
 870               	/* prologue end (size=14) */
 871 03a0 4C01      		movw r8,r24
 872 03a2 3B01      		movw r6,r22
 873 03a4 7A01      		movw r14,r20
 140:FAT16.c       **** 	uint16_t  i,DirSecCut,DirStart,m;
 141:FAT16.c       **** 	
 142:FAT16.c       **** 	DirSecCut = GetDirSecCount();
 875               	.LM80:
 876 03a6 0E94 0000 		call GetDirSecCount
 877 03aa 5C01      		movw r10,r24
 143:FAT16.c       **** 	DirStart = DirStartSec();
 879               	.LM81:
 880 03ac 0E94 0000 		call DirStartSec
 144:FAT16.c       **** 	for(i=0,*pIndex=0;i<DirSecCut;i++){
 882               	.LM82:
 883 03b0 CC24      		clr r12
 884 03b2 DD24      		clr r13
 885 03b4 F701      		movw r30,r14
 886 03b6 D182      		std Z+1,r13
 887 03b8 C082      		st Z,r12
 888 03ba CA14      		cp r12,r10
 889 03bc DB04      		cpc r13,r11
 890 03be 70F5      		brsh .L70
 891 03c0 8B01      		movw r16,r22
 892               	.L68:
 145:FAT16.c       **** 		ReadFatBlock(DirStart+i);
 894               	.LM83:
 895 03c2 C801      		movw r24,r16
 896 03c4 AA27      		clr r26
 897 03c6 BB27      		clr r27
 898 03c8 BC01      		movw r22,r24
 899 03ca CD01      		movw r24,r26
 900 03cc 0E94 0000 		call ReadFatBlock
 901 03d0 C0E0      		ldi r28,lo8(BUFFER)
 902 03d2 D0E0      		ldi r29,hi8(BUFFER)
 903               	.L67:
 146:FAT16.c       **** 		for(m=0;m<16;m++){
 147:FAT16.c       **** 			if(IsEqual(Name,(uint8_t *)&((DIR*)&BUFFER[m*32])->FileName,11)){
 905               	.LM84:
 906 03d4 4BE0      		ldi r20,lo8(11)
 907 03d6 BE01      		movw r22,r28
 908 03d8 C401      		movw r24,r8
 909 03da 0E94 0000 		call IsEqual
 910 03de 8823      		tst r24
 911 03e0 49F0      		breq .L66
 148:FAT16.c       **** 				*ID = *((DIR*)&BUFFER[m*32]);
 913               	.LM85:
 914 03e2 80E2      		ldi r24,lo8(32)
 915 03e4 F301      		movw r30,r6
 916 03e6 0990      		ld __tmp_reg__,Y+
 917 03e8 0192      		st Z+,__tmp_reg__
 918 03ea 8A95      		dec r24
 919 03ec E1F7      		brne .-8
 149:FAT16.c       **** 				return 1; 						//找到对应的目录项,返回1.
 921               	.LM86:
 922 03ee 81E0      		ldi r24,lo8(1)
 923 03f0 90E0      		ldi r25,hi8(1)
 924 03f2 16C0      		rjmp .L59
 925               	.L66:
 150:FAT16.c       **** 			}
 151:FAT16.c       **** 			(*pIndex)++;
 927               	.LM87:
 928 03f4 F701      		movw r30,r14
 929 03f6 8081      		ld r24,Z
 930 03f8 9181      		ldd r25,Z+1
 931 03fa 0196      		adiw r24,1
 932 03fc 9183      		std Z+1,r25
 933 03fe 8083      		st Z,r24
 934 0400 A096      		adiw r28,32
 936               	.LM88:
 937 0402 F0E0      		ldi r31,hi8(BUFFER+480)
 938 0404 C030      		cpi r28,lo8(BUFFER+480)
 939 0406 DF07      		cpc r29,r31
 940 0408 29F3      		breq .L67
 941 040a 20F3      		brlo .L67
 943               	.LM89:
 944 040c 0894      		sec
 945 040e C11C      		adc r12,__zero_reg__
 946 0410 D11C      		adc r13,__zero_reg__
 947 0412 0F5F      		subi r16,lo8(-(1))
 948 0414 1F4F      		sbci r17,hi8(-(1))
 949 0416 CA14      		cp r12,r10
 950 0418 DB04      		cpc r13,r11
 951 041a 98F2      		brlo .L68
 952               	.L70:
 152:FAT16.c       **** 		}
 153:FAT16.c       **** 	}
 154:FAT16.c       **** 	return 0; 									//没有找到对应的目录项,返回0.
 954               	.LM90:
 955 041c 80E0      		ldi r24,lo8(0)
 956 041e 90E0      		ldi r25,hi8(0)
 957               	.L59:
 958               	/* epilogue: frame size=0 */
 959 0420 DF91      		pop r29
 960 0422 CF91      		pop r28
 961 0424 1F91      		pop r17
 962 0426 0F91      		pop r16
 963 0428 FF90      		pop r15
 964 042a EF90      		pop r14
 965 042c DF90      		pop r13
 966 042e CF90      		pop r12
 967 0430 BF90      		pop r11
 968 0432 AF90      		pop r10
 969 0434 9F90      		pop r9
 970 0436 8F90      		pop r8
 971 0438 7F90      		pop r7
 972 043a 6F90      		pop r6
 973 043c 0895      		ret
 974               	/* epilogue end (size=15) */
 975               	/* function GetFileID size 93 (64) */
 981               	.Lscope16:
 983               	.global	GetNextFAT
 985               	GetNextFAT:
 155:FAT16.c       **** }
 156:FAT16.c       **** //-------------------------------------------------------------------------
 157:FAT16.c       **** uint16_t GetNextFAT(void){							//获取一个空的FAT项
 987               	.LM91:
 988               	/* prologue: frame size=0 */
 989 043e 0F93      		push r16
 990 0440 1F93      		push r17
 991 0442 CF93      		push r28
 992 0444 DF93      		push r29
 993               	/* prologue end (size=4) */
 158:FAT16.c       **** 	uint16_t FAT_Count,i;
 159:FAT16.c       **** 	FAT_Count=BPB_FATSz16*256; 						//FAT表总项数
 995               	.LM92:
 996 0446 8091 0000 		lds r24,BPB_FATSz16
 997 044a 9091 0000 		lds r25,(BPB_FATSz16)+1
 998 044e 182F      		mov r17,r24
 999 0450 0027      		clr r16
 160:FAT16.c       **** 	for(i=0;i<FAT_Count;i++){
 1001               	.LM93:
 1002 0452 C0E0      		ldi r28,lo8(0)
 1003 0454 D0E0      		ldi r29,hi8(0)
 1004               	.L81:
 1006               	.LM94:
 1007 0456 C017      		cp r28,r16
 1008 0458 D107      		cpc r29,r17
 1009 045a 48F4      		brsh .L80
 161:FAT16.c       **** 		if(ReadFAT(i)==0)return i;
 1011               	.LM95:
 1012 045c CE01      		movw r24,r28
 1013 045e 0E94 0000 		call ReadFAT
 1014 0462 892B      		or r24,r25
 1015 0464 11F4      		brne .L76
 1016 0466 CE01      		movw r24,r28
 1017 0468 04C0      		rjmp .L73
 1018               	.L76:
 1020               	.LM96:
 1021 046a 2196      		adiw r28,1
 1022 046c F4CF      		rjmp .L81
 1023               	.L80:
 162:FAT16.c       **** 	}
 163:FAT16.c       **** 	return 0;
 1025               	.LM97:
 1026 046e 80E0      		ldi r24,lo8(0)
 1027 0470 90E0      		ldi r25,hi8(0)
 1028               	.L73:
 1029               	/* epilogue: frame size=0 */
 1030 0472 DF91      		pop r29
 1031 0474 CF91      		pop r28
 1032 0476 1F91      		pop r17
 1033 0478 0F91      		pop r16
 1034 047a 0895      		ret
 1035               	/* epilogue end (size=5) */
 1036               	/* function GetNextFAT size 31 (22) */
 1042               	.Lscope17:
 1046               	.global	ReadDIR
 1048               	ReadDIR:
 164:FAT16.c       **** }
 165:FAT16.c       **** //-------------------------------------------------------------------------
 166:FAT16.c       **** void ReadDIR(uint16_t Index, DIR* Value){			//读取根目录的指定项
 1050               	.LM98:
 1051               	/* prologue: frame size=0 */
 1052 047c EF92      		push r14
 1053 047e FF92      		push r15
 1054 0480 0F93      		push r16
 1055 0482 1F93      		push r17
 1056               	/* prologue end (size=4) */
 1057 0484 8C01      		movw r16,r24
 1058 0486 7B01      		movw r14,r22
 167:FAT16.c       **** 	uint32_t LBA = DirStartSec()+Index/16;
 1060               	.LM99:
 1061 0488 0E94 0000 		call DirStartSec
 1062 048c 9B01      		movw r18,r22
 1063 048e AC01      		movw r20,r24
 1064 0490 C801      		movw r24,r16
 1065 0492 F4E0      		ldi r31,4
 1066 0494 9695      	1:	lsr r25
 1067 0496 8795      		ror r24
 1068 0498 FA95      		dec r31
 1069 049a E1F7      		brne 1b
 1070 049c AA27      		clr r26
 1071 049e BB27      		clr r27
 1072 04a0 820F      		add r24,r18
 1073 04a2 931F      		adc r25,r19
 1074 04a4 A41F      		adc r26,r20
 1075 04a6 B51F      		adc r27,r21
 168:FAT16.c       **** 	ReadFatBlock(LBA);
 1077               	.LM100:
 1078 04a8 BC01      		movw r22,r24
 1079 04aa CD01      		movw r24,r26
 1080 04ac 0E94 0000 		call ReadFatBlock
 169:FAT16.c       **** 	CopyBytes((uint8_t *)&BUFFER[(Index%16)*32],(uint8_t *)Value,32);
 1082               	.LM101:
 1083 04b0 0F70      		andi r16,lo8(15)
 1084 04b2 1070      		andi r17,hi8(15)
 1085 04b4 E5E0      		ldi r30,5

⌨️ 快捷键说明

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