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

📄 intflash_driver_f91.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_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_nPagesPerBlock:
	DB	16
.DEFINE "g_nPagesPerBlock"
.ALIAS "_g_nPagesPerBlock"
.CLASS 69
.VALUE _g_nPagesPerBlock
.TYPE 12
.ENDEF
;    1	/*
;    2	 * File       : IntFlash_Driver.c
;    3	 * Description: This file contains the Flash driver for use in ZiLOG File System
;    4	 * Author     :  
;    5	 * Created on : 04-OCT-2004
;    6	 *
;    7	 * Copyright 2004 ZiLOG Inc.  ALL RIGHTS RESERVED.
;    8	 *
;    9	 * This file contains unpublished confidential and proprietary information
;   10	 * of ZiLOG, Inc.
;   11	 * NO PART OF THIS WORK MAY BE DUPLICATED, STORED, PUBLISHED OR DISCLOSED 
;   12	 * IN ANY FORM WITHOUT THE PRIOR WRITTEN CONSENT OF ZiLOG, INC.
;   13	 * This is not a license and no use of any kind of this work is authorized
;   14	 * in the absence of a written license granted by ZiLOG, Inc. in ZiLOG's 
;   15	 * sole discretion 
;   16	 */
;   17	
;   18	#include <stdio.h>
;   19	#include <string.h>
;   20	#include "IntFlash_Driver.h"
;   21	#ifdef _EZ80F91
;   22	#include <eZ80F91.h>
;   23	#endif
;   24	
;   25	#ifdef _EZ80F92
;   26	#include <eZ80F92.h>
;   27	#endif
;   28	
;   29	#ifdef _EZ80F93
;   30	#include <eZ80F93.h>
;   31	#endif
;   32	
;   33	#ifdef _IAR_CODE
;   34	#define LOC_ADDR UINT32
;   35	#else
;   36	#define LOC_ADDR UINT
;   37	#endif
;   38	
;   39	
;   40	// global variables
;   41	//UINT32 g_nSysClock = 50000000UL ;
;   42	
;   43	#ifdef _EZ80F91
;   44	UINT8 g_nPagesPerBlock = 16 ;
	SEGMENT _driver_TEXT
;   45	#endif
;   46	
;   47	#ifdef _EZ80F92 
;   48	UINT8 g_nPagesPerBlock = 16 ;
;   49	#endif
;   50	
;   51	/* Renuka : Defined g_nPagesPerBlock for F92 */
;   52	#ifdef _EZ80F93 
;   53	UINT8 g_nPagesPerBlock = 16 ;
;   54	#endif
;   55	
;   56	
;   57	INT IntFlash_Init(  VOID *paddr, UINT32 num_bytes   )
;   58	#ifdef _IAR_CODE
;   59	@ "DATA_PER_RAM"
;   60	#endif
;   61	{
_IntFlash_Init:
.DEFINE "_IntFlash_Init"

.VALUE _IntFlash_Init

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "IntFlash_Init",61,"_IntFlash_Init"

.LINE 61

.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
;   62		// Unprotect the flash blocks
;   63		// write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
;   64		FLASH_KEY = 0xB6 ;
.LINE 64

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

	LD	A,73
	OUT0	(245),A
;   66	
;   67		// set the FLASH_FDIV register
;   68	#ifdef _EZ80F91
;   69		FLASH_FDIV = 0xFF ; //( UINT8) ( ulFdiv & 0xFF ) ;
.LINE 69

	LD	A,255
	OUT0	(249),A
;   70	#endif
;   71	
;   72	#ifdef _EZ80F92
;   73		FLASH_FDIV = 0x66 ; 
;   74	#endif
;   75	
;   76	#ifdef _EZ80F93
;   77		FLASH_FDIV = 0x66 ; 
;   78	#endif
;   79	
;   80		// write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
;   81		FLASH_KEY = 0xB6 ;
.LINE 81

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

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

	XOR	A,A
	OUT0	(250),A
;   86	
;   87		return SUCCESS ;
.LINE 87

	LD	HL,0
;   88	}
.LINE 88

	LD	SP,IX
	POP	IX
	RET	


;**************************** _IntFlash_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_Init",88,"_IntFlash_Init"
;   89	
;   90	INT32 IntFlash_Read( VOID *paddr, VOID *pbuf, UINT num_bytes )
;   91	#ifdef _IAR_CODE
;   92	@ "DATA_PER_RAM"
;   93	#endif
;   94	{
_IntFlash_Read:
.DEFINE "_IntFlash_Read"

.VALUE _IntFlash_Read

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "IntFlash_Read",94,"_IntFlash_Read"

.LINE 94

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

.CLASS 65

.VALUE -2

.TYPE 13

.ENDEF

.DEFINE "pcBuf"

.CLASS 65

.VALUE -5

.TYPE 44

.ENDEF

.DEFINE "pcaddr"

.CLASS 65

.VALUE -8

.TYPE 44

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	BC
	DEC	SP
	DEC	SP
;   95	
;   96		// the number of bytes passed to this function is always less than
;   97		// 512 bytes
;   98	
;   99		UINT16 nBytes ;
;  100		volatile UINT8 *pcBuf = ( UINT8 * ) pbuf ;
.LINE 100

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

	LD	BC,(IX+6)
	LD	(IX+-8),BC
;  102	
;  103	#ifdef _EZ80F91
;  104		// set the PAGE, ROW and COL registers
;  105		FLASH_PAGE = GETPAGE( (LOC_ADDR) pcaddr ) ;
.LINE 105

	LD	BC,1046528
	LD	HL,(IX+-8)
	CALL	__iand
	LD	BC,11
	CALL	__ishrs
	LD	A,L
	OUT0	(252),A
;  106		FLASH_ROW = GETROW( (LOC_ADDR) pcaddr ) ;
.LINE 106

	LD	BC,1792
	LD	HL,(IX+-8)
	CALL	__iand
	LD	BC,8
	CALL	__ishru
	LD	A,L
	OUT0	(253),A
;  107		FLASH_COL = GETCOL( (LOC_ADDR) pcaddr ) ;
.LINE 107

	LD	A,(IX+-8)
	OUT0	(254),A
	XOR	A,A
	LD	(IX+-2),A
	XOR	A,A
	LD	(IX+-1),A
;  108	#endif
;  109	
;  110		// now in a loop read the num_bytes values from FLASH_DATA register
;  111		for( nBytes = 0 ; nBytes < num_bytes ; nBytes++ )
.LINE 111

	JR	L_5
L_3:
;  112	    {
;  113	#ifdef _EZ80F91
;  114			*pcBuf = FLASH_DATA ;
.LINE 114

	LD	IY,(IX+-5)
	IN0	A,(246)
	LD	(IY),A
;  115	#endif
;  116	#if defined(_EZ80F92) || defined(_EZ80F93)
;  117			*pcBuf = *pcaddr ;
;  118	#endif
;  119			pcBuf++ ;
.LINE 119

	LD	BC,(IX+-5)
	INC	BC
	LD	(IX+-5),BC
	LD	BC,(IX+-2)
	INC	BC
	LD	(IX+-2),C
	LD	(IX+-1),B
;  120	#if defined(_EZ80F92) || defined(_EZ80F93)
;  121			pcaddr++ ;
;  122	#endif
;  123		}
L_5:
.LINE 123

	LD	BC,(IX+-2)
	CALL	__stoiu
	LD	BC,(IX+12)
	OR	A,A
	SBC	HL,BC
	JR	C,L_3
;  124		return num_bytes ;
.LINE 124

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

	LD	SP,IX
	POP	IX
	RET	


⌨️ 快捷键说明

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