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

📄 sd.lst

📁 用AVR的MP3代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0070) 	FirstDataSector	= PartInfo.prStartLBA;
    04CC 90400444  LDS	R4,0x444
    04CE 90500445  LDS	R5,0x445
    04D0 90200442  LDS	R2,0x442
    04D2 90300443  LDS	R3,0x443
    04D4 92300436  STS	FirstDataSector+1,R3
    04D6 92200435  STS	FirstDataSector,R2
    04D8 92500438  STS	FirstDataSector+3,R5
    04DA 92400437  STS	FirstDataSector+2,R4
(0071) 	if(bpb->bpbFATsecs)
    04DC 01FC      MOVW	R30,R24
    04DD 8423      LDD	R2,Z+11
    04DE 8434      LDD	R3,Z+12
    04DF 2022      TST	R2
    04E0 F411      BNE	0x04E3
    04E1 2033      TST	R3
    04E2 F121      BEQ	0x0507
(0072) 	{
(0073) 		// bpbFATsecs非0,为FAT16,FAT表所占的扇区数在bpbFATsecs里
(0074) 		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbFATsecs;
    04E3 01F5      MOVW	R30,R10
    04E4 8523      LDD	R18,Z+11
    04E5 8534      LDD	R19,Z+12
    04E6 01F5      MOVW	R30,R10
    04E7 8105      LDD	R16,Z+5
    04E8 2711      CLR	R17
    04E9 940E0D58  CALL	empy16s
    04EB 01F5      MOVW	R30,R10
    04EC 8023      LDD	R2,Z+3
    04ED 8034      LDD	R3,Z+4
    04EE 0E20      ADD	R2,R16
    04EF 1E31      ADC	R3,R17
    04F0 2444      CLR	R4
    04F1 2455      CLR	R5
    04F2 90800437  LDS	R8,FirstDataSector+2
    04F4 90900438  LDS	R9,FirstDataSector+3
    04F6 90600435  LDS	R6,FirstDataSector
    04F8 90700436  LDS	R7,FirstDataSector+1
    04FA 0C62      ADD	R6,R2
    04FB 1C73      ADC	R7,R3
    04FC 1C84      ADC	R8,R4
    04FD 1C95      ADC	R9,R5
    04FE 92700436  STS	FirstDataSector+1,R7
    0500 92600435  STS	FirstDataSector,R6
    0502 92900438  STS	FirstDataSector+3,R9
    0504 92800437  STS	FirstDataSector+2,R8
(0075) 	}
    0506 C02F      RJMP	0x0536
(0076) 	else
(0077) 	{
(0078) 		// bpbFATsecs是0,为FAT32,FAT表所占的扇区数在bpbBigFATsecs里
(0079) 		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbBigFATsecs;
    0507 01F5      MOVW	R30,R10
    0508 8C21      LDD	R2,Z+25
    0509 8C32      LDD	R3,Z+26
    050A 8C43      LDD	R4,Z+27
    050B 8C54      LDD	R5,Z+28
    050C 01F5      MOVW	R30,R10
    050D 8065      LDD	R6,Z+5
    050E 2477      CLR	R7
    050F 2488      CLR	R8
    0510 2499      CLR	R9
    0511 925A      ST	R5,-Y
    0512 924A      ST	R4,-Y
    0513 923A      ST	R3,-Y
    0514 922A      ST	R2,-Y
    0515 0183      MOVW	R16,R6
    0516 0194      MOVW	R18,R8
    0517 940E0D68  CALL	empy32s
    0519 01F5      MOVW	R30,R10
    051A 8023      LDD	R2,Z+3
    051B 8034      LDD	R3,Z+4
    051C 2444      CLR	R4
    051D 2455      CLR	R5
    051E 0E20      ADD	R2,R16
    051F 1E31      ADC	R3,R17
    0520 1E42      ADC	R4,R18
    0521 1E53      ADC	R5,R19
    0522 90800437  LDS	R8,FirstDataSector+2
    0524 90900438  LDS	R9,FirstDataSector+3
    0526 90600435  LDS	R6,FirstDataSector
    0528 90700436  LDS	R7,FirstDataSector+1
    052A 0C62      ADD	R6,R2
    052B 1C73      ADC	R7,R3
    052C 1C84      ADC	R8,R4
    052D 1C95      ADC	R9,R5
    052E 92700436  STS	FirstDataSector+1,R7
    0530 92600435  STS	FirstDataSector,R6
    0532 92900438  STS	FirstDataSector+3,R9
    0534 92800437  STS	FirstDataSector+2,R8
(0080) 	}
(0081) 	
(0082) 	SectorsPerCluster	= bpb->bpbSecPerClust;
    0536 01F5      MOVW	R30,R10
    0537 8022      LDD	R2,Z+2
    0538 2433      CLR	R3
    0539 92300432  STS	SectorsPerCluster+1,R3
    053B 92200431  STS	SectorsPerCluster,R2
