电子工程世界电子工程世界电子工程世界

型号

产品描述

搜索

DSPIC30F2023-30I/ML

器件型号:DSPIC30F2023-30I/ML
器件类别:半导体    嵌入式处理器和控制器   
厂商名称:Microchip
厂商官网:https://www.microchip.com
标准:
下载文档

器件描述

Digital Signal Processors & Controllers - DSP, DSC 12KB 512bytes-RAM 30MIPS 35I/O

参数

产品属性属性值
Product AttributeAttribute Value
制造商:
Manufacturer:
Microchip
产品种类:
Product Category:
Digital Signal Processors & Controllers - DSP, DSC
RoHS:YES
安装风格:
Mounting Style:
SMD/SMT
封装 / 箱体:
Package / Case:
QFN EP-44
系列:
Series:
dsPIC30F2023
产品:
Product:
DSCs
Core:dsPIC30F
Maximum Clock Frequency:15 MHz
Program Memory Size:12 kB
Data RAM Size:512 B
工作电源电压:
Operating Supply Voltage:
3 V to 5.5 V
最小工作温度:
Minimum Operating Temperature:
- 40 C
最大工作温度:
Maximum Operating Temperature:
+ 85 C
封装:
Packaging:
Tube
高度:
Height:
0.88 mm
长度:
Length:
8 mm
Program Memory Type:Flash
宽度:
Width:
8 mm
商标:
Brand:
Microchip Technology
接口类型:
Interface Type:
I2C, SPI, UART
Number of I/Os:35 I/O
Data Bus Width:16 bit
Instruction Type:Fixed/Floating Point
Number of Timers/Counters:3 Timer
Processor Series:dsPIC30F
产品类型:
Product Type:
DSP - Digital Signal Processors & Controllers
工厂包装数量:
Factory Pack Quantity:
45
子类别:
Subcategory:
Embedded Processors & Controllers
电源电压-最小:
Supply Voltage - Min:
3 V
商标名:
Tradename:
dsPIC
单位重量:
Unit Weight:
0.007760 oz

DSPIC30F2023-30I/ML器件文档内容

                                                           dsPIC30F1010/202X

                   28/44-Pin dsPIC30F1010/202X Enhanced Flash

                              SMPS 16-Bit Digital Signal Controller

   Note: This data sheet summarizes features of this group         Peripheral Features:

   of dsPIC30F devices and is not intended to be a complete        •  High-current sink/source I/O pins: 25 mA/25 mA

   reference  source.     For  more  information  on  the  CPU,

   peripherals,    register   descriptions  and   general  device  •  Three 16-bit timers/counters; optionally pair up

   functionality,  refer  to  the  “dsPIC30F  Family  Reference       16-bit timers into 32-bit timer modules

   Manual” (DS70046). For more information on the device           •  One 16-bit Capture input functions

   instruction set and programming, refer to the “dsPIC30F/

   33F Programmer’s Reference Manual” (DS70157).                   •  Two 16-bit Compare/PWM output functions

                                                                      -  Dual Compare mode available

High-Performance Modified RISC CPU:                                •  3-wire SPI modules (supports 4 Frame modes)

•  Modified Harvard architecture                                   •  I2CTM module supports Multi-Master/Slave mode

•  C compiler optimized instruction set architecture                  and 7-bit/10-bit addressing

•  83 base instructions with flexible addressing                   •  UART Module:

   modes                                                              -  Supports RS-232, RS-485 and LIN 1.2

•  24-bit wide instructions, 16-bit wide data path                    -  Supports IrDA® with on-chip hardware endec

•  12 Kbytes on-chip Flash program space                              -  Auto wake-up on Start bit

•  512 bytes on-chip data RAM                                         -  Auto-Baud Detect

•  16 x 16-bit working register array                                 -  4-level FIFO buffer

•  Up to 30 MIPS operation:

   -  Dual Internal RC                                             Power Supply PWM Module Features:

      - 9.7 and 14.55 MHz (±1%) Industrial Temp                    •  Four PWM generators with 8 outputs

      - 6.4 and 9.7 MHz (±1%) Extended Temp                        •  Each PWM generator has independent time base

   -  32X PLL with 480 MHz VCO                                        and duty cycle

   -  PLL inputs ±3%                                               •  Duty cycle resolution of 1.1 ns at 30 MIPS

   -  External EC clock 6.0 to 14.55 MHz                           •  Individual dead time for each PWM generator:

   -  HS Crystal mode 6.0 to 14.55 MHz                                -  Dead-time resolution 4.2 ns at 30 MIPS

•  32 interrupt sources                                               -  Dead time for rising and falling edges

•  Three external interrupt sources                                •  Phase-shift resolution of 4.2 ns @ 30 MIPS

•  8 user-selectable priority levels for each interrupt            •  Frequency resolution of 8.4 ns @ 30 MIPS

•  4 processor exceptions and software traps                       •  PWM modes supported:

                                                                      -  Complementary

DSP Engine Features:                                                  -  Push-Pull

•  Modulo and Bit-Reversed modes                                      -  Multi-Phase

•  Two 40-bit wide accumulators with optional                         -  Variable Phase

   saturation logic                                                   -  Current Reset

•  17-bit x 17-bit single-cycle hardware fractional/                  -  Current-Limit

   integer multiplier                                              •  Independent Current-Limit and Fault Inputs

•  Single-cycle Multiply-Accumulate (MAC)                          •  Output Override Control

   operation                                                       •  Special Event Trigger

•  40-stage Barrel Shifter                                         •  PWM generated ADC Trigger

•  Dual data fetch

 2006-2014 Microchip Technology Inc.                                                                 DS70000178D-page 1
dsPIC30F1010/202X

Analog Features:                                                                                                  Special Microcontroller Features:

ADC                                                                                                               •  Enhanced Flash program memory:

•  10-bit resolution                                                                                                 -     10,000 erase/write cycle (min.) for

•  2000 Ksps conversion rate                                                                                               industrial temperature range, 100k (typical)

•  Up to 12 input channels                                                                                        •  Self-reprogrammable under software control

•  “Conversion pairing” allows simultaneous conver-                                                               •  Power-on Reset (POR), Power-up Timer (PWRT)

   sion of two inputs (i.e., current and voltage) with a                                                             and Oscillator Start-up Timer (OST)

   single trigger                                                                                                 •  Flexible Watchdog Timer (WDT) with on-chip low

•  PWM control loop:                                                                                                 power RC oscillator for reliable operation

   -  Up to six conversion pairs available                                                                        •  Fail-Safe clock monitor operation

   -  Each conversion pair has up to four PWM                                                                     •  Detects clock failure and switches to on-chip low

      and seven other selectable trigger sources                                                                     power RC oscillator

•  Interrupt hardware supports up to 1M interrupts                                                                •  Programmable code protection

   per second                                                                                                     •  In-Circuit Serial Programming™ (ICSP™)

COMPARATOR                                                                                                        •  Selectable Power Management modes

•  Four Analog Comparators:                                                                                          -     Sleep, Idle and Alternate Clock modes

   -  20 ns response time                                                                                         CMOS Technology:

   -  10-bit DAC reference generator

   -  Programmable output polarity                                                                                •  Low-power, high-speed Flash technology

   -  Selectable input source                                                                                     •  3.3V and 5.0V operation (±10%)

   -  ADC sample and convert capable                                                                              •  Industrial and Extended temperature ranges

•  PWM module interface                                                                                           •  Low power consumption

   -  PWM Duty Cycle Control

   -  PWM Period Control

   -  PWM Fault Detect

•  Special Event Trigger

•  PWM-generated ADC Trigger

dsPIC30F SWITCH MODE POWER SUPPLY FAMILY

      Product         Pins     Packaging  Program  Memory  (Bytes)  Data SRAM  (Bytes)  Timers  Capture  Compare     UART  SPI  I2C™  PWM  ADCs  S&H    A/D     Inputs  Analog  Comparators  GPIO

   dsPIC30F1010       28    SDIP          6K                        256                 2       0        1           1     1    1     2x2  1     3      6 ch            2                    21

   dsPIC30F1010       28    SOIC          6K                        256                 2       0        1           1     1    1     2x2  1     3      6 ch            2                    21

   dsPIC30F1010       28    QFN-S         6K                        256                 2       0        1           1     1    1     2x2  1     3      6 ch            2                    21

   dsPIC30F2020       28    SDIP          12K                       512                 3       1        2           1     1    1     4x2  1     5      8 ch            4                    21

   dsPIC30F2020       28    SOIC          12K                       512                 3       1        2           1     1    1     4x2  1     5      8 ch            4                    21

   dsPIC30F2020       28    QFN-S         12K                       512                 3       1        2           1     1    1     4x2  1     5      8 ch            4                    21

   dsPIC30F2023       44    QFN           12K                       512                 3       1        2           1     1    1     4x2  1     5      12 ch           4                    35

   dsPIC30F2023       44    TQFP          12K                       512                 3       1        2           1     1    1     4x2  1     5      12 ch           4                    35

DS70000178D-page 2                                                                                                                     2006-2014 Microchip             Technology Inc.
                                                                                                                                                                                                                                             dsPIC30F1010/202X

Pin Diagrams

28-Pin SDIP and SOIC

                                       MCLR     1                                                                                                                                         28                                                 AVDD

              AN0/CMP1A/CN2/RB0                 2                                                                                                                                         27                                                 AVSS

              AN1/CMP1B/CN3/RB1                 3                                                                                                                                         26                                                 PWM1L/RE0

              AN2/CMP1C/CMP2A/CN4/RB2           4                                                                         dsPIC30F1010                                                    25                                                 PWM1H/RE1

              AN3/CMP1D/CMP2B/CN5/RB3           5                                                                                                                                         24                                                 PWM2L/RE2

              AN4/CMP2C/CN6/RB4                 6                                                                                                                                         23                                                 PWM2H/RE3

              AN5/CMP2D/CN7/RB5                 7                                                                                                                                         22                                                 RE4

                                       VSS      8                                                                                                                                         21                                                 RE5

                      OSC1/CLKI/RB6             9                                                                                                                                         20                                                 VDD

                      OSC2/CLKO/RB7             10                                                                                                                                        19                                                 VSS

PGD1/EMUD1/T2CK/U1ATX/CN1/RE7                   11                                                                                                                                        18                                                 PGC/EMUC/SDI1/SDA/U1RX/RF7

PGC1/EMUC1/EXTREF/T1CK/U1ARX/CN0/RE6            12                                                                                                                                        17                                                 PGD/EMUD/SDO1/SCL/U1TX/RF8

                                       VDD      13                                                                                                                                        16                                                 SFLT2/INT0/OCFLTA/RA9

PGD2/EMUD2/SCK1/SFLT3/INT2/RF6                  14                                                                                                                                        15                                                 PGC2/EMUC2/OC1/SFLT1/INT1/RD0

28-Pin QFN-S

                                                AN1/CMP1B/CN3/RB1              AN0/CMP1A/CN2/RB0                     MCLR  AVDD                            AVSS                           PWM1L/RE0              PWM1H/RE1

                                                28 27 26 25 24 23 22

              AN2/CMP1C/CMP2A/CN4/RB2        1                                                                                                                                                                                               21  PWM2L/RE2

              AN3/CMP1D/CMP2B/CN5/RB3        2                                                                                                                                                                                               20  PWM2H/RE3

              AN4/CMP2C/CN6/RB4              3                                                                                                                                                                                               19  RE4

              AN5/CMP2D/CN7/RB5              4  dsPIC30F1010                                                                                                                                                                                 18  RE5

                                       VSS   5                                                                                                                                                                                               17  VDD

              OSC1/CLKI/RB6                  6                                                                                                                                                                                               16  VSS

              OSC2/CLKO/RB7                  7                                                                                                                                                                                               15  PGC/EMUC/SDI1/SDA/U1RX/RF7

                                                8                              9 10 11 12 13 14

                                                PGD1/EMUD1/T2CK/U1ATX/CN1/RE7  PGC1/EMUC1/EXTREF/T1CK/U1ARX/CN0/RE6  VDD   PGD2/EMUD2/SCK1/SFLT3/INT2/RF6  PGC2/EMUC2/OC1/SFLT1/INT1/RD0  SFLT2/INT0/OCFLTA/RA9  PGD/EMUD/SDO1/SCL/U1TX/RF8

 2006-2014 Microchip Technology Inc.                                                                                                                                                                                                                               DS70000178D-page 3
dsPIC30F1010/202X

Pin Diagrams

28-Pin SDIP and SOIC

                                             MCLR                                       1                                                                                                                                                                           28  AVDD

                    AN0/CMP1A/CN2/RB0                                                   2                                                                                                                                                                           27  AVSS

                    AN1/CMP1B/CN3/RB1                                                   3                                                                                                                                                                           26  PWM1L/RE0

                    AN2/CMP1C/CMP2A/CN4/RB2                                             4                                                                                     dsPIC30F2020                                                                          25  PWM1H/RE1

                    AN3/CMP1D/CMP2B/CN5/RB3                                             5                                                                                                                                                                           24  PWM2L/RE2

                    AN4/CMP2C/CMP3A/CN6/RB4                                             6                                                                                                                                                                           23  PWM2H/RE3

                    AN5/CMP2D/CMP3B/CN7/RB5                                             7                                                                                                                                                                           22  PWM3L/RE4

                                             VSS                                        8                                                                                                                                                                           21  PWM3H/RE5

                    AN6/CMP3C/CMP4A/OSC1/CLKI/RB6                                       9                                                                                                                                                                           20  VDD

                    AN7/CMP3D/CMP4B/OSC2/CLKO/RB7                                       10                                                                                                                                                                          19  VSS

PGD1/EMUD1/PWM4H/T2CK/U1ATX/CN1/RE7                                                     11                                                                                                                                                                          18  PGC/EMUC/SDI1/SDA/U1RX/RF7

PGC1/EMUC1/EXTREF/PWM4L/T1CK/U1ARX/CN0/RE6                                              12                                                                                                                                                                          17  PGD/EMUD/SDO1/SCL/U1TX/RF8

                                             VDD                                        13                                                                                                                                                                          16  SFLT2/INT0/OCFLTA/RA9

PGD2/EMUD2/SCK1/SFLT3/OC2/INT2/RF6                                                      14                                                                                                                                                                          15  PGC2/EMUC2/OC1/SFLT1/IC1/INT1/RD0

28-Pin QFN-S                                       AN1/CMP1B/CN3/RB1                    AN0/CMP1A/CN2/RB0

                                                                                                                                    MCLR  AVDD                                AVSS                               PWM1L/RE0              PWM1H/RE1

                                                   28 27 26 25 24 23 22

                    AN2/CMP1C/CMP2A/CN4/RB2  1                                                                                                                                                                                                                      21  PWM2L/RE2

                    AN3/CMP1D/CMP2B/CN5/RB3  2                                                                                                                                                                                                                      20  PWM2H/RE3

                    AN4/CMP2C/CMP3A/CN6/RB4  3                                                                                                                                                                                                                      19  PWM3L/RE4

                    AN5/CMP2D/CMP3B/CN7/RB5  4     dsPIC30F2020                                                                                                                                                                                                     18  PWM3H/RE5

                      VSS                    5                                                                                                                                                                                                                      17  VDD

AN6/CMP3C/CMP4A/OSC1/CLKI/RB6                6                                                                                                                                                                                                                      16  VSS

AN7/CMP3D/CMP4B/OSC2/CLKO/RB7                7                                                                                                                                                                                                                      15  PGC/EMUC/SDI1/SDA/U1RX/RF7

                                                   8                                    9 10 11 12 13 14

                                                   PGD1/EMUD1/PWM4H/T2CK/U1ATX/CN1/RE7  PGC1/EMUC1/EXTREF/PWM4L/T1CK/U1ARX/CN0/RE6  VDD   PGD2/EMUD2/SCK1/SFLT3/OC2/INT2/RF6  PGC2/EMUC2/OC1/SFLT1/IC1/INT1/RD0  SFLT2/INT0/OCFLTA/RA9  PGD/EMUD/SDO1/SCL/U1TX/RF8

DS70000178D-page 4                                                                                                                                                                                                                                                             2006-2014 Microchip Technology Inc.
                                                                                                                                                                                                       dsPIC30F1010/202X

Pin  Diagrams

     44-PIN QFN                                                                                                                                                                                        PGC1/EMUC1/PWM4L/T1CK/U1ARX/CN0/RE6  PGD1/EMUD1/PWM4H/T2CK/U1ATX/CN1/RE7

                                                PGD/EMUD/SDO1/RF8  SFLT2/INT0/OCFLTA/RA9  PGC2/EMUC2/OC1/IC1/INT1/RD0  PGD2/EMUD2/SCK1/INT2/RF6  VDD   VSS   OC2/RD1  SFLT1/RA8  AN9/EXTREF/CMP4D/RB9

                                                44 43 42 41 40 39 38 37 36 35 34

                 PGC/EMUC/SDI1/RF7          1                                                                                                                                                                                                                                    33  AN7/CMP3D/CMP4B/OSC2/CLKO/RB7

                 SYNCO/SS1/RF15             2                                                                                                                                                                                                                                    32  AN6/CMP3C/CMP4A/OSC1/CLKI/RB6

                 SFLT3/RA10                 3                                                                                                                                                                                                                                    31  AN8/CMP4C/RB8

                 SFLT4/RA11                 4                                                                                                                                                                                                                                    30  VSS

                 SDA/RG3                    5                                             dsPIC30F2023                                                                                                                                                                           29  VDD

                                       VSS  6                                                                                                                                                                                                                                    28  AN10/IFLT4/RB10

                                       VDD  7                                                                                                                                                                                                                                    27  AN11/IFLT2/RB11

                 PWM3H/RE5                  8                                                                                                                                                                                                                                    26  AN5/CMP2D/CMP3B/CN7/RB5

                 PWM3L/RE4                  9                                                                                                                                                                                                                                    25  AN4/CMP2C/CMP3A/CN6/RB4

                 PWM2H/RE3                  10                                                                                                                                                                                                                                   24  AN3/CMP1D/CMP2B/CN5/RB3

                 PWM2L/RE2                  11                                                                                                                                                                                                                                   23  AN2/CMP1C/CMP2A/CN4/RB2

                                                12 13 14 15 16 17 18 19 20 21 22

                                                PWM1H/RE1          PWM1L/RE0              SYNCI/RF14                   U1RX/RF2                  AVSS  AVDD  MCLR     SCL/ RG2   U1TX/RF3              AN0/CMP1A/CN2/RB0                    AN1/CMP1B/CN3/RB1

 2006-2014 Microchip Technology Inc.                                                                                                                                                                                                                                                                 DS70000178D-page 5
dsPIC30F1010/202X

Pin Diagrams

44-Pin TQFP                                                                          PGC2/EMUC2/OC1/IC1/INT1/RD0  PGD2/EMUD2/SCK1/INT2/RF6                                                        PGC1/EMUC1/PWM4L/T1CK/U1ARX/CN0/RE6  PGD1/EMUD1/PWM4H/T2CK/U1ATX/CN1/RE7

                                           PGD/EMUD/SDO1/RF8  SFLT2/INT0/OCFLTA/RA9                                                         VDD   VSS   OC2/RD1  SFLT1/RA8  AN9/EXTREF/CMP4D/RB9

                                           44                 43                     42                           41                        40    39    38       37         36                    35                                   34                                       AN7/CMP3D/CMP4B/OSC2/CLKO/RB7

                    PGC/EMUC/SDI1/RF7  1                                                                                                                                                                                                                                    33

                    SYNCO/SS1/RF15     2                                                                                                                                                                                                                                    32  AN6/CMP3C/CMP4A/OSC1/CLKI/RB6

                    SFLT3/RA10         3                                                                                                                                                                                                                                    31  AN8/CMP4C/RB8

                    SFLT4/RA11         4                                                                                                                                                                                                                                    30  VSS

                    SDA/RG3            5                      dsPIC30F2023                                                                                                                                                                                                  29  VDD

                    VSS                6                                                                                                                                                                                                                                    28  AN10/IFLT4/RB10

                    VDD                7                                                                                                                                                                                                                                    27  AN11/IFLT2/RB11

                    PWM3H/RE5          8                                                                                                                                                                                                                                    26  AN5/CMP2D/CMP3B/CN7/RB5

                    PWM3L/RE4          9                                                                                                                                                                                                                                    25  AN4/CMP2C/CMP3A/CN6/RB4

                    PWM2H/RE3          10                                                                                                                                                                                                                                   24  AN3/CMP1D/CMP2B/CN5/RB3

                    PWM2L/RE2          11                                                                                                                                                                                                                                   23  AN2/CMP1C/CMP2A/CN4/RB2

                                          12                  13                     14                           15                        16    17    18       19         20                    21                                   22

                                          PWM1H/RE1           PWM1L/RE0              SYNCI/RF14                   U1RX/RF2                  AVSS  AVDD  MCLR     SCL/RG2    U1TX/RF3              AN0/CMP1A/CN2/RB0                    AN1/CMP1B/CN3/RB1

DS70000178D-page 6                                                                                                                                                                                                                                                                    2006-2014 Microchip Technology Inc.
                                       dsPIC30F1010/202X

Table of Contents

1.0   Device Overview .......................................................................................................................................................................... 9

2.0   CPU Architecture Overview........................................................................................................................................................ 19

3.0   Memory Organization ................................................................................................................................................................. 29

4.0   Address Generator Units............................................................................................................................................................ 41

5.0   Interrupts .................................................................................................................................................................................... 47

6.0   I/O Ports ..................................................................................................................................................................................... 77

7.0   Flash Program Memory.............................................................................................................................................................. 81

8.0   Timer1 Module ........................................................................................................................................................................... 87

9.0   Timer2/3 Module ........................................................................................................................................................................ 91

10.0  Input Capture Module................................................................................................................................................................. 97

11.0  Output Compare Module .......................................................................................................................................................... 101

12.0  Power Supply PWM ................................................................................................................................................................. 107

13.0  Serial Peripheral Interface (SPI)............................................................................................................................................... 145

14.0  I2C™ Module ........................................................................................................................................................................... 153

15.0  Universal Asynchronous Receiver Transmitter (UART) Module .............................................................................................. 161

16.0  10-bit 2 Msps Analog-to-Digital Converter (ADC) Module........................................................................................................ 169

17.0  SMPS Comparator Module ...................................................................................................................................................... 191

18.0  System Integration ................................................................................................................................................................... 197

19.0  Instruction Set Summary .......................................................................................................................................................... 219

20.0  Development Support............................................................................................................................................................... 227

21.0  Electrical Characteristics .......................................................................................................................................................... 231

22.0  Package Marking Information................................................................................................................................................... 267

Appendix A: Revision History............................................................................................................................................................. 275

Index ................................................................................................................................................................................................. 277

 2006-2014 Microchip Technology Inc.  DS70000178D-page 7
dsPIC30F1010/202X

                              TO OUR VALUED CUSTOMERS

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 comments regarding this publication, please contact the Marketing Communications Department via

E-mail at docerrors@microchip.com. 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., DS30000000A is version A of document DS30000000).

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.

DS70000178D-page 8                                             2006-2014 Microchip Technology Inc.
                                                                dsPIC30F1010/202X

1.0  DEVICE OVERVIEW                                            This document contains device specific information for

                                                                the dsPIC30F1010/202X SMPS devices. These devices

Note: This data sheet summarizes features of this group         contain extensive Digital Signal Processor (DSP) func-

of dsPIC30F devices and is not intended to be a complete        tionality within a high-performance 16-bit microcontroller

reference  source.     For  more  information  on  the  CPU,    (MCU) architecture, as reflected in the following block

peripherals,    register   descriptions  and   general  device  diagrams.  Figure 1-1  and  Table 1-1  describe   the

functionality,  refer  to  the  “dsPIC30F  Family  Reference

Manual” (DS70046). For more information on the device           dsPIC30F1010 SMPS device, Figure 1-2 and Table 1-2

instruction set and programming, refer to the “dsPIC30F/        describe the dsPIC30F2020 device and Figure 1-3 and

33F Programmer’s Reference Manual” (DS70157).                   Table 1-3 describe the dsPIC30F2023 SMPS device.

 2006-2014 Microchip Technology Inc.                                                       DS70000178D-page 9
dsPIC30F1010/202X

FIGURE 1-1:                     dsPIC30F1010 BLOCK DIAGRAM

                                         Y  Data  Bus

                                                                                      X Data Bus

                                                                   16      16       16        16     16

Interrupt                   PSV & Table                                Data Latch       Data Latch

Controller                  Data Access                                 Y Data              X Data

                   24    Control Block      8           16              RAM                 RAM                 SFLT2/INT0/OCFLTA/RA9

                                                                       (256 bytes)      (256 bytes)

                                                                        Address         Address

           24                                                           Latch               Latch        PORTA

                                                                            16      16          16

                   24                                                  Y AGU        X RAGU

                                        PCU      PCH     PCL                        X WAGU                      AN0/CMP1A/CN2/RB0

                                        Program Counter                                                         AN1/CMP1B/CN3/RB1

Address Latch                           Stack         Loop                                                      AN2/CMP1C/CMP2A/CN4/RB2
                                                     Control
                                        Control                                                                 AN3/CMP1D/CMP2B/CN5/RB3
                                        Logic
                                                      Logic

Program Memory                                                                                                  AN4/CMP2C/CN6/RB4

(12 Kbytes)                                                                                                     AN5/CMP2D/CN7/RB5

                                                                                                                OSC1/CLKI/RB6

                                                                        Effective Address                       OSC2/CLKO/RB7

Data Latch                      16

                                               ROM Latch                          16                     PORTB

                            24

                                                 IR

                   16                                                                         16

                                                                                16 x 16

                                                         Decode             W Reg Array

                   Instruction                                          16    16

                   Decode &

                   Control

Control Signals                                                    DSP                  Divide

to Various Blocks                       Power-up               Engine                   Unit

                                         Timer

OSC1/CLK1        Timing                  Oscillator                                                             PGC2/EMUC2/OC1/SFLT1/

            Generation                  Start-up Timer                                                          INT1/RD0

                                         POR                                    ALU<16>                  PORTD

                                         Reset

                   MCLR                 Watchdog               16                       16

                                         Timer

Comparator                                                         Output

           Module           10-bit ADC                             Compare                  I2C™                PWM1L/RE0

                                                                   Module                                       PWM1H/RE1

                                                                                                                PWM2L/RE2

                                                                                                                PWM2H/RE3

                                                                                                                RE4

                                                                                                                RE5

                                                  Input                                                         PGC1/EMUC1/EXTREF/T1CK/

           SPI1                 Timers           Change            SMPS                 UART1                   U1ARX/CN0/RE6

                                                 Notification      PWM                                          PGD1/EMUD1/T2CK/U1ATX/

                                                                                                                CN1/RE7

                                                                                                         PORTE

                                                                                                                PGD2/EMUD2/SCK1/SFLT3/

                                                                                                                INT2/RF6

                                                                                                                PGC/EMUC/SDI1/SDA/U1RX/RF7

                                                                                                                PGD/EMUD/SD01/SCL/U1TX/RF8

                                                                                                         PORTF

DS70000178D-page 10                                                                                            2006-2014 Microchip Technology Inc.
                                                                  dsPIC30F1010/202X

Table 1-1 provides a brief description of device I/O pin-

outs for the dsPIC30F1010 and the functions that may

be multiplexed to a port pin. Multiple functions may

exist on one port pin. When multiplexing occurs, the

peripheral module’s functional requirements may force

an override of the data direction of the port pin.

TABLE 1-1:     PINOUT  I/O DESCRIPTIONS FOR dsPIC30F1010

Pin Name       Pin     Buffer                                              Description

               Type    Type

AN0-AN5        I       Analog          Analog input channels.

AVDD           P              P        Positive supply for analog module.

AVSS           P              P        Ground reference for analog module.

CLKI           I       ST/CMOS         External clock source input. Always associated with OSC1 pin function.

CLKO           O              —        Oscillator crystal output. Connects to crystal or resonator in Crystal

                                       Oscillator mode. Optionally functions as CLKO in RC and EC modes. Always

                                       associated with OSC2 pin function.

EMUD           I/O     ST              ICD Primary Communication Channel data input/output pin.

EMUC           I/O     ST              ICD Primary Communication Channel clock input/output pin.

EMUD1          I/O     ST              ICD Secondary Communication Channel data input/output pin.

EMUC1          I/O     ST              ICD Secondary Communication Channel clock input/output pin.

EMUD2          I/O     ST              ICD Tertiary Communication Channel data input/output pin.

EMUC2          I/O     ST              ICD Tertiary Communication Channel clock input/output pin.

INT0           I       ST              External interrupt 0

INT1           I       ST              External interrupt 1

INT2           I       ST              External interrupt 2

SFLT1          I       ST              Shared Fault Pin 1

SFLT2          I       ST              Shared Fault Pin 2

SFLT3          I       ST              Shared Fault Pin 3

PWM1L          O              —        PWM 1 Low output

PWM1H          O              —        PWM 1 High output

PWM2L          O              —        PWM 2 Low output

PWM2H          O              —        PWM 2 High output

MCLR           I/P     ST              Master Clear (Reset) input or programming voltage input. This pin is an

                                       active low Reset to the device.

OC1            O              —        Compare outputs.

OCFLTA         I       ST              Output Compare Fault Pin

OSC1           I       CMOS            Oscillator crystal input.

OSC2           I/O            —        Oscillator crystal output. Connects to crystal or resonator in Crystal Oscillator

                                       mode. Optionally functions as CLKO in FRC and EC modes.

PGD            I/O     ST              In-Circuit Serial Programming™ data input/output pin.

PGC            I       ST              In-Circuit Serial Programming clock input pin.

PGD1           I/O     ST              In-Circuit Serial Programming data input/output pin 1.

PGC1           I       ST              In-Circuit Serial Programming clock input pin 1.

PGD2           I/0     ST              In-Circuit Serial Programming data input/output pin 2.

