📄 flash.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 + -