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

📄 fat16.lst

📁 sd卡 fat16文件系统 spi模式十分详细读写操作
💻 LST
📖 第 1 页 / 共 5 页
字号:
 1421 06bc 0FB6      		in __tmp_reg__,__SREG__
 1422 06be F894      		cli
 1423 06c0 DEBF      		out __SP_H__,r29
 1424 06c2 0FBE      		out __SREG__,__tmp_reg__
 1425 06c4 CDBF      		out __SP_L__,r28
 1426 06c6 DF91      		pop r29
 1427 06c8 CF91      		pop r28
 1428 06ca 1F91      		pop r17
 1429 06cc 0F91      		pop r16
 1430 06ce FF90      		pop r15
 1431 06d0 EF90      		pop r14
 1432 06d2 DF90      		pop r13
 1433 06d4 CF90      		pop r12
 1434 06d6 BF90      		pop r11
 1435 06d8 AF90      		pop r10
 1436 06da 9F90      		pop r9
 1437 06dc 8F90      		pop r8
 1438 06de 7F90      		pop r7
 1439 06e0 6F90      		pop r6
 1440 06e2 0895      		ret
 1441               	/* epilogue end (size=21) */
 1442               	/* function CreateFile size 152 (109) */
 1452               	.Lscope21:
 1458               	.global	ReadFile
 1460               	ReadFile:
 211:FAT16.c       **** }
 212:FAT16.c       **** //-------------------------------------------------------------------------
 213:FAT16.c       **** //读文件
 214:FAT16.c       **** uint8_t ReadFile(uint8_t Name[11],uint32_t Start,uint32_t len,uint8_t *p){
 1462               	.LM131:
 1463               	/* prologue: frame size=40 */
 1464 06e4 3F92      		push r3
 1465 06e6 4F92      		push r4
 1466 06e8 5F92      		push r5
 1467 06ea 6F92      		push r6
 1468 06ec 7F92      		push r7
 1469 06ee 8F92      		push r8
 1470 06f0 9F92      		push r9
 1471 06f2 AF92      		push r10
 1472 06f4 BF92      		push r11
 1473 06f6 CF92      		push r12
 1474 06f8 DF92      		push r13
 1475 06fa EF92      		push r14
 1476 06fc FF92      		push r15
 1477 06fe 0F93      		push r16
 1478 0700 1F93      		push r17
 1479 0702 CF93      		push r28
 1480 0704 DF93      		push r29
 1481 0706 CDB7      		in r28,__SP_L__
 1482 0708 DEB7      		in r29,__SP_H__
 1483 070a A897      		sbiw r28,40
 1484 070c 0FB6      		in __tmp_reg__,__SREG__
 1485 070e F894      		cli
 1486 0710 DEBF      		out __SP_H__,r29
 1487 0712 0FBE      		out __SREG__,__tmp_reg__
 1488 0714 CDBF      		out __SP_L__,r28
 1489               	/* prologue end (size=25) */
 1490 0716 5A01      		movw r10,r20
 1491 0718 6B01      		movw r12,r22
 1492 071a 0BA3      		std Y+35,r16
 1493 071c 1CA3      		std Y+36,r17
 1494 071e 2DA3      		std Y+37,r18
 1495 0720 3EA3      		std Y+38,r19
 1496 0722 F8A6      		std Y+40,r15
 1497 0724 EFA2      		std Y+39,r14
 215:FAT16.c       **** 	uint16_t BytePerClus,ClusID,m,dirIndex;
 216:FAT16.c       **** 	uint32_t LBA;
 217:FAT16.c       **** 	uint8_t	 i;
 218:FAT16.c       **** 	DIR      FileDir;
 219:FAT16.c       **** 	
 220:FAT16.c       **** 	if(GetFileID(Name,&FileDir,&dirIndex)==0)return SD_FAIL;//文件不存在
 1499               	.LM132:
 1500 0726 AE01      		movw r20,r28
 1501 0728 4F5D      		subi r20,lo8(-(33))
 1502 072a 5F4F      		sbci r21,hi8(-(33))
 1503 072c BE01      		movw r22,r28
 1504 072e 6F5F      		subi r22,lo8(-(1))
 1505 0730 7F4F      		sbci r23,hi8(-(1))
 1506 0732 0E94 0000 		call GetFileID
 1507 0736 8823      		tst r24
 1508 0738 19F4      		brne .L101
 1510               	.LM133:
 1511 073a 81E0      		ldi r24,lo8(1)
 1512 073c 90E0      		ldi r25,hi8(1)
 1513 073e 99C0      		rjmp .L100
 1514               	.L101:
 221:FAT16.c       **** 	
 222:FAT16.c       **** 	BytePerClus=BPB_SecPerClus*BPB_BytesPerSec;		//每簇的字节数	
 1516               	.LM134:
 1517 0740 8091 0000 		lds r24,BPB_SecPerClus
 1518 0744 282F      		mov r18,r24
 1519 0746 3327      		clr r19
 1520 0748 8091 0000 		lds r24,BPB_BytesPerSec
 1521 074c 9091 0000 		lds r25,(BPB_BytesPerSec)+1
 1522 0750 289F      		mul r18,r24
 1523 0752 A001      		movw r20,r0
 1524 0754 299F      		mul r18,r25
 1525 0756 500D      		add r21,r0
 1526 0758 389F      		mul r19,r24
 1527 075a 500D      		add r21,r0
 1528 075c 1124      		clr r1
 223:FAT16.c       **** 	m=Start/BytePerClus;							//计算开始位置包含的簇数
 1530               	.LM135:
 1531 075e 3A01      		movw r6,r20
 1532 0760 8824      		clr r8
 1533 0762 9924      		clr r9
 1534 0764 C601      		movw r24,r12
 1535 0766 B501      		movw r22,r10
 1536 0768 A401      		movw r20,r8
 1537 076a 9301      		movw r18,r6
 1538 076c 0E94 0000 		call __udivmodsi4
 1539 0770 8901      		movw r16,r18
 224:FAT16.c       **** 	ClusID=FileDir.FilePosit.Start;					//文件的开始簇号
 1541               	.LM136:
 1542 0772 4B8C      		ldd r4,Y+27
 1543 0774 5C8C      		ldd r5,Y+28
 225:FAT16.c       **** 	for(i=0;i<m;i++)ClusID=ReadFAT(ClusID);		//计算开始位置所在簇的簇号	
 1545               	.LM137:
 1546 0776 3324      		clr r3
 1547 0778 232B      		or r18,r19
 1548 077a 51F0      		breq .L117
 1549               	.L105:
 1550 077c C201      		movw r24,r4
 1551 077e 0E94 0000 		call ReadFAT
 1552 0782 2C01      		movw r4,r24
 1553 0784 3394      		inc r3
 1554 0786 832D      		mov r24,r3
 1555 0788 9927      		clr r25
 1556 078a 8017      		cp r24,r16
 1557 078c 9107      		cpc r25,r17
 1558 078e B0F3      		brlo .L105
 1559               	.L117:
 226:FAT16.c       **** 	i=(Start%BytePerClus)/BPB_BytesPerSec;			//计算开始位置所在扇区的簇内偏移
 1561               	.LM138:
 1562 0790 C601      		movw r24,r12
 1563 0792 B501      		movw r22,r10
 1564 0794 A401      		movw r20,r8
 1565 0796 9301      		movw r18,r6
 1566 0798 0E94 0000 		call __udivmodsi4
 1567 079c 5B01      		movw r10,r22
 1568 079e 6C01      		movw r12,r24
 1569 07a0 8091 0000 		lds r24,BPB_BytesPerSec
 1570 07a4 9091 0000 		lds r25,(BPB_BytesPerSec)+1
 1571 07a8 7C01      		movw r14,r24
 1572 07aa 0027      		clr r16
 1573 07ac 1127      		clr r17
 1574 07ae C601      		movw r24,r12
 1575 07b0 B501      		movw r22,r10
 1576 07b2 A801      		movw r20,r16
 1577 07b4 9701      		movw r18,r14
 1578 07b6 0E94 0000 		call __udivmodsi4
 1579 07ba 322E      		mov r3,r18
 227:FAT16.c       **** 	LBA=ClusConvLBA(ClusID)+i;						//计算开始位置的逻辑扇区号
 1581               	.LM139:
 1582 07bc C201      		movw r24,r4
 1583 07be 0E94 0000 		call ClusConvLBA
 1584 07c2 3B01      		movw r6,r22
 1585 07c4 4C01      		movw r8,r24
 1586 07c6 630C      		add r6,r3
 1587 07c8 711C      		adc r7,__zero_reg__
 1588 07ca 811C      		adc r8,__zero_reg__
 1589 07cc 911C      		adc r9,__zero_reg__
 228:FAT16.c       **** 	m=(Start%BytePerClus)%BPB_BytesPerSec;			//计算开始位置在扇区内偏移
 1591               	.LM140:
 1592 07ce C601      		movw r24,r12
 1593 07d0 B501      		movw r22,r10
 1594 07d2 A801      		movw r20,r16
 1595 07d4 9701      		movw r18,r14
 1596 07d6 0E94 0000 		call __udivmodsi4
 1597 07da DC01      		movw r26,r24
 1598 07dc CB01      		movw r24,r22
 1599 07de 8C01      		movw r16,r24
 1600               	.L106:
 1601               	.L123:
 229:FAT16.c       **** 
 230:FAT16.c       **** READ:
 231:FAT16.c       **** 	for(;i<BPB_SecPerClus;i++){
 1603               	.LM141:
 1604 07e0 8091 0000 		lds r24,BPB_SecPerClus
 1605 07e4 3816      		cp r3,r24
 1606 07e6 B8F5      		brsh .L119
 232:FAT16.c       **** 		ReadFatBlock(LBA++);
 1608               	.LM142:
 1609 07e8 D401      		movw r26,r8
 1610 07ea C301      		movw r24,r6
 1611 07ec 0894      		sec
 1612 07ee 611C      		adc r6,__zero_reg__
 1613 07f0 711C      		adc r7,__zero_reg__
 1614 07f2 811C      		adc r8,__zero_reg__
 1615 07f4 911C      		adc r9,__zero_reg__
 1616 07f6 BC01      		movw r22,r24
 1617 07f8 CD01      		movw r24,r26
 1618 07fa 0E94 0000 		call ReadFatBlock
 233:FAT16.c       **** 		for(;m<BPB_BytesPerSec;m++){
 1620               	.LM143:
 1621 07fe 8091 0000 		lds r24,BPB_BytesPerSec
 1622 0802 9091 0000 		lds r25,(BPB_BytesPerSec)+1
 1623 0806 0817      		cp r16,r24
 1624 0808 1907      		cpc r17,r25
 1625 080a 08F5      		brsh .L121
 1626 080c F801      		movw r30,r16
 1627 080e E050      		subi r30,lo8(-(BUFFER))
 1628 0810 F040      		sbci r31,hi8(-(BUFFER))
 1629               	.L114:
 234:FAT16.c       **** 			*p++=BUFFER[m];
 1631               	.LM144:
 1632 0812 8191      		ld r24,Z+
 1633 0814 AFA1      		ldd r26,Y+39
 1634 0816 B8A5      		ldd r27,Y+40
 1635 0818 8D93      		st X+,r24
 1636 081a B8A7      		std Y+40,r27
 1637 081c AFA3      		std Y+39,r26
 235:FAT16.c       **** 			if(--len==0)return SD_SUCC;			//如果读取完成就退出
 1639               	.LM145:
 1640 081e 8BA1      		ldd r24,Y+35
 1641 0820 9CA1      		ldd r25,Y+36
 1642 0822 ADA1      		ldd r26,Y+37
 1643 0824 BEA1      		ldd r27,Y+38
 1644 0826 0197      		sbiw r24,1
 1645 0828 A109      		sbc r26,__zero_reg__
 1646 082a B109      		sbc r27,__zero_reg__
 1647 082c 8BA3      		std Y+35,r24
 1648 082e 9CA3      		std Y+36,r25
 1649 0830 ADA3      		std Y+37,r26
 1650 0832 BEA3      		std Y+38,r27
 1651 0834 0097      		sbiw r24,0
 1652 0836 A105      		cpc r26,__zero_reg__
 1653 0838 B105      		cpc r27,__zero_reg__
 1654 083a C9F0      		breq .L122
 1656               	.LM146:
 1657 083c 0F5F      		subi r16,lo8(-(1))
 1658 083e 1F4F      		sbci r17,hi8(-(1))
 1659 0840 8091 0000 		lds r24,BPB_BytesPerSec
 1660 0844 9091 0000 		lds r25,(BPB_BytesPerSec)+1
 1661 0848 0817      		cp r16,r24
 1662 084a 1907      		cpc r17,r25
 1663 084c 10F3      		brlo .L114
 1664               	.L121:
 236:FAT16.c       **** 		}
 237:FAT16.c       **** 		m=0;
 1666               	.LM147:
 1667 084e 00E0      		ldi r16,lo8(0)
 1668 0850 10E0      		ldi r17,hi8(0)
 1670               	.LM148:
 1671 0852 3394      		inc r3
 1672 0854 C5CF      		rjmp .L123
 1673               	.L119:
 238:FAT16.c       **** 	}
 239:FAT16.c       **** 	i=0;
 1675               	.LM149:
 1676 0856 3324      		clr r3
 240:FAT16.c       **** 	ClusID=ReadFAT(ClusID);							//下一簇簇号
 1678               	.LM150:
 1679 0858 C201      		movw r24,r4
 1680 085a 0E94 0000 		call ReadFAT
 1681 085e 2C01      		movw r4,r24
 241:FAT16.c       **** 	LBA=ClusConvLBA(ClusID);
 1683               	.LM151:
 1684 0860 0E94 0000 		call ClusConvLBA
 1685 0864 DC01      		movw r26,r24
 1686 0866 CB01      		movw r24,r22
 1687 0868 3C01      		movw r6,r24
 1688 086a 4D01      		movw r8,r26
 242:FAT16.c       **** 	goto READ;
 1690               	.LM152:
 1691 086c B9CF      		rjmp .L123
 1692               	.L122:
 1694               	.LM153:
 1695 086e 80E0      		ldi r24,lo8(0)
 1696 0870 90E0      		ldi r25,hi8(0)
 1697               	.L100:
 1698               	/* epilogue: frame size=40 */
 1699 0872 A896      		adiw r28,40
 1700 0874 0FB6      		in __tmp_reg__,__SREG__
 1701 0876 F894      		cli
 1702 0878 DEBF      		out __SP_H__,r29
 1703 087a 0FBE      		out __SREG__,__tmp_reg__
 1704 087c CDBF      		out __SP_L__,r28
 1705 087e DF91      		pop r29
 1706 0880 CF91      		pop r28
 1707 0882 1F91      		pop r17
 1708 0884 0F91      		pop r16
 1709 0886 FF90      		pop r15
 1710 0888 EF90      		pop r14
 1711 088a DF90      		pop r13
 1712 088c CF90      		pop r12
 1713 088e BF90      		pop r11
 1714 0890 AF90      		pop r10
 1715 0892 9F90      		pop r9
 1716 0894 8F90      		pop r8
 1717 0896 7F90      		pop r7
 1718 0898 6F90      		pop r6
 1719 089a 5F90      		pop r5
 1720 089c 4F90      		pop r4
 1721 089e 3F90      		pop r3
 1722 08a0 0895      		ret
 1723               	/* epilogue end (size=24) */
 1724               	/* function ReadFile size 223 (174) */
 1735               	.Lscope22:
 1741               	.global	WriteFile
 1743               	WriteFile:
 243:FAT16.c       **** }
 244:FAT16.c       **** //-------------------------------------------------------------------------
 245:FAT16.c       **** //写文件
 246:FAT16.c       **** uint8_t WriteFile(uint8_t Name[11],uint32_t Start,uint32_t len,uint8_t *p){
 1745               	.LM154:
 1746               	/* prologue: frame size=40 */
 1747 08a2 3F92      		push r3
 1748 08a4 4F92      		push r4
 1749 08a6 5F92      		push r5
 1750 08a8 6F92      		push r6
 1751 08aa 7F92      		push r7
 1752 08ac 8F92      		push r8
 1753 08ae 9F92      		push r9
 1754 08b0 AF92      		push r10
 1755 08b2 BF92      		push r11
 1756 08b4 CF92      		push r12
 1757 08b6 DF92      		push r13
 1758 08b8 EF92      		push r14
 1759 08ba FF92      		push r15
 1760 08bc 0F93      		push r16
 1761 08be 1F93      		push r17
 1762 08c0 CF93      		push r28
 176

⌨️ 快捷键说明

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