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

📄 fat.s

📁 AVR单片机系统开发经典实例部分源程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	ldi R24,24
	ldi R25,0
	st -y,R24
	movw R16,R6
	movw R18,R8
	xcall lsl32
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R30,R16
	ldi R24,<_MusicInfoList+37
	ldi R25,>_MusicInfoList+37
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 160
; 				  break;		
	xjmp L90
L94:
	.dbline 163
L89:
	.dbline 149
	xjmp L88
L90:
	.dbline 164
; 			   }
; 			   
; 			}
; 			k = 0;
	clr R0
	clr R1
	std y+26,R1
	std y+25,R0
	.dbline 165
; 			for(i=Index_tmp-1; i>=LocalOfFirstLFN; i--)
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	std y+24,R3
	std y+23,R2
	xjmp L101
L98:
	.dbline 166
; 			{
	.dbline 167
; 			      n = DiskFATInfo.FDT_LBA+(i/(DiskFATInfo.BytesPerSector/32));
	ldi R18,5
	ldi R19,0
	lds R16,_DiskFATInfo+15
	lds R17,_DiskFATInfo+15+1
	xcall lsr16
	movw R18,R16
	ldd R16,y+23
	ldd R17,y+24
	xcall div16u
	movw R2,R16
	clr R4
	clr R5
	lds R8,_DiskFATInfo+4+2
	lds R9,_DiskFATInfo+4+2+1
	lds R6,_DiskFATInfo+4
	lds R7,_DiskFATInfo+4+1
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+6,R6
	std z+7,R7
	std z+8,R8
	std z+9,R9
	.dbline 169
;                //读取FDT的相应扇区位置的内容
;    			      SD_ReadBlock(n,Fat_Buffer);
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	std y+1,R25
	std y+0,R24
	movw R30,R28
	ldd R16,z+6
	ldd R17,z+7
	ldd R18,z+8
	ldd R19,z+9
	xcall _SD_ReadBlock
	.dbline 170
; 			      tem = (i*32)%DiskFATInfo.BytesPerSector;
	ldi R16,32
	ldi R17,0
	ldd R18,y+23
	ldd R19,y+24
	xcall empy16s
	lds R18,_DiskFATInfo+15
	lds R19,_DiskFATInfo+15+1
	xcall mod16u
	movw R2,R16
	clr R4
	clr R5
	movw R30,R28
	std z+2,R2
	std z+3,R3
	std z+4,R4
	std z+5,R5
	.dbline 172
; 				  
; 				  for(j=1; j<32; j++)
	ldi R24,1
	ldi R25,0
	std y+22,R25
	std y+21,R24
	xjmp L108
L105:
	.dbline 173
; 			 	  {
	.dbline 174
; 				     if(j==0x0B|j==0x0C|j==0x0D|j==0x1A|j==0x1B)
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,11
	ldi R30,0
	cpc R25,R30
	brne L111
	ldi R24,1
	ldi R25,0
	std y+32,R25
	std y+31,R24
	xjmp L112
L111:
	clr R0
	clr R1
	std y+32,R1
	std y+31,R0
L112:
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,12
	ldi R30,0
	cpc R25,R30
	brne L113
	ldi R24,1
	ldi R25,0
	std y+30,R25
	std y+29,R24
	xjmp L114
L113:
	clr R0
	clr R1
	std y+30,R1
	std y+29,R0
L114:
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,13
	ldi R30,0
	cpc R25,R30
	brne L115
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L116
L115:
	clr R10
	clr R11
L116:
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,26
	ldi R30,0
	cpc R25,R30
	brne L117
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L118
L117:
	clr R12
	clr R13
L118:
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,27
	ldi R30,0
	cpc R25,R30
	brne L119
	ldi R24,1
	ldi R25,0
	movw R14,R24
	xjmp L120
L119:
	clr R14
	clr R15
L120:
	ldd R2,y+31
	ldd R3,y+32
	ldd R0,y+29
	ldd R1,y+30
	or R2,R0
	or R3,R1
	or R2,R10
	or R3,R11
	or R2,R12
	or R3,R13
	or R2,R14
	or R3,R15
	tst R2
	brne X4
	tst R3
	breq L109
X4:
	.dbline 175
; 					    continue;
	xjmp L106
L109:
	.dbline 176
; 					 if(Fat_Buffer[tem+j]<128 && Fat_Buffer[tem+j]!=0)
	ldd R2,y+21
	ldd R3,y+22
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R6
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R24,R2
	cpi R24,128
	brsh L121
	tst R24
	breq L121
	.dbline 177
; 					 {
	.dbline 178
; 					     MusicInfoList[LocalOfMusic].FileName[k] = Fat_Buffer[tem+j];
	ldi R16,41
	ldi R17,0
	ldd R18,y+27
	ldd R19,y+28
	xcall empy16s
	movw R2,R16
	ldi R24,<_MusicInfoList
	ldi R25,>_MusicInfoList
	add R2,R24
	adc R3,R25
	ldd R30,y+25
	ldd R31,y+26
	add R30,R2
	adc R31,R3
	ldd R2,y+21
	ldd R3,y+22
	clr R4
	clr R5
	movw R26,R28
	adiw R26,2
	ld R6,x+
	ld R7,x+
	ld R8,x+
	ld R9,x
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R26,R6
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R26,R24
	adc R27,R25
	ld R2,x
	std z+0,R2
	.dbline 179
; 						 k++;
	ldd R24,y+25
	ldd R25,y+26
	adiw R24,1
	std y+26,R25
	std y+25,R24
	.dbline 180
; 					 }
L121:
	.dbline 182
L106:
	.dbline 172
	ldd R24,y+21
	ldd R25,y+22
	adiw R24,1
	std y+22,R25
	std y+21,R24
L108:
	.dbline 172
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brsh X11
	xjmp L105
X11:
	.dbline 183
L99:
	.dbline 165
	ldd R24,y+23
	ldd R25,y+24
	sbiw R24,1
	std y+24,R25
	std y+23,R24
L101:
	.dbline 165
	movw R30,R28
	ldd R2,z+14
	ldd R3,z+15
	ldd R4,z+16
	ldd R5,z+17
	ldd R6,y+23
	ldd R7,y+24
	clr R8
	clr R9
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brlo X12
	xjmp L98
X12:
	.dbline 184
; 					// else if(Fat_Buffer[tem+j]>128 && Fat_Buffer[tem+j]!=)
; 				  }
; 			}
; 			LocalOfMusic++;   //开始下一个音乐文件的记录			
	ldd R24,y+27
	ldd R25,y+28
	adiw R24,1
	std y+28,R25
	std y+27,R24
	.dbline 185
