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

📄 m16_vs1003_test.lst

📁 M16-Mp3.rar
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0166) 	//SPI_High();		/* Use High Speed SPI*/
(0167) 
(0168) 	r1 = SD_SendCommand(24, sector<<9);//写命令	//send command
     4B5 E089      LDI	R24,0x9
     4B6 E090      LDI	R25,0
     4B7 8508      LDD	R16,Y+8
     4B8 8519      LDD	R17,Y+9
     4B9 852A      LDD	R18,Y+10
     4BA 853B      LDD	R19,Y+11
     4BB 938A      ST	-Y,R24
     4BC 940E 0E5A CALL	lsl32
     4BE 8328      ST	Y,R18
     4BF 8339      STD	Y+1,R19
     4C0 0198      MOVW	R18,R16
     4C1 E108      LDI	R16,0x18
     4C2 DEE8      RCALL	_SD_SendCommand
     4C3 2F60      MOV	R22,R16
(0169) 	if(r1 != 0x00)
     4C4 2300      TST	R16
     4C5 F009      BEQ	0x04C7
(0170) 		return r1;
     4C6 C043      RJMP	0x050A
(0171) 
(0172) 	SPI_CS_Assert;
     4C7 98D9      CBI	0x1B,1
(0173) 	
(0174) 	SPI_SrByte(0xff);
     4C8 EF0F      LDI	R16,0xFF
     4C9 940E 0C45 CALL	_SPI_SrByte
(0175) 	SPI_SrByte(0xff);
     4CB EF0F      LDI	R16,0xFF
     4CC 940E 0C45 CALL	_SPI_SrByte
(0176) 	SPI_SrByte(0xff);
     4CE EF0F      LDI	R16,0xFF
     4CF 940E 0C45 CALL	_SPI_SrByte
(0177) 
(0178) 	SPI_SrByte(0xfe);//发开始符			//send start byte "token"
     4D1 EF0E      LDI	R16,0xFE
     4D2 940E 0C45 CALL	_SPI_SrByte
(0179) 	
(0180) 	for(i=0; i<512; i++)//送512字节数据		//send 512 bytes data
     4D4 24AA      CLR	R10
     4D5 24BB      CLR	R11
     4D6 C00B      RJMP	0x04E2
(0181) 	{
(0182) 		SPI_SrByte(buffer[i]);
     4D7 01F5      MOVW	R30,R10
     4D8 840C      LDD	R0,Y+12
     4D9 841D      LDD	R1,Y+13
     4DA 0DE0      ADD	R30,R0
     4DB 1DF1      ADC	R31,R1
     4DC 8100      LD	R16,Z
     4DD 940E 0C45 CALL	_SPI_SrByte
     4DF 01C5      MOVW	R24,R10
     4E0 9601      ADIW	R24,1
     4E1 015C      MOVW	R10,R24
     4E2 01C5      MOVW	R24,R10
     4E3 3080      CPI	R24,0
     4E4 E0E2      LDI	R30,2
     4E5 079E      CPC	R25,R30
     4E6 F380      BCS	0x04D7
(0183) 	}
(0184) 	
(0185) 	SPI_SrByte(0xff);			//dummy crc
     4E7 EF0F      LDI	R16,0xFF
     4E8 940E 0C45 CALL	_SPI_SrByte
(0186) 	SPI_SrByte(0xff);
     4EA EF0F      LDI	R16,0xFF
     4EB 940E 0C45 CALL	_SPI_SrByte
(0187) 	
(0188) 	r1 = SPI_SrByte(0xff);
     4ED EF0F      LDI	R16,0xFF
     4EE 940E 0C45 CALL	_SPI_SrByte
     4F0 2F60      MOV	R22,R16
(0189) 	
(0190) 	if( (r1&0x1f) != 0x05)//等待是否成功	//judge if it successful
     4F1 2F86      MOV	R24,R22
     4F2 718F      ANDI	R24,0x1F
     4F3 3085      CPI	R24,5
     4F4 F069      BEQ	0x0502
