Atmega162/v – Rainbow Electronics ATmega162V User Manual
Page 227

227
ATmega162/V
2513E–AVR–09/03
ldi
looplo, low(PAGESIZEB)
;init loop variable
ldi
loophi, high(PAGESIZEB)
;not required for PAGESIZEB<=256
subi
YL, low(PAGESIZEB)
;restore pointer
sbci
YH, high(PAGESIZEB)
Rdloop:
lpm
r0, Z+
ld
r1, Y+
cpse
r0, r1
jmp
Error
sbiw
loophi:looplo, 1
;use subi for PAGESIZEB<=256
brne
Rdloop
; return to RWW section
; verify that RWW section is safe to read
Return:
in
temp1, SPMCR
sbrs
temp1, RWWSB
; If RWWSB is set, the RWW section is not
; ready yet
ret
; re-enable the RWW section
ldi
spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call
Do_spm
rjmp
Return
Do_spm:
; check for previous SPM complete
Wait_spm:
in
temp1, SPMCR
sbrc
temp1, SPMEN
rjmp
Wait_spm
; input: spmcrval determines SPM action
; disable interrupts if enabled, store status
in
temp2, SREG
cli
; check that no EEPROM write access is present
Wait_ee:
sbic
EECR, EEWE
rjmp
Wait_ee
; SPM timed sequence
out
SPMCR, spmcrval
spm
; restore SREG (to enable interrupts if originally enabled)
out
SREG, temp2
ret