PGC2           I       ST              In-Circuit Serial Programming clock input pin 2.

RB0-RB7        I/O     ST              PORTB is a bidirectional I/O port.

RA9            I/O     ST              PORTA is a bidirectional I/O port.

RD0            I/O     ST              PORTD is a bidirectional I/O port.

Legend:  CMOS  =       CMOS compatible input or output                     Analog       =  Analog input

         ST    =       Schmitt Trigger input with CMOS levels              O            =  Output

         I     =       Input                                               P            =  Power

 2006-2014 Microchip Technology Inc.                                                             DS70000178D-page 11
dsPIC30F1010/202X

TABLE 1-1:       PINOUT I/O DESCRIPTIONS FOR dsPIC30F1010 (CONTINUED)

Pin Name             Pin  Buffer                                        Description

                 Type     Type

RE0-RE7              I/O  ST        PORTE is a bidirectional I/O port.

RF6, RF7,  RF8       I/O  ST        PORTF is a bidirectional I/O port.

SCK1                 I/O  ST        Synchronous serial clock input/output for SPI #1.

SDI1                 I    ST        SPI #1 Data In.

SDO1                 O           —  SPI #1 Data Out.

SCL                  I/O  ST        Synchronous serial clock input/output for I2C™.

SDA                  I/O  ST        Synchronous serial data input/output for I2C.

T1CK                 I    ST        Timer1 external clock input.

T2CK                 I    ST        Timer2 external clock input.

U1RX                 I    ST        UART1 Receive.

U1TX                 O           —  UART1 Transmit.

U1ARX                I    ST        Alternate UART1 Receive.

U1ATX                O           —  Alternate UART1 Transmit.

CMP1A                I    Analog    Comparator 1 Channel A

CMP1B                I    Analog    Comparator 1 Channel B

CMP1C                I    Analog    Comparator 1 Channel C

CMP1D                I    Analog    Comparator 1 Channel D

CMP2A                I    Analog    Comparator 2 Channel A

CMP2B                I    Analog    Comparator 2 Channel B

CMP2C                I    Analog    Comparator 2 Channel C

CMP2D                I    Analog    Comparator 2 Channel D

CN0-CN7              I    ST        Input Change notification inputs

                                    Can be software programmed for internal weak pull-ups on all inputs.

VDD                  P           —  Positive supply for logic and I/O pins.

VSS                  P           —  Ground reference for logic and I/O pins.

EXTREF               I    Analog    External reference to Comparator DAC

Legend:    CMOS      =    CMOS compatible input or output               Analog       =  Analog input

           ST        =    Schmitt Trigger input with CMOS levels        O            =  Output

           I         =    Input                                         P            =  Power

DS70000178D-page 12                                                            2006-2014 Microchip Technology  Inc.
                                                                                                dsPIC30F1010/202X

FIGURE 1-2:                     dsPIC30F2020 BLOCK DIAGRAM

                                         Y Data Bus

                                                                                      X Data Bus

                                                                   16      16       16        16     16

Interrupt                   PSV & Table                                Data Latch       Data Latch

Controller                  Data Access                                 Y Data              X Data

                   24 Control Block      8              16              RAM                 RAM                 SFLT2/INT0/OCFLTA/RA9

                                                                       (256 bytes)      (256 bytes)

                                                                        Address         Address

           24                                                           Latch               Latch        PORTA

                                                                            16      16          16

                   24                                                  Y AGU        X RAGU

                                        PCU      PCH    PCL                         X WAGU                      AN0/CMP1A/CN2/RB0

                                        Program Counter                                                         AN1/CMP1B/CN3/RB1

Address Latch                           Stack         Loop                                                      AN2/CMP1C/CMP2A/CN4/RB2
                                                     Control
                                        Control                                                                 AN3/CMP1D/CMP2B/CN5/RB3
                                        Logic
                                                      Logic

Program Memory                                                                                                  AN4/CMP2C/CMP3A/CN6/RB4

(12 Kbytes)                                                                                                     AN5/CMP2D/CMP3B/CN7/RB5

                                                                                                                AN6/CMP3C/CMP4A/

                                                                        Effective Address                       OSC1/CLKI/RB6

Data Latch                      16                                                                              AN7/CMP3D/CMP4B/

                                                                                                                OSC2/CLKO/RB7

                                               ROM Latch                          16                     PORTB

                            24

                                                 IR

                   16                                                                         16

                                                                                16 x 16

                                                        Decode              W Reg Array

                   Instruction                                          16    16

                   Decode &

                   Control

Control Signals                                                    DSP                  Divide

to Various Blocks                       Power-up               Engine                   Unit

                                         Timer

OSC1/CLK1        Timing                  Oscillator                                                             PGC2/EMUC2/OC1/SFLT1/IC1/

            Generation                  Start-up Timer                                                          INT1/RD0

                                         POR                                    ALU<16>                  PORTD

                                         Reset

                   MCLR                 Watchdog               16                       16

                                         Timer

Comparator                                       Input             Output

           Module           10-bit ADC           Capture           Compare                  I2C™                PWM1L/RE0

                                                 Module            Module                                       PWM1H/RE1

                                                                                                                PWM2L/RE2

                                                                                                                PWM2H/RE3

                                                                                                                PWM3L/RE4

                                                                                                                PWM3H/RE5

                                                 Input             SMPS                                         PGC1/EMUC1/EXTREF/PWM4L/

           SPI1                 Timers           Change                                 UART1                   T1CK/ U1ARX/CN0/RE6

                                                 Notification      PWM                                          PGD1/EMUD1/PWM4H/T2CK/

                                                                                                                U1ATX/CN1/RE7

                                                                                                         PORTE

                                                                                                                PGD2/EMUD2/SCK1/SFLT3/OC2/

                                                                                                                INT2/RF6

                                                                                                                PGC/EMUC/SDI1/SDA/U1RX/RF7

                                                                                                                PGD/EMUD/SD01/SCL/U1TX/RF8

                                                                                                         PORTF

 2006-2014 Microchip Technology Inc.                                                                           DS70000178D-page 13
dsPIC30F1010/202X

Table 1-2 provides a brief description of device I/O pin-

outs for the dsPIC30F2020 and the functions that may

be multiplexed to a port pin. Multiple functions may

exist on one port pin. When multiplexing occurs, the

peripheral module’s functional requirements may force

an override of the data direction of the port pin.

TABLE 1-2:     PINOUT I/O DESCRIPTIONS FOR dsPIC30F2020

Pin Name             Pin  Buffer                                      Description

               Type       Type

AN0-AN7              I    Analog     Analog input channels.

AVDD                 P           P   Positive supply for analog module.

AVSS                 P           P   Ground reference for analog module.

CLKI                 I    ST/CMOS    External clock source input. Always associated with OSC1 pin function.

CLKO                 O           —   Oscillator crystal output. Connects to crystal or resonator in Crystal

                                     Oscillator mode. Optionally functions as CLKO in RC and EC modes. Always

                                     associated with OSC2 pin function.

EMUD                 I/O         ST  ICD Primary Communication Channel data input/output pin.

EMUC                 I/O         ST  ICD Primary Communication Channel clock input/output pin.

EMUD1                I/O         ST  ICD Secondary Communication Channel data input/output pin.

EMUC1                I/O         ST  ICD Secondary Communication Channel clock input/output pin.

EMUD2                I/O         ST  ICD Tertiary Communication Channel data input/output pin.

EMUC2                I/O         ST  ICD Tertiary Communication Channel clock input/output pin.

IC1                  I           ST  Capture input.

INT0                 I           ST  External interrupt 0

INT1                 I           ST  External interrupt 1

INT2                 I           ST  External interrupt 2

SFLT1                I           ST  Shared Fault Pin 1

SFLT2                I           ST  Shared Fault Pin 2

SFLT3                I           ST  Shared Fault Pin 3

PWM1L                O           —   PWM 1 Low output

PWM1H                O           —   PWM 1 High output

PWM2L                O           —   PWM 2 Low output

PWM2H                O           —   PWM 2 High output

PWM3L                O           —   PWM 3 Low output

PWM3H                O           —   PWM 3 High output

PWM4L                O           —   PWM 4 Low output

PWM4H                O           —   PWM 4 High output

MCLR                 I/P         ST  Master Clear (Reset) input or programming voltage input. This pin is an

                                     active low Reset to the device.

OC1-OC2              O           —   Compare outputs.

OCFLTA               I               Output Compare Fault pin

OSC1                 I    CMOS       Oscillator crystal input.

OSC2                 I/O         —   Oscillator crystal output. Connects to crystal or resonator in Crystal Oscillator

                                     mode. Optionally functions as CLKO in FRC and EC modes.

PGD                  I/O         ST  In-Circuit Serial Programming™ data input/output pin.

PGC                  I           ST  In-Circuit Serial Programming clock input pin.

PGD1                 I/O         ST  In-Circuit Serial Programming data input/output pin 1.

PGC1                 I           ST  In-Circuit Serial Programming clock input pin 1.

PGD2                 I/O         ST  In-Circuit Serial Programming data input/output pin 2.

PGC2                 I           ST  In-Circuit Serial Programming clock input pin 2.

Legend:  CMOS        =    CMOS compatible input or output                 Analog       =     Analog input

         ST          =    Schmitt Trigger input with CMOS levels          O            =     Output

         I           =    Input                                           P            =     Power

DS70000178D-page 14                                                           2006-2014 Microchip Technology Inc.
                                                                  dsPIC30F1010/202X

TABLE 1-2:       PINOUT I/O DESCRIPTIONS FOR dsPIC30F2020 (CONTINUED)

Pin Name         Pin   Buffer                                              Description

                 Type  Type

RB0-RB7          I/O          ST       PORTB is a bidirectional I/O port.

RA9              I/O          ST       PORTA is a bidirectional I/O port.

RD0              I/O          ST       PORTD is a bidirectional I/O port.

RE0-RE7          I/O          ST       PORTE is a bidirectional I/O port.

RF6, RF7,  RF8   I/O          ST       PORTF is a bidirectional I/O port.

SCK1             I/O          ST       Synchronous serial clock input/output for SPI #1.

SDI1             I            ST       SPI #1 Data In.

SDO1             O            —        SPI #1 Data Out.

SCL              I/O          ST       Synchronous serial clock input/output for I2C™.

SDA              I/O          ST       Synchronous serial data input/output for I2C.

T1CK             I            ST       Timer1 external clock input.

T2CK             I            ST       Timer2 external clock input.

U1RX             I            ST       UART1 Receive.

U1TX             O            —        UART1 Transmit.

U1ARX            I            ST       Alternate UART1 Receive.

U1ATX            O            O        Alternate UART1 Transmit.

CMP1A            I     Analog          Comparator  1  Channel  A

CMP1B            I     Analog          Comparator  1  Channel  B

CMP1C            I     Analog          Comparator  1  Channel  C

CMP1D            I     Analog          Comparator  1  Channel  D

CMP2A            I     Analog          Comparator  2  Channel  A

CMP2B            I     Analog          Comparator  2  Channel  B

CMP2C            I     Analog          Comparator  2  Channel  C

CMP2D            I     Analog          Comparator  2  Channel  D

CMP3A            I     Analog          Comparator  3  Channel  A

CMP3B            I     Analog          Comparator  3  Channel  B

CMP3C            I     Analog          Comparator  3  Channel  C

CMP3D            I     Analog          Comparator  3  Channel  D

CMP4A            I     Analog          Comparator  4  Channel  A

CMP4B            I     Analog          Comparator  4  Channel  B

CN0-CN7          I            ST       Input Change notification inputs

                                       Can be software programmed for internal weak pull-ups on all inputs.

VDD              P            —        Positive supply for logic and I/O pins.

VSS              P            —        Ground reference for logic and I/O pins.

EXTREF           I     Analog          External reference to Comparator DAC

Legend:    CMOS  =     CMOS compatible input or output                           Analog   =  Analog input

           ST    =     Schmitt Trigger input with CMOS levels                    O        =  Output

           I     =     Input                                                     P        =  Power

 2006-2014 Microchip Technology Inc.                                                        DS70000178D-page 15
dsPIC30F1010/202X

FIGURE 1-3:                     dsPIC30F2023 BLOCK DIAGRAM

                                         Y Data Bus

                                                                                      X Data Bus

                                                                   16      16       16        16     16

Interrupt                   PSV & Table                                Data Latch       Data Latch

Controller                  Data Access                                 Y Data              X Data

                   24 Control Block      8              16              RAM                 RAM                 SFLT1/RA8

                                                                       (256 bytes)      (256 bytes)             SFLT2/INT0/OCFLTA/RA9

                                                                        Address         Address                 SFLT3/RA10

           24                                                           Latch               Latch               SFLT4/RA11

                                                                            16      16          16       PORTA

                   24                                                  Y AGU        X RAGU

                                        PCU      PCH    PCL                         X WAGU                      AN0/CMP1A/CN2/RB0

                                        Program Counter                                                         AN1/CMP1B/CN3/RB1

Address Latch                           Stack         Loop                                                      AN2/CMP1C/CMP2A/CN4/RB2
                                                     Control
                                        Control                                                                 AN3/CMP1D/CMP2B/CN5/RB3
                                        Logic
                                                      Logic

Program Memory                                                                                                  AN4/CMP2C/CMP3A/CN6/RB4

(12 Kbytes)                                                                                                     AN5/CMP2D/CMP3B/CN7/RB5

                                                                                                                AN6/CMP3C/CMP4A/

                                                                        Effective Address                       OSC1/CLKI/RB6

Data Latch                      16                                                                              AN7/CMP3D/CMP4B/

                                                                                                                OSC2/CLKO/RB7

                                               ROM Latch                                                        AN8/CMP4C/RB8

                                                                                  16                            AN9/EXTREF/CMP4D/RB9

                            24                                                                                  AN10/IFLT4/RB10

                                                                                                                AN11/IFLT2/RB11

                                                 IR

                                                                                              16         PORTB

                   16

                                                                                16 x 16

                                                        Decode              W Reg Array                         PGC2/EMUC2/OC1/IC1/INT1/

                   Instruction                                                                                  RD0

                   Decode &                                             16    16                                OC2/RD1

                   Control                                                                               PORTD

Control Signals                                                    DSP                  Divide

to Various Blocks                       Power-up               Engine                   Unit

                                         Timer                                                                  PWM1L/RE0

OSC1/CLK1        Timing                  Oscillator                                                             PWM1H/RE1

            Generation                  Start-up Timer                                                          PWM2L/RE2

                                         POR                                    ALU<16>                         PWM2H/RE3

                                         Reset                                                                  PWM3L/RE4

                   MCLR                 Watchdog               16                       16                      PWM3H/RE5

                                         Timer                                                                  PGC1/EMUC1/PWM4L/T1CK/

                                                                                                                U1ARX/CN0/RE6

                                                                                                                PGD1/EMUD1/PWM4H/T2CK/

                                                                                                         PORTE  U1ATX/CN1/RE7

Comparator                                       Input             Output                   I2C™

           Module           10-bit ADC           Capture           Compare                                      U1RX/RF2

                                                 Module            Module                                       U1TX/RF3

                                                                                                                PGD2/EMUD2/SCK1/INT2/RF6

                                                                                                                PGC/EMUC/SDI1/RF7

                                                                                                                PGD/EMUD/SD01/RF8

                                                 Input                                                          SYNCI/RF14

           SPI1                 Timers           Change        Power Supply             UART1                   SYNCO/SSI/RF15

                                                 Notification      PWM

                                                                                                         PORTF

                                                                                                                SCL/RG2

                                                                                                                SDA/RG3

                                                                                                         PORTG

DS70000178D-page 16                                                                                            2006-2014 Microchip Technology Inc.
                                                                  dsPIC30F1010/202X

Table 1-3 provides a brief description of device I/O pin-

outs for the dsPIC30F2023 and the functions that may

be multiplexed to a port pin. Multiple functions may

exist on one port pin. When multiplexing occurs, the

peripheral module’s functional requirements may force

an override of the data direction of the port pin.

TABLE 1-3:      PINOUT I/O DESCRIPTIONS FOR dsPIC30F2023

Pin Name        Pin   Buffer                                            Description

                Type         Type

AN0-AN11        I     Analog           Analog input channels.

AVDD            P            P         Positive supply for analog module.

AVSS            P            P         Ground reference for analog module.

CLKI            I     ST/CMOS          External clock source input. Always associated with OSC1 pin function.

CLKO            O            —         Oscillator crystal output. Connects to crystal or resonator in Crystal

                                       Oscillator mode. Optionally functions as CLKO in RC and EC modes. Always

                                       associated with OSC2 pin function.

EMUD            I/O          ST        ICD Primary Communication Channel data input/output pin.

EMUC            I/O          ST        ICD Primary Communication Channel clock input/output pin.

EMUD1           I/O          ST        ICD Secondary Communication Channel data input/output pin.

EMUC1           I/O          ST        ICD Secondary Communication Channel clock input/output pin.

EMUD2           I/O          ST        ICD Tertiary Communication Channel data input/output pin.

EMUC2           I/O          ST        ICD Tertiary Communication Channel clock input/output pin.

IC1             I            ST        Capture input.

INT0            I            ST        External interrupt 0

INT1            I            ST        External interrupt 1

INT2            I            ST        External interrupt 2

SFLT1           I            ST        Shared Fault 1

SFLT2           I            ST        Shared Fault 2

SFLT3           I            ST        Shared Fault 3

SFLT4           I            ST        Shared Fault 4

IFLT2           I            ST        Independent Fault 2

IFLT4           I            ST        Independent Fault 4

PWM1L           O            —         PWM 1 Low output

PWM1H           O            —         PWM 1 High output

PWM2L           O            —         PWM 2 Low output

PWM2H           O            —         PWM 2 High output

PWM3L           O            —         PWM 3 Low output

PWM3H           O            —         PWM 3 High output

PWM4L           O            —         PWM 4 Low output

PWM4H           O            —         PWM 4 High output

SYNCO           O            —         PWM SYNC output

SYNCI           I            ST        PWM SYNC input

MCLR            I/P          ST        Master Clear (Reset) input or programming voltage input. This pin is an

                                       active low Reset to the device.

OC1-OC2         O            —         Compare outputs.

OCFLTA          I            ST        Output Compare Fault condition.

OSC1            I     CMOS             Oscillator crystal input.

OSC2            I/O          —         Oscillator crystal output. Connects to crystal or resonator in Crystal Oscillator

                                       mode. Optionally functions as CLKO in FRC and EC modes.

Legend:   CMOS  =     CMOS compatible input or output                      Analog  =  Analog input

          ST    =     Schmitt Trigger input with CMOS levels               O       =  Output

          I     =     Input                                                P       =  Power

 2006-2014 Microchip Technology Inc.                                                         DS70000178D-page 17
dsPIC30F1010/202X

TABLE 1-3:       PINOUT I/O DESCRIPTIONS FOR dsPIC30F2023 (CONTINUED)

Pin Name             Pin  Buffer                                           Description

                 Type            Type

PGD                  I/O         ST    In-Circuit Serial Programming™ data input/output pin.

PGC                  I           ST    In-Circuit Serial Programming clock input pin.

PGD1                 I/O         ST    In-Circuit Serial Programming data input/output pin 1.

PGC1                 I           ST    In-Circuit Serial Programming clock input pin 1.

PGD2                 I/O         ST    In-Circuit Serial Programming data input/output pin 2.

PGC2                 I           ST    In-Circuit Serial Programming clock input pin 2.

RA8-RA11             I/O         ST    PORTA is a bidirectional I/O port.

RB0-RB11             I/O         ST    PORTB is a bidirectional I/O port.

RD0,RD1              I/O         ST    PORTD is a bidirectional I/O port.

RE0-RE7              I/O         ST    PORTE is a bidirectional I/O port.

RF2, RF3,            I/O         ST    PORTF is a bidirectional I/O port.

RF6-RF8, RF14,

RF15

RG2, RG3             I/O         ST    PORTG is a bidirectional I/O port.

SCK1                 I/O         ST    Synchronous serial clock input/output for SPI #1.

SDI1                 I           ST    SPI #1 Data In.

SDO1                 O           —     SPI #1 Data Out.

SS1                  I           ST    SPI #1 Slave Synchronization.

SCL                  I/O         ST    Synchronous serial clock input/output for I2C.

SDA                  I/O         ST    Synchronous serial data input/output for I2C.

T1CK                 I           ST    Timer1 external clock input.

T2CK                 I           ST    Timer2 external clock input.

U1RX                 I           ST    UART1 Receive.

U1TX                 O           —     UART1 Transmit.

U1ARX                I           ST    Alternate UART1 Receive.

U1ATX                O           —     Alternate UART1 Transmit

CMP1A                I    Analog       Comparator  1  Channel     A

CMP1B                I    Analog       Comparator  1  Channel     B

CMP1C                I    Analog       Comparator  1  Channel     C

CMP1D                I    Analog       Comparator  1  Channel     D

CMP2A                I    Analog       Comparator  2  Channel     A

CMP2B                I    Analog       Comparator  2  Channel     B

CMP2C                I    Analog       Comparator  2  Channel     C

CMP2D                I    Analog       Comparator  2  Channel     D

CMP3A                I    Analog       Comparator  3  Channel     A

CMP3B                I    Analog       Comparator  3  Channel     B

CMP3C                I    Analog       Comparator  3  Channel     C

CMP3D                I    Analog       Comparator  3  Channel     D

CMP4A                I    Analog       Comparator  4  Channel     A

CMP4B                I    Analog       Comparator  4  Channel     B

CMP4C                I    Analog       Comparator  4  Channel     C

CMP4D                I    Analog       Comparator  4  Channel     D

CN0-CN7              I           ST    Input Change notification inputs

                                       Can be software programmed for internal weak pull-ups      on all  inputs.

VDD                  P           —     Positive supply for logic and I/O pins.

VSS                  P           —     Ground reference for logic and I/O pins.

EXTREF               I    Analog       External reference to Comparator DAC

Legend:    CMOS      =    CMOS compatible input or output                  Analog      =  Analog  input

           ST        =    Schmitt Trigger input with CMOS levels           O           =  Output

           I         =    Input                                            P           =  Power

DS70000178D-page 18                                                                 2006-2014 Microchip Technology  Inc.
                                                                            dsPIC30F1010/202X

2.0          CPU ARCHITECTURE                                            •  Linear indirect access of 32K word pages within

             OVERVIEW                                                       program space is also possible using any working

                                                                            register, via table read and write instructions.

   Note: This data sheet summarizes features of this group                  Table read and write instructions can be used to

   of dsPIC30F devices and is not intended to be a complete                 access all 24 bits of an instruction word.

   reference  source.     For    more    information  on   the   CPU,    Overhead-free           circular     buffers  (modulo     addressing)

   peripherals,    register   descriptions    and     general   device   are supported in both X and Y address spaces. This is

   functionality,  refer  to  the    “dsPIC30F     Family  Reference

   Manual” (DS70046). For more information on the device                 primarily intended to remove the loop overhead for

   instruction set and programming, refer to the “dsPIC30F/              DSP algorithms.

   33F Programmer’s Reference Manual” (DS70157).

                                                                         The    X  AGU      also  supports        Bit-Reversed     Addressing

2.1          Core Overview                                               mode      on  destination        effective    addresses,    to      greatly

                                                                         simplify input or output data reordering for radix-2 FFT

The core has a 24-bit instruction word. The Program                      algorithms. Refer to Section 4.0 “Address Generator

Counter (PC) is 23 bits wide with the Least Significant                  Units”        for  details       on  modulo     and       Bit-Reversed

bit   (LSb)   always      clear    (see  Section 3.1       “Program      Addressing.

Address Space”), and the Most Significant bit (MSb)                      The core supports Inherent (no operand), Relative, Lit-

is ignored during normal program execution, except for                   eral, Memory Direct, Register Direct, Register Indirect,

certain  specialized          instructions.   Thus,   the      PC  can   Register Offset and Literal Offset Addressing modes.

address up to 4M instruction words of user program                       Instructions are associated with predefined Addressing

space. An instruction prefetch mechanism is used to                      modes, depending upon their functional requirements.

help  maintain     throughput.       Program       loop    constructs,

free from loop count management overhead, are sup-                       For most instructions, the core is capable of executing

ported using the DO and REPEAT instructions, both of                     a data (or program data) memory read, a working reg-

which are interruptible at any point.                                    ister (data) read, a data memory write and a program

The working register array consists of 16x16-bit regis-                  (instruction) memory read per instruction cycle. As a

ters, each of which can act as data, address or offset                   result, 3-operand instructions are supported, allowing

registers. One working register (W15) operates as a                      C = A + B operations to be executed in a single cycle.

software Stack Pointer for interrupts and calls.                         A  DSP        engine    has      been    included    to   significantly

The data space is 64 Kbytes (32K words) and is split                     enhance the core arithmetic capability and throughput.

into two blocks, referred to as X and Y data memory.                     It features a high-speed 17-bit by 17-bit multiplier, a

Each block has its own independent Address Genera-                       40-bit ALU, two 40-bit saturating accumulators and a

tion  Unit    (AGU).      Most       instructions     operate    solely  40-bit bidirectional barrel shifter. Data in the accumula-

through      the   X   memory        AGU,    which    provides     the   tor or any working register can be shifted up to 15 bits

appearance         of  a     single  unified    data     space.    The   right or 16 bits left in a single cycle. The DSP instruc-

Multiply-Accumulate (MAC) class of dual source DSP                       tions operate seamlessly with all other instructions and

instructions operate through both the X and Y AGUs,                      have been designed for optimal real-time performance.

splitting the data address space into two parts (see                     The MAC class of instructions can concurrently fetch

Section 3.2 “Data Address Space”). The X and Y                           two data operands from memory, while multiplying two

data space boundary is device-specific and cannot be                     W registers. To enable this concurrent fetching of data

altered by the user. Each data word consists of 2 bytes,                 operands,          the  data  space     has   been   split     for  these

and most instructions can address data either as words                   instructions and linear for all others. This has been

or bytes.                                                                achieved      in   a    transparent      and    flexible  manner,   by

                                                                         dedicating certain working registers to each address

There are two methods of accessing data stored in                        space for the MAC        class of instructions.

program memory:                                                          The core does not support a multi-stage instruction

•    The upper 32 Kbytes of data space memory can be                     pipeline. However, a single stage instruction prefetch

     mapped into the lower half (user space) of program                  mechanism          is   used,     which  accesses         and   partially

     space at any 16K program word boundary, defined                     decodes instructions a cycle ahead of execution, in

     by the 8-bit Program Space Visibility Page                          order     to  maximize        available       execution   time.     Most

     (PSVPAG) register. This lets any instruction access                 instructions       execute       in  a  single  cycle,    with      certain

     program space as if it were data space, with a limita-              exceptions.

     tion that the access requires an additional cycle.                  The    core   features        a  vectored     exception   processing

     Moreover, only the lower 16 bits of each instruction                structure for traps and interrupts, with 62 independent

     word can be accessed using this method.                             vectors. The exceptions consist of up to 8 traps (of

                                                                         which 4 are reserved) and 54 interrupts. Each interrupt

                                                                         is prioritized based on a user-assigned priority between

                                                                         1 and 7 (1 being the lowest priority and 7 being the

                                                                         highest) in conjunction with a predetermined ‘natural

                                                                         order’. Traps have fixed priorities, ranging from 8 to 15.

 2006-2014 Microchip Technology Inc.                                                                                  DS70000178D-page 19
dsPIC30F1010/202X

2.2       Programmer’s Model                                     2.2.1   SOFTWARE STACK POINTER/

The programmer’s model is shown in Figure 2-1 and                        FRAME POINTER

consists of 16x16-bit working registers (W0 through              The  dsPIC®  DSC    devices      contain  a  software  stack.

W15),     2x40-bit  accumulators    (ACCA         and  ACCB),    W15 is the dedicated software Stack Pointer (SP), and

STATUS    register  (SR),     Data  Table     Page     register  will be automatically modified by exception processing

(TBLPAG),     Program      Space  Visibility  Page     register  and subroutine calls and returns. However, W15 can be

(PSVPAG),     DO    and    REPEAT   registers     (DOSTART,      referenced by any instruction in the same manner as all

DOEND,        DCOUNT     and  RCOUNT),        and      Program   other W registers. This simplifies the reading, writing

Counter (PC). The working registers can act as data,             and manipulation of the Stack Pointer (e.g., creating

address or offset registers. All registers are memory            stack frames).

mapped. W0 acts as the W register for file register              Note:   In      order    to  protect  against  misaligned

addressing.                                                              stack accesses, W15<0> is always clear.

Some of these registers have a shadow register asso-             W15 is initialized to 0x0800 during a Reset. The user

ciated with each of them, as shown in Figure 2-1. The            may     reprogram   the  SP  during   initialization   to  any

shadow register is used as a temporary holding register          location within data space.

and can transfer its contents to or from its host register

upon the occurrence of an event. None of the shadow              W14 has been dedicated as a Stack Frame Pointer as

registers are accessible directly. The following rules           defined by the LNK and ULNK instructions. However,

apply for transfer of registers into and out of shadows.         W14 can be referenced by any instruction in the same

•  PUSH.S and POP.S                                              manner as all other W registers.

   W0, W1, W2, W3, SR (DC, N, OV, Z and C bits                   2.2.2   STATUS REGISTER

   only) are transferred.                                        The dsPIC DSC core has a 16-bit STATUS Register

•  DO instruction                                                (SR), the LSB of which is referred to as the SR Low

   DOSTART, DOEND, DCOUNT shadows are                            Byte (SRL) and the MSB as the SR High Byte (SRH).

   pushed on loop start, and popped on loop end.                 See Figure 2-1 for SR layout.

When a byte operation is performed on a working reg-             SRL contains all the MCU ALU operation status flags

ister, only the Least Significant Byte (LSB) of the target       (including the Z bit), as well as the CPU Interrupt Prior-

register  is  affected.  However,   a  benefit    of   memory    ity Level Status bits, IPL<2:0>, and the REPEAT active

