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

📄 mt28f008_driver.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\MT28F008_DRIVER.C"
	.assume ADL=1
.DEBUG "C"
	SEGMENT DATA
_gucReadbackFailed:
	DB	0
.DEFINE "gucReadbackFailed"
.ALIAS "_gucReadbackFailed"
.CLASS 69
.VALUE _gucReadbackFailed
.TYPE 12
.ENDEF
;    1	/*
;    2	 * File       : MT28F008_Driver.c
;    3	 * Description: This file contains the Flash driver for use in ZiLOG File System
;    4	 * Author     :  (Reused from Prototype fs driver code)
;    5	 * Created on : 30-APR-2003
;    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 "MT28F008_Driver.h"
;   19	
;   20	/*Readback Fail Flag: Every line flashed is read back to verify whether 
;   21	 * flashing happened properly.  This flag is set when there is a readback
;   22	 * fail.
;   23	 */
;   24	UINT8 gucReadbackFailed = 0 ; //default to no readback fails
	SEGMENT _driver_TEXT
;   25	
;   26	INT32 FlashError(UINT8 ucStatus) 
;   27	#ifdef _IAR_CODE
;   28	@ "DATA_PER_RAM"
;   29	#endif
;   30	{
_FlashError:
.DEFINE "_FlashError"

.VALUE _FlashError

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "FlashError",30,"_FlashError"

.LINE 30

.DEFINE "ucStatus"

.CLASS 65

.VALUE 6

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
;   31	//	printf("\n FLASHERROR" ) ;
;   32	//	while(1) ;
;   33		if(ucStatus & MT28F008_ERASE_SUSPENDED) 
.LINE 33

	LD	A,(IX+6)
	AND	A,64
	JR	Z,L_2
;   34			return -MT28F008_ERASE_SUSPENDED;
.LINE 34

	LD	HL,16777152
	LD	E,255
	JR	L_8
L_2:
;   35		
;   36		if(ucStatus & MT28F008_ERASE_ERROR) 
.LINE 36

	LD	A,(IX+6)
	AND	A,32
	JR	Z,L_4
;   37			return -MT28F008_ERASE_ERROR;
.LINE 37

	LD	HL,16777184
	LD	E,255
	JR	L_8
L_4:
;   38		
;   39		if(ucStatus & MT28F008_WRITE_ERROR) 
.LINE 39

	LD	A,(IX+6)
	AND	A,16
	JR	Z,L_6
;   40			return -MT28F008_WRITE_ERROR;
.LINE 40

	LD	HL,16777200
	LD	E,255
	JR	L_8
L_6:
;   41		
;   42		if(ucStatus & MT28F008_NO_VOLTAGE) 
.LINE 42

	LD	A,(IX+6)
	AND	A,8
	JR	Z,L_7
;   43			return -MT28F008_NO_VOLTAGE;
.LINE 43

	LD	HL,16777208
	LD	E,255
	JR	L_8
L_7:
;   44	
;   45		return SUCCESS;
.LINE 45

	LD	HL,0
	LD	E,0
;   46	}
L_8:
.LINE 46

	LD	SP,IX
	POP	IX
	RET	


;**************************** _FlashError ***************************
;Name                         Addr/Register   Size   Type
;ucStatus                              IX+6      1   parameter


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


.ENDFUNC "FlashError",46,"_FlashError"
;   47	
;   48	INT MT28F008_Init(  void *paddr, UINT32 num_bytes   )
;   49	#ifdef _IAR_CODE
;   50	@ "DATA_PER_RAM"
;   51	#endif
;   52	{
_MT28F008_Init:
.DEFINE "_MT28F008_Init"

.VALUE _MT28F008_Init

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "MT28F008_Init",52,"_MT28F008_Init"

.LINE 52

.DEFINE "paddr"

.CLASS 65

.VALUE 6

.TYPE 33

.ENDEF

.DEFINE "num_bytes"

.CLASS 65

.VALUE 9

.TYPE 15

.ENDEF

.DEFINE "ucPtr"

.CLASS 65

.VALUE -3

.TYPE 44

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
;   53		volatile UINT8 *ucPtr = ( UINT8 * ) paddr ;
.LINE 53

	LD	BC,(IX+6)
	LD	(IX+-3),BC
;   54		*ucPtr=MT28F008_RESET;
.LINE 54

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;   55		*ucPtr=MT28F008_CLEAR_STATUS_REG;
.LINE 55

	LD	IY,(IX+-3)
	LD	A,80
	LD	(IY),A
;   56		*ucPtr=MT28F008_READ_ARRAY;
.LINE 56

	LD	IY,(IX+-3)
	LD	A,255
	LD	(IY),A
;   57		return SUCCESS ;
.LINE 57

	LD	HL,0
;   58	}
.LINE 58

	LD	SP,IX
	POP	IX
	RET	


