📄 eepromctrlex0205.asm
字号:
$DGS REG_PAR, _p, 0103H, 0FFFFH, 010CH, 011H, 00H, 01H
$DGS BEG_BLK, ??bb00_ucBlankBlock, U, U, 00H, 064H, 01H, 00H
$DGS AUX_BEG, 03H, 00H, 00H
$DGS END_BLK, ??eb00_ucBlankBlock, U, U, 00H, 064H, 01H, 00H
$DGS AUX_END, 05H
$DGS END_FUN, ??ef_ucBlankBlock, U, U, 00H, 065H, 01H, 00H
$DGS AUX_END, 07H
$DGS GLV_SYM, _ucParamCheck, U, U, 0800CH, 020H, 01H, 02H
$DGS AUX_FUN, 00H, U, U, 02A0H, 00H
$DGS BEG_FUN, ??bf_ucParamCheck, U, U, 00H, 065H, 01H, 00H
$DGS AUX_BEG, 0391H, 00H, 028EH
$DGS BEG_BLK, ??bb00_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_BEG, 02H, 00H, 0292H
$DGS END_BLK, ??eb00_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_END, 04H
$DGS BEG_BLK, ??bb01_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_BEG, 05H, 00H, 0296H
$DGS END_BLK, ??eb01_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_END, 07H
$DGS BEG_BLK, ??bb02_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_BEG, 08H, 00H, 029AH
$DGS END_BLK, ??eb02_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_END, 0AH
$DGS BEG_BLK, ??bb03_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_BEG, 0BH, 00H, 00H
$DGS END_BLK, ??eb03_ucParamCheck, U, U, 00H, 064H, 01H, 00H
$DGS AUX_END, 0DH
$DGS END_FUN, ??ef_ucParamCheck, U, U, 00H, 065H, 01H, 00H
$DGS AUX_END, 0FH
$DGS GLV_SYM, _ucEEPROM_BLOCK, U, U, 0500CH, 020H, 01H, 03H
$DGS AUX_STR, 00H, 00H, 02H, 02H, 00H, 00H, 00H
$DGS GLV_SYM, _ucEEPROM_BANK, U, U, 0500CH, 020H, 01H, 03H
$DGS AUX_STR, 00H, 00H, 02H, 02H, 00H, 00H, 00H
$DGS GLV_SYM, _ucDataBuf, U, U, 0CH, 020H, 01H, 03H
$DGS AUX_STR, 00H, 00H, 04H, 04H, 00H, 00H, 00H
$DGS GLV_SYM, _WordAddr, U, U, 08H, 020H, 01H, 00H
$DGS AUX_STR, 0EH, 00H, 04H, 00H, 00H, 00H, 00H
$DGS GLV_SYM, _ucEntryRAM, U, U, 030CH, 020H, 01H, 03H
$DGS AUX_STR, 00H, 00H, 064H, 064H, 00H, 00H, 00H
$DGS GLV_SYM, _FlashStart, U, U, 08001H, 02H, 00H, 02H
$DGS GLV_SYM, _FlashEnd, U, U, 08001H, 02H, 00H, 02H
$DGS GLV_SYM, _FlashEnv, U, U, 08001H, 02H, 00H, 02H
$DGS GLV_SYM, _CheckFLMD, U, U, 0800CH, 02H, 00H, 02H
$DGS GLV_SYM, _FlashBlockBlankCheck, U, U, 0800CH, 02H, 00H, 02H
$DGS GLV_SYM, _FlashBlockErase, U, U, 0800CH, 02H, 00H, 02H
$DGS GLV_SYM, _EEPROMWrite, U, U, 0800CH, 02H, 00H, 02H
$DGS GLV_SYM, _FlashWordWrite, U, U, 0800CH, 02H, 00H, 02H
EXTRN _FlashStart
EXTRN _FlashEnd
EXTRN _FlashEnv
EXTRN _CheckFLMD
EXTRN _FlashBlockBlankCheck
EXTRN _FlashBlockErase
EXTRN _EEPROMWrite
EXTRN _FlashWordWrite
PUBLIC _ucEEPROM_BLOCK
PUBLIC _ucEEPROM_BANK
PUBLIC _ucDataBuf
PUBLIC _WordAddr
PUBLIC _ucEntryRAM
PUBLIC _ucEEPROMInitEx
PUBLIC _ucEEPROMReadEx
PUBLIC _ucEEPROMWriteEx
PUBLIC _ucEEPROMChangeEx
PUBLIC _ucEEPROMEraseEx
PUBLIC _ucEEPROMGetRemainEx
PUBLIC _ucEEPROMUseBlockSearchEx
PUBLIC _usEEPROMWriteTopSearchEx
PUBLIC _usEEPROMDataSearchEx
PUBLIC _ucEEPROMUnableEx
PUBLIC _SelfFlashModeOn
PUBLIC _SelfFlashModeOff
PUBLIC _ucSelfFlashInitialize
PUBLIC _ucSelfFlashBlockErase
PUBLIC _ucSelfFlashEEPROMWrite
PUBLIC _ucSelfFlashWordWrite
PUBLIC _usBlockToAddress
PUBLIC _ucUseProhibitionBlock
PUBLIC _ucEffectiveBlock
PUBLIC _ucBlankBlock
PUBLIC _ucParamCheck
@@BITS BSEG
@@CNST CSEG UNITP
_ucEEPROM_BLOCK: DB 09H ; 9
DB 0AH ; 10
_ucEEPROM_BANK: DB 00H ; 0
DB 00H ; 0
@@R_INIT CSEG UNITP
@@INIT DSEG UNITP
@@DATA DSEG UNITP
_ucDataBuf: DS (4)
_WordAddr: DS (4)
@@R_INIS CSEG UNITP
@@INIS DSEG SADDRP
@@DATS DSEG SADDRP
_ucEntryRAM: DS (100)
@@CALT CSEG CALLT0
; line 1 : /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++
; line 2 : System : EEPROM emulation
; line 3 : Module name : EEPROM emulation control processing
; line 4 : File name : EEPROMCtrlEx.c
; line 5 : Version name : 1.00
; line 6 : Target CPU : uPD78F0547(78K0/KF2)
; line 7 : Last updated : 2005/09/08
; line 8 : ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++*/
; line 9 :
; line 10 : #pragma section @@CODE SLF_CTRL AT 7400H
; line 11 :
; line 12 : #include "EEPROMCtrlEx0205.h"
; line 13 :
; line 14 :
; line 15 : /*--------------------------------------------------------------
; -----
; line 16 : Function name : ucEEPROMInitEx(user access function)
; line 17 : Arguments : None
; line 18 : Return value : Normal(TRUE:00H) / Noemal end(Block error)(NMLB
; LK:01H) /
; line 19 : Prohibition of all block use(ERRALL:FBH) / Devi
; ce error(ERRDEV:FDH) /
; line 20 : Initialization error(ERRINIT:FEH)
; line 21 : Summary : initialize EEPROM emulation
; line 22 : ----------------------------------------------------------------
; --*/
; line 23 : UCHAR ucEEPROMInitEx( void ) /* EEPROM emulation Initia
; lize processing */
; line 24 : {
SLF_CTRL CSEG AT 7400H
_ucEEPROMInitEx:
$DGL 1,20
push hl ;[INF] 1, 4
push ax ;[INF] 1, 4
push ax ;[INF] 1, 4
push ax ;[INF] 1, 4
push ax ;[INF] 1, 4
movw ax,sp ;[INF] 2, 8
movw hl,ax ;[INF] 1, 4
??bf_ucEEPROMInitEx:
; line 25 : USHORT usFlagAdr; /* Effective/invalid flag address */
; line 26 : UCHAR ucFindBlock; /* Discovery block num ber */
; line 27 : UCHAR ucCount; /* Elimination counter */
; line 28 : UCHAR ucFlags; /* Various flags */
; line 29 : /* D7:Block error */
; line 30 : /* D6:Block elimination */
; line 31 : /* D5:not use */
; line 32 : /* D4:not use */
; line 33 : /* D3:not use */
; line 34 : /* D2:not use */
; line 35 : /* D1:not use */
; line 36 : /* D0:not use */
; line 37 : UCHAR ucResult; /* Processing result */
; line 38 : UCHAR i;
; line 39 :
; line 40 : /* Parameter Check */
; line 41 : if( PARAM_OK == FALSE ){ /* parameter error? */
$DGL 0,18
call !_ucParamCheck ;[INF] 3, 7
inc c ;[INF] 1, 2
bnz $?L0003 ;[INF] 2, 6
??bb00_ucEEPROMInitEx:
; line 42 : return( ERRPRM ); /* then rerun */
$DGL 0,19
movw bc,#0F4H ; 244 ;[INF] 3, 6
br !?L0002 ;[INF] 3, 6
??eb00_ucEEPROMInitEx:
?L0003:
; line 43 : }
; line 44 :
; line 45 : /* Variable initialization */
; line 46 : ucFindBlock = 0xFF; /* Discovery block number initia
; lization */
$DGL 0,23
mov a,#0FFH ; 255 ;[INF] 2, 4
mov [hl+5],a ; ucFindBlock ;[INF] 2, 8
; line 47 : ucFlags = 0x00; /* Various flag initialization */
$DGL 0,24
inc a ;[INF] 1, 2
mov [hl+3],a ; ucFlags ;[INF] 2, 8
; line 48 : /* Block elimination and effective block setting processing */
; line 49 : for ( i = 0 ; i < EEPROM_BLOCK_NO ; i++ ){ /* loop for use
; block several minutes */
$DGL 0,26
mov [hl+1],a ; i ;[INF] 2, 8
?L0005:
mov a,[hl+1] ; i ;[INF] 2, 8
cmp a,#02H ; 2 ;[INF] 2, 4
bc $$+5 ;[INF] 2, 6
br !?L0006 ;[INF] 3, 6
??bb01_ucEEPROMInitEx:
; line 50 : /* Elimination flag Off */
; line 51 : ucFlags &= ~FL_DOERS;
$DGL 0,28
mov a,[hl+3] ; ucFlags ;[INF] 2, 8
and a,#0F7H ; 247 ;[INF] 2, 4
mov [hl+3],a ; ucFlags ;[INF] 2, 8
; line 52 : /* Bank setting */
; line 53 : SET_BANK( ucEEPROM_BANK[ i ] );
$DGL 0,30
mov a,[hl+1] ; i ;[INF] 2, 8
mov c,a ;[INF] 1, 2
push hl ;[INF] 1, 4
movw hl,#_ucEEPROM_BANK ;[INF] 3, 6
mov a,[hl+c] ;[INF] 1, 6
pop hl ;[INF] 1, 4
mov BANK,a ;[INF] 2, 5
; line 54 : /* The bank top address (a flag storage address) acquisition *
; /
; line 55 : usFlagAdr = BLOCK_TO_ADDRESS( ucEEPROM_BLOCK[ i ] );
$DGL 0,32
mov a,[hl+1] ; i ;[INF] 2, 8
mov c,a ;[INF] 1, 2
push hl ;[INF] 1, 4
movw hl,#_ucEEPROM_BLOCK ;[INF] 3, 6
mov a,[hl+c] ;[INF] 1, 6
pop hl ;[INF] 1, 4
mov x,#00H ; 0 ;[INF] 2, 4
xch a,x ;[INF] 1, 2
call !_usBlockToAddress ;[INF] 3, 7
movw ax,bc ;[INF] 1, 4
mov [hl+7],a ; usFlagAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov [hl+6],a ; usFlagAdr ;[INF] 2, 8
; line 56 : /* An elimination condition judgment */
; line 57 : if( BLOCK_IS_PROHIBIT( (UCHAR*)usFlagAdr ) == FALSE ){ /* A b
; lock is a ban on use state? */
$DGL 0,34
xch a,x ;[INF] 1, 2
call !_ucUseProhibitionBlock ;[INF] 3, 7
inc c ;[INF] 1, 2
bnz $?L0011 ;[INF] 2, 6
??bb02_ucEEPROMInitEx:
; line 58 : if ( BLOCK_IS_EFFECTIVE( (UCHAR*)usFlagAdr ) == TRUE ){ /* A
; block is effective? */
$DGL 0,35
mov a,[hl+6] ; usFlagAdr ;[INF] 2, 8
xch a,x ;[INF] 1, 2
mov a,[hl+7] ; usFlagAdr ;[INF] 2, 8
call !_ucEffectiveBlock ;[INF] 3, 7
inc c ;[INF] 1, 2
dec c ;[INF] 1, 2
bnz $?L0010 ;[INF] 2, 6
??bb03_ucEEPROMInitEx:
; line 59 : if ( ucFindBlock == 0xFF ){ /* Effective block non-dis
; covery */
$DGL 0,36
mov a,[hl+5] ; ucFindBlock ;[INF] 2, 8
inc a ;[INF] 1, 2
bnz $?L0012 ;[INF] 2, 6
??bb04_ucEEPROMInitEx:
; line 60 : ucFindBlock = i; /* Block number setting */
$DGL 0,37
mov a,[hl+1] ; i ;[INF] 2, 8
mov [hl+5],a ; ucFindBlock ;[INF] 2, 8
??eb04_ucEEPROMInitEx:
br $?L0011 ;[INF] 2, 6
?L0012:
; line 61 : }
; line 62 : else{ /* finished with effective block discovery
; */
$DGL 0,39
??bb05_ucEEPROMInitEx:
; line 63 : ucFlags |= FL_DOERS; /* Elimination flag On */
$DGL 0,40
mov a,[hl+3] ; ucFlags ;[INF] 2, 8
or a,#08H ; 8 ;[INF] 2, 4
mov [hl+3],a ; ucFlags ;[INF] 2, 8
??eb05_ucEEPROMInitEx:
??eb03_ucEEPROMInitEx:
br $?L0011 ;[INF] 2, 6
?L0010:
; line 64 : }
; line 65 : }
; line 66 : else{ /* block=An invalid state (an abnormal stat
; e) */
$DGL 0,43
??bb06_ucEEPROMInitEx:
; line 67 : ucFlags |= FL_DOERS; /* Elimination flag On */
$DGL 0,44
mov a,[hl+3] ; ucFlags ;[INF] 2, 8
or a,#08H ; 8 ;[INF] 2, 4
mov [hl+3],a ; ucFlags ;[INF] 2, 8
??eb06_ucEEPROMInitEx:
?L0011:
??eb02_ucEEPROMInitEx:
; line 68 : }
; line 69 : }
; line 70 : /* Processing to erase a block */
; line 71 : if ( ucFlags & FL_DOERS ){ /* Elimination flag On? */
$DGL 0,48
mov a,[hl+3] ; ucFlags ;[INF] 2, 8
bf a.3,$?L0014 ;[INF] 3, 8
??bb07_ucEEPROMInitEx:
; line 72 : SelfFlashModeOn(); /* changes to a self-programming
; mode */
$DGL 0,49
call !_SelfFlashModeOn ;[INF] 3, 7
; line 73 : if ( ucSelfFlashInitialize() == FALSE ){ /* self-programmi
; ng Initialization */
$DGL 0,50
call !_ucSelfFlashInitialize ;[INF] 3, 7
inc c ;[INF] 1, 2
bnz $?L0016 ;[INF] 2, 6
??bb08_ucEEPROMInitEx:
; line 74 : SelfFlashModeOff(); /* changes to a normal mode */
$DGL 0,51
call !_SelfFlashModeOff ;[INF] 3, 7
; line 75 : return ( ERRINIT ); /* An initialization error */
$DGL 0,52
movw bc,#0FEH ; 254 ;[INF] 3, 6
br !?L0002 ;[INF] 3, 6
??eb08_ucEEPROMInitEx:
?L0016:
; line 76 : }
; line 77 : /* An elimination counter minute loop */
; line 78 : for ( ucCount = ERASENUM + 1; ucCount > 0; ucCount-- ) {
$DGL 0,55
mov a,#01H ; 1 ;[INF] 2, 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -