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

📄 nand_flash.asm

📁 基于SPMC75的NNAD_Flash K9F1208的驱动程式序,对一些需要存海量数据的单片机应用场合有用.
💻 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 + -