mapped working registers is that both the Least and              Status bit, RA. During exception processing, SRL is

Most   Significant  Bytes  (MSBs)   can       be  manipulated    concatenated with the MSB of the PC to form a

through byte wide data memory space accesses.                    complete word value, which is then stacked.

                                                                 The upper byte of the STATUS register contains the

                                                                 DSP Adder/Subtracter status bits, the DO Loop Active

                                                                 bit (DA) and the Digit Carry (DC) Status bit.

                                                                 2.2.3   PROGRAM COUNTER

                                                                 The Program Counter is 23 bits wide. Bit 0 is always

                                                                 clear.  Therefore,  the      PC  can  address  up      to  4M

                                                                 instruction words.

DS70000178D-page 20                                                                   2006-2014 Microchip Technology Inc.
                                                                       dsPIC30F1010/202X

FIGURE 2-1:      PROGRAMMER’S              MODEL

                                               D15                            D0

                                                           W0/WREG                                             PUSH.S Shadow

                                                                W1

                                                                W2                                             DO Shadow

                                                                W3                                         Legend

                                                                W4

                          DSP Operand                           W5

                          Registers                             W6

                                                                W7

                                                                W8                        Working  Registers

                                                                W9

                          DSP Address

                          Registers                             W10

                                                                W11

                                                     W12/DSP Offset

                                                     W13/DSP Write Back

                                                     W14/Frame Pointer

                                                     W15/Stack Pointer

                                                                SPLIM                     Stack Pointer Limit Register

                                AD39           AD31                                 AD15                       AD0

DSP                       ACCA

Accumulators              ACCB

        PC22                                                                PC0

                                                                              0        Program Counter

    7                     0

             TBALBPPAAGG               Data Table Page Address

        7                       0

              PSVPAG                   Program Space Visibility Page Address

                                                15                            0

                                                           RCOUNT                         REPEAT Loop Counter

                                                15                            0

                                                           DCOUNT                         DO Loop Counter

       22                                                                        0

                                       DOSTART                                            DO Loop Start Address

       22

                                       DOEND                                              DO Loop End Address

                                                15                            0

                                                           CORCON                         Core Configuration Register

OA  OB       SA  SB       OAB  SAB     DA  DC  IPL2  IPL1  IPL0  RA    N      OV    Z     C        STATUS Register

                 SRH                                                   SRL

 2006-2014 Microchip Technology Inc.                                                                      DS70000178D-page 21
dsPIC30F1010/202X

2.3     Divide Support                                         The  divide  instructions    must  be    executed  within     a

                                                               REPEAT loop. Any other form of execution (e.g. a series

The  dsPIC  DSC  devices  feature  a       16/16-bit   signed  of discrete divide instructions) will not function correctly

fractional divide operation, as well as 32/16-bit and 16/      because    the  instruction  flow  depends  on     RCOUNT.

16-bit signed and unsigned integer divide operations, in       The divide instruction does not automatically set up the

the form of single instruction iterative divides. The          RCOUNT value, and it must, therefore, be explicitly

following instructions and data sizes are supported:           and correctly specified in the REPEAT instruction, as

1.   DIVF – 16/16 signed fractional divide                     shown  in  Table 2-1    (REPEAT    will  execute   the  target

2.   DIV.sd – 32/16 signed divide                              instruction {operand value + 1} times). The REPEAT

3.   DIV.ud – 32/16 unsigned divide                            loop count must be set up for 18 iterations of the DIV/

4.   DIV.sw – 16/16 signed divide                              DIVF instruction. Thus, a complete divide operation

                                                               requires 19 cycles.

5.   DIV.uw – 16/16 unsigned divide

The 16/16 divides are similar to the 32/16 (same number        Note:        The Divide flow is interruptible. However,

of iterations), but the dividend is either zero-extended or                 the  user  needs  to  save  the  context   as

sign-extended during the first iteration.                                   appropriate.

TABLE 2-1:       DIVIDE   INSTRUCTIONS

            Instruction                                                     Function

DIVF                                        Signed fractional divide: Wm/Wn W0; Rem W1

DIV.sd                                      Signed divide: (Wm + 1:Wm)/Wn W0; Rem W1

DIV.ud                                      Unsigned divide: (Wm + 1:Wm)/Wn W0; Rem W1

DIV.sw                                      Signed divide: Wm/Wn W0; Rem W1

DIV.uw                                      Unsigned divide: Wm/Wn W0; Rem W1

DS70000178D-page 22                                                                  2006-2014 Microchip Technology Inc.
                                                                              dsPIC30F1010/202X

2.4      DSP Engine                                                       The DSP engine has various options selected through

                                                                          various bits in the CPU Core Configuration Register

The  DSP  engine     consists  of  a  high  speed   17-bit    x           (CORCON), as listed below:

17-bit multiplier, a barrel shifter, and a 40-bit adder/sub-              1.    Fractional or integer DSP multiply (IF).

tracter  (with  two  target    accumulators,  round  and

saturation logic).                                                        2.    Signed or unsigned DSP multiply (US).

The DSP engine also has the capability to perform inher-                  3.    Conventional or convergent rounding (RND).

ent  accumulator-to-accumulator        operations,   which                4.    Automatic saturation on/off for ACCA (SATA).

require no additional data. These instructions are ADD,                   5.    Automatic saturation on/off for ACCB (SATB).

SUB and NEG.                                                              6.    Automatic  saturation  on/off  for  writes    to  data

                                                                                memory (SATDW).

                                                                          7.    Accumulator   Saturation       mode           selection

                                                                                (ACCSAT).

                                                                              Note:    For CORCON layout, see Table 3-3.

                                                                          A   block  diagram  of  the  DSP     engine     is  shown      in

                                                                          Figure 2-2.

TABLE 2-2:           DSP INSTRUCTION SUMMARY

          Instruction                                Algebraic Operation                                       ACC WB?

CLR                                                           A=0                                                   Yes

ED                                                            A = (x – y)2                                          No

EDAC                                                          A = A + (x – y)2                                      No

MAC                                                           A = A + (x * y)                                       Yes

MAC                                                           A = A + x2                                            No

MOVSAC                                                        No change in A                                        Yes

MPY                                                           A=x*y                                                 No

MPY.N                                                         A=–x*y                                                No

MSC                                                           A=A–x*y                                               Yes

 2006-2014 Microchip Technology Inc.                                                                          DS70000178D-page 23
dsPIC30F1010/202X

FIGURE 2-2:          DSP ENGINE BLOCK DIAGRAM

                                                                                 S

             40                                                                  a   16

                                   40-bit Accumulator A               40  Round  t

                                   40-bit Accumulator B                   Logic  u
                                                                                 r
                                                                                 a
                 Carry/Borrow Out
                                   Saturate                                      t
                                                                                 e

                 Carry/Borrow In   Adder

                                       Negate

                                   40           40

                                                                  40

                                                         Barrel   16

                                                         Shifter

                                          40                                                 X Data Bus

                                   Sign-Extend

Y Data Bus                                                        32                     16

                                                                      Zero Backfill

                                   33                    32

                                       17-bit

                                   Multiplier/Scaler

                                   16           16

                                   To/From W Array

DS70000178D-page 24                                                    2006-2014 Microchip Technology   Inc.
                                                                        dsPIC30F1010/202X

2.4.1            MULTIPLIER                                         2.4.2.1         Adder/Subtracter, Overflow and

The    17x17-bit  multiplier  is  capable      of  signed       or                  Saturation

unsigned operation and can multiplex its output using a             The adder/subtracter is a 40-bit adder with an optional

scaler to support either 1.31 fractional (Q31) or 32-bit            zero input into one side and either true or complement

integer results. Unsigned operands are zero-extended                data into the other input. In the case of addition, the

into the 17th bit of the multiplier input value. Signed             carry/borrow input is active high and the other input is

operands are sign-extended into the 17th bit of the mul-            true data (not complemented), whereas in the case of

tiplier input value. The output of the 17x17-bit multiplier/        subtraction, the carry/borrow input is active low and the

scaler is a 33-bit value, which is sign-extended to 40              other    input  is  complemented.         The   adder/subtracter

bits. Integer data is inherently represented as a signed            generates       overflow  Status    bits  SA/SB      and  OA/OB,

two’s complement value, where the MSB is defined as                 which are latched and reflected in the STATUS register.

a sign bit. Generally speaking, the range of an N-bit               •   Overflow from bit 39: this is a catastrophic

two’s complement integer is -2N-1 to 2N-1 – 1. For a 16-                overflow in which the sign of the accumulator is

bit integer, the data range is -32768 (0x8000) to 32767                 destroyed.

(0x7FFF), including 0. For a 32-bit integer, the data               •   Overflow into guard bits 32 through 39: this is a

range        is   -2,147,483,648        (0x8000 0000)           to      recoverable overflow. This bit is set whenever all

2,147,483,645 (0x7FFF FFFF).                                            the guard bits are not identical to each other.

When the multiplier is configured for fractional multipli-          The adder has an additional saturation block which

cation, the data is represented as a two’s complement               controls   accumulator        data  saturation,  if  selected.  It

fraction, where the MSB is defined as a sign bit and the            uses the result of the adder, the overflow Status bits

radix point is implied to lie just after the sign bit (QX for-      described above, and the SATA/B (CORCON<7:6>)

mat). The range of an N-bit two’s complement fraction               and    ACCSAT       (CORCON<4>)           mode   control  bits  to

with this implied radix point is -1.0 to (1-21-N). For a            determine when and to what value to saturate.

16-bit fraction, the Q15 data range is -1.0 (0x8000) to

0.999969482 (0x7FFF), including 0, and has a preci-                 Six STATUS register bits have been provided to

sion of 3.01518x10-5. In Fractional mode, a 16x16 mul-              support saturation and overflow; they are:

tiply operation generates a 1.31 product, which has a               1.   OA:

precision of 4.65661x10-10.                                              ACCA overflowed into guard bits

The same multiplier is used to support the MCU multi-               2.   OB:

ply instructions, which include integer 16-bit signed,                   ACCB overflowed into guard bits

unsigned and mixed sign multiplies.                                 3.   SA:

The MUL instruction may be directed to use byte or                       ACCA saturated (bit 31 overflow and saturation)

word sized operands. Byte operands will direct a 16-bit                  or

result, and word operands will direct a 32-bit result to                 ACCA overflowed into guard bits and saturated

the specified register(s) in the W array.                                (bit 39 overflow and saturation)

2.4.2            DATA ACCUMULATORS AND                              4.   SB:

                                                                         ACCB saturated (bit 31 overflow and saturation)

                 ADDER/SUBTRACTER                                        or

The    data      accumulator  consists  of  a  40-bit  adder/            ACCB overflowed into guard bits and saturated

subtracter with automatic sign extension logic. It can                   (bit 39 overflow and saturation)

select one of two accumulators (A or B) as its pre-                 5.   OAB:

accumulation source and post-accumulation destina-                       Logical OR of OA and OB

tion. For the ADD and LAC instructions, the data to be              6.   SAB:

accumulated or loaded can be optionally scaled via the                   Logical OR of SA and SB

barrel shifter, prior to accumulation.                              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 correspond-

                                                                    ing overflow trap flag enable bit (OVATE, OVBTE) in

                                                                    the  INTCON1        register  (refer  to  Section 5.0     “Inter-

                                                                    rupts”) is set. This allows the user to take immediate

                                                                    action, for example, to correct system gain.

 2006-2014 Microchip Technology Inc.                                                                         DS70000178D-page 25
dsPIC30F1010/202X

The SA and SB bits are modified each time data passes                2.4.2.2            Accumulator ‘Write Back’

through the adder/subtracter, but can only be cleared by             The MAC class of instructions (with the exception of

the user. When set, they indicate that the accumulator               MPY, MPY.N, ED and EDAC) can optionally write a

has overflowed its maximum range (bit 31 for 32-bit sat-             rounded version of the high word (bits 31 through 16)

uration, or bit 39 for 40-bit saturation) and will be satu-          of the accumulator that is not targeted by the instruction

rated (if saturation is enabled). When saturation is not             into data space memory. The write is performed across

enabled, SA and SB default to bit 39 overflow and thus               the X bus into combined X and Y address space. The

indicate that a catastrophic overflow has occurred. If the           following addressing modes are supported:

COVTE bit in the INTCON1 register is set, SA and SB

bits will generate an arithmetic warning trap when                   1.     W13, Register Direct:

saturation is disabled.                                                     The rounded contents of the non-target

The overflow and saturation Status bits can optionally                      accumulator are written into W13 as a 1.15

be viewed in the STATUS Register (SR) as the logical                        fraction.

OR of OA and OB (in bit OAB) and the logical OR of SA                2.     [W13] + = 2, Register Indirect with Post-Incre-

and SB (in bit SAB). This allows programmers to check                       ment: The rounded contents of the non-target

one bit in the STATUS Register to determine if either                       accumulator are written into the address pointed

accumulator has overflowed, or one bit to determine if                      to  by      W13   as    a  1.15    fraction.   W13  is  then

either  accumulator  has  saturated.         This  is   useful  for         incremented by 2 (for a word write).

complex number arithmetic, which typically uses both                 2.4.2.3            Round Logic

the accumulators.

The device  supports     three     Saturation      and  Overflow     The round logic is a combinational block, which per-

modes.                                                               forms a conventional (biased) or convergent (unbiased)

                                                                     round function during an accumulator write (store). The

1.  Bit 39 Overflow and Saturation:                                  Round mode is determined by the state of the RND bit

    When bit 39 overflow and saturation occurs, the                  in the CORCON register. It generates a 16-bit, 1.15 data

    saturation logic loads the maximally positive 9.31               value which is passed to the data space write saturation

    (0x7FFFFFFFFF)       or     maximally    negative   9.31         logic. If rounding is not indicated by the instruction, a

    value (0x8000000000) into the target accumula-                   truncated 1.15 data value is stored and the least

    tor. The SA or SB bit is set and remains set until               significant word (lsw) is simply discarded.

    cleared by the user. This is referred to as ‘super               Conventional rounding takes bit 15 of the accumulator,

    saturation’ and provides protection against erro-                zero-extends it and adds it to the ACCxH word (bits 16

    neous data or unexpected algorithm problems                      through 31 of the accumulator). If the ACCxL word (bits

    (e.g., gain calculations).                                       0 through 15 of the accumulator) is between 0x8000

2.  Bit 31 Overflow and Saturation:                                  and    0xFFFF            (0x8000      included),  ACCxH    is  incre-

    When bit 31 overflow and saturation occurs, the                  mented.        If  ACCxL     is   between     0x0000  and     0x7FFF,

    saturation logic then loads the maximally positive               ACCxH          is  left  unchanged.       A   consequence      of  this

    1.31 value (0x007FFFFFFF) or maximally nega-                     algorithm is that over a succession of random rounding

    tive 1.31 value (0x0080000000) into the target                   operations,        the   value    will  tend  to  be  biased   slightly

    accumulator. The SA or SB bit is set and remains                 positive.

    set until cleared by the user. When this Saturation

    mode is in effect, the guard bits are not used (so               Convergent         (or   unbiased)        rounding   operates  in   the

    the OA, OB or OAB bits are never set).                           same manner as conventional rounding, except when

3.  Bit 39 Catastrophic Overflow                                     ACCxL equals 0x8000. If this is the case, the LSb (bit

    The bit 39 overflow Status bit from the adder is                 16 of the accumulator) of ACCxH is examined. If it is ‘1’,

    used to set the SA or SB bit, which remain set                   ACCxH is incremented. If it is ‘0’, ACCxH is not modi-

    until cleared by the user. No saturation operation               fied.  Assuming          that    bit  16  is  effectively  random    in

    is performed and the accumulator is allowed to                   nature, this scheme will remove any rounding bias that

    overflow (destroying its sign). If the COVTE bit in              may accumulate.

    the  INTCON1         register  is  set,  a  catastrophic         The SAC and SAC.R instructions store either a trun-

    overflow can initiate a trap exception.                          cated (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.4.2.4 “Data

                                                                     Space Write Saturation”). Note that for the MAC class

                                                                     of instructions, the accumulator write back operation

                                                                     will function in the same manner, addressing combined

                                                                     MCU (X and Y) data space though the X bus. For this

                                                                     class      of  instructions,      the   data  is  always   subject   to

                                                                     rounding.

DS70000178D-page 26                                                                             2006-2014 Microchip Technology Inc.
                                                            dsPIC30F1010/202X

2.4.2.4          Data Space Write Saturation                2.4.3  BARREL SHIFTER

In addition to adder/subtracter saturation, writes to data  The barrel shifter is capable of performing up to 15-bit

space may also be saturated, but without affecting the      arithmetic or logic right shifts, or up to 16-bit left shifts

contents of the source accumulator. The data space          in a single cycle. The source can be either of the two

write saturation logic block accepts a 16-bit, 1.15 frac-   DSP accumulators or the X bus (to support multi-bit

tional value from the round logic block as its input,       shifts of register or memory data).

together with overflow status from the original source      The shifter requires a signed binary value to determine

(accumulator) and the 16-bit round adder. These are         both the magnitude (number of bits) and direction of the

combined and used to select the appropriate 1.15 frac-      shift operation. A positive value will shift the operand

tional value as output to write to data space memory.       right. A negative value will shift the operand left. A

If the SATDW bit in the CORCON register is set, data        value of ‘0’ will not modify the operand.

(after rounding or truncation) is tested for overflow and   The barrel shifter is 40 bits wide, thereby obtaining a

adjusted  accordingly.  For  input     data  greater  than  40-bit result for DSP shift operations and a 16-bit result

0x007FFF, data written to memory is forced to the max-      for MCU shift operations. Data from the X bus is pre-

imum positive 1.15 value, 0x7FFF. For input data less       sented to the barrel shifter between bit positions 16 to

than 0xFF8000, data written to memory is forced to the      31 for right shifts, and bit positions 0 to 15 for left shifts.

maximum negative 1.15 value, 0x8000. The MSb of the

source (bit 39) is used to determine the sign of the

operand being tested.

If the SATDW bit in the CORCON register is not set, the

input data is always passed through unmodified under

all conditions.

 2006-2014 Microchip Technology Inc.                                                            DS70000178D-page 27
dsPIC30F1010/202X

NOTES:

DS70000178D-page 28   2006-2014 Microchip Technology Inc.
                                                                 dsPIC30F1010/202X

3.0     MEMORY ORGANIZATION                                      FIGURE                       3-1:  PROGRAM SPACE

                                                                                                    MEMORY MAP FOR

Note: This data sheet summarizes features of this group                                             dsPIC30F1010/202X

of dsPIC30F devices and is not intended to be a complete

reference  source.     For  more  information   on  the  CPU,                                       Reset – GOTO Instruction  000000

peripherals,    register   descriptions  and    general  device                                     Reset – Target Address    000002

functionality,  refer  to  the  “dsPIC30F  Family   Reference                                       Reserved                  000004

Manual” (DS70046). For more information on the device                                               Ext. Osc. Fail Trap

instruction set and programming, refer to the “dsPIC30F/                                            Address Error Trap

33F Programmer’s Reference Manual” (DS70157).                                                       Stack Error Trap

                                                                                                    Arithmetic Warn. Trap     Vector  Tables

                                                                                                    Reserved

3.1     Program Address Space                                                                       Reserved

                                                                                                    Reserved

                                                                                                    Vector 0                  000014

The program address space is 4M instruction words. It                                               Vector 1

is addressable by a 24-bit value from either the 23-bit

PC, table instruction Effective Address (EA), or data                                               Vector 52

space EA, when program space is mapped into data                                                    Vector 53                 00007E

space, as defined by Table 3-1. Note that the program            User Memory                        Alternate Vector Table    000080

space address is incremented by two between succes-                                                                           0000FE

sive program words, in order to provide compatibility                         Space                                           000100

                                                                                                    User Flash

with data space addressing.                                                                         Program Memory

User program space access is restricted to the lower                                                (4K instructions)

                                                                                                                              001FFE

4M   instruction  word      address      range  (0x000000  to                                                                 002000

0x7FFFFE), for all accesses other than TBLRD/TBLWT,

which use TBLPAG<7> to determine user or configura-                                                 Reserved

tion space access. In Table 3-1, Read/Write instruc-                                                (Read 0’s)

tions, bit 23 allows access to the Device ID, the User ID                                                                     7FFFFE

and the Configuration bits. Otherwise, bit 23 is always

clear.                                                                                                                        800000

Note:         The address map shown in Figure 3-1 is

              conceptual, and the actual memory con-

              figuration    may   vary     across   individual

              devices depending on available memory.

                                                                                                    Reserved

                                                                 Configuration Memory  Space                                  8005BE

                                                                                                    UNITID (32 instr.)        8005C0

                                                                                                                              8005FE

                                                                                                                              800600

                                                                                                    Reserved

                                                                                                                              F7FFFE

                                                                                                    Device Configuration      F80000

                                                                                                    Registers                 F8000E

                                                                                                                              F80010

                                                                                                    Reserved

                                                                                                                              FEFFFE

                                                                                                    DEVID (2)                 FF0000

                                                                                                                              FFFFFE

 2006-2014 Microchip Technology Inc.                                                                                       DS70000178D-page  29
dsPIC30F1010/202X

TABLE 3-1:   PROGRAM SPACE ADDRESS CONSTRUCTION

Access Type                       Access                                  Program Space Address

                                  Space                  <23>          <22:16>     <15>            <14:1>       <0>

Instruction Access        User                           0                         PC<22:1>                          0

TBLRD/TBLWT               User                              TBLPAG<7:0>                      Data EA <15:0>

                          (TBLPAG<7> = 0)

TBLRD/TBLWT               Configuration                     TBLPAG<7:0>                      Data EA <15:0>

                          (TBLPAG<7> = 1)

Program Space Visibility  User                           0                PSVPAG<7:0>                Data EA <14:0>

FIGURE 3-2:              DATA ACCESS FROM PROGRAM SPACE ADDRESS GENERATION

                                                            23 bits

             Using

             Program      0                              Program Counter                     0

             Counter

                                                 Select     1

                                                                          EA

             Using

             Program      0       PSVPAG Reg

             Space

             Visibility                  8 bits                           15 bits

                                                                          EA

             Using        1/0     TBLPAG Reg

             Table

             Instruction                 8 bits                           16 bits

                          User/                             24-bit EA                        Byte

                          Configuration                                                      Select

                          Space

                          Select

             Note: Program Space Visibility cannot be used to access bits <23:16> of a word in program memory.

DS70000178D-page 30                                                                 2006-2014 Microchip Technology Inc.
                                                                               dsPIC30F1010/202X

3.1.1        DATA ACCESS FROM PROGRAM                                      A set of Table Instructions is provided to move byte  or

             MEMORY USING TABLE                                            word sized data to and from program space.

             INSTRUCTIONS                                                  1.  TBLRDL: Table Read Low

This architecture fetches 24-bit wide program memory.                          Word: Read the lsw of the program address;

Consequently, instructions are always aligned. How-                            P<15:0> maps to D<15:0>.

ever, as the architecture is modified Harvard, data can                        Byte: Read one of the LSBs of the program

also be present in program space.                                              address;

There are two methods by which program space can                               P<7:0> maps to the destination byte when byte

be accessed; via special table instructions, or through                        select = 0;

the remapping of a 16K word program space page into                            P<15:8> maps to the destination byte when byte

the upper half of data space (see Section 3.1.2 “Data                          select = 1.

Access   from    Program         Memory      Using      Program            2.  TBLWTL: Table Write Low (refer to Section 7.0

Space Visibility”). The TBLRDL and TBLWTL instruc-                             “Flash Program Memory” for details on Flash

tions offer a direct method of reading or writing the least                    Programming).

significant word (lsw) of any address within program                       3.  TBLRDH: Table Read High

space, without going through data space. The TBLRDH                            Word: Read the most significant word of the

and TBLWTH instructions are the only method whereby                            program address;

the  upper   8  bits  of    a  program    space    word  can  be               P<23:16> maps to D<7:0>; D<15:8> always

accessed as data.                                                              be = 0.

The PC is incremented by two for each successive                               Byte: Read one of the MSBs of the program

24-bit  program      word.     This  allows  program     memory                address;

addresses to directly map to data space addresses.                             P<23:16> maps to the destination byte when

Program memory can thus be regarded as two 16-bit                              byte select = 0;

word wide address spaces, residing side by side, each                          The destination byte will always be = 0 when

with the same address range. TBLRDL and TBLWTL                                 byte select = 1.

access the space which contains the Least Significant                      4.  TBLWTH: Table Write High (refer to Section 7.0

Data    Word,   and      TBLRDH      and  TBLWTH   access     the              “Flash Program Memory” for details on Flash

space which contains the Most Significant Data Byte.                           Programming).

Figure 3-2 shows how the EA is created for table oper-

ations  and    data   space    accesses      (PSV  =    1).  Here,

P<23:0>  refers      to  a  program       space  word,   whereas

D<15:0> refers to a data space word.

FIGURE 3-3:                 PROGRAM DATA TABLE ACCESS                      (LEAST SIGNIFICANT WORD)

                PC Address                               23            16                   8                 0

                 0x000000            00000000

                 0x000002            00000000

                 0x000004            00000000

                 0x000006            00000000

                                                             TBLRDL.W                            TBLRDL.B  (Wn<0>  =   0)

         Program Memory

         ‘Phantom’ Byte                                                        TBLRDL.B          (Wn<0>    =  1)

         (Read as ‘0’).

 2006-2014 Microchip Technology Inc.                                                                         DS70000178D-page 31
dsPIC30F1010/202X

FIGURE     3-4:             PROGRAM    DATA TABLE ACCESS        (MOST SIGNIFICANT BYTE)

                                                                              TBLRDH.W

                  PC Address                               23           16                         8                   0

                     0x000000          00000000

                     0x000002          00000000

                     0x000004          00000000

                     0x000006          00000000

                                                                                  TBLRDH.B            (Wn<0>    =  0)

                 Program Memory

                 ‘Phantom’ Byte

                 (Read as ‘0’)                     TBLRDH.B     (Wn<0>     =  1)

3.1.2      DATA ACCESS FROM PROGRAM                             Note that by incrementing the PC by 2 for each pro-

           MEMORY USING PROGRAM SPACE                           gram memory word, the Least Significant 15 bits of

           VISIBILITY                                           data space addresses directly map to the Least Signif-

The upper 32 Kbytes of data space may optionally be             icant         15  bits   in  the      corresponding    program  space

mapped into any 16K word program space page. This               addresses. The remaining bits are provided by the Pro-

provides transparent access of stored constant data             gram Space Visibility Page register, PSVPAG<7:0>, as

from X data space, without the need to use special              shown in Figure 3-5.

instructions (i.e., TBLRDL/H, TBLWTL/H instructions).                   Note:     PSV access is temporarily disabled during

Program space access through the data space occurs                                Table Reads/Writes.

if the MSb of the data space EA is set and program              For           instructions   that     use  PSV  which  are  executed

space visibility is enabled, by setting the PSV bit in the      outside a REPEAT loop:

Core   Control    register  (CORCON).  The      functions   of  •       The following instructions will require one instruc-

CORCON     are    discussed      in    Section 2.4  “DSP                tion cycle in addition to the specified execution

Engine”.                                                                time:

Data accesses to this area add an additional cycle to                   -     MAC class of instructions with data operand

the  instruction  being     executed,  since  two   program                   prefetch

memory fetches are required.                                            -     MOV instructions

Note that the upper half of addressable data space is                   -     MOV.D instructions

always part of the X data space. Therefore, when a              •       All other instructions will require two instruction

DSP operation uses program space mapping to access                      cycles in addition to the specified execution time

this memory region, Y data space should typically con-                  of the instruction.

tain state (variable) data for DSP operations, whereas

X    data  space  should    typically  contain  coefficient     For           instructions   that     use  PSV  which  are  executed

(constant) data.                                                inside a REPEAT loop:

Although each data space address, 0x8000 and higher,            •       The following instances will require two instruction

maps directly into a corresponding program memory                       cycles in addition to the specified execution time

address (see Figure 3-5), only the lower 16-bits of the                 of the instruction:

24-bit program word are used to contain the data. The                   -     Execution in the first iteration

upper 8 bits should be programmed to force an illegal                   -     Execution in the last iteration

instruction to maintain machine robustness. Refer to                    -     Execution prior to exiting the loop due to an

the “dsPIC30F/33F Programmer’s Reference Manual”                              interrupt

(DS70157) for details on instruction encoding.                          -     Execution upon re-entering the loop after an

                                                                              interrupt is serviced

                                                                •       Any other iteration of the REPEAT loop will allow

                                                                        the instruction, accessing data using PSV, to

                                                                        execute in a single cycle.

DS70000178D-page 32                                                                           2006-2014 Microchip Technology Inc.
                                                                      dsPIC30F1010/202X

FIGURE 3-5:              DATA    SPACE WINDOW INTO PROGRAM SPACE OPERATION

                                       Data Space                                          Program Space

                                                     0x0000                                                          0x100100

                             15                              PSVPAG(1)

             EA<15> = 0                                             0x00

                                                                      8

Data        16

Space                                                0x8000

     EA                      15                                                     23     15                     0

             EA<15> = 1                                      Address                                                 0x001200

                                                     15      Concatenation    23

         Upper half of Data

         Space is mapped

         into Program Space

                                                     0xFFFF                                                          0x001FFE

BSET        CORCON,#2        ;   PSV   bit   set

MOV         #0x00,   W0      ;   Set   PSVPAG     register

MOV         W0,  PSVPAG

MOV         0x9200,  W0      ;   Access     program  memory  location

                             ;   using   a   data  space    access                                Data Read

Note: PSVPAG is an 8-bit register, containing bits <22:15> of the program space address

         (i.e., it defines the page in program space to which the upper half of data space is being mapped).

3.2      Data Address Space                                           When executing any instruction other than one of the

                                                                      MAC class of instructions, the X block consists of the

