
2010 Microchip Technology Inc.
DS70102K-page 49
dsPIC30F Flash Programming Specification
11.10 Reading Code Memory
Reading from code memory is performed by executing
a series of TBLRD instructions and clocking out the data
using the REGOUT command. To ensure efficient
execution and facilitate verification on the programmer,
four instruction words are read from the device at a
time.
reading code memory. In Step 1, the Reset vector is
exited. In Step 2, the 24-bit starting source address for
reading is loaded into the TBLPAG and W6 registers.
The upper byte of the starting source address is stored
to TBLPAG, while the lower 16 bits of the source
address are stored to W6.
To minimize the reading time, the packed instruction
word format that was utilized for writing is also used for
reading (see
Figure 11-5). In Step 3, the write pointer
W7 is initialized, and four instruction words are read
from code memory and stored to working registers
W0:W5. In Step 4, the four instruction words are
clocked out of the device from the VISI register using
the REGOUT command. In Step 5, the internal PC is
reset to 0x100, as a precautionary measure, to prevent
the PC from incrementing into unimplemented memory
when large devices are being read. Lastly, in Step 6,
Steps 3-5 are repeated until the desired amount of
code memory is read.
TABLE 11-10: SERIAL INSTRUCTION EXECUTION FOR READING CODE MEMORY
Command
(Binary)
Data
(Hexadecimal)
Description
Step 1: Exit the Reset vector.
0000
040100
000000
GOTO 0x100
NOP
Step 2: Initialize TBLPAG and the read pointer (W6) for TBLRD instruction.
0000
200xx0
880190
2xxxx6
MOV
#<SourceAddress23:16>, W0
MOV
W0, TBLPAG
MOV
#<SourceAddress15:0>, W6
Step 3: Initialize the write pointer (W7) and store the next four locations of code memory to W0:W5.
0000
EB0380
000000
BA1B96
000000
BADBB6
000000
BADBD6
000000
BA1BB6
000000
BA1B96
000000
BADBB6
000000
BADBD6
000000
BA0BB6
000000
CLR
W7
NOP
TBLRDL
[W6], [W7++]
NOP
TBLRDH.B
[W6++], [W7++]
NOP
TBLRDH.B
[++W6], [W7++]
NOP
TBLRDL
[W6++], [W7++]
NOP
TBLRDL
[W6], [W7++]
NOP
TBLRDH.B
[W6++], [W7++]
NOP
TBLRDH.B
[++W6], [W7++]
NOP
TBLRDL
[W6++], [W7]
NOP