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

产品描述

搜索
 

DSPIC30F8011BT-30I/P

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

器件描述

16-BIT, FLASH, 20 MHz, MICROCONTROLLER, PDIP18

16位, FLASH, 20 MHz, 单片机, PDIP18

参数
DSPIC30F8011BT-30I/P外部数据总线宽度 0.0
DSPIC30F8011BT-30I/P输入输出总线数量 12
DSPIC30F8011BT-30I/P端子数量 18
DSPIC30F8011BT-30I/P最小工作温度 -40 Cel
DSPIC30F8011BT-30I/P最大工作温度 85 Cel
DSPIC30F8011BT-30I/P线速度 20 MHz
DSPIC30F8011BT-30I/P加工封装描述 0.300 INCH, PLASTIC, DIP-18
DSPIC30F8011BT-30I/P状态 Active
DSPIC30F8011BT-30I/Pmicroprocessor_microcontroller_peripheral_ic_type MICROCONTROLLER
DSPIC30F8011BT-30I/PADC通道 YES
DSPIC30F8011BT-30I/P地址总线宽度 0.0
DSPIC30F8011BT-30I/P位数 16
DSPIC30F8011BT-30I/Pclock_frequency_max 40 MHz
DSPIC30F8011BT-30I/PDAC通道 NO
DSPIC30F8011BT-30I/PDMA通道 NO
DSPIC30F8011BT-30I/Pjesd_30_code R-PDIP-T18
DSPIC30F8011BT-30I/P包装材料 PLASTIC/EPOXY
DSPIC30F8011BT-30I/Ppackage_code DIP
DSPIC30F8011BT-30I/P包装形状 RECTANGULAR
DSPIC30F8011BT-30I/P包装尺寸 IN-LINE
DSPIC30F8011BT-30I/PPWM通道 YES
DSPIC30F8011BT-30I/PROM编程 FLASH
DSPIC30F8011BT-30I/Pseated_height_max 5.33 mm
DSPIC30F8011BT-30I/P额定供电电压 3 V
DSPIC30F8011BT-30I/P最小供电电压 2.5 V
DSPIC30F8011BT-30I/P最大供电电压 5.5 V
DSPIC30F8011BT-30I/P表面贴装 NO
DSPIC30F8011BT-30I/P工艺 CMOS
DSPIC30F8011BT-30I/P温度等级 INDUSTRIAL
DSPIC30F8011BT-30I/P端子形式 THROUGH-HOLE
DSPIC30F8011BT-30I/P端子间距 2.54 mm
DSPIC30F8011BT-30I/P端子位置 DUAL
DSPIC30F8011BT-30I/Plength 22.86 mm
DSPIC30F8011BT-30I/Pwidth 7.62 mm

DSPIC30F8011BT-30I/P器件文档内容

dsPIC30F2011/2012/3012/3013
                         Data Sheet

                  High-Performance, 16-bit
                  Digital Signal Controllers

2008 Microchip Technology Inc.  DS70139F
Note the following details of the code protection feature on Microchip devices:
Microchip products meet the specification contained in their particular Microchip Data Sheet.

Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
      intended manner and under normal conditions.

There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
      knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip's Data
      Sheets. Most likely, the person doing so is engaged in theft of intellectual property.

Microchip is willing to work with the customer who is concerned about the integrity of their code.

Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
      mean that we are guaranteeing the product as "unbreakable."

Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip's code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.

Information contained in this publication regarding device         Trademarks
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to     The Microchip name and logo, the Microchip logo, Accuron,
ensure that your application meets with your specifications.       dsPIC, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro,
MICROCHIP MAKES NO REPRESENTATIONS OR                              PICSTART, PRO MATE, rfPIC and SmartShunt are registered
WARRANTIES OF ANY KIND WHETHER EXPRESS OR                          trademarks of Microchip Technology Incorporated in the
IMPLIED, WRITTEN OR ORAL, STATUTORY OR                             U.S.A. and other countries.
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,                        FilterLab, Linear Active Thermistor, MXDEV, MXLAB,
QUALITY, PERFORMANCE, MERCHANTABILITY OR                           SEEVAL, SmartSensor and The Embedded Control Solutions
FITNESS FOR PURPOSE. Microchip disclaims all liability             Company are registered trademarks of Microchip Technology
arising from this information and its use. Use of Microchip        Incorporated in the U.S.A.
devices in life support and/or safety applications is entirely at
the buyer's risk, and the buyer agrees to defend, indemnify and    Analog-for-the-Digital Age, Application Maestro, CodeGuard,
hold harmless Microchip from any and all damages, claims,          dsPICDEM, dsPICDEM.net, dsPICworks, dsSPEAK, ECAN,
suits, or expenses resulting from such use. No licenses are        ECONOMONITOR, FanSense, In-Circuit Serial
conveyed, implicitly or otherwise, under any Microchip             Programming, ICSP, ICEPIC, Mindi, MiWi, MPASM, MPLAB
intellectual property rights.                                      Certified logo, MPLIB, MPLINK, mTouch, PICkit, PICDEM,
                                                                   PICDEM.net, PICtail, PIC32 logo, PowerCal, PowerInfo,
                                                                   PowerMate, PowerTool, REAL ICE, rfLAB, Select Mode, Total
                                                                   Endurance, UNI/O, WiperLock and ZENA are trademarks of
                                                                   Microchip Technology Incorporated in the U.S.A. and other
                                                                   countries.

                                                                   SQTP is a service mark of Microchip Technology Incorporated
                                                                   in the U.S.A.

                                                                   All other trademarks mentioned herein are property of their
                                                                   respective companies.

                                                                   2008, Microchip Technology Incorporated, Printed in the
                                                                   U.S.A., All Rights Reserved.

                                                                        Printed on recycled paper.

                                                                   Microchip received ISO/TS-16949:2002 certification for its worldwide
                                                                   headquarters, design and wafer fabrication facilities in Chandler and
                                                                   Tempe, Arizona; Gresham, Oregon and design centers in California
                                                                   and India. The Company's quality system processes and procedures
                                                                   are for its PIC MCUs and dsPIC DSCs, KEELOQ code hopping
                                                                   devices, Serial EEPROMs, microperipherals, nonvolatile memory and
                                                                   analog products. In addition, Microchip's quality system for the design
                                                                   and manufacture of development systems is ISO 9001:2000 certified.

DS70139F-page ii                                                    2008 Microchip Technology Inc.
                     dsPIC30F2011/2012/3012/3013

       High-Performance, 16-bit Digital Signal Controllers

Note:  This data sheet summarizes features of        Peripheral Features:
       this group of dsPIC30F devices and is not
       intended to be a complete reference            High-current sink/source I/O pins: 25 mA/25 mA
       source. For more information on the CPU,       Three 16-bit timers/counters; optionally pair up
       peripherals, register descriptions and gen-
       eral device functionality, refer to the          16-bit timers into 32-bit timer modules
       "dsPIC30F Family Reference Manual"             16-bit Capture input functions
       (DS70046). For more information on the         16-bit Compare/PWM output functions
       device instruction set and programming,       3-wire SPI modules (supports four Frame modes)
       refer to the "dsPIC30F/33F Programmer's       I2CTM module supports Multi-Master/Slave mode
       Reference Manual" (DS70157).
                                                        and 7-bit/10-bit addressing
High-Performance Modified RISC CPU:                   Up to two addressable UART modules with FIFO

Modified Harvard architecture                         buffers
C compiler optimized instruction set architecture
Flexible addressing modes                          Analog Features:
83 base instructions
24-bit wide instructions, 16-bit wide data path    12-bit Analog-to-Digital Converter (ADC) with:
Up to 24 Kbytes on-chip Flash program space           - 200 ksps conversion rate
Up to 2 Kbytes of on-chip data RAM                    - Up to 10 input channels
Up to 1 Kbytes of nonvolatile data EEPROM             - Conversion available during Sleep and Idle
16 x 16-bit working register array
Up to 30 MIPS operation:                            Programmable Low-Voltage Detection (PLVD)
                                                      Programmable Brown-out Reset
   - DC to 40 MHz external clock input
   - 4 MHz - 10 MHz oscillator input with            Special Microcontroller Features:

      PLL active (4x, 8x, 16x)                        Enhanced Flash program memory:
Up to 21 interrupt sources:                           - 10,000 erase/write cycle (min.) for
                                                           industrial temperature range, 100K (typical)
   - 8 user-selectable priority levels
   - 3 external interrupt sources                     Data EEPROM memory:
   - 4 processor trap sources                           - 100,000 erase/write cycle (min.) for
                                                           industrial temperature range, 1M (typical)
DSP Features:
                                                      Self-reprogrammable under software control
Dual data fetch                                     Power-on Reset (POR), Power-up Timer (PWRT)
Modulo and Bit-Reversed modes
Two 40-bit wide accumulators with optional            and Oscillator Start-up Timer (OST)
                                                      Flexible Watchdog Timer (WDT) with on-chip
   saturation logic
17-bit x 17-bit single-cycle hardware fractional/     low-power RC oscillator for reliable operation
                                                      Fail-Safe Clock Monitor operation:
   integer multiplier
All DSP instructions are single cycle                 - Detects clock failure and switches to on-chip
                                                           low-power RC oscillator
   - Multiply-Accumulate (MAC) operation
single-cycle 16 shift                              Programmable code protection
                                                      In-Circuit Serial ProgrammingTM (ICSPTM)
                                                      Selectable Power Management modes:

                                                        - Sleep, Idle and Alternate Clock modes

                                                     CMOS Technology:

                                                      Low-power, high-speed Flash technology
                                                      Wide operating voltage range (2.5V to 5.5V)
                                                      Industrial and Extended temperature ranges
                                                      Low-power consumption

2008 Microchip Technology Inc.                     DS70139F-page 3
dsPIC30F2011/2012/3012/3013

dsPIC30F2011/2012/3012/3013 Sensor Family

Device           Pins    Program Memory    SRAM   EEPROM   Timer   Input    Output  A/D 12-bit  UART
                       Bytes Instructions  Bytes    Bytes  16-bit  Cap    Comp/Std  200 Ksps            SPI

                                                                             PWM                            I2CTM

dsPIC30F2011     18 12K  4K                1024           3       2      2         8 ch        1  11
                                                                                                   11
dsPIC30F3012     18 24K  8K                2048   1024     3       2      2         8 ch        1  11
                                                                                                   11
dsPIC30F2012     28 12K  4K                1024           3       2      2         10 ch       1

dsPIC30F3013     28 24K  8K                2048   1024     3       2      2         10 ch       2

DS70139F-page 4                                                               2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

Pin Diagrams                                                                                dsPIC30F3012     18 AVDD
                                                                                               dsPIC30F2011  17 AVSS
            18-Pin PDIP and SOIC                                                                             16 AN6/SCK1/INT0/OCFA/RB6
                                                                                                             15 EMUD2/AN7/OC2/IC2/INT2/RB7
                                                                                    MCLR 1                   14 VDD
                                                    EMUD3/AN0/VREF+/CN2/RB0 2                                13 VSS
                                                    EMUC3/AN1/VREF-/CN3/RB1 3                                12 PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5
                                                                                                             11 PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4
                                                        AN2/SS1/LVDIN/CN4/RB2 4
                                                                         AN3/CN5/RB3 5                       10 EMUC2/OC1/IC1/INT1/RD0
                                                                            OSC1/CLKI 6

                                                                  OSC2/CLKO/RC15 7
                                     EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 8
                                  EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 9

28-Pin PDIP and SOIC                                                                        dsPIC30F2012     28 AVDD

                                                                   MCLR 1                                    27 AVSS
                                   EMUD3/AN0/VREF+/CN2/RB0 2
                                    EMUC3/AN1/VREF-/CN3/RB1 3                                                26 AN6/OCFA/RB6
                                                                                                             25 EMUD2/AN7/RB7
                                        AN2/SS1/LVDIN/CN4/RB2 4                                              24 AN8/OC1/RB8
                                                        AN3/CN5/RB3 5                                        23 AN9/OC2/RB9
                                                        AN4/CN6/RB4 6                                        22 CN17/RF4
                                                        AN5/CN7/RB5 7                                        21 CN18/RF5
                                                                      VSS 8                                  20 VDD
                                                            OSC1/CLKI 9                                      19 VSS
                                                                                                             18 PGC/EMUC/U1RX/SDI1/SDA/RF2
                                                 OSC2/CLKO/RC15 10                                           17 PGD/EMUD/U1TX/SDO1/SCL/RF3
                    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 11                                                       16 SCK1/INT0/RF6
                  EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 12
                                                                                                             15 EMUC2/IC1/INT1/RD8
                                                                      VDD 13
                                                        IC2/INT2/RD9 14

28-Pin SPDIP and SOIC                                                                       dsPIC30F3013     28 AVDD

                                                                   MCLR 1                                    27 AVSS
                                   EMUD3/AN0/VREF+/CN2/RB0 2
                                    EMUC3/AN1/VREF-/CN3/RB1 3                                                26 AN6/OCFA/RB6
                                                                                                             25 EMUD2/AN7/RB7
                                        AN2/SS1/LVDIN/CN4/RB2 4                                              24 AN8/OC1/RB8
                                                        AN3/CN5/RB3 5                                        23 AN9/OC2/RB9
                                                        AN4/CN6/RB4 6                                        22 U2RX/CN17/RF4
                                                        AN5/CN7/RB5 7                                        21 U2TX/CN18/RF5
                                                                      VSS 8                                  20 VDD
                                                            OSC1/CLKI 9                                      19 VSS
                                                                                                             18 PGC/EMUC/U1RX/SDI1/SDA/RF2
                                                 OSC2/CLKO/RC15 10                                           17 PGD/EMUD/U1TX/SDO1/SCL/RF3
                    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 11                                                       16 SCK1/INT0/RF6
                  EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 12
                                                                                                             15 EMUC2/IC1/INT1/RD8
                                                                      VDD 13
                                                        IC2/INT2/RD9 14

Note: For descriptions of individual pins, see Section 1.0 "Device Overview".

2008 Microchip Technology Inc.                                                                                                            DS70139F-page 5
dsPIC30F2011/2012/3012/3013

Pin Diagrams

              28-Pin QFN

                                                       28 EMUC3/AN1/VREF-/CN3/RB1
                                                          27 EMUD3/AN0/VREF+/CN2/RB0
                                                              26 MCLR
                                                                  25 AVDD
                                                                      24 AVSS
                                                                         23 AN6/SCK1/INT0/OCFA/RB6
                                                                             22 EMUD2/AN7/OC2/IC2/INT2/RB7

                 AN2/SS1/LVDIN/CN4/RB2              1                                                                21 NC
                                 AN3/CN5/RB3
                                                NC  2                                                                20 NC
                                                NC
                                               VSS  3                                                                19 NC
                                     OSC1/CLKI      4 dsPIC30F2011 18 NC

                          OSC2/CLKO/RC15            5                                                                17 VDD

                                                    6                                                                16 VSS

                                                    7  EMUD1/SOSC1/T2CK/U1ATX/CN1/RC13 8                             15 PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5
                                                          EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 9

                                                              VDD 10
                                                                  NC 11
                                                                      EMUC2/OC1/IC1/INT1/RD0 12
                                                                         NC 13
                                                                              PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4 14

Note: For descriptions of individual pins, see Section 1.0 "Device Overview".

DS70139F-page 6                                                                                                               2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

Pin Diagrams

             28-Pin QFN

                                                               28 EMUC3/AN1/VREF-/CN3/RB1
                                                                  27 EMUD3/AN0/VREF+/CN2/RB0
                                                                      26 MCLR
                                                                          25 AVDD
                                                                              24 AVSS
                                                                                  23 AN6/OCFA/RB6
                                                                                     22 EMUD2/AN7/RB7

                         AN2/SS1/LVDIN/CN4/RB2              1                                                       21 AN8/OC1/RB8
                                         AN3/CN5/RB3
                                         AN4/CN6/RB4        2                                                       20 AN9/OC2/RB9
                                         AN5/CN7/RB5
                                                       VSS  3                                                       19 CN17/RF4
                                             OSC1/CLKI      4 dsPIC30F2012 18 CN18/RF5

                                  OSC2/CLKO/RC15            5                                                       17 VDD

                                                            6                                                       16 VSS

                                                            7  EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 8                    15 PGC/EMUC/U1RX/SDI1/SDA/RF2
                                                                  EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 9

                                                                      VDD 10
                                                                          IC2/INT2/RD9 11
                                                                              EMUC2/IC1/INT1/RD8 12
                                                                                 SCK1/INT0/RF6 13
                                                                                     PGD/EMUD/U1TX/SDO1/SCL/RF3 14

Note: For descriptions of individual pins, see Section 1.0 "Device Overview".

2008 Microchip Technology Inc.                                                                                                                   DS70139F-page 7
dsPIC30F2011/2012/3012/3013

Pin Diagram

            44-Pin QFN

                                                                PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4
                                                                   NC
                                                                       EMUC2/OC1/IC1/INT1/RD0
                                                                           NC
                                                                               NC
                                                                                   NC
                                                                                       NC
                                                                                           NC
                                                                                               VDD
                                                                                                   EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
                                                                                                      EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13

                                                                44 43 42 41 40 39 38 37 36 35 34

PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5                          1                                                                          33  OSC2/CLKO/RC15
                                                       VSS                                                                                 OSC1/CLKI
                                                        NC  2                                                                          32  VSS
                                                      VDD                                                                                  VSS
                                                        NC  3                                                                          31  NC
                                                        NC                                                                                 NC
                                                        NC  4                                                                          30  NC
                                                        NC                                                                                 NC
                                                        NC  5                                                                          29  AN3/CN5/RB3
                                                        NC                                                                                 NC
                                                        NC  6   dsPIC30F3012                                                           28  AN2/SS1/LVDIN/CN4/RB2

                                                            7                                                                          27

                                                            8                                                                          26

                                                            9                                                                          25

                                                            10                                                                         24

                                                            11                                                                         23

                                                                12 13 14 15 16 17 18 19 20 21 22

                                                                EMUD2/AN7/OC2/IC2/INT2/RB7
                                                                    NC

                                                                        AN6/SCK1/INT0/OCFA/RB6
                                                                            NC

                                                                               AVSS
                                                                                   AVDD
                                                                                       MCLR
                                                                                           EMUD3/AN0/VREF+/CN2/RB0
                                                                                               EMUC3/AN1/VREF-/CN3/RB1

                                                                                                   NC
                                                                                                       NC

Note: For descriptions of individual pins, see Section 1.0 "Device Overview".

DS70139F-page 8                                                                                                                            2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

Pin Diagrams

            44-Pin QFN

                                                44 PGD/EMUD/U1TX/SDO1/SCL/RF3
                                                   43 SCK1/INT0/RF6
                                                       42 EMUC2/IC1/INT1/RD8
                                                           41 NC
                                                               40 NC
                                                                   39 NC
                                                                       38 NC
                                                                           37 IC2/INT2/RD9
                                                                               36 VDD
                                                                                   35 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
                                                                                      34 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13

PGC/EMUC/U1RX/SDI1/SDA/RF2 1                    dsPIC30F3013                                                              33 OSC2/CLKO/RC15
                                         VSS 2                                                                            32 OSC1/CLKI
                                          NC 3                                                                            31 VSS
                                         VDD 4                                                                            30 VSS
                                          NC 5                                                                            29 NC
                                          NC 6                                                                            28 NC
                                                                                                                          27 AN5/CN7/RB5
                       U2TX/CN18/RF5 7                                                                                    26 AN4/CN6/RB4
                                          NC 8                                                                            25 AN3/CN5/RB3
                                                                                                                          24 NC
                       U2RX/CN17/RF4 9                                                                                    23 AN2/SS1/LVDIN/CN4/RB2
                          AN9/OC2/RB9 10
                          AN8/OC1/RB8 11

                                                EMUD2/AN7/RB7 12
                                                    NC 13

                                                       AN6/OCFA/RB6 14
                                                           NC 15

                                                               AVSS 16
                                                                   AVDD 17
                                                                       MCLR 18
                                                                           EMUD3/AN0/VREF+/CN2/RB0 19
                                                                               EMUC3/AN1/VREF-/CN3/RB1 20

                                                                                   NC 21
                                                                                       NC 22

Note: For descriptions of individual pins, see Section 1.0 "Device Overview".

2008 Microchip Technology Inc.                                                                                          DS70139F-page 9
dsPIC30F2011/2012/3012/3013

Table of Contents

1.0 Device Overview ........................................................................................................................................................................ 11
2.0 CPU Architecture Overview........................................................................................................................................................ 19
3.0 Memory Organization ................................................................................................................................................................. 29
4.0 Address Generator Units ............................................................................................................................................................ 43
5.0 Flash Program Memory .............................................................................................................................................................. 49
6.0 Data EEPROM Memory ............................................................................................................................................................. 55
7.0 I/O Ports ..................................................................................................................................................................................... 59
8.0 Interrupts .................................................................................................................................................................................... 65
9.0 Timer1 Module ........................................................................................................................................................................... 73
10.0 Timer2/3 Module ........................................................................................................................................................................ 77
11.0 Input Capture Module................................................................................................................................................................. 83
12.0 Output Compare Module ............................................................................................................................................................ 87
13.0 SPITM Module ............................................................................................................................................................................. 91
14.0 I2CTM Module ............................................................................................................................................................................. 95
15.0 Universal Asynchronous Receiver Transmitter (UART) Module .............................................................................................. 103
16.0 12-bit Analog-to-Digital Converter (ADC) Module .................................................................................................................... 111
17.0 System Integration ................................................................................................................................................................... 121
18.0 Instruction Set Summary .......................................................................................................................................................... 135
19.0 Development Support............................................................................................................................................................... 143
20.0 Electrical Characteristics .......................................................................................................................................................... 147
21.0 Packaging Information.............................................................................................................................................................. 185
Index .................................................................................................................................................................................................. 197
The Microchip Web Site ..................................................................................................................................................................... 203
Customer Change Notification Service .............................................................................................................................................. 203
Customer Support .............................................................................................................................................................................. 203
Reader Response .............................................................................................................................................................................. 204
Product Identification System............................................................................................................................................................. 205

                                    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 or fax the Reader Response Form in the back of this data sheet to (480) 792-4150. We
  welcome your feedback.

Most Current Data Sheet

  To obtain the most up-to-date version of this data sheet, please register at our Worldwide Web site at:
         http://www.microchip.com

  You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.
  The last character of the literature number is the version number, (e.g., DS30000A is version A of document DS30000).

Errata

  An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
  devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
  of silicon and revision of document to which it applies.
  To determine if an errata sheet exists for a particular device, please check with one of the following:
   Microchip's Worldwide Web site; http://www.microchip.com
   Your local Microchip sales office (see last page)
  When contacting a sales office, please specify which device, revision of silicon and data sheet (include literature number) you are
  using.

Customer Notification System

  Register on our web site at www.microchip.com to receive the most current information on all of our products.

DS70139F-page 10   2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

1.0 DEVICE OVERVIEW

Note:  This data sheet summarizes features of
       this group of dsPIC30F devices and is not
       intended to be a complete reference
       source. For more information on the CPU,
       peripherals, register descriptions and
       general device functionality, refer to the
       "dsPIC30F Family Reference Manual"
       (DS70046). For more information on the
       device instruction set and programming,
       refer to the "dsPIC30F/33F Programmer's
       Reference Manual" (DS70157).

This data sheet contains information specific to the
dsPIC30F2011, dsPIC30F2012, dsPIC30F3012 and
dsPIC30F3013 Digital Signal Controllers (DSC). These
devices contain extensive Digital Signal Processor
(DSP) functionality within a high-performance 16-bit
microcontroller (MCU) architecture.

The following block diagrams depict the architecture for
these devices:

Figure 1-1 illustrates the dsPIC30F2011
Figure 1-2 illustrates the dsPIC30F2012
Figure 1-3 illustrates the dsPIC30F3012
Figure 1-4 illustrates the dsPIC30F3013

Following the block diagrams, Table 1-1 relates the I/O
functions to pinout information.

2008 Microchip Technology Inc.                          DS70139F-page 11
dsPIC30F2011/2012/3012/3013

FIGURE 1-1:           dsPIC30F2011 BLOCK DIAGRAM

                                        Y Data Bus

                                                                            X Data Bus

                                                           16        16 16        16

Interrupt                PSV & Table                          Data Latch Data Latch
Controller
                          Data Access   8                      Y Data           X Data
                  24  24 Control Block
                                                       16          RAM          RAM
Address Latch
Program Memory                                                 (512 bytes) (512 bytes)
                                                                            Address 16
   (12 Kbytes)                                                 Address
  Data Latch
                                                               Latch            Latch

                                                                     16 16          16               EMUD3/AN0/VREF+/CN2/RB0
                                                                                                     EMUC3/AN1/VREF-/CN3/RB1
                      24                                       Y AGU    X RAGU                       AN2/SS1/LVDIN/CN4/RB2
                                                                        X WAGU                       AN3/CN5/RB3
                                       PCU PCH PCL                                                   PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4
                                                                                                     PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5
                                       Program Counter                                               AN6/SCK1/INT0/OCFA/RB6
                                                                                                     EMUD2/AN7/OC2/IC2/INT2/RB7
                                    Stack    Loop
                                   Control  Control                                                 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
                                             Logic                                                  EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
                                    Logic                                                           OSC2/CLKO/RC15

                                                               Effective Address             PORTB  EMUC2/OC1/IC1/INT1/RD0

                                   16

                                        ROM Latch                       16

                          24

                         16                 IR                                           16
                                                   Decode                 16 x 16
                      Instruction                                      W Reg Array
                      Decode &                                                               PORTC
                       Control                                     16 16                     PORTD

                                         Power-up           DSP             Divide
                                           Timer           Engine            Unit

OSC1/CLKI               Timing           Oscillator
                      Generation       Start-up Timer

                                        POR/BOR                         ALU<16>
                                           Reset
                         MCLR                              16               16
                                        Watchdog
                       VDD, VSS            Timer
                      AVDD, AVSS
                                       Low-Voltage
                                           Detect

                          12-bit ADC          Input             Output          I2CTM
                                            Capture            Compare
                                            Module              Module

                                            Timers             SPI1         UART1

DS70139F-page 12                                                                                     2008 Microchip Technology Inc.
                                            dsPIC30F2011/2012/3012/3013

FIGURE 1-2:           dsPIC30F2012 BLOCK DIAGRAM

                                        Y Data Bus

                                                                            X Data Bus

                                                           16        16 16        16

Interrupt                PSV & Table                          Data Latch Data Latch
Controller
                          Data Access   8          16            Y Data       X Data
                  24  24 Control Block                            RAM          RAM
                                                               (512 bytes)  (512 bytes)
Address Latch                                                                Address 16
Program Memory                                                  Address
                                                                               Latch
   (12 Kbytes)                                                    Latch
   Data Latch
                                                                     16 16          16           EMUD3/AN0/VREF+/CN2/RB0
                                                                                                 EMUC3/AN1/VREF-/CN3/RB1
                      24                                       Y AGU        X RAGU               AN2/SS1/LVDIN/CN4/RB2
                                                                            X WAGU               AN3/CN5/RB3
                                   PCU PCH PCL                                                   AN4/CN6/RB4
                                                                                                 AN5/CN7/RB5
                                   Program Counter                                               AN6/OCFA/RB6
                                                                                                 EMUD2/AN7/RB7
                                    Stack    Loop                                                AN8/OC1/RB8
                                   Control  Control                                              AN9/OC2/RB9
                                             Logic
                                    Logic                                                        EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
                                                                                                 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
                                  16                           Effective Address          PORTB  OSC2/CLKO/RC15
                                                                         16
                                             ROM Latch                                           EMUC2/IC1/INT1/RD8
                          24                                                                     IC2/INT2/RD9

                         16                 IR                                        16  PORTC  PGC/EMUC/U1RX/SDI1/SDA/RF2
                                                   Decode              16 x 16                   PGD/EMUD/U1TX/SDO1/SCL/RF3
                      Instruction                                   W Reg Array                  CN17/RF4
                      Decode &                                                                   CN18/RF5
                       Control                                  16 16                            SCK1/INT0/RF6

                                     Power-up            DSP                Divide
                                       Timer            Engine               Unit

OSC1/CLKI               Timing       Oscillator
                      Generation   Start-up Timer

                                    POR/BOR                           ALU<16>
                                       Reset
                                                        16                  16            PORTD
                                    Watchdog
                         MCLR          Timer

                       VDD, VSS    Low-Voltage
                      AVDD, AVSS       Detect

                          12-bit ADC         Input           Output             I2CTM
                                            Capture         Compare
                                            Module           Module

                                            Timers             SPI1         UART1

                                                                                          PORTF

2008 Microchip Technology Inc.                                                                 DS70139F-page 13
dsPIC30F2011/2012/3012/3013

FIGURE 1-3:           dsPIC30F3012 BLOCK DIAGRAM

                                        Y Data Bus

                                                                            X Data Bus

                                                           16        16 16        16

Interrupt                PSV & Table                          Data Latch   Data Latch
Controller
                          Data Access   8              16        Y Data       X Data
                  24  24 Control Block                            RAM          RAM
                                                               (1 Kbytes)   (1 Kbytes)
Address Latch                                                                Address 16
Program Memory                                                  Address
                                                                  Latch       Latch
   (24 Kbytes)
Data EEPROM                                                         16 16          16               EMUD3/AN0/VREF+/CN2/RB0
                                                                                                     EMUC3/AN1/VREF-/CN3/RB1
    (1 Kbytes)        24                                       Y AGU       X RAGU                    AN2/SS1/LVDIN/CN4/RB2
  Data Latch                                                               X WAGU                    AN3/CN5/RB3
                                       PCU PCH PCL                                                   PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4
                                                                                                     PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5
                                       Program Counter                                               AN6/SCK1/INT0/OCFA/RB6
                                                                                                     EMUD2/AN7/OC2/IC2/INT2/RB7
                                    Stack    Loop
                                   Control  Control                                                 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
                                             Logic                                                  EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
                                    Logic                                                           OSC2/CLKO/RC15

                                                               Effective Address             PORTB  EMUC2/OC1/IC1/INT1/RD0

                                   16

                                        ROM Latch                       16

                          24

                         16                 IR                                           16
                                                   Decode                 16 x 16
                      Instruction                                      W Reg Array
                      Decode &                                                               PORTC
                       Control                                     16 16                     PORTD

                                        Power-up            DSP             Divide
                                           Timer           Engine            Unit

OSC1/CLKI               Timing           Oscillator
                      Generation       Start-up Timer

                                        POR/BOR                         ALU<16>
                                           Reset
                         MCLR                              16               16
                                        Watchdog
                       VDD, VSS            Timer
                      AVDD, AVSS
                                       Low-Voltage
                                           Detect

                          12-bit ADC          Input             Output          I2CTM
                                            Capture            Compare
                                            Module              Module

                                            Timers             SPI1         UART1

DS70139F-page 14                                                                                     2008 Microchip Technology Inc.
                                           dsPIC30F2011/2012/3012/3013

