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

📄 intflash_infopage_driver_f92.s

📁 flash AM29LV160 的驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
.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 "pcaddr"

.CLASS 65

.VALUE -3

.TYPE 44

.ENDEF

.DEFINE "nBytes"

.CLASS 65

.VALUE -5

.TYPE 13

.ENDEF

.DEFINE "pcBuf"

.CLASS 65

.VALUE -8

.TYPE 44

.ENDEF

.DEFINE "ncol"

.CLASS 65

.VALUE -9

.TYPE 12

.ENDEF

.DEFINE "npage"

.CLASS 65

.VALUE -10

.TYPE 12

.ENDEF

.DEFINE "nrow"

.CLASS 65

.VALUE -11

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LEA	IY,IX+-11
	LD	SP,IY
;  133		// the number of bytes passed to this function is always less than
;  134		// 512 bytes
;  135	
;  136		UINT16 nBytes ;
;  137		volatile UINT8 *pcBuf = ( UINT8 * ) pbuf ;
.LINE 137

	LD	BC,(IX+9)
	LD	(IX+-8),BC
;  138		volatile UINT8 *pcaddr = ( UINT8 * ) paddr ;
.LINE 138

	LD	BC,(IX+6)
	LD	(IX+-3),BC
;  139		volatile UINT8 npage ;
;  140		volatile UINT8 nrow ;
;  141		volatile UINT8 ncol ;
;  142		
;  143		// set the PAGE, ROW and COL registers
;  144		npage = GETPAGE( (LOC_ADDR) pcaddr ) | FLASH_PAGE_INFO_ACCESS ;
.LINE 144

	LD	BC,130048
	LD	HL,(IX+-3)
	CALL	__iand
	LD	BC,10
	CALL	__ishrs
	LD	A,L
	SET	7,A
	LD	(IX+-10),A
;  145		nrow = GETROW( (LOC_ADDR) pcaddr ) ;
.LINE 145

	LD	BC,896
	LD	HL,(IX+-3)
	CALL	__iand
	LD	BC,7
	CALL	__ishru
	LD	(IX+-11),L
;  146		ncol = GETCOL( (LOC_ADDR) pcaddr ) ;
.LINE 146

	LD	A,(IX+-3)
	RES	7,A
	LD	(IX+-9),A
;  147	        FLASH_PAGE = npage ;
.LINE 147

	LD	A,(IX+-10)
	OUT0	(252),A
;  148		FLASH_ROW = nrow ;
.LINE 148

	LD	A,(IX+-11)
	OUT0	(253),A
;  149		FLASH_COL = ncol ;	
.LINE 149

	LD	A,(IX+-9)
	OUT0	(254),A
	XOR	A,A
	LD	(IX+-5),A
	XOR	A,A
	LD	(IX+-4),A
;  150	
;  151		// now in a loop read the num_bytes values from FLASH_DATA register
;  152		for( nBytes = 0 ; nBytes < num_bytes ; nBytes++ )
.LINE 152

	JR	L_14
