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

📄 disk.s

📁 Atmega64单片机程序(完整工程)
💻 S
📖 第 1 页 / 共 3 页
字号:
	std z+5,R9
;                 temp1=temp1/DiskInfo[i].SecPerClus ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+2
	ldi R25,>_DiskInfo+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+2
	ldd R7,z+3
	ldd R8,z+4
	ldd R9,z+5
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R6
	movw R18,R8
	xcall div32u
	movw R30,R28
	std z+2,R16
	std z+3,R17
	std z+4,R18
	std z+5,R19
;                 DiskInfo[i].ClusPerData=temp1 ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+32
	ldi R25,>_DiskInfo+32
	add R30,R24
	adc R31,R25
	movw R26,R28
	adiw R26,2
	ld R2,x+
	ld R3,x+
	ld R4,x+
	ld R5,x
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
;            
; 	        /* 判断是FAT12、FAT16还是FAT32 */
;                 if(temp1<4085)
	ldi R20,245
	ldi R21,15
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L91
;                 {
; 	            DiskInfo[i].FATType=FAT12 ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+1
	ldi R25,>_DiskInfo+1
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
; 	            #if FS_DEBUG_EN
; 		    #if USART1_EN
; 	                Uart1_SendString("\n10.File System is FAT12\n");//调试用 
	ldi R16,<L94
	ldi R17,>L94
	xcall _Uart1_SendString
; 		    #endif
; 		    #endif
;                 }
	xjmp L92
L91:
;                 else if(temp1<65525)
	ldi R20,245
	ldi R21,255
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+2
	ldd R3,z+3
	ldd R4,z+4
	ldd R5,z+5
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L95
;                 {
; 	            DiskInfo[i].FATType=FAT16 ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+1
	ldi R25,>_DiskInfo+1
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
; 	            #if FS_DEBUG_EN
; 		    #if USART1_EN
; 	                Uart1_SendString("\n10.File System is FAT16\n");//调试用 
	ldi R16,<L98
	ldi R17,>L98
	xcall _Uart1_SendString
; 		    #endif 
; 		    #endif
;                 }
	xjmp L96
L95:
;                 else 
;                 {
; 	            DiskInfo[i].FATType=FAT32 ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+1
	ldi R25,>_DiskInfo+1
	add R30,R24
	adc R31,R25
	ldi R24,2
	std z+0,R24
; 	            #if FS_DEBUG_EN
; 		    //#if USART1_EN
; 	                Uart1_SendString("\n10.File System is FAT32\n");//调试用 
	ldi R16,<L100
	ldi R17,>L100
	xcall _Uart1_SendString
; 		    //#endif
; 		    #endif
; 	
;                     /* FAT32 RootDirTable为开始簇号 */
;                     DiskInfo[i].RootDirTable= ((INT32U)Buf[45]<<8)+Buf[44];
	ldi R24,8
	ldi R25,0
	movw R30,R14
	ldd R2,z+45
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	movw R30,R14
	ldd R6,z+44
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
;                     DiskInfo[i].RootDirTable|=(((INT32U)Buf[46]<<16)+((INT32U)Buf[47]<<24));
	ldi R24,46
	mul R24,R10
	movw R2,R0
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	add R2,R24
	adc R3,R25
	ldi R24,24
	ldi R25,0
	movw R30,R14
	ldd R4,z+47
	clr R5
	clr R6
	clr R7
	st -y,R24
	movw R16,R4
	movw R18,R6
	xcall lsl32
	movw R30,R14
	ldd R4,z+46
	clr R5
	clr R6
	clr R7
	movw R6,R4
	clr R4
	clr R5
	add R4,R16
	adc R5,R17
	adc R6,R18
	adc R7,R19
	movw R30,R2
	ldd R20,z+0
	ldd R21,z+1
	ldd R22,z+2
	ldd R23,z+3
	or R20,R4
	or R21,R5
	or R22,R6
	or R23,R7
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;                     DiskInfo[i].PathClusIndex=DiskInfo[i].RootDirTable ;
	ldi R24,46
	mul R24,R10
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	ldi R24,<_DiskInfo+36
	ldi R25,>_DiskInfo+36
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
;                 }
L96:
L92:
; 	    }    
L42:
;             CloseSec(DiskInfo[i].Drive,0);/* 关闭扇区 */
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std y+0,R22
	std y+1,R23
	movw R18,R20
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo
	ldi R25,>_DiskInfo
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _CloseSec
;         }
L40:
L37:
	inc R10