FIGURE 1-4:          dsPIC30F3013 BLOCK DIAGRAM

                                       Y Data Bus

                                                                          X Data Bus

                                                          16        16 16        16

Interrupt               PSV & Table                          Data Latch Data Latch
Controller
                         Data Access   8          16            Y Data       X Data
                 24  24 Control Block                            RAM          RAM
                                                              (1 Kbytes)
Address Latch                                                              (1 Kbytes)
Program Memory                                                 Address      Address 16

   (24 Kbytes)                                                Latch            Latch
Data EEPROM
                                                                    16 16          16           EMUD3/AN0/VREF+/CN2/RB0
    (1 Kbytes)                                                                                  EMUC3/AN1/VREF-/CN3/RB1
  Data Latch         24                                       Y AGU       X RAGU                AN2/SS1/LVDIN/CN4/RB2
                                                                          X WAGU                AN3/CN5/RB3
                                  PCU PCH PCL                                                   AN4/CN6/RB4
                                                                                                AN5/CN7/RB5
                                  Program Counter                                               AN6/OCFA/RB6
                                                                                                EMUD2/AN7/RB7
                                   Stack    Loop                                                AN8/OC1/RB8
                                  Control  Control                                              AN9/OC2/RB9
                                            Logic
                                   Logic                                                        EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
                                                                                                EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
                                 16                           Effective Address          PORTB  OSC2/CLKO/RC15
                                                                        16
                                            ROM Latch                                           EMUC2/IC1/INT1/RD8
                         24                                                                     IC2/INT2/RD9

                        16                 IR                                        16  PORTC  PGC/EMUC/U1RX/SDI1/SDA/RF2
                                                  Decode              16 x 16                   PGD/EMUD/U1TX/SDO1/SCL/RF3
                     Instruction                                   W Reg Array                  U2RX/CN17/RF4
                     Decode &                                                                   U2TX/CN18/RF5
                      Control                                  16 16                            SCK1/INT0/RF6

                                    Power-up            DSP                Divide
                                      Timer            Engine               Unit

OSC1/CLKI              Timing       Oscillator
                     Generation   Start-up Timer

                                   POR/BOR                           ALU<16>
                                      Reset
                                                       16                  16            PORTD
                                   Watchdog
                        MCLR          Timer

                      VDD, VSS    Low-Voltage
                     AVDD, AVSS       Detect

                         12-bit ADC         Input           Output             I2CTM
                                           Capture         Compare
                                           Module           Module

                                           Timers             SPI1         UART1,
                                                                           UART2

                                                                                         PORTF

2008 Microchip Technology Inc.                                                                DS70139F-page 15
dsPIC30F2011/2012/3012/3013

Table 1-1 provides a brief description of device I/O
pinouts 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

           Pin Name   Pin  Buffer                                                Description
                     Type   Type

AN0 - AN9            I     Analog                        Analog input channels.
AVDD
AVSS                 P     P                             Positive supply for analog module.
CLKI
                     P     P                             Ground reference for analog module.
CLKO
                     I     ST/CMOS External clock source input. Always associated with OSC1 pin

                                                         function.

                     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.

CN0 - CN7            I     ST                            Input change notification inputs.

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

                                                         inputs.

EMUD                 I/O   ST                            ICD Primary Communication Channel data input/output pin.
EMUC
EMUD1                I/O   ST                            ICD Primary Communication Channel clock input/output pin.
EMUC1
EMUD2                I/O   ST                            ICD Secondary Communication Channel data input/output pin.
EMUC2
EMUD3                I/O   ST                            ICD Secondary Communication Channel clock input/output pin.
EMUC3
IC1 - IC2            I/O   ST                            ICD Tertiary Communication Channel data input/output pin.
INT0
INT1                 I/O   ST                            ICD Tertiary Communication Channel clock input/output pin.
INT2
LVDIN                I/O   ST                            ICD Quaternary Communication Channel data input/output pin.
MCLR
                     I/O   ST                            ICD Quaternary Communication Channel clock input/output pin.
OC1-OC2
OCFA                 I     ST                            Capture inputs 1 through 2.
OSC1
                     I     ST                            External interrupt 0.
OSC2
                     I     ST                            External interrupt 1.

                     I     ST                            External interrupt 2.

                     I     Analog                        Low-Voltage Detect Reference Voltage Input pin.

                     I/P   ST                            Master Clear (Reset) input or programming voltage input. This

                                                         pin is an active-low Reset to the device.

                     O     --                            Compare outputs 1 through 2.

                     I     ST                            Compare Fault A input.

                     I     ST/CMOS Oscillator crystal input. ST buffer when configured in RC mode;

                                                         CMOS otherwise.

                     I/O   --                            Oscillator crystal output. Connects to crystal or resonator in

                                                         Crystal Oscillator mode. Optionally functions as CLKO in RC

                                                         and EC modes.

PGD                  I/O   ST                            In-Circuit Serial ProgrammingTM data input/output pin.
PGC
                     I     ST                            In-Circuit Serial Programming clock input pin.

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

RC13 - RC15          I/O   ST                            PORTC is a bidirectional I/O port.

RD0, RD8 - RD9       I/O   ST                            PORTD is a bidirectional I/O port.

RF2 - RF5            I/O   ST                            PORTF is a bidirectional I/O port.

SCK1                 I/O   ST                            Synchronous serial clock input/output for SPI1.
SDI1
SDO1                 I     ST                            SPI1 Data In.
SS1
                     O     --                            SPI1 Data Out.

                     I     ST                            SPI1 Slave Synchronization.

Legend: CMOS =       CMOS compatible input or output                Analog = Analog input
                     Schmitt Trigger input with CMOS levels
           ST =      Input                                          O    = Output

           I      =                                                 P    = Power

DS70139F-page 16                                                                        2008 Microchip Technology Inc.
                                        dsPIC30F2011/2012/3012/3013

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

             Pin Name              Pin    Buffer                                    Description
                                  Type     Type
SCL                                               Synchronous serial clock input/output for I2CTM.
SDA                                I/O      ST    Synchronous serial data input/output for I2C.
SOSCO                              I/O      ST
SOSCI                                             32 kHz low-power oscillator crystal output.
                                    O        --   32 kHz low-power oscillator crystal input. ST buffer when
                                     I  ST/CMOS   configured in RC mode; CMOS otherwise.

T1CK                              I     ST        Timer1 external clock input.
T2CK
                                  I     ST        Timer2 external clock input.

U1RX                              I     ST        UART1 Receive.
U1TX
U1ARX                             O     --        UART1 Transmit.
U1ATX
U2RX                              I     ST        UART1 Alternate Receive.
U2TX
                                  O     --        UART1 Alternate Transmit.

                                  I     ST        UART2 Receive.

                                  O     --        UART2 Transmit.

VDD                               P     --        Positive supply for logic and I/O pins.
VSS
VREF+                             P     --        Ground reference for logic and I/O pins.
VREF-
Legend:                           I     Analog    Analog Voltage Reference (High) input.

                                  I     Analog    Analog Voltage Reference (Low) input.

         CMOS =        CMOS compatible input or output         Analog = Analog input
                       Schmitt Trigger input with CMOS levels
         ST =          Input                                   O   = Output

         I  =                                                  P   = Power

2008 Microchip Technology Inc.                                                            DS70139F-page 17
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 18             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

2.0 CPU ARCHITECTURE                                         Two ways to access data in program memory are:
         OVERVIEW
                                                             The upper 32 Kbytes of data space memory can
Note:  This data sheet summarizes features of                   be mapped into the lower half (user space) of
       this group of dsPIC30F devices and is not                program space at any 16K program word
       intended to be a complete reference                      boundary, defined by the 8-bit Program Space
       source. For more information on the CPU,                 Visibility Page (PSVPAG) register. Thus any
       peripherals, register descriptions and                   instruction can access program space as if it were
       general device functionality, refer to the               data space, with a limitation that the access
       "dsPIC30F Family Reference Manual"                       requires an additional cycle. Only the lower 16
       (DS70046). For more information on the                   bits of each instruction word can be accessed
       device instruction set and programming,                  using this method.
       refer to the "dsPIC30F/33F Programmer's
       Reference Manual" (DS70157).                           Linear indirect access of 32K word pages within
                                                                program space is also possible using any working
This section is an overview of the CPU architecture of          register, via table read and write instructions.
the dsPIC30F. The core has a 24-bit instruction word.           Table read and write instructions can be used to
The Program Counter (PC) is 23 bits wide with the               access all 24 bits of an instruction word.
Least Significant bit (LSb) always clear (see
Section 3.1 "Program Address Space"). The Most               Overhead-free circular buffers (Modulo Addressing)
Significant bit (MSb) is ignored during normal program       are supported in both X and Y address spaces. This is
execution, except for certain specialized instructions.      primarily intended to remove the loop overhead for
Thus, the PC can address up to 4M instruction words          DSP algorithms.
of user program space. An instruction prefetch
mechanism helps maintain throughput. Program loop            The X AGU also supports Bit-Reversed Addressing on
constructs, free from loop count management                  destination effective addresses to greatly simplify input
overhead, are supported using the DO and REPEAT              or output data reordering for radix-2 FFT algorithms.
instructions, both of which are interruptible at any point.  Refer to Section 4.0 "Address Generator Units" for
                                                             details on Modulo and Bit-Reversed Addressing.
2.1 Core Overview
                                                             The core supports Inherent (no operand), Relative,
The working register array consists of 16 x 16-bit           Literal, Memory Direct, Register Direct, Register
registers, each of which can act as data, address or         Indirect, Register Offset and Literal Offset Addressing
offset registers. One working register (W15) operates        modes. Instructions are associated with pre-defined
as a Software Stack Pointer for interrupts and calls.        addressing modes, depending upon their functional
                                                             requirements.
The data space is 64 Kbytes (32K words) and is split
into two blocks, referred to as X and Y data memory.         For most instructions, the core is capable of executing
Each block has its own independent Address Genera-           a data (or program data) memory read, a working
tion Unit (AGU). Most instructions operate solely            register (data) read, a data memory write and a
through the X memory, AGU, which provides the                program (instruction) memory read per instruction
appearance of a single unified data space. The               cycle. As a result, 3 operand instructions are
Multiply-Accumulate (MAC) class of dual source DSP           supported, allowing C = A+B operations to be exe-
instructions operate through both the X and Y AGUs,          cuted in a single cycle.
splitting the data address space into two parts (see
Section 3.2 "Data Address Space"). The X and Y               A DSP engine has been included to significantly
data space boundary is device specific and cannot be         enhance the core arithmetic capability and throughput.
altered by the user. Each data word consists of 2 bytes      It features a high-speed 17-bit by 17-bit multiplier, a
and most instructions can address data either as words       40-bit ALU, two 40-bit saturating accumulators and a
or bytes.                                                    40-bit bidirectional barrel shifter. Data in the accumula-
                                                             tor or any working register can be shifted up to 15 bits
                                                             right, or 16 bits left in a single cycle. The DSP instruc-
                                                             tions operate seamlessly with all other instructions and
                                                             have been designed for optimal real-time performance.
                                                             The MAC class of instructions can concurrently fetch
                                                             two data operands from memory while multiplying two
                                                             W registers. To enable this concurrent fetching of data
                                                             operands, the data space has been split for these
                                                             instructions and linear is for all others. This has been
                                                             achieved in a transparent and flexible manner, by ded-
                                                             icating certain working registers to each address space
                                                             for the MAC class of instructions.

2008 Microchip Technology Inc.                             DS70139F-page 19
dsPIC30F2011/2012/3012/3013

The core does not support a multi-stage instruction         2.2.1 SOFTWARE STACK POINTER/
pipeline. However, a single-stage instruction prefetch                    FRAME POINTER
mechanism is used, which accesses and partially
decodes instructions a cycle ahead of execution, in         The dsPIC DSC devices contain a software stack.
order to maximize available execution time. Most            W15 is the dedicated Software Stack Pointer (SP),
instructions execute in a single cycle with certain         which is automatically modified by exception process-
exceptions.                                                 ing and subroutine calls and returns. However, W15
                                                            can be referenced by any instruction in the same man-
The core features a vectored exception processing           ner as all other W registers. This simplifies the reading,
structure for traps and interrupts, with 62 independent     writing and manipulation of the Stack Pointer (e.g., cre-
vectors. The exceptions consist of up to 8 traps (of        ating stack frames).
which 4 are reserved) and 54 interrupts. Each interrupt
is prioritized based on a user-assigned priority between       Note: In order to protect against misaligned
1 and 7 (1 being the lowest priority and 7 being the                       stack accesses, W15<0> is always clear.
highest), in conjunction with a predetermined `natural
order'. Traps have fixed priorities ranging from 8 to 15.   W15 is initialized to 0x0800 during a Reset. The user
                                                            may reprogram the SP during initialization to any
2.2 Programmer's Model                                      location within data space.

The programmer's model is shown in Figure 2-1 and           W14 has been dedicated as a Stack Frame Pointer, as
consists of 16 x 16-bit working registers (W0 through       defined by the LNK and ULNK instructions. However,
W15), 2 x 40-bit accumulators (ACCA and ACCB),              W14 can be referenced by any instruction in the same
STATUS register (SR), Data Table Page register              manner as all other W registers.
(TBLPAG), Program Space Visibility Page register
(PSVPAG), DO and REPEAT registers (DOSTART,                 2.2.2 STATUS REGISTER
DOEND, DCOUNT and RCOUNT) and Program Coun-
ter (PC). The working registers can act as data,            The dsPIC DSC core has a 16-bit STATUS register
address or offset registers. All registers are memory       (SR), the LSB of which is referred to as the SR Low
mapped. W0 acts as the W register for file register         byte (SRL) and the MSB as the SR High byte (SRH).
addressing.                                                 See Figure 2-1 for SR layout.

Some of these registers have a shadow register asso-        SRL contains all the MCU ALU operation Status flags
ciated with each of them, as shown in Figure 2-1. The       (including the Z bit), as well as the CPU Interrupt Prior-
shadow register is used as a temporary holding register     ity Level Status bits, IPL<2:0>, and the Repeat Active
and can transfer its contents to or from its host register  Status bit, RA. During exception processing, SRL is
upon the occurrence of an event. None of the shadow         concatenated with the MSB of the PC to form a com-
registers are accessible directly. The following rules      plete word value which is then stacked.
apply for transfer of registers into and out of shadows.
                                                            The upper byte of the STATUS register contains the
PUSH.S and POP.S                                          DSP Adder/Subtracter Status bits, the DO Loop Active
   W0, W1, W2, W3, SR (DC, N, OV, Z and C bits              bit (DA) and the Digit Carry (DC) Status bit.
   only) are transferred.
                                                            2.2.3 PROGRAM COUNTER
DO instruction
   DOSTART, DOEND, DCOUNT shadows are                       The program counter is 23 bits wide; bit 0 is always
   pushed on loop start and popped on loop end.             clear. Therefore, the PC can address up to 4M
                                                            instruction words.
When a byte operation is performed on a working reg-
ister, only the Least Significant Byte (LSB) of the target
register is affected. However, a benefit of memory
mapped working registers is that both the Least and
Most Significant Bytes (MSB) can be manipulated
through byte-wide data memory space accesses.

DS70139F-page 20                                             2008 Microchip Technology Inc.
                                         dsPIC30F2011/2012/3012/3013

FIGURE 2-1:    PROGRAMMER'S MODEL

                                         D15                             D0

                                                    W0/WREG                                                    PUSH.S Shadow
                                                                                                                DO Shadow
                                                              W1
                                                                                                          Legend
                                                              W2
                                                                                      Working Registers
                                                              W3

                                                              W4

                          DSP Operand                         W5
                          Registers
                                                              W6
                          DSP Address
                          Registers                           W7

                                                              W8

                                                              W9

                                                              W10

                                                              W11

                                                    W12/DSP Offset

                                                    W13/DSP Write-Back

                                                    W14/Frame Pointer

                                                    W15/Stack Pointer

                                                    SPLIM                       Stack Pointer Limit Register

                                   AD39  AD31                                   AD15                      AD0
                          ACCA
DSP                       ACCB
Accumulators
                                                                         PC0
         PC22

                                                                         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                                                                                   DO Loop End Address
                                             DOEND

                                                    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

2008 Microchip Technology Inc.                                                                          DS70139F-page 21
dsPIC30F2011/2012/3012/3013

2.3 Divide Support                                           The divide instructions must be executed within a
                                                             REPEAT loop. Any other form of execution
The dsPIC DSC devices feature a 16/16-bit signed             (e.g., a series of discrete divide instructions) will not
fractional divide operation, as well as 32/16-bit and        function correctly because the instruction flow depends
16/16-bit signed and unsigned integer divide opera-          on RCOUNT. The divide instruction does not
tions, in the form of single instruction iterative divides.  automatically set up the RCOUNT value and it must,
The following instructions and data sizes are                therefore, be explicitly and correctly specified in the
supported:                                                   REPEAT instruction, as shown in Table 2-1 (REPEAT
                                                             executes the target instruction {operand value+1}
1. DIVF - 16/16 signed fractional divide                     times). The REPEAT loop count must be setup for 18
2. DIV.sd - 32/16 signed divide                              iterations of the DIV/DIVF instruction. Thus, a
3. DIV.ud - 32/16 unsigned divide                            complete divide operation requires 19 cycles.
4. DIV.s - 16/16 signed divide
5. DIV.u - 16/16 unsigned divide                             Note:     The divide flow is interruptible. However,
                                                                       the user needs to save the context as
The 16/16 divides are similar to the 32/16 (same number                appropriate.
of iterations), but the dividend is either zero-extended or
sign-extended during the first iteration.

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.s             Signed divide: Wm/Wn  W0; Rem  W1

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

DIV.u             Unsigned divide: Wm/Wn  W0; Rem  W1

DS70139F-page 22                                                       2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

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/subtracter (with two target accumulators, round     1. Fractional or integer DSP multiply (IF).
and saturation logic).                                    2. Signed or unsigned DSP multiply (US).
                                                          3. Conventional or convergent rounding (RND).
The DSP engine also has the capability to perform         4. Automatic saturation on/off for ACCA (SATA).
inherent accumulator-to-accumulator operations,           5. Automatic saturation on/off for ACCB (SATB).
which require no additional data. These instructions are  6. Automatic saturation on/off for writes to data
ADD, SUB and NEG.
                                                                memory (SATDW).
The dsPIC30F is a single-cycle instruction flow           7. Accumulator Saturation mode selection
architecture, therefore, concurrent operation of the
DSP engine with MCU instruction flow is not possible.           (ACCSAT).
However, some MCU ALU and DSP engine resources
may be used concurrently by the same instruction             Note: For CORCON layout, see Table 3-3.
(e.g., ED, EDAC). See Table 2-2.
                                                          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
EDAC                              A = (x y)2            No

                                  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=Ax*y                 Yes

2008 Microchip Technology Inc.                          DS70139F-page 23
dsPIC30F2011/2012/3012/3013

FIGURE 2-2:       DSP ENGINE BLOCK DIAGRAM

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

                  Carry/Borrow In   Adder

                                        Negate

                                    40        40            40

                                                          Barrel
                                                          Shifter 16

Y Data Bus                              40
                                                                                                                                     X Data Bus
                                    Sign-Extend

                                                            32                         16

                                                                      Zero Backfill

                                                        32
                                    33

                                           17-bit
                                    Multiplier/Scaler

                                    16        16

                                    To/From W Array

DS70139F-page 24                                                          2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

2.4.1 MULTIPLIER                                               2.4.2.1  Adder/Subtracter, Overflow and
                                                                        Saturation
The 17 x 17-bit multiplier is capable of signed or
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            true data (not complemented), whereas in the case of
multiplier input value. The output of the 17 x 17-bit          subtraction, the carry/borrow input is active low and the
multiplier/scaler is a 33-bit value which is                   other input is complemented. The adder/subtracter
sign-extended to 40 bits. Integer data is inherently           generates overflow Status bits SA/SB and OA/OB,
represented as a signed two's complement value,                which are latched and reflected in the STATUS register:
where the MSB is defined as a sign bit. Generally
speaking, the range of an N-bit two's complement                Overflow from bit 39: this is a catastrophic
integer is -2N-1 to 2N-1 1. For a 16-bit integer, the data      overflow in which the sign of the accumulator is
range is -32768 (0x8000) to 32767 (0x7FFF) including              destroyed.
`0'. For a 32-bit integer, the data range is
-2,147,483,648 (0x8000 0000) to 2,147,483,645                   Overflow into guard bits 32 through 39: this is a
(0x7FFF FFFF).                                                    recoverable overflow. This bit is set whenever all
                                                                  the guard bits are not identical to each other.
When the multiplier is configured for fractional
multiplication, the data is represented as a two's             The adder has an additional saturation block which
complement fraction, where the MSB is defined as a             controls accumulator data saturation if selected. It uses
sign bit and the radix point is implied to lie just after the  the result of the adder, the overflow Status bits
sign bit (QX format). The range of an N-bit two's              described above, and the SATA/B (CORCON<7:6>)
complement fraction with this implied radix point is -1.0      and ACCSAT (CORCON<4>) mode control bits to
to (1 21-N). For a 16-bit fraction, the Q15 data range       determine when and to what value to saturate.
is -1.0 (0x8000) to 0.999969482 (0x7FFF) including `0'
and has a precision of 3.01518x10-5. In Fractional             Six STATUS register bits have been provided to
mode, the 16x16 multiply operation generates a 1.31            support saturation and overflow. They are:
product, which has a precision of 4.65661 x 10-10.
                                                               1. OA:
The same multiplier is used to support the MCU                       ACCA overflowed into guard bits
multiply instructions, which include integer 16-bit
signed, unsigned and mixed sign multiplies.                    2. OB:
                                                                     ACCB overflowed into guard bits
The MUL instruction can be directed to use byte or
word-sized operands. Byte operands direct a 16-bit             3. SA:
result. Word operands direct a 32-bit result to the                  ACCA saturated (bit 31 overflow and saturation)
specified register(s) in the W array.                                or
                                                                     ACCA overflowed into guard bits and saturated
2.4.2  DATA ACCUMULATORS AND                                         (bit 39 overflow and saturation)
       ADDER/SUBTRACTER
                                                               4. SB:
The data accumulator consists of a 40-bit                            ACCB saturated (bit 31 overflow and saturation)
adder/subtracter with automatic sign extension logic. It             or
can select one of two accumulators (A or B) as its                   ACCB overflowed into guard bits and saturated
pre-accumulation source and post-accumulation                        (bit 39 overflow and saturation)
destination. For the ADD and LAC instructions, the data
to be accumulated or loaded can be optionally scaled           5. OAB:
via the barrel shifter prior to accumulation.                        Logical OR of OA and OB

                                                               6. SAB:
                                                                     Logical OR of SA and SB

                                                               The OA and OB bits are modified each time data
                                                               passes through the adder/subtracter. When set, they
                                                               indicate that the most recent operation has overflowed
                                                               into the accumulator guard bits (bits 32 through 39).
                                                               The OA and OB bits can also optionally generate an
                                                               arithmetic warning trap when set and the
                                                               corresponding overflow trap flag enable bit (OVATE,
                                                               OVBTE) in the INTCON1 register (refer to Section 8.0
                                                               "Interrupts") is set. This allows the user to take
                                                               immediate action, for example, to correct system gain.

2008 Microchip Technology Inc.                                        DS70139F-page 25
dsPIC30F2011/2012/3012/3013

The SA and SB bits are modified each time data              2.4.2.2 Accumulator `Write-Back'
passes through the adder/subtracter but can only be
cleared by the user. When set, they indicate that the       The MAC class of instructions (with the exception of
accumulator has overflowed its maximum range (bit 31        MPY, MPY.N, ED and EDAC) can optionally write a
for 32-bit saturation or bit 39 for 40-bit saturation) and  rounded version of the high word (bits 31 through 16)
will be saturated if saturation is enabled. When satura-    of the accumulator that is not targeted by the instruction
tion is not enabled, SA and SB default to bit 39 overflow   into data space memory. The write is performed across
and thus indicate that a catastrophic overflow has          the X bus into combined X and Y address space. The
occurred. If the COVTE bit in the INTCON1 register is       following addressing modes are supported:
set, SA and SB bits generate an arithmetic warning trap
when saturation is disabled.                                1. W13, Register Direct:
                                                                  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
and SB (in bit SAB). This allows programmers to check       2. [W13]+=2, Register Indirect with Post-Increment:
one bit in the STATUS register to determine if either             The rounded contents of the non-target
accumulator has overflowed, or one bit to determine if            accumulator are written into the address pointed
either accumulator has saturated. This would be useful            to by W13 as a 1.15 fraction. W13 is then
for complex number arithmetic which typically uses                incremented by 2 (for a word write).
both the accumulators.
                                                            2.4.2.3 Round Logic
The device supports three saturation and overflow
modes:                                                      The round logic is a combinational block which
                                                            performs a conventional (biased) or convergent
1. Bit 39 Overflow and Saturation:                          (unbiased) round function during an accumulator write
      When bit 39 overflow and saturation occurs, the       (store). The Round mode is determined by the state of
      saturation logic loads the maximally positive 9.31    the RND bit in the CORCON register. It generates a
      (0x7FFFFFFFFF) or maximally negative 9.31             16-bit, 1.15 data value, which is passed to the data
      value (0x8000000000) into the target accumula-        space write saturation logic. If rounding is not indicated
      tor. The SA or SB bit is set and remains set until    by the instruction, a truncated 1.15 data value is stored
      cleared by the user. This is referred to as `super    and the least significant word (lsw) is simply discarded.
      saturation' and provides protection against erro-
      neous data or unexpected algorithm problems           Conventional rounding takes bit 15 of the accumulator,
      (e.g., gain calculations).                            zero-extends it and adds it to the ACCxH word (bits 16
                                                            through 31 of the accumulator). If the ACCxL word
2. Bit 31 Overflow and Saturation:                          (bits 0 through 15 of the accumulator) is between
      When bit 31 overflow and saturation occurs, the       0x8000 and 0xFFFF (0x8000 included), ACCxH is
      saturation logic then loads the maximally posi-       incremented. If ACCxL is between 0x0000 and 0x7FFF,
      tive 1.31 value (0x007FFFFFFF) or maximally           ACCxH is left unchanged. A consequence of this
      negative 1.31 value (0x0080000000) into the           algorithm is that over a succession of random rounding
      target accumulator. The SA or SB bit is set and       operations, the value tends to be biased slightly
      remains set until cleared by the user. When this      positive.
      Saturation mode is in effect, the guard bits are
      not used, so the OA, OB or OAB bits are never         Convergent (or unbiased) rounding operates in the
      set.                                                  same manner as conventional rounding, except when
                                                            ACCxL equals 0x8000. If this is the case, the LSb
3. Bit 39 Catastrophic Overflow:                            (bit 16 of the accumulator) of ACCxH is examined. If it
      The bit 39 overflow Status bit from the adder is      is `1', ACCxH is incremented. If it is `0', ACCxH is not
      used to set the SA or SB bit which remains set        modified. Assuming that bit 16 is effectively random in
      until cleared by the user. No saturation operation    nature, this scheme will remove any rounding bias that
      is performed and the accumulator is allowed to        may accumulate.
      overflow (destroying its sign). If the COVTE bit in
      the INTCON1 register is set, a catastrophic           The SAC and SAC.R instructions store either a
      overflow can initiate a trap exception.               truncated (SAC) or rounded (SAC.R) version of the
                                                            contents of the target accumulator to data memory via
                                                            the X bus (subject to data saturation, see
                                                            Section 2.4.2.4 "Data Space Write Saturation").
                                                            Note that for the MAC class of instructions, the
                                                            accumulator write-back operation functions 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.

DS70139F-page 26                                             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

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 16-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         DSP accumulators, or the X bus (to support multi-bit
fractional value from the round logic block as its input,   shifts of register or memory data).
together with overflow status from the original source
(accumulator) and the 16-bit round adder. These are         The shifter requires a signed binary value to determine
combined and used to select the appropriate 1.15            both the magnitude (number of bits) and direction of the
fractional value as output to write to data space           shift operation. A positive value shifts the operand right.
memory.                                                     A negative value shifts the operand left. A value of `0'
                                                            does not modify the operand.
If the SATDW bit in the CORCON register is set, data
(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           for MCU shift operations. Data from the X bus is
maximum positive 1.15 value, 0x7FFF. For input data         presented to the barrel shifter between bit positions 16
less than 0xFF8000, data written to memory is forced        to 31 for right shifts, and bit positions 0 to 16 for left
to the maximum negative 1.15 value, 0x8000. The MSb         shifts.
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.

2008 Microchip Technology Inc.                            DS70139F-page 27
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 28             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

3.0 MEMORY ORGANIZATION                             Program memory is addressable by a 24-bit value from
                                                    either the 23-bit PC, table instruction Effective Address
Note:  This data sheet summarizes features of       (EA), or data space EA, when program space is
       this group of dsPIC30F devices and is not    mapped into data space as defined by Table 3-1. Note
       intended to be a complete reference          that the program space address is incremented by two
       source. For more information on the CPU,     between successive program words in order to provide
       peripherals, register descriptions and       compatibility with data space addressing.
       general device functionality, refer to the
       "dsPIC30F Family Reference Manual"           User program space access is restricted to the lower
       (DS70046). For more information on the       4M instruction word address range (0x000000 to
       device instruction set and programming,      0x7FFFFE) for all accesses other than TBLRD/TBLWT,
       refer to the "dsPIC30F/33F Programmer's      which uses TBLPAG<7> to determine user or configu-
       Reference Manual" (DS70157).                 ration space access. In Table 3-1, Program Space
                                                    Address Construction, bit 23 allows access to the
3.1 Program Address Space                           Device ID, the User ID and the Configuration bits.
                                                    Otherwise, bit 23 is always clear.
The program address space is 4M instruction words.
The program space memory map for the
dsPI30F2011/2012 is shown in Figure 3-1. The pro-
gram space memory map for the dsPI30F3012/3013 is
shown in Figure 3-2.

2008 Microchip Technology Inc.                    DS70139F-page 29
dsPIC30F2011/2012/3012/3013

FIGURE 3-1:           dsPIC30F2011/2012                           FIGURE 3-2:           dsPIC30F3012/3013
                      PROGRAM SPACE                                                     PROGRAM SPACE
                      MEMORY MAP                                                        MEMORY MAP

                      Reset - GOTO Instruction  000000                                  Reset - GOTO Instruction  000000
                      Reset - Target Address    000002                                  Reset - Target Address    000002

                                                000004                                                            000004

                      Interrupt Vector Table       Vector Tables                        Interrupt Vector Table       Vector Tables
                             Reserved                                                          Reserved
                                                00007E                                                            00007E
                                                000080                                                            000080
                                                000084

                      Alternate Vector Table                                            Alternate Vector Table

User Memory               User Flash            0000FE            User Memory                   User Flash        000084
   Space              Program Memory            000100               Space                  Program Memory        0000FE
                      (4K instructions)                                                      (8K instructions)    000100
                                                001FFE
                           Reserved             002000                                           Reserved         003FFE
                          (Read `0's)                                                           (Read `0's)       004000
                                                7FFFFE
                                                800000                                       Data EEPROM          7FFBFE
                                                                                                 (1 Kbyte)        7FFC00

                                                                                                                  7FFFFE
                                                                                                                  800000

                      Reserved                                                          Reserved

