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

📄 rwsec.s

📁 Atmega64单片机程序(完整工程)
💻 S
字号:
	.module RWSec.c
	.area text(rom, con, rel)
;              i -> R10,R11
	.even
_CacheInit::
	xcall push_gset3
; 
; /****************************************Copyright (c)**************************************************
; **                               广州周立功单片机发展有限公司
; **                                     研    究    所
; **                                        ARM开发组
; **
; **                                 http://www.zlgmcu.com
; **
; **--------------文件信息--------------------------------------------------------------------------------
; **文   件   名: disk.c
; **创   建   人: 陈明计
; **最后修改日期: 2004年3月11日
; **描        述: FAT文件系统关于cache管理的部分
; **
; **--------------历史版本信息----------------------------------------------------------------------------
; ** 创建人: 陈明计
; ** 版  本: V1.0
; ** 日 期: 2003年9月3日
; ** 描 述: 原始版本
; **
; **--------------当前版本修订------------------------------------------------------------------------------
; ** 修改人: 陈明计
; ** 日 期: 2004年4月10日
; ** 描 述: 增加注释
; **
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; #define  IN_RWSEC 
; 
; #include "SYS_Config.h"  
; #include "fat.h" 
; 
; Disk_cache DiskCache[MAX_DISK_CACHES];/* 磁盘cache */
; 
; /*********************************************************************************************************
; ** 函数名称: CacheInit
; ** 功能描述: 初始化磁盘cache
; ** 输   入: 无
; ** 输   出: 无
; ** 全局变量: DiskCache
; ** 调用模块: 无
; ** 作   者: 陈明计
; ** 日   期: 2003年9月3日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人: 陈明计
; ** 日   期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; void CacheInit(void)
; {
;     INT16U i ;
;     
;     for(i=0;i<MAX_DISK_CACHES;i++)
	clr R10
	clr R11
	xjmp L5
L2:
	ldi R16,520
	ldi R17,2
	movw R18,R10
	xcall empy16s
	movw R30,R16
	ldi R24,<_DiskCache
	ldi R25,>_DiskCache
	add R30,R24
	adc R31,R25
	ldi R24,255
	std z+0,R24
	ldi R16,520
	ldi R17,2
	movw R18,R10
	xcall empy16s
	movw R30,R16
	ldi R24,<_DiskCache+1
	ldi R25,>_DiskCache+1
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	ldi R16,520
	ldi R17,2
	movw R18,R10
	xcall empy16s
	movw R30,R16
	ldi R24,<_DiskCache+2
	ldi R25,>_DiskCache+2
	add R30,R24
	adc R31,R25
	clr R2
	clr R3
	std z+1,R3
	std z+0,R2
	ldi R16,520
	ldi R17,2
	movw R18,R10
	xcall empy16s
	movw R2,R16
	ldi R24,<_DiskCache+2
	ldi R25,>_DiskCache+2
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	std z+1,R25
	std z+0,R24
	ldi R16,520
	ldi R17,2
	movw R18,R10
	xcall empy16s
	movw R30,R16
	ldi R24,<_DiskCache+4
	ldi R25,>_DiskCache+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
L3:
	movw R24,R10
	adiw R24,1
	movw R10,R24
L5:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brsh X0
	xjmp L2
X0:
L1:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
;          Index -> y+0
;          Drive -> R16
	.even
_CloseSec::
	st -y,r19
	st -y,r18
;     {
;         DiskCache[i].Drive=EMPTY_DRIVE ;/* cache空闲 */
;         DiskCache[i].Flag=0 ;           /* 扇区无需回写 */
;         DiskCache[i].RW_ID=0 ;          /* 访问纪录 */
;         DiskCache[i].RW_ID--;           /* 访问纪录 */
;         DiskCache[i].SecIndex=0 ;       /* 缓冲的扇区号  */
;     }
; }
; 
; 
; /*********************************************************************************************************
; ** 函数名称: CloseSec
; ** 功能描述: 解锁指定cache(允许切换出内存)
; ** 输   入: Drive:逻辑驱动器号
; **           Index:缓冲的扇区号
; ** 输   出: 无
; ** 全局变量: DiskCache
; ** 调用模块: 无
; ** 作   者: 陈明计
; ** 日   期: 2003年9月3日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人: 陈明计
; ** 日   期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; void CloseSec(INT8U Drive,INT32U Index)
; {
;     Drive=Drive ;
;     Index=Index ;
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L10:
	adiw R28,2
	.dbline 0 ; func end
	ret
;             Pa -> y+0
;           Disk -> R20,R21
;          Index -> R22,R23
	.even
_CacheWriteBack2::
	xcall push_gset2
	movw R22,R16
	sbiw R28,11
; }
; 
; /*********************************************************************************************************
; ** 函数名称: CacheWriteBack2
; ** 功能描述: 把指定扇区写回逻辑盘
; ** 输   入: Index:cache索引
; ** 输   出: 无
; ** 全局变量: DiskCache
; ** 调用模块: GetDiskInfo
; ** 作   者: 陈明计
; ** 日   期: 2003年9月3日
; **-------------------------------------------------------------------------------------------------------
; ** 修 改 人: 陈明计
; ** 日   期: 2004年4月10日
; **------------------------------------------------------------------------------------------------------
; ********************************************************************************************************/
; void CacheWriteBack2(INT16U Index)
; {
;     Disk_RW_Parameter Pa ;
;     Disk_Info *Disk ;
;     
;     Disk=GetDiskInfo(DiskCache[Index].Drive);// 获取逻辑盘信息
	ldi R16,520
	ldi R17,2
	movw R18,R22
	xcall empy16s
	movw R30,R16
	ldi R24,<_DiskCache
	ldi R25,>_DiskCache
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _GetDiskInfo
	movw R20,R16
;     if(Disk!=NULL)
	cpi R16,0
	cpc R16,R17
	brne X3
	xjmp L12
X3:
X1:
;     if(Disk->DiskCommand!=NULL)
	movw R30,R20
	ldd R2,z+44
	ldd R3,z+45
	tst R2
	brne X2
	tst R3
	brne X4
	xjmp L14
X4:
X2:
;     {
;         DiskCache[Index].Flag&=~CACHE_WRITED ;// 不再需要回写

⌨️ 快捷键说明

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