(0083) 	BytesPerSector		= bpb->bpbBytesPerSec;
    053D 01F5      MOVW	R30,R10
    053E 8020      LDD	R2,Z+0
    053F 8031      LDD	R3,Z+1
    0540 92300434  STS	BytesPerSector+1,R3
    0542 92200433  STS	BytesPerSector,R2
(0084) 	FirstFATSector		= bpb->bpbResSectors + PartInfo.prStartLBA;
    0544 90400444  LDS	R4,0x444
    0546 90500445  LDS	R5,0x445
    0548 90200442  LDS	R2,0x442
    054A 90300443  LDS	R3,0x443
    054C 8063      LDD	R6,Z+3
    054D 8074      LDD	R7,Z+4
    054E 2488      CLR	R8
    054F 2499      CLR	R9
    0550 0C62      ADD	R6,R2
    0551 1C73      ADC	R7,R3
    0552 1C84      ADC	R8,R4
    0553 1C95      ADC	R9,R5
    0554 9270042E  STS	FirstFATSector+1,R7
    0556 9260042D  STS	FirstFATSector,R6
    0558 92900430  STS	FirstFATSector+3,R9
    055A 9280042F  STS	FirstFATSector+2,R8
(0085) //查询SD卡文件系统分区类型
(0086) 	switch (PartInfo.prPartType)
    055C 90C0043E  LDS	R12,0x43E
    055E 24DD      CLR	R13
    055F 01C6      MOVW	R24,R12
    0560 3084      CPI	R24,4
    0561 E0E0      LDI	R30,0
    0562 079E      CPC	R25,R30
    0563 F0B1      BEQ	0x057A
    0564 3086      CPI	R24,6
    0565 E0E0      LDI	R30,0
    0566 079E      CPC	R25,R30
    0567 F091      BEQ	0x057A
    0568 3084      CPI	R24,4
    0569 E0E0      LDI	R30,0
    056A 079E      CPC	R25,R30
    056B F174      BLT	0x059A
    056C 01C6      MOVW	R24,R12
    056D 308B      CPI	R24,0xB
    056E E0E0      LDI	R30,0
    056F 079E      CPC	R25,R30
    0570 F0C9      BEQ	0x058A
    0571 308C      CPI	R24,0xC
    0572 E0E0      LDI	R30,0
    0573 079E      CPC	R25,R30
    0574 F0A9      BEQ	0x058A
    0575 308E      CPI	R24,0xE
    0576 E0E0      LDI	R30,0
    0577 079E      CPC	R25,R30
    0578 F009      BEQ	0x057A
    0579 C020      RJMP	0x059A
