Microchip Technology DM330023-2 Data Sheet

Page of 330
dsPIC33FJ32MC202/204 and dsPIC33FJ16MC304
DS70283K-page 54
© 2007-2012 Microchip Technology Inc.
4.8.3
READING DATA FROM PROGRAM 
MEMORY USING PROGRAM SPACE 
VISIBILITY
The upper 32 Kbytes of data space may optionally be
mapped into any 16K word page of the program space.
This option provides transparent access to stored
constant data from the data space without the need to
use special instructions (such as TBLRDL/H). 
Program space access through the data space occurs
if the Most Significant bit of the data space EA is ‘1’ and
program space visibility is enabled by setting the PSV
bit in the Core Control register (CORCON<2>). The
location of the program memory space to be mapped
into the data space is determined by the Program
Space Visibility Page register (PSVPAG). This 8-bit
register defines any one of 256 possible pages of
16K words in program space. In effect, PSVPAG
functions as the upper 8 bits of the program memory
address, with the 15 bits of the EA functioning as the
lower bits. By incrementing the PC by 2 for each
program memory word, the lower 15 bits of data space
addresses directly map to the lower 15 bits in the 
corresponding program space addresses. 
Data reads to this area add a cycle to the instruction
being executed, since two program memory fetches
are required. 
Although each data space address 8000h and higher
maps directly into a corresponding program memory
address (see Figure 4-9), only the lower 16 bits of the
24-bit program word are used to contain the data. The
upper 8 bits of any program space location used as
data should be programmed with ‘1111 1111’ or
‘0000 0000’ to force a NOP. This prevents possible
issues should the area of code ever be accidentally
executed.
For operations that use PSV and are executed outside
a  REPEAT loop, the MOV  and MOV.D instructions
require one instruction cycle in addition to the specified
execution time. All other instructions require two
instruction cycles in addition to the specified execution
time.
For operations that use PSV, and are executed inside
a REPEAT loop, these instances require two instruction
cycles in addition to the specified execution time of the
instruction:
• Execution in the first iteration
• Execution in the last iteration
• Execution prior to exiting the loop due to an 
interrupt
• Execution upon re-entering the loop after an 
interrupt is serviced
Any other iteration of the REPEAT loop will allow the
instruction using PSV to access data, to execute in a
single cycle.
FIGURE 4-9:
PROGRAM SPACE VISIBILITY OPERATION
Note:
PSV access is temporarily disabled during
table reads/writes.
23
15
0
PSVPAG
Data Space
Program Space
0x0000
0x8000
0xFFFF
02
0x000000
0x800000
0x010000
0x018000
When CORCON<2> = 
1
 and EA<15> = 
1
:
The data in the page 
designated by 
PSVPAG is mapped 
into the upper half of 
the data memory 
space...
Data EA<14:0>
...while the lower 15 bits 
of the EA specify an 
exact address within 
the PSV area. This 
corresponds exactly to 
the same lower 15 bits 
of the actual program 
space address.
PSV Area