disk.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,577 行 · 第 1/5 页
LIS
1,577 行
.module disk.c
.area text(rom, con, rel)
; i -> R10
.even
0000 _DiskInit::
0000 0E940000 xcall push_gset3
0004 ; /****************************************Copyright (c)**************************************************
0004 ; ** 广州周立功单片机发展有限公司
0004 ; ** 研 究 所
0004 ; ** ARM开发组
0004 ; **
0004 ; ** http://www.zlgmcu.com
0004 ; **
0004 ; **--------------文件信息--------------------------------------------------------------------------------
0004 ; **文 件 名: disk.c
0004 ; **创 建 人: 陈明计
0004 ; **最后修改日期: 2003年9月3日
0004 ; **描 述: FAT文件系统关于逻辑盘管理的部分
0004 ; **
0004 ; **--------------历史版本信息----------------------------------------------------------------------------
0004 ; ** 创建人: 陈明计
0004 ; ** 版 本: V1.0
0004 ; ** 日 期: 2003年9月3日
0004 ; ** 描 述: 原始版本
0004 ; **
0004 ; **--------------当前版本修订------------------------------------------------------------------------------
0004 ; ** 修改人: 陈明计
0004 ; ** 日 期: 2004年4月10日
0004 ; ** 描 述: 增加注释
0004 ; **
0004 ; **------------------------------------------------------------------------------------------------------
0004 ; ********************************************************************************************************/
0004 ; #define IN_DISK
0004 ;
0004 ; #include "SYS_Config.h"
0004 ; #include "FS_Config.h"
0004 ; #include "USART1.h"
0004 ; #include "fat.h"
0004 ;
0004 ;
0004 ; Disk_Info DiskInfo[MAX_DRIVES];//逻辑盘信息
0004 ; /*********************************************************************************************************
0004 ; ** 函数名称: DiskInit
0004 ; ** 功能描述: 初始化逻辑盘管理模块
0004 ; ** 输 入: 无
0004 ; ** 输 出: 无
0004 ; ** 全局变量: DiskInfo
0004 ; ** 调用模块: 无
0004 ; ** 作 者: 陈明计
0004 ; ** 日 期: 2003年9月3日
0004 ; **-------------------------------------------------------------------------------------------------------
0004 ; ** 修 改 人: 陈明计
0004 ; ** 日 期: 2004年4月10日
0004 ; **------------------------------------------------------------------------------------------------------
0004 ; ********************************************************************************************************/
0004 ; void DiskInit(void)
0004 ; {
0004 ; INT8U i ;
0004 ;
0004 ; for(i=0;i<MAX_DRIVES;i++)
0004 AA24 clr R10
0006 A6C0 xjmp L5
0008 L2:
0008 8EE2 ldi R24,46
000A 8A9D mul R24,R10
000C F001 movw R30,R0
000E 80E0 ldi R24,<_DiskInfo
0010 90E0 ldi R25,>_DiskInfo
0012 E80F add R30,R24
0014 F91F adc R31,R25
0016 8FEF ldi R24,255
0018 8083 std z+0,R24
001A 8EE2 ldi R24,46
001C 8A9D mul R24,R10
001E F001 movw R30,R0
0020 80E0 ldi R24,<_DiskInfo+1
0022 90E0 ldi R25,>_DiskInfo+1
0024 E80F add R30,R24
0026 F91F adc R31,R25
0028 8FEF ldi R24,255
002A 8083 std z+0,R24
002C 8EE2 ldi R24,46
002E 8A9D mul R24,R10
0030 F001 movw R30,R0
0032 80E0 ldi R24,<_DiskInfo+2
0034 90E0 ldi R25,>_DiskInfo+2
0036 E80F add R30,R24
0038 F91F adc R31,R25
003A 2224 clr R2
003C 2082 std z+0,R2
003E 8EE2 ldi R24,46
0040 8A9D mul R24,R10
0042 F001 movw R30,R0
0044 80E0 ldi R24,<_DiskInfo+3
0046 90E0 ldi R25,>_DiskInfo+3
0048 E80F add R30,R24
004A F91F adc R31,R25
004C 2082 std z+0,R2
004E 8EE2 ldi R24,46
0050 8A9D mul R24,R10
0052 F001 movw R30,R0
0054 80E0 ldi R24,<_DiskInfo+12
0056 90E0 ldi R25,>_DiskInfo+12
0058 E80F add R30,R24
005A F91F adc R31,R25
005C 4FEF ldi R20,255
005E 5FEF ldi R21,255
0060 6FEF ldi R22,255
0062 7FEF ldi R23,255
0064 4083 std z+0,R20
0066 5183 std z+1,R21
0068 6283 std z+2,R22
006A 7383 std z+3,R23
006C 8EE2 ldi R24,46
006E 8A9D mul R24,R10
0070 F001 movw R30,R0
0072 80E0 ldi R24,<_DiskInfo+16
0074 90E0 ldi R25,>_DiskInfo+16
0076 E80F add R30,R24
0078 F91F adc R31,R25
007A 40E0 ldi R20,0
007C 50E0 ldi R21,0
007E 60E0 ldi R22,0
0080 70E0 ldi R23,0
0082 4083 std z+0,R20
0084 5183 std z+1,R21
0086 6283 std z+2,R22
0088 7383 std z+3,R23
008A 8EE2 ldi R24,46
008C 8A9D mul R24,R10
008E F001 movw R30,R0
0090 80E0 ldi R24,<_DiskInfo+20
0092 90E0 ldi R25,>_DiskInfo+20
0094 E80F add R30,R24
0096 F91F adc R31,R25
0098 40E0 ldi R20,0
009A 50E0 ldi R21,0
009C 60E0 ldi R22,0
009E 70E0 ldi R23,0
00A0 4083 std z+0,R20
00A2 5183 std z+1,R21
00A4 6283 std z+2,R22
00A6 7383 std z+3,R23
00A8 8EE2 ldi R24,46
00AA 8A9D mul R24,R10
00AC F001 movw R30,R0
00AE 80E0 ldi R24,<_DiskInfo+24
00B0 90E0 ldi R25,>_DiskInfo+24
00B2 E80F add R30,R24
00B4 F91F adc R31,R25
00B6 40E0 ldi R20,0
00B8 50E0 ldi R21,0
00BA 60E0 ldi R22,0
00BC 70E0 ldi R23,0
00BE 4083 std z+0,R20
00C0 5183 std z+1,R21
00C2 6283 std z+2,R22
00C4 7383 std z+3,R23
00C6 8EE2 ldi R24,46
00C8 8A9D mul R24,R10
00CA F001 movw R30,R0
00CC 80E0 ldi R24,<_DiskInfo+4
00CE 90E0 ldi R25,>_DiskInfo+4
00D0 E80F add R30,R24
00D2 F91F adc R31,R25
00D4 40E0 ldi R20,0
00D6 50E0 ldi R21,0
00D8 60E0 ldi R22,0
00DA 70E0 ldi R23,0
00DC 4083 std z+0,R20
00DE 5183 std z+1,R21
00E0 6283 std z+2,R22
00E2 7383 std z+3,R23
00E4 8EE2 ldi R24,46
00E6 8A9D mul R24,R10
00E8 F001 movw R30,R0
00EA 80E0 ldi R24,<_DiskInfo+8
00EC 90E0 ldi R25,>_DiskInfo+8
00EE E80F add R30,R24
00F0 F91F adc R31,R25
00F2 40E0 ldi R20,0
00F4 50E0 ldi R21,0
00F6 60E0 ldi R22,0
00F8 70E0 ldi R23,0
00FA 4083 std z+0,R20
00FC 5183 std z+1,R21
00FE 6283 std z+2,R22
0100 7383 std z+3,R23
0102 8EE2 ldi R24,46
0104 8A9D mul R24,R10
0106 F001 movw R30,R0
0108 80E0 ldi R24,<_DiskInfo+28
010A 90E0 ldi R25,>_DiskInfo+28
010C E80F add R30,R24
010E F91F adc R31,R25
0110 40E0 ldi R20,0
0112 50E0 ldi R21,0
0114 60E0 ldi R22,0
0116 70E0 ldi R23,0
0118 4083 std z+0,R20
011A 5183 std z+1,R21
011C 6283 std z+2,R22
011E 7383 std z+3,R23
0120 8EE2 ldi R24,46
0122 8A9D mul R24,R10
0124 F001 movw R30,R0
0126 80E0 ldi R24,<_DiskInfo+36
0128 90E0 ldi R25,>_DiskInfo+36
012A E80F add R30,R24
012C F91F adc R31,R25
012E 40E0 ldi R20,0
0130 50E0 ldi R21,0
0132 60E0 ldi R22,0
0134 70E0 ldi R23,0
0136 4083 std z+0,R20
0138 5183 std z+1,R21
013A 6283 std z+2,R22
013C 7383 std z+3,R23
013E 8EE2 ldi R24,46
0140 8A9D mul R24,R10
0142 F001 movw R30,R0
0144 80E0 ldi R24,<_DiskInfo+44
0146 90E0 ldi R25,>_DiskInfo+44
0148 E80F add R30,R24
014A F91F adc R31,R25
014C 3324 clr R3
014E 3182 std z+1,R3
0150 2082 std z+0,R2
0152 L3:
0152 A394 inc R10
0154 L5:
0154 8A2D mov R24,R10
0156 8130 cpi R24,1
0158 08F4 brsh X0
015A 56CF xjmp L2
015C X0:
015C ; {
015C ; DiskInfo[i].Drive=EMPTY_DRIVE ; // 没有分配
015C ; DiskInfo[i].FATType=0xff ; // 无效的文件系统
015C ; DiskInfo[i].SecPerClus=0 ; // 每簇扇区数
015C ; DiskInfo[i].NumFATs=0 ; // FAT表数
015C ; DiskInfo[i].SecPerDisk=0xffffffff ; // 逻辑驱动器包含扇区数
015C ; DiskInfo[i].BytsPerSec=0 ; // 每扇区字节数
015C ; DiskInfo[i].RootDirTable=0 ; // 根目录开始扇区号(FAT32为开始簇号)
015C ; DiskInfo[i].RootSecCnt=0 ; // 根目录占用扇区数
015C ; DiskInfo[i].FATStartSec=0 ; // FAT表开始扇区号
015C ; DiskInfo[i].FATSecCnt=0 ; // 每个FAT占用扇区数
015C ; DiskInfo[i].DataStartSec=0 ; // 数据区开始扇区号
015C ; DiskInfo[i].PathClusIndex=0 ; // 当前目录
015C ; DiskInfo[i].DiskCommand=NULL ; // 驱动程序
015C ; }
015C ; CacheInit();
015C 0E940000 xcall _CacheInit
0160 L1:
0160 0E940000 xcall pop_gset3
0164 .dbline 0 ; func end
0164 0895 ret
0166 ; Rt -> R20,R21
0166 ; Drive -> R16
.even
0166 _GetDiskInfo::
0166 0E940000 xcall push_gset1
016A ; //初始化磁盘cache
016A ; }
016A ;
016A ; /*********************************************************************************************************
016A ; ** 函数名称: GetDiskInfo
016A ; ** 功能描述: 获取指定逻辑盘信息
016A ; ** 输 入: 逻辑盘号
016A ; ** 输 出: 指向逻辑盘信息的结构体指针
016A ; ** 全局变量: DiskInfo
016A ; ** 调用模块: 无
016A ; ** 作 者: 陈明计
016A ; ** 日 期: 2003年9月3日
016A ; **-------------------------------------------------------------------------------------------------------
016A ; ** 修 改 人:
016A ; ** 日 期:
016A ; **------------------------------------------------------------------------------------------------------
016A ; ********************************************************************************************************/
016A ; Disk_Info *GetDiskInfo(INT8U Drive)
016A ; {
016A ; Disk_Info *Rt ;
016A ; Rt=NULL ;
016A 4427 clr R20
016C 5527 clr R21
016E ;
016E ; if(Drive<MAX_DRIVES)
016E 0130 cpi R16,1
0170 88F4 brsh L19
0172 ; {
0172 ; if(DiskInfo[Drive].Drive!=EMPTY_DRIVE)
0172 8EE2 ldi R24,46
0174 809F mul R24,R16
0176 F001 movw R30,R0
0178 80E0 ldi R24,<_DiskInfo
017A 90E0 ldi R25,>_DiskInfo
017C E80F add R30,R24
017E F91F adc R31,R25
0180 8081 ldd R24,z+0
0182 8F3F cpi R24,255
0184 39F0 breq L21
0186 ; {
0186 ; Rt=DiskInfo+Drive ;
0186 8EE2 ldi R24,46
0188 809F mul R24,R16
018A A001 movw R20,R0
018C 80E0 ldi R24,<_DiskInfo
018E 90E0 ldi R25,>_DiskInfo
0190 480F add R20,R24
0192 591F adc R21,R25
0194 ; }
0194 L21:
0194 ; }
0194 L19:
0194 ; return Rt ;
0194 8A01 movw R16,R20
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?