The core has two data spaces. The data spaces can be                  256   byte    data   address    space  (including    all    Y

considered  either  separate     (for  some  DSP   instruc-           addresses). When executing one of the MAC class of

tions), or as one unified linear address range (for MCU               instructions, the X block consists of the 256 bytes data

instructions). The data spaces are accessed using two                 address space excluding the Y address block (for data

Address Generation Units (AGUs) and separate data                     reads only). In other words, all other instructions regard

paths.                                                                the   entire  data  memory  as  one    composite     address

3.2.1       DATA SPACE MEMORY MAP                                     space.  The   MAC    class    instructions  extract  the    Y

                                                                      address space from data space and address it using

The data space memory is split into two blocks, X and                 EAs sourced from W10 and W11. The remaining X data

Y data space. A key element of this architecture is that              space is addressed using W8 and W9. Both address

Y space is a subset of X space, and is fully contained                spaces are concurrently accessed only with the MAC

within X space. In order to provide an apparent linear                class instructions.

addressing space, X and Y spaces have contiguous                      A data space memory map is shown in Figure 3-6.

addresses.

 2006-2014 Microchip Technology Inc.                                                                     DS70000178D-page 33
dsPIC30F1010/202X

FIGURE 3-6:          DATA SPACE MEMORY MAP

                     MSB                                       LSB

                     Address           16 bits                 Address

                                  MSB               LSB

SFR Space                 0x0001                               0x0000

(Note)                                 SFR Space

                          0x07FF                               0x07FE

                          0x0801                               0x0800

                                                                            2560 bytes

                                  X Data RAM (X)                            Near

                                       256 bytes                            Data

                                                                            Space

512 bytes                 0x08FF                               0x08FE

SRAM Space                0x0901                               0x0900

                                  Y Data RAM (Y)

                                       256 bytes

                          0x09FF                               0x09FE

                                                               0x0A00

                                       (See Note)

                          0x8001                               0x8000

                                            X Data

                                  Unimplemented (X)

Optionally

Mapped

into Program

Memory

                          0xFFFF                               0xFFFE

Note:        Unimplemented SFR or SRAM locations read as ‘0’.

DS70000178D-page 34                                             2006-2014  Microchip Technology  Inc.
                                                     dsPIC30F1010/202X

FIGURE 3-7:  DATA SPACE                FOR      MCU  AND DSP (MAC CLASS) INSTRUCTIONS

             SFR SPACE                                                           SFR SPACE

                                                     UNUSED                                                X SPACE

             (Y SPACE)                               Y SPACE                     UNUSED

                                       X SPACE

                                                     UNUSED                                                X SPACE

Non-MAC Class Ops (Read/Write)                       MAC Class Ops Read-Only

MAC Class Ops (Write)

Indirect EA using any W                              Indirect EA using W10, W11  Indirect EA using W8, W9

 2006-2014 Microchip Technology Inc.                                                  DS70000178D-page 35
dsPIC30F1010/202X

3.2.2          DATA SPACES                                               3.2.3     DATA SPACE WIDTH

The X data space is used by all instructions and sup-                    The core data width is 16 bits. All internal registers are

ports all Addressing modes. There are separate read                      organized as 16-bit wide words. Data space memory is

and write data buses. The X read data bus is the return                  organized in byte addressable, 16-bit wide blocks.

data path for all instructions that view data space as

combined     X  and  Y    address      space.  It  is  also    the  X    3.2.4     DATA ALIGNMENT

address space data path for the dual operand read                        To  help  maintain   backward      compatibility    with  PIC®

instructions (MAC class). The X write data bus is the                    MCU devices and improve data space memory usage

only write path to data space for all instructions.                      efficiency, the dsPIC30F instruction set supports both

The X data space also supports modulo addressing for                     word and byte operations. Data is aligned in data mem-

all  instructions,  subject    to  Addressing      mode       restric-   ory and registers as words, but all data space EAs

tions. Bit-Reversed Addressing is only supported for                     resolve to bytes. Data byte reads will read the complete

writes to X data space.                                                  word, which contains the byte, using the LSb of any EA

The Y data space is used in concert with the X data                      to determine which byte to select. The selected byte is

space    by  the    MAC   class    of  instructions    (CLR,   ED,       placed    onto  the  LSB  of  the  X    data  path  (no   byte

EDAC, MAC, MOVSAC, MPY, MPY.N and MSC) to pro-                           accesses are possible from the Y data path as the MAC

vide two concurrent data read paths. No writes occur                     class of instruction can only fetch words). That is, data

across the Y bus. This class of instructions dedicates                   memory and registers are organized as two parallel

two   W  register   pointers,      W10  and    W11,       to  always     byte-wide entities with shared (word) address decode,

address Y data space, independent of X data space,                       but separate write lines. Data byte writes only write to

whereas W8 and W9 always address X data space.                           the corresponding side of the array or register which

Note   that  during  accumulator        write  back,      the  data      matches the byte address.

address space is considered a combination of X and Y                     As a consequence of this byte accessibility, all effective

data spaces, so the write occurs across the X bus.                       address calculations (including those generated by the

Consequently, the write can be to any address in the                     DSP operations, which are restricted to word sized

entire data space.                                                       data) are internally scaled to step through word-aligned

The   Y  data   space     can    only   be  used     for  the  data      memory. For example, the core would recognize that

prefetch operation associated with the MAC class of                      Post-Modified   Register      Indirect  Addressing        mode,

instructions.   It  also  supports     modulo      addressing       for  [Ws++], will result in a value of Ws + 1 for byte

automated circular buffers. Of course, all other instruc-                operations and Ws + 2 for word operations.

tions can access the Y data address space through the                    All word accesses must be aligned to an even address.

X data path, as part of the composite linear space.                      Misaligned word data fetches are not supported, so

The boundary between the X and Y data spaces is                          care must be taken when mixing byte and word opera-

defined as shown in Figure 3-6 and is not user pro-                      tions, or translating from 8-bit MCU code. Should a mis-

grammable. Should an EA point to data outside its own                    aligned read or write be attempted, an address error

assigned address space, or to a location outside phys-                   trap will be generated. If the error occurred on a read,

ical memory, an all-zero word/byte will be returned. For                 the instruction underway is completed, whereas if it

example, although Y address space is visible by all                      occurred on a write, the instruction will be executed but

non-MAC instructions using any Addressing mode, an                       the write will not occur. In either case, a trap will then

attempt by a MAC instruction to fetch data from that                     be executed, allowing the system and/or user to exam-

space, using W8 or W9 (X space pointers), will return                    ine the machine state prior to execution of the address

0x0000.                                                                  fault.

TABLE 3-2:           EFFECT OF INVALID                                   FIGURE 3-8:               DATA ALIGNMENT

                     MEMORY ACCESSES                                               15    MSB           87        LSB   0

Attempted Operation                            Data Returned                 0001        Byte 1             Byte 0           0000

EA = an unimplemented address                        0x0000                  0003        Byte 3             Byte 2           0002

W8 or W9 used to access Y data                       0x0000

space in a MAC instruction                                                   0005        Byte 5             Byte 4           0004

W10 or W11 used to access X                          0x0000

data space in a MAC instruction

All effective addresses are 16 bits wide and point to

bytes within the data space. Therefore, the data space

address range is 64 Kbytes or 32K words.

DS70000178D-page 36                                                                            2006-2014 Microchip Technology Inc.
                                                                       dsPIC30F1010/202X

All byte loads into any W register are loaded into the              generated                                  using  W15          as  a    source  or   destination

LSB. The MSB is not modified.                                       pointer, the address thus generated is compared with

A  Sign-Extend      (SE)   instruction   is  provided   to  allow   the value in SPLIM. If the contents of the Stack Pointer

users to translate 8-bit signed data to 16-bit signed               (W15) and the SPLIM register are equal and a push

values. Alternatively, for 16-bit unsigned data, users              operation is performed, a stack error trap will not occur.

can clear the MSB of any W register by executing a                  The stack error trap will occur on a subsequent push

Zero-Extend     (ZE)      instruction    on  the  appropriate       operation. Thus, for example, if it is desirable to cause

address.                                                            a  stack                                   error  trap  when       the  stack   grows     beyond

                                                                    address 0x2000 in RAM, initialize the SPLIM with the

Although most instructions are capable of operating on              value, 0x1FFE.

word or byte data sizes, it should be noted that some               Similarly, a Stack Pointer Underflow (stack error) trap is

instructions,   including  the      DSP  instructions,  operate     generated when the Stack Pointer address is found to

only on words.                                                      be less than 0x0800, thus preventing the stack from

3.2.5          NEAR DATA SPACE                                      interfering with the Special Function Register (SFR)

An 8 Kbyte ‘near’ data space is reserved in X address               space.

memory space between 0x0000 and 0x1FFF, which is                    A write to the SPLIM register should not be immediately

directly addressable via a 13-bit absolute address field            followed by an indirect read operation using W15.

within all memory direct instructions. The remaining X

address      space  and    all  of  the  Y   address    space  is   FIGURE 3-9:                                             CALL STACK FRAME

addressable indirectly. Additionally, the whole of X data              0x0000

space    is  addressable   using    MOV      instructions,  which                                              15                      0

support      memory   direct    addressing   with       a   16-bit

address field.                                                            Stack Grows Towards

3.2.6          SOFTWARE STACK                                                                  Higher Address

The dsPIC DSC device contains a software stack. W15                                                                   PC<15:0>              W15 (before CALL)

is used as the Stack Pointer.                                                                                  000000000 PC<22:16>

The Stack Pointer always points to the first available                                                                           W15 (after CALL)

free word and grows from lower addresses towards

higher addresses. It pre-decrements for stack pops and                                                                                      POP: [--W15]

post-increments      for   stack    pushes,  as       shown    in                                                                           PUSH: [W15++]

Figure 3-9. Note that for a PC push during any CALL

instruction, the MSB of the PC is zero-extended before

the push, ensuring that the MSB is always clear.                    3.2.7                                      DATA RAM PROTECTION

   Note:       A PC push during exception processing                The dsPIC30F1010/202X devices support data RAM

               will concatenate the SRL register to the             protection features which enable segments of RAM to

               MSB of the PC prior to the push.                     be protected when used in conjunction with Boot Code

There is a Stack Pointer Limit register (SPLIM) associ-             Segment Security. BSRAM (Secure RAM segment for

ated with the Stack Pointer. SPLIM is uninitialized at              BS) is accessible only from the Boot Segment Flash

Reset. As is the case for the Stack Pointer, SPLIM<0>               code   when                                enabled.     See        Table 3-3    for  the  BSRAM

is forced to ‘0’, because all stack operations must be              SFR.

word-aligned. Whenever an Effective Address (EA) is

 2006-2014 Microchip Technology Inc.                                                                                                       DS70000178D-page 37
DS70000178D-page 38                    TABLE 3-3:        CORE REGISTER MAP                                                                                                                                               dsPIC30F1010/202X

                                       SFR Name  Addr.   Bit 15     Bit 14   Bit 13  Bit 12  Bit 11      Bit 10  Bit 9  Bit 8      Bit 7  Bit 6  Bit 5  Bit 4   Bit 3     Bit 2  Bit 1  Bit 0        Reset  State

                                       W0          0000                                                                 W0/WREG                                                                0000  0000   0000   0000

                                       W1          0002                                                                        W1                                                              0000  0000   0000   0000

                                       W2          0004                                                                        W2                                                              0000  0000   0000   0000

                                       W3          0006                                                                        W3                                                              0000  0000   0000   0000

                                       W4          0008                                                                        W4                                                              0000  0000   0000   0000

                                       W5        000A                                                                          W5                                                              0000  0000   0000   0000

                                       W6        000C                                                                          W6                                                              0000  0000   0000   0000

                                       W7        000E                                                                          W7                                                              0000  0000   0000   0000

                                       W8          0010                                                                        W8                                                              0000  0000   0000   0000

                                       W9          0012                                                                        W9                                                              0000  0000   0000   0000

                                       W10         0014                                                                     W10                                                                0000  0000   0000   0000

                                       W11         0016                                                                      W11                                                               0000  0000   0000   0000

                                       W12         0018                                                                     W12                                                                0000  0000   0000   0000

                                       W13       001A                                                                       W13                                                                0000  0000   0000   0000

                                       W14       001C                                                                       W14                                                                0000  0000   0000   0000

                                       W15       001E                                                                       W15                                                                0000  1000   0000   0000

                                       SPLIM       0020                                                                 SPLIM                                                                  0000  0000   0000   0000

                                       ACCAL       0022                                                                 ACCAL                                                                  0000  0000   0000   0000

                                       ACCAH       0024                                                                 ACCAH                                                                  0000  0000   0000   0000

                                       ACCAU       0026                      Sign-Extension  (ACCA<39>)                                                        ACCAU                           0000  0000   0000   0000

                                       ACCBL       0028                                                                 ACCBL                                                                  0000  0000   0000   0000

                                       ACCBH     002A                                                                   ACCBH                                                                  0000  0000   0000   0000

                                       ACCBU     002C                        Sign-Extension  (ACCB<39>)                                                        ACCBU                           0000  0000   0000   0000

                                       PCL       002E                                                                        PCL                                                               0000  0000   0000   0000

                                       PCH         0030  —               —   —       —       —           —       —      —          —                            PCH                            0000  0000   0000   0000

 2006-2014 Microchip Technology Inc.  TBLPAG      0032  —               —   —       —       —           —       —      —                                      TBLPAG                          0000  0000   0000   0000

                                       PSVPAG      0034  —               —   —       —       —           —       —      —                                      PSVPAG                          0000  0000   0000   0000

                                       RCOUNT      0036                                                                 RCOUNT                                                                 uuuu  uuuu   uuuu   uuuu

                                       DCOUNT      0038                                                                 DCOUNT                                                                 uuuu  uuuu   uuuu   uuuu

                                       DOSTARTL  003A                                                                 DOSTARTL                                                          0      uuuu  uuuu   uuuu   uuu0

                                       DOSTARTH  003C    —               —   —       —       —           —       —      —          —                            DOSTARTH                       0000  0000   0uuu   uuuu

                                       DOENDL    003E                                                                   DOENDL                                                          0      uuuu  uuuu   uuuu   uuu0

                                       DOENDH      0040  —               —   —       —       —           —       —      —          —                            DOENDH                         0000  0000   0uuu   uuuu

                                       SR          0042  OA              OB  SA      SB      OAB         SAB     DA     DC         IPL2   IPL1   IPL0   RA      N         OV     Z      C      0000  0000   0000   0000

                                       CORCON      0044  —               —   —       US      EDT         DL2     DL1    DL0        SATA   SATB   SATDW  ACCSAT  IPL3      PSV    RND    IF     0000  0000   0010   0000

                                       Legend:   u = uninitialized  bit
 2006-2014 Microchip Technology Inc.  TABLE 3-3:        CORE REGISTER MAP (CONTINUED)

                                       SFR Name  Addr.   Bit 15         Bit 14  Bit 13  Bit 12  Bit 11  Bit 10  Bit 9  Bit 8     Bit 7     Bit 6  Bit 5     Bit 4  Bit 3  Bit 2   Bit 1   Bit 0         Reset  State

                                       MODCON      0046  XMODEN  YMODEN         —       —               BWM<3:0>                           YWM<3:0>                       XWM<3:0>                0000  0000   0000   0000

                                       XMODSRT     0048                                                                XS<15:1>                                                           0       uuuu  uuuu   uuuu   uuu0

                                       XMODEND   004A                                                                  XE<15:1>                                                           1       uuuu  uuuu   uuuu   uuu1

                                       YMODSRT   004C                                                                  YS<15:1>                                                           0       uuuu  uuuu   uuuu   uuu0

                                       YMODEND   004E                                                                  YE<15:1>                                                           1       uuuu  uuuu   uuuu   uuu1

                                       XBREV       0050  BREN                                                                    XB<14:0>                                                         uuuu  uuuu   uuuu   uuuu

                                       DISICNT     0052  —              —                                                        DISICNT<13:0>                                                    0000  0000   0000   0000

                                       BSRAM       0750  —              —       —       —       —       —       —      —         —         —      —         —      —      IW_BSR  IR_BSR  RL_BSR  0000  0000   0000   0000

                                       Legend:   u = uninitialized bit

                                       Note: Refer to the “dsPIC30F Family      Reference Manual”       (DS70046) for descriptions of register bit fields.

DS70000178D-page 39                                                                                                                                                                                                         dsPIC30F1010/202X
dsPIC30F1010/202X

NOTES:

DS70000178D-page 40   2006-2014 Microchip Technology Inc.
                                                                    dsPIC30F1010/202X

4.0  ADDRESS GENERATOR UNITS                                        4.1              Instruction Addressing Modes

   Note: This data sheet summarizes features of this group          The Addressing modes in Table 4-1 form the basis of

   of dsPIC30F devices and is not intended to be a complete         the Addressing modes optimized to support the specific

   reference  source.     For  more  information   on  the  CPU,    features         of    individual  instructions.   The  Addressing

   peripherals,    register   descriptions   and  general   device  modes provided in the MAC class of instructions are

   functionality,  refer  to  the  “dsPIC30F  Family   Reference    somewhat different from those in the other instruction

   Manual” (DS70046). For more information on the device            types.

   instruction set and programming, refer to the “dsPIC30F/

   33F Programmer’s Reference Manual” (DS70157).

The  dsPIC         DSC       core  contains   two  independent      4.1.1                FILE REGISTER INSTRUCTIONS

address generator units: the X AGU and Y AGU. The Y                 Most file register instructions use a 13-bit address field

AGU supports word sized data reads for the DSP MAC                  (f) to directly address data present in the first 8192

class of instructions only. The dsPIC DSC AGUs                      bytes   of       data  memory      (near     data  space).      Most  file

support three types of data addressing:                             register        instructions  employ      a   working  register,      W0,

•  Linear Addressing                                                which is denoted as WREG in these instructions. The

                                                                    destination is typically either the same file register, or

•  Modulo (Circular) Addressing                                     WREG            (with  the  exception     of  the  MUL  instruction),

•  Bit-Reversed Addressing                                          which writes the result to a register or register pair. The

Linear and Modulo Data Addressing modes can be                      MOV    instruction       allows    additional      flexibility  and   can

applied to data space or program space. Bit-Reversed                access the entire data space.

Addressing is only applicable to data space addresses.

TABLE 4-1:                FUNDAMENTAL             ADDRESSING MODES SUPPORTED

              Addressing Mode                                                       Description

File Register Direct                              The address of the file register is specified explicitly.

Register Direct                                   The contents of a register are accessed directly.

Register Indirect                                 The contents of Wn forms the EA.

Register Indirect Post-modified                   The contents of Wn forms the EA. Wn is post-modified        (incremented or

                                                  decremented) by a constant value.

Register Indirect Pre-modified                    Wn is pre-modified (incremented or decremented) by a           signed constant    value

                                                  to form the EA.

Register Indirect with Register Offset            The sum of Wn and Wb forms the EA.

Register Indirect with Literal Offset             The sum of Wn and a literal forms the EA.

 2006-2014 Microchip Technology Inc.                                                                             DS70000178D-page 41
dsPIC30F1010/202X

4.1.2         MCU INSTRUCTIONS                                       4.1.4          MAC INSTRUCTIONS

The three-operand MCU instructions are of the form:                  The dual source operand DSP instructions (CLR, ED,

    Operand 3 = Operand 1 Operand 2                       EDAC, MAC, MPY, MPY.N, MOVSAC and MSC), also

                                                                     referred to as MAC instructions, utilize a simplified set of

where Operand 1 is always a working register (i.e., the              Addressing     modes     to  allow  the  user   to  effectively

Addressing mode can only be register direct), which is               manipulate the data pointers through register indirect

referred to as Wb. Operand 2 can be a W register,                    tables.

fetched from data memory, or a 5-bit literal. The result             The two source operand prefetch registers must be a

location     can   be  either  a  W     register  or  an    address  member     of  the  set  {W8,  W9,  W10,  W11}.     For  data

location.    The       following     Addressing       modes     are  reads, W8 and W9 will always be directed to the X

supported by MCU instructions:                                       RAGU and W10 and W11 will always be directed to the

•   Register Direct                                                  Y AGU. The effective addresses generated (before and

•   Register Indirect                                                after modification) must, therefore, be valid addresses

•   Register Indirect Post-modified                                  within X data space for W8 and W9 and Y data space

•   Register Indirect Pre-modified                                   for W10 and W11.

•   5-bit or 10-bit Literal                                              Note:      Register  Indirect   with  Register       Offset

    Note:     Not      all   instructions   support       all   the                 Addressing is only available for W9 (in X

              Addressing modes given above. Individual                              space) and W11 (in Y space).

              instructions may support different subsets             In   summary,  the     following    Addressing    modes  are

              of these Addressing modes.                             supported by the MAC class of instructions:

4.1.3         MOVE AND ACCUMULATOR                                   •   Register Indirect

              INSTRUCTIONS                                           •   Register Indirect Post-modified by 2

Move instructions and the DSP Accumulator class of                   •   Register Indirect Post-modified by 4

instructions      provide   a  greater  degree    of    addressing   •   Register Indirect Post-modified by 6

flexibility  than   other    instructions.  In    addition  to  the  •   Register Indirect with Register Offset (Indexed)

Addressing modes supported by most MCU instruc-

tions, move and accumulator instructions also support                4.1.5          OTHER INSTRUCTIONS

Register     Indirect    with  Register     Offset    Addressing     Besides the various Addressing modes outlined above,

mode, also referred to as Register Indexed mode.                     some instructions use literal constants of various sizes.

    Note:     For the MOV instructions, the Addressing               For  example,  BRA       (branch)   instructions    use  16-bit

              mode specified in the instruction can differ           signed literals to specify the branch destination directly,

              for the source and destination EA. How-                whereas the DISI instruction uses a 14-bit unsigned

              ever, the 4-bit Wb (Register Offset) field is          literal field. In some instructions, such as ADD Acc, the

              shared         between    both      source        and  source of an operand or result is implied by the opcode

              destination      (but  typically    only  used    by   itself. Certain operations, such as NOP, do not have any

              one).                                                  operands.

In  summary,        the  following    Addressing      modes     are

supported by move and accumulator instructions:

•   Register Direct

•   Register Indirect

•   Register Indirect Post-modified

•   Register Indirect Pre-modified

•   Register Indirect with Register Offset (Indexed)

•   Register Indirect with Literal Offset

•   8-bit Literal

•   16-bit Literal

    Note:     Not      all   instructions   support       all   the

              Addressing modes given above. Individual

              instructions may support different subsets

              of these Addressing modes.

DS70000178D-page 42                                                                          2006-2014 Microchip Technology Inc.
                                                                 dsPIC30F1010/202X

4.2      Modulo Addressing                                   4.2.1         START AND END ADDRESS

Modulo addressing is a method of providing an auto-          The    modulo      addressing       scheme      requires       that  a

mated  means  to   support  circular   data  buffers  using  starting and an end address be specified and loaded

hardware. The objective is to remove the need for soft-      into   the  16-bit     modulo       buffer  address       registers:

ware to perform data address boundary checks when            XMODSRT, XMODEND, YMODSRT and YMODEND

executing tightly looped code, as is typical in many         (see Table 3-3).

DSP algorithms.                                                  Note:     Y-space modulo addressing EA calcula-

Modulo addressing can operate in either data or pro-                       tions    assume       word    sized   data  (LSb       of

gram space (since the data pointer mechanism is essen-                     every EA is always clear).

tially the same for both). One circular buffer can be        The length of a circular buffer is not directly specified. It

supported in each of the X (which also provides the          is  determined     by    the   difference   between       the  corre-

pointers into program space) and Y data spaces. Modulo       sponding    start    and  end       addresses.      The   maximum

addressing can operate on any W register pointer. How-       possible    length   of   the  circular     buffer  is   32K   words

ever, it is not advisable to use W14 or W15 for modulo       (64 Kbytes).

addressing, since these two registers are used as the

Stack Frame Pointer and Stack Pointer, respectively.         4.2.2         W ADDRESS REGISTER

In general, any particular circular buffer can only be                     SELECTION

configured to operate in one direction, as there are cer-    The Modulo and Bit-Reversed Addressing Control reg-

tain restrictions on the buffer start address (for incre-    ister MODCON<15:0> contains enable flags as well as

menting  buffers)  or  end  address    (for  decrementing    a W register field to specify the W address registers.

buffers) based upon the direction of the buffer.             The XWM and YWM fields select which registers will

The only exception to the usage restrictions is for buf-     operate with modulo addressing. If XWM = 15, X RAGU

fers which have a power-of-2 length. As these buffers        and    X    WAGU       modulo       addressing      are   disabled.

satisfy the start and end address criteria, they may         Similarly, if YWM = 15, Y AGU modulo addressing is

operate in a Bidirectional mode, (i.e., address bound-       disabled.

ary checks will be performed on both the lower and           The X Address Space Pointer W register (XWM) to

upper address boundaries).                                   which modulo addressing is to be applied, is stored in

                                                             MODCON<3:0> (see Table 3-3). Modulo addressing is

                                                             enabled for X data space when XWM is set to any value

                                                             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>.

 2006-2014 Microchip Technology Inc.                                                                    DS70000178D-page 43
dsPIC30F1010/202X

FIGURE 4-1:          MODULO   ADDRESSING  OPERATION EXAMPLE

Byte

Address                         MOV       #0x1100,W0

                                MOV       W0,  XMODSRT  ;set   modulo    start   address

                                MOV       #0x1163,W0

                                MOV       W0,MODEND     ;set   modulo    end  address

0x1100                          MOV       #0x8001,W0

                                MOV       W0,MODCON     ;enable  W1,     X  AGU  for   modulo

                                MOV       #0x0000,W0    ;W0   holds  buffer      fill  value

                                MOV       #0x1110,W1    ;point   W1  to     buffer

                                DO        AGAIN,#0x31   ;fill   the  50     buffer  locations

                                MOV       W0,  [W1++]   ;fill   the  next     location

                                AGAIN:    INC  W0,W0    ;increment     the    fill  value

0x1163

         Start Addr = 0x1100

         End Addr = 0x1163

         Length = 0x0032 words

DS70000178D-page 44                                                   2006-2014 Microchip Technology  Inc.
                                                                         dsPIC30F1010/202X

4.2.3      MODULO ADDRESSING                                             If the length of a bit-reversed buffer is M = 2N bytes,

           APPLICABILITY                                                 then the last ‘N’ bits of the data buffer start address

Modulo     addressing  can  be    applied   to  the   Effective          must be zeros.

Address (EA) calculation associated with any W regis-                    XB<14:0> is the bit-reversed address modifier or ‘pivot

ter. It is important to realize that the address boundar-                point’ which is typically a constant. In the case of an

ies check for addresses less than or greater than the                    FFT computation, its value is equal to half of the FFT

upper (for incrementing buffers) and lower (for decre-                   data buffer size.

menting buffers) boundary addresses (not just equal                      Note:     All Bit-Reversed EA calculations assume

to).  Address  changes      may,  therefore,    jump  beyond                       word     sized      data     (LSb   of  every    EA  is

boundaries and still be adjusted correctly.                                        always         clear).  The  XB     value   is  scaled

    Note:  The modulo corrected effective address is                               accordingly to generate compatible (byte)

           written back to the register only when Pre-                             addresses.

           Modify or Post-Modify Addressing mode is                      When enabled, Bit-Reversed Addressing will only be

           used to compute the Effective Address.                        executed  for   register  indirect     with   pre-increment    or

           When an address offset (e.g., [W7 + W2])                      post-increment addressing and word sized data writes.

           is used, modulo address correction is per-                    It will not function for any other Addressing mode or for

           formed,     but  the   contents  of  the   register           byte sized data, and normal addresses will be gener-

           remains unchanged.                                            ated instead. When Bit-Reversed Addressing is active,

                                                                         the W Address Pointer will always be added to the

4.3        Bit-Reversed Addressing                                       address modifier (XB) and the offset associated with

Bit-Reversed Addressing is intended to simplify data                     the register Indirect Addressing mode will be ignored.

re-ordering for radix-2 FFT algorithms. It is supported                  In addition, as word sized data is a requirement, the

by the X AGU for data writes only.                                       LSb of the EA is ignored (and always clear).

The modifier, which may be a constant value or register                  Note:     Modulo         addressing      and      Bit-Reversed

contents, is regarded as having its bit order reversed.                            Addressing          should     not      be  enabled

The address source and destination are kept in normal                              together.       In      the  event  that    the  user

order. Thus, the only operand requiring reversal is the                            attempts to do this, Bit-Reversed Address-

modifier.                                                                          ing will assume priority when active for the

                                                                                   X WAGU, and X WAGU modulo address-

4.3.1      BIT-REVERSED ADDRESSING                                                 ing      will  be   disabled.  However,         modulo

           IMPLEMENTATION                                                          addressing will continue to function in the

                                                                                   X RAGU.

Bit-Reversed Addressing is enabled when:                                 If Bit-Reversed Addressing has already been enabled

1.    BWM (W register selection) in the MODCON                           by setting the BREN (XBREV<15>) bit, then a write to

      register is any value other than 15 (the stack can                 the XBREV register should not be immediately followed

      not be accessed using Bit-Reversed                                 by an indirect read operation using the W register that

      Addressing) and                                                    has been designated as the bit-reversed pointer.

2.    the BREN bit is set in the XBREV register and

3.    the Addressing mode used is Register Indirect

      with Pre-Increment or Post-Increment.

FIGURE 4-2:             BIT-REVERSED ADDRESS EXAMPLE

                                                                     Sequential Address

      b15 b14 b13 b12   b11      b10  b9    b8  b7    b6  b5     b4  b3  b2  b1    0

                                                                                         Bit Locations Swapped Left-to-Right

                                                                                         Around Center of Binary Value

      b15 b14 b13 b12   b11      b10  b9    b8  b7    b6  b5     b1  b2  b3  b4    0

                                                                     Bit-Reversed Address

                                                      Pivot Point

                                                                             XB = 0x0008 for a 16 word Bit-Reversed Buffer

 2006-2014 Microchip Technology Inc.                                                                           DS70000178D-page 45
