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

📄 flash.asm

📁 SACM_D10 for SPCE061A.rar,凌阳单片机SPCE061A的语音编码资料
💻 ASM
字号:
//========================================================
//	文件名称:	Flash.asm
//	功能描述:	操作SPCE061A内部Flash的函数集
//	维护记录:	2006-10-16	v1.0, by Qwerty
//========================================================
.INCLUDE SPCE061A.inc

//=========================================================================
//	全局函数声明
//=========================================================================
.PUBLIC F_Flash_Erase
.PUBLIC F_Flash_WriteWord
.PUBLIC F_Flash_Write
.PUBLIC F_Flash_ReadWord
.PUBLIC F_Flash_Read

.PUBLIC _Flash_Erase
.PUBLIC _Flash_WriteWord
.PUBLIC _Flash_Write
.PUBLIC _Flash_ReadWord
.PUBLIC _Flash_Read

//=========================================================================
//	常量和助记符定义
//=========================================================================
.DEFINE C_FLASH_MATCH			0xAAAA
.DEFINE C_FLASH_PAGE_ERASE		0x5511		// erase 1 page
.DEFINE C_FLASH_PROGRAM			0x5533		// write 1 word 
.DEFINE C_FLASH_SEQ_PROGRAM		0x5544		// write sequential word 
.DEFINE	C_FLASH_SEQ_STOP		0xFFFF		// Stop sequential program

.CODE
//======================================================
// 函数名称:	Flash_Erase
// C调用:		void Flash_Erase(unsigned int Addr);
// 汇编调用:	F_Flash_Erase
// 实现功能:   擦除一页数据
// 入口参数:	Addr(R1):	待擦除页中的任一地址
// 出口参数:	无
// 破坏寄存器:	无
//======================================================
_Flash_Erase:
	r1 = sp + 3
	r1 = [r1]
F_Flash_Erase:
	push r1, r2 to [sp]
	r2 = C_FLASH_MATCH				
	[P_Flash_Ctrl] = r2
	r2 = C_FLASH_PAGE_ERASE			
	[P_Flash_Ctrl] = r2	
	[r1] = r2
	pop r1, r2 from [sp]
retf

//======================================================
// 函数名称:	Flash_WriteWord
// C调用:		void Flash_WriteWord(unsigned int Addr, unsigned int Data);
// 汇编调用:	F_Flash_WriteWord
// 实现功能:   向指定地址写入数据
// 入口参数:	Addr(R1):	目标地址
//				Data(R2):	待写入的数据
// 出口参数:	无
// 破坏寄存器:	无
//======================================================
_Flash_WriteWord:
	r1 = sp + 3
	r2 = sp + 4
	r1 = [r1]
	r2 = [r2]
F_Flash_WriteWord:
	push r1, r3 to [sp]	
	r3 = C_FLASH_MATCH
	[P_Flash_Ctrl] = r3
	r3 = C_FLASH_PROGRAM
	[P_Flash_Ctrl] = r3
	[r1] = r2
	pop r1, r3 from [sp]
retf

//======================================================
// 函数名称:	Flash_Write
// C调用:		void Flash_Write(unsigned int Addr, unsigned int *DataBuf, unsigned int Size);
// 汇编调用:	F_Flash_Write
// 实现功能:   向指定起始地址写入多个数据
// 入口参数:	Addr(R1):		目标地址
//				DataBuf(R2):	待写入数据所在的起始地址
//				Size(R3):		待写入数据数量,单位Word
// 出口参数:	无
// 破坏寄存器:	无
//======================================================
_Flash_Write:
	r1 = sp + 3
	r2 = sp + 4
	r3 = sp + 5
	r1 = [r1]
	r2 = [r2]
	r3 = [r3]
F_Flash_Write:
	push r1, r4 to [sp]
	r4 = C_FLASH_MATCH
	[P_Flash_Ctrl] = r4
?Loop:
	r4 = C_FLASH_SEQ_PROGRAM
	[P_Flash_Ctrl] = r4
	r4 = [r2++]
	[r1++] = r4
	r3 -= 1
	jnz ?Loop
	r4 = C_FLASH_SEQ_STOP
	[P_Flash_Ctrl] = r4
	pop r1, r4 from [sp]
retf

//======================================================
// 函数名称:	Flash_ReadWord
// C调用:		unsigned int Flash_ReadWord(unsigned int Addr);
// 汇编调用:	F_Flash_ReadWord
// 实现功能:   从指定地址读出1word数据
// 入口参数:	Addr(R1):	待读取数据所在的地址
// 出口参数:	R1:			读出的数据
// 破坏寄存器:	R1
//======================================================
_Flash_ReadWord:
	r1 = sp + 3
	r1 = [r1]
F_Flash_ReadWord:
	r1 = [r1]
retf

//======================================================
// 函数名称:	Flash_Read
// C调用:		void Flash_Read(unsigned int Addr, unsigned int *DataBuf, unsigned int Size);
// 汇编调用:	F_Flash_Read
// 实现功能:   从指定地址读出1word数据
// 入口参数:	Addr(R1):		待读取数据所在的起始地址
//				DataBuf(R2):	读取数据保存到的目标地址
//				Size(R3):		待读取数据的数量,单位Word
// 出口参数:	无
// 破坏寄存器:	无
//======================================================
_Flash_Read:
	r1 = sp + 3
	r2 = sp + 4
	r3 = sp + 5
	r1 = [r1]
	r2 = [r2]
	r3 = [r3]
F_Flash_Read:
	push r1, r4 to [sp]
?Loop:	
	r4 = [r1++]
	[r2++] = r4
	r3 -= 1
	jnz ?Loop
	pop r1, r4 from [sp]
retf

⌨️ 快捷键说明

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