Note the following details of the code protection feature on Microchip devices:
•Microchip products meet the specification contained in their particular Microchip Data Sheet.
•Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
•There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
•Microchip is willing to work with the customer who is concerned about the integrity of their code.
•Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digit al Millennium Copyright Act. If suc h a c t s
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information contained in this publication regarding device
applications and t he lik e is provided only for your convenience
and may be su perseded by upda t es . It is y our responsibility to
ensure that your application meets with your specifications.
MICROCHIP MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND WHETHER EXPRESS OR
IMPLIED, WRITTEN OR ORAL, STATUTORY OR
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,
QUALITY, PERFORMANCE, MERCHANTABILITY OR
FITNESS FOR PURPOSE. Microchip disclaims all liability
arising from this information and its use. Use of Microchip
devices in life supp ort and/or safety ap plications is entir ely at
the buyer’s risk, and the buyer agrees to defend, indemnify and
hold harmless M icrochip from any and all dama ges, claims,
suits, or expenses re sulting from such use. No licens es are
conveyed, implicitly or otherwise, under any Microchip
intellectual property rights.
Trademarks
The Microchip name and logo, the Microchip logo, Accuron,
dsPIC, K
EELOQ, microID, MPLAB, PIC, PICmicro, PICSTART,
PRO MATE, PowerSmart, rfPIC and SmartShunt are
registered trademarks of Microchip Technology Incorporated
in the U.S.A. and other countries.
AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB,
SEEVAL, SmartSensor and The Embedded Control Solutions
Company are registered trademarks of Microchip Technology
Incorporated in the U.S.A.
Analog-for-the-Digital Age, Application Maestro, CodeGuard,
dsPICDEM, dsPICDEM.net, dsPICworks, ECAN,
ECONOMONITOR, FanSense, FlexROM, fuzzyLAB,
In-Circuit Serial Programming, ICSP, ICEPIC, Linear Active
Thermistor, Mindi, MiWi, MPASM, MPLIB, MPLINK, PICkit,
PICDEM, PICDEM.net, PICLAB, PICtail, PowerCal,
PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB,
rfPICDEM, Select Mode, Smart Serial, SmartT el, Total
Endurance, UNI/O, WiperLock and ZENA are trademarks of
Microchip Technology I ncorporat ed in the U.S.A. and other
countries.
SQTP is a service mark of Microchip Technology Incorporated
in the U.S.A.
All other trademarks mentioned herein are property of their
respective companies.
Microchip received ISO/TS-16949:2002 certification for its worldwide
headquarters, design and wafer fabrication facilities in Chandler and
Tempe, Arizona, Gresham, Oregon and Mountain View, California. The
Company’s quality system processes and procedures are for its PIC
MCUs and dsPIC DSCs, KEELOQ
EEPROMs, microperipherals, nonvolatile memory and analog
products. In addition, Microchip’s quality system for the design and
manufacture of development systems is ISO 9001:2000 certified.
for Uninterrupted Power Supply (UPS), inverters,
Switched mode power supplies, power factor correc-
There are two device subfamilies within the dsPIC33F
family of devices. They are the General Purpose
Family and the Motor Control Family.
The General Purpose Family is ideal for a wide variety
of 16-bit MCU embedded applications. The variants
with codec interfaces are well-suited for speech and
tion and also for controlling the power management
module in servers, telecommunication equipment and
other industrial equipment.
The device names, pin counts, memory sizes and
peripheral availability of each family are listed below,
followed by their pinout diagrams.
audio processing applications.
The Motor Control Family supports a variety of motor
control applications, such as brushless DC motors,
single and 3-phase induction motors and switched
reluctance moto rs. The se pro duct s are also well-s uited
4.0Flash Program Mem o ry................................... ........................................................................................................................... 77
9.0Power-Savi n g Features................................................................................................ ............................................................ 157
15.0 Motor Control PWM Module. .................................................................................................................................................... 175
21.0 Data Converter Interface (DCI) Module....................................................................................................................................261
22.0 10-bit/12-bit Analog-to-Digital Converte r ( ADC)....................................................................... ................................................ 275
23.0 Special Features...................................................................................................................................................................... 289
24.0 Instruction Set Summary.......................................................................................................................................................... 297
25.0 Development Support............................................................................................................................................................... 305
Index ................................................................................................................................................................................................. 359
The Microchip Web Site....................................... .............................................................................................................................. 365
Customer Change Notification Service .............................................................................................................................................. 365
It is our intention to provide our valued customers with the best documentation possible to ensure successful use of your Microchip
products. To this end, we will continue to improve our publications t o better suit your needs. Our publications will be refined and
enhanced as new volumes and updates are introduced.
If you have any questions or c omm ents regarding t his publication, p lease c ontact the M arket ing Co mmunications Department via
E-mail at docerrors@microchip.com or fax the Reader Response Form in the back of this data sheet to (480) 792-4150. We
welcome your feedback.
Most Current Data Sheet
To obtain the most up-to-date version of this data sheet, please register at our Worldwide Web site at:
http://www.microchip.com
You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.
The last character of the literature number is the version number, (e.g., DS30000A is version A of document DS30000).
Errata
An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
of silicon and revision of document to which it applies.
To determine if an errata sheet exists for a particular device, please check with one of the following:
• Microchip’s Worldwide Web site; http://www.microchip.com
• Your local Microchip sales office (see last page)
When contacting a sales office, please specify which device, revision of silicon and data sheet (include literature number) you are
using.
Customer Notification System
Register on our web site at www.microchip.com to receive the most current information on all of our products.
of this group of dsPIC33F devices. It is not
intended to be a compr ehensive refer ence
source. To complement the information in
this data sheet, refer to the “dsPIC30FFamily Reference Manual” (DS70046).
This documen t conta i ns dev ic e spec if i c in for m at i on fo r
the following devices:
• dsPIC33FJ64GP206
• dsPIC33FJ64GP306
• dsPIC33FJ64GP310
• dsPIC33FJ64GP706
• dsPIC33FJ64GP708
• dsPIC33FJ64GP710
• dsPIC33FJ128GP206
• dsPIC33FJ128GP306
• dsPIC33FJ128GP310
• dsPIC33FJ128GP706
• dsPIC33FJ128GP708
• dsPIC33FJ128GP710
• dsPIC33FJ256GP506
• dsPIC33FJ256GP510
• dsPIC33FJ256GP710
• dsPIC33FJ64MC506
• dsPIC33FJ64MC508
• dsPIC33FJ64MC510
• dsPIC33FJ64MC706
• dsPIC33FJ64MC710
• dsPIC33FJ128MC506
• dsPIC33FJ128MC510
• dsPIC33FJ128MC706
• dsPIC33FJ128MC708
• dsPIC33FJ128MC710
• dsPIC33FJ256MC510
• dsPIC33FJ256MC710
The dsPIC33F General Purpose and Motor Control
Families of devices include devices with a wide range
of pin counts (64, 80 and 100), different program
memory sizes (64 Kb ytes, 128 Kbytes and 25 6 Kbytes)
and different RAM sizes (8 Kbytes, 16 Kbytes and
30 Kbytes)
This makes these families suitable for a wide variety of
high-performance digital signal control application. The
devices are pin compatible with the PIC24H family of
devices, and also share a very high degree of compatibility with the dsPIC30F family devices. This allows easy
migration betwee n device families as may be necessitated by the specific functionality, computational
resource and sys tem cost requirem ents of the applic ation.
The dsPIC33F device famil y employs a powe rful 16-b it
architecture that seamlessly integrates the control
features of a Microcontroller (MCU) with the
computational ca pabil ities of a D igital Signal Process or
(DSP). The resulting functionality is ideal for
applications that rely on high-speed, repetitive
computations, as well as control.
The DSP engine, dual 40-bit accumulators, hardware
support for division operations, barrel shifter, 17 x 17
multiplier, a large array of 16-bit working registers and
a wide variety of data addressing modes, together
provide the dsPIC33F Central Processing Unit (CPU)
with extensive mathematical processing capability.
Flexible and deterministic interrupt handling, coupled
with a powerful array of peripherals, renders the
dsPIC33F devices suitable for control applications.
Further, Direct Memory Access (DMA) enables
overhead-free transfer of data between several
peripherals and a dedicated DMA RAM. Reliable, field
programmable Flash program memory ensures
scalability of applications that use dsPIC33F devices.
Figure 1-1 shows a general block diagram of the
various core and peripheral modules in the dsPIC33F
family of devices, while Table 1-1 lists the functions of
the various pins shown in the pinout diagrams.
Legend:CMOS = CMOS compatible input or output; Analog = Analog input
Pin
Type
I
O
I/O
I/O
I
O
I
O
I
O
I/O
I
I/O
I
I/O
I
I
I
I
O
I
I
I
I
I
I
I
O
O
O
O
O
O
O
O
I/PSTMaster Clear (R es et ) input. This pin is an active-low R eset to the device.
I
I
O
I
I/O
ST = Schmitt Trigger input with CMOS levels; O = Output; I = Input; P = Power
Buffer
Type
ST/CMOS—External clock source input. Always associated wit h O SC 1 pin function.
ST
ST
ST
—
ST
—
ST
—
ST
ST
ST
ST
ST
ST
ST
ST
ST
CMOS
ST
ST
ST
ST
ST
ST
ST
—
—
—
—
—
—
—
—
ST
ST
—
ST/CMOS—Oscillator crystal input. ST buffer when configured in RC mode; CMOS otherwise.
Oscillator crystal out put. Connects to crystal o r resonator in Crystal Osc illa to r mode.
Optionally functions as CLKO in RC and EC mode s. A lw ays associated with OSC 2
pin function.
Can be software program med for internal weak pull- ups on al l in puts .
Data Converter Interface fr am e synchronization pin.
Data Conve r ter Interface serial clock input/ output pin.
Data Converter Interface ser ia l data input pin.
Data Converter Interface serial data output pin.
ECAN1 bus receive pin.
ECAN1 bus transmit pin .
ECAN2 bus receive pin.
ECAN2 bus transmit pin .
Data I/O pin for programming/debugging communication channel 1.
Clock input pin for program m i ng/debugging communication channel 1.
Data I/O pin for programming/debugging communication channel 2.
Clock input pin for program m i ng/debugging communication channel 2.
Data I/O pin for programming/debugging communication channel 3.
Clock input pin for program m i ng/debugging communication channel 3.
Quadrature Encoder Index Pulse input.
Quadrature Encoder P has e A i nput in QEI mode.
Auxiliary Timer External Clock/Gate input in Timer mode.
Quadrature Encoder P has e A i nput in QEI mode.
Auxiliary Timer External Clock/Gate input in Timer mode.
Position Up/Down Cou nt er Dir ec tion State.
Externa l interrup t 0 .
Externa l interrup t 1 .
Externa l interrup t 2 .
Externa l interrup t 3 .
Externa l interrup t 4 .
PWM Fault A input.
PWM Fault B input.
PWM 1 low output.
PWM 1 high output.
PWM 2 low output.
PWM 2 high output.
PWM 3 low output.
PWM 3 high output.
PWM 4 low output.
PWM 4 high output.
Compare Fault A i nput (for Compare Channels 1, 2, 3 and 4).
Compare Fault B i nput (for Compare Channels 5, 6, 7 and 8).
Compare outputs 1 through 8.
Oscillator crystal out put. Connects to crystal o r resonator in Crystal Osc illa to r mode.
Optionally functions as CL KO i n RC and EC modes.
of this group of dsPIC33F devices. It is not
intended to be a compr ehensive refer ence
source. To complement the information in
this data sheet, refer to the “dsPIC30FFamily Reference Manual” (DS70046).
The dsPIC33F CPU module has a 16-bit (data) modified
Harvard archit ecture with an enha nced instruction set,
including significant support for DSP. The CPU has a
24-bit instructio n word with a variab le length opcode field.
The Program Counter (PC) is 23 bits wide and
addresses up to 4M x 2 4 bits of user prog ram memory
space. The actual amount of program memory
implemented varies by de v ice. A single-cycle instr uction
prefetch mecha ni sm i s used to help maintain throughput
and provides predictable execution. All instructions
execute in a single cycle, with the exception of
instructions that change the program flow, the double
word move (MOV.D) instructio n and the tabl e instructions .
Overhead-free program loop constructs are supported
using the DO and REPEAT instructions, both of which are
interruptible at an y po in t.
The dsPIC33F devices have sixteen, 16-bit working
registers in th e programmer’s model . Each of the workin g
registers can s erve as a d ata, ad dres s or ad dr es s offs et
register. The 16th working register (W15) operates as a
software S tack Pointer (SP) for interrupts a nd c alls .
The dsPIC33F instruction set has two classes of
instructions: MCU and DSP. These two instruction
classes are seamlessly integrated into a single CPU.
The instruction set includes many addressing modes
and is designed for optimum C compiler efficiency. For
most instructions, the dsPIC33F is capable of
executing a data (or program data) memory read, a
working register (data) read, a data memory write and
a program (instruction) memory read per instruction
cycle. As a result, three parameter instructions can be
supported, allowing A + B = C operations to be
executed in a single cycle.
A block diagram of the CPU is shown in Figure 2-1,
and the programmer’s model for the dsPIC33F is
shown in Figure 2-2.
2.1Data Addressing Overview
The data space can be addressed as 32K words or
64 Kbytes and is split into two blocks, referr ed to as X
and Y data memo ry. Each memory block has its own
independent Address Genera tion Unit (AGU). The MCU
class of instructions operates solely through the X memory AGU, which accesses the entire memory map as one
linear data space. Certain DSP instructions operate
through the X and Y AGUs to support dual operand
reads, which splits the data address space into two parts.
The X and Y da t a space boundary is device-spec i fic .
Overhead-free circular buffers (Modulo Addressing
mode) are supported in both X and Y address spaces.
The Modulo Addressing removes the software boundary
checking overhead for DSP algorithms. Furthermore,
the X AGU circular addressing can be used with any of
the MCU class of instructions. The X AGU also support s
Bit-Reversed Addressing to greatly simplify input or
output data reordering for radix-2 FFT algorithms.
The upper 32 Kby tes of the data s pace mem ory map ca n
optionally be mapped into program space at any 16K
program word boundary defined by the 8-bit Program
Space Visibility Page (PSVPAG) register. The program
to data space mapping feature lets any instruction
access program space as if it were data s p a ce .
The data space also includes 2 Kbytes of DMA RAM,
which is primarily us ed for DMA dat a transfers, but may
be used as general purpose RAM.
2.2DSP Engine Overview
The DSP engine feature s a high-speed, 17-bit by 17-bit
multiplier, a 40-bit ALU, two 40-bit saturating
accumulators and a 40-bit bidirectional barrel shifter.
The barrel sh ifter is capa ble of shift ing a 40-bi t value,
up to 16 bits right or left, in a single cycle. The DSP
instructions operate seamlessly with all other
instructions and have been designed for optimal
real-time performance. The MAC instruction an d other
associated instructions can concurrentl y fetch two dat a
operands from memory while multiplying two W
registers and accumulating and optionally saturating
the result in the same cycle. This instruction
functionality req uires that the RAM memory d ata sp ace
be split for these instructions and linear for all others.
Data space partitioning is achieved in a transparent
and flexible mann er thro ugh d edica ting c ert ain w orkin g
registers to each address space.
2.3Special MCU Features
The dsPIC33 F fea tur es a 17-bi t by 17-b it, sing le-c ycle
multiplier that is shared by both the MCU ALU and DSP
engine. The multiplier can perform signed, unsigned
and mixed-sign multiplication. Using a 17-bit by 17-bit
multiplier for 16-bit by 16-bit multiplication not only
allows you to perform mixed-sign multiplication, it also
achieves accurate results for special operations, such
as (-1.0) x (-1.0).
The dsPIC33F supports 16/16 and 32/16 divide
operations, both fractional and integer. All divide
instructions are iterative operations. They must be
executed within a REPEAT loop, resulting in a total
execution time of 19 instruction cycles. The divide
operation can be interrupted during any of those
19 cycles without loss of data.
A 40-bit barrel shifter is used to perform up to a 16-bit,
left or right shift in a single cycle. The barrel shifter can
be used by both MCU and DSP instructions.
C = Clear only bitR = Readable bitU = Unimplemented bit, read as ‘0’
S = Set only bitW = Writable bit-n = Value at POR
‘1’ = Bit is set‘0’ = Bit is clearedx = Bit is unknown
bit 15OA: Accumulator A Overflow Status bit
1 = Accumulator A overflowed
0 = Accumulator A has not overflowed
bit 14OB: Accumulator B Overflow Status bit
1 = Accumulator B overflowed
0 = Accumulator B has not overflowed
bit 13SA: Accumulator A Saturation ‘Sticky’ Status bit
1 = Accumulator A is saturated or has been saturated at some time
0 = Accumulator A is not saturated
bit 12SB: Accumulator B Saturation ‘Sticky’ Status bit
1 = Accumulator B is saturated or has been saturated at some time
0 = Accumulator B is not saturated
bit 11OAB: OA || OB Combined Accumulator Overflow Status bit
1 = Accumulators A or B have overflowed
0 = Neither Accumulators A or B have overflowed
bit 10SAB: SA || SB Combined Accumulator ‘Sticky’ Status bit
1 = Accumulators A or B are saturated or have been saturated at some time in the past
0 = Neither Accumulator A or B are saturated
bit 9DA: DO Loop Active bit
1 = DO loop in progress
0 = DO loop not in progress
bit 8DC: MCU ALU Half Carry/Borrow
1 = A carry-out from the 4th low-order bit (for byte sized da ta) or 8th lo w-order bit (for wo rd sized data )
0 = No carry-out from the 4th low-order bit (for byte sized data) or 8th low-order bit (for word sized
(3)
R/W-0
(2)
Note:This bit may b e read or cleared (not set). Clearing this bit wi ll clear SA and SB.
of the result occurred
data) of the result occurred
R/W-0
(3)
R-0R/W-0R/W-0R/W-0R/W-0
RANOVZC
(1)
(1)
bit
Note 1: This bit may be read or cleared (not set).
2: The IPL<2:0> bits are concatenated with the IPL<3> bit (CORCON<3>) to form the CPU Interrupt Priority
Level. The value in parentheses indicates the IPL if IPL<3> = 1. User interrupts are disabled when
IPL<3> = 1.
3: The IPL<2:0> Status bits are read only when NSTDIS = 1 (INTCON1<15>).
bit 7-5IPL<2:0>: CPU Interrupt Priority Level Status bits
111 = CPU Interrupt Priority Level is 7 (15), user interrupts disabled
110 = CPU Interrupt Priority Level is 6 (14)
101 = CPU Interrupt Priority Level is 5 (13)
100 = CPU Interrupt Priority Level is 4 (12)
011 = CPU Interrupt Priority Level is 3 (11)
010 = CPU Interrupt Priority Level is 2 (10)
001 = CPU Interrupt Priority Level is 1 (9)
000 = CPU Interrupt Priority Level is 0 (8)
bit 4RA: REPEAT Loop Active bit
1 = REPEAT loop in progress
0 = REPEAT loop not in progress
bit 3N: MCU ALU Negative bit
1 = Result was negative
0 = Result was non-negative (zero or positive)
bit 2OV: MCU ALU Overflow bit
This bit is used for signed arit hmetic (2’s c omplement). It in dicates an overflow of the magnitude which
causes the sign bit to change state.
1 = Overflow occurred for signed arithmetic (in this arithmetic operation)
0 = No overflow occurred
bit 1Z: MCU ALU Zero bit
1 = An operation which affects the Z bit has set it at some time in the past
0 = The most recent operation which affects the Z bit has cleared it (i.e., a non-zero result)
bit 0C: MCU ALU Carry/Borrow
1 = A carry-out from the Most Significant bit of the result occurred
0 = No carry-out from the Most Significant bit of the result occurred
bit
(2)
dsPIC33F
Note 1: This bit may be read or cleared (not set).
2: The IPL<2:0> bits are concatenated with the IPL<3> bit (CORCON<3>) to form the CPU Interrupt Priority
Level. The value in parentheses indicates the IPL if IPL<3> = 1. User interrupts are disabled when
IPL<3> = 1.
3: The IPL<2:0> Status bits are read only when NSTDIS = 1 (INTCON1<15>).
Legend:C = Clear only bit
R = Readable bitW = Writable bit-n = Value at POR‘1’ = Bit is set
0’ = Bit is cleared‘x = Bit is unknownU = Unimplemented bit, read as ‘0’
bit 15-13Unimplemented: Read as ‘0’
bit 12US: DSP Multiply Unsigned/ Signed Control bit
1 = DSP engine multiplies are unsigned
0 = DSP engine multiplies are signed
bit 11EDT: Early DO Loop Termination Control bit
1 = Terminate executing DO loop at end of current loop iteration
0 = No effect
bit 10-8DL<2:0>: DO Loop Nesting Level Status bits
111 = 7 DO loops active
•
•
001 = 1 DO loop active
000 = 0 DO loops active
bit 7SATA: AccA Saturation Enable bit
1 = Accumulator A saturation enabled
0 = Accumulator A saturation disabled
bit 6SATB: AccB Saturation Enable bit
1 = Accumulator B saturation enabled
0 = Accumulator B saturation disabled
bit 5SATDW: Data Space Write from DSP Engine Saturation Enable bit
1 = Data space write saturation enabled
0 = Data space write saturation disabled
bit 4ACCSAT: Accumulator Saturation Mode Select bit
The dsPIC33F ALU is 16 bits wide and is capable of
addition, subtraction, bit shifts and logic operations.
Unless otherwise menti oned, ari thmeti c operati ons are
2’s compleme nt in nat ure. Depe nding on the opera tion,
the ALU may affect the values of the Carry (C), Zero
(Z), Negative (N), Overflow (OV) and Digit Carry (DC)
Stat us bi ts in the SR registe r. The C and DC S tatu s bit s
operate as Borrow
for subtraction operations.
The ALU can perform 8-bit or 16-bit operations,
depending on the mode of the instruction that is used.
Data for the ALU operation can come from the W register array , or dat a memory, depending on the addressing mode of the instruction. Likewise, output data from
the ALU can be written to the W regis ter array or a data
memory locatio n.
Refer to the “dsPIC30F/33F Programmer’s ReferenceManual” (DS70157) for information on the SR bits
affected by each instruction.
The dsPIC33F CPU in cor pora tes ha rdw are s upp ort for
both multiplication and division. This includes a dedicated hardware multiplier and support hardware for
16-bit-divisor division.
2.5.1MULTIPLIER
Using the high-speed 17-bit x 17-bit multiplier of the DSP
engine, the ALU supports unsigned, signed or mixed-sign
operation in several MCU multiplication modes:
1. 16-bit x 16-bit signed
2. 16-bit x 16-bit unsigned
3. 16-bit signed x 5-bit (literal) unsigned
4. 16-bit unsigned x 16-bit unsigned
5. 16-bit unsigned x 5-bit (literal) unsigned
6. 16-bit unsigned x 16-bit signed
7. 8-bit unsigned x 8-bit unsigned
2.5.2DIVIDER
The divide block support s 32-bit/16-bit and 16-b it/16-bit
signed and unsigned integer divide operations with the
following data sizes:
and Digit Borrow bits, respectively,
1. 32-bit signed/16-bit signed divide
2. 32-bit unsigned/16-bit unsigned divide
3. 16-bit signed/16-bit signed divide
4. 16-bit unsigned/16-bit unsigned divide
The quotient for all divide instructions ends up in W0
and the remainder in W1. 16-bit signed and unsigned
DIV instructions ca n specify a ny W register for both the
16-bit divisor (Wn) and any W register (aligned) pair
(W(m + 1):Wm) for the 32-bit dividend. The di vide algorithm takes one cycle per bit of divisor, so both
32-bit/16-bit and 16-bit/16-bit instructions take the
same number of cycles to execute.
2.6DSP Engine
The DSP engine consists of a high-speed, 17-bit x
17-bit multiplier, a barrel shifter and a 40-bit
adder/subtracter (with two target accumulators, round
and saturation logic).
The dsPIC33F is a s ingle-cy cle, in structi on flow a rchit ecture; therefo re, concu rrent op eration of the DSP engi ne
with MCU instruction flow is not possible. However, some
MCU ALU and DSP engine resources may be used
concurrently by the s ame in s tru cti on (e .g ., ED, E DAC).
The DSP engine also has the capability to perform
inherent accumulator-to-a cc um ula tor o pera tio ns whic h
require no additional dat a. These instru ctions are ADD,SUB and NEG.
The DSP engine has various options selected through
various bits in the CPU Core Control register
(CORCON), as listed below:
1. Fractional or integer DSP multiply (IF).
2. Signed or unsigned DSP multiply (US).
3.Conventional or convergent rounding (RND).
4. Automatic saturation on/off for AccA (SATA).
5. Automatic saturation on/off for AccB (SATB).
6. Automatic saturation on/off for writes to data
memory (SATDW).
7.Accumulator Saturation mode selection (ACCSAT).
A block diagram of the DSP engine is shown in
Figure 2-3.
The 17-bit x 17-bit multiplier is capable of signed or
unsigned operati on and can mul tiplex i ts ou tput usi ng a
scaler to support either 1.31 fractional (Q31) or 32-bit
integer results. Unsigned operands are zero-extended
into the 17th bit of the multiplier input value. Signed
operands are sign-extended into the 17th bit of the
multiplier input value. The output of the 17-bit x 17-bit
multiplier/scaler is a 33-bit value which is
sign-extended to 40 bi t s. Integer data is inherently represented as a signed two’s complement value, where
the MSb is defined as a sign bit. Generally speaking,
the range of an N-bit two’s complement integer is -2
N-1
to 2
– 1. For a 16-bit integer, the data range is
-32768 (0x8000) to 32767 (0x7FFF) in cluding ‘0’. For a
32-bit integer, the data range is -2,147,483,648
(0x8000 0000) to 2,147,483,647 (0x7FFF FFFF).
When the multiplier is configured for fractional multiplication, the data is represented as a two’s complement
fraction, where the MSb is d efined as a si gn bit an d the
radix point is implied to lie just after the sign bit (QX
format). The range of an N-bit two’s complement
fraction with this im plied radix p oint is -1.0 to (1 – 2
For a 16-bit fraction, the Q15 data range is -1.0
(0x8000) to 0.999969482 (0x7FFF) including ‘0’ and
has a precision of 3.01518x10
the 16 x 16 multiply operati on generates a 1. 31 product
which has a precision of 4.65661 x 10
The same multiplier is used to support the MCU multiply instructions which include integer 16-bit signed,
unsigned and mixed sign multiplies.
The MUL instruction may be directed to use byte or
word sized operands. By te opera nds wil l direct a 16-bit
result, and word operands will direct a 32-bit result to
the specified register(s) in the W array.
-5
. In Fractional mode,
-10
.
N-1
1-N
2.6.2DATA ACCUMULATORS AND
ADDER/SUBTRACTER
The data accumulator consists of a 40-bit
adder/subtracter with automatic sign extension logic. It
can select one of two accumulators (A or B) as its
pre-accumul at i on so ur c e an d post - a cc um ula t io n de sti nation. For the ADD and LAC ins tructions, the data to be
accumulated or load ed ca n be optio nally sca led v ia th e
barrel shifter prior to accumulation.
2.6.2.1Adder/Subtracter, Overflow and
Saturation
The adder/subtracter is a 40-bit adder with an optional
zero input into one s ide, and eith er true, or comp lement
data into the other input. In the case of addition, the
carry/borrow
true data (not complemented), whereas in the case of
subtraction, the carry/borrow
other input is complemented. The adder/subtracter
generates Overflow Status bits, SA/SB and OA/OB,
which are latched and reflected in the STATUS
register:
• Overflow from bit 39: this is a catastrophic
overflow in which the sign of the accumulator is
destroyed.
• Overflow into guard bits 32 through 39: this is a
recoverable overflow. This bit is set whenever all
the guard bits are not identical to each other.
The adder has an additional saturation block which
controls accumulator data saturation, if selected. It
uses the result of the adder, the Overflow Status bits
).
described above and the SAT<A:B> (CORCON<7:6>)
and ACCSAT (CORCON<4>) mode control bits to
determine when and to what value to saturate.
Six STATUS register bits have been provided to
support saturation and overflow; they are:
1. OA:
AccA overflowed into guard bits
2. OB:
AccB overflowed into guard bits
3.SA:
AccA saturated (bit 31 overflow and saturation)
or
AccA overflowed into guard bits and saturated
(bit 39 overflow and s aturation)
4.SB:
AccB saturated (bit 31 overflow and saturation)
or
AccB overflowed into guard bits and saturated
(bit 39 overflow and s aturation)
5.OAB:
Logical OR of OA and OB
6.SAB:
Logical OR of SA and SB
The OA and OB bits are modified each time data
passes through the adder/subtracter. When set, they
indicate that the most recent operation has overflowed
into the accumulator guard bits (bits 32 through 39).
The OA and OB bits can also optionally generate an
arithmetic warning trap when set and the corresponding Overflow T rap Flag Enable bits (OV ATE, OVBTE) in
the INTCON1 register (refer to Section 6.0 “InterruptController”) are set. This allows the user to take
immediate action, fo r example , to corre ct sy stem g ain.
The SA and SB bits are modified each time data
passes through the adder/subtracter, but can only be
cleared by the user. When set, th ey indicate th at the
accumulator has overfl owed it s m aximum range (b it 31
for 32-bit saturation or bit 39 for 40-bit saturation) and
will be saturated (if saturation is enabled). When
saturation is not enabled, SA and SB default to bit 39
overflow and, thus, indicate that a catastrophic overflow has occurred. If the COVTE bit in the INTCON1
register is set, SA and SB bits will generate an
arithmet ic warning trap when saturation is disabled.
The Overflow and Satu ration Status bits c an optionally
be viewed in the STATUS Register (SR) as the logical
OR of OA and OB (in bit OAB) and the logical OR of SA
and SB (in bit SAB). This allows programmers to check
one bit in the STATUS register to determine if either
accumulator has overflowed, or one bit to determine if
either accumulator has s aturated. T his w ould be us eful
for complex number arithmetic which typically uses
both the accumulators.
The device supports three Saturation and Overflow
modes:
1.Bit 39 Overflow and Saturation:
When bit 39 overflow and saturation occurs, the
saturation logic loads the maximally positive 9.31
(0x7FFFFFFFFF), or maximally negative 9.31
value (0x8000000000), into the target accumulator. The SA or SB bit is set and remains set until
cleared by the user. This is referred to as ‘super
saturation’ and provides protection against erroneous data or unexpected algorithm problems
(e.g., gain calculations).
2.Bit 31 Overflow and Saturation:
When bit 31 overflow and saturation occurs, the
saturation logic then loads the maximally positive 1.31 value (0x007FFFFFFF), or maximally
negative 1.31 value (0x0080000000), into the
target accumulator. The SA or SB bit is set and
remains set until cleared by the user. When this
Saturation mode is in effect, the guard bits are
not used (so the OA, OB or OAB bits are never
set).
3. Bit 39 Catastrophic Overflow:
The bit 39 Overflow Status bit from the adder is
used to set t h e SA or S B bit , whi c h r e ma i ns set
until cleared by the user. No saturation operation
is performed and the accumulator is allowed to
overflow (destroying it s sign). If the C OVTE bit in
the INTCON1 register is set, a catastrophic
overflow can initiate a trap exception.
2.6.2.2Accumulator ‘Write Back’
The MAC class of instructions (with the exception of
MPY, MPY.N, ED and EDAC) can optionally write a
rounded version of the high word (bits 31 through 16)
of the accumulator that is not targeted by the instructio n
into data spac e memory. The write is performed across
the X bus into combined X and Y address space. The
following addressing modes are supported:
1. W13, Register Direct:
The rounded contents of the non-target
accumulator are written into W13 as a
1.15 fraction.
2.[W13]+ = 2, Regis ter Indirect with Post- Increment:
The rounded conten ts of the non- target accumulator are written into the address pointed to by
W13 as a 1.15 fraction. W13 is then
incremented by 2 (for a word write).
2.6.2.3Round Logic
The round logic is a combinational block which
performs a conventional (biased) or convergent
(unbiased) round function during an accumulator write
(store). The Round mode is determined by the state of
the RND bit in the CORCON register. It g enerates a
16-bit, 1.15 data value which is passed to the data
space write s aturati on log ic. If round ing is n ot in dicate d
by the instruction, a trunca ted 1.15 d ata valu e is s tored
and the least significant word is si mpl y dis ca rded.
Conventional rounding zero-exten ds bit 15 of t he accumulator and adds it to the ACCxH word (bits 16 th rough
31 of the accumulator). If the ACCxL word (bits 0
through 15 of th e a cc umul ato r) is between 0x8000 and
0xFFFF (0x8000 included), ACCxH is incremented. If
ACCxL is between 0x0000 and 0x7FFF, ACCxH is left
unchanged. A consequence of this algorithm is that
over a succession of random rounding operations, the
value tends to be biased slightly positive.
Convergent (or unbiased) rounding operates in the
same manner as conventional rounding, except when
ACCxL equals 0x8000. In this case, the Least Significant bit (bit 16 of the accumulator) of ACCxH is
examined. If it is ‘1’, ACCxH is incremented. If it is ‘0’,
ACCxH is not modified. Assuming that bit 16 is
effectively ran dom in na ture, this scheme remo ve s any
rounding bias that may accumulate.
The SAC and SAC.R instructions store either a
truncated (SAC), or rounded (SAC.R) version of the
contents of the target accumulator to data memory via
the X bus, subject to data saturation (see
Section 2.6.2.4 “Data Space Write Saturation”). For
the MAC class of instructions, the accumulator
write-back operation will function in the same manner,
addressing combined MCU (X and Y) data space
though the X bus. For this class of instruc tions, the data
is always subject to rounding.
In addition to adder/subtrac ter saturation, writes to dat a
space can also be saturated but without affecting the
contents of the source accumulator. The data space
write saturation logic block accepts a 16-bit, 1.15 fractional value from the round logic block as its input,
together with overflow status from the original source
(accumulator) and the 1 6-bit round adde r . These in puts
are combined and used to select the appropriate 1.15
fractional value as output to write to data space
memory.
If the SATDW bit in the CORCON register is set, data
(after rounding or truncation) is tes te d for ove rflo w and
adjusted accordingly, For input data greater than
0x007FFF, data written to memo ry is forced to the maximum positi ve 1. 15 val ue, 0x 7FFF. For input data less
than 0xFF8000, da ta wr itten to me mory i s forced to th e
maximum negative 1.15 value, 0x8000. The Most
Significant bit of the s ource (bit 39) is used to determine
the sign of the operand being tested.
If the SA TDW bi t in the CORCON regis ter is not set , the
input data is always passed through unmodified under
all conditions.
2.6.3BARREL SHIFTER
The barrel shifter is capable of performing up to 16-bit
arithmetic or logic right shifts, or up to 16-bit left shifts
in a single c ycle. The sou rce can be ei ther of th e two
DSP accumulators or the X bus (to support multi-bit
shifts of register or memory data).
The shifter requi res a signed binary value to determine
both the magnitude (num ber of bits) and direction of the
shift operation. A po sitive value shif ts the operand right.
A negative value shifts the operand left. A value of ‘ 0’
does not modify the operand.
The barrel shifter is 40 bits wide, thereby obtaining a
40-bit result for DSP shift operati ons and a 16- bit result
for MCU shift operations. Data from the X bus is presented to the barrel shifter between bit positions 16 to
31 for right shifts, and between bit positions 0 to 16 for
left shifts.
of this group of dsPIC33F devices. It is not
intended to be a compr ehensive refer ence
source. To complement the information in
this data sheet, refer to the “dsPIC30FFamily Reference Manual” (DS70046).
The dsPIC33F architecture features separate program
and data memory spaces and buses. This architecture
also allows the direct access of program memory from
the data space during code execution.
3.1Program Address Space
The program address memory space of the dsPIC33F
devices is 4M instructions. The space is addressable by a
24-bit value derived from either the 23-bit Program Counter
(PC) during program execution, or from table operation
or data space remapping as described in Section 3.6“Interfacing Program and Data Memory Spaces”.
User access to the program memo ry space is restri cted
to the lower half of the address range (0x000000 to
0x7FFFFF). The excep tion is the use of TBLRD/TBLWT
operations, which u se TBLPAG<7> to permit access to
the Configuration bits and Device ID sections of the
configuration memor y sp a ce.
Memory maps for the dsPIC33F family of devices are
shown in Figure 3-1.
FIGURE 3-1:PROGRAM MEMORY MAP FOR dsPIC33F FAMILY DEVICES
The program memory space is organized in
word-addressable blocks. Although it is treated as
24 bits wide, it is more appropriate to think of each
address of the program memory as a lower and upper
word, with the upper byte of the upper word being
unimplemented. The lower word always has an even
address, while the upper word has an odd address
(Figure 3-2).
Program memory addresses are always word-aligned
on the lower word, and addresses are incremented or
decremented by two during code execution. This
arrangement also provides compatibility with data
memory space addressing and makes it possible to
access data in t he program memory space.
3.1.2INTERRUPT AND TR AP VECTORS
All dsPIC33F devices reserve the addresses between
0x00000 and 0x000200 for hard-coded program execution vectors . A ha r dw are Reset ve cto r i s pro vi ded to
redirect code execution from the default value of the
PC on device Reset to the actual st art of co de. A GOTO
instruction is programmed by the user at 0x000000,
with the actual address for the start of code at
0x000002.
dsPIC33F devices also have two interrupt vector
tables, located from 0x000004 to 0x0000FF and
0x000100 to 0x0001FF. These vector tab les allow each
of the many device interrupt sources to be handled by
separate Interrupt Service Routines (ISRs). A more
detailed discussion of the interrupt vector tables is
provided in Section6.1 “Interrupt Vector Table”.
The dsPIC33F CPU has a separate 16-bit wide data
memory space. The dat a spa ce is ac cessed using se parate Address Generation Units (AGUs) for read and
write operations. Data memory maps of devices with
different RAM sizes are shown in Figure 3-3 through
Figure 3-5.
All Effective Addresses (EAs) in the data memory space
are 16 bits wide and point to bytes within the data space.
This arrangement gives a data space address range of
64 Kbytes or 32K words. The lower half of the data
memory space (that is, when EA<15> = 0) is used for
implemented memory addresses, while the upper half
(EA<15> = 1) is reserved for the Program Space
Visibility area (see Section 3.6.3 “Reading Data FromProgram Memory Using Program Space Visibility”).
dsPIC33F devices i mplement a to tal of up to 30 Kbytes
of data memory. Should an EA point to a location outside of this area, an all-zero word or byte will be
returned.
3.2.1DATA SPACE WIDTH
The data memory space is organized in byte addressable, 16-bit wide blocks. Data is aligned in data
memory and registers as 16-bit words, but all data
space EAs resolve to bytes. The Least Significant
Bytes of each word have even addresses, while the
Most Significant Bytes have odd addresses.
3.2.2DATA MEMORY ORGANIZATION
AND ALIGNMENT
To ma intain backwa rd compatibili ty with PIC
and improve data space memory usage efficiency, the
dsPIC33F instruction set supports both word and byte
operations. As a consequence of byte accessibility, all
effective address calculations are internally scaled to
step through word-aligned memory. For example, the
core recognizes that Post-Modified Register Indirect
Addressing mode [Ws++] will result in a value of Ws +
1 for byte operations and Ws + 2 for word operations.
Data byte reads will read the complete word that
contains the byte , using the LSb of any EA to determine
which byte to select. The selected byte is placed onto
the LSb of the data p ath. That is , data memo ry and registers are organized as two parallel byte-wide entities
with shared (word) address decode but separate write
lines. Data byte writes only write to the corresponding
side of the array or register which matches the byte
address.
®
devices
All word accesses m ust be al igned to an even addre ss.
Misaligned word data fetches are not supported, so
care must be taken when mixing byte and word operations, or translating from 8-bit MCU code. If a misaligned read or write is attempted, an address error
trap is generated. If the error occurred on a read, the
instruction underway is completed; if it occurred on a
write, the instruction w ill be executed but the write does
not occur . In either ca se, a trap is then executed, allowing the system and/or user to examine the machine
state prior to execution of the address Fault.
All byte loads into any W register are loaded into the
Least Significant Byte. The Most Significant Byte is n ot
modified.
A sign-extend instruction (SE) is provided to allow
users to translate 8-bit signed data to 16-bit signed
values. Alternatively, for 16-bit unsigned data, users
can clear the MSb of any W register by executing a
zero-extend (ZE) instruction on the appropriate
address.
3.2.3SFR SPACE
The first 2 Kbytes of the Near Data Space, from 0x 0000
to 0x07FF, is primarily occupied by Special Function
Registers (SFRs). These are used by the dsPIC33F
core and peripheral modules for controlling the
operation of the device.
SFRs are distributed among the modules that they
control, and are generall y grouped together by mod ule.
Much of the SFR space contains unused addresses;
these are read as ‘0’. A co mplete listing o f implemented
SFRs, including their addresses, is shown in Table 3-1
through Table 3-34.
Note:The actual set of peripheral features and
interrupts varies by the device. Please
refer to the corresponding device tables
and pinout diagrams for device-specific
information.
3.2.4NEAR DATA SPACE
The 8-Kbyte area between 0x0000 and 0x1FFF is
referred to as the Near Data Space. Locations in this
space are directly addressable via a 13-bit absolute
address field within all memory direct instructions.
Additionally, the whole data spa ce is addressa ble using
MOV instructions, which support Memory Direct
Addressing mode with a 16-bit address field, or by
using Indirect Addressing mode using a working
register as an Address Pointer.
The core has two data spaces, X and Y. These data
spaces can be considered either separate (for some
DSP instructions), or as one unified linear address
range (for MCU instructions). The data spaces are
accessed using two Address Generation Units (AGUs)
and separate data paths. This feature allows certain
instructions to concu rrently fe tch two w ords from RAM ,
thereby enabling efficient execution of DSP algorithms
such as Finite Impulse Response (FIR) filtering and
Fast Fourier Transform (FFT).
The X data space is used by all instructions and
supports all addressing modes. There are separate
read and write data buses for X data space. Th e X read
data bus is the read data path for all instructions that
view data space as combined X and Y address space.
It is also the X data prefetch path for the dual operand
DSP instructions (MAC class).
The Y data space is used in concert with the X data
space by the MAC class of instructions (CLR, ED,EDAC,MAC,MOVSAC,MPY,MPY.N and MSC) to
provide two concurrent data read paths.
Both the X and Y data spaces support Modulo
Addressing mode for all instructions, subject to
addressing mode restrictions. Bit-Reversed Addressing
mode is only supported for writes to X data space.
All data memory writes, including in DSP instructions,
view data space as combined X and Y address space.
The boundary between the X and Y data spaces is
device-dependent and is not user-programmable.
All effective addresses are 16 bits wide and point to
bytes within the data space. Therefore, the data space
address range is 64 Kbytes, or 32K words, though the
implemented memory locations vary by device.
3.2.6DMA RAM
Every dsPIC33F device contains 2 Kbytes of dual ported
DMA RAM located at the end of Y data space. Memory
locations is part of Y data RAM and is in the DMA RAM
space are accessible simultaneously by the CPU and
the DMA controller module. DMA RAM is utilized by the
DMA controller to store data to be transfe rred to v arious
peripherals using DMA, as well as data transferred from
various peripherals using DMA. The DMA RAM can be
accessed by the DMA controller without having to steal
cycles from the CPU.
When the CPU and the DMA controller attempt to
concurrently write to the same DMA RAM location, the
hardware ensures tha t the C PU is giv en prec edenc e in
accessing the DMA RAM lo cation . Therefo re, the DMA
RAM provides a reliable means of transferring DMA
data without ever having to stall the CPU.
Note:DMA RAM can be used for general
purpose data storage if the DMA function
is not required in an application.
WREG00000Working Register 0
WREG10002Working Register 1
WREG20004Working Register 2
WREG30006Working Register 3
WREG40008Working Register 4
WREG5000AW orking Register 5
WREG6000CWorking Register 6
WREG7000EWorking Register 7
WREG80010Working Register 8
WREG90012Working Register 9
WREG100014Working Re gister 10
WREG110016Working Register 11
WREG120018Working Re gister 12
WREG13001AWorking Register 13
WREG14001CWorking Register 14
WREG15001EWorking Register 15
SPLIM0020Stack Pointer Limit Register
PCL002EProgram Co unter Lo w Word Register
PCH0 030————————Program Counter High Byte Register
TBLPAG0032————————Table Page Address Pointer Register
PSVPAG0034————————Program Mem o ry V isibility Pa ge Ad dre ss Point er Reg iste r
RCOUNT0036Repeat Loop C o unter Reg ister
DCOUNT0038DCOUNT<15:0>xxxx
DOSTARTL003ADOSTARTL<15:1>0xxxx
DOSTARTH003C
DOENDL003EDOENDL<15:1>0xxxx
DOENDH0040
SR0042OAOBSASBOABSABDADCIPL2IPL1IPL0RANOVZC
CORCON0044———USEDTDL<2:0>
MODCON0046XMODEN YMODEN
XMODSRT0048XS<15:1>0xxxx
XMODEND004AXE<15:1>1xxxx
YMODSRT004CYS<15:1>0xxxx
YMODEND004EYE<15:1>1xxxx
XBREV0050BRENXB<14:0>xxxx
DISICNT0052—
BSRAM0750
SSRAM0752
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
OC1RS0180Output Compare 1 Secondary Register
OC1R0182Output Compar e 1 R e gister
OC1CON0184
OC2RS0186Output Compare 2 Secondary Register
OC2R0188Output Compar e 2 R e gister
OC2CON018A
OC3RS018COutput Compa re 3 Secon dary Re gister
OC3R018EO utpu t Co m p ar e 3 R e gister
OC3CON0190
OC4RS0192Output Compare 4 Secondary Register
OC4R0194Output Compar e 4 R e gister
OC4CON0196
OC5RS0198Output Compare 5 Secondary Register
OC5R019AO utpu t Co m p ar e 5 R e gister
OC5CON019C
OC6RS019EOutput Compare 6 Secondary Register
OC6R01A0O utpu t Co m p are 6 R egi ster
OC6CON01A2
OC7RS01A4Output Compare 7 Secondary Register
OC7R01A6O utpu t Co m p are 7 R egi ster
OC7CON01A8
OC8RS01AAOutput Compare 8 Secondary Register
OC8R01ACOutput Comp ar e 8 R e gister
OC8CON01A E
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
I2C1RCV0200————————Receive Register
I2C1 T R N0202————————Transmit Register
I2C1BRG0204———————Baud Rate Generator Register
I2C1CON0206I2CEN—I2CSIDL SCLREL IPMIENA10MDISSL WSMENGCENSTRENACKDTACKENRCENPENRSENSEN
I2C1STA T0208ACKSTA T TRSTAT———BCLGCSTA T ADD10IWCOLI2COVD_APSR_WRBFTBF
I2C1ADD020A——————Address Regis ter
I2C1MSK020C——————Address M a sk Re g ist er
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
U1MODE0220UARTEN—USIDLIRENRTSMD—UEN1UEN0WAKELPBACKABAUD URXINVBRGHPDSEL<1:0>STSEL
U1STA0222UTXISEL1 UTXINV UTXISEL0—UTXBRK UTXEN UTXBFTRMTURXISEL<1:0>ADDENRIDLEPERRFERROERRURXDA
U1TXREG0224———————UART Transm it R egist er
U1RXREG0226———————UART Receive Re gister
U1BRG0228Baud R a te G en era to r P r es ca le r
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
U2MODE0230UARTEN—USIDLIRENRTSMD—UEN1UEN0WAKELPBACKABAUD URXINVBRGHPDSEL<1:0>STSEL
U2STA0232 UTXISEL1 UTXINV UTXISEL0—UTXBRK UTXENUTXBFTRMTURXISEL<1:0>ADDENRIDLEPERRFERROERRURXDA
U2TXREG0234———————UART T r an smi t Re gister
U2RXREG0236———————UART Receive Register
U2BRG0238Baud Rate Ge nerator P resca ler
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
C1RXF12SID0470SID<10:3>SID<2:0>
C1RXF12EID0472EID<15:8>EID<7:0>xxxx
C1RXF13SID0474SID<10:3>SID<2:0>
C1RXF13EID0476EID<15:8>EID<7:0>xxxx
C1RXF14SID0478SID<10:3>SID<2:0>
C1RXF14EID047AEID<15:8>EID<7:0>xxxx
C1RXF15SID047CSID<10:3>SID<2:0>
C1RXF15EID047EEID<15:8>EID<7:0>xxxxLegend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
C2RXD0540Recieved Data Wordxxxx
C2TXD0542Transmit Data WordxxxxLegend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1 :The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
Addr.Bit 15Bit 14Bit 13Bit 12Bit 11Bit 10Bit 9Bit 8Bit 7Bit 6Bit 5Bit 4 Bit 3Bit 2Bit 1Bit 0Reset State
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1 :The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1 :The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1 :The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
TRISE02D8————————
PORTE02DA————————
LAT E02DC————————
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1 :The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1 :The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal for 100-pin devices.
Note 1:The actual set of I/O port pins varies from one device to another. Please refer to the corresponding pinout diagrams.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
Note 1 :RCON register Reset values dependent on type of Reset.
2:OSCCON register Reset values dependent on the FOSC Configuration bits and by type of Reset.
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
Note 1 :Reset value shown is for POR only. Value on other Reset states is dependent on the state of memory write or erase operations at the time of Reset.
PMD10770T5MDT4MDT3MDT2MDT1MDQEIMD PWMMD DCIMDI2C1MDU2MDU1MDSPI2MD SPI1MDC2MDC1MDAD1MD0000
PMD20772IC8MDIC7MDIC6MDIC5MDIC4MDIC3MDIC2MDIC1MDOC8MDOC7MDOC6MDOC5MD OC4MD OC3MDOC2MDOC1MD0000
PMD30774T9MDT8MDT7MDT6MD
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
——————————I2C2MDAD2MD0000
All
Resets
dsPIC33F
3.2.7SOFTWARE STACK
In addition to its use as a working register, the W15
register in the dsPIC33 F devices is also used as a software Stack Pointer. The S t ac k Point er al wa ys poi nts to
the first available free word and grows from lower to
higher addresses. It pre-decrement s for stack pop s and
post-increments for stack pushes, as shown in
Figure 3-6. For a PC push during any CALL instruction,
the MSb of the PC is zero-extended before the push,
ensuring that the MSb is always clear.
Note:A PC push during exception processing
concatenates the SRL re gis ter to the MSb
of the PC prior to the push.
The Stack Pointer Limit register (SPLIM) associated
with the Stack Pointer sets an upper address boundary
for the stack. SPLIM is uninitialized at Reset. As is the
case for the Stack Pointer, SPLIM<0> is forced to ‘0’
because all stack operations must be word-aligned.
Whenever an EA is generated using W15 as a source
or destination pointer, the resulting address is
compared with the value in SPLIM. If the contents of
the Stack Pointer (W15) and the SPLIM register are
equal and a push operation is performed, a stack error
trap will not occur. The stack error trap will occur on a
subsequent push operation. Thus, for example, if it is
desirable to cause a stac k error trap when the stack
grows beyond address 0x2000 in RAM, initialize the
SPLIM with the value 0x1FFE.
Similarly, a Stack Pointer underflow (sta ck error) tra p is
generated when the Stack Pointer address is found to
be less than 0x0800. This prevents the stack from
interfering with the Special Function Register (SFR)
space.
A write to the SPLIM regis ter should not be immediately
followed by an indirect read operation using W15.
FIGURE 3-6:CALL STACK FRAME
0x0000
Stack Grows Towards
000000000
Higher Address
PC<15:0>
PC<22:16>
<Free Word>
015
W15 (before CALL)
W15 (after CALL)
POP : [--W15]
PUSH : [W15++]
3.2.8DATA RAM PROTECTION FEATU RE
The dsPIC33F product family supports Data RAM protection features which enable segments of RAM to be
protected when used in conjunction with Boot and
Secure Code Segm ent Secu rity. BSRAM (Secure RAM
segment for BS) is accessible only from the Boot Segment Flash code when ena bled. SSRAM (Sec ure RAM
segment for RAM) is accessible only from the Secure
Segment Flash code when enabled. See Table 3-1 for
an overview of the BSRAM and SSRAM SFRs.
3.3Instruction Addressing Modes
The address ing mode s in Table 3 -3 5 form the b asis of
the addressing mode s optimized to support the specific
features of individual instructions. The addressing
modes provided in the MAC class of instructions are
somewhat different from those in the other instruction
types.
3.3.1FILE REGISTER INSTRUCTIONS
Most file register ins truc tio ns use a 13-bit address field
(f) to directly address data present in the first 8192
bytes of data memory (Near Data Space). Most file
register instructions employ a working register, W0,
which is de noted as WREG i n these instruc tions. The
destination is typically either the same file register or
WREG (with the exception of the MUL instruction),
which writes the re sult t o a re gister or regi ster p air. The
MOV instruction allows additional flexibility and can
access the entire data space.
3.3.2MCU INSTRUCTIONS
The 3-operand MCU instructions are of the form:
Operand 3 = Operand 1 <function> Operand 2
where Operand 1 is alw a ys a work in g reg ist er (i.e., the
addressing mode can only be register direct) which is
referred to as Wb. Operand 2 can be a W register,
fetched from data memory, or a 5-bit literal. The result
location can be either a W register or a data memory
location. The following addressing modes are
supported by MCU instructions:
• Register Direct
• Register Indirect
• Register Indirect Post-Modified
• Register Indirect Pre-Modified
• 5-bit or 10-bit Literal
Note:Not all instructions support all the
addressing modes given above. Individual
instructions may support different subsets
of these addressing modes.
File Register DirectThe address of the file register is specified explicitly.
Register DirectThe contents of a register are accessed directly.
Register IndirectThe contents of Wn forms the EA.
Register Indirect Post-ModifiedThe contents of Wn forms the EA. Wn is post-modified (incremented or
decremented) by a constant value.
Register Indirect Pre-ModifiedWn is pre-modified (incremented or decremented) by a signed constant value
to form the EA.
Register Indirect with Register Offset The sum of Wn and Wb forms the EA.
Register Indirect with Literal OffsetThe sum of Wn and a literal forms the EA.
3.3.3MOVE AND ACCUMULATOR
INSTRUCTIONS
Move instructions and the DSP accumulator class of
instructions provide a greater degree of addressing
flexibility than other instructions. In addition to the
Addressing modes supported by most MCU instructions, move and accumulator instructions also support
Register Indirect with Register Offset Addressing
mode, also referred to as Register Indexed mode.
Note:For the MOV instructions, the Addressing
mode specified in the instruction can differ
for the source and destination EA.
However, the 4-bit Wb (Register Offset)
field is shared between both source and
destination (but typically only used by
one).
In summary, the following Addressing modes are
supported by move and accumulator instructions:
• Register Direct
• Register Indirect
• Register Indirect Post-modified
• Register Indirect Pre-modif ied
• Register Indirect with Register Offset (Indexed)
• Register Indirect with Literal Offset
• 8-bit Literal
• 16-bit Literal
Note:Not all instructions support all the
Addressing modes gi ven above. Indivi dual
instructions may support different subsets
of these Addressing modes.
3.3.4MAC INSTRUCTIONS
The dual source operand DSP instructions (CLR, ED,EDAC, MAC, MPY, MPY.N, MOVSAC and MSC), also referred
to as MAC instructions, utilize a s impl if ie d s et of addressing modes to allow the user to ef fe ctively manipulate the
data pointers t hro ugh register indirect tables .
The 2-source operand prefetch registers must be
members of the set {W8, W9, W10, W11}. For data
reads, W8 and W9 are always directed to the X RAGU
and W10 and W11 will always be directed to the Y
AGU. The effective addresses generated (before and
after modification) must, therefore, be valid addresses
within X data space for W8 and W9 and Y data space
for W10 and W11.
Note:Register Indirect with Register Offset
Addressing mode is only available for W9
(in X space) and W11 (in Y space).
In summary, the following addressing modes are
supported by the MAC class of instructions:
• Register Indirect
• Register Indirect Post-Modified by 2
• Register Indirect Post-Modified by 4
• Register Indirect Post-Modified by 6
• Register Indirect with Register Offset (Indexed)
3.3.5OTHER INSTRUCTIONS
Besides the var ious addressi ng modes outlin ed above,
some instructio ns use literal constants of vario us sizes.
For example, BRA (branch) in struction s use 16- bit signe d
literals to spe cify the branch dest inatio n directly, whereas
the DISI instruction uses a 14-bit unsigned literal field. In
some instructio ns, such as ADD Acc, the sourc e of an
operand or resu lt is imp li ed by the o pco de itse lf. Cer tain
operations, s uc h as NOP, do not have any operands.
3.4Modulo Addressing
Modulo Addressing mode is a method of providing an
automated means to support ci rcular dat a buf fers using
hardware. The objectiv e is to remo ve t he need fo r software to perform data address boundary checks when
executing tightly looped code, as is typical in many
DSP algorithms.
Modulo Addressing can operate in either d ata or program
space (since th e data pointer me chanism is essen tially
the same for both). One ci rcul ar buf fer ca n be suppo rte d
in each of the X (which also provides the pointers into
program space) and Y data space s. Mod ulo Ad dr e ssi ng
can operate on an y W reg is te r po in te r. However, it is not
advisable to use W14 or W15 for Modulo Addressing
since these two registers are used as the Stack Frame
Pointer and Stack Pointer, respectively.
In general, any particular circular buffer can only be
configured to operate in one direction as there are
certain restrictio ns on the buf fer start add ress (for incrementing buffers), or end address (for decrementing
buffers), based upon the direction of the buffer.
The only exception to the usage restrictions is for buffers which have a power-of-2 length. As these buffers
satisfy the start and end address criteria, they may
operate in a bidirectiona l mo de (i.e., ad dress boun dary
checks will be performed on both the lower and upper
address boundaries).
3.4.1START AND END ADDRESS
The Modulo Addressing scheme requires that a starting
and ending address be specified and loaded into the
16-bit Modulo Buffer Address registers: XMODSRT,
XMODEND, YMODSRT and YMODEND (see
Table 3-1).
Note:Y space Modulo Addressing EA calcula-
tions assume word sized data (LSb of
every EA is always clea r) .
The length of a circular buffer is not directly specified. It
is determined by the difference between the corresponding start and end addresses. The maximum possible
length of the circular buffer is 32K words (64 Kbytes).
3.4.2W ADDRESS REGISTER
SELECTION
The Modulo and Bit-Reversed Addressing Control
register, MODCON<15:0>, contains enable flags as well
as a W register f ield t o s pe cify th e W Ad dr es s re gi st ers.
The XWM and YWM fields select which registers will
operate with Modulo Addressing. If XWM = 15, X RAGU
and X WAGU Modulo Addressing is disabled. Similarly, if
YWM = 15, Y AGU Modulo Addressing is disabled.
The X Address Space Pointer W register (XWM), to
which Modulo Addressing is to be applied, is stored in
MODCON<3:0> (see Table 3-1). Modulo Addressing is
enabled for X dat a space when XWM is set to any v alue
other than ‘15’ and the XMODEN bit is set at
MODCON<15>.
The Y Address Space Pointer W register (YWM) to
which Modulo Addressing is to be applied is stored in
MODCON<7:4>. Modulo Addressing is enabled for Y
data space when YWM is set to any value other than
FIGURE 3-7:MODULO ADDRESSING OPERATION EXAMPLE
Byte
Address
0x1100
0x1163
Start Addr = 0x1100
End Addr = 0x1163
Length = 0x0032 words
MOV#0x1100, W0
MOVW0, XMODSRT;set modulo start address
MOV#0x1163, W0
MOVW0, MODEND;set modulo end address
MOV#0x8001, W0
MOVW0, MODCON;enable W1, X AGU for modulo
MOV#0x0000, W0;W0 holds buffer fill value
MOV#0x1110, W1;point W1 to buffer
DOAGAIN, #0x31;fill the 50 buffer locations
MOVW0, [W1++];fill the next location
AGAIN: INC W0, W0;increment the fill value
Modulo Addressing can be applied to the Effective
Address (EA) calculation associated with any W
register. It is important to realize that the address
boundaries check for addresses less than, or greater
than, the upper (for inc rementing buf fers) and lower (for
decrementing buffers) boundary addresses (not just
equal to). Address changes may, therefore, jump
beyond boundaries and sti ll be adj us ted co rrec t ly.
Note:The modulo corrected effe cti ve add res s i s
written back to the register only when
Pre-Modify or Post-Modify Addressing
mode is used to compute the effective
address. When an address offset (e.g.,
[W7+W2]) is used, Modulo Address correction is performed but the contents of
the register remain unchanged.
3.5Bit-Reversed Addressing
Bit-Reversed Addressing mode is intended to simplify
data re-ordering for radix-2 FFT algorithms. It is
supported by the X AGU for data writes only.
The modifier, which may be a constan t val ue or r egist er
content s, is rega rded as having it s bit o rder reve rsed. The
address source and destination are kept in normal order.
Thus, the only operand requiring reversal is the modifier.
3.5.1BIT-REVERSED ADDRESSING
IMPLEMENTATION
Bit-Reversed Addressing mode is enabled when:
1.BWM bits (W register selection) in the
MODCON register are any val ue other than ‘15’
(the stack cannot be accessed using
Bit-Reversed Addressing).
2.The BREN bit is set in the XBREV register.
3. The addressing mode used is Register Indirect
with Pre-Increment or Post-Increment.
N
If the length of a bit- reversed buffer is M = 2
the last ‘N’ bits of the da ta buffer start address must
be zeros.
XB<14:0> is the Bit-Reversed Address modifier, or
‘pivot point’, which is ty pically a const ant. In the ca se of
an FFT computa tion, its v alue is equal to half of the FFT
data buffer size.
Note:All bit-reversed EA calculations assume
word sized data (LSb of every EA is
always clear). The XB value is scaled
accordingly to generate compatible (byte)
addresses.
When enabled, Bit-Reversed Addressing is only executed for Register Indirect with Pre-Increment or
Post-Increment Addre ssing and word siz ed data writes .
It will not function for an y ot her a ddre ss in g mo de o r for
byte sized data and normal addresses are generated
instead. When Bit-Reversed Addressing is active, the
W Address Pointer is always added to the address
modifier (XB) and the of fs et a ssoc iat ed w it h the Regis ter Indirect Addressing mode is ignored. In addition, as
word sized data is a requirement, the LSb of the EA is
ignored (and always clear).
Note:Modulo Addressing and Bit-Reversed
Addressing should not be enabled
together. In the event tha t the user attempts
to do so, Bit-Reversed Addressing will
assume priority when active for the X
WAGU and X WA GU Modulo Addressing
will be disabled. However, Modulo
Addressing will continue to function in the X
RAGU.
If Bit-Reversed Addressing has already been enabled
by setting the BREN (XBREV<15>) bit, then a write to
the XBREV register sho uld not be immedi ately followed
by an indirect read operation using the W register that
has been designated as the bit-reversed pointer.
The dsPIC33F architecture uses a 24-bit wid e program
space and a 16-bit wide data sp ace. The arc hitecture is
also a modified Harvard scheme, meaning that data
can also be present in the program space. To use this
data successf ully, it must be accessed in a way that
preserves the alignment of inform ati on in both spaces.
Aside from normal execution, the dsPIC33F architecture provides two methods by which program space
can be accessed during operatio n:
• Using table in stru ctions to acce ss in divid ual by tes
or words anywhere in the program space
• Remapping a portion of the program space into
the data space (Program Space Visibility)
Table instructions allow an application to read or write
to small areas of the program memory. This capability
makes the method ideal for accessing data tables that
need to be updated from time to time. It also allows
access to all bytes of the program word. The remapping method allows an application to access a large
block of data on a read-only basis, which is ideal for
look ups from a large table of static data. It can only
access the least significant word of the program word.
3.6.1ADDRESSING PROGRAM SPACE
Since the address ranges for the data and program
spaces are 16 and 24 bits, respectively, a method is
needed to create a 23-bit or 24-bit program address
from 16-bit data regist ers. The solution de pends on the
interface method to be used.
For table operations, the 8-bit Table Page register
(TBLPAG) is used to define a 32K word region within
the program space. This is concatenated with a 16-bit
EA to arrive at a full 24-bit program space address. In
this format, the Most Significant bit of TBLPAG is used
to determine if the ope ration occurs in the user memory
(TBLPAG<7> = 0) or the configuration memory
(TBLPAG<7> = 1).
For remapping operations, the 8-bit Program Space
Visibility register (PSVPAG) is used to define a
16K word page in the program space. When the Most
Significant bit of th e EA is ‘1’, PSVPAG is concaten ated
with the lower 15 b its of t he EA to form a 23-bit program
space address. Unlike table operations, this limits
remapping operati ons stric tly to the u ser m emory area.
T abl e 3-37 and Figure 3-9 show how the prog ram EA is
created for table operations and remapping accesses
from the data EA. Here, P<23:0> refers to a program
space word, whereas D<15:0> refers to a data space
word.
TABLE 3-37:PROGRAM SPACE ADDRESS CONSTRUCTION
Access Type
Instruction Access
(Code Execution)
TBLRD/TBLWT
(Byte/Word Read/Write)
Program Space Visibility
(Block Remap/Read)
Note 1: Data EA<15> is always ‘1’ in this case, but is not used in c alculati ng th e progra m sp ace addre ss. Bit 15 of
3.6.2DATA ACCESS FROM PROGRAM
MEMORY USING TABLE
INSTRUCTIONS
The TBLRDL and TBLWTL instructions offer a direct
method of reading or writing the lower word of any
address within the program space without going
through data sp ac e. The TBLRDH and TBLWTH instruc-
tions are the only method to read or write the upper
8 bits of a program space word as data.
The PC is incremented by two for each successive
24-bit program word. This allows program memory
addresses to directly map to data space addresses.
Program memory can thus be regarded as two 16-bit
word wide address sp ac es , res id ing si de by si de, each
with the same address range. TBLRDL and TBLWTL
access the space which contains the least significant
data word and TBLRDH and TBLWTH access the space
which contains the upper data byte.
Two table instructions are provided to move byte or
word sized (16-bit) data to and from program space.
Both function as either byte or word operations.
1.TBLRDL (Table Read Low): In Word mode, it
maps the lower word of the program space
location (P<15:0>) to a data add ress (D<1 5:0>).
In Byte mode, either the upper or lower byte of
the lower program word is mapped to the lower
byte of a data address. The upper byte is
selected when Byte Select is ‘1’; the lower byte
is selected when it is ‘0’.
2. TBLRDH (Table Read High) : In Word mode, it
maps the entire upper word of a program address
(P<23:16>) to a data address. Note that
D<15:8>, the ‘phantom byte’, will always be ‘0’.
In Byte mode, it map s the up per or lo wer byte of
the program word to D<7:0> of the data
address, as above. Note that the data will
always be ‘0’ when the upper ‘phantom’ byte is
selected (Byte Select = 1).
In a similar fashion, two table instructions, TBLWTH
and TBLWTL, are used to write individual bytes or
words to a program space address. The details of
their operati on are explained in Section 4.0 “FlashProgram Memory”.
For all table operations, the area of program memory
space to be access ed is de termin ed by the Table Page
register (TBLPAG). TBLPAG covers the entire program
memory space of t he device, in cluding use r and confi guration spaces. W hen TBL PAG<7> = 0, the table page
is located in the user memory space. When
TBLPAG<7> = 1, the page is located in configuration
space.
FIGURE 3-10:ACCESSING PROGRAM MEMORY WITH TABLE INSTRUCTIONS
TBLPAG
02
23150
0x000000
0x020000
0x030000
0x800000
Program Space
00000000
00000000
00000000
00000000
‘Phantom’ By te
TBLRDH.B (Wn<0> = 0)
TBLRDL.B (Wn<0> = 1)
TBLRDL.B (Wn<0> = 0)
TBLRDL.W
The address for the table operation is determined by the data EA
within the page defined by the TBLPAG register.
Only read operations are shown; write operations are also valid in
the user memory area.
3.6.3READING DATA FROM PROGRAM
MEMORY USING PROGRAM
SPACE VISIBILITY
The upper 32 Kbytes of data space may optionally be
mapped into any 1 6K word page of the pr ogram sp ace.
This option provides tran sparent access of stored constant data from the data space without the need to use
special instructions (i.e., TBLRDL/H).
Program space access through the data space occurs
if the Most Significan t bit of the dat a space EA i s ‘1’ and
program spac e visibil ity is enabl ed by se tting t he PSV
bit in the Core Control register (CORCON<2>). The
location of th e program memory spac e 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. Note that by incrementing the PC by 2 for
each program memory word, the lower 15 bits of data
space addresses dire ctly map to the lower 15 bit s in the
corresponding program space addresses.
Data reads to this area add an additional cycle to the
instruction being exec uted, sinc e two program me mory
fetches are required.
Although each data space address, 8000h and higher,
maps directly into a corresponding program memory
address (see Figure 3-11), only the lowe r 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.
Note:PSV access is temporarily disabled durin g
table reads/writes.
For operations that use PSV and are executed outside
a REPEAT loop, the MOV and MOV.D instructions
require one instructio n cycle in additi on to the sp ecified
execution time. All other instructions require two
instruction cycles in addition to the specified execution
time.
For operations that use PSV, which are executed ins ide
a REPEAT loop, there will be some instances that
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 accessing data, using PSV, to execute in a
single cycle.
FIGURE 3-11:PROGRAM SPACE VISIBILITY OPERATION
When CORCON<2> = 1 and EA<15> = 1:
Program Space
PSVPAG
02
The data in the page
designated by
PSVPAG is mapped
into the upper half of
the data memory
space...
23150
0x000000
0x010000
0x018000
0x800000
Data Space
PSV Area
0x0000
0x8000
0xFFFF
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.
of this group of dsPIC33F devices. It is not
intended to be a compr ehensive refer ence
source. To complement the information in
this data sheet, refer to the “dsPIC30FFamily Reference Manual” (DS70046).
The dsPIC33F devices contain internal Flash program
memory for storing and executing application code.
The memory is readable, writable and erasable during
normal operation over the entire V
Flash memory can be programmed in two ways:
1.In-Circuit Serial Programming™ (ICSP™)
programming capability
2.Run-Time Self-Programming (RTSP)
ICSP allows a dsPIC33F device to be serially
programmed while in t he en d app licati on c ircuit. This is
simply done with two lines for programming clock and
programming data (one of the alt ernate pro gramming
pin pairs: PGC1/PGD1, PGC2/ PGD2 or PGC3/PGD3),
and three other lines fo r power (V
Master Clear (MCLR
). This allows customers to manufacture boards with unprogrammed devices and then
program the digit al signal con troller just befo re shipping
the product. This also allows the most recent firmware
or a custom firmware to be programmed.
DD range.
DD), ground (VSS) and
RTSP is accomplished using TBLRD (table read) and
TBLWT (table write) instructions. With RTSP, the user
can write program memory data either in blocks or
‘rows’ of 64 instructions (192 bytes) at a time or a singl e
program memory word, and erase program memory in
blocks or ‘pages’ of 512 instructions (1536 bytes) at a
time.
4.1Table Instructions and Flash
Programming
Regardless of the method used, all programming of
Flash memory is done with the table read and table
write instructions. These allow direct read and write
access to the program memory space from the data
memory while the device is in normal operating mode.
The 24-bit target address in the program memory is
formed using bit s<7:0> of the TB LPAG register and the
Effective Address (EA) from a W register specified in
the table instruction, as shown in Figure 4-1.
The TBLRDL and the TBLWTL instructions are used to
read or write to bits<15:0> of program memory.
TBLRDL and TBLWTL can access program memory in
both Word and Byte modes.
The TBLRDH and TBLWTH i nstructio ns are used to read
or write to bits<23:16> of program memory. TBLRDH
and TBLWTH can also access prog ram memory in Word
or Byte mode.
The dsPIC33F Flash program memory array is
organized into rows of 64 instructions or 192 bytes.
RTSP allows the user to erase a page of memory,
which consists of eight rows (512 instructions) at a
time, and to program one row or one word at a time.
Table 26- 11, DC Chara cteristics: Program Memor y
shows typical erase and programming times. The 8row erase pages and single row write rows are edgealigned, from the beginning of program memory, on
boundaries of 1536 bytes and 192 bytes, respectively.
The program memory implements holding buffers that
can contain 64 instructions of programming data. Prior
to the actual programming operation, the write data
must be loaded i nto the buffe rs in s equential order. The
instruction words loaded must always be from a group
of 64 boundary.
The basic sequence f or RTSP program ming is to set up
a Table Pointer, then do a series of TBLWT instructions
to load th e buffer s. P rogram ming i s per for med by setting the control bits in the NVMCON register. A total of
64 TBLWTL and TBLWTH i nstruc tions are requ ired t o
load the instructions.
All of the table write operations are single-word writes
(two instruction cycles) because only the buffers are
written. A programming cycle is required for
programming each row.
4.3Control Registers
There are two SFRs used to read and write the
program Flash memory: NVMCON and NVMKEY.
The NVMCON register (Register 4-1) controls which
blocks are to be erased, which memory type is to be
programmed and the start of the programming cycle.
NVMKEY is a write-only register that is used for write
protection. To start a programming or erase sequence,
the user must consecutively write 55h and AAh to the
NVMKEY register. Refer to Section 4.4 “Programming
Operations” for further details.
4.4Programming Operations
A complete programming sequence is necessary for
programming or erasing the internal Flash in RTSP
mode. A programming operation is nominally 4 ms in
duration and the processor stalls (waits) until the operation is finished. Setting the WR bit (NVMCON<15>)
starts the operation, and the WR bit is automatically
cleared when the operation is finished.
4.4.1PROGRAMMING ALGORITHM FOR
FLASH PROGRAM MEMORY
The user can program one row of program Flash
memory at a time. To do this, it is necessary to erase
the 8-row erase page that contains the desired row.
The general process is:
1.Read eight rows of program memory
(512 instructions) and store in data RAM.
2.Update the program data in RAM with the
desired new data.
3.Erase the block (see Example 4-1):
a) Set the NVMOP bits (NVMCON<3:0>) to
‘0010’ to configure for block erase. Set the
ERASE (NVMCON<6>) and WREN (NVMCON<14>) bits.
b) Write the starting address of the page to be
erased into the TBLPAG and W registers.
c)Write 55h to NVMKEY.
d) Write AAh to NVMKEY.
e) Set the WR bit (NVMCON<15>). The erase
cycle begins and the CPU s t al l s fo r t he d u r a-
tion of the erase cycle. When the erase is
done, the WR bit is cleared automatically.
4. Write the first 64 instructions from data RAM into
the program memory b uffers (see Example 4-2).
5. Write the program block to Flash memory:
a) Set the NVMOP bits to ‘0001’ to configure
for row programming. Clear the ERASE bit
and set the WREN bit.
b) Write 55h to NVMKEY.
c)Write AAh to NVMKEY.
d) Set the WR bit. The programming cycle
begins and th e CPU stalls for the duration of
the write cycl e. When the w rite to Flash m em-
ory is done, the WR bit is cleared
automatically.
6. Repeat steps 4 and 5, using the next available
64 instructi ons from the block in data R AM by
incrementing the value in TBLPAG, until all
512 instructions are written back to Flash memory.
For protection against accidental operations, the write
initiate sequence for NVMKEY must be used to allow
any erase or program operation to proceed. After the
programming command has been executed, the user
must wait for t he pro g ram mi ng ti me unt il pro g r am ming
is complete. The two instructions following the start of
the programming se que nce s hould be NOPs, as shown
in Example 4-3.
EXAMPLE 4-1:ERASING A PROGRAM MEMORY PAGE
; Set up NVMCON for block erase operation
MOV#0x4042, W0;
MOVW0, NVMCON; Initialize NVMCON
; Init pointer to row to be ERASED
MOV#tblpage(PROG_ADDR), W0;
MOVW0, TBLPAG; Initialize PM Page Boundary SFR
MOV#tbloffset(PROG_ADDR), W0; Initialize in-page EA[15:0] pointer
TBLWTL W0, [W0] ; Set base address of erase block
DISI#5; Block all interrupts with priority <7
; for next 5 instructions
MOV#0x55, W0
MOVW0, NVMKEY ; Write the 55 key
MOV #0xAA, W1 ;
MOVW1, NVMKEY ; Write the AA key
BSETNVMCON, #WR; Start the erase sequence
NOP ; Insert two NOPs after the erase
NOP; command is asserted
; Set up a pointer to the first program memory location to be written
; program memory selected, and writes enabled
; Perform the TBLWT instructions to write the latches
; 0th_program_word
; 1st_program_word
; 2nd_program_word
; 63rd_program_word
MOV#0x4001, W0;
MOVW0, NVMCON; Initialize NVMCON
MOV#0x0000, W0;
MOVW0, TBLPAG; Initialize PM Page Boundary SFR
MOV#0x6000, W0; An example program memory address
MOV#LOW_WORD_0, W2;
MOV#HIGH_BYTE_0, W3;
TBLWTL W2, [W0]; Write PM low word into program latch
TBLWTH W3, [W0++]; Write PM high byte into program latch
MOV#LOW_WORD_1, W2;
MOV#HIGH_BYTE_1, W3 ;
TBLWTL W2, [W0]; Write PM low word into program latch
TBLWTH W3, [W0++] ; Write PM high byte into program latch
[W0] ; Write PM low word into program latch
[W0++]; Write PM high byte into program latch
[W0] ; Write PM low word into program latch
[W0++]; Write PM high byte into program latch
dsPIC33F
EXAMPLE 4-3:INITIATING A PROGRAMMING SEQUENCE
DISI#5; Block all interrupts with priority <7
MOV#0x55, W0
MOVW0, NVMKEY ; Write the 55 key
MOV #0xAA, W1 ;
MOVW1, NVMKEY ; Write the AA key
BSETNVMCON, #WR; Start the erase sequence
NOP ; Insert two NOPs after the
NOP; erase command is asserted
of this group of dsPIC33F devices. It is not
intended to be a compr ehensive refer ence
source. To complement the information in
this data sheet, refer to the “dsPIC30FFamily Reference Manual” (DS70046).
The Reset module combines all Reset sources and
controls the device Master Reset Signa l, SYSRST
following is a list of device Reset sources:
• POR: Power-on Reset
• BOR: Brown-out Reset
•MCLR
: Master Clear Pin Reset
•SWR: RESET Instruction
• WDT: Watchdog Timer Reset
• TRAPR: Trap Conflict Reset
• IOPUWR: Illegal Opcode and Uninitialized W
Register Reset
A simplified block diagram of the Reset module is
shown in Figure 5-1.
Any active source of Reset will make the SYSRST si gnal active. Many reg isters asso ciated wit h the CPU and
peripherals are forced to a known Reset state. Most
registers are unaffected by a Reset; their status is
unknown on POR and unchange d by all other Res ets.
. The
Note:Refer to the specific peripheral or CPU
section of this manual for register Reset
states.
All types of device Res et will set a corresp onding statu s
bit in the RCON register to indicate the type of Reset
(see Register 5-1). A POR will clear all bits, except for
the POR bit (RCO N<0>), th at are set. The u ser c an set
or clear any bit at any time during code execution. The
RCON bits only ser ve as status bit s. Setting a particul ar
Reset status bit in software does not cause a device
Reset to occur.
The RCON register also has other bits associated with
the Watchdog Timer and device power-saving states.
The function of these bit s is discusse d in other section s
of this manual.
Note:The status bits in the RCON register
should be cleared after they are read so
that the next RCON register value after a
device Reset will be meaningful.
R = Readable bitW = Writable bitU = Unimplemented bit, read as ‘0’
-n = Value at POR‘1’ = Bit is set‘0’ = Bit is clearedx = Bit is unknown
bit 15TRAPR: Trap Reset Flag bit
1 = A Trap Conflict Reset has occurred
0 = A Trap Conflict Reset has not occurred
bit 14IOPUWR: Illegal Opcode or Uninitialized W A ccess Reset F lag bit
1 = An illegal opcode detection, an illegal address mode or uninitialized W register used as an
Address Pointer caused a Reset
0 = An illegal opcode or uninitialized W Reset has not occurred
bit 13-9Unimplemented: Read as ‘0’
bit 8VREGS: Voltage Regulator Standby D uring Sleep bit
1 = Voltage regulator goes into Standby mode during Sleep
0 = Voltage regulator is active during Sleep
bit 7EXTR: External Reset (MCLR
1 = A Master Clear (pin) Reset has occurred
0 = A Master Clear (pin) Reset has not occurred
bit 6SWR: Software Reset (Instruction) Flag bit
1 = A RESET instruction has been executed
0 = A RESET instruction has not been executed
bit 5SWDTEN: Software Enable/Disable of WDT bit
1 = WDT is enabled
0 = WDT is disabled
bit 4WDTO: Watchdog Timer Time-out Flag bit
1 = WDT time-out has occurred
0 = WDT time-out has not occurred
bit 3SLEEP: Wake-up from Sleep Flag bit
1 = Device has been in Sleep mode
0 = Device has not been in Sleep mode
bit 2IDLE: Wake-up from Idle Flag bit
1 = Device was in Idle mode
0 = Device was not in Idle mode
bit 1BOR: Brown-out Reset Flag bit
1 = A Brown-out Reset has occurred
0 = A Brown-out Reset has not occurred
—————VREGS
(2)
WDTOSLEEPIDLEBORPOR
) Pin bit
(1)
(2)
Note 1: All of the Reset status bits may be set or cleared in so ftware. Setting one of these bit s in software does not
cause a device Reset.
2: If the FWDTEN Configuration bit is ‘1’ (unprogrammed), the WDT is always enabled, regardless of the
1 = A Power-up Reset has occurred
0 = A Power-up Reset has not occurred
Note 1: All of the Reset status bits may be set or cleared in sof tware. Setting one of these bit s in software does not
cause a device Reset.
2: If the FWDTEN Configuration bit is ‘1’ (unprogrammed), the WDT is always enabled, regardless of the
SWDTEN bit setting.
(1)
TABLE 5-1:RESET FLAG BIT OPERATION
Flag BitSetting EventClearing Event
TRAPR (RCON<15>)Trap conflict eventPOR
IOPUWR (RCON<14>)Illegal opcode or uninitialized
W register access
EXTR (RCON<7>)MCLR
SWR (RCON<6>)RESET instructionPOR
WDTO (RCON<4>)WDT time-outPWRSAV instruction, POR
SLEEP (RCON<3>)PWRSAV #SLEEP instructionPOR
IDLE (RCON<2>)PWRSAV #IDLE instructionPOR
BOR (RCON<1>BOR—
POR (RCON<0>)POR—
Note: All Reset flag bits may be set or cleared by the user software.
ResetPOR
POR
5.1Clock Source Selection at Reset
If clock switching is enabled, the system clock source at
device Reset is chosen, as shown in Table 5-2. If clock
switching is disabled, the s ystem c lock sou rc e i s always
selected according to the oscillator Configuration bits.
Refer to Section 8.0 “Oscillator Configuration” for
further details.
T ABLE 5-2:OSCILLATOR SELECTION vs.
TYPE OF RESET (CLOCK
SWITCHING ENABLED)
Reset TypeClock Source Determinant
POROscillator Configuration bits
BOR
MCLR
WDTR
SWR
(FNOSC<2:0>)
COSC Control bits
(OSCCON<14:12>)
5.2Device Reset Times
The Reset times for various types of device Reset are
summarized in Table 5-3. The system Reset signal,
SYSRST
times expi re.
The time at which the de vice actuall y begins to execu te
code also depends on the system oscillator delays,
which include the Oscillator Start-up Timer (OST) and
the PLL lock time. The OST and PLL lock times occur
in parallel with the applicable SYSRST
The FSCM delay determines the time at which the
FSCM begins to monitor the system clock source after
the SYSRST
Power-up Timer delay (if regu lator is disa bled). T
states, including waking from Sleep mode, only if the regulator is enabled.
3: T
4: TOST = Oscillator Start-up Timer. A 10-bit counter counts 1024 oscillator periods before releasing the
oscillator clock to the system.
5: T
6: T
Any ClockTRST——3
STARTUP = Conditional POR delay of 20 μs nominal (if on-chip regulator is enabled) or 64 ms nominal
RST = Internal state Reset time (20 μs nominal).
LOCK = PLL lock time (20 μs nominal).
FSCM = Fail-Safe Clock Monitor delay (100 μs nom in al).
+ TSTARTUP + TRST——1, 2, 3
POR
+ TSTARTUP + TRSTTOSTTFSCM1, 2, 3, 4, 6
Delay
RST——3
RST——3
STARTUP is also applie d to a ll returns from powered-down
System Clock
Delay
FSCM
Delay
Notes
5.2.1POR AND LONG OSCILLATOR
START-UP TIMES
The oscillator st art-up circui try and its associat ed delay
timers are not linked to the device Reset delays that
occur at power-up. Some crystal circuits (especially
low-frequency crystals) have a relatively long start-up
time. Therefore, one or more of the following con ditions
is possible after SYSRST
• The oscillator circuit has not begun to oscillate.
• The Oscillator Start-up Timer has not expired (if a
crystal oscillator is used).
• The PLL has not achieved a lock (if PLL is used).
The device will not begin to execute code until a valid
clock source has been released to the system. Therefore, the oscillator and PLL start-up delays must be
considered when th e Reset del ay time mu st be known.
is released:
5.2.2FAIL-SAFE CLOCK MONITOR
(FSCM) AND DEVICE RESETS
If the FSCM is enable d, it be gins t o moni tor the s ystem
clock source when SYSRST
source is not available at this time, the device automatically switches to the FRC oscillator and the user
can switch to the desired crystal oscillator in the Trap
Service Routine.
is released. If a valid cloc k
5.2.2.1FSCM Delay for Crystal and PLL
Clock Sources
When the system clock source is provided by a crystal
oscillator and/or the PL L, a small delay, T
matically inserted after the POR and PWRT delay
times. The FSCM does not be gin to monitor the system
clock source un til th is del ay expi res. Th e FSCM d elay
time is nominally 100 μs and provides additional time
for the oscillator and/ or PLL to st abil ize. In mos t cases ,
the FSCM delay prevents an oscillator failure trap at a
device Reset when the PWRT is disab le d.
FSCM, is auto-
5.3Special Function Register Reset
States
Most of the Special Function Registers (SFRs) associated with the CPU and peripherals are reset to a
particular value at a device Reset. The SFRs are
grouped by their peripheral or CPU function and their
Reset values ar e specified in ea ch section of th is manual.
The Reset value for each SFR do es not de pend on th e
type of Reset, with the exception of two registers. The
Reset value for the Reset Control register, RCON,
depends on the type of device R eset. The Reset value
for the Oscillator Control register, OSCCON, depends
on the type of Res et and th e programme d values of the
oscillator Configuration bits in the FOSC Configuration
register.
of this group of dsPIC33F devices. It is not
intended to be a compr ehensive refer ence
source. To complement the information in
this data sheet, refer to the “dsPIC30FFamily Reference Manual” (DS70046).
The dsPIC33F interrupt controller reduces the numerous peripheral interrupt request signals to a single
interrupt request signal to the dsPIC33F CPU. It has
the following features:
• Up to 8 processor exceptions and software traps
• 7 user-selectable priority levels
• Interrupt Vector Table (IVT) with up to 118 vectors
• A unique vector for each interrupt or exception
source
• Fixed priority within a specified user priority level
• Alternate Interrupt Vector Table (AIVT) for debug
support
• Fixed interrupt entry and return latencies
6.1Interrupt Vector Table
The Interrupt V ect or Table (IVT) is shown in F igure 6-1.
The IVT resides in program memory, starting at location
000004h. The IVT contains 126 vectors consisting of
8 nonmaskable trap vectors plus up to 118 sources of
interrupt. In general, each interrupt source has its own
vector. Each interrupt vector contains a 24-bit wide
address. The value programmed into each interrupt
vector location is th e starti ng address of th e assoc iated
Interrupt Service Routine (ISR).
Interrupt vectors are prioritized in terms of their natural
priority; this priority is linked to their position in the
vector table. All other things being equal, lower
addresses have a higher natural priority. For example,
the interrupt associated with vector 0 will take priority
over interrupts at any other vector address.
dsPIC33F devices implement up to 67 unique
interrupts and 5 nonmaskable traps. These are
summarized in Table 6-1 and Table 6-2.
6.1.1ALTERNATE VECTOR TABLE
The Alternate Interrupt Vector Table (AIVT) is located
after the IVT, as shown in Figure 6-1. Access to the
AIVT is provided by the ALTIVT control bit
(INTCON2<15>). If the ALTIVT bit is set, all interrupt
and exception processes use the alternate vectors
instead of the defa ult vecto rs. The altern ate vecto rs are
organized in the same manner as the default vectors.
The AIVT support s deb ugg ing by providing a means to
switch between an application and a support environment without requiring the interrupt vectors to be
reprogrammed. This feature also enables switching
between applications for evaluation of different software algorithms at run time. If the AIVT is not needed,
the AIVT should be programmed with the same
addresses used in the IVT.
6.2Reset Sequence
A device Reset is not a true exception because the
interrupt controller is not inv olved in the Reset pr ocess.
The dsPIC33F de vice clea rs its registers in response to
a Reset, which forces the PC to ze ro. T he digi tal signa l
controller then begins program execution at location
0x000000. The user program s a GOTO instruction at the
Reset address which redirects program execution to
the appropriate start-up routine.
Note:Any unimplemented or unused vector
locations in the IVT and AIVT should be
programmed with the address of a default
interrupt handler routine that contains a
RESET instruction.
dsPIC33F devices implement a total of 30 registers for
the interrupt controller:
• INTCON1
• INTCON2
• IFS0 through IFS4
• IEC0 through IEC4
• IPC0 through IPC17
•INTTREG
Global interrupt control functions are controlled from
INTCON1 and IN TCON2 . INT CON1 cont ain s the Interrupt Nesting Disa ble (NSTDIS) b it as well as the co ntrol
and status flags for the processor trap sources. The
INTCON2 register controls the external interrupt
request signal behavior and the use of the Alternate
Interrupt Vector Table.
The IFS registers maintain all of the interrupt request
flags. Each source of interr upt has a S tat us bit, which is
set by the respect ive periph erals or exter nal si gnal an d
is cleared v ia software.
The IEC registers maintain all of the interrupt enable
bits. These control bits are used to individually enable
interrupts from the peripherals or external signals.
The IPC registers are used to set the interrupt priority
level for each source of interrupt. Each user interrupt
source can be assigned to one of eight priority levels.
The INTTREG register contains the associated interrupt vector number and the new CPU interrupt priority
level, which are latched into vector number (VECNUM<6:0>) and Interrupt level (ILR<3:0>) bit fields in
the INTTREG register. The new interrupt priority level
is the priority of the pending interrupt.
The interrupt sources are assigned to the IFSx, IECx
and IPCx registers in th e s ame se quence that they are
listed in Table 6-1. For example, the INT0 (External
Interrupt 0) is shown as having vector number 8 and a
natural order priority of 0. Thus, the INT0IF bit is found
in IFS0<0>, the INT0IE bit in IEC0< 0>, a nd th e INT0 IP
bits in the first position of IPC0 (IPC0<2:0>).
Although they are not specifically part of the interrupt
control hardware, tw o of the CPU Control registers contain bits that control interrupt functionality. The CPU
STATUS register, SR, contains the IPL<2:0> bits
(SR<7:5>). These bits indi cate the curr ent CPU inter rupt priority level. The user can change the current
CPU priority level by writing to the IPL bits.
The CORCON register contains the IPL3 bit which,
together with IPL<2: 0>, als o ind ic ates th e c urre nt C PU
priority level. IPL3 is a read-onl y bit so that trap ev ents
cannot be masked by the us er software.
All Interrupt registers are described in Register 6-1
through Register6-32, in the following pages.
C = Clear only bitR = Readable bitU = Unimplemented bit, read as ‘0’
S = Set only bitW = Writable bit-n = Value at POR
‘1’ = Bit is set‘0’ = Bit is clearedx = Bit is unknown
bit 7-5IPL<2:0>: CPU Interrupt Priority Level Status bits
(1)
111 = CPU Interrupt Priority Level is 7 (15), user interrupts disabled
110 = CPU Interrupt Priority Level is 6 (14)
101 = CPU Interrupt Priority Level is 5 (13)
100 = CPU Interrupt Priority Level is 4 (12)
011 = CPU Interrupt Priority Level is 3 (11)
010 = CPU Interrupt Priority Level is 2 (10)
001 = CPU Interrupt Priority Level is 1 (9)
000 = CPU Interrupt Priority Level is 0 (8)
Note 1: For complete register details, see Register 2-1: “SR: CPU STATUS Register”.
2: The IPL<2:0> bits are concatenated with the IPL<3> bit (CORCON<3>) to form the CPU Interrupt Priority
Level. The value in parentheses indicates the IPL if IPL<3> = 1. User interrupts are disabled when
IPL<3> = 1.
3: The IPL<2:0> Status bits are read-onl y when NSTDIS (INTCON1<15>) = 1.
REGISTER 6-2:CORCON: CORE CONTROL REGISTER
(1)
U-0U-0U-0R/W-0R/W-0R-0R-0R-0
———USEDTDL<2:0>
bit 15bit 8
R/W-0R/W-0R/W-1R/W-0R/C-0R/W-0R/W-0R/W-0
SATASATBSATDWACCSATIPL3
(2)
PSVRNDIF
bit 7bit 0
Legend:C = Clear only bit
R = Readable bitW = Writable bit-n = Value at POR‘1’ = Bit is set
0’ = Bit is cleared‘x = Bit is unknownU = Unimplemented bit, read as ‘0’
bit 3IPL3: CPU Interrupt Priority Level Status bit 3
(2)
1 = CPU interrupt priority level is greater than 7
0 = CPU interrupt priority level is 7 or less
Note 1: For complete register details, see Register 2-2: “CORCON: CORE Control Register”.
2: The IPL3 bit is concatenated with the IPL<2:0> bits (SR<7:5>) to form the CPU Interrupt Priority Level.