Configuration Memory    UNITID (32 instr.)      8005BE            Configuration Memory    UNITID (32 instr.)      8005BE
   Space                                        8005C0               Space                                        8005C0
                             Reserved           8005FE                                         Reserved           8005FE
                      Device Configuration      800600                                  Device Configuration      800600

                             Registers          F7FFFE                                         Registers          F7FFFE
                                                F80000                                                            F80000
                                                F8000E                                                            F8000E
                                                F80010                                                            F80010

                      Reserved                                                          Reserved

                      DEVID (2)                 FEFFFE                                  DEVID (2)                 FEFFFE

                                                FF0000                                                            FF0000
                                                FFFFFE                                                            FFFFFE

DS70139F-page 30                                                                         2008 Microchip Technology Inc.
                                     dsPIC30F2011/2012/3012/3013

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>
Program Space Visibility  (TBLPAG<7> = 1)                                                         Data EA<14:0>
                                                      0                 PSVPAG<7:0>
                          User

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

                                                            23 bits

             Using

             Program              0        Program Counter                                 0

             Counter

             Using                                   Select                EA
             Program                                                 1  15 bits
             Space
                                  0 PSVPAG Reg
             Visibility                      8 bits

             Using                1/0 TBLPAG Reg                           EA
             Table                            8 bits                    16 bits
             Instruction

                    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.

2008 Microchip Technology Inc.                                                                   DS70139F-page 31
dsPIC30F2011/2012/3012/3013

3.1.1  DATA ACCESS FROM PROGRAM                               A set of table instructions are provided to move byte or
       MEMORY USING TABLE                                     word-sized data to and from program space. See
       INSTRUCTIONS                                           Figure 3-4 and Figure 3-5.

This architecture fetches 24-bit wide program memory.         1. TBLRDL: Table Read Low
Consequently, instructions are always aligned.                      Word: Read the LS Word of the program address;
However, as the architecture is modified Harvard, data              P<15:0> maps to D<15:0>.
can also be present in program space.                               Byte: Read one of the LSB of the program
                                                                    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
Space Visibility"). The TBLRDL and TBLWTL                     2. TBLWTL: Table Write Low (refer to Section 5.0
instructions offer a direct method of reading or writing            "Flash Program Memory" for details on Flash
the lsw of any address within program space, without                Programming)
going through data space. The TBLRDH and TBLWTH
instructions are the only method whereby the upper 8          3. TBLRDH: Table Read High
bits of a program space word can be accessed as data.               Word: Read the MS Word of the program address;
                                                                    P<23:16> maps to D<7:0>; D<15:8> will always
The PC is incremented by two for each successive                    be = 0.
24-bit program word. This allows program memory                     Byte: Read one of the MSB of the program
addresses to directly map to data space addresses.                  address;
Program memory can thus be regarded as two 16-bit                   P<23:16> maps to the destination byte when
word wide address spaces, residing side by side, each               byte select = 0;
with the same address range. TBLRDL and TBLWTL                      The destination byte will always be = 0 when
access the space which contains the lsw, and TBLRDH                 byte select = 1.
and TBLWTH access the space which contains the
MSB.                                                          4. TBLWTH: Table Write High (refer to Section 5.0
                                                                    "Flash Program Memory" for details on Flash
                                                                    Programming)

Figure 3-3 shows how the EA is created for table
operations 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-4:       PROGRAM DATA TABLE ACCESS (lsw)

       PC Address                23                       16  8  0

       0x000000        00000000

       0x000002        00000000

       0x000004        00000000

       0x000006        00000000

       Program Memory            TBLRDL.W                                  TBLRDL.B (Wn<0> = 0)
       `Phantom' Byte                                         TBLRDL.B (Wn<0> = 1)
       (read as `0')

DS70139F-page 32                                                 2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

FIGURE 3-5:  PROGRAM DATA TABLE ACCESS (MSB)

                                                           TBLRDH.W

             PC Address                     23             16        8                         0

             0x000000             00000000

             0x000002             00000000

             0x000004             00000000

             0x000006             00000000

       Program Memory                                                    TBLRDH.B (Wn<0> = 0)
       `Phantom' Byte             TBLRDH.B (Wn<0> = 1)
       (read as `0')

3.1.2  DATA ACCESS FROM PROGRAM                            Note that by incrementing the PC by 2 for each
       MEMORY USING PROGRAM SPACE                          program memory word, the LS 15 bits of data space
       VISIBILITY                                          addresses directly map to the LS 15 bits in the
                                                           corresponding program space addresses. The
The upper 32 Kbytes of data space may optionally be        remaining bits are provided by the Program Space
mapped into any 16K word program space page. This          Visibility Page register, PSVPAG<7:0>, as shown in
provides transparent access of stored constant data        Figure 3-6.
from X data space without the need to use special
instructions (i.e., TBLRDL/H, TBLWTL/H instructions).         Note: PSV access is temporarily disabled during
                                                                          table reads/writes.
Program space access through the data space occurs
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
CORCON are discussed in Section 2.4 "DSP                   The following instructions require one instruction
Engine".                                                      cycle in addition to the specified execution time:
                                                              - MAC class of instructions with data operand
Data accesses to this area add an additional cycle to            prefetch
the instruction being executed, since two program             - MOV instructions
memory fetches are required.                                  - MOV.D instructions

Note that the upper half of addressable data space is       All other instructions require two instruction cycles
always part of the X data space. Therefore, when a            in addition to the specified execution time of the
DSP operation uses program space mapping to access            instruction.
this memory region, Y data space should typically
contain state (variable) data for DSP operations,          For instructions that use PSV which are executed
whereas X data space should typically contain              inside a REPEAT loop:
coefficient (constant) data.
                                                            The following instances require two instruction
Although each data space address, 0x8000 and higher,          cycles in addition to the specified execution time
maps directly into a corresponding program memory             of the instruction:
address (see Figure 3-6), only the lower 16 bits of the       - Execution in the first iteration
24-bit program word are used to contain the data. The         - Execution in the last iteration
upper 8 bits should be programmed to force an illegal         - Execution prior to exiting the loop due to an
instruction to maintain machine robustness. Refer to             interrupt
the "dsPIC30F/33F Programmer's Reference Manual"              - Execution upon re-entering the loop after an
(DS70157) for details on instruction encoding.                   interrupt is serviced

                                                            Any other iteration of the REPEAT loop allow the
                                                              instruction accessing data, using PSV, to execute
                                                              in a single cycle.

2008 Microchip Technology Inc.                                        DS70139F-page 33
dsPIC30F2011/2012/3012/3013

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

                           Data Space                           Program Space

                                       0x0000                                                  0x000000

                       15                      PSVPAG(1)                                    0
       EA<15> = 0                                 0x00                                         0x001200
                                                      8

Data 16                                0x8000
                                                 Address
Space              15                                       23  15
EA

       EA<15> = 1                      15 Concatenation 23

Upper Half of Data
Space is Mapped
into Program Space

                                       0xFFFF                                               0x001FFF

                                                                    Data Read

BSET     CORCON,#2 ; Set PSV bit
MOV      #0x0, W0 ; Set PSVPAG register
MOV      W0, PSVPAG
MOV      0x9200, W0 ; Access program memory location

                             ; using a data space access

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

DS70139F-page 34                                                    2008 Microchip Technology Inc.
                       dsPIC30F2011/2012/3012/3013

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                 64-Kbyte data address space (including all Y
considered either separate (for some DSP                             addresses). When executing one of the MAC class of
instructions), or as one unified linear address range (for           instructions, the X block consists of the 64-Kbyte data
MCU instructions). The data spaces are accessed                      address space, excluding the Y address block (for data
using two Address Generation Units (AGUs) and                        reads only). In other words, all other instructions regard
separate data paths.                                                 the entire data memory as one composite address
                                                                     space. The MAC class instructions extract the
3.2.1 DATA SPACE MEMORY MAP                                          Y address space from data space and address it using
                                                                     EAs sourced from W10 and W11. The remaining X data
The data space memory is split into two blocks, X and                space is addressed using W8 and W9. Both address
Y data space. A key element of this architecture is that             spaces are concurrently accessed only with the MAC
Y space is a subset of X space, and is fully contained               class instructions.
within X space. In order to provide an apparent Linear
Addressing space, X and Y spaces have contiguous                     The data space memory map for the dsPIC30F2011
addresses.                                                           and dsPIC30F2012 is shown in Figure 3-7. The data
                                                                     space memory map for the dsPIC30F3012 and
                                                                     dsPIC30F3013 is shown in Figure 3-8.

FIGURE 3-7:  dsPIC30F2011/2012 DATA SPACE MEMORY MAP

              MSB                                           16 bits              LSB
              Address                                                            Address

                                                       MSB           LSB  0x0000

2 Kbyte       0x0001                                        SFR Space     0x07FE
SFR Space                                                                 0x0800
              0x07FF                                   X Data RAM (X)     0x09FE          8 Kbyte
1 Kbyte       0x0801                                   Y Data RAM (Y)     0x0A00          Near
SRAM Space    0x09FF                                                      0x0BFE          Data
              0x0A01                                                      0x0C00          Space

              0x0BFF
              0x0C01

              0x1FFF                                                      0x1FFE

              0x8001                                                      0x8000

Optionally                                                     X Data
Mapped                                                 Unimplemented (X)
into Program
Memory

                                               0xFFFF                     0xFFFE
2008 Microchip Technology Inc.
                                                                                          DS70139F-page 35
dsPIC30F2011/2012/3012/3013

FIGURE 3-8:       dsPIC30F3012/3013 DATA SPACE MEMORY MAP

                  MSB           16 bits              LSB
                  Address                            Address

                           MSB           LSB  0x0000

2 Kbyte           0x0001        SFR Space     0x07FE
SFR Space                                     0x0800
                  0x07FF   X Data RAM (X)     0x0BFE          8 Kbyte
2 Kbyte           0x0801                      0x0C00          Near
SRAM Space        0x0BFF   Y Data RAM (Y)                     Data
                  0x0C01                      0x0FFE          Space
                                              0x1000
                  0x0FFF
                  0x1001

                  0x1FFF                      0x1FFE

                  0x8001                      0x8000

Optionally                         X Data
Mapped                     Unimplemented (X)
into Program
Memory

                  0xFFFF                      0xFFFE

DS70139F-page 36                                           2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

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

             SFR SPACE                              SFR SPACE

                                           UNUSED              X SPACE

             (Y SPACE)            X SPACE  Y SPACE  UNUSED

                                           UNUSED                         X SPACE

Non-MAC Class Ops (Read/Write)                                 MAC Class Ops (Read)
       MAC Class Ops (Write)               Indirect EA using W8, W9 Indirect EA using W10, W11

      Indirect EA using any W

2008 Microchip Technology Inc.                    DS70139F-page 37
dsPIC30F2011/2012/3012/3013

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
instructions (MAC class). The X write data bus is the    To help maintain backward compatibility with
only write path to data space for all instructions.      PIC MCU devices and improve data space memory
                                                         usage efficiency, the dsPIC30F instruction set supports
The X data space also supports Modulo Addressing for     both word and byte operations. Data is aligned in data
all instructions, subject to Addressing mode restric-    memory and registers as words, but all data space EAs
tions. Bit-Reversed Addressing is only supported for     resolve to bytes. Data byte reads read the complete
writes to X data space.                                  word that contains the byte, using the LSb of any EA to
                                                         determine which byte to select. The selected byte is
The Y data space is used in concert with the X data      placed onto the LSB of the X data path (no byte
space by the MAC class of instructions (CLR, ED,         accesses are possible from the Y data path as the MAC
EDAC, MAC, MOVSAC, MPY, MPY.N and MSC) to                class of instruction can only fetch words). That is, data
provide two concurrent data read paths. No writes        memory and registers are organized as two parallel
occur across the Y bus. This class of instructions       byte wide entities with shared (word) address decode
dedicates two W register pointers, W10 and W11, to       but separate write lines. Data byte writes only write to
always address Y data space, independent of X data       the corresponding side of the array or register which
space, whereas W8 and W9 always address X data           matches the byte address.
space. Note that during accumulator write back, the
data address space is considered a combination of X      As a consequence of this byte accessibility, all Effective
and Y data spaces, so the write occurs across the X      Address calculations (including those generated by the
bus. Consequently, the write can be to any address in    DSP operations which are restricted to word-sized
the entire data space.                                   data) are internally scaled to step through word-aligned
                                                         memory. For example, the core would recognize that
The Y data space can only be used for the data           Post-Modified Register Indirect Addressing mode
prefetch operation associated with the MAC class of      [Ws++] results in a value of Ws + 1 for byte operations
instructions. It also supports Modulo Addressing for     and Ws + 2 for word operations.
automated circular buffers. Of course, all other
instructions can access the Y data address space         All word accesses must be aligned to an even address.
through the X data path as part of the composite linear  Misaligned word data fetches are not supported, so
space.                                                   care should be taken when mixing byte and word
                                                         operations, or translating from 8-bit MCU code. Should
The boundary between the X and Y data spaces is          a misaligned read or write be attempted, an address
defined as shown in Figure 3-8 and is not user           error trap is generated. If the error occurred on a read,
programmable. Should an EA point to data outside its     the instruction underway is completed, whereas if it
own assigned address space, or to a location outside     occurred on a write, the instruction is executed, but the
physical memory, an all zero word/byte is returned. For  write does not occur. In either case, a trap is then
example, although Y address space is visible by all      executed, allowing the system and/or user to examine
non-MAC instructions using any addressing mode, an       the machine state prior to execution of the address
attempt by a MAC instruction to fetch data from that     fault.
space using W8 or W9 (X space pointers)
returns 0x0000.                                          FIGURE 3-10:  DATA ALIGNMENT

TABLE 3-2: EFFECT OF INVALID                                   15 MSB  8 7 LSB  0
                     MEMORY ACCESSES
                                                         0001  Byte 1  Byte 0 0000
Attempted Operation              Data Returned

EA = an unimplemented address    0x0000                  0003  Byte 3  Byte 2 0002
                                 0x0000
W8 or W9 used to access Y data                           0005  Byte 5  Byte 4 0004
space in a MAC instruction       0x0000
W10 or W11 used to access X
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.

DS70139F-page 38                                                       2008 Microchip Technology Inc.
                                          dsPIC30F2011/2012/3012/3013

All byte loads into any W register are loaded into the         There is a Stack Pointer Limit register (SPLIM)
LSB. The MSB is not modified.                                  associated with the Stack Pointer. SPLIM is
                                                               uninitialized at Reset. As is the case for the Stack
A Sign-Extend (SE) instruction is provided to allow            Pointer, SPLIM<0> is forced to `0' because all stack
users to translate 8-bit signed data to 16-bit signed          operations must be word aligned. Whenever an
values. Alternatively, for 16-bit unsigned data, users         Effective Address (EA) is generated using W15 as a
can clear the MSB of any W register by executing a             source or destination pointer, the address thus
Zero-Extend (ZE) instruction on the appropriate                generated is compared with the value in SPLIM. If the
address.                                                       contents of the Stack Pointer (W15) and the SPLIM reg-
                                                               ister are equal, and a push operation is performed, a
Although most instructions are capable of operating on         stack error trap does not occur. The stack error trap
word or byte data sizes, it should be noted that some          occurs on a subsequent push operation. Thus, for
instructions, including the DSP instructions, operate          example, if it is desirable to cause a stack error trap
only on words.                                                 when the stack grows beyond address 0x2000 in RAM,
                                                               initialize the SPLIM with the value, 0x1FFE.
3.2.5 NEAR DATA SPACE
                                                               Similarly, a Stack Pointer underflow (stack error) trap is
An 8-Kbyte near data space is reserved in X address            generated when the Stack Pointer address is found to
memory space between 0x0000 and 0x1FFF, which is               be less than 0x0800, thus preventing the stack from
directly addressable via a 13-bit absolute address field       interfering with the Special Function Register (SFR)
within all memory direct instructions. The remaining X         space.
address space and all of the Y address space is
addressable indirectly. Additionally, the whole of X data      A write to the SPLIM register should not be immediately
space is addressable using MOV instructions, which             followed by an indirect read operation using W15.
support memory direct addressing with a 16-bit
address field.

3.2.6 SOFTWARE STACK

The dsPIC DSC devices contain a software stack. W15
is used as the Stack Pointer.

The Stack Pointer always points to the first available
free word and grows from lower addresses towards
higher addresses. It pre-decrements for stack pops
and post-increments for stack pushes, as shown in
Figure 3-11. 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.

Note:                A PC push during exception processing
                     concatenates the SRL register to the MSB
                     of the PC prior to the push.

FIGURE 3-11:         CALL STACK FRAME

  0x0000 15                     0

Stack Grows Towards            PC<15:0>   W15 (before CALL)
   Higher Address    000000000 PC<22:16>
                                          W15 (after CALL)
                           
                                          POP : [--W15]
                                          PUSH : [W15++]

2008 Microchip Technology Inc.                               DS70139F-page 39
DS70139F-page 40                  TABLE 3-3: CORE REGISTER MAP                                                                                                                                                        dsPIC30F2011/2012/3012/3013

                                  SFR Name  Address  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
                                            (Home)                                                                                                IPL1   IPL0

                                  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

                                  TBLPAG    0032     --      --  --  --  --                 --  --  --                                                          TBLPAG                           0000 0000 0000 0000

2008 Microchip Technology Inc.  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
                                  Legend:   0042     OA      OB  SA  SB  OAB SAB                DA  DC                                      IPL2                RA      N        OV  Z  C 0000 0000 0000 0000

                                     Note:  u = uninitialized bit; -- = unimplemented bit, read as `0'
                                            Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.
2008 Microchip Technology Inc.  TABLE 3-3: CORE REGISTER MAP (CONTINUED)

                                  SFR Name  Address  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
                                            (Home)                                                                                                         IPL3

                                  CORCON    0044     --      --  --  US  EDT DL2  DL1  DL0 SATA SATB SATDW ACCSAT                                                 PSV RND   IF 0000 0000 0010 0000
                                                                                                                                                                  XWM<3:0>         0000 0000 0000 0000
                                  MODCON    0046 XMODEN YMODEN --    --     BWM<3:0>                                                        YWM<3:0>
                                                                                                                                                                            0 uuuu uuuu uuuu uuu0
                                  XMODSRT 0048                                         XS<15:1>                                                                             1 uuuu uuuu uuuu uuu1
                                                                                                                                                                            0 uuuu uuuu uuuu uuu0
                                  XMODEND 004A                                         XE<15:1>                                                                             1 uuuu uuuu uuuu uuu1

                                  YMODSRT 004C                                         YS<15:1>                                                                                    uuuu uuuu uuuu uuuu
                                                                                                                                                                                   0000 0000 0000 0000
                                  YMODEND 004E                                         YE<15:1>

                                  XBREV     0050     BREN                                        XB<14:0>

                                  DISICNT   0052     --      --                                                                             DISICNT<13:0>

                                  Legend:   u = uninitialized bit; -- = unimplemented bit, read as `0'
                                     Note:  Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

DS70139F-page 41                                                                                                                                                                                        dsPIC30F2011/2012/3012/3013
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 42             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

4.0 ADDRESS GENERATOR UNITS                             4.1.1 FILE REGISTER INSTRUCTIONS

Note:  This data sheet summarizes features of           Most file register instructions use a 13-bit address field
       this group of dsPIC30F devices and is not        (f) to directly address data present in the first 8192
       intended to be a complete reference              bytes of data memory (near data space). Most file
       source. For more information on the CPU,         register instructions employ a working register, W0,
       peripherals, register descriptions and           which is denoted as WREG in these instructions. The
       general device functionality, refer to the       destination is typically either the same file register or
       "dsPIC30F Family Reference Manual"               WREG (with the exception of the MUL instruction),
       (DS70046). For more information on the           which writes the result to a register or register pair. The
       device instruction set and programming,          MOV instruction allows additional flexibility and can
       refer to the "dsPIC30F/33F Programmer's          access the entire data space during file register
       Reference Manual" (DS70157).                     operation.

The dsPIC DSC core contains two independent             4.1.2 MCU INSTRUCTIONS
address generator units: the X AGU and Y AGU. The Y
AGU supports word-sized data reads for the DSP MAC      The three-operand MCU instructions are of the form:
class of instructions only. The dsPIC DSC AGUs
support three types of data addressing:                 Operand 3 = Operand 1 Operand 2

Linear Addressing                                     where Operand 1 is always a working register (i.e., the
Modulo (Circular) Addressing                          addressing mode can only be register direct), which is
Bit-Reversed Addressing                               referred to as Wb. Operand 2 can be a W register,
                                                        fetched from data memory or a 5-bit literal. The result
Linear and Modulo Data Addressing modes can be          location can be either a W register or an address
applied to data space or program space. Bit-Reversed    location. The following addressing modes are
Addressing is only applicable to data space addresses.  supported by MCU instructions:

4.1 Instruction Addressing Modes                         Register Direct
                                                         Register Indirect
The addressing modes in Table 4-1 form the basis of      Register Indirect Post-modified
the addressing modes optimized to support the specific   Register Indirect Pre-modified
features of individual instructions. The addressing      5-bit or 10-bit Literal
modes provided in the MAC class of instructions are
somewhat different from those in the other instruction  Note:       Not all instructions support all the
types.                                                              addressing modes given above. Individual
                                                                    instructions may support different subsets
                                                                    of these addressing modes.

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.

2008 Microchip Technology Inc.                                                             DS70139F-page 43
dsPIC30F2011/2012/3012/3013

4.1.3  MOVE AND ACCUMULATOR                                   In summary, the following addressing modes are
       INSTRUCTIONS                                           supported by the MAC class of instructions:

Move instructions and the DSP accumulator class of             Register Indirect
instructions provide a greater degree of addressing            Register Indirect Post-modified by 2
flexibility than other instructions. In addition to the       Register Indirect Post-modified by 4
addressing modes supported by most MCU                         Register Indirect Post-modified by 6
instructions, move and accumulator instructions also          Register Indirect with Register Offset (Indexed)
support Register Indirect with Register Offset
Addressing mode, also referred to as Register Indexed         4.1.5 OTHER INSTRUCTIONS
mode.
                                                              Besides the various addressing modes outlined above,
Note:  For the MOV instructions, the addressing               some instructions use literal constants of various sizes.
       mode specified in the instruction can differ           For example, BRA (branch) instructions use 16-bit
       for the source and destination EA.                     signed literals to specify the branch destination directly,
       However, the 4-bit Wb (register offset)                whereas the DISI instruction uses a 14-bit unsigned
       field is shared between both source and                literal field. In some instructions, such as ADD Acc, the
       destination (but typically only used by                source of an operand or result is implied by the opcode
       one).                                                  itself. Certain operations, such as NOP, do not have any
                                                              operands.
In summary, the following addressing modes are
supported by move and accumulator instructions:               4.2 Modulo Addressing

Register Direct                                             Modulo Addressing is a method of providing an
Register Indirect                                           automated means to support circular data buffers using
Register Indirect Post-modified                             hardware. The objective is to remove the need for
Register Indirect Pre-modified                              software to perform data address boundary checks
Register Indirect with Register Offset (Indexed)            when executing tightly looped code, as is typical in
Register Indirect with Literal Offset                       many DSP algorithms.
8-bit Literal
                                                              Modulo Addressing can operate in either data or
16-bit Literal                                              program space (since the data pointer mechanism is
                                                              essentially the same for both). One circular buffer can
Note:  Not all instructions support all the                   be supported in each of the X (which also provides the
       addressing modes given above. Individual               pointers into program space) and Y data spaces.
       instructions may support different subsets             Modulo Addressing can operate on any W register
       of these addressing modes.                             pointer. However, it is not advisable to use W14 or W15
                                                              for Modulo Addressing since these two registers are
4.1.4 MAC INSTRUCTIONS                                        used as the Stack Frame Pointer and Stack Pointer,
                                                              respectively.
The dual source operand DSP instructions (CLR, ED,
EDAC, MAC, MPY, MPY.N, MOVSAC and MSC), also                  In general, any particular circular buffer can only be
referred to as MAC instructions, utilize a simplified set of  configured to operate in one direction, as there are
addressing modes to allow the user to effectively             certain restrictions on the buffer Start address
manipulate the data pointers through register indirect        (for incrementing buffers), or end address
tables.                                                       (for decrementing buffers) based upon the direction of
                                                              the buffer.
The two source operand prefetch registers must belong
to the set {W8, W9, W10, W11}. For data reads, W8             The only exception to the usage restrictions is for
and W9 are always directed to the X RAGU. W10 and             buffers that have a power-of-2 length. As these buffers
W11 are always directed to the Y AGU. The effective           satisfy the Start and the end address criteria, they can
addresses generated (before and after modification)           operate in a Bidirectional mode (i.e., address boundary
must, therefore, be valid addresses within X data space       checks are performed on both the lower and upper
for W8 and W9 and Y data space for W10 and W11.               address boundaries).

Note:  Register Indirect with Register Offset
       addressing is only available for W9 (in X
       space) and W11 (in Y space).

DS70139F-page 44                                              2008 Microchip Technology Inc.
                                    dsPIC30F2011/2012/3012/3013

4.2.1 START AND END ADDRESS                                    4.2.2        W ADDRESS REGISTER
                                                                            SELECTION
The Modulo Addressing scheme requires that a
starting and an ending address be specified and loaded         The Modulo and Bit-Reversed Addressing Control
into the 16-bit Modulo Buffer Address registers:               register, MODCON<15:0>, contains enable flags as
XMODSRT, XMODEND, YMODSRT and YMODEND                          well as a W register field to specify the W address
(see Table 3-3).                                               registers. The XWM and YWM fields select which
                                                               registers operate with Modulo Addressing.
Note:  Y space Modulo Addressing EA                            If XWM = 15, X RAGU and X WAGU Modulo
       calculations assume word-sized data (LSb                Addressing is disabled. Similarly, if YWM = 15, Y AGU
       of every EA is always clear).                           Modulo Addressing is disabled.

The length of a circular buffer is not directly specified. It  The X Address Space Pointer W register (XWM), to
is determined by the difference between the                    which Modulo Addressing is to be applied, is stored in
corresponding Start and end addresses. The maximum             MODCON<3:0> (see Table 3-3). Modulo Addressing is
possible length of the circular buffer is 32K words            enabled for X data space when XWM is set to any value
(64 Kbytes).                                                   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>.

FIGURE 4-1:  MODULO ADDRESSING OPERATION EXAMPLE

Byte                                MOV #0x1100,W0
Address                             MOV W0,XMODSRT ;set modulo start address
                                    MOV #0x1163,W0
   0x1100                           MOV W0,MODEND ;set modulo end address
                                    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
                                                                            ;fill the next location
                                    MOV W0,[W1++]                           ;increment the fill value

0x1163                              AGAIN: INC W0,W0

             Start Addr = 0x1100
             End Addr = 0x1163
             Length = 0x0032 words

2008 Microchip Technology Inc.                                            DS70139F-page 45
dsPIC30F2011/2012/3012/3013

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
                                                             must be zeros.
Modulo Addressing can be applied to the Effective
Address (EA) calculation associated with any W               XB<14:0> is the bit-reversed address modifier or `pivot
register. It is important to realize that the address        point' which is typically a constant. In the case of an
boundaries check for addresses less than, or greater         FFT computation, its value is equal to half of the FFT
than the upper (for incrementing buffers), and lower (for    data buffer size.
decrementing buffers) boundary addresses (not just
equal to). Address changes may, therefore, jump              Note:  All bit-reversed EA calculations assume
beyond boundaries and still be adjusted correctly.                  word-sized data (LSb of every EA is
                                                                    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                       addresses.
       Pre-Modify or Post-Modify Addressing
       mode is used to compute the Effective                 When enabled, Bit-Reversed Addressing is only
       Address. When an address offset                       executed for register indirect with pre-increment or
       (e.g., [W7+W2]) is used, Modulo address               post-increment addressing and word-sized data writes.
       correction is performed, but the contents             It does not function for any other addressing mode or
       of the register remain unchanged.                     for byte-sized data. Normal addresses are generated
                                                             instead. When Bit-Reversed Addressing is active, the
4.3 Bit-Reversed Addressing                                  W address pointer is always added to the address
                                                             modifier (XB) and the offset associated with the
Bit-Reversed Addressing is intended to simplify data         Register Indirect Addressing mode is ignored. In
re-ordering for radix-2 FFT algorithms. It is supported      addition, as word-sized data is a requirement, the LSb
by the X AGU for data writes only.                           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. The         Addressing should not be enabled
address source and destination are kept in normal order.            together. In the event that the user attempts
Thus, the only operand requiring reversal is the modifier.          to do this, Bit-Reversed Addressing
                                                                    assumes priority when active for the X
4.3.1  BIT-REVERSED ADDRESSING                                      WAGU, and X WAGU Modulo Addressing
       IMPLEMENTATION                                               is disabled. However, Modulo Addressing
                                                                    continues to function in the X RAGU.

Bit-Reversed Addressing is enabled when:                     If Bit-Reversed Addressing has already been enabled
                                                             by setting the BREN (XBREV<15>) bit, then a write to
BWM (W register selection) in the MODCON reg-              the XBREV register should not be immediately followed
   ister is any value other than `15' (the stack cannot      by an indirect read operation using the W register that
   be accessed using Bit-Reversed Addressing) and            has been designated as the bit-reversed pointer.

the BREN bit is set in the XBREV register and

the addressing mode used is Register Indirect
   with Pre-Increment or Post-Increment.

DS70139F-page 46                                                    2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

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

TABLE 4-2:   BIT-REVERSED ADDRESS SEQUENCE (16-ENTRY)

             Normal Address                                Bit-Reversed 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

                 1024                                                                             0x0200
                 512                                                                              0x0100
                 256                                                                              0x0080
                 128                                                                              0x0040
                  64                                                                              0x0020
                  32                                                                              0x0010
                  16                                                                              0x0008
                                                                                                  0x0004
                   8                                                                              0x0002
                   4                                                                              0x0001
                   2

2008 Microchip Technology Inc.                                                                          DS70139F-page 47
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 48             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

5.0 FLASH PROGRAM MEMORY                                   5.2 Run-Time Self-Programming
                                                                    (RTSP)
Note:  This data sheet summarizes features of
       this group of dsPIC30F devices and is not           RTSP is accomplished using TBLRD (table read) and
       intended to be a complete reference                 TBLWT (table write) instructions.
       source. For more information on the CPU,
       peripherals, register descriptions and              With RTSP, the user may erase program memory, 32
       general device functionality, refer to the          instructions (96 bytes) at a time and can write program
       "dsPIC30F Family Reference Manual"                  memory data, 32 instructions (96 bytes) at a time.
       (DS70046). For more information on the
       device instruction set and programming,             5.3 Table Instruction Operation
       refer to the "dsPIC30F/33F Programmer's                      Summary
       Reference Manual" (DS70157).
                                                           The TBLRDL and the TBLWTL instructions are used to
The dsPIC30F family of devices contains internal           read or write to bits<15:0> of program memory.
program Flash memory for executing user code. There        TBLRDL and TBLWTL can access program memory in
are two methods by which the user can program this         Word or Byte mode.
memory:
                                                           The TBLRDH and TBLWTH instructions are used to read
1. Run-Time Self-Programming (RTSP)                        or write to bits<23:16> of program memory. TBLRDH
2. In-Circuit Serial ProgrammingTM (ICSPTM)                and TBLWTH can access program memory in Word or
                                                           Byte mode.
5.1 In-Circuit Serial Programming
         (ICSP)                                            A 24-bit program memory address is formed using
                                                           bits<7:0> of the TBLPAG register and the Effective
dsPIC30F devices can be serially programmed while in       Address (EA) from a W register specified in the table
the end application circuit. This is simply done with two  instruction, as shown in Figure 5-1.
lines for Programming Clock and Programming Data
(which are named PGC and PGD respectively), and
three other lines for Power (VDD), Ground (VSS) and
Master Clear (MCLR). This allows customers to
manufacture 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 5-1:  ADDRESSING FOR TABLE AND NVM REGISTERS

                                                           24 bits

             Using

             Program              0                        Program Counter   0

             Counter

             Using                1/0 NVMADRU Reg          NVMADR Reg EA
             NVMADR                          8 bits                 16 bits
             Addressing

             Using                1/0 TBLPAG Reg           Working Reg EA
             Table                            8 bits                16 bits
             Instruction

             User/Configuration                            24-bit EA         Byte
             Space Select                                                    Select

2008 Microchip Technology Inc.                                                     DS70139F-page 49
dsPIC30F2011/2012/3012/3013

5.4 RTSP Operation                                           5.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                Flash memory are:
instructions or 96 bytes. Each panel consists of 128
rows or 4K x 24 instructions. RTSP allows the user to         NVMCON
erase one row (32 instructions) at a time and to             NVMADR
program four instructions at one time. RTSP may be            NVMADRU
used to program multiple program memory panels, but          NVMKEY
the Table Pointer must be changed at each panel
boundary.                                                    5.5.1 NVMCON REGISTER

Each panel of program memory contains write latches          The NVMCON register controls which blocks are to be
that hold 32 instructions of programming data. Prior to      erased, which memory type is to be programmed, and
the actual programming operation, the write data must        start of the programming cycle.
be loaded into the panel write latches. The data to be
programmed into the panel is loaded in sequential            5.5.2 NVMADR REGISTER
order into the write latches; instruction 0, instruction 1,
etc. The instruction words loaded must always be from        The NVMADR register is used to hold the lower two
a 32 address boundary.                                       bytes of the Effective Address. The NVMADR register
                                                             captures the EA<15:0> of the last table instruction that
The basic sequence for RTSP programming is to set up         has been executed and selects the row to write.
a Table Pointer, then do a series of TBLWT instructions
to load the write latches. Programming is performed by       5.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     5.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
                                                             sequence, the user must consecutively write 0x55 and
The Flash Program Memory is readable, writable and           0xAA to the NVMKEY register. Refer to Section 5.6
erasable during normal operation over the entire VDD         "Programming Operations" for further details.
range.
                                                             Note:  The user can also directly write to the
                                                                    NVMADR and NVMADRU registers to
                                                                    specify a program memory address for
                                                                    erasing or programming.

DS70139F-page 50                                                    2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

5.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
mode. A programming operation is nominally 2 msec in         5. Program 32 instruction words into program
duration and the processor stalls (waits) until the                Flash.
operation is finished. Setting the WR bit
(NVMCON<15>) starts the operation and the WR bit is                a) Set up NVMCON register for multi-word,
automatically cleared when the operation is finished.                    program Flash, program, and set WREN
                                                                         bit.
5.6.1  PROGRAMMING ALGORITHM FOR
       PROGRAM FLASH                                               b) Write `0x55' to NVMKEY.
                                                                   c) Write `0xAA' to NVMKEY.
The user can erase or program one row of program                   d) Set the WR bit. This begins program cycle.
Flash memory at a time. The general process is:
                                                                   e) CPU stalls for duration of the program cycle.
1. Read one row of program Flash (32 instruction
      words) and store into data RAM as a data                     f) The WR bit is cleared by the hardware
      "image".                                                           when program cycle ends.

2. Update the data image with the desired new                6. Repeat steps 1 through 5 as needed to program
      data.                                                        desired amount of program Flash memory.

3. Erase program Flash row.                                  5.6.2  ERASING A ROW OF PROGRAM
      a) Set up NVMCON register for multi-word,                     MEMORY
            program Flash, erase, and set WREN bit.
      b) Write address of row to be erased into              Example 5-1 shows a code sequence that can be used
            NVMADRU/NVMDR.                                   to erase a row (32 instructions) of program memory.
      c) Write `0x55' to NVMKEY.
      d) Write `0xAA' to NVMKEY.
      e) Set the WR bit. This begins erase cycle.
      f) CPU stalls for the duration of the erase cycle.
      g) The WR bit is cleared when erase cycle
            ends.

EXAMPLE 5-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
                                                          ; Intialize in-page EA[15:0] pointer
       MOV   #tbloffset(PROG_ADDR),W0

       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

2008 Microchip Technology Inc.                                                                DS70139F-page 51
dsPIC30F2011/2012/3012/3013

5.6.3 LOADING WRITE LATCHES                               5.6.4            INITIATING THE PROGRAMMING
                                                                           SEQUENCE
Example 5-2 shows a sequence of instructions that
can be used to load the 96 bytes of write latches. 32     For protection, the write initiate sequence for NVMKEY
TBLWTL and 32 TBLWTH instructions are needed to           must be used to allow any erase or program operation
load the write latches selected by the Table Pointer.     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 as shown in Example 5-3.

EXAMPLE 5-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
                                                       ; An example program memory address
MOV               #0x6000,W0

; 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
                                                       ; Write PM high byte into program latch
TBLWTH W3, [W0++]






; 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 5-2, the contents of the upper byte of W3 has no effect.

EXAMPLE 5-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

DS70139F-page 52                                                            2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 5-1: NVM REGISTER MAP

                                  File 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          All RESETS
                                                                                                                                                         PROGOP<6:0>
                                  NVMCON    0760  WR  WREN WRERR -- -- -- -- TWRI --                                                                                                0000 0000 0000 0000
                                                                                                                                                                                    uuuu uuuu uuuu uuuu
                                  NVMADR    0762               NVMADR<15:0>                                                                                                         0000 0000 uuuu uuuu
                                                                                                                                                                                    0000 0000 0000 0000
                                  NVMADRU 0764    --  --  --   -- -- -- ----                                                                       NVMADR<23:16>
                                                                                                                                                        KEY<7:0>
                                  NVMKEY    0766  --  --  --   -- -- -- ----

                                  Legend:   u = uninitialized bit; -- = unimplemented bit, read as `0'
                                     Note:  Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