; 		}
L71:
	.dbline 186
; 	}
L68:
	.dbline 188
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+10,R2
	std z+11,R3
	std z+12,R4
	std z+13,R5
	.dbline 190
L61:
	.dbline 101
	xjmp L60
L62:
	.dbline 191
; 	
; 	Index_tmp++;  //跳到下一个目录编号
; 	
;   }
;   NumOfFile = LocalOfMusic;
	ldd R2,y+27
	ldd R3,y+28
	clr R4
	clr R5
	sts _NumOfFile+1,R3
	sts _NumOfFile,R2
	sts _NumOfFile+2+1,R5
	sts _NumOfFile+2,R4
	.dbline -2
L59:
	adiw R28,33
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l FileExt 18 A[3:3]c
	.dbsym l LocalOfFirstLFN 14 l
	.dbsym l Index_tmp 10 l
	.dbsym l n 6 l
	.dbsym l LocalOfMusic 27 i
	.dbsym l k 25 i
	.dbsym l i 23 i
	.dbsym l tem 2 l
	.dbsym l j 21 i
	.dbend
	.dbfunc e ReadBlockforCluster _ReadBlockforCluster fl
;            tmp -> y+2
;         offset -> y+14
;         Sector -> y+10
	.even
_ReadBlockforCluster::
	xcall push_arg4
	xcall push_gset2
	sbiw R28,6
	.dbline -1
	.dbline 195