;**************************** _MT28F008_Init ***************************
;Name                         Addr/Register   Size   Type
;ucPtr                                 IX-3      3   variable
;num_bytes                             IX+9      4   parameter
;paddr                                 IX+6      3   parameter


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


.ENDFUNC "MT28F008_Init",58,"_MT28F008_Init"
;   59	
;   60	INT32 MT28F008_Read( void *paddr, void *pbuf, UINT num_bytes )
;   61	#ifdef _IAR_CODE
;   62	@ "DATA_PER_RAM"
;   63	#endif
;   64	{
_MT28F008_Read:
.DEFINE "_MT28F008_Read"

.VALUE _MT28F008_Read

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "MT28F008_Read",64,"_MT28F008_Read"

.LINE 64

.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 -6

.TYPE 14

.ENDEF

.DEFINE "pcbuf"

.CLASS 65

.VALUE -9

.TYPE 44

.ENDEF

.DEFINE "ptr"

.CLASS 65

.VALUE -12

.TYPE 44

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	LEA	IY,IX+-12
	LD	SP,IY
;   65		volatile UINT8 *ptr ;
;   66		UINT8 *pcaddr = ( UINT8 * ) paddr ;
.LINE 66

	LD	BC,(IX+6)
	LD	(IX+-3),BC
;   67		UINT8 *pcbuf = ( UINT8 * ) pbuf ;
.LINE 67

	LD	BC,(IX+9)
	LD	(IX+-9),BC
;   68		UINT nbytes ;
;   69	
;   70		ptr = pcaddr ;
.LINE 70

	LD	BC,(IX+-3)
	LD	(IX+-12),BC
;   71	
;   72		// Read set up 
;   73		*ptr=MT28F008_RESET;
.LINE 73

	LD	IY,(IX+-12)
	LD	A,255
	LD	(IY),A
;   74		*ptr=MT28F008_CLEAR_STATUS_REG;
.LINE 74

	LD	IY,(IX+-12)
	LD	A,80
	LD	(IY),A
;   75		*ptr=MT28F008_READ_ARRAY;
.LINE 75

	LD	IY,(IX+-12)
	LD	A,255
	LD	(IY),A
	LD	BC,0
	LD	(IX+-6),BC
;   76	
;   77		for( nbytes = 0 ; nbytes < num_bytes ; nbytes++ )
.LINE 77

	JR	L_15
L_13:
;   78		{
;   79			*pcbuf = *pcaddr ;
	LD	HL,(IX+-9)
.LINE 79

	LD	IY,(IX+-3)
	LD	A,(IY)
	LD	(HL),A
;   80			pcbuf++ ;
.LINE 80

	LD	BC,(IX+-9)
	INC	BC
	LD	(IX+-9),BC
;   81			pcaddr++ ;
.LINE 81

	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
	LD	BC,(IX+-6)
	INC	BC
	LD	(IX+-6),BC
;   82		}
L_15:
.LINE 82

	LD	BC,(IX+12)
	LD	HL,(IX+-6)
	OR	A,A
	SBC	HL,BC
	JR	C,L_13
;   83		return num_bytes ;
.LINE 83

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

	LD	SP,IX
	POP	IX
	RET	


;**************************** _MT28F008_Read ***************************
;Name                         Addr/Register   Size   Type
;ptr                                  IX-12      3   variable
;pcbuf                                 IX-9      3   variable
;nbytes                                IX-6      3   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: 27 (bytes)
;       Spill Code: 0 (instruction)


.ENDFUNC "MT28F008_Read",84,"_MT28F008_Read"
;   85	
;   86	INT32 MT28F008_Write( void *paddr, void *pbuf, UINT num_bytes )
;   87	#ifdef _IAR_CODE
;   88	@ "DATA_PER_RAM"
;   89	#endif
;   90	{
_MT28F008_Write:
.DEFINE "_MT28F008_Write"

.VALUE _MT28F008_Write

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "MT28F008_Write",90,"_MT28F008_Write"

.LINE 90

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

.CLASS 65

.VALUE -3

.TYPE 44

.ENDEF

.DEFINE "ucStatus"

.CLASS 65

.VALUE -4

.TYPE 12

.ENDEF

.DEFINE "ucSrcAddr"

.CLASS 65

.VALUE -7

.TYPE 44

.ENDEF

.DEFINE "i"

.CLASS 65

.VALUE -10

.TYPE 14

⌨️ 快捷键说明

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