📄 intflash_driver_f91.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_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_nPagesPerBlock:
DB 16
.DEFINE "g_nPagesPerBlock"
.ALIAS "_g_nPagesPerBlock"
.CLASS 69
.VALUE _g_nPagesPerBlock
.TYPE 12
.ENDEF
; 1 /*
; 2 * File : IntFlash_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 "IntFlash_Driver.h"
; 21 #ifdef _EZ80F91
; 22 #include <eZ80F91.h>
; 23 #endif
; 24
; 25 #ifdef _EZ80F92
; 26 #include <eZ80F92.h>
; 27 #endif
; 28
; 29 #ifdef _EZ80F93
; 30 #include <eZ80F93.h>
; 31 #endif
; 32
; 33 #ifdef _IAR_CODE
; 34 #define LOC_ADDR UINT32
; 35 #else
; 36 #define LOC_ADDR UINT
; 37 #endif
; 38
; 39
; 40 // global variables
; 41 //UINT32 g_nSysClock = 50000000UL ;
; 42
; 43 #ifdef _EZ80F91
; 44 UINT8 g_nPagesPerBlock = 16 ;
SEGMENT _driver_TEXT
; 45 #endif
; 46
; 47 #ifdef _EZ80F92
; 48 UINT8 g_nPagesPerBlock = 16 ;
; 49 #endif
; 50
; 51 /* Renuka : Defined g_nPagesPerBlock for F92 */
; 52 #ifdef _EZ80F93
; 53 UINT8 g_nPagesPerBlock = 16 ;
; 54 #endif
; 55
; 56
; 57 INT IntFlash_Init( VOID *paddr, UINT32 num_bytes )
; 58 #ifdef _IAR_CODE
; 59 @ "DATA_PER_RAM"
; 60 #endif
; 61 {
_IntFlash_Init:
.DEFINE "_IntFlash_Init"
.VALUE _IntFlash_Init
.CLASS 2
.TYPE 68
.ENDEF
.BEGFUNC "IntFlash_Init",61,"_IntFlash_Init"
.LINE 61
.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
; 62 // Unprotect the flash blocks
; 63 // write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
; 64 FLASH_KEY = 0xB6 ;
.LINE 64
LD A,182
OUT0 (245),A
; 65 FLASH_KEY = 0x49 ;
.LINE 65
LD A,73
OUT0 (245),A
; 66
; 67 // set the FLASH_FDIV register
; 68 #ifdef _EZ80F91
; 69 FLASH_FDIV = 0xFF ; //( UINT8) ( ulFdiv & 0xFF ) ;
.LINE 69
LD A,255
OUT0 (249),A
; 70 #endif
; 71
; 72 #ifdef _EZ80F92
; 73 FLASH_FDIV = 0x66 ;
; 74 #endif
; 75
; 76 #ifdef _EZ80F93
; 77 FLASH_FDIV = 0x66 ;
; 78 #endif
; 79
; 80 // write FLASH_KEY register to unprotect teh FLASH_FDIV and FLASH_PROT registers
; 81 FLASH_KEY = 0xB6 ;
.LINE 81
LD A,182
OUT0 (245),A
; 82 FLASH_KEY = 0x49 ;
.LINE 82
LD A,73
OUT0 (245),A
; 83 // enable write/erase protect for boot block (32KB)
; 84 // disable write/erase protect for other blocks.
; 85 FLASH_PROT = 0x00 ;
.LINE 85
XOR A,A
OUT0 (250),A
; 86
; 87 return SUCCESS ;
.LINE 87
LD HL,0
; 88 }
.LINE 88
LD SP,IX
POP IX
RET
;**************************** _IntFlash_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_Init",88,"_IntFlash_Init"
; 89
; 90 INT32 IntFlash_Read( VOID *paddr, VOID *pbuf, UINT num_bytes )
; 91 #ifdef _IAR_CODE
; 92 @ "DATA_PER_RAM"
; 93 #endif
; 94 {
_IntFlash_Read:
.DEFINE "_IntFlash_Read"
.VALUE _IntFlash_Read
.CLASS 2
.TYPE 69
.ENDEF
.BEGFUNC "IntFlash_Read",94,"_IntFlash_Read"
.LINE 94
.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 -2
.TYPE 13
.ENDEF
.DEFINE "pcBuf"
.CLASS 65
.VALUE -5
.TYPE 44
.ENDEF
.DEFINE "pcaddr"
.CLASS 65
.VALUE -8
.TYPE 44
.ENDEF
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH BC
DEC SP
DEC SP
; 95
; 96 // the number of bytes passed to this function is always less than
; 97 // 512 bytes
; 98
; 99 UINT16 nBytes ;
; 100 volatile UINT8 *pcBuf = ( UINT8 * ) pbuf ;
.LINE 100
LD BC,(IX+9)
LD (IX+-5),BC
; 101 volatile UINT8 *pcaddr = ( UINT8 * ) paddr ;
.LINE 101
LD BC,(IX+6)
LD (IX+-8),BC
; 102
; 103 #ifdef _EZ80F91
; 104 // set the PAGE, ROW and COL registers
; 105 FLASH_PAGE = GETPAGE( (LOC_ADDR) pcaddr ) ;
.LINE 105
LD BC,1046528
LD HL,(IX+-8)
CALL __iand
LD BC,11
CALL __ishrs
LD A,L
OUT0 (252),A
; 106 FLASH_ROW = GETROW( (LOC_ADDR) pcaddr ) ;
.LINE 106
LD BC,1792
LD HL,(IX+-8)
CALL __iand
LD BC,8
CALL __ishru
LD A,L
OUT0 (253),A
; 107 FLASH_COL = GETCOL( (LOC_ADDR) pcaddr ) ;
.LINE 107
LD A,(IX+-8)
OUT0 (254),A
XOR A,A
LD (IX+-2),A
XOR A,A
LD (IX+-1),A
; 108 #endif
; 109
; 110 // now in a loop read the num_bytes values from FLASH_DATA register
; 111 for( nBytes = 0 ; nBytes < num_bytes ; nBytes++ )
.LINE 111
JR L_5
L_3:
; 112 {
; 113 #ifdef _EZ80F91
; 114 *pcBuf = FLASH_DATA ;
.LINE 114
LD IY,(IX+-5)
IN0 A,(246)
LD (IY),A
; 115 #endif
; 116 #if defined(_EZ80F92) || defined(_EZ80F93)
; 117 *pcBuf = *pcaddr ;
; 118 #endif
; 119 pcBuf++ ;
.LINE 119
LD BC,(IX+-5)
INC BC
LD (IX+-5),BC
LD BC,(IX+-2)
INC BC
LD (IX+-2),C
LD (IX+-1),B
; 120 #if defined(_EZ80F92) || defined(_EZ80F93)
; 121 pcaddr++ ;
; 122 #endif
; 123 }
L_5:
.LINE 123
LD BC,(IX+-2)
CALL __stoiu
LD BC,(IX+12)
OR A,A
SBC HL,BC
JR C,L_3
; 124 return num_bytes ;
.LINE 124
LD BC,(IX+12)
XOR A,A
LD E,A
LD HL,BC
; 125 }
.LINE 125
LD SP,IX
POP IX
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -