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

📄 am29lv160_driver.s

📁 flash AM29LV160 的驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	LD	HL,(IX+-3)
	OR	A,A
	SBC	HL,BC
	JR	C,L_9
;   84	
;   85		return num_bytes ;
.LINE 85

	LD	BC,(IX+12)
	XOR	A,A
	LD	E,A
	LD	HL,BC
;   86	}
.LINE 86

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AM29LV160_Read ***************************
;Name                         Addr/Register   Size   Type
;pcaddr                                IX-9      3   variable
;pcbuf                                 IX-6      3   variable
;nbytes                                IX-3      3   variable
;num_bytes                            IX+12      3   parameter
;pbuf                                  IX+9      3   parameter
;paddr                                 IX+6      3   parameter


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


.ENDFUNC "AM29LV160_Read",86,"_AM29LV160_Read"
;   87	
;   88	INT32 AM29LV160_Write( void *paddr, void *pbuf, UINT num_bytes )
;   89	#ifdef _IAR_CODE
;   90	@ "DATA_PER_RAM"
;   91	#endif
;   92	{
_AM29LV160_Write:
.DEFINE "_AM29LV160_Write"

.VALUE _AM29LV160_Write

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "AM29LV160_Write",92,"_AM29LV160_Write"

.LINE 92

.DEFINE "paddr"

.CLASS 65

.VALUE 6

.TYPE 33

.ENDEF

.DEFINE "pbuf"

.CLASS 65

.VALUE 9

.TYPE 33

.ENDEF

.DEFINE "num_bytes"

.CLASS 65

.VALUE 12

.TYPE 14

.ENDEF

.DEFINE "buf"

.CLASS 65

.VALUE -3

.TYPE 44

.ENDEF

.DEFINE "addr"

.CLASS 65

.VALUE -6

.TYPE 44

.ENDEF

.DEFINE "nbytes"

.CLASS 65

.VALUE -9

.TYPE 14

.ENDEF

.DEFINE "base_addr"

.CLASS 65

.VALUE -12

.TYPE 44

.ENDEF

.DEFINE "result"

.CLASS 65

.VALUE -13

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LEA	IY,IX+-13
	LD	SP,IY
;   93		volatile UINT8 *addr = ( UINT8 * ) paddr ;
.LINE 93

	LD	BC,(IX+6)
	LD	(IX+-6),BC
;   94		volatile UINT8 *base_addr = ( UINT8 * ) ( ( UINT32 ) paddr & AM29LV160_MASK_BITS ) ;
.LINE 94

	LD	BC,(IX+6)
	XOR	A,A
	LD	E,A
	LD	HL,BC
	LD	BC,16711680
	XOR	A,A
	CALL	__land
	LD	(IX+-12),HL
;   95		UINT8 *buf = ( UINT8 * ) pbuf ;
.LINE 95

	LD	BC,(IX+9)
	LD	(IX+-3),BC
;   96		UINT8 result ;
;   97		UINT nbytes = 0 ;
.LINE 97

	LD	BC,0
	LD	(IX+-9),BC
	LD	(IX+-9),BC
;   98	
;   99		for( nbytes = 0 ; nbytes < num_bytes ; nbytes++ )
.LINE 99

	JR	L_23
L_21:
;  100		{
;  101			// setup the Program command for the device.
;  102			*( base_addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 102

	LD	HL,(IX+-12)
	LD	BC,2730
	ADD	HL,BC
	LD	A,170
	LD	(HL),A
;  103			*( base_addr + 0x555 ) = FLASH_CODE_55 ;
.LINE 103

	LD	HL,(IX+-12)
	LD	BC,1365
	ADD	HL,BC
	LD	A,85
	LD	(HL),A
;  104			*( base_addr + 0xAAA ) = CMD_PROGRAM ;
.LINE 104

	LD	HL,(IX+-12)
	LD	BC,2730
	ADD	HL,BC
	LD	A,160
	LD	(HL),A
;  105	
;  106			*addr = *buf ;
	LD	IY,(IX+-6)
.LINE 106

	LD	HL,(IX+-3)
	LD	A,(HL)
	LD	(IY),A
;  107	
;  108			while(1)
.LINE 108

L_17:
;  109			{
;  110				// loop till when the same data read back that means the byte is written
;  111				// onto the device.
;  112	
;  113	
;  114				result = *addr ;
.LINE 114

	LD	IY,(IX+-6)
	LD	A,(IY)
	LD	(IX+-13),A
;  115				if( result == *buf )
.LINE 115

	LD	IY,(IX+-3)
	LD	A,(IX+-13)
	CP	A,(IY)
	JR	NZ,L_17
;  116					break ;
.LINE 116

	JR	L_19
;  117			}
L_16:
.LINE 117

	JR	L_17
L_19:
;  118			
;  119			buf ++ ;
.LINE 119

	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
;  120			addr ++ ;
.LINE 120

	LD	BC,(IX+-6)
	INC	BC
	LD	(IX+-6),BC
	LD	BC,(IX+-9)
	INC	BC
	LD	(IX+-9),BC
;  121		}
L_23:
.LINE 121

	LD	BC,(IX+12)
	LD	HL,(IX+-9)
	OR	A,A
	SBC	HL,BC
	JR	C,L_21
;  122		return num_bytes;
.LINE 122

	LD	BC,(IX+12)
	XOR	A,A
	LD	E,A
	LD	HL,BC
;  123	}
.LINE 123

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AM29LV160_Write ***************************
;Name                         Addr/Register   Size   Type
;result                               IX-13      1   variable
;base_addr                            IX-12      3   variable
;nbytes                                IX-9      3   variable
;addr                                  IX-6      3   variable
;buf                                   IX-3      3   variable
;num_bytes                            IX+12      3   parameter
;pbuf                                  IX+9      3   parameter
;paddr                                 IX+6      3   parameter


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


.ENDFUNC "AM29LV160_Write",123,"_AM29LV160_Write"
;  124	
;  125	INT AM29LV160_Erase( void *paddr, UINT32 num_bytes )
;  126	#ifdef _IAR_CODE
;  127	@ "DATA_PER_RAM"
;  128	#endif
;  129	{
_AM29LV160_Erase:
.DEFINE "_AM29LV160_Erase"

.VALUE _AM29LV160_Erase

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "AM29LV160_Erase",129,"_AM29LV160_Erase"

.LINE 129

.DEFINE "paddr"

.CLASS 65

.VALUE 6

.TYPE 33

.ENDEF

.DEFINE "num_bytes"

.CLASS 65

.VALUE 9

.TYPE 15

.ENDEF

.DEFINE "addr"

.CLASS 65

.VALUE -3

.TYPE 44

.ENDEF

.DEFINE "result"

.CLASS 65

.VALUE -4

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	DEC	SP
;  130		volatile UINT8 *addr = ( UINT8 * )( ( UINT32 ) paddr & AM29LV160_MASK_BITS ) ;
.LINE 130

	LD	BC,(IX+6)
	XOR	A,A
	LD	E,A
	LD	HL,BC
	LD	BC,16711680
	XOR	A,A
	CALL	__land
	LD	(IX+-3),HL
;  131		UINT8 result ;
;  132	
;  133		// setup the Sector Erase command
;  134		*( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 134

	LD	HL,(IX+-3)
	LD	BC,2730
	ADD	HL,BC
	LD	A,170
	LD	(HL),A
;  135		*( addr + 0x555 ) = FLASH_CODE_55 ;
.LINE 135

	LD	HL,(IX+-3)
	LD	BC,1365
	ADD	HL,BC
	LD	A,85
	LD	(HL),A
;  136		*( addr + 0xAAA ) = CMD_ERASE_SETUP ;
.LINE 136

	LD	HL,(IX+-3)
	LD	BC,2730
	ADD	HL,BC
	LD	A,128
	LD	(HL),A
;  137	
;  138		*( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 138

	LD	HL,(IX+-3)
	ADD	HL,BC
	LD	A,170
	LD	(HL),A
;  139		*( addr + 0x554 ) = FLASH_CODE_55 ;
.LINE 139

	LD	HL,(IX+-3)
	LD	BC,1364
	ADD	HL,BC
	LD	A,85
	LD	(HL),A
;  140		*( addr ) = CMD_ERASE_CONFIRM ;	// Erasing the sector
.LINE 140

	LD	IY,(IX+-3)
	LD	A,48
	LD	(IY),A
;  141	
;  142		while(1)
.LINE 142

L_28:
;  143		{
;  144			result = *addr ;
.LINE 144

	LD	IY,(IX+-3)
	LD	A,(IY)
	LD	(IX+-4),A
;  145			if ( (result) & BIT_ERASE_DONE)
.LINE 145

	LD	A,(IX+-4)
	AND	A,128
	JR	Z,L_28
;  146			{
;  147				// the erase is completed.
;  148				break ;
.LINE 148

	JR	L_29
;  149			}
;  150		}
L_27:
.LINE 150

	JR	L_28
L_29:
;  151	
;  152		// the device is put in the READ ARRAY mode after the ERASE is complete
;  153	//	*( addr + 0x555 ) = CMD_READ_ARRAY ;
;  154	
;  155		return SUCCESS;
.LINE 155

	LD	HL,0
;  156	}
.LINE 156

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AM29LV160_Erase ***************************
;Name                         Addr/Register   Size   Type
;result                                IX-4      1   variable
;addr                                  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 "AM29LV160_Erase",156,"_AM29LV160_Erase"
;  157	
;  158	INT AM29LV160_Close( void )
;  159	#ifdef _IAR_CODE
;  160	@ "DATA_PER_RAM"
;  161	#endif
;  162	{
_AM29LV160_Close:
.DEFINE "_AM29LV160_Close"

.VALUE _AM29LV160_Close

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "AM29LV160_Close",162,"_AM29LV160_Close"

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

	LD	HL,0
;  164	}
.LINE 164

	LD	SP,IX
	POP	IX
	RET	


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


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


.ENDFUNC "AM29LV160_Close",164,"_AM29LV160_Close"
	XREF __u_uitoa:ROM
	XREF ___print_sendstring:ROM
	XREF ___print_xputch:ROM
	XREF ___print_sputch:ROM
	XREF ___print_uputch:ROM
	XREF ___print_fmt:ROM
	XREF __land:ROM
	XREF __itol:ROM
	XDEF _AM29LV160_Close
	XDEF _AM29LV160_Erase
	XDEF _AM29LV160_Write
	XDEF _AM29LV160_Read
	XDEF _AM29LV160_Init
	END

⌨️ 快捷键说明

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