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

📄 memory.asm

📁 合众达 seed dsp5416 mem
💻 ASM
📖 第 1 页 / 共 2 页
字号:
* 入口参数:A	  ---- 地址addr,Amsb~A0					*
*		       Amsb:	A16,Flash用SST39VF200时				*
*		       		A17,Flash用SST39VF400时(缺省)			*
*		      		A18,Flash用SST39VF800时				*
*		       Flash定位在程序储存空间80000H~9FFFFH/BFFFFH(缺省)/FFFFFH	*
*		       地址addr为从0开始的偏移地址,而非Flash的绝对地址		*
*          (SP+n) ---- 数据缓冲区起始地址ptr,如果是.far_mode模式则n为2,否则n为1	*
*          (SP+m) ---- 数据长度lrngth,如果是.far_mode模式则m为3,否则m为2	*
* 出口参数:A	  ---- 写入标志							*
*		       未写入:00H						*
*		       已写入:01H						*
* 资源使用:B,AR0								*
*										*
*********************************************************************************
_flash_writem:	PSHM SWWSR            ;保存当前的系统等待时间
				LDM SWWSR,B
				OR #03FH,B          ;设置系统为14个等待
				STLM B,SWWSR
				
				.if	__far_mode
				LDU	2H,B
				.else
				LDU	1H,B
				.endif
				STLM	B,AR0			; AR0 ← 数据起始地址
writem_loop:	PSHM	AL			; 保存地址
				PSHM	AH
				.if	__far_mode
				FRAME	-2
				LDU	*AR0+,B			; 取数据
				STL	B,0H			; 传递数据
				FCALL	_flash_writes
				RC	AEQ			; 未写入,则A = 0,返回
				FRAME	2
				POPM	AH
				POPM	AL
				ADD	#ONE,A			; Flash地址+1
				ADDM	#-1,3H
				CMPM	3H,#ZERO
				.else
				FRAME	-1
				LDU	*AR0+,B			; 取数据
				STL	B,0H			; 传递数据
				CALL	_flash_writes
				RC	AEQ			; 未写入,则A = 0,返回
				FRAME	1
				POPM	AH
				POPM	AL
				ADD	#ONE,A			; Flash地址+1
				ADDM	#-1,2H
				CMPM	2H,#ZERO
				.endif
				BC	writem_loop,NTC
				LD	#1,A			; 已写入,则A = 1,返回
				
				POPM SWWSR
				.if	__far_mode
				FRET
				.else
				RET
				.endif
		
*********************************************************************************
*										*
* 函数定义:uint _flash_reads(ulong addr)			   		*
* 功    能:从addr指定的Flash单元中读出一个数据					*
*										*
* 入口参数:A	  ---- 地址addr,Amsb~A0					*
*		       Amsb:	A16,Flash用SST39VF200时				*
*		       		A17,Flash用SST39VF400时(缺省)			*
*		      		A18,Flash用SST39VF800时				*
*		       Flash定位在程序储存空间80000H~9FFFFH/BFFFFH(缺省)/FFFFFH	*
*		       地址addr为从0开始的偏移地址,而非Flash的绝对地址		*
* 出口参数:A	  ---- 读出数据							*
* 资源使用:A									*
*										*
*********************************************************************************
_flash_reads:	PSHM SWWSR            ;保存当前的系统等待时间
				LDM SWWSR,B
				OR #03FH,B          ;设置系统为14个等待
				STLM B,SWWSR
				
				OR	#Flash_base,16,A
				READA	*(AL)
				POPM SWWSR
				
				.if	__far_mode
				FRET
				.else
				RET
				.endif
		
*********************************************************************************
*										*
* 函数定义:void _flash_readm(ulong addr, uint * ptr, uint length)   		*
* 功    能:从addr指定的Flash单元中读出length数据到ptr所指向的数据缓冲区中		*
*										*
* 入口参数:A	  ---- 地址addr,Amsb~A0					*
*		       Amsb:	A16,Flash用SST39VF200时				*
*		       		A17,Flash用SST39VF400时(缺省)			*
*		      		A18,Flash用SST39VF800时				*
*		       Flash定位在程序储存空间80000H~9FFFFH/BFFFFH(缺省)/FFFFFH	*
*		       地址addr为从0开始的偏移地址,而非Flash的绝对地址		*
*          (SP+n) ---- 数据缓冲区起始地址ptr,如果是.far_mode模式则n为2,否则n为1	*
*          (SP+m) ---- 数据长度length,如果是.far_mode模式则m为3,否则m为2	*
* 出口参数:A	  ---- 读出数据							*
* 资源使用:B,AR0								*
*										*
*********************************************************************************
_flash_readm:	PSHM SWWSR            ;保存当前的系统等待时间
				LDM SWWSR,B
				OR #03FH,B          ;设置系统为14个等待
				STLM B,SWWSR
				
				OR	#Flash_base,16,A
				.if	__far_mode
				LDU	2H,B
				.else
				LDU	1H,B
				.endif
				STLM	B,AR0			; AR0 ← 数据起始地址
				
readm_loop:		READA	*AR0+
				ADD	#ONE,A			; Flash地址+1
				.if	__far_mode
				ADDM	#-1,3H
				CMPM	3H,#ZERO
				.else
				ADDM	#-1,2H
				CMPM	2H,#ZERO
				.endif
				BC	readm_loop,NTC
				
				POPM SWWSR
				.if	__far_mode
				FRET
				.else
				RET
				.endif
*********************************************************************************
*																				*
* 函数定义:uint _progm_reads(ulong addr)			   							*
* 功    能:从addr指定的Flash单元中读出一个数据									*
*																				*
* 入口参数:A	  ---- 地址addr													*		      	
* 出口参数:A	  ---- 读出数据													*
* 资源使用:A																	*
*																				*
*********************************************************************************								
_progm_reads:	PSHM SWWSR            ;保存当前的系统等待时间
				LDM SWWSR,B
				OR #03FH,B          ;设置系统为14个等待
				STLM B,SWWSR
				READA	*(AL)
				POPM SWWSR
				.if	__far_mode
				FRET
				.else
				RET
				.endif
				
*************************************************************************************
*																					*
* 函数定义:void _progm_readm(ulong addr, uint * ptr, uint length)   				*
* 功    能:从addr指定的程序空间中读出length数据到ptr所指向的数据缓冲区中			*
*																					*
* 入口参数:A	  ---- 地址addr,程序空间的地址										*
*          (SP+n) ---- 数据缓冲区起始地址ptr,如果是.far_mode模式则n为2,否则n为1	*
*          (SP+m) ---- 数据长度length,如果是.far_mode模式则m为3,否则m为2			*
* 出口参数:A	  ---- 读出数据														*
* 资源使用:B,AR0																	*
*																					*
*************************************************************************************
_progm_readm:	.if	__far_mode         ;获取数据缓冲区的首址
				LDU	2H,B
				.else
				LDU	1H,B
				.endif
				STLM	B,AR0		   ; AR0 ← 数据起始地址
		
preadm_loop:	READA	*AR0+
				ADD	#ONE,A			   ; 程序空间地址+1
				.if	__far_mode
				ADDM	#-1,3H		   ; 数据区长度-1
				CMPM	3H,#ZERO
				.else
				ADDM	#-1,2H
				CMPM	2H,#ZERO     
				.endif
				BC	preadm_loop,NTC    ; 操作是否完成
				
				.if	__far_mode
				FRET
				.else
				RET
				.endif
*************************************************************************************
*																					*
* 函数定义:void _progm_writem(ulong addr, uint * ptr, uint length)   				*
* 功    能:从ptr所指向的数据缓冲区中将length长的数据写入addr指定的程序空间中		*
*																					*
* 入口参数:A	  ---- 地址addr,程序空间的地址										*
*          (SP+n) ---- 数据缓冲区起始地址ptr,如果是.far_mode模式则n为2,否则n为1	*
*          (SP+m) ---- 数据长度length,如果是.far_mode模式则m为3,否则m为2			*
* 出口参数:A	  ---- 读出数据														*
* 资源使用:B,AR0																	*
*																					*
*************************************************************************************						
_progm_writem:	.if	__far_mode         ;获取数据缓冲区的首址
				LDU	2H,B
				.else
				LDU	1H,B
				.endif
				STLM	B,AR0		   ; AR0 ← 数据起始地址
		
pwritem_loop:	WRITA	*AR0+
				ADD	#ONE,A			   ; 程序空间地址+1
				.if	__far_mode
				ADDM	#-1,3H		   ; 数据区长度-1
				CMPM	3H,#ZERO
				.else
				ADDM	#-1,2H
				CMPM	2H,#ZERO     
				.endif
				BC	pwritem_loop,NTC    ; 操作是否完成
				
				.if	__far_mode
				FRET
				.else
				RET
				.endif
		.end

⌨️ 快捷键说明

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