(0087) 	{
(0088) 		case PART_TYPE_DOSFAT16:
(0089) 		case PART_TYPE_FAT16: 
(0090) 		case PART_TYPE_FAT16LBA:
(0091) 			// 第一个目录扇区号为2
(0092) 			FirstDirSector	= CLUST_FIRST;
    057A E042      LDI	R20,2
    057B E050      LDI	R21,0
    057C E060      LDI	R22,0
    057D E070      LDI	R23,0
    057E 9350042A  STS	FirstDirSector+1,R21
    0580 93400429  STS	FirstDirSector,R20
    0582 9370042C  STS	FirstDirSector+3,R23
    0584 9360042B  STS	FirstDirSector+2,R22
(0093) 			//FirstDataSector += (bpb->bpbRootDirEnts)/DIRENTRIES_PER_SECTOR;
(0094) 			Fat32Enabled = 0;
    0586 2422      CLR	R2
    0587 92200439  STS	Fat32Enabled,R2
(0095) 			
(0096) 			break;
    0589 C010      RJMP	0x059A
(0097) 		case PART_TYPE_FAT32LBA:
(0098) 		case PART_TYPE_FAT32:
(0099) 			
(0100) 			FirstDirSector = bpb->bpbRootClust;
    058A 01F5      MOVW	R30,R10
    058B A021      LDD	R2,Z+33
    058C A032      LDD	R3,Z+34
    058D A043      LDD	R4,Z+35
    058E A054      LDD	R5,Z+36
    058F 9230042A  STS	FirstDirSector+1,R3
    0591 92200429  STS	FirstDirSector,R2
    0593 9250042C  STS	FirstDirSector+3,R5
    0595 9240042B  STS	FirstDirSector+2,R4
(0101) 			Fat32Enabled = 1;
    0597 E081      LDI	R24,1
    0598 93800439  STS	Fat32Enabled,R24
(0102) 			break;
(0103) 		default:break;
(0104) 			//return 1;
(0105) 	}
(0106) //查询SD卡文件系统信息
(0107) 	switch (PartInfo.prPartType)
    059A 90A0043E  LDS	R10,0x43E
    059C 24BB      CLR	R11
    059D 01C5      MOVW	R24,R10
    059E 3084      CPI	R24,4
    059F E0E0      LDI	R30,0
    05A0 079E      CPC	R25,R30
    05A1 F0B9      BEQ	0x05B9
    05A2 3086      CPI	R24,6
    05A3 E0E0      LDI	R30,0
    05A4 079E      CPC	R25,R30
    05A5 F0E1      BEQ	0x05C2
    05A6 3084      CPI	R24,4
    05A7 E0E0      LDI	R30,0
    05A8 079E      CPC	R25,R30
    05A9 F40C      BGE	0x05AB
    05AA C03B      RJMP	0x05E6
    05AB 01C5      MOVW	R24,R10
    05AC 308B      CPI	R24,0xB
    05AD E0E0      LDI	R30,0
    05AE 079E      CPC	R25,R30
    05AF F169      BEQ	0x05DD
    05B0 308C      CPI	R24,0xC
    05B1 E0E0      LDI	R30,0
    05B2 079E      CPC	R25,R30
    05B3 F101      BEQ	0x05D4
    05B4 308E      CPI	R24,0xE
    05B5 E0E0      LDI	R30,0
    05B6 079E      CPC	R25,R30
    05B7 F099      BEQ	0x05CB
    05B8 C02D      RJMP	0x05E6
(0108) 	{
(0109) 		case PART_TYPE_DOSFAT16:
(0110) 				LCD_write_String(0,0,"DOSFAT 16");
    05B9 E489      LDI	R24,0x49
    05BA E091      LDI	R25,1
    05BB 8399      STD	Y+1,R25
    05BC 8388      STD	Y+0,R24
    05BD 2722      CLR	R18
    05BE 2700      CLR	R16
    05BF 940E0B1F  CALL	_LCD_write_String
(0111) 				break;
    05C1 C02C      RJMP	0x05EE
(0112) 		case PART_TYPE_FAT16:
(0113) 				LCD_write_String(0,0,"FAT16 ");
    05C2 E482      LDI	R24,0x42
    05C3 E091      LDI	R25,1
    05C4 8399      STD	Y+1,R25
    05C5 8388      STD	Y+0,R24
    05C6 2722      CLR	R18
    05C7 2700      CLR	R16
    05C8 940E0B1F  CALL	_LCD_write_String
(0114) 				break;
    05CA C023      RJMP	0x05EE
(0115) 		case PART_TYPE_FAT16LBA:
(0116) 				LCD_write_String(0,0,"FAT16 LBA");
    05CB E388      LDI	R24,0x38
    05CC E091      LDI	R25,1
    05CD 8399      STD	Y+1,R25
    05CE 8388      STD	Y+0,R24
    05CF 2722      CLR	R18
    05D0 2700      CLR	R16
    05D1 940E0B1F  CALL	_LCD_write_String
(0117) 				break;
    05D3 C01A      RJMP	0x05EE
(0118) 		case PART_TYPE_FAT32LBA:
(0119) 				LCD_write_String(0,0,"FAT32 LBA");
    05D4 E28E      LDI	R24,0x2E
    05D5 E091      LDI	R25,1
    05D6 8399      STD	Y+1,R25
    05D7 8388      STD	Y+0,R24
    05D8 2722      CLR	R18
    05D9 2700      CLR	R16
    05DA 940E0B1F  CALL	_LCD_write_String
(0120) 				break;
    05DC C011      RJMP	0x05EE
(0121) 		case PART_TYPE_FAT32:
(0122) 				LCD_write_String(0,0,"FAT32");
    05DD E288      LDI	R24,0x28
    05DE E091      LDI	R25,1
    05DF 8399      STD	Y+1,R25
    05E0 8388      STD	Y+0,R24
    05E1 2722      CLR	R18
    05E2 2700      CLR	R16
    05E3 940E0B1F  CALL	_LCD_write_String
(0123) 				break;
    05E5 C008      RJMP	0x05EE
(0124) 		default:
(0125) 				LCD_write_String(0,0,"No Partition!");
    05E6 E18A      LDI	R24,0x1A
    05E7 E091      LDI	R25,1
    05E8 8399      STD	Y+1,R25
    05E9 8388      STD	Y+0,R24
    05EA 2722      CLR	R18
    05EB 2700      CLR	R16
    05EC 940E0B1F  CALL	_LCD_write_String
(0126) 				break;
(0127) 	}
(0128) //显示磁盘容量
(0129) data=PartInfo.prSize>>11;
    05EE E08B      LDI	R24,0xB
    05EF E090      LDI	R25,0
    05F0 90400448  LDS	R4,0x448
    05F2 90500449  LDS	R5,0x449
    05F4 90200446  LDS	R2,0x446
    05F6 90300447  LDS	R3,0x447
    05F8 938A      ST	R24,-Y
    05F9 0181      MOVW	R16,R2
    05FA 0192      MOVW	R18,R4
    05FB 940E0DF4  CALL	lsr32
    05FD 0158      MOVW	R10,R16