DS70139F-page 53                                                                                                                                                                                         dsPIC30F2011/2012/3012/3013
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 54             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

6.0 DATA EEPROM MEMORY                                   A program or erase operation on the data EEPROM
                                                         does not stop the instruction flow. The user is
Note:  This data sheet summarizes features of            responsible for waiting for the appropriate duration of
       this group of dsPIC30F devices and is not         time before initiating another data EEPROM write/
       intended to be a complete reference               erase operation. Attempting to read the data EEPROM
       source. For more information on the CPU,          while a programming or erase operation is in progress
       peripherals, register descriptions and            results in unspecified data.
       general device functionality, refer to the
       "dsPIC30F Family Reference Manual"                Control bit WR initiates write operations similar to
       (DS70046). For more information on the            program Flash writes. This bit cannot be cleared, only
       device instruction set and programming,           set, in software. They are cleared in hardware at the
       refer to the "dsPIC30F/33F Programmer's           completion of the write operation. The inability to clear
       Reference Manual" (DS70157).                      the WR bit in software prevents the accidental or
                                                         premature termination of a write operation.
The data EEPROM memory is readable and writable
during normal operation over the entire VDD range. The   The WREN bit, when set, allows a write operation. On
data EEPROM memory is directly mapped in the             power-up, the WREN bit is clear. The WRERR bit is set
program memory address space.                            when a write operation is interrupted by a MCLR Reset
                                                         or a WDT Time-out Reset during normal operation. In
The four SFRs used to read and write the program         these situations, following Reset, the user can check
Flash memory are used to access data EEPROM              the WRERR bit and rewrite the location. The address
memory, as well. As described in Section 5.5 "Control    register NVMADR remains unchanged.
Registers", these registers are:
                                                         Note:   Interrupt flag bit NVMIF in the IFS0
NVMCON                                                         register is set when write is complete. It
                                                                 must be cleared in software.
NVMADR
                                                         6.1 Reading the Data EEPROM
NVMADRU
                                                         A TBLRD instruction reads a word at the current
NVMKEY                                                 program word address. This example uses W0 as a
                                                         pointer to data EEPROM. The result is placed in
The EEPROM data memory allows read and write of          register W4 as shown in Example 6-1.
single words and 16-word blocks. When interfacing to
data memory, NVMADR, in conjunction with the             EXAMPLE 6-1: DATA EEPROM READ
NVMADRU register, are used to address the
EEPROM location being accessed. TBLRDL and               MOV     #LOW_ADDR_WORD,W0 ; Init Pointer
TBLWTL instructions are used to read and write data      MOV
EEPROM. The dsPIC30F devices have up to 8 Kbytes         MOV     #HIGH_ADDR_WORD,W1
(4K words) of data EEPROM with an address range          TBLRDL
from 0x7FF000 to 0x7FFFFE.                                       W1,TBLPAG           ; read data EEPROM
                                                                 [ W0 ], W4
A word write operation should be preceded by an erase
of the corresponding memory location(s). The write
typically requires 2 ms to complete, but the write time
varies with voltage and temperature.

2008 Microchip Technology Inc.                                                     DS70139F-page 55
dsPIC30F2011/2012/3012/3013

6.2 Erasing Data EEPROM

6.2.1        ERASING A BLOCK OF DATA
             EEPROM

In order to erase a block of data EEPROM, the
NVMADRU and NVMADR registers must initially point
to the block of memory to be erased. Configure
NVMCON for erasing a block of data EEPROM and
set the WR and WREN bits in the NVMCON register.
Setting the WR bit initiates the erase, as shown in
Example 6-2.

EXAMPLE 6-2: DATA EEPROM BLOCK ERASE

; Select data EEPROM block, WR, WREN bits

       MOV   #0x4045,W0

       MOV   W0,NVMCON                ; Initialize NVMCON SFR

; Start erase cycle by setting WR after writing key 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               ; Initiate erase sequence

       NOP

       NOP

; Erase cycle will complete in 2mS. CPU is not stalled for the Data Erase Cycle

; User can poll WR bit, use NVMIF or Timer IRQ to determine erasure complete

6.2.2        ERASING A WORD OF DATA
             EEPROM

The NVMADRU and NVMADR registers must point to
the block. Select WR a block of data Flash and set the
WR and WREN bits in the NVMCON register. Setting the
WR bit initiates the erase, as shown in Example 6-3.

EXAMPLE 6-3: DATA EEPROM WORD ERASE

; Select data EEPROM word, WR, WREN bits

       MOV   #0x4044,W0

       MOV   W0,NVMCON

; Start erase cycle by setting WR after writing key 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                    ; Initiate erase sequence

       NOP

       NOP

; Erase cycle will complete in 2mS. CPU is not stalled for the Data Erase Cycle

; User can poll WR bit, use NVMIF or Timer IRQ to determine erasure complete

DS70139F-page 56                                                       2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

6.3 Writing to the Data EEPROM                        The write does not initiate if the above sequence is not
                                                      exactly followed (write 0x55 to NVMKEY, write 0xAA to
To write an EEPROM data location, the following       NVMCON, then set WR bit) for each word. It is strongly
sequence must be followed:                            recommended that interrupts be disabled during this
                                                      code segment.
1. Erase data EEPROM word.
      a) Select word, data EEPROM erase, and set      Additionally, the WREN bit in NVMCON must be set to
            WREN bit in NVMCON register.              enable writes. This mechanism prevents accidental
      b) Write address of word to be erased into      writes to data EEPROM due to unexpected code
            NVMADR.                                   execution. The WREN bit should be kept clear at all
      c) Enable NVM interrupt (optional).             times except when updating the EEPROM. The WREN
      d) Write `0x55' to NVMKEY.                      bit is not cleared by hardware.
      e) Write `0xAA' to NVMKEY.
      f) Set the WR bit. This begins erase cycle.     After a write sequence has been initiated, clearing the
      g) Either poll NVMIF bit or wait for NVMIF      WREN bit does not affect the current write cycle. The
            interrupt.                                WR bit is inhibited from being set unless the WREN bit
      h) The WR bit is cleared when the erase cycle   is set. The WREN bit must be set on a previous
            ends.                                     instruction. Both WR and WREN cannot be set with the
                                                      same instruction.
2. Write data word into data EEPROM write
      latches.                                        At the completion of the write cycle, the WR bit is
                                                      cleared in hardware and the Nonvolatile Memory Write
3. Program 1 data word into data EEPROM.              Complete Interrupt Flag bit (NVMIF) is set. The user
      a) Select word, data EEPROM program, and        may either enable this interrupt or poll this bit. NVMIF
            set WREN bit in NVMCON register.          must be cleared by software.
      b) Enable NVM write done interrupt (optional).
      c) Write `0x55' to NVMKEY.                      6.3.1  WRITING A WORD OF DATA
      d) Write `0xAA' to NVMKEY.                             EEPROM
      e) Set the WR bit. This begins program cycle.
      f) Either poll NVMIF bit or wait for NVM        Once the user has erased the word to be programmed,
            interrupt.                                then a table write instruction is used to write one write
      g) The WR bit is cleared when the write cycle   latch, as shown in Example 6-4.
            ends.
                                                      6.3.2  WRITING A BLOCK OF DATA
                                                             EEPROM

                                                      To write a block of data EEPROM, write to all sixteen
                                                      latches first, then set the NVMCON register and
                                                      program the block.

EXAMPLE 6-4: DATA EEPROM WORD WRITE

; Point to data memory

MOV     #LOW_ADDR_WORD,W0                             ; Init pointer

MOV     #HIGH_ADDR_WORD,W1                            ; Get data
                                                      ; Write data
MOV     W1,TBLPAG

MOV     #LOW(WORD),W2

TBLWTL  W2,[ W0]

; The NVMADR captures last table access address

; Select data EEPROM for 1 word op

MOV     #0x4004,W0

MOV     W0,NVMCON

; Operate key to allow write operation

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                                    ; Initiate program sequence

NOP

NOP

; Write cycle will complete in 2mS. CPU is not stalled for the Data Write Cycle

; User can poll WR bit, use NVMIF or Timer IRQ to determine write complete

2008 Microchip Technology Inc.                                                   DS70139F-page 57
dsPIC30F2011/2012/3012/3013

EXAMPLE 6-5: DATA EEPROM BLOCK WRITE

MOV               #LOW_ADDR_WORD,W0 ; Init pointer

MOV               #HIGH_ADDR_WORD,W1

MOV               W1,TBLPAG

MOV               #data1,W2           ; Get 1st data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data2,W2           ; Get 2nd data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data3,W2           ; Get 3rd data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data4,W2           ; Get 4th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data5,W2           ; Get 5th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data6,W2           ; Get 6th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data7,W2           ; Get 7th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data8,W2           ; Get 8th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data9,W2           ; Get 9th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data10,W2          ; Get 10th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data11,W2          ; Get 11th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data12,W2          ; Get 12th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data13,W2          ; Get 13th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data14,W2          ; Get 14th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data15,W2          ; Get 15th data

TBLWTL            W2,[ W0]++          ; write data
MOV               #data16,W2          ; Get 16th data

TBLWTL            W2,[ W0]++          ; write data. The NVMADR captures last table access address.
MOV               #0x400A,W0          ; Select data EEPROM for multi word op

MOV           W0,NVMCON               ; Operate Key to allow program operation
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 write cycle

NOP

NOP

6.4 Write Verify                                         6.5 Protection Against Spurious Write

Depending on the application, good programming           There are conditions when the device may not want to
practice may dictate that the value written to the mem-  write to the data EEPROM memory. To protect against
ory should be verified against the original value. This  spurious EEPROM writes, various mechanisms have
should be used in applications where excessive writes    been built-in. On power-up, the WREN bit is cleared;
can stress bits near the specification limit.            also, the Power-up Timer prevents EEPROM write.

                                                         The write initiate sequence and the WREN bit together
                                                         help prevent an accidental write during brown-out,
                                                         power glitch, or software malfunction.

DS70139F-page 58                                              2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

7.0 I/O PORTS                                                   Writes to the latch, write the latch (LATx). Reads from
                                                                the port (PORTx), read the port pins and writes to the
Note:  This data sheet summarizes features of                   port pins, write the latch (LATx).
       this group of dsPIC30F devices and is not
       intended to be a complete reference                      Any bit and its associated data and Control registers
       source. For more information on the CPU,                 that are not valid for a particular device are disabled.
       peripherals, register descriptions and                   That means the corresponding LATx and TRISx
       general device functionality, refer to the               registers and the port pin read as zeros.
       "dsPIC30F Family Reference Manual"
       (DS70046).                                               When a pin is shared with another peripheral or
                                                                function that is defined as an input only, it is
All of the device pins (except VDD, VSS, MCLR and               nevertheless regarded as a dedicated port because
OSC1/CLKI) are shared between the peripherals and               there is no other competing source of outputs.
the parallel I/O ports.
                                                                A parallel I/O (PIO) port that shares a pin with a
All I/O input ports feature Schmitt Trigger inputs for          peripheral is, in general, subservient to the peripheral.
improved noise immunity.                                        The peripheral's output buffer data and control signals
                                                                are provided to a pair of multiplexers. The multiplexers
7.1 Parallel I/O (PIO) Ports                                    select whether the peripheral or the associated port
                                                                has ownership of the output data and control signals of
When a peripheral is enabled and the peripheral is              the I/O pad cell. Figure 7-1 shows how ports are shared
actively driving an associated pin, the use of the pin as       with other peripherals and the associated I/O cell (pad)
a general purpose output pin is disabled. The I/O pin           to which they are connected.
can be read, but the output driver for the parallel port bit
is disabled. If a peripheral is enabled, but the peripheral     The format of the registers for the shared ports,
is not actively driving a pin, that pin can be driven by a      (PORTB, PORTC, PORTD and PORTF) are shown in
port.                                                           Table 7-1 through Table 7-6.

All port pins have three registers directly associated             Note: The actual bits in use vary between
with the operation of the port pin. The Data Direction                         devices.
register (TRISx) determines whether the pin is an input
or an output. If the data direction bit is a `1', then the pin
is an input. All port pins are defined as inputs after a
Reset. Reads from the latch (LATx), read the latch.

FIGURE 7-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
                                  Read TRIS                     0

             Data Bus               DQ                                          I/O Pad
             WR TRIS                                            Input Data
                                    CK
             WR LAT +             TRIS Latch
             WR Port
                                    DQ
             Read LAT
             Read Port              CK
                                  Data Latch

2008 Microchip Technology Inc.                                                                 DS70139F-page 59
dsPIC30F2011/2012/3012/3013

7.2 Configuring Analog Port Pins                            7.2.1 I/O PORT WRITE/READ TIMING

The use of the ADPCFG and TRIS registers control the        One instruction cycle is required between a port
operation of the A/D port pins. The port pins that are      direction change or port write operation and a read
desired as analog inputs must have their                    operation of the same port. Typically this instruction
corresponding TRIS bit set (input). If the TRIS bit is      would be a NOP.
cleared (output), the digital output level (VOH or VOL) is
converted.                                                  EXAMPLE 7-1:  PORT WRITE/READ
                                                                          EXAMPLE
When the PORT register is read, all pins configured as
analog input channels are read as cleared (a low level).    MOV #0xF0, W0; Configure PORTB<7:4>

Pins configured as digital inputs will not convert an            ; as inputs
analog input. Analog levels on any pin that is defined as
a digital input (including the ANx pins) may cause the      MOV W0, TRISB; and PORTB<3:0> as outputs
input buffer to consume the current that exceeds
device specifications.                                      NOP  ; additional instruction cycle

                                                            btss PORTB, #7; bit test RB7 and skip if set

DS70139F-page 60                                                          2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 7-1: PORTB REGISTER MAP FOR dsPIC30F2011/3012

                                   SFR   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
                                  Name

                                  TRISB 02C6 --          --          --        --          --      --      --         --  TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 0000 0000 1111 1111

                                  PORTB 02C8 --          --          --        --          --      --      --         --      RB7        RB6    RB5    RB4    RB3    RB2    RB1        RB0 0000 0000 0000 0000

                                  LATB 02CB --           --          --        --          --      --      --         --  LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 0000 0000 0000 0000

                                  Legend: -- = unimplemented bit, read as `0'

                                  TABLE 7-2: PORTB REGISTER MAP FOR dsPIC30F2012/3013

                                   SFR   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
                                  Name
                                                                                 --          --
                                  TRISB 02C6 --          --          --          --          --    --      TRISB9 TRISB8 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 0000 0011 1111 1111
                                                                                 --          --
                                  PORTB 02C8 --          --          --                            --      RB9    RB8         RB7        RB6    RB5    RB4    RB3    RB2 RB1           RB0 0000 0000 0000 0000      dsPIC30F2011/2012/3012/3013

                                  LATB 02CB --           --          --                            --      LATB9 LATB8 LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 0000 0000 0000 0000

                                  Legend: -- = unimplemented bit, read as `0'

                                  TABLE 7-3: PORTC REGISTER MAP FOR dsPIC30F2011/2012/3012/3013

                                   SFR   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
                                  Name
                                                                                                                                                        --            --     --         --    1110 0000 0000 0000
                                  TRISC  02CC TRISC15 TRISC14 TRISC13 --                       --  --      --     --      --         --  --     --      --            --     --         --    0000 0000 0000 0000
                                                                                                                                                        --            --     --         --    0000 0000 0000 0000
                                  PORTC  02CE RC15 RC14 RC13                           --      --  --      --     --      --         --  --     --

                                  LATC   02D0 LATC15 LATC14 LATC13 --                          --  --      --     --      --         --  --     --

                                  Legend: -- = unimplemented bit, read as `0'

                                  TABLE 7-4: PORTD REGISTER MAP FOR dsPIC30F2011/3012

                                   SFR   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
                                  Name
                                                                                             --      --     --     --          --         --     --     --     --     --
                                  TRISD 02D2 --          --          --        --            --      --     --     --          --         --     --     --     --     --           -- TRISD0 0000 0000 0000 0001
                                                                                             --      --     --     --          --         --     --     --     --     --
                                  PORTD 02D4 --          --          --        --                                                                                                  --  RD0 0000 0000 0000 0000

                                  LATD 02D6 --           --          --        --                                                                                                  --  LATD0 0000 0000 0000 0000

                                  Legend: -- = unimplemented bit, read as `0'

DS70139F-page 61
DS70139F-page 62                  TABLE 7-5: PORTD REGISTER MAP FOR dsPIC30F2012/3013                                                                                                               dsPIC30F2011/2012/3012/3013

                                   SFR      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
                                  Name
                                                                                         --                                        --     --     --     --     --     --
                                  TRISD 02D2 --            --      --          --        --    -- TRISD9 TRISD8 --                 --     --     --     --     --     --    -- 0000 0011 0000 0000
                                                                                         --                                        --     --     --     --     --     --    -- 0000 0000 0000 0000
                                  PORTD 02D4 --            --      --          --              --             RD9  RD8        --                                            -- 0000 0000 0000 0000

                                  LATD 02D6 --             --      --          --              --  LATD9 LATD8                --

                                  Legend: -- = unimplemented bit, read as `0'

                                  TABLE 7-6: PORTF REGISTER MAP FOR dsPIC30F2012/3013

                                   SFR      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
                                  Name
                                                                                                                    --
                                  TRISF 02DE --            --      --          --      --      --  --               --    -- TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 --          -- 0000 0000 0111 1100
                                                                                                                    --                                                      -- 0000 0000 0000 0000
                                  PORTF 02E0       --      --      --          --      --      --  --                     --      RF6    RF5    RF4    RF3    RF2    --     -- 0000 0000 0000 0000

                                  LATF 02E2        --      --      --          --      --      --  --                     --      LATF6 LATF5 LATF4 LATF3 LATF2      --

                                  Legend:   -- = unimplemented bit, read as `0'
                                     Note:  The dsPIC30F2011/3012 devices do not have TRISF, PORTF, or LATF.

2008 Microchip Technology Inc.
                                              dsPIC30F2011/2012/3012/3013

7.3 Input Change Notification Module

The input change notification module provides the
dsPIC30F devices the ability to generate interrupt
requests to the processor, in response to a change of
state on selected input pins. This module is capable of
detecting input change of states even in Sleep mode,
when the clocks are disabled. There are up to 10
external signals (CN0 through CN7, CN17 and CN18)
that may be selected (enabled) for generating an
interrupt request on a change of state.

TABLE 7-7: INPUT CHANGE NOTIFICATION REGISTER MAP FOR dsPIC30F2011/3012 (BITS 7-0)

SFR     Addr.  Bit 7             Bit 6       Bit 5  Bit 4   Bit 3   Bit 2   Bit 1                    Bit 0   Reset State
Name

CNEN1    00C0 CN7IE CN6IE CN5IE                       CN4IE   CN3IE   CN2IE   CN1IE                    CN0IE  0000 0000 0000 0000
CNEN2                                                    --      --      --      --                       --  0000 0000 0000 0000
CNPU1    00C2   --                --          --                                                              0000 0000 0000 0000
CNPU2                                                CN4PUE  CN3PUE  CN2PUE  CN1PUE                   CN0PUE  0000 0000 0000 0000
Legend:  00C4 CN7PUE CN6PUE CN5PUE                       --      --      --      --                       --

         00C6   --                --          --

         -- = unimplemented bit, read as `0'

TABLE 7-8: INPUT CHANGE NOTIFICATION REGISTER MAP FOR dsPIC30F2012/3013 (BITS 7-0)

SFR     Addr.  Bit 7             Bit 6       Bit 5  Bit 4   Bit 3   Bit 2   Bit 1                    Bit 0   Reset State
Name

CNEN1    00C0 CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE CN1IE                                                CN0IE  0000 0000 0000 0000
                                                                                                          --  0000 0000 0000 0000
CNEN2    00C2   --                --          --     --      --      CN18IE CN17IE                            0000 0000 0000 0000
                                                                                                      CN0PUE  0000 0000 0000 0000
CNPU1    00C4 CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE CN1PUE                                            --

CNPU2    00C6   --                --          --     --      --      CN18PUE CN17PUE

Legend: -- = unimplemented bit, read as `0'
Note: Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

2008 Microchip Technology Inc.                                                                              DS70139F-page 63
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 64             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

8.0 INTERRUPTS                                             INTCON1<15:0>, INTCON2<15:0>
                                                             Global interrupt control functions are derived from
Note:  This data sheet summarizes features of                these two registers. INTCON1 contains the
       this group of dsPIC30F devices and is not             control and status flags for the processor
       intended to be a complete reference                   exceptions. The INTCON2 register controls the
       source. For more information on the CPU,              external interrupt request signal behavior and the
       peripherals, register descriptions and                use of the alternate vector table.
       general device functionality, refer to the
       "dsPIC30F Family Reference Manual"                 Note:  Interrupt flag bits get set when an interrupt
       (DS70046). For more information on the                    condition occurs, regardless of the state of
       device instruction set and programming,                   its corresponding enable bit. User
       refer to the "dsPIC30F/33F Programmer's                   software should ensure the appropriate
       Reference Manual" (DS70157).                              interrupt flag bits are clear prior to
                                                                 enabling an interrupt.

The dsPIC30F sensor family has up to 21 interrupt         All interrupt sources can be user assigned to one of 7
sources and 4 processor exceptions (traps) which must     priority levels, 1 through 7, via the IPCx registers. Each
be arbitrated based on a priority scheme.                 interrupt source is associated with an interrupt vector,
                                                          as shown in Table 8-1. Levels 7 and 1 represent the
The CPU is responsible for reading the Interrupt Vector   highest and lowest maskable priorities, respectively.
Table (IVT) and transferring the address contained in
the interrupt vector to the program counter. The          Note:  Assigning a priority level of `0' to an
interrupt vector is transferred from the program data            interrupt source is equivalent to disabling
bus into the program counter via a 24-bit wide                   that interrupt.
multiplexer on the input of the program counter.
                                                          If the NSTDIS bit (INTCON1<15>) is set, nesting of
The Interrupt Vector Table (IVT) and Alternate Interrupt  interrupts is prevented. Thus, if an interrupt is currently
Vector Table (AIVT) are placed near the beginning of      being serviced, processing of a new interrupt is
program memory (0x000004). The IVT and AIVT are           prevented even if the new interrupt is of higher priority
shown in Figure 8-1.                                      than the one currently being serviced.

The interrupt controller is responsible for                  Note: The IPL bits become read-only whenever
pre-processing the interrupts and processor                              the NSTDIS bit has been set to `1'.
exceptions before they are presented to the processor
core. The peripheral interrupts and traps are enabled,    Certain interrupts have specialized control bits for
prioritized and controlled using centralized Special      features like edge or level triggered interrupts,
Function Registers:                                       interrupt-on-change, etc. Control of these features
                                                          remains within the peripheral module which generates
IFS0<15:0>, IFS1<15:0>, IFS2<15:0>                      the interrupt.
   All interrupt request flags are maintained in these
   three registers. The flags are set by their            The DISI instruction can be used to disable the
   respective peripherals or external signals and         processing of interrupts of priorities 6 and lower for a
   they are cleared via software.                         certain number of instructions, during which the DISI bit
                                                          (INTCON2<14>) remains set.
IEC0<15:0>, IEC1<15:0>, IEC2<15:0>
   All interrupt enable control bits are maintained in    When an interrupt is serviced, the PC is loaded with the
   these three registers. These control bits are used     address stored in the vector location in program
   to individually enable interrupts from the             memory that corresponds to the interrupt. There are 63
   peripherals or external signals.                       different vectors within the IVT (refer to Table 8-1).
                                                          These vectors are contained in locations 0x000004
IPC0<15:0>... IPC10<7:0>                                through 0x0000FE of program memory (refer to
   The user assignable priority level associated with     Table 8-1). These locations contain 24-bit addresses,
   each of these 41 interrupts is held centrally in       and in order to preserve robustness, an address error
   these eleven registers.                                trap takes place if the PC attempts to fetch any of these
                                                          words during normal execution. This prevents
IPL<3:0>                                                execution of random data as a result of accidentally
   The current CPU priority level is explicitly stored    decrementing a PC into vector space, accidentally
   in the IPL bits. IPL<3> is present in the CORCON       mapping a data space address into vector space, or the
   register, whereas IPL<2:0> are present in the          PC rolling over to 0x000000 after reaching the end of
   STATUS register (SR) in the processor core.            implemented program memory space. Execution of a
                                                          GOTO instruction to this vector space also generates an
                                                          address error trap.

2008 Microchip Technology Inc.                                 DS70139F-page 65
dsPIC30F2011/2012/3012/3013

8.1 Interrupt Priority                                     TABLE 8-1: INTERRUPT VECTOR TABLE

The user-assignable interrupt priority (IP<2:0>) bits for     INT Vector                   Interrupt Source
each individual interrupt source are located in the        Number Number
LS 3 bits of each nibble within the IPCx register(s). Bit
3 of each nibble is not used and is read as a `0'. These   Highest Natural Order Priority
bits define the priority level assigned to a particular
interrupt by the user.                                     0   8 INT0 -- External Interrupt 0

                                                           1   9 IC1 -- Input Capture 1

                                                           2   10 OC1 -- Output Compare 1

