flash.asm

来自「基于凌阳GPCE061」· 汇编 代码 · 共 146 行

ASM
146
字号
.define 	C_D12CS		   	0x0100//IOB8
.define 	C_RB    		0x0200//IOB9
.define     C_CLE           0x0800//IOB11
.define 	C_ALE  		   	0x1000//IOB12
.define 	C_WE      		0x2000//IOB13
.define 	C_RE      		0x4000//IOB14
.define 	C_CE      		0x8000//IOB15
M_WriteToFlash: .MACRO
		R2&=~C_WE
		[P_IOB_Buffer]=R2
		R3&=0x00FF
		R3|=R1
		[P_IOA_Buffer]=R3 
		R2|=C_WE
		[P_IOB_Buffer]=R2  
		.ENDM
M_ReadFromFlash:  .MACRO
		R2&=~C_RE
		[P_IOB_Buffer]=R2
		R1=[P_IOA_Data]
		R1=[P_IOA_Data]
		R2|=C_RE
		[P_IOB_Buffer]=R2
		.ENDM
M_ReadRB:		  .MACRO
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
	    NOP
L_WaitRB#:
		R1=[P_IOB_Data]
		R1&=C_RB
		JZ L_WaitRB#
		.ENDM		
.PUBLIC _R_TESTBuffer		
.IRAM
_R_TESTBuffer:	.DW		1056 DUP(?)
R_RowAddr1:		.DW 	0
R_RowAddr2:		.DW 	0
R_ColAddr0:		.DW		0
R_RDCount0:	    .DW		0
R_BufPoint:		.DW		0
.include spce.inc
.code
.PUBLIC _SP_Flash_Initial;
.PUBLIC _SP_Flash_ReadBuffer;
.PUBLIC _SP_Flash_WritePage;
.PUBLIC _SP_Flash_EraseBlock;
.PUBLIC _SP_Flash_ReadType;
.PUBLIC _SP_ClearWatchDog;
.PUBLIC _SP_Flash_ReadStatus
_SP_Flash_Initial:
		R1=C_D12CS+C_ALE+C_WE+C_RE+C_CE
		[P_IOB_Attrib]=R1
		[P_IOB_Dir]=R1
		R1=C_D12CS+C_CE+C_RE+C_WE+C_RB
		[P_IOB_Data]=R1
		
		R1=0xFF00
		[P_IOA_Attrib]=R1
		[P_IOA_Dir]=R1
		[P_IOA_Data]=R1
		R1=0X08
		[P_SystemClock]=R1
		RETF
		
_SP_Flash_EraseBlock:
		PUSH BP,BP TO [SP]
		BP = SP
		PUSH R1,R4 TO [SP]
		R1=[BP+4]
		R2=[BP+5]
		CALL F_SetAddress
		[R_RowAddr2]=R3
		R2&=0xFFC0
		[R_RowAddr1]=R2

		R2=[P_IOB_Buffer]
		R3=[P_IOA_Buffer]
		R2&=~C_CE
		[P_IOB_Buffer]=R2 //CE=0
		R2|=C_CLE
		[P_IOB_Buffer]=R2
		
		R1=0x6000		
		M_WriteToFlash//Write Byte 00H
		
		R2&=~C_CLE		
		[P_IOB_Buffer]=R2		
		R2|=C_ALE
		[P_IOB_Buffer]=R2
				
		R1=[R_RowAddr1]
		R1=R1 LSL 4
		R1=R1 LSL 4
		R1&=0xFF00
		M_WriteToFlash//Write row addr1
		
		R1=[R_RowAddr1]
		R1&=0xFF00
		M_WriteToFlash//Write row addr2
		
		R1=[R_RowAddr2]
		R1&=0xFF00
		M_WriteToFlash//Write row addr3
		
		R2&=~C_ALE
		[P_IOB_Buffer]=R2

		R2|=C_CLE
		[P_IOB_Buffer]=R2
		
		R1=0xD000		
		M_WriteToFlash//Write Byte 10H
		
		R2&=~C_CLE		
		[P_IOB_Buffer]=R2		

//		M_ReadRB
		
		R2|=C_CE
		[P_IOB_Buffer]=R2			
		POP  R1,R4 FROM [SP]
		POP  BP,BP FROM [SP]
		RETF
//-------------------------------------------------------------------------//
//		Function Name	:		_SP_Flash_WritePage
//				Input	:		R_Address,R_BufPoint
//				OutPut	:		R_BufPoint
//			  

⌨️ 快捷键说明

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