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

📄 fat16.lst

📁 sd卡 fat16文件系统 spi模式十分详细读写操作
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1086 04b6 000F      	1:	lsl r16
 1087 04b8 111F      		rol r17
 1088 04ba EA95      		dec r30
 1089 04bc E1F7      		brne 1b
 1090 04be 40E2      		ldi r20,lo8(32)
 1091 04c0 50E0      		ldi r21,hi8(32)
 1092 04c2 B701      		movw r22,r14
 1093 04c4 C801      		movw r24,r16
 1094 04c6 8050      		subi r24,lo8(-(BUFFER))
 1095 04c8 9040      		sbci r25,hi8(-(BUFFER))
 1096 04ca 0E94 0000 		call CopyBytes
 1097               	/* epilogue: frame size=0 */
 1098 04ce 1F91      		pop r17
 1099 04d0 0F91      		pop r16
 1100 04d2 FF90      		pop r15
 1101 04d4 EF90      		pop r14
 1102 04d6 0895      		ret
 1103               	/* epilogue end (size=5) */
 1104               	/* function ReadDIR size 46 (37) */
 1106               	.Lscope18:
 1110               	.global	WriteDIR
 1112               	WriteDIR:
 170:FAT16.c       **** }
 171:FAT16.c       **** //-------------------------------------------------------------------------
 172:FAT16.c       **** void WriteDIR(uint16_t Index, DIR* Value){			//写根目录的指定项
 1114               	.LM102:
 1115               	/* prologue: frame size=0 */
 1116 04d8 AF92      		push r10
 1117 04da BF92      		push r11
 1118 04dc CF92      		push r12
 1119 04de DF92      		push r13
 1120 04e0 EF92      		push r14
 1121 04e2 FF92      		push r15
 1122 04e4 0F93      		push r16
 1123 04e6 1F93      		push r17
 1124               	/* prologue end (size=8) */
 1125 04e8 8C01      		movw r16,r24
 1126 04ea 5B01      		movw r10,r22
 173:FAT16.c       **** 	uint32_t LBA = DirStartSec()+Index/16;
 1128               	.LM103:
 1129 04ec 0E94 0000 		call DirStartSec
 1130 04f0 6B01      		movw r12,r22
 1131 04f2 7C01      		movw r14,r24
 1132 04f4 C801      		movw r24,r16
 1133 04f6 B4E0      		ldi r27,4
 1134 04f8 9695      	1:	lsr r25
 1135 04fa 8795      		ror r24
 1136 04fc BA95      		dec r27
 1137 04fe E1F7      		brne 1b
 1138 0500 AA27      		clr r26
 1139 0502 BB27      		clr r27
 1140 0504 C80E      		add r12,r24
 1141 0506 D91E      		adc r13,r25
 1142 0508 EA1E      		adc r14,r26
 1143 050a FB1E      		adc r15,r27
 174:FAT16.c       **** 	ReadFatBlock(LBA);
 1145               	.LM104:
 1146 050c C701      		movw r24,r14
 1147 050e B601      		movw r22,r12
 1148 0510 0E94 0000 		call ReadFatBlock
 175:FAT16.c       **** 	CopyBytes((uint8_t *)Value,(uint8_t *)&BUFFER[(Index%16)*32],32);
 1150               	.LM105:
 1151 0514 0F70      		andi r16,lo8(15)
 1152 0516 1070      		andi r17,hi8(15)
 1153 0518 A5E0      		ldi r26,5
 1154 051a 000F      	1:	lsl r16
 1155 051c 111F      		rol r17
 1156 051e AA95      		dec r26
 1157 0520 E1F7      		brne 1b
 1158 0522 0050      		subi r16,lo8(-(BUFFER))
 1159 0524 1040      		sbci r17,hi8(-(BUFFER))
 1160 0526 40E2      		ldi r20,lo8(32)
 1161 0528 50E0      		ldi r21,hi8(32)
 1162 052a B801      		movw r22,r16
 1163 052c C501      		movw r24,r10
 1164 052e 0E94 0000 		call CopyBytes
 176:FAT16.c       **** 	WriteFatBlock(LBA);
 1166               	.LM106:
 1167 0532 C701      		movw r24,r14
 1168 0534 B601      		movw r22,r12
 1169 0536 0E94 0000 		call WriteFatBlock
 1170               	/* epilogue: frame size=0 */
 1171 053a 1F91      		pop r17
 1172 053c 0F91      		pop r16
 1173 053e FF90      		pop r15
 1174 0540 EF90      		pop r14
 1175 0542 DF90      		pop r13
 1176 0544 CF90      		pop r12
 1177 0546 BF90      		pop r11
 1178 0548 AF90      		pop r10
 1179 054a 0895      		ret
 1180               	/* epilogue end (size=9) */
 1181               	/* function WriteDIR size 58 (41) */
 1186               	.Lscope19:
 1188               	.global	CopyFAT
 1190               	CopyFAT:
 177:FAT16.c       **** }
 178:FAT16.c       **** //-------------------------------------------------------------------------
 179:FAT16.c       **** void CopyFAT(void){						//复制文件分配表,使其和备份一致
 1192               	.LM107:
 1193               	/* prologue: frame size=0 */
 1194 054c CF93      		push r28
 1195 054e DF93      		push r29
 1196               	/* prologue end (size=2) */
 180:FAT16.c       **** 	uint16_t i;
 181:FAT16.c       **** 
 182:FAT16.c       **** 	for(i=0;i<BPB_FATSz16;i++){
 1198               	.LM108:
 1199 0550 C0E0      		ldi r28,lo8(0)
 1200 0552 D0E0      		ldi r29,hi8(0)
 1201 0554 8091 0000 		lds r24,BPB_FATSz16
 1202 0558 9091 0000 		lds r25,(BPB_FATSz16)+1
 1203 055c C817      		cp r28,r24
 1204 055e D907      		cpc r29,r25
 1205 0560 30F5      		brsh .L90
 1206               	.L88:
 183:FAT16.c       **** 		ReadFatBlock(BPB_RsvdSecCnt+i);
 1208               	.LM109:
 1209 0562 8091 0000 		lds r24,BPB_RsvdSecCnt
 1210 0566 9091 0000 		lds r25,(BPB_RsvdSecCnt)+1
 1211 056a 8C0F      		add r24,r28
 1212 056c 9D1F      		adc r25,r29
 1213 056e AA27      		clr r26
 1214 0570 BB27      		clr r27
 1215 0572 BC01      		movw r22,r24
 1216 0574 CD01      		movw r24,r26
 1217 0576 0E94 0000 		call ReadFatBlock
 184:FAT16.c       **** 		WriteFatBlock(BPB_RsvdSecCnt+BPB_FATSz16+i);
 1219               	.LM110:
 1220 057a 8091 0000 		lds r24,BPB_RsvdSecCnt
 1221 057e 9091 0000 		lds r25,(BPB_RsvdSecCnt)+1
 1222 0582 2091 0000 		lds r18,BPB_FATSz16
 1223 0586 3091 0000 		lds r19,(BPB_FATSz16)+1
 1224 058a 820F      		add r24,r18
 1225 058c 931F      		adc r25,r19
 1226 058e 8C0F      		add r24,r28
 1227 0590 9D1F      		adc r25,r29
 1228 0592 AA27      		clr r26
 1229 0594 BB27      		clr r27
 1230 0596 BC01      		movw r22,r24
 1231 0598 CD01      		movw r24,r26
 1232 059a 0E94 0000 		call WriteFatBlock
 1234               	.LM111:
 1235 059e 2196      		adiw r28,1
 1236 05a0 8091 0000 		lds r24,BPB_FATSz16
 1237 05a4 9091 0000 		lds r25,(BPB_FATSz16)+1
 1238 05a8 C817      		cp r28,r24
 1239 05aa D907      		cpc r29,r25
 1240 05ac D0F2      		brlo .L88
 1241               	.L90:
 1242               	/* epilogue: frame size=0 */
 1243 05ae DF91      		pop r29
 1244 05b0 CF91      		pop r28
 1245 05b2 0895      		ret
 1246               	/* epilogue end (size=3) */
 1247               	/* function CopyFAT size 52 (47) */
 1252               	.Lscope20:
 1256               	.global	CreateFile
 1258               	CreateFile:
 185:FAT16.c       **** 	}
 186:FAT16.c       **** }
 187:FAT16.c       **** //-------------------------------------------------------------------------
 188:FAT16.c       **** uint8_t CreateFile(uint8_t *Name,uint32_t Size){	//创建一个空文件
 1260               	.LM112:
 1261               	/* prologue: frame size=34 */
 1262 05b4 6F92      		push r6
 1263 05b6 7F92      		push r7
 1264 05b8 8F92      		push r8
 1265 05ba 9F92      		push r9
 1266 05bc AF92      		push r10
 1267 05be BF92      		push r11
 1268 05c0 CF92      		push r12
 1269 05c2 DF92      		push r13
 1270 05c4 EF92      		push r14
 1271 05c6 FF92      		push r15
 1272 05c8 0F93      		push r16
 1273 05ca 1F93      		push r17
 1274 05cc CF93      		push r28
 1275 05ce DF93      		push r29
 1276 05d0 CDB7      		in r28,__SP_L__
 1277 05d2 DEB7      		in r29,__SP_H__
 1278 05d4 A297      		sbiw r28,34
 1279 05d6 0FB6      		in __tmp_reg__,__SREG__
 1280 05d8 F894      		cli
 1281 05da DEBF      		out __SP_H__,r29
 1282 05dc 0FBE      		out __SREG__,__tmp_reg__
 1283 05de CDBF      		out __SP_L__,r28
 1284               	/* prologue end (size=22) */
 1285 05e0 4C01      		movw r8,r24
 1286 05e2 5A01      		movw r10,r20
 1287 05e4 6B01      		movw r12,r22
 189:FAT16.c       **** 	uint16_t ClusID, ClusNum, ClusNext, i,dirIndex;
 190:FAT16.c       **** 	DIR FileDir;
 191:FAT16.c       **** 	
 192:FAT16.c       **** 	if(GetFileID(Name,&FileDir,&dirIndex)==1)return SD_FAIL;	//文件已存在
 1289               	.LM113:
 1290 05e6 AE01      		movw r20,r28
 1291 05e8 4F5D      		subi r20,lo8(-(33))
 1292 05ea 5F4F      		sbci r21,hi8(-(33))
 1293 05ec BE01      		movw r22,r28
 1294 05ee 6F5F      		subi r22,lo8(-(1))
 1295 05f0 7F4F      		sbci r23,hi8(-(1))
 1296 05f2 0E94 0000 		call GetFileID
 1297 05f6 8130      		cpi r24,lo8(1)
 1298 05f8 19F4      		brne .L92
 1300               	.LM114:
 1301 05fa 81E0      		ldi r24,lo8(1)
 1302 05fc 90E0      		ldi r25,hi8(1)
 1303 05fe 5DC0      		rjmp .L91
 1304               	.L92:
 193:FAT16.c       **** 	
 194:FAT16.c       **** 	ClusNum=Size/(BPB_SecPerClus*BPB_BytesPerSec)+1;
 1306               	.LM115:
 1307 0600 8091 0000 		lds r24,BPB_SecPerClus
 1308 0604 282F      		mov r18,r24
 1309 0606 3327      		clr r19
 1310 0608 8091 0000 		lds r24,BPB_BytesPerSec
 1311 060c 9091 0000 		lds r25,(BPB_BytesPerSec)+1
 1312 0610 289F      		mul r18,r24
 1313 0612 A001      		movw r20,r0
 1314 0614 299F      		mul r18,r25
 1315 0616 500D      		add r21,r0
 1316 0618 389F      		mul r19,r24
 1317 061a 500D      		add r21,r0
 1318 061c 1124      		clr r1
 1319 061e CA01      		movw r24,r20
 1320 0620 9C01      		movw r18,r24
 1321 0622 4427      		clr r20
 1322 0624 5527      		clr r21
 1323 0626 C601      		movw r24,r12
 1324 0628 B501      		movw r22,r10
 1325 062a 0E94 0000 		call __udivmodsi4
 1326 062e 7901      		movw r14,r18
 1327 0630 8A01      		movw r16,r20
 1328 0632 3901      		movw r6,r18
 1329 0634 0894      		sec
 1330 0636 611C      		adc r6,__zero_reg__
 1331 0638 711C      		adc r7,__zero_reg__
 195:FAT16.c       **** 	
 196:FAT16.c       **** 	EmptyBytes((uint8_t *)&FileDir,sizeof(DIR));
 1333               	.LM116:
 1334 063a 60E2      		ldi r22,lo8(32)
 1335 063c 70E0      		ldi r23,hi8(32)
 1336 063e CE01      		movw r24,r28
 1337 0640 0196      		adiw r24,1
 1338 0642 0E94 0000 		call EmptyBytes
 197:FAT16.c       **** 	CopyBytes(Name,(uint8_t *)&FileDir.FileName,11);
 1340               	.LM117:
 1341 0646 4BE0      		ldi r20,lo8(11)
 1342 0648 50E0      		ldi r21,hi8(11)
 1343 064a BE01      		movw r22,r28
 1344 064c 6F5F      		subi r22,lo8(-(1))
 1345 064e 7F4F      		sbci r23,hi8(-(1))
 1346 0650 C401      		movw r24,r8
 1347 0652 0E94 0000 		call CopyBytes
 198:FAT16.c       **** 	FileDir.FilePosit.Size=Size;
 1349               	.LM118:
 1350 0656 AD8E      		std Y+29,r10
 1351 0658 BE8E      		std Y+30,r11
 1352 065a CF8E      		std Y+31,r12
 1353 065c D8A2      		std Y+32,r13
 199:FAT16.c       **** 	FileDir.FilePosit.Start=GetNextFAT();
 1355               	.LM119:
 1356 065e 0E94 0000 		call GetNextFAT
 1357 0662 9C8F      		std Y+28,r25
 1358 0664 8B8F      		std Y+27,r24
 200:FAT16.c       **** 	ClusID=FileDir.FilePosit.Start;
 1360               	.LM120:
 1361 0666 6C01      		movw r12,r24
 201:FAT16.c       **** 	for(i=0;i<ClusNum-1;i++){
 1363               	.LM121:
 1364 0668 AA24      		clr r10
 1365 066a BB24      		clr r11
 1366 066c C701      		movw r24,r14
 1367               	.L99:
 1368 066e A816      		cp r10,r24
 1369 0670 B906      		cpc r11,r25
 1370 0672 98F4      		brsh .L98
 202:FAT16.c       **** 		WriteFAT(ClusID,0xffff);
 1372               	.LM122:
 1373 0674 6FEF      		ldi r22,lo8(-1)
 1374 0676 7FEF      		ldi r23,hi8(-1)
 1375 0678 C601      		movw r24,r12
 1376 067a 0E94 0000 		call WriteFAT
 203:FAT16.c       **** 		ClusNext=GetNextFAT();
 1378               	.LM123:
 1379 067e 0E94 0000 		call GetNextFAT
 1380 0682 8C01      		movw r16,r24
 204:FAT16.c       **** 		WriteFAT(ClusID,ClusNext);
 1382               	.LM124:
 1383 0684 BC01      		movw r22,r24
 1384 0686 C601      		movw r24,r12
 1385 0688 0E94 0000 		call WriteFAT
 205:FAT16.c       **** 		ClusID=ClusNext;
 1387               	.LM125:
 1388 068c 6801      		movw r12,r16
 1390               	.LM126:
 1391 068e 0894      		sec
 1392 0690 A11C      		adc r10,__zero_reg__
 1393 0692 B11C      		adc r11,__zero_reg__
 1394 0694 C301      		movw r24,r6
 1395 0696 0197      		sbiw r24,1
 1396 0698 EACF      		rjmp .L99
 1397               	.L98:
 206:FAT16.c       **** 	}
 207:FAT16.c       **** 	WriteFAT(ClusID, 0xffff);
 1399               	.LM127:
 1400 069a 6FEF      		ldi r22,lo8(-1)
 1401 069c 7FEF      		ldi r23,hi8(-1)
 1402 069e C601      		movw r24,r12
 1403 06a0 0E94 0000 		call WriteFAT
 208:FAT16.c       **** 	WriteDIR(GetEmptyDIR(),&FileDir);
 1405               	.LM128:
 1406 06a4 0E94 0000 		call GetEmptyDIR
 1407 06a8 BE01      		movw r22,r28
 1408 06aa 6F5F      		subi r22,lo8(-(1))
 1409 06ac 7F4F      		sbci r23,hi8(-(1))
 1410 06ae 0E94 0000 		call WriteDIR
 209:FAT16.c       **** 	CopyFAT();
 1412               	.LM129:
 1413 06b2 0E94 0000 		call CopyFAT
 210:FAT16.c       **** 	return SD_SUCC;
 1415               	.LM130:
 1416 06b6 80E0      		ldi r24,lo8(0)
 1417 06b8 90E0      		ldi r25,hi8(0)
 1418               	.L91:
 1419               	/* epilogue: frame size=34 */
 1420 06ba A296      		adiw r28,34

⌨️ 快捷键说明

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