📄 flash.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
//功能描述: 写一个字到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
//功能描述: 顺序写多个字
//入口参数: 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
//功能描述: 擦除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 + -