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

📄 intflash_infopage_driver_f92.s

📁 flash AM29LV160 的驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
; ZiLOG eZ80 ANSI C Compiler Release 2.12
; -noglobalopt -nolocalcse -optsize -modsect -debug -peephole
; -const=ROM -doublesize=32 -floatsize=32 -bitfieldsize=24
; -longsize=32 -charsize=8 -intsize=24 
	DEFINE _driver_TEXT,SPACE=ROM
	FILE	"..\FLASH\SRC\INTFLASH_INFOPAGE_DRIVER.C"
	.assume ADL=1
.DEBUG "C"
	SEGMENT _driver_TEXT
.BEGREC "fmt_type",19
.DEFINE "status"
.VALUE 0
.CLASS 8
.TYPE 12
.ENDEF
.DEFINE "flags"
.VALUE 1
.CLASS 8
.TYPE 12
.ENDEF
.DEFINE "size"
.VALUE 2
.CLASS 8
.TYPE 2
.ENDEF
.DEFINE "chr"
.VALUE 3
.CLASS 8
.TYPE 2
.ENDEF
.DEFINE "type"
.VALUE 4
.CLASS 8
.TYPE 2
.ENDEF
.DEFINE "field_width"
.VALUE 5
.CLASS 8
.TYPE 2
.ENDEF
.DEFINE "precision"
.VALUE 6
.CLASS 8
.TYPE 2
.ENDEF
.DEFINE "set_begin"
.VALUE 7
.CLASS 8
.TYPE 34
.ENDEF
.DEFINE "set_end"
.VALUE 10
.CLASS 8
.TYPE 34
.ENDEF
.DEFINE "pad_whole"
.VALUE 13
.CLASS 8
.TYPE 12
.ENDEF
.DEFINE "pad_pre_fract"
.VALUE 14
.CLASS 8
.TYPE 12
.ENDEF
.DEFINE "pad_post_fract"
.VALUE 15
.CLASS 8
.TYPE 12
.ENDEF
.DEFINE "pad_at"
.VALUE 16
.CLASS 8
.TYPE 34
.ENDEF
.ENDREC "fmt_type"
.BEGREC "flt_info",12
.DEFINE "flags"
.VALUE 0
.CLASS 8
.TYPE 12
.ENDEF
.DEFINE "exp"
.VALUE 1
.CLASS 8
.TYPE 2
.ENDEF
.DEFINE "digits"
.VALUE 2
.CLASS 8
.DIM 10
.TYPE 108
.ENDEF
.ENDREC "flt_info"
	SEGMENT DATA
_g_nRowsPerInfoPage:
	DB	2
.DEFINE "g_nRowsPerInfoPage"
.ALIAS "_g_nRowsPerInfoPage"
.CLASS 69
.VALUE _g_nRowsPerInfoPage
.TYPE 12
.ENDEF
;    1	/*
;    2	 * File       : IntFlash_InfoPage_Driver.c
;    3	 * Description: This file contains the Flash driver for use in data persistence 
;    4	 *              where the values are stored in information page
;    5	 * Author     :  
;    6	 * Created on : 03-FEB-2005
;    7	 *
;    8	 * Copyright 2004 ZiLOG Inc.  ALL RIGHTS RESERVED.
;    9	 *
;   10	 * This file contains unpublished confidential and proprietary information
;   11	 * of ZiLOG, Inc.
;   12	 * NO PART OF THIS WORK MAY BE DUPLICATED, STORED, PUBLISHED OR DISCLOSED 
;   13	 * IN ANY FORM WITHOUT THE PRIOR WRITTEN CONSENT OF ZiLOG, INC.
;   14	 * This is not a license and no use of any kind of this work is authorized
;   15	 * in the absence of a written license granted by ZiLOG, Inc. in ZiLOG's 
;   16	 * sole discretion 
;   17	 */
;   18	
;   19	#include <stdio.h>
;   20	#include <string.h>
;   21	#include "IntFlash_InfoPage_Driver.h"
;   22	
;   23	#ifdef _EZ80F91
;   24	#include <eZ80F91.h>
;   25	#endif
;   26	
;   27	#ifdef _EZ80F92
;   28	#include <eZ80F92.h>
;   29	#endif
;   30	
;   31	#ifdef _EZ80F93
;   32	#include <eZ80F93.h>
;   33	#endif
;   34	
;   35	#ifdef _IAR_CODE
;   36	#define LOC_ADDR UINT32
;   37	#else
;   38	#define LOC_ADDR UINT
;   39	#endif
;   40	
;   41	#ifdef _EZ80F91
;   42	UINT8 g_nRowsPerInfoPage = 1 ;
;   43	#endif
;   44	
;   45	#if defined(_EZ80F92) || defined(_EZ80F93)
;   46	UINT8 g_nRowsPerInfoPage = 2 ;
	SEGMENT _driver_TEXT