Note:  The user-assignable priority levels start at        3   11 T1 -- Timer 1
       0 as the lowest priority and level 7 as the
       highest priority.                                   4   12 IC2 -- Input Capture 2

                                                           5   13 OC2 -- Output Compare 2

Natural Order Priority is determined by the position of    6   14 T2 -- Timer 2
an interrupt in the vector table, and only affects
interrupt operation when multiple interrupts with the      7   15 T3 -- Timer 3
same user-assigned priority become pending at the
same time.                                                 8   16 SPI1

                                                           9   17 U1RX -- UART1 Receiver

                                                           10  18 U1TX -- UART1 Transmitter

Table 8-1 lists the interrupt numbers and interrupt        11  19 ADC -- ADC Convert Done
sources for the dsPIC30F2011/2012/3012/3013
devices and their associated vector numbers.               12  20 NVM -- NVM Write Complete

                                                           13  21 SI2C -- I2CTM Slave Interrupt

    Note 1: The natural order priority scheme has 0        14  22 MI2C -- I2C Master Interrupt
                as the highest priority and 53 as the
                lowest priority.                           15  23 Input Change Interrupt

           2: The natural order priority number is the     16  24 INT1 -- External Interrupt 1
                same as the INT number.
                                                           17-22 25-30 Reserved
The ability for the user to assign every interrupt to one
of seven priority levels means that the user can assign    23  31 INT2 -- External Interrupt 2
a very high overall priority level to an interrupt with a
low natural order priority. For example, the PLVD          24  32 U2RX* -- UART2 Receiver
(Low Voltage Detect) can be given a priority of 7. The
INT0 (External Interrupt 0) may be assigned to priority    25  33 U2TX* -- UART2 Transmitter
level 1, thus giving it a very low effective priority.
                                                           26-41 34-49 Reserved

                                                           42  50 LVD -- Low-Voltage Detect

                                                           43-53 51-61 Reserved

                                                           Lowest Natural Order Priority

                                                           * Only the dsPIC30F3013 has UART2 and the U2RX,
                                                               U2TX interrupts. These locations are reserved for
                                                               the dsPIC30F2011/2012/3012.

DS70139F-page 66                                                          2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

8.2 Reset Sequence                                          8.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        indicating a software or hardware error, which adhere
processor initializes its registers in response to a Reset  to a predefined priority as shown in Figure 8-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           within the application.
location immediately followed by the address target for
the GOTO instruction. The processor executes the GOTO       Note:  If the user does not intend to take
to the specified address and then begins operation at              corrective action in the event of a trap
the specified target (start) address.                              error condition, these vectors must be
                                                                   loaded with the address of a default
8.2.1 RESET SOURCES                                                handler that contains the RESET instruc-
                                                                   tion. If, on the other hand, one of the vec-
In addition to external Reset and Power-on Reset                   tors containing an invalid address is
(POR), there are 6 sources of error conditions which               called, an address error trap is generated.
`trap' to the Reset vector.
                                                            Note that many of these trap conditions can only be
Watchdog Time-out:                                        detected when they occur. Consequently, the
   The watchdog has timed out, indicating that the          questionable instruction is allowed to complete prior to
   processor is no longer executing the correct flow        trap exception processing. If the user chooses to
   of code.                                                 recover from the error, the result of the erroneous
                                                            action that caused the trap may have to be corrected.
Uninitialized W Register Trap:
   An attempt to use an uninitialized W register as         There are 8 fixed priority levels for traps: Level 8
   an Address Pointer causes a Reset.                       through Level 15, which implies that the IPL3 is always
                                                            set during processing of a trap.
Illegal Instruction Trap:
   Attempted execution of any unused opcodes                If the user is not currently executing a trap, and he sets
   results in an illegal instruction trap. Note that a      the IPL<3:0> bits to a value of `0111' (Level 7), then all
   fetch of an illegal instruction does not result in an    interrupts are disabled, but traps can still be processed.
   illegal instruction trap if that instruction is flushed
   prior to execution due to a flow change.                 8.3.1 TRAP SOURCES

Brown-out Reset (BOR):                                    The following traps are provided with increasing
   A momentary dip in the power supply to the               priority. However, since all traps can be nested, priority
   device has been detected which may result in             has little effect.
   malfunction.
                                                            Math Error Trap:
Trap Lockout:
   Occurrence of multiple trap conditions                   The math error trap executes under the following three
   simultaneously causes a Reset.                           circumstances:

                                                            1. If an attempt is made to divide by zero, the
                                                                  divide operation is aborted on a cycle boundary
                                                                  and the trap is taken.

                                                            2. If enabled, a math error trap is 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 is 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 occurs.

2008 Microchip Technology Inc.                                       DS70139F-page 67
dsPIC30F2011/2012/3012/3013

Address Error Trap:                                  Stack Error Trap:

This trap is initiated when any of the following     This trap is initiated under the following conditions:
circumstances occurs:
                                                      The Stack Pointer is loaded with a value which is
A misaligned data word access is attempted.           greater than the (user programmable) limit value
                                                        written into the SPLIM register (stack overflow).
A data fetch from our unimplemented data
   memory location is attempted.                      The Stack Pointer is loaded with a value which is
                                                        less than 0x0800 (simple stack underflow).
A data access of an unimplemented program
   memory location is attempted.                     Oscillator Fail Trap:

An instruction fetch from vector space is          This trap is initiated if the external oscillator fails and
   attempted.                                        operation becomes reliant on an internal RC backup.

Note:  In the MAC class of instructions, wherein     8.3.2 HARD AND SOFT TRAPS
       the data space is split into X and Y data
       space, unimplemented X space includes         It is possible that multiple traps can become active
       all of Y space, and unimplemented Y           within the same cycle (e.g., a misaligned word stack
       space includes all of X space.                write to an overflowed address). In such a case, the
                                                     fixed priority shown in Figure 8-2 is implemented,
5. Execution of a "BRA #literal" instruction or a    which may require the user to check if other traps are
      "GOTO #literal" instruction, where literal     pending, in order to completely correct the Fault.
      is an unimplemented program memory address.
                                                     Soft traps include exceptions of priority level 8 through
6. Executing instructions after modifying the PC to  level 11, inclusive. The arithmetic error trap (level 11)
      point the unimplemented program memory         falls into this category of traps.
      addresses. The PC may be modified by loading
      a value into the stack and executing a RETURN  Hard traps include exceptions of priority level 12
      instruction.                                   through level 15, inclusive. The address error (level
                                                     12), stack error (level 13) and oscillator error (level 14)
                                                     traps fall into this category.

                                                     Each hard trap that occurs must be acknowledged
                                                     before code execution of any type can continue. If a
                                                     lower priority hard trap occurs while a higher priority
                                                     trap is pending, acknowledged, or is being processed,
                                                     a hard trap conflict occurs.

                                                     The device is automatically Reset in a hard trap conflict
                                                     condition. The TRAPR Status bit (RCON<15>) is set
                                                     when the Reset occurs, so that the condition may be
                                                     detected in software.

DS70139F-page 68                                     2008 Microchip Technology Inc.
                                          dsPIC30F2011/2012/3012/3013

FIGURE 8-1:  TRAP VECTORS                                    FIGURE 8-2:                                           INTERRUPT STACK
                                                                                                                   FRAME
              Reset - GOTO Instruction    0x000000             0x0000 15
               Reset - GOTO Address       0x000002                                                                           0
                                          0x000004
DecreasingIVT           Reserved                                                                                          PC<15:0>     W15 (before CALL)
   PriorityAIVTOscillator Fail Trap Vector0x000014                                                                 SRL IPL3 PC<22:16>  W15 (after CALL)
             Address Error Trap Vector
                                                                                              Stack Grows Towards0x00007E
                                                                                                 Higher AddressStack Error Trap Vector0x000080
               Math Error Trap Vector     0x000082
                                          0x000084                                                                                     POP : [--W15]
                   Reserved Vector                                                                                                     PUSH: [W15++]
                   Reserved Vector        0x000094
                                                                 Note 1: The user can always lower the priority
                   Reserved Vector        0x0000FE                           level by writing a new value into SR. The
                  Interrupt 0 Vector                                         Interrupt Service Routine must clear the
                  Interrupt 1 Vector                                         interrupt flag bits in the IFSx register
                                                                             before lowering the processor interrupt
                             --                                              priority, in order to avoid recursive
                             --                                              interrupts.
                             --
                  Interrupt 52 Vector                                   2: The IPL3 bit (CORCON<3>) is always
                  Interrupt 53 Vector                                        clear when interrupts are being
                        Reserved                                             processed. It is set only during execution
                        Reserved                                             of traps.
                        Reserved
             Oscillator Fail Trap Vector                     The RETFIE (return from interrupt) instruction unstacks
                                                             the program counter and STATUS registers to return
              Stack Error Trap Vector                        the processor to its state prior to the interrupt
             Address Error Trap Vector                       sequence.

               Math Error Trap Vector                        8.5 Alternate Vector Table
                   Reserved Vector
                                                             In program memory, the Interrupt Vector Table (IVT) is
                   Reserved Vector                           followed by the Alternate Interrupt Vector Table (AIVT),
                   Reserved Vector                           as shown in Figure 8-1. Access to the alternate vector
                  Interrupt 0 Vector                         table is provided by the ALTIVT bit in the INTCON2
                                                             register. If the ALTIVT bit is set, all interrupt and
                  Interrupt 1 Vector                         exception processes use the alternate vectors instead
                             --                              of the default vectors. The alternate vectors are
                             --                              organized in the same manner as the default vectors.
                             --                              The AIVT supports emulation and debugging efforts by
                                                             providing a means to switch between an application
                  Interrupt 52 Vector                        and a support environment without requiring the
                  Interrupt 53 Vector                        interrupt vectors to be reprogrammed. This feature also
                                                             enables switching between applications for evaluation
8.4 Interrupt Sequence                                       of different software algorithms at run time.

All interrupt event flags are sampled in the beginning of    If the AIVT is not required, the program memory
each instruction cycle by the IFSx registers. A pending      allocated to the AIVT may be used for other purposes.
Interrupt Request (IRQ) is indicated by the flag bit         AIVT is not a protected section and may be freely
being equal to a `1' in an IFSx register. The IRQ causes     programmed by the user.
an interrupt to occur if the corresponding bit in the
Interrupt Enable (IECx) register is set. For the
remainder of the instruction cycle, the priorities of all
pending interrupt requests are evaluated.

If there is a pending IRQ with a priority level greater
than the current processor priority level in the IPL bits,
the processor is interrupted.

The processor then stacks the current program counter
and the low byte of the processor STATUS register
(SRL), as shown in Figure 8-2. The low byte of the
STATUS register contains the processor priority level at
the time prior to the beginning of the interrupt cycle.
The processor then loads the priority level for this
internsrupt into the STATUS register. This action
disables all lower priority interrupts until the completion
of the Interrupt Service Routine.

2008 Microchip Technology Inc.                                                                                                       DS70139F-page 69
dsPIC30F2011/2012/3012/3013

8.6 Fast Context Saving                                       8.7 External Interrupt Requests

A context saving option is available using shadow             The interrupt controller supports three external
registers. Shadow registers are provided for the DC, N,       interrupt request signals, INT0-INT2. These inputs are
OV, Z and C bits in SR, and the registers W0 through          edge sensitive; they require a low-to-high or a
W3. The shadows are only one level deep. The shadow           high-to-low transition to generate an interrupt request.
registers are accessible using the PUSH.S and POP.S           The INTCON2 register has three bits, INT0EP-INT2EP,
instructions only.                                            that select the polarity of the edge detection circuitry.

When the processor vectors to an interrupt, the               8.8 Wake-up from Sleep and Idle
PUSH.S instruction can be used to store the current
value of the aforementioned registers into their              The interrupt controller may be used to wake-up the
respective shadow registers.                                  processor from either Sleep or Idle modes, if Sleep or
                                                              Idle mode is active when the interrupt is generated.
If an ISR of a certain priority uses the PUSH.S and
POP.S instructions for fast context saving, then a            If an enabled interrupt request of sufficient priority is
higher priority ISR should not include the same instruc-      received by the interrupt controller, then the standard
tions. Users must save the key registers in software          interrupt request is presented to the processor. At the
during a lower priority interrupt if the higher priority ISR  same time, the processor wakes up from Sleep or Idle
uses fast context saving.                                     and begins execution of the Interrupt Service Routine
                                                              (ISR) needed to process the interrupt request.

DS70139F-page 70                                              2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 8-2: dsPIC30F2011/2012/3012 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 --    --           --  -- OVATE OVBTE COVTE --                                     --  -- MATHERR ADDRERR STKERR OSCFAIL -- 0000 0000 0000 0000

                                  INTCON2 0082 ALTIVT DISI  --           --  --                       --      --           --     --     --  --           --    --     INT2EP INT1EP INT0EP 0000 0000 0000 0000

                                  IFS0   0084 CNIF MI2CIF SI2CIF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF                                          T1IF   OC1IF IC1IF INT0IF 0000 0000 0000 0000

                                  IFS1   0086 --  --        --           --  --                       --      --           -- INT2IF --      --           --    --     --     --           INT1IF 0000 0000 0000 0000

                                  IFS2   0088 --  --        --           --  -- LVDIF                                      --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IEC0   008C CNIE MI2CIE SI2CIE NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE                                          T1IE   OC1IE IC1IE INT0IE 0000 0000 0000 0000

                                  IEC1   008E --  --        --           --  --                       --      --           -- INT2IE --      --           --    --     --     --           INT1IE 0000 0000 0000 0000

                                  IEC2   0090 --  --        --           --  --                       LVDIE   --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC0   0094 --            T1IP<2:0>        --                               OC1IP<2:0>          --         IC1IP<2:0>         --            INT0IP<2:0>         0100 0100 0100 0100

                                  IPC1   0096 --            T31P<2:0>        --                               T2IP<2:0>           --         OC2IP<2:0>         --            IC2IP<2:0>          0100 0100 0100 0100  dsPIC30F2011/2012/3012/3013

                                  IPC2   0098 --            ADIP<2:0>        --                               U1TXIP<2:0>         --         U1RXIP<2:0>        --            SPI1IP<2:0>         0100 0100 0100 0100

                                  IPC3   009A --            CNIP<2:0>        --                               MI2CIP<2:0>         --         SI2CIP<2:0>        --            NVMIP<2:0>          0100 0100 0100 0100

                                  IPC4   009C --  --        --           --  --                       --      --           --     --     --  --           --    --            INT1IP<2:0>         0000 0000 0000 0100

                                  IPC5   009E --            INT2IP<2:0>      --                       --      --           --     --     --  --           --    --     --     --           -- 0100 0000 0000 0000

                                  IPC6   00A0 --  --        --           --  --                       --      --           --     --     1   0            0     --     1      0            0 0000 0000 0100 0100

                                  IPC7   00A2 --  --        --           --  --                       --      --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC8   00A4 --  --        --           --  --                       --      --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC9   00A6 --  --        --           --  --                       --      --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC10  00A8 --  --        --           --  --                               LVDIP<2:0>          --     --  --           --    --     --     --           -- 0000 0100 0000 0000

                                  Legend: u = uninitialized bit; -- = unimplemented bit, read as `0'

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

DS70139F-page 71
DS70139F-page 72                  TABLE 8-3: dsPIC30F3013 INTERRUPT CONTROLLER REGISTER MAP                                                                                                                            dsPIC30F2011/2012/3012/3013

                                   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 --    --           --  -- OVATE OVBTE COVTE --                                     --  -- MATHERR ADDRERR STKERR OSCFAIL -- 0000 0000 0000 0000

                                  INTCON2 0082 ALTIVT DISI  --           --  --                       --      --           --     --     --  --           --    --     INT2EP INT1EP INT0EP 0000 0000 0000 0000

                                  IFS0   0084 CNIF MI2CIF SI2CIF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF                                          T1IF   OC1IF IC1IF INT0IF 0000 0000 0000 0000

                                  IFS1   0086 --  --        --           --  --                       -- U2TXIF U2RXIF INT2IF --             --           --    --     --     --           INT1IF 0000 0000 0000 0000

                                  IFS2   0088 --  --        --           --  -- LVDIF                         --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IEC0   008C CNIE MI2CIE SI2CIE NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE                                          T1IE   OC1IE IC1IE INT0IE 0000 0000 0000 0000

                                  IEC1   008E --  --        --           --  --                               U2TXIE U2RXIE INT2IE --        --           --    --     --     --           INT1IE 0000 0000 0000 0000

                                  IEC2   0090 --  --        --           --  --                       LVDIE   --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC0   0094 --            T1IP<2:0>        --                               OC1IP<2:0>          --         IC1IP<2:0>         --            INT0IP<2:0>         0100 0100 0100 0100

                                  IPC1   0096 --            T31P<2:0>        --                               T2IP<2:0>           --         OC2IP<2:0>         --            IC2IP<2:0>          0100 0100 0100 0100

                                  IPC2   0098 --            ADIP<2:0>        --                               U1TXIP<2:0>         --         U1RXIP<2:0>        --            SPI1IP<2:0>         0100 0100 0100 0100

                                  IPC3   009A --            CNIP<2:0>        --                               MI2CIP<2:0>         --         SI2CIP<2:0>        --            NVMIP<2:0>          0100 0100 0100 0100

                                  IPC4   009C --  --        --           --  --                       --      --           --     --     --  --           --    --            INT1IP<2:0>         0000 0000 0000 0100

                                  IPC5   009E --            INT2IP<2:0>      --                       --      --           --     --     --  --           --    --                                0100 0000 0000 0000

                                  IPC6   00A0 --  --        --           --  --                       --      --           --     --         U2TXIP<2:0>        --            U2RXIP<2:0>         0000 0000 0100 0100

                                  IPC7   00A2 --  --        --           --  --                       --      --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC8   00A4 --  --        --           --  --                       --      --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC9   00A6 --  --        --           --  --                       --      --           --     --     --  --           --    --     --     --           -- 0000 0000 0000 0000

                                  IPC10  00A8 --  --        --           --  --                               LVDIP<2:0>          --     --  --           --    --     --     --           -- 0000 0100 0000 0000

                                  Legend: u = uninitialized bit; -- = unimplemented bit, read as `0'

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

2008 Microchip Technology Inc.
                                         dsPIC30F2011/2012/3012/3013

9.0 TIMER1 MODULE                                                 These operating modes are determined by setting the
                                                                  appropriate bit(s) in the 16-bit SFR, T1CON. Figure 9-1
Note:  This data sheet summarizes features of                     presents a block diagram of the 16-bit timer module.
       this group of dsPIC30F devices and is not
       intended to be a complete reference                        16-bit Timer Mode: In the 16-bit Timer mode, the timer
       source. For more information on the CPU,                   increments on every instruction cycle up to a match
       peripherals, register descriptions and                     value preloaded into the Period register PR1, then
       general device functionality, refer to the                 resets to `0' and continues to count.
       "dsPIC30F Family Reference Manual"
       (DS70046).                                                 When the CPU goes into the Idle mode, the timer stops
                                                                  incrementing unless the TSIDL (T1CON<13>) bit = 0.
This section describes the 16-bit general purpose                 If TSIDL = 1, the timer module logic resumes the incre-
Timer1 module and associated operational modes.                   menting sequence on termination of CPU Idle mode.
Figure 9-1 depicts the simplified block diagram of the
16-bit Timer1 module. The following sections provide              16-bit Synchronous Counter Mode: In the 16-bit
detailed descriptions including setup and Control                 Synchronous Counter mode, the timer increments on
registers, along with associated block diagrams for the           the rising edge of the applied external clock signal
operational modes of the timers.                                  which is synchronized with the internal phase clocks.
                                                                  The timer counts up to a match value preloaded in PR1,
The Timer1 module is a 16-bit timer that serves as the            then resets to `0' and continues.
time counter for the real-time clock or operates as a
free-running interval timer/counter. The 16-bit timer has         When the CPU goes into the Idle mode, the timer stops
the following modes:                                              incrementing unless the respective TSIDL bit = 0. If
                                                                  TSIDL = 1, the timer module logic resumes the
16-bit Timer                                                    incrementing sequence upon termination of the CPU
16-bit Synchronous Counter                                      Idle mode.
16-bit Asynchronous Counter
                                                                  16-bit Asynchronous Counter Mode: In the 16-bit
These operational characteristics are supported:                  Asynchronous Counter mode, the timer increments on
                                                                  every rising edge of the applied external clock signal.
Timer gate operation                                            The timer counts up to a match value preloaded in PR1,
Selectable prescaler settings                                   then resets to `0' and continues.
Timer operation during CPU Idle and Sleep
                                                                  When the timer is configured for the Asynchronous
   modes                                                          mode of operation and the CPU goes into the Idle
Interrupt on 16-bit Period register match or falling            mode, the timer stops incrementing if TSIDL = 1.

   edge of external gate signal

FIGURE 9-1:      16-BIT TIMER1 MODULE BLOCK DIAGRAM

                                           PR1

                                  Equal                                              TSYNC
                                               Comparator x 16

                                                                                     1      Sync

                                  Reset    TMR1

                                                                                     0

       T1IF      0

       Event Flag 1                                     QD        TGATE  TCS
                                                        Q CK                 TGATE
                 TGATE                                                                      TCKPS<1:0>
                                                            Gate                                 2
       SOSCO/                                               Sync                TON
           T1CK                                              TCY         1x                   Prescaler
                                                                                            1, 8, 64, 256
                                  LPOSCEN                                01

       SOSCI                                                             00

2008 Microchip Technology Inc.                                                                  DS70139F-page 73
dsPIC30F2011/2012/3012/3013

9.1 Timer Gate Operation                                  9.4 Timer Interrupt

The 16-bit timer can be placed in the Gated Time          The 16-bit timer has the ability to generate an
Accumulation mode. This mode allows the internal TCY      interrupt-on-period match. When the timer count
to increment the respective timer when the gate input     matches the Period register, the T1IF bit is asserted and
signal (T1CK pin) is asserted high. Control bit,          an interrupt is generated, if enabled. The T1IF bit must be
TGATE (T1CON<6>), must be set to enable this mode.        cleared in software. The timer interrupt flag, T1IF, is
The timer must be enabled (TON = 1) and the timer         located in the IFS0 Control register in the interrupt
clock source set to internal (TCS = 0).                   controller.

When the CPU goes into Idle mode, the timer stops         When the Gated Time Accumulation mode is enabled,
incrementing unless TSIDL = 0. If TSIDL = 1, the timer    an interrupt is also generated on the falling edge of the
resumes the incrementing sequence upon termination        gate signal (at the end of the accumulation cycle).
of the CPU Idle mode.
                                                          Enabling an interrupt is accomplished via the
9.2 Timer Prescaler                                       respective timer interrupt enable bit, T1IE. The timer
                                                          interrupt enable bit is located in the IEC0 Control
The input clock (FOSC/4 or external clock) to the 16-bit  register in the interrupt controller.
Timer has a prescale option of 1:1, 1:8, 1:64 and 1:256,
selected by control bits, TCKPS<1:0> (T1CON<5:4>).        9.5 Real-Time Clock
The prescaler counter is cleared when any of the
following occurs:                                         Timer1, when operating in Real-Time Clock (RTC)
                                                          mode, provides time of day and event time-stamping
a write to the TMR1 register                            capabilities. Key operational features of the RTC are:
a write to the T1CON register
device Reset, such as POR and BOR                        Operation from 32 kHz LP oscillator
                                                          8-bit prescaler
However, if the timer is disabled (TON = 0), then the      Low power
timer prescaler cannot be reset since the prescaler       Real-Time Clock interrupts
clock is halted.
                                                          These operating modes are determined by setting the
TMR1 is not cleared when T1CON is written. It is          appropriate bit(s) in the T1CON Control register.
cleared by writing to the TMR1 register.
                                                          FIGURE 9-2:     RECOMMENDED
9.3 Timer Operation During Sleep                                          COMPONENTS FOR
         Mode                                                             TIMER1 LP OSCILLATOR
                                                                          RTC
The timer operates during CPU Sleep mode, if:
                                                          C1
The timer module is enabled (TON = 1), and                                                     SOSCI
The timer clock source is selected as external
                                                                       32.768 kHz    dsPIC30FXXXX
   (TCS = 1), and                                                      XTAL
The TSYNC bit (T1CON<2>) is asserted to a logic
                                                                                     SOSCO
   `0' which defines the external clock source as
   asynchronous.                                          C2           R

When all three conditions are true, the timer continues   C1 = C2 = 18 pF; R = 100K
to count up to the Period register and be reset to
0x0000.

When a match between the timer and the Period
register occurs, an interrupt can be generated if the
respective timer interrupt enable bit is asserted.

DS70139F-page 74                                                          2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

9.5.1 RTC OSCILLATOR OPERATION                              9.5.2 RTC INTERRUPTS

When the TON = 1, TCS = 1 and TGATE = 0, the timer          When an interrupt event occurs, the respective interrupt
increments on the rising edge of the 32 kHz LP oscilla-     flag, T1IF, is asserted and an interrupt is generated if
tor output signal, up to the value specified in the Period  enabled. The T1IF bit must be cleared in software. The
register and is then reset to `0'.                          respective Timer interrupt flag, T1IF, is located in the
                                                            IFS0 register in the interrupt controller.
The TSYNC bit must be asserted to a logic `0'
(Asynchronous mode) for correct operation.                  Enabling an interrupt is accomplished via the
                                                            respective timer interrupt enable bit, T1IE. The timer
Enabling LPOSCEN (OSCCON<1>) disables the                   interrupt enable bit is located in the IEC0 Control
normal Timer and Counter modes and enables a timer          register in the interrupt controller.
carry-out wake-up event.

When the CPU enters Sleep mode, the RTC continues
to operate, provided the 32 kHz external crystal
oscillator is active and the control bits have not been
changed. The TSIDL bit should be cleared to `0' in
order for RTC to continue operation in Idle mode.

2008 Microchip Technology Inc.                            DS70139F-page 75
DS70139F-page 76                  TABLE 9-1: TIMER1 REGISTER MAP                                                                                                                                                    dsPIC30F2011/2012/3012/3013

                                  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
                                                                                                                                                                  --    TSYNC   TCS     --
                                  TMR1     0100                                   Timer1 Register                                                                                             uuuu uuuu uuuu uuuu
                                  PR1                                                                                                                                                         1111 1111 1111 1111
                                  T1CON    0102                                   Period Register 1                                                                                           0000 0000 0000 0000
                                  Legend:
                                  Note:    0104 TON  -- TSIDL --  --  --  --  --  --                                                       TGATE  TCKPS1 TCKPS0

                                           u = uninitialized bit; -- = unimplemented bit, read as `0'
                                           Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

10.0 TIMER2/3 MODULE                                    For 32-bit timer/counter operation, Timer2 is the ls word
                                                        and Timer3 is the ms word of the 32-bit timer.

Note:  This data sheet summarizes features of           Note:  For 32-bit timer operation, T3CON control
       this group of dsPIC30F devices and is not               bits are ignored. Only T2CON control bits
       intended to be a complete reference                     are used for setup and control. Timer2
       source. For more information on the CPU,                clock and gate inputs are utilized for the
       peripherals, register descriptions and                  32-bit timer module, but an interrupt is
       general device functionality, refer to the              generated with the Timer3 interrupt flag
       "dsPIC30F Family Reference Manual                       (T3IF) and the interrupt is enabled with the
       "(DS70046).                                             Timer3 interrupt enable bit (T3IE).

This section describes the 32-bit general purpose       16-bit Timer Mode: In the 16-bit mode, Timer2 and
Timer module (Timer2/3) and associated Operational      Timer3 can be configured as two independent 16-bit
modes. Figure 10-1 depicts the simplified block         timers. Each timer can be set up in either 16-bit Timer
diagram of the 32-bit Timer2/3 module. Figure 10-2      mode or 16-bit Synchronous Counter mode. See
and Figure 10-3 show Timer2/3 configured as two         Section 9.0 "Timer1 Module" for details on these two
independent 16-bit timers, Timer2 and Timer3,           operating modes.
respectively.
                                                        The only functional difference between Timer2 and
The Timer2/3 module is a 32-bit timer (which can be     Timer3 is that Timer2 provides synchronization of the
configured as two 16-bit timers) with selectable        clock prescaler output. This is useful for high frequency
operating modes. These timers are utilized by other     external clock inputs.
peripheral modules, such as:
                                                        32-bit Timer Mode: In the 32-bit Timer mode, the timer
Input Capture                                         increments on every instruction cycle, up to a match
Output Compare/Simple PWM                             value preloaded into the combined 32-bit Period
                                                        register PR3/PR2, then resets to `0' and continues to
The following sections provide a detailed description,  count.
including setup and Control registers, along with
associated block diagrams for the operational modes of  For synchronous 32-bit reads of the Timer2/Timer3
the timers.                                             pair, reading the ls word (TMR2 register) causes the ms
                                                        word to be read and latched into a 16-bit holding
The 32-bit timer has the following modes:               register, termed TMR3HLD.

Two independent 16-bit timers (Timer2 and             For synchronous 32-bit writes, the holding register
   Timer3) with all 16-bit operating modes (except      (TMR3HLD) must first be written to. When followed by
   Asynchronous Counter mode)                           a write to the TMR2 register, the contents of TMR3HLD
                                                        is transferred and latched into the MSB of the 32-bit
Single 32-bit timer operation                         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
                                                        which is synchronized with the internal phase clocks.
ADC event trigger                                     The timer counts up to a match value preloaded in the
Timer gate operation                                  combined 32-bit period register, PR3/PR2, then resets
Selectable prescaler settings                         to `0' and continues.
Timer operation during Idle and Sleep modes
Interrupt on a 32-bit period register match           When the timer is configured for the Synchronous
                                                        Counter mode of operation and the CPU goes into the
These operating modes are determined by setting the     Idle mode, the timer stops 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 resumes the incrementing sequence
                                                        upon termination of the CPU Idle mode.

2008 Microchip Technology Inc.                               DS70139F-page 77
dsPIC30F2011/2012/3012/3013

FIGURE 10-1:      32-BIT TIMER2/3 BLOCK DIAGRAM

                  Data Bus<15:0>

                  Write TMR2          TMR3HLD
                                                         16

                                           16

                  Read TMR2

                                  16

                     Reset            TMR3  TMR2                               Sync

                                      MSB   LSB

ADC Event Trigger

                     Equal            Comparator x 32

                                      PR3   PR2

T3IF              0

Event Flag        1                         QD               TGATE (T2CON<6>)
                                            Q CK

                     TGATE
                  (T2CON<6>)

                                                                   TCS               TCKPS<1:0>
                                                                       TGATE               2

T2CK                                                                      TON          Prescaler
                                                                   1x                1, 8, 64, 256
                                                             Gate
                                                             Sync  01

                                                              TCY  00

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.

DS70139F-page 78                                                                      2008 Microchip Technology Inc.
                                         dsPIC30F2011/2012/3012/3013

FIGURE 10-2:  16-BIT TIMER2 BLOCK DIAGRAM

                                         PR2

                     Equal               Comparator x 16

                       Reset             TMR2                                           Sync

T2IF          0                                QD               TGATE              TCKPS<1:0>
Event Flag    1                                Q CK                                      2

              TGATE                                                    TCS           Prescaler
                                                                          TGATE    1, 8, 64, 256

T2CK                                                                          TON
                                                                       1x
                                               Gate
                                               Sync                    01

                                                TCY                    00

FIGURE 10-3:  16-BIT TIMER3 BLOCK DIAGRAM

ADC Event Trigger                 Equal          PR3
                                         Comparator x 16

                                         TMR3

                                  Reset

T3IF          0

Event Flag    1                                QD               TGATE
                                               Q CK

              TGATE                                                    TCS
                                                                           TGATE
                                                                                   TCKPS<1:0>
T3CK                                                      Sync                TON       2
                                                          TCY          1x
                                                                                     Prescaler
                                                                       01          1, 8, 64, 256

                                                                       00

2008 Microchip Technology Inc.                                                   DS70139F-page 79
dsPIC30F2011/2012/3012/3013

10.1 Timer Gate Operation                                   10.4 Timer Operation During Sleep
                                                                     Mode
The 32-bit timer can be placed in the Gated Time
Accumulation mode. This mode allows the internal TCY        The timer does not operate during CPU Sleep mode
to increment the respective timer when the gate input       because the internal clocks are disabled.
signal (T2CK pin) is asserted high. Control bit, TGATE
(T2CON<6>), must be set to enable this mode. When           10.5 Timer Interrupt
in this mode, Timer2 is the originating clock source.
The TGATE setting is ignored for Timer3. The timer          The 32-bit timer module can generate an
must be enabled (TON = 1) and the timer clock source        interrupt-on-period match or on the falling edge of the
set to internal (TCS = 0).                                  external gate signal. When the 32-bit timer count
                                                            matches the respective 32-bit period register, or the
The falling edge of the external signal terminates the      falling edge of the external "gate" signal is detected, the
count operation but does not reset the timer. The user      T3IF bit (IFS0<7>) is asserted and an interrupt is
must reset the timer in order to start counting from zero.  generated if enabled. In this mode, the T3IF interrupt
                                                            flag is used as the source of the interrupt. The T3IF bit
10.2 ADC Event Trigger                                      must be cleared in software.

When a match occurs between the 32-bit timer                Enabling an interrupt is accomplished via the
(TMR3/TMR2) and the 32-bit combined period register         respective timer interrupt enable bit, T3IE (IEC0<7>).
(PR3/PR2), or between the 16-bit timer TMR3 and the
16-bit period register PR3, a special ADC trigger event
signal is generated by Timer3.

10.3 Timer Prescaler

The input clock (FOSC/4 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
operation 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
a write to the T2CON/T3CON register
device Reset, such as POR and BOR

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.

DS70139F-page 80                                             2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 10-1: TIMER2/3 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

                                  TMR2   0106                                                                     Timer2 Register                                        T32                  --    uuuu uuuu uuuu uuuu
                                                                                                                                                                          --                  --    uuuu uuuu uuuu uuuu
                                  TMR3HLD 0108                                                        Timer3 Holding Register (for 32-bit timer operations only)                                    uuuu uuuu uuuu uuuu
                                                                                                                                                                                                    1111 1111 1111 1111
                                  TMR3   010A                                                                     Timer3 Register                                                                   1111 1111 1111 1111
                                                                                                                                                                                                    0000 0000 0000 0000
                                  PR2    010C                                                                 Period Register 2                                                                     0000 0000 0000 0000

                                  PR3    010E                                                                 Period Register 3

                                  T2CON  0110 TON  -- TSIDL --       --                               --  --  --  --                     TGATE TCKPS1 TCKPS0                    --  TCS

                                  T3CON  0112 TON  -- TSIDL --       --                               --  --  --  --                     TGATE TCKPS1 TCKPS0                    --  TCS

                                  Legend: u = uninitialized bit; -- = unimplemented bit, read as `0'

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

DS70139F-page 81                                                                                                                                                                                                          dsPIC30F2011/2012/3012/3013
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 82             2008 Microchip Technology Inc.
                                   dsPIC30F2011/2012/3012/3013

11.0 INPUT CAPTURE MODULE                                  Interrupt on input capture event

Note:    This data sheet summarizes features of           These operating modes are determined by setting the
         this group of dsPIC30F devices and is not        appropriate bits in the IC1CON and IC2CON registers.
         intended to be a complete reference              The dsPIC30F2011/2012/3012/3013 devices have two
         source. For more information on the CPU,         capture channels.
         peripherals, register descriptions and
         general device functionality, refer to the       11.1 Simple Capture Event Mode
         "dsPIC30F Family Reference Manual"
         (DS70046).                                       The simple capture events in the dsPIC30F product
                                                          family are:
This section describes the input capture module and
associated operational modes. The features provided       Capture every falling edge
by this module are useful in applications requiring       Capture every rising edge
frequency (period) and pulse measurement.                  Capture every 4th rising edge
                                                          Capture every 16th rising edge
Figure 11-1 depicts a block diagram of the input          Capture every rising and falling edge
capture module. Input capture is useful for such modes
as:                                                       These simple Input Capture modes are configured by
                                                          setting the appropriate bits, ICM<2:0> (ICxCON<2:0>).
Frequency/Period/Pulse Measurements
Additional Sources of External Interrupts               11.1.1 CAPTURE PRESCALER

Important operational features of the input capture       There are four input capture prescaler settings
module are:                                               specified by bits ICM<2:0> (ICxCON<2:0>). Whenever
                                                          the capture channel is turned off, the prescaler counter
Simple Capture Event mode                               is cleared. In addition, any Reset clears the prescaler
Timer2 and Timer3 mode selection                        counter.

FIGURE 11-1:  INPUT CAPTURE MODE BLOCK DIAGRAM

                                                          From GP Timer Module       T2_CNT T3_CNT

ICx pin                                                   Edge                         16 16
                                                        Detection                                  ICTMR
              Prescaler               Clock                                   FIFO
               1, 4, 16           Synchronizer            Logic               R/W    10
                                                                              Logic
                                                                                     ICxBUF
              3          ICM<2:0>

                         Mode Select

                                  ICBNE, ICOV

                                                ICI<1:0>

                         ICxCON                                    Interrupt
                                                                     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
         channel (1 or 2).

2008 Microchip Technology Inc.                                                     DS70139F-page 83
dsPIC30F2011/2012/3012/3013

11.1.2 CAPTURE BUFFER OPERATION                                 11.2 Input Capture Operation During
                                                                         Sleep and Idle Modes
Each capture channel has an associated FIFO buffer
which is four 16-bit words deep. There are two status           An input capture event generates a device wake-up or
flags which provide status on the FIFO buffer:                  interrupt, if enabled, if the device is in CPU Idle or Sleep
                                                                mode.
ICBNE -- Input Capture Buffer Not Empty
                                                                Independent of the timer being enabled, the input
ICOV -- Input Capture Overflow                                capture module wakes up from the CPU Sleep or Idle
                                                                mode when a capture event occurs if ICM<2:0> = 111
The ICBNE is set on the first input capture event and           and the interrupt enable bit is asserted. The same
remains set until all capture events have been read             wake-up can generate an interrupt if the conditions for
from the FIFO. As each word is read from the FIFO, the          processing the interrupt have been satisfied.
remaining words are advanced by one position within             The wake-up feature is useful as a method of adding
the buffer.                                                     extra external pin interrupts.

In the event that the FIFO is full with four capture            11.2.1  INPUT CAPTURE IN CPU SLEEP
events, and a fifth capture event occurs prior to a read                MODE
of the FIFO, an overflow condition occurs and the ICOV
bit is set to a logic `1'. The fifth capture event is lost and  CPU Sleep mode allows input capture module
is not stored in the FIFO. No additional events are             operation with reduced functionality. In the CPU Sleep
captured until all four events have been read from the          mode, the ICI<1:0> bits are not applicable and the input
buffer.                                                         capture module can only function as an external
                                                                interrupt source.
If a FIFO read is performed after the last read and no
new capture event has been received, the read will
yield indeterminate results.

11.1.3  TIMER2 AND TIMER3 SELECTION                             The capture module must be configured for interrupt
        MODE                                                    only on rising edge (ICM<2:0> = 111) in order for the
                                                                input capture module to be used while the device is in
The input capture module consists of up to 8 input              Sleep mode. The prescale settings of 4:1 or 16:1 are
capture channels. Each channel can select between               not applicable in this mode.
one of two timers for the time base, Timer2 or Timer3.
                                                                11.2.2  INPUT CAPTURE IN CPU IDLE
                                                                        MODE
Selection of the timer resource is accomplished
through SFR bit, ICTMR (ICxCON<7>). Timer3 is the               CPU Idle mode allows input capture module operation
default timer resource available for the input capture          with full functionality. In the CPU Idle mode, the Interrupt
module.                                                         mode selected by the ICI<1:0> bits is applicable, as well
                                                                as the 4:1 and 16:1 capture prescale settings which are
11.1.4 HALL SENSOR MODE                                         defined by control bits ICM<2:0>. This mode requires
                                                                the selected timer to be enabled. Moreover, the ICSIDL
When the input capture module is set for capture on             bit must be asserted to a logic `0'.
every edge, rising and falling, ICM<2:0> = 001, the
following operations are performed by the input capture         If the input capture module is defined as
logic:                                                          ICM<2:0> = 111 in CPU Idle mode, the input capture
                                                                pin serves only as an external interrupt pin.
The input capture interrupt flag is set on every
   edge, rising and falling.                                    11.3 Input Capture Interrupts

The interrupt on Capture mode setting bits,                   The input capture channels have the ability to generate
   ICI<1:0>, is ignored since every capture                     an interrupt based on the selected number of capture
   generates an interrupt.                                      events. The selection number is set by control
                                                                bits, ICI<1:0> (ICxCON<6:5>).
A capture overflow condition is not generated in
   this mode.                                                   Each channel provides an interrupt flag (ICxIF) bit. The
                                                                respective capture channel interrupt flag is located in
                                                                the corresponding IFSx register.

                                                                Enabling an interrupt is accomplished via the
                                                                respective capture channel interrupt enable (ICxIE) bit.
                                                                The capture interrupt enable bit is located in the
                                                                corresponding IEC Control register.

DS70139F-page 84                                                         2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 11-1: INPUT CAPTURE 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
                                                                                                                                                     ICI<1:0>  ICOV   ICBNE           ICM<2:0>
                                  IC1BUF   0140                                   Input 1 Capture Register                                           ICI<1:0>  ICOV   ICBNE           ICM<2:0>   uuuu uuuu uuuu uuuu
                                  IC1CON                                                                                                                                                         0000 0000 0000 0000
                                  IC2BUF   0142  --  -- ICSIDL --  --     --  --                  --                                       ICTMR                                                 uuuu uuuu uuuu uuuu
                                  IC2CON                                                                                                                                                         0000 0000 0000 0000
                                  Legend:  0144                                   Input 2 Capture Register
                                  Note:
                                           0146  --  -- ICSIDL --  --     --  --                  --                                       ICTMR

                                           u = uninitialized bit; -- = unimplemented bit, read as `0'
                                           Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

DS70139F-page 85                                                                                                                                                                                                       dsPIC30F2011/2012/3012/3013
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 86             2008 Microchip Technology Inc.
                                     dsPIC30F2011/2012/3012/3013

12.0 OUTPUT COMPARE MODULE                            Figure 12-1 depicts a block diagram of the output
                                                      compare module.
Note:  This data sheet summarizes features of
       this group of dsPIC30F devices and is not      The key operational features of the output compare
       intended to be a complete reference            module include:
       source. For more information on the CPU,
       peripherals, register descriptions and          Timer2 and Timer3 Selection mode
       general device functionality, refer to the      Simple Output Compare Match mode
       "dsPIC30F Family Reference Manual"             Dual Output Compare Match mode
       (DS70046).                                     Simple PWM mode
                                                       Output Compare During Sleep and Idle modes
This section describes the output compare module and   Interrupt on Output Compare/PWM Event
associated operational modes. The features provided
by this module are useful in applications requiring   These operating modes are determined by setting the
operational modes, such as:                           appropriate bits in the 16-bit OC1CON and OC2CON
                                                      registers. The dsPIC30F2011/2012/3012/3013 devices
Generation of Variable Width Output Pulses          have 2 compare channels.
Power Factor Correction
                                                      OCxRS and OCxR in Figure 12-1 represent the Dual

FIGURE 12-1:  OUTPUT COMPARE MODE BLOCK DIAGRAM

                                                      Set Flag bit
                                                         OCxIF

                 OCxRS

                               OCxR                            Output  SQ
                                                                Logic  R

                                                                3          Output OCx
                                                       OCM<2:0>            Enable
                                                      Mode Select
                 Comparator
                                                             1
              0                      1  OCTSEL  0                                  OCFA
                                                                           (for x = 1, 2, 3 or 4)

       From GP                    TMR3<15:0> T2P2_MATCH T3P3_MATCH
       Timer Module

                    TMR2<15:0

       Note:  Where `x' is shown, reference is made to the registers associated with the respective output compare
              channel (1 or 2).

2008 Microchip Technology Inc.                                           DS70139F-page 87
dsPIC30F2011/2012/3012/3013

12.1 Timer2 and Timer3 Selection Mode                     12.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
                                                          steps are required:
The selection of the timers is controlled by the OCTSEL
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
12.2 Simple Output Compare Match
         Mode                                                value of 0x0000.
                                                          Write pulse width start and stop times into OCxR
When control bits OCM<2:0> (OCxCON<2:0>) = 001,
010 or 011, the selected output compare channel is           and OCxRS (x denotes channel 1, 2, ...,N)
configured for one of three simple Output Compare            Compare registers, respectively.
Match modes:                                              Set Timer Period register to value equal to or
                                                             greater than value in OCxRS Compare register.
Compare forces I/O pin low                               Set OCM<2:0> = 101.
Compare forces I/O pin high                              Enable timer, TON (TxCON<15>) = 1.
Compare toggles I/O pin
                                                          12.4 Simple PWM Mode
The OCxR register is used in these modes. The OCxR
register is loaded with a value and is compared to the    When control bits OCM<2:0> (OCxCON<2:0>) = 110
selected incrementing timer count. When a compare         or 111, the selected output compare channel is
occurs, one of these Compare Match modes occurs. If       configured for the PWM mode of operation. When
the counter resets to zero before reaching the value in   configured for the PWM mode of operation, OCxR is
OCxR, the state of the OCx pin remains unchanged.         the main latch (read-only) and OCxRS is the secondary
                                                          latch. This enables glitchless PWM transitions.
12.3 Dual Output Compare Match Mode
                                                          The user must perform the following steps in order to
When control bits OCM<2:0> (OCxCON<2:0>) = 100            configure the output compare module for PWM
or 101, the selected output compare channel is            operation:
configured for one of two Dual Output Compare modes,
which are:                                                1. Set the PWM period by writing to the appropriate
                                                                period register.
Single Output Pulse mode
Continuous Output Pulse mode                            2. Set the PWM duty cycle by writing to the OCxRS
                                                                register.
12.3.1 SINGLE PULSE MODE
                                                          3. Configure the output compare module for PWM
For the user to configure the module for the generation         operation.
of a single output pulse, the following steps are
required (assuming timer is off):                         4. Set the TMRx prescale value and enable the
                                                                Timer, TON (TxCON<15>) = 1.
Determine instruction cycle time TCY.
Calculate desired pulse width value based on TCY.       12.4.1 INPUT PIN FAULT PROTECTION
Calculate time to start pulse from timer start value                  FOR PWM

   of 0x0000.                                             When control bits OCM<2:0> (OCxCON<2:0>) = 111,
Write pulse width start and stop times into OCxR        the selected output compare channel is again
                                                          configured for the PWM mode of operation with the
   and OCxRS Compare registers (x denotes                 additional feature of input Fault protection. While in this
   channel 1, 2, ...,N).                                  mode, if a logic `0' is detected on the OCFA/B pin, the
Set Timer Period register to value equal to or          respective PWM output pin is placed in the high
   greater than value in OCxRS Compare register.          impedance input state. The OCFLT bit (OCxCON<4>)
Set OCM<2:0> = 100.                                     indicates whether a Fault condition has occurred. This
Enable timer, TON (TxCON<15>) = 1.                      state is maintained until both of the following events
                                                          have occurred:
To initiate another single pulse, issue another write to
set OCM<2:0> = 100.                                        The external Fault condition has been removed.
                                                          The PWM mode has been re-enabled by writing

                                                             to the appropriate control bits.

DS70139F-page 88                                           2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

12.4.2 PWM PERIOD                                        When the selected TMRx is equal to its respective
The PWM period is specified by writing to the PRx        period register, PRx, the following four events occur on
register. The PWM period can be calculated using         the next increment cycle:
Equation 12-1.
                                                          TMRx is cleared.
EQUATION 12-1:                                           The OCx pin is set.
        PWM period = [(PRx) + 1] 4 TOSC
                              (TMRx prescale value)         - Exception 1: If PWM duty cycle is 0x0000,
                                                               the OCx pin remains low.
PWM frequency is defined as 1/[PWM period].
                                                            - Exception 2: If duty cycle is greater than PRx,
                                                               the pin remains high.

                                                          The PWM duty cycle is latched from OCxRS into
                                                            OCxR.

                                                          The corresponding timer interrupt flag is set.

                                                         See Figure 12-2 for key PWM period comparisons.
                                                         Timer3 is referred to in Figure 12-2 for clarity.

FIGURE 12-2:  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      TMR3 = Duty Cycle
                                         (OCxR)                  (OCxR)

12.5 Output Compare Operation During                     12.7 Output Compare Interrupts
         CPU Sleep Mode
                                                         The output compare channels have the ability to
When the CPU enters Sleep mode, all internal clocks      generate an interrupt on a compare match, for
are stopped. Therefore, when the CPU enters the          whichever Match mode has been selected.
Sleep state, the output compare channel drives the pin
to the active state that was observed prior to entering  For all modes except the PWM mode, when a compare
the CPU Sleep state.                                     event occurs, the respective interrupt flag (OCxIF) is
                                                         asserted and an interrupt is generated if enabled. The
For example, if the pin was high when the CPU entered    OCxIF bit is located in the corresponding IFS register
the Sleep state, the pin remains high. Likewise, if the  and must be cleared in software. The interrupt is
pin was low when the CPU entered the Sleep state, the    enabled via the respective compare interrupt enable
pin remains low. In either case, the output compare      (OCxIE) bit located in the corresponding IEC Control
module resumes operation when the device wakes up.       register.

12.6 Output Compare Operation During                     For the PWM mode, when an event occurs, the
         CPU Idle Mode                                   respective timer interrupt flag (T2IF or T3IF) is asserted
                                                         and an interrupt is generated if enabled. The IF bit is
When the CPU enters the Idle mode, the output            located in the IFS0 register and must be cleared in
compare module can operate with full functionality.      software. The interrupt is enabled via the respective
                                                         timer interrupt enable bit (T2IE or T3IE) located in the
The output compare channel operates during the CPU       IEC0 Control register. The output compare interrupt
Idle mode if the OCSIDL bit (OCxCON<13>) is at logic     flag is never set during the PWM mode of operation.
`0' and the selected time base (Timer2 or Timer3) is
enabled and the TSIDL bit of the selected timer is set
to logic `0'.

2008 Microchip Technology Inc.                                            DS70139F-page 89
DS70139F-page 90                  TABLE 12-1: OUTPUT COMPARE REGISTER MAP                                                                                                                                  dsPIC30F2011/2012/3012/3013

                                  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
                                                                                                                                                                           OCM<2:0>
                                  OC1RS     0180                           Output Compare 1 Secondary Register                                                             OCM<2:0>  0000 0000 0000 0000
                                  OC1R                                                                                                                                               0000 0000 0000 0000
                                  OC1CON    0182                               Output Compare 1 Main Register                                                                        0000 0000 0000 0000
                                  OC2RS                                                                                                                                              0000 0000 0000 0000
                                  OC2R      0184 --  -- OCSIDL --  --  --  --  --  --                                                       --  --  OCFLT OCTSEL                     0000 0000 0000 0000
                                  OC2CON                                                                                                            OCFLT OCTSEL                     0000 0000 0000 0000
                                  Legend:   0186                           Output Compare 2 Secondary Register

                                     Note:  0188                               Output Compare 2 Main Register

                                            018A --  -- OCSIDL --  --  --  --  --  --                                                       --  --

                                            -- = unimplemented bit, read as `0'
                                            Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

13.0 SPITM MODULE                                          Transmit writes are also double-buffered. The user
                                                           writes to SPI1BUF. When the master or slave transfer
Note:  This data sheet summarizes features of              is completed, the contents of the shift register
       this group of dsPIC30F devices and is not           (SPI1SR) are moved to the receive buffer. If any
       intended to be a complete reference                 transmit data has been written to the buffer register, the
       source. For more information on the CPU,            contents of the transmit buffer are moved to SPI1SR.
       peripherals, register descriptions and              The received data is thus placed in SPI1BUF and the
       general device functionality, refer to the          transmit data in SPI1SR is ready for the next transfer.
       "dsPIC30F Family Reference Manual"
       (DS70046).                                          Note:  Both the transmit buffer (SPI1TXB) and
                                                                  the receive buffer (SPI1RXB) are mapped
The Serial Peripheral Interface (SPITM) module is a               to the same register address, SPI1BUF.
synchronous serial interface. It is useful for
communicating with other peripheral devices, such as
EEPROMs, shift registers, display drivers and A/D
converters, or other microcontrollers. It is compatible
with Motorola's SPI and SIOP interfaces. The
dsPIC30F2011/2012/3012/3013 devices feature one
SPI module, SPI1.

13.1 Operating Function Description

Figure 13-1 is a simplified block diagram of the SPI
module, which consists of a 16-bit shift register,
SPI1SR, used for shifting data in and out, and a buffer
register, SPI1BUF. Control register SPI1CON (not
shown) configures the module. Additionally, status
register SPI1STAT (not shown) indicates various status
conditions.

Note:  See "dsPIC30F Family Reference
       Manual" (DS70046) for detailed
       information on the control and status
       registers.

Four I/O pins comprise the serial interface:

SDI1 (serial data input)
SDO1 (serial data output)
SCK1 (shift clock input or output)
SS1 (active-low slave select).

In Master mode operation, SCK1 is a clock output. In
Slave mode, it is a clock input.

A series of eight (8) or sixteen (16) clock pulses shift
out bits from the SPI1SR to SDO1 pin and
simultaneously shift in data from SDI1 pin. An interrupt
is generated when the transfer is complete and the
interrupt flag bit (SPI1IF) is set. This interrupt can be
disabled through the interrupt enable bit, SPI1IE.

The receive operation is double-buffered. When a
complete byte is received, it is transferred from SPI1SR
to SPI1BUF.

If the receive buffer is full when new data is being
transferred from SPI1SR to SPI1BUF, the module will
set the SPIROV bit indicating an overflow condition.
The transfer of the data from SPI1SR to SPI1BUF is not
completed and the new data is lost. The module will not
respond to SCL transitions while SPIROV is `1', effec-
tively disabling the module until SPI1BUF is read by
user software.

2008 Microchip Technology Inc.                                  DS70139F-page 91
dsPIC30F2011/2012/3012/3013

FIGURE 13-1:      SPI BLOCK DIAGRAM

                  Read                      Internal
                                           Data Bus

                                     Write

                    SPIxBUF          SPIxBUF
                  Receive             Transmit

SDI1                       SPI1SR
                  bit 0

SDO1              SS & FSYNC         Shift                  Edge
SS1                  Control       Clock                   Select

                                Clock
                               Control

                                                                    Secondary            Primary       FCY
                                                                    Prescaler
                                                                     1:1 1:8           Prescaler
                                                                                         1, 4, 16, 64
SCK1

                                                                    Enable Master Clock

Figure 13-2 depicts the a master/slave connection           13.1.2 SDO1 DISABLE
between two processors. In Master mode, the clock is
generated by prescaling the system clock. Data is           A control bit, DISSDO, is provided to the SPI1CON
transmitted as soon as a value is written to SPI1BUF.       register to allow the SDO1 output to be disabled. This
The interrupt is generated at the middle of the transfer    will allow the SPI module to be connected in an input
of the last bit.                                            only configuration. SDO1 can also be used for general
                                                            purpose I/O.
In Slave mode, data is transmitted and received as
external clock pulses appear on SCK. Again, the             13.2 Framed SPI Support
interrupt is generated when the last bit is latched. If
SS1 control is enabled, then transmission and               The module supports a basic framed SPI protocol in
reception are enabled only when SS1 = low. The SDO1         Master or Slave mode. The control bit, FRMEN,
output will be disabled in SS1 mode with SS1 high.          enables framed SPI support and causes the SS1 pin to
                                                            perform the Frame Synchronization Pulse (FSYNC)
The clock provided to the module is (FOSC/4). This          function. The control bit, SPIFSD, determines whether
clock is then prescaled by the primary (PPRE<1:0>)          the SS1 pin is an input or an output (i.e., whether the
and the secondary (SPRE<2:0>) prescale factors. The         module receives or generates the Frame
CKE bit determines whether transmit occurs on               Synchronization Pulse). The frame pulse is an
transition from active clock state to Idle clock state, or  active-high pulse for a single SPI clock cycle. When
vice versa. The CKP bit selects the Idle state (high or     Frame Synchronization is enabled, the data
low) for the clock.                                         transmission starts only on the subsequent transmit
                                                            edge of the SPI clock.
13.1.1 WORD AND BYTE
              COMMUNICATION

A control bit, MODE16 (SPI1CON<10>), allows the
module to communicate in either 16-bit or 8-bit mode.
16-bit operation is identical to 8-bit operation except
that the number of bits transmitted is 16 instead of 8.

The user software must disable the module prior to
changing the MODE16 bit. The SPI module is reset
when the MODE16 bit is changed by the user.

A basic difference between 8-bit and 16-bit operation is
that the data is transmitted out of bit 7 of the SPI1SR
for 8-bit operation, and data is transmitted out of bit 15
of the SPI1SR for 16-bit operation. In both modes, data
is shifted into bit 0 of the SPI1SR.

DS70139F-page 92                                                                2008 Microchip Technology Inc.
                                   dsPIC30F2011/2012/3012/3013

FIGURE 13-2:  SPI MASTER/SLAVE CONNECTION

               SPI Master               SDO1                     SDI1          SPI Slave

              Serial Input Buffer                                      Serial Input Buffer
                  (SPI1BUF)                                                (SPI1BUF)

                   Shift Register       SDI1                     SDO1       Shift Register
                     (SPI1SR)                      Serial Clock               (SPI1SR)

              MSb                  LSb  SCK1                           MSb                  LSb

                                                                 SCK1

              PROCESSOR 1                                                   PROCESSOR 2

13.3 Slave Select Synchronization                                13.5 SPI Operation During CPU Idle
                                                                          Mode
The SS1 pin allows a Synchronous Slave mode. The
SPI must be configured in SPI Slave mode with SS1                When the device enters Idle mode, all clock sources
pin control enabled (SSEN = 1). When the SS1 pin is              remain functional. The SPISIDL bit (SPI1STAT<13>)
low, transmission and reception are enabled and the              selects if the SPI module will stop or continue on idle. If
SDOx pin is driven. When SS1 pin goes high, the                  SPISIDL = 0, the module will continue to operate when
SDOx pin is no longer driven. Also, the SPI module is            the CPU enters Idle mode. If SPISIDL = 1, the module
resynchronized, and all counters/control circuitry are           will stop when the CPU enters Idle mode.
reset. Therefore, when the SS1 pin is asserted low
again, transmission/reception will begin at the MSb
even if SS1 had been de-asserted in the middle of a
transmit/receive.

13.4 SPI Operation During CPU Sleep
         Mode

During Sleep mode, the SPI module is shut down. If the
CPU enters Sleep mode while an SPI transaction is in
progress, then the transmission and reception is
aborted.

The transmitter and receiver will stop in Sleep mode.
However, register contents are not affected by entering
or exiting Sleep mode.

2008 Microchip Technology Inc.                                                                 DS70139F-page 93
DS70139F-page 94                  TABLE 13-1: SPI1 REGISTER MAP                                                                                                                                                                dsPIC30F2011/2012/3012/3013

                                   SFR      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
                                  Name

                                  SPI1STAT  0220 SPIEN -- SPISIDL --  --               --      --  --       --                              SPIROV     --     --  --  --       SPITBF SPIRBF 0000 0000 0000 0000
                                  SPI1CON                                                                                                           MSTEN  SPRE2               PPRE1 PPRE0 0000 0000 0000 0000
                                  SPI1BUF   0222 -- FRMEN SPIFSD -- DISSDO MODE16 SMP CKE SSEN                                              CKP                   SPRE1 SPRE0
                                  Legend:                                                                                                                                                                 0000 0000 0000 0000
                                            0224                                                   Transmit and Receive Buffer
                                     Note:
                                            -- = unimplemented bit, read as `0'
                                            Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

14.0 I2CTM MODULE                                       14.1.1 VARIOUS I2C MODES

Note:  This data sheet summarizes features of           The following types of I2C operation are supported:
       this group of dsPIC30F devices and is not
       intended to be a complete reference               I2C slave operation with 7-bit address
       source. For more information on the CPU,          I2C slave operation with 10-bit address
       peripherals, register descriptions and            I2C master operation with 7 or 10-bit address
       general device functionality, refer to the
       "dsPIC30F Family Reference Manual"               See the I2C programmer's model (Figure 14-1).
       (DS70046).
                                                        14.1.2 PIN CONFIGURATION IN I2C MODE
The Inter-Integrated Circuit (I2CTM) module provides    I2C has a 2-pin interface: the SCL pin is clock and the
                                                        SDA pin is data.