dsPIC30F1010/202X

TABLE     4-2:  BIT-REVERSED      ADDRESS SEQUENCE  (16-ENTRY)

                         Normal                                    Bit-Reversed

                         Address                                    Address

A3        A2         A1  A0          Decimal  A3    A2          A1  A0           Decimal

0         0          0      0        0        0     0           0   0                                              0

0         0          0      1        1        1     0           0   0                                              8

0         0          1      0        2        0     1           0   0                                              4

0         0          1      1        3        1     1           0   0            12

0         1          0      0        4        0     0           1   0                                              2

0         1          0      1        5        1     0           1   0            10

0         1          1      0        6        0     1           1   0                                              6

0         1          1      1        7        1     1           1   0            14

1         0          0      0        8        0     0           0   1                                              1

1         0          0      1        9        1     0           0   1                                              9

1         0          1      0        10       0     1           0   1                                              5

1         0          1      1        11       1     1           0   1            13

1         1          0      0        12       0     0           1   1                                              3

1         1          0      1        13       1     0           1   1            11

1         1          1      0        14       0     1           1   1                                              7

1         1          1      1        15       1     1           1   1            15

TABLE 4-3:      BIT-REVERSED ADDRESS MODIFIER VALUES FOR XBREV REGISTER

                Buffer Size (Words)           XB<14:0> Bit-Reversed Address Modifier Value(1)

                         32768                                      0x4000

                         16384                                      0x2000

                         8192                                       0x1000

                         4096                                       0x0800

                         2048                                       0x0400

                         1024                                       0x0200

                         512                                        0x0100

                         256                                        0x0080

                         128                                        0x0040

                         64                                         0x0020

                         32                                         0x0010

                         16                                         0x0008

                         8                                          0x0004

                         4                                          0x0002

                         2                                          0x0001

Note  1:  Modifier values greater than 256 words exceed the data memory available on the dsPIC30F1010/202X device

DS70000178D-page 46                                                  2006-2014 Microchip Technology Inc.
                                                                         dsPIC30F1010/202X

5.0         INTERRUPTS                                                •  The INTTREG register contains the associated

                                                                         interrupt vector number and the new CPU inter-

   Note: This data sheet summarizes features of this group               rupt priority level, which are latched into vector

   of dsPIC30F devices and is not intended to be a complete              number (VECNUM<6:0>) and Interrupt level

   reference  source.     For  more    information  on   the  CPU,       (ILR<3:0>) bit fields in the INTTREG register. The

   peripherals,    register   descriptions  and     general   device     new interrupt priority level is the priority of the

   functionality,  refer  to  the  “dsPIC30F  Family     Reference

   Manual” (DS70046). For more information on the device                 pending interrupt.

   instruction set and programming, refer to the “dsPIC30F/              Note:       Interrupt flag bits get set when an Interrupt

   33F Programmer’s Reference Manual” (DS70157).                                     condition occurs, regardless of the state of

The dsPIC30F1010/202X device has up to 35 interrupt                                  its  corresponding     enable        bit.  User   soft-

sources     and    4  processor    exceptions       (traps),  which                  ware should ensure the appropriate inter-

must be arbitrated based on a priority scheme.                                       rupt flag bits are clear prior to enabling an

The CPU is responsible for reading the Interrupt Vec-                                interrupt.

tor Table (IVT) and transferring the address contained                All interrupt sources can be user assigned to one of 7

in the interrupt vector to the Program Counter (PC).                  priority  levels,   1    through  7,  via     the   IPCx     registers.

The interrupt vector is transferred from the program                  Each interrupt source is associated with an interrupt

data bus into the Program Counter, via a 24-bit wide                  vector, as shown in Figure 5-1. Levels 7 and 1 repre-

multiplexer on the input of the Program Counter.                      sent    the    highest   and      lowest      maskable       priorities,

The Interrupt Vector Table and Alternate Interrupt Vec-               respectively.

tor Table (AIVT) are placed near the beginning of pro-                   Note:       Assigning a priority level of 0 to an inter-

gram  memory          (0x000004).    The    IVT     and  AIVT  are                   rupt source is equivalent to disabling that

shown in Figure 5-1.                                                                 interrupt.

The   interrupt       controller   is  responsible       for   pre-   If the NSTDIS bit (INTCON1<15>) is set, nesting of

processing the interrupts and processor exceptions,                   interrupts is prevented. Thus, if an interrupt is currently

prior to their being presented to the processor core.                 being     serviced,      processing   of      a  new      interrupt  is

The peripheral interrupts and traps are enabled, priori-              prevented, even if the new interrupt is of higher priority

tized and controlled using centralized special function               than the one currently being serviced.

registers:

•  IFS0<15:0>, IFS1<15:0>, IFS2<15:0>                                    Note:       The IPL bits become read-only whenever

   All interrupt request flags are maintained in these                               the NSTDIS bit has been set to ‘1’.

   three registers. The flags are set by their respec-                Certain     interrupts   have     specialized       control  bits    for

   tive peripherals or external signals, and they are                 features like edge or level triggered interrupts, inter-

   cleared via software.                                              rupt-on-change, etc. Control of these features remains

•  IEC0<15:0>, IEC1<15:0>, IEC2<15:0>                                 within    the  peripheral      module         that  generates        the

   All interrupt enable control bits are maintained in                interrupt.

   these three registers. These control bits are used                 The    DISI    instruction    can     be  used      to    disable    the

   to individually enable interrupts from the                         processing of interrupts of priorities 6 and lower for a

   peripherals or external signals.                                   certain number of instructions, during which the DISI bit

•  IPC0<15:0>... IPC11<7:0>                                           (INTCON2<14>) remains set.

   The user-assignable priority level associated with                 When an interrupt is serviced, the PC is loaded with the

   each of these interrupts is held centrally in these                address stored in the vector location in Program Mem-

   twelve registers.                                                  ory that corresponds to the interrupt. There are 63 dif-

•  IPL<3:0> The current CPU priority level is explic-                 ferent vectors within the IVT (refer to Figure 5-1). These

   itly stored in the IPL bits. IPL<3> is present in the              vectors are contained in locations 0x000004 through

   CORCON register, whereas IPL<2:0> are present                      0x0000FE of program memory (refer to Figure 5-1).

   in the STATUS Register (SR) in the processor                       These locations contain 24-bit addresses, and, in order

   core.                                                              to preserve robustness, an address error trap will take

•  INTCON1<15:0>, INTCON2<15:0>                                       place     should    the  PC  attempt      to  fetch   any    of  these

   Global interrupt control functions are derived from                words during normal execution. This prevents execu-

   these two registers. INTCON1 contains the con-                     tion of random data as a result of accidentally decre-

   trol and status flags for the processor exceptions.                menting a PC into vector space, accidentally mapping

   The INTCON2 register controls the external inter-                  a data space address into vector space, or the PC roll-

   rupt request signal behavior and the use of the                    ing over to 0x000000 after reaching the end of imple-

   alternate vector table.                                            mented program memory space. Execution of a GOTO

                                                                      instruction to this vector space will also generate an

                                                                      address error trap.

 2006-2014 Microchip Technology Inc.                                                                            DS70000178D-page 47
dsPIC30F1010/202X

5.1        Interrupt Priority                                    TABLE 5-1:      dsPIC30F1010/202X

The user-assignable Interrupt Priority (IP<2:0>) bits for                        INTERRUPT VECTOR TABLE

each individual interrupt source are located in the Least        INT     Vector                  Interrupt Source

Significant 3 bits of each nibble, within the IPCx               Number  Number

register(s). Bit 3 of each nibble is not used and is read        Highest Natural Order Priority

as a ‘0’. These bits define the priority level assigned to       0           8   INT0 – External Interrupt 0

a particular interrupt by the user.                              1           9   IC1 – Input Capture 1

Note:       The user selectable priority levels start at         2           10  OC1 – Output Compare 1

            0, as the lowest priority, and level 7, as the       3           11  T1 – Timer 1

            highest priority.                                    4           12  Reserved

Since more than one interrupt request source may be              5           13  OC2 – Output Compare 2

assigned to a specific user specified priority level, a          6           14  T2 – Timer 2

means is provided to assign priority within a given level.       7           15  T3 – Timer 3

This method is called “Natural Order Priority” and is            8           16  SPI1

final.                                                           9           17  U1RX – UART1 Receiver

Natural order priority is determined by the position of an       10          18  U1TX – UART1 Transmitter

interrupt in the vector table, and only affects interrupt        11          19  ADC – ADC Convert Done

operation when multiple interrupts with the same user-           12          20  NVM – NVM Write Complete

assigned priority become pending at the same time.               13          21  SI2C – I2C™ Slave Event

Table 5-1   lists  the  interrupt  numbers   and      interrupt  14          22  MI2C – I2C Master Event

sources for the dsPIC DSC devices and their                      15          23  Reserved

associated vector numbers.                                       16          24  INT1 – External Interrupt 1

Note 1:     The natural order priority scheme has 0              17          25  INT2 – External Interrupt 2

            as     the  highest    priority  and  53  as  the    18          26  PWM Special Event Trigger

            lowest priority.                                     19          27  PWM Gen#1

        2:  The natural order priority number is the             20          28  PWM Gen#2

            same as the INT number.                              21          29  PWM Gen#3

The ability for the user to assign every interrupt to one        22          30  PWM Gen#4

of seven priority levels implies that the user can assign        23          31  Reserved

a very high overall priority level to an interrupt with a        24          32  Reserved

low natural order priority. The INT0 (external interrupt         25          33  Reserved

0) may be assigned to priority level 1, thus giving it a         26          34  Reserved

very low effective priority.                                     27          35  CN – Input Change Notification

                                                                 28          36  Reserved

                                                                 29          37  Analog Comparator 1

                                                                 30          38  Analog Comparator 2

                                                                 31          39  Analog Comparator 3

                                                                 32          40  Analog Comparator 4

                                                                 33          41  Reserved

                                                                 34          42  Reserved

                                                                 35          43  Reserved

                                                                 36          44  Reserved

                                                                 37          45  ADC Pair 0 Conversion Done

                                                                 38          46  ADC Pair 1 Conversion Done

                                                                 39          47  ADC Pair 2 Conversion Done

                                                                 40          48  ADC Pair 3 Conversion Done

                                                                 41          49  ADC Pair 4 Conversion Done

                                                                 42          50  ADC Pair 5 Conversion Done

                                                                 43          51  Reserved

                                                                 44          52  Reserved

                                                                 45-53   53-61   Reserved

                                                                 Lowest Natural Order Priority

DS70000178D-page 48                                                               2006-2014 Microchip Technology Inc.
                                                                        dsPIC30F1010/202X

5.2      Reset Sequence                                             5.3        Traps

A Reset is not a true exception, because the interrupt              Traps can be considered as non-maskable interrupts

controller is not involved in the Reset process. The pro-           indicating a software or hardware error, which adhere

cessor initializes its registers in response to a Reset,            to a predefined priority as shown in Figure 5-1. They

which forces the PC to zero. The processor then begins              are intended to provide the user a means to correct

program       execution  at    location  0x000000.      A    GOTO   erroneous operation during debug and when operating

instruction is stored in the first program memory loca-             within the application.

tion, immediately followed by the address target for the                Note:       If the user does not intend to take correc-

GOTO instruction. The processor executes the GOTO to                                tive action in the event of a Trap Error con-

the specified address and then begins operation at the                              dition, these vectors must be loaded with

specified target (start) address.                                                   the address of a default handler that sim-

5.2.1         RESET SOURCES                                                         ply contains the RESET instruction. If, on

                                                                                    the other hand, one of the vectors contain-

In  addition  to   External    Reset     and  Power-on       Reset                  ing  an    invalid  address      is  called,  an

(POR), there are 6 sources of error conditions which                                address error trap is generated.

‘trap’ to the Reset vector.

•   Watchdog Time-out:                                              Note that many of these trap conditions can only be

    The watchdog has timed out, indicating that the                 detected when they occur. Consequently, the question-

    processor is no longer executing the correct flow               able instruction is allowed to complete prior to trap

    of code.                                                        exception processing. If the user chooses to recover

                                                                    from the error, the result of the erroneous action that

•   Uninitialized W Register Trap:                                  caused the trap may have to be corrected.

    An attempt to use an uninitialized W register as                There    are    8  fixed  priority  levels  for  traps:   Level  8

    an Address Pointer will cause a Reset.                          through Level 15, which implies that the IPL3 is always

•   Illegal Instruction Trap:                                       set during processing of a trap.

    Attempted execution of any unused opcodes will

    result in an illegal instruction trap. Note that a              If the user is not currently executing a trap, and he sets

    fetch of an illegal instruction does not result in an           the IPL<3:0> bits to a value of ‘0111’ (Level 7), then all

    illegal instruction trap if that instruction is flushed         interrupts are disabled, but traps can still be processed.

    prior to execution due to a flow change.                        5.3.1           TRAP SOURCES

•   Trap Lockout:

    Occurrence of multiple Trap conditions                          The following traps are provided with increasing prior-

    simultaneously will cause a Reset.                              ity. However, since all traps can be nested, priority has

                                                                    little effect.

                                                                    Math Error Trap:

                                                                    The Math Error trap executes under the following four

                                                                    circumstances:

                                                                    1.   Should an attempt be made to divide by zero,

                                                                         the divide operation will be aborted on a cycle

                                                                         boundary and the trap taken.

                                                                    2.   If enabled, a Math Error trap will be taken when

                                                                         an arithmetic operation on either accumulator A

                                                                         or B causes an overflow from bit 31 and the

                                                                         accumulator guard bits are not utilized.

                                                                    3.   If enabled, a Math Error trap will be taken when

                                                                         an arithmetic operation on either accumulator A

                                                                         or B causes a catastrophic overflow from bit 39

                                                                         and all saturation is disabled.

                                                                    4.   If the shift amount specified in a shift instruction

                                                                         is    greater   than  the      maximum      allowed  shift

                                                                         amount, a trap will occur.

 2006-2014 Microchip Technology Inc.                                                                     DS70000178D-page 49
dsPIC30F1010/202X

Address Error Trap:                                                  5.3.2                        HARD AND SOFT TRAPS

This     trap  is    initiated    when  any   of     the  following  It is possible that multiple traps can become active

circumstances occurs:                                                within the same cycle (e.g., a misaligned word stack

1.    A misaligned data word access is attempted.                    write to an overflowed address). In such a case, the

2.    A   data     fetch  from    our   unimplemented     data       fixed              priority       shown    in  Figure 5-1          is  implemented,

      memory location is attempted.                                  which may require the user to check if other traps are

                                                                     pending, in order to completely correct the fault.

3.    A data access of an unimplemented program                      ‘Soft’ traps include exceptions of priority level 8 through

      memory location is attempted.                                  level 11, inclusive. The arithmetic error trap (level 11)

4.    An     instruction     fetch     from  vector   space  is      falls into this category of traps.

      attempted.

    Note:       In the MAC class of instructions, wherein            ‘Hard’             traps          include  exceptions          of  priority  level  12

                the data space is split into X and Y data            through level 15, inclusive. The address error (level

                space, unimplemented X space includes                12), stack error (level 13) and oscillator error (level 14)

                all  of   Y  space,     and  unimplemented        Y  traps fall into this category.

                space includes all of X space.                       Each               hard      trap  that    occurs  must            be  acknowledged

5.    Execution of a “BRA         #literal” instruction or a         before code execution of any type may continue. If a

      “GOTO     #literal” instruction, where literal                 lower priority hard trap occurs while a higher priority

      is an unimplemented program memory address.                    trap is pending, acknowledged, or is being processed,

6.    Executing instructions after modifying the PC to               a hard trap conflict will occur.

      point    to    unimplemented           program      memory     The device is automatically Reset in a hard trap conflict

      addresses. The PC may be modified by loading                   condition. The TRAPR Status bit (RCON<15>) is set

      a value into the stack and executing a RETURN                  when the Reset occurs, so that the condition may be

      instruction.                                                   detected in software.

Stack Error Trap:                                                    FIGURE 5-1:                                TRAP VECTORS

This trap is initiated under the following conditions:

1.    The Stack Pointer is loaded with a value which                                                    Reset - GOTO Instruction            0x000000

                                                                                                        Reset - GOTO Address                0x000002

      is  greater    than    the  (user-programmable)     limit                                                     Reserved                0x000004

      value    written    into    the  SPLIM  register    (stack                                        Oscillator Fail Trap Vector

                                                                                                        Address Error Trap Vector

      overflow).                                                            Decreasing                  Stack Error Trap Vector

                                                                                        Priority        Math Error Trap Vector

2.    The Stack Pointer is loaded with a value which                                              IVT           Reserved Vector

      is less than 0x0800 (simple stack underflow).                                                             Reserved Vector

                                                                                                                Reserved Vector

                                                                                                                Interrupt 0 Vector          0x000014

Oscillator Fail Trap:                                                                                           Interrupt 1 Vector

                                                                                                                    —

This trap is initiated if the external oscillator fails and                                                         —

operation becomes reliant on an internal RC backup.                                                                 —

                                                                                                                Interrupt 52 Vector

                                                                                                                Interrupt 53 Vector         0x00007E

                                                                                                                    Reserved                0x000080

                                                                                                                    Reserved                0x000082

                                                                                                                    Reserved                0x000084

                                                                                                        Oscillator Fail Trap Vector

                                                                                                        Stack Error Trap Vector

                                                                                                        Address Error Trap Vector

                                                                                                        Math Error Trap Vector

                                                                                        AIVT                    Reserved Vector

                                                                                                                Reserved Vector

                                                                                                                Reserved Vector

                                                                                                                Interrupt 0 Vector          0x000094

                                                                                                                Interrupt 1 Vector

                                                                                                                    —

                                                                                                                    —

                                                                                                                    —

                                                                                                                Interrupt 52 Vector         0x0000FE

                                                                                                                Interrupt 53 Vector

DS70000178D-page 50                                                                                      2006-2014 Microchip Technology Inc.
                                                                                                    dsPIC30F1010/202X

5.4                                  Interrupt Sequence                                             5.5         Alternate Vector Table

All interrupt event flags are sampled in the beginning of                                           In Program Memory, the IVT is followed by the AIVT, as

each instruction cycle by the IFSx registers. A pending                                             shown in Figure 5-1. Access to the Alternate Vector

interrupt request (IRQ) is indicated by the flag bit being                                          Table is provided by the ALTIVT bit in the INTCON2

equal to a ‘1’ in an IFSx register. The IRQ will cause an                                           register. If the ALTIVT bit is set, all interrupt and excep-

interrupt to occur if the corresponding bit in the interrupt                                        tion processes will use the alternate vectors instead of

enable (IECx) register is set. For the remainder of the                                             the default vectors. The alternate vectors are organized

instruction cycle, the priorities of all pending interrupt                                          in the same manner as the default vectors. The AIVT

requests are evaluated.                                                                             supports emulation and debugging efforts by providing

If there is a pending IRQ with a priority level greater                                             a means to switch between an application and a sup-

than the current processor priority level in the IPL bits,                                          port environment, without requiring the interrupt vec-

the processor will be interrupted.                                                                  tors to be reprogrammed. This feature also enables

                                                                                                    switching   between      applications         for  evaluation     of

The                                  processor  then      stacks     the   current       Program    different software algorithms at run time.

Counter and the low byte of the processor STATUS                                                    If the AIVT is not required, the program memory allo-

Register (SRL), as shown in Figure 5-2. The low byte                                                cated to the AIVT may be used for other purposes.

of the STATUS register contains the processor priority                                              AIVT   is   not  a  protected   section      and   may   be   freely

level at the time, prior to the beginning of the interrupt                                          programmed by the user.

cycle. The processor then loads the priority level for

this interrupt into the STATUS register. This action will                                           5.6         Fast Context Saving

disable all lower priority interrupts until the completion

of the Interrupt Service Routine (ISR).                                                             A context saving option is available using shadow reg-

                                                                                                    isters. Shadow registers are provided for the DC, N,

FIGURE 5-2:                                           INTERRUPT STACK                               OV, Z and C bits in SR, and the registers W0 through

                                                      FRAME                                         W3. The shadows are only one level deep. The shadow

                                                                                                    registers are accessible using the PUSH.S and POP.S

0x0000 15                                                      0                                    instructions only.

Stack Grows Towards                                                                                 When   the       processor    vectors    to   an   interrupt,  the

                     Higher Address                                                                 PUSH.S instruction can be used to store the current

                                                                                                    value  of   the     aforementioned       registers      into   their

                                                                                                    respective shadow registers.

                                          PC<15:0>                       W15 (before CALL)          If an ISR of a certain priority uses the PUSH.S and

                                     SRL  IPL3      PC<22:16>                                       POP.S      instructions  for   fast  context       saving,  then  a

                                                                W15 (after CALL)         higher priority ISR should not include the same instruc-

                                                                           POP   :  [--W15]         tions. Users must save the key registers in software

                                                                           PUSH  :  [W15++]         during a lower priority interrupt, if the higher priority ISR

                                                                                                    uses fast context saving.

                     Note 1:             The    user  can      always      lower    the  priority   5.7         External Interrupt Requests

                                         level by writing a new value into SR. The                  The interrupt controller supports three external inter-

                                         Interrupt Service Routine must clear the                   rupt request signals, INT0-INT2. These inputs are edge

                                         interrupt    flag     bits  in    the   IFSx    register   sensitive; they require a low-to-high or a high-to-low

                                         before     lowering      the    processor     interrupt    transition to generate an interrupt request. The INT-

                                         priority,    in  order        to  avoid       recursive    CON2   register     has  three  bits,    INT0EP-INT2EP,        that

                                         interrupts.                                                select the polarity of the edge detection circuitry.

                                     2:  The    IPL3      bit  (CORCON<3>)          is   always

                                         clear   when          interrupts  are      being     pro-  5.8         Wake-up from Sleep and Idle

                                         cessed. It is set only during execution of                 The interrupt controller may be used to wake-up the

                                         traps.                                                     processor from either Sleep or Idle modes, if Sleep or

The                  RETFIE               (Return     from     Interrupt)        instruction  will  Idle mode is active when the interrupt is generated.

unstack the Program Counter and status registers to                                                 If an enabled interrupt request of sufficient priority is

return the processor to its state prior to the interrupt                                            received by the interrupt controller, then the standard

sequence.                                                                                           interrupt request is presented to the processor. At the

                                                                                                    same time, the processor will wake-up from Sleep or

                                                                                                    Idle   and  begin   execution        of  the  Interrupt     Service

                                                                                                    Routine needed to process the interrupt request.

 2006-2014 Microchip Technology Inc.                                                                                                        DS70000178D-page 51
dsPIC30F1010/202X

REGISTER 5-1:        INTCON1: INTERRUPT CONTROL REGISTER 1

     R/W-0         R/W-0            R/W-0           R/W-0  R/W-0                 R/W-0         R/W-0        R/W-0

     NSTDIS        OVAERR   OVBERR            COVAERR      COVBERR               OVATE  OVBTE         COVTE

bit 15                                                                                                           bit 8

     R/W-0         R/W-0            U-0             R/W-0  R/W-0                 R/W-0         R/W-0        U-0

SFTACERR           DIV0ERR          —         MATHERR      ADDRERR     STKERR           OSCFAIL             —

bit 7                                                                                                            bit 0

Legend:

R = Readable bit            W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR           ‘1’ = Bit is set               ‘0’ = Bit is cleared         x = Bit is unknown

bit  15      NSTDIS: Interrupt Nesting Disable bit

             1=      Interrupt nesting is disabled

             0=      Interrupt nesting is enabled

bit  14      OVAERR: Accumulator A Overflow Trap Flag bit

             1=      Trap was caused by overflow of Accumulator A

             0=      Trap was not caused by overflow of Accumulator A

bit  13      OVBERR: Accumulator B Overflow Trap Flag bit

             1=      Trap was caused by overflow of Accumulator B

             0=      Trap was not caused by overflow of Accumulator B

bit  12      COVAERR: Accumulator A Catastrophic Overflow Trap Enable bit

             1=      Trap was caused by catastrophic overflow of Accumulator A

             0=      Trap was not caused by catastrophic overflow of Accumulator A

bit  11      COVBERR: Accumulator B Catastrophic Overflow Trap Enable bit

             1=      Trap was caused by catastrophic overflow of Accumulator B

             0=      Trap was not caused by catastrophic overflow of Accumulator B

bit  10      OVATE: Accumulator A Overflow Trap Enable bit

             1=      Trap overflow of Accumulator A

             0=      Trap disabled

bit  9       OVBTE: Accumulator B Overflow Trap Enable bit

             1=      Trap overflow of Accumulator B

             0=      Trap disabled

bit  8       COVTE: Catastrophic Overflow Trap Enable bit

             1=      Trap on catastrophic overflow of Accumulator A or B enabled

             0=      Trap disabled

bit  7       SFTACERR: Shift Accumulator Error Status bit

             1=      Math error trap was caused by an invalid accumulator shift

             0=      Math error trap was not caused by an invalid accumulator shift

bit  6       DIV0ERR: Arithmetic Error Status bit

             1=      Math error trap was caused by a divided by zero

             0=      Math error trap was not caused by an invalid accumulator shift

bit  5       Unimplemented: Read as ‘0’

bit  4       MATHERR: Arithmetic Error Status bit

             1=      Overflow trap has occurred

             0=      Overflow trap has not occurred

bit  3       ADDRERR: Address Error Trap Status bit

             1=      Address error trap has occurred

             0=      Address error trap has not occurred

DS70000178D-page 52                                                                   2006-2014 Microchip Technology Inc.
                                                         dsPIC30F1010/202X

REGISTER 5-1:  INTCON1: INTERRUPT CONTROL                REGISTER 1 (CONTINUED)

bit 2  STKERR: Stack Error Trap Status bit

       1=      Stack error trap has occurred

       0=      Stack error trap has not occurred

bit 1  OSCFAIL: Oscillator Failure Trap Status bit

       1=      Oscillator failure trap has occurred

       0=      Oscillator failure trap has not occurred

bit 0  Unimplemented: Read as ‘0’

 2006-2014 Microchip Technology Inc.                                            DS70000178D-page 53
dsPIC30F1010/202X

REGISTER 5-2:        INTCON2: INTERRUPT CONTROL REGISTER 2

     R/W-0           R-0   U-0                       U-0  U-0                   U-0           U-0           U-0

     ALTIVT          DISI  —                         —            —             —             —             —

bit 15                                                                                                           bit 8

        U-0          U-0   U-0                       U-0  U-0                   R/W-0         R/W-0         R/W-0

         —           —     —                         —            —             INT2EP  INT1EP       INT0EP

bit 7                                                                                                            bit 0

Legend:

R = Readable bit           W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR          ‘1’ = Bit is set               ‘0’ = Bit is cleared          x = Bit is unknown

bit  15      ALTIVT: Enable Alternate Interrupt Vector Table bit

             1=      Use alternate vector table

             0=      Use standard (default) vector table

bit  14      DISI:   DISI Instruction Status bit

             1=      DISI instruction is active

             0=      DISI instruction is not active

bit  13-3    Unimplemented: Read as ‘0’

bit  2       INT2EP: External Interrupt 2 Edge Detect Polarity Select bit

             1=      Interrupt on negative edge

             0=      Interrupt on positive edge

bit  1       INT1EP: External Interrupt 1 Edge Detect Polarity Select bit

             1=      Interrupt on negative edge

             0=      Interrupt on positive edge

bit  0       INT0EP: External Interrupt 0 Edge Detect Polarity Select bit

             1=      Interrupt on negative edge

             0=      Interrupt on positive edge

DS70000178D-page 54                                                                 2006-2014 Microchip Technology Inc.
                                                                   dsPIC30F1010/202X

REGISTER 5-3:      IFS0: INTERRUPT FLAG STATUS REGISTER 0

         U-0       R/W-0               R/W-0   R/W-0        R/W-0                 R/W-0   R/W-0               R/W-0

         —         MI2CIF              SI2CIF  NVMIF        ADIF                  U1TXIF  U1RXIF              SPI1IF

bit 15                                                                                                        bit     8

     R/W-0         R/W-0               R/W-0       U-0      R/W-0                 R/W-0   R/W-0               R/W-0

        T3IF       T2IF                OC2IF       —              T1IF            OC1IF   IC1IF               INT0IF

bit 7                                                                                                         bit     0

Legend:

R = Readable bit           W = Writable bit                 U = Unimplemented bit, read   as ‘0’

-n = Value at POR          ‘1’ = Bit is set                 ‘0’ = Bit is cleared          x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14       MI2CIF: I2C Master Events Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  13       SI2CIF: I2C Slave Events Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  12       NVMIF: Nonvolatile Memory Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  11       ADIF: ADC Conversion Complete Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  10       U1TXIF: UART1 Transmitter Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  9        U1RXIF: UART1 Receiver Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  8        SPI1IF: SPI1 Event Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  7        T3IF: Timer3 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  6        T2IF: Timer2 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  5        OC2IF: Output Compare Channel 2 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  4        Unimplemented: Read as ‘0’

bit  3        T1IF: Timer1 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

 2006-2014 Microchip Technology Inc.                                                             DS70000178D-page 55
dsPIC30F1010/202X

REGISTER  5-3:       IFS0: INTERRUPT FLAG STATUS REGISTER 0          (CONTINUED)

bit 2     OC1IF: Output Compare Channel 1 Interrupt Flag Status bit

          1=         Interrupt request has occurred

          0=         Interrupt request has not occurred

bit 1     IC1IF: Input Capture Channel 1 Interrupt Flag Status bit

          1=         Interrupt request has occurred

          0=         Interrupt request has not occurred

bit 0     INT0IF: External Interrupt 0 Flag Status bit

          1=         Interrupt request has occurred

          0=         Interrupt request has not occurred

DS70000178D-page 56                                                   2006-2014 Microchip  Technology  Inc.
                                                            dsPIC30F1010/202X

REGISTER 5-4:      IFS1: INTERRUPT FLAG STATUS REGISTER 1

     R/W-0         R/W-0               R/W-0       U-0      R/W-0                 U-0           U-0          U-0

     AC3IF         AC2IF               AC1IF       —        CNIF                  —             —            —

bit 15                                                                                                            bit 8

         U-0       R/W-0               R/W-0  R/W-0         R/W-0                 R/W-0         R/W-0        R/W-0

         —         PWM4IF  PWM3IF             PWM2IF        PWM1IF       PSEMIF          INT2IF              INT1IF

bit 7                                                                                                             bit 0

Legend:

R = Readable bit           W = Writable bit                 U = Unimplemented bit, read as ‘0’

-n = Value at POR          ‘1’ = Bit is set                 ‘0’ = Bit is cleared         x = Bit is unknown

bit  15       AC3IF: Analog Comparator #3 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  14       AC2IF: Analog Comparator #2 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  13       AC1IF: Analog Comparator #1 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  12       Unimplemented: Read as ‘0’

bit  11       CNIF: Input Change Notification Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  10-7     Unimplemented: Read as ‘0’

bit  6        PWM4IF: Pulse Width Modulation Generator #4 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  5        PWM3IF: Pulse Width Modulation Generator #3 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  4        PWM2IF: Pulse Width Modulation Generator #2 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  3        PWM1IF: Pulse Width Modulation Generator #1 Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  2        PSEMIF: PWM Special Event Match Interrupt Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  1        INT2IF: External Interrupt 2 Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

bit  0        INT1IF: External Interrupt 1 Flag Status bit

              1=   Interrupt request has occurred

              0=   Interrupt request has not occurred

 2006-2014 Microchip Technology Inc.                                                           DS70000178D-page 57
dsPIC30F1010/202X

REGISTER 5-5:        IFS2: INTERRUPT FLAG STATUS REGISTER 2

        U-0          U-0    U-0                      U-0  U-0                   R/W-0  R/W-00              R/W-0

         —           —      —                        —    —          ADCP5IF           ADCP4IF     ADCP3IF

bit 15                                                                                                     bit 8

     R/W-0         R/W-0    R/W-0                    U-0  U-0                   U-0           U-0          R/W-0

     ADCP2IF       ADCP1IF  ADCP0IF                  —    —                     —             —            AC4IF

bit 7                                                                                                      bit 0

Legend:

R = Readable bit            W = Writable bit              U = Unimplemented bit, read as ‘0’

-n = Value at POR           ‘1’ = Bit is set              ‘0’ = Bit is cleared         x = Bit is unknown

bit  15-11    Unimplemented: Read as ‘0’

bit  10       ADCP5IF: ADC Pair 5 Conversion Done Interrupt Flag     Status     bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

bit  9        ADCP4IF: ADC Pair 4 Conversion Done Interrupt Flag     Status     bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

bit  8        ADCP3IF: ADC Pair 3 Conversion Done Interrupt Flag     Status     bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

bit  7        ADCP2IF: ADC Pair 2 Conversion Done Interrupt Flag     Status     bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

bit  6        ADCP1IF: ADC Pair 1 Conversion Done Interrupt Flag     Status     bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

bit  5        ADCP0IF: ADC Pair 0 Conversion Done Interrupt Flag     Status     bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

bit  4-1      Unimplemented: Read as ‘0’

bit  0        AC4IF: Analog Comparator #4 Interrupt Flag Status bit

              1=     Interrupt request has occurred

              0=     Interrupt request has not occurred

DS70000178D-page 58                                                                   2006-2014 Microchip Technology Inc.
                                                              dsPIC30F1010/202X

REGISTER 5-6:      IEC0:   INTERRUPT ENABLE CONTROL REGISTER 0

         U-0       R/W-0               R/W-0      R/W-0       R/W-0                R/W-0   R/W-0               R/W-0

         —         MI2CIE              SI2CIE    NVMIE        ADIE                 U1TXIE  U1RXIE              SPI1IE

bit 15                                                                                                         bit     8

     R/W-0         R/W-0               R/W-0      U-0         R/W-0                R/W-0   R/W-0               R/W-0

        T3IE       T2IE                OC2IE      —           T1IE                 OC1IE   IC1IE               INT0IE

bit 7                                                                                                          bit     0

Legend:

R = Readable bit           W = Writable bit                  U = Unimplemented bit, read   as ‘0’

-n = Value at POR          ‘1’ = Bit is set                  ‘0’ = Bit is cleared          x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14       MI2CIE: I2C Master Events Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  13       SI2CIE: I2C Slave Events Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  12       NVMIE: Nonvolatile Memory Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  11       ADIE: ADC Conversion Complete Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  10       U1TXIE: UART1 Transmitter Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  9        U1RXIE: UART1 Receiver Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  8        SPI1IE: SPI1 Event Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  7        T3IE: Timer3 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  6        T2IE: Timer2 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  5        OC2IE: Output Compare Channel 2 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  4        Unimplemented: Read as ‘0’

bit  3        T1IE: Timer1 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

 2006-2014 Microchip Technology Inc.                                                              DS70000178D-page 59
dsPIC30F1010/202X

REGISTER  5-6:       IEC0: INTERRUPT ENABLE CONTROL REGISTER    0  (CONTINUED)

bit 2     OC1IE: Output Compare Channel 1 Interrupt Enable bit

          1=         Interrupt request enabled

          0=         Interrupt request not enabled

bit 1     IC1IE: Input Capture Channel 1 Interrupt Enable bit

          1=         Interrupt request enabled

          0=         Interrupt request not enabled

bit 0     INT0IE: External Interrupt 0 Enable bit

          1=         Interrupt request enabled

          0=         Interrupt request not enabled

DS70000178D-page 60                                               2006-2014 Microchip  Technology  Inc.
                                                                dsPIC30F1010/202X

REGISTER 5-7:      IEC1: INTERRUPT ENABLE CONTROL REGISTER 1

     R/W-0         R/W-0               R/W-0      U-0    R/W-0                 U-0           U-0           U-0

     AC3IE         AC2IE               AC1IE      —      CNIE                  —             —             —

bit 15                                                                                                          bit 8

         U-0       R/W-0               R/W-0      R/W-0  R/W-0                 R/W-0         R/W-0         R/W-0

         —         PWM4IE  PWM3IE             PWM2IE     PWM1IE      PSEMIE            INT2IE              INT1IE

bit 7                                                                                                           bit 0

Legend:

R = Readable bit           W = Writable bit              U = Unimplemented bit, read as ‘0’

-n = Value at POR          ‘1’ = Bit is set              ‘0’ = Bit is cleared          x = Bit is unknown

bit  15       AC3IE: Analog Comparator #3 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  14       AC2IE: Analog Comparator #2 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  13       AC1IE: Analog Comparator #1 Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  12       Unimplemented: Read as ‘0’

bit  11       CNIE: Input Change Notification Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  10-7     Unimplemented: Read as ‘0’

bit  6        PWM4IE: Pulse Width Modulation Generator #4 Interrupt  Enable       bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  5        PWM3IE: Pulse Width Modulation Generator #3 Interrupt  Enable       bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  4        PWM2IE: Pulse Width Modulation Generator #2 Interrupt  Enable       bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  3        PWM1IE: Pulse Width Modulation Generator #1 Interrupt  Enable       bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  2        PSEMIE: PWM Special Event Match Interrupt Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  1        INT2IE: External Interrupt 2 Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

bit  0        INT1IE: External Interrupt 1 Enable bit

              1=   Interrupt request enabled

              0=   Interrupt request not enabled

 2006-2014 Microchip Technology Inc.                                                        DS70000178D-page 61
dsPIC30F1010/202X

REGISTER 5-8:        IEC2: INTERRUPT ENABLE CONTROL REGISTER 2

        U-0          U-0    U-0                     U-0  U-0                    R/W-0        R/W-0         R/W-0

        —            —      —                       —    —                 ADCP5IE     ADCP4IE      ADCP3IE

bit 15                                                                                                     bit 8

     R/W-0         R/W-0    R/W-0                   U-0  U-0                    U-0          U-0           R/W-0

     ADCP2IE       ADCP1IE  ADCP0IE                 —    —                      —            —             AC4IE

bit 7                                                                                                      bit 0

Legend:

R = Readable bit            W = Writable bit             U = Unimplemented bit, read as ‘0’

-n = Value at POR           ‘1’ = Bit is set             ‘0’ = Bit is cleared          x = Bit is unknown

bit  15-11    Unimplemented: Read as ‘0’

bit  10       ADCP5IE: ADC Pair 5 Conversion done        Interrupt Enable  bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

bit  9        ADCP4IE: ADC Pair 4 Conversion done        Interrupt Enable  bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

bit  8        ADCP3IE: ADC Pair 3 Conversion done        Interrupt Enable  bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

bit  7        ADCP2IE: ADC Pair 2 Conversion done        Interrupt Enable  bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

bit  6        ADCP1IE: ADC Pair 1 Conversion done        Interrupt Enable  bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

bit  5        ADCP0IE: ADC Pair 0 Conversion done        Interrupt Enable  bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

bit  4-1      Unimplemented: Read as ‘0’

bit  0        AC4IE: Analog Comparator #4 Interrupt      Enable bit

              1=     Interrupt request enabled

              0=     Interrupt request not enabled

DS70000178D-page 62                                                                 2006-2014 Microchip Technology Inc.
                                                               dsPIC30F1010/202X

REGISTER 5-9:      IPC0: INTERRUPT PRIORITY CONTROL REGISTER 0

         U-0       R/W-1               R/W-0      R/W-0        U-0                   R/W-1         R/W-0        R/W-0

         —                T1IP<2:0>                            —                            OC1IP<2:0>

bit 15                                                                                                          bit 8

         U-0       R/W-1               R/W-0      R/W-0        U-0                   R/W-1         R/W-0        R/W-0

         —                IC1IP<2:0>                           —                            INT0IP<2:0>

bit 7                                                                                                           bit 0

Legend:

R = Readable bit          W = Writable bit                     U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set                     ‘0’ = Bit is cleared         x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14-12    T1IP<2:0>: Timer1 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  11       Unimplemented: Read as ‘0’

bit  10-8     OC1IP<2:0>: Output Compare Channel 1 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  7        Unimplemented: Read as ‘0’

bit  6-4      IC1IP<2:0>: Input Capture Channel 1 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  3        Unimplemented: Read as ‘0’

bit  2-0      INT0IP<2:0>: External Interrupt 0 Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

 2006-2014 Microchip Technology Inc.                                                              DS70000178D-page 63
dsPIC30F1010/202X

REGISTER 5-10:       IPC1: INTERRUPT PRIORITY CONTROL REGISTER 1

         U-0       R/W-1  R/W-0                   R/W-0  U-0                   R/W-1         R/W-0        R/W-0

         —                T3IP<2:0>                      —                            T2IP<2:0>

bit 15                                                                                                         bit 8

         U-0       R/W-1  R/W-0                   R/W-0  U-0                   U-0           U-0          U-0

         —                OC2IP<2:0>                     —                     —             —            —

bit 7                                                                                                          bit 0

Legend:

R = Readable bit          W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set               ‘0’ = Bit is cleared         x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14-12    T3IP<2:0>: Timer3 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  11       Unimplemented: Read as ‘0’

bit  10-8     T2IP<2:0>: Timer2 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  7        Unimplemented: Read as ‘0’

bit  6-4      OC2IP<2:0>: Output Compare Channel 2 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  3-0      Unimplemented: Read as ‘0’

DS70000178D-page 64                                                                2006-2014 Microchip Technology Inc.
                                                               dsPIC30F1010/202X

REGISTER 5-11:     IPC2: INTERRUPT PRIORITY CONTROL REGISTER 2

         U-0       R/W-1               R/W-0      R/W-0        U-0              R/W-1        R/W-0         R/W-0

         —                ADIP<2:0>                            —                       U1TXIP<2:0>

bit 15                                                                                                     bit 8

         U-0       R/W-1               R/W-0      R/W-0        U-0              R/W-1        R/W-0         R/W-0

         —                U1RXIP<2:0>                          —                       SPI1IP<2:0>

bit 7                                                                                                      bit 0

Legend:

R = Readable bit          W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set               ‘0’ = Bit is cleared          x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14-12    ADIP<2:0>: ADC Conversion Complete Interrupt Priority       bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  11       Unimplemented: Read as ‘0’

bit  10-8     U1TXIP<2:0>: UART1 Transmitter Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  7        Unimplemented: Read as ‘0’

bit  6-4      U1RXIP<2:0>: UART1 Receiver Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  3        Unimplemented: Read as ‘0’

bit  2-0      SPI1IP<2:0>: SPI1 Event Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

 2006-2014 Microchip Technology Inc.                                                        DS70000178D-page 65
dsPIC30F1010/202X

REGISTER 5-12:       IPC3: INTERRUPT PRIORITY CONTROL REGISTER 3

        U-0          U-0  U-0                    U-0    U-0                   R/W-1  R/W-0               R/W-0

        —            —    —                      —      —                            MI2CIP<2:0>

bit 15                                                                                                   bit    8

        U-0        R/W-1  R/W-0                  R/W-0  U-0                   R/W-1  R/W-0               R/W-0

        —                 SI2CIP<2:0>                   —                            NVMIP<2:0>

bit 7                                                                                                    bit    0

Legend:

R = Readable bit          W = Writable bit              U = Unimplemented bit, read  as ‘0’

-n = Value at POR         ‘1’ = Bit is set              ‘0’ = Bit is cleared         x = Bit is unknown

bit  15-11   Unimplemented: Read as ‘0’

bit  10-8    MI2CIP<2:0>: I2C Master Events Interrupt Priority bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit  7       Unimplemented: Read as ‘0’

bit  6-4     SI2CIP<2:0>: I2C Slave Events Interrupt Priority bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit  3       Unimplemented: Read as ‘0’

bit  2-0     NVMIP<2:0>: Nonvolatile Memory Interrupt Priority bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

DS70000178D-page 66                                                            2006-2014 Microchip Technology Inc.
                                                               dsPIC30F1010/202X

REGISTER 5-13:     IPC4: INTERRUPT PRIORITY CONTROL REGISTER 4

         U-0       R/W-1               R/W-0      R/W-0        U-0                   R/W-1         R/W-0        R/W-0

         —                PWM1IP<2:0>                          —                            PSEMIP<2:0>

bit 15                                                                                                          bit 8

         U-0       R/W-1               R/W-0      R/W-0        U-0                   R/W-1         R/W-0        R/W-0

         —                INT2IP<2:0>                          —                            INT1IP<2:0>

bit 7                                                                                                           bit 0

Legend:

R = Readable bit          W = Writable bit                     U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set                     ‘0’ = Bit is cleared         x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14-12    PWM1IP<2:0>: PWM Generator #1 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  11       Unimplemented: Read as ‘0’

bit  10-8     PSEMIP<2:0>: PWM Special Event Match Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  7        Unimplemented: Read as ‘0’

bit  6-4      INT2IP<2:0>: External Interrupt 2 Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  3        Unimplemented: Read as ‘0’

bit  2-0      INT1IP<2:0>: External Interrupt 1 Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

 2006-2014 Microchip Technology Inc.                                                              DS70000178D-page 67
dsPIC30F1010/202X

REGISTER 5-14:       IPC5: INTERRUPT PRIORITY CONTROL REGISTER 5

        U-0          U-0  U-0                        U-0  U-0                   R/W-1         R/W-0        R/W-0

        —            —    —                          —    —                            PWM4IP<2:0>

bit 15                                                                                                     bit 8

        U-0        R/W-1  R/W-0                  R/W-0    U-0                   R/W-1         R/W-0        R/W-0

        —                 PWM3IP<2:0>                     —                            PWM2IP<2:0>

bit 7                                                                                                      bit 0

Legend:

R = Readable bit          W = Writable bit                U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set                ‘0’ = Bit is cleared         x = Bit is unknown

bit  15-11   Unimplemented: Read as ‘0’

