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

📄 at49bv162_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\AT49BV162_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       : AT49BV162_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 "AT49BV162_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 AT49BV162_Init(  void *paddr, UINT32 num_bytes   )
;   29	#ifdef _IAR_CODE
;   30	@ "DATA_PER_RAM"
;   31	#endif
;   32	{
_AT49BV162_Init:
.DEFINE "_AT49BV162_Init"

.VALUE _AT49BV162_Init

.CLASS 2

.TYPE 68

.ENDEF

.BEGFUNC "AT49BV162_Init",32,"_AT49BV162_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 & AT49BV162_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 + 0x554 ) = FLASH_CODE_55 ;
.LINE 39

	LD	HL,(IX+-3)
	LD	BC,1364
	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		// the address passed is the base address of the flash.
;   47		// Setup PRODUCT_IDENTIFICATION_EXIT MODE
;   48		*( addr + 0xAAA ) = FLASH_CODE_AA ;
.LINE 48

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

	LD	HL,(IX+-3)
	LD	BC,1364
	ADD	HL,BC
	LD	A,85
	LD	(HL),A
;   50		*( addr + 0xAAA ) = ID_OUT_CODE  ;
.LINE 50

	LD	HL,(IX+-3)
	LD	BC,2730
	ADD	HL,BC
;   51	
;   52		// print the manufacturer code and device code
;   53		printf("\n Manufacturer code : 0x%X", man_code ) ;
	LD	BC,L__0
	PUSH	BC
	LD	A,240
	LD	(HL),A
.LINE 53

	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
;   54		if( dev_code  == ATM_ID_BV162A_163A )
.LINE 54

	LD	A,(IX+-4)
	CP	A,192
	JR	NZ,L_3
;   55		{
;   56			printf("\nDevice Id: AT49BV162/163A") ;
	LD	BC,L__2
	PUSH	BC
.LINE 56

	LD	BC,___print_uputch
	LD	(___print_xputch),BC
	CALL	___print_sendstring
	POP	BC
	LD	BC,___print_sputch
	LD	(___print_xputch),BC
;   57		}
;   58		else if( dev_code == ATM_ID_BV162AT_163AT )
.LINE 58

	JR	L_4
L_3:
	LD	A,(IX+-4)
	CP	A,194
	JR	NZ,L_1
;   59		{
;   60			printf("\nDevice Id: AT49BV162T/163AT") ;
	LD	BC,L__4
	PUSH	BC
.LINE 60

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

	JR	L_4
L_1:
;   63		{
;   64			printf("\nUnknown device" ) ;
.LINE 64

	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
;   65		}
L_4:
.LINE 65

;   66	
;   67		return SUCCESS ;
.LINE 67

	LD	HL,0
;   68	}
.LINE 68

	LD	SP,IX
	POP	IX
	RET	


;**************************** _AT49BV162_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 "AT49BV162_Init",68,"_AT49BV162_Init"
	SEGMENT STRSECT
L__0:
	DB	10
	DB	" Manufacturer code : 0x"
	DB	0
L__2:
	DB	10
	DB	"Device Id: AT49BV162/163A"
	DB	0
L__4:
	DB	10
	DB	"Device Id: AT49BV162T/163AT"
	DB	0
L__5:
	DB	10
	DB	"Unknown device"
	DB	0
	SEGMENT _driver_TEXT
;   69	
;   70	INT32 AT49BV162_Read( void *paddr, void *pbuf, UINT num_bytes )
;   71	#ifdef _IAR_CODE
;   72	@ "DATA_PER_RAM"
;   73	#endif
;   74	{
_AT49BV162_Read:
.DEFINE "_AT49BV162_Read"

.VALUE _AT49BV162_Read

.CLASS 2

.TYPE 69

.ENDEF

.BEGFUNC "AT49BV162_Read",74,"_AT49BV162_Read"

.LINE 74

.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
;   75		UINT nbytes ;
;   76		UINT8 *pcbuf = ( UINT8 * ) pbuf ;
.LINE 76

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

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

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

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

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

	LD	BC,(IX+-9)

⌨️ 快捷键说明

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