beautypg.com

Atmega16 boot loader parameters, Atmega16(l) – Rainbow Electronics ATmega64L User Manual

Page 251

background image

251

ATmega16(L)

2466B–09/01

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<

call

Do_spm

; re-enable the RWW section

ldi

spmcrval, (1<

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, SPMCR

sbrs

temp1, RWWSB

; If RWWSB is set, the RWW section is not

; ready yet

ret

; re-enable the RWW section

ldi

spmcrval, (1<

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

ATmega16 Boot Loader
Parameters

In Table 100 through Table 102, the parameters used in the description of the self pro-
gramming are given.