L_12:
;  153	    {	
;  154	#if defined(_EZ80F92) || defined(_EZ80F93)
;  155			// set the PAGE, ROW and COL registers
;  156	                FLASH_PAGE = 0 ;
.LINE 156

	XOR	A,A
	OUT0	(252),A
;  157	                FLASH_ROW = 0 ;
.LINE 157

	XOR	A,A
	OUT0	(253),A
;  158	                FLASH_COL = 0 ;
.LINE 158

	XOR	A,A
	OUT0	(254),A
;  159	                npage = GETPAGE( (LOC_ADDR) pcaddr ) | FLASH_PAGE_INFO_ACCESS ;
.LINE 159

	LD	BC,130048
	LD	HL,(IX+-3)
	CALL	__iand
	LD	BC,10
	CALL	__ishrs
	LD	A,L
	SET	7,A
	LD	(IX+-10),A
;  160	                nrow = GETROW( (LOC_ADDR) pcaddr ) ;
.LINE 160

	LD	BC,896
	LD	HL,(IX+-3)
	CALL	__iand
	LD	BC,7
	CALL	__ishru
	LD	(IX+-11),L
;  161	                ncol = GETCOL( (LOC_ADDR) pcaddr ) ;
.LINE 161

	LD	A,(IX+-3)
	RES	7,A
	LD	(IX+-9),A
;  162	                FLASH_PAGE = npage ;
.LINE 162

	LD	A,(IX+-10)
	OUT0	(252),A
;  163	                FLASH_ROW = nrow ;
.LINE 163

	LD	A,(IX+-11)
	OUT0	(253),A
;  164	                FLASH_COL = ncol ;	
.LINE 164

	LD	A,(IX+-9)
	OUT0	(254),A
;  165	#endif
;  166	
;  167			FLASH_DATA = *pcBuf ;
.LINE 167

	LD	IY,(IX+-8)
	LD	A,(IY)
	OUT0	(246),A
;  168			pcBuf++ ;
.LINE 168

	LD	BC,(IX+-8)
	INC	BC
	LD	(IX+-8),BC
;  169	#if defined(_EZ80F92) || defined(_EZ80F93)
;  170			pcaddr++ ;
.LINE 170

	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
	LD	BC,(IX+-5)
	INC	BC
	LD	(IX+-5),C
	LD	(IX+-4),B
;  171	#endif
;  172	
;  173		}
L_14:
.LINE 173

	LD	BC,(IX+-5)
	CALL	__stoiu
	LD	BC,(IX+12)
	OR	A,A
	SBC	HL,BC
	JR	C,L_12
;  174	        FLASH_PAGE = 0 ;
.LINE 174

	XOR	A,A
	OUT0	(252),A
;  175	        FLASH_ROW = 0 ;
.LINE 175

	XOR	A,A
	OUT0	(253),A
;  176	        FLASH_COL = 0 ;
.LINE 176

	XOR	A,A
	OUT0	(254),A
;  177		return num_bytes ;
.LINE 177

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

	LD	SP,IX
	POP	IX
	RET	


;**************************** _IntFlash_IP_Write ***************************
;Name                         Addr/Register   Size   Type
;nrow                                 IX-11      1   variable
;npage                                IX-10      1   variable
;ncol                                  IX-9      1   variable
;pcBuf                                 IX-8      3   variable
;nBytes                                IX-5      2   variable
;pcaddr                                IX-3      3   variable
;num_bytes                            IX+12      3   parameter
;pbuf                                  IX+9      3   parameter
;paddr                                 IX+6      3   parameter


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


