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

📄 interface.lis

📁 Atmega64单片机程序(完整工程)
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module Interface.c
                        .area text(rom, con, rel)
                ;    RelaStaSect -> y+2
                ;         buffer -> R10,R11
                ;         Device -> R10
                        .even
 0000           _GetVolumeFirstSect::
 0000 0E940000          xcall push_gset3
 0004 A02E              mov R10,R16
 0006 2697              sbiw R28,6
 0008           ; /****************************************Copyright (c)**************************************************
 0008           ; **                               广州周立功单片机发展有限公司
 0008           ; **                                     研    究    所
 0008           ; **                                        ARM开发组
 0008           ; **
 0008           ; **                                 http://www.zlgmcu.com
 0008           ; **
 0008           ; **--------------文件信息--------------------------------------------------------------------------------
 0008           ; **文   件   名: flash.c
 0008           ; **创   建   人: 陈明计
 0008           ; **最后修改日期:  2003年9月3日
 0008           ; **描        述: FAT文件系统在PC上编译的软盘驱动程序(底层驱动)
 0008           ; **
 0008           ; **--------------历史版本信息----------------------------------------------------------------------------
 0008           ; ** 创建人: 陈明计
 0008           ; ** 版  本: V1.0
 0008           ; ** 日 期: 2003年9月3日
 0008           ; ** 描 述: 原始版本
 0008           ; **
 0008           ; **--------------当前版本修订------------------------------------------------------------------------------
 0008           ; ** 修改人:
 0008           ; ** 日 期:
 0008           ; ** 描 述:
 0008           ; **
 0008           ; **------------------------------------------------------------------------------------------------------
 0008           ; ********************************************************************************************************/
 0008           ; 
 0008           ; #define   IN_FLOPPY 
 0008           ; 
 0008           ; #include "SYS_Config.h" 
 0008           ; #include "FS_Config.h" 
 0008           ; #include "SD_Drive.h" 
 0008           ; #include "USART1.h"
 0008           ; #include "fat.h" 
 0008           ; 
 0008           ; extern INT8U Data_Buf[SD_BLOCKSIZE];//在main函数中定义
 0008           ; 
 0008           ; INT32U GetVolumeFirstSect(INT8U Device)
 0008           ; {
 0008           ;     INT8U  *buffer;
 0008           ;     INT32U RelaStaSect ;
 0008           ;     
 0008           ;       Device=Device;
 0008           ;     buffer=Data_Buf;
 0008 80E0              ldi R24,<_Data_Buf
 000A 90E0              ldi R25,>_Data_Buf
 000C 5C01              movw R10,R24
 000E           ;     /* 从SD卡中读一个块  */
 000E           ;     //INT8U  SD_ReadBlock(INT32U blockaddr,INT8U *recbuf);
 000E           ;     if( SD_ReadBlock(0x00,buffer)!=0 )
 000E B982              std y+1,R11
 0010 A882              std y+0,R10
 0012 00E0              ldi R16,0
 0014 10E0              ldi R17,0
 0016 20E0              ldi R18,0
 0018 30E0              ldi R19,0
 001A 0E940000          xcall _SD_ReadBlock
 001E 0023              tst R16
 0020 29F0              breq L2
 0022           ;         return DISK_INIT_NOT_OK ; 
 0022 03E8              ldi R16,131
 0024 10E0              ldi R17,0
 0026 20E0              ldi R18,0
 0028 30E0              ldi R19,0
 002A 79C0              xjmp L1
 002C           L2:
 002C           ;     
 002C           ;     if( (buffer[510]==0x55)&&(buffer[511]==0xAA) )
 002C F501              movw R30,R10
 002E E250              subi R30,2  ; addi 510
 0030 FE4F              sbci R31,254
 0032 8081              ldd R24,z+0
 0034 8535              cpi R24,85
 0036 09F0              breq X0
 0038 6DC0              xjmp L4
 003A           X0:
 003A F501              movw R30,R10
 003C E150              subi R30,1  ; addi 511
 003E FE4F              sbci R31,254
 0040 8081              ldd R24,z+0
 0042 8A3A              cpi R24,170
 0044 09F0              breq X1
 0046 66C0              xjmp L4
 0048           X1:
 0048           ;     {
 0048           ;         if( ( (buffer[0]==0xEB)&&(buffer[2]==0x90) ) || (buffer[0]==0xE9) )
 0048 F501              movw R30,R10
 004A 8081              ldd R24,z+0
 004C 8B3E              cpi R24,235
 004E 19F4              brne L9
 0050 8281              ldd R24,z+2
 0052 8039              cpi R24,144
 0054 21F0              breq L8
 0056           L9:
 0056 F501              movw R30,R10
 0058 8081              ldd R24,z+0
 005A 893E              cpi R24,233
 005C 51F4              brne L6
 005E           L8:
 005E           ;             RelaStaSect=0 ;
 005E 40E0              ldi R20,0
 0060 50E0              ldi R21,0
 0062 60E0              ldi R22,0
 0064 70E0              ldi R23,0
 0066 FE01              movw R30,R28
 0068 4283              std z+2,R20
 006A 5383              std z+3,R21
 006C 6483              std z+4,R22
 006E 7583              std z+5,R23
 0070 51C0              xjmp L7
 0072           L6:
 0072           ;         else 
 0072           ;         {
 0072           ;             //RelaStaSect=(INT32U)(buffer[454])+(INT32U)(buffer[455])<<8+(INT32U)(buffer[456])<<16+(INT32U)(buffer[457])<<24;//为何不行???
 0072           ; 			//RelaStaSect=(INT32U)(buffer[454])+(INT32U)(buffer[455])*0x100+(INT32U)(buffer[456])*0x10000+(INT32U)(buffer[457])*0x1000000;
 0072           ; 		    RelaStaSect=(INT32U)(buffer[454])+
 0072 F501              movw R30,R10
 0074 E953              subi R30,57  ; addi 455
 0076 FE4F              sbci R31,254
 0078 2080              ldd R2,z+0
 007A 3324              clr R3
 007C 4424              clr R4
 007E 5524              clr R5
 0080 40E0              ldi R20,0
 0082 51E0              ldi R21,1
 0084 60E0              ldi R22,0
 0086 70E0              ldi R23,0
 0088 5A92              st -y,R5
 008A 4A92              st -y,R4
 008C 3A92              st -y,R3
 008E 2A92              st -y,R2
 0090 8A01              movw R16,R20
 0092 9B01              movw R18,R22
 0094 0E940000          xcall empy32u
 0098 F501              movw R30,R10
 009A EA53              subi R30,58  ; addi 454
 009C FE4F              sbci R31,254
 009E 2080              ldd R2,z+0
 00A0 3324              clr R3
 00A2 4424              clr R4
 00A4 5524              clr R5
 00A6 200E              add R2,R16
 00A8 311E              adc R3,R17
 00AA 421E              adc R4,R18
 00AC 531E              adc R5,R19
 00AE F501              movw R30,R10
 00B0 E853              subi R30,56  ; addi 456
 00B2 FE4F              sbci R31,254
 00B4 6080              ldd R6,z+0
 00B6 7724              clr R7
 00B8 8824              clr R8
 00BA 9924              clr R9
 00BC 40E0              ldi R20,0
 00BE 50E0              ldi R21,0
 00C0 61E0              ldi R22,1
 00C2 70E0              ldi R23,0
 00C4 9A92              st -y,R9
 00C6 8A92              st -y,R8
 00C8 7A92              st -y,R7
 00CA 6A92              st -y,R6
 00CC 8A01              movw R16,R20
 00CE 9B01              movw R18,R22
 00D0 0E940000          xcall empy32u
 00D4 200E              add R2,R16
 00D6 311E              adc R3,R17
 00D8 421E              adc R4,R18
 00DA 531E              adc R5,R19
 00DC F501              movw R30,R10
 00DE E753              subi R30,55  ; addi 457
 00E0 FE4F              sbci R31,254
 00E2 6080              ldd R6,z+0
 00E4 7724              clr R7
 00E6 8824              clr R8
 00E8 9924              clr R9
 00EA 40E0              ldi R20,0
 00EC 50E0              ldi R21,0
 00EE 60E0              ldi R22,0
 00F0 71E0              ldi R23,1
 00F2 9A92              st -y,R9
 00F4 8A92              st -y,R8
 00F6 7A92              st -y,R7
 00F8 6A92              st -y,R6
 00FA 8A01              movw R16,R20
 00FC 9B01              movw R18,R22
 00FE 0E940000          xcall empy32u
 0102 200E              add R2,R16
 0104 311E              adc R3,R17
 0106 421E              adc R4,R18
 0108 531E              adc R5,R19
 010A FE01              movw R30,R28
 010C 2282              std z+2,R2
 010E 3382              std z+3,R3
 0110 4482              std z+4,R4
 0112 5582              std z+5,R5
 0114           ;                                   (INT32U)(buffer[455])*0x100+
 0114           ;                                   (INT32U)(buffer[456])*0x10000+
 0114           ;                                   (INT32U)(buffer[457])*0x1000000;
 0114           ;               
 0114           ;               }
 0114           L7:
 0114           ;     }
 0114           L4:
 0114           ;     return RelaStaSect ;
 0114 FE01              movw R30,R28
 0116 0281              ldd R16,z+2
 0118 1381              ldd R17,z+3
 011A 2481              ldd R18,z+4
 011C 3581              ldd R19,z+5
 011E           L1:
 011E 2696              adiw R28,6
 0120 0E940000          xcall pop_gset3
 0124                   .dbline 0 ; func end
 0124 0895              ret
 0126           ;       DiskInfo -> R14,R15
 0126           ;             rt -> R10,R11
 0126           ;             Dp -> R12,R13
 0126           ;      Parameter -> R14,R15
 0126           ;        Command -> R10
                        .even
 0126           _SD_Command::
 0126 0E940000          xcall push_gset5
 012A 7901              movw R14,R18
 012C A02E              mov R10,R16
 012E 2297              sbiw R28,2
 0130           ; }
 0130           ; 
 0130           ; /*********************************************************************************************************
 0130           ; ** 函数名称: SDCommand
 0130           ; ** 功能描述: 底层驱动程序与上层的接口程序
 0130           ; ** 输   入: DISK_INIT:驱动程序初始化
 0130           ; **           DISK_CLOSE:关闭驱动器(移除驱动程序)
 0130           ; **           DISK_CREATE_BOOT_SECTOR:重建引导扇区
 0130           ; **           DISK_READ_SECTOR:读扇区
 0130           ; **           DISK_WRITE_SECTOR:写扇区
 0130           ; 
 0130           ; ** 输   出: DISK_READ_OK:读扇区完成
 0130           ; **           DISK_READ_NOT_OK:读扇区失败
 0130           ; **           DISK_WRITE_OK:写扇区完成
 0130           ; **           DISK_WRITE_NOT_OK:写扇区失败
 0130           ; **           DISK_INIT_OK:初始化完成
 0130           ; **           DISK_INIT_NOT_OK:初始化失败
 0130           ; **           BAD_DISK_COMMAND:无效的命令
 0130           ; ** 全局变量: 无
 0130           ; ** 调用模块: 无
 0130           ; ** 作   者: 陈明计
 0130           ; ** 日   期: 2003年9月3日
 0130           ; **-------------------------------------------------------------------------------------------------------
 0130           ; ** 修 改 人:
 0130           ; ** 日   期:
 0130           ; **------------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

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