📄 at49bv162_driver.s
字号:
; 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 + -