Description

SPM can be used to erase a page in the Program memory and to write a page in the Program memory (that is already erased). An entire page can be programmed simultaneously after first filling a temporary page buffer. The Program memory must be erased one page at a time. When erasing the Program memory, the RAMPZ and Z-register are used as page address. When writing the Program memory, the RAMPZ and Z-register are used as page or word address, and the R1:R0 register pair is used as data(1).

Refer to the device documentation for detailed description of SPM usage. This instruction can address the entire Program memory.

Note: 1. R1 determines the instruction high byte, and R0 determines the instruction low byte.
 

Operation:

 

(i)

(RAMPZ:Z) ← $ffff

Erase Program memory page

(ii)

(RAMPZ:Z) ← R1:R0

Load Page Buffer

(iii)

(RAMPZ:Z) ← BUFFER

Write Page Buffer to Program memory

(iv)

(RAMPZ:Z) ← $fff, Z ← Z + 2

Erase Program memory page, Z post incremented

(v)

BLBITS ← R1:R0, Z ← Z + 2

Load Page Buffer, Z post incremented

(vi)

(RAMPZ:Z) ←BUFFER, Z ← Z + 2

Write Page Buffer to Program memory, Z post incremented

 

Syntax:

Operands:

Program Counter:

(i)-(iii)

SPM

None

PC ← PC + 1

(iv)-(vi)

SPM Z+

None

PC ← PC + 1

16-bit Opcode:

(i)-(iii) 1001 0101 1110 1000
(iv)-(vi) 1001 0101 1111 1000