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

📄 mt28f008_driver.s

📁 flash AM29LV160 的驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	BC
	PUSH	BC
	DEC	SP
;   91		UINT i;
;   92		volatile UINT8 *ucPtr;
;   93		UINT8 *ucSrcAddr;
;   94		UINT8 ucStatus;
;   95	
;   96		ucSrcAddr=(UINT8*)pbuf;
.LINE 96

	LD	BC,(IX+9)
	LD	(IX+-7),BC
;   97		ucPtr = ( UINT8 * ) paddr;
.LINE 97

	LD	BC,(IX+6)
	LD	(IX+-3),BC
	LD	BC,0
	LD	(IX+-10),BC
;   98		for(i=0; i < num_bytes; i++, ucPtr++) 
.LINE 98

	JR	L_32
L_30:
;   99		{
;  100			// Write set up 
;  101			
;  102			*ucPtr=MT28F008_RESET;
.LINE 102

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  103			*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 103

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  104			*ucPtr=MT28F008_WRITE_SETUP;
.LINE 104

	LD	IY,(IX+-3)
	LD	A,64
	LD	(IY),A
;  105			*ucPtr=*ucSrcAddr;
	LD	IY,(IX+-3)
.LINE 105

	LD	HL,(IX+-7)
	LD	A,(HL)
	LD	(IY),A
;  106			do
L_20:
.LINE 106

;  107			{
;  108				ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 108

	LD	IY,(IX+-3)
	LD	A,(IY)
	AND	A,248
	LD	(IX+-4),A
;  109			} while( ucStatus == MT28F008_BUSY);
.LINE 109

	LD	A,(IX+-4)
	OR	A,A
	JR	Z,L_20
;  110	
;  111			if(ucStatus != MT28F008_READY)
.LINE 111

	LD	A,(IX+-4)
	CP	A,128
	JR	Z,L_29
;  112			{	//if failed ..
;  113				//wait(ONE_SECOND);
;  114				*ucPtr=MT28F008_RESET;	// try one more time
.LINE 114

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  115				*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 115

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  116				*ucPtr=MT28F008_WRITE_SETUP;
.LINE 116

	LD	IY,(IX+-3)
	LD	A,64
	LD	(IY),A
;  117				*ucPtr=*ucSrcAddr;
	LD	IY,(IX+-3)
.LINE 117

	LD	HL,(IX+-7)
	LD	A,(HL)
	LD	(IY),A
;  118				do 
L_22:
.LINE 118

;  119				{
;  120					ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 120

	LD	IY,(IX+-3)
	LD	A,(IY)
	AND	A,248
	LD	(IX+-4),A
;  121				} while( ucStatus == MT28F008_BUSY);
.LINE 121

	LD	A,(IX+-4)
	OR	A,A
	JR	Z,L_22
;  122				if( ucStatus != MT28F008_READY) 
.LINE 122

	LD	A,(IX+-4)
	CP	A,128
	JR	Z,L_29
;  123				{
;  124					*ucPtr=MT28F008_RESET;
.LINE 124

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  125					*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 125

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  126					*ucPtr=MT28F008_READ_ARRAY;
.LINE 126

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  127	
;  128					return FlashError(ucStatus);
	LD	C,(IX+-4)
	LD	B,0
	PUSH	BC
.LINE 128

	CALL	_FlashError
	POP	BC
	JR	L_34
;  129				}
;  130			}//end 'if:failed'
L_29:
.LINE 130

;  131			ucSrcAddr++;	
.LINE 131

	LD	BC,(IX+-7)
	INC	BC
	LD	(IX+-7),BC
	LD	BC,(IX+-10)
	INC	BC
	LD	(IX+-10),BC
	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
;  132		}
L_32:
.LINE 132

	LD	BC,(IX+12)
	LD	HL,(IX+-10)
	OR	A,A
	SBC	HL,BC
	JR	C,L_30
;  133		*ucPtr=MT28F008_RESET;
.LINE 133

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  134		*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 134

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  135		*ucPtr=MT28F008_READ_ARRAY;
.LINE 135

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  136		 //Readback the data from the flash and verify with the
;  137		 //   data buffer whether they match
;  138	//	if( memcmp( (void*)(ucPtr-num_bytes), (void*)pbuf, num_bytes ) ) //doesn't match?
;  139	//		gucReadbackFailed = 1 ; //set the flag saying that read back failed
;  140	
;  141		return num_bytes;
.LINE 141

	LD	BC,(IX+12)
	XOR	A,A
	LD	E,A
	LD	HL,BC
;  142	
;  143	}
L_34:
.LINE 143

	LD	SP,IX
	POP	IX
	RET	


;**************************** _MT28F008_Write ***************************
;Name                         Addr/Register   Size   Type
;i                                    IX-10      3   variable
;ucSrcAddr                             IX-7      3   variable
;ucStatus                              IX-4      1   variable
;ucPtr                                 IX-3      3   variable
;num_bytes                            IX+12      3   parameter
;pbuf                                  IX+9      3   parameter
;paddr                                 IX+6      3   parameter


; Stack Frame Size: 25 (bytes)
;       Spill Code: 0 (instruction)