; }
; 
; uint32 ReadBlockforCluster(uint32 Sector,uint32 offset)
; {
	.dbline 197
; 	uint32  tmp;
;    	SD_ReadBlock(Sector,Fat_Buffer);
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	std y+1,R25
	std y+0,R24
	movw R30,R28
	ldd R16,z+10
	ldd R17,z+11
	ldd R18,z+12
	ldd R19,z+13
	xcall _SD_ReadBlock
	.dbline 198
; 	tmp=Fat_Buffer[offset] |(Fat_Buffer[offset+1]<<8) |((uint32)Fat_Buffer[offset+2]<<16) |((uint32)Fat_Buffer[offset+3]<<24);
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+14
	ldd R3,z+15
	ldd R4,z+16
	ldd R5,z+17
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R2
	ldi R24,<_Fat_Buffer
	ldi R25,>_Fat_Buffer
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R3,R2
	clr R2
	movw R30,R28
	push R26
	push R27
	ldd R26,z+14
	ldd R27,z+15
	movw R30,R26
	pop R27
	pop R26
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	clr R5
	or R4,R2
	or R5,R3
	movw R2,R4
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+14
	ldd R7,z+15
	ldd R8,z+16
	ldd R9,z+17
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	movw R8,R6
	clr R6
	clr R7
	or R2,R6
	or R3,R7
	or R4,R8
	or R5,R9
	ldi R20,3
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R6,z+14
	ldd R7,z+15
	ldd R8,z+16
	ldd R9,z+17
	add R6,R20
	adc R7,R21
	adc R8,R22
	adc R9,R23
	movw R30,R6
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	clr R7
	clr R8
	clr R9
	ldi R24,24
	ldi R25,0
	st -y,R24
	movw R16,R6
	movw R18,R8
	xcall lsl32
	or R2,R16
	or R3,R17
	or R4,R18
	or R5,R19
	movw R30,R28
	std z+2,R2
	std z+3,R3
	std z+4,R4
	std z+5,R5
	.dbline 199
; 	return tmp;
	movw R30,R28
	ldd R16,z+2
	ldd R17,z+3
	ldd R18,z+4
	ldd R19,z+5
	.dbline -2
L123:
	adiw R28,6
	xcall pop_gset2
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l tmp 2 l
	.dbsym l offset 14 l
	.dbsym l Sector 10 l
	.dbend
	.dbfunc e FatNextCluster _FatNextCluster fl
;         offset -> R10,R11
;         sector -> y+12
;      fatOffset -> y+8
;    nextCluster -> y+4
;        cluster -> y+22
	.even
_FatNextCluster::
	xcall push_arg4
	xcall push_gset3
	sbiw R28,16
	.dbline -1
	.dbline 204
; }
; 
; 
; uint32 FatNextCluster(uint32 cluster)
; {
	.dbline 205
;     uint32 nextCluster=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+4,R20
	std z+5,R21
	std z+6,R22
	std z+7,R23
	.dbline 206
;     uint32 fatOffset=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+8,R20
	std z+9,R21
	std z+10,R22
	std z+11,R23
	.dbline 207
;     uint32 sector=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+12,R20
	std z+13,R21
	std z+14,R22
	std z+15,R23
	.dbline 208
;     uint16 offset=0;
	clr R10
	clr R11
	.dbline 210
; 	
; 	fatOffset = cluster<<2;
	ldi R24,2
	ldi R25,0
	movw R30,R28
	ldd R2,z+22
	ldd R3,z+23
	ldd R4,z+24
	ldd R5,z+25
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R30,R28
	std z+8,R16
	std z+9,R17
	std z+10,R18
	std z+11,R19
	.dbline 211
; 	sector = DiskFATInfo.FAT_LBA + (fatOffset>>9);	
	ldi R24,9
	ldi R25,0
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	lds R4,_DiskFATInfo+8+2
	lds R5,_DiskFATInfo+8+2+1
	lds R2,_DiskFATInfo+8
	lds R3,_DiskFATInfo+8+1
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	movw R30,R28
	std z+12,R2
	std z+13,R3
	std z+14,R4
	std z+15,R5
	.dbline 212
; 	offset = fatOffset % DiskFATInfo.BytesPerSector;
	lds R2,_DiskFATInfo+15
	lds R3,_DiskFATInfo+15+1
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+8
	ldd R7,z+9
	ldd R8,z+10
	ldd R9,z+11
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall mod32u
	movw R10,R16
	.dbline 213
; 	nextCluster = ReadBlockforCluster(sector,offset);
	movw R2,R10
	clr R4
	clr R5
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	movw R30,R28
	ldd R16,z+12
	ldd R17,z+13
	ldd R18,z+14
	ldd R19,z+15
	xcall _ReadBlockforCluster
	movw R30,R28
	std z+4,R16
	std z+5,R17
	std z+6,R18
	std z+7,R19
	.dbline 214
; 	if (nextCluster >= (CLUST_EOFS & FAT_MASK))				// 是否文件的结束簇
	ldi R20,248
	ldi R21,255
	ldi R22,255
	ldi R23,255
	lds R4,_FAT_MASK+2
	lds R5,_FAT_MASK+2+1
	lds R2,_FAT_MASK
	lds R3,_FAT_MASK+1
	and R2,R20
	and R3,R21
	and R4,R22
	and R5,R23
	movw R30,R28
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brlo L127
	.dbline 215
;     {
	.dbline 216
;         nextCluster = CLUST_EOFE;
	ldi R20,255
	ldi R21,255
	ldi R22,255
	ldi R23,255
	movw R30,R28
	std z+4,R20
	std z+5,R21
	std z+6,R22
	std z+7,R23
	.dbline 217
;     }
L127:
	.dbline 218
;     return nextCluster;
	movw R30,R28
	ldd R16,z+4
	ldd R17,z+5
	ldd R18,z+6
	ldd R19,z+7
	.dbline -2
L124:
	adiw R28,16
	xcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r offset 10 i
	.dbsym l sector 12 l
	.dbsym l fatOffset 8 l
	.dbsym l nextCluster 4 l
	.dbsym l cluster 22 l
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\AVR\M\1\fat.c
_MusicInfoList::
	.blkb 123
	.dbsym e MusicInfoList _MusicInfoList A[123:3]X
_DiskFATInfo::
	.blkb 23
	.dbsym e DiskFATInfo _DiskFATInfo X
_FAT_MASK::
	.blkb 4
	.dbsym e FAT_MASK _FAT_MASK l
_NumOfFile::
	.blkb 4
	.dbsym e NumOfFile _NumOfFile l
_Fat_Buffer::
	.blkb 512
	.dbsym e Fat_Buffer _Fat_Buffer A[512:512]c
	.area data(ram, con, rel)
	.dbfile C:\AVR\M\1\fat.c
L78:
	.blkb 4
	.area idata
	.byte 'M,'P,51,0
	.area data(ram, con, rel)
	.dbfile C:\AVR\M\1\fat.c

⌨️ 快捷键说明

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