📄 nand_flash.asm
字号:
.INCLUDE spce.inc
.DEFINE NAND_Flash_CE 0x8000 //Flash使能信号(IOB15)
.DEFINE NAND_Flash_RE 0x4000 //读信号 (IOB14)
.DEFINE NAND_Flash_buy 0x2000 //芯片忙信号 (IOB13)
.DEFINE NAND_Flash_CLE 0x1000 //命令锁存信号 (IOB12)
.DEFINE NAND_Flash_ALE 0x0800 //地址锁存信号 (IOB11)
.DEFINE NAND_Flash_WE 0x0400 //Flash写信号 (IOB10)
.DEFINE Flash_Port P_IOA_Data
.DEFINE Flash_Port_B P_IOA_Buffer
.DEFINE Flash_Port_Dir P_IOA_Dir
.CODE
.PUBLIC _Writ_Flash_ZL
_Writ_Flash_ZL:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
r1 = [Flash_Port_Dir]
r1 |= 0x00ff
[Flash_Port_Dir] = r1 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~NAND_Flash_ALE
r1 |= (NAND_Flash_RE + NAND_Flash_WE + NAND_Flash_CLE)
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = [bp + 3]
r2 &= 0xff
r1 |= r2//[bp + 3]
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Writ_Flash_Addr
_Writ_Flash_Addr:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
r1 = [Flash_Port_Dir]
r1 |= 0x00ff
[Flash_Port_Dir] = r1 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~NAND_Flash_CLE
r1 |= (NAND_Flash_RE + NAND_Flash_WE + NAND_Flash_ALE)
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = [bp+3]
r3 = r2 &0xff
r1 |= r3
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = r2 lsr 4
r2 = r2 lsr 4
r1 |= r2
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = [bp+4]
r3 = r2 &0xff
r1 |= r3
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = r2 lsr 4
r2 = r2 lsr 4
r1 |= r2
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_ALE
[Flash_Port_B] = r1
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Writ_Flash_Addr_A
_Writ_Flash_Addr_A:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
r1 = [Flash_Port_Dir]
r1 |= 0x00ff
[Flash_Port_Dir] = r1 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~NAND_Flash_CLE
r1 |= (NAND_Flash_RE + NAND_Flash_WE + NAND_Flash_ALE)
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = [bp+3]
r2 = r2 & 0xff
r1 |= r2
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_ALE
[Flash_Port_B] = r1
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Writ_Flash_Addr_B
_Writ_Flash_Addr_B:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
r1 = [Flash_Port_Dir]
r1 |= 0x00ff
[Flash_Port_Dir] = r1 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~NAND_Flash_CLE
r1 |= (NAND_Flash_RE + NAND_Flash_WE + NAND_Flash_ALE)
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = [bp+3]
r2 = r2 lsr 4
r2 = r2 lsr 4
r1 |= r2
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = [bp+4]
r3 = r2 & 0xff
r1 |= r3
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= 0xff00
r2 = r2 lsr 4
r2 = r2 lsr 4
r1 |= r2
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_ALE
[Flash_Port_B] = r1
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Writ_Flash_Data_start
_Writ_Flash_Data_start:
r1 = [Flash_Port_Dir]
r1 |= 0x00ff
[Flash_Port_Dir] = r1 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~(NAND_Flash_CLE + NAND_Flash_ALE)
r1 |= (NAND_Flash_RE + NAND_Flash_WE)
retf
.PUBLIC _Writ_Flash_Data
_Writ_Flash_Data:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
r1 = [Flash_Port_B]
r1 &= 0xff00
r1 |= [bp + 3]
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Read_Flash_Data_start
_Read_Flash_Data_start:
r1 = [Flash_Port_Dir]
r1 &= 0xff00
[Flash_Port_Dir] = r1 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~(NAND_Flash_ALE + NAND_Flash_CLE)
r1 |= NAND_Flash_WE + NAND_Flash_RE
[Flash_Port_B] = r1
retf
.PUBLIC _Read_Flash_Data
_Read_Flash_Data:
r1 = [Flash_Port_B]
r1 &= ~NAND_Flash_RE
[Flash_Port_B] = r1
r2 = [Flash_Port]
r1 |= NAND_Flash_RE
[Flash_Port_B] = r1
r1 = r2 & 0xff
retf
.PUBLIC _Read_Flash_State
_Read_Flash_State:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
r2 = [Flash_Port_Dir]
r2 |= 0x00ff
[Flash_Port_Dir] = r2 //切换数据总线模式
r1 = [Flash_Port_B]
r1 &= ~(NAND_Flash_CE + NAND_Flash_ALE)
r1 |= (NAND_Flash_RE + NAND_Flash_WE + NAND_Flash_CLE)
[Flash_Port_B] = r1
r1 |= [bp + 3]
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r2 &= 0xff00
[Flash_Port_Dir] = r2 //切换数据总线模式
r1 &= ~NAND_Flash_CLE + NAND_Flash_RE
[Flash_Port_B] = r1
r2 = [Flash_Port]
r1 |= NAND_Flash_RE
[Flash_Port_B] = r1
r1 |= NAND_Flash_CE
[Flash_Port_B] = r1
r1 = r2 & 0xff
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Writ_Flash_Page
_Writ_Flash_Page:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
call _Writ_Flash_Data_start
r4 = [bp + 3] //数据指针
r3 = [bp + 4]
Writ_A: r2 = [r4 ++]
r1 = [Flash_Port_B]
r1 &= 0xff00
r1 |= r2
[Flash_Port_B] = r1
r1 &= ~NAND_Flash_WE
[Flash_Port_B] = r1
r1 |= NAND_Flash_WE
[Flash_Port_B] = r1
r3 -= 1
jnz Writ_A
pop bp,bp from [sp] //CPU环境恢复
retf
.PUBLIC _Read_Flash_Page
_Read_Flash_Page:
push bp,bp to [sp] //保存CPU环境
bp = sp +1
call _Read_Flash_Data_start
Read_A: r1 = [Flash_Port] //等数据准备好
r1 &= NAND_Flash_buy
jz Read_A
r4 = [bp + 3] //数据指针
r3 = [bp + 4]
Read_B: call _Read_Flash_Data
[r4 ++] = r1
r3 -= 1
jnz Read_B
pop bp,bp from [sp] //CPU环境恢复
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -