Atmel ATmega328P Xplained Mini MEGA328P-XMINI MEGA328P-XMINI Data Sheet
![Atmel](https://files.manualsbrain.com/attachments/0369829915bda09f9c2e00fb805a7753579683b5/common/fit/150/50/8d2bf08978ec3e5bc63f4343ac5e91ce8d0e40045619fa520d910d64af8f/brand_logo.png)
Product codes
MEGA328P-XMINI
274
ATmega48A/PA/88A/PA/168A/PA/328/P [DATASHEET]
Atmel-8271H-AVR- ATmega-Datasheet_08/2014
;
re-enable the RWW section
ldi
spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call
Do_spm
;
transfer data from RAM to Flash page buffer
ldi
looplo, low(PAGESIZEB);init loop variable
ldi
loophi, high(PAGESIZEB);not required for
PAGESIZEB<=256
Wrloop:
ld
r0, Y+
ld
r1, Y+
ldi
spmcrval, (1<<SPMEN)
call
Do_spm
adiw
ZH:ZL, 2
sbiw
loophi:looplo, 2;use subi for PAGESIZEB<=256
brne
Wrloop
;
execute Page Write
subi
ZL, low(PAGESIZEB);restore pointer
sbci
ZH, high(PAGESIZEB);not required for PAGESIZEB<=256
ldi
spmcrval, (1<<PGWRT) | (1<<SPMEN)
call
Do_spm
;
re-enable the RWW section
ldi
spmcrval, (1<<RWWSRE) | (1<<SPMEN)
call
Do_spm
;
read back and check, optional
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, SPMCSR
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: