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

📄 fat16.lst

📁 sd卡 fat16文件系统 spi模式十分详细读写操作
💻 LST
📖 第 1 页 / 共 5 页
字号:
 401               	.LM33:
 402 011a 60E0      		ldi r22,lo8(0)
 403 011c 70E0      		ldi r23,hi8(0)
 404 011e 80E0      		ldi r24,hlo8(0)
 405 0120 90E0      		ldi r25,hhi8(0)
 406 0122 0E94 0000 		call ReadFatBlock
  73:FAT16.c       **** 	if(ok==SD_FAIL)return SD_FAIL;
 408               	.LM34:
 409 0126 8130      		cpi r24,lo8(1)
 410 0128 19F4      		brne .L37
 412               	.LM35:
 413 012a 81E0      		ldi r24,lo8(1)
 414 012c 90E0      		ldi r25,hi8(1)
 415 012e 0895      		ret
 416               	.L37:
  74:FAT16.c       **** 	
  75:FAT16.c       **** 	//获取参数
  76:FAT16.c       **** 	BPB_BytesPerSec = BPB->BPB_BytesPerSec;
 418               	.LM36:
 419 0130 8091 0000 		lds r24,BUFFER+11
 420 0134 9091 0000 		lds r25,(BUFFER+11)+1
 421 0138 9093 0000 		sts (BPB_BytesPerSec)+1,r25
 422 013c 8093 0000 		sts BPB_BytesPerSec,r24
  77:FAT16.c       **** 	BPB_SecPerClus = BPB->BPB_SecPerClus;
 424               	.LM37:
 425 0140 8091 0000 		lds r24,BUFFER+13
 426 0144 8093 0000 		sts BPB_SecPerClus,r24
  78:FAT16.c       **** 	BPB_RsvdSecCnt = BPB->BPB_RsvdSecCnt;
 428               	.LM38:
 429 0148 8091 0000 		lds r24,BUFFER+14
 430 014c 9091 0000 		lds r25,(BUFFER+14)+1
 431 0150 9093 0000 		sts (BPB_RsvdSecCnt)+1,r25
 432 0154 8093 0000 		sts BPB_RsvdSecCnt,r24
  79:FAT16.c       **** 	BPB_NumFATs = BPB->BPB_NumFATs;
 434               	.LM39:
 435 0158 8091 0000 		lds r24,BUFFER+16
 436 015c 8093 0000 		sts BPB_NumFATs,r24
  80:FAT16.c       **** 	BPB_RootEntCnt = BPB->BPB_RootEntCnt;
 438               	.LM40:
 439 0160 8091 0000 		lds r24,BUFFER+17
 440 0164 9091 0000 		lds r25,(BUFFER+17)+1
 441 0168 9093 0000 		sts (BPB_RootEntCnt)+1,r25
 442 016c 8093 0000 		sts BPB_RootEntCnt,r24
  81:FAT16.c       **** 	BPB_TotSec16 = BPB->BPB_TotSec16;
 444               	.LM41:
 445 0170 8091 0000 		lds r24,BUFFER+19
 446 0174 9091 0000 		lds r25,(BUFFER+19)+1
 447 0178 9093 0000 		sts (BPB_TotSec16)+1,r25
 448 017c 8093 0000 		sts BPB_TotSec16,r24
  82:FAT16.c       **** 	BPB_FATSz16 = BPB->BPB_FATSz16;
 450               	.LM42:
 451 0180 8091 0000 		lds r24,BUFFER+22
 452 0184 9091 0000 		lds r25,(BUFFER+22)+1
 453 0188 9093 0000 		sts (BPB_FATSz16)+1,r25
 454 018c 8093 0000 		sts BPB_FATSz16,r24
  83:FAT16.c       **** 	BPB_HiddSec = BPB->BPB_HiddSec;
 456               	.LM43:
 457 0190 8091 0000 		lds r24,BUFFER+28
 458 0194 9091 0000 		lds r25,(BUFFER+28)+1
 459 0198 A091 0000 		lds r26,(BUFFER+28)+2
 460 019c B091 0000 		lds r27,(BUFFER+28)+3
 461 01a0 8093 0000 		sts BPB_HiddSec,r24
 462 01a4 9093 0000 		sts (BPB_HiddSec)+1,r25
 463 01a8 A093 0000 		sts (BPB_HiddSec)+2,r26
 464 01ac B093 0000 		sts (BPB_HiddSec)+3,r27
  84:FAT16.c       **** 	return SD_SUCC;
 466               	.LM44:
 467 01b0 80E0      		ldi r24,lo8(0)
 468 01b2 90E0      		ldi r25,hi8(0)
  85:FAT16.c       **** }
 470               	.LM45:
 471 01b4 0895      		ret
 472               	/* epilogue: frame size=0 */
 473               	/* epilogue: noreturn */
 474               	/* epilogue end (size=0) */
 475               	/* function ReadBPB size 78 (78) */
 477               	.Lscope8:
 479               	.global	DirStartSec
 481               	DirStartSec:
  86:FAT16.c       **** //-------------------------------------------------------------------------
  87:FAT16.c       **** uint32_t DirStartSec(void){							//获取根目录开始扇区号
 483               	.LM46:
 484               	/* prologue: frame size=0 */
 485               	/* prologue end (size=0) */
  88:FAT16.c       **** 	return BPB_RsvdSecCnt+BPB_NumFATs*BPB_FATSz16;
 487               	.LM47:
 488 01b6 8091 0000 		lds r24,BPB_NumFATs
 489 01ba 282F      		mov r18,r24
 490 01bc 3327      		clr r19
 491 01be 8091 0000 		lds r24,BPB_FATSz16
 492 01c2 9091 0000 		lds r25,(BPB_FATSz16)+1
 493 01c6 289F      		mul r18,r24
 494 01c8 A001      		movw r20,r0
 495 01ca 299F      		mul r18,r25
 496 01cc 500D      		add r21,r0
 497 01ce 389F      		mul r19,r24
 498 01d0 500D      		add r21,r0
 499 01d2 1124      		clr r1
 500 01d4 8091 0000 		lds r24,BPB_RsvdSecCnt
 501 01d8 9091 0000 		lds r25,(BPB_RsvdSecCnt)+1
 502 01dc 840F      		add r24,r20
 503 01de 951F      		adc r25,r21
 504 01e0 AA27      		clr r26
 505 01e2 BB27      		clr r27
  89:FAT16.c       **** }
 507               	.LM48:
 508 01e4 BC01      		movw r22,r24
 509 01e6 CD01      		movw r24,r26
 510               	/* epilogue: frame size=0 */
 511 01e8 0895      		ret
 512               	/* epilogue end (size=1) */
 513               	/* function DirStartSec size 26 (25) */
 515               	.Lscope9:
 517               	.global	GetDirSecCount
 519               	GetDirSecCount:
  90:FAT16.c       **** //-------------------------------------------------------------------------
  91:FAT16.c       **** uint16_t GetDirSecCount(void){							//目录项占用的扇区数
 521               	.LM49:
 522               	/* prologue: frame size=0 */
 523               	/* prologue end (size=0) */
  92:FAT16.c       **** 	return BPB_RootEntCnt*32/BPB_BytesPerSec;
 525               	.LM50:
 526 01ea 8091 0000 		lds r24,BPB_RootEntCnt
 527 01ee 9091 0000 		lds r25,(BPB_RootEntCnt)+1
 528 01f2 2091 0000 		lds r18,BPB_BytesPerSec
 529 01f6 3091 0000 		lds r19,(BPB_BytesPerSec)+1
 530 01fa 45E0      		ldi r20,5
 531 01fc 880F      	1:	lsl r24
 532 01fe 991F      		rol r25
 533 0200 4A95      		dec r20
 534 0202 E1F7      		brne 1b
 535 0204 B901      		movw r22,r18
 536 0206 0E94 0000 		call __udivmodhi4
 537 020a CB01      		movw r24,r22
 538               	/* epilogue: frame size=0 */
 539 020c 0895      		ret
 540               	/* epilogue end (size=1) */
 541               	/* function GetDirSecCount size 18 (17) */
 543               	.Lscope10:
 545               	.global	DataStartSec
 547               	DataStartSec:
  93:FAT16.c       **** }
  94:FAT16.c       **** //-------------------------------------------------------------------------
  95:FAT16.c       **** uint32_t DataStartSec(void){							//获取数据区开始扇区号
 549               	.LM51:
 550               	/* prologue: frame size=0 */
 551 020e EF92      		push r14
 552 0210 FF92      		push r15
 553 0212 0F93      		push r16
 554 0214 1F93      		push r17
 555               	/* prologue end (size=4) */
  96:FAT16.c       **** 	return DirStartSec()+GetDirSecCount();
 557               	.LM52:
 558 0216 0E94 0000 		call DirStartSec
 559 021a 7B01      		movw r14,r22
 560 021c 8C01      		movw r16,r24
 561 021e 0E94 0000 		call GetDirSecCount
 562 0222 AA27      		clr r26
 563 0224 BB27      		clr r27
 564 0226 8E0D      		add r24,r14
 565 0228 9F1D      		adc r25,r15
 566 022a A01F      		adc r26,r16
 567 022c B11F      		adc r27,r17
  97:FAT16.c       **** }
 569               	.LM53:
 570 022e BC01      		movw r22,r24
 571 0230 CD01      		movw r24,r26
 572               	/* epilogue: frame size=0 */
 573 0232 1F91      		pop r17
 574 0234 0F91      		pop r16
 575 0236 FF90      		pop r15
 576 0238 EF90      		pop r14
 577 023a 0895      		ret
 578               	/* epilogue end (size=5) */
 579               	/* function DataStartSec size 23 (14) */
 581               	.Lscope11:
 584               	.global	ClusConvLBA
 586               	ClusConvLBA:
  98:FAT16.c       **** //-------------------------------------------------------------------------
  99:FAT16.c       **** uint32_t ClusConvLBA(uint16_t ClusID){					//获取一个簇的开始扇区
 588               	.LM54:
 589               	/* prologue: frame size=0 */
 590 023c 0F93      		push r16
 591 023e 1F93      		push r17
 592               	/* prologue end (size=2) */
 593 0240 8C01      		movw r16,r24
 100:FAT16.c       **** 	return DataStartSec()+BPB_SecPerClus*(ClusID-2);
 595               	.LM55:
 596 0242 0E94 0000 		call DataStartSec
 597 0246 9B01      		movw r18,r22
 598 0248 AC01      		movw r20,r24
 599 024a 8091 0000 		lds r24,BPB_SecPerClus
 600 024e 9927      		clr r25
 601 0250 0250      		subi r16,lo8(-(-2))
 602 0252 1040      		sbci r17,hi8(-(-2))
 603 0254 809F      		mul r24,r16
 604 0256 B001      		movw r22,r0
 605 0258 819F      		mul r24,r17
 606 025a 700D      		add r23,r0
 607 025c 909F      		mul r25,r16
 608 025e 700D      		add r23,r0
 609 0260 1124      		clr r1
 610 0262 CB01      		movw r24,r22
 611 0264 AA27      		clr r26
 612 0266 BB27      		clr r27
 613 0268 820F      		add r24,r18
 614 026a 931F      		adc r25,r19
 615 026c A41F      		adc r26,r20
 616 026e B51F      		adc r27,r21
 101:FAT16.c       **** }
 618               	.LM56:
 619 0270 BC01      		movw r22,r24
 620 0272 CD01      		movw r24,r26
 621               	/* epilogue: frame size=0 */
 622 0274 1F91      		pop r17
 623 0276 0F91      		pop r16
 624 0278 0895      		ret
 625               	/* epilogue end (size=3) */
 626               	/* function ClusConvLBA size 31 (26) */
 628               	.Lscope12:
 631               	.global	ReadFAT
 633               	ReadFAT:
 102:FAT16.c       **** //-------------------------------------------------------------------------
 103:FAT16.c       **** uint16_t ReadFAT(uint16_t Index){						//读取文件分配表的指定项
 635               	.LM57:
 636               	/* prologue: frame size=0 */
 637 027a 0F93      		push r16
 638 027c 1F93      		push r17
 639               	/* prologue end (size=2) */
 640 027e 8C01      		movw r16,r24
 104:FAT16.c       **** 	uint16_t *RAM=(uint16_t*)BUFFER;
 105:FAT16.c       **** 	uint32_t SecID;
 106:FAT16.c       **** 	
 107:FAT16.c       **** 	SecID=BPB_RsvdSecCnt+Index/256;
 642               	.LM58:
 643 0280 292F      		mov r18,r25
 644 0282 3327      		clr r19
 645 0284 8091 0000 		lds r24,BPB_RsvdSecCnt
 646 0288 9091 0000 		lds r25,(BPB_RsvdSecCnt)+1
 647 028c 820F      		add r24,r18
 648 028e 931F      		adc r25,r19
 649 0290 AA27      		clr r26
 650 0292 BB27      		clr r27
 108:FAT16.c       **** 	ReadFatBlock(SecID);
 652               	.LM59:
 653 0294 BC01      		movw r22,r24
 654 0296 CD01      		movw r24,r26
 655 0298 0E94 0000 		call ReadFatBlock
 109:FAT16.c       **** 	return RAM[Index%256];
 657               	.LM60:
 658 029c 1070      		andi r17,hi8(255)
 659 029e 000F      		add r16,r16
 660 02a0 111F      		adc r17,r17
 661 02a2 0050      		subi r16,lo8(-(BUFFER))
 662 02a4 1040      		sbci r17,hi8(-(BUFFER))
 110:FAT16.c       **** }
 664               	.LM61:
 665 02a6 F801      		movw r30,r16
 666 02a8 8081      		ld r24,Z
 667 02aa 9181      		ldd r25,Z+1
 668               	/* epilogue: frame size=0 */
 669 02ac 1F91      		pop r17
 670 02ae 0F91      		pop r16
 671 02b0 0895      		ret
 672               	/* epilogue end (size=3) */
 673               	/* function ReadFAT size 29 (24) */
 678               	.Lscope13:
 682               	.global	WriteFAT
 684               	WriteFAT:
 111:FAT16.c       **** //-------------------------------------------------------------------------
 112:FAT16.c       **** void WriteFAT(uint16_t Index,uint16_t Value){			//写文件分配表的指定项
 686               	.LM62:
 687               	/* prologue: frame size=0 */
 688 02b2 AF92      		push r10
 689 02b4 BF92      		push r11
 690 02b6 CF92      		push r12
 691 02b8 DF92      		push r13
 692 02ba EF92      		push r14
 693 02bc FF92      		push r15
 694 02be 0F93      		push r16
 695 02c0 1F93      		push r17
 696               	/* prologue end (size=8) */
 697 02c2 8C01      		movw r16,r24
 698 02c4 5B01      		movw r10,r22
 113:FAT16.c       **** 	uint16_t *RAM=(uint16_t*)BUFFER;
 114:FAT16.c       **** 	uint32_t SecID;
 115:FAT16.c       **** 	
 116:FAT16.c       **** 	SecID=BPB_RsvdSecCnt+Index/256;
 700               	.LM63:
 701 02c6 292F      		mov r18,r25
 702 02c8 3327      		clr r19
 703 02ca 8091 0000 		lds r24,BPB_RsvdSecCnt
 704 02ce 9091 0000 		lds r25,(BPB_RsvdSecCnt)+1
 705 02d2 820F      		add r24,r18
 706 02d4 931F      		adc r25,r19
 707 02d6 6C01      		movw r12,r24
 708 02d8 EE24      		clr r14
 709 02da FF24      		clr r15
 117:FAT16.c       **** 	ReadFatBlock(SecID);
 711               	.LM64:
 712 02dc C701      		movw r24,r14
 713 02de B601      		movw r22,r12
 714 02e0 0E94 0000 		call ReadFatBlock
 118:FAT16.c       **** 	RAM[Index%256]=Value;
 716               	.LM65:
 717 02e4 1070      		andi r17,hi8(255)
 718 02e6 000F      		add r16,r16
 719 02e8 111F      		adc r17,r17
 720 02ea 0050      		subi r16,lo8(-(BUFFER))
 721 02ec 1040      		sbci r17,hi8(-(BUFFER))
 722 02ee F801      		movw r30,r16
 723 02f0 B182      		std Z+1,r11
 724 02f2 A082      		st Z,r10
 119:FAT16.c       **** 	WriteFatBlock(SecID);
 726               	.LM66:
 727 02f4 C701      		movw r24,r14
 728 02f6 B601      		movw r22,r12
 729 02f8 0E94 0000 		call WriteFatBlock
 730               	/* epilogue: frame size=0 */
 731 02fc 1F91      		pop r17
 732 02fe 0F91      		pop r16
 733 0300 FF90      		pop r15
 734 0302 EF90      		pop r14
 735 0304 DF90      		pop r13
 736 0306 CF90      		pop r12
 737 0308 BF90      		pop r11
 738 030a AF90      		pop r10
 739 030c 0895      		ret

⌨️ 快捷键说明

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