L39:
	mov R24,R10
	cpi R24,1
	brsh X7
	xjmp L36
X7:
L30:
	adiw R28,6
	xcall pop_gset5
	.dbline 0 ; func end
	ret
;             Pa -> y+0
;          Drive -> R10
	.even
_RemoveFileDriver::
	xcall push_gset3
	mov R10,R16
	sbiw R28,11
;     }
; }
; 
; /*********************************************************************************************************
; ** 函数名称: RemoveFileDriver
; ** 功能描述: 删除一个底层驱动程序
; ** 输   入: Drive:逻辑驱动器号
; ** 输   出: 无
; ** 全局变量: DiskInfo
; ** 调用模块: 无
; ** 作   者: 陈明计
; ** 日   期: 2003年9月5日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人: 陈明计
; ** 日   期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; void RemoveFileDriver(INT8U Drive)
; {
;     Disk_RW_Parameter Pa ;
;     
;     if(Drive<MAX_DRIVES)
	mov R24,R10
	cpi R24,1
	brlo X8
	xjmp L106
X8:
;     if(DiskInfo[Drive].Drive!=EMPTY_DRIVE)
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo
	ldi R25,>_DiskInfo
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,255
	brne X9
	xjmp L108
X9:
;     {
;         AllCacheWriteBack();
	xcall _AllCacheWriteBack
;         Pa.Drive=Drive ;
	std y+0,R10
;         Pa.RsvdForLow=DiskInfo[Drive].RsvdForLow ;
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+40
	ldi R25,>_DiskInfo+40
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+5,R2
	std z+6,R3
	std z+7,R4
	std z+8,R5
;         DiskInfo[Drive].DiskCommand(DISK_CLOSE,&Pa);
	movw R18,R28
	ldi R16,1
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+44
	ldi R25,>_DiskInfo+44
	add R30,R24
	adc R31,R25
	ldd R26,z+0
	ldd R27,z+1
	movw R30,R26
	xcall xicall
;         
;         DiskInfo[Drive].Drive=EMPTY_DRIVE ;    // 没有分配
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo
	ldi R25,>_DiskInfo
	add R30,R24
	adc R31,R25
	ldi R24,255
	std z+0,R24
;         DiskInfo[Drive].FATType=0xff ;         // 无效的文件系统
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+1
	ldi R25,>_DiskInfo+1
	add R30,R24
	adc R31,R25
	ldi R24,255
	std z+0,R24
;         DiskInfo[Drive].SecPerClus=0 ;         // 每簇扇区数
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+2
	ldi R25,>_DiskInfo+2
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
;         DiskInfo[Drive].NumFATs=0 ;            // FAT表数
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+3
	ldi R25,>_DiskInfo+3
	add R30,R24
	adc R31,R25
	std z+0,R2
;         DiskInfo[Drive].SecPerDisk=0xffffffff ;// 逻辑驱动器包含扇区数
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+12
	ldi R25,>_DiskInfo+12
	add R30,R24
	adc R31,R25
	ldi R20,255
	ldi R21,255
	ldi R22,255
	ldi R23,255
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].BytsPerSec=0 ;         // 每扇区字节数
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+16
	ldi R25,>_DiskInfo+16
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].RootDirTable=0 ;       // 根目录开始扇区号(FAT32为开始簇号)
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+20
	ldi R25,>_DiskInfo+20
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].RootSecCnt=0 ;         // 根目录占用扇区数
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+24
	ldi R25,>_DiskInfo+24
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].FATStartSec=0 ;        // FAT表开始扇区号
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+4
	ldi R25,>_DiskInfo+4
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].FATSecCnt=0 ;          // 每个FAT占用扇区数
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+8
	ldi R25,>_DiskInfo+8
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].DataStartSec=0 ;       // 数据区开始扇区号
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+28
	ldi R25,>_DiskInfo+28
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].PathClusIndex=0 ;      // 当前目录
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+36
	ldi R25,>_DiskInfo+36
	add R30,R24
	adc R31,R25
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
;         DiskInfo[Drive].DiskCommand=NULL ;     // 驱动程序
	ldi R24,46
	mul R24,R10
	movw R30,R0
	ldi R24,<_DiskInfo+44
	ldi R25,>_DiskInfo+44
	add R30,R24
	adc R31,R25
	clr R3
	std z+1,R3
	std z+0,R2
;     }
L108:
L106:
L105:
	adiw R28,11
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
_DiskInfo::
	.blkb 46
	.area data(ram, con, rel)
L100:
	.blkb 26
	.area idata
	.byte 10,49,48,46,'F,'i,'l,'e,32,'S,'y,'s,'t,'e,'m,32
	.byte 'i,'s,32,'F,'A,'T,51,50,10,0
	.area data(ram, con, rel)
L98:
	.blkb 26
	.area idata
	.byte 10,49,48,46,'F,'i,'l,'e,32,'S,'y,'s,'t,'e,'m,32
	.byte 'i,'s,32,'F,'A,'T,49,54,10,0
	.area data(ram, con, rel)
L94:
	.blkb 26
	.area idata
	.byte 10,49,48,46,'F,'i,'l,'e,32,'S,'y,'s,'t,'e,'m,32
	.byte 'i,'s,32,'F,'A,'T,49,50,10,0
	.area data(ram, con, rel)
L85:
	.blkb 18
	.area idata
	.byte 10,32,57,46,'D,'a,'t,'a,'S,'t,'a,'r,'t,'S,'e,'c
	.byte 58,0
	.area data(ram, con, rel)
L80:
	.blkb 18
	.area idata
	.byte 10,32,56,46,'R,'o,'o,'t,'D,'i,'r,'T,'a,'b,'l,'e
	.byte 58,0
	.area data(ram, con, rel)
L73:
	.blkb 16
	.area idata
	.byte 10,32,55,46,'S,'e,'c,'P,'e,'r,'D,'i,'s,'k,58,0
	.area data(ram, con, rel)
L66:
	.blkb 16
	.area idata
	.byte 10,32,54,46,'R,'o,'o,'t,'S,'e,'c,'C,'n,'t,58,0
	.area data(ram, con, rel)
L61:
	.blkb 13
	.area idata
	.byte 10,32,53,46,'N,'u,'m,'F,'A,'T,'s,58,0
	.area data(ram, con, rel)
L58:
	.blkb 15
	.area idata
	.byte 10,32,52,46,'F,'A,'T,'S,'e,'c,'C,'n,'t,58,0
	.area data(ram, con, rel)
L51:
	.blkb 17
	.area idata
	.byte 10,32,51,46,'F,'A,'T,'S,'t,'a,'r,'t,'S,'e,'c,58
	.byte 0
	.area data(ram, con, rel)
L48:
	.blkb 16
	.area idata
	.byte 10,32,50,46,'S,'e,'c,'P,'e,'r,'C,'l,'u,'s,58,0
	.area data(ram, con, rel)
L45:
	.blkb 16
	.area idata
	.byte 10,32,49,46,'B,'y,'t,'s,'P,'e,'r,'S,'e,'c,58,0
	.area data(ram, con, rel)
L35:
	.blkb 20
	.area idata
	.byte 10,'S,'D,47,'M,'M,'C,32,'I,'N,'I,'T,32,'N,'O,'T
	.byte 32,'O,'K,0
	.area data(ram, con, rel)

⌨️ 快捷键说明

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