bit  10-8    PWM4IP<2:0>: PWM Generator #4           Interrupt Priority   bits

             111 = Interrupt is priority 7 (highest  priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit  7       Unimplemented: Read as ‘0’

bit  6-4     PWM3IP<2:0>: PWM Generator #3           Interrupt Priority   bits

             111 = Interrupt is priority 7 (highest  priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit  3       Unimplemented: Read as ‘0’

bit  2-0     PWM2IP<2:0>: PWM Generator #2           Interrupt Priority   bits

             111 = Interrupt is priority 7 (highest  priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

DS70000178D-page 68                                                              2006-2014 Microchip Technology Inc.
                                                        dsPIC30F1010/202X

REGISTER 5-15:     IPC6: INTERRUPT PRIORITY CONTROL REGISTER                       6

        U-0        R/W-1               R/W-0     R/W-0  U-0                   U-0        U-0                  U-0

        —                 CNIP<2:0>                     —                     —                  —            —

bit 15                                                                                                             bit  8

        U-0        U-0                 U-0       U-0    U-0                   U-0        U-0                  U-0

        —          —                   —         —      —                     —                  —            —

bit 7                                                                                                              bit  0

Legend:

R = Readable bit          W = Writable bit              U = Unimplemented bit,     read  as ‘0’

-n = Value at POR         ‘1’ = Bit is set              ‘0’ = Bit is cleared             x = Bit is  unknown

bit 15       Unimplemented: Read as ‘0’

bit 14-12    CNIP<2:0>: Change Notification Interrupt Priority bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit 11-0     Unimplemented: Read as ‘0’

 2006-2014 Microchip Technology Inc.                                                            DS70000178D-page 69
dsPIC30F1010/202X

REGISTER 5-16:       IPC7: INTERRUPT PRIORITY CONTROL REGISTER 7

         U-0       R/W-1  R/W-0                   R/W-0  U-0                   R/W-1         R/W-0        R/W-0

         —                AC3IP<2:0>                     —                            AC2IP<2:0>

bit 15                                                                                                         bit 8

         U-0       R/W-1  R/W-0                   R/W-0  U-0                   U-0           U-0          U-0

         —                AC1IP<2:0>                     —                     —             —            —

bit 7                                                                                                          bit 0

Legend:

R = Readable bit          W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set               ‘0’ = Bit is cleared         x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14-12    AC3IP<2:0>: Analog Comparator 3 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  11       Unimplemented: Read as ‘0’

bit  10-8     AC2IP<2:0>: Analog Comparator 2 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  7        Unimplemented: Read as ‘0’

bit  6-4      AC1IP<2:0>: Analog Comparator 1 Interrupt Priority bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  3-0      Unimplemented: Read as ‘0’

DS70000178D-page 70                                                                2006-2014 Microchip Technology Inc.
                                                      dsPIC30F1010/202X

REGISTER 5-17:     IPC8: INTERRUPT PRIORITY CONTROL REGISTER 8

        U-0        U-0                 U-0       U-0  U-0                   U-0           U-0          U-0

         —         —                   —         —    —                     —             —            —

bit 15                                                                                                      bit 8

        U-0        U-0                 U-0       U-0  U-0                   R/W-1         R/W-0        R/W-0

         —         —                   —         —    —                            AC4IP<2:0>

bit 7                                                                                                       bit 0

Legend:

R = Readable bit        W = Writable bit              U = Unimplemented bit, read as ‘0’

-n = Value at POR       ‘1’ = Bit is set              ‘0’ = Bit is cleared         x = Bit is unknown

bit 15-3     Unimplemented: Read as ‘0’

bit 2-0      AC4IP<2:0>: Analog Comparator 4 Interrupt Priority bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

 2006-2014 Microchip Technology Inc.                                                     DS70000178D-page 71
dsPIC30F1010/202X

REGISTER 5-18:       IPC9: INTERRUPT PRIORITY CONTROL REGISTER 9

         U-0       R/W-1  R/W-0                   R/W-0  U-0                   R/W-1         R/W-0            R/W-0

         —                ADCP2IP<2:0>                   —                                ADCP1IP<2:0>

bit 15                                                                                                             bit 8

         U-0       R/W-1  R/W-0                   R/W-0  U-0                   U-0           U-0              U-0

         —                ADCP0IP<2:0>                   —                          —        —                —

bit 7                                                                                                              bit 0

Legend:

R = Readable bit          W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set               ‘0’ = Bit is cleared             x = Bit is unknown

bit  15       Unimplemented: Read as ‘0’

bit  14-12    ADCP2IP<2:0>: ADC Pair 2 Conversion Done Interrupt          Priority  bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  11       Unimplemented: Read as ‘0’

bit  10-8     ADCP1IP<2:0>: ADC Pair 1 Conversion Done Interrupt          Priority  bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  7        Unimplemented: Read as ‘0’

bit  6-4      ADCP0IP<2:0>: ADC Pair 0 Conversion Done Interrupt          Priority  bits

              111 = Interrupt is priority 7 (highest priority interrupt)

              •

              •

              •

              001 = Interrupt is priority 1

              000 = Interrupt source is disabled

bit  3-0      Unimplemented: Read as ‘0’

DS70000178D-page 72                                                                     2006-2014 Microchip Technology Inc.
                                                        dsPIC30F1010/202X

REGISTER 5-19:     IPC10: INTERRUPT PRIORITY CONTROL REGISTER 10

        U-0        U-0                 U-0       U-0    U-0                   R/W-1         R/W-0            R/W-0

        —          —                   —         —      —                                ADCP5IP<2:0>

bit 15                                                                                                       bit 8

        U-0        R/W-1               R/W-0     R/W-0  U-0                   R/W-1         R/W-0            R/W-0

        —                 ADCP4IP<2:0>                  —                                ADCP3IP<2:0>

bit 7                                                                                                        bit 0

Legend:

R = Readable bit          W = Writable bit              U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set              ‘0’ = Bit is cleared             x = Bit is unknown

bit  15-11   Unimplemented: Read as ‘0’

bit  10 - 8  ADCP5IP<2:0>: ADC Pair 5 Conversion Done Interrupt          Priority  bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit  7       Unimplemented: Read as ‘0’

bit  6-4     ADCP4IP<2:0>: ADC Pair 4 Conversion Done Interrupt          Priority  bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

bit  3       Unimplemented: Read as ‘0’

bit  2-0     ADCP3IP<2:0>: ADC Pair 3 Conversion Done Interrupt          Priority  bits

             111 = Interrupt is priority 7 (highest priority interrupt)

             •

             •

             •

             001 = Interrupt is priority 1

             000 = Interrupt source is disabled

 2006-2014 Microchip Technology Inc.                                                       DS70000178D-page 73
dsPIC30F1010/202X

REGISTER 5-20:       INTTREG:  INTERRUPT CONTROL             AND  STATUS REGISTER

        U-0          U-0       U-0          U-0              R-0               R-0            R-0           R-0

        —            —         —            —                                       ILR<3:0>

bit 15                                                                                                           bit  8

        U-0          R-0       R-0          R-0              R-0               R-0            R-0           R-0

        —                                                VECNUM<6:0>

bit 7                                                                                                            bit  0

Legend:

R = Readable bit          W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set               ‘0’ = Bit is cleared       x = Bit is     unknown

bit  15-12   Unimplemented: Read as ‘0’

bit  11-8    ILR: New CPU Interrupt Priority Level bits

             1111 = CPU Interrupt Priority Level is 15

             •

             •

             •

             0001 = CPU Interrupt Priority Level is 1

             0000 = CPU Interrupt Priority Level is 0

bit  7       Unimplemented: Read as ‘0’

bit  6-0     VECNUM: Vector Number of Pending Interrupt bits

             0111111 = Interrupt Vector pending is number 135

             •

             •

             •

             0000001 = Interrupt Vector pending is number 9

             0000000 = Interrupt Vector pending is number 8

DS70000178D-page 74                                                             2006-2014 Microchip Technology Inc.
 2006-2014 Microchip Technology Inc.  TABLE    5-2:  INTERRUPT CONTROLLER REGISTER MAP

                                       SFR      ADR   Bit 15  Bit 14  Bit 13        Bit 12  Bit 11   Bit 10   Bit 9         Bit 8    Bit 7     Bit 6    Bit 5         Bit 4    Bit 3      Bit 2   Bit 1        Bit 0         Reset State

                                       Name

                                       INTCON1  0080  NSTDIS  OVAERR  OVBERR      COVAERR   COVBERR  OVATE    OVBTE         COVTE    SFTACERR  DIV0ERR  —             MATHERR  ADDRERR    STKERR  OSCFAIL      —       0000  0000  0000   0000

                                       INTCON2  0082  ALTIVT  DISI    —             —       —        —         —            —        —         —        —             —        —          INT2EP  INT1EP       INT0EP  0000  0000  0000   0000

                                       IFS0     0084  —       MI2CIF  SI2CIF        NVMIF   ADIF     U1TXIF   U1RXIF        SPI1IF   T3IF      T2IF     OC2IF         —        T1IF       OC1IF   IC1IF        INT0IF  0000  0000  0000   0000

                                       IFS1     0086  AC3IF   AC2IF   AC1IF         —       CNIF     —         —            —        —         PWM4IF   PWM3IF        PWM2IF   PWM1IF     PSEMIF  INT2IF       INT1IF  0000  0000  0000   0000

                                       IFS2     0088  —       —       —             —       —        ADCP5IF  ADCP4IF       ADCP3IF  ADCP2IF   ADCP1IF  ADCP0IF       —        —          —       —            AC4IF   0000  0000  0000   0000

                                       IEC0     0094  —       MI2CIE  SI2CIE        NVMIE   ADIE     U1TXIE   U1RXIE        SPI1IE   T3IE      T2IE     OC2IE         —        T1IE       OC1IE   IC1IE        INT0IE  0000  0000  0000   0000

                                       IEC1     0096  AC3IE   AC2IE   AC1IE         —       CNIE     —         —            —        —         PWM4IE   PWM3IE        PWM2IE   PWM1IE     PSEMIE  INT2IE       INT1IE  0000  0000  0000   0000

                                       IEC2     0098  —       —       —             —       —        ADCP5IE  ADCP4IE       ADCP3IE  ADCP2IE   ADCP1IE  ADCP0IE       —        —          —       —            AC4IE   0000  0000  0000   0000

                                       IPC0     00A4  —               T1IP<2:0>             —                 OC1IP<2:0>             —                  IC1IP<2:0>             —                  INT0IP<2:0>          0100  0100  0100   0100

                                       IPC1     00A6  —               T31P<2:0>             —                 T2IP<2:0>              —                  OC2IP<2:0>             —          —       —            —       0100  0100  0100   0000

                                       IPC2     00A8  —               ADIP<2:0>             —                 U1TXIP<2:0>            —                  U1RXIP<2:0>            —                  SPI1IP<2:0>          0100  0100  0100   0100

                                       IPC3     00AA  —       —       —             —       —                 MI2CIP<2:0>            —                  SI2CIP<2:0>            —                  NVMIP<2:0>           0000  0100  0100   0100

                                       IPC4     00AC  —               PWM1IP<2:0>           —                 PSEMIP<2:0>            —                  INT2IP<2:0>            —                  INT1IP<2:0>          0100  0100  0100   0100

                                       IPC5     00AE  —       —       —             —       —                 PWM4IP<2:0>            —                  PWM3IP<2:0>            —                  PWM2IP<2:0>          0000  0100  0100   0100

                                       IPC6     00B0  —               CNIP<2:0>             —        —         —            —        —         —        —             —        —          —       —            —       0100  0000  0000   0000

                                       IPC7     00B2  —               AC3IP<2:0>            —                 AC2IP<2:0>             —                  AC1IP<2:0>             —          —       —            —       0100  0100  0100   0000

                                       IPC8     00B4  —       —       —             —       —        —         —            —        —         —        —             —        —                  AC4IP<2:0>           0000  0000  0000   0100

                                       IPC9     00B6  —               ADCP2IP<2:0>          —                 ADCP1IP<2:0>           —                  ADCP0IP<2:0>           —          —       —            —       0100  0100  0100   0000  dsPIC30F1010/202X

                                       IPC10    00B8  —       —       —             —       —                 ADCP5IP<2:0>           —                  ADCP4IP<2:0>           —                 ADCP3IP<2:0>          0000  0100  0100   0100

                                       INTTREG  00E0  —       —       —             —                ILR<3:0>                        —                                       VECNUM<6:0>                               0000  0000  0000   0000

                                       Note:    Refer to the “dsPIC30F/33F Family           Reference Manual” (DS70157) for descriptions of register bit fields.

DS70000178D-page 75
dsPIC30F1010/202X

NOTES:

DS70000178D-page 76   2006-2014 Microchip Technology Inc.
                                                                      dsPIC30F1010/202X

6.0  I/O PORTS                                                        is an input. All port pins are defined as inputs after a

                                                                      Reset. Reads from the latch (LATx), read the latch.

Note: This data sheet summarizes features of this group               Writes to the latch, write the latch (LATx). Reads from

of dsPIC30F devices and is not intended to be a complete              the port (PORTx), read the port pins, and writes to the

reference  source.     For  more  information     on     the  CPU,    port pins, write the latch (LATx).

peripherals,    register   descriptions  and     general      device

functionality,  refer  to  the   “dsPIC30F   Family     Reference     Any bit and its associated data and control registers

Manual” (DS70046).                                                    that  are  not    valid   for  a    particular  device  will    be

All of the device pins (except VDD, VSS, MCLR and                     disabled.  That    means       the  corresponding    LATx       and

OSC1/CLKI) are shared between the peripherals and                     TRISx registers and the port pin will read as zeros.

the parallel I/O ports.                                               When a pin is shared with another peripheral or func-

All I/O input ports feature Schmitt Trigger inputs for                tion that is defined as an input only, it is nevertheless

improved noise immunity.                                              regarded   as   a  dedicated        port  because    there  is  no

                                                                      other competing source of outputs.

6.1  Parallel I/O (PIO) Ports                                         A Parallel I/O (PIO) port that shares a pin with a periph-

When a peripheral is enabled and the peripheral is                    eral is, in general, subservient to the peripheral. The

actively driving an associated pin, the use of the pin as             peripheral’s output buffer data and control signals are

a general purpose output pin is disabled. The I/O pin                 provided   to  a   pair   of  multiplexers.     The  multiplexers

may be read, but the output driver for the parallel port              select whether the peripheral or the associated port

bit will be disabled. If a peripheral is enabled, but the             has ownership of the output data and control signals of

peripheral is not actively driving a pin, that pin may be             the I/O pad cell. Figure 6-1 shows how ports are shared

driven by a port.                                                     with other peripherals, and the associated I/O cell (pad)

                                                                      to which they are connected. Table 6-1 and Table 6-2

All port pins have three registers directly associated                show the register formats for the shared ports, PORTA

with the operation of the port pin. The data direction                through    PORTF,        for  the   dsPIC30F1010/2020           and

register (TRISx) determines whether the pin is an input               PORTA through PORTG for the dsPIC30F2023 device,

or an output. If the data direction bit is a ‘1’, then the pin        respectively.

FIGURE 6-1:                 BLOCK DIAGRAM OF A SHARED                 PORT STRUCTURE

                                  Peripheral Module                              Output Multiplexers

                                 Peripheral Input Data

                                 Peripheral Module Enable

                                                                                               I/O Cell

                                 Peripheral Output Enable                   1

                                                                                 Output Enable

                                 Peripheral Output Data                     0

                                 PIO Module                                 1    Output Data

                                                                            0

                                       Read TRIS

                                                                                                          I/O Pad

                       Data Bus               D         Q

                       WR TRIS                CK

                                             TRIS Latch

                                              D         Q

                       WR LAT +               CK

                       WR Port

                                             Data Latch

                                         Read LAT                                        Input Data

                                 Read  Port

 2006-2014 Microchip Technology Inc.                                                                              DS70000178D-page 77
dsPIC30F1010/202X

6.2         Configuring Analog Port Pins                       6.3      Input Change Notification

The use of the ADPCFG and TRIS registers control the           The input change notification function of the I/O ports

operation of the A/D port pins. The port pins that are         allows the dsPIC30F1010/202X devices to generate

desired as analog inputs must have their correspond-           interrupt requests to the processor in response to a

ing TRIS bit set (input). If the TRIS bit is cleared           change-of-state on selected input pins. This feature is

(output), the digital output level (VOH or VOL) will be        capable  of  detecting  input  change-of-states   even       in

converted.                                                     Sleep mode, when the clocks are disabled. There are

When reading the PORT register, all pins configured as         8  external  signals  (CN0   through  CN7)  that  can     be

analog input channel will read as cleared (a low level).       selected (enabled) for generating an interrupt request

                                                               on a change-of-state.

Pins configured as digital inputs will not convert an ana-     There are two control registers associated with the CN

log input. Analog levels on any pin that is defined as a       module. The CNEN1 register contain the CN interrupt

digital input (including the ANx pins), may cause the          enable (CNxIE) control bits for each of the CN input

input  buffer   to  consume     current   that  exceeds   the  pins. Setting any of these bits enables a CN interrupt

device specifications.                                         for the corresponding pins.

6.2.1       I/O PORT WRITE/READ TIMING                         Each CN pin also has a weak pull-up connected to it.

One    instruction   cycle  is  required  between     a  port  The pull-ups act as a current source that is connected

direction change or port write operation and a read            to the pin and eliminate the need for external resistors

operation of the same port. Typically this instruction         when push button or keypad devices are connected.

would be a NOP.                                                The pull-ups are enabled separately using the CNPU1

                                                               register, which contain the weak pull-up enable (CNx-

EXAMPLE 6-1:                PORT WRITE/READ                    PUE) bits for each of the CN pins. Setting any of the

                            EXAMPLE                            control bits enables the weak pull-ups for the

                                                               corresponding pins.

MOV    0xFF00,  W0;    Configure  PORTB<15:8>

       ;    as  inputs

MOV    W0,  TRISBB;    and  PORTB<7:0>    as    outputs           Note: Pull-ups on change notification pins     should

NOP    ;    Delay   1  cycle                                      always be disabled whenever the port pin is

BTSS   PORTB,   #13;    Next    Instruction                       configured as a digital output.

DS70000178D-page 78                                                                   2006-2014 Microchip Technology Inc.
 2006-2014 Microchip Technology Inc.  TABLE 6-1:        dsPIC30F1010/2020       PORT REGISTER MAP

                                       SFR Name  Addr.   Bit 15  Bit 14  Bit 13  Bit  Bit  Bit 10  Bit 9   Bit 8   Bit 7     Bit 6   Bit 5   Bit 4       Bit 3   Bit 2   Bit 1   Bit 0         Reset  State

                                                                                 12   11

                                       TRISA       02C0  —       —       —       —    —    —       TRISA9  —       —         —       —                —  —       —       —       —       0000  0010   0000   0000

                                       PORTA       02C2  —       —       —       —    —    —       RA9     —       —         —       —                —  —       —       —       —       0000  0000   0000   0000

                                       LATA        02C4  —       —       —       —    —    —       LAT9    —       —         —       —                —  —       —       —       —       0000  0000   0000   0000

                                       TRISB       02C6  —       —       —       —    —    —       —       —       TRISB7    TRISB6  TRISB5  TRISB4      TRISB3  TRISB2  TRISB1  TRISB0  0000  0000   0011   1111

                                       PORTB       02C8  —       —       —       —    —    —       —       —       RB7       RB6     RB5     RB4         RB3     RB2     RB1     RB0     0000  0000   0000   0000

                                       LATB      02CA    —       —       —       —    —    —       —       —       LATB7     LATB6   LATB5   LATB4       LATB3   LATB2   LATB1   LATB0   0000  0000   0000   0000

                                       TRISD       02D2  —       —       —       —    —    —       —       —       —         —       —                —  —       —       —       TRISD0  0000  0000   0000   0001

                                       PORTD       02D4  —       —       —       —    —    —       —       —       —         —       —                —  —       —       —       RD0     0000  0000   0000   0000

                                       LATD        02D6  —       —       —       —    —    —       —       —       —         —       —                —  —       —       —       LATD0   0000  0000   0000   0000

                                       TRISE       02D8  —       —       —       —    —    —       —       —       TRSE7     TRSE6   TRISE5  TRISE4      TRISE3  TRISE2  TRISE1  TRISE0  0000  0000   1111   1111

                                       PORTE     02DA    —       —       —       —    —    —       —       —       RE7       RE6     RE5     RE4         RE3     RE2     RE1     RE0     0000  0000   0000   0000

                                       LATE      02DC    —       —       —       —    —    —       —       —       LATE7     LATE6   LATE5   LATE4       LATE3   LATE2   LATE1   LATE0   0000  0000   0000   0000

                                       TRISF     02DE    —       —       —       —    —    —       —       TRISF8  TRISF7    TRISF6  —                —  —       —       —       —       0000  0001   1100   0000

                                       PORTF       02E0  —       —       —       —    —    —       —       RF8     RF7       RF6     —                —  —       —       —       —       0000  0000   0000   0000

                                       LATF        02E2  —       —       —       —    —    —       —       LATF8   LATF7     LATF6   —                —  —       —       —       —       0000  0000   0000   0000

                                       Note: Refer to the “dsPIC30F Family Reference Manual” (DS70046)     for descriptions  of register bit fields.

DS70000178D-page 79                                                                                                                                                                                                dsPIC30F1010/202X
DS70000178D-page 80                    TABLE 6-2:       dsPIC30F2023 PORT REGISTER MAP                                                                                                                                                        dsPIC30F1010/202X

                                       SFR    Addr.     Bit 15   Bit 14   Bit 13      Bit     Bit 11      Bit 10  Bit 9   Bit 8   Bit 7    Bit 6     Bit 5        Bit 4   Bit 3     Bit 2       Bit 1         Bit 0        Reset State

                                       Name                                           12

                                       TRISA  02C0      —           —        —        —    TRISA11       TRISA10  TRIS9   TRISA8  —        —         —            —       —         —           —             —      0000  1111  0000   0000

                                       PORTA  02C2      —           —        —        —       RA11        RA10    RA9     RA8     —        —         —            —       —         —           —             —      0000  0000  0000   0000

                                       LATA   02C4      —           —        —        —       LATA11      LATA10  LATA9   LATA8   —        —         —            —       —         —           —             —      0000  0000  0000   0000

                                       TRISB  02C6      —           —        —        —    TRISB11       TRISB10  TRISB9  TRISB8  TRISB7   TRIS6     TRISB5  TRISB4       TRISB3    TRISB2      TRISB1  TRISB0       0000  1111  1111   1111

                                       PORTB  02C8      —           —        —        —       RB11        RB10    RB9     RB8     RB7      RB6       RB5          RB4     RB3       RB2         RB1           RB0    0000  0000  0000   0000

                                       LATB   02CA      —           —        —        —       LATB11      LATB10  LATB9   LATB8   LATB7    LATB6     LATB5   LATB4        LATB3     LATB2       LATB1   LATB0        0000  0000  0000   0000

                                       TRISD  02D2      —           —        —        —           —       —       —       —       —        —         —            —       —         —       TRISD1      TRISD0       0000  0000  0000   0011

                                       PORTD  02D4      —           —        —        —           —       —       —       —       —        —         —            —       —         —           RD1           RD0    0000  0000  0000   0000

                                       LATD   02D6      —           —        —        —           —       —       —       —       —        —         —            —       —         —           LATD1   LATD0        0000  0000  0000   0000

                                       TRISE  02D8      —           —        —        —           —       —       —       —       TRSE7    TRSE6     TRISE5  TRISE4      TRISE3     TRISE2      TRISE1  TRISE0       0000  0000  1111   1111

                                       PORTE  02DA      —           —        —        —           —       —       —       —       RE7      RE6       RE5          RE4     RE3       RE2         RE1           RE0    0000  0000  0000   0000

                                       LATE   02DC      —           —        —        —           —       —       —       —       LATE7    LATE6     LATE5   LATE4        LATE3     LATE2       LATE1   LATE0        0000  0000  0000   0000

                                       TRISF  02DE      TRISF15  TRISF14     —        —           —       —       —       TRISF8  TRISF7   TRISF6    —            —       TRISF3    TRISF2      —             —      1100  0001  1100   1100

                                       PORTF  02E0      RF15     RF14        —        —           —       —       —       RF8     RF7      RF6       —            —       RF3       RF2         —             —      0000  0000  0000   0000

                                       LATF   02E2      LATF15   LATF14      —        —           —       —       —       LATF8   LATF7    LATF6     —            —       LATF3     LATF2       —             —      0000  0000  0000   0000

                                       TRISG  02E4      —           —        —        —           —       —       —       —       —        —         —            —      TRISG3     TRISG2      —             —      0000  0000  0000   1100

                                       PORTG  02E6      —           —        —        —           —       —       —       —       —        —         —            —       RG3       RG2         —             —      0000  0000  0000   0000

                                       LATG   02E8      —           —        —        —           —       —       —       —       —        —         —            —       LATG3     LATG2       —             —      0000  0000  0000   0000

                                       Note:  Refer to  the “dsPIC30F Family Reference Manual” (DS70046) for              descriptions of  register  bit fields.

                                       TABLE 6-3:       dsPIC30F1010/202X INPUT CHANGE NOTIFICATION REGISTER MAP

 2006-2014 Microchip Technology Inc.  SFR    Addr.     Bit 15   Bit 14  Bit 13  Bit      Bit 11  Bit 10  Bit 9   Bit 8   Bit 7   Bit 6    Bit 5     Bit 4        Bit 3      Bit 2       Bit 1         Bit 0               Reset State

                                       Name                                       12

                                       CNEN1  0060      —        —        —       —        —          —   —       —       CN7IE   CN6IE    CN5IE     CN4IE        CN3IE   CN2IE        CN1IE       CN0IE             0000  0000  0000   0000

                                       CNPU1  0064      —        —        —       —        —          —   —       —       CN7PUE  CN6PUE   CN5PUE    CN4PUE       CN3PUE  CN2PUE    CN1PUE      CN0PUE               0000  0000  0000   0000

                                       Note: Refer to   the “dsPIC30F Family Reference Manual” (DS70046) for descriptions of register bit fields.
                                                                          dsPIC30F1010/202X

7.0      FLASH PROGRAM MEMORY                                            7.2        Run-Time Self-Programming

Note: This data sheet summarizes features of this group                             (RTSP)

of dsPIC30F devices and is not intended to be a complete                 RTSP is accomplished using TBLRD (table read) and

reference  source.     For  more     information    on  the  CPU,        TBLWT (table write) instructions.

peripherals,    register   descriptions    and    general    device

functionality,  refer  to  the  “dsPIC30F   Family      Reference        With RTSP, the user may erase program memory 32

Manual” (DS70046). For more information on the device                    instructions (96 bytes) at a time and can write program

instruction set and programming, refer to the “dsPIC30F/                 memory data 32 instructions (96 bytes) at a time.

33F Programmer’s Reference Manual” (DS70157).

The  dsPIC30F    family     of  devices     contains       internal      7.3        Table Instruction Operation Summary

program Flash memory for executing user code. There

are two methods by which the user can program this                       The TBLRDL and the TBLWTL instructions are used to

memory:                                                                  read   or  write  to  bits  <15:0>  of  program   memory.

1.   In-Circuit Serial Programming™ (ICSP™)                              TBLRDL and TBLWTL can access program memory in

     programming capability                                              Word or Byte mode.

2.   Run-Time Self-Programming (RTSP)                                    The TBLRDH and TBLWTH instructions are used to read

                                                                         or write to bits <23:16> of program memory. TBLRDH

7.1      In-Circuit Serial Programming                                   and TBLWTH can access program memory in Word or

         (ICSP)                                                          Byte mode.

                                                                         A 24-bit program memory address is formed using    bits

dsPIC30F devices can be serially programmed while in                     <7:0>  of   the   TBLPAG    register    and  the  Effective

the end application circuit. This is simply done with two                Address (EA) from a W register specified in the table

lines for Programming Clock and Programming Data                         instruction, as shown in Figure 7-1.

(which are named PGC and PGD respectively), and

three other lines for Power (VDD), Ground (VSS) and

Master Clear (MCLR). This allows customers to manu-

facture boards with unprogrammed devices, and then

program the microcontroller just before shipping the

product. This also allows the most recent firmware or a

custom firmware to be programmed.

FIGURE 7-1:                 ADDRESSING FOR TABLE AND                 NVM REGISTERS

                                                                          24 bits

                                           Using

                                           Program      0            Program Counter                 0

                                           Counter

                                                                                NVMADR Reg EA

                                     Using

                                     NVMADR             1/0  NVMADRU Reg

                                     Addressing

                                                             8 bits                   16 bits

                                                                                Working Reg EA

                                     Using              1/0  TBLPAG Reg

                                     Table

                                     Instruction             8 bits                   16 bits

                                                                                                     Byte

                       User/Configuration                                                            Select

                       Space Select                                       24-bit EA

 2006-2014 Microchip Technology Inc.                                                                        DS70000178D-page 81
dsPIC30F1010/202X

7.4       RTSP Operation                                         7.5       Control Registers

The dsPIC30F Flash program memory is organized                   The four SFRs used       to  read  and  write  the    program

into rows and panels. Each row consists of 32 instruc-           Flash memory are:

tions, or 96 bytes. Each panel consists of 128 rows, or          •  NVMCON

4K x 24 instructions. RTSP allows the user to erase one          •  NVMADR

row  (32  instructions)   at  a  time  and  to   program    32

instructions at one time. RTSP may be used to program            •  NVMADRU

multiple program memory panels, but the table pointer            •  NVMKEY

must be changed at each panel boundary.

Each panel of program memory contains write latches              7.5.1        NVMCON REGISTER

that hold 32 instructions of programming data. Prior to          The NVMCON register controls which blocks are to be

the actual programming operation, the write data must            erased, which memory type is to be programmed and

be loaded into the panel write latches. The data to be           the start of the programming cycle.

programmed     into  the  panel  is    loaded   in  sequential   7.5.2        NVMADR REGISTER

order into the write latches; instruction ‘0’, instruction

‘1’, etc. The instruction words loaded must always be            The NVMADR register is used to hold the lower two

from a group of 32 boundary.                                     bytes of the effective address. The NVMADR register

The basic sequence for RTSP programming is to set up             captures the EA<15:0> of the last table instruction that

a table pointer, then do a series of TBLWT instructions          has been executed and selects the row to write.

to load the write latches. Programming is performed by           7.5.3        NVMADRU REGISTER

setting the special bits in the NVMCON register. 32

TBLWTL and four TBLWTH instructions are required to              The NVMADRU register is used to hold the upper byte

load the 32 instructions. If multiple panel programming          of the effective address. The NVMADRU register cap-

is required, the table pointer needs to be changed and           tures the EA<23:16> of the last table instruction that

the next set of multiple write latches written.                  has been executed.

All of the table write operations are single-word writes         7.5.4        NVMKEY REGISTER

(2 instruction cycles), because only the table latches

are  written.  A  programming        cycle  is   required   for  NVMKEY is a write-only register that is used for write

programming each row.                                            protection.  To   start  a   programming       or  an  erase

The Flash Program Memory is readable, writable and               sequence, the user must consecutively write 0x55 and

erasable during normal operation over the entire VDD             0xAA to the NVMKEY register. Refer to Section 7.6

range.                                                           “Programming Operations” for further details.

                                                                    Note:     The  user   can  also  directly   write   to  the

                                                                              NVMADR      and  NVMADRU          registers   to

                                                                              specify  a  program    memory     address     for

                                                                              erasing or programming.

DS70000178D-page 82                                                                     2006-2014 Microchip Technology Inc.
                                                                               dsPIC30F1010/202X

7.6        Programming Operations                                          4.    Write     32  instruction       words    of   data  from  data

                                                                                 RAM       “image”      into   the  program         Flash  write

A complete programming sequence is necessary for                                 latches.

programming or erasing the internal Flash in RTSP                          5.    Program       32   instruction     words      into      program

mode. A programming operation is nominally 2 msec in                             Flash.

duration and the processor stalls (waits) until the oper-                        a)    Setup       NVMCON          register    for   multi-word,

ation is finished. Setting the WR bit (NVMCON<15>)                                     program Flash, program and set WREN bit.

starts the operation, and the WR bit is automatically

cleared when the operation is finished.                                          b)    Write ‘55’ to NVMKEY.

                                                                                 c)    Write ‘AA’ to NVMKEY.

7.6.1        PROGRAMMING ALGORITHM FOR                                           d)    Set     the  WR     bit.    This  will  begin     program

             PROGRAM FLASH                                                             cycle.

The user can erase and program one row of program                                e)    CPU will     stall     for  duration    of   the  program

Flash memory at a time. The general process is:                                        cycle.

1.   Read one row of program Flash (32 instruction                               f)    The     WR   bit    is    cleared  by   the       hardware

     words)    and  store   into  data    RAM    as  a   data                          when program cycle ends.

     “image”.                                                              6.    Repeat steps 1 through 5 as needed to program

2.   Update the data image with the desired new                                  desired amount of program Flash memory.

     data.                                                                 7.6.2             ERASING A ROW OF PROGRAM

3.   Erase program Flash row.                                                                MEMORY

     a)    Setup    NVMCON        register  for  multi-word,

           program Flash, erase and set WREN bit.                          Example 7-1 shows a code sequence that can be used

     b)    Write   address  of    row  to   be   erased  into              to erase a row (32 instructions) of program memory.

           NVMADRU/NVMDR.

     c)    Write ‘55’ to NVMKEY.

     d)    Write ‘AA’ to NVMKEY.

     e)    Set the WR bit. This will begin erase cycle.

     f)    CPU will stall for the duration of the erase

           cycle.

     g)    The WR bit is cleared when erase cycle

           ends.

EXAMPLE 7-1:               ERASING A ROW OF PROGRAM MEMORY

;    Setup   NVMCON  for    erase     operation,     multi     word  write

;    program   memory    selected,        and   writes   enabled

            MOV      #0x4041,W0                                   ;

            MOV      W0,NVMCON                                    ;  Init   NVMCON     SFR

;    Init   pointer  to    row    to  be    ERASED

            MOV      #tblpage(PROG_ADDR),W0                       ;

            MOV      W0,NVMADRU                                   ;  Initialize        PM    Page   Boundary        SFR

            MOV      #tbloffset(PROG_ADDR),W0                     ;  Initialize        in-page      EA<15:0>        pointer

            MOV      W0,    NVMADR                                ;  Initialize        NVMADR      SFR

            DISI     #5                                           ;  Block     all     interrupts       with     priority      <7

                                                                  ;  for   next     5  instructions

            MOV      #0x55,W0

            MOV      W0,NVMKEY                                    ;  Write     the     0x55   key

            MOV      #0xAA,W1                                     ;

            MOV      W1,NVMKEY                                    ;  Write     the     0xAA   key

            BSET     NVMCON,#WR                                   ;  Start     the     erase   sequence

            NOP                                                   ;  Insert    two     NOPs    after    the      erase

            NOP                                                   ;  command     is    asserted

 2006-2014 Microchip Technology Inc.                                                                                     DS70000178D-page 83
dsPIC30F1010/202X

7.6.3          LOADING WRITE LATCHES

Example 7-2       shows   a   sequence  of   instructions  that

can be used to load the 96 bytes of write latches. 32

TBLWTL and 32 TBLWTH instructions are needed to

load the write latches selected by the table pointer.

EXAMPLE 7-2:                 LOADING WRITE LATCHES

;  Set     up  a  pointer     to   the  first  program     memory  location    to    be   written

;  program        memory  selected,     and    writes  enabled

           MOV         #0x0000,W0                                    ;

           MOV         W0,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

           •

           •

           •

;  31st_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

Note: In Example 7-2, the contents of the upper byte of W3 have no effect.

7.6.4          INITIATING THE PROGRAMMING

               SEQUENCE

For protection, the write initiate sequence for NVMKEY

must be used to allow any erase or program operation

to proceed. After the programming command has been

executed, the user must wait for the programming time

until programming is complete. The two instructions

following  the    start   of  the  programming     sequence

should be NOPs.

EXAMPLE 7-3:                 INITIATING A PROGRAMMING SEQUENCE

           DISI          #5                                ;  Block   all     interrupts      with  priority  <7

                                                           ;  for  next    5  instructions

           MOV           #0x55,W0

           MOV           W0,NVMKEY                         ;  Write   the     0x55   key

           MOV           #0xAA,W1                          ;

           MOV           W1,NVMKEY                         ;  Write   the     0xAA   key

           BSET          NVMCON,#WR                        ;  Start   the     erase  sequence

           NOP                                             ;  Insert    two   NOPs   after    the   erase

           NOP                                             ;  command    is   asserted

DS70000178D-page 84                                                                            2006-2014 Microchip Technology  Inc.
 2006-2014 Microchip Technology Inc.  TABLE 7-1:         NVM REGISTER MAP

                                       File Name   Addr.  Bit 15         Bit 14  Bit 13  Bit 12  Bit         Bit  Bit 9  Bit 8  Bit 7                  Bit  6  Bit 5  Bit 4  Bit 3   Bit 2  Bit 1  Bit 0        All RESETS

                                                                                                 11          10

                                       NVMCON      0760   WR             WREN    WRERR   —       —           —    —      TWRI   —                                     PROGOP<6:0>                         0000  0000  0000  0000

                                       NVMADR      0762                                                                  NVMADR<15:0>                                                                     uuuu  uuuu  uuuu  uuuu

                                       NVMADRU     0764   —              —       —       —       —           —    —      —                                            NVMADR<23:16>                       0000  0000  uuuu  uuuu

                                       NVMKEY      0766   —              —       —       —       —           —    —      —                                            KEY<7:0>                            0000  0000  0000  0000

                                       Legend:    u = uninitialized bit

                                       Note:      Refer to the “dsPIC30F Family Reference Manual” (DS70046)  for descriptions of register bit fields.

DS70000178D-page 85                                                                                                                                                                                                               dsPIC30F1010/202X
dsPIC30F1010/202X

NOTES:

DS70000178D-page 86   2006-2014 Microchip Technology Inc.
                                                                        dsPIC30F1010/202X

8.0       TIMER1 MODULE                                                 16-bit Timer Mode: In the 16-bit Timer mode, the timer

                                                                        increments on every instruction cycle up to a match

   Note: This data sheet summarizes features of this group              value,  preloaded    into  the  period  register  PR1,     then

   of dsPIC30F devices and is not intended to be a complete             resets to 0 and continues to count.

   reference  source.     For  more     information  on    the  CPU,

   peripherals,    register   descriptions   and     general    device  When the CPU goes into the Idle mode, the timer will

   functionality,  refer  to  the  “dsPIC30F    Family   Reference      stop  incrementing,  unless     the  TSIDL  (T1CON<13>)

   Manual” (DS70046).                                                   bit = 0. If TSIDL = 1, the timer module logic will resume

This  section      describes       the  16-bit  General       Purpose   the   incrementing   sequence    upon   termination    of  the

Timer1    module      and      associated    operational      modes.    CPU Idle mode.

Figure 8-1 depicts the simplified block diagram of the                  16-bit  Synchronous        Counter   Mode:  In    the   16-bit

16-bit Timer1 Module.                                                   Synchronous Counter mode, the timer increments on

   Note:         Timer1 is a ‘Type A’ timer. Please refer to            the rising edge of the applied external clock signal,

                 the  specifications    for  a  Type    A  timer  in    which is synchronized with the internal phase clocks.

                 Section 21.0      “Electrical       Characteris-       The timer counts up to a match value preloaded in PR1,

                 tics” of this document.                                then resets to 0 and continues.

The following sections provide a detailed description of                When the CPU goes into the Idle mode, the timer will

the operational modes of the timers, including setup                    stop incrementing, unless the respective TSIDL bit = 0.

and control registers along with associated block                       If TSIDL = 1, the timer module logic will resume the

diagrams.                                                               incrementing sequence upon termination of the CPU

                                                                        Idle mode.

The Timer1 module is a 16-bit timer which can serve as                  16-bit Asynchronous Counter Mode: In the 16-bit

the time counter for the real-time clock, or operate as a               Asynchronous Counter mode, the timer increments on

free running interval timer/counter. The 16-bit timer has               every rising edge of the applied external clock signal.

the following modes:                                                    The timer counts up to a match value preloaded in PR1,

•  16-bit Timer                                                         then resets to ‘0’ and continues.

•  16-bit Synchronous Counter                                           When the timer is configured for the Asynchronous mode

•  16-bit Asynchronous Counter                                          of operation and the CPU goes into the Idle mode, the

Further,  the      following   operational      characteristics   are   timer will stop incrementing if TSIDL = 1.

supported:

•  Timer gate operation

•  Selectable prescaler settings

•  Timer operation during CPU Idle and Sleep

   modes

•  Interrupt on 16-bit period register match or falling

   edge of external gate signal

These operating modes are determined by setting the

appropriate bit(s) in the 16-bit SFR, T1CON. Figure 8-1

presents a block diagram of the 16-bit timer module.

 2006-2014 Microchip Technology Inc.                                                                        DS70000178D-page 87
dsPIC30F1010/202X

FIGURE        8-1:             16-BIT TIMER1 MODULE BLOCK                     DIAGRAM (TYPE A TIMER)

                                                       PR1

                                       Equal

                                              Comparator x 16                                        TSYNC

                                                                                                        1      Sync

                                                       TMR1

                                      Reset

                                                                                                        0

              T1IF             0

              Event  Flag      1                                 Q       D    TGATE

                                                                 Q   CK

                               TGATE                                                        TGATE

                                                                                     TCS                      TCKPS<1:0>

                                                                                                   TON             2

              T1CK                                                                   1      X

                                                                     Gate                                      Prescaler

                                                                     Sync            0      1                  1, 8, 64, 256

                                                                         TCY         0      0

8.1         Timer Gate Operation                                              8.3    Timer Operation During Sleep Mode

The 16-bit timer can be placed in the Gated Time Accu-                        During CPU Sleep mode, the timer will operate if:

mulation mode. This mode allows the internal TCY to                           •  The timer module is enabled (TON = 1) and

increment the respective timer when the gate input sig-                       •  The timer clock source is selected as external

nal (T1CK pin) is asserted high. Control bit TGATE                               (TCS = 1) and

(T1CON<6>) must be set to enable this mode. The

timer must be enabled (TON = 1) and the timer clock                           •  The TSYNC bit (T1CON<2>) is asserted to a logic ‘0’,

source set to internal (TCS = 0).                                                which defines the external clock source as asynchronous

When the CPU goes into the Idle mode, the timer will                          When   all    three  conditions  are    true,   the  timer  will

stop incrementing, unless TSIDL = 0. If TSIDL = 1, the                        continue to count up to the period register and be reset

timer   will  resume  the      incrementing        sequence      upon         to 0x0000.

termination of the CPU Idle mode.                                             When a match between the timer and the period regis-

                                                                              ter  occurs,     an  interrupt  can     be  generated,  if  the

8.2         Timer Prescaler                                                   respective timer interrupt enable bit is asserted.

The input clock (FOSC/2 or external clock) to the 16-bit                      8.4    Timer Interrupt

Timer,  has   a     prescale   option   of   1:1,  1:8,  1:64,   and

1:256   selected           by  control       bits      TCKPS<1:0>             The 16-bit timer has the ability to generate an interrupt on

(T1CON<5:4>). The prescaler counter is cleared when                           period match. When the timer count matches the period

any of the following occurs:                                                  register, the T1IF bit is asserted and an interrupt will be

•  a write to the TMR1 register                                               generated, if enabled. The T1IF bit must be cleared in

•  clearing of the TON bit (T1CON<15>)                                        software. The timer interrupt flag T1IF is located in the

•  device Reset such as POR                                                   IFS0 control register in the Interrupt Controller.

However, if the timer is disabled (TON = 0), then the                         When the Gated Time Accumulation mode is enabled,

timer prescaler cannot be reset since the prescaler                           an interrupt will also be generated on the falling edge of

clock is halted.                                                              the gate signal (at the end of the accumulation cycle).

TMR1    is    not   cleared    when   T1CON        is  written.  It  is       Enabling an interrupt is accomplished via the respec-

cleared by writing to the TMR1 register.                                      tive timer interrupt enable bit, T1IE. The timer interrupt

                                                                              enable bit is located in the IEC0 control register in the

                                                                              Interrupt Controller.

DS70000178D-page 88                                                                                   2006-2014 Microchip Technology Inc.
 2006-2014 Microchip Technology Inc.  TABLE 8-1:       TIMER1 REGISTER MAP

                                       SFR Name  Addr.  Bit 15          Bit 14  Bit 13  Bit 12  Bit 11  Bit 10  Bit 9  Bit 8  Bit 7                  Bit 6  Bit 5  Bit 4  Bit 3  Bit 2  Bit 1  Bit 0        Reset State

                                       TMR1      0100                                                                     Timer 1 Register                                                            uuuu  uuuu  uuuu   uuuu

                                       PR1       0102                                                                     Period Register 1                                                           1111  1111  1111   1111

                                       T1CON     0104   TON             —       TSIDL   —       —       —       —      —      —                      TGATE  TCKPS<1:0>    —      TSYNC  TCS    —      0000  0000  0000   0000

                                       Legend:   u = uninitialized bit

                                       Note:     Refer to the “dsPIC30F Family Reference Manual” (DS70046) for descriptions of register bit fields.

DS70000178D-page 89                                                                                                                                                                                                            dsPIC30F1010/202X
dsPIC30F1010/202X

NOTES:

DS70000178D-page 90   2006-2014 Microchip Technology Inc.
                                                                        dsPIC30F1010/202X

9.0       TIMER2/3 MODULE                                               For 32-bit timer/counter operation, Timer2 is the least

                                                                        significant word and Timer3 is the most significant word

   Note: This data sheet summarizes features of this group              of the 32-bit timer.

   of dsPIC30F devices and is not intended to be a complete

   reference  source.      For  more     information  on   the  CPU,    Note:         For 32-bit timer operation, T3CON control

   peripherals,    register    descriptions   and     general   device                bits are ignored. Only T2CON control bits

   functionality,  refer   to  the  “dsPIC30F    Family    Reference                  are used for setup and control. Timer 2

   Manual” (DS70046).                                                                 clock and gate inputs are utilized for the

This  section      describes        the  32-bit  General       Purpose                32-bit  timer    module,      but   an  interrupt  is

Timer module (Timer2/3) and associated operational                                    generated with the Timer3 interrupt flag

modes. Figure 9-1 depicts the simplified block diagram                                (T3IF) and the interrupt is enabled with the

of the 32-bit Timer2/3 module. Figure 9-2 and Figure 9-                               Timer3 interrupt enable bit (T3IE).

3 show Timer2/3 configured as two independent 16-bit                    16-bit Mode: In the 16-bit mode, Timer2 and Timer3

timers: Timer2 and Timer3, respectively.                                can be configured as two independent 16-bit timers.

   Note:         The dsPIC30F1010 device does not fea-                  Each timer can be set up in either 16-bit Timer mode or

                 ture Timer3. Timer2 is a ‘Type B’ timer and            16-bit Synchronous Counter mode. See Section 8.0

                 Timer3 is a ‘Type C’ timer. Please refer to            “Timer1 Module” for details on these two operating

                 the appropriate timer type in Section 21.0             modes.

                 “Electrical Characteristics” of this                   The  only     functional  difference    between       Timer2     and

                 document.                                              Timer3 is that Timer2 provides synchronization of the

The Timer2/3 module is a 32-bit timer, which can be                     clock prescaler output. This is useful for high-frequency

configured as two 16-bit timers, with selectable operat-                external clock inputs.

ing   modes.       These        timers   are     utilized  by   other   32-bit Timer Mode: In the 32-bit Timer mode, the timer

peripheral modules such as:                                             increments on every instruction cycle up to a match

•  Input Capture                                                        value, preloaded into the combined 32-bit period regis-

•  Output Compare/Simple PWM                                            ter PR3/PR2, then resets to ‘0’ and continues to count.

The following sections provide a detailed description,                  For  synchronous      32-bit   reads    of   the  Timer2/Timer3

including setup and control registers, along with asso-                 pair, reading the least significant word (TMR2 register)

ciated block diagrams for the operational modes of the                  will cause the most significant word to be read and

timers.                                                                 latched    into  a     16-bit  holding       register,     termed

                                                                        TMR3HLD.

The 32-bit timer has the following modes:                               For  synchronous      32-bit   writes,  the      holding  register

•  Two independent 16-bit timers (Timer2 and Tim-                       (TMR3HLD) must first be written to. When followed by

   er3) with all 16-bit operating modes (except Asyn-                   a write to the TMR2 register, the contents of TMR3HLD

   chronous Counter mode)                                               will be transferred and latched into the MSB of the

•  Single 32-bit Timer operation                                        32-bit timer (TMR3).

•  Single 32-bit Synchronous Counter                                    32-bit   Synchronous      Counter       Mode:     In  the  32-bit

Further,  the      following    operational      characteristics  are   Synchronous Counter mode, the timer increments on

supported:                                                              the rising edge of the applied external clock signal,

•  ADC Event Trigger                                                    which is synchronized with the internal phase clocks.

•  Timer Gate Operation                                                 The timer counts up to a match value preloaded in the

                                                                        combined 32-bit period register, PR3/PR2, then resets

•  Selectable Prescaler Settings                                        to ‘0’ and continues.

•  Timer Operation during Idle and Sleep modes                          When     the  timer   is  configured    for  the      Synchronous

•  Interrupt on a 32-bit Period Register Match                          Counter mode of operation and the CPU goes into the

These operating modes are determined by setting the                     Idle mode, the timer will stop incrementing, unless the

appropriate        bit(s)  in  the  16-bit   T2CON    and      T3CON    TSIDL (T2CON<13>) bit = 0. If TSIDL = 1, the timer

SFRs.                                                                   module logic will resume the incrementing sequence

                                                                        upon termination of the CPU Idle mode.

 2006-2014 Microchip Technology Inc.                                                                           DS70000178D-page 91
dsPIC30F1010/202X

FIGURE 9-1:           32-BIT TIMER2/3 BLOCK DIAGRAM

             Data Bus<15:0>

                                 TMR3HLD

                                          16

             Write    TMR2       16

             Read     TMR2

                             16

                      Reset      TMR3     TMR2                                                 Sync

                                 MSB      LSB

ADC  Event   Trigger

                         Equal   Comparator x 32

                                 PR3      PR2

             0

T3IF

Event Flag   1                                Q          D   TGATE(T2CON<6>)

                                          Q              CK

             TGATE

             (T2CON<6>)

                                                                                       TCS  TGATE             TCKPS<1:0>

       T2CK                                                                                        TON        2

                                                                                       1    X

                                                             Gate                                             Prescaler

                                                             Sync                      0    1                 1, 8, 64, 256

                                                             TCY                       0    0

Note:        Timer Configuration bit T32, (T2CON<3>)     must be set  to  ‘1’  for  a  32-bit  timer/counter  operation. All control

             bits are respective to the T2CON register.

DS70000178D-page 92                                                                                 2006-2014 Microchip Technology   Inc.
                                                                   dsPIC30F1010/202X

FIGURE  9-2:         16-BIT TIMER2 BLOCK DIAGRAM

                                       PR2

                            Equal

                                       Comparator x 16

                            Reset      TMR2                                                      Sync

        T2IF         0

        Event  Flag  1                       Q          D          TGATE

                                             Q          CK

                     TGATE                                                        TGATE

                                                                          TCS                    TCKPS<1:0>

        T2CK                                                                                TON  2

                                                                          1       X

                                                        Gate                                     Prescaler

                                                        Sync              0       1              1, 8, 64, 256

                                                        TCY               0       0

FIGURE 9-3:          16-BIT TIMER3 BLOCK DIAGRAM

                                       PR3

ADC Event Trigger           Equal

                                       Comparator x 16

                            Reset      TMR3

        T3IF         0

        Event Flag   1                       Q          D          TGATE

                                             Q          CK                        TGATE(2)

                     TGATE                                                TCS(1)

                                                                                                 TCKPS<1:0>

                                                        Sync                                TON  2

                                                                          1       X

                                                                                                 Prescaler

                                                                          0       1              1, 8, 64, 256

                                                        TCY               0       0

Note:          The dsPIC30F202X does not have an external pin input to TIMER3. The following modes should not be used:

               1. TCS = 1

               2. TCS = 0 and TGATE = 1 (gated time accumulation)

 2006-2014 Microchip Technology Inc.                                                               DS70000178D-page 93
dsPIC30F1010/202X

9.1       Timer Gate Operation                                 9.4       Timer Operation During Sleep

The 32-bit timer can be placed in the Gated Time Accu-                   Mode

mulation mode. This mode allows the internal TCY to            During CPU Sleep mode, the timer will not operate,

increment the respective timer when the gate input sig-        because the internal clocks are disabled.

nal (T2CK pin) is asserted high. Control bit TGATE

(T2CON<6>) must be set to enable this mode. When in            9.5       Timer Interrupt

this mode, Timer2 is the originating clock source. The

TGATE setting is ignored for Timer3. The timer must be         The 32-bit timer module can generate an interrupt on

enabled (TON = 1) and the timer clock source set to            period match, or on the falling edge of the external gate

internal (TCS = 0).                                            signal.  When  the     32-bit  timer   count      matches    the

The falling edge of the external signal terminates the         respective 32-bit period register, or the falling edge of

count operation, but does not reset the timer. The user        the  external  “gate”  signal      is  detected,  the  T3IF  bit

must reset the timer in order to start counting from zero.     (IFS0<7>) is asserted and an interrupt will be gener-

                                                               ated if enabled. In this mode, the T3IF interrupt flag is

9.2       ADC Event Trigger                                    used as the source of the interrupt. The T3IF bit must

                                                               be cleared in software.

When a match occurs between the 32-bit timer (TMR3/            Enabling  an   interrupt       is      accomplished    via   the

TMR2) and the 32-bit combined period register (PR3/            respective timer interrupt enable bit, T3IE (IEC0<7>).

PR2), a special ADC trigger event signal is generated

by Timer3.

9.3       Timer Prescaler

The input clock (FOSC/2 or external clock) to the timer

has  a    prescale  option  of  1:1,  1:8,  1:64,  and  1:256

selected by control bits TCKPS<1:0> (T2CON<5:4>

and T3CON<5:4>). For the 32-bit timer operation, the

originating clock source is Timer2. The prescaler oper-

ation for Timer3 is not applicable in this mode. The

prescaler counter is cleared when any of the following

occurs:

•  a write to the TMR2/TMR3 register

•  clearing either of the TON (T2CON<15> or

   T3CON<15>) bits to ‘0’

•  device Reset such as POR

However, if the timer is disabled (TON = 0), then the

Timer 2 prescaler cannot be reset, since the prescaler

clock is halted.

TMR2/TMR3 is not cleared when T2CON/T3CON is

written.

DS70000178D-page 94                                                                 2006-2014 Microchip Technology Inc.
 2006-2014 Microchip Technology Inc.  TABLE 9-1:      TIMER2/3 REGISTER MAP

                                       SFR      Addr.  Bit 15          Bit 14  Bit 13  Bit 12    Bit 11  Bit  Bit 9  Bit 8  Bit 7                            Bit 6  Bit 5  Bit 4  Bit 3  Bit 2  Bit 1  Bit 0        Reset  State

                                       Name                                                              10

                                       TMR2     0106                                                                    Timer2 Register                                                                       uuuu  uuuu   uuuu   uuuu

                                       TMR3HLD  0108                                                     Timer3 Holding Register (For 32-bit timer operations only)                                           uuuu  uuuu   uuuu   uuuu

                                       TMR3     010A                                                                    Timer3 Register                                                                       uuuu  uuuu   uuuu   uuuu

                                       PR2      010C                                                                    Period Register 2                                                                     1111  1111   1111   1111

                                       PR3      010E                                                                    Period Register 3                                                                     1111  1111   1111   1111

                                       T2CON    0110   TON             —       TSIDL   —         —       —    —      —      —            TGATE                      TCKPS<1:0>    T32    —      TCS    —      0000  0000   0000   0000

                                       T3CON    0112   TON             —       TSIDL   —         —       —    —      —      —            TGATE                      TCKPS<1:0>    —      —      TCS    —      0000  0000   0000   0000

                                       Legend:  u = uninitialized bit

                                       Note:    Refer to the “dsPIC30F         Family Reference  Manual” (DS70046) for descriptions of register bit fields.

DS70000178D-page 95                                                                                                                                                                                                                     dsPIC30F1010/202X
dsPIC30F1010/202X

NOTES:

DS70000178D-page 96   2006-2014 Microchip Technology Inc.
                                                                                       dsPIC30F1010/202X

10.0       INPUT CAPTURE MODULE                                                     The  key         operational  features  of     the  Input  Capture

                                                                                    module are:

   Note: This data sheet summarizes features of this group                          •  Simple Capture Event mode

   of dsPIC30F devices and is not intended to be a complete

   reference  source.     For     more  information  on     the  CPU,               •  Timer2 and Timer3 mode selection

   peripherals,    register   descriptions    and    general     device             •  Interrupt on input capture event

   functionality,  refer  to  the   “dsPIC30F     Family    Reference

   Manual” (DS70046).                                                               These operating modes are determined by setting the

This section describes the Input Capture module and                                 appropriate bits in the ICxCON register (where x =

associated operational modes. The features provided                                 1,2,...,N). The dsPIC DSC devices contain up to 8

by this module are useful in applications requiring Fre-                            capture channels, (i.e., the maximum value of N is 8).

quency (Period) and Pulse measurement. Figure 10-1                                     Note:         The dsPIC30F1010 devices does not fea-

depicts a block diagram of the Input Capture module.                                                 ture   a     Input  Capture        module.    The

Input capture is useful for such modes as:                                                           dsPIC30F202X devices have one capture

•  Frequency/Period/Pulse Measurements                                                               input – IC1. The naming of this capture

•  Additional sources of External Interrupts                                                         channel is intentional and preserves soft-

                                                                                                     ware compatibility with other dsPIC DSC

                                                                                                     devices.

FIGURE 10-1:                   INPUT CAPTURE MODE BLOCK DIAGRAM

                                                                         From General Purpose Timer Module        T2_CNT           T3_CNT

                                                                                                                               16       16

      ICx                                                                                                                                   ICTMR

      Pin                                                                                                                   1      0

                       Prescaler                  Clock                  Edge                        FIFO

                          1, 4, 16            Synchronizer               Detection                   R/W

                                                                         Logic                       Logic

                               3        ICM<2:0>                                                                            ICxBUF

                                        Mode Select

                                        ICBNE, ICOV

                                                              ICI<1:0>

                                                                                    Interrupt

                                    ICxCON                                             Logic

                                    Data Bus                                             Set Flag

                                                                                              ICxIF

      Note:        Where ‘x’ is shown, reference is made to the registers or bits associated to the respective input

                   capture channels 1 through N.

 2006-2014 Microchip Technology Inc.                                                                                          DS70000178D-page 97
dsPIC30F1010/202X

10.1     Simple Capture Event Mode                              10.1.3     TIMER2 AND TIMER3 SELECTION

The simple capture events in the dsPIC30F product                          MODE

family are:                                                     The input capture module consists of up to 8 input cap-

•   Capture every falling edge                                  ture channels. Each channel can select between one of

                                                                two timers for the time base, Timer2 or Timer3.

•   Capture every rising edge                                   Selection  of  the  timer     resource  is  accomplished

•   Capture every 4th rising edge                               through SFR bit ICTMR (ICxCON<7>). Timer3 is the

•   Capture every 16th rising edge                              default timer resource available for the input capture

•   Capture every rising and falling edge                       module.

These simple Input Capture modes are configured by              10.1.4     HALL SENSOR MODE

setting the appropriate bits ICM<2:0> (ICxCON<2:0>).

                                                                When the input capture module is set for capture on

10.1.1        CAPTURE PRESCALER                                 every edge, rising and falling, ICM<2:0> = 001, the fol-

There are four input capture prescaler settings, speci-         lowing operations are performed by the input capture

fied by bits ICM<2:0> (ICxCON<2:0>). Whenever the               logic:

capture channel is turned off, the prescaler counter will       •  The input capture interrupt flag is set on every

be  cleared.    In  addition,  any   Reset  will  clear  the       edge, rising and falling.

prescaler counter.                                              •  The Interrupt on Capture mode setting bits,

10.1.2        CAPTURE BUFFER OPERATION                             ICI<1:0>, are ignored, since every capture

                                                                   generates an interrupt.

Each capture channel has an associated FIFO buffer,             •  A Capture Overflow condition is not generated in

which is four 16-bit words deep. There are two status              this mode.

flags, which provide status on the FIFO buffer:

•   ICBFNE – Input Capture Buffer Not Empty

•   ICOV – Input Capture Overflow

The ICBFNE will be set on the first input capture event

and remain set until all capture events have been read

from the FIFO. As each word is read from the FIFO, the

remaining words are advanced by one position within

the buffer.

In  the  event  that  the  FIFO  is  full  with  four  capture

events and a fifth capture event occurs prior to a read

of the FIFO, an Overflow condition will occur and the

ICOV bit will be set to a logic ‘1’. The fifth capture event

is lost and is not stored in the FIFO. No additional

events will be captured until all four events have been

read from the buffer.

If a FIFO read is performed after the last read and no

new capture event has been received, the read will

yield indeterminate results.

DS70000178D-page 98                                                                  2006-2014 Microchip Technology Inc.
                                                                 dsPIC30F1010/202X

10.2        Input Capture Operation During                       10.2.2   INPUT CAPTURE IN CPU IDLE

            Sleep and Idle Modes                                          MODE

An input capture event will generate a device wake-up            CPU Idle mode allows input capture module operation

or interrupt, if enabled, if the device is in CPU Idle or        with full functionality. In the CPU Idle mode, the Inter-

Sleep mode.                                                      rupt mode selected by the ICI<1:0> bits are applicable,

                                                                 as well as the 4:1 and 16:1 capture prescale settings,

Independent  of    the    timer  being  enabled,  the     input  which are defined by control bits ICM<2:0>. This mode

capture module will wake-up from the CPU Sleep or                requires the selected timer to be enabled. Moreover, the

Idle mode when a capture event occurs, if ICM<2:0> =             ICSIDL bit must be asserted to a logic ‘0’.

111 and the interrupt enable bit is asserted. The same           If the input capture module is defined as ICM<2:0> =

wake-up can generate an interrupt, if the conditions for         111 in CPU Idle mode, the input capture pin will serve

processing   the   interrupt     have   been  satisfied.  The    only as an external interrupt pin.

wake-up feature is useful as a method of adding extra

external pin interrupts.                                         10.3     Input Capture Interrupts

10.2.1      INPUT CAPTURE IN CPU SLEEP                           The input capture channels have the ability to generate

            MODE                                                 an interrupt, based upon the selected number of cap-

CPU Sleep mode allows input capture module opera-                ture events. The selection number is set by control bits

tion  with  reduced     functionality.  In  the  CPU      Sleep  ICI<1:0> (ICxCON<6:5>).

mode, the ICI<1:0> bits are not applicable, and the              Each channel provides an interrupt flag (ICxIF) bit. The

input capture module can only function as an external            respective capture channel interrupt flag is located in

interrupt source.                                                the corresponding IFSx STATUS register.

The capture module must be configured for interrupt              Enabling an interrupt is accomplished via the respec-

only on the rising edge (ICM<2:0> = 111), in order for           tive capture channel interrupt enable (ICxIE) bit. The

the input capture module to be used while the device             capture  interrupt  enable  bit      is  located  in  the

is in Sleep mode. The prescale settings of 4:1 or 16:1           corresponding IEC Control register.

are not applicable in this mode.

 2006-2014 Microchip Technology Inc.                                                                DS70000178D-page 99
DS70000178D-page 100                   TABLE 10-1:      INPUT CAPTURE REGISTER MAP                                                                                                                                                       dsPIC30F1010/202X

                                       SFR Name  Addr.  Bit 15          Bit 14  Bit 13  Bit 12  Bit 11  Bit 10  Bit 9  Bit 8                         Bit 7  Bit 6  Bit 5  Bit 4  Bit 3  Bit 2  Bit 1     Bit 0        Reset State

                                       IC1BUF    0140                                                              Input 1 Capture Register                                                                     uuuu  uuuu  uuuu   uuuu

                                       IC1CON    0142   —               —       ICSIDL  —       —       —       —      —      ICTMR                         ICI<1:0>      ICOV   ICBNE         ICM<2:0>         0000  0000  0000   0000

                                       Legend:   u = uninitialized bit

                                       Note:     Refer to the “dsPIC30F Family Reference Manual” (DS70046) for descriptions of register bit fields.

 2006-2014 Microchip Technology Inc.
                                                                         dsPIC30F1010/202X

11.0      OUTPUT COMPARE MODULE                                       The key operational features of the Output Compare

                                                                      module include:

   Note: This data sheet summarizes features of this group            •  Timer2 and Timer3 Selection mode

   of dsPIC30F devices and is not intended to be a complete

   reference  source.     For  more  information  on  the  CPU,       •  Simple Output Compare Match mode

   peripherals,    register   descriptions  and   general  device     •  Dual Output Compare Match mode

   functionality,  refer  to  the  “dsPIC30F  Family  Reference       •  Simple PWM mode

   Manual” (DS70046).

This section describes the Output Compare module                      •  Output Compare during Sleep and Idle modes

and associated operational modes. The features pro-                   •  Interrupt on Output Compare/PWM Event

vided by this module are useful in applications requiring             These  operating  modes       are  determined  by  setting

operational modes such as:                                            the appropriate bits in the 16-bit OCxCON SFR (where

•  Generation of Variable Width Output Pulses                         x = 1 and 2).

•  Power Factor Correction                                            OCxRS and OCxR in the figure represent the Dual

Figure 11-1 depicts a block diagram of the Output                     Compare registers. In the Dual Compare mode, the

Compare module.                                                       OCxR register is used for the first compare and OCxRS

                                                                      is used for the second compare.

FIGURE 11-1:                   OUTPUT COMPARE MODE                    BLOCK DIAGRAM

                                                                                Set Flag bit

                                                                                     OCxIF

                                     OCxRS

                                        OCxR                                    Output        S  Q              OCx

                                                                                Logic         R

                                                                                3                Output Enable

                                                                         OCM<2:0>                               OCFLTA

                                   Comparator                            Mode Select

                               0                  1   OCTSEL       0         1

   From   General  Pupose

   Timer  Module

                             TMR2<15:0        TMR3<15:0> T2P2_MATCH      T3P3_MATCH

   Note:           Where ‘x’ is shown, reference is made to the registers associated with the respective output compare

                   channels 1 and 2.

 2006-2014 Microchip Technology Inc.                                                                    DS70000178D-page 101
dsPIC30F1010/202X

11.1        Timer2 and Timer3 Selection Mode                   11.3.2      CONTINUOUS PULSE MODE

Each output compare channel can select between one             For the user to configure the module for the generation

of two 16-bit timers: Timer2 or Timer3.                        of a continuous stream of output pulses, the following

The selection of the timers is controlled by the OCTSEL        steps are required:

bit (OCxCON<3>). Timer2 is the default timer resource          •   Determine instruction cycle time TCY.

for the Output Compare module.                                 •   Calculate desired pulse value based on TCY.

                                                               •   Calculate timer to start pulse width from timer start

11.2        Simple Output Compare Match                            value of 0x0000.

            Mode                                               •   Write pulse width start and stop times into OCxR

                                                                   and OCxRS (x denotes channel 1, 2) compare

When control bits OCM<2:0> (OCxCON<2:0>) = 001,                    registers, respectively.

010 or 011, the selected output compare channel is             •   Set timer period register to value equal to, or

configured for one of three simple Output Compare                  greater than, value in OCxRS compare register.

Match modes:                                                   •   Set OCM<2:0> = 101.

•   Compare forces I/O pin low                                 •   Enable timer, TON (TxCON<15>) = 1.

•   Compare forces I/O pin high

•   Compare toggles I/O pin                                    11.4       Simple PWM Mode

The OCxR register is used in these modes. The OCxR             When control bits OCM<2:0> (OCxCON<2:0>) = 110

register is loaded with a value and is compared to the         or 111, the selected output compare channel is config-

selected incrementing timer count. When a compare              ured for the PWM mode of operation. When configured

occurs, one of these Compare Match modes occurs. If            for the PWM mode of operation, OCxR is the Main latch

the counter resets to zero before reaching the value in        (read-only) and OCxRS is the secondary latch. This

OCxR, the state of the OCx pin remains unchanged.              enables glitchless PWM transitions.

11.3        Dual Output Compare Match Mode                     The user must perform the following steps in order to

                                                               configure   the  output       compare  module    for  PWM

When control bits OCM<2:0> (OCxCON<2:0>) = 100                 operation:

or 101, the selected output compare channel is config-         1.  Set the PWM period by writing to the appropriate

ured   for  one  of  two  Dual    Output  Compare    modes,        period register.

which are:                                                     2.  Set the PWM duty cycle by writing to the OCxRS

•   Single Output Pulse mode                                       register.

•   Continuous Output Pulse mode                               3.  Configure the output compare module for PWM

11.3.1      SINGLE PULSE MODE                                      operation.

                                                               4.  Set the TMRx prescale value and enable the

For the user to configure the module for the generation            Timer, TON (TxCON<15>) = 1.

of  a  single    output   pulse,  the  following  steps   are

required (assuming the timer is off):

•   Determine instruction cycle time TCY.

•   Calculate desired pulse width value based on TCY.

•   Calculate time to start pulse from timer start value

    of 0x0000.

•   Write pulse width start and stop times into OCxR

    and OCxRS compare registers (x denotes

    channel 1, 2).

•   Set timer period register to value equal to, or

    greater than, value in OCxRS compare register.

•   Set OCM<2:0> = 100.

•   Enable timer, TON (TxCON<15>) = 1.

To initiate another single pulse, issue another write to

set OCM<2:0> = 100.

DS70000178D-page 102                                                                  2006-2014 Microchip Technology Inc.
                                                                    dsPIC30F1010/202X

11.4.1          PWM PERIOD                                          11.5  Output Compare Operation During

The PWM period is specified by writing to the PRx reg-                    CPU Sleep Mode

ister.  The     PWM       period   can  be     calculated    using  When  the  CPU         enters  the    Sleep  mode,  all  internal

Equation 11-1.                                                      clocks are stopped. Therefore, when the CPU enters

EQUATION 11-1:                PWM PERIOD                            the Sleep state, the output compare channel will drive

                                                                    the pin to the active state that was observed prior to

        PWM period        =   [(PRx) + 1] • 4 • TOSC •              entering the CPU Sleep state.

                              (TMRx prescale value)                 For  example,      if  the  pin  was  high   when   the  CPU

                                                                    entered the Sleep state, the pin will remain high. Like-

PWM frequency is defined as 1/[PWM period].                         wise, if the pin was low when the CPU entered the

                                                                    Sleep state, the pin will remain low. In either case, the

When    the     selected     TMRx  is   equal  to  its  respective  output compare module will resume operation when

period register, PRx, the following four events occur on            the device wakes up.

the next increment cycle:

•  TMRx is cleared.                                                 11.6  Output Compare Operation During

•  The OCx pin is set.                                                    CPU Idle Mode

   -    Exception 1: If PWM duty cycle is 0x0000,                   When  the  CPU         enters    the  Idle   mode,  the  output

        the OCx pin will remain low.                                compare module can operate with full functionality.

   -    Exception 2: If duty cycle is greater than PRx,             The output compare channel will operate during the

        the pin will remain high.                                   CPU Idle mode if the OCSIDL bit (OCxCON<13>) is at

•  The PWM duty cycle is latched from OCxRS into                    logic ‘0’ and the selected time base (Timer2 or Timer3)

   OCxR.                                                            is enabled and the TSIDL bit of the selected timer is

•  The corresponding timer interrupt flag is set.                   set to logic ‘0’.

See     Figure 11-1     for  key  PWM   period     comparisons.

Timer3 is referred to in the figure for clarity.

11.4.2          PWM WITH FAULT PROTECTION

                INPUT PIN

When control bits OCM<2:0> (OCxCON<2:0>) = 111,

Fault protection is enabled via the OCFLTA pin. If the a

logic ‘0’ is detected on the OCFLTA pin, the output pins

are     placed  in   a  high-impedance         state.   The  state

remains until:

•  the external Fault condition has been removed

   and

•  the PWM mode is reenabled by writing to the

   appropriate control bits

As a result of the Fault condition, the OCxIF interrupt is

asserted, and an interrupt will be generated, if enabled.

Upon detection of the Fault condition, the OCFLTx bit

in the OCxCON register is asserted high. This bit is a

read-only bit and will be cleared once the external Fault

condition has been removed, and the PWM mode is

reenabled       by   writing  the  appropriate         mode  bits,

OCM<2:0> in the OCxCON register.

 2006-2014 Microchip Technology Inc.                                                                     DS70000178D-page 103
dsPIC30F1010/202X

FIGURE 11-1:            PWM OUTPUT TIMING

                                                     Period

                                          Duty Cycle

                        TMR3 = PR3                                     TMR3 = PR3

                        T3IF = 1                                       T3IF = 1

                        (Interrupt Flag)                               (Interrupt Flag)

                  OCxR = OCxRS                                         OCxR = OCxRS

                                          TMR3 = Duty Cycle (OCxR)               TMR3    =  Duty  Cycle  (OCxR)

11.7     Output Compare Interrupts

The output compare channels have the ability to gener-

ate an interrupt on a compare match, for whichever

Match mode has been selected.

For all modes except the PWM mode, when a compare

event occurs, the respective interrupt flag (OCxIF) is

asserted and an interrupt will be generated