.ENDFUNC "IntFlash_IP_Write",178,"_IntFlash_IP_Write"
;  179	
;  180	INT IntFlash_IP_Erase( VOID *paddr, UINT32 num_bytes )
;  181	#ifdef _IAR_CODE
;  182	@ "DATA_PER_RAM"
;  183	#endif
;  184	{
_IntFlash_IP_Erase:
.DEFINE "_IntFlash_IP_Erase"

.VALUE _IntFlash_IP_Erase

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "IntFlash_IP_Erase",184,"_IntFlash_IP_Erase"

.LINE 184

.DEFINE "paddr"

.CLASS 65

.VALUE 6

.TYPE 33

.ENDEF

.DEFINE "num_bytes"

.CLASS 65

.VALUE 9

.TYPE 15

.ENDEF

.DEFINE "nCnt"

.CLASS 65

.VALUE -3

.TYPE 14

.ENDEF

.DEFINE "nPageNum"

.CLASS 65

.VALUE -4

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	DEC	SP
;  185		/*
;  186		 * F91, information page is of 512 bytes, but we use only 256
;  187		 * bytes to maintain equality between all F series platforms
;  188		 * F92/F93, information page is 256 bytes which is divided
;  189		 * between 2 rows.
;  190		 */
;  191	
;  192		UINT8 nPageNum = GETPAGE( (UINT32) paddr ) ;
.LINE 192

	LD	BC,(IX+6)
	XOR	A,A
	LD	E,A
	LD	HL,BC
	LD	BC,130048
	XOR	A,A
	CALL	__land
	LD	BC,HL
	LD	HL,10
	LD	A,E
	CALL	__lshru
	LD	(IX+-4),C
	LD	BC,0
	LD	(IX+-3),BC
;  193		UINT nCnt ;
;  194	
;  195		for( nCnt = 0 ; nCnt < g_nRowsPerInfoPage ; nCnt++ )
.LINE 195

	JR	L_23
L_21:
;  196		{
;  197	
;  198			/*
;  199			 * set the flash access to IO
;  200			 */
;  201			FLASH_PAGE = nPageNum | FLASH_PAGE_INFO_ACCESS ;
.LINE 201

	LD	A,(IX+-4)
	SET	7,A
	OUT0	(252),A
;  202			FLASH_ROW = (UINT8) nCnt ;
.LINE 202

	LD	A,(IX+-3)
	OUT0	(253),A
;  203	
;  204			// setup the flash erase
;  205			FLASH_PGCTL = FLASH_PGCTL_PG_ERASE_ENABLE ;
.LINE 205

	LD	A,2
	OUT0	(255),A
;  206	
;  207			// now poll for the 
;  208			while(1)
.LINE 208

L_20:
;  209			{
;  210				// If erase is complete, break from the loop
;  211				if( !(FLASH_PGCTL & FLASH_PGCTL_PG_ERASE_ENABLE ) )
.LINE 211

	IN0	A,(255)
	AND	A,2
	JR	NZ,L_20
;  212					break ;
.LINE 212

	JR	L_22
;  213			}
L_19:
.LINE 213

	JR	L_20
;  214		}
L_22:
.LINE 214

	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
L_23:
	LD	A,(_g_nRowsPerInfoPage)
	UEXT	HL
	LD	L,A
	LD	BC,HL
	LD	HL,(IX+-3)
	OR	A,A
	SBC	HL,BC
	JR	C,L_21
;  215	
;  216	        FLASH_PAGE = 0 ;
.LINE 216

	XOR	A,A
	OUT0	(252),A
;  217	        FLASH_ROW = 0 ;
.LINE 217

	XOR	A,A
	OUT0	(253),A
;  218	        FLASH_COL = 0 ;
.LINE 218

	XOR	A,A
	OUT0	(254),A
;  219		return SUCCESS;
.LINE 219

	LD	HL,0
;  220	}
.LINE 220

	LD	SP,IX
	POP	IX
	RET	


;**************************** _IntFlash_IP_Erase ***************************
;Name                         Addr/Register   Size   Type
;_g_nRowsPerInfoPage                 STATIC      1   variable
;nPageNum                              IX-4      1   variable
;nCnt                                  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 "IntFlash_IP_Erase",220,"_IntFlash_IP_Erase"
;  221	
;  222	INT IntFlash_IP_Close( VOID )
;  223	#ifdef _IAR_CODE
;  224	@ "DATA_PER_RAM"
;  225	#endif
;  226	{
_IntFlash_IP_Close:
.DEFINE "_IntFlash_IP_Close"

.VALUE _IntFlash_IP_Close

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "IntFlash_IP_Close",226,"_IntFlash_IP_Close"

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
;  227	//	FLASH_PAGE = 0 ;
;  228		// disable INTERNAL FLASH
;  229	//	FLASH_CTRL = 0x00 ;
;  230		return SUCCESS ;
.LINE 230

	LD	HL,0
;  231	}
.LINE 231

	LD	SP,IX
	POP	IX
	RET	


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


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


.ENDFUNC "IntFlash_IP_Close",231,"_IntFlash_IP_Close"
	XREF __iand:ROM
	XREF __land:ROM
	XREF __ishrs:ROM
	XREF __ishru:ROM
	XREF __lshru:ROM
	XREF __stoiu:ROM
	XDEF _IntFlash_IP_Close
	XDEF _IntFlash_IP_Erase
	XDEF _IntFlash_IP_Write
	XDEF _IntFlash_IP_Read
	XDEF _IntFlash_IP_Init
	XDEF _g_nRowsPerInfoPage
	END

⌨️ 快捷键说明

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