;   47	#endif
;   48	
;   49	
;   50	INT IntFlash_IP_Init(  VOID *paddr, UINT32 num_bytes   )
;   51	#ifdef _IAR_CODE
;   52	@ "DATA_PER_RAM"
;   53	#endif
;   54	{
_IntFlash_IP_Init:
.DEFINE "_IntFlash_IP_Init"

.VALUE _IntFlash_IP_Init

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "IntFlash_IP_Init",54,"_IntFlash_IP_Init"

.LINE 54

.DEFINE "paddr"

.CLASS 65

.VALUE 6

.TYPE 33

.ENDEF

.DEFINE "num_bytes"

.CLASS 65

.VALUE 9

.TYPE 15

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
;   55	
;   56		// Unprotect the flash blocks
;   57		// write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
;   58		FLASH_KEY = 0xB6 ;
.LINE 58

	LD	A,182
	OUT0	(245),A
;   59		FLASH_KEY = 0x49 ;
.LINE 59

	LD	A,73
	OUT0	(245),A
;   60	
;   61		// set the FLASH_FDIV register
;   62	#ifdef _EZ80F91
;   63		FLASH_FDIV = 0xFF ; //( UINT8) ( ulFdiv & 0xFF ) ;
;   64	#endif
;   65	
;   66	#ifdef _EZ80F92
;   67		FLASH_FDIV = 0x66 ; 
.LINE 67

	LD	A,102
	OUT0	(249),A
;   68	#endif
;   69	
;   70	#ifdef _EZ80F93
;   71		FLASH_FDIV = 0x66 ; 
;   72	#endif
;   73	
;   74		// write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
;   75		FLASH_KEY = 0xB6 ;
.LINE 75

	LD	A,182
	OUT0	(245),A
;   76		FLASH_KEY = 0x49 ;
.LINE 76

	LD	A,73
	OUT0	(245),A
;   77		// enable write/erase protect for boot block (32KB)
;   78		// disable write/erase protect for other blocks.
;   79		FLASH_PROT = 0x00 ;
.LINE 79

	XOR	A,A
	OUT0	(250),A
;   80	
;   81		return SUCCESS ;
.LINE 81

	LD	HL,0
;   82	}
.LINE 82

	LD	SP,IX
	POP	IX
	RET	


;**************************** _IntFlash_IP_Init ***************************
;Name                         Addr/Register   Size   Type
;num_bytes                             IX+9      4   parameter
;paddr                                 IX+6      3   parameter


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


.ENDFUNC "IntFlash_IP_Init",82,"_IntFlash_IP_Init"
;   83	
;   84	INT32 IntFlash_IP_Read( VOID *paddr, VOID *pbuf, UINT num_bytes )
;   85	#ifdef _IAR_CODE
;   86	@ "DATA_PER_RAM"
;   87	#endif
;   88	{
_IntFlash_IP_Read:
.DEFINE "_IntFlash_IP_Read"

.VALUE _IntFlash_IP_Read

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "IntFlash_IP_Read",88,"_IntFlash_IP_Read"

.LINE 88

.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 "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 "nrow"

.CLASS 65

.VALUE -9

.TYPE 12

.ENDEF

.DEFINE "ncol"

.CLASS 65

.VALUE -10

.TYPE 12

.ENDEF

.DEFINE "npage"

.CLASS 65

.VALUE -11

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LEA	IY,IX+-11
	LD	SP,IY
;   89	
;   90		// the number of bytes passed to this function is always less than
;   91		// 512 bytes
;   92	
;   93		UINT16 nBytes ;
;   94		volatile UINT8 *pcBuf = ( UINT8 * ) pbuf ;
.LINE 94

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

	LD	BC,(IX+6)
	LD	(IX+-3),BC
;   96		volatile UINT8 npage ;
;   97		volatile UINT8 nrow ;
;   98		volatile UINT8 ncol ;
;   99		
;  100		npage = GETPAGE( (LOC_ADDR) pcaddr ) | FLASH_PAGE_INFO_ACCESS ;
.LINE 100

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

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

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

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

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

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

	JR	L_6
L_4:
;  109	    {
;  110	#ifdef _EZ80F91
;  111			*pcBuf = FLASH_DATA ;
;  112	#endif
;  113	#if defined(_EZ80F92) || defined(_EZ80F93)
;  114			*pcBuf = *((UINT8*) pcaddr) ;
	LD	HL,(IX+-8)
.LINE 114

	LD	IY,(IX+-3)
	LD	A,(IY)
	LD	(HL),A
;  115	#endif
;  116			pcBuf++ ;
.LINE 116

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

	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
	LD	BC,(IX+-5)
	INC	BC
	LD	(IX+-5),C
	LD	(IX+-4),B
;  119	#endif
;  120		}
L_6:
.LINE 120

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

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

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

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

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

	LD	SP,IX
	POP	IX
	RET	


;**************************** _IntFlash_IP_Read ***************************
;Name                         Addr/Register   Size   Type
;npage                                IX-11      1   variable
;ncol                                 IX-10      1   variable
;nrow                                  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_Read",126,"_IntFlash_IP_Read"
;  127	
;  128	INT32 IntFlash_IP_Write( VOID *paddr, VOID *pbuf, UINT num_bytes )
;  129	#ifdef _IAR_CODE
;  130	@ "DATA_PER_RAM"
;  131	#endif
;  132	{
_IntFlash_IP_Write:
.DEFINE "_IntFlash_IP_Write"

.VALUE _IntFlash_IP_Write

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "IntFlash_IP_Write",132,"_IntFlash_IP_Write"

.LINE 132

.DEFINE "paddr"

⌨️ 快捷键说明

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