complete hardware support for both Slave and
Multi-Master modes of the I2C serial communication      14.1.3 I2C REGISTERS

standard, with a 16-bit interface.                      I2CCON and I2CSTAT are control and status registers,
                                                        respectively. The I2CCON register is readable and
This module offers the following key features:          writable. The lower 6 bits of I2CSTAT are read-only.
                                                        The remaining bits of the I2CSTAT are read/write.
I2C interface supporting both master and slave
   operation.                                           I2CRSR is the shift register used for shifting data,
                                                        whereas I2CRCV is the buffer register to which data
I2C Slave mode supports 7 and 10-bit address.         bytes are written, or from which data bytes are read.
I2C Master mode supports 7 and 10-bit address.        I2CRCV is the receive buffer as shown in Figure 14-1.
I2C port allows bidirectional transfers between       I2CTRN is the transmit register to which bytes are
                                                        written during a transmit operation, as shown in
   master and slaves.                                   Figure 14-2.
Serial clock synchronization for I2C port can be
                                                        The I2CADD register holds the slave address. A Status
   used as a handshake mechanism to suspend and         bit, ADD10, indicates 10-bit Address mode. The
   resume serial transfer (SCLREL control).             I2CBRG acts as the Baud Rate Generator reload
I2C supports multi-master operation; detects bus      value.
   collision and will arbitrate accordingly.
                                                        In receive operations, I2CRSR and I2CRCV together
14.1 Operating Function Description                     form a double-buffered receiver. When I2CRSR
                                                        receives a complete byte, it is transferred to I2CRCV
The hardware fully implements all the master and slave  and an interrupt pulse is generated. During
functions of the I2C Standard and Fast mode             transmission, the I2CTRN is not double-buffered.
specifications, as well as 7 and 10-bit addressing.
                                                        Note:  Following a Restart condition in 10-bit
Thus, the I2C module can operate either as a slave or          mode, the user only needs to match the
a master on an I2C bus.                                        first 7-bit address.

FIGURE 14-1:  PROGRAMMER'S MODEL

              Bit 15                          Bit 7                     I2CRCV (8 bits)
              Bit 15                         Bit 7             Bit 0
                                        Bit 8
                                                                        I2CTRN (8 bits)
                                  Bit 9                        Bit 0

                                                                        I2CBRG (9 bits)
                                                               Bit 0

                                                                        I2CCON (16 bits)
                                                               Bit 0

                                                                        I2CSTAT (16 bits)
                                                               Bit 0

                                                                        I2CADD (10 bits)
                                                               Bit 0

2008 Microchip Technology Inc.                                                           DS70139F-page 95
dsPIC30F2011/2012/3012/3013

FIGURE 14-2:      I2CTM BLOCK DIAGRAM

SCL               Shift  I2CRCV                                                     Internal
SDA               Clock                                                            Data Bus
                         I2CRSR                                                  Read
                                        LSB
                                                                                 Write
                         Match Detect        Addr_Match                          Read
                                                                                 Write
                         I2CADD                                                  Read
                                                                                 Write
                              Start and                                 I2CSTAT  Read
                          Stop bit Detect                                        Write
                                                                                 Read
                           Start, Restart,                                       Write
                         Stop bit Generate                                       Read

                         Collision                       Control Logic
                          Detect

                         Acknowledge                                    I2CCON
                          Generation

                           Clock
                         Stretching

                  Shift  I2CTRN
                  Clock                 LSB

                         Reload
                         Control

                         BRG Down                        I2CBRG
                           Counter           FCY

DS70139F-page 96                                                                  2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

14.2 I2C Module Addresses                                    14.3.2 SLAVE RECEPTION

The I2CADD register contains the Slave mode                  If the R_W bit received is a `0' during an address
addresses. The register is a 10-bit register.                match, then Receive mode is initiated. Incoming bits
                                                             are sampled on the rising edge of SCL. After 8 bits are
If the A10M bit (I2CCON<10>) is `0', the address is          received, if I2CRCV is not full or I2COV is not set,
interpreted by the module as a 7-bit address. When an        I2CRSR is transferred to I2CRCV. ACK is sent on the
address is received, it is compared to the 7 LSb of the      ninth clock.
I2CADD register.
                                                             If the RBF flag is set, indicating that I2CRCV is still
If the A10M bit is `1', the address is assumed to be a       holding data from a previous operation (RBF = 1), then
10-bit address. When an address is received, it will be      ACK is not sent; however, the interrupt pulse is
compared with the binary value `11110 A9 A8' (where          generated. In the case of an overflow, the contents of
A9 and A8 are two Most Significant bits of I2CADD). If       the I2CRSR are not loaded into the I2CRCV.
that value matches, the next address will be compared
with the Least Significant 8 bits of I2CADD, as specified    Note:  The I2CRCV will be loaded if the I2COV
in the 10-bit addressing protocol.                                  bit = 1 and the RBF flag = 0. In this case,
The 7-bit I2C Slave Addresses supported by the                      a read of the I2CRCV was performed but
dsPIC30F are shown in Table 14-1.                                   the user did not clear the state of the
                                                                    I2COV bit before the next receive
TABLE 14-1:  7-BIT I2CTM SLAVE                                      occurred. The acknowledgement is not
             ADDRESSES                                              sent (ACK = 1) and the I2CRCV is
0x00         General call address or start byte                    updated.
0x01-0x03    Reserved
0x04-0x07    Hs-mode Master codes                           14.4 I2C 10-bit Slave Mode Operation
0x04-0x77    Valid 7-bit addresses
0x78-0x7b    Valid 10-bit addresses (lower 7                In 10-bit mode, the basic receive and transmit
              bits)                                          operations are the same as in the 7-bit mode. However,
0x7c-0x7f    Reserved                                       the criteria for address match is more complex.

14.3 I2C 7-bit Slave Mode Operation                          The I2C specification dictates that a slave must be
                                                             addressed for a write operation with two address bytes
Once enabled (I2CEN = 1), the slave module will wait         following a Start bit.
for a Start bit to occur (i.e., the I2C module is `Idle').
Following the detection of a Start bit, 8 bits are shifted   The A10M bit is a control bit that signifies that the
into I2CRSR and the address is compared against              address in I2CADD is a 10-bit address rather than a 7-bit
I2CADD. In 7-bit mode (A10M = 0), bits I2CADD<6:0>           address. The address detection protocol for the first byte
are compared against I2CRSR<7:1> and I2CRSR<0>               of a message address is identical for 7-bit and 10-bit
is the R_W bit. All incoming bits are sampled on the ris-    messages, but the bits being compared are different.
ing edge of SCL.
                                                             I2CADD holds the entire 10-bit address. Upon
If an address match occurs, an acknowledgement will          receiving an address following a Start bit, I2CRSR
be sent, and the slave event interrupt flag (SI2CIF) is      <7:3> is compared against a literal `11110' (the default
set on the falling edge of the ninth (ACK) bit. The          10-bit address) and I2CRSR<2:1> are compared
address match does not affect the contents of the            against I2CADD<9:8>. If a match occurs and if
I2CRCV buffer or the RBF bit.                                R_W = 0, the interrupt pulse is sent. The ADD10 bit will
                                                             be cleared to indicate a partial address match. If a
14.3.1 SLAVE TRANSMISSION                                    match fails or R_W = 1, the ADD10 bit is cleared and
                                                             the module returns to the Idle state.
If the R_W bit received is a `1', then the serial port will
go into Transmit mode. It will send ACK on the ninth bit     The low byte of the address is then received and
and then hold SCL to `0' until the CPU responds by           compared with I2CADD<7:0>. If an address match
writing to I2CTRN. SCL is released by setting the            occurs, the interrupt pulse is generated and the ADD10
SCLREL bit, and 8 bits of data are shifted out. Data bits    bit is set, indicating a complete 10-bit address match. If
are shifted out on the falling edge of SCL, such that        an address match did not occur, the ADD10 bit is
SDA is valid during SCL high. The interrupt pulse is         cleared and the module returns to the Idle state.
sent on the falling edge of the ninth clock pulse,
regardless of the status of the ACK received from the
master.

2008 Microchip Technology Inc.                                    DS70139F-page 97
dsPIC30F2011/2012/3012/3013

14.4.1 10-BIT MODE SLAVE                                     Clock stretching takes place following the ninth clock of
              TRANSMISSION                                   the receive sequence. On the falling edge of the ninth
                                                             clock at the end of the ACK sequence, if the RBF bit is
Once a slave is addressed in this fashion with the full      set, the SCLREL bit is automatically cleared, forcing
10-bit address (we will refer to this state as               the SCL output to be held low. The user's ISR must set
"PRIOR_ADDR_MATCH"), the master can begin                    the SCLREL bit before reception is allowed to continue.
sending data bytes for a slave reception operation.          By holding the SCL line low, the user has time to
                                                             service the ISR and read the contents of the I2CRCV
14.4.2 10-BIT MODE SLAVE RECEPTION                           before the master device can initiate another receive
                                                             sequence. This will prevent buffer overruns from
Once addressed, the master can generate a Repeated           occurring.
Start, reset the high byte of the address and set the
R_W bit without generating a Stop bit, thus initiating a         Note 1: If the user reads the contents of the
slave transmit operation.                                                    I2CRCV, clearing the RBF bit before the
                                                                             falling edge of the ninth clock, the
14.5 Automatic Clock Stretch                                                 SCLREL bit will not be cleared and clock
                                                                             stretching will not occur.
In the Slave modes, the module can synchronize buffer
reads and write to the master device by clock stretching.               2: The SCLREL bit can be set in software
                                                                             regardless of the state of the RBF bit. The
14.5.1 TRANSMIT CLOCK STRETCHING                                             user should be careful to clear the RBF bit
                                                                             in the ISR before the next receive
Both 10-bit and 7-bit Transmit modes implement clock                         sequence in order to prevent an overflow
stretching by asserting the SCLREL bit after the falling                     condition.
edge of the ninth clock, if the TBF bit is cleared,
indicating the buffer is empty.                              14.5.4 CLOCK STRETCHING DURING
                                                                           10-BIT ADDRESSING (STREN = 1)
In Slave Transmit modes, clock stretching is always
performed irrespective of the STREN bit.                     Clock stretching takes place automatically during the
                                                             addressing sequence. Because this module has a
Clock synchronization takes place following the ninth        register for the entire address, it is not necessary for
clock of the transmit sequence. If the device samples        the protocol to wait for the address to be updated.
an ACK on the falling edge of the ninth clock and if the
TBF bit is still clear, then the SCLREL bit is               After the address phase is complete, clock stretching
automatically cleared. The SCLREL being cleared to           will occur on each data receive or transmit sequence as
`0' will assert the SCL line low. The user's ISR must set    was described earlier.
the SCLREL bit before transmission is allowed to
continue. By holding the SCL line low, the user has time     14.6 Software Controlled Clock
to service the ISR and load the contents of the I2CTRN                Stretching (STREN = 1)
before the master device can initiate another transmit
sequence.                                                    When the STREN bit is `1', the SCLREL bit may be
                                                             cleared by software to allow software to control the
    Note 1: If the user loads the contents of I2CTRN,        clock stretching. The logic will synchronize writes to the
                setting the TBF bit before the falling edge  SCLREL bit with the SCL clock. Clearing the SCLREL
                of the ninth clock, the SCLREL bit will not  bit will not assert the SCL output until the module
                be cleared and clock stretching will not     detects a falling edge on the SCL output and SCL is
                occur.                                       sampled low. If the SCLREL bit is cleared by the user
                                                             while the SCL line has been sampled low, the SCL
           2: The SCLREL bit can be set in software,         output will be asserted (held low). The SCL output will
                regardless of the state of the TBF bit.      remain low until the SCLREL bit is set, and all other
                                                             devices on the I2C bus have de-asserted SCL. This
14.5.2 RECEIVE CLOCK STRETCHING                              ensures that a write to the SCLREL bit will not violate
                                                             the minimum high time requirement for SCL.
The STREN bit in the I2CCON register can be used to
enable clock stretching in Slave Receive mode. When          If the STREN bit is `0', a software write to the SCLREL
the STREN bit is set, the SCL pin will be held low at the    bit will be disregarded and have no effect on the
end of each data receive sequence.                           SCLREL bit.

14.5.3 CLOCK STRETCHING DURING
              7-BIT ADDRESSING (STREN = 1)

When the STREN bit is set in Slave Receive mode, the
SCL line is held low when the buffer register is full. The
method for stretching the SCL output is the same for
both 7 and 10-bit addressing modes.

DS70139F-page 98                                              2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

14.7 Interrupts                                            14.11 I2C Master Support

The I2C module generates two interrupt flags, MI2CIF       As a master device, six operations are supported:
(I2C Master Interrupt Flag) and SI2CIF (I2C Slave
Interrupt Flag). The MI2CIF interrupt flag is activated    Assert a Start condition on SDA and SCL.
on completion of a master message event. The SI2CIF
interrupt flag is activated on detection of a message       Assert a Restart condition on SDA and SCL.
directed to the slave.
                                                            Write to the I2CTRN register initiating
14.8 Slope Control                                            transmission of data/address.

The I2C standard requires slope control on the SDA          Generate a Stop condition on SDA and SCL.
and SCL signals for Fast mode (400 kHz). The control       Configure the I2C port to receive data.
bit, DISSLW, enables the user to disable slew rate
control if desired. It is necessary to disable the slew    Generate an ACK condition at the end of a
rate control for 1 MHz mode.                                  received byte of data.

14.9 IPMI Support                                          14.12 I2C Master Operation

The control bit, IPMIEN, enables the module to support     The master device generates all of the serial clock
Intelligent Peripheral Management Interface (IPMI).        pulses and the Start and Stop conditions. A transfer is
When this bit is set, the module accepts and acts upon     ended with a Stop condition or with a Repeated Start
all addresses.                                             condition. Since the Repeated Start condition is also
                                                           the beginning of the next serial transfer, the I2C bus will
14.10 General Call Address Support                         not be released.

The general call address can address all devices.          In Master Transmitter mode, serial data is output
When this address is used, all devices should, in          through SDA, while SCL outputs the serial clock. The
theory, respond with an acknowledgement.                   first byte transmitted contains the slave address of the
                                                           receiving device (7 bits) and the data direction bit. In
The general call address is one of eight addresses         this case, the data direction bit (R_W) is logic `0'. Serial
reserved for specific purposes by the I2C protocol. It     data is transmitted 8 bits at a time. After each byte is
consists of all `0's with R_W = 0.                         transmitted, an ACK bit is received. Start and Stop
                                                           conditions are output to indicate the beginning and the
The general call address is recognized when the            end of a serial transfer.
General Call Enable (GCEN) bit is set
(I2CCON<7> = 1). Following a Start bit detection, 8 bits   In Master Receive mode, the first byte transmitted
are shifted into I2CRSR and the address is compared        contains the slave address of the transmitting device
with I2CADD, and is also compared with the general         (7 bits) and the data direction bit. In this case, the data
call address which is fixed in hardware.                   direction bit (R_W) is logic `1'. Thus, the first byte
                                                           transmitted is a 7-bit slave address, followed by a `1' to
If a general call address match occurs, the I2CRSR is      indicate receive bit. Serial data is received via SDA
transferred to the I2CRCV after the eighth clock, the RBF  while SCL outputs the serial clock. Serial data is
flag is set and on the falling edge of the ninth bit (ACK  received 8 bits at a time. After each byte is received, an
bit), the master event interrupt flag (MI2CIF) is set.     ACK bit is transmitted. Start and Stop conditions
                                                           indicate the beginning and end of transmission.
When the interrupt is serviced, the source for the
interrupt can be checked by reading the contents of the    14.12.1 I2C MASTER TRANSMISSION
I2CRCV to determine if the address was device
specific or a general call address.                        Transmission of a data byte, a 7-bit address, or the sec-
                                                           ond half of a 10-bit address, is accomplished by simply
                                                           writing a value to I2CTRN register. The user should
                                                           only write to I2CTRN when the module is in a WAIT
                                                           state. This action will set the Buffer Full Flag (TBF) and
                                                           allow the Baud Rate Generator to begin counting and
                                                           start the next transmission. Each bit of address/data
                                                           will be shifted out onto the SDA pin after the falling
                                                           edge of SCL is asserted. The Transmit Status Flag,
                                                           TRSTAT (I2CSTAT<14>), indicates that a master
                                                           transmit is in progress.

2008 Microchip Technology Inc.                           DS70139F-page 99
dsPIC30F2011/2012/3012/3013

14.12.2 I2C MASTER RECEPTION                              If a transmit was in progress when the bus collision
                                                          occurred, the transmission is halted, the TBF flag is
Master mode reception is enabled by programming the       cleared, the SDA and SCL lines are de-asserted and a
Receive Enable bit, RCEN (I2CCON<3>). The I2C             value can now be written to I2CTRN. When the user
module must be Idle before the RCEN bit is set,           services the I2C master event Interrupt Service
otherwise the RCEN bit will be disregarded. The Baud      Routine, if the I2C bus is free (i.e., the P bit is set), the
Rate Generator begins counting and on each rollover,      user can resume communication by asserting a Start
the state of the SCL pin ACK and data are shifted into    condition.
the I2CRSR on the rising edge of each clock.
                                                          If a Start, Restart, Stop or Acknowledge condition was
14.12.3 BAUD RATE GENERATOR                               in progress when the bus collision occurred, the
In I2C Master mode, the reload value for the BRG is       condition is aborted, the SDA and SCL lines are
located in the I2CBRG register. When the BRG is           de-asserted, and the respective control bits in the
loaded with this value, the BRG counts down to `0' and    I2CCON register are cleared to `0'. When the user
stops until another reload has taken place. If clock      services the bus collision Interrupt Service Routine,
arbitration is taking place, for instance, the BRG is     and if the I2C bus is free, the user can resume
reloaded when the SCL pin is sampled high.                communication by asserting a Start condition.
As per the I2C standard, FSCK may be 100 kHz or
400 kHz. However, the user can specify any baud rate      The master will continue to monitor the SDA and SCL
up to 1 MHz. I2CBRG values of `0' or `1' are illegal.     pins, and if a Stop condition occurs, the MI2CIF bit will
                                                          be set.
EQUATION 14-1: SERIAL CLOCK RATE
                                                          A write to the I2CTRN will start the transmission of data
( ) I2CBRG = FCY FCY              1                    at the first data bit regardless of where the transmitter
                   FSCL  1,111,111                        left off when bus collision occurred.

14.12.4 CLOCK ARBITRATION                                 In a multi-master environment, the interrupt generation
                                                          on the detection of Start and Stop conditions allows the
Clock arbitration occurs when the master de-asserts       determination of when the bus is free. Control of the I2C
the SCL pin (SCL allowed to float high) during any        bus can be taken when the P bit is set in the I2CSTAT
receive, transmit, or Restart/Stop condition. When the    register, or the bus is Idle and the S and P bits are
SCL pin is allowed to float high, the Baud Rate           cleared.
Generator (BRG) is suspended from counting until the
SCL pin is actually sampled high. When the SCL pin is     14.13 I2C Module Operation During CPU
sampled high, the Baud Rate Generator is reloaded                  Sleep and Idle Modes
with the contents of I2CBRG and begins counting. This
ensures that the SCL high time will always be at least    14.13.1 I2C OPERATION DURING CPU
one BRG rollover count in the event that the clock is                   SLEEP MODE
held low by an external device.
                                                          When the device enters Sleep mode, all clock sources
14.12.5 MULTI-MASTER COMMUNICATION,                       to the module are shut down and stay at logic `0'. If
              BUS COLLISION, AND BUS                      Sleep occurs in the middle of a transmission and the
              ARBITRATION                                 state machine is partially into a transmission as the
                                                          clocks stop, then the transmission is aborted. Similarly,
Multi-master operation support is achieved by bus         if Sleep occurs in the middle of a reception, then the
arbitration. When the master outputs address/data bits    reception is aborted.
onto the SDA pin, arbitration takes place when the
master outputs a `1' on SDA by letting SDA float high     14.13.2 I2C OPERATION DURING CPU IDLE
while another master asserts a `0'. When the SCL pin                    MODE
floats high, data should be stable. If the expected data
on SDA is a `1' and the data sampled on the SDA           For the I2C, the I2CSIDL bit selects if the module will
pin = 0, then a bus collision has taken place. The        stop on Idle or continue on Idle. If I2CSIDL = 0, the
master will set the MI2CIF pulse and reset the master     module will continue operation on assertion of the Idle
portion of the I2C port to its Idle state.                mode. If I2CSIDL = 1, the module will stop on Idle.

DS70139F-page 100                                          2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 14-2: I2C 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

                                  I2CRCV    0200  --    --  --      --  --  --  --  --                                                      Receive Register     PEN    RSEN          0000 0000 0000 0000
                                  I2CTRN                                                                                                                         R_W     RBF          0000 0000 1111 1111
                                  I2CBRG    0202  --    --  --      --  --  --  --  --                                                      Transmit Register                         0000 0000 0000 0000
                                  I2CCON                                                                                                                                              0001 0000 0000 0000
                                  I2CSTAT   0204  --    --  --      --  --  --  --                                                          Baud Rate Generator                       0000 0000 0000 0000
                                  I2CADD                                                                                                                                              0000 0000 0000 0000
                                  Legend:   0206 I2CEN  -- I2CSIDL SCLREL IPMIEN A10M DISSLW SMEN GCEN STREN ACKDT ACKEN RCEN                                                  SEN
                                                                                                                                                                               TBF
                                     Note:  0208 ACKSTAT TRSTAT --  --  --  BCL GCSTAT ADD10 IWCOL I2COV D_A                                P                 S

                                            020A  --    --  --      --  --  --                                                              Address Register

                                            -- = unimplemented bit, read as `0'
                                            Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

DS70139F-page 101                                                                                                                                                                                          dsPIC30F2011/2012/3012/3013
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 102             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

15.0 UNIVERSAL ASYNCHRONOUS                           15.1 UART Module Overview
         RECEIVER TRANSMITTER
         (UART) MODULE                                The key features of the UART module are:

Note:  This data sheet summarizes features of          Full-duplex, 8 or 9-bit data communication
       this group of dsPIC30F devices and is not       Even, odd or no parity options (for 8-bit data)
       intended to be a complete reference             One or two Stop bits
       source. For more information on the CPU,       Fully integrated Baud Rate Generator with 16-bit
       peripherals, register descriptions and
       general device functionality, refer to the        prescaler
       "dsPIC30F Family Reference Manual"             Baud rates range from 38 bps to 1.875 Mbps at a
       (DS70046).
                                                         30 MHz instruction rate
This section describes the Universal Asynchronous      4-word deep transmit data buffer
Receiver/Transmitter Communications module. The       4-word deep receive data buffer
dsPIC30F2011/2012/3012 processors have one UART       Parity, framing and buffer overrun error detection
module (UART1). The dsPIC30F3013 processor has         Support for interrupt only on address detect
two UART modules (UART1 and UART2).
                                                         (9th bit = 1)
                                                       Separate transmit and receive interrupts
                                                       Loopback mode for diagnostic support
                                                       Alternate receive and transmit pins for UART1

FIGURE 15-1:  UART TRANSMITTER BLOCK DIAGRAM

                   Internal Data Bus                                            Control and Status bits

                                               Write  Write

                                               UTX8 UxTXREG Low Byte              Transmit Control

                                                                                 Control TSR
                                                                                 Control Buffer
                                                                                 Generate Flags
                                                                                 Generate Interrupt

                                                      Load TSR

                   UTXBRK                                                                     UxTXIF

                                  Data         Transmit Shift Register (UxTSR)  16x Baud Clock
                                                                                from Baud Rate
UxTX                              `0' (Start)
                                                                                   Generator
                                  `1' (Stop)

                                  Parity    Parity    16 Divider
                                          Generator

                                                      Control
                                                      Signals

Note: x = 1 or 2.

2008 Microchip Technology Inc.                                                DS70139F-page 103
dsPIC30F2011/2012/3012/3013

FIGURE 15-2:       UART RECEIVER BLOCK DIAGRAM

                   Internal Data Bus                            16

                                         Read                                Write   Read Read                       Write

                                                                             UxMODE                   UxSTA

                                         URX8 UxRXREG Low Byte

                                                                             Receive Buffer Control
                                                                              Generate Flags
                                                                              Generate Interrupt
                                                                              Shift Data Characters

            LPBACK                                     8-9                          Control           PERR
From UxTX                                                        Load RSR           Signals                    FERR
                                                                  to Buffer
                 1
                                         Receive Shift Register
   UxRX 0                                        (UxRSR)

                Start bit Detect                             16 Divider
                Parity Check
                Stop bit Detect
                Shift Clock Generation
                Wake Logic

                                                16x Baud Clock from
                                                Baud Rate Generator

                                                                                                      UxRXIF

DS70139F-page 104                                                                     2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

15.2 Enabling and Setting Up UART                          15.3 Transmitting Data

15.2.1 ENABLING THE UART                                   15.3.1 TRANSMITTING IN 8-BIT DATA
                                                                         MODE
The UART module is enabled by setting the UARTEN
bit in the UxMODE register (where x = 1 or 2). Once        The following steps must be performed to transmit 8-bit
enabled, the UxTX and UxRX pins are configured as an       data:
output and an input respectively, overriding the TRIS
and LAT register bit settings for the corresponding I/O    1. Set up the UART:
port pins. The UxTX pin is at logic `1' when no                  First, the data length, parity and number of Stop
transmission is taking place.                                    bits must be selected. Then, the transmit and
                                                                 receive interrupt enable and priority bits are
15.2.2 DISABLING THE UART                                        setup in the UxMODE and UxSTA registers.
                                                                 Also, the appropriate baud rate value must be
The UART module is disabled by clearing the UARTEN               written to the UxBRG register.
bit in the UxMODE register. This is the default state
after any Reset. If the UART is disabled, all I/O pins     2. Enable the UART by setting the UARTEN bit
operate as port pins under the control of the LAT and            (UxMODE<15>).
TRIS bits of the corresponding port pins.
                                                           3. Set the UTXEN bit (UxSTA<10>), thereby
Disabling the UART module resets the buffers to empty            enabling a transmission.
states. Any data characters in the buffers are lost and
the baud rate counter is reset.                            4. Write the byte to be transmitted to the lower byte
                                                                 of UxTXREG. The value will be transferred to the
All error and status flags associated with the UART              Transmit Shift register (UxTSR) immediately
module are reset when the module is disabled. The                and the serial bit stream will start shifting out
URXDA, OERR, FERR, PERR, UTXEN, UTXBRK and                       during the next rising edge of the baud clock.
UTXBF bits are cleared, whereas RIDLE and TRMT                   Alternatively, the data byte may be written while
are set. Other control bits, including ADDEN,                    UTXEN = 0, following which, the user may set
URXISEL<1:0>, UTXISEL, as well as the UxMODE                     UTXEN. This will cause the serial bit stream to
and UxBRG registers, are not affected.                           begin immediately because the baud clock will
                                                                 start from a cleared state.
Clearing the UARTEN bit while the UART is active will
abort all pending transmissions and receptions and         5. A transmit interrupt will be generated,
reset the module as defined above. Re-enabling the               depending on the value of the interrupt control
UART will restart the UART in the same configuration.            bit UTXISEL (UxSTA<15>).

15.2.3 ALTERNATE I/O                                       15.3.2 TRANSMITTING IN 9-BIT DATA
                                                                         MODE
The alternate I/O function is enabled by setting the
ALTIO bit (UxMODE<10>). If ALTIO = 1, the UxATX            The sequence of steps involved in the transmission
and UxARX pins (alternate transmit and alternate           of 9-bit data is similar to 8-bit transmission, except that
receive pins, respectively) are used by the UART           a 16-bit data word (of which the upper 7 bits are always
module instead of the UxTX and UxRX pins. If               clear) must be written to the UxTXREG register.
ALTIO = 0, the UxTX and UxRX pins are used by the
UART module.                                               15.3.3 TRANSMIT BUFFER (UXTXB)

15.2.4 SETTING UP DATA, PARITY AND                         The transmit buffer is 9 bits wide and 4 characters deep.
              STOP BIT SELECTIONS                          Including the Transmit Shift register (UxTSR), the user
                                                           effectively has a 5-deep FIFO (First-In, First- Out) buffer.
Control bits PDSEL<1:0> in the UxMODE register are         The UTXBF bit (UxSTA<9>) indicates whether the
used to select the data length and parity used in the      transmit buffer is full.
transmission. The data length may either be 8 bits with
even, odd or no parity, or 9 bits with no parity.          If a user attempts to write to a full buffer, the new data
                                                           will not be accepted into the FIFO and no data shift will
The STSEL bit determines whether one or two Stop bits      occur within the buffer. This enables recovery from a
will be used during data transmission.                     buffer overrun condition.

The default (power-on) setting of the UART is 8 bits, no   The FIFO is reset during any device Reset, but is not
parity and 1 Stop bit (typically represented as 8, N, 1).  affected when the device enters or wakes up from a
                                                           Power Saving mode.

2008 Microchip Technology Inc.                           DS70139F-page 105
dsPIC30F2011/2012/3012/3013

15.3.4 TRANSMIT INTERRUPT                                 15.4.2 RECEIVE BUFFER (UXRXB)

The transmit interrupt flag (U1TXIF or U2TXIF) is         The receive buffer is 4 words deep. Including the
located in the corresponding interrupt flag register.     Receive Shift register (UxRSR), the user effectively
                                                          has a 5-word deep FIFO buffer.
The transmitter generates an edge to set the UxTXIF
bit. The condition for generating the interrupt depends   URXDA (UxSTA<0>) = 1 indicates that the receive
on the UTXISEL control bit:                               buffer has data available. URXDA = 0 implies that the
                                                          buffer is empty. If a user attempts to read an empty
a) If UTXISEL = 0, an interrupt is generated when         buffer, the old values in the buffer will be read and no
      a word is transferred from the transmit buffer to   data shift will occur within the FIFO.
      the Transmit Shift register (UxTSR). This means
      that the transmit buffer has at least one empty     The FIFO is reset during any device Reset. It is not
      word.                                               affected when the device enters or wakes up from a
                                                          Power Saving mode.
b) If UTXISEL = 1, an interrupt is generated when
      a word is transferred from the transmit buffer to   15.4.3 RECEIVE INTERRUPT
      the Transmit Shift register (UxTSR) and the
      transmit buffer is empty.                           The receive interrupt flag (U1RXIF or U2RXIF) can be
                                                          read from the corresponding interrupt flag register. The
Switching between the two Interrupt modes during          interrupt flag is set by an edge generated by the
operation is possible and sometimes offers more           receiver. The condition for setting the receive interrupt
flexibility.                                              flag depends on the settings specified by
                                                          the URXISEL<1:0> (UxSTA<7:6>) control bits.
15.3.5 TRANSMIT BREAK
                                                          a) If URXISEL<1:0> = 00 or 01, an interrupt is