.ENDFUNC "MT28F008_Write",143,"_MT28F008_Write"
;  144	
;  145	INT MT28F008_Erase( void *paddr, UINT32 num_bytes )
;  146	#ifdef _IAR_CODE
;  147	@ "DATA_PER_RAM"
;  148	#endif
;  149	{
_MT28F008_Erase:
.DEFINE "_MT28F008_Erase"

.VALUE _MT28F008_Erase

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "MT28F008_Erase",149,"_MT28F008_Erase"

.LINE 149

.DEFINE "paddr"

.CLASS 65

.VALUE 6

.TYPE 33

.ENDEF

.DEFINE "num_bytes"

.CLASS 65

.VALUE 9

.TYPE 15

.ENDEF

.DEFINE "ucPtr"

.CLASS 65

.VALUE -3

.TYPE 44

.ENDEF

.DEFINE "ucStatus"

.CLASS 65

.VALUE -4

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	DEC	SP
;  150		UINT8 ucStatus;
;  151		UINT8 *ucPtr= (UINT8*)paddr;
.LINE 151

	LD	BC,(IX+6)
	LD	(IX+-3),BC
;  152	
;  153		*ucPtr=MT28F008_RESET;
.LINE 153

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  154		*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 154

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  155		*ucPtr=MT28F008_ERASE_SETUP;
.LINE 155

	LD	IY,(IX+-3)
	LD	A,32
	LD	(IY),A
;  156		*ucPtr=MT28F008_ERASE_CONFIRM;
.LINE 156

	LD	IY,(IX+-3)
	LD	A,208
	LD	(IY),A
;  157		do
L_35:
.LINE 157

;  158		{
;  159			ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 159

	LD	IY,(IX+-3)
	LD	A,(IY)
	AND	A,248
	LD	(IX+-4),A
;  160		} while(ucStatus == MT28F008_BUSY);
.LINE 160

	LD	A,(IX+-4)
	OR	A,A
	JR	Z,L_35
;  161	
;  162		if(ucStatus != MT28F008_READY)// if failed ...
.LINE 162

	LD	A,(IX+-4)
	CP	A,128
	JR	Z,L_43
;  163		{			
;  164			//wait(ONE_SECOND);
;  165			*ucPtr=MT28F008_RESET;	// try one more time
.LINE 165

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  166			*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 166

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  167			*ucPtr=MT28F008_ERASE_SETUP;
.LINE 167

	LD	IY,(IX+-3)
	LD	A,32
	LD	(IY),A
;  168			*ucPtr=MT28F008_ERASE_CONFIRM;
.LINE 168

	LD	IY,(IX+-3)
	LD	A,208
	LD	(IY),A
;  169		
;  170			do
L_37:
.LINE 170

;  171			{
;  172				ucStatus = (UINT8)(MT28F008_STATUS_BITS & *ucPtr);
.LINE 172

	LD	IY,(IX+-3)
	LD	A,(IY)
	AND	A,248
	LD	(IX+-4),A
;  173			} while(ucStatus == MT28F008_BUSY);
.LINE 173

	LD	A,(IX+-4)
	OR	A,A
	JR	Z,L_37
;  174	
;  175			if(ucStatus != MT28F008_READY) 
.LINE 175

	LD	A,(IX+-4)
	CP	A,128
	JR	Z,L_43
;  176			{
;  177				*ucPtr=MT28F008_RESET;
.LINE 177

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  178				*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 178

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  179				*ucPtr=MT28F008_READ_ARRAY;
.LINE 179

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  180				return FlashError(ucStatus);
	LD	C,(IX+-4)
	LD	B,0
	PUSH	BC
.LINE 180

	CALL	_FlashError
	POP	BC
	JR	L_44
;  181			}
;  182		}
L_43:
.LINE 182

;  183	
;  184		*ucPtr=MT28F008_RESET;
.LINE 184

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  185		*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 185

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;  186		*ucPtr=MT28F008_READ_ARRAY;
.LINE 186

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;  187		
;  188		return SUCCESS;
.LINE 188

	LD	HL,0
;  189	}
L_44:
.LINE 189

	LD	SP,IX
	POP	IX
	RET	


;**************************** _MT28F008_Erase ***************************
;Name                         Addr/Register   Size   Type
;ucStatus                              IX-4      1   variable
;ucPtr                                 IX-3      3   variable
;num_bytes                             IX+9      4   parameter
;paddr                                 IX+6      3   parameter


; Stack Frame Size: 19 (bytes)
;       Spill Code: 0 (instruction)


.ENDFUNC "MT28F008_Erase",189,"_MT28F008_Erase"
;  190	
;  191	INT MT28F008_Close( void )
;  192	#ifdef _IAR_CODE
;  193	@ "DATA_PER_RAM"
;  194	#endif
;  195	{
_MT28F008_Close:
.DEFINE "_MT28F008_Close"

.VALUE _MT28F008_Close

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "MT28F008_Close",195,"_MT28F008_Close"

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
;  196		return SUCCESS ;
.LINE 196

	LD	HL,0
;  197	}
.LINE 197

	LD	SP,IX
	POP	IX
	RET	


;**************************** _MT28F008_Close ***************************
;Name                         Addr/Register   Size   Type


; Stack Frame Size: 6 (bytes)
;       Spill Code: 0 (instruction)


.ENDFUNC "MT28F008_Close",197,"_MT28F008_Close"
	XDEF _MT28F008_Close
	XDEF _MT28F008_Erase
	XDEF _MT28F008_Write
	XDEF _MT28F008_Read
	XDEF _MT28F008_Init
	XDEF _FlashError
	XDEF _gucReadbackFailed
	END

⌨️ 快捷键说明

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