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 + -
显示快捷键?