Setting the UTXBRK bit (UxSTA<11>) will cause the               generated every time a data word is transferred
UxTX line to be driven to logic `0'. The UTXBRK bit             from the Receive Shift register (UxRSR) to the
overrides all transmission activity. Therefore, the user        receive buffer. There may be one or more
should generally wait for the transmitter to be Idle            characters in the receive buffer.
before setting UTXBRK.
                                                          b) If URXISEL<1:0> = 10, an interrupt is generated
To send a Break character, the UTXBRK bit must be set           when a word is transferred from the Receive Shift
by software and must remain set for a minimum of 13             register (UxRSR) to the receive buffer, which as a
baud clock cycles. The UTXBRK bit is then cleared by            result of the transfer, contains 3 characters.
software to generate Stop bits. The user must wait for
a duration of at least one or two baud clock cycles in    c) If URXISEL<1:0> = 11, an interrupt is set when
order to ensure a valid Stop bit(s) before reloading the        a word is transferred from the Receive Shift
UxTXB, or starting other transmitter activity.                  register (UxRSR) to the receive buffer, which as
Transmission of a Break character does not generate a           a result of the transfer, contains 4 characters
transmit interrupt.                                             (i.e., becomes full).

15.4 Receiving Data                                       Switching between the Interrupt modes during
                                                          operation is possible, though generally not advisable
15.4.1 RECEIVING IN 8-BIT OR 9-BIT                        during normal operation.
              DATA MODE
                                                          15.5 Reception Error Handling
The following steps must be performed while receiving
8-bit or 9-bit data:                                      15.5.1 RECEIVE BUFFER OVERRUN
                                                                        ERROR (OERR BIT)
1. Set up the UART (see Section 15.3.1 "Trans-
      mitting in 8-bit data mode").                       The OERR bit (UxSTA<1>) is set if all of the following
                                                          conditions occur:
2. Enable the UART (see Section 15.3.1 "Trans-
      mitting in 8-bit data mode").                       a) The receive buffer is full.
                                                          b) The Receive Shift register is full, but unable to
3. A receive interrupt will be generated when one
      or more data words have been received, depend-            transfer the character to the receive buffer.
      ing on the receive interrupt settings specified by  c) The Stop bit of the character in the UxRSR is
      the URXISEL bits (UxSTA<7:6>).
                                                                detected, indicating that the UxRSR needs to
4. ReadtheOERRbit to determine ifan overrun error               transfer the character to the buffer.
      has occurred. The OERR bit must be reset in soft-
      ware.                                               Once OERR is set, no further data is shifted in UxRSR
                                                          (until the OERR bit is cleared in software or a Reset
5. Read the received data from UxRXREG. The act           occurs). The data held in UxRSR and UxRXREG
      of reading UxRXREG will move the next word to       remains valid.
      the top of the receive FIFO, and the PERR and
      FERR values will be updated.                                                            2008 Microchip Technology Inc.

DS70139F-page 106
                                  dsPIC30F2011/2012/3012/3013

15.5.2 FRAMING ERROR (FERR)                                   15.6 Address Detect Mode

The FERR bit (UxSTA<2>) is set if a `0' is detected           Setting the ADDEN bit (UxSTA<5>) enables this
instead of a Stop bit. If two Stop bits are selected, both    special mode in which a 9th bit (URX8) value of `1'
Stop bits must be `1', otherwise FERR will be set. The        identifies the received word as an address, rather than
read-only FERR bit is buffered along with the received        data. This mode is only applicable for 9-bit data
data. It is cleared on any Reset.                             communication. The URXISEL control bit does not
                                                              have any impact on interrupt generation in this mode
15.5.3 PARITY ERROR (PERR)                                    since an interrupt (if enabled) will be generated every
                                                              time the received word has the 9th bit set.
The PERR bit (UxSTA<3>) is set if the parity of the
received word is incorrect. This error bit is applicable      15.7 Loopback Mode
only if a Parity mode (odd or even) is selected. The
read-only PERR bit is buffered along with the received        Setting the LPBACK bit enables this special mode in
data bytes. It is cleared on any Reset.                       which the UxTX pin is internally connected to the UxRX
                                                              pin. When configured for the Loopback mode, the
15.5.4 IDLE STATUS                                            UxRX pin is disconnected from the internal UART
                                                              receive logic. However, the UxTX pin still functions as
When the receiver is active (i.e., between the initial        in a normal operation.
detection of the Start bit and the completion of the Stop     To select this mode:
bit), the RIDLE bit (UxSTA<4>) is `0'. Between the com-       a) Configure UART for desired mode of operation.
pletion of the Stop bit and detection of the next Start bit,  b) Set LPBACK = 1 to enable Loopback mode.
the RIDLE bit is `1', indicating that the UART is Idle.       c) Enable transmission as defined in Section 15.3

15.5.5 RECEIVE BREAK                                                "Transmitting Data".

The receiver will count and expect a certain number of        15.8 Baud Rate Generator
bit times based on the values programmed in the PDSEL
(UxMODE<2:1>) and STSEL (UxMODE<0>) bits.                     The UART has a 16-bit Baud Rate Generator to allow
                                                              maximum flexibility in baud rate generation. The Baud
If the break is longer than 13 bit times, the reception is    Rate Generator register (UxBRG) is readable and
considered complete after the number of bit times             writable. The baud rate is computed as follows:
specified by PDSEL and STSEL. The URXDA bit is set,           BRG = 16-bit value held in UxBRG register
FERR is set, zeros are loaded into the receive FIFO,
interrupts are generated if appropriate and the RIDLE                   (0 through 65535)
bit is set.                                                   FCY = Instruction Clock Rate (1/TCY)
                                                              The baud rate is given by Equation 15-1.
When the module receives a long break signal and the
receiver has detected the Start bit, the data bits and the    EQUATION 15-1: BAUD RATE
invalid Stop bit (which sets the FERR), the receiver
must wait for a valid Stop bit before looking for the next                   Baud Rate = FCY / (16*(BRG+1))
Start bit. It cannot assume that the break condition on
the line is the next Start bit.                               Therefore, the maximum baud rate possible is:
                                                              FCY /16 (if BRG = 0),
Break is regarded as a character containing all `0's with     and the minimum baud rate possible is:
the FERR bit set. The Break character is loaded into          FCY / (16* 65536).
the buffer. No further reception can occur until a Stop bit   With a full 16-bit Baud Rate Generator at 30 MIPS
is received. Note that RIDLE goes high when the Stop          operation, the minimum baud rate achievable is
bit has not yet been received.                                28.5 bps.

2008 Microchip Technology Inc.                              DS70139F-page 107
dsPIC30F2011/2012/3012/3013

15.9 Auto-Baud Support                                         15.10.2 UART OPERATION DURING CPU
                                                                             IDLE MODE
To allow the system to determine baud rates of
received characters, the input can be optionally linked        For the UART, the USIDL bit selects if the module will
to a selected capture input (IC1 for UART1 and IC2 for         stop operation when the device enters Idle mode or
UART2). To enable this mode, you must program the              whether the module will continue on Idle. If USIDL = 0,
input capture module to detect the falling and rising          the module will continue to operate during Idle mode. If
edges of the Start bit.                                        USIDL = 1, the module will stop on Idle.

15.10 UART Operation During CPU
         Sleep and Idle Modes

15.10.1 UART OPERATION DURING CPU
              SLEEP MODE

When the device enters Sleep mode, all clock sources
to the module are shut down and stay at logic `0'. If
entry into Sleep mode occurs while a transmission is in
progress, then the transmission is aborted. The UxTX
pin is driven to logic `1'. Similarly, if entry into Sleep
mode occurs while a reception is in progress, then the
reception is aborted. The UxSTA, UxMODE, transmit
and receive registers and buffers, and the UxBRG
register are not affected by Sleep mode.

If the WAKE bit (UxMODE<7>) is set before the device
enters Sleep mode, then a falling edge on the UxRX pin
will generate a receive interrupt. The Receive Interrupt
Select mode bit (URXISEL) has no effect for this
function. If the receive interrupt is enabled, then this will
wake-up the device from Sleep. The UARTEN bit must
be set in order to generate a wake-up interrupt.

DS70139F-page 108                                              2008 Microchip Technology Inc.
2008 Microchip Technology Inc.  TABLE 15-1: UART1 REGISTER MAP FOR dsPIC30F2011/2012/3012/3013

                                  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

                                  U1MODE        020C UARTEN -- USIDL --  --                                 ALTIO   --     --     WAKE LPBACK ABAUD --              --       PDSEL1 PDSEL0 STSEL 0000 0000 0000 0000
                                  U1STA                                                                                                                                       FERR OERR URXDA 0000 0001 0001 0000
                                  U1TXREG       020E UTXISEL --  --  -- UTXBRK UTXEN                                UTXBF TRMT URXISEL1 URXISEL0 ADDEN RIDLE PERR                                                    0000 000u uuuu uuuu
                                  U1RXREG                                                                                                                                                                            0000 0000 0000 0000
                                  U1BRG         0210  --  --     --  --  --                                 --      --     UTX8                           Transmit Register                                          0000 0000 0000 0000
                                  Legend:
                                                0212  --  --     --  --  --                                 --      --     URX8                           Receive Register

                                                0214                                                                       Baud Rate Generator Prescaler

                                                u = uninitialized bit; -- = unimplemented bit, read as `0'

                                  TABLE 15-2: UART2 REGISTER MAP FOR dsPIC30F3013(1)

                                   SFR          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
                                  Name

                                  U2MODE        0216 UARTEN -- USIDL --  --                                 --      --     --     WAKE LPBACK             ABAUD --  --       PDSEL1 PDSEL0  STSEL 0000 0000 0000 0000                     dsPIC30F2011/2012/3012/3013
                                  U2STA                                                                                                                                       FERR OERR     URXDA 0000 0001 0001 0000
                                  U2TXREG       0218 UTXISEL --  --  -- UTXBRK UTXEN UTXBF TRMT URXISEL1 URXISEL0                                         ADDEN RIDLE PERR
                                  U2RXREG                                                                                                                                                                0000 000u uuuu uuuu
                                  U2BRG         021A  --  --     --  --  --                                 --      --     UTX8                           Transmit Register                              0000 0000 0000 0000
                                  Legend:                                                                                                                                                                0000 0000 0000 0000
                                  Note 1:       021C  --  --     --  --  --                                 --      --     URX8                           Receive Register

                                            2:  021E                                                                       Baud Rate Generator Prescaler

                                                u = uninitialized bit; -- = unimplemented bit, read as `0'

                                                UART2 is not available on dsPIC30F2011/2012/3012 devices.
                                                Refer to "dsPIC30F Family Reference Manual" (DS70046) for descriptions of register bit fields.

DS70139F-page 109
dsPIC30F2011/2012/3012/3013

NOTES:

DS70139F-page 110             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

16.0 12-BIT ANALOG-TO-DIGITAL                             on the (VREF+/VREF-) pin. The ADC has a unique
         CONVERTER (ADC) MODULE                           feature of being able to operate while the device is in
                                                          Sleep mode with RC oscillator selection.
Note:  This data sheet summarizes features of
       this group of dsPIC30F devices and is not          The ADC module has six 16-bit registers:
       intended to be a complete reference
       source. For more information on the CPU,            A/D Control Register 1 (ADCON1)
       peripherals, register descriptions and gen-         A/D Control Register 2 (ADCON2)
       eral device functionality, refer to the             A/D Control Register 3 (ADCON3)
       "dsPIC30F Family Reference Manual"                  A/D Input Select Register (ADCHS)
       (DS70046).                                          A/D Port Configuration Register (ADPCFG)
                                                          A/D Input Scan Selection Register (ADCSSL)
The 12-bit Analog-to-Digital Converter allows
conversion of an analog input signal to a 12-bit digital  The ADCON1, ADCON2 and ADCON3 registers
number. This module is based on a Successive              control the operation of the ADC module. The ADCHS
Approximation Register (SAR) architecture and             register selects the input channels to be converted. The
provides a maximum sampling rate of 200 ksps. The         ADPCFG register configures the port pins as analog
ADC module has up to 10 analog inputs which are           inputs or as digital I/O. The ADCSSL register selects
multiplexed into a sample and hold amplifier. The         inputs for scanning.
output of the sample and hold is the input into the
converter which generates the result. The analog          Note:  The SSRC<2:0>, ASAM, SMPI<3:0>,
reference voltage is software selectable to either the           BUFM and ALTS bits, as well as the
device supply voltage (AVDD/AVSS) or the voltage level           ADCON3 and ADCSSL registers, must
                                                                 not be written to while ADON = 1. This
                                                                 would lead to indeterminate results.

FIGURE 16-1:  12-BIT ADC FUNCTIONAL BLOCK DIAGRAM

AVDD/VREF+
AVSS/VREF-

AN0                               0000                                       Comparator

                                  0001                           DAC

AN1

AN2                               0010

AN3                               0011                           12-bit SAR  Conversion Logic

AN4                               0100                                                        Data Format
                                                                                                            Bus Interface
AN5                               0101                                       16-word, 12-bit
                                                                                 Dual Port
                                                                                   Buffer

AN6                               0110

AN7                               0111

AN8                               1000  Sample                               Sample/Sequence
                                                                                    Control

AN9                               1001

                                        S/H CH0                     Input    Input MUX
                                                                 Switches      Control

2008 Microchip Technology Inc.                                                              DS70139F-page 111
dsPIC30F2011/2012/3012/3013

16.1 A/D Result Buffer                                     16.3 Selecting the Conversion
                                                                    Sequence
The module contains a 16-word dual port read-only
buffer, called ADCBUF0...ADCBUFF, to buffer the A/D        Several groups of control bits select the sequence in
results. The RAM is 12 bits wide but the data obtained     which the A/D connects inputs to the sample/hold
is represented in one of four different 16-bit data        channel, converts a channel, writes the buffer memory
formats. The contents of the sixteen A/D Conversion        and generates interrupts.
Result Buffer registers, ADCBUF0 through ADCBUFF,
cannot be written by user software.                        The sequence is controlled by the sampling clocks.

16.2 Conversion Operation                                  The SMPI bits select the number of
                                                           acquisition/conversion sequences that would be per-
After the ADC module has been configured, the sample       formed before an interrupt occurs. This can vary from 1
acquisition is started by setting the SAMP bit. Various    sample per interrupt to 16 samples per interrupt.
sources, such as a programmable bit, timer time-outs
and external events, will terminate acquisition and start  The BUFM bit will split the 16-word results buffer into
a conversion. When the A/D conversion is complete,         two 8-word groups. Writing to the 8-word buffers will be
the result is loaded into ADCBUF0...ADCBUFF, and           alternated on each interrupt event.
the DONE bit and the A/D interrupt flag, ADIF, are set
after the number of samples specified by the SMPI bit.     Use of the BUFM bit will depend on how much time is
The ADC module can be configured for different inter-      available for the moving of the buffers after the
rupt rates as described in Section 16.3 "Selecting the     interrupt.
Conversion Sequence".
                                                           If the processor can quickly unload a full buffer within
The following steps should be followed for doing an        the time it takes to acquire and convert one channel,
A/D conversion:                                            the BUFM bit can be `0' and up to 16 conversions
                                                           (corresponding to the 16 input channels) may be done
1. Configure the ADC module:                               per interrupt. The processor will have one acquisition
       Configure analog pins, voltage reference and       and conversion time to move the sixteen conversions.
        digital I/O
       Select A/D input channels                          If the processor cannot unload the buffer within the
       Select A/D conversion clock                        acquisition and conversion time, the BUFM bit should be
       Select A/D conversion trigger                      `1'. For example, if SMPI<3:0> (ADCON2<5:2>) = 0111,
       Turn on ADC module                                 then eight conversions will be loaded into 1/2 of the
                                                           buffer, following which an interrupt occurs. The next
2. Configure A/D interrupt (if required):                  eight conversions will be loaded into the other 1/2 of the
       Clear ADIF bit                                     buffer. The processor will have the entire time between
       Select A/D interrupt priority                      interrupts to move the eight conversions.

3. Start sampling                                          The ALTS bit can be used to alternate the inputs
4. Wait the required acquisition time                      selected during the sampling sequence. The input
5. Trigger acquisition end, start conversion               multiplexer has two sets of sample inputs: MUX A and
6. Wait for A/D conversion to complete, by either:         MUX B. If the ALTS bit is `0', only the MUX A inputs are
                                                           selected for sampling. If the ALTS bit is `1' and
       Waiting for the A/D interrupt, or                  SMPI<3:0> = 0000 on the first sample/convert
       Waiting for the DONE bit to get set                sequence, the MUX A inputs are selected and on the
7. Read A/D result buffer; clear ADIF if required          next acquire/convert sequence, the MUX B inputs are
                                                           selected.

                                                           The CSCNA bit (ADCON2<10>) will allow the
                                                           multiplexer input to be alternately scanned across a
                                                           selected number of analog inputs for the MUX A group.
                                                           The inputs are selected by the ADCSSL register. If a
                                                           particular bit in the ADCSSL register is `1', the
                                                           corresponding input is selected. The inputs are always
                                                           scanned from lower to higher numbered inputs, starting
                                                           after each interrupt. If the number of inputs selected is
                                                           greater than the number of samples taken per interrupt,
                                                           the higher numbered inputs are unused.

DS70139F-page 112                                           2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

16.4 Programming the Start of                               The internal RC oscillator is selected by setting the
         Conversion Trigger                                 ADRC bit.

The conversion trigger will terminate acquisition and       For correct ADC conversions, the ADC conversion
start the requested conversions.                            clock (TAD) must be selected to ensure a minimum TAD
                                                            time of 334 nsec (for VDD = 5V). Refer to Section 20.0
The SSRC<2:0> bits select the source of the                 "Electrical Characteristics" for minimum TAD under
conversion trigger. The SSRC bits provide for up to four    other operating conditions.
alternate sources of conversion trigger.
                                                            Example 16-1 shows a sample calculation for the
When SSRC<2:0> = 000, the conversion trigger is             ADCS<5:0> bits, assuming a device operating speed
under software control. Clearing the SAMP bit will          of 30 MIPS.
cause the conversion trigger.
                                                            EXAMPLE 16-1:  ADC CONVERSION
When SSRC<2:0> = 111 (Auto-Start mode), the                                CLOCK AND SAMPLING
conversion trigger is under A/D clock control. The                         RATE CALCULATION
SAMC bits select the number of A/D clocks between
the start of acquisition and the start of conversion. This      Minimum TAD = 334 nsec
provides the fastest conversion rates on multiple                            TCY = 33 .33 nsec (30 MIPS)
channels. SAMC must always be at least one clock
cycle.                                                                                TAD
                                                                ADCS<5:0> = 2 TCY 1
Other trigger sources can come from timer modules or
external interrupts.                                                            = 2 334 nsec 1
                                                                                        33.33 nsec
16.5 Aborting a Conversion
                                                                                = 19.04
Clearing the ADON bit during a conversion will abort        Therefore,
the current conversion and stop the sampling                Set ADCS<5:0> = 19
sequencing until the next sampling trigger. The
ADCBUF will not be updated with the partially                                   TCY
completed A/D conversion sample. That is, the               Actual TAD = 2 (ADCS<5:0> + 1)
ADCBUF will continue to contain the value of the last
completed conversion (or the last value written to the                     = 33.33 nsec (19 + 1)
ADCBUF register).                                                                    2

If the clearing of the ADON bit coincides with an                          = 334 nsec
auto-start, the clearing has a higher priority and a new
conversion will not start.                                  If SSRC<2:0> = `111' and SAMC<4:0> = `00001'

After the A/D conversion is aborted, a 2 TAD wait is        Since,
required before the next sampling may be started by         Sampling Time = Acquisition Time + Conversion Time
setting the SAMP bit.
                                                                               = 1 TAD + 14 TAD
16.6 Selecting the ADC Conversion                                              = 15 x 334 nsec
         Clock
                                                            Therefore,
The ADC conversion requires 14 TAD. The source of                                          1
the ADC conversion clock is software selected, using a
6-bit counter. There are 64 possible options for TAD.       Sampling Rate =
                                                                                   (15 x 334 nsec)
EQUATION 16-1: ADC CONVERSION
                           CLOCK                                               = ~200 kHz

             TAD = TCY * (0.5*(ADCS<5:0> + 1))

2008 Microchip Technology Inc.                                           DS70139F-page 113
dsPIC30F2011/2012/3012/3013

16.7 ADC Speeds

The dsPIC30F 12-bit ADC specifications permit a
maximum of 200 ksps sampling rate. Table 16-1
summarizes the conversion speeds for the dsPIC30F
12-bit ADC and the required operating conditions.

Figure 16-2 depicts the recommended circuit for the
conversion rates above 200 ksps. The dsPIC30F2011
is shown as an example.

TABLE 16-1: 12-BIT ADC EXTENDED CONVERSION RATES

                                  dsPIC30F 12-bit ADC Conversion Rates

Speed          TAD Sampling       Rs Max              VDD                         Temperature  Channels Configuration
           Minimum Time Min

Up to 200     334 ns      1 TAD 2.5 k 4.5V to 5.5V -40C to +85C
ksps(1)
                                                                                                                            VREF- VREF+
                                                                                               ANx                 CHX          ADC
                                                                                                              S/H

Up to 100     668 ns      1 TAD 2.5 k 3.0V to 5.5V -40C to +125C
ksps
                                                                                                                            VREF- VREF+
                                                                                                                              or or

                                                                                                                            AVSS AVDD

                                                                                               ANx                 CHX      ADC
                                                                                               ANx or VREF-   S/H

Note 1: External VREF- and VREF+ pins must be used for correct operation. See Figure 16-2 for recommended
            circuit.

FIGURE 16-2:         ADC VOLTAGE REFERENCE SCHEMATIC

                     VDD                                                                       See Note 1:

                   R2                                                                                   VDD       VDD       VDD
                   10

              C2          C1                              VDD                                       C8        C7        C6

              0.1 F       0.01 F                                                                    1 F       0.1 F 0.01 F

                                  R1           VREF-  27  26   AVDD  VSS  23  22
                                  10

                                          1                                       21

                                          2                                       20

                                          3                                       19  VDD
                                          4 dsPIC30F2011 18
                                                                                                        AVDD      AVDD      AVDD
                                          VSS                                 VDD

                                          6                                   VSS                   C5        C4        C3

                                          7               VDD  11    12   13  14  15                1 F       0.1 F 0.01 F

                                             8        9

                                                      VDD

Note 1: Ensure adequate bypass capacitors are provided on each VDD pin.

DS70139F-page 114                                                                               2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

The configuration procedures below give the required             The following figure shows the timing diagram of the
setup values for the conversion speeds above 100                 ADC running at 200 ksps. The TAD selection in
ksps.                                                            conjunction with the guidelines described above allows
                                                                 a conversion speed of 200 ksps. See Example 16-1 for
16.7.1 200 KSPS CONFIGURATION                                    code example.
              GUIDELINE
                                                                 16.8 A/D Acquisition Requirements
The following configuration items are required to
achieve a 200 ksps conversion rate.                              The analog input model of the 12-bit ADC is shown in
                                                                 Figure 16-3. The total sampling time for the A/D is a
Comply with conditions provided in Table 16-1.                 function of the internal amplifier settling time and the
Connect external VREF+ and VREF- pins following                holding capacitor charge time.

   the recommended circuit shown in Figure 16-2.                 For the ADC to meet its specified accuracy, the charge
Set SSRC<2.0> = 111 in the ADCON1 register to                  holding capacitor (CHOLD) must be allowed to fully
                                                                 charge to the voltage level on the analog input pin. The
   enable the auto convert option.                               source impedance (RS), the interconnect
Enable automatic sampling by setting the ASAM                  impedance (RIC) and the internal sampling switch
                                                                 (RSS) impedance combine to directly affect the time
   control bit in the ADCON1 register.                           required to charge the capacitor CHOLD. The combined
Write the SMPI<3.0> control bits in the ADCON2                 impedance of the analog sources must therefore be
                                                                 small enough to fully charge the holding capacitor
   register for the desired number of conversions                within the chosen sample time. To minimize the effects
   between interrupts.                                           of pin leakage currents on the accuracy of the ADC, the
Configure the ADC clock period to be:                          maximum recommended source impedance, RS,
                                                                 is 2.5 k. After the analog input channel is selected
                       1                                         (changed), this sampling function must be completed
                                      = 334 ns                   prior to starting the conversion. The internal holding
                                                                 capacitor will be in a discharged state prior to each
           (14 + 1) x 200,000                                    sample operation.

   by writing to the ADCS<5:0> control bits in the
   ADCON3 register.
Configure the sampling time to be 1 TAD by
   writing: SAMC<4:0> = 00001.

FIGURE 16-3:      12-BIT A/D CONVERTER ANALOG INPUT MODEL

                                  VDD                           RIC  250   Sampling   RSS  3 k
                                        VT = 0.6V                          Switch
                  Rs ANx                                        I leakage
                                       VT = 0.6V                500 nA         RSS

              VA      CPIN                                                            CHOLD
                                                                                      = DAC capacitance
                                                                                      = 18 pF

                                                                                      VSS

              Legend: CPIN        = input capacitance

                  VT              = threshold voltage

                  I leakage = leakage current at the pin due to
                                   various junctions

                  RIC             = interconnect resistance

                  RSS             = sampling switch resistance

                  CHOLD = sample/hold capacitance (from DAC)

Note: CPIN value depends on device package and is not tested. Effect of CPIN negligible if Rs  2.5 k.

2008 Microchip Technology Inc.                                                                DS70139F-page 115
dsPIC30F2011/2012/3012/3013

16.9 Module Power-Down Modes                                 If the A/D interrupt is enabled, the device will wake-up
                                                             from Sleep. If the A/D interrupt is not enabled, the ADC
The module has two internal power modes.                     module will then be turned off, although the ADON bit
                                                             will remain set.
When the ADON bit is `1', the module is in Active mode;
it is fully powered and functional.                          16.10.2 A/D OPERATION DURING CPU IDLE
                                                                           MODE
When ADON is `0', the module is in Off mode. The
digital and analog portions of the circuit are disabled for  The ADSIDL bit selects if the module will stop on Idle or
maximum current savings.                                     continue on Idle. If ADSIDL = 0, the module will
                                                             continue operation on assertion of Idle mode. If
In order to return to the Active mode from Off mode, the     ADSIDL = 1, the module will stop on Idle.
user must wait for the ADC circuitry to stabilize.
                                                             16.11 Effects of a Reset
16.10 A/D Operation During CPU Sleep
         and Idle Modes                                      A device Reset forces all registers to their Reset state.
                                                             This forces the ADC module to be turned off, and any
16.10.1 A/D OPERATION DURING CPU                             conversion and sampling sequence is aborted. The
              SLEEP MODE                                     values that are in the ADCBUF registers are not
                                                             modified. The A/D Result register will contain unknown
When the device enters Sleep mode, all clock sources         data after a Power-on Reset.
to the module are shut down and stay at logic `0'.
                                                             16.12 Output Formats
If Sleep occurs in the middle of a conversion, the
conversion is aborted. The converter will not continue       The A/D result is 12 bits wide. The data buffer RAM is
with a partially completed conversion on exit from           also 12 bits wide. The 12-bit data can be read in one of
Sleep mode.                                                  four different formats. The FORM<1:0> bits select the
                                                             format. Each of the output formats translates to a 16-bit
Register contents are not affected by the device             result on the data bus.
entering or leaving Sleep mode.

The ADC module can operate during Sleep mode if the
A/D clock source is set to RC (ADRC = 1). When the
RC clock source is selected, the ADC module waits
one instruction cycle before starting the conversion.
This allows the SLEEP instruction to be executed which
eliminates all digital switching noise from the
conversion. When the conversion is complete, the
CONV bit will be cleared and the result loaded into the
ADCBUF register.

FIGURE 16-4:       A/D OUTPUT DATA FORMATS

RAM Contents:               d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00

Read to Bus:                d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00 0 0 0 0
        Signed Fractional

              Fractional d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00 0 0 0 0

Signed Integer d11 d11 d11 d11 d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00

                   Integer  0 0 0 0 d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00

DS70139F-page 116                                             2008 Microchip Technology Inc.
                                  dsPIC30F2011/2012/3012/3013

16.13 Configuring Analog Port Pins                         16.14 Connection Considerations

The use of the ADPCFG and TRIS registers control the       The analog inputs have diodes to VDD and VSS as ESD
operation of the A/D port pins. The port pins that are     protection. This requires that the analog input be
desired as analog inputs must have their                   between VDD and VSS. If the input voltage exceeds this
corresponding TRIS bit set (input). If the TRIS bit is     range by greater than 0.3V (either direction), one of the
cleared (output), the digital output level (VOH or VOL)    diodes becomes forward biased and it may damage the
will be converted.                                         device if the input current specification is exceeded.

The A/D operation is independent of the state of the       An external RC filter is sometimes added for
CH0SA<3:0>/CH0SB<3:0> bits and the TRIS bits.              anti-aliasing of the input signal. The R component
                                                           should be selected to ensure that the sampling time
When reading the PORT register, all pins configured as     requirements are satisfied. Any external components
analog input channels will read as cleared.                connected (via high-impedance) to an analog input pin
                                                           (capacitor, zener diode, etc.) should have very little
Pins configured as digital inputs will not convert an      leakage current at the pin.
analog input. Analog levels on any pin that is defined as
a digital input (including the ANx pins) may cause the
input buffer to consume current that exceeds the
device specifications.

2008 Microchip Technology Inc.                           DS70139F-page 117
DS70139F-page 118                 TABLE 16-2: A/D CONVERTER REGISTER MAP FOR dsPIC30F2011/3012                                                                                                                        dsPIC30F2011/2012/3012/3013

                                   SFR      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
                                  Name

                                  ADCBUF0 0280  --        --         --      --                                                             ADC Data Buffer 0                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF1 0282  --        --         --      --                                                             ADC Data Buffer 1                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF2 0284  --        --         --      --                                                             ADC Data Buffer 2                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF3 0286  --        --         --      --                                                             ADC Data Buffer 3                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF4 0288  --        --         --      --                                                             ADC Data Buffer 4                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF5 028A --         --         --      --                                                             ADC Data Buffer 5                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF6 028C --         --         --      --                                                             ADC Data Buffer 6                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF7 028E --         --         --      --                                                             ADC Data Buffer 7                                    0000 uuuu uuuu uuuu
                                                                                                                                                                                                 0000 uuuu uuuu uuuu
                                  ADCBUF8 0290  --        --         --      --                                                             ADC Data Buffer 8                                    0000 0000 0000 0000
                                                                                                                                                                                                 0000 0000 0000 0000
                                  ADCBUF9 0292  --        --         --      --                                                             ADC Data Buffer 9                                    0000 0000 0000 0000
                                                                                                                                                                                                 0000 0000 0000 0000
                                  ADCBUFA 0294  --        --         --      --                                                             ADC Data Buffer 10                                   0000 0000 0000 0000
                                                                                                                                                                                                 0000 0000 0000 0000
                                  ADCBUFB 0296  --        --         --      --                                                             ADC Data Buffer 11

                                  ADCBUFC 0298  --        --         --      --                  &n