AVR Instruction Set Nomenclature: Status Register (SREG ...
AVR Instruction Set Nomenclature: Status Register (SREG ...
AVR Instruction Set Nomenclature: Status Register (SREG ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
SPM - Store Program Memory<br />
Description:<br />
SPM can be used to erase a page in the program memory, to write a page in the program memory (that is already erased),<br />
and to set boot loader lock bits. In some devices, the program memory can be written one word at a time, in other devices<br />
an entire page can be programmed simultaneously after first filling a temporary page buffer. In all cases, the program memory<br />
must be erased one page at a time. When erasing the program memory, the Z register is used as page address. When<br />
writing the program memory, the Z register is used as page or word address, and the R1:R0 register pair is used as data.<br />
When setting the boot loader lock bits, the R1:R0 register pair is used as data. Refer to the device documentation for<br />
detailed description of SPM usage. This instruction can address the first 64K bytes (32K words) of program memory.<br />
Operation: Comment:<br />
(i) (Z) ← $ffff Erase program memory page<br />
(ii) (Z) ← R1:R0 Write program memory word<br />
(iii) (Z) ← R1:R0 Write temporary page buffer<br />
(iv) (Z) ← TEMP Write temporary page buffer to program memory<br />
(v) BLBITS ← R1:R0 <strong>Set</strong> boot loader lock bits<br />
Syntax: Operands: Program Counter:<br />
(i)-(v) SPM None PC ← PC + 1<br />
120<br />
16-bit Opcode:<br />
<strong>Status</strong> <strong>Register</strong> (<strong>SREG</strong>) and Boolean Formula:<br />
Example:<br />
1001 0101 1110 1000<br />
I T H S V N Z C<br />
- - - - - - - -<br />
; This example shows SPM write of one word for devices with word write<br />
ldi r31, $F0 ; Load Z high byte<br />
clr r30 ; Clear Z low byte<br />
ldi r16, $CF ; Load data to store<br />
mov r1, r16<br />
ldi r16, $FF<br />
mov r0, r16<br />
ldi r16,$03 ; Enable SPM, erase page<br />
out SPMCR, r16 ;<br />
spm ; Erase page starting at $F000<br />
ldi r16,$01 ; Enable SPM, store to program memory<br />
out SPMCR, r16 ;<br />
spm ; Execute SPM, store R1:R0 to program memory location $F000<br />
Words: 1 (2 bytes)<br />
Cycles: depends on the operation<br />
<strong>Instruction</strong> <strong>Set</strong>