(0191) 	{
(0192) 		SPI_CS_Deassert;
     4F5 9AD9      SBI	0x1B,1
(0193) 		return r1;
     4F6 C013      RJMP	0x050A
(0194) 	}
(0195) 	//等待操作完		//wait no busy
(0196) 	while(!SPI_SrByte(0xff))if(retry++ > 0xfffe){SPI_CS_Deassert;return 1;}
     4F7 01BA      MOVW	R22,R20
     4F8 5F4F      SUBI	R20,0xFF
     4F9 4F5F      SBCI	R21,0xFF
     4FA EF8E      LDI	R24,0xFE
     4FB EF9F      LDI	R25,0xFF
     4FC 1786      CP	R24,R22
     4FD 0797      CPC	R25,R23
     4FE F418      BCC	0x0502
     4FF 9AD9      SBI	0x1B,1
     500 E001      LDI	R16,1
     501 C008      RJMP	0x050A
     502 EF0F      LDI	R16,0xFF
     503 940E 0C45 CALL	_SPI_SrByte
     505 2EA0      MOV	R10,R16
     506 2300      TST	R16
     507 F379      BEQ	0x04F7
(0197) 
(0198) 	SPI_CS_Deassert;
     508 9AD9      SBI	0x1B,1
(0199) 	//SPI_SrByte(0xff);// extra 8 CLK
(0200) 
(0201) 	return 0;
     509 2700      CLR	R16
     50A 9622      ADIW	R28,2
     50B 940E 0E13 CALL	pop_xgsetF00C
     50D 9624      ADIW	R28,4
     50E 9508      RET
_Fat_Init:
  temp                 --> Y,+2
     50F 940E 0E0C CALL	push_xgsetF00C
     511 9726      SBIW	R28,6
