LOOPR2: DEC.W #1, R5 ;
Wait
BPL LOOPR2 ;
MOV.B @ER1, R5H ;
Read data = H'00?
BEQ PWVFOK ;
If read data = H'00, branch to PWVFOK
CMP.B #05, R0H ;
Prewrite-verify executed 6 times?
BEQ ABEND1 ;
If prewrite-verify executed 6 times, branch
to ABEND1
SHLL.W E4 ;
Double prewrite loop counter value
INC.B R0H ;
Prewrite-verify fail count + 1
→
R0H
BRA PREWRS ;
Prewrite again
PWVFOK: CMP.L ER2, ER1 ;
Last address?
BEQ ERASES ;
INC.L #1, ER1 ;
A 1
→
R1
BRA PREWRN ;
If not last address, prewrite next address
;
Execute erase
ERASES: SUB.W R0, R0 ;
R0: erase-verify fail count
MOV.L #BLKSTR:32,ER3 ;
ER3: top address of block to be erased
MOV.W #d, E4 ;
Set initial erase loop counter value
ERASE: CMP.W #025A, R0 ;
R0 = H'025A? (erase-verify fail count = 603?)
BEQ ABEND2 ;
If R0 = H'025A, branch to ABEND2
INC.W #1, R0 ;
Erase-verify fail count + 1
→
R0
MOV.W E4, R4 ;
MOV.W #f, R5 ;
Start watchdog timer
MOV.W R5, @TCSR:16 ;
MOV.B #42, R5H ;
Set E bit
MOV.B R5H, @FLMCR:8 ;
LOOPE: PUSH.L ER5
POP.L ER5
PUSH.L ER5
POP.L ER5
PUSH.L ER5
POP.L ER5
DEC.W #1, R4 ;
Erase
BPL LOOPE ;
MOV.B #40, R5H ;
MOV.B R5H, @FLMCR:8 ;
Clear E bit
MOV.W #A500, R5 ;
MOV.W R5, @TCSR:16 ;
Stop watchdog timer
;
Execute erase-verify
MOV.B #48, R5H ;
MOV.B R5H, @FLMCR:8 ;
Set EV bit
MOV.W #e , R4 ;
R4: erase-verify loop counter
LOOPEV: DEC.W #1, R4 ;
BPL LOOPEV ;
Wait
EVR2: MOV.B #FF, @ER3 ;
Dummy write
MOV.W #h, R4 ;
R4: erase-verify loop counter
598
www.DataSheet4U.com