📄 intflash_infopage_driver_f93.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\INTFLASH_INFOPAGE_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_nRowsPerInfoPage:
DB 2
.DEFINE "g_nRowsPerInfoPage"
.ALIAS "_g_nRowsPerInfoPage"
.CLASS 69
.VALUE _g_nRowsPerInfoPage
.TYPE 12
.ENDEF
; 1 /*
; 2 * File : IntFlash_InfoPage_Driver.c
; 3 * Description: This file contains the Flash driver for use in data persistence
; 4 * where the values are stored in information page
; 5 * Author :
; 6 * Created on : 03-FEB-2005
; 7 *
; 8 * Copyright 2004 ZiLOG Inc. ALL RIGHTS RESERVED.
; 9 *
; 10 * This file contains unpublished confidential and proprietary information
; 11 * of ZiLOG, Inc.
; 12 * NO PART OF THIS WORK MAY BE DUPLICATED, STORED, PUBLISHED OR DISCLOSED
; 13 * IN ANY FORM WITHOUT THE PRIOR WRITTEN CONSENT OF ZiLOG, INC.
; 14 * This is not a license and no use of any kind of this work is authorized
; 15 * in the absence of a written license granted by ZiLOG, Inc. in ZiLOG's
; 16 * sole discretion
; 17 */
; 18
; 19 #include <stdio.h>
; 20 #include <string.h>
; 21 #include "IntFlash_InfoPage_Driver.h"
; 22
; 23 #ifdef _EZ80F91
; 24 #include <eZ80F91.h>
; 25 #endif
; 26
; 27 #ifdef _EZ80F92
; 28 #include <eZ80F92.h>
; 29 #endif
; 30
; 31 #ifdef _EZ80F93
; 32 #include <eZ80F93.h>
; 33 #endif
; 34
; 35 #ifdef _IAR_CODE
; 36 #define LOC_ADDR UINT32
; 37 #else
; 38 #define LOC_ADDR UINT
; 39 #endif
; 40
; 41 #ifdef _EZ80F91
; 42 UINT8 g_nRowsPerInfoPage = 1 ;
; 43 #endif
; 44
; 45 #if defined(_EZ80F92) || defined(_EZ80F93)
; 46 UINT8 g_nRowsPerInfoPage = 2 ;
SEGMENT _driver_TEXT
; 47 #endif
; 48
; 49
; 50 INT IntFlash_IP_Init( VOID *paddr, UINT32 num_bytes )
; 51 #ifdef _IAR_CODE
; 52 @ "DATA_PER_RAM"
; 53 #endif
; 54 {
_IntFlash_IP_Init:
.DEFINE "_IntFlash_IP_Init"
.VALUE _IntFlash_IP_Init
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "IntFlash_IP_Init",54,"_IntFlash_IP_Init"
.LINE 54
.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
; 55
; 56 // Unprotect the flash blocks
; 57 // write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
; 58 FLASH_KEY = 0xB6 ;
.LINE 58
LD A,182
OUT0 (245),A
; 59 FLASH_KEY = 0x49 ;
.LINE 59
LD A,73
OUT0 (245),A
; 60
; 61 // set the FLASH_FDIV register
; 62 #ifdef _EZ80F91
; 63 FLASH_FDIV = 0xFF ; //( UINT8) ( ulFdiv & 0xFF ) ;
; 64 #endif
; 65
; 66 #ifdef _EZ80F92
; 67 FLASH_FDIV = 0x66 ;
; 68 #endif
; 69
; 70 #ifdef _EZ80F93
; 71 FLASH_FDIV = 0x66 ;
.LINE 71
LD A,102
OUT0 (249),A
; 72 #endif
; 73
; 74 // write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
; 75 FLASH_KEY = 0xB6 ;
.LINE 75
LD A,182
OUT0 (245),A
; 76 FLASH_KEY = 0x49 ;
.LINE 76
LD A,73
OUT0 (245),A
; 77 // enable write/erase protect for boot block (32KB)
; 78 // disable write/erase protect for other blocks.
; 79 FLASH_PROT = 0x00 ;
.LINE 79
XOR A,A
OUT0 (250),A
; 80
; 81 return SUCCESS ;
.LINE 81
LD HL,0
; 82 }
.LINE 82
LD SP,IX
POP IX
RET
;**************************** _IntFlash_IP_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_IP_Init",82,"_IntFlash_IP_Init"
; 83
; 84 INT32 IntFlash_IP_Read( VOID *paddr, VOID *pbuf, UINT num_bytes )
; 85 #ifdef _IAR_CODE
; 86 @ "DATA_PER_RAM"
; 87 #endif
; 88 {
_IntFlash_IP_Read:
.DEFINE "_IntFlash_IP_Read"
.VALUE _IntFlash_IP_Read
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "IntFlash_IP_Read",88,"_IntFlash_IP_Read"
.LINE 88
.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 -5
.TYPE 13
.ENDEF
.DEFINE "pcBuf"
.CLASS 65
.VALUE -8
.TYPE 44
.ENDEF
.DEFINE "nrow"
.CLASS 65
.VALUE -9
.TYPE 12
.ENDEF
.DEFINE "ncol"
.CLASS 65
.VALUE -10
.TYPE 12
.ENDEF
.DEFINE "npage"
.CLASS 65
.VALUE -11
.TYPE 12
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
LEA IY,IX+-11
LD SP,IY
; 89
; 90 // the number of bytes passed to this function is always less than
; 91 // 512 bytes
; 92
; 93 UINT16 nBytes ;
; 94 volatile UINT8 *pcBuf = ( UINT8 * ) pbuf ;
.LINE 94
LD BC,(IX+9)
LD (IX+-8),BC
; 95 volatile UINT8 *pcaddr = ( UINT8 * ) paddr ;
.LINE 95
LD BC,(IX+6)
LD (IX+-3),BC
; 96 volatile UINT8 npage ;
; 97 volatile UINT8 nrow ;
; 98 volatile UINT8 ncol ;
; 99
; 100 npage = GETPAGE( (LOC_ADDR) pcaddr ) | FLASH_PAGE_INFO_ACCESS ;
.LINE 100
LD BC,130048
LD HL,(IX+-3)
CALL __iand
LD BC,10
CALL __ishrs
LD A,L
SET 7,A
LD (IX+-11),A
; 101 nrow = GETROW( (LOC_ADDR) pcaddr ) ;
.LINE 101
LD BC,896
LD HL,(IX+-3)
CALL __iand
LD BC,7
CALL __ishru
LD (IX+-9),L
; 102 ncol = GETCOL( (LOC_ADDR) pcaddr ) ;
.LINE 102
LD A,(IX+-3)
RES 7,A
LD (IX+-10),A
; 103 FLASH_PAGE = npage ;
.LINE 103
LD A,(IX+-11)
OUT0 (252),A
; 104 FLASH_ROW = nrow ;
.LINE 104
LD A,(IX+-9)
OUT0 (253),A
; 105 FLASH_COL = ncol ;
.LINE 105
LD A,(IX+-10)
OUT0 (254),A
XOR A,A
LD (IX+-5),A
XOR A,A
LD (IX+-4),A
; 106
; 107 // now in a loop read the num_bytes values from FLASH_DATA register
; 108 for( nBytes = 0 ; nBytes < num_bytes ; nBytes++ )
.LINE 108
JR L_6
L_4:
; 109 {
; 110 #ifdef _EZ80F91
; 111 *pcBuf = FLASH_DATA ;
; 112 #endif
; 113 #if defined(_EZ80F92) || defined(_EZ80F93)
; 114 *pcBuf = *((UINT8*) pcaddr) ;
LD HL,(IX+-8)
.LINE 114
LD IY,(IX+-3)
LD A,(IY)
LD (HL),A
; 115 #endif
; 116 pcBuf++ ;
.LINE 116
LD BC,(IX+-8)
INC BC
LD (IX+-8),BC
; 117 #if defined(_EZ80F92) || defined(_EZ80F93)
; 118 pcaddr++ ;
.LINE 118
LD BC,(IX+-3)
INC BC
LD (IX+-3),BC
LD BC,(IX+-5)
INC BC
LD (IX+-5),C
LD (IX+-4),B
; 119 #endif
; 120 }
L_6:
.LINE 120
LD BC,(IX+-5)
CALL __stoiu
LD BC,(IX+12)
OR A,A
SBC HL,BC
JR C,L_4
; 121
; 122 FLASH_PAGE = 0 ;
.LINE 122
XOR A,A
OUT0 (252),A
; 123 FLASH_ROW = 0 ;
.LINE 123
XOR A,A
OUT0 (253),A
; 124 FLASH_COL = 0 ;
.LINE 124
XOR A,A
OUT0 (254),A
; 125 return num_bytes ;
.LINE 125
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 126 }
.LINE 126
LD SP,IX
POP IX
RET
;**************************** _IntFlash_IP_Read ***************************
;Name Addr/Register Size Type
;npage IX-11 1 variable
;ncol IX-10 1 variable
;nrow IX-9 1 variable
;pcBuf IX-8 3 variable
;nBytes IX-5 2 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: 26 (bytes)
; Spill Code: 0 (instruction)
.ENDFUNC "IntFlash_IP_Read",126,"_IntFlash_IP_Read"
; 127
; 128 INT32 IntFlash_IP_Write( VOID *paddr, VOID *pbuf, UINT num_bytes )
; 129 #ifdef _IAR_CODE
; 130 @ "DATA_PER_RAM"
; 131 #endif
; 132 {
_IntFlash_IP_Write:
.DEFINE "_IntFlash_IP_Write"
.VALUE _IntFlash_IP_Write
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "IntFlash_IP_Write",132,"_IntFlash_IP_Write"
.LINE 132
.DEFINE "paddr"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -