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

📄 at49bv162_driver.s

📁 flash AM29LV160 的驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	INC	BC
	LD	(IX+-9),BC
	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
;   86		}
L_11:
.LINE 86

	LD	BC,(IX+12)
	LD	HL,(IX+-3)
	OR	A,A
	SBC	HL,BC
	JR	C,L_9
;   87	
;   88		return num_bytes ;
.LINE 88

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

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AT49BV162_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 "AT49BV162_Read",89,"_AT49BV162_Read"
;   90	
;   91	INT32 AT49BV162_Write( void *paddr, void *pbuf, UINT num_bytes )
;   92	#ifdef _IAR_CODE
;   93	@ "DATA_PER_RAM"
;   94	#endif
;   95	{
_AT49BV162_Write:
.DEFINE "_AT49BV162_Write"

.VALUE _AT49BV162_Write

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "AT49BV162_Write",95,"_AT49BV162_Write"

.LINE 95

.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
;   96		volatile UINT8 *addr = ( UINT8 * ) paddr ;
.LINE 96

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

	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
;   98		UINT8 *buf = ( UINT8 * ) pbuf ;
.LINE 98

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

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

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

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

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

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

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

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

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

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

	JR	L_19
;  120			}
L_16:
.LINE 120

	JR	L_17
L_19:
;  121			
;  122			buf ++ ;
.LINE 122

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

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

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

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

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AT49BV162_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 "AT49BV162_Write",127,"_AT49BV162_Write"
;  128	
;  129	INT AT49BV162_Erase( void *paddr, UINT32 num_bytes )
;  130	#ifdef _IAR_CODE
;  131	@ "DATA_PER_RAM"
;  132	#endif
;  133	{
_AT49BV162_Erase:
.DEFINE "_AT49BV162_Erase"

.VALUE _AT49BV162_Erase

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "AT49BV162_Erase",133,"_AT49BV162_Erase"

.LINE 133

.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
;  134		volatile UINT8 *addr = ( UINT8 * )( ( UINT32 ) paddr & AT49BV162_MASK_BITS ) ;
.LINE 134

	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
;  135		UINT8 result ;
;  136		// setup the Sector Erase command
;  137		*( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 137

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

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

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

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

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

	LD	IY,(IX+-3)
	LD	A,48
	LD	(IY),A
;  144	
;  145	
;  146		while(1)
.LINE 146

L_28:
;  147		{
;  148			result = *addr ;
.LINE 148

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

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

	JR	L_29
;  153			}
;  154		}
L_27:
.LINE 154

	JR	L_28
L_29:
;  155	
;  156		return SUCCESS;
.LINE 156

	LD	HL,0
;  157	}
.LINE 157

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AT49BV162_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 "AT49BV162_Erase",157,"_AT49BV162_Erase"
;  158	
;  159	INT AT49BV162_Close( void )
;  160	#ifdef _IAR_CODE
;  161	@ "DATA_PER_RAM"
;  162	#endif
;  163	{
_AT49BV162_Close:
.DEFINE "_AT49BV162_Close"

.VALUE _AT49BV162_Close

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "AT49BV162_Close",163,"_AT49BV162_Close"

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

	LD	HL,0
;  165	}
.LINE 165

	LD	SP,IX
	POP	IX
	RET	


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


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


.ENDFUNC "AT49BV162_Close",165,"_AT49BV162_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 _AT49BV162_Close
	XDEF _AT49BV162_Erase
	XDEF _AT49BV162_Write
	XDEF _AT49BV162_Read
	XDEF _AT49BV162_Init
	END

⌨️ 快捷键说明

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