(0130)     LCD_set_XY(56,0);
    05FE 2722      CLR	R18
    05FF E308      LDI	R16,0x38
    0600 940E0AF6  CALL	_LCD_set_XY
(0131)     t1=data/100;
    0602 E624      LDI	R18,0x64
    0603 E030      LDI	R19,0
    0604 0185      MOVW	R16,R10
    0605 940E0CB5  CALL	div16u
(0132) 	LCD_write_char(t1+48);
    0607 5D00      SUBI	R16,0xD0
    0608 940E0B05  CALL	_LCD_write_char
(0133) 	data=data%100;
    060A E624      LDI	R18,0x64
    060B E030      LDI	R19,0
    060C 0185      MOVW	R16,R10
    060D 940E0CB3  CALL	mod16u
    060F 0158      MOVW	R10,R16
(0134) 	t1=data/10;
    0610 E02A      LDI	R18,0xA
    0611 E030      LDI	R19,0
    0612 940E0CB5  CALL	div16u
    0614 2EC0      MOV	R12,R16
(0135) 	LCD_write_char(t1+48);
    0615 5D00      SUBI	R16,0xD0
    0616 940E0B05  CALL	_LCD_write_char
(0136) 	t2=data%10;
    0618 E02A      LDI	R18,0xA
    0619 E030      LDI	R19,0
    061A 0185      MOVW	R16,R10
    061B 940E0CB3  CALL	mod16u
    061D 2EA0      MOV	R10,R16
(0137) 	LCD_write_char(t2+48);
    061E 5D00      SUBI	R16,0xD0
    061F 940E0B05  CALL	_LCD_write_char
(0138) 	LCD_write_String(76,0,"M");
    0621 E188      LDI	R24,0x18
    0622 E091      LDI	R25,1
    0623 8399      STD	Y+1,R25
    0624 8388      STD	Y+0,R24
    0625 2722      CLR	R18
    0626 E40C      LDI	R16,0x4C
    0627 940E0B1F  CALL	_LCD_write_String
(0139)     LCD_write_String(0,1,"RATE"); 
    0629 E183      LDI	R24,0x13
    062A E091      LDI	R25,1
    062B 8399      STD	Y+1,R25
    062C 8388      STD	Y+0,R24
    062D E021      LDI	R18,1
    062E 2700      CLR	R16
    062F 940E0B1F  CALL	_LCD_write_String
(0140) 	return 0;	
    0631 2700      CLR	R16
    0632 9622      ADIW	R28,2
    0633 940E0D9E  CALL	pop_gset4
    0635 9508      RET
_fatGetDirEntry:
  rval                 --> Y+8
  save2                --> R10
  save                 --> Y+4
  b                    --> Y+20
  sector               --> Y+0
  hasBuffer            --> Y+18
  index                --> Y+16
  de                   --> Y+14
  p                    --> R12
  we                   --> Y+12
  i                    --> R14
  entry                --> Y+32
    0636 931A      ST	R17,-Y
    0637 930A      ST	R16,-Y
    0638 940E0DA4  CALL	push_gset5
    063A 9766      SBIW	R28,0x16
(0141) }
(0142) 
(0143) /*-----------------------------------------------------------------------
(0144) 查询一个文件的开始簇
(0145) -----------------------------------------------------------------------*/
(0146) unsigned int baseentry = 0;
(0147) unsigned int entrycount = 0;
(0148) 
(0149) 
(0150) unsigned long fatGetDirEntry(unsigned int entry)
(0151) {
(0152) 	unsigned long sector;
(0153) 	struct direntry *de = 0;	// 防止compiler warning
    063B 2400      CLR	R0
    063C 2411      CLR	R1
    063D 861F      STD	Y+15,R1
    063E 860E      STD	Y+14,R0
(0154) 	struct winentry *we;

⌨️ 快捷键说明

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