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.
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 |