7.6 Bit-Reversed and Modulo Addressing
Bit-reversed and modulo addressing is supported on all dsPIC DSC devices.
Bit-reversed addressing is used for simplifying and speeding-up the writes to X-space data arrays in FFT (Fast Fourier Transform) algorithms. When enabled, pre-increment or post-increment addressing modes will reverse the lower order address bits used by instructions.
Modulo, or circular addressing, provides an automated means to support circular data buffers using the dsPIC hardware. When used, software no longer needs to perform data address boundary checks on arrays.
The compiler does not directly support the use of bit-reversed and modulo addressing; that is, it cannot generate code from C source that assumes these addressing modes are enabled when accessing memory. If either of these addressing modes are set up on the target device, then it is the programmer’s responsibility to ensure that the compiler does not use those registers that are specified to use either modulo or bit-reversed addressing as pointers. Particular care must be exercised if interrupts can occur while one of these addressing modes is enabled.
It is possible to define arrays in C that will be suitably aligned in
memory for modulo addressing by hand-written assembly language functions. The
aligned
attribute may be used to define arrays that are positioned for
use as incrementing modulo buffers. Initialization of the start and end addresses, as well
as the registers that modulo address is applied must be written by hand to match the array
specification. The reverse
attribute may be used to define arrays that are
positioned for use as decrementing modulo buffers. For more information on these
attributes, see the 14.1.1 Function Specifiers
section. For more information on bit-reversed or modulo addressing, see your device Family
Reference Manual (FRM).