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

📄 flash.asm

📁 凌阳单片机多命令语音识别程序,完成分时训练,存储语音特征模型(最多5次,第5次后自动覆盖最开始的特征模型).
💻 ASM
字号:

//============================================================
// 文件名称:Flash.asm
// 实现功能: SPCE061 32K flash 的读写
// 日期: 	 2003/6/9
//============================================================


.INCLUDE hardware.inc

.DEFINE C_FLASH_SIZE			0x8000
.DEFINE C_FLASH_BLOCK_SIZE		0x100		//256个字节
.DEFINE C_FLASH_MATCH			0xAAAA		//识别字
.DEFINE C_FLASH_PAGE_ERASE		0x5511		//命令字_擦除一页
.DEFINE C_FLASH_MASS_ERASE		0x5522		//命令字_整体擦除
.DEFINE C_FLASH_1WORD_PGM		0x5533		//命令字_写一个字
.DEFINE C_FLASH_SEQUENT_PGM		0x5544		//命令字_写多个字
.DEFINE C_FLASH_MAIN_BLOCK		0x5555
.DEFINE C_FLASH_INFORM_BLOCK	0x5566

.DEFINE P_Flash_Ctrl  0x7555				//控制FLASH单元

.CODE
//============================================================
//函数: F_FlashWrite1Word()
//语法:void F_FlashWrite1Word(int addr,int Value)
//描述:写一个字到FLASH中
//参数:1、被写数据的存储地址
//      2、被写数据
//返回:无
//============================================================
.PUBLIC _F_FlashWrite1Word
_F_FlashWrite1Word:	 .proc 
	push bp to [sp]
	
	bp = sp+1
	r1 = C_FLASH_MATCH				//AAAA
	[P_Flash_Ctrl] = r1
	r1 = C_FLASH_1WORD_PGM			//5533
	[P_Flash_Ctrl] = r1
	r1 =  [bp+3]					//flash address
	r2 =  [bp+4]					//data
	[r1] = r2
	
	pop bp from [sp]
	retf
	.ENDP

//============================================================
//函数:F_FlashWrite()
//语法:F_FlashWrite(int sector,int &num,int size)
//描述:顺序写多个字
//参数:1、被写数据的起始地址 
//      2、被写数据 
//      3、写数据的数量
//返回:无
//============================================================ 
.PUBLIC _F_FlashWrite
_F_FlashWrite: .proc 
	push bp to [sp]
	
	bp = sp+1
	r1 = [bp+3]						//flash base address
	r2 = [bp+4]						//data
	r3 = [bp+5]						//多个字节	
	r4 = C_FLASH_MATCH				//AAAA
	[P_Flash_Ctrl] = r4
L_FlashWriteLoop:
	r4 = C_FLASH_SEQUENT_PGM		//5544
	[P_Flash_Ctrl] = r4
	r4 = [r2++]
	[r1++] = r4

	r3 -= 1
	jnz L_FlashWriteLoop
	[P_Flash_Ctrl] = r3				//写结束
	
	pop bp from [sp]
	retf
	.ENDP


// ===========================================================
//函数:F_FlashErase()
//语法:void F_FlashErase(sector)
//描述:擦除256字节
//参数: 擦除页的起始地址
//返回:无
// ===========================================================
.PUBLIC _F_FlashErase
_F_FlashErase: .proc 
	push bp to [sp]
	
	bp = sp + 1
	r1 = C_FLASH_MATCH				//AAAA
	[P_Flash_Ctrl] = r1
	r1 = C_FLASH_PAGE_ERASE			//5511
	[P_Flash_Ctrl] = r1
	r1 = [bp+3]						//擦除一页
	[r1] = r1

	pop bp from [sp]
	retf
	.ENDP
    .END

⌨️ 快捷键说明

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