FILE: C:\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\fat.c
(0001) 
(0002) //---------------------------- 文件系统程序 -----------------------------
(0003) //
(0004) //文件系统:简易FAT32
(0005) //代码作者:廖华明(师兄)
(0006) //时间:2009.7.8
(0007) //
(0008) //------------------------------------------------------------------------
(0009) 
(0010) #include"fat.h"
(0011) 
(0012) uint32 SearchFile_Clust;
(0013) uint32 Music_Dir;
(0014) 
(0015) uint32 fclust[20];
(0016) uint8  fcount;
(0017) uint32 fsize[20];
(0018) 
(0019) uint32  NextCluster;   		 	//指向当前正在读取文件的簇号
(0020) uint32  SectorIndex=0;   		//正在读扇区
(0021) 
(0022) uint32	Partition_StartLBA;				// 该分区内第一个扇区地址
(0023) 
(0024) uint16	BPB_BytesPerSec; 				//扇区字节数
(0025) uint8	BPB_SecPerClus;					//每簇扇区数
(0026) uint16	BPB_RsvdSecCnt; 				//保留扇区数
(0027) uint8	BPB_NumFATs;					//FAT数目
(0028) uint16	BPB_RootEntCnt; 				//根目录项数 0
(0029) uint16	BPB_TotSec16; 					//小扇区总数 0
(0030) uint8	BPB_Media;						//媒体描述符
(0031) uint16	BPB_FATSz16; 					//每FAT扇区数fat32不用为0
(0032) uint16	BPB_SecPerTrk; 					//每道扇区数
(0033) uint16	BPB_NumHeads; 					//磁头数
(0034) uint32	BPB_HiddSec; 					//隐藏扇区数
(0035) uint32	BPB_TotSec32; 					//总扇区数   
(0036) uint32	BPB_FATSz32;					//每FAT扇区数fat32
(0037) uint16	BPB_ExtFlags;					//fat32扩展标志
(0038) uint16  BPB_FSVer;						//fat32特有,高位为fat32的主版本号,底位为次版本号
(0039) uint32	BPB_RootClus;					//根目录簇号
(0040) uint16	BPB_FSInfo;						//文件系统信息扇区号
(0041) uint16	BPB_BKBootSec;					//引导扇区备份号
(0042) 
(0043) uint8  	deName[8];
(0044) uint8  	deExtension[3];
(0045) uint32  Clust; 							//当前目录的簇号
(0046) uint16 	Nums;   						//仅FAT12—FAT16中的根目录区有效
(0047) uint32 	Index;  						//当前的BLOCK中目录项索引
(0048) uint32 	FileSize; 						//文件长度
(0049) 
(0050) uint32  FAT1Sec;						//FAT1表的位置
(0051) uint32  FAT2Sec;
(0052) uint32  FirstDataSector;				//第一个根目录位置,区号为2
(0053) uint32  FirstDirSector;
(0054) 
(0055) uint8   Fat_Buffer[512]; 
(0056) 
(0057) 
(0058) uint32  FAT_MASK;
(0059) uint16  RootDirEnts;         // 根目录总的项数(FAT12&FAT16)
(0060) 
(0061) 
(0062) uint8 Fat_Init(void)
(0063) {   
(0064) 	
(0065) 	uint32 temp;
(0066) 	
(0067) 	SD_ReadBlock(0,Fat_Buffer);		
     512 EF8A      LDI	R24,0xFA
     513 E090      LDI	R25,0
     514 8399      STD	Y+1,R25
     515 8388      ST	Y,R24
     516 E000      LDI	R16,0
     517 E010      LDI	R17,0
     518 E020      LDI	R18,0
     519 E030      LDI	R19,0
     51A 940E 045E CALL	_SD_ReadBlock
(0068) 
(0069)     Partition_StartLBA = (Fat_Buffer[454]|(Fat_Buffer[455]<<8)|((uint32)Fat_Buffer[456]<<16)|((uint32)Fat_Buffer[457]<<24));		
     51C 9020 02C1 LDS	R2,0x02C1
     51E 2433      CLR	R3
     51F 2C32      MOV	R3,R2
     520 2422      CLR	R2
     521 9040 02C0 LDS	R4,0x02C0
     523 2455      CLR	R5
     524 2842      OR	R4,R2
     525 2853      OR	R5,R3
     526 0112      MOVW	R2,R4
     527 2444      CLR	R4
     528 FC37      SBRC	R3,7
     529 9440      COM	R4
     52A 2455      CLR	R5
     52B FC47      SBRC	R4,7
     52C 9450      COM	R5
     52D 9060 02C2 LDS	R6,0x02C2
     52F 2477      CLR	R7
     530 2488      CLR	R8
     531 2499      CLR	R9
     532 0143      MOVW	R8,R6
     533 2466      CLR	R6
     534 2477      CLR	R7
     535 2826      OR	R2,R6
     536 2837      OR	R3,R7
     537 2848      OR	R4,R8
     538 2859      OR	R5,R9
     539 E188      LDI	R24,0x18
     53A E090      LDI	R25,0
     53B 9100 02C3 LDS	R16,0x02C3
     53D 2711      CLR	R17
     53E 2722      CLR	R18
     53F 2733      CLR	R19
     540 938A      ST	-Y,R24
     541 940E 0E5A CALL	lsl32
     543 2A20      OR	R2,R16
     544 2A31      OR	R3,R17
     545 2A42      OR	R4,R18
     546 2A53      OR	R5,R19
     547 9230 00EB STS	Partition_StartLBA+1,R3
     549 9220 00EA STS	Partition_StartLBA,R2
     54B 9250 00ED STS	Partition_StartLBA+3,R5
     54D 9240 00EC STS	Partition_StartLBA+2,R4
(0070) 		
(0071) 	SD_ReadBlock(Partition_StartLBA,Fat_Buffer);     				//FAT32 read BPB
     54F EF8A      LDI	R24,0xFA
     550 E090      LDI	R25,0
     551 8399      STD	Y+1,R25
     552 8388      ST	Y,R24
     553 0181      MOVW	R16,R2
     554 0192      MOVW	R18,R4
     555 940E 045E CALL	_SD_ReadBlock
(0072) 
(0073) 	BPB_BytesPerSec	= Fat_Buffer[11] |(Fat_Buffer[12] << 8);			//0x0200			//每个扇区字节数
     557 9020 0106 LDS	R2,0x0106
     559 2433      CLR	R3
     55A 2C32      MOV	R3,R2
     55B 2422      CLR	R2
     55C 9040 0105 LDS	R4,0x0105
     55E 2455      CLR	R5
     55F 2842      OR	R4,R2
     560 2853      OR	R5,R3
     561 9250 00E9 STS	BPB_BytesPerSec+1,R5
     563 9240 00E8 STS	BPB_BytesPerSec,R4
(0074) 	BPB_SecPerClus	= Fat_Buffer[13];								//0x08      		//每个簇的扇区数
     565 9020 0107 LDS	R2,0x0107
     567 9220 00E7 STS	BPB_SecPerClus,R2
(0075) 	BPB_RsvdSecCnt  = Fat_Buffer[14] |(Fat_Buffer[15] << 8);			//0x20 				//保留扇区数
     569 9020 0109 LDS	R2,0x0109
     56B 2433      CLR	R3
     56C 2C32      MOV	R3,R2
     56D 2422      CLR	R2
     56E 9040 0108 LDS	R4,0x0108
     570 2455      CLR	R5
     571 2842      OR	R4,R2
     572 2853      OR	R5,R3
     573 9250 00E6 STS	BPB_RsvdSecCnt+1,R5
     575 9240 00E5 STS	BPB_RsvdSecCnt,R4
(0076) 	BPB_NumFATs     = Fat_Buffer[16];								//0x02 				//FAT 表数目
     577 9020 010A LDS	R2,0x010A
     579 9220 00E4 STS	BPB_NumFATs,R2
(0077) 	BPB_RootEntCnt	= Fat_Buffer[17] | (Fat_Buffer[18] << 8);
     57B 9020 010C LDS	R2,0x010C
     57D 2433      CLR	R3
     57E 2C32      MOV	R3,R2
     57F 2422      CLR	R2
     580 9040 010B LDS	R4,0x010B
     582 2455      CLR	R5
     583 2842      OR	R4,R2
     584 2853      OR	R5,R3
     585 9250 00E3 STS	BPB_RootEntCnt+1,R5
     587 9240 00E2 STS	BPB_RootEntCnt,R4
(0078) 	BPB_TotSec16    = Fat_Buffer[19] | (Fat_Buffer[20] << 8);
     589 9020 010E LDS	R2,0x010E
     58B 2433      CLR	R3
     58C 2C32      MOV	R3,R2
     58D 2422      CLR	R2
     58E 9040 010D LDS	R4,0x010D
     590 2455      CLR	R5
     591 2842      OR	R4,R2
     592 2853      OR	R5,R3
     593 9250 00E1 STS	BPB_TotSec16+1,R5
     595 9240 00E0 STS	BPB_TotSec16,R4
(0079) 	BPB_Media		= Fat_Buffer[21];
     597 9020 010F LDS	R2,0x010F
     599 9220 00DF STS	BPB_Media,R2
(0080) 	BPB_FATSz16		= Fat_Buffer[22] | (Fat_Buffer[23] << 8); 
     59B 9020 0111 LDS	R2,0x0111
     59D 2433      CLR	R3
     59E 2C32      MOV	R3,R2
     59F 2422      CLR	R2
     5A0 9040 0110 LDS	R4,0x0110
     5A2 2455      CLR	R5
     5A3 2842      OR	R4,R2
     5A4 2853      OR	R5,R3
     5A5 9250 00DE STS	BPB_FATSz16+1,R5
     5A7 9240 00DD STS	BPB_FATSz16,R4
(0081)     BPB_SecPerTrk	= Fat_Buffer[24] | (Fat_Buffer[25] << 8);
     5A9 9020 0113 LDS	R2,0x0113
     5AB 2433      CLR	R3
     5AC 2C32      MOV	R3,R2
     5AD 2422      CLR	R2
     5AE 9040 0112 LDS	R4,0x0112
     5B0 2455      CLR	R5
     5B1 2842      OR	R4,R2
     5B2 2853      OR	R5,R3
     5B3 9250 00DC STS	BPB_SecPerTrk+1,R5
     5B5 9240 00DB STS	BPB_SecPerTrk,R4
(0082)     BPB_NumHeads	= Fat_Buffer[26] | (Fat_Buffer[27] << 8); 
     5B7 9020 0115 LDS	R2,0x0115
     5B9 2433      CLR	R3
     5BA 2C32      MOV	R3,R2
     5BB 2422      CLR	R2
     5BC 9040 0114 LDS	R4,0x0114
     5BE 2455      CLR	R5
     5BF 2842      OR	R4,R2
     5C0 2853      OR	R5,R3
     5C1 9250 00DA STS	BPB_NumHeads+1,R5
     5C3 9240 00D9 STS	BPB_NumHeads,R4
(0083)     BPB_HiddSec 	= Fat_Buffer[28] | (Fat_Buffer[29] << 8) | ((uint32)Fat_Buffer[30] << 16) | ((uint32)Fat_Buffer[31] << 24);  
     5C5 9020 0117 LDS	R2,0x0117
     5C7 2433      CLR	R3
     5C8 2C32      MOV	R3,R2
     5C9 2422      CLR	R2
     5CA 9040 0116 LDS	R4,0x0116
     5CC 2455      CLR	R5
     5CD 2842      OR	R4,R2
     5CE 2853      OR	R5,R3
     5CF 0112      MOVW	R2,R4
     5D0 2444      CLR	R4
     5D1 FC37      SBRC	R3,7
     5D2 9440      COM	R4
     5D3 2455      CLR	R5
     5D4 FC47      SBRC	R4,7
     5D5 9450      COM	R5
     5D6 9060 0118 LDS	R6,0x0118
     5D8 2477      CLR	R7
     5D9 2488      CLR	R8
     5DA 2499      CLR	R9
     5DB 0143      MOVW	R8,R6
     5DC 2466      CLR	R6
     5DD 2477      CLR	R7
     5DE 2826      OR	R2,R6
     5DF 2837      OR	R3,R7
     5E0 2848      OR	R4,R8
     5E1 2859      OR	R5,R9
     5E2 E188      LDI	R24,0x18
     5E3 E090      LDI	R25,0
     5E4 9100 0119 LDS	R16,0x0119
     5E6 2711      CLR	R17
     5E7 2722      CLR	R18
     5E8 2733      CLR	R19
     5E9 938A      ST	-Y,R24
     5EA 940E 0E5A CALL	lsl32
     5EC 2A20      OR	R2,R16
     5ED 2A31      OR	R3,R17
     5EE 2A42      OR	R4,R18
     5EF 2A53      OR	R5,R19
     5F0 9230 00D6 STS	BPB_HiddSec+1,R3
     5F2 9220 00D5 STS	BPB_HiddSec,R2
     5F4 9250 00D8 STS	BPB_HiddSec+3,R5
     5F6 9240 00D7 STS	BPB_HiddSec+2,R4
(0084)     BPB_TotSec32	= Fat_Buffer[32] | (Fat_Buffer[33] << 8) | ((uint32)Fat_Buffer[34] << 16) | ((uint32)Fat_Buffer[35] << 24);  
     5F8 9020 011B LDS	R2,0x011B
     5FA 2433      CLR	R3
     5FB 2C32      MOV	R3,R2
     5FC 2422      CLR	R2
     5FD 9040 011A LDS	R4,0x011A
     5FF 2455      CLR	R5
     600 2842      OR	R4,R2
     601 2853      OR	R5,R3
     602 0112      MOVW	R2,R4
     603 2444      CLR	R4
     604 FC37      SBRC	R3,7
     605 9440      COM	R4
     606 2455      CLR	R5
     607 FC47      SBRC	R4,7
     608 9450      COM	R5
     609 9060 011C LDS	R6,0x011C
     60B 2477      CLR	R7
     60C 2488      CLR	R8
     60D 2499      CLR	R9
     60E 0143      MOVW	R8,R6
     60F 2466      CLR	R6
     610 2477      CLR	R7
     611 2826      OR	R2,R6
     612 2837      OR	R3,R7
     613 2848      OR	R4,R8
     614 2859      OR	R5,R9
     615 E188      LDI	R24,0x18
     616 E090      LDI	R25,0
     617 9100 011D LDS	R16,0x011D
     619 2711      CLR	R17
     61A 2722      CLR	R18
     61B 2733      CLR	R19
     61C 938A      ST	-Y,R24
     61D 940E 0E5A CALL	lsl32
     61F 2A20      OR	R2,R16
     620 2A

⌨️ 快捷键说明

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