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 Digital Millennium Copyright Act. If such acts
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, KEELOQ logo, MPLAB, PIC, PICmicro,
PICSTART, PRO MA TE, rfPIC and SmartShunt are registered
trademarks of Microchip Technology Incorporated in the
U.S.A. and other countries.
FilterLab, Linear Active Thermistor, 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, dsSPEAK, ECAN,
ECONOMONITOR, FanSense, In-Circuit Serial
Programmin g , IC SP, ICEPIC, Mindi, MiW i , MPASM, MPLAB
Certified logo, MPLIB, MPLINK, mTouch, PICkit, PICDEM,
PICDEM.net, PICtail, PIC
32
logo, PowerCal, PowerInfo,
PowerMate, PowerT ool, REAL ICE, rfLAB, Select Mode, Total
Endurance, UNI/O, WiperLock and ZENA are trademarks of
Microchip Technology Incorporated 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 design centers in California
and India. The Company’s quality system processes and procedures
are for its PIC
devices, Serial 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.
The device names, pin counts, memory sizes, and
peripheral availability of each device are listed in
Table 1. The following pages show their pinout
diagrams.
T ABLE 1:dsPIC33FJ12MC201/202 CONTROLLER FAMILIES
Remappable Peripherals
(3)
DevicePins
(Kbyte)
RAM (Kbyte)
Program Flash Memory
dsPIC33FJ12MC20120121
dsPIC33FJ12MC20228121
Note 1:Only two out of three timers are remappable.
2:Only PWM faul t inp uts are re m ap pable .
3:Only two out of three interrupts are remappable.
4.0Flash Program Memory............................................... ...............................................................................................................49
14.0 Motor Control PWM Module..................................................................................................................................................... 145
16.0 Serial Peripheral Interface (SPI)...............................................................................................................................................163
20.0 Special Features...................................................................................................................................................................... 197
21.0 Instruction Set Summary ..........................................................................................................................................................205
22.0 Development Support. .............................................................................................................................................................. 213
Index ............................................................................................................................................... .. ..................................... ........... 273
The Microchip Web Site.................. ................................................................................................................................................... 277
Customer Change Notification Service .............................................................................................................................................. 277
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 to 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 r egarding t his publication, p lease c ontact the M arket ing Communications 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 the dsPIC33FJ12MC201/202 devices.
It is not intended to be a comprehensive
reference source. To complement the
information in this data sheet, refer to the
“dsPIC33F Family Reference Manual”.
Please see the Microchip web site
(www.microchip.com) for the latest
dsPIC33F Family Reference Manual
chapters.
This document co nta i ns dev ic e spec if i c in for m at ion fo r
the dsPIC33FJ12MC201/202 Digital Signal Controller
(DSC) Devices. The dsPIC33F devices contain
extensive Digital Signal Processor (DSP) functionality
with a high-performance, 16-bit microcontroller (MCU)
architecture.
Figure 1-1 shows a general block diagram of the core
and peripheral modules in the dsPIC33FJ12MC201/
202 family of devices. Table 1-1 lists the functions of
the various pins shown in the pinout diagrams.
UART1 transmit.
Synchronous serial clock input/output for SPI1.
SPI1 data in.
—
SPI1 data ou t.
SPI1 slave synchronization or frame pulse I/O.
Synchronous serial clock input/output for I2C1.
Synchronous serial data input/output for I2C1.
Alternate synchronous serial clock input/output for I2C1.
Alternate synchronous serial data input/output for I2C1.
JTAG Test mode sel ect pin.
JTAG test clock input pi n.
JTAG test data input pin.
—
JTAG test data output pin.
Quadrature Encoder Index Pulse input.
Quadrature Encoder Phase A input in QEI mode.
Auxiliary Timer External Clock/Gate input in Ti mer mode.
Quadrature Encoder Phase A input in QEI mode.
Auxiliary Timer External Clock/Gate input in Ti mer mode.
Position Up/Down Counter Direction State.
DDPPPositive supply for analog modules. This pin must be connected at all times.
AV
AVSSPPGround reference for analog modules.
VDDP—Positive supply for peripheral logic and I/O pins.
DDCOREP—CPU logic filter capacitor connection.
V
VSSP—Ground reference for logic and I/O pins.
VREF+IAnalogAnalog voltage reference (high) in put.
REF-IAnalogAnalog voltage referenc e (low) input.
V
Legend: CMOS = CMOS compatible input or outputAnalog = Analog inputP = Power
ST = Schmitt Trigger input with CMOS levelsO = OutputI = Input
I
O
O
O
O
O
O
I
O
O
I/O
I
I/O
I
I/O
I
I/PSTMaster Clear (Reset) input. This pin is an active-low Reset to the device.
ST
—
—
—
—
—
—
ST
—
—
ST
ST
ST
ST
ST
ST
PWM1 Fault A input.
PWM1 Low output 1
PWM1 High output 1
PWM1 Low output 2
PWM1 High output 2
PWM1 Low output 3
PWM1 High output 3
PWM2 Fault A input.
PWM2 Low output 1
PWM2 High output 1
Data I/O pin for programming/debugging communication channel 1.
Clock input pin for programming/debugging communication channel 1.
Data I/O pin for programming/debugging communication channel 2.
Clock input pin for programming/debugging communication channel 2.
Data I/O pin for programming/debugging communication channel 3.
Clock input pin for programming/debugging communication channel 3.
of the dsPIC33FJ12MC201/202 family of
devices. It is not intended to be a
comprehensive reference source. To
complement the information in this data
sheet, refer to the dsPIC33F Family Refer-ence Manual, “Section 2. CPU”
(DS70204), which is available from the
Microchip website (www.microchip.com).
The dsPIC33FJ12MC201/202 CPU module has a 16bit (data) modified Harvard architecture with an
enhanced instruction set, including significant support
for DSP. The CPU has a 24-bit instruction word with a
variable length opcode field. The Program Counter
(PC) is 23 bits wide and addresses up to 4M x 24 bits
of user program memory space. The actual amount of
program memory implemented varies by device. A
single-cycle i n str uct i on p r efe t ch m e ch ani sm i s u s ed t o
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)
instruction and the table instructions. Overhead-free
program loop constructs are supported using the DO
and REPEAT instructions, both of which are
interruptible at any point.
The dsPIC33FJ12MC201/202 devices have sixteen,
16-bit working registers in the programmer’s model.
Each of the working registers can serve as a data,
address, or address offset register. The 16th working
register (W15) operates as a software Stack Pointer
(SP) for interrupts and calls.
There are two classes of instruction in the
dsPIC33FJ12MC201/202 devices: 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 eff iciency. For most instruct ions,
dsPIC33FJ12MC201/202 devices are 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 dsPIC33FJ12MC201/
202 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, referred to as X
and Y data memory. Each memory block has its own
independent Address Generation 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 data space boundary is
device-specific.
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-Rev ers ed Add r essin g to greatly
simplify input or output data reordering for radix-2 FFT
algorithms.
The upper 32 Kbytes of the data space memory map
can optionally be mapped into program space at any
16K program word boundary defined by the 8-bit
Program S pace Visibility Page (PSVPAG) re gister. The
program-to-data-space mapping feature lets any
instruction access program space as if it were data
space.
2.2DSP Engine Overview
The DSP engine features a high-spee d 17-bit by 17-bit
multiplier, a 40-bit ALU, two 40-bit saturating
accumulators, and a 40-bit bidirectional barrel shifter.
The barrel shifter is c apable of shif ting a 40-bit value up
to 16 bits right or left, in a single cycle. The DSP instructions operate seamles sly with all other in st ruction s and
have been desi gned for o ptimal re al-time p erformanc e.
The MAC instruction and other associated instructions
can concurrently fetc h two data operands from memory , while multiplyi ng two W r egisters and accumula ting
and optionally saturating the result in the same cycle.
This instruction functionality requi res that the RAM data
space be split for these instructions and linear for all
others. Data space partitioning is achieved in a transparent and flexible manner through dedicating certain
working registers to each address space.
2.3Special MCU Features
The dsPIC33FJ12MC201/202 features a 17-bit by 17bit single-cycle multiplier that is shared by both the
MCU ALU and DSP engine. T he mul tiplie r can pe rform
signed, unsigned and mixed-sign multiplication. Using
a 17-bit by 17-bit multiplier for 16-bit by 16-bit
multiplication not onl y allows you to perfor m mixed-sign
multiplication, it also achieves accurate results for
special operations, such as (-1.0) x (-1.0).
The dsPIC33FJ12MC201/202 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 = Accumul ator A overflowed
0 = Accumulator A has not overflowed
bit 14OB: Accumulator B Overflow Status bit
1 = Accumul ator 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 satura ted
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 satura ted
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
This bit may be read or cleared (not set). Clearing this bit will clear SA and SB.
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 data) or 8th low-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)
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 can be read or cleared (not set).
2: The IPL<2:0> bits are con caten ated with the IPL<3 > bi t (CO RCON<3>) to form the CPU Inte rrup t Prio rity
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> St atus 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 Priori ty 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 prog ress
0 = REPEAT loop not in pr ogress
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 arithmetic (2’s complement). It indicates an overflow of a magnitude that
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 that affects the Z bit has set it at some time in the past
0 = The most recent operation that 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)
Note 1: This bit can be read or cleared (not set).
2: The IPL<2:0> bits are con caten ated with the IPL<3 > bi t (CO RCON<3>) to form the CPU Inte rrup t Prio rity
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> St atus 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 dsPIC33FJ12MC201/202 ALU is 16 bits wide and
is capable of addition, subtraction, bit shifts, and logic
operations. Unless otherwise mentioned, arithmetic
operations are 2’s complement in nature. Depending
on the operation, the ALU can affect the values of the
Carry (C), Zero (Z), Negative (N), Overflow (OV), and
Digit Carry (DC) Status bits in the SR register. The C
and DC S tatus bits op erate as Borrow
bits, respectively, 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 data memory, depending on the
addressing mode of the instruction. Likewise, output
data from the ALU ca n be written to the W re gister array
or a data memory location.
Refer to the dsPIC30F/33F Programmer’s ReferenceManual (DS70157) for information on the SR bits
affected by each instruction.
The dsPIC33FJ12MC201/202 CPU incorporates hardware support 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:
• 16-bit x 16-bit signed
• 16-bit x 16-bit unsigned
• 16-bit signed x 5-bit (literal) unsigned
• 16-bit unsigned x 16-bit unsigned
• 16-bit unsigned x 5-bit (literal) unsigned
• 16-bit unsigned x 16-bit signed
• 8-bit unsigned x 8-bit unsigned
2.5.2DIVIDER
The divide block suppor ts 32-bit/16-bit and 16-b it/16-bit
signed and unsigned integer divide op erat ion s w i th th e
following data sizes:
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 can specify any 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 divide
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.
and Digit Borrow
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 dsPIC33FJ12 MC2 01/202 is a single -cy cl e ins truc tion flow architecture; therefore, concurrent operation
of the DSP engine with MCU ins truction flow is no t possible. However, some MCU ALU and DSP engine
resources can be used concurrently by the same
instruction (e.g., ED, EDAC).
The DSP engine can also perform inherent accumulator-to-accumulator operatio ns that require no add itional
data. These instructions are ADD, SUB, and NEG.
The DSP engine has options selected through bits in
the CPU Core Control register (CORCON), as listed
below:
• Fractional or integer DSP multiply (IF)
• Signed or unsigned DSP multiply (US)
• Conventional or convergent rounding (RND)
• Automatic saturation on/off for ACCA (SATA)
• Automatic saturation on/off for ACCB (SATB)
• Automatic saturation on/off for writes to data
memory (SATDW)
• Accumulator Saturation mode selection
(ACCSAT)
A block diagram of the DSP engine is shown in
Figure 2-3.
TABLE 2-1:DSP INSTRUCTIONS
SUMMARY
Instruction
CLRA = 0
EDA = (x – y)
EDACA = A + (x – y)
MACA = A + (x * y)Yes
MACA = A + x
MOVSACNo change in AYes
MPYA = x * yNo
MPYA = x
MPY.NA = – x * yNo
MSCA = A – x * yYes
The 17-bit x 17-bit multiplier is capable of signed or
unsigned operati on and can mul tiplex i ts ou tput u sing 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/ scale r is a 33-bit valu e that i s sign -ext ended
to 40 bits. Integer data is inherently represented as a
signed 2’s complement value, where the Most Significant bit (MSb) is defined as a sign bit. The range of an
N-bit 2’s complement integer is -2
• For a 16-bit integer, the data range is -32768
(0x8000) to 32767 (0x7FFF) including 0.
• For a 32-bit integer, the data range is
-2,147,483,648 (0x80000000) to 2,147,483,647
(0x7FFF FFFF).
When the multiplier is configured for fractional
multiplication, the data is represented as a 2’s
complement fraction, where the MSb is defined as a
sign bit and the radix po int is impli ed to lie just af ter the
sign bit (QX format). The range of an N-bit 2’s
complement fract ion with this im plie d radix point i s -1.0
to (1 – 2
is -1.0 (0x8000) to 0.999969482 (0x7FFF) including 0
and has a precision of 3.01518x10-5. In Fractional
mode, the 16 x 16 multiply operation generates a 1.31
product that 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 multiply operations.
The MUL instruction can be directed to use byte or
word-sized operands. Byt e operan ds will direct a 16-bit
result, and word operands will direct a 32-bit result to
the specified register(s) in the W array.
1-N
). For a 16-bit fraction, the Q15 data range
N-1
to 2
N-1
– 1.
-10
.
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 preaccumulation source and post-accumulation
destination. For t he ADD and LAC instructions, the da t a
to be accumulated or loaded can be optionally scaled
using the 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 si de, and either tru e or comp leme nt
data into the other input.
• In the case of addition, the Carry/B
active-high and the other input is true data (not
complemented).
• In the case of subtraction, the Carry/Borrow input
is active-low and the ot her inpu t is comple mente d.
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 that
controls accumulator data saturation, if selected. It
uses the result of the adder, the Overflow Status bits
described previously 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 support saturation and
overflow:
• OA: ACCA overflowed into guard bits
• OB: ACCB overflowed into guard bits
• SA: ACCA saturated (bit 31 overflow and
saturation)
or
ACCA overflowed into guard bits and saturated
(bit 39 overflow and saturation)
• SB: ACCB saturated (bit 31 overflow and
saturation)
or
ACCB overflowed into guard bits and saturated
(bit 39 overflow and saturation)
• OAB: Logical OR of OA and OB
• 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 Trap Flag Enable bits
(OVATE, OVBTE) in the INTCON1 register are set
(refer to Section 6.0 “Interrupt Controller”). This
allows the user appl ication to ta ke immediate acti on, for
example, to correct system gain.
The SA and SB bits are modified each time data
passes through the adder/subtracter, but can only be
cleared by the u ser applic ation. When set, they indicate
that the accumulator has overflowed its maximum
range (bit 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 therefore, indicate that a
catastrophic o verflow has occurred. If the COVTE bit i n
the INTCON1 register is set, the SA and SB bits will
generate an arithmetic warning trap when saturation is
disabled.
The Overflow and Saturation Status bits can 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). Programmers can check one bit in
the ST ATUS register to determine if either ac cumula tor
has overflowed, or one bit to determine if either
accumulator has saturated. This is useful for complex
number arithmetic, which typically uses both
accumulators.
The device supports three Saturation and Overflow
modes:
• 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 application. This condition is referred to as
‘super saturation’ and provides protection against
erroneous data or unexpected algorithm problems
(such as gain calculations).
• 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 application. When
this Saturation mode is in effect , the guard bit s are
not used, so the OA, OB or OAB bits are never
set.
• Bit 39 Catastrophic Overflow:
The bit 39 Overflow Status bit from the adder is
used to set the SA or SB bit, which remains set
until cleared by the user applic ation. No sa turation
operation is performed, and the accumulator is
allowed to overflow, destroying its sign. If the
COVTE bit in the INTCON1 register is set, a
catastrophic ov erflo w ca n i nit iate a trap exceptio n.
2.6.3ACCUMULATOR ‘WRITE BACK’
The MAC class of instructions (with the exception of
MPY, MPY.N, ED, and EDAC) can optionally write a
rounded ver sion of the hi gh word (bits 31 t hroug h 16)
of the accumulator tha t 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:
• W13, Register Direc t:
The rounded contents of the non-target
accumulator are written into W13 as a
1.15 fraction.
• [W13] + = 2, Register Indirect with Post-Increment:
The rounded contents 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.3.1Round Logic
The round logic is a combinational block that performs
a conventional (biased) or convergent (unbiased)
round function durin g an ac cumulat or write (store). Th e
Round mode is determined by the state of the RND bit
in the CORCON register. It generates a 16-bit, 1.15
data value that is passed to the data space write
saturation logic. If rounding is not indicated by the
instruction, a truncated 1.15 data value is stored and
the least significant word is simply discarded.
Conventional rounding will zero-extend bit 15 of the
accumulator and will add it to the ACCxH word (bits 16
through 31 of the accumulator).
• If the ACCxL word (bits 0 through 15 of the accumulator) is between 0x8000 and 0xFF FF (0x8000
included), ACCxH is incremented.
• If ACCxL is between 0x0 000 and 0x 7FFF, ACCxH
is left unchanged.
A consequence of this algorithm is that over a succession of random rou nding operations, th e 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 random in nature,
this scheme removes 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.3.2 “Data Space Write Saturation”). For
the MAC class of instructions, the accumulator writeback operation functions 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 truncat ion ) is test ed for ove rflo w and
adjusted accordingly:
• For input data greater than 0x007FFF, data
written to memory is forced to the maximum
positive 1.15 value, 0x 7FFF.
• For input data less than 0xFF8000, data written to
memory is forced to the maximum negative 1.15
value, 0x8000.
The Most Significan t bit of the source (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.4BARREL SHIFTER
The barrel shifter ca n perform up to 1 6-bit arithme tic or
logic right shifts, or up to 16-bit left shifts in a single
cycle. The source can be either of the two DSP
accumulators or the X bus (to su pport multi-bit shif t s of
register or memory data).
The shifter req uir es a signed binary value to determine
both the magnitude (num ber of bits) and direction of the
shift operation. A positive value shif ts the operand right.
A negative v alue shi fts the opera nd left. A va lue of ‘ 0’
does not modify the operand.
The barrel shifter is 40 bits wide, thereby obtaining a
40-bit result fo r DSP shif t o peratio ns a nd a 16-bit re sult
for MCU shift operations. Data from the X bus is
presented to the barrel shifter between bit positions 16
and 31 for right shifts, and between bit positions 0 and
16 for left shifts.
of the dsPIC33FJ12MC201/202 family of
devices. It is not intended to be a
comprehensive reference source. To
complement the information in this data
sheet, refer to the dsPIC33F Family
Reference Manual, “Section 4. Program
Memory” (DS70202), which is available
from the Microchip website
(www.microchip.com).
The dsPIC33FJ12MC201/202 architecture features
separate program and data memory spaces and
buses. This architect ure also all ows the dir ect access
of program memory f rom the d ata space dur ing code
execution.
3.1Program Address Space
The program address memory space of the
dsPIC33FJ12MC201/202 devices is 4M instructions.
The space is addressable by a 24-bit value derived
either from 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 application acc ess to the program me mory sp ac e
is restricted to the lower half of the address range
(0x000000 to 0x7FFFFF). The exception is the use of
TBLRD/TBLWT operations, which use TBLPAG<7> to
permit access to the Configuration bits and Device ID
sections of the configuration memory space.
The memory map for the dsPIC33FJ12MC201/202
family of devices is shown in Figure3-1.
FIGURE 3-1:PROGRAM MEMORY MAP FOR dsPIC33FJ12MC201/202 DEVICES
The program memory space is organized in wordaddressable 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 t he 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 provides compatibility with data memory
space addressing and makes data in the program
memory space accessible.
3.1.2INTERRUPT AND TRAP VECTORS
All dsPIC33FJ12MC201/202 devices reserve the
addresses between 0x00000 and 0x000200 for hardcoded program execution vectors. A hardware Reset
vector is provided to redirect code execution from the
default value of the PC on device Reset to the actual
start of code. A GOTO in stru ction is programmed by th e
user application at 0x000000, with the actual address
for the start of code at 0x000002.
dsPIC33FJ12MC201/202 devices also have two
interrupt vector tables, located from 0x000004 to
0x0000FF and 0x000100 to 0x0001FF. These vector
tables allow each of the device interrupt sources to be
handled by separate Interrupt Service Routines (ISRs).
A more detailed discussion of the interrupt vector
tables is provided in Section 6.1 “Interrupt Vector
The dsPIC33FJ12MC2 01/202 CPU has a sep arat e 16bit-wide data memory space. The data space is
accessed using separate Address Generation Units
(AGUs) for read and write operations. The data
memory maps is shown in Figure 3-3.
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 D ata FromProgram Memory Using Program Space Visibility”).
dsPIC33FJ12MC201/202 devices implement up to
30 Kbytes o f data memory. Should an EA poi nt 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 (LSBs) of each word have even ad dresses, whil e
the Most Significant Bytes (MSBs) have odd
addresses.
3.2.2DATA MEMORY ORGANIZATION
AND ALIGNMENT
To maintain backward compatibility with PIC
devices and improve data space memory usage
efficiency, the dsPIC33FJ12MC201/202 instruction set
supports both word and byte operations. As a
consequence o f b yte a cc es sibility , all effectiv e address
calculations are in tern all y sc ale d to step through wordaligned memory. For example, the core recogni zes 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 path. That is, data
memory and registers are organized as two parallel
byte-wide entities with shared (word) address decode
but separate write lin es. Data byt e writes o nly writ e to
the corresponding side of the array or register that
matches the byte address.
®
MCU
All word accesses m ust be al igned to an even a ddress.
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 w rite is attemp ted, an addres s error
trap is generated. If the error occurred on a read, the
instruction underway is com pleted. If the error o ccurred
on a write, the instruction is executed but the write doe s
not occur. In either case, a trap is then executed,
allowing the system and/or use r appli cation to ex amine
the machine state prior to execution of the address
Fault.
All byte loads into any W register are loaded into the
Least Significan t B yte . T he Most Significant By te is n ot
modified.
A sign-extend instruction (SE) is provided to allow user
applications to translate 8-bit signed data to 16-bit
signed values. Alternatively, for 16-bit unsigned data,
user applications 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 S pa ce, from 0x000 0
to 0x07FF, is primarily occupied by Special Function
Registers (SFRs). These are used by the
dsPIC33FJ12MC201/2 02 core and p eripheral m odules
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’.
Note:The actual set of peripheral features and
interrupts varies by the device. 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 t he 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. X data space has
separate read and write data buses. The 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 dat a prefe tch p ath 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 Kbyte s, or 32K words, alth ough the
implemented memory locations vary by device.
WREG00000Working Register 0
WREG10002Working Register 1
WREG20004Working Register 2
WREG30006Working Register 3
WREG40008Working Register 4
WREG5000AW orking Register 5
WREG6000CWorking Register 6
WREG7000EW orking Register 7
WREG80010Working Register 8
WREG90012Working Register 9
WREG100014W or king Re gister 10
WREG110016Working Register 11
WREG120018W or king Re gister 12
WREG13001AWorking Register 13
WREG14001CWorking Re gister 14
WREG15001EWorking Register 15
SPLIM0020Stack Pointer Limit Register
ACCAL0022Accumulator A Lo w Word Register
ACCAH0024Accumulator A High Word Register
ACCAU0026Accumulator A Up pe r Word Register
ACCBL0028Accumulator B Lo w Word Register
ACCBH002AAccumulator B High Word Register
ACCBU002CAccumulator B Upper Word Register
PCL002EProgram Co unter Lo w Word Register
PCH0030————————Program Counter High Byte Register
TBLP A G0032————————Table Page Address Pointer Register
PSVPAG0034————————Program Memo ry V isibi lity Pa ge Ad dre ss Poi nter Reg iste r
RCOUNT0036Repeat Loop C o unter Reg ister
DCOUNT0038DCOUNT<15:0>xxxx
DOSTARTL003ADOSTARTL<15:1>0xxxx
DOSTARTH003C
DOENDL003EDOENDL<15:1>0xxxx
DOENDH0040
SR00 42OAOBSASBOABSABDADCIPL2IPL1IPL0RANOVZC
CORCON0044———USEDTDL<2:0>
MODCON0046XMODEN YMODEN
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
TMR10100Timer1 R egi ster
PR10102Period Regist er 1
T1CON0104T ON
TMR20106Timer2 R egi ster
TMR3HLD 0108Timer3 H old ing R eg ister (f or 32 -bit t imer oper atio ns o nly)
TMR3010ATimer3 Re gister
PR2010CPeriod Regist er 2
PR3010EPeriod Register 3
T2CON0110TO N
T3CON0112TO N
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
IC1BUF0140Input 1 Capture Re gister
IC1CON0142
IC2BUF0144Input 2 Capture Re gister
IC2CON0146
IC7BUF0158Input 7 Capture Re gister
IC7CON015A
IC8BUF015CInput 8 C aptur e Re gis ter
IC8CON015E
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
OC1RS0180Output Compare 1 Secondary Register
OC1R0182Output Comp ar e 1 R e gister
OC1CON0184
OC2RS0186Output Compare 2 Secondary Register
OC2R0188Output Comp ar e 2 R e gister
OC2CON018A
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
I2C1RCV0200————————Receive Register
I2C1TR N0202————————Transmit Register
I2C1BR G0204———————Baud Rate G en erato r Re gis ter
I2C1CON0206I2CEN—I2CSIDLSCLRELIPMIENA10MDISSLWSMENGCENSTRENACKDTACKENRCENPENRSENSEN
I2C1STAT0208ACKSTATTRSTAT———BCLGCSTA TADD10IWCOLI2COVD_APSR_WRBFTBF
I2C1ADD020A——————Address Register
I2C1MSK020C——————Address M a sk Re g is ter
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
SPI1STAT0240SPIEN—SPISIDL——————SPIROV————SPITBFSPIRBF
SPI1CON10242———DISSCK DISSDO MODE16SMPCKESSENCKPMSTENSPRE<2:0>PPRE<1:0>
SPI1CON20244FRMENSPIFSDFRMPOL———————————FRMDLY—
SPI1BUF0248SPI1 Transmit and R e ceive Buffer Register
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
ADC Data Buffer 1xxxx
ADC Data Buffer 2xxxx
ADC Data Buffer 3xxxx
ADC Data Buffer 4xxxx
ADC Data Buffer 5xxxx
ADC Data Buffer 6xxxx
ADC Data Buffer 7xxxx
ADC Data Buffer 8xxxx
ADC Data Buffer 9xxxx
ADC Data Buffer 10xxxx
ADC Data Buffer 11xxxx
ADC Data Buffer 12xxxx
ADC Data Buffer 13xxxx
ADC Data Buffer 14xxxx
ADC Data Buffer 15xxxx
ADC1BUF40308
ADC1BUF5030A
ADC1BUF6030C
ADC1BUF7030E
ADC1BUF80310
ADC1BUF90312
ADC1BUFA0314
ADC1BUFB0316
ADC1BUFC0318
ADC1BUFD031A
ADC1BUFE031C
ADC1BUFF031E
AD1CON10320ADON
AD1CON20322VCFG<2:0>
AD1CON30324ADRC
AD1CHS1230326
AD1CHS00328CH0NB
AD1PCFGL032C
AD1CSSL0330
Legend:x = unknown value on Re set, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
0300
ADC Data Buffer 0xxxx
ADC Data Buffer 1xxxx
ADC Data Buffer 2xxxx
ADC Data Buffer 3xxxx
ADC Data Buffer 4xxxx
ADC Data Buffer 5xxxx
ADC Data Buffer 6xxxx
ADC Data Buffer 7xxxx
ADC Data Buffer 8xxxx
ADC Data Buffer 9xxxx
ADC Data Buffer 10xxxx
ADC Data Buffer 11xxxx
ADC Data Buffer 12xxxx
ADC Data Buffer 13xxxx
ADC Data Buffer 14xxxx
ADC Data Buffer 15xxxx
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
Note1: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.
Note1: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.
PMD10770
PMD20772IC8MDIC7MD
PMD30774
Legend:x = unknown value on Reset, — = unimplemented, read as ‘0’. Reset values are shown in hexadecimal.
——
———————————PWM2MD————0000
T3MDT2MDT1MDQEIMD PWM1MD
————IC2MDIC1MD——————OC2MDOC1MD0000
—
I2C1MD
—
U1MD
—
SPI1MD
——
AD1MD0000
Resets
All
(1)
(2)
All
(1)
dsPIC33FJ12MC201/202
All
Page 42
dsPIC33FJ12MC201/202
<Free Word>
PC<15:0>
000000000
015
W15 (before CALL)
W15 (after CALL)
Stack Grows Toward
Higher Address
0x0000
PC<22:16>
POP : [--W15]
PUSH : [W15++]
3.2.6SOFTWARE STACK
In addition to its use as a working register, the W15
register in the dsPIC3 3FJ12MC201/2 02 devices is also
used as a software Stack Pointer. The Stack Pointer
always points to the firs t avai lable fre e word and gro ws
from lower to higher addresses. It pre-decrements for
stack pops and post-increments for stack pushes, as
shown in Figure 3-4. For a PC push during any CALL
instruction, the MSb of the PC is zero-ex te nde d befo re
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. For example, to cause a
stack error trap when the stack grows beyond address
0x2000 in RAM, initialize the SPLIM with the value
0x1FFE.
Similarly, a Stack Pointer underflow (stack error) trap i s
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-4:CALL STACK FRAME
3.2.7DATA RAM PROTECTION FEATURE
The dsPIC33F product family supports Data RAM
protection features that ena ble se gment s of RAM to b e
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 Fl ash code when en abled. SSR AM (Secure
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 addressing modes shown in Table 3-26 form the
basis of the addressi ng modes optimized to support the
specific features of individual instructions. The
addressing modes provided in the MAC class of
instructions differ from those in the other instruction
types.
3.3.1FILE REGISTER INSTRUCTIONS
Most file register ins truc tio ns us e a 1 3-bi t ad dres s 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 instr uctions . 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 three-operand MCU instructions are of the form:
Operand 3 = Operand 1 <function> Operand 2
where Operand 1 is always a working register (that is,
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 can 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 Effective Address (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
(Register Indexed)
Register Indirect with Literal OffsetThe sum of Wn and a literal forms the EA.
The sum of Wn and Wb 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, al so ref erred to as R egist er Ind exed
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 by 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-modifi ed
• 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 ad dress-
ing modes given abo ve. In divid ual ins tructions 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, use a simplif ied set of
addressing modes to allow the user application to
effectively manipulate the data pointers through register
indirect ta bl es .
The two-source operand prefetch registers must be
members of the set {W8, W9, W10, W11}. For data
reads, W8 and W 9 are always direc ted to the X RAG U,
and W10 and W11 are always directed to the Y AGU.
The effective addresses generated (before and after
modification) must, ther efore, be valid address es within
X data spa ce for W 8 and W9 and Y d ata sp ace for W10
and W11.
Note:Register Indirect with Register Offset
Addressing mode is available only fo r 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 addressing modes outlined previously, some
instructions use literal constants of various sizes. For
example, BRA (branch) instructions use 16-bit signed literals to specif y the bran ch destin ation directly, whereas
the DISI instruction uses a 14-bit unsigned literal field. In
some instructions, such as ADD Acc, the source of an
operand or resu lt is imp li ed by the o pco de itself . Cer tain
operations, s uc h as NOP, do not have any operands.
Start Addr = 0x1100
End Addr = 0x1163
Length = 0x0032 words
Byte
Address
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
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 objective is to remove the need for
software to perform data address boundary checks
when executing tightly looped code, as is typical in
many DSP algorithms.
Modulo Addressi ng can operate in eith er data or program
space (since the data pointer mechanism is essentially
the same for both). On e circ ular bu ff er can be suppo rted
in each of the X (whi ch also provides the po inters into
program space) and Y da ta space s. Modu lo Addr e ssi ng
can operate on an y W reg is te r po in te r. However, it is no t
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, an y partic ul ar cir cul ar buffe r can be con fig ured to operate in only one direction as there are
certain restrictio ns on the buff er start addres s (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 that have a power-of-two length. As these
buffers satisfy the start and end address criteria, they
can operate in a bidirectional mode (that is, address
boundary checks are 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 the registers that will
operate with Modulo Addressing:
• If XWM = 15, X RAGU and X WAGU Modulo
Addressing is disabled.
• 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
‘15’ and the YMODEN bit is set at MODCON<14>.
Modulo Addressing can be applied to the Effective
Address (EA) calculation associated with any W
register. Address boundaries check for addresses
equal to:
• The upper boundary addresses for incrementing
buffers
• The lower boundary addresses for decrementing
buffers
It is important to realize that the address boundaries
check for addresses less th an or greater than the upper
(for increm ent ing buffe rs) an d lo wer ( for d ecr emen ti ng
buffers) boundary addresses (not just equal to).
Address changes can, therefore, jump beyond
boundaries and still be adjusted correctly.
Note:The modulo corrected effective address is
written back to the re giste r only when PreModify or Post-Modify Addressing mode is
used to compute the effective address.
When an address offset (such as [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 reordering for radix-2 FFT algorithms. It is
supported by the X AGU for data writes only.
The modifier, which can be a constant value or register
contents, is regarded as having its bit order reversed. 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 in any of
these situations:
• BWM bits (W register selection) in the MODCON
register are any value other than ‘15’ (the stack
cannot be accessed using Bit-Reversed
Addressing)
• The BREN bit is set in the XBREV register
• The addressing mode use d is Register Indirect
with Pre-Increment or Post-Increment
dsPIC33FJ12MC201/202
N
If the length of a bi t-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 typically a const ant. In th e case 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 executed
only for Register Indirect with Pre-Increment or PostIncrement Addressing and word-sized data writes. It
will not function for any other addressing mode or 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 offset associated with the
Register 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. If an application attempts to do so,
Bit-Reversed Addressing will assume
priority when active for the X WAGU and X
WAGU, 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, a write to the
XBREV register should not be im mediate ly follo wed b y
an indirect read operation using the W reg ister that ha s
been designated as the bit-rev ersed poi nter.
The dsPIC33FJ12MC201/202 architecture uses a 24bit-wide program space and a 16-bit-wide data space.
The architecture is also a modified Harvard scheme,
meaning that data can also be present in the program
space. To use this data successfully, it must be
accessed in a way that preserves the alignment of
information in both spaces.
Aside from norma l execution, the dsPIC33FJ12MC201/
202 architecture provides two methods by which
program space can be accessed during operation:
• Using table in stru ctions to ac cess indiv idual bytes
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 upd ated perio dically. It also all ows access
to all bytes of the program word. The remapping
method allows an applicat ion to ac cess a l arge bloc k of
data on a read-only basis, which is ideal for lookups
from a large table of static data. The application 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 operation 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-28 and Fig ure 3-7 show how the program EA is
created for table operations and remapping accesses
from the data EA. Here, P<23:0> refers to a program
space word, and D<15:0> refers to a data space word.
TABLE 3-28: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 n ot used in calc ulati ng the pro gram s pac e addre ss. Bit 15 of
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.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 space. The TBLRDH and TBLWTH
instructions 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 memo ry can th us be rega rded as two 16- bitwide word address sp ac es , res id ing sid e by si de, each
with the same address range. TBLRDL and TBLWTL
access the space that contains the least significant
data word. TBLRDH and TBLWTH access the space that
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.
• TBLRDL (Table Read Low):
- In Word mode, this instruction maps the
lower word of the program space
location (P<15:0>) to a data address
(D<15:0>).
- In Byte mode, either the upper or lower byte
of the lower program word is mapped to the
lower byte of a data ad dre ss. The upp er by te
is selected when Byte Select is ‘1’; the lower
byte is selected when it is ‘0’.
• TBLRDH (Table Read High):
- In Word mode, this instruction 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, this instruction maps the upper
or lower byte of the program word to D<7:0>
of the data address, in the TBLRDL instruc-
tion. The data is always ‘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 termine d by the Table Page
register (TBLPAG). TBLPAG cov ers the entire pro gram
memory space of the device, including user and
configuration sp aces. When T BLPAG<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-8:ACCESSING PROGRAM MEMORY WITH TABLE INSTRUCTIONS
The data in the page
designated by
PSVPAG is mapped
into the upper half of
the data memory
space...
Data EA<14:0>
...while the lower 15 bits
of the EA specify an
exact address within
the PSV area. This
corresponds exactly to
the same lower 15 bits
of the actual program
space address.
PSV Area
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 program space.
This option provides transparent access to stored
constant data from the data space without the need to
use special instructions (such as TBLRDL and
TBLRDH).
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. By incrementing the PC by 2 for each
program memory word, the low e r 15 bits of data space
addresses directly map to the lower 15 bits in the
corresponding program space addresses.
Data reads to this area add a cycle to the instruction
being executed, since two program memory fetches
are required.
Although each data space address 8000h and higher
maps directly into a corresponding program memory
address (see Figure 3-9), only the lower 16 bits of the
24-bit program word are used to contain the data. The
upper 8 bits of any program space location used as
data should be programmed with ‘1111 1111’ or
‘0000 0000’ to force a NOP. This prevents possible
issues should the area of code ever be accidentally
executed.
Note:PSV access is temporarily disabled d uring
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, and are executed inside
a REPEAT loop, the se in stances require two instruction
cycles in addition to the spe ci fie d ex ec uti on 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 afte r an
interrupt is serviced
Any other iteration of the REPEAT loop will allow the
instruction using PSV to access data, to execute in a
single cycle.
of the dsPIC33FJ12MC201/202 family of
devices. It is not intended to be a
comprehensive reference source. To
complement the information in this data
sheet, refer to the dsPIC33F Family
Reference Manual, “Section 5. Flash
Programming” (DS70191), which is
available from the Microchip website
(www.microchip.com).
The dsPIC33FJ12MC201/202 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
DD range.
V
Flash memory can be programmed in two ways:
• In-Circuit Serial Programming™ (ICSP™)
programming capability
• Run-Time Self-Programming (RTSP)
ICSP allows a dsPIC33FJ12MC201/202 device to be
serially programme d while in the en d application circuit.
This is 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
DD), ground (VSS) and
then program the digital signal controller just before
shipping the product. This also allows the most recent
firmware or a custom firmware to be programmed.
RTSP is accomplished using TBLRD (table read) and
TBLWT (table write) instructions. With RTSP, the user
application can write program memory data either in
blocks or ‘rows’ of 64 instructions (192 bytes) at a time
or a single 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 mem ory 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 TBLP AG re gister 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 rea d
or write to bits <23:16> of program memory. TBLRDH
and TBLWTH can also access prog ram memory in W ord
or Byte mode.
The dsPIC33FJ12MC201/202 Flash program memory
array is organized into rows of 64 instructions or 192
bytes. RTSP allows the user application 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 23-12 shows typical erase and
programming time s. The 8-row eras e p ages and si ngl e
row write rows are edge-aligned 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 into the buffers sequentially. 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 the buffers. Programming is performed by
setting the control bits in the NVMCON register. A total
of 64 TBLWTL and TBLWTH instructions are required
to 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.3Programming Operations
A complete programming sequence is necessary for
programming or erasing the internal Flash in RTSP
mode. The processor st alls (wait s) until the ope ration is
finished.
The programming time depends on the FRC accuracy
(see Table 23-18) and the value of the FRC Oscillator
Tuning register (see Register 7-4). Use the following
formula to calcul ate the minim um and maxim um values
for the Row Write Time, Page Erase Time, and Word
Write Cycle Time parameters (see Table 23-12).
EQUATION 4-1:PROGRAMMING TIME
For example, if the device is operating at +125°C,
the FRC accuracy will be ±5%. If the TUN<5:0> bits
(see Register 7-4) are set to ‘b111111, the
Minimum Row Write Time is:
and, the Maximum Row Write Time is:
Setting the WR bit (NVMCON<15>) starts the operation, and the WR bit is automatically cleared when the
operation is finished.
4.4Control Registers
Two SFRs are 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 application must consecutively write 0x55 and
0xAA to the NVMKEY register. Refer to Section 4.3“Programming Operations” for further details.
1 = An improper program or erase sequence attempt or termination has occurred (bit is set
automatically on any set attempt of the WR bit)
0 = The program or erase operation completed normally
bit 12-7Unimplemented: Read as ‘0’
bit 6ERASE: Erase/Program Enable bit
1 = Perform the erase operation specified by NVMOP<3:0> on the next WR command
0 = Perform the program operation specified by NVMOP<3:0> on the next WR command
bit 5-4Unimplemented: Read as ‘0’
bit 3-0NVMOP<3:0>: NVM Operation Select bits
(2)
If ERASE = 1:
1111 = Memory bulk erase operation
1101 = Erase General Segment
1100 = Erase Secur e Segment
0011 = No operation
0010 = Memory page erase operation
0001 = No operation
0000 = Erase a single Configuration register byte
If ERASE =
0:
1111 = No operation
1101 = No operation
1100 = No operation
0011 = Memory word program operation
0010 = No operation
0001 = Memory row program operation
0000 = Program a single Configuration register byte
Note 1: These bits can only be reset on POR.
2: All other combinations of NVMOP<3:0> are unimplemented.
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
4.4.1PROGRAMMING ALGORITHM FOR
FLASH PROGRAM MEMORY
Programmers 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 s t arti ng add res s o f th e page to be
erased into the TBLPAG and W registers.
c)Write 0x55 to NVMKEY.
d)Write 0xAA 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 clear ed automatically.
4.Write the first 64 inst ructions from data R AM 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 0x55 to NVMKEY.
c)Write 0xAA 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 wr ite to Flash mem -
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
application must wait for the programming time until
programming is complete. The two instructions
following the start of the programming sequence
should be NOPs, as shown in Example 4-3.
MOVW0, NVMCON; Initialize NVMCON
; Set up a pointer to the first program memory location to be written
; program memory selected, and writes enabled
MOV#0x0000, W0;
MOVW0, TBLPAG; Initialize PM Page Boundary SFR
MOV#0x6000, W0; An example program memory address
; Perform the TBLWT instructions to write the latches
; 0th_program_word
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
; 1st_program_word
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
; 2nd_program_word
MOV#LOW_WORD_2, W2;
MOV#HIGH_BYTE_2, W3;
TBLWTL W2, [W0] ; Write PM low word into program latch
TBLWTH W3, [W0++]; Write PM high byte into program latch
•
•
•
; 63rd_program_word
MOV#LOW_WORD_31, W2;
MOV#HIGH_BYTE_31, W3;
TBLWTL W2, [W0] ; Write PM low word into program latch
TBLWTH W3, [W0++]; Write PM high byte into program latch
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
NOP; erase command is asserted
of the dsPIC33FJ12MC201/202 family of
devices. It is not intended to be a
comprehensive reference source. To
complement the information in this data
sheet, refer to the dsPIC33F FamilyReference Manual, “Section 8. Reset”
(DS70192), which is available from the
Microchip website (www.microchip.com).
The Reset module combines all reset sources and
controls the device Master Reset Signa l, SYSRST. The
following is a list of device Reset sources:
• POR: Power-on Reset
• BOR: Brown-out Reset
•MCLR
•SWR: RESET Instruction
• WDTO: Watchdog Timer Reset
• CM: Configuration Mismatch Reset
• TRAPR: Trap Conflict Reset
• IOPUWR: Illegal Condition Device Reset
: Master Clear Pin Reset
- Illegal Opcode Reset
- Uninitialized W Register Reset
- Security Reset
A simplified block diagram of the Reset module is
shown in Figure 5-1.
Any active source of reset will make the SYSRST
signal active. On system Rese t, some of the registers
associated with the CPU and peripherals are forced to
a known Reset state and some are unaffected.
Note:Refer to the specific peripheral section or
Section 2.0 “CPU” of this manual for
register Reset states.
All types of devi ce Res et set a corres pondi ng st atus bit
in the RCON register to indicate the typ e o f Res et (se e
Register 5-1).
All bits that are set, with the exception of the POR bit
(RCON<0>), are clear ed during a POR event. The us er
application can set or clear any bit at any time during
code execution. The RCON bits only serve as status
bits. Setting a particular 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 data sheet.
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 is meaningful.
The dsPIC33FJ12MC201/202 family of devices have
two types of Reset:
•Cold Reset
•Warm Reset
A cold Reset is the result of a Power-on Reset (POR)
or a Brown-out Reset (BOR). On a cold Reset, the
FNOSC configuration bits in the FOSC device
configuration register selects the device clock source.
A warm Reset is the result of all other reset sources,
including th e RESET instruction. On warm Reset, the
device will continue to operate from the current clock
source as indicated by the C urre nt Osc ill ato r Select io n
(COSC<2:0>) bits in the Oscillator Control
(OSCCON<14:12>) register.
The device is kept in a Reset state until the system
power supplies have stabilized at appropriate levels
and the oscillator clock is ready. The sequence in
which this occurs is detailed below and is shown in
Figure 5-2.
1.POR Re set: A POR circuit holds the device in
Reset when the power supply is turned on. The
POR circuit is active un til V
threshold and the delay TPOR has elapsed.
DD crosses the VPOR
2.BOR Reset: The on-chip voltage regulator has
a BOR circuit that keeps the device in Reset
until VDD crosses the VBOR threshold and the
delay T
BOR has elapsed. The delay TBOR
ensures that the voltage regulator output
becomes stable.
3.PWRT Timer: The programmable power-up
timer continues to hold the processor in Reset
for a specific period of time (T
BOR. The delay T
PWRT ensures that the system
PWRT) after a
power supplies have stabilized at the appropriate level for full-spe ed ope ration . Afte r the de lay
PWRT has elapsed, the SYSRST becomes
T
inactive, which in turn enables the selected
oscillator to start generating clock cycles.
4.Oscillator Delay: The total delay for the cl ock to
be ready for various clock source selections is
given in Table 5-1. Refer to Section 7.0“Oscillator Configuration” for more
information.
5.When the oscillator clock is rea dy , the pro cessor
begins execution from location 0x000000. The
user application programs a GOTO instruction at
the reset address, which redirects program
execution to the appropriate start-up routine.
6.The Fail-safe clock monitor (FSCM), if enabled,
begins to monitor the system clock when the
system clock is ready and the delay T
FSCM
elapsed.
TABLE 5-1:OSCILLATOR DELAY
Oscillator Mode
FRC, FRCDIV16,
Oscillator
Startup Delay
OSCD——TOSCD
T
FRCDIVN
FRCPLLTOSCD—TLOCKTOSCD + TLOCK
XTTOSCDTOST—TOSCD + T OST
HSTOSCDTOST—TOSCD + TOST
EC————
XTPLLTOSCDTOSTTLOCKTOSCD + TOST + TLOCK
HSPLLT OSCDTOSTTLOCKTOSCD + TOST + TLOCK
ECPLL——TLOCKTLOCK
SOSCTOSCDTOST—TOSCD + TOST
LPRCTOSCD——TOSCDNote 1:TOSCD = Oscillator Start-up Delay (1.1 μs max for FRC, 70 μs max for LPRC). Crystal Oscillator start-up
times vary with crystal char acteristics, load capacitance, etc.
OST = Oscillator Start-up Timer Delay (1024 oscillator clock period). For example, TOST = 102.4 μs for a
2:T
10 MHz crystal and T
3:T
LOCK = PLL lock time (1.5ms nominal), if PLL is enabled.
1.POR Reset: A POR circuit holds the device in Reset when the power supply is turned on. The POR circuit is active until V
DD crosses
the V
POR threshold and the delay TPOR has elapsed.
2.BOR Reset: The on-chip voltage regulator has a BOR circuit that keeps the device in Reset until V
DD crosses the VBOR threshold
and the delay T
BOR has elapsed. The delay TBOR ensures the voltage regulator output becomes stable.
3.PWRT Timer: The programmable power-up time r continues t o hold th e processor in Reset for a sp ecific perio d of time (T
PWRT)
after a BOR. Th e de la y T
PWRT ensures that the system power supplies have stabilized at the appropriate level for full-speed oper-
ation. After the delay T
PWRT has elapsed, the SYSRST becomes inactive, which in turn enables the selected oscillator to start gen-
erating clock cycles.
4.Oscillator Delay: The total dela y for the clock to be ready for various clock source selections a re given in Table 5-1. Refer to
Section 7.0 “Oscillator Configuration” for more information.
5.When the oscillator clock is ready, the processor begins execution from location 0x000000. The user application programs a GOTO
instruction at the reset address, which redirects program execution to the appropriate start-up routine.
6.The Fail-safe clock monitor (FSCM), if enabled, be gins to monito r the system clock when the system clock is rea dy and the de l ay
T
FSCM elapsed.
dsPIC33FJ12MC201/202
TABLE 5-2:OSCILLATOR DELAY
SymbolParameterValue
PORPOR threshold1.8V nominal
V
PORPOR extension time 30 μs maximum
T
BORBOR threshold2.5V nominal
V
T
BORBOR extension time 100 μs maximum
PWRTProgrammable
T
power-up time delay
T
FSCMFail-safe Clock
Monitor Delay
0-128 ms nominal
900 μs maximum
Note:When the devic e exits the Reset condi-
tion (begins normal operation), the
device operating parameters (voltage,
frequency, temperature, etc.) must be
within their operating ranges, otherwise
the device may not function correctly.
The user application must ensure that
the delay between the time power is
first applied, and the time SYSRST
becomes i nactive, is long enough to get
all operating parameters within
specification.
A Power-on Reset (POR) circuit ensures the device is
reset from power-on. The POR circuit is active until
DD crosses the VPOR threshold and the delay TPOR
V
has elapsed. The delay TPOR ensures the internal
device bias circuits become stable.
The device supp ly voltage characteristics must meet
the specified starting voltage and rise rate
requirements to generate the POR. Refer to
Section 23.0 “Electrical Characteristics” for details.
The POR status (POR) bit in the Reset Control
(RCON<0>) register is set to indicate the Power-on
Reset.
5.3Brown-out Reset (BOR) and
Power-up timer (PWRT)
The on-chip regulator has a Brown-out Reset (BOR)
circuit that resets the device when the V
DD < VBOR) for proper devi ce operation. Th e BOR cir-
(V
cuit keeps th e device in Reset un til V
DD is too low
DD crosses the
V
BOR threshold and the delay TBOR has elapsed. The
delay T
BOR ensures the voltage regulator output
becomes stable.
The BOR status (BOR) bit in the Reset Control
(RCON<1>) register is set to indicate the Brown-out
Reset.
The device will not run at full speed af ter a BOR a s th e
DD should rise to acceptable levels for full-speed
V
operation. The PWRT provides power-up time delay
PWRT) to ensure that the syst em power supplies have
(T
stabilized at the appropriate levels for full-speed
operation before the SYSRST is released.
The power-up timer delay (T
PWRT) is programmed by
the Power-on Reset Timer Value Select
(FPWRT<2:0>) bits in the POR Configuration
(FPOR<2:0>) register, which provides eight settings
(from 0 ms to 128 ms). Refer to Section 20.0 “SpecialFeatures” for further details.
Figure 5-3 shows the typical brown-out scenarios. The
reset delay (T
The external Reset is generated by driving the MCLR
pin low . Th e MCLR pin is a Schm itt trigge r input wit h an
additional glit ch fi lter. Reset pulses that ar e lon ger tha n
the minimum pulse width will generate a Reset. Refer
to Section 23.0 “Electrical Characteristics” for
minimum pulse width specifications. The External
Reset (MCLR
(RCON) register is set to indicate the MCLR
5.4.0.1EXTERNAL SUPERVISORY CIRCUIT
Many systems have external supervisory circuits that
generate reset signals to Reset multiple devices in the
system. This external Res et signa l can be dire ctly co nnected to the MCLR
rest of system is Reset.
5.4.0.2INTERNAL SUPERVISORY CIRCUIT
When using the internal power supervisory circuit to
Reset the device, t he externa l reset pin (MCLR
be tied dire ctly or resisti vely to V
pin will not be used to generate a Reset. The
MCLR
external re set pin (MCLR
pull-up and must not be left unconnected.
) Pin (EXTR) bit in the Reset Control
Reset.
pin to Reset the device when the
) should
DD. In this case, the
) does not ha ve an internal
level 13 through level 15, inclusive. The address error
(level 13) and oscillator error (level 14) traps fall into
this category.
The Trap Reset Flag (TRAPR) bit in the Reset Control
(RCON<15>) register is set to indicate the T rap Conf lict
Reset. Refer to Section 6.0 “Interrupt Controller” for
more information on trap conflict Resets.
5.8Configuration Mismatch Reset
To maintain the integrity of the peripheral pin select
control registers, they are constantly monitored with
shadow registers in hardware. If an unexpected
change in any of the registers occur (such as cell disturbances caused by ESD or other external events), a
configuration mismatch Reset occurs.
The Configuration Mismatch Flag (CM) bit in the
Reset Control (RCON<9>) register is set to indicate
the configuration mismatch Reset. Refer to
Section 9.0 “I/O Ports” for more information on the
configuration mism atc h Re set .
Note:The configuration mismatch feature and
associated reset flag is not availa ble on all
devices.
5.5Software RESET Instruction (SWR)
Whenever the RESET instruction is executed, the
device will assert SYSRST
special Reset state. This Reset state will not reinitialize the clock. The clock source in effect prior to the
RESET instruction will remain. SYSRST
the next instruction cycle, and the reset v ector fetch will
commence.
The Software Reset (Instruction) Flag (SWR) bit in the
Reset Control (RCON<6>) register is set to indicate
the software Reset.
, placing the device in a
is releas ed at
5.6Watchdog Time-out Reset (WDTO)
Whenever a Watchdog time-out occurs, the device will
asynchronously assert SYSRST
remain unchanged. A WDT time-out during Sleep or
Idle mode will w a ke- up the processor, but will not reset
the processor.
The Watchdog Timer Time-out Fla g (WDTO) bit in t he
Reset Control (RCON<4>) register is set to indicate
the Watchdog Reset. Refer to Section 20.4“Watchdog Timer (WDT)”for more information on
Watchdog Reset.
. The clock sourc e will
5.7Trap Conflict Reset
If a lower-priority hard trap occurs while a higher-priority trap is being processed, a hard trap conflict Reset
occurs. The hard traps include exceptions of priority
5.9Illegal Condition Device Reset
An illegal condition device Reset occurs due to the
following sources:
• Illegal Opcode Re se t
• Uninitialized W Register Reset
• Security Reset
The Illegal Opcode or Uninitialized W Access Reset
Flag (IOPUWR) bit in the Reset Control (RCON<14>)
register is set to indicate the illegal condition device
Reset.
5.9.0.1ILLEGAL OPCODE RESET
A device Reset is generated if the device attempts to
execute an illegal opcode value that is fetched from
program memory.
The illegal opcode Reset function can prevent the
device from executing program memory sections that
are used to store constant data. To take advantage of
the illegal opcode Reset, use only the lower 16 bits of
each program memory s ection to sto re the dat a values.
The upper 8 bits should be programmed with 3Fh,
which is an illegal opcode value.
5.9.0.2UNINITIALIZED W REGISTER
RESET
Any attempts to use the uninitialized W register as an
address pointer will Reset the device. The W register
array (with the exception of W15) is cleared during all
resets and is considered uninitialized until written to.
If a Program Flow Change (PFC) or Vector Flow
Change (VFC) targets a restricted location in a
protected se gment (Boot and Secure Se gment), that
operation will cause a security Reset.
The PFC occurs when the Program Counter is
reloaded as a result of a Call, Jump, Computed Jump,
Return, Return from Subroutine, or other form of
branch instruction.
The VFC occurs when the Program Counter is
reloaded with an Interrupt or Trap vector.
Refer to Section 20.8 “Code Protection andCodeGuard™ Security”for more information on
Security Reset.
5.10Using the RCON Status Bits
The user application can read the Reset Control
(RCON) register after any device Reset to determine
the cause of the reset.
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.
Table 5-3 provides a summary of the reset flag bit
operation.
TA BLE 5-3:RESET FLAG BIT OPERATION
Flag BitSet by:Cleared by:
TRAPR (RCON<15>)Trap conflict eventPOR, BOR
IOPWR (RCON<14>)Illegal opcode or uninitialized
W register access or Security Reset
CM (RCON<9>)
EXTR (RCON<7>)MCLR
SWR (RCON<6>)RESET instructionPOR, BOR
WDTO (RCON<4>)WDT time-outPWRSAV instruction,
SLEEP (RCON<3>)PWRSAV #SLEEP instructionPOR, BOR
IDLE (RCON<2>)PWRSAV #IDLE instructionPOR, BOR
BOR (RCON<1>)POR, BOR
POR (RCON<0>)POR
Note: All Reset flag bits can be set or cleared by user software.
of the dsPIC33FJ12MC201/202 family of
devices. It is not intended to be a
comprehensive reference source. To
complement the information in this data
sheet, refer to the dsPIC33F Family
Reference Manual, “Section 29.
Interrupts (Part II)” (DS70189), which is
available on the Microchip website
(www.microchip.com).
The dsPIC33FJ12MC201/202 interrupt controller
reduces the numerous peripheral interrupt request
signals to a single interrupt request signal to the
dsPIC33FJ12MC201/202 CPU. It has the following
features:
• Up to eight processor exceptions and software traps
• Seven 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
eight non-maskable trap vectors plus up to 118 sources
of interrupt. In general, each interrupt source has its
own vector. Each interrupt vector contains a 24-bitwide address. The value programmed into each
interrupt vector location is the starting address of the
associated 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. Lower addresses generally have a higher
natural priority. For example, the interrupt associated
with vector 0 will take priority over interrupts at any
other vector address.
dsPIC33FJ12MC201/202 devices implement up to 26
unique interrupts and 4 nonmaskable traps. These are
summarized in Table 6-1 and Table 6-2.
6.1.1ALTERNATE INTERRUPT 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 vector s are
organized in the same manner as the default vectors.
The AIVT support s deb ugg ing by providing a m ean s to
switch between an application and a support
environmen t without requ iring the int errupt vectors t o
be reprogrammed. This featu re als o ena bl es s w itching
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 dsPIC33FJ12MC201/202 device clears its registers in response to a Reset, which forces the PC to
zero. The digital signal controller then begins program
execution at location 0x000000. A GOTO instruction at
the Reset address can redirect 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.
dsPIC33FJ12MC201/202 devices implement a total of
22 registers for the interrupt controller:
• INTCON1
• INTCON2
•IFSx
•IECx
•IPCx
•INTTREG
6.3.1INTCON1 AND INTCON2
Global interrupt control functions are controlled from
INTCON1 and INTCON2. INTCON1 contains the
Interrupt Nesting Disable (NSTDIS) bit as well as the
control and stat us f lag s fo r the processor trap sour ces.
The INTCON2 register controls the external interrupt
request signal behavior and the use of the Alternate
Interrupt Vector Table.
6.3.2IFSx
The IFS registers maintain all of the interrupt request
flags. Each source of inte rrupt has a st atus bit, w hich is
set by the respect ive periph erals or exter nal si gna l and
is cleared v ia software.
6.3.3IECx
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.
6.3.4IPCx
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.
6.3.5INTTREG
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>).
6.3.6STATUS/CONTROL REGISTERS
Although they are not specifically part of the interrupt
control hardware, two 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 indicate the
current CPU interrupt priority level. The user
application 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>, also indicates the
current CPU priority level. IPL3 is a read-only bit
so that trap event s c ann ot be m as ke d b y t he user
software.
All Interrupt registers are described in Register 6-1
through Register6-24 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 Priori ty 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 con caten ated with the IPL<3 > bi t (CO RCON<3>) to form the CPU Inte rrup t Prio rity
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 (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 fo rm the CPU Interrupt Priority Level.
To configure an interrupt source at initialization:
1.Set the NSTDIS bit (INTCON1<15>) if nested
interrup ts are not desired.
2.Select the user-assigned priority level for the
interrupt source by writing the control bits in the
appropriate IPCx register. The priority level will
depend on the specific application and type of
interrupt source. If m ultiple pri ority leve ls are not
desired, the IPCx register control bits for all
enabled interrupt sources can be programmed
to the same non-zero value.
Note:At a device Reset, the IPCx regi sters ar e
initialized such that all user interrupt
sources are assigned to priority level 4.
3.Clear the interrupt flag status bi t associated with
the peripheral in the associated IFSx register.
4.Enable the interrupt source by setting the interrupt enable control bit associated with the
source in the appropriate IECx regis ter.
6.4.2INTERRUPT SERVICE ROUTINE
The method used to d eclare an ISR and ini tialize the
IVT with the correct vector address depends on the
programming language (C or assembler) and the
language development tool suite used to develop the
application.
In general, the us er a pp lic ati on m ust c le ar the interrupt
flag in the appropriate IFSx register for the source of
interrupt that the ISR handles. Otherwise, program will
re-enter the ISR imm ediately af ter ex iting the ro utine. If
the ISR is coded in assembly language, it must be
terminated using a RETFIE instruction to unstack the
saved PC value, SRL value and old CPU priority level.
6.4.3TRAP SERVICE ROUTINE
A Trap Service Routine (TSR) is coded like an ISR,
except that the appropriate trap status flag in the
INTCON1 register must be cleared to avoid re-entry
into the TSR.
6.4.4INTERRUPT DISABLE
All user interrupts can be disabled using this
procedure:
1.Push the current SR value onto the software
stack using the PUSH instruction.
2.Force the CPU to priority level 7 by inclusive
ORing the value OEh with SRL.
To enable user interrupts, the POP instruction can be
used to restore the previous SR value.
Note:Only user interrupts with a priority level of
7 or lower can be disabled. Trap sources
(level 8-level 15) cannot be disabled.
The DISI instruction provides a convenient way to
disable interrupt s of priorit y levels 1-6 for a fi xed p eriod
of time. Level 7 interrupt sources are not disabled by
the DISI instruction.
of the dsPIC33FJ12MC201/202 family of
devices. It is not intended to be a
comprehensive reference source. To
complement the information in this data
sheet, refer to the dsPIC33F Family
Reference Manual, “Section 7.
Oscillator” (DS70186), which i s av ail abl e
from the Microchip website
(www.microchip.com).
The dsPIC33FJ12MC201/202 oscillator system
provides:
• External and internal oscillator options as clock
sources
• An on-chip Phase-Lo cked Loo p (PLL) to sc ale the
internal operating frequency to the required
system clock frequency
• An internal FRC oscillator that can also be used
with the PLL, thereby allowing full-speed
operation without any external clock generation
hardware
• Clock switching between various clock sources
• Programmable clock pos t s ca ler f or s ys tem po wer
savings
• A Fail-Safe Clock Monitor (FSCM) that detects
clock failure and takes fail-safe measures
• A Clock Control register (OSCCON)
• Nonvolatile Configuration bits for main oscillator
selection
A simplified diagram of the oscillator system is shown
in Figure 7-1.
FIGURE 7-1:dsPIC33FJ12MC201/202 OSCI LLA TOR SY STE M DIAGR AM
The dsPIC33FJ12MC201/202 devices provide seven
system clock options:
• Fast RC (FRC) Oscillator
• FRC Oscillator with PLL
• Primary (XT, HS or EC) Oscillator
• Primary Oscillator with PLL
• Secondary (LP) Oscillator
• Low-Power RC (LPRC) Oscillator
• FRC Oscillator with post s ca ler
7.1.1SYSTEM CLOCK SOURCES
7.1.1.1Fast RC
The Fast RC (FRC) inte rnal osci llator runs at a nom inal
frequency of 7.37 MHz. User software can tune the
FRC frequency. User software can optionally specify a
factor (ranging from 1:2 to 1:256) by which the FRC
clock frequency is div ided. This factor is select ed using
the FRCDIV<2:0> (CLKDIV<10:8>) bits.
7.1.1.2Primary
The primary oscillator can use one of the following as
its clock source:
• XT (Crystal): Crystals and ceramic resonators in
the range of 3 MHz to 10 MHz. The crystal is
connected to the OSC1 and OSC2 pins.
• HS (High-Speed Crystal): Crystals in the range of
10 MHz to 40 MHz. The crystal is connected to
the OSC1 and OSC2 pins.
• EC (External Clock): The external clock signal is
directly ap plied to the OSC1 pin.
7.1.1.3Secondary
The secondary (LP) os cillator is design ed for low power
and uses a 32.768 kHz crystal or ceramic resonator.
The LP oscillator uses the SOSCI and SOSCO pins.
7.1.1.4Low-Power RC
The Low-Power RC (LPRC) internal oscIllator runs at a
nominal frequency of 32.768 kHz. It is also used as a
reference clock by the Watchdog Timer (WDT) and
Fail-Safe Clock Monitor (FSCM).
7.1.1.5FRC
The clock signals generated by the FRC and primary
oscillators can be optionally applied to an on-chip
Phase-Locked Loop (PLL) to provide a wide range of
output frequencies for device operation. PLL
configuration is described in Section 7.1.3 “PLLConfiguration”.
The FRC frequency depends on the FRC accuracy
(see Table 23-18) and the value of the FRC Oscillator
Tuning register (see Register7-4).
7.1.2SYSTEM CLOCK SELECTION
The oscillator source used at a device Power-on
Reset event is selected using Configuration bit
settings. The oscillator Configuration bit settings are
located in t he Configuration regi sters in the program
memory. (Refer to Section 20.1 “ConfigurationBits” for further details.) The Initial Oscillator
Selection Configuration bits, FNOSC<2:0>
(FOSCSEL<2:0>), and the Primary Oscillator Mode
Select Configuration bits, POSCMD<1:0>
(FOSC<1:0>), select the oscillator source that is used
at a Power-on Reset. The FRC primary oscillator is
the default (unprogrammed) selection.
The Configuration bit s allow users to ch oose among 12
different clock modes, shown in Table 7-1.
The output of the oscillator (or the output of the PLL if
a PLL mode has bee n select ed) F
generate the device instruction clock (F
defines the operating speed of the device, and speeds
up to 40 MHz are supported by the
dsPIC33FJ12MC201/202 architecture.
Instruction execution speed or device operating
frequency, F
CY , is given by:
OSC is divided by 2 to
CY). FCY
EQUATION 7-1:DEVICE OPERATING
FREQUENCY
7.1.3PLL CONFIGURATION
The primary oscillator and internal FRC oscillator can
optionally use an on-chip PLL to obtain higher speeds
of operation. The PLL provides significant flexibility in
selecting the device operating speed. A block diagram
of the PLL is shown in Figure 7-2.
The output of the p rimary osci llator or FR C, denote d as
IN’, is divided down by a prescale factor (N1) of 2, 3,
‘F
... or 33 before being provided to the PLL’s Voltage
Controlled Oscillator (VCO). The input to the VCO must
be selected in the range of 0.8 MHz to 8 MHz. The
prescale factor ‘N1’ is selected using the
PLLPRE<4:0> bits (CLKDIV<4:0>).
The PLL Feedback Divisor, selected using the
PLLDIV<8:0> bit s ( PLLFBD< 8: 0>), pro vid es a fa ctor ‘ M,’
by which the input to the VCO is multiplied. This factor
must be selected such that the resulting VCO output
frequency is i n t he ra nge of 100 MHz to 200 MHz.
The VCO output is fu rther di vided by a post scale f act or
‘N2.’ This factor is selected using the PLLPOST<1:0>
bits (CLKDIV<7:6>). ‘N2’ can be either 2, 4, or 8, and
must be selected such that the PLL output frequency
OSC) is in the range of 12.5 MHz to 80 MHz, which
(F
generates device operat ing speeds of 6.2 5 to 40 MIPS.
For a primary oscillator or FRC oscillator, output ‘F
the PLL output ‘F
Legend:y = Value set from Configuration bits on POR
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 15Unimplemented: Read as ‘0’
bit 14-12COSC<2:0>: Current Oscillator Selection bits (read-only)
000 = Fast RC oscillator (FRC)
001 = Fast RC oscillator (FRC) with PLL
010 = Primary oscillator (XT, HS, EC)
011 = Primary oscillator (XT, HS, EC) with PLL
100 = Secondary oscillator (SOSC)
101 = Low-Power RC oscillator (LPRC)
110 = Fast RC oscillator (FRC) with Divide-by-16
111 = Fast RC oscillator (FRC) with Divide-by-n
bit 11Unimplemented: Read as ‘0’
bit 10-8NOSC<2:0>: New Oscillator Selection bits
000 = Fast RC oscillator (FRC)
001 = Fast RC oscillator (FRC) with PLL
010 = Primary oscillator (XT, HS, EC)
011 = Primary oscillator (XT, HS, EC) with PLL
100 = Secondary oscillator (SOSC)
101 = Low-Power RC oscillator (LPRC)
110 = Fast RC oscillator (FRC) with Divide-by-16
111 = Fast RC oscillator (FRC) with Divide-by-n
bit 7CLKLOCK: Clock Lock Enable bit
If clock switching is enabled and FSCM is disabled, (FOSC<FCKSM> = 0b01)
1 = Clock switching is disabled, system clock source is locked
0 = Clock switching is enabled, system clock source can be modified by clock switching
bit 6IOLOCK: Peripher al Pin Select Lock bit
1 = Peripherial pin select is locked, write to peripheral pin select registers not allowed
0 = Peripherial pin select is not locked, write to peripheral pin select registers allowed
bit 5LOCK: PLL Lock St a tus bit (read-o nly)
1 = Indicates that PLL is in lock, or PLL start-up timer is satisfied
0 = Indicates that PLL is out of lock, start-up timer is in progress or PLL is disabled
bit 4Unimplemented: Read as ‘0’
bit 3CF: Clock Fail Detect bit (read/clear by applic ation)
1 = FSCM has detected clock failure
0 = FSCM has not detected clock failure
bit 2Unimplemented: Read as ‘0’
bit 1LPOSCEN: Secondary (LP) Oscillator Enable bit