Microchip Technology MA330019 Data Sheet

Page of 460
© 2007-2012 Microchip Technology Inc.
DS70291G-page  71
dsPIC33FJ32MC302/304, dsPIC33FJ64MCX02/X04 AND dsPIC33FJ128MCX02/X04
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 TBLRDH). 
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 0x8000 and higher
maps directly into a corresponding program memory 
address (see 
), 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 allows the 
instruction using PSV to access data, to execute in a 
single cycle.
FIGURE 4-11:
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