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

📄 am29lv160_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\AM29LV160_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"
;    1	/*
;    2	 * File       : AM29LV160_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 "AM29LV160_Driver.h"
;   21	
;   22	
;   23	// The driver uses hte configuration of 0x00 which specifies 
;   24	// NO PRODUCT IDENTIFICATION EXIT is necessary. The device itself will issue 
;   25	// the PRODUCT IDENTIFICATION EXIT command after the PROGRAM OR ERASE 
;   26	// operation is carried out and the device is put in the READ ARRAY mode.
;   27	
;   28	INT AM29LV160_Init(  void *paddr, UINT32 num_bytes   )
;   29	#ifdef _IAR_CODE
;   30	@ "DATA_PER_RAM"
;   31	#endif
;   32	{
_AM29LV160_Init:
.DEFINE "_AM29LV160_Init"

.VALUE _AM29LV160_Init

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "AM29LV160_Init",32,"_AM29LV160_Init"

.LINE 32

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

.CLASS 65

.VALUE -4

.TYPE 12

.ENDEF

.DEFINE "man_code"

.CLASS 65

.VALUE -5

.TYPE 12

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	DEC	SP
	DEC	SP
;   33		volatile UINT8 *addr = ( UINT8 * ) ( ( UINT32 ) paddr & AM29LV160_MASK_BITS ) ;
.LINE 33

	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
;   34		volatile UINT8 dev_code=0, man_code=0 ;
.LINE 34

	XOR	A,A
	LD	(IX+-4),A
	XOR	A,A
	LD	(IX+-5),A
;   35	
;   36		// the address passed is the base address of the flash.
;   37		// Setup PRODUCT_IDENTIFICATION_ENTRY MODE
;   38		*( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 38

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

	LD	HL,(IX+-3)
	LD	BC,1365
	ADD	HL,BC
	LD	A,85
	LD	(HL),A
;   40		*( addr + 0xAAA ) = ID_IN_CODE ;
.LINE 40

	LD	HL,(IX+-3)
	LD	BC,2730
	ADD	HL,BC
	LD	A,144
	LD	(HL),A
;   41	
;   42		// get the manufacturer code and device code
;   43		man_code = *addr ;
.LINE 43

	LD	IY,(IX+-3)
	LD	A,(IY)
	LD	(IX+-5),A
;   44		dev_code = *(addr + 2 ) ;
.LINE 44

	LD	IY,(IX+-3)
	LEA	HL,IY+2
	LD	A,(HL)
	LD	(IX+-4),A
;   45	
;   46		// get the device in read mode.
;   47		*addr = CMD_READ_ARRAY ;
.LINE 47

	LD	IY,(IX+-3)
	LD	A,240
	LD	(IY),A
;   48	
;   49		// print the manufacturer code and device code
;   50		printf("\n Manufacturer code : 0x%X", man_code ) ;
	LD	BC,L__0
	PUSH	BC
.LINE 50

	LD	BC,___print_uputch
	LD	(___print_xputch),BC
	CALL	___print_sendstring
	POP	BC
	LD	A,32
	LD	(___print_fmt+1),A
	LD	A,120
	LD	(___print_fmt+4),A
	LD	A,(IX+-5)
	UEXT	HL
	LD	L,A
	LD	BC,HL
	CALL	__itol
	LD	DE,BC
	LD	C,A
	LD	B,0
	PUSH	BC
	PUSH	DE
	CALL	__u_uitoa
	POP	BC
	POP	BC
	LD	BC,___print_sputch
	LD	(___print_xputch),BC
;   51		if( dev_code == AMD_ID_29LV160BB )
.LINE 51

	LD	A,(IX+-4)
	CP	A,73
	JR	NZ,L_3
;   52		{
;   53			printf("\nDevice Id: AM29LV160BB") ;
	LD	BC,L__2
	PUSH	BC
.LINE 53

	LD	BC,___print_uputch
	LD	(___print_xputch),BC
	CALL	___print_sendstring
	POP	BC
	LD	BC,___print_sputch
	LD	(___print_xputch),BC
;   54		}
;   55		else if(  dev_code  == AMD_ID_29LV160TB )
.LINE 55

	JR	L_4
L_3:
	LD	A,(IX+-4)
	CP	A,196
	JR	NZ,L_1
;   56		{
;   57			printf("\nDevice Id: AM29LV160TB") ;
	LD	BC,L__4
	PUSH	BC
.LINE 57

	LD	BC,___print_uputch
	LD	(___print_xputch),BC
	CALL	___print_sendstring
	POP	BC
	LD	BC,___print_sputch
	LD	(___print_xputch),BC
;   58		}
;   59		else
.LINE 59

	JR	L_4
L_1:
;   60		{
;   61			printf("\nUnknown device" ) ;
.LINE 61

	LD	BC,___print_uputch
	LD	(___print_xputch),BC
	LD	BC,L__5
	PUSH	BC
	CALL	___print_sendstring
	POP	BC
	LD	BC,___print_sputch
	LD	(___print_xputch),BC
;   62		}
L_4:
.LINE 62

;   63	
;   64		return SUCCESS ;
.LINE 64

	LD	HL,0
;   65	}
.LINE 65

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AM29LV160_Init ***************************
;Name                         Addr/Register   Size   Type
;___print_sputch                     IMPORT  -----   function
;__u_uitoa                           IMPORT  -----   function
;___print_fmt                        IMPORT     19   variable
;___print_sendstring                 IMPORT  -----   function
;___print_xputch                     IMPORT      3   variable
;___print_uputch                     IMPORT  -----   function
;man_code                              IX-5      1   variable
;dev_code                              IX-4      1   variable
;addr                                  IX-3      3   variable
;num_bytes                             IX+9      4   parameter
;paddr                                 IX+6      3   parameter


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


.ENDFUNC "AM29LV160_Init",65,"_AM29LV160_Init"
	SEGMENT STRSECT
L__0:
	DB	10
	DB	" Manufacturer code : 0x"
	DB	0
L__2:
	DB	10
	DB	"Device Id: AM29LV160BB"
	DB	0
L__4:
	DB	10
	DB	"Device Id: AM29LV160TB"
	DB	0
L__5:
	DB	10
	DB	"Unknown device"
	DB	0
	SEGMENT _driver_TEXT
;   66	
;   67	INT32 AM29LV160_Read( void *paddr, void *pbuf, UINT num_bytes )
;   68	#ifdef _IAR_CODE
;   69	@ "DATA_PER_RAM"
;   70	#endif
;   71	{
_AM29LV160_Read:
.DEFINE "_AM29LV160_Read"

.VALUE _AM29LV160_Read

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "AM29LV160_Read",71,"_AM29LV160_Read"

.LINE 71

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

.TYPE 14

.ENDEF

.DEFINE "pcbuf"

.CLASS 65

.VALUE -6

.TYPE 44

.ENDEF

.DEFINE "pcaddr"

.CLASS 65

.VALUE -9

.TYPE 44

.ENDEF

	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	BC
	PUSH	BC
;   72		UINT nbytes ;
;   73		UINT8 *pcbuf = ( UINT8 * ) pbuf ;
.LINE 73

	LD	BC,(IX+9)
	LD	(IX+-6),BC
;   74		UINT8 *pcaddr = ( UINT8 * ) paddr ;
.LINE 74

	LD	BC,(IX+6)
	LD	(IX+-9),BC
	LD	BC,0
	LD	(IX+-3),BC
;   75	
;   76		// By default the device is in READ ARRAY mode, just copy the
;   77		// contents from the device to the appropraite memory location.
;   78		for( nbytes = 0 ; nbytes < num_bytes ; nbytes++ )
.LINE 78

	JR	L_11
L_9:
;   79		{
;   80			*pcbuf = *pcaddr ;
	LD	HL,(IX+-6)
.LINE 80

	LD	IY,(IX+-9)
	LD	A,(IY)
	LD	(HL),A
;   81			pcbuf++ ;
.LINE 81

	LD	BC,(IX+-6)
	INC	BC
	LD	(IX+-6),BC
;   82			pcaddr++ ;
.LINE 82

	LD	BC,(IX+-9)
	INC	BC
	LD	(IX+-9),BC
	LD	BC,(IX+-3)
	INC	BC
	LD	(IX+-3),BC
;   83		}
L_11:
.LINE 83

	LD	BC,(IX+12)

⌨️ 快捷键说明

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