Dspic30F Family Reference Manual: High-Performance Digital Signal Controllers
Dspic30F Family Reference Manual: High-Performance Digital Signal Controllers
Dspic30F Family Reference Manual: High-Performance Digital Signal Controllers
DS70046E
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 Microchips 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 Microchips code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information contained in this publication regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyers risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.
Trademarks The Microchip name and logo, the Microchip logo, Accuron, dsPIC, KEELOQ, microID, MPLAB, PIC, PICmicro, PICSTART, PRO MATE, PowerSmart, rfPIC and SmartShunt are registered trademarks of Microchip Technology Incorporated in the U.S.A. and other countries. AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB, SEEVAL, SmartSensor and The Embedded Control Solutions Company are registered trademarks of Microchip Technology Incorporated in the U.S.A. Analog-for-the-Digital Age, Application Maestro, dsPICDEM, dsPICDEM.net, dsPICworks, ECAN, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB, In-Circuit Serial Programming, ICSP, ICEPIC, Linear Active Thermistor, MPASM, MPLIB, MPLINK, MPSIM, PICkit, PICDEM, PICDEM.net, PICLAB, PICtail, PowerCal, PowerInfo, PowerMate, PowerTool, Real ICE, rfLAB, rfPICDEM, Select Mode, Smart Serial, SmartTel, 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. 2006, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. Printed on recycled paper.
Microchip received ISO/TS-16949:2002 quality system certification for its worldwide headquarters, design and wafer fabrication facilities in Chandler and Tempe, Arizona and Mountain View, California in October 2003. The Companys quality system processes and procedures are for its PICmicro 8-bit MCUs, KEELOQ code hopping devices, Serial EEPROMs, microperipherals, nonvolatile memory and analog products. In addition, Microchips quality system for the design and manufacture of development systems is ISO 9001:2000 certified.
DS70046E-page ii
M
Table of Contents
PAGE
SECTION 1. INTRODUCTION 1-1
Introduction ...................................................................................................................................................... 1-2 Manual Objective ............................................................................................................................................. 1-2 Device Structure ............................................................................................................................................... 1-3 Development Support ...................................................................................................................................... 1-4 Style and Symbol Conventions ........................................................................................................................ 1-4 Related Documents .......................................................................................................................................... 1-6 Revision History ............................................................................................................................................... 1-7
SECTION 2. CPU
2-1
Introduction ...................................................................................................................................................... 2-2 Programmers Model ........................................................................................................................................ 2-4 Software Stack Pointer ..................................................................................................................................... 2-8 CPU Register Descriptions ............................................................................................................................. 2-11 Arithmetic Logic Unit (ALU) ............................................................................................................................ 2-17 DSP Engine .................................................................................................................................................... 2-18 Divide Support ................................................................................................................................................ 2-27 Instruction Flow Types ................................................................................................................................... 2-27 Loop Constructs ............................................................................................................................................. 2-30 Address Register Dependencies .................................................................................................................... 2-35 Register Maps ................................................................................................................................................ 2-38 Related Application Notes .............................................................................................................................. 2-40 Revision History ............................................................................................................................................. 2-41
3-1
Introduction ...................................................................................................................................................... 3-2 Data Space Address Generator Units (AGUs) ................................................................................................. 3-5 Modulo Addressing .......................................................................................................................................... 3-7 Bit-Reversed Addressing ............................................................................................................................... 3-14 Control Register Descriptions ......................................................................................................................... 3-18 Related Application Notes .............................................................................................................................. 3-23 Revision History ............................................................................................................................................. 3-24
4-1
Program Memory Address Map ....................................................................................................................... 4-2 Program Counter .............................................................................................................................................. 4-4 Data Access from Program Memory ................................................................................................................ 4-4 Program Space Visibility from Data Space ...................................................................................................... 4-8 Program Memory Writes ................................................................................................................................ 4-10 PSV Code Examples ...................................................................................................................................... 4-11 Related Application Notes .............................................................................................................................. 4-12 Revision History ............................................................................................................................................. 4-13
70046E-page iii
M
Table of Contents
PAGE
SECTION 5. FLASH AND EEPROM PROGRAMMING 5-1
Introduction ...................................................................................................................................................... 5-2 Table Instruction Operation .............................................................................................................................. 5-2 Control Registers ............................................................................................................................................. 5-5 Run-Time Self-Programming (RTSP) ............................................................................................................. 5-10 Data EEPROM Programming ........................................................................................................................ 5-15 Design Tips .................................................................................................................................................... 5-21 Related Application Notes .............................................................................................................................. 5-22 Revision History ............................................................................................................................................. 5-23
6-1
Introduction ...................................................................................................................................................... 6-2 Non-Maskable Traps ........................................................................................................................................ 6-6 Interrupt Processing Timing ........................................................................................................................... 6-11 Interrupt Control and Status Registers ........................................................................................................... 6-14 Interrupt Setup Procedures ............................................................................................................................ 6-42 Design Tips .................................................................................................................................................... 6-44 Related Application Notes .............................................................................................................................. 6-45 Revision History ............................................................................................................................................. 6-46
SECTION 7. OSCILLATOR
7-1
Introduction ...................................................................................................................................................... 7-2 Device Clocking and MIPS ............................................................................................................................... 7-5 Oscillator Configuration .................................................................................................................................... 7-6 Oscillator Control Registers OSCCON and OSCTUN ................................................................................. 7-13 Primary Oscillator ........................................................................................................................................... 7-20 Crystal Oscillators/Ceramic Resonators ......................................................................................................... 7-22 Determining Best Values for Crystals, Clock Mode, C1, C2 and Rs .............................................................. 7-24 External Clock Input ....................................................................................................................................... 7-25 External RC Oscillator .................................................................................................................................... 7-26 Phase Locked Loop (PLL) .............................................................................................................................. 7-30 Low-Power 32 kHz Crystal Oscillator ............................................................................................................. 7-31 Oscillator Start-up Timer (OST) ...................................................................................................................... 7-31 Internal Fast RC Oscillator (FRC) .................................................................................................................. 7-31 Internal Low-Power RC (LPRC) Oscillator ..................................................................................................... 7-32 Fail-Safe Clock Monitor (FSCM) .................................................................................................................... 7-32 Programmable Oscillator Postscaler .............................................................................................................. 7-33 Clock Switching Operation ............................................................................................................................. 7-34 Design Tips .................................................................................................................................................... 7-38 Related Application Notes .............................................................................................................................. 7-39 Revision History ............................................................................................................................................. 7-40
70046E-page iv
M
Table of Contents
PAGE
SECTION 8. RESET 8-1
Introduction ...................................................................................................................................................... 8-2 Clock Source Selection at Reset ...................................................................................................................... 8-5 POR: Power-on Reset ...................................................................................................................................... 8-5 External Reset (EXTR) ..................................................................................................................................... 8-7 Software RESET Instruction (SWR) ................................................................................................................. 8-7 Watchdog Time-out Reset (WDTR) ................................................................................................................. 8-7 Brown-out Reset (BOR) ................................................................................................................................... 8-8 Using the RCON Status Bits .......................................................................................................................... 8-10 Device Reset Times ....................................................................................................................................... 8-11 Device Start-up Time Lines ............................................................................................................................ 8-13 Special Function Register Reset States ......................................................................................................... 8-16 Design Tips .................................................................................................................................................... 8-17 Related Application Notes .............................................................................................................................. 8-18 Revision History ............................................................................................................................................. 8-19
9-1
Introduction ...................................................................................................................................................... 9-2 LVD Operation ................................................................................................................................................. 9-5 Design Tips ...................................................................................................................................................... 9-6 Related Application Notes ................................................................................................................................ 9-7 Revision History ............................................................................................................................................... 9-8
10-1
Introduction .................................................................................................................................................... 10-2 Power Saving Modes ..................................................................................................................................... 10-2 Sleep Mode .................................................................................................................................................... 10-2 Idle Mode ....................................................................................................................................................... 10-4 Interrupts Coincident with Power Save Instructions ....................................................................................... 10-5 Watchdog Timer ............................................................................................................................................. 10-6 Peripheral Module Disable (PMD) Registers .................................................................................................. 10-9 Design Tips .................................................................................................................................................. 10-10 Related Application Notes ............................................................................................................................ 10-11 Revision History ........................................................................................................................................... 10-12
11-1
Introduction .................................................................................................................................................... 11-2 I/O Port Control Registers .............................................................................................................................. 11-3 Peripheral Multiplexing ................................................................................................................................... 11-4 Port Descriptions ............................................................................................................................................ 11-6 Change Notification (CN) Pins ....................................................................................................................... 11-7 CN Operation in Sleep and Idle Modes .......................................................................................................... 11-8 Related Application Notes ............................................................................................................................ 11-11 Revision History ........................................................................................................................................... 11-12
70046E-page v
M
Table of Contents
PAGE
SECTION 12. TIMERS 12-1
Introduction .................................................................................................................................................... 12-2 Timer Variants ................................................................................................................................................ 12-3 Control Registers ........................................................................................................................................... 12-6 Modes of Operation ........................................................................................................................................ 12-9 Timer Prescalers .......................................................................................................................................... 12-14 Timer Interrupts ............................................................................................................................................ 12-14 Reading and Writing 16-bit Timer Module Registers .................................................................................... 12-15 Low Power 32 kHz Crystal Oscillator Input .................................................................................................. 12-15 32-bit Timer Configuration ............................................................................................................................ 12-16 32-bit Timer Modes of Operation ................................................................................................................. 12-18 Reading and Writing into 32-bit Timers ........................................................................................................ 12-21 Timer Operation in Power Saving States ..................................................................................................... 12-21 Peripherals Using Timer Modules ................................................................................................................ 12-22 Design Tips .................................................................................................................................................. 12-24 Related Application Notes ............................................................................................................................ 12-25 Revision History ........................................................................................................................................... 12-26
13-1
Introduction .................................................................................................................................................... 13-2 Input Capture Registers ................................................................................................................................. 13-3 Timer Selection .............................................................................................................................................. 13-4 Input Capture Event Modes ........................................................................................................................... 13-4 Capture Buffer Operation ............................................................................................................................... 13-8 Input Capture Interrupts ................................................................................................................................. 13-9 UART Autobaud Support ............................................................................................................................... 13-9 Input Capture Operation in Power Saving States ........................................................................................ 13-10 I/O Pin Control .............................................................................................................................................. 13-10 Special Function Registers Associated with the Input Capture Module ....................................................... 13-11 Design Tips .................................................................................................................................................. 13-12 Related Application Notes ............................................................................................................................ 13-13 Revision History ........................................................................................................................................... 13-14
14-1
Introduction .................................................................................................................................................... 14-2 Output Compare Registers ............................................................................................................................ 14-3 Modes of Operation ........................................................................................................................................ 14-4 Output Compare Operation in Power Saving States .................................................................................... 14-23 I/O Pin Control .............................................................................................................................................. 14-23 Design Tips .................................................................................................................................................. 14-26 Related Application Notes ............................................................................................................................ 14-27 Revision History ........................................................................................................................................... 14-28
70046E-page vi
M
Table of Contents
PAGE
SECTION 15. MOTOR CONTROL PWM 15-1
Introduction .................................................................................................................................................... 15-2 Control Registers ........................................................................................................................................... 15-4 PWM Time Base .......................................................................................................................................... 15-16 PWM Duty Cycle Comparison Units ............................................................................................................. 15-20 Complementary PWM Output Mode ............................................................................................................ 15-26 Dead Time Control ....................................................................................................................................... 15-27 Independent PWM Output Mode .................................................................................................................. 15-30 PWM Output Override .................................................................................................................................. 15-31 PWM Output and Polarity Control ................................................................................................................ 15-34 PWM Fault Pins ........................................................................................................................................... 15-34 PWM Update Lockout .................................................................................................................................. 15-37 PWM Special Event Trigger ......................................................................................................................... 15-38 Operation in Device Power Saving Modes ................................................................................................... 15-38 Special Features for Device Emulation ........................................................................................................ 15-39 Related Application Notes ............................................................................................................................ 15-42 Revision History ........................................................................................................................................... 15-43
16-1
Module Introduction ........................................................................................................................................ 16-2 Control and Status Registers ......................................................................................................................... 16-4 Programmable Digital Noise Filters ................................................................................................................ 16-9 Quadrature Decoder .................................................................................................................................... 16-10 16-bit Up/Down Position Counter ................................................................................................................. 16-12 Using QEI as an Alternate 16-bit Timer/Counter .......................................................................................... 16-16 Quadrature Encoder Interface Interrupts ..................................................................................................... 16-17 I/O Pin Control .............................................................................................................................................. 16-18 QEI Operation During Power Saving Modes ................................................................................................ 16-19 Effects of a Reset ......................................................................................................................................... 16-19 Design Tips .................................................................................................................................................. 16-21 Related Application Notes ............................................................................................................................ 16-22 Revision History ........................................................................................................................................... 16-23
70046E-page vii
M
Table of Contents
PAGE
SECTION 17. 10-BIT A/D CONVERTER 17-1
Introduction .................................................................................................................................................... 17-2 Control Registers ........................................................................................................................................... 17-4 A/D Result Buffer ........................................................................................................................................... 17-4 A/D Terminology and Conversion Sequence ............................................................................................... 17-11 A/D Module Configuration ............................................................................................................................ 17-13 Selecting the Voltage Reference Source ..................................................................................................... 17-13 Selecting the A/D Conversion Clock ............................................................................................................ 17-13 Selecting Analog Inputs for Sampling .......................................................................................................... 17-14 Enabling the Module .................................................................................................................................... 17-16 Specifying the Sample/Conversion Sequence ............................................................................................. 17-16 How to Start Sampling ................................................................................................................................. 17-17 How to Stop Sampling and Start Conversions ............................................................................................. 17-18 Controlling Sample/Conversion Operation ................................................................................................... 17-29 Specifying How Conversion Results are Written Into the Buffer .................................................................. 17-30 Conversion Sequence Examples ................................................................................................................. 17-31 A/D Sampling Requirements ........................................................................................................................ 17-45 Reading the A/D Result Buffer ..................................................................................................................... 17-46 Transfer Function ......................................................................................................................................... 17-47 A/D Accuracy/Error ...................................................................................................................................... 17-47 Connection Considerations .......................................................................................................................... 17-47 Initialization .................................................................................................................................................. 17-48 A/D Conversion Speeds ............................................................................................................................... 17-49 Operation During Sleep and Idle Modes ...................................................................................................... 17-55 Effects of a Reset ......................................................................................................................................... 17-55 Special Function Registers Associated with the 10-bit A/D Converter ......................................................... 17-56 Design Tips .................................................................................................................................................. 17-57 Related Application Notes ............................................................................................................................ 17-58 Revision History ........................................................................................................................................... 17-59
70046E-page viii
M
Table of Contents
PAGE
SECTION 18. 12-BIT A/D CONVERTER 18-1
Introduction .................................................................................................................................................... 18-2 Control Registers ........................................................................................................................................... 18-4 A/D Result Buffer ........................................................................................................................................... 18-4 A/D Terminology and Conversion Sequence ............................................................................................... 18-10 A/D Module Configuration ............................................................................................................................ 18-11 Selecting the Voltage Reference Source ..................................................................................................... 18-11 Selecting the A/D Conversion Clock ............................................................................................................ 18-12 Selecting Analog Inputs for Sampling .......................................................................................................... 18-12 Enabling the Module .................................................................................................................................... 18-14 How to Start Sampling ................................................................................................................................. 18-14 How to Stop Sampling and Start Conversions ............................................................................................. 18-14 Controlling Sample/Conversion Operation ................................................................................................... 18-19 Specifying How Conversion Results are Written into the Buffer .................................................................. 18-19 Conversion Sequence Examples ................................................................................................................. 18-21 A/D Sampling Requirements ........................................................................................................................ 18-26 Reading the A/D Result Buffer ..................................................................................................................... 18-27 Transfer Function ......................................................................................................................................... 18-28 A/D Accuracy/Error ...................................................................................................................................... 18-28 Connection Considerations .......................................................................................................................... 18-28 Initialization .................................................................................................................................................. 18-29 A/D Conversion Speeds ............................................................................................................................... 18-30 Operation During Sleep and Idle Modes ...................................................................................................... 18-33 Effects of a Reset ......................................................................................................................................... 18-33 Special Function Registers Associated with the 12-bit A/D Converter ......................................................... 18-34 Design Tips .................................................................................................................................................. 18-35 Related Application Notes ............................................................................................................................ 18-36 Revision History ........................................................................................................................................... 18-37
19-1
Introduction .................................................................................................................................................... 19-2 Control Registers ........................................................................................................................................... 19-3 UART Baud Rate Generator (BRG) ............................................................................................................... 19-8 UART Configuration ..................................................................................................................................... 19-10 UART Transmitter ........................................................................................................................................ 19-11 UART Receiver ............................................................................................................................................ 19-14 Using the UART for 9-bit Communication .................................................................................................... 19-18 Receiving Break Characters ........................................................................................................................ 19-19 Initialization .................................................................................................................................................. 19-20 Other Features of the UART ........................................................................................................................ 19-21 UART Operation During CPU Sleep and Idle Modes ................................................................................... 19-21 Registers Associated with UART Module ..................................................................................................... 19-22 Design Tips .................................................................................................................................................. 19-23 Related Application Notes ............................................................................................................................ 19-24 Revision History ........................................................................................................................................... 19-25
70046E-page ix
M
Table of Contents
PAGE
SECTION 20. SERIAL PERIPHERAL INTERFACE (SPI) 20-1
Introduction .................................................................................................................................................... 20-2 Status and Control Registers ......................................................................................................................... 20-4 Modes of Operation ........................................................................................................................................ 20-7 SPI Master Mode Clock Frequency .............................................................................................................. 20-19 Operation in Power Save Modes ................................................................................................................. 20-20 Special Function Registers Associated with SPI Modules ........................................................................... 20-22 Related Application Notes ............................................................................................................................ 20-23 Revision History ........................................................................................................................................... 20-24
21-1
Overview ........................................................................................................................................................ 21-2 I2C Bus Characteristics .................................................................................................................................. 21-4 Control and Status Registers ......................................................................................................................... 21-7 Enabling I2C Operation ................................................................................................................................ 21-13 Communicating as a Master in a Single Master Environment ...................................................................... 21-15 Communicating as a Master in a Multi-Master Environment ........................................................................ 21-29 Communicating as a Slave .......................................................................................................................... 21-32 Connection Considerations for I2C Bus ....................................................................................................... 21-47 Module Operation During PWRSAV Instruction ........................................................................................... 21-49 Effects of a Reset ......................................................................................................................................... 21-49 Design Tips .................................................................................................................................................. 21-50 Related Application Notes ............................................................................................................................ 21-51 Revision History ........................................................................................................................................... 21-52
22-1
Introduction .................................................................................................................................................... 22-2 Control Register Descriptions ......................................................................................................................... 22-2 Codec Interface Basics and Terminology ....................................................................................................... 22-8 DCI Operation .............................................................................................................................................. 22-10 Using the DCI Module .................................................................................................................................. 22-17 Operation in Power Saving Modes ............................................................................................................... 22-28 Registers Associated with DCI ..................................................................................................................... 22-28 Design Tips .................................................................................................................................................. 22-30 Related Application Notes ............................................................................................................................ 22-31 Revision History ........................................................................................................................................... 22-32
70046E-page x
M
Table of Contents
PAGE
SECTION 23. CAN MODULE 23-1
Introduction .................................................................................................................................................... 23-2 Control Registers for the CAN Module ........................................................................................................... 23-2 CAN Module Features .................................................................................................................................. 23-28 CAN Module Implementation ....................................................................................................................... 23-29 CAN Module Operation Modes .................................................................................................................... 23-36 Message Reception ..................................................................................................................................... 23-39 Transmission ................................................................................................................................................ 23-49 Error Detection ............................................................................................................................................. 23-58 CAN Baud Rate ............................................................................................................................................ 23-60 Interrupts ...................................................................................................................................................... 23-64 CAN Capture ................................................................................................................................................ 23-65 CAN Module I/O ........................................................................................................................................... 23-65 Operation in CPU Power Saving Modes ...................................................................................................... 23-66 CAN Protocol Overview ............................................................................................................................... 23-68 Related Application Notes ............................................................................................................................ 23-72 Revision History ........................................................................................................................................... 23-73
24-1
Introduction .................................................................................................................................................... 24-2 Device Configuration Registers ...................................................................................................................... 24-2 Configuration Bit Descriptions ........................................................................................................................ 24-6 Device Identification Registers ....................................................................................................................... 24-7 Related Application Notes .............................................................................................................................. 24-8 Revision History ............................................................................................................................................. 24-9
25-1
Introduction .................................................................................................................................................... 25-2 Microchip Hardware and Language Tools ...................................................................................................... 25-2 Third Party Hardware/Software Tools and Application Libraries ................................................................... 25-6 dsPIC30F Hardware Development Boards .................................................................................................. 25-11 Related Application Notes ............................................................................................................................ 25-15 Revision History ........................................................................................................................................... 25-16
26-1
70046E-page xi
M
Table of Contents
PAGE NOTES:
70046E-page xii
1
Introduction
Section 1. Introduction
HIGHLIGHTS
This section of the manual contains the following topics: 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Introduction .................................................................................................................... 1-2 Manual Objective ........................................................................................................... 1-2 Device Structure............................................................................................................. 1-3 Development Support .................................................................................................... 1-4 Style and Symbol Conventions ...................................................................................... 1-4 Related Documents ....................................................................................................... 1-6 Revision History ............................................................................................................. 1-7
DS70048C-page 1-1
Please request a Microchip Product Line Card for a listing of all the interesting products that we have to offer. This literature can be obtained from your local sales office, or downloaded from the Microchip web site (www.microchip.com).
1.2
Manual Objective
PICmicro and dsPIC30F devices are grouped by the size of their Instruction Word and Data Path. The current device families are: 1. 2. 3. 4. 5. Base-Line: Mid-Range: High-End: Enhanced: dsPIC30F: 12-bit Instruction Word length, 8-bit Data Path 14-bit Instruction Word length, 8-bit Data Path 16-bit Instruction Word length, 8-bit Data Path 16-bit Instruction Word length, 8-bit Data Path 24-bit Instruction Word length, 16-bit Data Path
This manual describes the dsPIC30F 16-bit MCU family of devices. This manual explains the operation of the dsPIC30F MCU family architecture and peripheral modules, but does not cover the specifics of each device. The user should refer to the data sheet for device specific information. The information that can be found in the data sheet includes: Device memory map Device pinout and packaging details Device electrical specifications List of peripherals included on the device
Code examples are given throughout this manual. These examples sometimes need to be written as device specific as opposed to family generic, though they are valid for most other devices. Some modifications may be required for devices with variations in register file mappings.
DS70048C-page 1-2
Section 1. Introduction
1
1.3 Device Structure
Introduction
Each part of the dsPIC30F device can be placed into one of three groups: 1. 2. 3. CPU Core System Integration Peripherals
1.3.1
CPU Core
The CPU core pertains to the basic features that are required to make the device operate. The sections of the manual related to the CPU core include: 1. 2. 3. 4. 5. CPU Data Memory Program Memory DSP Engine Interrupts
1.3.2
System Integration
System integration functions help to: Decrease system cost Increase system reliability Increase design flexibility The following sections of the manual discuss dsPIC30F system integration functions: 1. 2. 3. 4. 5. 6. Oscillator Reset Low Voltage Detect Watchdog Timer and Power Saving Modes Flash and EEPROM Programming Device Configuration
1.3.3
Peripherals
The dsPIC30F has many peripherals that allow the device to be interfaced to the external world. The peripherals discussed in this manual include: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. I/O Ports Timers Input Capture Module Output Compare Module Quadrature Encoder Interface (QEI) 10-bit A/D Converter 12-bit A/D Converter UART Module SPITM Module I2CTM Module Data Converter Interface (DCI) Module CAN Module
1.3.4
Memory Technology
At the time of this writing, all dsPIC30F devices use Flash program memory technology. The Flash program memory can be electrically erased or programmed.
DS70048C-page 1-3
A full description of each of Microchips development tools is discussed in Section 25. Development Tool Support. As new tools are developed, the latest product briefs and user guides can be obtained from the Microchip web site (www.microchip.com) or from your local Microchip Sales Office. Microchip offers other reference tools to speed the development cycle. These include: Application Notes Reference Designs Microchip web site Local Sales Offices with Field Application Support Corporate Support Line
The Microchip web site lists other sites that may be useful references.
1.5
DS70048C-page 1-4
Section 1. Introduction
1
1.5.1 Document Conventions
Introduction
Table 1-1 defines some of the symbols and terms used throughout this manual. Table 1-1: Document Conventions Description To force a bit/register to a value of logic 1. To force a bit/register to a value of logic 0. 1) To force a register/bit to its default state. 2) A condition in which the device places itself after a device Reset occurs. Some bits will be forced to 0 (such as interrupt enable bits), while others will be forced to 1 (such as the I/O data direction bits). Designates the number nn in the hexadecimal number system. These conventions are used in the code examples. For example, 0x13F or 13Fh. Designates the number bbbbbbbb in the binary number system. This convention is used in the text and in figures and tables. For example, B10100000. Read-Modify-Write. This is when a register or port is read, then the value is modified, and that value is then written back to the register or port. This action can occur from a single instruction (such as bit set, BSET), or a sequence of instructions. Used to specify a range or the concatenation of registers/bits/pins. One example is TMR3:TMR2, which is the concatenation of two 16-bit registers to form a 32-bit timer value. Concatenation order (left-right) usually specifies a positional relationship (MSb to LSb, higher to lower). Specifies bit(s) locations in a particular register. One example is PTCON<PTMOD1:PTMOD0> (or PTMOD<1:0>), which specifies the register and associated bits or bit positions. Indicates the Least Significant or Most Significant bit in a field. Indicates the Least/Most Significant Byte or Word in a field of bits. Used for code examples, binary numbers and for instruction mnemonics in the text. Used for equations and variables. Used in explanatory text for items called out from a graphic/ equation/example. A Note presents information that we wish to re-emphasize, either to help you avoid a common pitfall, or make you aware of operating differences between some device family members. A Note is always in a shaded box (as below), unless used in a table, where it is at the bottom of the table (as in this table). Note: This is a Note in a shaded note box.
0xnn or nnh
Bbbbbbbbb
R-M-W
: (colon)
<>
MSb, MSbit, LSb, LSbit MSByte, MSWord, LSByte, LSWord Courier Font Times Font Times, Bold Font, Italics Note
DS70048C-page 1-5
1.6
Related Documents
Microchip, as well as other sources, offers additional documentation which can aid in your development with dsPIC30F MCUs. These lists contain the most common documentation, but other documents may also be available. Please check the Microchip web site (www.microchip.com) for the latest published technical documentation.
1.6.1
Microchip Documentation
The following dsPIC30F documentation is available from Microchip at the time of this writing. Many of these documents provide application specific information that gives actual examples of using, programming and designing with dsPIC30F MCUs. 1. dsPIC30F Programmers Reference Manual (DS70030) The dsPIC30F Programmers Reference Manual provides information about the dsPIC30F programmers model and instruction set. A description of each instruction and syntax examples are provided in this document. 2. dsPIC30F Family Overview (DS70043) This document provides a summary of the available dsPIC30F family variants, including device pinouts, memory sizes and available peripherals. 3. dsPIC30F Data Sheets (DS70082 and DS70083) The data sheets contain device specific information, such as pinout and packaging details, electrical specifications and memory maps.
1.6.2
DS70048C-page 1-6
Section 1. Introduction
1
1.7 Revision History
Introduction
Revision A
This is the initial released revision of this document.
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
DS70048C-page 1-7
DS70048C-page 1-8
2
CPU
Section 2. CPU
HIGHLIGHTS
This section of the manual contains the following topics: 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 Introduction .................................................................................................................... 2-2 Programmers Model...................................................................................................... 2-4 Software Stack Pointer................................................................................................... 2-8 CPU Register Descriptions .......................................................................................... 2-11 Arithmetic Logic Unit (ALU).......................................................................................... 2-17 DSP Engine ................................................................................................................. 2-18 Divide Support ............................................................................................................. 2-27 Instruction Flow Types ................................................................................................. 2-27 Loop Constructs........................................................................................................... 2-30 Address Register Dependencies ................................................................................. 2-35 Register Maps .............................................................................................................. 2-38 Related Application Notes............................................................................................ 2-40 Revision History ........................................................................................................... 2-41
DS70049C-page 2-1
DS70049C-page 2-2
Section 2. CPU
2
Figure 2-1: dsPIC30F CPU Core Block Diagram
X Address Bus Y Data Bus X Data Bus 16 Interrupt Controller PSV & Table Data Access 24 Control Block 24 16 16 16 Data Latch X Data RAM (4 Kbytes) Address Latch 16
CPU
16
16
16
24
Address Latch Program Memory (144 Kbytes) Data EEPROM (4 Kbytes) Data Latch 16
PCU PCH PCL Program Counter Loop Stack Control Control Logic Logic
16
16 X RAGU X WAGU
Y AGU
16 ROM Latch
EA MUX
16 IR Literal Data
16
24
16
16 x 16 W Reg Array Instruction Decode & Control Control Signals to Various Blocks Timing Generation 16 16 Divide Support
16
Power-up Timer Oscillator Start-up Timer POR/BOR Reset Watchdog Timer Low Voltage Detect
DSP Engine
OSC1/CLKI
16-bit ALU 16 16
MCLR
CAN1, CAN2
I2C
I/O Ports
Timers
DCI
SPI1, SPI2
UART1, UART2
DS70049C-page 2-3
Register(s) Name W0 through W15 ACCA, ACCB PC SR SPLIM TBLPAG PSVPAG RCOUNT DCOUNT DOSTART DOEND CORCON
In addition to the registers contained in the programmers model, the dsPIC30F contains control registers for modulo addressing, bit-reversed addressing and interrupts. These registers are described in subsequent sections of this document. All registers associated with the programmers model are memory mapped, as shown in Table 2-8 on page 2-38.
DS70049C-page 2-4
Section 2. CPU
2
Figure 2-2: Programmers Model
15 0 W0 (WREG) W1 W2 W3 W4 DSP Operand Registers W5 W6 W7 W8 DSP Address Registers W9 W10 W11 W12 PUSH.S and POP.S Shadows W13 Frame Pointer/W14 Stack Ptr/W15 SPLIM 39 DSP Accumulators 22 ACCA ACCB ACCAU ACCBU 31 ACCAH ACCBH 0 0 7 TBLPAG 7 PSVPAG 15 RCOUNT 15 DCOUNT 22 DOSTART 22 DOEND SRH SB OAB SAB DA SRL DC IPL<2:0> 15 CORCON RA N OV 0 Core Control Register SZ C Status Register 0 0 0 0 DO Loop Start Address 0 DO Loop Counter 0 REPEAT Loop Counter 0 Program Space Visibility Page Address 0 Data Table Page Address 0 Stack Pointer Limit 15 ACCAL ACCBL 0 Working/Address Registers
CPU
Program Counter
OA
OB
SA
Note:
DCOUNT, DOSTART and DOEND have one level of shadow registers (not shown) for nested DO loops.
DS70049C-page 2-5
W0 and File Register Instructions W0 is a special working register because it is the only working register that can be used in file register instructions. File register instructions operate on a specific memory address contained in the instruction opcode and W0. W1-W15 cannot be specified as a target register in file register instructions. The file register instructions provide backward compatibility with existing PICmicro devices which have only one W register. The label WREG is used in the assembler syntax to denote W0 in a file register instruction. For example: MOV ADD Note: WREG,0x0100 0x0100,WREG ; move contents of W0 to address 0x0100 ; add W0 to address 0x0100, store in W0
For a complete description of Addressing modes and instruction syntax, please refer to the dsPIC30F Programmers Reference Manual (DS70032).
2.2.1.2
W Register Memory Mapping Since the W registers are memory mapped, it is possible to access a W register in a file register instruction as shown below: MOV 0x0004, W10 ; equivalent to MOV W2, W10 where 0x0004 is the address in memory of W2. Further, it is also possible to execute an instruction that will attempt to use a W register as both an address pointer and operand destination. For example: MOV where: W1 = 0x1234 W2 = 0x0004 ;[W2] addresses W2 W1,[W2++]
In the example above, the contents of W2 are 0x0004. Since W2 is used as an address pointer, it points to location 0x0004 in memory. W2 is also mapped to this address in memory. Even though this is an unlikely event, it is impossible to detect until run-time. The dsPIC30F ensures that the data write will dominate, resulting in W2 = 0x1234 in the example above. 2.2.1.3 W Registers and Byte Mode Instructions Byte instructions which target the W register array only affect the Least Significant Byte of the target register. Since the working registers are memory mapped, the Least and Most Significant Bytes can be manipulated through byte wide data memory space accesses.
2.2.2
Shadow Registers
Many of the registers in the programmers model have an associated shadow register as shown in Figure 2-2. None of the shadow registers are accessible directly. There are two types of shadow registers: those utilized by the PUSH.S and POP.S instructions and those utilized by the DO instruction.
DS70049C-page 2-6
Section 2. CPU
2
2.2.2.1 PUSH.S and POP.S Shadow Registers The PUSH.S and POP.S instructions are useful for fast context save/restore during a function call or Interrupt Service Routine (ISR). The PUSH.S instruction will transfer the following register values into their respective shadow registers: W0...W3 SR (N, OV, Z , C, DC bits only) The POP.S instruction will restore the values from the shadow registers into these register locations. A code example using the PUSH.S and POP.S instructions is shown below: MyFunction: PUSH.S MOV ADD BTSC BSET POP.S RETURN ; #0x03,W0 ; RAM100 ; SR,#Z ; Flags,#IsZero ; ; Save W registers, MCU status load a literal value into W0 add W0 to contents of RAM100 is the result 0? Yes, set a flag Restore W regs, MCU status
CPU
The PUSH.S instruction will overwrite the contents previously saved in the shadow registers. The shadow registers are only one level in depth, so care must be taken if the shadow registers are to be used for multiple software tasks. The user must ensure that any task using the shadow registers will not be interrupted by a higher priority task that also uses the shadow registers. If the higher priority task is allowed to interrupt the lower priority task, the contents of the shadow registers saved in the lower priority task will be overwritten by the higher priority task. 2.2.2.2 DO Loop Shadow Registers The following registers are automatically saved in shadow registers when a DO instruction is executed: DOSTART DOEND DCOUNT The DO shadow registers are one level in depth, permitting two loops to be automatically nested. Refer to Section 2.9.2.2 DO Loop Nesting for further details.
2.2.3
DS70049C-page 2-7
W15 is initialized to 0x0800 during all Resets. This address ensures that the stack pointer (SP) will point to valid RAM in all dsPIC30F devices and permits stack availability for non-maskable trap exceptions, which may occur before the SP is initialized by the user software. The user may reprogram the SP during initialization to any location within data space. The stack pointer always points to the first available free word and fills the software stack working from lower towards higher addresses. It pre-decrements for a stack pop (read) and post-increments for a stack push (writes), as shown in Figure 2-3. When the PC is pushed onto the stack, PC<15:0> is pushed onto the first available stack word, then PC<22:16> is pushed into the second available stack location. For a PC push during any CALL instruction, the MSByte of the PC is zero-extended before the push as shown in Figure 2-3. During exception processing, the MSByte of the PC is concatenated with the lower 8 bits of the CPU status register, SR. This allows the contents of SRL to be preserved automatically during interrupt processing. Figure 2-3: Stack Operation for a CALL Instruction 15 Stack Grows Towards Higher Address 0
CALL
SUBR
DS70049C-page 2-8
Section 2. CPU
2
2.3.1 Software Stack Examples
The software stack is manipulated using the PUSH and POP instructions. The PUSH and POP instructions are the equivalent of a MOV instruction with W15 used as the destination pointer. For example, the contents of W0 can be pushed onto the stack by: PUSH W0 This syntax is equivalent to: MOV W0,[W15++] The contents of the top-of-stack can be returned to W0 by: POP W0 This syntax is equivalent to: MOV [--W15],W0 Figure 2-4 through Figure 2-7 show examples of how the software stack is used. Figure 2-4 shows the software stack at device initialization. W15 has been initialized to 0x0800. Furthermore, this example assumes the values 0x5A5A and 0x3636 have been written to W0 and W1, respectively. The stack is pushed for the first time in Figure 2-5 and the value contained in W0 is copied to the stack. W15 is automatically updated to point to the next available stack location (0x0802). In Figure 2-6, the contents of W1 are pushed onto the stack. In Figure 2-7, the stack is popped and the top-of-stack value (previously pushed from W1) is written to W3. Figure 2-4: Stack Pointer at Device Reset 0x0000 W15 0x0800
CPU
0xFFFE W15 = 0x0800 W0 = 0x5A5A W1 = 0x3636 Figure 2-5: Stack Pointer After the First PUSH Instruction 0x0000 0x5A5A W15 0x0800 0x0802 PUSH W0
0xFFFE W15 = 0x0802 W0 = 0x5A5A W1 = 0x3636 Figure 2-6: Stack Pointer After the Second PUSH Instruction 0x0000 0x5A5A 0x3636 W15 0x0800 0x0802 0x0804 0xFFFE W15 = 0x0804 W0 = 0x5A5A W1 = 0x3636 PUSH W1
DS70049C-page 2-9
2.3.2
2.3.3
If stack overflow checking has been enabled, a stack error trap will also occur if the W15 effective address calculation wraps over the end of data space (0xFFFF). Note: A write to the Stack Pointer Limit register, SPLIM, should not be followed by an indirect read operation using W15.
Refer to Section 6. Reset Interrupts for more information on the stack error trap.
2.3.4
DS70049C-page 2-10
Section 2. CPU
2
2.4 2.4.1 CPU Register Descriptions SR: CPU Status Register
CPU
The dsPIC30F CPU has a 16-bit status register (SR), the LSByte of which is referred to as the lower status register (SRL). The upper byte of SR is referred to as SRH. A detailed description of SR is shown in Register 2-1. SRL contains all the MCU ALU operation status flags, plus the CPU interrupt priority status bits, IPL<2:0> and the REPEAT loop active status bit, RA (SR<4>). During exception processing, SRL is concatenated with the MSByte of the PC to form a complete word value, which is then stacked. SRH contains the DSP Adder/Subtractor status bits, the DO loop active bit, DA (SR<9>) and the Digit Carry bit, DC (SR<8>). The SR bits are readable/writable with the following exceptions: 1. 2. 3. 4. The DA bit (SR<8>): DA is a read only bit. The RA bit (SR<4>): RA is a read only bit. The OA, OB (SR<15:14>) and OAB (SR<11>) bits: These bits are read only and can only be modified by the DSP engine hardware. The SA, SB (SR<13:12>) and SAB (SR<10>) bits: These are read and clear only and can only be set by the DSP engine hardware. Once set, they remain set until cleared by the user, irrespective of the results from any subsequent DSP operations. Note: Clearing the SAB bit will also clear both the SA and SB bits.
Note:
A description of the SR bits affected by each instruction is provided in the dsPIC30F Programmers Reference Manual (DS70030).
2.4.2
DS70049C-page 2-11
R/W-0(2)
R-0 RA
R/W-0 N
R/W-0 OV
R/W-0 Z
R/W-0 C bit 0
OA: Accumulator A Overflow Status bit 1 = Accumulator A overflowed 0 = Accumulator A has not overflowed OB: Accumulator B Overflow Status bit 1 = Accumulator B overflowed 0 = Accumulator B has not overflowed SA: Accumulator A Saturation Sticky Status bit 1 = Accumulator A is saturated or has been saturated at some time 0 = Accumulator A is not saturated Note: This bit may be read or cleared (not set). SB: Accumulator B Saturation Sticky Status bit 1 = Accumulator B is saturated or has been saturated at some time 0 = Accumulator B is not saturated Note: This bit may be read or cleared (not set). OAB: OA || OB Combined Accumulator Overflow Status bit 1 = Accumulators A or B have overflowed 0 = Neither Accumulators A or B have overflowed SAB: SA || SB Combined Accumulator Sticky Status bit 1 = Accumulators A or B are saturated or have been saturated at some time in the past 0 = Neither Accumulator A or B are saturated Note: This bit may be read or cleared (not set). Clearing this bit will clear SA and SB. DA: DO Loop Active bit 1 = DO loop in progress 0 = DO loop not in progress DC: MCU ALU Half Carry/Borrow bit 1 = A carry-out from the 4th low order bit (for byte-sized data) or 8th low order bit (for word-sized data) of the result occurred 0 = No carry-out from the 4th low order bit (for byte-sized data) or 8th low order bit (for word-sized data) of the result occurred
bit 14
bit 13
bit 12
bit 11
bit 10
bit 9
bit 8
DS70049C-page 2-12
Section 2. CPU
2
Register 2-1: bit 7-5 SR: CPU Status Register (Continued) IPL<2:0>: CPU Interrupt Priority Level Status bits(1) 111 = CPU Interrupt Priority Level is 7 (15). User interrupts disabled. 110 = CPU Interrupt Priority Level is 6 (14) 101 = CPU Interrupt Priority Level is 5 (13) 100 = CPU Interrupt Priority Level is 4 (12) 011 = CPU Interrupt Priority Level is 3 (11) 010 = CPU Interrupt Priority Level is 2 (10) 001 = CPU Interrupt Priority Level is 1 (9) 000 = CPU Interrupt Priority Level is 0 (8) Note 1: The IPL<2:0> bits are concatenated with the IPL<3> bit (CORCON<3>) to form the CPU Interrupt Priority Level. The value in parentheses indicates the IPL if IPL<3> = 1. User interrupts are disabled when IPL<3> = 1. 2: The IPL<2:0> status bits are read only when NSTDIS = 1 (INTCON1<15>). bit 4 RA: REPEAT Loop Active bit 1 = REPEAT loop in progress 0 = REPEAT loop not in progress N: MCU ALU Negative bit 1 = Result was negative 0 = Result was non-negative (zero or positive) OV: MCU ALU Overflow bit This bit is used for signed arithmetic (2s complement). It indicates an overflow of the magnitude which causes the sign bit to change state. 1 = Overflow occurred for signed arithmetic (in this arithmetic operation) 0 = No overflow occurred Z: MCU ALU Zero bit 1 = An operation which effects the Z bit has set it at some time in the past 0 = The most recent operation which effects the Z bit has cleared it (i.e., a non-zero result) C: MCU ALU Carry/Borrow bit 1 = A carry-out from the Most Significant bit of the result occurred 0 = No carry-out from the Most Significant bit of the result occurred Legend: R = Readable bit C = Clear only bit 1 = Bit is set W = Writable bit S = Set only bit 0 = Bit is cleared U = Unimplemented bit, read as 0 -n = Value at POR x = Bit is unknown
CPU
bit 3
bit 2
bit 1
bit 0
DS70049C-page 2-13
R/W-0 SATB
R/W-1 SATDW
R/W-0 ACCSAT
R/C-0 IPL3
R/W-0 PSV
R/W-0 RND
R/W-0 IF bit 0
bit 15-13 Unimplemented: Read as '0 bit 12 US: DSP Multiply Unsigned/Signed Control bit 1 = DSP engine multiplies are unsigned 0 = DSP engine multiplies are signed EDT: Early DO Loop Termination Control bit 1 = Terminate executing DO loop at end of current loop iteration 0 = No effect Note: bit 10-8 This bit will always read as 0. DL<2:0>: DO Loop Nesting Level Status bits 111 = 7 DO loops active 001 = 1 DO loop active 000 = 0 DO loops active SATA: AccA Saturation Enable bit 1 = Accumulator A saturation enabled 0 = Accumulator A saturation disabled SATB: AccB Saturation Enable bit 1 = Accumulator B saturation enabled 0 = Accumulator B saturation disabled SATDW: Data Space Write from DSP Engine Saturation Enable bit 1 = Data space write saturation enabled 0 = Data space write saturation disabled ACCSAT: Accumulator Saturation Mode Select bit 1 = 9.31 saturation (super saturation) 0 = 1.31 saturation (normal saturation) IPL3: CPU Interrupt Priority Level Status bit 3 1 = CPU interrupt priority level is greater than 7 0 = CPU interrupt priority level is 7 or less Note: The IPL3 bit is concatenated with the IPL<2:0> bits (SR<7:5>) to form the CPU interrupt priority level.
bit 11
bit 7
bit 6
bit 5
bit 4
bit 3
DS70049C-page 2-14
Section 2. CPU
2
Register 2-2: bit 2 CORCON: Core Control Register (Continued) PSV: Program Space Visibility in Data Space Enable bit 1 = Program space visible in data space 0 = Program space not visible in data space RND: Rounding Mode Select bit 1 = Biased (conventional) rounding enabled 0 = Unbiased (convergent) rounding enabled IF: Integer or Fractional Multiplier Mode Select bit 1 = Integer mode enabled for DSP multiply ops 0 = Fractional mode enabled for DSP multiply ops Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared C = Bit can be cleared x = Bit is unknown
CPU
bit 1
bit 0
DS70049C-page 2-15
DS70049C-page 2-16
Section 2. CPU
2
2.5 Arithmetic Logic Unit (ALU)
The dsPIC30F ALU is 16-bits wide and is capable of addition, subtraction, single bit shifts and logic operations. Unless otherwise mentioned, arithmetic operations are 2s complement in nature. Depending on the operation, the ALU may affect the values of the Carry (C), Zero (Z), Negative (N), Overflow (OV) and Digit Carry (DC) status bits in the SR register. The C and DC status bits operate as a Borrow and Digit Borrow bits, respectively, for subtraction operations. The ALU can perform 8-bit or 16-bit operations, depending on the mode of the instruction that is used. Data for the ALU operation can come from the W register array or data memory depending on the Addressing mode of the instruction. Likewise, output data from the ALU can be written to the W register array or a data memory location. Refer to the dsPIC30F Programmers Reference Manual (DS70030) for information on the SR bits affected by each instruction, Addressing modes and 8-bit/16-bit Instruction modes. Note 1: Byte operations use the 16-bit ALU and can produce results in excess of 8 bits. However, to maintain backward compatibility with PICmicro devices, the ALU result from all byte operations is written back as a byte (i.e., MSByte not modified), and the SR register is updated based only upon the state of the LSByte of the result. 2: All register instructions performed in Byte mode only affect the LSByte of the W registers. The MSByte of any W register can be modified by using file register instructions that access the memory mapped contents of the W registers.
CPU
2.5.1
DS70049C-page 2-17
Data input to the DSP engine is derived from one of the following sources: 1. Directly from the W array (registers W4, W5, W6 or W7) for dual source operand DSP instructions. Data values for the W4, W5, W6 and W7 registers are pre-fetched via the X and Y memory data buses. From the X memory data bus for all other DSP instructions.
2.
Data output from the DSP engine is written to one of the following destinations: 1. 2. The target accumulator, as defined by the DSP instruction being executed. The X memory data bus to any location in the data memory address space.
The DSP engine has the capability to perform inherent accumulator to accumulator operations which require no additional data. The MCU shift and multiply instructions use the DSP engine hardware to obtain their results. The X memory data bus is used for data reads and writes in these operations. A block diagram of the DSP engine is shown in Figure 2-8. Note: For detailed code examples and instruction syntax related to this section, refer to the dsPIC30F Programmers Reference Manual (DS70030).
DS70049C-page 2-18
Section 2. CPU
2
Figure 2-8: DSP Engine Block Diagram
CPU
40
Saturation Logic
Round Logic
40
16
40
40
40
Barrel Shifter
16
Sign-Extend
Y Data Bus
32 Zero Backfill 32 32
16
To/From W Array
DS70049C-page 2-19
X Data Bus
40
2.6.2
Multiplier
The dsPIC30F features a 17-bit x 17-bit multiplier which is shared by both the MCU ALU and the DSP engine. The multiplier is capable of signed or unsigned operation and can support either 1.31 fractional (Q.31) or 32-bit integer results. The multiplier takes in 16-bit input data and converts the data to 17-bits. Signed operands to the multiplier are sign-extended. Unsigned input operands are zero-extended. The 17-bit conversion logic is transparent to the user and allows the multiplier to support mixed sign and unsigned/unsigned multiplication. The IF control bit (CORCON<0>) determines integer/fractional operation for the instructions listed in Table 2-3. The IF bit does not affect MCU multiply instructions listed in Table 2-4, which are always integer operations. The multiplier scales the result one bit to the left for fractional operation. The LSbit of the result is always cleared. The multiplier defaults to Fractional mode for DSP operations at a device Reset. The representation of data in hardware for each of these modes is as follows: Integer data is inherently represented as a signed twos complement value, where the MSbit is defined as a sign bit. Generally speaking, the range of an N-bit twos complement integer is -2N-1 to 2N-1 1. Fractional data is represented as a twos complement fraction where the MSbit is defined as a sign bit and the radix point is implied to lie just after the sign bit (Q.X format). The range of an N-bit twos complement fraction with this implied radix point is -1.0 to (1 21-N). Figure 2-9 and Figure 2-10 illustrate how the multiplier hardware interprets data in Integer and Fractional modes. The range of data in both Integer and Fractional modes is listed in Table 2-2.
DS70049C-page 2-20
Section 2. CPU
2
Figure 2-9: Integer and Fractional Representation of 0x4001
Different Representations of 0x4001
CPU
2-1
Figure 2-10:
0 2
-3
0 ...
0 2-15
-2
Implied Radix Point 0xC002 = -20 + 2-1 + 2-14 = -1 + 0.5 + 0.000061035 = -0.499938965
DS70049C-page 2-21
2.6.2.1
DSP Multiply Instructions The DSP instructions that utilize the multiplier are summarized in Table 2-3. Table 2-3: DSP Instructions that Utilize the Multiplier Description Multiply and Add to Accumulator OR Square and Add to Accumulator Multiply and Subtract from Accumulator Multiply Multiply and Negate Result Partial Euclidean Distance Add Partial Euclidean Distance to the Accumulator Algebraic Equivalent a = a + b*c a = a + b2 a = a b*c a = b*c a = -b*c a = (b c)2 a = a + (b c)2
DSP instructions using the multiplier can operate in Fractional (1.15) or Integer modes.
The US control bit (CORCON<12>) determines whether DSP multiply instructions are signed (default) or unsigned. The US bit does not influence the MCU multiply instructions which have specific instructions for signed or unsigned operation. If the US bit is set, the input operands for instructions shown in Table 2-3 are considered as unsigned values which are always zero-extended into the 17th bit of the multiplier value. 2.6.2.2 MCU Multiply Instructions The same multiplier is used to support the MCU multiply instructions, which include integer 16-bit signed, unsigned and mixed sign multiplies as shown in Table 2-4. All multiplications performed by the MUL instruction produce integer results. The MUL instruction may be directed to use byte or word sized operands. Byte input operands will produce a 16-bit result and word input operands will produce a 32-bit result to the specified register(s) in the W array. Table 2-4: MCU Instructions that Utilize the Multiplier Description Multiply two unsigned integers Multiply two signed integers Multiply a signed integer with an unsigned integer
Note 1: MCU instructions using the multiplier operate only in Integer mode. 2: Result of an MCU multiply is 32-bits long and is stored in a pair of W registers.
DS70049C-page 2-22
Section 2. CPU
2
2.6.3 Data Accumulator Adder/Subtractor
The data accumulators have a 40-bit adder/subtractor with automatic sign extension logic for the multiplier result (if signed). It can select one of two accumulators (A or B) as its pre-accumulation source and post-accumulation destination. For the ADD (accumulator) and LAC instructions, the data to be accumulated or loaded can optionally be scaled via the barrel shifter prior to accumulation. The 40-bit adder/subtractor may optionally negate one of its operand inputs to change the sign of the result (without changing the operands). The negate is used during multiply and subtract (MSC), or multiply and negate (MPY.N) operations. The 40-bit adder/subtractor has an additional saturation block which controls accumulator data saturation, if enabled. 2.6.3.1 Accumulator Status Bits Six Status register bits have been provided to support saturation and overflow. They are located in the CPU Status register, SR, and are listed below: Table 2-5: Status Bit OA OB SA Accumulator Overflow and Saturation Status Bits Location SR<15> SR<14> SR<13> Description Accumulator A overflowed into guard bits (ACCA<39:32>) Accumulator B overflowed into guard bits(ACCB<39:32>) ACCA saturated (bit 31 overflow and saturation) or ACCA overflowed into guard bits and saturated (bit 39 overflow and saturation) ACCB saturated (bit 31 overflow and saturation) or ACCB overflowed into guard bits and saturated (bit 39 overflow and saturation) OA logically ORed with OB SA logically ORed with SB. Clearing SAB will also clear SA and SB.
CPU
SB
SR<12>
OAB SAB
SR<11> SR<10>
The OA and OB bits are read only and are modified each time data passes through the accumulator add/subtract logic. When set, they indicate that the most recent operation has overflowed into the accumulator guard bits (bits 32 through 39). This type of overflow is not catastrophic; the guard bits preserve the accumulator data. The OAB status bit is the logically ORed value of OA and OB. The OA and OB bits, when set, can optionally generate an arithmetic error trap. The trap is enabled by setting the corresponding overflow trap flag enable bit OVATE:OVBTE (INTCON1<10:9>). The trap event allows the user to take immediate corrective action, if desired. The SA and SB bits can be set each time data passes through the accumulator saturation logic. Once set, these bits remain set until cleared by the user. The SAB status bit indicates the logically ORed value of SA and SB. The SA and SB bits will be cleared when SAB is cleared. When set, these bits indicate that the accumulator has overflowed its maximum range (bit 31 for 32-bit saturation or bit 39 for 40-bit saturation) and will be saturated (if saturation is enabled). When saturation is not enabled, the SA and SB bits indicate that a catastrophic overflow has occurred (the sign of the accumulator has been destroyed). If the COVTE (INTCON1<8>) bit is set, SA and SB bits will generate an arithmetic error trap when saturation is disabled. Note: See Section 6. Reset Interrupts for further information on arithmetic warning traps. The user must remember that SA, SB and SAB status bits can have different meanings depending on whether accumulator saturation is enabled. The Accumulator Saturation mode is controlled via the CORCON register.
Note:
DS70049C-page 2-23
Note that accumulator saturation and overflow detection can only result from the execution of a DSP instruction that modifies one of the two accumulators via the 40-bit DSP ALU. Saturation and overflow detection will not take place when the accumulators are accessed as memory mapped registers via MCU class instructions. Furthermore, the accumulator status bits shown in Table 2-5 will not be modified. However, the MCU status bits (Z, N, C, OV, DC) will be modified depending on the MCU instruction that accesses the accumulator. Note: 2.6.3.3 See Section 6. Reset Interrupts for further information on arithmetic error traps.
Data Space Write Saturation In addition to adder/subtractor saturation, writes to data space can be saturated without affecting the contents of the source accumulator. This feature allows data to be limited while not sacrificing the dynamic range of the accumulator during intermediate calculation stages. Data space write saturation is enabled by setting the SATDW control bit (CORCON<5>). Data space write saturation is enabled by default at a device Reset. The data space write saturation feature works with the SAC and SAC.R instructions. The value held in the accumulator is never modified when these instructions are executed. The hardware takes the following steps to obtain the saturated write result: 1. 2. 3. The read data is scaled based upon the arithmetic shift value specified in the instruction. The scaled data is rounded (SAC.R only). The scaled/rounded value is saturated to a 16-bit result based on the value of the guard bits. For data values greater than 0x007FFF, the data written to memory is saturated to the maximum positive 1.15 value, 0x7FFF. For input data less than 0xFF8000, data written to memory is saturated to the maximum negative 1.15 value, 0x8000.
DS70049C-page 2-24
Section 2. CPU
2
2.6.3.4 Accumulator Write Back The MAC and MSC instructions can optionally write a rounded version of the accumulator that is not the target of the current operation into data space memory. The write is performed across the X-bus into combined X and Y address space. This accumulator write back feature is beneficial in certain FFT and LMS algorithms. The following Addressing modes are supported by the accumulator write back hardware: 1. W13, register direct: The rounded contents of the non-target accumulator are written into W13 as a 1.15 fractional result. [W13]+=2, register indirect with post-increment: The rounded contents of the non-target accumulator are written into the address pointed to by W13 as a 1.15 fraction. W13 is then incremented by 2.
CPU
2.
2.6.4
Round Logic
The round logic can perform a conventional (biased) or convergent (unbiased) round function during an accumulator write (store). The Round mode is determined by the state of the RND (CORCON<1>) bit. It generates a 16-bit, 1.15 data value, which is passed to the data space write saturation logic. If rounding is not indicated by the instruction, a truncated 1.15 data value is stored. The two Rounding modes are shown in Figure 2-11. Conventional rounding takes bit 15 of the accumulator, zero-extends it and adds it to the MSWord excluding the guard or overflow bits (bits 16 through 31). If the LSWord of the accumulator is between 0x8000 and 0xFFFF (0x8000 included), the MSWord is incremented. If the LSWord of the accumulator is between 0x0000 and 0x7FFF, the MSWord is left unchanged. A consequence of this algorithm is that over a succession of random rounding operations, the value will tend to be biased slightly positive. Convergent (or unbiased) rounding operates in the same manner as conventional rounding except when the LSWord equals 0x8000. If this is the case, the LSbit of the MSWord (bit 16 of the accumulator) is examined. If it is 1, the MSWord is incremented. If it is 0, the MSWord is not modified. Assuming that bit 16 is effectively random in nature, this scheme will remove any rounding bias that may accumulate. The SAC and SAC.R instructions store either a truncated (SAC) or rounded (SAC.R) version of the contents of the target accumulator to data memory via the X-bus (subject to data saturation, see Section 2.6.3.3 Data Space Write Saturation). Note that for the MAC class of instructions, the accumulator write back data path is always subject to rounding.
Figure 2-11:
Round Up (add 1 to MSWord) when: 1. LSWord = 0x8000 and bit 16 = 1 2. LSWord > 0x8000
16 15 MSWord
0 MSWord
16 15
Round Down (add nothing) when: 1. LSWord = 0x8000 and bit 16 = 0 2. LSWord < 0x8000
DS70049C-page 2-25
2.6.6
2.6.7
DS70049C-page 2-26
Section 2. CPU
2
2.7 Divide Support
The dsPIC30F supports the following types of division operations: DIVF: 16/16 signed fractional divide DIV.SD: 32/16 signed divide DIV.UD: 32/16 unsigned divide DIV.SW: 16/16 signed divide DIV.UW: 16/16 unsigned divide
CPU
The quotient for all divide instructions is placed in W0, and the remainder in W1. The 16-bit divisor can be located in any W register. A 16-bit dividend can be located in any W register and a 32-bit dividend must be located in an adjacent pair of W registers. All divide instructions are iterative operations and must be executed 18 times within a REPEAT loop. The user is responsible for programming the REPEAT instruction. A complete divide operation takes 19 instruction cycles to execute. The divide flow is interruptible, just like any other REPEAT loop. All data is restored into the respective data registers after each iteration of the loop, so the user will be responsible for saving the appropriate W registers in the ISR. Although they are important to the divide hardware, the intermediate values in the W registers have no meaning to the user. The divide instructions must be executed 18 times in a REPEAT loop to produce a meaningful result. Refer to the dsPIC30F Programmers Reference Manual (DS70030) for more information and programming examples for the divide instructions.
2.8
Figure 2-12:
Instruction Flow 1-Word, 1-Cycle TCY0 TCY1 Execute 1 Fetch 2 Execute 2 Fetch 3 1 Instruction Word, 2 Instruction Cycles: In these instructions, there is no pre-fetch flush. The only instructions of this type are the MOV.D instructions (load and store double-word). Two cycles are required to complete these instructions, as shown in Figure 2-13. Execute 3 TCY2 TCY3 TCY4 TCY5
Fetch 1
Figure 2-13:
Instruction Flow 1-Word, 2-Cycle (MOV.D Operation) TCY0 TCY1 Execute 1 Fetch 2 Execute 2 R/W Cycle 1 Fetch 3 Execute 2 R/W Cycle2 No Fetch Execute 3 Fetch 4 Execute 4 TCY2 TCY3 TCY4 TCY5
Fetch 1
4. MOV
#0x00CC,W0
DS70049C-page 2-27
Three cycles will be taken when a two-word instruction is skipped. In this case, the program memory pre-fetch data is discarded and the second word of the two-word instruction is fetched. The second word of the instruction will be executed as a NOP, as shown in Figure 2-15. Figure 2-15: Instruction Flow 1-Word, 3-Cycle (2-Word Instruction Skipped) TCY0 1. BTSC 2. GOTO SR,#Z LABEL Fetch 1 TCY1 Execute 1, Skip Taken Fetch 2 Forced NOP Fetch 2nd word of GOTO 2nd word executed as a NOP Fetch 3 Execute 3 Fetch 4 Execute 4 TCY2 TCY3 TCY4 TCY5
3. BCLR 4. MOV
PORTB,#3 W0,W1
4.
1 Instruction Word, 3 Instruction Cycles (RETFIE, RETURN, RETLW): The RETFIE, RETURN and RETLW instructions, that are used to return from a subroutine call or an Interrupt Service Routine, take 3 instruction cycles to execute, as shown in Figure 2-16.
Figure 2-16:
Instruction Flow 1-Word, 3-Cycle (RETURN, RETFIE, RETLW) TCY0 TCY1 Execute 1 Fetch 2 Execute 2 Fetch 3 Execute 2 No Fetch Execute 2 Fetch 4 Execute 4 Fetch 5 TCY2 TCY3 TCY4 TCY5
1. MOV
#0x55AA,W0
Fetch 1
DS70049C-page 2-28
Section 2. CPU
2
5. Table Read/Write Instructions: These instructions will suspend fetching to insert a read or write cycle to the program memory. The instruction fetched while executing the table operation is saved for 1 cycle and executed in the cycle immediately after the table operation as shown in Figure 2-17. Figure 2-17: Instruction Pipeline Flow Table Operations TCY0 1. MOV #0x1234,W0 2. TBLRDL.w [W0++],W1 3. MOV #0x00AA,W1 Fetch 1 TCY1 Execute 1 Fetch 2 Execute 2 Fetch 3 PM Data Read Cycle Bus Read 4. MOV #0x00CC,W0 Execute 3 Fetch 4 Execute 4 TCY2 TCY3 TCY4 TCY5
CPU
6.
2 Instruction Words, 2 Instruction Cycles: In these instructions, the fetch after the instruction contains data. This results in a 2-cycle instruction as shown in Figure 2-18. The second word of a two-word instruction is encoded so that it will be executed as a NOP, should it be fetched by the CPU without first fetching the first word of the instruction. This is important when a two-word instruction is skipped by a skip instruction (see Figure 2-15).
Figure 2-18:
Instruction Pipeline Flow 2-Word, 2-Cycle TCY0 TCY1 Execute 1 Fetch 2L Update PC Fetch 2H Forced NOP Fetch 3 Execute 3 Fetch 4 Execute 4 TCY2 TCY3 TCY4 TCY5
Fetch 1
7.
Address Register Dependencies: These are instructions that are subjected to a stall due to a data address dependency between the X-data space read and write operations. An additional cycle is inserted to resolve the resource conflict as discussed in Section 2.10 Address Register Dependencies.
Figure 2-19:
Instruction Pipeline Flow 1-Word, 1-Cycle (With Instruction Stall) TCY0 TCY1 Execute 1 Fetch 2 Execute 1 Stall Execute 2 Fetch 3 Execute 3 TCY2 TCY3 TCY4 TCY5
Fetch 1
DS70049C-page 2-29
2.9.1
2.9.1.1
Repeat Operation The loop count for Repeat operations is held in the 14-bit RCOUNT register, which is memory mapped. RCOUNT is initialized by the REPEAT instruction. The REPEAT instruction sets the Repeat Active, or RA (SR<4>) status bit to 1, if the RCOUNT is a non-zero value. RA is a read only bit and cannot be modified through software. For repeat loop count values greater than 0, the PC is not incremented. Further PC increments are inhibited until RCOUNT = 0. See Figure 2-20 for an instruction flow example of a Repeat loop. For a loop count value equal to 0, REPEAT has the effect of a NOP and the RA (SR<4>) bit is not set. The Repeat loop is essentially disabled before it begins, allowing the target instruction to execute only once while pre-fetching the subsequent instruction (i.e., normal execution flow). Note: The instruction immediately following the REPEAT instruction (i.e., the target instruction) is always executed at least one time. It is always executed one time more than the value specified in the 14-bit literal or the W register operand.
Figure 2-20:
REPEAT Instruction Pipeline Flow TCY0 TCY1 Execute 1 Fetch 2 Execute 2 No Fetch Execute 2 No Fetch Execute 2 Fetch 3 PC X 0 PC+2 2 1 PC+2 1 1 PC+2 0 0 PC+4 0 0 Execute 3 PC+6 0 0 TCY2 TCY3 TCY4 TCY5
1.REPEAT #0x2
Fetch 1
2.MAC W4*W5,A,[W8]+=2,W4
3.BSET
PORTA,#3
PC (at end of instruction) RCOUNT (at end of instruction) RA (at end of instruction)
DS70049C-page 2-30
Section 2. CPU
2
2.9.1.2 Interrupting a REPEAT Loop A REPEAT instruction loop may be interrupted at any time. The RA state is preserved on the stack during exception processing to allow the user to execute further REPEAT loops from within (any number) of nested interrupts. After SRL is stacked, the RA status bit is cleared to restore normal execution flow within the ISR. Note: If a Repeat loop has been interrupted and an ISR is being processed, the user must stack the RCOUNT (Repeat Count register) prior to executing another REPEAT instruction within an ISR.
CPU
Note: If Repeat was used within an ISR, the user must unstack RCOUNT prior to executing RETFIE. Returning into a Repeat loop from an ISR using RETFIE requires no special handling. Interrupts will pre-fetch the repeated instruction during the third cycle of the RETFIE. The stacked RA bit will be restored when the SRL register is popped and, if set, the interrupted Repeat loop will be resumed. Note: Should the repeated instruction (target instruction in the Repeat loop) be accessing data from PS using PSV, the first time it is executed after a return from an exception will require 2 instruction cycles. Similar to the first iteration of a loop, timing limitations will not allow the first instruction to access data residing in PS in a single instruction cycle.
2.9.1.2.1
Early Termination of a Repeat Loop An interrupted Repeat loop can be terminated earlier than normal in the ISR by clearing the RCOUNT register in software.
2.9.1.3
Restrictions on the REPEAT Instruction Any instruction can immediately follow a REPEAT except for the following: 1. 2. 3. 4. Program Flow Control instructions (any branch, compare and skip, subroutine calls, returns, etc.). Another REPEAT or DO instruction. DISI, ULNK, LNK, PWRSAV, RESET. MOV.D instruction. Note: There are some instructions and/or Instruction Addressing modes that can be executed within a Repeat loop, but make little sense when repeated.
DS70049C-page 2-31
The following features are provided in the DO loop construct: A W register can be used to specify the loop count. This allows the loop count to be defined at run-time. The instruction execution order need not be sequential (i.e., there can be branches, subroutine calls, etc.). The loop end address does not have to be greater than the start address. 2.9.2.1 DO Loop Registers and Operation The number of iterations executed by a DO loop will be the (14-bit literal value +1) or the (Wn value + 1). If a W register is used to specify the number of iterations, the two MSbits of the W register are not used to specify the loop count. The operation of a DO loop is similar to the do-while construct in the C programming language because the instructions in the loop will always be executed at least once. The dsPIC30F has three registers associated with DO loops: DOSTART, DOEND and DCOUNT. These registers are memory mapped and automatically loaded by the hardware when the DO instruction is executed. DOSTART holds the starting address of the DO loop while DOEND holds the end address of the DO loop. The DCOUNT register holds the number of iterations to be executed by the loop. DOSTART and DOEND are 22-bit registers that hold the PC value. The MSbits and LSbits of these registers is fixed to 0. Refer to Figure 2-2 for further details. The LSbit is not stored in these registers because PC<0> is always forced to 0. The DA status bit (SR<9>) indicates that a single DO loop (or nested DO loops) is active. The DA bit is set when a DO instruction is executed and enables a PC address comparison with the DOEND register on each subsequent instruction cycle. When PC matches the value in DOEND, DCOUNT is decremented. If the DCOUNT register is not zero, the PC is loaded with the address contained in the DOSTART register to start another iteration of the DO loop. The DO loop will terminate when DCOUNT = 0. If there are no other nested DO loops in progress, then the DA bit will also be cleared. Note: The group of instructions in a DO loop construct is always executed at least one time. The DO loop is always executed one time more than the value specified in the literal or W register operand.
DS70049C-page 2-32
Section 2. CPU
2
2.9.2.2 DO Loop Nesting The DOSTART, DOEND and DCOUNT registers each have a shadow register associated with them, such that the DO loop hardware supports one level of automatic nesting. The DOSTART, DOEND and DCOUNT registers are user accessible and they may be manually saved to permit additional nesting, where required. The DO Level bits, DL<2:0> (CORCON<10:8>) indicate the nesting level of the DO loop currently being executed. When the first DO instruction is executed, DL<2:0> is set to B001 to indicate that one level of DO loop is underway. The DA (SR<9>) is also set. When another DO instruction is executed within the first DO loop, the DOSTART, DOEND and DCOUNT registers are transferred into the shadow registers, prior to being updated with the new loop values. The DL<2:0> bits are set to B010 indicating that a second, nested DO loop is in progress. The DA (SR<9>) bit also remains set. If no more than one level of DO loop nesting is required in the application, no special attention is required. Should the user require more than one level of DO loop nesting, this may be achieved through manually saving the DOSTART, DOEND and DCOUNT registers prior to executing the next DO instruction. These registers should be saved whenever DL<2:0> is B010 or greater. The DOSTART, DOEND and DCOUNT registers will automatically be restored from their shadow registers when a DO loop terminates and DL<2:0> = B010. Note: The DL<2:0> (CORCON<10:8>) bits are combined (logically OR-ed) to form the DA (SR<9>) bit. If nested DO loops are being executed, the DA bit is cleared only when the loop count associated with the outer most loop expires.
CPU
2.9.2.3
Interrupting a DO Loop DO loops may be interrupted at any time. If another DO loop is to be executed during the ISR, the user must check the DL<2:0> status bits and save the DOSTART, DOEND and DCOUNT registers as required. No special handling is required if the user can ensure that only one level of DO loop will ever be executed in: both background and any one ISR handler (if interrupt nesting is enabled) or both background and any ISR (if interrupt nesting is disabled) Alternatively, up to two (nested) DO loops may be executed in either background or within any one ISR handler (if interrupt nesting is enabled) or in any ISR (if interrupt nesting is disabled) It is assumed that no DO loops are used within any trap handlers. Returning to a DO loop from an ISR, using the RETFIE instruction, requires no special handling.
2.9.2.4
Early Termination of the DO loop There are two ways to terminate a DO loop, earlier than normal: 1. The EDT (CORCON<11>) bit provides a means for the user to terminate a DO loop before it completes all loops. Writing a 1 to the EDT bit will force the loop to complete the iteration underway and then terminate. If EDT is set during the penultimate or last instruction of the loop, one more iteration of the loop will occur. EDT will always read as a 0; clearing it has no effect. After the EDT bit is set, the user can optionally branch out of the DO loop. Alternatively, the code may branch out of the loop at any point except from the last instruction, which cannot be a flow control instruction. Although the DA bit enables the DO loop hardware, it will have no effect unless the address of the penultimate instruction is encountered during an instruction pre-fetch. This is not a recommended method for terminating a DO loop. Note: Exiting a DO loop without using EDT is not recommended because the hardware will continue to check for DOEND addresses.
2.
DS70049C-page 2-33
Loop Length Restrictions Loop length is defined as the signed offset of the last instruction from the first instruction in the DO loop. The loop length when added to the address of the first instruction in the loop forms the address of the last instruction of the loop.There are some loop length values that should be avoided. 1. Loop Length = -2 Execution will start at the first instruction in the loop (i.e., at [PC]) and will continue until the loop end address (in this case [PC 4]) is pre-fetched. As this is the first word of the DO instruction, it will execute the DO instruction again, re-initializing the DCOUNT and pre-fetching [PC]. This will continue forever as long as the loop end address [PC 4] is pre-fetched. This value of n has the potential of creating an infinite loop (subject to a Watchdog Timer Reset). end_loop: DO #33, end_loop ;DO is a two-word instruction NOP ;2nd word of DO executes as a NOP ADD W2,W3,W4 ;First instruction in DO loop([PC])
DS70049C-page 2-34
Section 2. CPU
2
2. Loop Length = -1 Execution will start at the first instruction in the loop (i.e., at [PC]) and will continue until the loop end address ([PC 2]) is pre-fetched. Since the loop end address is the second word of the DO instruction, it will execute as a NOP but will still pre-fetch [PC]. The loop will then execute again. This will continue as long as the loop end address [PC 2] is pre-fetched and the loop does not terminate. Should the value in the DCOUNT register reach zero and on a subsequent decrement generate a borrow, the loop will terminate. However, in such a case the initial instruction outside the loop will once again be the first loop instruction. DO #33, end_loop ;DO is a two-word instruction end_loop: NOP ;2nd word of DO executes as a NOP ADD W2,W3,W4 ;First instruction in DO loop([PC]) Loop Length = 0 Execution will start at the first instruction in the loop (i.e., at [PC]) and will continue until the loop end address ([PC]) is pre-fetched. If the loop is to continue, this pre-fetch will cause the DO loop hardware to load the DOEND address ([PC]) into the PC for the next fetch (which will be [PC] again). After the first true iteration of the loop, the first instruction in the loop will be executed repeatedly until the loop count underflows and the loop terminates. When this occurs, the initial instruction outside the loop will be the instruction after [PC]. DO #33, end_loop ;DO is a two-word instruction NOP ;2nd word of DO executes as a NOP end_loop: ADD W2,W3,W4 ;First instruction in DO loop([PC])
CPU
3.
2.10
ADD
MOV
[W8]
X-Space WAGU
[W10]
[W9]++
X-Space Address
W7
W10
W8
W9
DS70049C-page 2-35
2.
During each instruction cycle, the dsPIC30F hardware automatically checks to see if a RAW data dependency is about to occur. If the conditions specified above are not satisfied, the CPU will automatically add a one instruction cycle delay before executing the pre-fetched instruction. The instruction stall provides enough time for the destination W register write to take place before the next (pre-fetched) instruction has to use the written data. Table 2-7: Read-After-Write Dependency Summary Source Addressing Mode using Wn Direct Indirect Indirect with modification Direct Indirect Indirect with modification Direct Indirect Status Allowed Stall Stall Allowed Allowed Allowed Allowed Stall ADD.w MOV.w ADD.w MOV.w ADD.w MOV.w ADD.w MOV.w ADD.w MOV.w ADD.w MOV.w ADD.w MOV.w Examples (Wn = W2) W0, W1, W2 W2, W3 W0, W1, W2 [W2], W3 W0, W1, W2 [W2++], W3 W0, W1, [W2] W2, W3 W0, W1, [W2] [W2], W3 W0, W1, [W2] [W2++], W3 W0, W1, [W2++] W2, W3
Destination Addressing Mode using Wn Direct Direct Direct Indirect Indirect Indirect Indirect with modification Indirect
ADD.w W0, W1, [W2] MOV.w [W2], W3 ; W2=0x0004 (mapped W2) ADD.w W0, W1, [W2] MOV.w [W2++], W3 ; W2=0x0004 (mapped W2) ADD.w MOV.w ADD.w MOV.w W0, W1, [W2++] [W2], W3 W0, W1, [W2++] [W2++], W3
Indirect
Stall
Stall Stall
2.10.2
DS70049C-page 2-36
Section 2. CPU
2
If a RAW data dependency is detected, the dsPIC30F will begin an instruction stall. During an instruction stall, the following events occur: 1. 2. 3. 4. 2.10.2.1 The write operation underway (for the previous instruction) is allowed to complete as normal. Data space is not addressed until after the instruction stall. PC increment is inhibited until after the instruction stall. Further instruction fetches are inhibited until after the instruction stall.
CPU
Instruction Stall Cycles and Interrupts When an interrupt event coincides with two adjacent instructions that will cause an instruction stall, one of two possible outcomes could occur: 1. The interrupt could be coincident with the first instruction. In this situation, the first instruction will be allowed to complete and the second instruction will be executed after the ISR completes. In this case, the stall cycle is eliminated from the second instruction because the exception process provides time for the first instruction to complete the write phase. The interrupt could be coincident with the second instruction. In this situation, the second instruction and the appended stall cycle will be allowed to execute prior to the ISR. In this case, the stall cycle associated with the second instruction executes normally. However, the stall cycle will be effectively absorbed into the exception process timing. The exception process proceeds as if an ordinary two-cycle instruction was interrupted.
2.
2.10.2.2
Instruction Stall Cycles and Flow Change Instructions The CALL and RCALL instructions write to the stack using W15 and may, therefore, force an instruction stall prior to the next instruction, if the source read of the next instruction uses W15. The RETFIE and RETURN instructions can never force an instruction stall prior to the next instruction because they only perform read operations. However, the user should note that the RETLW instruction could force a stall, because it writes to a W register during the last cycle. The GOTO and branch instructions can never force an instruction stall because they do not perform write operations.
2.10.2.3
Instruction Stalls and DO and REPEAT Loops Other than the addition of instruction stall cycles, RAW data dependencies will not affect the operation of either DO or REPEAT loops. The pre-fetched instruction within a REPEAT loop does not change until the loop is complete or an exception occurs. Although register dependency checks occur across instruction boundaries, the dsPIC30F effectively compares the source and destination of the same instruction during a REPEAT loop. The last instruction of a DO loop either pre-fetches the instruction at the loop start address or the next instruction (outside the loop). The instruction stall decision will be based on the last instruction in the loop and the contents of the pre-fetched instruction.
2.10.2.4
Instruction Stalls and Program Space Visibility (PSV) When program space (PS) is mapped to data space by enabling the PSV (CORCON<2>) bit, and the X space EA falls within the visible program space window, the read or write cycle is redirected to the address in program space. Accessing data from program space takes up to 3 instruction cycles. Instructions operating in PSV address space are subject to RAW data dependencies and consequent instruction stalls, just like any other instruction. Consider the following code segment: ADD MOV W0,[W1],[W2++] [W2],[W3] ; PSV = 1, W1=0x8000, PSVPAG=0xAA
This sequence of instructions would take 5 instruction cycles to execute. 2 instruction cycles are added to perform the PSV access via W1. Furthermore, an instruction stall cycle is inserted to resolve the RAW data dependency caused by W2.
DS70049C-page 2-37
2.11
A summary of the registers associated with the dsPIC30F CPU core is provided in Table 2-8.
Bit 13
W0 (WREG) W1 W2 W3 W4 W5 W6 W7 W8 W9 W10 W11 W12 W13 W14 W15 SPLIM ACCAL ACCAH Sign-extension of ACCA<39> ACCBL ACCBH Sign-extension of ACCB<39> PCL RCOUNT DCOUNT DOSTARTL SA SB OAB SAB DA DOENDL DC IPL2 IPL1 IPL0 RA DOENDH N OV Z C DOSTARTH 0 0 PCH TBLPAG PSVPAG 0 ACCBU ACCAU
Register Maps
Table 2-8:
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
Name
Addr
Bit 15
Bit 14
DS70049C-page 2-38
W0
0000
W1
0002
W2
0004
W3
0006
W4
0008
W5
000A
W6
000C
W7
000E
W8
0010
W9
0012
W10
0014
W11
0016
W12
0018
W13
001A
W14
001C
W15
001E
SPLIM
0020
ACCAL
0022
ACCAH
0024
ACCAU
0026
ACCBL
0028
ACCBH
002A
ACCBU
002C
PCL
002E
PCH
0030
TBLPAG
0032
PSVPAG
0034
RCOUNT
0036
DCOUNT
0038
DOSTARTL
003A
DOSTARTH
003C
DOENDL
003E
DOENDH
0040
SR
0042
OA
OB
Table 2-8:
Bit 13
XMODSRT<15:0> XMODEND<15:0> YMODSRT<15:0> YMODEND<15:0> XBREV<14:0> DISICNT<13:0> 1 0 1 0 BWM<3:0> YWM<3:0> XWM<3:0> US EDT DL2 DL<1:0> SATA SATB SATDW ACCSAT IPL3 PSV RND IF
Name
Addr
Bit 15
Bit 14
CORCON
0044
MODCON
0046
XMODEN YMODEN
XMODSRT
0048
XMODEND
004A
YMODSRT
004C
YMODEND
004E
XBREV
0050
BREN
CPU
DISICNT
0052
Reserved
0054 007E
Legend: x = uninitiated Note: Refer to the device data sheet for specific Core Register Map details.
Section 2. CPU
DS70049C-page 2-39
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70049C-page 2-40
Section 2. CPU
2
2.13 Revision History Revision A
This is the initial released revision of this document.
CPU
Revision B
This revision incorporates additional technical content for the dsPIC30F CPU module.
Revision C
This revision incorporates all known errata at the time of this document update.
DS70049C-page 2-41
DS70049C-page 2-42
3
Data Memory
DS70050C-page 3-1
DS70050C-page 3-2
16-bits
0x1FFF
0x27FF 0x2801
0x27FE 0x2800
3
0x8001 0x8000
Data Memory
0xFFFF
Note 1: The partition between the X and Y data spaces is device specific. Refer to the appropriate device data sheet for further details. The data space boundaries indicated here are used for example purposes only. 2: Near data memory can be accessed directly via file register instructions that encode a 13-bit address into the opcode. At a minimum, the near data memory region overlaps all of the SFR space and a portion of X memory space. All of X memory space and some or all of Y memory space may be included in the near data memory region, depending on the device variant. 3: All data memory can be accessed indirectly via W registers or directly using the MOV instruction. 4: Upper half of data memory map can be mapped into a segment of program memory space for program space visibility.
DS70050C-page 3-3
UNUSED
X SPACE
(Y SPACE)
Y SPACE
UNUSED
UNUSED
Note:
Data writes for DSP instructions consider the entire data memory as one combined space. DSP instructions that perform an accumulator write back use W13 as an address pointer for writes to the combined data spaces.
3.1.1
DS70050C-page 3-4
X SPACE
X SPACE
3.2.1
3.2.2
3
Data Memory
DS70050C-page 3-5
W0, [W7], [W10] W10, [W9++] W4*W5, A, W4, [W8]+=2, W5, [W10]+=2, [W13]+=2 W4, [--W9], [W6++]
IR X RAGU X WAGU Y AGU X Address X Data Read X Data Write Y Address Y Data (Read) [W7] [W7]
ADD ALU OP
MAC [--W9]
SUB
[W10]
W9
W8
W13 [W8]
W9-2
[W9-2] [W13]
[W9] W10
[W10]
3.2.3
DS70050C-page 3-6
ALU OP During Q3 W6
Figure 3-4:
8 7
0 0000 0002
3
Data Memory
3.3
Modulo Addressing
Modulo, or circular addressing provides an automated means to support circular data buffers using hardware. The objective is to remove the need for software to perform data address boundary checks when executing tightly looped code as is typical in many DSP algorithms. Any W register, except W15, can be selected as the pointer to the modulo buffer. The modulo hardware performs boundary checks on the address held in the selected W register and automatically adjusts the pointer value at the buffer boundaries, when required. dsPIC30F modulo addressing can operate in either data or program space (since the data pointer mechanism is essentially the same for both). One circular buffer can be supported in each of the X (which also provides the pointers into Program space) and Y data spaces. The modulo data buffer length can be any size up to 32K words. The modulo buffer logic supports buffers using word or byte sized data. However, the modulo logic only performs address boundary checks at word address boundaries, so the length of a byte modulo buffer must be even. In addition, byte-sized modulo buffers cannot be implemented using the Y AGU because byte access is not supported via the Y memory data bus.
DS70050C-page 3-7
The start address for a modulo buffer must be located at an even byte address boundary. The LSB of the XMODSRT and YMODSRT registers is fixed at 0 to ensure the correct modulo start address. The end address for a modulo buffer must be located at an odd byte address boundary. The LSB of the XMODEND and YMODEND registers is fixed to 1 to ensure the correct modulo end address. The start and end address selected for each modulo buffer have certain restrictions, depending on whether an incrementing or decrementing buffer is to be implemented. For an incrementing buffer, a W register pointer is incremented through the buffer address range. When the end address of the incrementing buffer is reached, the W register pointer is reset to point to the start of the buffer. For a decrementing buffer, a W register pointer is decremented through the buffer address range. When the start address of a decrementing buffer is reached, the W register pointer is reset to point to the end of the buffer. Note: The user must decide whether an incrementing or decrementing modulo buffer is required for the application. There are certain address restrictions that depend on whether an incrementing or decrementing modulo buffer is to be implemented.
3.3.1.1
Modulo Start Address The data buffer start address is arbitrary, but must be at a zero power of two boundary for incrementing modulo buffers. The modulo start address can be any value for decrementing modulo buffers and is calculated using the chosen buffer end address and buffer length. For example, if the buffer length for an incrementing buffer is chosen to be 50 words (100 bytes), then the buffer start byte address must contain 7 Least Significant zeros. Valid start addresses may, therefore, be 0xNN00 and 0xNN80, where N is any hexadecimal value.
3.3.1.2
Modulo End Address The data buffer end address is arbitrary but must be at a ones boundary for decrementing buffers. The modulo end address can be any value for an incrementing buffer and is calculated using the chosen buffer start address and buffer length. For example, if the buffer size (modulus value) is chosen to be 50 words (100 bytes), then the buffer end byte address for decrementing modulo buffer must contain 7 Least Significant ones. Valid end addresses may, therefore, be 0xNNFF and 0xNN7F, where x is any hexadecimal value. Note: If the required modulo buffer length is an even power of 2, modulo start and end addresses can be chosen that satisfy the requirements for incrementing and decrementing buffers.
DS70050C-page 3-8
3
Data Memory
To work around this problem of initialization, use any Addressing mode other than indirect reads in the instruction that immediately follows the initialization of MODCON. A simple work around to the problem is achieved by adding a NOP after initializing MODCON, as shown in Example 3-2. Example 3-2:
MOV MOV NOP MOV
DS70050C-page 3-9
If modulo addressing has already been enabled in MODCON, then a write to the X (or Y) modulo address SFRs should not be immediately followed by an indirect read, using the W register designated for modulo buffer access from X-data space (or Y-data space). The code segment in Example 3-3 shows how initializing the modulo SFRs associated with the X-data space, could lead to unexpected results. A similar example can be made for initialization in Y-data space. Example 3-3:
MOV MOV MOV MOV MOV MOV MOV
#0x8FF4, w0 w0, MODCON #0x1200, w4 w4, XMODSRT #0x12FF, w0 w0, XMODEND [w4++], w5
To work around this issue, insert a NOP, or perform any operation other than an indirect read that uses the W register designated for modulo buffer access, after initializing the modulo address SFRs. This is demonstrated in Example 3-4. Another alternative would be to enable modulo addressing in MODCON after initializing the modulo start and end address SFRs. Example 3-4:
MOV MOV MOV MOV MOV MOV NOP MOV
#0x8FF4, w0 w0, MODCON #0x1200, w4 w4, XMODSRT #0x12FF, w0 w0, XMODEND [w4++], w5
Note: Alternatively, execute other instructions that do not perform indirect read operations, using the W register designated for modulo buffer access.
DS70050C-page 3-10
3.3.3
3
Data Memory
DS70050C-page 3-11
3. 4. 5. 6. 7. 8. 9.
;set modulo start address ;set modulo end address ;enable W1, X AGU for modulo ;W0 holds buffer fill value ;point W1 to buffer ;fill the 50 buffer locations ;fill the next location
0x1100
0x1163
DS70050C-page 3-12
3. 4. 5. 6. 7. 8. 9.
3
Data Memory
0x11E0
MOV MOV MOV MOV MOV MOV MOV MOV DO MOV FILL: DEC
#0x11E0,W0 W0,XMODSRT #0x11FF,W0 W0,XMODEND #0x8001,W0 W0,MODCON #0x000F,W0 #0x11FE,W1 #15,FILL W0,[W1--]
;set modulo start address ;set modulo end address ;enable W1, X AGU for modulo ;W0 holds buffer fill value ;point W1 to buffer ;fill the 16 buffer locations ;fill the next location
W0,W0
0x11FF
DS70050C-page 3-13
DS70050C-page 3-14
When enabled, the bit-reversed addressing hardware will generate bit-reversed addresses, only when the register indirect with Pre- or Post-increment Addressing modes are used ([Wn++], [++Wn]). Furthermore, bit-reverse addresses are only generated for Word mode instructions. It will not function for all other Addressing modes or Byte mode instructions (normal addresses will be generated). Note: A write to the MODCON register should not be followed by an instruction that performs an indirect read operation using a W register. Unexpected results may occur. Some instructions perform an implicit indirect read. These are: POP, RETURN, RETFIE, RETLW and ULNK.
3.4.2.1
Modulo Addressing and Bit-Reversed Addressing Modulo addressing and bit-reversed addressing can be enabled simultaneously using the same W register, but bit-reversed addressing operation will always take precedence for data writes when enabled. As an example, the following setup conditions would assign the same W register to modulo and bit-reversed addressing: X modulo addressing is enabled (XMODEN = 1) Bit-reverse addressing is enabled (BREN = 1) W1 assigned to modulo addressing (XWM<3:0> = 0001) W1 assigned to bit-reversed addressing (BWM<3:0> = 0001)
3
Data Memory
For data reads that use W1 as the pointer, modulo address boundary checking will occur. For data writes using W1 as the destination pointer, the bit-reverse hardware will correct W1 for data re-ordering. 3.4.2.2 Data Dependencies Associated with XBREV If bit-reversed addressing has already been enabled by setting the BREN (XBREV<15>) bit, then a write to the XBREV register should not be followed by an indirect read operation using the W register, designated as the bit reversed address pointer.
DS70050C-page 3-15
Only the the bit-reversed modifier values shown will produce valid bit-reversed address sequences.
The bit-reverse hardware modifies the W register address by performing a reverse-carry addition of the W contents and the XB modifier constant. A reverse-carry addition is performed by adding the bits from left-to-right instead of right-to-left. If a carry-out occurs in a bit location, the carry out bit is added to the next bit location to the right. Example 3-5 demonstrates the reverse-carry addition and subsequent W register values using 0x0008 as the XB modifier value. Note that the XB modifier is shifted one bit location to the left to generate word address values.
DS70050C-page 3-16
Wn points to word 8 Wn = Wn + XB
Wn points to word 4 Wn = Wn + XB
Wn points to word 12 Wn = Wn + XB
Wn points to word 2 Wn = Wn + XB
Wn points to word 10
3
When XB<14:0> = 0x0008, the bit-reversed buffer size will be 16 words. Bits 1-4 of the W register will be subject to bit-reversed address correction, but bits 5-15 (outside the pivot point) will not be modified by the bit-reverse hardware. Bit 0 is not modified because the bit-reverse hardware only operates on word addresses. The XB modifier controls the pivot point for the bit-reverse address modification. Bits outside of the pivot point will not be subject to bit-reversed address corrections. Figure 3-8:
15
Data Memory
14 13 12 11
15
14 13 12 11
10
Bit-Reversed Result
Pivot Point
DS70050C-page 3-17
3.5
DS70050C-page 3-18
R/W-0
R/W-0
R/W-0 bit 0
XMODEN: X RAGU and X WAGU Modulus Addressing Enable bit 1 = X AGU modulus addressing enabled 0 = X AGU modulus addressing disabled YMODEN: Y AGU Modulus Addressing Enable bit 1 = Y AGU modulus addressing enabled 0 = Y AGU modulus addressing disabled BWM<3:0>: X WAGU Register Select for Bit-Reversed Addressing bits 1111 = Bit-reversed addressing disabled 1110 = W14 selected for bit-reversed addressing 1101 = W13 selected for bit-reversed addressing 0000 = W0 selected for bit-reversed addressing YWM<3:0>: Y AGU W Register Select for Modulo Addressing bits 1111 = Modulo addressing disabled 1010 = W10 selected for modulo addressing 1011 = W11 selected for modulo addressing Note: All other settings of the YWM<3:0> control bits are reserved and should not be used.
bit 14
3
Data Memory
bit 7-4
bit 3-0
XWM<3:0>: X RAGU and X WAGU W Register Select for Modulo Addressing bits 1111 = Modulo addressing disabled 1110 = W14 selected for modulo addressing 0000 = W0 selected for modulo addressing Note: A write to the MODCON register should not be followed by an instruction that performs an indirect read operation using a W register. Unexpected results may occur. Some instructions perform an implicit indirect read. These are: POP, RETURN, RETFIE, RETLW and ULNK.
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70050C-page 3-19
R/W-0
R/W-0
R/W-0 XS<7:1>
R/W-0
R/W-0
R/W-0
R-0 0 bit 0
XMODEND: X AGU Modulo Addressing End Register R/W-0 R/W-0 R/W-0 R/W-0 XE<15:8> R/W-0 R/W-0 R/W-0 bit 8 Lower Byte: R/W-0 bit 7
R/W-0
R/W-0
R/W-0 XE<7:1>
R/W-0
R/W-0
R/W-0
R-1 1 bit 0
XE<15:1>: X RAGU and X WAGU Modulo Addressing End Address bits Unimplemented: Read as 1 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70050C-page 3-20
R/W-0
R/W-0
R/W-0 YS<7:1>
R/W-0
R/W-0
R/W-0
R-0 0 bit 0
YMODEND: Y AGU Modulo Addressing End Register R/W-0 R/W-0 R/W-0 R/W-0 YE<15:8> R/W-0 R/W-0 R/W-0 bit 8 Lower Byte: R/W-0 bit 7
3
Data Memory
R/W-0
R/W-0
R/W-0 YE<7:1>
R/W-0
R/W-0
R/W-0
R-1 1 bit 0
YE<15:1>: Y AGU Modulo Addressing End Address bits Unimplemented: Read as 1 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70050C-page 3-21
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
bit 14-0
DS70050C-page 3-22
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
3
Data Memory
DS70050C-page 3-23
Revision B
This revision incorporates additional technical content for the dsPIC30F Data Memory module.
Revision C
This revision incorporates all known errata at the time of this document update.
DS70050C-page 3-24
4
Program Memory
DS70051D-page 4-1
The program memory map is divided into the user program space and the user configuration space. The user program space contains the Reset vector, interrupt vector tables, program memory and data EEPROM memory. The user configuration space contains non-volatile configuration bits for setting device options and the device ID locations.
DS70051D-page 4-2
Interrupt 52 Vector Interrupt 53 Vector User Memory Space Reserved Level 15 Trap Vector Level 14 Trap Vector Level 13 Trap Vector Level 12 Trap Vector Level 11 Trap Vector Level 10 Trap Vector Level 9 Trap Vector Level 8 Trap Vector Interrupt 0 Vector Interrupt 1 Vector
0000FE 000100
User Flash Program Memory (48K Instructions) 017FFE 018000 7FEFFE Data EEPROM (4 Kbytes) Configuration Memory Space 7FF000
7FFFFE 800000
4
Reserved
Program Memory
8005BE UNITID 8005C0 8005FE 800600 Reserved Device Configuration Registers F7FFFE F80000 F8000E F80010
Reserved
DEVID (2)
Note:
The address boundaries for user Flash program memory and data EEPROM memory will depend on the dsPIC30F device variant that is selected. Refer to the appropriate device data sheet for further details.
DS70051D-page 4-3
23 +1(1) 23
Instruction
Program Counter 22
0 0
4.3
DS70051D-page 4-4
Instruction Latch
User Space
The four available table instructions are listed below: TBLRDL: Table Read Low TBLWTL: Table Write Low TBLRDH: Table Read High TBLWTH: Table Write High
For table instructions, program memory can be regarded as two 16-bit word wide address spaces residing side by side, each with the same address range as shown in Figure 4-3. This allows program space to be accessed as byte or aligned word addressable, 16-bit wide, 64-Kbyte pages (i.e., same as data space). TBLRDL and TBLWTL access the LS Data Word of the program memory, and TBLRDH and TBLWTH access the upper word. As program memory is only 24-bits wide, the upper byte from this latter space does not exist, though it is addressable. It is, therefore, termed the phantom byte. Figure 4-3: High and Low Address Regions for Table Operations
23 00000000 00000000 00000000 00000000 16 8 0
4
Program Memory
DS70051D-page 4-5
16 bits from Wn
24-bit EA
4.3.3
TBLRDL.W
DS70051D-page 4-6
23
16
TBLRDH.B (Wn<0> = 1)
4.3.5
4
Program Memory
DS70051D-page 4-7
4.4.1
PSV Configuration
Program Space Visibility is enabled by setting the PSV bit (CORCON<2>). A description of the CORCON register can be found in Section 2. CPU. When PSV is enabled, each data space address in the upper half of the data memory map will map directly into a program address (see Figure 4-7). The PSV window allows access to the lower 16 bits of the 24-bit program word. The upper 8 bits of the program memory data should be programmed to force an illegal instruction, or a NOP, to maintain machine robustness. Note that table instructions provide the only method of reading the upper 8 bits of each program memory word. Figure 4-8 shows how the PSV address is generated. The 15 LSbs of the PSV address are provided by the W register that contains the effective address. The MSb of the W register is not used to form the address. Instead, the MSb specifies whether to perform a PSV access from program space or a normal access from data memory space. If a W register effective address of 0x8000 or greater is used, the data access will occur from program memory space when PSV is enabled. All accesses will occur from data memory when the W register effective address is less than 0x8000. The remaining address bits are provided by the PSVPAG register (PSVPAG<7:0>), as shown in Figure 4-8. The PSVPAG bits are concatenated with the 15 LSbs of the W register, holding the effective address to form a 23-bit program memory address. PSV can only be used to access values in program memory space. Table instructions must be used to access values in the user configuration space. The LSb of the W register value is used as a byte select bit, which allows instructions using PSV to operate in Byte or Word mode.
4.4.2
DS70051D-page 4-8
0x8000 EA<15> = 1 15
PSVPAG 0x01 8 23
23
15
0 0x008000
0xFFFF
Upper 8 bits of Program Memory Data cannot be read using Program Space Visibility.
0x017FFF
Data Read
Figure 4-8:
4
23 bits
Program Memory
Select
Wn
DS70051D-page 4-9
PSV and Instruction Stalls Refer to Section 2. CPU for more information about instruction stalls using PSV.
4.5
RTSP is accomplished using TBLWT instructions. ICSP is accomplished using the SPI interface and integral bootloader software. Refer to Section 5. Flash and EEPROM Programming for further details about RTSP. ICSP specifications can be downloaded from the Microchip Technology web site (www.microchip.com).
DS70051D-page 4-10
// set baud rate = BAUD // point to first char in string // Initiate transmission
// while valid char in string ... // and buffer not full ... // transmit string via UART // delay for 500 mS // re-initialize pointer to first char
// end main
4.6.2
4
Program Memory
; enable UART module ; set baudrate using formula value ; / ; initiate transmission
DS70051D-page 4-11
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70051D-page 4-12
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
Section 4.6 PSV Code Examples, has been added.
4
Program Memory
DS70051D-page 4-13
DS70051D-page 4-14
5
Flash and EEPROM Programming
DS70052D-page 5-1
RTSP is performed by the users software. ICSP is performed using a serial data connection to the device and allows much faster programming times than RTSP. RTSP techniques are described in this chapter. The ICSP protocol is described in the dsPIC30F Programming Specification document, which may be downloaded from the Microchip web site. The data EEPROM is mapped into the program memory space. The EEPROM is organized as 16-bit wide memory and the memory size can be up to 2K words (4 Kbytes). The amount of EEPROM is device dependent. Refer to the device data sheet for further information. The programming techniques used for the data EEPROM are similar to those used for Flash program memory RTSP. The key difference between Flash and data EEPROM programming operations is the amount of data that can be programmed or erased during each program/erase cycle.
5.2
The TBLRDL and the TBLWTL instructions are used to read and write to bits <15:0> of program memory space. TBLRDL and TBLWTL can access program memory in Word or Byte mode. The TBLRDH and TBLWTH instructions are used to read or write to bits <23:16> of program memory space. TBLRDH and TBLWTH can access program memory in Word or Byte mode. Since the program memory is only 24-bits wide, the TBLRDH and TBLWTH instructions have the ability to address an upper byte of program memory that does not exist. This byte is called the phantom byte. Any read of the phantom byte will return 0x00 and a write to the phantom byte has no effect. Always remember that the 24-bit program memory can be regarded as two side-by-side 16-bit spaces, with each space sharing the same address range. Therefore, the TBLRDL and TBLWTL instructions access the low program memory space (PM<15:0>). The TBLRDH and TBLWTH instructions access the high program memory space (PM<31:16>). Any reads or writes to PM<31:24> will access the phantom (unimplemented) byte. When any of the table instructions are used in Byte mode, the LSb of the table address will be used as the byte select bit. The LSb determines which byte in the high or low program memory space is accessed. Figure 5-1 shows how the program memory is addressed using the table instructions. A 24-bit program memory address is formed using bits <7:0> of the TBLPAG register and the effective address (EA) from a W register, specified in the table instruction. The 24-bit program counter is shown in Figure 5-1 for reference. The upper 23 bits of the EA are used to select the program memory location. For the Byte mode table instructions, the LSb of the W register EA is used to pick which byte of the 16-bit program memory word is addressed. A 1 selects bits <15:8>, a 0 selects bits <7:0>. The LSb of the W register EA is ignored for a table instruction in Word mode. In addition to the program memory address, the table instruction also specifies a W register (or a W register pointer to a memory location) that is the source of the program memory data to be written, or the destination for a program memory read. For a table write operation in Byte mode, bits <15:8> of the source working register are ignored.
DS70052D-page 5-2
15 EA
16 bits from Wn
24-bit EA
5.2.1
5.2.1.1
Read Word Mode The following code example shows how to read a word of program memory using the table instructions in Word mode:
; Setup the address pointer to program space MOV #tblpage(PROG_ADDR),W0 ; get table page value MOV W0,TBLPAG ; load TBLPAG register MOV #tbloffset(PROG_ADDR),W0 ; load address LS word ; Read the program memory location TBLRDH [W0],W3 ; Read high byte to W3 TBLRDL [W0],W4 ; Read low word to W4
5.2.1.2
In the code example above, the post-increment operator on the read of the low byte causes the address in the working register to increment by one. This sets EA<0> to a 1 for access to the middle byte in the third write instruction. The last post-increment sets W0 back to an even address, pointing to the next program memory location. Note: The tblpage() and tbloffset() directives are provided by the Microchip assembler for the dsPIC30F. These directives select the appropriate TBLPAG and W register values for the table instruction from a program memory address value. Refer to the MPLAB ASM 30, MPLAB LINK30 and Utilities Users Guide (DS51317) for further details.
5
Flash and EEPROM Programming
DS70052D-page 5-3
In this example, the contents of the upper byte of W3 does not matter because this data will be written to the phantom byte location. W0 is post-incremented by 2, after the second TBLWTH instruction, to prepare for the write to the next program memory location.
DS70052D-page 5-4
In the code example above, the post-increment operator on the write to the low byte causes the address in W0 to increment by one. This sets EA<0> = 1 for access to the middle byte in the third write instruction. The last post-increment sets W0 back to an even address pointing to the next program memory location.
5.3
Control Registers
Flash and data EEPROM programming operations are controlled using the following Non-Volatile Memory (NVM) control registers: NVMCON: Non-Volatile Memory Control Register NVMKEY: Non-Volatile Memory Key Register NVMADR: Non-Volatile Memory Address Register
5.3.1
NVMCON Register
The NVMCON register is the primary control register for Flash and EEPROM program/erase operations. This register selects Flash or EEPROM memory, whether an erase or program operation will be performed, and is used to start the program or erase cycle. The NVMCON register is shown in Register 5-1. The lower byte of NVMCOM configures the type of NVM operation that will be performed. For convenience, a summary of NVMCON setup values for various program and erase operations is given in Table 5-1. Table 5-1: NVMCON Register Values NVMCON Register Values for RTSP Program and Erase Operations Memory Type Flash PM Operation Erase Program Erase Data EEPROM Program Configuration Register Write(1) Data Size 1 row (32 instr. words) 1 row (32 instr. words) 1 data word 16 data words Entire EEPROM 1 data word 16 data words 1 config. register NVMCON Value 0x4041 0x4001 0x4044 0x4045 0x4046 0x4004 0x4005 0x4008
Note 1: The Device Configuration registers, except for FG5, may be written to a new value without performing an erase cycle.
5
Flash and EEPROM Programming
DS70052D-page 5-5
TBLPAG Reg
W Register EA
NVMADR Register
16 bits
NVMADR register loaded with contents of W register EA used during last table-write instruction. NVMADRU register loaded with contents of TBLPAG register during last table-write instruction
5.3.3
NVMKEY Register
NVMKEY is a write only register that is used to prevent accidental writes/erasures of Flash or EEPROM memory. To start a programming or an erase sequence, the following steps must be taken in the exact order shown: 1. 2. 3. Write 0x55 to NVMKEY. Write 0xAA to NVMKEY. Execute two NOP instructions.
After this sequence, a write will be allowed to the NVMCON register for one instruction cycle. In most cases, the user will simply need to set the WR bit in the NVMCON register to start the program or erase cycle. Interrupts should be disabled during the unlock sequence. The code example below shows how the unlock sequence is performed:
PUSH MOV IOR MOV MOV MOV MOV BSET NOP NOP POP SR #0x00E0,W0 SR #0x55,W0 #0xAA,W0 W0,NVMKEY W0,NVMKEY NVMCON,#WR ; Disable interrupts, if enabled
SR
; Re-enable interrupts
Refer to Section 5.4.2 Flash Programming Operations for further programming examples.
DS70052D-page 5-6
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
WR: Write (Program or Erase) Control bit 1 = Initiates a data EEPROM or program Flash erase or write cycle (the WR bit can be set but not cleared in software) 0 = Write cycle is complete WREN: Write (Erase or Program) Enable bit 1 = Enable an erase or program operation 0 = No operation allowed (Device clears this bit on completion of the write/erase operation) WRERR: Flash Error Flag bit 1 = A write operation is prematurely terminated (any MCLR or WDT Reset during programming operation) 0 = The write operation completed successfully Reserved: User code should write 0s to these locations PROGOP<7:0>: Programming Operation Command Byte bits Erase Operations: 0x41 = Erase 1 row (32 instruction words) of program Flash 0x44 = Erase 1 data word from data EEPROM 0x45 = Erase 1 row (16 data words) from data EEPROM 0x46 = Erase entire data EEPROM Programming Operations: 0x01 = Program 1 row (32 instruction words) into Flash program memory 0x04 = Program 1 data word into data EEPROM 0x05 = Program 1 row (16 data words) into data EEPROM 0x08 = Program 1 data word into device configuration register Legend: R = Readable bit S = Settable bit 0 = Bit is cleared W = Writable bit -n = Value at POR x = Bit is unknown U = Unimplemented bit, read as 0 1 = Bit is set
bit 14
bit 13
5
Flash and EEPROM Programming
DS70052D-page 5-7
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x bit 0
DS70052D-page 5-8
R/W-x
R/W-x
R/W-x
R/W-x
R/W-x bit 0
Unimplemented: Read as 0 NVMADRU<7:0>: NV Memory Upper Write Address bits Selects the upper 8 bits of the location to program or erase in program or data Flash memory. This register may be read or written by the user. This register will contain the value of the TBLPAG register when the last table write instruction executed, until written by the user. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
NVMKEY: Non-Volatile Memory Key Register U-0 U-0 U-0 U-0 U-0 U-0 U-0 bit 8
W-0
W-0
W-0
W-0
W-0 bit 0
bit 15-8 Unimplemented: Read as 0 bit 7-0 NVMKEY<7:0>: Key Register (Write Only) bits Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
5
Flash and EEPROM Programming
DS70052D-page 5-9
5.4.1
RTSP Operation
The dsPIC30F Flash program memory is organized into rows and panels. Each row consists of 32 instructions or 96 bytes. The panel size may vary depending on the dsPIC30F device variant. Refer to the device data sheet for further information. Typically, each panel consists of 128 rows, or 4K x 24 instructions. RTSP allows the user to erase one row (32 instructions) at a time and to program 32 instructions at one time. Each panel of program memory contains write latches that hold 32 instructions of programming data. These latches are not memory mapped. The only way for the user to access the write latches is through the use of table write instructions. Prior to the actual programming operation, the write data must be loaded into the panel write latches with table write instructions. The data to be programmed into the panel is typically loaded in sequential order into the write latches: instruction 0, instruction 1, etc. The instruction words loaded must always be from an even group of four address boundaries (e.g., loading of instructions 3, 4, 5, 6 is not allowed). Another way of stating this requirement is that the starting program memory address of the four instructions must have the 3 LSbs equal to 0. All 32 write latches must be written during a programming operation to ensure that any old data held in the latches is overwritten. The basic sequence for RTSP programming is to setup a table pointer, then do a series of TBLWT instructions to load the write latches. Programming is performed by setting special bits in the NVMCON register. 32 TBLWTL and 32 TBLWTH instructions are required to load the four instructions. If multiple, discontinuous regions of program memory need to be programmed, the table pointer should be changed for each region and the next set of write latches written. All of the table write operations to the Flash program memory take 2 instruction cycles each, because only the table latches are written. The actual programming operation is initiated using the NVMCON register.
5.4.2
DS70052D-page 5-10
2. 3.
4. 5.
6.
5
Flash and EEPROM Programming
DS70052D-page 5-11
Note:
When erasing a row of program memory, the user writes the upper 8 bits of the erase address directly to the NVMADRU and NVMADR registers. Together, the contents of the NVMADRU and NVMADR registers form the complete address of the program memory row to be erased. The NVMADRU and NVMADR registers specify the address for all Flash erase and program operations. However, these two registers do not have to be directly written by the user for Flash program operations. This is because the table write instructions used to write the program memory data automatically transfers the TBLPAG register contents and the table write address into the NVMADRU and NVMADR registers. The above code example could be modified to perform a dummy table write operation to capture the program memory erase address.
DS70052D-page 5-12
; Set up a pointer to the first program memory location to be written. MOV #tblpage(PROG_ADDR),W0 MOV W0,TBLPAG MOV #tbloffset(PROG_ADDR),W0 ; Perform the TBLWT instructions to write the latches ; W0 is incremented in the TBLWTH instruction to point to the ; next instruction location. MOV MOV TBLWTL TBLWTH MOV MOV TBLWTL TBLWTH MOV MOV TBLWTL TBLWTH MOV MOV TBLWTL TBLWTH ........ ........ MOV MOV TBLWTL TBLWTH #LOW_WORD_0,W2 #HIGH_BYTE_0,W3 W2,[W0] W3,[W0++] ; #LOW_WORD_1,W2 #HIGH_BYTE_1,W3 W2,[W0] W3,[W0++] ; #LOW_WORD_2,W2 #HIGH_BYTE_2,W3 W2, [W0] ; W3, [W0++] #LOW_WORD_3,W2 #HIGH_BYTE_3,W3 W2,[W0] W3,[W0++] ;
1st_program_word
2nd_program_word
3rd_program_word
4th_program_word
5
Flash and EEPROM Programming
DS70052D-page 5-13
; ;
Note
5.4.3
5.4.3.1
Configuration Register Write Algorithm 1. 2. 3. 4. 5. 6. 7. Write the new configuration value to the table write latch using a TBLWTL instruction. Configure NVMCON for a Configuration register write (NVMCON = 0x4008). Disable interrupts, if enabled. Write the key sequence to NVMKEY. Start the write sequence by setting WR (NVMCON<15>). CPU execution will resume when the write is finished. Re-enable interrupts, if needed.
DS70052D-page 5-14
5.5
The data EEPROM is readable and writable during normal operation (full VDD operating range). Unlike the Flash program memory, normal program execution is not stopped during an EEPROM program or erase operation. EEPROM erase and program operations are performed using the NVMCON and NVMKEY registers. The programming software is responsible for waiting for the operation to complete. The software may detect when the EEPROM erase or programming operation is complete by one of three methods: Poll the WR bit (NVMCON<15>) in software. The WR bit will be cleared when the operation is complete. Poll the NVMIF bit (IFS0<12>) in software. The NVMIF bit will be set when the operation is complete. Enable NVM interrupts. The CPU will be interrupted when the operation is complete. Further programming operations can be handled in the ISR. Note: Unexpected results will be obtained should the user attempt to read the EEPROM while a programming or erase operation is underway.
5
Flash and EEPROM Programming
DS70052D-page 5-15
2. 3.
5.5.2
4. 5.
DS70052D-page 5-16
5
Flash and EEPROM Programming
DS70052D-page 5-17
DS70052D-page 5-18
5
Flash and EEPROM Programming
DS70052D-page 5-19
Note:
Sixteen table write instructions have been used in this code segment to provide clarity in the example. The code segment could be simplified by using a single table write instruction in a REPEAT loop.
DS70052D-page 5-20
Note:
Program Space Visibility (PSV) can also be used to read locations in the program memory address space. See Section 4. Program Memory for further information about PSV.
5.6
Design Tips
Question 1: I cannot get the device to program or erase properly. My code appears to be correct. What could be the cause?
Answer: Interrupts should be disabled when a program or erase cycle is initiated to ensure that the key sequence executes without interruption. Interrupts can be disabled by raising the current CPU priority to level 7. The code examples in this chapter disable interrupts by saving the current SR register value on the stack, then ORing the value 0x00E0 with SR to force IPL<2:0> = 111. If no priority level 7 interrupts are enabled, then the DISI instruction provides another method to temporarily disable interrupts, while the key sequence is executed. Question 2: What is an easy way to read data EEPROM without using table instructions?
Answer: The data EEPROM is mapped into the program memory space. PSV can be used to map the EEPROM region into data memory space. See Section 4. Program Memory for further information about PSV.
5
Flash and EEPROM Programming
DS70052D-page 5-21
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70052D-page 5-22
Revision B
This revision incorporates technical content changes for the dsPIC30F Flash and EEPROM Programming module.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
This revision incorporates technical content changes for the dsPIC30F Flash and EEPROM Programming module.
5
Flash and EEPROM Programming
DS70052D-page 5-23
DS70052D-page 5-24
6
Interrupts
DS70053C-page 6-1
6.1.1
6.1.2
6.1.3
Reset Sequence
A device Reset is not a true exception because the interrupt controller is not involved in the Reset process. The dsPIC30F device clears its registers in response to a Reset which forces the PC to zero. The processor then begins program execution at location 0x000000. The user programs a GOTO instruction at the Reset address which redirects program execution to the appropriate start-up routine. Note: Any unimplemented or unused vector locations in the IVT and AIVT should be programmed with the address of a default interrupt handler routine that contains a RESET instruction.
DS70053C-page 6-2
Section 6. Interrupts
6
Figure 6-1: Interrupt Vector Table
Interrupts
IVT
AIVT
Reset GOTO Instruction Reset GOTO Address Reserved Oscillator Fail Trap Vector Address Error Trap Vector Stack Error Trap Vector Arithmetic Error Trap Vector Reserved Reserved Reserved Interrupt Vector 0 Interrupt Vector 1 ~ ~ ~ Interrupt Vector 52 Interrupt Vector 53 Reserved Reserved Reserved Oscillator Fail Trap Vector Address Error Trap Vector Stack Error Trap Vector Arithmetic Error Trap Vector Reserved Reserved Reserved Interrupt Vector 0 Interrupt Vector 1 ~ ~ ~ Interrupt Vector 52 Interrupt Vector 53
0x000014
0x000094
0x0000FE
Trap Vector Details IVT Address 0x000004 0x000006 0x000008 0x00000A 0x00000C 0x00000E 0x000010 0x000012 AIVT Address 0x000084 0x000086 0x000088 0x00008A 0x00008C 0x00008E 0x000090 0x000092 Reserved Oscillator Failure Address Error Stack Error Arithmetic Error Reserved Reserved Reserved Trap Source
DS70053C-page 6-3
0x00006E-0x00007E Reserved
DS70053C-page 6-4
Section 6. Interrupts
6
6.1.4 CPU Priority Status
Interrupts
The CPU can operate at one of sixteen priority levels, 0-15. An interrupt or trap source must have a priority level greater than the current CPU priority in order to initiate an exception process. Peripheral and external interrupt sources can be programmed for level 0-7, while CPU priority levels 8-15 are reserved for trap sources. A trap is a non-maskable interrupt source intended to detect hardware and software problems (see Section 6.2 Non-Maskable Traps). The priority level for each trap source is fixed and only one trap is assigned to a priority level. Note that an interrupt source programmed to priority level 0 is effectively disabled, since it can never be greater than the CPU priority. The current CPU priority level is indicated by the following four status bits: IPL<2:0> status bits located in SR<7:5> IPL3 status bit located in CORCON<3> The IPL<2:0> status bits are readable and writable, so the user may modify these bits to disable all sources of interrupts below a given priority level. If IPL<2:0> = 3, for example, the CPU would not be interrupted by any source with a programmed priority level of 0, 1, 2 or 3. Trap events have higher priority than any user interrupt source. When the IPL3 bit is set, a trap event is in progress. The IPL3 bit can be cleared, but not set by the user. In some applications, it may be desirable to clear the IPL3 bit when a trap has occurred and branch to an instruction other than the instruction after the one that originally caused the trap to occur. All user interrupt sources can be disabled by setting IPL<2:0> = 111. Note: The IPL<2:0> bits become read only bits when interrupt nesting is disabled. See Section 6.2.4.2 Interrupt Nesting for more information.
6.1.5
Interrupt Priority
Each peripheral interrupt source can be assigned to one of seven priority levels. The user assignable interrupt priority control bits for each individual interrupt are located in the Least Significant 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 bits define the priority level assigned to a particular interrupt. The usable priority levels start at 1 as the lowest priority and level 7 as the highest priority. If the IPC bits associated with an interrupt source are all cleared, then the interrupt source is effectively disabled. Since more than one interrupt request source may be assigned to a specific priority level, a means is provided to resolve priority conflicts within a given user assigned level. Each source of interrupt has a natural order priority based on its location in the IVT. Table 6-2 shows the location of each interrupt source in the IVT. The lower numbered interrupt vectors have higher natural priority, while the higher numbered vectors have lower natural priority. The overall priority level for any pending source of interrupt is determined first by the user assigned priority of that source in the IPCx register, then by the natural order priority within the IVT. Natural order priority is used only to resolve conflicts between simultaneous pending interrupts with the same user assigned priority level. Once the priority conflict is resolved and the exception process begins, the CPU can only be interrupted by a source with higher user assigned priority. Interrupts with the same user assigned priority but a higher natural order priority, that become pending after the exception process begins, will remain pending until the current exception process completes. The ability for the user to assign each interrupt source to one of seven priority levels means that the user can give an interrupt with a low natural order priority a very high overall priority level. For example: the PLVD (Programmable Low Voltage Detect) can be given a priority of 7 and the INT0 (External Interrupt 0) may be assigned to priority level 1, thus giving it a very low effective priority. Note: The peripherals and sources of interrupt available in the IVT will vary depending on the specific dsPIC30F device. The sources of interrupt shown in this document represent a comprehensive listing of all interrupt sources found on dsPIC30F devices. Refer to the specific device data sheet for further details.
DS70053C-page 6-5
Note that many of these trap conditions can only be detected when they happen. Consequently, the instruction that caused the trap is allowed to complete before exception processing begins. Therefore, the user may have to correct the action of the instruction that caused the trap. Each trap source has a fixed priority as defined by its position in the IVT. An oscillator failure trap has the highest priority, while an arithmetic error trap has the lowest priority (see Figure 6-1). In addition, trap sources are classified into two distinct categories: Hard traps and Soft traps.
6.2.1
Soft Traps
The arithmetic error trap (priority level 11) and stack error trap (priority level 12) are categorized as soft trap sources. Soft traps can be treated like non-maskable sources of interrupt that adhere to the priority assigned by their position in the IVT. Soft traps are processed like interrupts and require 2 cycles to be sampled and Acknowledged prior to exception processing. Therefore, additional instructions may be executed before a soft trap is Acknowledged.
6.2.1.1
Stack Error Trap (Soft Trap, Level 12) The stack is initialized to 0x0800 during Reset. A stack error trap will be generated should the stack pointer address ever be less than 0x0800. There is a Stack Limit register (SPLIM) associated with the stack pointer that is uninitialized at Reset. The stack overflow check is not enabled until a word write to SPLIM occurs. All Effective Addresses (EA) generated using W15 as a source or destination pointer are compared against the value in SPLIM. Should the EA be greater than the contents of the SPLIM register, then a stack error trap is generated. In addition, a stack error trap will be generated should the EA calculation wrap over the end of data space (0xFFFF). A stack error can be detected in software by polling the STKERR status bit (INTCON1<2>). To avoid re-entering the Trap Service Routine, the STKERR status flag must be cleared in software prior to returning from the trap with a RETFIE instruction.
DS70053C-page 6-6
Section 6. Interrupts
6
6.2.1.2 Arithmetic Error Trap (Soft Trap, Level 11)
Interrupts
Any of the following events will cause an arithmetic error trap to be generated: Accumulator A Overflow Accumulator B Overflow Catastrophic Accumulator Overflow Divide by Zero Shift Accumulator (SFTAC) operation exceeding +/-16 bits
There are three enable bits in the INTCON1 register that enable the three types of accumulator overflow traps. The OVATE control bit (INTCON1<10>) is used to enable traps for an Accumulator A overflow event. The OVBTE control bit (INTCON1<9>) is used to enable traps for an Accumulator B overflow event. The COVTE control bit (INTCON1<8>) is used to enable traps for a catastrophic overflow of either accumulator. An Accumulator A or Accumulator B overflow event is defined as a carry-out from bit 31. Note that no accumulator overflow can occur if the 31-bit Saturation mode is enabled for the accumulator. A catastrophic accumulator overflow is defined as a carry-out from bit 39 of either accumulator. No catastrophic overflow can occur if accumulator saturation (31-bit or 39-bit) is enabled. Divide-by-zero traps cannot be disabled. The divide-by-zero check is performed during the first iteration of the REPEAT loop that executes the divide instruction. Accumulator shift traps cannot be disabled. The SFTAC instruction can be used to shift the accumulator by a literal value or a value in one of the W registers. If the shift value exceeds +/-16 bits, an arithmetic trap will be generated. The SFTAC instruction will execute, but the results of the shift will not be written to the target accumulator. An arithmetic error trap can be detected in software by polling the MATHERR status bit (INTCON1<4>). To avoid re-entering the Trap Service Routine, the MATHERR status flag must be cleared in software prior to returning from the trap with a RETFIE instruction. Before the MATHERR status bit can be cleared, all conditions that caused the trap to occur must also be cleared. If the trap was due to an accumulator overflow, the OA and OB status bits (SR<15:14>) must be cleared. The OA and OB status bits are read only, so the user software must perform a dummy operation on the overflowed accumulator (such as adding 0) that will cause the hardware to clear the OA or OB status bit.
6.2.2
Hard Traps
Hard traps include exceptions of priority level 13 through level 15, inclusive. The address error (level 13) and oscillator error (level 14) traps fall into this category. Like soft traps, hard traps can also be viewed as non-maskable sources of interrupt. The difference between hard traps and soft traps is that hard traps force the CPU to stop code execution after the instruction causing the trap has completed. Normal program execution flow will not resume until after the trap has been Acknowledged and processed.
6.2.2.1
Trap Priority and Hard Trap Conflicts If a higher priority trap occurs while any lower priority trap is in progress, processing of the lower priority trap will be suspended and the higher priority trap will be Acknowledged and processed. The lower priority trap will remain pending until processing of the higher priority trap completes. Each hard trap that occurs must be Acknowledged before code execution of any type may continue. If a lower priority hard trap occurs while a higher priority trap is pending, Acknowledged, or is being processed, a hard trap conflict will occur. The conflict occurs because the lower priority trap cannot be Acknowledged until processing for the higher priority trap completes. 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.
DS70053C-page 6-7
2. 3. 4. 5.
Data space writes will be inhibited whenever an address error trap occurs, so that data is not destroyed. An address error can be detected in software by polling the ADDRERR status bit (INTCON1<3>). To avoid re-entering the Trap Service Routine, the ADDRERR status flag must be cleared in software prior to returning from the trap with a RETFIE instruction. Note: In the MAC class of instructions, the data space is split into X and Y spaces. In these instructions, unimplemented X space includes all of Y space, and unimplemented Y space includes all of X space.
6.2.3
DS70053C-page 6-8
Section 6. Interrupts
6
Note that if the DISICNT register is zero, interrupts cannot be disabled by simply writing a non-zero value to the register. Interrupts must first be disabled by using the DISI instruction. Once the DISI instruction has executed and DISICNT holds a non-zero value, the interrupt disable time can be extended by modifying the contents of DISICNT. Note: Software modification of the DISICNT register is not recommended.
Interrupts
The DISI status bit (INTCON2<14>) is set whenever interrupts are disabled as a result of the DISI instruction. Note: The DISI instruction can be used to quickly disable all user interrupt sources if no source is assigned to CPU priority level 7.
6.2.4
Interrupt Operation
All interrupt event flags are sampled during each instruction cycle. A pending Interrupt Request (IRQ) is indicated by the flag bit being equal to a 1 in an IFSx register. The IRQ will cause an interrupt to occur if the corresponding bit in the Interrupt Enable (IECx) registers is set. For the rest of the instruction cycle in which the IRQ is sampled, the priorities of all pending interrupt requests are evaluated. No instruction will be aborted when the CPU responds to the IRQ. The instruction that was in progress when the IRQ is sampled will be completed before the ISR is executed. If there is a pending IRQ with a user assigned priority level greater than the current processor priority level, indicated by the IPL<2:0> status bits (SR<7:5>), an interrupt will be presented to the processor. The processor then saves the following information on the software stack: the current PC value the low byte of the Processor Status register (SRL) the IPL3 status bit (CORCON<3>) These three values that are saved on the stack allow the return PC address value, MCU status bits, and the current processor priority level to be automatically saved. After the above information is saved on the stack, the CPU writes the priority level of the pending interrupt into the IPL<2:0> bit locations. This action will disable all interrupts of less than, or equal priority, until the Interrupt Service Routine (ISR) is terminated using the RETFIE instruction. Figure 6-2:
15 Stack Grows Towards Higher Address
6.2.4.1
Return from Interrupt The RETFIE (Return from Interrupt) instruction will unstack the PC return address, IPL3 status bit, and SRL register to return the processor to the state and priority level prior to the interrupt sequence.
DS70053C-page 6-9
6.2.5
6.2.6
6.2.7
DS70053C-page 6-10
Section 6. Interrupts
6
6.3 6.3.1 Interrupt Processing Timing
Interrupts
Figure 6-3:
PC
PC
PC+2
Vector#
2000 (ISR)
2002
2004
2006
INST Executed
INST(PC-2)
INST(PC)
FNOP
Fetch Vector
FNOP
ISR
ISR + 2
ISR + 4
Save PC in temporary buffer. Peripheral interrupt event occurs at or before midpoint of this cycle.
PUSH SRL and High 8 bits of PC (from temporary buffer). PUSH Low 16 bits of PC (from temporary buffer).
DS70053C-page 6-11
PC
PC
PC+2
Vector#
2000 (ISR)
2002
2004
2006
INST Executed
INST(PC-2)
Fetch Vector
FNOP
ISR
ISR + 2
ISR + 4
PUSH SRL and High 8 bits of PC (from temporary buffer). PUSH Low 16 bits of PC (from temporary buffer).
Figure 6-5:
PC
PC
PC + 2
Vector#
2000 (ISR)
2002
2004
2006
INST Executed
FNOP
Fetch Vector
FNOP
ISR
ISR + 2
ISR + 4
PUSH SRL and High 8 bits of PC (from temporary buffer). PUSH Low 16 bits of PC (from temporary buffer).
DS70053C-page 6-12
Section 6. Interrupts
6
6.3.3 Returning from Interrupt
Interrupts
The Return from Interrupt instruction, RETFIE, exits an interrupt or trap routine. During the first cycle of a RETFIE instruction, the upper bits of the PC and the SRL register are popped from the stack. The lower 16 bits of the stacked PC value are popped from the stack during the second cycle. The third instruction cycle is used to fetch the instruction addressed by the updated program counter. This cycle executes as a NOP. Figure 6-6: Return from Interrupt Timing
TCY
INST Executed PC
RETFIE
FNOP
PC
PC + 2
PC + 4
ISR + 2
PC
PC + 2
PC + 4
PC + 6
CPU Priority
POP SRL and High 8 bits of PC. POP Low 16 bits of PC to RAM Stack.
6.3.4
DS70053C-page 6-13
6.4.1
DS70053C-page 6-14
Section 6. Interrupts
6
Register 6-1: Upper Byte: R-0 OA bit 15 SR: Status Register (In CPU)
Interrupts
R-0 OB
R/C-0 SA
R/C-0 SB
R-0 OAB
R/C-0 SAB
R-0 DA
R-0 DC bit 8
R/W-0 IPL<2:0>
R/W-0
R-0 RA
R/W-0 N
R/W-0 OV
R/W-0 Z
R/W-0 C bit 0
IPL<2:0>: CPU Interrupt Priority Level Status bits 111 = CPU interrupt priority level is 7 (15). User interrupts disabled. 110 = CPU interrupt priority level is 6 (14) 101 = CPU interrupt priority level is 5 (13) 100 = CPU interrupt priority level is 4 (12) 011 = CPU interrupt priority level is 3 (11) 010 = CPU interrupt priority level is 2 (10) 001 = CPU interrupt priority level is 1 (9) 000 = CPU interrupt priority level is 0 (8) Note 1: The IPL<2:0> bits are concatenated with the IPL<3> bit (CORCON<3>) to form the CPU interrupt priority level. The value in parentheses indicates the IPL if IPL<3> = 1. 2: The IPL<2:0> status bits are read only when NSTDIS = 1 (INTCON1<15>). Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared C = Bit can be cleared x = Bit is unknown
CORCON: Core Control Register U-0 U-0 R/W-0 US R/W-0 EDT R-0 R-0 DL<1:0> R-0 bit 8 Lower Byte: R/W-0 SATA bit 7
R/W-0 SATB
R/W-1 SATDW
R/W-0 ACCSAT
R/C-0 IPL3
R/W-0 PSV
R/W-0 RND
R/W-0 IF bit 0
bit 3
IPL3: CPU Interrupt Priority Level Status bit 3 1 = CPU interrupt priority level is greater than 7 0 = CPU interrupt priority level is 7 or less Note 1: The IPL3 bit is concatenated with the IPL<2:0> bits (SR<7:5>) to form the CPU interrupt priority level. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared C = Bit can be cleared x = Bit is unknown
DS70053C-page 6-15
U-0
U-0
R/W-0 MATHERR
R/W-0 ADDRERR
R/W-0 STKERR
R/W-0 OSCFAIL
U-0 bit 0
NSTDIS: Interrupt Nesting Disable bit 1 = Interrupt nesting is disabled 0 = Interrupt nesting is enabled OVATE: Accumulator A Overflow Trap Enable bit 1 = Trap overflow of Accumulator A 0 = Trap disabled OVBTE: Accumulator B Overflow Trap Enable bit 1 = Trap overflow of Accumulator B 0 = Trap disabled COVTE: Catastrophic Overflow Trap Enable bit 1 = Trap on catastrophic overflow of Accumulator A or B enabled 0 = Trap disabled Unimplemented: Read as 0 MATHERR: Arithmetic Error Status bit 1 = Overflow trap has occurred 0 = Overflow trap has not occurred ADDRERR: Address Error Trap Status bit 1 = Address error trap has occurred 0 = Address error trap has not occurred STKERR: Stack Error Trap Status bit 1 = Stack error trap has occurred 0 = Stack error trap has not occurred OSCFAIL: Oscillator Failure Trap Status bit 1 = Oscillator failure trap has occurred 0 = Oscillator failure trap has not occurred Unimplemented: Read as 0 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 9
bit 8
bit 3
bit 2
bit 1
bit 0
DS70053C-page 6-16
Section 6. Interrupts
6
Register 6-4: Upper Byte: R/W-0 ALTIVT bit 15 INTCON2: Interrupt Control Register 2
Interrupts
R-0 DISI
U-0
U-0
U-0
U-0
U-0
U-0 bit 8
U-0
U-0
R/W-0 INT4EP
R/W-0 INT3EP
R/W-0 INT2EP
R/W-0 INT1EP
ALTIVT: Enable Alternate Interrupt Vector Table bit 1 = Use alternate vector table 0 = Use standard (default) vector table DISI: DISI Instruction Status bit 1 = DISI instruction is active 0 = DISI is not active Unimplemented: Read as 0 INT4EP: External Interrupt #4 Edge Detect Polarity Select bit 1 = Interrupt on negative edge 0 = Interrupt on positive edge INT3EP: External Interrupt #3 Edge Detect Polarity Select bit 1 = Interrupt on negative edge 0 = Interrupt on positive edge INT2EP: External Interrupt #2 Edge Detect Polarity Select bit 1 = Interrupt on negative edge 0 = Interrupt on positive edge INT1EP: External Interrupt #1 Edge Detect Polarity Select bit 1 = Interrupt on negative edge 0 = Interrupt on positive edge INT0EP: External Interrupt #0 Edge Detect Polarity Select bit 1 = Interrupt on negative edge 0 = Interrupt on positive edge Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 14
bit 3
bit 2
bit 1
bit 0
DS70053C-page 6-17
R/W-0 T2IF
R/W-0 OC2IF
R/W-0 IC2IF
R/W-0 T1IF
R/W-0 OC1IF
R/W-0 IC1IF
CNIF: Input Change Notification Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred MI2CIF: I2C Bus Collision Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred SI2CIF: I2C Transfer Complete Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred NVMIF: Non-Volatile Memory Write Complete Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred ADIF: A/D Conversion Complete Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred U1TXIF: UART1 Transmitter Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred U1RXIF: UART1 Receiver Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred SPI1IF: SPI1 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred T3IF: Timer3 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred T2IF: Timer2 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC2IF: Output Compare Channel 2 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred IC2IF: Input Capture Channel 2 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred T1IF: Timer1 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC1IF: Output Compare Channel 1 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred
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
DS70053C-page 6-18
Section 6. Interrupts
6
Register 6-5: bit 1 IFS0: Interrupt Flag Status Register 0 (Continued)
Interrupts
IC1IF: Input Capture Channel 1 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred INT0IF: External Interrupt 0 Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70053C-page 6-19
R/W-0 T5IF
R/W-0 T4IF
R/W-0 OC4IF
R/W-0 OC3IF
R/W-0 IC8IF
R/W-0 IC7IF
IC6IF: Input Capture Channel 6 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred IC5IF: Input Capture Channel 5 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred IC4IF: Input Capture Channel 4 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred IC3IF: Input Capture Channel 3 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred C1IF: CAN1 (Combined) Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred SPI2IF: SPI2 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred U2TXIF: UART2 Transmitter Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred U2RXIF: UART2 Receiver Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred INT2IF: External Interrupt 2 Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred T5IF: Timer5 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred T4IF: Timer4 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC4IF: Output Compare Channel 4 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC3IF: Output Compare Channel 3 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred IC8IF: Input Capture Channel 8 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred
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
DS70053C-page 6-20
Section 6. Interrupts
6
Register 6-6: bit 1 IFS1: Interrupt Flag Status Register 1 (Continued)
Interrupts
IC7IF: Input Capture Channel 7 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred INT1IF: External Interrupt 1 Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70053C-page 6-21
R/W-0 C2IF
R/W-0 INT4IF
R/W-0 INT3IF
R/W-0 OC8IF
R/W-0 OC7IF
R/W-0 OC6IF
bit 15-13 Unimplemented: Read as 0 bit 12 FLTBIF: Fault B Input Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred FLTAIF: Fault A Input Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred LVDIF: Programmable Low Voltage Detect Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred DCIIF: Data Converter Interface Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred QEIIF: Quadrature Encoder Interface Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred PWMIF: Motor Control Pulse Width Modulation Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred C2IF: CAN2 (Combined) Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred INT4IF: External Interrupt 4 Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred INT3IF: External Interrupt 3 Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC8IF: Output Compare Channel 8 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC7IF: Output Compare Channel 7 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred
bit 11
bit 10
bit 9
bit 8
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
DS70053C-page 6-22
Section 6. Interrupts
6
Register 6-7: bit 1 IFS2: Interrupt Flag Status Register 2 (Continued)
Interrupts
OC6IF: Output Compare Channel 6 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred OC5IF: Output Compare Channel 5 Interrupt Flag Status bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70053C-page 6-23
R/W-0 T2IE
R/W-0 OC2IE
R/W-0 IC2IE
R/W-0 T1IE
R/W-0 OC1IE
R/W-0 IC1IE
CNIE: Input Change Notification Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled MI2CIE: I2C Bus Collision Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled SI2CIE: I2C Transfer Complete Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled NVMIE: Non-Volatile Memory Write Complete Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled ADIE: A/D Conversion Complete Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled U1TXIE: UART1 Transmitter Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled U1RXIE: UART1 Receiver Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled SPI1IE: SPI1 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled T3IE: Timer3 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled T2IE: Timer2 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC2IE: Output Compare Channel 2 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled IC2IE: Input Capture Channel 2 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled T1IE: Timer1 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC1IE: Output Compare Channel 1 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled
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
DS70053C-page 6-24
Section 6. Interrupts
6
Register 6-8: bit 1 IEC0: Interrupt Enable Control Register 0 (Continued)
Interrupts
IC1IE: Input Capture Channel 1 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled INT0IE: External Interrupt 0 Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70053C-page 6-25
R/W-0 T5IE
R/W-0 T4IE
R/W-0 OC4IE
R/W-0 OC3IE
R/W-0 IC8IE
R/W-0 IC7IE
IC6IE: Input Capture Channel 6 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled IC5IE: Input Capture Channel 5 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled IC4IE: Input Capture Channel 4 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled IC3IE: Input Capture Channel 3 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled C1IE: CAN1 (Combined) Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled SPI2IE: SPI2 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled U2TXIE: UART2 Transmitter Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled U2RXIE: UART2 Receiver Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled INT2IE: External Interrupt 2 Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled T5IE: Timer5 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled T4IE: Timer4 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC4IE: Output Compare Channel 4 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC3IE: Output Compare Channel 3 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled IC8IE: Input Capture Channel 8 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled
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
DS70053C-page 6-26
Section 6. Interrupts
6
Register 6-9: bit 1 IEC1: Interrupt Enable Control Register 1 (Continued)
Interrupts
IC7IE: Input Capture Channel 7 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled INT1IE: External Interrupt 1 Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70053C-page 6-27
R/W-0 C2IE
R/W-0 INT4IE
R/W-0 INT3IE
R/W-0 OC8IE
R/W-0 OC7IE
R/W-0 OC6IE
bit 15-13 Unimplemented: Read as 0 bit 12 FLTBIE: Fault B Input Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled FLTAIE: Fault A Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled LVDIE: Programmable Low Voltage Detect Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled DCIIE: Data Converter Interface Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled QEIIE: Quadrature Encoder Interface Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled PWMIE: Motor Control Pulse Width Modulation Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled C2IE: CAN2 (Combined) Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled INT4IE: External Interrupt 4 Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled INT3IE: External Interrupt 3 Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC8IE: Output Compare Channel 8 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC7IE: Output Compare Channel 7 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled
bit 11
bit 10
bit 9
bit 8
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
DS70053C-page 6-28
Section 6. Interrupts
6
Register 6-10: bit 1 IEC2: Interrupt Enable Control Register 2 (Continued)
Interrupts
OC6IE: Output Compare Channel 6 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled OC5IE: Output Compare Channel 5 Interrupt Enable bit 1 = Interrupt request enabled 0 = Interrupt request not enabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70053C-page 6-29
R/W-1
R/W-0 IC1IP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 T1IP<2:0>: Timer1 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 OC1IP<2:0>: Output Compare Channel 1 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 IC1IP<2:0>: Input Capture Channel 1 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 INT0IP<2:0>: External Interrupt 0 Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-30
Section 6. Interrupts
6
Register 6-12: Upper Byte: U-0 bit 15 IPC1: Interrupt Priority Control Register 1
Interrupts
R/W-1
R/W-0 T3IP<2:0>
R/W-0
U-0
R/W-1
R/W-0 T2IP<2:0>
R/W-0 bit 8
R/W-1
R/W-0 OC2IP<2:0>
R/W-0
U-0
R/W-1
R/W-0 IC2IP<2:0>
R/W-0 bit 0
Unimplemented: Read as 0
bit 14-12 T3IP<2:0>: Timer3 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 T2IP<2:0>: Timer2 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 OC2IP<2:0>: Output Compare Channel 2 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 IC2IP<2:0>: Input Capture Channel 2 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-31
R/W-1
R/W-0 U1RXIP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 ADIP<2:0>: A/D Conversion Complete Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 U1TXIP<0>: UART1 Transmitter Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 U1RXIP<2:0>: UART1 Receiver Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 SPI1IP<2:0>: SPI1 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-32
Section 6. Interrupts
6
Register 6-14: Upper Byte: U-0 bit 15 IPC3: Interrupt Priority Control Register 3
Interrupts
R/W-1
R/W-0 CNIP<2:0>
R/W-0
U-0
R/W-1
R/W-1
R/W-0 SI2CIP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 CNIP<2:0>: Input Change Notification Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 MI2CIP<2:0>: I2C Bus Collision Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 SI2CIP<2:0>: I2C Transfer Complete Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 NVMIP<2:0>: Non-Volatile Memory Write Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-33
R/W-1
R/W-0 IC7IP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 OC3IP<2:0>: Output Compare Channel 3 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 IC8IP<2:0>: Input Capture Channel 8 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 IC7IP<2:0>: Input Capture Channel 7 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 INT1IP<2:0>: External Interrupt 1 Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-34
Section 6. Interrupts
6
Register 6-16: Upper Byte: U-0 bit 15 IPC5: Interrupt Priority Control Register 5
Interrupts
R/W-1
R/W-0 INT2IP<2:0>
R/W-0
U-0
R/W-1
R/W-0 T5IP<2:0>
R/W-0 bit 8
R/W-1
R/W-0 T4IP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 INT2IP<2:0>: External Interrupt 2 Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 T5IP<2:0>: Timer5 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 T4IP<2:0>: Timer4 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 OC4IP<2:0>: Output Compare Channel 4 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-35
R/W-1
R/W-0 U2TXIP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 C1IP<2:0>: CAN1 (Combined) Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 SPI2IP<2:0>: SPI2 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 U2TXIP<2:0>: UART2 Transmitter Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 U2RXIP<2:0>: UART2 Receiver Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-36
Section 6. Interrupts
6
Register 6-18: Upper Byte: U-0 bit 15 IPC7: Interrupt Priority Control Register 7
Interrupts
R/W-1
R/W-0 IC6IP<2:0>
R/W-0
U-0
R/W-1
R/W-0 IC5IP<2:0>
R/W-0 bit 8
R/W-1
R/W-0 IC4IP<2:0>
R/W-0
U-0
R/W-1
R/W-0 IC3IP<2:0>
R/W-0 bit 0
Unimplemented: Read as 0
bit 14-12 IC6IP<2:0>: Input Capture Channel 6 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 IC5IP<2:0>: Input Capture Channel 5 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 IC4IP<2:0>: Input Capture Channel 4 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 IC3IP<2:0>: Input Capture Channel 3 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-37
R/W-1
R/W-0 OC6IP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 OC8IP<2:0>: Output Compare Channel 8 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 OC7IP<2:0>: Output Compare Channel 7 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 OC6IP<2:0>: Output Compare Channel 6 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 OC5IP<2:0>: Output Compare Channel 5 Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-38
Section 6. Interrupts
6
Register 6-20: Upper Byte: U-0 bit 15 IPC9: Interrupt Priority Control Register 9
Interrupts
R/W-1
R/W-0 PWMIP<2:0>
R/W-0
U-0
R/W-1
R/W-0 C2IP<2:0>
R/W-0 bit 8
R/W-1
R/W-0 INT4IP<2:0>
R/W-0
U-0
R/W-1
Unimplemented: Read as 0
bit 14-12 PWMIP<2:0>: Motor Control Pulse Width Modulation Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 C2IP<2:0>: CAN2 (Combined) Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 INT4IP<2:0>: External Interrupt 4 Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 INT3IP<2:0>: External Interrupt 3 Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-39
R/W-1
R/W-0 DCIIP<2:0>
R/W-0
U-0
R/W-1
R/W-0 QEIIP<2:0>
R/W-0 bit 0
Unimplemented: Read as 0
bit 14-12 FLTAIP<2:0>: Fault A Input Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled bit 11 bit 10-8 Unimplemented: Read as 0 LVDIP<2:0>: Programmable Low Voltage Detect Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 DCIIP<2:0>: Data Converter Interface Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Unimplemented: Read as 0 QEIIP<2:0>: Quadrature Encoder Interface Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-40
Section 6. Interrupts
6
Register 6-22: Upper Byte: U-0 bit 15 IPC11: Interrupt Priority Control Register 11
Interrupts
U-0
U-0
U-0
U-0
U-0
U-0
U-0 bit 8
U-0
U-0
U-0
U-0
R/W-1
Unimplemented: Read as 0 FLTBIP<2:0>: Fault B Input Interrupt Priority bits 111 = Interrupt is priority 7 (highest priority interrupt) 001 = Interrupt is priority 1 000 = Interrupt source is disabled Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70053C-page 6-41
Clear the interrupt flag status bit associated with the peripheral in the associated IFSx Status register. Enable the interrupt source by setting the interrupt enable control bit associated with the source in the appropriate IECx Control register.
6.5.2
6.5.3
6.5.4
Interrupt Disable
All user interrupts can be disabled using the following procedure: 1. 2. Push the current SR value onto the software stack using the PUSH instruction. Force the CPU to priority level 7 by inclusive ORing the value 0xE0 with SRL.
To enable user interrupts, the POP instruction may be used to restore the previous SR value. Note that only user interrupts with a priority level of 7 or less can be disabled. Trap sources (level 8-level 15) cannot be disabled. The DISI instruction provides a convenient way to disable interrupts of priority levels 1-6, for a fixed period of time. Level 7 interrupt sources are not disabled by the DISI instruction.
DS70053C-page 6-42
Table 6-3:
Bit 13 SI2CIF IC4IF SI2CIE IC4IE T1IP<2:0> LVDIP<2:0> C2IP<2:0> INT41IP<2:0> DCIIP<2:0> OC7IP<2:0> OC6IP<2:0> IC5IP<2:0> IC4IP<2:0> SPI2IP<2:0> U2TXIP<2:0> T5IP<2:0> T4IP<2:0> IC8IP<2:0> IC7IP<2:0> MI2CIP<2:0> SI2CIP<2:0> U1TXIP<2:0> U1RXIP<2:0> T2IP<2:0> OC2IP<2:0> OC1IP<2:0> IC1IP<2:0> FLTBIE FLTAIE LVDIE DCIIE QEIIE PWMIE C2IE INT4IE INT3IE OC8IE OC7IE IC3IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE T4IE OC4IE OC3IE IC8IE IC7IE OC6IE INT0IP<2:0> IC2IP<2:0> SPI1IP<2:0> NVMIP<2:0> INT1IP<2:0> OC4IP<2:0> U2RXIP<2:0> IC3IP<2:0> OC5IP<2:0> INT3IP<2:0> QEIIP<2:0> FLTBIP<2:0> NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE FLTBIF FLTAIF LVDIF DCIIF QEIIF PWMIF C2IF INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF INT0IE INT1IE OC5IE IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF OC3IF IC8IF IC7IF INT1IF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT0 INT4EP INT3EP INT2EP INT1EP INT0EP OVATE OVBTE COVTE MATHERR ADDRERR STKERR OSCFAIL 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
SFR Name
ADR
Bit 15
Bit 14
INTCON1
0080 NSTDIS
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0000 0000 0000 0100
INTCON2
0082 ALTIVT
IFT0IF
0084
CNIF
MI2CIF
IFS1
0086
IC6IF
IC5IF
IFS2
0088
Interrupts
IEC0
008C
CNIE
MI2CIE
IEC1
008E
IC6IE
IC5IE
IEC2
0090
IPC0
0094
IPC1
0096
T31P<2:0>
IPC2
0098
ADIP<2:0>
IPC3
009A
CNIP<2:0>
IPC4
009C
OC3IP<2:0>
IPC5
009E
INT2IP<2:0>
IPC6
00A0
C1IP<2:0>
IPC7
00A2
IC6IP<2:0>
IPC8
00A4
OC8IP<2:0>
IPC9
00A6
PWMIP<2:0>
IPC10
00A8
FLTAIP<2:0>
IPC11
00AA
Note:
All interrupt sources and their associated control bits may not be available on a particular device. Refer to the device data sheet for details.
Section 6. Interrupts
DS70053C-page 6-43
Answer: The interrupt source with the highest natural order priority will take precedence. The natural order priority is determined by the Interrupt Vector Table (IVT) address for that source. Interrupt sources with a smaller IVT address have a higher natural order priority.
Question 2:
Can the DISI instruction be used to disable all sources of interrupt and traps?
Answer: The DISI instruction does not disable traps or priority level 7 interrupt sources. However, the DISI instruction can be used as a convenient way to disable all interrupt sources if no priority level 7 interrupt sources are enabled in the users application.
DS70053C-page 6-44
Section 6. Interrupts
6
6.7 Related Application Notes
This section lists application notes that are related to this section of the manual. These application notes may not be written specifically for the dsPIC30F Product Family, but the concepts are pertinent and could be used with modification and possible limitations. The current application notes related to the Interrupts module are: Title No related application notes at this time. Application Note #
Interrupts
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70053C-page 6-45
Revision B
This revision incorporates additional technical content for the dsPIC30F Interrupts module.
Revision C
This revision incorporates all known errata at the time of this document update.
DS70053C-page 6-46
Section 7. Oscillator
HIGHLIGHTS
This section of the manual contains the following topics: 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 Introduction .................................................................................................................... 7-2 Device Clocking and MIPS ............................................................................................ 7-5 Oscillator Configuration.................................................................................................. 7-6 Oscillator Control Registers OSCCON and OSCTUN .............................................. 7-13 Primary Oscillator......................................................................................................... 7-20 Crystal Oscillators/Ceramic Resonators ...................................................................... 7-22 Determining Best Values for Crystals, Clock Mode, C1, C2 and Rs ............................ 7-24 External Clock Input..................................................................................................... 7-25 External RC Oscillator.................................................................................................. 7-26 Phase Locked Loop (PLL) ........................................................................................... 7-30 Low-Power 32 kHz Crystal Oscillator........................................................................... 7-31 Oscillator Start-up Timer (OST).................................................................................... 7-31 Internal Fast RC Oscillator (FRC) ................................................................................ 7-31 Internal Low-Power RC (LPRC) Oscillator................................................................... 7-32 Fail-Safe Clock Monitor (FSCM) .................................................................................. 7-32 Programmable Oscillator Postscaler............................................................................ 7-33 Clock Switching Operation........................................................................................... 7-34 Design Tips .................................................................................................................. 7-38 Related Application Notes............................................................................................ 7-39 Revision History ........................................................................................................... 7-40
7
Oscillator
DS70054D-page 7-1
7.1.1
Device-Specific Oscillator System Feature Summary dsPIC30F Device 30F6010, 30F6011, 30F6012, 30F6013, 30F6014 Feature Summary Oscillator Sources: Primary oscillator with Multiple Clock modes XT, EC, HS Secondary oscillator (Low-Power 32 kHz Crystal oscillator) FRC oscillator: Fast Internal RC (7.37 MHz) LPRC oscillator: Low-Power Internal RC (512 kHz)
PLL Clock Multiplier: 4 MHz-10 MHz input frequency range 4x Multiplier mode (FOUT = 16 MHz-40 MHz) 8x Multiplier mode (FOUT = 32 MHz-80 MHz) 16x Multiplier mode (FOUT = 64 MHz-120 MHz) PLL VCO lock indication plus out of lock trap option PLL input provided by the following sources: - XT or EC Primary oscillator
Clock Scaling Options: Generic postscaler for device clock (divide by 4, 16, 64) Fail-Safe Clock Monitor (FSCM): Detects clock failure and switches over to internal FRC oscillator VERSION 2 30F2010, 30F4011, 30F4012, 30F5011, 30F5013 Oscillator System VERSION 2 adds the following capabilities to VERSION 1: Internal FRC oscillator may also be provided as an input to the PLL to allow fast execution while eliminating the need for an external clock source (This feature is applicable to all devices other than the 30F2010) User tuning capability added for the Internal FRC oscillator
DS70054D-page 7-2
Section 7. Oscillator
Table 7-1: Oscillator System VERSION 3 Device-Specific Oscillator System Feature Summary dsPIC30F Device 30F2011, 30F2012, 30F3010, 30F3011, 30F3012, 30F3013, 30F3014, 30F4013, 30F5015, 30F5016, 30F6010A, 30F6011A, 30F6012A, 30F6013A, 30F6014A, 30F6015 Feature Summary Oscillator System VERSION 3 adds the following capabilities to VERSION 2: HS oscillator may also be provided as an input to the PLL to allow greater choices of crystal frequency
7
Oscillator
DS70054D-page 7-3
PLL
Primary Osc
(2)
POR
FOSC(1)
SOSCO SOSCI
FRC
LPRC
Oscillator Trap
to Timer1 Note 1: The system clock output, FOSC, is divided by 4 to get the instruction cycle clock. 2: Devices that feature VERSION 2 or VERSION 3 of the Oscillator System allow the internal FRC oscillator to be connected to the PLL.
DS70054D-page 7-4
Section 7. Oscillator
7.2 Device Clocking and MIPS
Referring to Figure 7-1, the system clock source can be provided by one of four sources. These sources are the Primary oscillator, Secondary oscillator, Internal Fast RC (FRC) oscillator or the Low-Power RC (LPRC) oscillator. The Primary oscillator source has the option of using the internal PLL. The frequency of the selected clock source can optionally be reduced by the programmable postscaler (clock divider). The output from the programmable postscaler becomes the system clock source, FOSC. The system clock source is divided by four to produce the internal instruction cycle clock, FCY. In this document, the instruction cycle clock is also denoted by FOSC/4. The timing diagram in Figure 7-2 shows the relationship between the system clock source and instruction execution. The internal instruction cycle clock, FCY, can be provided on the OSC2 I/O pin for some Operating modes of the Primary oscillator (see Section 7.3 Oscillator Configuration). Figure 7-2: Clock/Instruction Cycle Timing
TCY FOSC FCY PC PC Fetch INST (PC) Execute INST (PC - 2) PC + 2 PC + 4
7
Oscillator
Equation 7-1: MIPS and Source Oscillator Frequency Relationship FCY = FOSC 4 =
DS70054D-page 7-5
7.3.1
7.3.2
7.3.3
7.3.4
DS70054D-page 7-6
Section 7. Oscillator
Register 7-1: Upper Byte: U bit 23 Middle Byte: R/P bit 15 Lower Byte: R/P U U U U R/P R/P bit 8 FCKSM<1:0> FOS<1:0> U U U U U U U bit 16 FOSC: Oscillator Configuration Register for Oscillator System VERSION 1
7
Oscillator
R/P bit 0
R/P
R/P
R/P
FPR<3:0>
Unimplemented: Read as 0 FCKSM<1:0>: Clock Switching Mode Selection Fuses bits 1x = Clock switching is disabled, Fail-Safe Clock Monitor is disabled 01 = Clock switching is enabled, Fail-Safe Clock Monitor is disabled 00 = Clock switching is enabled, Fail-Safe Clock Monitor is enabled Unimplemented: Read as 0 FOS<1:0>: Oscillator Source Selection on POR bits 11 = Primary Oscillator (Primary Oscillator mode selected by FPR<3:0>) 10 = Internal Low-Power RC Oscillator 01 = Internal Fast RC Oscillator 00 = Low-Power 32 kHz Oscillator (Timer1 oscillator) Unimplemented: Read as 0 FPR<3:0>: Oscillator Selection within Primary Group bits, See Table 7-2 Legend: R = Readable bit P = Programmable bit U = Unimplemented bit
DS70054D-page 7-7
Oscillator Mode EC w/ PLL 16x EC w/ PLL 8x EC w/ PLL 4x ECIO EC Reserved ERC ERCIO XT w/ PLL 16x XT w/ PLL 8x XT w/ PLL 4x XT HS XTL LP FRC LPRC
Note 1: OSC2 pin function is determined by the Primary Oscillator mode selection (FPR<3:0> Configuration bits). 2: Note that OSC1 pin cannot be used as an I/O pin, even if the Secondary oscillator or an internal clock source is selected at all times. 3: In these Oscillator modes, a crystal is connected between the OSC1 and OSC2 pins. 4: This is the default Oscillator mode for an unprogrammed (erased) device. An unprogrammed Configuration bit has a value of 1. 5: XTL XTL Crystal Oscillator mode (200 kHz-4 MHz crystal) 6: XT XT Crystal Oscillator mode (4 MHz-10 MHz crystal) 7: HS HS Crystal Oscillator mode (10 MHz-25 MHz crystal)
DS70054D-page 7-8
Section 7. Oscillator
Register 7-2: Upper Byte: U bit 23 Middle Byte: R/P bit 15 Lower Byte: R/P U U U U R/P R/P bit 8 FCKSM<1:0> FOS<1:0> U U U U U U U bit 16 FOSC: Oscillator Configuration Register for Oscillator System VERSION 2
7
Oscillator
R/P bit 0
R/P
R/P
R/P
FPR<3:0>
Unimplemented: Read as 0 FCKSM<1:0>: Clock Switching Mode Selection Fuses bits 1x = Clock switching is disabled, Fail-Safe Clock Monitor is disabled 01 = Clock switching is enabled, Fail-Safe Clock Monitor is disabled 00 = Clock switching is enabled, Fail-Safe Clock Monitor is enabled Unimplemented: Read as 0 FOS<1:0>: Oscillator Source Selection on POR bits 11 = Primary Oscillator (Primary Oscillator mode selected by FPR<3:0>) 10 = Internal Low-Power RC Oscillator 01 = Internal Fast RC Oscillator 00 = Low-Power 32 kHz Oscillator (Timer1 oscillator) Unimplemented: Read as 0 FPR<3:0>: Oscillator Mode Selection within Primary Group bits, See Table 7-3 Legend: R = Readable bit P = Programmable bit U = Unimplemented bit
DS70054D-page 7-9
Oscillator Mode EC ECIO EC w/PLL 4x EC w/PLL 8x EC w/PLL 16x ERC ERCIO XT XT w/PLL 4x XT w/PLL 8x XT w/PLL 16x XTL HS FRC w/PLL 4x FRC w/PLL 8x FRC w/PLL 16x LP FRC LPRC
Note 1: OSC2 pin function is determined by the Primary Oscillator mode selection (FPR<3:0>). 2: Note that OSC1 pin cannot be used as an I/O pin, even if the secondary oscillator or an internal clock source is selected at all times. 3: In these Oscillator modes, a crystal is connected between the OSC1 and OSC2 pins. 4: This is the default Oscillator mode for an unprogrammed (erased) device. An unprogrammed Configuration bit has a value of 1. 5: XTL XTL Crystal Oscillator mode (200 kHz-4 MHz crystal) 6: XT XT Crystal Oscillator mode (4 MHz-10 MHz crystal) 7: HS HS Crystal Oscillator mode (10 MHz-25 MHz crystal)
DS70054D-page 7-10
Section 7. Oscillator
Register 7-3: Upper Byte: U bit 23 Middle Byte: R/P bit 15 Lower Byte: R/P U U U R/P R/P FOS<2:0> bit 8 R/P FCKSM<1:0> U U U U U U U bit 16 FOSC: Oscillator Configuration Register for Oscillator System VERSION 3
7
Oscillator
R/P bit 0
U bit 7
R/P
R/P
R/P FPR<4:0>
R/P
bit 23-16 Unimplemented: Read as 0 bit 15-14 FCKSM<1:0>: Clock Switching and Monitor Selection Configuration bits 1x = Clock switching is disabled, Fail-Safe Clock Monitor is disabled 01 = Clock switching is enabled, Fail-Safe Clock Monitor is disabled 00 = Clock switching is enabled, Fail-Safe Clock Monitor is enabled bit 13-10 Unimplemented: Read as 0 bit 9-8 FOS<2:0>: Oscillator Group Selection on POR bit 111 = PLL Oscillator; PLL source selected by FPR<4:0> bits 011 = EXT: External Oscillator; OSC1/OSC2 pins; External Oscillator configuration selected by FPR<4:0> bits 010 = LPRC: Internal Low-Power RC 001 = FRC: Internal Fast RC 000 = LPOSC: Low-Power Crystal Oscillator; SOSCI/SOSCO pins Unimplemented: Read as 0 FPR<4:0>: Oscillator Selection within Primary Group bits, See Table 7-4. Legend: R = Readable bit W = Writable bit U = Unimplemented bit, read as 0
DS70054D-page 7-11
Oscillator Mode ECIO w/ PLL 4x ECIO w/ PLL 8x ECIO w/ PLL 16x FRC w/ PLL 4x FRC w/ PLL 8x FRC w/ PLL 16x XT w/ PLL 4x XT w/ PLL 8x XT w/ PLL 16x HS2 w/ PLL 4x HS2 w/ PLL 8x HS2 w/ PLL 16x HS3 w/ PLL 4x HS3 w/ PLL 8x HS3 w/ PLL 16x ECIO XT HS EC ERC ERCIO XTL LP FRC LPRC
Note 1: OSC2 pin function is determined by (FPR<4:0>). 2: OSC1 pin cannot be used as an I/O pin even if the secondary oscillator or an internal clock source is selected at all times. 3: In these Oscillator modes, a crystal is connected between the OSC1 and OSC2 pins. 4: XTL XTL Crystal Oscillator mode (200 kHz-4 MHz crystal) 5: XT XT Crystal Oscillator mode (4 MHz-10 MHz crystal) 6: HS HS Crystal Oscillator mode (10 MHz-25 MHz crystal)
DS70054D-page 7-12
Section 7. Oscillator
7.4 Oscillator Control Registers OSCCON and OSCTUN
Run-time control and status of the Oscillator system is provided to the user via Special Function Registers. Table 7-5 summarizes the run-time control features provided in VERSION 1, VERSION 2 and VERSION 3 of the Oscillator System. Refer to the device data sheet to determine the version of the oscillator system featured on the dsPIC30F device you are using. Table 7-5: Oscillator Control SFRs Oscillator Control SFRs Feature Summary Control via OSCCON SFR. Refer to Register 7-4. Control via OSCCON SFR. User may tune the FRC oscillator via TUN<3:0> bits in OSCCON. Refer to Register 7-5. Control via OSCCON and OSCTUN SFRs. User may tune the FRC oscillator via TUN<3:0> bits in OSCTUN. Refer to Register 7-6 and Register 7-7.
7
Oscillator
The OSCCON Control register provides control of clock switching and clock source status information. The COSC Status bits in OSCCON are read-only bits that indicate the oscillator source that the device is operating from. The COSC bits are set to the FOS Configuration bit values at a Power-on Reset and will change to indicate the new oscillator source at the end of a clock switch operation. The NOSC Status bits in OSCCON are control bits that select the new clock source for a clock switch operation. The NOSC bits are set to the FOS Configuration bit values at a Power-on Reset or Brown-out Reset and are modified by the user software during a clock switch operation. The POST<1:0> control bits (OSCCON<8:7>) control the system clock divide ratio. The LOCK Status bit (OSCCON<5>) is read-only and indicates the status of the PLL circuit. The CF Status bit (OSCCON<3>) is a readable/writable Status bit that indicates a clock failure. The LPOSCEN control bit (OSCCON<1>) is used to enable or disable the 32 kHz Low-Power Crystal oscillator. The OSWEN control bit (OSCCON<0>) is used to initiate a clock switch operation. The OSWEN bit is cleared automatically after a successful clock switch. The TUN<3:0> bits allow the user to tune the internal FRC oscillator to frequencies higher and lower than the nominal value of 7.37 MHz. Note: The OSCCON register is write-protected because it controls the device clock switching mechanism. See Section 7.4.1 Protection Against Accidental Writes to OSCCON for instructions on writing to OSCCON.
7.4.1
DS70054D-page 7-13
Lower Byte: R/W-0 R/W-0 POST<1:0> bit 7 bit 15-14 bit 13-12
R-0 LOCK
U-0
R/W-0 CF
U-0
R/W-0 LPOSCEN
bit 7-6
bit 5
bit 4 bit 3
bit 2 bit 1
bit 0
Unimplemented: Read as 0 COSC<1:0>: Current Oscillator Source Status bits 11 = Primary oscillator 10 = Internal LPRC oscillator 01 = Internal FRC oscillator 00 = Low-Power 32 kHz Crystal oscillator (Timer1) Unimplemented: Read as 0 NOSC<1:0>: New Oscillator Group Selection bits 11 = Primary oscillator 10 = Internal LPRC oscillator 01 = Internal FRC oscillator 00 = Low-Power 32 kHz Crystal oscillator (Timer1) POST<1:0>: Oscillator Postscaler Selection bits 11 = Oscillator postscaler divides clock by 64 10 = Oscillator postscaler divides clock by 16 01 = Oscillator postscaler divides clock by 4 00 = Oscillator postscaler does not alter clock LOCK: PLL Lock Status bit 1 = Indicates that PLL is in lock 0 = Indicates that PLL is out of lock (or disabled) Reset on POR or BOR Reset when a valid clock switching sequence is initiated Set when PLL lock is achieved after a PLL start Reset when lock is lost Read zero when PLL is not selected as a system clock Unimplemented: Read as 0 CF: Clock Fail Status bit 1 = FSCM has detected a clock failure 0 = FSCM has not detected a clock failure Reset on POR or BOR Reset when a valid clock switching sequence is initiated Set when clock fail detected Unimplemented: Read as 0 LPOSCEN: 32 kHz LP Oscillator Enable bit 1 = LP oscillator is enabled 0 = LP oscillator is disabled Reset on POR or BOR OSWEN: Oscillator Switch Enable bit 1 = Request oscillator switch to selection specified by NOSC<1:0> bits 0 = Oscillator switch is complete Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70054D-page 7-14
Section 7. Oscillator
Register 7-5: Upper Byte: R/W-0 TUN3 bit 15 OSCCON: Oscillator Control Register Oscillator System VERSION 2 R/W-0 TUN2 R-y R-y COSC<1:0> R/W-0 TUN1 R/W-0 TUN0 R/W-y R/W-y NOSC<1:0> bit 8
Lower Byte: R/W-0 R/W-0 POST<1:0> bit 7 bit 15-14 bit 13-12
R-0 LOCK
U-0
R/W-0 CF
U-0
R/W-0 LPOSCEN
7
Oscillator
TUN<3:2>: Upper 2 bits of the TUN bit-field. Refer to the description of TUN<1:0> (OSCCON<11:10>) bits for details. COSC<1:0>: Current Oscillator Source Status bits 11 = Primary oscillator 10 = Internal LPRC oscillator 01 = Internal FRC oscillator 00 = Low-Power 32 kHz Crystal oscillator (Timer1) TUN<1:0>: Lower 2 bits of the TUN bit-field. The four bit field specified by TUN<3:0> allows the user to tune the Internal Fast RC oscillator which has a nominal frequency of 7.37 MHz. For example, the user may be able to tune the frequency of the FRC oscillator within a range of +/- 12% (or 960 kHz) in steps of 1.5% around the factory-calibrated frequency setting, as follows: TUN<3:0> = 0111 provides the highest frequency ...... TUN<3:0> = 0000 provides the factory-calibrated frequency ...... TUN<3:0> = 1000 provides the lowest frequency Note: Refer to the device-specific data sheet for the exact tuning range and tuning step size for the FRC oscillator on your device.
bit 11-10
bit 9-8
NOSC<1:0>: New Oscillator Group Selection bits 11 = Primary oscillator 10 = Internal LPRC oscillator 01 = Internal FRC oscillator 00 = Low-Power 32 kHz Crystal oscillator (Timer1) POST<1:0>: Oscillator Postscaler Selection bits 11 = Oscillator postscaler divides clock by 64 10 = Oscillator postscaler divides clock by 16 01 = Oscillator postscaler divides clock by 4 00 = Oscillator postscaler does not alter clock LOCK: PLL Lock Status bit 1 = Indicates that PLL is in lock 0 = Indicates that PLL is out of lock (or disabled) Reset on POR or BOR Reset when a valid clock switching sequence is initiated Set when PLL lock is achieved after a PLL start Reset when lock is lost Read zero when PLL is not selected as a system clock Unimplemented: Read as 0 CF: Clock Fail Status bit 1 = FSCM has detected a clock failure 0 = FSCM has not detected a clock failure Reset on POR or BOR Reset when a valid clock switching sequence is initiated Set when clock fail detected Unimplemented: Read as 0
bit 7-6
bit 5
bit 4 bit 3
bit 2
DS70054D-page 7-15
bit 0
DS70054D-page 7-16
Section 7. Oscillator
Register 7-6: Upper Byte: U-0 bit 15 Lower Byte: R/W-0 bit 7 bit 15 Unimplemented: Read as 0 R/W-0 R-0 LOCK U-0 R/W-0 CF U-0 R/W-0 LPOSCEN R/W-0 OSWEN bit 0 POST<1:0> R-y R-y COSC<2:0> R-y U-0 R/W-y R/W-y NOSC<2:0> bit 8 R/W-y OSCCON: Oscillator Control Register Oscillator System VERSION 3
7
Oscillator
bit 14-12 COSC<2:0>: Current Oscillator Group Selection bits (Read-Only) 111 = PLL Oscillator; PLL source selected by FPR<4:0> bits 011 = External Oscillator; OSC1/OSC2 pins; External Oscillator configuration selected by FPR<4:0> bits 010 = LPRC internal low-power RC 001 = FRC internal fast RC 000 = LP crystal oscillator; SOSCI/SOSCO pins Set to FOS<2:0> values on POR or BOR Loaded with NOSC<2:0> at the completion of a successful clock switch Set to FRC value when FSCM detects a failure and switches clock to FRC bit 11 bit 10-8 Unimplemented: Read as 0 NOSC<2:0>: New Oscillator Group Selection bits 111 = PLL Oscillator; PLL source selected by FPR<4:0> bits 011 = External Oscillator; OSC1/OSC2 pins; External Oscillator configuration selected by FPR<4:0> bits 010 = LPRC internal low-power RC 001 = FRC internal fast RC 000 = LP crystal oscillator; SOSCI/SOSCO pins Set to FOS<2:0> values on POR or BOR POST<1:0>: Oscillator Postscaler Selection bits 11 = Oscillator postscaler divides clock by 64 10 = Oscillator postscaler divides clock by 16 01 = Oscillator postscaler divides clock by 4 00 = Oscillator postscaler does not alter clock LOCK: PLL Lock Status bit (Read-Only) 1 = Indicates that PLL is in lock 0 = Indicates that PLL is out of lock (or disabled) Reset on POR or BOR Reset when a valid clock switching sequence is initiated Set when PLL lock is achieved after a PLL start Reset when lock is lost Read zero when PLL is not selected as a system clock Unimplemented: Read as 0
bit 7-6
bit 5
bit 4
DS70054D-page 7-17
bit 2 bit 1
bit 0
DS70054D-page 7-18
Section 7. Oscillator
Register 7-7: Upper Byte: U-0 bit 15 Lower Byte: U-0 bit 7 bit 15-4 bit 3-0 Unimplemented: Read as 0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 bit 0 TUN<3:0> U-0 U-0 U-0 U-0 U-0 U-0 U-0 bit 8 OSCTUN: FRC Oscillator Tuning Register Oscillator System VERSION 3 Only
7
Oscillator
TUN<3:0>: The four bit field specified by TUN<3:0> allows the user to tune the Internal Fast RC oscillator which has a nominal frequency of 7.37 MHz. TUN<3:0> = 0111 provides the highest frequency ...... TUN<3:0> = 0000 provides the factory-calibrated frequency ...... TUN<3:0> = 1000 provides the lowest frequency Note 1: Refer to the device-specific data sheet for the exact tuning range and tuning step size for the FRC oscillator on your device. 2: Certain devices may have more than four TUN bits. Refer to the device-specific data sheet to identify the number of TUN bits available to the user for tuning the FRC oscillator. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70054D-page 7-19
Oscillator Mode(4) XTL XT XT w/ PLL 4x XT w/ PLL 8x XT w/ PLL 16x LP HS HS/2 w/PLL 4x HS/2 w/ PLL 8x HS/2 w/ PLL 16x HS/3 w/PLL 4x HS/3 w/ PLL 8x HS/3 w/ PLL 16x EC ECIO EC w/ PLL 4x EC w/ PLL 8x EC w/ PLL 16x ERC ERCIO FRC FRC w/ PLL 4x FRC w/ PLL 8x FRC w/ PLL 16x LPRC Note 1: 2: 3: 4:
DS70054D-page 7-20
Section 7. Oscillator
7.5.1 Oscillator Mode Selection Guidelines
The main difference between the XT, XTL and HS modes is the gain of the internal inverter of the oscillator circuit, which allows the different frequency ranges. In general, use the oscillator option with the lowest possible gain that still meets specifications. This will result in lower dynamic currents (IDD). The frequency range of each Oscillator mode is the recommended frequency cutoff, but the selection of a different Gain mode is acceptable as long as a thorough validation is performed (voltage, temperature and component variations, such as resistor, capacitor and internal oscillator circuitry). The oscillator feedback circuit is disabled in all EC and ECIO modes. The OSC1 pin is a high impedance input and can be driven by a CMOS driver. The ERC and ERCIO modes provide the least expensive solution for device oscillation (only an external resistor and capacitor is required). These modes also provide the most variation in the oscillation frequency. If the Primary oscillator is configured for an external clock input or an external RC network, the OSC2 pin is not required to support the oscillator function. For these modes, the OSC2 pin can be used as an additional device I/O pin or a clock output pin. When the OSC2 pin is used as a clock output pin, the output frequency is FOSC/4. The XTL mode is a Low Power/Low Frequency mode. This mode of the oscillator consumes the least amount of power of the three Crystal modes. The XT mode is a Medium Power/Medium Frequency mode and HS mode provides the highest oscillator frequencies with a crystal. The EC and XT modes that use the PLL circuit provide the highest device operating frequencies. The oscillator circuit will consume the most current in these modes because the PLL is enabled to multiply the frequency of the oscillator.
7
Oscillator
DS70054D-page 7-21
OSC1 C1(3) XTAL OSC2 RS(1) C2(3) dsPIC30FXXXX Note 1: A series resistor, Rs, may be required for AT strip cut crystals. 2: The internal feedback resistor, RF, is typically in the range of 2 to 10 M. 3: See Section 7.7 Determining Best Values for Crystals, Clock Mode, C1, C2 and Rs. RF(2) To Internal Logic Sleep
7.6.1
Oscillator/Resonator Start-up
As the device voltage increases from VSS, the oscillator will start its oscillations.The time required for the oscillator to start oscillating depends on many factors. These include: Crystal/resonator frequency Capacitor values used (C1 and C2 in Figure 7-3) Device VDD rise time System temperature Series resistor value and type if used (Rs in Figure 7-3) Oscillator mode selection of device (selects the gain of the internal oscillator inverter) Crystal quality Oscillator circuit layout System noise
Figure 7-4 shows a plot of a typical oscillator/resonator start-up. Figure 7-4: Example Oscillator/Resonator Start-up Characteristics
VIL
DS70054D-page 7-22
Section 7. Oscillator
7.6.2 Tuning the Oscillator Circuit
Since Microchip devices have wide operating ranges (frequency, voltage and temperature; depending on the part and version ordered) and external components (crystals, capacitors,...) of varying quality and manufacture, validation of operation needs to be performed to ensure that the component selection will comply with the requirements of the application. There are many factors that go into the selection and arrangement of these external components. These factors include: amplifier gain desired frequency resonant frequency(s) of the crystal temperature of operation supply voltage range start-up time stability crystal life power consumption simplification of the circuit use of standard components component count
7
Oscillator
7.6.3
Noise actually helps lower the oscillator start-up time since it provides a kick start to the oscillator. Prior to entering Sleep mode, the application may switch to the Internal FRC(+PLL) oscillator in order to reduce the time taken by the device to wake-up from Sleep.
DS70054D-page 7-23
DS70054D-page 7-24
Section 7. Oscillator
The OSC2 signal should be a clean sine wave that easily spans the input minimum and maximum of the clock input pin (4V to 5V peak-to-peak for a 5V VDD is usually good). An easy way to set this is to again test the circuit at the minimum temperature and maximum VDD that the design will be expected to perform in, then look at the output. This should be the maximum amplitude of the clock output. If there is clipping or the sine wave is distorted near VDD and VSS, increasing load capacitors may cause too much current to flow through the crystal or push the value too far from the manufacturers load specification. To adjust the crystal current, add a trimmer potentiometer between the crystal inverter output pin and C2 and adjust it until the sine wave is clean. The crystal will experience the highest drive currents at the low temperature and high VDD extremes. The trimmer potentiometer should be adjusted at these limits to prevent overdriving. A series resistor, Rs, of the closest standard value can now be inserted in place of the trimpot. If Rs is too high, perhaps more than 20 kOhms, the input will be too isolated from the output, making the clock more susceptible to noise. If you find a value this high is needed to prevent overdriving the crystal, try increasing C2 to compensate or changing the Oscillator Operating mode. Try to get a combination where Rs is around 10k or less and load capacitance is not too far from the manufacturer specification.
7
Oscillator
7.8
In the ECIO mode (Figure 7-6), the OSC1 pin can be driven by CMOS drivers. In this mode, the OSC1 pin is high-impedance and the OSC2 pin becomes a general purpose I/O pin. The feedback device between OSC1 and OSC2 is turned off to save current. Figure 7-6: External Clock Input Operation (ECIO Oscillator Configuration)
OSC1 dsPIC30F I/O I/O (OSC2)
DS70054D-page 7-25
In addition to this, the oscillator frequency will vary from unit-to-unit due to normal process parameter variation. Furthermore, the difference in lead frame capacitance between package types will also affect the oscillation frequency, especially for low CEXT values. The user also needs to take into account variation due to tolerance of external REXT and CEXT components used. Figure 7-7 shows how the RC combination is connected. For REXT values below 2.2 k, oscillator operation may become unstable or stop completely. For very high REXT values (e.g., 1 M), the oscillator becomes sensitive to noise, humidity and leakage. Thus, it is recommended that a REXT value between 3 k and 100 k is used. Figure 7-7: ERC Oscillator Mode
V DD REXT OSC1 CEXT VSS OSC2 FOSC/4 Internal Clock dsPIC30F
Although the oscillator will operate with no external capacitor (CEXT = 0 pF), a value above 20 pF should be used for noise and stability reasons. With no or a small external capacitance, the oscillation frequency can vary dramatically due to changes in external capacitances, such as PCB trace capacitance and package lead frame capacitance. The oscillator frequency, divided by 4, is available on the OSC2/CLKO pin, and can be used for test purposes or to synchronize other logic. Note: An external clock source should not be connected to the OSC1 pin when the oscillator is configured for ERC or ERCIO modes.
DS70054D-page 7-26
Section 7. Oscillator
7.9.1 External RC Oscillator with I/O Enabled
The ERCIO Oscillator mode functions in the exact same manner as the ERC Oscillator mode. The only difference is that the OSC2 pin is configured as an I/O pin. As in the RC mode, the user needs to take into account any variation of the clock frequency due to tolerance of external REXT and CEXT components used, process variation, voltage and temperature. Figure 7-8 shows how the RC with the I/O pin combination is connected. Figure 7-8: ERCIO Oscillator Mode
VDD
7
REXT OSC1 CEXT VSS I/O (OSC2) dsPIC30F Internal Clock
Oscillator
7.9.2
External RC Start-up
There is no start-up delay associated with the RC oscillator. Oscillation will begin when VDD is applied. Note: The user should verify that VDD is within specifications before the device begins to execute code.
7.9.3
RC Operating Frequency
The following graphs show the external RC oscillator frequency as a function of device voltage for a selection of RC component values. Note: The following graphs should be used only as approximate guidelines for RC component selection. The actual frequency will vary based on the system temperature and device. Please refer to the specific device data sheet for further RC oscillator characteristic data.
DS70054D-page 7-27
4.5
4.0
2.5
2.0
1.5
0.0 2.5 3.0 3.5 4.0 VDD (V) 4.5 5.0 5.5
Figure 7-10:
5.0
1.0
REXT = 100k 0.0 2.5 3.0 3.5 4.0 VDD (V) 4.5 5.0 5.5
DS70054D-page 7-28
Section 7. Oscillator
Figure 7-11:
300
7
Oscillator
150
50 REXT = 100k 0 2.5 3.0 3.5 4.0 VDD (V) 4.5 5.0 5.5
DS70054D-page 7-29
Table 7-7:
7.10.1
7.10.1.1
Loss of PLL Lock During Clock Switching When the PLL is selected as a destination clock source in a clock switch operation (including a Power-on Reset), the LOCK bit is cleared. The LOCK bit is set after phase lock has been achieved. If the PLL fails to achieve lock, then the clock switching circuit will NOT switch to the PLL output for system clock; instead, it will continue to run with the old clock source.
7.10.1.2
Loss of PLL Lock During a Power-on Reset If the PLL fails to achieve lock at a Power-on Reset (POR) and the Fail-Safe Clock Monitor (FSCM) is enabled, the FRC oscillator will become the device clock source and a clock failure trap will occur.
7.10.1.3
Loss of PLL Lock During Normal Device Operation If the PLL loses lock during normal operation for at least 4 input clock cycles, then the LOCK bit is cleared, indicating a loss of PLL lock. Furthermore, a clock failure trap will be generated. In this situation, the processor continues to run using the PLL clock source. The user can switch to another clock source in the Trap Service Routine, if desired. Note: Refer to Section 6. Reset Interrupts for further details about oscillator failure traps. A loss of PLL lock during normal device operation will generate a clock failure trap, but the system clock source will not be changed. The FSCM does not need to be enabled to detect the loss of lock.
Note:
DS70054D-page 7-30
Section 7. Oscillator
7.11 Low-Power 32 kHz Crystal Oscillator
The LP or Secondary oscillator is designed specifically for low power operation with a 32 kHz crystal. The LP oscillator is located on the SOSCO and SOSCI device pins and serves as a secondary crystal clock source for low power operation. The LP oscillator can also drive Timer1 for a real-time clock application.
7.11.1
LP Oscillator Enable
The following control bits affect the operation of the LP oscillator: 1. 2. The COSC<1:0> bits in the OSCCON register (OSCCON<13:12>). The LPOSCEN bit in the OSCCON register (OSCCON<1>).
When the LP Oscillator is enabled, the SOSCO and SOSCI I/O pins are controlled by the oscillator and cannot be used for other I/O functions. 7.11.1.1 LP Oscillator Continuous Operation The LP oscillator will always be enabled if the LPOSCEN control bit (OSCCON<1>) is set. There are two reasons to leave the LP oscillator running. First, keeping the LP oscillator ON at all times allows a fast switch to the 32 kHz system clock for lower power operation. Returning to the faster main oscillator will still require an oscillator start-up time if it is a crystal type source (see Section 7.12 Oscillator Start-up Timer (OST)). Second, the oscillator should remain ON at all times when using Timer1 as a real-time clock. 7.11.1.2 LP Oscillator Intermittent Operation When the LPOSCEN control bit (OSCCON<1>) is cleared, the LP oscillator will only operate when it is selected as the current device clock source (COSC<1:0> = 00). The LP oscillator will be disabled if it is the current device clock source and the device enters Sleep mode.
7
Oscillator
7.11.2
7.12
7.13
DS70054D-page 7-31
7.14.1
7.15
7.15.1
FSCM Delay
On a POR, BOR or wake-up event from Sleep mode, a nominal 100 s delay (TFSCM) may be inserted before the FSCM begins to monitor the system clock source. The purpose of the FSCM delay is to provide time for the oscillator and/or PLL to stabilize when the Power-up Timer (PWRT) is not utilized. The FSCM delay will be generated after the internal System Reset signal, SYSRST, has been released. Refer to Section 8. Reset for FSCM delay timing information. The FSCM delay, TFSCM, is applied when the FSCM is enabled and any of the following device clock sources is selected as the system clock: EC+PLL XT+PLL XT HS HS/2 or HS/3 + PLL XTL LP Note: Please refer to the Electrical Specifications section of the device data sheet for TFSCM specification values.
DS70054D-page 7-32
Section 7. Oscillator
7.15.2 FSCM and Slow Oscillator Start-up
If the chosen device oscillator has a slow start-up time coming out of POR, BOR or Sleep mode, it is possible that the FSCM delay will expire before the oscillator has started. In this case, the FSCM will initiate a clock failure trap. As this happens, the COSC<1:0> bits (OSCCON<13:12>) are loaded with the FRC oscillator selection. This will effectively shut-off the original oscillator that was trying to start. The user can detect this situation and initiate a clock switch back to the desired oscillator in the Trap Service Routine.
7.15.3
7.16
7
Oscillator
00 01 10 11
POST1
POST0 Note: The system clock input can be any available source.
DS70054D-page 7-33
Divide by 64
01
10
00
11
1:4
1:16
1:1
1:64
Note: This diagram demonstrates the clock postscaler function only. The divide ratios shown in the timing diagram are not correct.
7.17
7.17.1
DS70054D-page 7-34
Section 7. Oscillator
7.17.2 Oscillator Switching Sequence
The following steps are taken by the hardware and software to change the device clock source. (The steps shown below use the OSCCON register definition for the Oscillator system VERSION 1. For a description of the OSCCON register for the Oscillator system VERSION 2 and VERSION 3, refer to 7.4 Oscillator Control Registers OSCCON and OSCTUN): 1. Read the COSC<1:0> Status bits (OSCCON<13:12>), if desired, to determine current oscillator source. 2. Perform the unlock sequence to allow a write to the OSCCON register high byte. 3. Write the appropriate value to the NOSC<1:0> control bits (OSCCON<9:8>) for the new oscillator source. 4. Perform the unlock sequence to allow a write to the OSCCON register low byte. 5. Set the OSWEN bit (OSCCON<0>). This will INITIATE the oscillator switch. 6. The clock switching hardware compares the COSC<1:0> Status bits with the new value of the NOSC<1:0> control bits. If they are the same, then the clock switch is a redundant operation. In this case, the OSWEN bit is cleared automatically and the clock switch is aborted. 7. If a valid clock switch has been initiated, the LOCK (OSCCON<5>) and the CF (OSCCON<3>) Status bits are cleared. 8. The new oscillator is turned on by the hardware if it is not currently running. If a crystal oscillator must be turned on, the hardware will wait until the OST expires. If the new source is using the PLL, then the hardware waits until a PLL lock is detected (LOCK = 1). 9. The hardware waits for 10 clock cycles from the new clock source and then performs the clock switch. 10. The hardware clears the OSWEN bit to indicate a successful clock transition. In addition, the NOSC<1:0> bit values are transferred to the COSC<1:0> Status bits. 11. The clock switch is completed. The old clock source will be turned off at this time, with the following exceptions: The LPRC oscillator will stay on if the WDT or FSCM is enabled. The LP oscillator will stay on if LPOSCEN = 1 (OSCCON<1>). Note: The processor will continue to execute code throughout the clock switching sequence. Timing sensitive code should not be executed during this time. Clock Transition Timing Diagram
New Source Enabled New Source Stable Old Source Disabled
7
Oscillator
Figure 7-14:
1 2 3 4 5 6 7 8 9 10
OSWEN
Note: The system clock can be any selected source Primary, Secondary, FRC or LPRC.
DS70054D-page 7-35
7.17.4
7.17.5
7.17.6
DS70054D-page 7-36
Section 7. Oscillator
7.17.7
7.17.7.1
7
Oscillator
(low byte) unlock sequence #OSCCONL, w1 #0x01, w0 #0x46, w2 #0x57, w3 w2, [w1] w3, [w1]
7.17.7.2
Aborting a Clock Switch The following code sequence would be used to ABORT an unsuccessful clock switch:
MOV BCLR MOV MOV.B MOV.B MOV.B MOV.B MOV.B OSCCON,W0 W0, #OSWEN #OSCCON,W1 #0x46,W2 #0x57,W3 W2, [W1] W3, [W1] W0, [W1] ; ; ; ; ; ; ; ; Read OSCCON into W0 Clear bit 0 in W0 pointer to OSCCON first unlock code second unlock code write first unlock code write second unlock code ABORT the switch
DS70054D-page 7-37
2.
3.
4.
Question 2:
Answer: The gain is too high for this oscillator circuit. Refer to Section 7.6 Crystal Oscillators/Ceramic Resonators to aid in the selection of C2 (may need to be higher), Rs (may be needed) and Clock mode (wrong mode may be selected). This is especially possible for low frequency crystals, like the common 32.768 kHz. Question 3: The design runs fine, but the frequency is slightly off. What can be done to adjust this?
Answer: Changing the value of C1 has some effect on the oscillator frequency. If a SERIES resonant crystal is used, it will resonate at a different frequency than a PARALLEL resonant crystal of the same frequency call-out. Ensure that you are using a PARALLEL resonant crystal. Question 4: The board works fine, then suddenly quits or loses time.
Answer: Other than the obvious software checks that should be done to investigate losing time, it is possible that the amplitude of the oscillator output is not high enough to reliably trigger the oscillator input. Look at the C1 and C2 values and ensure that the device Configuration bits are correct for the desired oscillator mode. Question 5: If I put an oscilloscope probe on an oscillator pin, I dont see what I expect. Why?
Answer: Remember that an oscilloscope probe has capacitance. Connecting the probe to the oscillator circuitry will modify the oscillator characteristics. Consider using a low capacitance (active) probe.
DS70054D-page 7-38
Section 7. Oscillator
7.19 Related Application Notes
This section lists application notes that are related to this section of the manual. These application notes may not be written specifically for the dsPIC30F Product Family, but the concepts are pertinent and could be used with modification and possible limitations. The current application notes related to the Oscillator module are: Title
PICmicro Microcontroller Oscillator Design Guide Low Power Design using PICmicro Microcontrollers Crystal Oscillator Basics and Crystal Selection for rfPIC and PICmicro Devices
7
Oscillator
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70054D-page 7-39
Revision B
This revision incorporates technical content changes for the dsPIC30F Oscillator module.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
This revision incorporates details on the three versions (VERSION 1, VERSION 2 and VERSION 3) of the Oscillator system implemented in dsPIC30F devices in the General Purpose, Sensor and Motor Control families.
DS70054D-page 7-40
Section 8. Reset
HIGHLIGHTS
This section of the manual contains the following topics: 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11 8.12 8.13 8.14 Introduction .................................................................................................................... 8-2 Clock Source Selection at Reset ................................................................................... 8-5 POR: Power-on Reset ................................................................................................... 8-5 External Reset (EXTR) .................................................................................................. 8-7 Software Reset Instruction (SWR) ................................................................................. 8-7 Watchdog Time-out Reset (WDTR) ............................................................................... 8-7 Brown-out Reset (BOR) ................................................................................................. 8-8 Using the RCON Status Bits ........................................................................................ 8-10 Device Reset Times ..................................................................................................... 8-11 Device Start-up Time Lines .......................................................................................... 8-13 Special Function Register Reset States....................................................................... 8-16 Design Tips .................................................................................................................. 8-17 Related Application Notes............................................................................................ 8-18 Revision History ........................................................................................................... 8-19
8
Reset
DS70055C-page 8-1
A simplified block diagram of the Reset module is shown in Figure 8-1. Any active source of Reset will make the SYSRST signal active. Many registers associated with the CPU and peripherals are forced to a known Reset state. Most registers are unaffected by a Reset; their status is unknown on POR and unchanged by all other Resets. Note: Refer to the specific peripheral or CPU section of this manual for register Reset states.
All types of device Reset will set a corresponding status bit in the RCON register to indicate the type of Reset (see Register 8-1). A POR will clear all bits except for the POR and BOR bits (RCON<2:1>), which are set. The user may set or clear any bit at any time during code execution. The RCON bits only serve as status bits. Setting a particular Reset status bit in software will not cause a device Reset to occur. The RCON register also has other bits associated with the Low Voltage Detect module, Watchdog Timer, and device power saving states. The function of these bits is discussed in other sections of this manual. Figure 8-1: Reset System Block Diagram
RESET Instruction Glitch Filter MCLR Sleep or Idle WDT Module VDD Rise Detect VDD Brown-out Reset BOR BOREN POR SYSRST
DS70055C-page 8-2
Section 8. Reset
Register 8-1: RCON: Reset Control Register R-0 BGST R/W-0 LVDEN R/W-0 R/W-1 R/W-0 LVDL<3:0> R/W-1 bit 8
R/W-0 SWR
R/W-0 SWDTEN
R/W-0 WDTO
R/W-0 SLEEP
R/W-0 IDLE
R/W-1 BOR
TRAPR: Trap Reset Flag bit 1 = A Trap Conflict Reset has occurred 0 = A Trap Conflict Reset has not occurred IOPUWR: Illegal Opcode or Uninitialized W Access Reset Flag bit 1 = An illegal opcode detection, an illegal Address mode, or uninitialized W register used as an address pointer caused a Reset 0 = An illegal opcode or uninitialized W Reset has not occurred BGST: Bandgap Stable bit 1 = The bandgap has stabilized 0 = Bandgap is not stable and LVD interrupts should be disabled LVDEN: Low Voltage Detect Power Enable bit 1 = Enables LVD, powers up LVD circuit 0 = Disables LVD, powers down LVD circuit LVDL<3:0>: Low Voltage Detection Limit bits Refer to Section 9. Low Voltage Detect (LVD) for further details.
bit 14
bit 13
bit 12
8
Reset
EXTR: External Reset (MCLR) Pin bit 1 = A Master Clear (pin) Reset has occurred 0 = A Master Clear (pin) Reset has not occurred SWR: Software RESET (Instruction) Flag bit 1 = A RESET instruction has been executed 0 = A RESET instruction has not been executed SWDTEN: Software Enable/Disable of WDT bit 1 = WDT is turned on 0 = WDT is turned off Note: If FWDTEN fuse bit is 1 (unprogrammed), the WDT is ALWAYS ENABLED, regardless of the SWDTEN bit setting.
bit 6
bit 5
bit 4
WDTO: Watchdog Timer Time-out Flag bit 1 = WDT Time-out has occurred 0 = WDT Time-out has not occurred SLEEP: Wake From Sleep Flag bit 1 = Device has been in Sleep mode 0 = Device has not been in Sleep mode IDLE: Wake-up From Idle Flag bit 1 = Device was in Idle mode 0 = Device was not in Idle mode
bit 3
bit 2
DS70055C-page 8-3
BOR: Brown-out Reset Flag bit 1 = A Brown-out Reset has occurred. Note that BOR is also set after Power-on Reset. 0 = A Brown-out Reset has not occurred POR: Power-on Reset Flag bit 1 = A Power-up Reset has occurred 0 = A Power-up Reset has not occurred Note: All of the Reset status bits may be set or cleared in software. Setting one of these bits in software does not cause a device Reset.
bit 0
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70055C-page 8-4
Section 8. Reset
8.2 Clock Source Selection at Reset
If clock switching is enabled, the system clock source at device Reset is chosen as shown in Table 8-1. If clock switching is disabled, the system clock source is always selected according to the oscillator configuration fuses. Refer to Section 7. Oscillator for further details. Table 8-1: Oscillator Selection vs. Type of Reset (Clock Switching Enabled) Reset Type POR BOR EXTR WDTR SWR Clock Source Selected Based On Oscillator Configuration Fuses Oscillator Configuration Fuses COSC Control bits (OSCCON<13:12>) COSC Control bits (OSCCON<13:12>) COSC Control bits (OSCCON<13:12>)
8.3
8
Reset
DS70055C-page 8-5
VPOR Time Internal Power-on Reset pulse occurs at VPOR and begins POR delay time, TPOR. TPOR
POR Circuit
Time System Reset is released after Power-up Timer expires. TPWRT SYSRST (0 ms, 4 ms, 16 ms or 64 ms)
Time
Note:
When the device exits the Reset condition (begins normal operation), the device operating parameters (voltage, frequency, temperature, etc.) must be within their operating ranges, otherwise the device will not function correctly. The user must ensure that the delay between the time power is first applied and the time SYSRST becomes inactive is long enough to get all operating parameters within specification.
DS70055C-page 8-6
Section 8. Reset
8.3.1 Using the POR Circuit
To take advantage of the POR circuit, just tie the MCLR pin directly to VDD. This will eliminate external RC components usually needed to create a Power-on Reset delay. A minimum rise time for VDD is required. Refer to the Electrical Specifications section in the specific device data sheet for further details. Depending on the application, a resistor may be required between the MCLR pin and VDD. This resistor can be used to decouple the MCLR pin from a noisy power supply rail. The resistor will also be necessary if the device programming voltage, VPP, needs to be placed on the MCLR pin while the device is installed in the application circuit. VPP is 13 volts for most devices. Figure 8-3 shows a possible POR circuit for a slow power supply ramp up. The external Power-on Reset circuit is only required if the device would exit Reset before the device VDD is in the valid operating range. The diode, D, helps discharge the capacitor quickly when VDD powers down. Figure 8-3: External Power-on Reset Circuit (For Slow VDD Rise Time)
VDD D VDD R R1 MCLR C dsPIC30F
8
Note 1: The value of R should be low enough so that the voltage drop across it does not violate the VIH specification of the MCLR pin. 2: R1 will limit any current flowing into MCLR from external capacitor C in the event of MCLR/VPP pin breakdown, due to Electrostatic Discharge (ESD) or Electrical Overstress (EOS).
Reset
8.3.2
8.4
8.5
8.6
DS70055C-page 8-7
On a BOR, the device will select the system clock source based on the device configuration bit values (FPR<3:0>, FOS<1:0>). The PWRT time-out (TPWRT), if enabled, will be applied before SYSRST is released. If a crystal oscillator source is selected, the Brown-out Reset will invoke the Oscillator Start-up Timer (OST). The system clock is held until OST expires. If a system clock source is derived from the PLL, then the clock will be held until the LOCK bit (OSCCON<5>) is set. The BOR status bit (RCON<1>) will be set to indicate that a BOR has occurred. The BOR circuit, if enabled, will continue to operate while in Sleep or Idle modes and will reset the device should VDD fall below the BOR threshold voltage. Refer to the Electrical Specifications section of the appropriate device data sheet for the BOR electrical specifications. Typical brown-out scenarios are shown in Figure 8-4. As shown, a PWRT delay (if enabled) will be initiated each time VDD rises above the VBOR trip point. Figure 8-4:
VDD VBOR TPWRT SYSRST
Brown-out Situations
VDD VBOR TPWRT SYSRST VDD dips before PWRT expires VDD TPWRT SYSRST VBOR
DS70055C-page 8-8
Section 8. Reset
8.7.1 BOR Configuration
The BOR module is enabled/disabled and configured via device configuration fuses. The BOR module is enabled by default and may be disabled (to reduce power consumption) by programming the BOREN device configuration fuse to a 0 (FBORPOR<7>). The BOREN configuration fuse is located in the FBORPOR Device Configuration register. The BOR voltage trip point (VBOR) is selected using the BORV<1:0> configuration fuses (FBOR<5:4>). Refer to Section 24. Device Configuration for further details.
8.7.2
8.7.3
8
Reset
8.7.4
8.7.5
DS70055C-page 8-9
Table 8-2 provides a summary of the Reset flag bit operation. Table 8-2: Reset Flag Bit Operation Flag Bit TRAPR (RCON<15>) IOPWR (RCON<14>) EXTR (RCON<7>) SWR (RCON<6>) WDTO (RCON<4>) SLEEP (RCON<3>) IDLE (RCON<2>) BOR (RCON<1>) POR (RCON<0>) Note: Set by: Trap conflict event Illegal opcode or uninitialized W register access MCLR Reset RESET instruction WDT time-out PWRSAV #SLEEP instruction PWRSAV #IDLE instruction POR, BOR POR POR POR POR POR PWRSAV instruction, POR POR POR Cleared by:
All RESET flag bits may be set or cleared by the user software.
DS70055C-page 8-10
Section 8. Reset
8.9 Device Reset Times
The Reset times for various types of device Reset are summarized in Table 8-3. Note that the system Reset signal, SYSRST, is released after the POR delay time and PWRT delay times expire. The time that the device actually begins to execute code will also depend on the system oscillator delays, which include the Oscillator Start-up Timer (OST) and the PLL lock time. The OST and PLL lock times occur in parallel with the applicable SYSRST delay times. The FSCM delay determines the time at which the FSCM begins to monitor the system clock source after the SYSRST signal is released. Table 8-3: Reset Type POR Reset Delay Times for Various Device Resets Clock Source EC, EXTRC, FRC, LPRC EC + PLL XT, HS, XTL, LP XT + PLL BOR EC, EXTRC, FRC, LPRC EC + PLL XT, HS, XTL, LP XT + PLL MCLR WDT Software Any Clock Any Clock Any clock SYSRST Delay TPOR + TPWRT TPOR + TPWRT TPOR + TPWRT TPOR + TPWRT TPWRT TPWRT TPWRT TPWRT System Clock Delay TLOCK TOST TOST + TLOCK TLOCK TOST TOST + TLOCK FSCM Delay TFSCM TFSCM TFSCM TFSCM TFSCM TFSCM Notes 1, 2 1, 2, 4, 5 1, 2, 3, 5 1, 2, 3, 4, 5 2 1, 2, 4, 5 1, 2, 3, 5 1, 2, 3, 4, 5
8
Reset
Illegal Opcode Any Clock Uninitialized W Any Clock Trap Conflict Any Clock
Note 1: TPOR = Power-on Reset delay (10 s nominal). 2: TPWRT = Additional power-up delay as determined by the FPWRT<1:0> configuration bits. This delay is 0 ms, 4 ms, 16 ms or 64 ms nominal. 3: TOST = Oscillator Start-up Timer. A 10-bit counter counts 1024 oscillator periods before releasing the oscillator clock to the system. 4: TLOCK = PLL lock time (20 s nominal). 5: TFSCM = Fail-Safe Clock Monitor delay (100 s nominal).
DS70055C-page 8-11
8.9.2
8.9.2.1
FSCM Delay for Crystal and PLL Clock Sources When the system clock source is provided by a crystal oscillator and/or the PLL, a small delay, TFSCM, will automatically be inserted after the POR and PWRT delay times. The FSCM will not begin to monitor the system clock source until this delay expires. The FSCM delay time is nominally 100 s and provides additional time for the oscillator and/or PLL to stabilize. In most cases, the FSCM delay will prevent an oscillator failure trap at a device Reset when the PWRT is disabled.
DS70055C-page 8-12
Section 8. Reset
8.10 Device Start-up Time Lines
Figure 8-5 through Figure 8-8 show graphical time lines of the delays associated with device Reset for several operating scenarios. Figure 8-5 shows the delay time line when a crystal oscillator and PLL are used as the system clock and the PWRT is disabled. The internal Power-on Reset pulse occurs at the VPOR threshold. A small POR delay occurs after the internal Reset pulse. (The POR delay is always inserted before device operation begins.) The FSCM, if enabled, begins to monitor the system clock for activity when the FSCM delay expires. Figure 8-5 shows that the oscillator and PLL delays expire before the Fail-Safe Clock Monitor (FSCM) is enabled. However, it is possible that these delays may not expire until after FSCM is enabled. In this case, the FSCM would detect a clock failure and a clock failure trap will be generated. If the FSCM delay does not provide adequate time for the oscillator and PLL to stabilize, the PWRT could be enabled to allow more delay time before device operation begins and the FSCM starts to monitor the system clock. Figure 8-5: Device Reset Delay, Crystal + PLL Clock Source, PWRT Disabled
VDD
8
Reset
SYSRST
TLOCK
Note 1: Delay times shown are not drawn to scale. 2: FSCM, if enabled, monitors system clock at expiration of TPOR + TFSCM. 3: TLOCK not inserted when PLL is disabled.
DS70055C-page 8-13
VDD
TPOR SYSRST
TPWRT
Note 1: Delay times shown are not drawn to scale. 2: FSCM, if enabled, monitors system clock at expiration of TPOR + TPWRT + TFSCM. 3: TLOCK not inserted when PLL is is disabled.
DS70055C-page 8-14
Section 8. Reset
The Reset time line in Figure 8-7 shows an example when an EC + PLL clock source is used as the system clock and the PWRT is enabled. This example is similar to the one shown in Figure 8-6, except that the oscillator start-up timer delay, TOST, does not occur. Figure 8-7: Device Reset Delay, EC + PLL Clock, PWRT Enabled
VDD
TPOR SYSRST
TPWRT
8
Reset
Note 1: Delay times shown are not drawn to scale. 2: FSCM, if enabled, monitors system clock at expiration of TPOR + TPWRT + TFSCM. 3: TLOCK not inserted when PLL is is disabled.
DS70055C-page 8-15
VDD
Internal Power-on Reset Pulse POR TPOR SYSRST Oscillator released to system. OSC Delay System Reset released.
FSCM
Note 1: Delay times shown are not drawn to scale. 2: If enabled, FSCM will begin to monitor system clock at expiration of TPOR.
8.11
DS70055C-page 8-16
Section 8. Reset
8.12 Design Tips
Question 1: How do I use the RCON register?
Answer: The initialization code after a Reset should examine RCON and confirm the source of the Reset. In certain applications, this information can be used to take appropriate action to correct the problem that caused the Reset to occur. All Reset status bits in the RCON register should be cleared after reading them to ensure the RCON value will provide meaningful results after the next device Reset. Question 2: How should I use BOR in a battery operated application?
Answer: The BOR feature is not designed to operate as a low battery detect, and should be disabled in battery operated systems (to save current). The Low Voltage Detect peripheral can be used to detect when the battery has reached its end of life voltage. Question 3: The BOR module does not have the programmable trip points that my application needs. How can I work around this?
Answer: There are some applications where the devices programmable BOR trip point levels may still not be at the desired level for the application. Figure 8-9 shows a possible circuit for external brown-out protection, using the MCP100 system supervisor. Figure 8-9: External Brown-out Protection Using the MCP100
VDD VDD MCP100 VSS RST MCLR dsPIC30F
8
Reset
Question 4:
I initialized a W register with a 16-bit address, but the device appears to reset when I attempt to use the register as an address.
Answer: Because all data addresses are 16 bit values, the uninitialized W register logic only recognizes that a register has been initialized correctly if it was subjected to a word load. Two byte moves to a W register, even if successive, will not work, resulting in a device Reset if the W register is used as an address pointer in an operation.
DS70055C-page 8-17
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70055C-page 8-18
Section 8. Reset
8.14 Revision History Revision A
This is the initial released revision of this document.
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
8
Reset
DS70055C-page 8-19
DS70055C-page 8-20
9
Low Voltage Detect (LVD)
DS70056C-page 9-1
Time
TA
TB
Legend: VLVD = LVD trip point VMIN = Minimum valid device operating voltage
DS70056C-page 9-2
16 to 1 MUX
LVDIF
LVDEN
9.1.1
9
Low Voltage Detect (LVD)
9.1.1.1
LVD Trip Point Selection The LVDL<3:0> bits (RCON<11:8>) will choose the LVD trip point. There are 15 trip point options that may be selected from the internal voltage divider connected to VDD. If none of the trip point options are suitable for the application, there is one option that allows the LVD sample voltage to be applied externally on the LVDIN pin. (Refer to the specific device data sheet for the pin location.) The nominal trip point voltage for the external LVD input is 1.24 volts. The LVD external input option requires that the user select values for an external voltage divider circuit that will generate a LVD interrupt at the desired VDD.
9.1.2
DS70056C-page 9-3
R/W-0 SWR
R/W-0 SWDTEN
R/W-0 WDTO
R/W-0 SLEEP
R/W-0 IDLE
R/W-1 BOR
BGST: Bandgap Stable bit 1 = The bandgap has stabilized 0 = Bandgap is not stable and LVD interrupts should be disabled LVDEN: Low Voltage Detect Power Enable bit 1 = Enables LVD, powers up LVD circuit 0 = Disables LVD, powers down LVD circuit LVDL<3:0>: Low Voltage Detection Limit bits 1111 = Input to LVD is the LVDIN pin (1.24V threshold, nominal) 1110 = 4.6V 1101 = 4.3V 1100 = 4.1V 1011 = 3.9V 1010 = 3.7V 1001 = 3.6V 1000 = 3.4V 0111 = 3.1V 0110 = 2.9V 0101 = 2.8V (default value at Reset) 0100 = 2.6V 0011 = 2.5V 0010 = 2.3V 0001 = 2.1V 0000 = 1.9V Note: The voltage threshold values shown here are provided for design guidance only. Refer to the Electrical Specifications in the device data sheet for further details.
bit 12
bit 11-8
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
Note:
See Section 8. Reset for a description of other bits in the RCON register.
DS70056C-page 9-4
Depending on the power source for the device, the supply voltage may decrease relatively slowly. This means that the LVD module does not need to be constantly operating. To decrease the current requirements, the LVD circuitry only needs to be enabled for short periods where the voltage is checked. After doing the check, the LVD module may be disabled.
9.2.1
2. 3. 4. 5. 6. 7. 8.
Once the VDD has fallen below the programmed LVD threshold, the LVDIF bit will remain set. When the LVD module has interrupted the CPU, one of two actions may be taken in the ISR: 1. or 2. Decrease the LVD voltage threshold using the LVDL control bits and clear the LDVIF status bit. This technique can be used to track a gradually decreasing battery voltage. Clear the LVDIE control bit to disable further LVD module interrupts and take the appropriate shutdown procedures.
9
Low Voltage Detect (LVD)
9.2.2
9.2.3
DS70056C-page 9-5
Answer: Ensure that the internal voltage reference is stable before enabling the LVD interrupt. This is done by polling the BGST status bit (RCON<13>) after the LVD module is enabled. After this time delay, the LVDIF bit should be cleared and then, the LVDIE bit may be set. Question 2: How can I reduce the current consumption of the module?
Answer: Low Voltage Detect is used to monitor the device voltage. The power source is normally a battery that ramps down slowly. This means that the LVD circuity can be disabled for most of the time, and only enabled occasionally to do the device voltage check. Question 3: Should I enable the BOR circuit for a battery powered application?
Answer: The BOR circuit is intended to protect the device from improper operation due to power supply fluctuations caused by the AC line voltage. The BOR is typically not required for battery applications and can be disabled for lower current consumption.
DS70056C-page 9-6
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
9
Low Voltage Detect (LVD)
DS70056C-page 9-7
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
DS70056C-page 9-8
10
WDT and Power Saving Modes
DS70057D-page 10-1
10.2
Note:
SLEEP_MODE and IDLE_MODE are constants defined in the assembler include file for the selected device.
The Power Saving modes can be exited as a result of an enabled interrupt, WDT time-out, or a device Reset. When the device exits one of these two Operating modes, it is said to wake-up. The characteristics of the Power Saving modes are described in subsequent sections.
10.3
Sleep Mode
The characteristics of Sleep mode are as follows: The system clock source is shutdown. If an on-chip oscillator is used, it is turned off. The device current consumption will be at a minimum provided that no I/O pin is sourcing current. The Fail-Safe Clock Monitor (FSCM) does not operate during Sleep mode since the system clock source is disabled. The LPRC clock will continue to run in Sleep mode if the WDT is enabled. The Low Voltage Detect circuit, if enabled, remains operative during Sleep mode. The BOR circuit, if enabled, remains operative during Sleep mode. The WDT, if enabled, is automatically cleared prior to entering Sleep mode. Some peripherals may continue to operate in Sleep mode. These peripherals include I/O pins that detect a change in the input signal, or peripherals that use an external clock input. Any peripheral that is operating on the system clock source will be disabled in Sleep mode. The processor will exit, or wake-up, from Sleep on one of the following events: On any interrupt source that is individually enabled On any form of device Reset On a WDT time-out
10.3.1
DS70057D-page 10-2
Clock Source EC, EXTRC EC + PLL XT + PLL XT, HS, XTL LP (OFF during Sleep) LP (ON during Sleep) FRC, LPRC
Note 1: TPOR = Power-on Reset delay (10 s nominal). 2: TOST = Oscillator Start-up Timer. A 10-bit counter counts 1024 oscillator periods before releasing the oscillator clock to the system. 3: TLOCK = PLL lock time (20 s nominal). 4: TFSCM = Fail-Safe Clock Monitor delay (100 s nominal). Note: Please refer to the Electrical Specifications section of the dsPIC30F device data sheet for TPOR, TFSCM and TLOCK specification values.
10.3.3
10.3.4
10.3.5
10
WDT and Power Saving Modes
DS70057D-page 10-3
10.3.7
10.3.8
10.4
Idle Mode
User interrupt sources that are assigned to CPU priority level 0 cannot wake the CPU from Idle mode, because the interrupt source is effectively disabled. To use an interrupt as a wake-up source, the CPU priority level for the interrupt must be assigned to CPU priority level 1 or greater. When the device enters Idle mode, the following events occur: The CPU will stop executing instructions. The WDT is automatically cleared. The system clock source will remain active and peripheral modules, by default, will continue to operate normally from the system clock source. Peripherals can optionally be shutdown in Idle mode using their stop-in-idle control bit. (See peripheral descriptions for further details.) If the WDT or FSCM is enabled, the LPRC will also remain active. The processor will wake from Idle mode on the following events: On any interrupt that is individually enabled. On any source of device Reset. On a WDT time-out. Upon wake-up from Idle, the clock is re-applied to the CPU and instruction execution begins immediately starting with the instruction following the PWRSAV instruction, or the first instruction in the ISR.
DS70057D-page 10-4
10.4.2
10.4.3
10.4.4
10.5
10
WDT and Power Saving Modes
DS70057D-page 10-5
Enable WDT LPRC Control LPRC Oscillator Wake-up from Sleep WDT Overflow Reset 8-bit Watchdog Timer Reset WDT Programmable Prescaler B 1:1, 1:2, 1:3, 1:15, 1:16 4 512 kHz 4 FWC = 128 kHz
FWPSA1 FWPSA0
CLRWDT Instr. PWRSAV Instr. All Device Resets Sleep or Idle State
10.6.1
10.6.1.1
Software Controlled WDT If the FWDTEN device configuration bit is set, then the WDT is always enabled. However, the WDT can be optionally controlled in the user software when the FWDTEN configuration bit has been programmed to 0. The WDT is enabled in software by setting the SWDTEN control bit (RCON<5>). The SWDTEN control bit is cleared on any device Reset. The software WDT option allows the user to enable the WDT for critical code segments and disable the WDT during non-critical segments for maximum power savings.
DS70057D-page 10-6
10.6.3
10.6.3.1
WDT Prescalers The WDT has two clock prescalers, Prescaler A and Prescaler B, to allow a wide variety of time-out periods. Prescaler A can be configured for 1:1, 1:8, 1:64 or 1:512 divide ratios. Prescaler B can be configured for any divide ratio from 1:1 through 1:16. Time-out periods that range between 2 ms and 16 seconds (nominal) can be achieved using the prescalers. The prescaler settings are selected using the FWPSA<1:0> (Prescaler A) and FWPSB<3:0> (Prescaler B) configuration bits in the FWDT Device Configuration register. The FWPSA<1:0> and FWPSB<3:0> values are written during device programming. For more information on the WDT prescaler configuration bits, please refer to Section 24. Device Configuration. The time-out period of the WDT is calculated as follows: Equation 10-1: WDT Time-out Period WDT Period = 2 ms Prescale A Prescale B
Note:
The WDT time-out period is directly related to the frequency of the LPRC oscillator. The frequency of the LPRC oscillator will vary as a function of device operating voltage and temperature. Please refer to the specific dsPIC30F device data sheet for LPRC clock frequency specifications.
10
WDT and Power Saving Modes
DS70057D-page 10-7
1 2 16 2 4 32 3 6 48 4 8 64 5 10 80 6 12 96 7 14 112 8 16 128 9 18 144 10 20 160 11 22 176 12 24 192 13 26 208 14 28 224 15 30 240 16 32 256 Note: All time values are in milliseconds.
10.6.4
10.6.5
DS70057D-page 10-8
Please check individual device data sheet for specific operational details of the PMD register.
10
WDT and Power Saving Modes
DS70057D-page 10-9
Answer: Make sure that the software loop that contains the CLRWDT instruction meets the minimum specification of the WDT (not the typical value). Also, make sure that interrupt processing time has been accounted for. Question 2: What should my software do before entering Sleep or Idle mode?
Answer: Make sure that the sources intended to wake the device have their IE bits set. In addition, make sure that the particular source of interrupt has the ability to wake the device. Some sources do not function when the device is in Sleep mode. If the device is to be placed in Idle mode, make sure that the stop-in-idle control bit for each device peripheral is properly set. These control bits determine whether the peripheral will continue operation in Idle mode. See the individual peripheral sections of this manual for further details. Question 3: How do I tell which peripheral woke the device from Sleep or Idle mode?
Answer: You can poll the IF bits for each enabled interrupt source to determine the source of wake-up.
DS70057D-page 10-10
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
10
WDT and Power Saving Modes
DS70057D-page 10-11
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
Section 10.7, Peripheral Module Disable (PMD) Registers, has been added.
DS70057D-page 10-12
10
WDT and Power Saving Modes
DS70057D-page 10-13
11
I/O Ports
DS70058D-page 11-1
11
11.1 Introduction
This section provides information on the I/O ports for the dsPIC30F family of devices. All of the device pins (except VDD, VSS, MCLR, and OSC1/CLKI) are shared between the peripherals and the general purpose I/O ports. The general purpose I/O ports allow the dsPIC30F to monitor and control other devices. Most I/O pins are multiplexed with alternate function(s). The multiplexing will depend on the peripheral features on the device variant. In general, when a peripheral is functioning, that pin may not be used as a general purpose I/O pin. Figure 11-1 shows a block diagram of a typical I/O port. This block diagram does not take into account peripheral functions that may be multiplexed onto the I/O pin. Figure 11-1: Dedicated Port Structure Block Diagram
Dedicated Port Module
I/O Ports
Read TRIS
I/O Cell
D CK
DS70058D-page 11-2
11.2.1
TRIS Registers
The TRISx register control bits determine whether each pin associated with the I/O port is an input or an output. If the TRIS bit for an I/O pin is a 1, then the pin is an input. If the TRIS bit for an I/O pin is a 0, then the pin is configured for an output. An easy way to remember is that a 1 looks like an I (input) and a 0 looks like an O (output). All port pins are defined as inputs after a Reset.
11.2.2
PORT Registers
Data on an I/O pin is accessed via a PORTx register. A read of the PORTx register reads the value of the I/O pin, while a write to the PORTx register writes the value to the port data latch. Many instructions, such as BSET and BCLR instructions, are read-modify-write operations. Therefore, a write to a port implies that the port pins are read, this value is modified, and then written to the port data latch. Care should be taken when read-modify-write commands are used on the PORTx registers and when some I/O pins associated with the port are configured as inputs. If an I/O pin configured as an input is changed to an output at some later time, an unexpected value may be output on the I/O pin. This effect occurs because the read-modify-write instruction reads the instantaneous value on the input pin and loads that value into the port data latch.
11.2.3
LAT Registers
The LATx register associated with an I/O pin eliminates the problems that could occur with read-modify-write instructions. A read of the LATx register returns the values held in the port output latches, instead of the values on the I/O pins. A read-modify-write operation on the LAT register, associated with an I/O port, avoids the possibility of writing the input pin values into the port latches. A write to the LATx register has the same effect as a write to the PORTx register. The differences between the PORT and LAT registers can be summarized as follows: A write to the PORTx register writes the data value to the port latch. A write to the LATx register writes the data value to the port latch. A read of the PORTx register reads the data value on the I/O pin. A read of the LATx register reads the data value held in the port latch.
Any bit and its associated data and control registers that are not valid for a particular device will be disabled. That means the corresponding LATx and TRISx registers, and the port pin, will read as zeros.
DS70058D-page 11-3
11
11.3 Peripheral Multiplexing
When a peripheral is enabled the associated pin output drivers are typically module controlled while a few are user settable. The I/O pin may be read through the input data path, but the output driver for the I/O port bit is generally disabled. An I/O port that shares a pin with another peripheral is always subservient to the peripheral. The peripherals output buffer data and control signals are provided to a pair of multiplexers. The multiplexers select whether the peripheral, or the associated port, has ownership of the output data and control signals of the I/O pin. Figure 11-2 shows how ports are shared with other peripherals, and the associated I/O pin to which they are connected. Note: In order to use PORTB pins for digital I/O, the corresponding bits in the ADPCFG register must be set to 1, even if the A/D module is turned off.
I/O Ports
Figure 11-2:
WR LAT WR Port
CK Data Latch
Peripheral A Input
Peripheral B Input
11.3.1
DS70058D-page 11-4
Most serial communication peripherals, when enabled, take full control of the I/O pin, so that the input pins associated with the peripheral cannot be affected through the corresponding PORT registers. These peripherals include the following: 11.3.1.2 SPITM I2CTM DCI UART CAN
Pin Control Summary When a peripheral is enabled the associated pin output drivers are typically module controlled while a few are user settable. The term "Module Control" means that the associated port pin output driver is disabled and the pin can only be controlled and accessed by the peripheral. The term "User Settable" means that the associated peripheral port pin output driver is user configurable via the associated TRISx SFR. The TRISx register must be set properly for the peripheral to function properly. For "User Settable" peripheral pins, the actual port pin state can always be read via the PORTx SFR. An Input Capture peripheral makes a good example of a User Settable peripheral. The user must write the associated TRIS register to configure the Input Capture pin as an input. Since the I/O pin circuitry is still active when the Input Capture is enabled, a 'trick' can be used to manually produce capture events using software. The Input Capture pin is configured as an output using the associated TRIS register. Then, the software can write values to the corresponding LAT register drive to internally control the Input Capture pin and force capture events. As another example an INTx pin can be configured as an output and then by writing to the associated LATx bit an INTx interrupt, if enabled, can be generated. The UART is an example of a Module Control peripheral. When the UART is enabled, the PORT and TRIS registers have no effect and cannot be used to read or write the RX and TX pins. Most communication peripheral functions available on the dsPIC are Module Control peripherals. For example, the SPI module can be configured for Master mode in which only the SDO pin is required. In this scenario the SDI pin can be configured as a general purpose output pin by clearing (setting to a logic "0") the associated TRISx bit. Table 11-1 presents a summary of the dsPIC peripherals and associated Pin Output Control and Port pin read status.
DS70058D-page 11-5
11
Table 11-1: Port Pin Control Summary Table Peripheral Pins SDOx SDIx SCKx SSx UART (x = 1 or 2) I2C Input Change Notice Input Capture Output Compare Data Converter Interface UxRX UxTX SCL SDA CN0 - CN23 IC1 - IC8 OC1 - OC8 COFS CSCK CSDI CSDO PWMx FLTA/B QEA QEB INDX TRISx - Pin Output Control <DISSDO = 1>, User Settable <DISSDO = 0>, Module Control User Settable Module Control <SSEN = 0>, User Settable <SSEN = 1>, Module Control Module Control <UTXEN = 0>, User Settable <UTXEN = 1>, Module Control Module Control Module Control User Settable User Settable Module Control Module Control Module Control Module Control Module Control Module Control User Settable Module Control (QEI mode) User Settable (16-bit Timer mode) Module Control (QEI mode) User Settable (16-bit Timer mode) Module Control (QEIM<2:0> = 100 or 110) User Settable in all other modes Module Control Module Control User Settable PORTx Pin Read Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Peripheral Module Enabled State SPI (x = 1 or 2)
I/O Ports
CAN (x = 1 or 2) INTx
11.4
Port Descriptions
Refer to the device data sheet for a description of the available I/O ports and peripheral multiplexing details.
DS70058D-page 11-6
CN0PUE (CNPU1<0>) CN0 pin D C Q CN0 Change CN Interrupt Q C CN0IE (CNEN1<0>) CN1 Change CN1-CN23 Details Not Shown
CN23 Change
11.5.1
CN Control Registers
There are four control registers associated with the CN module. The CNEN1 and CNEN2 registers contain the CNxIE control bits, where x denotes the number of the CN input pin. The CNxIE bit must be set for a CN input pin to interrupt the CPU. The CNPU1 and CNPU2 registers contain the CNxPUE control bits. Each CN pin has a weak pull-up device connected to the pin, which can be enabled or disabled using the CNxPUE control bits. The weak pull-up devices act as a current source that is connected to the pin and eliminate the need for external resistors when push button or keypad devices are connected. Refer to the Electrical Specifications section of the device data sheet for CN pull-up device current specifications.
DS70058D-page 11-7
11
11.5.2 CN Configuration and Operation
The CN pins are configured as follows: 1. 2. 3. 4. 5. 6. Ensure that the CN pin is configured as a digital input by setting the associated bit in the TRISx register. Enable interrupts for the selected CN pins by setting the appropriate bits in the CNEN1 and CNEN2 registers. Turn on the weak pull-up devices (if desired) for the selected CN pins by setting the appropriate bits in the CNPU1 and CNPU2 registers. Clear the CNIF (IFS0<15>) interrupt flag. Select the desired interrupt priority for CN interrupts using the CNIP<2:0> control bits (IPC3<14:12>). Enable CN interrupts using the CNIE (IEC0<15>) control bit.
I/O Ports
When a CN interrupt occurs, the user should read the PORT register associated with the CN pin(s). This will clear the mismatch condition and setup the CN logic to detect the next pin change. The current PORT value can be compared to the PORT read value obtained at the last CN interrupt to determine the pin that changed. The CN pins have a minimum input pulse width specification. Refer to the Electrical Specifications section of the device data sheet for further details.
11.6
DS70058D-page 11-8
R/W-0 CN5IE
R/W-0 CN4IE
R/W-0 CN3IE
R/W-0 CN2IE
R/W-0 CN1IE
CNxIE: Input Change Notification Interrupt Enable bits 1 = Enable interrupt on input change 0 = Disable interrupt on input change Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
CNEN2: Input Change Notification Interrupt Enable Register2 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 bit 8 Lower Byte: R/W-0 CN23IE bit 7 R/W-0 CN22IE R/W-0 CN21IE R/W-0 CN20IE R/W-0 CN19IE R/W-0 CN18IE R/W-0 CN17IE R/W-0 CN16IE bit 0
Unimplemented: Read as 0 CNxIE: Input Change Notification Interrupt Enable bits 1 = Enable interrupt on input change 0 = Disable interrupt on input change Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70058D-page 11-9
11
Register 11-3: CNPU1: Input Change Notification Pull-up Enable Register1 Upper Byte: R/W-0 R/W-0 CN15PUE CN14PUE bit 15
I/O Ports
R/W-0 CN13PUE
R/W-0 CN12PUE
R/W-0 CN9PUE
R/W-0 CN5PUE
R/W-0 CN4PUE
R/W-0 CN3PUE
R/W-0 CN2PUE
R/W-0 CN1PUE
CNxPUE: Input Change Notification Pull-up Enable bits 1 = Enable pull-up on input change 0 = Disable pull-up on input change Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
CNPU2: Input Change Notification Pull-up Enable Register2 U-0 U-0 U-0 U-0 U-0 U-0 U-0 bit 8
Lower Byte: R/W-0 R/W-0 CN23PUE CN22PUE bit 7 bit 15-8 bit 7-0 Unimplemented: Read as 0
R/W-0 CN21PUE
R/W-0 CN18PUE
R/W-0 CN17PUE
CNxPUE: Input Change Notification Pull-up Enable bits 1 = Enable pull-up on input change 0 = Disable pull-up on input change Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70058D-page 11-10
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70058D-page 11-11
11
11.8 Revision History Revision A
This is the initial released revision of this document.
I/O Ports
Revision B
This revision incorporates additional technical content for the dsPIC30F I/O Ports module.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
Revision D
Section 11.3.1.2 Pin Control Summary was added to this revision.
DS70058D-page 11-12
12
Timers
DS70059D-page 12-1
12
Timers
DS70059D-page 12-2
12.2.1
Type A Timer
At least one Type A timer is available on most dsPIC30F devices. For most dsPIC30F devices, Timer1 is a Type A timer. A Type A timer has the following unique features over other types: can be operated from the device Low Power 32 kHz Oscillator can be operated in an Asynchronous mode from an external clock source In particular, the unique features of a Type A timer allow it to be used for Real-Time Clock (RTC) applications. A block diagram of the Type A timer is shown in Figure 12-1.
Figure 12-1:
PRx Equal
Comparator x 16
TSYNC 1 Sync
TMRx Reset TxIF Event Flag 0 1 TGATE (Note 1) SOSCO LPOSCEN SOSCI Gate Sync TCY Q Q D CK TCS TGATE TGATE 0
TON 1X 01 00
DS70059D-page 12-3
12
PRx Equal Comparator x 16
Timers
Reset 0 1 TGATE
TMRx
Sync
Q Q
D CK
TON 1X 01 00
DS70059D-page 12-4
TxCK
Note:
In certain variants of the dsPIC30F family, the TxCK pin may not be available. Refer to the device data sheet for the I/O pin details. In such cases, the timer must use the system clock (FOSC/4) as its input clock, unless it is configured for 32-bit operation.
DS70059D-page 12-5
R/W-0 TGATE
U-0
R/W-0 TSYNC
R/W-0 TCS
U-0 bit 0
12
Timers
TON: Timer On Control bit 1 = Starts the timer 0 = Stops the timer Unimplemented: Read as 0 TSIDL: Stop in Idle Mode bit 1 = Discontinue timer operation when device enters Idle mode 0 = Continue timer operation in Idle mode Unimplemented: Read as 0 TGATE: Timer Gated Time Accumulation Enable bit 1 = Gated time accumulation enabled 0 = Gated time accumulation disabled (TCS must be set to 0 when TGATE = 1. Reads as 0 if TCS = 1) TCKPS<1:0>: Timer Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value Unimplemented: Read as 0 TSYNC: Timer External Clock Input Synchronization Select bit When TCS = 1: 1 = Synchronize external clock input 0 = Do not synchronize external clock input When TCS = 0: This bit is ignored. Read as 0. Timer1 uses the internal clock when TCS = 0. TCS: Timer Clock Source Select bit 1 = External clock from pin TxCK 0 = Internal clock (FOSC/4) Unimplemented: Read as 0 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 14 bit 13
bit 5-4
bit 3 bit 2
bit 1
bit 0
DS70059D-page 12-6
R/W-0 TGATE
R/W-0 T32
U-0
R/W-0 TCS
U-0 bit 0
TON: Timer On bit When T32 = 1 (in 32-bit Timer mode): 1 = Starts 32-bit TMRx:TMRy timer pair 0 = Stops 32-bit TMRx:TMRy timer pair When T32 = 0 (in 16-bit Timer mode): 1 = Starts 16-bit timer 0 = Stops 16-bit timer Unimplemented: Read as 0 TSIDL: Stop in Idle Mode bit 1 = Discontinue timer operation when device enters Idle mode 0 = Continue timer operation in Idle mode Unimplemented: Read as 0 TGATE: Timer Gated Time Accumulation Enable bit 1 = Timer gated time accumulation enabled 0 = Timer gated time accumulation disabled (TCS must be set to logic 0 when TGATE = 1) TCKPS<1:0>: Timer Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value T32: 32-bit Timer Mode Select bits 1 = TMRx and TMRy form a 32-bit timer 0 = TMRx and TMRy form separate 16-bit timer Unimplemented: Read as 0 TCS: Timer Clock Source Select bit 1 = External clock from pin TxCK 0 = Internal clock (FOSC/4) Unimplemented: Read as 0 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 14 bit 13
bit 5-4
bit 3
bit 2 bit 1
bit 0
DS70059D-page 12-7
R/W-0 TGATE
U-0
U-0
R/W-0 TCS
U-0 bit 0
12
Timers
TON: Timer On bit 1 = Starts 16-bit TMRx 0 = Stops 16-bit TMRx Unimplemented: Read as 0 TSIDL: Stop in Idle Mode bit 1 = Discontinue module operation when device enters Idle mode 0 = Continue module operation in Idle mode Unimplemented: Read as 0 TGATE: Timer Gated Time Accumulation Enable bit 1 = Timer gated time accumulation enabled 0 = Timer gated time accumulation disabled (Read as 0 if TCS = 1) (TCS must be set to logic 0 when TGATE = 1) TCKPS<1:0>: Timer Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value Unimplemented: Read as 0 TCS: Timer Clock Source Select bit 1 = External clock from pin TxCK 0 = Internal clock (FOSC/4) Unimplemented: Read as 0 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 14 bit 13
bit 5-4
bit 0
DS70059D-page 12-8
The Timer modes are determined by the following bits: TCS (TxCON<1>): Timer Clock Source Control bit TSYNC (T1CON<2>): Timer Synchronization Control bit (Type A time base only) TGATE (TxCON<6>): Timer Gate Control bit Each timer module is enabled or disabled using the TON Control bit (TxCON <15>). Note: Only Type A time bases support the External Asynchronous Clock mode.
12.4.1
Timer Mode
All types of timers have the ability to operate in Timer mode. In Timer mode, the input clock to the timer is provided from the internal system clock (FOSC/4). When enabled, the timer increments once per instruction cycle for a 1:1 prescaler setting. The Timer mode is selected by clearing the TCS control bit (TxCON<1>). The Synchronous mode control bit, TSYNC (T1CON<2>), has no effect, since the system clock source is used to generate the timer clock. Example 12-1:
; ; ; ; ;
The following code example will enable Timer1 interrupts, load the Timer1 Period register and start Timer1. When a Timer1 period match interrupt occurs, the interrupt service routine must clear the Timer1 interrupt status flag in software. CLR CLR MOV MOV BSET BCLR BCLR BCLR BSET BSET T1CON TMR1 #0xFFFF, w0 w0, PR1 IPC0, #T1IP0 IPC0, #T1IP1 IPC0, #T1IP2 IFS0, #T1IF IEC0, #T1IE T1CON, #TON ; ; ; ; ; ; ; ; ; ; ; ; Stops the Timer1 and reset control reg. Clear contents of the timer register Load the Period register with the value 0xFFFF Setup Timer1 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer1 interrupt status flag Enable Timer1 interrupts Start Timer1 with prescaler settings at 1:1 and clock source set to the internal instruction cycle
; Example code for Timer1 ISR __T1Interrupt: BCLR IFS0, #T1IF RETFIE
; Reset Timer1 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-9
12
Timers
Example 12-2:
; ; ; ; ;
The following code example will enable Timer1 interrupts, load the Timer1 Period register and start Timer1 using an external clock and a 1:8 prescaler setting. When a Timer1 period match interrupt occurs, the interrupt service routine must clear the Timer1 interrupt status flag in software. CLR CLR MOV MOV BSET BCLR BCLR BCLR BSET MOV MOV T1CON TMR1 #0x8CFF, w0 w0, PR1 IPC0, #T1IP0 IPC0, #T1IP1 IPC0, #T1IP2 IFS0, #T1IF IEC0, #T1IE #0x8016, W0 w0, T1CON ; ; ; ; ; ; ; ; ; ; ; ; Stops the Timer1 and reset control reg. Clear contents of the timer register Load the Period register with the value 0x8CFF Setup Timer1 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer1 interrupt status flag Enable Timer1 interrupts Start Timer1 with prescaler settings at 1:8 and clock source set to the external clock in the synchronous mode
#T1IF
; Reset Timer1 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-10
; ; ; ; ;
The following code example will enable Timer1 interrupts, load the Timer1 Period register and start Timer1 using an asynchronous external clock and a 1:8 prescaler setting. When a Timer1 period match interrupt occurs, the interrupt service routine must clear the Timer1 interrupt status flag in software. CLR CLR MOV MOV BSET BCLR BCLR BCLR BSET MOV MOV T1CON TMR1 #0x7FFF, w0 w0, PR1 IPC0, #T1IP0 IPC0, #T1IP1 IPC0, #T1IP2 IFS0, #T1IF IEC0, #T1IE #0x8012, w0 w0, T1CON ; ; ; ; ; ; ; ; ; ; ; ; Stops the Timer1 and reset control reg. Clear contents of the timer register Load the Period register with the value 0x7FFF Setup Timer1 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer1 interrupt status flag Enable Timer1 interrupts Start Timer1 with prescaler settings at 1:8 and clock source set to the external clock in the asynchronous mode
#T1IF
; Reset Timer1 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-11
12
Timers
Please refer to the device data sheet for the external clock timing specifications associated with the time bases.
12.4.5
The resolution of the timer count is directly related to the timer clock period. For a timer prescaler of 1:1, the timer clock period is one instruction cycle. For a timer prescaler of 1:256, the timer clock period is 256 times the instruction cycle. The timer clock resolution can be associated to the pulse width of the gate signal. Refer to the Electrical Specifications section in the device data sheet for further details on the gate width pulse requirements.
DS70059D-page 12-12
0000
0001
0002
0003
0004
0005
Example 12-4:
; ; ; ; ;
The following code example will enable Timer2 interrupts, load the Timer2 Period register and start Timer2 using an internal clock and an external gate signal. On the falling edge of the gate signal a Timer2 interrupt occurs. The interrupt service routine must clear the Timer2 interrupt status flag in software . CLR CLR MOV MOV BSET BCLR BCLR BCLR BSET BSET BSET T2CON TMR2 #0xFFFF, w0 w0, PR2 IPC1, IPC1, IPC1, IFS0, IEC0, T2CON, T2CON, #T2IP0 #T2IP1 #T2IP2 #T2IF #T2IE #TGATE #TON ; ; ; ; ; ; ; ; ; ; ; ; Stops the Timer2 and reset control reg. Clear contents of the timer register Load the Period register with the value 0xFFFF Setup Timer2 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer2 interrupt status flag Enable Timer2 interrupts Set up Timer2 for operation in Gated Time Accumulation mode Start Timer2
#T2IF
; Reset Timer2 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-13
12.6
Timer Interrupts
A 16-bit timer has the ability to generate an interrupt on a period match or falling edge of the external gate signal, depending on the Operating mode. The TxIF bit is set when one of the following conditions is true: The timer count matches the respective period register and the timer module is not operating in Gated Time Accumulation mode. The falling edge of the gate signal is detected when the timer is operating in Gated Time Accumulation mode. The TxIF bit must be cleared in software. A timer is enabled as a source of interrupt via the respective timer interrupt enable bit, TxIE. Furthermore, the interrupt priority level bits (TxIP<2:0>) must be written with a non-zero value in order for the timer to be a source of interrupt. Refer to Section 6. Reset Interrupts for further details. Note: A special case occurs when the period register is loaded with 0x0000 and the timer is enabled. No timer interrupts will be generated for this configuration.
12
Timers
Figure 12-5:
TMR2 PR2
47FD
47FE
47FF
4800
0000
0001
0002
0003
0004
0005
DS70059D-page 12-14
12.7.1
12.7.2
12.8
DS70059D-page 12-15
12
Timers
The following configuration settings assume Timer3 is a Type C time base and Timer2 is a Type B time base: TON (T2CON<15>) = 1. T32 (T2CON<3>) = 1. TCKPS<1:0> (T2CON<5:4>) are used to set the Prescaler mode for Timer2 (Type B time base). The TMR3:TMR2 register pair contains the 32-bit value of the timer module; the TMR3 (Type C time base) register is the Most Significant Word, while the TMR2 (Type B time base) register is the Least Significant Word of the 32-bit timer value. The PR3:PR2 register pair contains the 32-bit period value that is used for comparison with the TMR3:TMR2 timer value. T3IE (IEC0<7>) is used to enable the 32-bit timer interrupt for this configuration. T3IF (IFS0<7>) is used as a status flag for the timer interrupt. T3IP<2:0> (IPC1<14:12>) sets the interrupt priority level for the 32-bit timer. T3CON<15:0> are dont care bits. A block diagram representation of the 32-bit timer module using Timer2 and Timer3 as an example is shown in Figure 12-6.
DS70059D-page 12-16
TMR3 MSWord
TMR2 LSWord
Sync
Equal
Comparator x 32
PR2
Q Q
D CK
TCS
TCKPS<1:0> TON 2
01
00
Note 1: This block diagram assumes Timer3 is a Type C time base, Timer2 is a Type B time base. 2: 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.
DS70059D-page 12-17
12
Timers
; ; ; ; ;
The following code example will enable Timer3 interrupts, load the Timer3:Timer2 Period Register and start the 32-bit timer module consisting of Timer3 and Timer2. When a 32-bit period match interrupt occurs, the user must clear the Timer3 interrupt status flag in software. CLR CLR CLR CLR MOV MOV MOV BSET BCLR BCLR BCLR BSET BSET BSET T2CON T3CON TMR3 TMR2 #0xFFFF, w0 w0, PR3 w0, PR2 IPC1, IPC1, IPC1, IFS0, IEC0, T2CON, T2CON, #T3IP0 #T3IP1 #T3IP2 #T3IF #T3IE #T32 #TON ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Stops any 16/32-bit Timer2 operation Stops any 16-bit Timer3 operation Clear contents of the Timer3 timer register Clear contents of the Timer2 timer register Load the Period Register 3 with the value 0xFFFF Load the Period Register2 with value 0xFFFF Setup Timer3 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer3 interrupt status flag Enable Timer3 interrupts Enable 32-bit Timer operation Start 32-bit timer with prescaler settings at 1:1 and clock source set to the internal instruction cycle
#T3IF
; Reset Timer3 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-18
; ; ; ; ;
The following code example will enable Timer2 interrupts, load the Timer3:Timer2 Period register and start the 32-bit timer module consisting of Timer3 and Timer2. When a 32-bit period match interrupt occurs, the user must clear the Timer3 interrupt status flag in the software. CLR CLR CLR CLR MOV MOV MOV BSET BCLR BCLR BCLR BSET MOV MOV T2CON T3CON TMR3 TMR2 #0xFFFF, w0 w0, PR3 w0, PR2 IPC1, #T3IP0 IPC1, #T3IP1 IPC1, #T3IP2 IFS0, #T3IF IEC0, #T3IE #0x801A, w0 w0, T2CON ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Stops any 16/32-bit Timer2 operation Stops any 16-bit Timer3 operation Clear contents of the Timer3 timer register Clear contents of the Timer2 timer register Load the Period Register3 with the value 0xFFFF Load the Period Register2 with value 0xFFFF Setup Timer3 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer3 interrupt status flag Enable Timer3 interrupts Enable 32-bit Timer operation and start 32-bit timer with prescaler settings at 1:8 and clock source set to external clock
#T3IF
; Reset Timer3 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-19
12.10.4
12
Timers
The following code example will enable Timer2 interrupts, load the Timer3:Timer2 Period register and start the 32-bit timer module consisting of Timer3 and Timer2. When a 32-bit period match occurs the timer will simply roll over and continue counting. However, when at the falling edge of the Gate signal on T2CK an interrupt is generated, if enabled. The user must clear the Timer3 interrupt status flag in the software. CLR CLR CLR CLR MOV MOV MOV BSET BCLR BCLR BCLR BSET MOV MOV T2CON T3CON TMR3 TMR2 #0xFFFF, w0 w0, PR3 w0, PR2 IPC1, #T3IP0 IPC1, #T3IP1 IPC1, #T3IP2 IFS0, #T3IF IEC0, #T3IE #0x804C, w0 w0, T2CON ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Stops any 16/32-bit Timer2 operation Stops any 16-bit Timer3 operation Clear contents of the Timer3 register Clear contents of the Timer2 register Load the Period Register3 with the value 0xFFFF Load the Period Register2 with value 0xFFFF Setup Timer3 interrupt for desired priority level (this example assigns level 1 priority) Clear the Timer3 interrupt status flag Enable Timer3 interrupts Enable 32-bit Timer operation and Start 32-bit timer in gated time accumulation mode.
#T3IF
; Reset Timer3 interrupt flag ; User code goes here. ; Return from ISR
DS70059D-page 12-20
The following code segment reads the 32-bit timer formed by the Timer3-Timer2 pair into the registers W1(MS Word) and W0(LS Word). MOV TMR2, W0 MOV TMR3HLD, W1 ;Transfer the LSW into W1 ;Transfer the MSW from the holding register to W0
To write a value to the TMR3:TMR2 register pair, the user should first write the MSWord to the TMR3HLD register. When the LSWord of the timer value is written to TMR2, the contents of TMR3HLD will automatically be transferred to the TMR3 register.
12.12 12.12.1
When all of the above conditions are met, Timer1 will continue to count and detect period matches when the device is in Sleep mode. When a match between the timer and the period register occurs, the TxIF bit will be set and an interrupt can be generated to optionally wake the device from Sleep. Refer to Section 10. Watchdog Timer and Power Saving Modes for further details. When executing the SLEEP instruction in asynchronous mode using a 32.768 kHz real time oscillator to keep track of real time in seconds, it is important to insure the crystal connected to the inputs is operating. This can be done by checking for a non-zero value in TMR1 and then executing the SLEEP instruction. Failure to do so may result in a normal sleep execution with no wake-up from sleep due to timer time out. Example Code:
mov.b mov.b mov mov.b mov.b bset clr mov mov #0x46,w1 #0x57,w2 #OSCCONL,w3 w1,[w3] w2,[w3] OSCCONL,#LPOSCEN TMR1 #0x7FFF,W0 W0,PR1 ; follow write sequence ; for OSCCONL writes.
;enable 32Khz external xtal ; set up TMR1 for ;interrupts every 1.0 Sec
DS70059D-page 12-21
12.12.2
12
Timers
12.13 12.13.1
Peripherals Using Timer Modules Time Base for Input Capture/Output Compare
The Input Capture and Output Compare peripherals can select one of two timer modules as their time base. Refer to Section 13. Input Capture, Section 14. Output Compare, and the device data sheet for further details.
12.13.2
12.13.3
12.13.4
DS70059D-page 12-22
Table 12-1:
Bit 13 Timer1 Register Timer1 Period Register Timer2 Register Timer3 Holding Register (used in 32-bit mode only) Timer3 Register Timer2 Period Register Timer3 Period Register Timer4 Register Timer5 Holding Register (used in 32-bit mode only) Timer5 Register Timer4 Period Register Timer5 Period Register SI2CIF IC4IF IC2IE IC4IE T1IP<2:0> T3IP<2:0> INT2IP<2:0> T5IP<2:0> T2IP<2:0> OC1IP<2:0> IC3IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC2IE T4IE IC1IP<2:0> OC2IP<2:0> T4IP<2:0> NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF TSIDL TGATE TSIDL TGATE TCKPS1 TCKPS0 TCKPS1 TCKPS0 IC2IF OC4IF IC2IE OC4IE T32 T1IF OC3IF T1IE OC3IE OC1IF IC8IF OC1IE IC8IE TCS TCS IC1IF IC7IF IC1IE IC7IE INT0IP<2:0> IC2IP<2:0> OC4IP<2:0> INT01F INT1IF INT0IE INT1IE TSIDL TGATE TCKPS1 TCKPS0 TSIDL TGATE TCKPS1 TCKPS0 T32 TCS TCS TSIDL TGATE TCKPS1 TCKPS0 TSYNC TCS 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 Value on All Resets
Bit 15
Bit 14
TMR1
0100
0000 0000 0000 0000 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100
PR1
0102
T1CON
0104
TON
DS70059D-page 12-23
TMR2
0106
TMR3HLD
0108
TMR3
010A
PR2
010C
PR3
010E
T2CON
0110
TON
T3CON
0112
TON
TMR4
0114
TMR5HLD
0116
TMR5
0118
PR4
011A
PR5
011C
T4CON
011E
TON
T5CON
0120
TON
IFS0
0084
CNIF
MI2CIF
IFS1
0086
IC61F
IC5IF
IEC0
008C
CNIE
MI2CIE
IEC1
008E
IC6IE
IC5IE
IPC0
0094
IPC1
0096
IPC5
009E
Note:
Please refer to the device data sheet for specific memory map details.
Answer: Yes, but only Timer1 has the ability to wake the device from Sleep mode. This is because Timer1 allows the TMR1 register to increment from an external, unsynchronized clock source. When the TMR1 register is equal to the PR1 register, the device will wake from Sleep mode, if Timer1 interrupts have been enabled using the T1IE control bit. Refer to Section 12.12.1 Timer Operation in Sleep Mode for further details.
12.14.1
Example Application
An example application is shown in Figure 12-7, where Timer1 (Type A time base) is driven from an external 32.768 kHz oscillator. The external 32.768 kHz oscillator is typically used in applications where real-time needs to be kept, but it is also desirable to have the lowest possible power consumption. The Timer1 oscillator allows the device to be placed in Sleep while the timer continues to increment. When Timer1 overflows, the interrupt wakes up the device so that the appropriate registers can be updated. Figure 12-7: Timer1 Application
Power-Down Detect dsPIC30FXXX 8 OSC1 Current Sink S1 Backup Battery TMR1 CN1 S3 SOSCO 32.768 kHz SOSCI CN3 VSS CN2 S4 CN0 S2
12
Timers
VDD
In this example, a 32.768 kHz crystal is used as the time base for the Real-Time Clock. If the clock needs to be updated at 1 second intervals, then the period register, PR1, must be loaded with a value to allow the Timer1 to PR1 match at the desired rate. In the case of a 1 second Timer1 match event, the PR1 register should be loaded with a value of 0x8000. Note: The TMR1 register should never be written for correct real-time clock functionality, since the Timer1 clock source is asynchronous to the system clock. Writes to the TMR1 register may corrupt the real-time counter value, resulting in inaccurate timekeeping.
DS70059D-page 12-24
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70059D-page 12-25
Revision B
This revision incorporates technical content changes for the dsPIC30F Timers module.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
Revision D
Added example code in Section 12.12.1 Timer Operation in Sleep Mode.
12
Timers
DS70059D-page 12-26
DS70059D-page 12-27
13
Input Capture
DS70060C-page 13-1
The Input Capture module has a four-level FIFO buffer. The number of capture events required to generate a CPU interrupt can be selected by the user. Figure 13-1: Input Capture Block Diagram
From 16-bit Timers TMRy TMRz
16
16
1 Prescaler Counter (1, 4, 16) ICx pin 3 Edge Detection Logic and Clock Synchronizer ICM<2:0>(ICxCON<2:0>) Mode Select ICBNE, ICOV(ICxCON<4:3>) FIFO R/W Logic
ICTMR (ICxCON<7>)
System Bus
Note: An x in a signal, register or bit name denotes the number of the capture channel.
DS70060C-page 13-2
FIFO
R/W-0 ICSIDL
U-0
U-0
U-0
U-0
U-0
bit 8
R-0, HC ICOV
R-0, HC ICBNE
R/W-0
R/W-0 ICM<2:0>
R/W-0 bit 0
bit 15-14 Unimplemented: Read as 0 bit 13 ICSIDL: Input Capture Module Stop in Idle Control bit 1 = Input capture module will halt in CPU Idle mode 0 = Input capture module will continue to operate in CPU Idle mode Unimplemented: Read as 0 ICTMR: Input Capture Timer Select bits 1 = TMR2 contents are captured on capture event 0 = TMR3 contents are captured on capture event Note: bit 6-5 Timer selections may vary. Refer to the device data sheet for details. ICI<1:0>: Select Number of Captures per Interrupt bits 11 = Interrupt on every fourth capture event 10 = Interrupt on every third capture event 01 = Interrupt on every second capture event 00 = Interrupt on every capture event ICOV: Input Capture Overflow Status Flag (Read Only) bit 1 = Input capture overflow occurred 0 = No input capture overflow occurred ICBNE: Input Capture Buffer Empty Status (Read Only) bit 1 = Input capture buffer is not empty, at least one more capture value can be read 0 = Input capture buffer is empty ICM<2:0>: Input Capture Mode Select bits 111 = Input Capture functions as interrupt pin only, when device is in Sleep or Idle mode (Rising edge detect only, all other control bits are not applicable.) 110 = Unused (module disabled) 101 = Capture mode, every 16th rising edge 100 = Capture mode, every 4th rising edge 011 = Capture mode, every rising edge 010 = Capture mode, every falling edge 001 = Capture mode, every edge (rising and falling) (ICI<1:0> does not control interrupt generation for this mode.) 000 = Input capture module turned off Legend: HC = Cleared in Hardware R = Readable bit -n = Value at POR HS = Set in Hardware W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
13
Input Capture
bit 4
bit 3
bit 2-0
DS70060C-page 13-3
13.4
2. 3.
These Input Capture modes are configured by setting the appropriate Input Capture mode bits, ICM<2:0> (ICxCON<2:0>).
13.4.1
DS70060C-page 13-4
TMR2
n-3
n-2
n-1
n+1
n+2
n+3
n+4
n+5
Note 1: A capture signal edge that occurs in this region will result in a capture buffer entry value of 1 or 2 timer counts from the capture signal edge.
Figure 13-3:
TMRy
n-1
n+1
13
Input Capture
ICx pin
Capture Data
DS70060C-page 13-5
DS70060C-page 13-6
The following code example will set the Input Capture 1 module for interrupts on every second capture event, capture on every fourth rising edge and select Timer 2 as the time-base. This code example clears ICxCON to avoid unexpected interrupts. BSET BCLR BCLR BCLR BSET CLR MOV MOV MOV MOV IPC0, IPC0, IPC0, IFS0, IEC0, #IC1IP0 #IC1IP1 #IC1IP2 #IC1IF #IC1IE ; ; ; ; ; Setup Input Capture 1 interrupt for desired priority level (this example assigns level 1 priority) Clear the IC1 interrupt status flag Enable IC1 interrupts
; Turn off Input Capture 1 Module. ; Load the working register with the new ; prescaler mode and write to IC1CON ; Create capture data fetch pointer ; Create data storage pointer ; Assumes TEMP_BUFF is already defined
; ; ;
The following code shows how to read the capture buffer when an interrupt is generated. W0 contains the capture buffer address. Example code for Input Capture 1 ISR:
__IC1Interrupt: BCLR IFS0, #IC1IF MOV [w0++], [w1++] MOV [w0], [w1] RETFIE
; ; ; ; ;
Reset respective interrupt flag Read and save off first capture entry Read and save off second capture entry Remaining user code here Return from ISR
13
Input Capture
Note:
It is recommended that the user turn off the capture module (i.e., clear ICM<2:0> (ICxCON<2:0>)) before switching to a new mode. If the user switches to a new Capture mode, the prescaler counter is not cleared. Therefore, it is possible that the first capture event and its associated interrupt is generated due to a non-zero prescaler counter (at the time of switching modes).
DS70060C-page 13-7
TMRy
n-3
n-2
n-1
n+1
n+2
n+3
n+4
n+5
n+6
ICx pin
Capture Data
n+4
13.5
DS70060C-page 13-8
13.5.2
13.5.2.1
ICOV and Interrupt Only Mode The input capture module can also be configured to function as an external interrupt pin. For this mode, the ICI<1:0> (ICxCON<6:5>) bits must be set to 00. Interrupts will be generated independently of buffer reads.
13
Input Capture
13.6
13.6.1
13.7
DS70060C-page 13-9
13.8.2
13.8.3
13.9
DS70060C-page 13-10
13.10
Table 13-1:
Bit 13 SI2CIF IC4IF SI2CIE IC4IE T1IP<2:0> IC1IP<2:0> OC2IP<2:0> IC7IP<2:0> IC4IP<2:0> T31P<2:0> OC3IP<2:0> IC6IP<2:0> Input 1 Capture Register ICSIDL Input 2 Capture Register ICSIDL Input 3 Capture Register ICSIDL Input 4 Capture Register ICSIDL Input 5 Capture Register ICSIDL Input 6 Capture Register ICSIDL ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC5IP<2:0> IC8IP<2:0> T2IP<2:0> OC1IP<2:0> INT0IP<2:0> IC2IP<2:0> INT1IP<2:0> IC3IP<2:0> IC3IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE T4IE OC4IE OC3IE IC8IE IC7IE IR12 ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE INT0IE INT1IE IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF OC3IF IC8IF IC7IF INT1IF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT0F 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
SFR Name
Addr.
Bit 15
Bit 14
IFS0
0084
CNIF
MI2CIF
IFS1
0086
IC6IF
IC5IF
IEC0
008C
CNIE
MI2CIE
IEC1
008E
IC6IE
EI30
13
Input Capture
IPC0
0094
IPC1
0096
IPC4
009C
IPC7
00A2
IC1BUF
0140
IC1CON
0142
IC2BUF
0144
IC2CON
0146
IC3BUF
0148
IC3CON
014A
IC4BUF
014C
IC4CON
014E
IC5BUF
0150
IC5CON
0152
IC6BUF
0154
IC6CON
0156
IC7BUF
0158
IC7CON
015A
IC8BUF
015C
IC8CON
015E
Legend: Note:
u = uninitialized Refer to the device data sheet for specific memory map details.
DS70060C-page 13-11
Answer: Yes. When the Input Capture module is configured to ICM<2:0> = 111 and the respective channel interrupt enable bit is asserted, ICxIE = 1, a rising edge on the capture pin will wake-up the device from Sleep (see Section 13.8 Input Capture Operation in Power Saving States).
DS70060C-page 13-12
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
13
Input Capture
DS70060C-page 13-13
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
DS70060C-page 13-14
14
Output Compare
DS70061C-page 14-1
OCxRS(1)
OCxR(1)
S R
Comparator
OCTSEL
16
16
Note 1: Where x is shown, reference is made to the registers associated with the respective output compare channels 1 through 8. 2: OCFA pin controls OC1-OC4 channels. OCFB pin controls OC5-OC8 channels. 3: Each output compare channel can use one of two selectable time bases. Refer to the device data sheet for the time bases associated with the module.
DS70061C-page 14-2
U-0
U-0
R-0, HC OCFLT
R/W-0 OCTSEL
R/W-0
R/W-0 OCM<2:0>
R/W-0 bit 0
bit 15-14 Unimplemented: Read as 0 bit 13 OCSIDL: Stop Output Compare in Idle Mode Control bit 1 = Output compare x will halt in CPU Idle mode 0 = Output compare x will continue to operate in CPU Idle mode Unimplemented: Read as 0 OCFLT: PWM Fault Condition Status bit 1 = PWM Fault condition has occurred (cleared in HW only) 0 = No PWM Fault condition has occurred (This bit is only used when OCM<2:0> = 111.) OCTSEL: Output Compare Timer Select bit 1 = Timer3 is the clock source for compare x 0 = Timer2 is the clock source for compare x Note: bit 2-0 Refer to the device data sheet for specific time bases available to the output compare module.
bit 3
14
Output Compare
OCM<2:0>: Output Compare Mode Select bits 111 = PWM mode on OCx, Fault pin enabled 110 = PWM mode on OCx, Fault pin disabled 101 = Initialize OCx pin low, generate continuous output pulses on OCx pin 100 = Initialize OCx pin low, generate single output pulse on OCx pin 011 = Compare event toggles OCx pin 010 = Initialize OCx pin high, compare event forces OCx pin low 001 = Initialize OCx pin low, compare event forces OCx pin high 000 = Output compare channel is disabled Legend: HC = Cleared in Hardware R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70061C-page 14-3
14.3.1
DS70061C-page 14-4
TMRy
3000
3001
3002
3003
3004
3FFF
4000
0000
0001
2 TCY
Note: An x represents the output compare channel number. A y represents the time base number.
14
Output Compare
DS70061C-page 14-5
TMRy
47FE
47FF
4800
4801
4802
4BFF
4C00
0000
0001
TMRy Resets Here PRy OCxR OCx pin 2 TCY OCxIF Cleared by User 4C00 4800
Note: An x represents the output compare channel number. A y represents the time base number.
DS70061C-page 14-6
Figure 14-4:
Single Compare Mode: Toggle Output on Compare Match Event (PR2 > OCxR)
1 Instruction Clock Period
TMRy
0500
0501
0502
0600
0000
0500
0501
0502
0600 0500
2 TCY OCxIF
Cleared by User
Note: An x represents the output compare channel number. A y represents the time base number.
14
Figure 14-5: Single Compare Mode: Toggle Output on Compare Match Event (PR2 = OCxR)
Output Compare
TMR2
0500
0000
0500
0000
0500
0000
0001
0500 0500
2 TCY OCxIF
2 TCY
2 TCY
Cleared by User
Cleared by User
Note: An x represents the output compare channel number. A y represents the time base number.
DS70061C-page 14-7
The following code example illustrates how to define the initial OC1 pin state for the output compare toggle mode of operation. Toggle mode with initial OC1 pin state set low MOV MOV BSET 0x0001, w0 w0, OC1CON OC1CON, #1 ; ; ; ; load setup value into w0 enable module for OC1 pin low, toggle high set module to toggle mode with initial pin state low
Toggle mode with initial OC1 pin state set high MOV MOV BSET 0x0002, w0 w0, OC1CON OC1CON, #0 ; ; ; ; load setup value into w0 enable module for OC1 pin high, toggle low set module to toggle mode with initial pin state high
Example 14-2 shows example code for the configuration and interrupt service of the Single Compare mode toggle event. Example 14-2:
; ; ; ; ;
The following code example will set the Output Compare 1 module for interrupts on the toggle event and select Timer 2 as the clock source for the compare time-base. It is assumed in that Timer 2 and Period Register 2 are properly configured. Timer 2 will be enabled here. CLR MOV MOV MOV MOV BSET BCLR BCLR BCLR BSET BSET OC1CON #0x0003, w0 w0, OC1CON #0x0500, w0 w0, OC1R IPC0, #OC1IP0 IPC0, #OC1IP1 IPC0, #OC1IP2 IFS0, #OC1IF IEC0, #OC1IE T2CON, #TON ; ; ; ; ; ; ; ; ; ; ; Turn off Output Compare 1 Module. Load the working register with the new compare mode and write to OC1CON Initialize Compare Register 1 with 0x0500 Setup Output Compare 1 interrupt for desired priority level (this example assigns level 1 priority) Clear Output Compare 1 interrupt flag Enable Output Compare 1 interrupts Start Timer2 with assumed settings
#OC1IF
; Reset respective interrupt flag ; Remaining user code here ; Return from ISR
DS70061C-page 14-8
14
Output Compare
DS70061C-page 14-9
TMRy
3000
3001
3002
3003
3004
3005
3006
Note 1: An x represents the output compare channel number. A y represents the time base number. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register.
Figure 14-7:
TMRy
3000
3001
3002
3003
3004
3005
4000
0000
Note 1: An x represents the output compare channel number. A y represents the time base number. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register.
DS70061C-page 14-10
14
Output Compare
DS70061C-page 14-11
The following code example will set the Output Compare 1 module for interrupts on the single pulse event and select Timer 2 as the clock source for the compare time base. It is assumed that Timer 2 and Period Register 2 are properly initialized. Timer 2 will be enabled here. CLR MOV MOV MOV MOV MOV MOV BSET BCLR BCLR BCLR BSET BSET OC1CON #0x0004, w0 W0, OC1CON #0x3000, w0 W0, OC1R #0x3003, w0 W0, OC1RS IPC0, #OC1IP0 IPC0, #OC1IP1 IPC0, #OC1IP2 IFS0, #OC1IF IEC0, #OC1IE T2CON, #TON ; ; ; ; ; ; ; ; ; ; ; ; Turn off Output Compare 1 Module. Load the working register with the new compare mode and write to OC1CON Initialize Compare Register 1 with 0x3000 Initialize Secondary Compare Register 1 with 0x3003 Setup Output Compare 1 interrupt for desired priority level (this example assigns level 1 priority) Clear Output Compare 1 interrupt flag Enable Output Compare 1 interrupts
#OC1IF
; Reset respective interrupt flag ; Remaining user code here ; Return from ISR
DS70061C-page 14-12
SFR Logical Relationship PRy >= OCxRS and OCxRS > OCxR
TMRy counts up to OCxR and on a compare match event (i.e., Pulse TMRy = OCxR), the OCx pin is driven to a high state. TMRy then continues to count and eventually resets on period match (i.e., PRy =TMRy). The timer then restarts from 0x0000 and counts up to OCxRS, and on a compare match event (i.e., TMRy = OCxRS), the OCx pin is driven to a low state. The OCxIF bit will be set as a result of the second compare. Only the rising edge will be generated at the OCx pin. The OCxIF will not be set. Rising edge/ transition to high
OCxRS > PRy and PRy >= OCxR OCxR = OCxRS = PRy = 0x0000
None None
An output pulse delayed 2 instruction clock periods upon the Delayed pulse match of the timer and period register is generated at the OCx pin. The OCxIF bit will be set as a result of the second compare. Unsupported mode, timer resets prior to match condition. Remains low
None
Note 1: In all the cases considered herein, the TMRy register is assumed to be initialized to 0x0000. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register, TMRy = Timery Count, PRy = Timery Period Register.
14
Output Compare
DS70061C-page 14-13
TMRy
3000
3001
3002
3003
3000
3001
0000
Note 1: An x represents the output compare channel number. A y represents the time base number. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register.
DS70061C-page 14-14
Note 1: An x represents the output compare channel number. A y represents the time base number. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register.
14.3.2.5
Setup for Continuous Output Pulse Generation When control bits OCxM<2:0> (OCxCON<2:0>) are set to 101, the selected output compare channel initializes the OCx pin to the low state and generates output pulses on each and every compare match event. For the user to configure the module for the generation of a continuous stream of output pulses, the following steps are required (these steps assume timer source is initially turned off, but this is not a requirement for the module operation): 1. Determine the instruction clock cycle time. Take into account the frequency of the external clock to the timer source (if one is used) and the timer prescaler settings. 2. Calculate time to the rising edge of the output pulse relative to the TMRy start value (0x0000). 3. Calculate the time to the falling edge of the pulse, based on the desired pulse width and the time to the rising edge of the pulse. 4. Write the values computed in step 2 and 3 above into the compare register, OCxR, and the secondary compare register, OCxRS, respectively. 5. Set timer period register, PRy, to value equal to or greater than value in OCxRS, the secondary compare register. 6. Set OCM<2:0> = 101 and the OCTSEL (OCxCON<3>) bit to the desired timer source. The OCx pin state will now be driven low. 7. Enable the compare time base by setting the TON (TyCON<15>) bit to 1. 8. Upon the first match between TMRy and OCxR, the OCx pin will be driven high. 9. When the compare time base, TMRy, matches the secondary compare register, OCxRS, the second and trailing edge (high-to-low) of the pulse is driven onto the OCx pin. 10. As a result of the second compare match event, the OCxIF interrupt flag bit set. 11. When the compare time base and the value in its respective period register match, the TMRy register resets to 0x0000 and resumes counting. 12. Steps 8 through 11 are repeated and a continuous stream of pulses is generated, indefinitely. The OCxIF flag is set on each OCxRS-TMRy compare match event.
14
Output Compare
DS70061C-page 14-15
The following code example will set the Output Compare 1 module for interrupts on the continuous pulse event and select Timer 2 as the clock source for the compare time-base. It is assumed that Timer 2 and Period Register 2 are properly configured. Timer 2 will be enabled here. CLR MOV MOV MOV MOV MOV MOV BSET BCLR BCLR BCLR BSET BSET OC1CON #0x0005, W0 W0, OC1CON #0x3000, W0 W0, OC1R #0x3003, W0 W0, OC1RS IPC0, #OC1IP0 IPC0, #OC1IP1 IPC0, #OC1IP2 IFS0, #OC1IF IEC0, #OC1IE T2CON, #TON ; ; ; ; ; ; ; ; ; ; ; ; Turn off Output Compare 1 Module. Load the working register with the new compare mode and write to OC1CON Initialize Compare Register 1 with 0x3000 Initialize Secondary Compare Register 1 with 0x3003 Setup Output Compare 1 interrupt for desired priority level (this example assigns level 1 priority) Clear Output Compare 1 interrupt flag Enable Output Compare 1 interrupts
#OC1IF
; Reset respective interrupt flag ; Remaining user code here ; Return from ISR
DS70061C-page 14-16
SFR Logical Relationship PRy >= OCxRS and OCxRS > OCxR
TMRy counts up to OCxR and on a compare match event Continuous pulses (i.e., TMRy = OCxR), the OCx pin is driven to a high state. TMRy then continues to count and eventually resets on period match (i.e., PRy =TMRy). The timer then restarts from 0x0000 and counts up to OCxRS, and on a compare match event (i.e., TMRy = OCxR), the OCx pin is driven to a low state. The OCxIF bit will be set as a result of the second compare. Only one transition will be generated at the OCx pin until the OCxRS register contents have been changed to a value less than or equal to the period register contents (PRy). OCxIF is not set until then. Rising edge/ transition to high
None
None
Continuous output pulses are generated at the OCx pin. First pulse is delayed. The first pulse is delayed 2 instruction clock periods upon Continuous pulses the match of the timer and period register. The OCxIF bit are generated. will be set as a result of the second compare. Unsupported mode, Timer resets prior to match condition. Remains low
None
Note 1: In all the cases considered herein, the TMRy register is assumed to be initialized to 0x0000. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register, TMRy = Timery Count, PRy = Timery Period Register.
14
Output Compare
DS70061C-page 14-17
An example PWM output waveform is shown in Figure 14-10. Figure 14-10: PWM Output Waveform
Period = (PRy + 1)
1 1 2 3
Timery is cleared and new duty cycle value is loaded from OCxRS into OCxR. Timer value equals value in the OCxR register, OCx Pin is driven low. Timer overflow, value from OCxRS is loaded into OCxR, OCx pin driven high. TyIF interrupt flag is asserted.
DS70061C-page 14-18
14.3.3.2
PWM Period The PWM period is specified by writing to PRy, the Timery period register. The PWM period can be calculated using the following formula: Equation 14-1: Calculating the PWM Period PWM Period = [(PRy) + 1] TCY (TMRy Prescale Value) PWM Frequency = 1/[PWM Period]
Note:
A PRy value of N will produce a PWM period of N + 1 time base count cycles. For example: a value of 7 written into the PRy register will yield a period consisting of 8 time base cycles.
14
Output Compare
DS70061C-page 14-19
log10(2)
(FF ) bits
OSC PWM
Example 14-5:
Desired PWM frequency is 52.08 kHz, FOSC = 10 MHz with x4 PLL (40 MHz device clock rate) (TCY = 4/FOSC)) Timer 2 prescale setting: 1:1 1/52.08 kHz 19.20 s PR2 = = = (PR2+1) TCY (Timer 2 prescale value) (PR2+1) 0.1 s (1) 191
Find the maximum resolution of the duty cycle that can be used with a 48 kHz frequency and a 40 MHz device clock rate. 1/52.08 kHz = 19.20 s = 768 = log10(768) = PWM Resolution= 2PWM RESOLUTION 1/40 MHz 1 2PWM RESOLUTION 25 ns 1 2PWM RESOLUTION (PWM Resolution) log10(2) 9.5 bits
DS70061C-page 14-20
0005 0002 0002 0001 0001 New Duty Cycle Loaded Here
Note 1: An x represents the output compare channel number. A y represents the time base number. 2: OCxR = Compare Register, OCxRS = Secondary Compare Register.
Table 14-3:
Example PWM Frequencies and Resolutions at 10 MIPs (FOSC = 40 MHz) 19 Hz 8 0xFFFF 16 153 Hz 1 0xFFFF 16 305 Hz 1 0x7FFF 15 2.44 kHz 1 0x0FFF 12 9.77 kHz 1 0x03FF 10 78.1 kHz 1 0x007F 7 313 kHz 1 0x001F 5
PWM Frequency Timer Prescaler Ratio Period Register Value Resolution (bits) Table 14-4:
Example PWM Frequencies and Resolutions at 30 MIPs (FOSC = 120 MHz) 57 Hz 8 0xFFFF 16 458 Hz 1 0xFFFF 16 916 Hz 1 0x7FFF 15 7.32 kHz 1 0x0FFF 12 29.3 kHz 1 0x03FF 10 234 kHz 1 0x007F 7 938 kHz 1 0x001F 5
PWM Frequency Timer Prescaler Ratio Period Register Value Resolution (bits)
14
Output Compare
DS70061C-page 14-21
following code example PWM mode w/o FAULT pin frequency of 52.08 kHz clock for the PWM time enabled. OC1CON #0x0060, w0 w0, OC1RS w0, OC1R #0x0006, w0 w0, OC1CON #0x00BF w0 w0, PR2 IPC0, IPC0, IPC0, IFS0, IEC0, T2CON, #T2IP0 #T2IP1 #T2IP2 #T21IF #T21IE #TON
; Turn off Output Compare 1 Module. ; Initialize Duty Cycle to 0x0060 ; Write duty cycle buffer register ; Write OC1R to initial duty cycle value ; Load the working register with the new ; compare mode and write to OC1CON ; Initialize PR2 with 0x00BF ; ; ; ; ; ; ; Setup Timer 2 interrupt for desired priority level (this example assigns level 1 priority) Clear Timer 2 interrupt flag Enable Timer 2 interrupts Start Timer2 with assumed settings
#T21IF
; Reset respective interrupt flag ; Remaining user code here ; Return from ISR
DS70061C-page 14-22
14.4.2
14.5
14
Output Compare
Output Compare/PWM Channel 3 Output Compare/PWM Channel 4 Output Compare/PWM Channel 5 Output Compare/PWM Channel 6 Output Compare/PWM Channel 7 Output Compare/PWM Channel 8 PWM Fault Protection A Input (For Channels 1-4) PWM Fault Protection B Input (For Channels 5 -8)
DS70061C-page 14-23
Table 14-6:
Bit 13 Timer2 Register Timer3 Register Period Register 2 Period Register 3 TSIDL TSIDL Output Compare 1 Secondary Register Output Compare 1 Register OCSIDL Output Compare 2 Secondary Register Output Compare 2 Register OCSIDL Output Compare 3 Secondary Register Output Compare 3 Register OCSIDL Output Compare 4 Secondary Register Output Compare 4 Register OCSIDL Output Compare 5 Secondary Register Output Compare 5 Register OCSIDL 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 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1111 TCKPS1 TCKPS0 TCKPS1 TCKPS0 T32
SFR Name
Addr.
Bit 15
Bit 14
TMR2
0106
TMR3
010A
DS70061C-page 14-24
PR2
010C
PR3
010E
T2CON
0110
TON
0000 0000 0000 0000 0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
T3CON
0112
TON
OC1RS
0180
OC1R
0182
0184
OCM<2:0>
0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
OC2RS
0186
OC2R
0188
018A
OCM<2:0>
0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
OC3RS
018C
OC3R
018E
OC3CON
0190
OCFLT
OCTSEL
OCM<2:0>
0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
OC4RS
0192
OC4R
0194
OC4CON
0196
OC5RS
0198
OC5R
019A
OC5CON
019C
OCFLT
OCTSEL
OCM<2:0>
0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
OC6RS
019E
OC6R
01A0
OC6CON
01A2
OCFLT
OCTSEL
OCM<2:0>
0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
OC7RS
01A4
OC7R
01A6
OC7CON
01A8
OCFLT
OCTSEL
OCM<2:0>
OC8RS
01AA
Output Compare 8 Secondary Register Output Compare 8 Register OCSIDL SI2CIF NVMIF ADIF
OC8R
01AC
OC8CON
01AE
SPI1IF
T3IF
T2IF
OC2IF
OCFLT IC2IF
IFS0
0084
CNIF
MI2CIF
U1TXIF U1RXIF
Legend: u = uninitialized
Note:
The register map will depend on the number of output compare modules on the device. Please refer to the device data sheet for details.
Table 14-6:
Bit 13 IC4IF IC3IF FLTBIF FLTAIF NVMIE IC3IE FLTBIE FLTAIE LVDIE OC1IP<2:0> T2IP<2:0> IC8IP<2:0> T5IP<2:0> OC7IP<2:0> DCIIE QEIIE PWMIE C2IE IC1IP<2:0> OC2IP<2:0> IC7IP<2:0> T4IP<2:0> OC6IP<2:0> INT4IE INT3IE OC8IE OC7IE INT0IP<2:0> IC2IP<2:0> INT1IP<2:0> OC4IP<2:0> OC5IP<2:0> OC6IE OC5IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE T4IE OC4IE OC3IE IC8IE IC7IE INT1IE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE INT0IE LVDIF DCIIF QEIIF PWMIF C2IF INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF OC3IF IC8IF IC7IF INT1IF 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
SFR Name
Addr.
Bit 15
Bit 14
IFS1
0086
IC6IF
IC5IF
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100
IFS2
0088
IC4IE
IEC0
008C
CNIE
MI2CIE SI2CIE
IEC1
008E
IC6IE
IC5IE
0090
IPC0
0094
Output Compare
IPC1
0096
IPC4
009C
IPC5
009E
IPC8
00A4
Legend: u = uninitialized
Note:
The register map will depend on the number of output compare modules on the device. Please refer to the device data sheet for details.
DS70061C-page 14-25
14
Answer: This is most likely to occur when the TSIDL bit (TxCON<13>) of the associated timer source is set. Therefore, it is the timer that actually goes into Idle mode when the PWRSAV instruction is executed. Question 2: Can I use the Output Compare modules with the selected time base configured for 32-bit mode?
Answer: No. The T32 bit (TxCON<3>) should be cleared when the timer is used with an output compare module.
DS70061C-page 14-26
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
14
Output Compare
DS70061C-page 14-27
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
DS70061C-page 14-28
15
Motor Control PWM
DS70062D-page 15-1
15.1.1
The 6-output MCPWM module is useful for single or 3-phase power application, while the 8 MCPWM can support 4-phase motor applications. Table 15-1 provides a feature summary for 6- and 8-output MCPWM modules. Both modules can support multiple single phase loads. The 8-output MCPWM also provides increased flexibility in an application because it supports two fault pins and two programmable dead times. These features are discussed in greater detail in subsequent sections. A simplified block diagram of the MCPWM module is shown in Figure 15-1.
DS70062D-page 15-2
PTCON PWMCON1
PWM enable and mode SFRs PWMCON2 DTCON1 Dead time control SFRs DTCON2 FLTACON Fault pin control SFRs FLTBCON OVDCON PWM manual control
Comparator
PWM1H PWM1L
PTMR
PWM Generator #2
PWM2H PWM2L
Comparator PWM Generator #3 PTMR period register PWM Generator #4 PTPER PWM3H PWM3L
PWM4H PWM4L
Comparator
SEVTCMP
15
Motor Control PWM
Note
1: 2:
Details of PWM Generator #2, #3 and #4 not shown for clarity. Logic within dashed lines not present on 6-output MCPWM module.
DS70062D-page 15-3
In addition, there are three device configuration bits associated with the MCPWM module to set up the initial Reset states and polarity of the I/O pins. These configuration bits are located in the FBORPOR device configuration register. Please refer to Section 24. Device Configuration for further details.
DS70062D-page 15-4
Lower Byte: R/W-0 R/W-0 R/W-0 PTOPS<3:0> bit 7 bit 15 PTEN: PWM Time Base Timer Enable bit 1 = PWM time base is ON 0 = PWM time base is OFF Unimplemented: Read as 0 PTSIDL: PWM Time Base Stop in Idle Mode bit 1 = PWM time base halts in CPU Idle mode 0 = PWM time base runs in CPU Idle mode Unimplemented: Read as 0
R/W-0
bit 14 bit 13
PTOPS<3:0>: PWM Time Base Output Postscale Select bits 1111 = 1:16 Postscale 0001 = 1:2 Postscale 0000 = 1:1 Postscale PTCKPS<1:0>: PWM Time Base Input Clock Prescale Select bits 11 = PWM time base input clock period is 64 TCY (1:64 prescale) 10 = PWM time base input clock period is 16 TCY (1:16 prescale) 01 = PWM time base input clock period is 4 TCY (1:4 prescale) 00 = PWM time base input clock period is TCY (1:1 prescale) PTMOD<1:0>: PWM Time Base Mode Select bits 11 = PWM time base operates in a continuous up/down mode with interrupts for double PWM updates 10 = PWM time base operates in a continuous up/down counting mode 01 = PWM time base operates in single event mode 00 = PWM time base operates in a free running mode Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 3-2
bit 1-0
15
Motor Control PWM
DS70062D-page 15-5
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
bit 14-0
PTPER: PWM Time Base Period Register R/W-0 R/W-0 R/W-0 R/W-0 PTPER <14:8> R/W-0 R/W-0 R/W-0 bit 8 Lower Byte: R/W-0 R/W-0 bit 7
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
Unimplemented: Read as 0 PTPER<14:0>: PWM Time Base Period Value bits Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
DS70062D-page 15-6
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
bit 14-0
PWMCON1: PWM Control Register 1 U-0 U-0 U-0 R/W-0 PMOD4 R/W-0 PMOD3 R/W-0 PMOD2 R/W-0 PMOD1 bit 8
Lower Byte: R/W-1 R/W-1 PEN4H PEN3H bit 7 bit 15-12 Unimplemented: Read as 0 bit 11-8
R/W-1 PEN2H
R/W-1 PEN1H
R/W-1 PEN4L
R/W-1 PEN3L
R/W-1 PEN2L
PMOD4:PMOD1: PWM I/O Pair Mode bits 1 = PWM I/O pin pair is in the independent output mode 0 = PWM I/O pin pair is in the complementary output mode PEN4H-PEN1H: PWMxH I/O Enable bits(1) 1 = PWMxH pin is enabled for PWM output 0 = PWMxH pin disabled. I/O pin becomes general purpose I/O PEN4L-PEN1L: PWMxL I/O Enable bits(1) 1 = PWMxL pin is enabled for PWM output 0 = PWMxL pin disabled. I/O pin becomes general purpose I/O Note 1: Reset condition of the PENxH and PENxL bits depend on the value of the PWM/PIN device configuration bit in the FBORPOR Device Configuration Register. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 7-4
bit 3-0
15
Motor Control PWM
DS70062D-page 15-7
U-0
U-0
U-0
U-0
R/W-0 IUE
R/W-0 OSYNC
bit 15-12 Unimplemented: Read as 0 bit 11-8 SEVOPS<3:0>: PWM Special Event Trigger Output Postscale Select bits 1111 = 1:16 Postscale 0001 = 1:2 Postscale 0000 = 1:1 Postscale Unimplemented: Read as 0 IUE: Immediate Update Enable bit(1) 1 = Updates to the active PDC registers are immediate 0 = Updates to the active PDC registers are synchronized to the PWM time base OSYNC: Output Override Synchronization bit 1 = Output overrides via the OVDCON register are synchronized to the PWM time base 0 = Output overrides via the OVDCON register occur on next TCY boundary UDIS: PWM Update Disable bit 1 = Updates from duty cycle and period buffer registers are disabled 0 = Updates from duty cycle and period buffer registers are enabled Note 1: IUE bit is not implemented on the dsPIC30F6010 device. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 1
bit 0
DS70062D-page 15-8
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
bit 15-14 DTBPS<1:0>: Dead Time Unit B Prescale Select bits 11 = Clock period for Dead Time Unit B is 8 TCY 10 = Clock period for Dead Time Unit B is 4 TCY 01 = Clock period for Dead Time Unit B is 2 TCY 00 = Clock period for Dead Time Unit B is TCY bit 13-8 bit 7-6 DTB<5:0>: Unsigned 6-bit Dead Time Value bits for Dead Time Unit B DTAPS<1:0>: Dead Time Unit A Prescale Select bits 11 = Clock period for Dead Time Unit A is 8 TCY 10 = Clock period for Dead Time Unit A is 4 TCY 01 = Clock period for Dead Time Unit A is 2 TCY 00 = Clock period for Dead Time Unit A is TCY DTA<5:0>: Unsigned 6-bit Dead Time Value bits for Dead Time Unit A Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 5-0
15
Motor Control PWM
DS70062D-page 15-9
R/W-0 DTS4I
R/W-0 DTS3A
R/W-0 DTS3I
R/W-0 DTS2A
R/W-0 DTS2I
R/W-0 DTS1A
Unimplemented: Read as 0 DTS4A: Dead Time Select bit for PWM4 Signal Going Active 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS4I: Dead Time Select bit for PWM4 Signal Going Inactive 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS3A: Dead Time Select bit for PWM3 Signal Going Active 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS3I: Dead Time Select bit for PWM3 Signal Going Inactive 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS2A: Dead Time Select bit for PWM2 Signal Going Active 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS2I: Dead Time Select bit for PWM2 Signal Going Inactive 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS1A: Dead Time Select bit for PWM1 Signal Going Active 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A DTS1I: Dead Time Select bit for PWM1 Signal Going Inactive 1 = Dead time provided from Unit B 0 = Dead time provided from Unit A Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
DS70062D-page 15-10
U-0
U-0
U-0
R/W-0 FAEN4
R/W-0 FAEN3
R/W-0 FAEN2
FAOV4H-FAOV1L: Fault Input A PWM Override Value bits 1 = The PWM output pin is driven ACTIVE on an external fault input event 0 = The PWM output pin is driven INACTIVE on an external fault input event FLTAM: Fault A Mode bit 1 = The Fault A input pin functions in the cycle-by-cycle mode 0 = The Fault A input pin latches all control pins to the programmed states in FLTACON<15:8> Unimplemented: Read as 0 FAEN4: Fault Input A Enable bit 1 = PWM4H/PWM4L pin pair is controlled by Fault Input A 0 = PWM4H/PWM4L pin pair is not controlled by Fault Input A FAEN3: Fault Input A Enable bit 1 = PWM3H/PWM3L pin pair is controlled by Fault Input A 0 = PWM3H/PWM3L pin pair is not controlled by Fault Input A FAEN2: Fault Input A Enable bit 1 = PWM2H/PWM2L pin pair is controlled by Fault Input A 0 = PWM2H/PWM2L pin pair is not controlled by Fault Input A FAEN1: Fault Input A Enable bit 1 = PWM1H/PWM1L pin pair is controlled by Fault Input A 0 = PWM1H/PWM1L pin pair is not controlled by Fault Input A Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 7
bit 2
bit 1
bit 0
15
Motor Control PWM
DS70062D-page 15-11
U-0
U-0
U-0
R/W-0 FBEN4
R/W-0 FBEN3
R/W-0 FBEN2
FBOV4H:FBOV1L: Fault Input B PWM Override Value bits 1 = The PWM output pin is driven ACTIVE on an external fault input event 0 = The PWM output pin is driven INACTIVE on an external fault input event FLTBM: Fault B Mode bit 1 = The Fault B input pin functions in the cycle-by-cycle mode 0 = The Fault B input pin latches all control pins to the programmed states in FLTBCON<15:8> Unimplemented: Read as 0 FAEN4: Fault Input B Enable bit(1) 1 = PWM4H/PWM4L pin pair is controlled by Fault Input B 0 = PWM4H/PWM4L pin pair is not controlled by Fault Input B FAEN3: Fault Input B Enable bit(1) 1 = PWM3H/PWM3L pin pair is controlled by Fault Input B 0 = PWM3H/PWM3L pin pair is not controlled by Fault Input B FAEN2: Fault Input B Enable bit(1) 1 = PWM2H/PWM2L pin pair is controlled by Fault Input B 0 = PWM2H/PWM2L pin pair is not controlled by Fault Input B FAEN1: Fault Input B Enable bit(1) 1 = PWM1H/PWM1L pin pair is controlled by Fault Input B 0 = PWM1H/PWM1L pin pair is not controlled by Fault Input B Note 1: Fault pin A has priority over Fault pin B, if enabled. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 7
bit 2
bit 1
bit 0
DS70062D-page 15-12
R/W-0 POUT3H
R/W-0 POUT3L
R/W-0 POUT2H
R/W-0 POUT2L
R/W-0 POUT1H
POVD4H-POVD1L: PWM Output Override bits 1 = Output on PWMxx I/O pin is controlled by the PWM generator 0 = Output on PWMxx I/O pin is controlled by the value in the corresponding POUTxx bit POUT4H-POUT1L: PWM Manual Output bits 1 = PWMxx I/O pin is driven ACTIVE when the corresponding POVDxx bit is cleared 0 = PWMxx I/O pin is driven INACTIVE when the corresponding POVDxx bit is cleared Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 7-0
Register 15-12: PDC1: PWM Duty Cycle Register 1 Upper Byte: R/W-0 bit 15 Lower Byte: R/W-0 R/W-0 bit 7 bit 15-0 PDC1<15:0>: PWM Duty Cycle #1 Value bits Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PWM Duty Cycle #1 bits 15-8 R/W-0 R/W-0 bit 8
R/W-0
R/W-0
R/W-0 bit 0
15
Motor Control PWM
DS70062D-page 15-13
R/W-0
R/W-0
R/W-0 bit 0
Register 15-14: PDC3: PWM Duty Cycle Register 3 Upper Byte: R/W-0 bit 15 Lower Byte: R/W-0 R/W-0 bit 7 bit 15-0 PDC3<15:0>: PWM Duty Cycle #3 Value bits Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PWM Duty Cycle #3 bits 15-8 R/W-0 R/W-0 bit 8
R/W-0
R/W-0
R/W-0 bit 0
DS70062D-page 15-14
R/W-0
R/W-0
R/W-0 bit 0
Register 15-16: FBORPOR: BOR AND POR Device Configuration Register Upper Byte: U-0 bit 23 U-0 U-0 U-0 U-0 U-0 U-0 U-0 bit 16
U-0
U-0
U-0
U-0
R/P PWMPIN
R/P HPOL
U-0
U-0
U-0
PWMPIN: MPWM Drivers Initialization bit 1 = Pin state at reset controlled by I/O Port (PWMCON1<7:0> = 0x00) 0 = Pin state at reset controlled by module (PWMCON1<7:0> = 0xFF) HPOL: MCPWM High Side Drivers (PWMxH) Polarity bit 1 = Output signal on PWMxH pins has active high polarity 0 = Output signal on PWMxH pins has active low polarity LPOL: MCPWM Low Side Drivers (PWMxL) Polarity bit 1 = Output signal on PWMxL pins has active high polarity 0 = Output signal on PWMxL pins has active low polarity Note: See Section 24. Device Configuration for information about other configuration bits on this register.
bit 9
bit 8
15
Motor Control PWM
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
DS70062D-page 15-15
Clock Control
PTEN
TCY
PTMR Register
PTMR clock
Zero detect
PTDIR (PTMR<15>)
Comparator
Time Base period register Gated Period load Period load Immediate Update Enable (IUE)
The PWM time base can be configured for four different modes of operation: 1. 2. 3. 4. Free Running mode Single Event mode Continuous Up/Down Count mode Continuous Up/Down Count mode with interrupts for double-updates.
DS70062D-page 15-16
15.3.1
15.3.2
Single-Event Mode
In the Single Event Counting mode, the PWM time base will begin counting upwards when the PTEN bit is set. When the PTMR value matches the PTPER register, the PTMR register will be reset on the following input clock edge and the PTEN bit will be cleared by the hardware to halt the time base.
15.3.3
15.3.4
15.3.5
15
Motor Control PWM
DS70062D-page 15-17
15.3.7
PWM Period
The PTPER register sets the counting period for PTMR. The user must write a 15-bit value to PTPER<14:0>. When the value in PTMR<14:0> matches the value in PTPER<14:0>, the time base will either reset to 0 or reverse the count direction on the next clock input edge. The action taken depends on the operating mode of the time base. The time base period is double buffered to allow on-the-fly period changes of the PWM signal without glitches. The PTPER register serves as a buffer register to the actual time base period register, which is not accessible by the user. The PTPER register contents are loaded into the actual time base period register at the following times: Free Running and Single Event modes: when the PTMR register is reset to zero after a match with the PTPER register. Up/Down Counting modes: When the PTMR register is zero. The value held in the PTPER register is automatically loaded into the time base period register when the PWM time base is disabled (PTEN = 0). Figure 15-3 and Figure 15-4 indicate the times when the contents of the PTPER register are loaded into the time base period register.
DS70062D-page 15-18
The PWM period can be determined from the following formula: Equation 15-1: PWM Period Calculation for Free Running Count Mode (PTMOD = 10 or 11) FCY FPWM (PTMR Prescaler) -1
PTPER = Example:
FCY = 20 MHz FPWM = 20,000 Hz PTMR Prescaler = 1:1 PTPER = = 1000 -1 = 999 Figure 15-4: PWM Period Buffer Updates in Up/Down Counting Modes
Period value loaded from PTPER Buffer register
20,000,000 20,000 1
-1
15
Motor Control PWM
DS70062D-page 15-19
PTPER = Example:
FCY = 20 MHz FPWM = 20,000 Hz PTMR Prescaler = 1:1 PTPER = = 500 -1 = 499 20,000,000 20,000 1 2 -1
15.4
In subsequent discussions, PDCx refers to any of the four PWM duty cycle registers.
15.4.1
DS70062D-page 15-20
Example PWM Frequencies and Resolutions, 1:1 Prescaler, Center Aligned PWM PTPER Value 0x7FFF 0x3FFF 0x7FFF 0x1FFF 0x7FFF 0xFFF 0x7FFF 0x7FF PDCx Value for 100% 0xFFFF 0x7FFF 0xFFFF 0x3FFF 0xFFFF 0x1FFF 0xFFFF 0xFFF PWM Resolution 16 bits 15 bits 16 bits 14 bits 16 bits 13 bits 16 bits 12 bits PWM Frequency 458 Hz 916 Hz 305 Hz 1.22 kHz 153 Hz 1.22 kHz 76.3 Hz 1.22 kHz
33 ns (30 MHz) 33 ns (30 MHz) 50 ns (20 MHz) 50 ns (20 MHz) 100 ns (10 MHz) 100 ns (10 MHz) 200 ns (5 MHz) 200 ns (5 MHz)
The MCPWM module has the ability to produce PWM signal edges with TCY/2 resolution. PTMR increments every TCY with a 1:1 prescaler. To achieve TCY/2 edge resolution, PDCx<15:1> is compared to PTMR<14:0> to determine a duty cycle match. PDCx<0> determines whether the PWM signal edge will occur at the TCY or the TCY/2 boundary. When a 1:4, 1:16 or a 1:64 prescaler is used with the PWM time base, PDCx<0> is compared to the MSbit of the prescaler counter clock to determine when the PWM edge should occur. PTMR and PDCx resolutions are depicted in Figure 15-5. It is shown that PTMR resolution is TCY and PDCx resolution is TCY/2 for 1:1 prescaler selection. Figure 15-5: PTMR and PDCx Resolution Timing Diagram. Free Running Mode and 1:1 Prescaler Selection
TCY
PTPER = 10
TCY
PTMR
PDCx = 14 PDCx = 15
TCY/2
15
Motor Control PWM
DS70062D-page 15-21
Note: PDCx<0> is compared to the FOSC/2 signal when the prescaler is 1:1.
15.4.2
PWM2H Period
DS70062D-page 15-22
PWMIF
15
Motor Control PWM
DS70062D-page 15-23
15.4.5
When the PWM time base is operating in the Up/Down Counting mode (PTMOD<1:0> = 10), duty cycles are updated when the value of the PTMR register is zero and the PWM time base begins to count upwards. Figure 15-10 indicates the times when the duty cycle updates occur for this mode of the PWM time base. When the PWM time base is in the Up/Down Counting mode with double updates (PTMOD<1:0> = 11), duty cycles are updated when the value of the PTMR register is zero and when the value of the PTMR register matches the value in the PTPER register. Figure 15-11 indicates the times when the duty cycle updates occur for this mode of the PWM time base.
DS70062D-page 15-24
PWM output
PTMR Value
Figure 15-11:
Duty Cycle Update Times in Up/Down Count Mode with Double Updates
Duty cycle value loaded from PDCx register, CPU interrupted
PWM output
PTMR Value
15.4.6
15
Motor Control PWM
DS70062D-page 15-25
50%
90%
10%
90%
PWM Output
PTMR Value
15.5
1H
2H
3H
1L
2L
3L
The Complementary mode is selected for each PWM I/O pin pair by clearing the appropriate PMODx bit in PWMCON1. The PWM I/O pins are set to complementary mode by default upon a device reset. Figure 15-14: PWM Channel Block Diagram, Complementary Mode
PWM Generator Dead Time Generator Override and Fault Logic
PWMxH
PWMxL
DS70062D-page 15-26
15.6.1
Figure 15-15: Dead Time Unit Block Diagram for One Output Pin Pair
Zero Compare
TCY
Prescaler
Clock Control
6-Bit Down Counter High-side PWM signal to output pin Low-Side PWM signal to output pin Dead Time Select Logic
15
Motor Control PWM
DS70062D-page 15-27
PWM Generator
PWMxL
PWMxL
DS70062D-page 15-28
The DTCON2 register contains control bits that allow the two programmable dead times to be assigned to each of the complementary outputs. There are two dead time assignment control bits for each of the complementary outputs. For example, the DTS1A and DTS1I control bits select the dead times to be used for the PWM1H/PWM1L complementary output pair. The pair of dead time selection control bits are referred to as the dead-time-select-active and dead-time-select-inactive control bits, respectively. The function of each bit in a pair is as follows: The DTSxA control bit selects the dead time that is to be inserted before the high-side output is driven active. The DTSxI control bit selects the dead time that is to be inserted before the low-side PWM active is driven active. Table 15-4 summarizes the function of each dead time selection control bit. Table 15-4: Bit DTS1A DTS1I DTS2A DTS2I DTS3A DTS3I DTS4A DTS4I Dead Time Selection Bits Function Selects PWM1H/PWM1L dead time inserted before PWM1H is driven active. Selects PWM1H/PWM1L dead time inserted before PWM1L is driven active. Selects PWM1H/PWM1L dead time inserted before PWM2H is driven active. Selects PWM1H/PWM1L dead time inserted before PWM2L is driven active. Selects PWM1H/PWM1L dead time inserted before PWM3H is driven active. Selects PWM1H/PWM1L dead time inserted before PWM3L is driven active. Selects PWM1H/PWM1L dead time inserted before PWM4H is driven active. Selects PWM1H/PWM1L dead time inserted before PWM4L is driven active.
15.6.3
Equation 15-4:
DT =
15
Motor Control PWM
DS70062D-page 15-29
15.6.4
15.7
1H
1L
Figure 15-18: PWM Block Diagram for One Output Pin Pair, Independent Mode
PWM Generator
PWMxH
PWMxL
DS70062D-page 15-30
15.8.1
15.8.2
Override Synchronization
If the OSYNC bit is set (PWMCON2<1>), all output overrides performed via the OVDCON register will be synchronized to the PWM time base. Synchronous output overrides will occur at the following times: Edge aligned mode, when PTMR is zero. Center aligned modes, when PTMR is zero, or When the value of PTMR matches PTPER. The override synchronization function, when enabled, can be used to avoid unwanted narrow pulses on the PWM output pins.
15.8.3
15
Motor Control PWM
DS70062D-page 15-31
PWM Output Override Example #2 OVDCON<15:8> 11000011b 11110000b 00111100b 00001111b OVDCON<7:0> 00000000b 00000000b 00000000b 00000000b
DS70062D-page 15-32
PWM4H
PWM4L
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L Note: Switching times between states 1-4 are controlled by user software. The state switch is controlled by writing a new value to OVDCON. The PWM outputs are operated in the independent mode for this example.
15
Motor Control PWM
DS70062D-page 15-33
15.9.1
15.9.2
15.10
15.10.1
DS70062D-page 15-34
15.10.3
15.10.3.1 Entry Into a Fault Condition When a fault pin is enabled and driven low, the PWM pins are immediately driven to their programmed fault states regardless of the values in the PDCx and OVDCON registers. The fault action has priority over all other PWM control registers. 15.10.3.2 Exit From a Fault Condition A fault condition must be cleared by the external circuitry driving the fault input pin high and clearing the fault interrupt flag (Latched mode only). After the fault pin condition has been cleared, the PWM module will restore the PWM output signals on the next PWM period or half-period boundary. For edge aligned PWM generation, the PWM outputs will be restored when PTMR = 0. For center aligned PWM generation, the PWM outputs will be restored when PTMR = 0 or PTMR = PTPER, whichever event occurs first. An exception to these rules will occur when the PWM time base is disabled (PTEN = 0). If the PWM time base is disabled, the PWM module will restore the PWM output signals immediately after the fault condition has been cleared.
15
Motor Control PWM
DS70062D-page 15-35
15.10.5
15.10.6
PTMR
Note: Arrows indicate the time when normal PWM operation is restored.
DS70062D-page 15-36
Duty cycle = 50% PWMxx FLTA FLTAIF Fault condition ends Interrupt flag cleared in software
PTMR Return to normal operation Fault state B Fault state A Fault state B
15.11
15
Motor Control PWM
DS70062D-page 15-37
15.12.1
15.12.2
15.13 15.13.1
OVDCON #0 OVDCONH
; Force all PWM outputs inactive ; Put the device in SLEEP mode ; Set POVD bits when device wakes.
The Fault A and Fault B input pins, if enabled to control the PWM pins via the FLTxCON registers, will continue to function normally when the device is in Sleep mode. If one of the fault pins is driven low while the device is in Sleep, the PWM outputs will be driven to the programmed fault states in the FLTxCON register.
DS70062D-page 15-38
15.13.2
15.14
15
Motor Control PWM
DS70062D-page 15-39
Table 15-8:
Bit 13 PWMIP<2:0> FLTAIP<2:0> PTSIDL PWM Time Base register PWM Time Base Period register PWM Special Event Compare register Dead Time B Value register FAOV3H POUT4L FBOV3H POVD3L PWM Duty Cycle #1 register PWM Duty Cycle #2 register PWM Duty Cycle #3 register PWM Duty Cycle #4 register POVD2H POVD2L POVD1H POVD1L POUT4H FBOV3L FBOV2H FBOV2L FBOV1H FBOV1L FLTBM FAOV3L FAOV2H FAOV2L FAOV1H FAOV1L FLTAM FAEN4 FBEN4 DTS4A DTS4I DTS3A DTS3I DTS2A DTAPS<1:0> SEVOPS<3:0> IUE DTS2I FAEN3 FBEN3 POUT2L PMOD4 PMOD3 PMOD2 PMOD1 PEN4H PEN3H PEN2H PEN1H PEN4L PEN3L PEN2L OSYNC DTS1A FAEN2 FBEN2 POUT1H PEN1L UDIS DTS1I FAEN1 FBEN1 POUT1L PTOPS<3:0> PTCKPS<1:0> FLTBIP<2:> PTMOD<1:0> FLTBIE FLTAIE PWMIE FLTBIF FLTAIF PWMIF 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 Value on Reset
Name
ADR
Bit 15
Bit 14
INTCON1
0080
NSTDIS
INTCON2
0082
ALTIVT
IFS2
0088
IEC2
0090
DS70062D-page 15-40
Dead Time A Value register POUT3H POUT3L POUT2H
IPC9
00A6
IPC10
00A8
IPC11
00AA
PTCON
01C0
PTEN
PTMR
01C2
PTDIR
PTPER
01C4
SEVTCMP
01C6
SEVTDIR
PWMCON1
01C8
PWMCON2
01CA
DTCON1
01CC
DTBPS<1:0>
DTCON2
01CE
FLTACON
01D0
FAOV4H
FAOV4L
FLTBCON
01D2
FBOV4H
FBOV4L
OVDCON
01D4
POVD4H
POVD4L POVD3H
PDC1
01D6
PDC2
01D8
PDC3
01DA
PDC4
01DC
Note
1: 2: 3:
Reset state of PENxx control bits depends on the state of the PWMPIN device configuration bit. Shaded register and bit locations not implemented for the 6-output MCPWM module. The IUE bit is not implemented on the dsPIC30F6010 device.
Table 15-9:
Bit 13 PWMIP<2:0> FLTAIP<2:0> PTSIDL PWM Time Base register PWM Time Base Period register PWM Special Event Compare register FAOV3H POVD3H PWM Duty Cycle #1 register PWM Duty Cycle #2 register PWM Duty Cycle #3 register POVD3L POVD2H POVD2L POVD1H POVD1L POUT3H FAOV3L FAOV2H FAOV2L FAOV1H FAOV1L FLTAM FAEN4
Name
ADR
Bit 15
Bit 14
INTCON1
0080
NSTDIS
INTCON2
0082
ALTIVT
IFS2
0088
IEC2
0090
IPC9
00A6
IPC10
00A8
PTCON
01C0
PTEN
PTMR
01C2
PTDIR
PTPER
01C4
SEVTCMP
01C6
SEVTDIR
PWMCON1
01C8
PWMCON2
01CA
DTCON1
01CC
Reserved
01CE
FLTACON
01D0
Reserved
01D2
OVDCON
01D4
PDC1
01D6
PDC2
01D8
PDC3
01DA
Note
1: 2: 3:
Reset state of PENxx control bits depends on the state of the PWMPIN device configuration bit. Shaded register and bit locations not implemented for the 6-output MCPWM module. The IUE bit is not implemented on the dsPIC30F6010 device.
DS70062D-page 15-41
15
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70062D-page 15-42
Revision B
This revision provides expanded information for the dsPIC30F MCPWM module.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
This revision includes the Immediate Update Enable Capability (IUE) bit.
15
Motor Control PWM
DS70062D-page 15-43
DS70062D-page 15-44
16
Quadrature Encoder Interface (QEI)
DS70063C-page 16-1
Forward Travel
DS70063C-page 16-2
16
The Quadrature Encoder Interface (QEI) module provides an interface to incremental encoders. The QEI consists of quadrature decoder logic to interpret the Phase A and Phase B signals and an up/down counter to accumulate the count. Digital glitch filters on the inputs condition the input signal. Figure 16-2 depicts a simplified block diagram of the QEI Module. The QEI module includes: Figure 16-2: Three input pins for two phase signals and index pulse Programmable digital noise filters on inputs Quadrature decoder providing counter pulses and count direction 16-bit up/down position counter Count direction status X2 and X4 count resolution 2 modes of position counter reset General Purpose16-bit timer/counter mode Interrupts generated by QEI or counter events
QEB
Digital Filter
CLOCK DIR
Reset
INDX
Digital Filter
EQUAL
DS70063C-page 16-3
Figure 16-3:
Register 16-1 and Register 16-3 define the QEI module control and digital filter control registers, QEICON and DFLTCON.
DS70063C-page 16-4
16
Register 16-1: Upper Byte: R/W-0 CNTERR bit 15 QEICON: QEI Control Register U-0 R/W-0 QEISIDL R-0 INDEX R/W-0 UPDN R/W-0 R/W-0 QEIM<2:0> R/W-0 bit 8 Lower Byte: R/W-0 R/W-0 SWPAB PCDOUT bit 7 bit 15
R/W-0 TQGATE
R/W-0 POSRES
R/W-0 TQCS
CNTERR: Count Error Status Flag bit 1 = Position count error has occurred 0 = No position count error has occurred (CNTERR flag only applies when QEIM<2:0> = 110 or 100) Unimplemented: Read as 0 QEISIDL: Stop in Idle Mode bit 1 = Discontinue module operation when device enters Idle mode 0 = Continue module operation in Idle mode INDEX: Index Pin State Status bit (Read Only) 1 = Index pin is High 0 = Index pin is Low UPDN: Position Counter Direction Status bit 1 = Position Counter Direction is positive (+) 0 = Position Counter Direction is negative (-) (Read only bit when QEIM<2:0> = 1XX) (Read/Write bit when QEIM<2:0> = 001) QEIM<2:0>: Quadrature Encoder Interface Mode Select bits 111 = Quadrature Encoder Interface enabled (x4 mode) with position counter reset by match (MAXCNT) 110 = Quadrature Encoder Interface enabled (x4 mode) with Index Pulse reset of position counter 101 = Quadrature Encoder Interface enabled (x2 mode) with position counter reset by match (MAXCNT) 100 = Quadrature Encoder Interface enabled (x2 mode) with Index Pulse reset of position counter 011 = Unused (Module disabled) 010 = Unused (Module disabled) 001 = Starts 16-bit Timer 000 = Quadrature Encoder Interface/Timer off SWPAB: Phase A and Phase B Input Swap Select bit 1 = Phase A and Phase B inputs swapped 0 = Phase A and Phase B inputs not swapped PCDOUT: Position Counter Direction State Output Enable bit 1 = Position Counter Direction Status Output Enable (QEI logic controls state of I/O pin) 0 = Position Counter Direction Status Output Disabled (Normal I/O pin operation) TQGATE: Timer Gated Time Accumulation Enable bit 1 = Timer gated time accumulation enabled 0 = Timer gated time accumulation disabled TQCKPS<1:0>: Timer Input Clock Prescale Select bits 11 = 1:256 prescale value 10 = 1:64 prescale value 01 = 1:8 prescale value 00 = 1:1 prescale value (Prescaler utilized for 16-bit timer mode only)
bit 14 bit 13
bit 12
bit 11
bit 10-8
bit 7
bit 6
bit 5
bit 4-3
DS70063C-page 16-5
POSRES: Position Counter Reset Enable bit 1 = Index Pulse resets Position Counter 0 = Index Pulse does not reset Position Counter (Bit only applies when QEIM<2:0> = 100 or 110) TQCS: Timer Clock Source Select bit 1 = External clock from pin QEA (on the rising edge) 0 = Internal clock (TCY) UDSRC: Position Counter Direction Selection Control bit 1 = QEB pin State Defines Position Counter Direction 0 = Control/Status bit, UPDN (QEICON<11>), Defines Timer Counter (POSCNT) direction Note: When configured for QEI mode, control bit is a dont care Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 1
bit 0
DS70063C-page 16-6
16
Register 16-2: Upper Byte: U-0 bit 15 DFLTCON: Digital Filter Control Register (dsPIC30F6010 Only) U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 CEID bit 8
R/W-0
R/W-0 QECK<2:0>
R/W-0
R/W-0 INDOUT
R/W-0
Unimplemented: Read as 0 CEID: Count Error Interrupt Disable bit 1 = Interrupts due to position count errors disabled 0 = Interrupts due to position count errors enabled QEOUT: QEA/QEB Digital Filter Output Enable bit 1 = Digital filter outputs enabled 0 = Digital filter outputs disabled (Normal pin operation) QECK<2:0>: QEA/QEB Digital Filter Clock Divide Select bits 111 = 1:256 Clock Divide 110 = 1:128 Clock Divide 101 = 1:64 Clock Divide 100 = 1:32 Clock Divide 011 = 1:16 Clock Divide 010 = 1:4 Clock Divide 001 = 1:2 Clock Divide 000 = 1:1 Clock Divide INDOUT: Index Channel Digital Filter Output Enable bit 1 = Digital filter output is enabled 0 = Digital filter output is disabled (Normal pin operation) INDCK<2:0>: Index Channel Digital Filter Clock Divide Select bits 111 = 1:256 Clock Divide 110 = 1:128 Clock Divide 101 = 1:64 Clock Divide 100 = 1:32 Clock Divide 011 = 1:16 Clock Divide 010 = 1:4 Clock Divide 001 = 1:2 Clock Divide 000 = 1:1 Clock Divide Note: The available control bits in the DFLTCON Register may vary depending on the dsPIC30F device that is used. Refer to Register 16-2 and Register 16-3 for details.
bit 7
bit 6-4
bit 3
bit 2-0
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70063C-page 16-7
Lower Half: R/W-0 QEOUT bit 7 bit 15-11 Unimplemented: Read as 0 bit 10-9
R/W-0 QECK<2:0>
U-0
U-0
U-0
U-0 bit 0
IMV<1:0>: Index Match Value These bits allow the user to specify the state of the QEA and QEB input pins during an Index pulse when the POSCNT register is to be reset. In 4X Quadrature Count Mode: IMV1= Required State of Phase B input signal for match on index pulse IMV0= Required State of Phase A input signal for match on index pulse In 2X Quadrature Count Mode: IMV1= Selects Phase input signal for Index state match (0 = Phase A, 1 = Phase B) IMV0= Required State of the selected Phase input signal for match on index pulse CEID: Count Error Interrupt Disable 1 = Interrupts due to count errors are disabled 0 = Interrupts due to count errors are enabled QEOUT: QEA/QEB/INDX pin Digital Filter Output Enable 1 = Digital filter outputs enabled 0 = Digital filter outputs disabled (normal pin operation) QECK<2:0>: QEA/QEB/INDX Digital Filter Clock Divide Select Bits 111 = 1:256 Clock Divide 110 = 1:128 Clock Divide 101 = 1:64 Clock Divide 100 = 1:32 Clock Divide 011 = 1:16 Clock Divide 010 = 1:4 Clock Divide 001 = 1:2 Clock Divide 000 = 1:1 Clock Divide Unimplemented: Read as 0 Note: The available control bits in the DFLTCON Register may vary depending on the dsPIC30F device that is used. Refer to Register 16-2 and Register 16-3 for details.
bit 8
bit 7
bit 6-4
bit 3-0
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70063C-page 16-8
16
16.3 Programmable Digital Noise Filters
The digital noise filter section is responsible for rejecting noise on the incoming index and quadrature signals. Schmitt trigger inputs and a three-clock cycle delay filter combine to reject low level noise and large, short duration noise spikes that typically occur in noise-prone applications such as a motor system applications. The filter ensures that the filtered output signals are not permitted to change until a stable value has been registered for three consecutive filter cycles. The rate of the filter clocks determines the low passband of the filter. A slower filter clock results in a passband rejecting lower frequencies than a faster filter clock. The filter clock is the device FCY clock divided by a programmable divisor. Setting the QEOUT bit (DFLTCON<7>) enables the filter for channels QEA and QEB. The QECK<2:0> bits (DFLTCON<6:4>) specify the filter clock divisor used for channels QEA and QEB. Setting the INDOUT bit (DFLTCON<3>) enables the filter for the index channel. The INDCK<2:0> bits (DFLTCON<2:0>) specify the filter clock divisor used for the index channel. At reset, the filters for all channels are disabled. Some devices do not have separate control bits for the QEx input digital filters and the INDX input digital filter. For these devices, the QEOUT and QECK<2:0> control bits set the digital filter characteristics for both the QEA/QEB and INDX pins. See Register 16-2 and Register 16-3 for more information. Figure 16-4 depicts a simplified block diagram for the digital noise filter. Figure 16-4: Simplified Digital Noise Filter Block Diagram
Non-filtered Filtered
0 1
QEOUT
TCY
Figure 16-5:
DS70063C-page 16-9
QEA QEB
When QEIM1 = 0, the x2 measurement mode is selected and the QEI logic only looks at the rising and falling edge of the Phase A input for the position counter increment rate. Every rising and falling edge of the Phase A signal causes the position counter to increment or decrement. The Phase B signal is still utilized for the determination of the counter direction, exactly like the x4 measurement mode. Figure 16-7: Quadrature Decoder Signals in 2X Mode
DS70063C-page 16-10
16
16.4.1 Explanation of Lead/Lag Test
The lead/lag test is performed by the quadrature decoder logic to determine the phase relationship of the QEA and QEB signals and hence whether to increment or decrement the POSCNT register. The Table 16-1 clarifies the lead/lag test. Table 16-1: Present Transition QEA Lead/Lag Test Description Previous Transition QEB QEB QEA QEB QEB QEA QEA QEA QEB QEA QEA QEB Condition QEA leads QEB channel QEA lags QEB channel Direction Change QEA lags QEB channel QEA leads QEB channel Direction Change QEA lags QEB channel QEA leads QEB channel Direction Change QEA leads QEB channel QEA lags QEB channel Direction Change Set UPDN Clear UPDN Toggle UPDN Clear UPDN Set UPDN Toggle UPDN Clear UPDN Set UPDN Toggle UPDN Set UPDN Clear UPDN Toggle UPDN Action Increment POSCNT Decrement POSCNT Increment or Decrement POSCNT Decrement POSCNT Increment POSCNT Increment or Decrement POSCNT Decrement POSCNT Increment POSCNT Increment or Decrement POSCNT Increment POSCNT Decrement POSCNT Increment or Decrement POSCNT
QEA
QEB
QEB
16.4.2
16.4.3
DS70063C-page 16-11
16.5
16.5.1
DS70063C-page 16-12
16
16.5.2 Using MAXCNT to Reset the Position Counter
When the QEIM0 bit is 1, the position counter will reset on a match of the position count with predetermined high and low values. The index pulse reset mechanism is not utilized. For this mode the position counter reset mechanism operates as follows: (See Figure 16-8 for related timing details). - If the encoder is traveling in the forward direction e.g., QEA leads QEB, and the value in the POSCNT register matches the value in the MAXCNT register, POSCNT will reset to zero on the next occurring quadrature pulse edge that increments POSCNT. An interrupt event is generated on this rollover event. - If the encoder is travelling in the reverse direction e.g., QEB leads QEA, and the value in the POSCNT register counts down to 0, the POSCNT is loaded with the value in the MAXCNT register on the next occurring quadrature pulse edge that decrements POSCNT. An interrupt event is generated on this underflow event. When using MAXCNT as a position limit, remember the position counter will count at either 2X or 4X of the encoder counts. For standard rotary encoders, the appropriate value to write to MAXCNT would be 4N 1 for 4x position mode and 2N 1 for 2x position mode, where N is the number of counts per revolution of the encoder. For absolute position information where the range of the system exceeds 216, it is also appropriate to load a value of 0xFFFF into the MAXCNT register. The module will generate an interrupt on rollover or underflow of the position counter. Figure 16-8: Rollover/Rollunder Reset-Up/Down Position Counter
QEA QEB
DS70063C-page 16-13
count_clock POSCNT 00E3 00E4 00E5 00E6 0000 0001 0002 0003 0004 UPDN Generate QEI Interrupt POSCNT set to MAXCNT Recognize Index Wheel Reverses 0005 0004 0003 0002 0001 0000 00E6 00E5 00E4 00E3 00E2 00E1 00E0
16.5.3.1
Index Pulse Detection Criteria Incremental encoders from different manufacturers use differing timing for the index pulse. The index pulse may be aligned to any of the 4 quadrature states and may have a pulse width of either a full cycle (4 quadrature states), a half cycle (2 quadrature states) or a quarter cycle (1 quadrature state). Index pulses of a full cycle width or a half cycle width are normally termed ungated and index pulses of a quarter cycle width are normally termed gated. Regardless of the type of index pulse provided, the QEI maintains symmetry of the count as the wheel reverses direction. This means the index pulse must reset the position counter at the same relative quadrature state transition as the wheel rotates in the forward or reverse direction. For example, in Figure 16-9, the first index pulse is recognized and resets POSCNT as the quadrature state changes from 4 to 1 as highlighted in the diagram. The QEI latches the state of this transition. Any subsequent index pulse detection will use that state transition for the reset. As the wheel reverses, the index pulse again occurs, however the reset of the position counter cannot occur until the quadrature state changes from 1 to 4, again highlighted in the diagram. Note: The QEI index logic ensures that the POSCNT register is always adjusted at the same position relative to the index pulse, regardless of the direction of travel.
DS70063C-page 16-14
16
16.5.3.2 IMV Control Bits The IMV<2:0> control bits are available on some dsPIC devices that have the QEI module. (See Register 16-3). These control bits allow the user to select the state of the QEA and QEB signals for which an index pulse reset will occur. Devices that do not have these control bits will select the QEA and QEB states automatically during the first occurrence of an index pulse. 16.5.3.3 Index Pulse Status The INDEX bit (QEICON<12>) provides status of the logic state on the index pin. This status bit is very useful in position control systems during the homing sequence, where the system searches for a reference position. The index bit indicates the status of the index pin after being processed by the digital filter, if it is enabled. 16.5.3.4 Using the Index Pin and MAXCNT for Error Checking When the counter operates in reset on index pulse mode, the QEI will also detect POSCNT register boundary conditions. This may be used to detect system errors in the incremental encoder system. For example, assume a wheel encoder has 100 lines. When utilized in x4 measurement mode and reset on the index pulse, the counter should count from 0 to 399 (0x018E) and reset. If the POSCNT register ever achieves the values of 0xFFFF or 0x0190, some sort of system error has occurred. The contents of the POSCNT register is compared with MAXCNT + 1, if counting up, and with 0xFFFF, if counting down. If the QEI detects one of these values, a position count error condition is generated by setting the CNTERR bit (QEICON<15>) and optionally generating a QEI interrupt. If the CEID control bit (DFLTCON<8>) is cleared (default), then a QEI interrupt will be generated when a position count error is detected. If the CEID control bit is set, then an interrupt will not occur. The position counter continues to count encoder edges after detecting a position count error. No interrupt is generated for subsequent position count error events until CNTERR is cleared by the user. 16.5.3.5 Position Counter Reset Enable The position counter reset enable bit, POSRES (QEICON<2>) enables reset of the position counter when the index pulse is detected. This bit only applies when the QEI module is configured for modes, QEIM<2:0> = 100 or 110. If the POSRES bit is set to a logic 1 then the position counter is reset when the index pulse is detected as described in this section. If the POSRES bit is set to a logic 0, then the position counter is not reset when the index pulse is detected. The position counter will continue counting up or down and be reset on the rollover or underflow condition. The QEI continues to generate interrupts on the detection of the index pulse.
DS70063C-page 16-15
QEA
Synchronize Det
CK Q
Comparator/Zero Detect
Equal
DS70063C-page 16-16
16
16.6.1 Up/Down Timer Operation
The QEI timer can increment or decrement. This is a unique feature over most other timers. When the timer is configured to count up, the timer (POSCNT) will increment until the count matches the period register (MAXCNT). The timer resets to zero and restarts incrementing. When the timer is configured to count down, the timer (POSCNT) will decrement until the count matches the period register (MAXCNT). The timer resets to zero and restarts decrementing. When the timer is configured to count down some general operation guidelines must be followed for correct operation. 1. The MAXCNT register will serve as the period match register but because the counter is decrementing, the desired match value is 2 count. For example, to count 0x1000 clocks, the period register must be loaded with 0xF000. On a match condition, the timer resets to zero.
2.
Either an I/O pin or a SFR control bit specify the count direction control. Control bit UDSRC (QEICON<0>) determines what controls the timer count direction state. When UDSRC = 1, the timer count direction is controlled from the QEB pin. If the QEB pin is 1, the count direction will be incrementing. If the QEB pin is 0, the count direction will be decrementing. When UDSRC = 0, the timer count direction is controlled from the UPDN bit (QEICON<11>). When UPDN = 1, the timer increments. When UPDN = 0, the timer decrements.
16.6.2
16.6.3
16.7
DS70063C-page 16-17
N/A N/A
N/A 0 1 0 1 0 1
N/A 0 0 0 0 1 1 Input (TQGATE) Port not disabled Input (TQGATE) Port not disabled Input (TQCKI) Port not disabled Input (TQCKI) Port not disabled Input (QEA) Input (UPDN)
Input (UPDN)
Input (UPDN) 101,111 0 N/A N/A N/A Input QEI (QEB) Reset by count 1 N/A N/A N/A Input (QEA) Input Output (QEB) (UPDN) 100,110 0 N/A N/A N/A Input (QEA) Input Input QEI (QEB) (INDX) Reset by Index 1 N/A N/A N/A Input (QEA) Input Input Output (QEB) (INDX) (UPDN) Note: Empty slot indicates pin not used by QEI in this configuration,pin controlled by I/O port logic.
DS70063C-page 16-18
16
16.9 16.9.1 QEI Operation During Power Saving Modes When the Device Enters Sleep
When the device enters Sleep mode, the QEI will cease all operations. POSCNT will stop at the current value. The QEI will not respond to active signals on the QEA, QEB, INDX or UPDN pins. The QEICON register will remain unchanged. If the QEI is configured as a timer/counter, QEIM<2:0> = 001, and the clock is provided externally, TQCS = 1, the module will also cease operation during Sleep mode. When the module wakes up, the quadrature decoder will accept the next transition on the QEA or QEB signals and compare that transition to the last transition before Sleep to determine the next action.
16.9.2
16.10
Effects of a Reset
Reset forces module registers to their initial reset state. See Register 16-1 for all initialization and reset conditions for QEI module related registers. The quadrature decoder and the POSCNT counter are reset to an initial state.
DS70063C-page 16-19
Table 16-4:
Bit 12 INDX Position Count Register Maximum Count Register PCFG9 OVBTE COVTE DCIIF DCIIE LVDIP<2:0> DCIIP<2:0> QEIIE PWMIE C2IE INT4IE INT3IE OC8IE OC7IE OC6IE QEIIP<2:0> QEIIF PWMIF C2IF INT4IF INT3IF OC8IF OC7IF OC6IF INT4EP INT3EP INT2EP INT1EP MATHERR ADDRERR STKERR OSCFAIL INT0EP OC5IF OC5IE PCFG8 PCFG7 PCFG6 PCFG5 PCFG4 PCFG3 PCFG2 PCFG1 PCFG0 QEOUT QECK2 QECK1 QECK0 INDOUT INDCK2 INDCK1 UPDN QEIM2 QEIM1 QEIM0 SWPAB PCDOUT TQGATE TQCKPS1 TQCKPS0 POSRES TQCS Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Value on ALL Reset UDSRC 0000 0000 0000 0000 INDCK0 ---- ---- ---- ---0000 0000 0000 0000 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0100 0100 0100
Name
Bit 15
Bit 14
Bit 13
QEICON
CNTERR
Unused
QEISIDL
DFLTCON
POSCNT
DS70063C-page 16-20
FLTBIE FLTAIE LVDIE FLTBIF FLTAIF LVDIF OVATE
MAXCNT
ADPCFG
PCFG15
INTCON1
NSTDIS
INTCON2
ALTIVT
IFS2
IEC2
IPC10
FLTAIP<2:0>
Note:
The available control bits in the DFLTCON Register may vary depending on the dsPIC30F device that is used. Refer to Register 16-2 and Register 16-3 for details.
Note:
On many devices, the QEI pins are multiplexed with analog input pins. You will need to ensure that the QEI pins are configured as digital pins using the ADPCFG control register.
16
16.11 Design Tips
Question 1: I have initialized the QEI, but the POSCNT Register does not seem to change when quadrature signals are applied to the QEA/QEB pins.
Answer: On many devices, the QEI pins are multiplexed with analog input pins. You will need to ensure that the QEI pins are configured as digital pins using the ADPCFG control register. Question 2: How fast may my quadrature signals be?
Answer: The answer depends on the setting of the filter parameters for the quadrature signals. QEI requires that quadrature signals frequency must be less than FCY/3 when no filter is used and Filter Frequency/6 when a filter is used. Question: 3 My encoder has a 90 Index Pulse and the count does not reset properly.
Answer: Depending on how the count clock is generated and which quadrature state transition is used for the index pulse, a 1/4 cycle index pulse may not be recognized before the required transition. To fix this, use a filter on the quadrature clocks which has a higher filter prescaler than that of the index pulse. This has the effect of delaying the quadrature clocks somewhat, allowing for proper detection of the index pulse. Figure 16-11: Reset by Index Mode (90 Index Pulse) Up/Down Position Counter
count_clock POSCNT UPDN Generate QEI Interrupt POSCNT set to 0000 Recognize Index Wheel Reverses Generate QEI Interrupt POSCNT set to MAXCNT Recognize Index 00E4 0000 0001 0002 0003 0002 0001 0000 00E4 00E3 00E2
DS70063C-page 16-21
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70063C-page 16-22
16
16.13 Revision History Revision A
This is the initial released revision of this document.
Revision B
This revision provides expanded information for the dsPIC30F Quadrature Encoder Interface (QEI) module.
Revision C
This revision incorporates all known errata at the time of this document update.
DS70063C-page 16-23
DS70063C-page 16-24
17
10-bit A/D Converter
DS70064D-page 17-1
A block diagram of the 10-bit A/D is shown in Figure 17-1. The 10-bit A/D converter can have up to 16 analog input pins, designated AN0-AN15. In addition, there are two analog input pins for external voltage reference connections. These voltage reference inputs may be shared with other analog input pins. The actual number of analog input pins and external voltage reference input configuration will depend on the specific dsPIC30F device. Refer to the device data sheet for further details. The analog inputs are connected via multiplexers to four S/H amplifiers, designated CH0-CH3. One, two, or four of the S/H amplifiers may be enabled for acquiring input data. The analog input multiplexers can be switched between two sets of analog inputs during conversions. Unipolar differential conversions are possible on all channels using certain input pins (see Figure 17-1). An Analog Input Scan mode may be enabled for the CH0 S/H amplifier. A Control register specifies which analog input channels will be included in the scanning sequence. The 10-bit A/D is connected to a 16-word result buffer. Each 10-bit result is converted to one of four 16-bit output formats when it is read from the buffer.
DS70064D-page 17-2
AN0
+ S/H -
CH1
ADC
17
10-bit Result Conversion Logic CH2
AN1
+ S/H
AN2
AN2 AN5 AN8 AN11 VREF0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 VREFAN1
+ S/H -
Sample
Input Switches
AN3 AN4 AN5 AN6 AN7 AN8 AN9 AN10 AN11 AN12 AN13 AN14 AN15
+ S/H -
CH0
Note: VREF+, VREF- inputs may be shared with other analog inputs. See device data sheet for details.
DS70064D-page 17-3
Bus Interface
Data Format
The ADCON1, ADCON2 and ADCON3 registers control the operation of the A/D module. The ADCHS register selects the input pins to be connected to the S/H amplifiers. The ADPCFG register configures the analog input pins as analog inputs or as digital I/O. The ADCSSL register selects inputs to be sequentially scanned.
17.3
DS70064D-page 17-4
R/W-0
U-0
R/W-0 SIMSAM
R/W-0 ASAM
17
10-bit A/D Converter
ADON: A/D Operating Mode bit 1 = A/D converter module is operating 0 = A/D converter is off Unimplemented: Read as 0 ADSIDL: Stop in Idle Mode bit 1 = Discontinue module operation when device enters Idle mode 0 = Continue module operation in Idle mode FORM<1:0>: Data Output Format bits 11 = Signed Fractional (DOUT = sddd dddd dd00 0000) 10 = Fractional (DOUT = dddd dddd dd00 0000) 01 = Signed Integer (DOUT = ssss sssd dddd dddd) 00 = Integer (DOUT = 0000 00dd dddd dddd) SSRC<2:0>: Conversion Trigger Source Select bits 111 = Internal counter ends sampling and starts conversion (auto convert) 110 = Reserved 101 = Reserved 100 = Reserved 011 = Motor Control PWM interval ends sampling and starts conversion 010 = GP Timer3 compare ends sampling and starts conversion 001 = Active transition on INT0 pin ends sampling and starts conversion 000 = Clearing SAMP bit ends sampling and starts conversion Unimplemented: Read as 0 SIMSAM: Simultaneous Sample Select bit (only applicable when CHPS = 01 or 1x) 1 = Samples CH0, CH1, CH2, CH3 simultaneously (when CHPS = 1x) or Samples CH0 and CH1 simultaneously (when CHPS = 01) 0 = Samples multiple channels individually in sequence ASAM: A/D Sample Auto-Start bit 1 = Sampling begins immediately after last conversion completes. SAMP bit is auto set 0 = Sampling begins when SAMP bit set
bit 14 bit 13
bit 7-5
bit 4 bit 3
bit 2
DS70064D-page 17-5
SAMP: A/D Sample Enable bit 1 = At least one A/D sample/hold amplifier is sampling 0 = A/D sample/hold amplifiers are holding When ASAM = 0, writing 1 to this bit will start sampling When SSRC = 000, writing 0 to this bit will end sampling and start conversion DONE: A/D Conversion Status bit (Rev. B silicon or later) 1 = A/D conversion is done 0 = A/D conversion is NOT done Cleared by software or start of a new conversion Clearing this bit will not effect any operation in progress Legend: R = Readable bit HC = Hardware clear -n = Value at POR W = Writable bit HS = Hardware set 1 = Bit is set U = Unimplemented bit, read as 0 C = Clearable by software 0 = Bit is cleared x = Bit is unknown
bit 0
DS70064D-page 17-6
U-0
R/W-0
R/W-0
R/W-0 BUFM
17
10-bit A/D Converter
A/D VREFL AVSS AVSS External VREF- pin External VREF- pin AVSS
Reserved: User should write 0 to this location Unimplemented: Read as 0 CSCNA: Scan Input Selections for CH0+ S/H Input for MUX A Input Multiplexer Setting bit 1 = Scan inputs 0 = Do not scan inputs CHPS<1:0>: Selects Channels Utilized bits 1x = Converts CH0, CH1, CH2 and CH3 01 = Converts CH0 and CH1 00 = Converts CH0 When SIMSAM bit (ADCON1<3>) = 0 multiple channels sampled sequentially When SMSAM bit (ADCON1<3>) = 1 multiple channels sampled as in CHPS<1:0> BUFS: Buffer Fill Status bit Only valid when BUFM = 1 (ADRES split into 2 x 8-word buffers). 1 = A/D is currently filling buffer 0x8-0xF, user should access data in 0x0-0x7 0 = A/D is currently filling buffer 0x0-0x7, user should access data in 0x8-0xF Unimplemented: Read as 0 SMPI<3:0>: Sample/Convert Sequences Per Interrupt Selection bits 1111 = Interrupts at the completion of conversion for each 16th sample/convert sequence 1110 = Interrupts at the completion of conversion for each 15th sample/convert sequence ..... 0001 = Interrupts at the completion of conversion for each 2nd sample/convert sequence 0000 = Interrupts at the completion of conversion for each sample/convert sequence BUFM: Buffer Mode Select bit 1 = Buffer configured as two 8-word buffers ADCBUF(15...8), ADCBUF(7...0) 0 = Buffer configured as one 16-word buffer ADCBUF(15...0.) ALTS: Alternate Input Sample Mode Select bit 1 = Uses MUX A input multiplexer settings for first sample, then alternate between MUX B and MUX A input multiplexer settings for all subsequent samples 0 = Always use MUX A input multiplexer settings Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 9-8
bit 7
bit 1
bit 0
DS70064D-page 17-7
U-0
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
bit 15-13 Unimplemented: Read as 0 bit 12-8 SAMC<4:0>: Auto-Sample Time bits 11111 = 31 TAD 00001 = 1 TAD 00000 = 0 TAD (only allowed if performing sequential conversions using more than one S/H amplifier) ADRC: A/D Conversion Clock Source bit 1 = A/D internal RC clock 0 = Clock derived from system clock Unimplemented: Read as 0 ADCS<5:0>: A/D Conversion Clock Select bits 111111 = TCY/2 (ADCS<5:0> + 1) = 32 TCY 000001 = TCY/2 (ADCS<5:0> + 1) = TCY 000000 = TCY/2 (ADCS<5:0> + 1) = TCY/2 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 7
DS70064D-page 17-8
R/W-0 CH123SA
R/W-0 CH0NA
R/W-0
R/W-0 bit 0
17
10-bit A/D Converter
bit 15-14 CH123NB<1:0>: Channel 1, 2, 3 Negative Input Select for MUX B Multiplexer Setting bits Same definition as bits 6-7 (Note) bit 13 bit 12 bit 11-8 bit 7-6 CH123SB: Channel 1, 2, 3 Positive Input Select for MUX B Multiplexer Setting bit Same definition as bit 5 (Note) CH0NB: Channel 0 Negative Input Select for MUX B Multiplexer Setting bit Same definition as bit 4 (Note) CH0SB<3:0>: Channel 0 Positive Input Select for MUX B Multiplexer Setting bits Same definition as bits 3-0 (Note) CH123NA<1:0>: Channel 1, 2, 3 Negative Input Select for MUX A Multiplexer Setting bits 11 = CH1 negative input is AN9, CH2 negative input is AN10, CH3 negative input is AN11 10 = CH1 negative input is AN6, CH2 negative input is AN7, CH3 negative input is AN8 0x = CH1, CH2, CH3 negative input is VREFCH123SA: Channel 1, 2, 3 Positive Input Select for MUX A Multiplexer Setting bit 1 = CH1 positive input is AN3, CH2 positive input is AN4, CH3 positive input is AN5 0 = CH1 positive input is AN0, CH2 positive input is AN1, CH3 positive input is AN2 CH0NA: Channel 0 Negative Input Select for MUX A Multiplexer Setting bit 1 = Channel 0 negative input is AN1 0 = Channel 0 negative input is VREFCH0SA<3:0>: Channel 0 Positive Input Select for MUX A Multiplexer Setting bits 1111 = Channel 0 positive input is AN15 1110 = Channel 0 positive input is AN14 1101 = Channel 0 positive input is AN13 || || || 0001 = Channel 0 positive input is AN1 0000 = Channel 0 positive input is AN0 Note: The analog input multiplexer supports two input setting configurations, denoted MUX A and MUX B. ADCHS<15:8> determine the settings for MUX B, and ADCHS<7:0> determine the settings for MUX A. Both sets of control bits function identically. The ADCHS register description and functionality will vary depending on the number of A/D inputs available on the selected device. Please refer to the specific device data sheet for additional details on this register.
bit 5
bit 4
bit 3-0
Note:
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70064D-page 17-9
R/W-0 PCFG5
R/W-0 PCFG4
R/W-0 PCFG3
R/W-0 PCFG2
R/W-0 PCFG1
PCFG<15:0>: Analog Input Pin Configuration Control bits 1 = Analog input pin in Digital mode, port read input enabled, A/D input multiplexer input connected to AVSS 0 = Analog input pin in Analog mode, port read input disabled, A/D samples pin voltage Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
Register 17-6:
ADCSSL: A/D Input Scan Select Register R/W-0 CSSL13 R/W-0 CSSL12 R/W-0 CSSL11 R/W-0 CSSL10 R/W-0 CSSL9 R/W-0 CSSL8 bit 8
R/W-0 CSSL5
R/W-0 CSSL4
R/W-0 CSSL3
R/W-0 CSSL2
R/W-0 CSSL1
CSSL<15:0>: A/D Input Pin Scan Selection bits 1 = Select ANx for input scan 0 = Skip ANx for input scan Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70064D-page 17-10
17
10-bit A/D Converter
A/D conversion complete, result is loaded into A/D result buffer. Optionally generate interrupt.
S/H amplifier is disconnected from input and holds signal lever. A/D conversion is started by the conversion trigger source. S/H amplifier is connected to the analog input pin for sampling.
The 10-bit A/D converter allows many options for specifying the sample/convert sequence. The sample/convert sequence can be very simple, such as the one shown in Figure 17-3. The example in Figure 17-3 uses only one S/H amplifier. A more elaborate sample/convert sequence performs multiple conversions using more than one S/H amplifier. The 10-bit A/D converter can use two S/H amplifiers to perform two conversions in a sample/convert sequence or four S/H amplifiers with four conversions. The number of S/H amplifiers, or channels per sample, used in the sample/convert sequence is determined by the CHPS control bits.
DS70064D-page 17-11
Simultaneous Sampling
Sequential Sampling
The start time for sampling can be controlled in software by setting the SAMP control bit. The start of the sampling time can also be controlled automatically by the hardware. When the A/D converter operates in the Auto-Sample mode, the S/H amplifier(s) is reconnected to the analog input pin at the end of the conversion in the sample/convert sequence. The auto-sample function is controlled by the ASAM control bit (ADCON1<2>). The conversion trigger source ends the sampling time and begins an A/D conversion or a sample/convert sequence. The conversion trigger source is selected by the SSRC control bits. The conversion trigger can be taken from a variety of hardware sources, or can be controlled manually in software by clearing the SAMP control bit. One of the conversion trigger sources is an auto-conversion. The time between auto-conversions is set by a counter and the A/D clock. The Auto-Sample mode and auto-conversion trigger can be used together to provide endless automatic conversions without software intervention. An interrupt may be generated at the end of each sample/convert sequence or multiple sample/convert sequences as determined by the value of the SMPI control bits ADCON2<5:2>. The number of sample/convert sequences between interrupts can vary between 1 and 16. The user should note that the A/D conversion buffer holds 16 results when the SMPI value is selected. The total number of conversion results between interrupts is the product of the channels per sample and the SMPI value. The total number of conversions between interrupts should not exceed the buffer length.
DS70064D-page 17-12
17
10-bit A/D Converter
2.
The options for each configuration step are described in the subsequent sections.
17.6
17.7
DS70064D-page 17-13
17.8
17.8.1
17.8.2
DS70064D-page 17-14
17
10-bit A/D Converter
The ADCSSL bits only specify the input of the positive input of the channel. The CH0NA bit still selects the input of the negative input of the channel during scanning. If the ALTS bit is 1, the scanning only applies to the MUX A input selection. The MUX B input selection, as specified by the CH0SB<3:0>, will still select the alternating channel 0 input. When the input selections are programmed in this manner, the channel 0 input will alternate between a set of scanning inputs specified by the ADCSSL register and a fixed input specified by the CH0SB bits.
DS70064D-page 17-15
17.9
17.10
17.10.1
DS70064D-page 17-16
17
10-bit A/D Converter
Figure 17-4, Figure 17-5, Figure 17-6, Figure 17-7, Figure 17-10, Figure 17-11, Figure 17-14, Figure 17-15
CHPS<1:0> SIMSAM 00 x
01 1x
0 0
Sample CH0, Convert CH0 Sample CH1, Convert CH1 Sample CH0, Convert CH0 Sample CH1, Convert CH1 Sample CH2, Convert CH2 Sample CH3, Convert CH3 Sample CH0, CH1 simultaneously Convert CH0 Convert CH1 Sample CH0, CH1, CH2, CH3 simultaneously Convert CH0 Convert CH1 Convert CH2 Convert CH3
01
1x
Figure 17-8 Figure 17-12, Figure 17-16, Figure 17-17, Figure 17-9,
17.11 17.11.1
17.11.2
Automatic
Setting the ASAM bit (ADCON1<2>) causes the A/D to automatically begin sampling a channel whenever a conversion is not active on that channel. One of several options can be used to end sampling and complete the conversions. If the SIMSAM bit specifies sequential sampling, sampling on a channel resumes after the conversion of that channel completes. If the SIMSAM bit specifies simultaneous sampling, sampling on a channel resumes after the conversion of all channels completes. For an example, see Figure 17-5.
DS70064D-page 17-17
Note:
The SSRC selection bits should not be changed when the A/D module is enabled. If the user wishes to change the conversion trigger source, the A/D module should be disabled first by clearing the ADON bit (ADCON1<15>).
17.12.1
Manual
When SSRC<2:0> = 000, the conversion trigger is under software control. Clearing the SAMP bit (ADCON1<1>) starts the conversion sequence. Figure 17-4 is an example where setting the SAMP bit initiates sampling and clearing the SAMP bit terminates sampling and starts conversion. The user software must time the setting and clearing of the SAMP bit to ensure adequate sampling time of the input signal. See Example 17-1 for code example.
Figure 17-4:
Example 17-1:
ADCON1bits.ADON = 1; while (1) { ADCON1bits.SAMP = 1; DelayNmSec(100); ADCON1bits.SAMP = 0; while (!ADCON1bits.DONE); ADCValue = ADCBUF0; }
// turn ADC ON // repeat continuously // // // // // // start sampling ... for 100 mS start Converting conversion done? yes then get ADC value repeat
DS70064D-page 17-18
ADCLK TAD0 SAMP DONE ADCBUF0 BSET ADCON1,ASAM BCLR ADCON1,SAMP BCLR ADCON1,SAMP Instruction Execution TSAMP TCONV TAD0 TSAMP TCONV
17
10-bit A/D Converter
Example 17-2:
ADCHS
= 0x0007;
// turn ADC ON // repeat continuously // // // // // sample for 100 mS start Converting conversion done? yes then get ADC value repeat
DS70064D-page 17-19
TSMP = SAMC<4:0>*TAD
When using only 1 S/H channel or simultaneous sampling, SAMC must always be programmed for at least one clock cycle. When using multiple S/H channels with sequential sampling, programming SAMC for zero clock cycles will result in the fastest possible conversion rate. See Example 17-3 for code example. Figure 17-6: Converting 1 Channel, Manual Sample Start, TAD Based Conversion Start
ADCLK TSAMP = 16 TAD SAMP DONE ADCBUF0 Instruction Execution BSET ADCON1,SAMP TCONV
Example 17-3:
Converting 1 Channel, Manual Sample Start, TAD Based Conversion Start Code
// // // // // // all PORTB = Digital; RB12 = analog SSRC bit = 111 implies internal counter ends sampling and starts converting. Connect RB12/AN12 as CH0 input .. in this example RB12/AN12 is the input
ADCHS
= 0x000C;
// turn ADC ON // repeat continuously // // // // // start sampling then ... after 31Tad go to conversion conversion done? yes then get ADC value repeat
// repeat
DS70064D-page 17-20
Figure 17-7:
17
10-bit A/D Converter
TCONV
ADCLK TSAMP = 16 TAD SAMP DONE ADCBUF0 ADCBUF1 Instruction Execution BSET ADCON1,ASAM TCONV TSAMP = 16 TAD
Example 17-4:
ADCHS
= 0x0002;
// Sample time = 15Tad, Tad = internal Tcy/2 // Interrupt after every 2 samples
// clear value // initialize ADCBUF pointer // clear ADC interrupt flag // auto start sampling // for 31Tad then go to conversion while (!IFS0bits.ADIF); // conversion done? ADCON1bits.ASAM = 0; // yes then stop sample/convert for (count = 0; count < 2; count++) // average the 2 ADC value ADCValue = ADCValue + *ADC16Ptr++; ADCValue = ADCValue >> 1; } // repeat
DS70064D-page 17-21
ADCLK TCONV TSAMP ch0_samp ch1_samp ch2_samp ch3_samp ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 DONE SAMP TCONV TCONV TCONV TCONV TCONV
Example 17-5:
Converting 4 Channels, Auto-Sample Start, TAD Conversion Start, Simultaneous Sampling Code
// // // // // // RB0,RB1,RB2 & RB7 = analog SIMSAM bit = 1 implies ... simultaneous sampling ASAM = 1 for auto sample after convert SSRC = 111 for 3Tad sample time Connect AN7 as CH0 input
ADCHS
= 0x0007;
// // // //
Auto Sampling 3 Tad, Tad = internal 2 Tcy CHPS = 1x implies simultaneous ... sample CH0 to CH3 SMPI = 0011 for interrupt after 4 converts
ADCON1bits.ADON = 1; while (1) { ADC16Ptr = &ADCBUF0; OutDataPtr = &OutData[0]; IFS0bits.ADIF = 0; while (IFS0bits.ADIF); for (count = 0; count < 4; { ADCValue = *ADC16Ptr++; LoadADC(ADCValue); } }
// turn ADC ON // repeat continuously // initialize ADCBUF pointer // point to first TXbuffer value // clear interrupt // conversion done? count++) // save the ADC values
// repeat
DS70064D-page 17-22
Figure 17-9:
ADCLK
TCONV TSAMP ch0_samp ch1_samp ch2_samp ch3_samp ADRES(0) ADRES(1) ADRES(2) ADRES(3) DONE SAMP =0
TCONV
TCONV
TCONV
TCONV TSAMP
17
10-bit A/D Converter
17.12.2.4 Sample Time Considerations Using Clocked Conversion Trigger and Automatic Sampling Different sample/conversion sequences provide different available sampling times for the S/H channel to acquire the analog signal. The user must ensure the sampling time exceeds the sampling requirements, as outlined in Section 17.16 A/D Sampling Requirements. Assuming that the module is set for automatic sampling and using a clocked conversion trigger, the sampling interval is determined by the sample interval specified by the SAMC bits. If the SIMSAM bit specifies simultaneous sampling or only one channel is active, the sampling time is the period specified by the SAMC bit. Equation 17-3: Available Sampling Time, Simultaneous Sampling
Note 1: CH/S specified by CHPS<1:0> bits. 2: TSEQ is the total time for the sample/convert sequence.
DS70064D-page 17-23
DS70064D-page 17-24
17
10-bit A/D Converter
Example 17-6:
Converting 1 Channel, Auto-Sample Start, Conversion Trigger Based Conversion Start Code
// // // // // // all PORTB = Digital; RB2 analog SSRC bit = 010 implies GP TMR3 compare ends sampling and starts converting. Connect RB2/AN2 as CH0 input .. in this example RB2/AN2 is the input
ADCHS
= 0x0002;
// set TMR3 to time out every 125 mSecs TMR3 = 0x0000; PR3 = 0x3FFF; T3CON = 0x8010; ADCON1bits.ADON = 1; ADCON1bits.ASAM = 1; while (1) { while (!IFS0bits.ADIF); ADCValue = ADCBUF0; IFS0bits.ADIF = 0; } // turn ADC ON // start auto sampling every 125 mSecs // repeat continuously // // // // conversion done? yes then get first ADC value clear ADIF repeat
DS70064D-page 17-25
DS70064D-page 17-26
17
TSAMP
ch0_samp TSAMP
ch1_samp TSAMP
ch2_samp TSAMP
ch3_samp TSAMP
DS70064D-page 17-27
Trigger Pulse Interval (TSEQ) Channels per Sample (CH/S) * Conversion Time (TCONV) TSEQ (CH/S * TCONV)
Note 1: CH/S specified by CHPS<1:0> bits. 2: TSEQ is the trigger pulse interval time. If the SIMSAM bit specifies sequential sampling, the sampling time is the trigger pulse period less the time required to complete only one conversion. Equation 17-6: TSMP TSMP = = Available Sampling Time, Sequential Sampling
Trigger Pulse Interval (TSEQ) Conversion Time (TCONV) TSEQ TCONV TSEQ is the trigger pulse interval time.
Note:
DS70064D-page 17-28
17.13.1
17
10-bit A/D Converter
17.13.2
17.13.3
Aborting Sampling
Clearing the SAMP bit while in Manual Sampling mode will terminate sampling, but may also start a conversion if SSRC = 000. Clearing the ASAM bit while in Automatic Sampling mode will not terminate an on going sample/convert sequence, however, sampling will not automatically resume after subsequent conversions.
17.13.4
Aborting a Conversion
Clearing the ADON bit during a conversion will abort the current conversion. The A/D Result register pair will NOT be updated with the partially completed A/D conversion sample. That is, the corresponding ADCBUF buffer location will continue to contain the value of the last completed conversion (or the last value written to the buffer).
DS70064D-page 17-29
17.14.1
17.14.2
17.14.3
17.14.4
DS70064D-page 17-30
17.15.1
17
10-bit A/D Converter
Conversion Trigger
ADCLK
TSAMP TCONV
TSAMP TCONV
TSAMP TCONV
TSAMP TCONV
Input to CH0 ASAM SAMP DONE ADCBUF0 ADCBUF1 ADCBUFE ADCBUFF ADIF BSET ADCON1,ASAM
AN0
AN0
AN0
AN0
Instruction Execution
DS70064D-page 17-31
CONTROL BITS Sequence Select SMPI<2:0> = 1111 Interrupt on 16th sample CHPS<1:0> = 00 Sample Channel CH0 SIMSAM = n/a Not applicable for single channel sample BUFM = 0 Single 16-word result buffer ALTS = 0 Always use MUX A input select MUX A Input Select CH0SA<3:0> = 0000 Select AN0 for CH0+ input CH0NA = 0 Select VREF- for CH0- input CSCNA = 0 No input scan CSSL<15:0> = n/a Scan input select unused CH123SA = n/a Channel CH1, CH2, CH3 + input unused CH123NA<1:0> = n/a Channel CH1, CH2, CH3 input unused MUX B Input Select CH0SB<3:0> = n/a Channel CH0+ input unused CH0NB = n/a Channel CH0- input unused CH123SB = n/a Channel CH1, CH2, CH3 + input unused CH123NB<1:0> = n/a Channel CH1, CH2, CH3 input unused
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN0 sample 1 AN0 sample 2 AN0 sample 3 AN0 sample 4 AN0 sample 5 AN0 sample 6 AN0 sample 7 AN0 sample 8 AN0 sample 9 AN0 sample 10 AN0 sample 11 AN0 sample 12 AN0 sample 13 AN0 sample 14 AN0 sample 15 AN0 sample 16
Buffer @ 2nd Interrupt AN0 sample 17 AN0 sample 18 AN0 sample 19 AN0 sample 20 AN0 sample 21 AN0 sample 22 AN0 sample 23 AN0 sample 24 AN0 sample 25 AN0 sample 26 AN0 sample 27 AN0 sample 28 AN0 sample 29 AN0 sample 30 AN0 sample 31 AN0 sample 32
DS70064D-page 17-32
17
10-bit A/D Converter
TSAMP TCONV TCONV TSAMP TCONV
TSAMP TCONV
TSAMP
Input to CH0 ASAM SAMP DONE ADCBUF0 ADCBUF1 ADCBUFE ADCBUFF ADIF BSET ADCON1,#ASAM
AN0
AN1
AN14
AN15
Instruction Execution
DS70064D-page 17-33
CONTROL BITS Sequence Select SMPI<2:0> = 1111 Interrupt on 16th sample CHPS<1:0> = 00 Sample Channel CH0 SIMSAM = n/a Not applicable for single channel sample BUFM = 0 Single 16-word result buffer ALTS = 0 Always use MUX A input select MUX A Input Select CH0SA<3:0> = n/a Override by CSCNA CH0NA = 0 Select VREF- for CH0- input CSCNA = 1 Scan CH0+ Inputs CSSL<15:0> = 1111 1111 1111 1111 Scan input select unused CH123SA = n/a Channel CH1, CH2, CH3 + input unused CH123NA<1:0> = n/a Channel CH1, CH2, CH3 input unused MUX B Input Select CH0SB<3:0> = n/a Channel CH0+ input unused CH0NB = n/a Channel CH0- input unused CH123SB = n/a Channel CH1, CH2, CH3 + input unused CH123NB<1:0> = n/a Channel CH1, CH2, CH3 input unused
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN0 sample 1 AN1 sample 2 AN2 sample 3 AN3 sample 4 AN4 sample 5 AN5 sample 6 AN6 sample 7 AN7 sample 8 AN8 sample 9 AN9 sample 10 AN10 sample 11 AN11 sample 12 AN12 sample 13 AN13 sample 14 AN14 sample 15 AN15 sample 16
Buffer @ 2nd Interrupt AN0 sample 17 AN1 sample 18 AN2 sample 19 AN3 sample 20 AN4 sample 21 AN5 sample 22 AN6 sample 23 AN7 sample 24 AN8 sample 25 AN9 sample 26 AN10 sample 27 AN11 sample 28 AN12 sample 29 AN13 sample 30 AN14 sample 31 AN15 sample 32
DS70064D-page 17-34
17
Conversion Trigger ADCLK TCONV CONV CONV CONV T T T Input to CH0 Input to CH1 Input to CH2 Input to CH3 ASAM SAMP DONE ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUFC ADCBUFD ADCBUFE ADCBUFF ADIF AN4 AN0 AN1 AN2 AN5 AN0 AN1 AN2 TCONV CONV CONV CONV T T T AN6 AN0 AN1 AN2 AN7 AN0 AN1 AN2 TCONV CONV CONV CONV T T T AN4 AN0 AN1 AN2 TSAMP TSAMP TSAMP
DS70064D-page 17-35
CONTROL BITS Sequence Select SMPI<3:0> = 0011 Interrupt on 16th sample CHPS<1:0> = 1x Sample Channels CH0, CH1, CH2, CH3 SIMSAM = 1 Sample all channels simultaneously BUFM = 0 Single 16-word result buffer ALTS = 0 Always use MUX A input select MUX A Input Select CH0SA<3:0> = n/a Override by CSCNA CH0NA = 0 Select VREF- for CH0- input CSCNA = 1 Scan CH0+ Inputs CSSL<15:0> = 0000 0000 1111 0000 Scan AN4, AN5, AN6, AN7 CH123SA = 0 CH1+ = AN0, CH2+ = AN1, CH3+ = AN2 CH123NA<1:0> = 0x CH1-, CH2-, CH3- = VREFMUX B Input Select CH0SB<3:0> = n/a Channel CH0+ input unused CH0NB = n/a Channel CH0- input unused CH123SB = n/a Channel CH1, CH2, CH3 + input unused CH123NB<1:0> = n/a Channel CH1, CH2, CH3 input unused
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN4 sample 1 AN0 sample 1 AN1 sample 1 AN2 sample 1 AN5 sample 2 AN0 sample 2 AN1 sample 2 AN2 sample 2 AN6 sample 3 AN0 sample 3 AN1 sample 3 AN2 sample 3 AN7 sample 4 AN0 sample 4 AN1 sample 4 AN2 sample 4
Buffer @ 2nd Interrupt AN4 sample 5 AN0 sample 5 AN1 sample 5 AN2 sample 5 AN5 sample 6 AN0 sample 6 AN1 sample 6 AN2 sample 6 AN6 sample 7 AN0 sample 7 AN1 sample 7 AN2 sample 7 AN7 sample 8 AN0 sample 8 AN1 sample 8 AN2 sample 8
DS70064D-page 17-36
17
Conversion Trigger ADCLK TCONVTCONV CONV CONV T T Input to CH0 Input to CH1 Input to CH2 Input to CH3 SAMP BUFS ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADIF BSET ADCON1,#ASAM BCLR IFS0,#ADIF BCLR IFS0,#ADIF Instruction Execution AN3 AN0 AN1 AN2 AN3 AN0 AN1 AN2 TCONV CONV CONV CONV T T T AN3 AN0 AN1 AN2 TCONV CONV CONV CONV T T T TSAMP TSAMP TSAMP
DS70064D-page 17-37
CONTROL BITS Sequence Select SMPI<2:0> = 0000 Interrupt on each sample CHPS<1:0> = 1x Sample Channels CH1, CH2, CH3, CH0 SIMSAM = 1 Sample all channels simultaneously BUFM = 1 Dual 8-word result buffers ALTS = 0 Always use MUX A input select MUX A Input Select CH0SA<3:0> = 0011 Select AN3 for CH0+ input CH0NA = 0 Select VREF- for CH0- input CSCNA = 0 No input scan CSSL<15:0> = n/a Scan input select unused CH123SA = 0 CH1+ = AN0, CH2+ = AN1, CH3+ = AN2 CH123NA<1:0> = 0x CH1-, CH2-, CH3- = VREFMUX B Input Select CH0SB<3:0> = n/a Channel CH0+ input unused CH0NB = n/a Channel CH0- input unused CH123SB = n/a Channel CH1, CH2, CH3 + input unused CH123NB<1:0> = n/a Channel CH1, CH2, CH3 input unused
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN3 sample 1 AN0 sample 1 AN1 sample 1 AN2 sample 1
DS70064D-page 17-38
17
10-bit A/D Converter
Input to CH0 Input to CH1 ASAM SAMP DONE BUFS ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADIF
AN1 AN0
Cleared in software
Cleared by Software
DS70064D-page 17-39
CONTROL BITS Sequence Select SMPI<2:0> = 0011 Interrupt on 4th sample CHPS<1:0> = 01 Sample Channels CH0, CH1 SIMSAM = 1 Sample all channels simultaneously BUFM = 1 Dual 8-word result buffers ALTS = 1 Alternate MUX A/B input select MUX A Input Select CH0SA<3:0> = 0001 Select AN1 for CH0+ input CH0NA = 0 Select VREF- for CH0- input CSCNA = 0 No input scan CSSL<15:0> = n/a Scan input select unused CH123SA = 0 CH1+ = AN0, CH2+ = AN1, CH3+ = AN2 CH123NA<1:0> = 0x CH1-, CH2-, CH3- = VREFMUX B Input Select CH0SB<3:0> = 1111 Select AN15 for CH0+ input CH0NB = 0 Select VREF- for CH0- input CH123SB = 1 CH1+ = AN3, CH2+ = AN4, CH3+ = AN5 CH123NB<1:0> = 11 CH1- = AN9, CH2- = AN10, CH3- = AN11
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN1 sample 1 AN0 sample 1 AN15 sample 2 (AN3-AN9) sample 2 AN1 sample 3 AN0 sample 3 AN15 sample 4 (AN3-AN9) sample 4
AN1 sample 5 AN0 sample 5 AN15 sample 6 (AN3-AN9) sample 6 AN1 sample 7 AN0 sample 7 AN15 sample 8 (AN3-AN9) sample 8
DS70064D-page 17-40
17
10-bit A/D Converter
TSAMP
TSAMP
TSAMP
DS70064D-page 17-41
CONTROL BITS Sequence Select SMPI<2:0> = 0011 Interrupt on 4th sample CHPS<1:0> = 1x Sample Channels CH0, CH1, CH2, CH3 SIMSAM = 1 Sample all channels simultaneously BUFM = 0 Single 16-word result buffer ALTS = 1 Alternate MUX A/MUX B input select MUX A Input Select CH0SA<3:0> = 1101 Select AN13 for CH0+ input CH0NA = 1 Select AN1 for CH0- input CSCNA = 0 No input scan CSSL<15:0> = n/a Scan input select unused CH123SA = 0 CH1+ = AN0, CH2+ = AN1, CH3+ = AN2 CH123NA<1:0> = 0x CH1-, CH2-, CH3- = VREFMUX B Input Select CH0SB<3:0> = 1110 Select AN14 for CH0+ input CH0NB = 0 Select VREF- for CH0- input CH123SB = 1 CH1+ = AN3, CH2+ = AN4, CH3+ = AN5 CH123NB<1:0> = 10 CH1- = AN6, CH2- = AN7, CH3- = AN8
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt (AN13-AN1) sample 1 AN0 sample 1 AN1 sample 1 AN2 sample 1 AN14 sample 2 (AN3-AN6) sample 2 (AN4-AN7) sample 2 (AN5-AN8) sample 2 (AN13-AN1) sample 3 AN0 sample 3 AN1 sample 3 AN2 sample 3 AN14 sample 4 (AN3-AN6) sample 4 (AN4-AN7) sample 4 (AN5-AN8) sample 4
Buffer @ 2nd Interrupt (AN13-AN1) sample 5 AN0 sample 5 AN1 sample 5 AN2 sample 5 AN14 sample 6 (AN3-AN6) sample 6 (AN4-AN7) sample 6 (AN5-AN8) sample 6 (AN13-AN1) sample 7 AN0 sample 7 AN1 sample 7 AN2 sample 7 AN14 sample 8 (AN3-AN6) sample 8 (AN4-AN7) sample 8 (AN5-AN8) sample 8
DS70064D-page 17-42
17
10-bit A/D Converter
TSAMP
TCONV CONV CONV CONV T T T AN14 AN3-AN6 AN4-AN7 AN5-AN8 AN13-AN1 AN0 AN1 AN2
Input to CH0 Input to CH1 Input to CH2 Input to CH3 ASAM SAMP DONE ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUFC ADCBUFD ADCBUFE ADCBUFF ADIF
DS70064D-page 17-43
CONTROL BITS Sequence Select SMPI<2:0> = 1111 Interrupt on 16th sample CHPS<1:0> = 1x Sample Channels CH0, CH1, CH2, CH3 SIMSAM = 0 Sample all channels sequentially BUFM = 0 Single 16-word result buffer ALTS = 1 Alternate MUX A/B input select MUX A Input Select CH0SA<3:0> = 0110 Select AN6 for CH0+ input CH0NA = 0 Select VREF- for CH0- input CSCNA = 0 No input scan CSSL<15:0> = n/a Scan input select unused CH123SA = 0 CH1+ = AN0, CH2+ = AN1, CH3+ = AN2 CH123NA<1:0> = 0x CH1-, CH2-, CH3- = VREFMUX B Input Select CH0SB<3:0> = 0111 Select AN7 for CH0+ input CH0NB = 0 Select VREF- for CH0- input CH123SB = 1 CH1+ = AN3, CH2+ = AN4, CH3+ = AN5 CH123NB<1:0> = 0x CH1-, CH2-, CH3- = VREF-
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt (AN13-AN1) sample 1 AN0 sample 2 AN1 sample 3 AN2 sample 4 AN14 sample 5 (AN3-AN6) sample 6 (AN4-AN7) sample 7 (AN5-AN8) sample 8 (AN13-AN1) sample 9 AN0 sample 10 AN1 sample 11 AN2 sample 12 AN14 sample 13 (AN3-AN6) sample 14 (AN4-AN7) sample 15 (AN5-AN8) sample 16
Buffer @ 2nd Interrupt (AN13-AN1) sample 17 AN0 sample 18 AN1 sample 19 AN2 sample 20 AN14 sample 21 (AN3-AN6) sample 22 (AN4-AN7) sample 23 (AN5-AN8) sample 24 (AN13-AN1) sample 25 AN0 sample 26 AN1 sample 27 AN2 sample 28 AN14 sample 29 (AN3-AN6) sample 30 (AN4-AN7) sample 31 (AN5-AN8) sample 32
DS70064D-page 17-44
17
10-bit A/D Converter
Rs
ANx
VA
CPIN VT = 0.6V
I leakage 500 nA
Note: CPIN value depends on device package and is not tested. Effect of CPIN negligible if Rs 5 k.
DS70064D-page 17-45
Signed Integer
d09 d09 d09 d09 d09 d09 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
Fractional (1.15)
d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
DS70064D-page 17-46
17
10-bit A/D Converter
10 0000 0011 (= 515) 10 0000 0010 (= 514) 10 0000 0001 (= 513) 10 0000 0000 (= 512) 01 1111 1111 (= 511) 01 1111 1110 (= 510) 01 1111 1101 (= 509)
00 0000 0001 (= 1) 00 0000 0000 (= 0) VREFL VREFL + VREFH VREFL 1024 VREFL + 512*(VREFH VREFL) 1024 VREFL + 1023*(VREFH VREFL) 1024 (VINH VINL) VREFH
17.19
A/D Accuracy/Error
Refer to Section 17.27 Related Application Notesfor a list of documents that discuss A/D accuracy.
17.20
Connection Considerations
Since the analog inputs employ ESD protection, they have diodes to VDD and VSS. This requires that the analog input must be between VDD and VSS. If the input voltage exceeds this range by greater than 0.3V (either direction), one of the diodes becomes forward biased and it may damage the device if the input current specification is exceeded. An external RC filter is sometimes added for anti-aliasing of the input signal. The R component should be selected to ensure that the sampling time requirements are satisfied. Any external components connected (via high-impedance) to an analog input pin (capacitor, zener diode, etc.) should have very little leakage current at the pin.
DS70064D-page 17-47
CLR BCLR
ADCSSL IFS0,#ADIF
; Configure A/D interrupt priority bits (ADIP<2:0>) here, if ; required. (default priority level is 4) BSET BSET BSET CALL BCLR : : : IEC0,#ADIE ADCON1,#ADON ADCON1,#SAMP DELAY ADCON1,#SAMP ; Enable A/D conversion interrupt ; ; ; ; ; ; ; ; Turn on A/D Start sampling the input Ensure the correct sampling time has elapsed before starting conversion. End A/D Sampling and start Conversion The DONE bit is set by hardware when the convert sequence is finished The ADIF bit will be set.
DS70064D-page 17-48
17
10-bit A/D Converter
Up to 750 ksps(1)
95.24 ns
2 TAD
500
4.5V to 5.5V
-40C to +85C
VREF- VREF+
ANx S/H
CHX ADC
Up to 600 ksps(1)
138.89 ns
12 TAD
500
3.0V to 5.5V
-40C to +125C
ANx S/H CH0 S/H
VREF- VREF+
ADC
Up to 500 ksps
153.85 ns
1 TAD
5.0 k
4.5V to 5.5V
-40C to +125C
VREF- VREF+ or or AVSS AVDD
CHX ADC
Up to 300 ksps
256.41 ns
1 TAD
5.0 k
3.0V to 5.5V
-40C to +125C
VREF- VREF+ or or AVSS AVDD
CHX ADC
Note 1: External VREF- and VREF+ pins must be used for correct operation. See Figure 17-25 for recommended circuit.
DS70064D-page 17-49
80 79 78 77 76 75 74 73 72
VSS 69 68 67 66
65 64
VDD
1 2 3 4 5 6 7 8 9 10 VDD VSS VDD 13 14 15 16 17 18 19 VREF+ VREFAVDD AVSS 27 VDD R2 10 C2 0.1 F C1 0.01 F 20 21 22 VDD VSS
63 62 61 60 59 58 57 56 55 54 53 52 VSS 50 49 VDD 47 46 45 44 43 42 41 VDD C5 1 F VDD C4 0.1 F VDD C3 0.01 F VDD C8 1 F C7 0.1 F C6 0.01 F VDD VDD VDD 38 39 40
dsPIC30F6010
28
29
30
33
34
35
36
R1 10
VDD VDD
The configuration procedures below give the required setup values for the conversion speeds above 500 ksps.
17.22.1
17.22.1.1 Single Analog Input For conversions at 1 Msps for a single analog input, at least two sample and hold channels must be enabled. The analog input multiplexer must be configured so that the same input pin is connected to both sample and hold channels. The A/D converts the value held on one S/H channel, while the second S/H channel acquires a new input sample.
DS70064D-page 17-50
37
17
10-bit A/D Converter
by writing to the ADCS<5:0> control bits in the ADCON3 register. Configure the sampling time to be 2 TAD by writing: SAMC<4:0> = 00010. Select at least two channels per analog input pin by writing to the ADCHS register. The following figure shows the timing diagram of the A/D converting one input pin using two sample and holds. The TAD selection, in conjunction with the guidelines described above, allows a conversion speed of 1 Msps. See Example 17-8 for code example. Figure 17-26: Converting 1 Input Pin Using Two Channels at 1Msps, Auto-Sample Start, 12 TAD Sampling Time
ch0_samp ch1_samp
DS70064D-page 17-51
Converting 2 Channels, Auto-Sample Start, TAD Conversion Start, Sequential Sampling Code
// // // // // // // all PORTB = Digital; RB2 = analog SSRC bit = 111 implies internal counter ends sampling and starts converting. Connect RB2/AN2 as CH0 input and also connect to positive CH1 input. in this example RB2/AN2 is the input to two
0xFFFB; 0x00E0;
ADCHS = RB2/AN2
0x0002;
0; 0x0C04; 0x6104;
// // //
Sample time = 12Tad = 83.33 ns @ MIPS which will give 1 / (12 * 83.33 ns) = 1 Msps Select external VREF+ and VREF- pins, convert CH0 CH1, Interrupt after every 2 samples turn ADC ON repeat continuously // clear interrupt // conversion done? // save the ADC values repeat
17.22.2
by writing to the ADCS<5:0> control bits in the ADCON3 register. Configure the sampling time to be 2 TAD by writing: SAMC<4:0> = 00010. The following figure shows the timing diagram of the A/D running at 750 ksps. The TAD selection, in conjunctin with the guidelines described above, allows a conversion speed of 750 ksps. See Example 17-9 for code example.
DS70064D-page 17-52
SAMP DONE
17
10-bit A/D Converter
Example 17-9:
ADPCFG = ADCON1 =
Converting 1 Channel at 750 ksps, Auto-Sample Start, 2 TAD Sampling Time Code Example
0xFFFB; 0x00E0; // // // // // // // // // // // // all PORTB = Digital; RB2 = analog SSRC bit = 111 implies internal counter ends sampling and starts converting. Connect RB2/AN2 as CH0 input in this example RB2/AN2 is the input Sample time = 2Tad, Tad = 95.24 ns @ 21 MIPS which will give 1 / (14 * 95.24 ns) = 750 ksps Select external VREF+ and VREF- pins Interrupt after every 2 samples turn ADC ON repeat continuously
ADCHS
// clear value // initialize ADCBUF pointer // clear ADC interrupt flag // auto start sampling // for 31Tad then go to conversion while (!IFS0bits.ADIF); // conversion done? ADCON1bits.ASAM = 0; // yes then stop sample/convert for (count = 0; count <2; count++) // average the 2 ADC value ADCValue = ADCValue + *ADC16Ptr++; ADCValue = ADCValue >> 1; // repeat
17.22.3
17.22.3.1 Single Analog Input When performing conversions at 600 ksps for a single analog input, at least two sample and hold channels must be enabled. The analog input multiplexer must be configured so that the same input pin is connected to both sample and hold channels. The A/D converts the value held on one S/H channel, while the second S/H channel acquires a new input sample.
DS70064D-page 17-53
by writing to the ADCS<5:0> control bits in the ADCON3 register. Configure the sampling time to be 2 TAD by writing: SAMC<4:0> = 00010. Select at least two channels per analog input pin by writing to the ADCHS register. The timing diagram for the 600 ksps extended rate is the same as for the 1 Msps shown in Figure 17-10. See Example 17-10 for code example for 600 ksps A/D operation. Example 17-10: Converting 2 Channels, Auto-Sample Start, TAD Conversion Start, Sequential Samplling Code
ADPCFG = ADCON1 = 0xFFFB; 0x00E0; // // // // // // // channels. ADCSSL = ADCON3 = ADCON2 = and 0; 0x0C04; 0x6104; all PORTB = Digital; RB2 = analog SSRC bit = 111 implies internal counter ends sampling and starts converting. Connect RB2/AN2 as CH0 input and also connect to positive CH1 input. in this example RB2/AN2 is the input to two
ADCHS = RB2/AN2
0x0002;
// // //
Sample time = 12Tad = 138.89 ns @ 18 MIPS which will give 1 / (12 * 138.89 ns) = 600 ksps Select external VREF+ and VREF- pins, convert CH0 CH1, Interrupt after every 2 samples turn ADC ON repeat continuously // clear interrupt // conversion done? // save the ADC values repeat
DS70064D-page 17-54
17.23.1
17
10-bit A/D Converter
17.23.2
17.23.3
17.24
Effects of a Reset
A device Reset forces all registers to their Reset state. This forces the A/D module to be turned off, and any conversion in progress is aborted. All pins that are multiplexed with analog inputs will be configured as analog inputs. The corresponding TRIS bits will be set. The values in the ADCBUF registers are not initialized during a Power-on Reset. ADCBUF0...ADCBUFF will contain unknown data.
DS70064D-page 17-55
17.25
The following table lists dsPIC30F 10-bit A/D Converter Special Function registers, including their addresses and formats. All unimplemented registers and/or bits within a register read as zeros.
Table 17-10:
Bit 13 SI2CIF SI2CIE ADIP<2:0> ADC Data Buffer 0 ADC Data Buffer 1 ADC Data Buffer 2 ADC Data Buffer 3 ADC Data Buffer 4 ADC Data Buffer 5 ADC Data Buffer 6 ADC Data Buffer 7 ADC Data Buffer 8 ADC Data Buffer 9 ADC Data Buffer 10 ADC Data Buffer 11 ADC Data Buffer 12 ADC Data Buffer 13 ADC Data Buffer 14 ADC Data Buffer 15 ADSIDL OFFCAL SAMC[4:0] CH0NB CH0SB[3:0] CSCNA CHPS[1:0] CHXSB FORM[1:0] BUFS ADRC SSRC[2:0] CHXNA[1:0] CHXSA CH0NA PCFG4 PCFG3 SIMSAM SMPI[3:0] ADCS[5:0] CH0SA[3:0] PCFG2 PCFG1 ASAM SAMP BUFM CONV ALTS U1TXIP<2:0> U1RXIP<2:0> NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE SPI1IP<2:0> NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT4EP INT3EP INT2EP INT1EP INT0 OVATE OVBTE COVTE MATHERR ADDRERR STKERR OSCFAIL 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
DS70064D-page 17-56
INT0EP 0000 0000 0000 0000 0000 0000 0000 0000 INT0IE 0000 0000 0000 0000 0100 0100 0100 0100 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 PCFG0 0000 0000 0000 0000 0000 0000 0000 0000 ADC Input Scan Select Register
File Name
ADR
Bit 15
Bit 14
INTCON1
0080
NSTDIS
INTCON2
0082
ALTIVT
IFS0
0084
CNIF
MI2CIF
IEC0
008C
CNIE
MI2CIE
IPC2
0098
ADCBUF0
0280
ADCBUF1
0282
ADCBUF2
0284
ADCBUF3
0286
ADCBUF4
0288
ADCBUF5
028A
ADCBUF6
028C
ADCBUF7
028E
ADCBUF8
0290
ADCBUF9
0292
ADCBUFA
0294
ADCBUFB
0296
ADCBUFC
0298
ADCBUFD
029A
ADCBUFE
029C
ADCBUFF
029E
ADCON1
02A0
ADON
ADFRZ
ADCON2
02A2
VCFG[2:0]
ADCON3
02A4
ADCHS
02A6
CHXNB[1:0]
ADPCFG
02A8
PCFG15 PCFG14 PCFG13 PCFG12 PCFG11 PCFG10 PCFG9 PCFG8 PCFG7 PCFG6 PCFG5
ADCSSL Legend:
02AA u = unknown
Note:
All interrupt sources and their associated control bits may not be available on a particular device. Refer to the device data sheet for details.
17
10-bit A/D Converter
2.
3.
Question 2:
Answer: A good reference for understanding A/D conversions is the Analog-Digital Conversion Handbook third edition, published by Prentice Hall (ISBN 0-13-03-2848-0). Question 3: My combination of channels/sample and samples/interrupt is greater than the size of the buffer. What will happen to the buffer?
Answer: This configuration is not recommended. The buffer will contain unknown results.
DS70064D-page 17-57
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70064D-page 17-58
Revision B
To reflect editorial and technical content revisions for the dsPIC30F 10-bit A/D Converter module.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
This revision includes the extended conversion rate guidelines.
17
10-bit A/D Converter
DS70064D-page 17-59
DS70064D-page 17-60
18
12-bit A/D Converter
DS70065D-page 18-1
A block diagram of the 12-bit A/D is shown in Figure 18-1. The 12-bit A/D converter can have up to 16 analog input pins, designated AN0-AN15. In addition, there are two analog input pins for external voltage reference connections. These voltage reference inputs may be shared with other analog input pins. The actual number of analog input pins and external voltage reference input configuration will depend on the specific dsPIC30F device. Refer to the dsPIC30F device data sheets (DS70082 and DS70083) for further details. The analog inputs are connected via multiplexers to the S/H amplifier, designated CH0. The analog input multiplexer can be switched between two sets of analog inputs during conversions. Unipolar differential conversions are possible using certain input pins (see Figure 18-1). An Analog Input Scan mode may be enabled for the CH0 S/H amplifier. A Control register specifies which analog input channels will be included in the scanning sequence. The 12-bit A/D is connected to a 16-word result buffer. Each 12-bit result is converted to one of four 16-bit output formats when it is read from the buffer.
DS70065D-page 18-2
AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7 AN8 AN9 AN10 AN11 AN12 AN13 AN14 AN15
Data Format
Bus Interface
18
Input MUX Control
DS70065D-page 18-3
The ADCON1, ADCON2 and ADCON3 registers control the operation of the A/D module. The ADCHS register selects the input pins to be connected to the S/H amplifiers. The ADPCFG register configures the analog input pins as analog inputs or as digital I/O. The ADCSSL register selects inputs to be sequentially scanned.
18.3
DS70065D-page 18-4
R/W-0
U-0
U-0
R/W-0 ASAM
ADON: A/D Operating Mode bit 1 = A/D converter module is operating 0 = A/D converter is off Unimplemented: Read as 0 ADSIDL: Stop in Idle Mode bit 1 = Discontinue module operation when device enters Idle mode 0 = Continue module operation in Idle mode FORM<1:0>: Data Output Format bits 11 = Signed fractional (DOUT = sddd dddd dddd 0000) 10 = Fractional (DOUT = dddd dddd dddd 0000) 01 = Signed integer (DOUT = ssss sddd dddd dddd) 00 = Integer (DOUT = 0000 dddd dddd dddd) SSRC<2:0>: Conversion Trigger Source Select bits 111 = Internal counter ends sampling and starts conversion (auto convert) 110 = Reserved 101 = Reserved 100 = Reserved 011 = Motor Control PWM interval ends sampling and starts conversion 010 = General purpose Timer3 compare ends sampling and starts conversion 001 = Active transition on INT0 pin ends sampling and starts conversion 000 = Clearing SAMP bit ends sampling and starts conversion Unimplemented: Read as 0 ASAM: A/D Sample Auto-Start bit 1 = Sampling begins immediately after last conversion completes. SAMP bit is auto set. 0 = Sampling begins when SAMP bit set SAMP: A/D Sample Enable bit 1 = At least one A/D sample/hold amplifier is sampling 0 = A/D sample/hold amplifiers are holding When ASAM = 0, writing 1 to this bit will start sampling. When SSRC = 000, writing 0 to this bit will end sampling and start conversion. DONE: A/D Conversion Status bit 1 = A/D conversion is done 0 = A/D conversion is not done Clearing this bit will not effect any operation in progress. Cleared by software or start of a new conversion. Legend: R = Readable bit HC = Hardware clear -n = Value at POR W = Writable bit HS = Hardware set 1 = Bit is set C = Clearable by software U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 14 bit 13
18
12-bit A/D Converter
bit 7-5
bit 1
bit 0
DS70065D-page 18-5
U-0
R/W-0
R/W-0
R/W-0 BUFM
A/D VREFL AVSS AVSS External VREF- pin External VREF- pin AVSS
Reserved: User should write 0 to this location Unimplemented: Read as 0 CSCNA: Scan Input Selections for CH0+ S/H Input for MUX A Input Multiplexer Setting bit 1 = Scan inputs 0 = Do not scan inputs Unimplemented: Read as 0 BUFS: Buffer Fill Status bit Only valid when BUFM = 1 (ADRES split into 2 x 8-word buffers) 1 = A/D is currently filling buffer 0x8-0xF, user should access data in 0x0-0x7 0 = A/D is currently filling buffer 0x0-0x7, user should access data in 0x8-0xF Unimplemented: Read as 0 SMPI<3:0>: Sample/Convert Sequences Per Interrupt Selection bits 1111 = Interrupts at the completion of conversion for each 16th sample/convert sequence 1110 = Interrupts at the completion of conversion for each 15th sample/convert sequence ..... 0001 = Interrupts at the completion of conversion for each 2nd sample/convert sequence 0000 = Interrupts at the completion of conversion for each sample/convert sequence BUFM: Buffer Mode Select bit 1 = Buffer configured as two 8-word buffers ADCBUF(15...8), ADCBUF(7...0) 0 = Buffer configured as one 16-word buffer ADCBUF(15...0) ALTS: Alternate Input Sample Mode Select bit 1 = Uses MUX A input multiplexer settings for first sample, then alternate between MUX B and MUX A input multiplexer settings for all subsequent samples 0 = Always use MUX A input multiplexer settings Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 1
bit 0
DS70065D-page 18-6
U-0
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
bit 15-13 Unimplemented: Read as 0 bit 12-8 SAMC<4:0>: Auto Sample Time bits 11111 = 31 TAD 00001 = 1 TAD 00000 = 0 TAD ADRC: A/D Conversion Clock Source bit 1 = A/D internal RC clock 0 = Clock derived from system clock Unimplemented: Read as 0 ADCS<5:0>: A/D Conversion Clock Select bits 111111 = TCY/2 (ADCS<5:0> + 1) = 32 TCY 000001 = TCY/2 (ADCS<5:0> + 1) = TCY 000000 = TCY/2 (ADCS<5:0> + 1) = TCY/2 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 7
18
12-bit A/D Converter
DS70065D-page 18-7
U-0
U-0
R/W-0 CH0NA
R/W-0
R/W-0 bit 0
bit 15-13 Unimplemented: Read as 0 bit 12 bit 11-8 bit 7-5 bit 4 CH0NB: Channel 0 Negative Input Select for MUX B Multiplexer Setting bit Same definition as bit <4> (see Note). CH0SB<3:0>: Channel 0 Positive Input Select for MUX B Multiplexer Setting bit Same definition as bits <3:0> (see Note). Unimplemented: Read as 0 CH0NA: Channel 0 Negative Input Select for MUX A Multiplexer Setting bit 1 = Channel 0 negative input is AN1 0 = Channel 0 negative input is VREFCH0SA<3:0>: Channel 0 Positive Input Select for MUX A Multiplexer Setting bit 1111 = Channel 0 positive input is AN15 1110 = Channel 0 positive input is AN14 1101 = Channel 0 positive input is AN13 0001 = Channel 0 positive input is AN1 0000 = Channel 0 positive input is AN0 Note: The analog input multiplexer supports two input setting configurations, denoted MUX A and MUX B. ADCHS<15:8> determines the settings for MUX B, and ADCHS<7:0> determines the settings for MUX A. Both sets of control bits function identically.
bit 3-0
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70065D-page 18-8
R/W-0 PCFG5
R/W-0 PCFG4
R/W-0 PCFG3
R/W-0 PCFG2
R/W-0 PCFG1
PCFG<15:0>: Analog Input Pin Configuration Control bits 1 = Analog input pin in Digital mode, port read input enabled, A/D input multiplexer input connected to AVSS 0 = Analog input pin in Analog mode, port read input disabled, A/D samples pin voltage Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
Register 18-6:
ADCSSL: A/D Input Scan Select Register R/W-0 CSSL13 R/W-0 CSSL12 R/W-0 CSSL11 R/W-0 CSSL10 R/W-0 CSSL9 R/W-0 CSSL8 bit 8
18
12-bit A/D Converter
R/W-0 CSSL5
R/W-0 CSSL4
R/W-0 CSSL3
R/W-0 CSSL2
R/W-0 CSSL1
CSSL<15:0>: A/D Input Pin Scan Selection bits 1 = Select ANx for input scan 0 = Skip ANx for input scan Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70065D-page 18-9
A/D conversion complete, result is loaded into A/D result buffer. Optionally generate interrupt.
S/H amplifier is disconnected from input and holds signal lever. A/D conversion is started by the conversion trigger source. S/H amplifier is connected to the analog input pin for sampling.
DS70065D-page 18-10
18.5
18
12-bit A/D Converter
2.
The options for each configuration step are described in the subsequent sections. Note: The SSRC<2:0>, SIMSAM, ASAM, CHPS<1:0>, SMPI<3:0>, BUFM and ALTS bits, as well as the ADCON3 and ADCSSL registers, should not be written to while ADON = 1. This would lead to indeterminate results.
18.6
DS70065D-page 18-11
18.8
18.8.1
DS70065D-page 18-12
18
12-bit A/D Converter
The ADCSSL bits only specify the input of the positive input of the channel. The CH0NA bit still selects the input of the negative input of the channel during scanning. If the ALTS bit is 1, the scanning only applies to the MUX A input selection. The MUX B input selection, as specified by the CH0SB<3:0>, will still select the alternating input. When the input selections are programmed in this manner, the input will alternate between a set of scanning inputs specified by the ADCSSL register and a fixed input specified by the CH0SB bits.
DS70065D-page 18-13
18.10 18.10.1
18.10.2
Automatic
Setting the ASAM bit (ADCON1<2>) causes the A/D to automatically begin sampling a channel whenever a conversion is not active on that channel. One of several options can be used to end sampling and complete the conversions. Sampling on a channel resumes after the conversion of that channel completes. For an example, see Figure 18-4.
18.11
Note:
18.11.1
Manual
When SSRC<2:0> = 000, the conversion trigger is under software control. Clearing the SAMP bit (ADCON1<1>) starts the conversion sequence. Figure 18-3 is an example where setting the SAMP bit initiates sampling and clearing the SAMP bit, terminates sampling and starts conversion. The user software must time the setting and clearing of the SAMP bit to ensure adequate sampling time of the input signal.
Figure 18-3:
DS70065D-page 18-14
Example 18-1:
Converting 1 Channel, Manual Sample Start, Manual Conversion Start Code Example
// // // // // all PORTB = Digital; RB2 = analog SAMP bit = 0 ends sampling ... and starts converting Connect RB2/AN2 as CH0 input .. in this example RB2/AN2 is the input
ADCSSL = 0; ADCON3 = 0x0002; ADCON2 = 0; ADCON1bits.ADON = 1; while (1) { ADCON1bits.SAMP = 1; DelayNmSec(100); ADCON1bits.SAMP = 0; while (!ADCON1bits.DONE); ADCValue = ADCBUF0; }
// turn ADC ON // repeat continuously // // // // // // start sampling ... for 100 mS start Converting conversion done? yes then get ADC value repeat
Figure 18-4 is an example where setting the ASAM bit initiates automatic sampling and clearing the SAMP bit, terminates sampling and starts conversion. After the conversion completes, the module will automatically return to a sampling state. The SAMP bit is automatically set at the start of the sample interval. The user software must time the clearing of the SAMP bit to ensure adequate sampling time of the input signal, understanding that the time between clearing of the SAMP bit includes the conversion time, as well as the sampling time. Figure 18-4:
ADCLK TSAMP TAD0 SAMP ADCBUF0 BSET ADCON1,ASAM BCF ADCON1,SAMP BCLR ADCON1,SAMP Instruction Execution TCONV TAD0 TSAMP TCONV
18
12-bit A/D Converter
DS70065D-page 18-15
TSMP = SAMC<4:0>*TAD
SAMC must always be programmed for at least 1 clock cycle to ensure sampling requirements are met. Figure 18-5 shows how to use the clocked conversion trigger with the sampling started by the user software. Figure 18-5: Converting 1 Channel, Manual Sample Start, TAD Based Conversion Start
Example 18-2:
Converting 1 Channel, Manual Sample Start, TAD Based Conversion Start Code Example // // // // // // all PORTB = Digital; RB12 = analog SSRC bit = 111 implies internal counter ends sampling and starts converting. Connect RB12/AN12 as CH0 input .. in this example RB12/AN12 is the input
ADCHS = 0x000C; ADCSSL = 0; ADCON3 = 0x1F02; Tcy ADCON2 = 0; ADCON1bits.ADON = 1; while (1) { ADCON1bits.SAMP = 1;
// turn ADC ON // repeat continuously start sampling then ... after 31Tad go to conversion conversion done? yes then get ADC value repeat// repeat
DS70065D-page 18-16
Figure 18-6:
SAMP DONE ADCBUF0 ADCBUF1 Instruction Execution BSET ADCON1,ASAM Reset by software
18
18.11.2.2 Sample Time Considerations Using Clocked Conversion Trigger and Automatic Sampling The user must ensure the sampling time exceeds the sampling requirements as outlined in Section 18.15 A/D Sampling Requirements. Assuming that the module is set for automatic sampling and using a clocked conversion trigger, the sampling interval is specified by the SAMC bits.
18.11.3
18.11.3.1 External INT Pin Trigger When SSRC<2:0> = 001, the A/D conversion is triggered by an active transition on the INT0 pin. The INT0 pin may be programmed for either a rising edge input or a falling edge input. 18.11.3.2 General Purpose Timer Compare Trigger The A/D is configured in this Trigger mode by setting SSRC<2:0> = 010. When a match occurs between the 32-bit timer TMR3/TMR2 and the 32-bit Combined Period register PR3/PR2, a special ADC trigger event signal is generated by Timer3. This feature does not exist for the TMR5/TMR4 timer pair. Refer to Section 12. Timers for more details. 18.11.3.3 Motor Control PWM Trigger The PWM module has an event trigger that allows A/D conversions to be synchronized to the PWM time base. When SSRC<2:0> = 011, the A/D sampling and conversion times occur at any user programmable point within the PWM period. The special event trigger allows the user to minimize the delay between the time when A/D conversion results are acquired and the time when the duty cycle value is updated. Refer to Section 15. Motor Control PWM for more details.
DS70065D-page 18-17
Figure 18-8:
Reset by software
18.11.3.5 Sample Time Considerations for Automatic Sampling/Conversion Sequences Different sample/conversion sequences provide different available sampling times for the S/H channel to acquire the analog signal. The user must ensure the sampling time exceeds the sampling requirements, as outlined in Section 18.15 A/D Sampling Requirements. Assuming that the module is set for automatic sampling and an external trigger pulse is used as the conversion trigger, the sampling interval is a portion of the trigger pulse interval. The sampling time is the trigger pulse period, less the time required to complete the conversion. Equation 18-3: TSMP TSMP = = Available Sampling Time, Sequential Sampling
DS70065D-page 18-18
18.12.1
18.12.2
18.12.3
Aborting Sampling
Clearing the SAMP bit while in Manual Sampling mode will terminate sampling, but may also start a conversion if SSRC = 000. Clearing the ASAM bit while in Automatic Sampling mode will not terminate an on going sample/convert sequence, however, sampling will not automatically resume after a subsequent conversion.
18
12-bit A/D Converter
18.12.4
Aborting a Conversion
Clearing the ADON bit during a conversion will abort the current conversion. The A/D Result register pair will NOT be updated with the partially completed A/D conversion sample. That is, the corresponding ADCBUF buffer location will continue to contain the value of the last completed conversion (or the last value written to the buffer).
18.13
DS70065D-page 18-19
18.13.2
18.13.3
18.13.4
DS70065D-page 18-20
18.14.1
Figure 18-9:
Conversion Trigger
TSAMP TCONV
TSAMP TCONV
TSAMP TCONV
AN0
AN0
AN0
AN0
18
12-bit A/D Converter
DS70065D-page 18-21
ADCHS = 0x0002; ADCSSL = 0; ADCON3 = 0x0F00; ADCON2 = 0x003C; ADCON1bits.ADON = 1; while (1) { ADCValue = 0; ADC16Ptr = &ADCBUF0; IFS0bits.ADIF = 0; ADCON1bits.ASAM = 1;
// Sample time = 15Tad, Tad = internal Tcy/2 // Interrupt after every 16 samples // turn ADC ON // repeat continuously
// clear value // initialize ADCBUF pointer // clear ADC interrupt flag // auto start sampling // for 31Tad then go to conversion while (!IFS0bits.ADIF); // conversion done? ADCON1bits.ASAM = 0; // yes then stop sample/convert for (count = 0; count < 16; count++) // average the 16 ADC value ADCValue = ADCValue + *ADC16Ptr++; ADCValue = ADCValue >> 4; } // repeat
DS70065D-page 18-22
CONTROL BITS Sequence Select SMPI<2:0> = 1111 Interrupt on 16th sample BUFM = 0 Single 16-word result buffer ALTS = 0 Always use MUX A input select MUX A Input Select CH0SA<3:0> = 0000 Select AN0 for CH0+ input CH0NA = 0 Select VREF- for CH0- input CSCNA = 0 No input scan CSSL<15:0> = n/a Scan input select unused MUX B Input Select CH0SB<3:0> = n/a Channel CH0+ input unused CH0NB = n/a Channel CH0- input unused
18
12-bit A/D Converter
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN0 sample 1 AN0 sample 2 AN0 sample 3 AN0 sample 4 AN0 sample 5 AN0 sample 6 AN0 sample 7 AN0 sample 8 AN0 sample 9 AN0 sample 10 AN0 sample 11 AN0 sample 12 AN0 sample 13 AN0 sample 14 AN0 sample 15 AN0 sample 16
Buffer @ 2nd Interrupt AN0 sample 17 AN0 sample 18 AN0 sample 19 AN0 sample 20 AN0 sample 21 AN0 sample 22 AN0 sample 23 AN0 sample 24 AN0 sample 25 AN0 sample 26 AN0 sample 27 AN0 sample 28 AN0 sample 29 AN0 sample 30 AN0 sample 31 AN0 sample 32
DS70065D-page 18-23
TSAMP TCONV
TSAMP TCONV
TSAMP TCONV
TSAMP TCONV
Input to CH0 ASAM SAMP DONE ADCBUF0 ADCBUF1 ADCBUFE ADCBUFF ADIF BSET ADCON1,#ASAM
AN0
AN1
AN14
AN15
Instruction Execution
DS70065D-page 18-24
CONTROL BITS Sequence Select SMPI<2:0> = 1111 Interrupt on 16th sample BUFM = 0 Single 16-word result buffer ALTS = 0 Always use MUX A input select MUX A Input Select CH0SA<3:0> = n/a Override by CSCNA CH0NA = 0 Select VREF- for CH0- input CSCNA = 1 Scan CH0+ Inputs CSSL<15:0> = 1111 1111 1111 1111 Scan all inputs MUX B Input Select CH0SB<3:0> = n/a Channel CH0+ input unused CH0NB = n/a Channel CH0- input unused
18
12-bit A/D Converter
Buffer Address ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC ADCBUFD ADCBUFE ADCBUFF
Buffer @ 1st Interrupt AN0 sample 1 AN1 sample 2 AN2 sample 3 AN3 sample 4 AN4 sample 5 AN5 sample 6 AN6 sample 7 AN7 sample 8 AN8 sample 9 AN9 sample 10 AN10 sample 11 AN11 sample 12 AN12 sample 13 AN13 sample 14 AN14 sample 15 AN15 sample 16
Buffer @ 2nd Interrupt AN0 sample 17 AN1 sample 18 AN2 sample 19 AN3 sample 20 AN4 sample 21 AN5 sample 22 AN6 sample 23 AN7 sample 24 AN8 sample 25 AN9 sample 26 AN10 sample 27 AN11 sample 28 AN12 sample 29 AN13 sample 30 AN14 sample 31 AN15 sample 32
DS70065D-page 18-25
18.14.4
18.15
Rs
ANx
VA
CPIN VT = 0.6V
I leakage 500 nA
Note: CPIN value depends on device package and is not tested. Effect of CPIN negligible if Rs 2.5 k.
DS70065D-page 18-26
Signed Integer
d11 d11 d11 d11 d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
Fractional
d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
18
Signed Fractional (1.15) d11 d10 d09 d08 d07 d04 d03 d02 d01 d00 d01 d00 0 0 0 0
Table 18-3:
VIN/VREF 4095/4096 4094/4096
0000 1000 0000 0001 = 2049 0000 1000 0000 0000 = 2048 0000 0111 1111 1111 = 2047
0000 0000 0000 0001 = 1 0000 0000 0000 0000 = 0 1111 1111 1111 1111 = -1
1000 0000 0001 0000 = 0.5002 1000 0000 0000 0000 = 0.500 0111 1111 1111 0000 = 0.4998
0000 0000 0001 0000 = 0.0005 0000 0000 0000 0000 = 0.000 1111 1111 1111 0000 = -0.0005
1/4096 0/4096
1111 1000 0000 0001 = -2047 1111 1000 0000 0000 = -2048
0000 0000 0001 0000 = 0.0002 0000 0000 0000 0000 = 0.000
1000 0000 0001 0000 = -0.9995 1000 0000 0000 0000 = -1.000
DS70065D-page 18-27
1000 0000 0011 (= 2051) 1000 0000 0010 (= 2050) 1000 0000 0001 (= 2049) 1000 0000 0000 (= 2048) 0111 1111 1111 (= 2047) 0111 1111 1110 (= 2046) 0111 1111 1101 (= 2045)
0000 0000 0001 (= 1) 0000 0000 0000 (= 0) VREFL VREFH VREFL VREFL + 4096 VREFL + 2048*(VREFH VREFL) 4096 (VINH VINL) VREFH
18.18
A/D Accuracy/Error
Refer to Section 18.26 Related Application Notes for a list of documents that discuss A/D accuracy.
18.19
Connection Considerations
Since the analog inputs employ ESD protection, they have diodes to VDD and VSS. This requires that the analog input must be between VDD and VSS. If the input voltage exceeds this range by greater than 0.3V (either direction), one of the diodes becomes forward biased and it may damage the device if the input current specification is exceeded. An external RC filter is sometimes added for anti-aliasing of the input signal. The R component should be selected to ensure that the sampling time requirements are satisfied. Any external components connected (via high-impedance) to an analog input pin (capacitor, zener diode, etc.) should have very little leakage current at the pin.
DS70065D-page 18-28
CLR
ADCON2
18
12-bit A/D Converter
CLR CLR
ADCON3 ADCHS
; Configure A/D conversion clock ; Configure input channels, ; CH0+ input is AN0. ; CHO- input is VREFL (AVss) ; No inputs are scanned. ; Clear A/D conversion interrupt flag
CLR BCLR
ADCSSL IFS0,#ADIF
; Configure A/D interrupt priority bits (ADIP<2:0>) here, if ; required. (default priority level is 4) BSET BSET BSET CALL BCLR : : IEC0,#ADIE ADCON1,#ADON ADCON1,#SAMP DELAY ADCON1,#SAMP ; Enable A/D conversion interrupt ; ; ; ; ; ; Turn on A/D Start sampling the input Ensure the correct sampling time has elapsed before starting conversion. End A/D Sampling and start Conversion The DONE bit is set by hardware when conversion sequence is complete. ; The ADIF bit will be set.
DS70065D-page 18-29
TABLE 18-4:
Rs Max 2.5 k
ANx S/H
CHX ADC
Up to 100 ksps
666.67 ns
1 TAD
2.5 k
3.0V to 5.5V
-40C to +125C
VREF- VREF+ or or AVSS AVDD
CHX ADC
Note 1: External VREF- and VREF+ pins must be used for correct operation. See Figure 18-14 for recommended circuit.
DS70065D-page 18-30
80 79 78 77 76 75 74 73 72
VSS 69 68 67 66
65 64
VDD
1 2 3 4 5 6 7 8 9 10 VDD VSS VDD 13 14 15 16 17 18 19 VREF+ VREFAVDD AVSS 27 VDD R2 10 C2 0.1 F C1 0.01 F 20 21 22 VDD VSS
63 62 61 60 59 58 57 56 55 54 53 52 VSS 50 49 VDD 47 46 45 44 43 42 41 VDD C5 1 F VDD C4 0.1 F VDD C3 0.01 F VDD C8 1 F C7 0.1 F C6 0.01 F VDD VDD VDD
dsPIC30F6014
18
12-bit A/D Converter
28
29
30
33
34
35
36
37
38
39
R1 10
VDD VDD
The configuration procedures below give the required setup values for the conversion speeds above 100 ksps.
18.21.1
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.
40
DS70065D-page 18-31
SAMP DONE
Example 18-1:
ADPCFG = ADCON1 =
Converting at 200 ksps, Auto-Sample Start, 1 TAD Sampling Time Code Example
// // // // // // // // // // // // all PORTB = Digital; RB2 = analog SSRC bit = 111 implies internal counter ends sampling and starts converting. Connect RB2/AN2 as CH0 input in this example RB2/AN2 is the input Sample time = 1Tad, Tad = 333.33 ns @ 30 MIPS which will give 1 / (15 * 333.33 ns) = 200 ksps Select external VREF+ and VREF- pins Interrupt after every 2 samples turn ADC ON repeat continuously clear value initialize ADCBUF pointer clear ADC interrupt flag auto start sampling for 31Tad then go to conversion conversion done? yes then stop sample/convert average the 2 ADC value
0xFFFB; 0x00E0;
ADCHS
// // // // // while (!IFS0bits.ADIF); // ADCON1bits.ASAM = 0; // for (count = 0; count <2; count++)// ADCValue = ADCValue + *ADC16Ptr++; ADCValue = ADCValue >> 1; } //
repeat
DS70065D-page 18-32
18.22.1
18.22.2
18
12-bit A/D Converter
18.22.3
18.23
Effects of a Reset
A device Reset forces all registers to their Reset state. This forces the A/D module to be turned off, and any conversion in progress is aborted. All pins that are multiplexed with analog inputs will be configured as analog inputs. The corresponding TRIS bits will be set. The values in the ADCBUF registers are not initialized during a Power-on Reset. ADCBUF0...ADCBUFF will contain unknown data.
DS70065D-page 18-33
18.24
The following table lists dsPIC30F 12-bit A/D Converter Special Function Registers, including their addresses and formats. All unimplemented registers and/or bits within a register read as zeros.
Table 18-4:
Bit 13 SI2CIF SI2CIE ADIP<2:0> ADC Data Buffer 0 ADC Data Buffer 1 ADC Data Buffer 2 ADC Data Buffer 3 ADC Data Buffer 4 ADC Data Buffer 5 ADC Data Buffer 6 ADC Data Buffer 7 ADC Data Buffer 8 ADC Data Buffer 9 ADC Data Buffer 10 ADC Data Buffer 11 ADC Data Buffer 12 ADC Data Buffer 13 ADC Data Buffer 14 ADC Data Buffer 15 ADSIDL CH0NB CH0SB[3:0] SAMC[4:0] CSCNA FORM[1:0] BUFS ADRC SSRC[2:0] CH0NA PCFG4 ADC Input Scan Select Register PCFG3 SMPI[3:0] ADCS[5:0] CH0SA[3:0] PCFG2 PCFG1 ASAM SAMP BUFM CONV ALTS U1TXIP<2:0> U1RXIP<2:0> NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE SPI1IP<2:0> NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT4EP INT3EP INT2EP INT1EP OVATE OVBTE COVTE MATHERR ADDRERR STKERR OSCFAIL 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
DS70065D-page 18-34
INT0
File Name
ADR
Bit 15
Bit 14
INTCON1
0080
NSTDIS
INTCON2
0082
ALTIVT
INT0EP 0000 0000 0000 0000 0000 0000 0000 0000 INT0IE 0000 0000 0000 0000 0100 0100 0100 0100 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 PCFG0 0000 0000 0000 0000 0000 0000 0000 0000
IFS0
0084
CNIF
MI2CIF
IEC0
008C
CNIE
MI2CIE
IPC2
0098
ADCBUF0
0280
ADCBUF1
0282
ADCBUF2
0284
ADCBUF3
0286
ADCBUF4
0288
ADCBUF5
028A
ADCBUF6
028C
ADCBUF7
028E
ADCBUF8
0290
ADCBUF9
0292
ADCBUFA
0294
ADCBUFB
0296
ADCBUFC
0298
ADCBUFD
029A
ADCBUFE
029C
ADCBUFF
029E
ADCON1
02A0
ADON
ADCON2
02A2
VCFG[2:0]
ADCON3
02A4
ADCHS
02A6
ADPCFG
02A8
PCFG15 PCFG14 PCFG13 PCFG12 PCFG11 PCFG10 PCFG9 PCFG8 PCFG7 PCFG6 PCFG5
ADCSSL
02AA
Legend:
u = unknown
Note:
All interrupt sources and their associated control bits may not be available on a particular device. Refer to the device data sheet for details.
2.
3.
Question 2:
Answer: A good reference for understanding A/D conversions is the Analog-Digital Conversion Handbook third edition, published by Prentice Hall (ISBN 0-13-03-2848-0). Question 3: My combination of channels/sample and samples/interrupt is greater than the size of the buffer. What will happen to the buffer?
18
12-bit A/D Converter
Answer: This configuration is not recommended. The buffer will contain unknown results.
DS70065D-page 18-35
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70065D-page 18-36
Revision B
To reflect editorial and technical content revisions for the dsPIC30F 12-bit A/D Converter module.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
This revision includes the extended conversion rate guidelines.
18
12-bit A/D Converter
DS70065D-page 18-37
DS70065D-page 18-38
19
UART
DS70066C-page 19-1
A simplified block diagram of the UART is shown in Figure 19-1. The UART module consists of the key important hardware elements: Baud Rate Generator Asynchronous Transmitter Asynchronous Receiver Figure 19-1: UART Simplified Block Diagram
UART Receiver
UxRX
UART Transmitter
UxTX
DS70066C-page 19-2
R/W-0 ABAUD
U-0
U-0
UARTEN: UART Enable bit 1 = UART is enabled. UART pins are controlled by UART as defined by UEN<1:0> and UTXEN control bits. 0 = UART is disabled. UART pins are controlled by corresponding PORT, LAT, and TRIS bits. Unimplemented: Read as 0 USIDL: Stop in Idle Mode bit 1 = Discontinue operation when device enters Idle mode 0 = Continue operation in Idle mode Unimplemented: Read as 0 Reserved: Write 0 to this location ALTIO: UART Alternate I/O Selection bit 1 = UART communicates using UxATX and UxARX I/O pins 0 = UART communicates using UxTX and UxRX I/O pins Note: The alternate UART I/O pins are not available on all devices. See device data sheet for details. Reserved: Write 0 to these locations WAKE: Enable Wake-up on Start bit Detect During Sleep Mode bit 1 = Wake-up enabled 0 = Wake-up disabled LPBACK: UART Loopback Mode Select bit 1 = Enable Loopback mode 0 = Loopback mode is disabled ABAUD: Auto Baud Enable bit 1 = Input to Capture module from UxRX pin 0 = Input to Capture module from ICx pin Unimplemented: Read as 0 PDSEL<1:0>: Parity and Data Selection bits 11 = 9-bit data, no parity 10 = 8-bit data, odd parity 01 = 8-bit data, even parity 00 = 8-bit data, no parity STSEL: Stop Selection bit 1 = 2 Stop bits 0 = 1 Stop bit Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 14 bit 13
bit 6
bit 5
19
UART
bit 0
DS70066C-page 19-3
R/W-0 ADDEN
R-1 RIDLE
R-0 PERR
R-0 FERR
R/C-0 OERR
UTXISEL: Transmission Interrupt Mode Selection bit 1 = Interrupt when a character is transferred to the Transmit Shift register and as result, the transmit buffer becomes empty 0 = Interrupt when a character is transferred to the Transmit Shift register (this implies that there is at least one character open in the transmit buffer) UTXBRK: Transmit Break bit 1 = UxTX pin is driven low, regardless of transmitter state 0 = UxTX pin operates normally UTXEN: Transmit Enable bit 1 = UART transmitter enabled, UxTX pin controlled by UART (if UARTEN = 1) 0 = UART transmitter disabled, any pending transmission is aborted and buffer is reset. UxTX pin controlled by PORT. UTXBF: Transmit Buffer Full Status bit (Read Only) 1 = Transmit buffer is full 0 = Transmit buffer is not full, at least one more data word can be written TRMT: Transmit Shift Register is Empty bit (Read Only) 1 = Transmit shift register is empty and transmit buffer is empty (the last transmission has completed) 0 = Transmit shift register is not empty, a transmission is in progress or queued in the transmit buffer URXISEL<1:0>: Receive Interrupt Mode Selection bit 11 =Interrupt flag bit is set when Receive Buffer is full (i.e., has 4 data characters) 10 =Interrupt flag bit is set when Receive Buffer is 3/4 full (i.e., has 3 data characters) 0x =Interrupt flag bit is set when a character is received ADDEN: Address Character Detect (bit 8 of received data = 1) 1 = Address Detect mode enabled. If 9-bit mode is not selected, this control bit has no effect. 0 = Address Detect mode disabled RIDLE: Receiver Idle bit (Read Only) 1 = Receiver is Idle 0 = Data is being received PERR: Parity Error Status bit (Read Only) 1 = Parity error has been detected for the current character 0 = Parity error has not been detected FERR: Framing Error Status bit (Read Only) 1 = Framing Error has been detected for the current character 0 = Framing Error has not been detected
bit 10
bit 9
bit 8
bit 7-6
bit 5
bit 4
bit 3
bit 2
DS70066C-page 19-4
OERR: Receive Buffer Overrun Error Status bit (Read/Clear Only) 1 = Receive buffer has overflowed 0 = Receive buffer has not overflowed URXDA: Receive Buffer Data Available bit (Read Only) 1 = Receive buffer has data, at least one more character can be read 0 = Receive buffer is empty Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared C = Bit can be cleared x = Bit is unknown
bit 0
19
UART
DS70066C-page 19-5
R-0
R-0
R-0
R-0
R-0 bit 0
Unimplemented: Read as 0 URX8: Data bit 8 of the Received Character (in 9-bit mode) URX<7:0>: Data bits 7-0 of the Received Character Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
UXTXREG: UARTX Transmit Register (Write Only) U-0 U-0 U-0 U-0 U-0 U-0 W-x UTX8 bit 8
W-x
W-x
W-x
W-x
W-x bit 0
Unimplemented: Read as 0 UTX8: Data bit 8 of the Character to be Transmitted (in 9-bit mode) UTX<7:0>: Data bits 7-0 of the Character to be Transmitted Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70066C-page 19-6
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
19
UART
DS70066C-page 19-7
Baud Rate =
FCY 16 (UxBRG + 1)
UxBRG =
Note:
Example 19-1 shows the calculation of the baud rate error for the following conditions: FCY = 4 MHz Desired Baud Rate = 9600 Example 19-1: Desired Baud Rate Baud Rate Error Calculation = FCY/(16 (UxBRG + 1))
Solving for UxBRG value: UxBRG UxBRG UxBRG Calculated Baud Rate Error = = = = = = = = ( (FCY/Desired Baud Rate)/16) 1 ((4000000/9600)/16) 1 [25.042] = 25 4000000/(16 (25 + 1)) 9615 (Calculated Baud Rate Desired Baud Rate) Desired Baud Rate (9615 9600)/9600 0.16%
The maximum baud rate possible is FCY / 16 (for UxBRG = 0), and the minimum baud rate possible is FCY / (16 * 65536). Writing a new value to the UxBRG register causes the BRG timer to be reset (cleared). This ensures the BRG does not wait for a timer overflow before generating the new baud rate.
DS70066C-page 19-8
FCY = 30 MHz KBAUD 0.3 1.1996 2.4008 9.6154 19.1327 38.2653 56.8182 117.1875
FCY = 12 MHz KBAUD 0.3 1.2 2.3962 9.6154 19.2308 37.5 57.6923 % ERROR 0.0 0.0 -0.2 -0.2 +0.2 +0.2 -2.3
7.68 MHz KBAUD 0.3 1.2 2.4 9.6 19.2 % ERROR 0.0 0.0 0.0 0.0 0.0
19
UART
FCY = 5 MHz KBAUD 0.2999 1.2019 2.4038 9.4697 19.5313 39.0625 % ERROR 0.0 +0.2 +0.2 -1.4 +1.7 +1.7
3.072 MHz KBAUD 0.3 1.2 2.4 9.6 19.2 38.4 % ERROR 0.0 0.0 0.0 0.0 0.0 0.0
1.8432 MHz KBAUD 0.3 1.2 2.4 9.6 19.2 38.4 % ERROR 0.0 0.0 0.0 0.0 0.0 0.0
383 95 47 11 5 2
DS70066C-page 19-9
19.4.1
19.4.2
19.4.3
DS70066C-page 19-10
Transmit FIFO
UxTX
Control Signals
19
UART
Transmission is enabled by setting the UTXEN enable bit (UxSTA<10>). The actual transmission will not occur until the UxTXREG register has been loaded with data and the Baud Rate Generator (UxBRG) has produced a shift clock (Figure 19-2). The transmission can also be started by first loading the UxTXREG register and then setting the UTXEN enable bit. Normally when transmission is first started, the UxTSR register is empty, so a transfer to the UxTXREG register will result in an immediate transfer to UxTSR. Clearing the UTXEN bit during a transmission will cause the transmission to be aborted and will reset the transmitter. As a result, the UxTX pin will revert to a high-impedance state. In order to select 9-bit transmission, the PDSEL<1:0> bits (UxMODE<2:1>) should be set to 11 and the ninth bit should be written to the UTX9 bit (UxTXREG<8>). A word write should be performed to UxTXREG so that all nine bits are written at the same time. Note: There is no parity in the case of 9-bit data transmission.
DS70066C-page 19-11
19.5.2
Transmit Interrupt
The transmit interrupt flag (UxTXIF) is located in the corresponding interrupt flag status (IFS) register. The UTXISEL control bit (UxSTA<15>) determines when the UART will generate a transmit interrupt. 1. If UTXISEL = 0, an interrupt is generated when a word is transferred from the transmit buffer to the Transmit Shift register (UxTSR). This implies that the transmit buffer has at least one empty word. Since an interrupt is generated after the transfer of each individual word, this mode is useful if interrupts can be handled frequently (i.e., the ISR is completed before the transmission of the next word). If UTXISEL = 1, an interrupt is generated when a word is transferred from the transmit buffer to the Transmit Shift register (UxTSR) and the transmit buffer is empty. Since an interrupt is generated only after all 4 words have been transmitted, this Block Transmit mode is useful if the users code cannot handle interrupts quickly enough (i.e., the ISR is completed before the transmission of the next word).
2.
The UxTXIF bit will be set when the module is first enabled. The user should clear the UxTXIF bit in the ISR. Switching between the two Interrupt modes during operation is possible. Note: When the UTXEN bit is set, the UxTXIF flag bit will also be set if UTXISEL = 0, since the transmit buffer is not yet full (can move transmit data to the UxTXREG register).
While the UxTXIF flag bit indicates the status of the UxTXREG register, the TRMT bit (UxSTA<8>) shows the status of the UxTSR register. The TRMT status bit is a read only bit, which is set when the UxTSR register is empty. No interrupt logic is tied to this bit, so the user has to poll this bit in order to determine if the UxTSR register is empty.
DS70066C-page 19-12
4. 5.
6.
Figure 19-3:
Write to UxTXREG Character 1 BCLK/16 (Shift Clock) UxTX Start Bit Bit 0 Bit 1 Character 1 UxTXIF UxTXIF Cleared by User Bit 7/8 Stop Bit
19
UART
Figure 19-4:
Start Bit
Bit 0
Bit 1 Character 1
Bit 7/8
Stop Bit
Start Bit
Bit 0 Character 2
DS70066C-page 19-13
19.6
UART Receiver
The receiver block diagram is shown in Figure 19-5. The heart of the receiver is the Receive (Serial) Shift register (UxRSR). The data is received on the UxRX pin and is sent to the data recovery block. The data recovery block operates at 16 times the baud rate, whereas the main receive serial shifter operates at the baud rate. After sampling the UxRX pin for the Stop bit, the received data in UxRSR is transferred to the receive FIFO (if it is empty). Note: The UxRSR register is not mapped in data memory, so it is not available to the user.
The data on the UxRX pin is sampled three times by a majority detect circuit to determine if a high or a low level is present at the UxRX pin. Figure 19-5 shows the sampling scheme.
19.6.1
19.6.2
The framing error bit, FERR (UxSTA<2>), is set if a Stop bit is detected as a logic low level. The parity error bit, PERR (UxSTA<3>), is set if a parity error has been detected in the data word at the top of the buffer (i.e., the current word). For example, a parity error would occur if the parity is set to be even, but the total number of ones in the data has been detected to be odd. The PERR bit is irrelevant in the 9-bit mode. The FERR and PERR bits are buffered along with the corresponding word and should be read before reading the data word.
DS70066C-page 19-14
b)
c)
Switching between the three Interrupt modes during operation is possible. While the URXDA and UxRXIF flag bits indicate the status of the UxRXREG register, the RIDLE bit (UxSTA<4>) shows the status of the UxRSR register. The RIDLE status bit is a read only bit, which is set when the receiver is Idle (i.e., the UxRSR register is empty). No interrupt logic is tied to this bit, so the user has to poll this bit in order to determine if the UxRSR is Idle. The URXDA bit (UxSTA<0>) indicates whether the receive buffer has data or whether the buffer is empty. This bit is set as long as there is at least one character to be read from the receive buffer. URXDA is a read only bit. Figure 19-5 shows a block diagram of the UART receiver.
19
UART
DS70066C-page 19-15
UxMODE
UxSTA
15
8 URX8
Receive Buffer Control Generate Flags Generate Interrupt Shift Data Characters
UxRXIF
UxRX
Receive Shift Register (UxRSR) START bit Detect Parity Check Stop bit Detect Shift Clock Generation Wake Logic
DS70066C-page 19-16
PERR
FERR
Control Signals
4. 5.
6.
Figure 19-6:
UART Reception
UxRX
Start bit
bit0
bit1
bit7
Stop bit
Start bit
bit0
bit7
Stop bit
Character 2 to UxRXREG
Note: This timing diagram shows 2 characters received on the UxRX input.
Figure 19-7:
19
bit0
UxRX
Start bit
bit0
bit1
UART
RIDLE bit
Note: This diagram shows 6 characters received without the user reading the input buffer. The 5th character received is held in the receive shift register. An overrun error occurs at the start of the 6th character.
DS70066C-page 19-17
19.7.1
19.7.2
DS70066C-page 19-18
The procedure for using the Address Detect mode is as follows: 1. 2. 3. 4. Set the ADDEN (UxSTA<5>) bit to enable address detect. Ensure that the URXISEL control bits are configured to generate an interrupt after each received word. Check each 8-bit address by reading the UxRXREG register, to determine if the device is being addressed. If this device has not been addressed, then discard the received word. If this device has been addressed, clear the ADDEN bit to allow subsequent data bytes to be read into the receive buffer and interrupt the CPU. If a long data packet is expected, then the Receive Interrupt mode could be changed to buffer more than one data byte between interrupts. When the last data byte has been received, set the ADDEN bit so that only address bytes will be received. Also, ensure that the URXISEL control bits are configured to generate an interrupt after each received word.
5.
Figure 19-8:
UxRX (pin) Transfer to Receive FIFO Read Rcv Buffer Reg UxRXREG UxRXIF (Interrupt Flag)
Start bit
bit0
bit1
bit8
Stop bit
Start bit
bit0
bit8
Stop bit
Word 1 UxRXREG
19
UART
Note: This timing diagram shows a data byte followed by an address byte. The data byte is not read into the UxRXREG (receive buffer) because ADDEN = 1 and bit 8 = 0.
19.8
DS70066C-page 19-19
Example 19-2:
MOV MOV BSET BCLR BCLR BSET BCLR BCLR CLR MOV
#baudrate,W0 W0,U1BRG IPC2,#U1TXIP2 IPC2,#U1TXIP1 IPC2,#U1TXIP0 IPC2,#U1RXIP2 IPC2,#U1RXIP1 IPC2,#U1RXIP0 U1STA #0x8800,W0
W0,U1MODE U1STA,#UTXEN IEC0,#U1TXIE IEC0,#U1RXIE ; Enable transmit ; Enable transmit interrupts ; Enable receive interrupts
Example 19-3:
MOV MOV BSET BCLR BCLR BSET BCLR BCLR BSET MOV
#baudrate,W0 W0,U1BRG IPC2,#U1TXIP2 IPC2,#U1TXIP1 IPC2,#U1TXIP0 IPC2,#U1RXIP2 IPC2,#U1RXIP1 IPC2,#U1RXIP0 U1STA,#ADDEN #0x8883,W0
; Set UART TX interrupt priority ; ; ; Set UART RX interrupt priority ; ; ; Enable address detect ; UART1 enabled for 9-bit data, ; no parity, 1 STOP bit, ; wakeup enabled
W0,U1MODE U1STA,#UTXEN IEC0,#U1TXIE IEC0,#U1RXIE ; Enable transmit ; Enable transmit interrupts ; Enable receive interrupts
DS70066C-page 19-20
The Loopback mode is dependent on the UEN<1:0> bits, as shown in Table 19-2. Table 19-2: 00 01 10 11 Loopback Mode Pin Function UxRX input connected to UxTX; UxTX pin functions; UxRX pin ignored; UxCTS/UxRTS unused UxRX input connected to UxTX; UxTX pin functions; UxRX pin ignored; UxRTS pin functions, UxCTS unused UxRX input connected to UxTX; UxTX pin functions; UxRX pin ignored; UxRTS pin functions, UxCTS input connected to UxRTS; UxCTS pin ignored UxRX input connected to UxTX; UxTX pin functions; UxRX pin ignored; BCLK pin functions; UxCTS/UxRTS unused
19.10.2
19
UART
19.11
DS70066C-page 19-21
19.12
Table 19-3:
Bit 13 USIDL UTXBRK UTX8 URX8 Receive Register Transmit Register UTXEN UTXBF TRMT URXISEL<1:0> ADDEN RIDLE PERR FERR OERR URXDA reserved ALTIO reserved reserved WAKE LPBACK ABAUD Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 PDSEL<1:0> STSEL Bit 1 Bit 0 Reset State
SFR Name
Bit 15
Bit 14
U1MODE
UARTEN
DS70066C-page 19-22
U1STA
UTXISEL
U1TXREG
U1RXREG Baud Rate Generator Prescaler SI2CIF SI2CIE NVMIE ADIE U1TXIE U1TXIP<2:0> U1RXIE SPI1IE T3IE NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF
U1BRG
IFS0
CNIF
MI2CIF
IEC0
CNIE
MI2CIE
IPC2
ADIP<2:0>
Note:
The registers associated with UART1 are shown for reference. See the device data sheet for the registers associated with other UART modules.
Answer: The most common reason for reception errors is that an incorrect value has been calculated for the UART baud rate generator. Ensure the value written to the UxBRG register is correct. Question 2: I am getting framing errors even though the signal on the UART receive pin looks correct. What are the possible causes?
Answer: Ensure the following control bits have been setup correctly: UxBRG: UART Baud Rate register PDSEL<1:0>: Parity and Data Size Selection bits STSEL: Stop bit Selection
19
UART
DS70066C-page 19-23
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70066C-page 19-24
Revision B
Revision B has been expanded to include a full description of the dsPIC30F UART module.
Revision C
This revision incorporates all known errata at the time of this document update.
19
UART
DS70066C-page 19-25
DS70066C-page 19-26
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-1
The SPI serial port consists of the following Special Function Registers (SFR): SPIxBUF: Address in SFR space that is used to buffer data to be transmitted and data that is received. This address is shared by the SPIxTXB and SPIxRXB registers. SPIxCON: A control register that configures the module for various modes of operation. SPIxSTAT: A status register that indicates various status conditions.
In addition, there is a 16-bit shift register, SPIxSR, that is not memory mapped. It is used for shifting data in and out of the SPI port. The memory mapped SFR, SPIxBUF, is the SPI Data Receive/Transmit register. Internally, the SPIxBUF register actually comprises of two separate registers - SPIxTXB and SPIxRXB. The Receive Buffer register, SPIxRXB, and the Transmit Buffer register, SPIxTXB, are two unidirectional 16-bit registers. These registers share the SFR address named SPIxBUF. If a user writes data to be transmitted to the SPIxBUF address, internally the data gets written to the SPIxTXB register. Similarly, when the user reads the received data from SPIxBUF, internally the data is read from the SPIxRXB register. This double-buffering of transmit and receive operations allows continuous data transfers in the background. Transmission and reception occur simultaneously. Note: The user cannot write to the SPIxTXB register or read from the SPIxRXB register directly. All reads and writes are performed on the SPIxBUF register.
The SPI serial interface consists of the following four pins: SDIx: serial data input SDOx: serial data output SCKx: shift clock input or output SSx: active low slave select or frame synchronization I/O pulse Note: The SPI module can be configured to operate using 3 or 4 pins. In the 3-pin mode, the SSx pin is not used.
DS70067C-page 20-2
SPIxBUF
Shift Control Clock Control Edge Select Secondary Prescaler 1:1 1:8 Primary Prescaler 1, 4, 16, 64
SSx
FCY
SCKx
Note: The SPIxTXB and SPIxRXB registers are memory mapped to the SPIxBUF register.
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-3
U-0
R/W-0 SPISIDL
U-0
U-0
U-0
U-0
U-0 bit 8
R/W-0 HS SPIROV
U-0
U-0
U-0
U-0
R-0 SPITBF
bit 14 bit 13
bit 0
SPIEN: SPI Enable bit 1 = Enables module and configures SCKx, SDOx, SDIx and SSx as serial port pins 0 = Disables module Unimplemented: Read as 0 SPISIDL: Stop in Idle Mode bit 1 = Discontinue module operation when device enters Idle mode 0 = Continue module operation in Idle mode Unimplemented: Read as 0 SPIROV: Receive Overflow Flag bit 1 = A new byte/word is completely received and discarded. The user software has not read the previous data in the SPIxBUF register. 0 = No overflow has occurred Unimplemented: Read as 0 SPITBF: SPI Transmit Buffer Full Status bit 1 = Transmit not yet started, SPIxTXB is full 0 = Transmit started, SPIxTXB is empty Automatically set in hardware when CPU writes SPIxBUF location, loading SPIxTXB. Automatically cleared in hardware when SPIx module transfers data from SPIxTXB to SPIxSR. SPIRBF: SPI Receive Buffer Full Status bit 1 = Receive complete, SPIxRXB is full 0 = Receive is not complete, SPIxRXB is empty Automatically set in hardware when SPIx transfers data from SPIxSR to SPIxRXB. Automatically cleared in hardware when core reads SPIxBUF location, reading SPIxRXB. Legend: R = Readable bit HC = Cleared by Hardware -n = Value at Reset W = Writable bit HS = Set by Hardware 1 = Bit is set 0 = Bit is cleared x = Bit is unknown U = Unimplemented bit, read as 0
DS70067C-page 20-4
R/W-0 SPIFSD
U-0
R/W-0 DISSDO
R/W-0 MODE16
R/W-0 SMP
R/W-0 CKP
R/W-0 MSTEN
R/W-0
R/W-0 SPRE<2:0>
R/W-0
bit 13
bit 12 bit 11
bit 10
bit 9
bit 8
bit 7
bit 6
bit 5
Unimplemented: Read as 0 FRMEN: Framed SPI Support bit 1 = Framed SPI support enabled 0 = Framed SPI support disabled SPIFSD: Frame Sync Pulse Direction Control on SSx pin bit 1 = Frame sync pulse input (slave) 0 = Frame sync pulse output (master) Unimplemented: Read as 0 DISSDO: Disable SDOx pin bit 1 = SDOx pin is not used by module. Pin is controlled by associated port register. 0 = SDOx pin is controlled by the module MODE16: Word/Byte Communication Select bit 1 = Communication is word-wide (16 bits) 0 = Communication is byte-wide (8 bits) SMP: SPI Data Input Sample Phase bit Master mode: 1 = Input data sampled at end of data output time 0 = Input data sampled at middle of data output time Slave mode: SMP must be cleared when SPI is used in Slave mode. CKE: SPI Clock Edge Select bit 1 = Serial output data changes on transition from active clock state to Idle clock state (see bit 6) 0 = Serial output data changes on transition from Idle clock state to active clock state (see bit 6) Note: The CKE bit is not used in the Framed SPI modes. The user should program this bit to 0 for the Framed SPI modes (FRMEN = 1). SSEN: Slave Select Enable (Slave mode) bit 1 = SS pin used for Slave mode 0 = SS pin not used by module. Pin controlled by port function. CKP: Clock Polarity Select bit 1 = Idle state for clock is a high level; active state is a low level 0 = Idle state for clock is a low level; active state is a high level MSTEN: Master Mode Enable bit 1 = Master mode 0 = Slave mode
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-5
bit 1-0
SPRE<2:0>: Secondary Prescale (Master Mode) bits (Supported settings: 1:1, 2:1 through 8:1, all inclusive) 111 = Secondary prescale 1:1 110 = Secondary prescale 2:1 ... 000 = Secondary prescale 8:1 PPRE<1:0>: Primary Prescale (Master Mode) bits 11 = Primary prescale 1:1 10 = Primary prescale 4:1 01 = Primary prescale 16:1 00 = Primary prescale 64:1 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70067C-page 20-6
20.3.1
20.3.2
Figure 20-2:
SDOx
SDIx
SDIx
SDOx
Serial Clock
SPI Buffer (SPIxBUF) SCKx
SCKx
SSx
SSx
(MSTEN(SPIxCON<5> = 1))
20
Serial Peripheral Interface (SPI)
Note 1: Using the SSx pin in Slave mode of operation is optional. 2: User must write transmit data to/read received data from SPIxBUF. The SPIxTXB and SPIxRXB registers are memory mapped to SPIxBUF.
DS70067C-page 20-7
2. 3. 4. 5.
In Master mode, the system clock is prescaled and then used as the serial clock. The prescaling is based on the settings in the PPRE<1:0> (SPIxCON<1:0>) and SPRE<1:0> (SPIxCON<4:2>) bits. The serial clock is output via the SCKx pin to slave devices. Clock pulses are only generated when there is data to be transmitted. For further information, refer to Section 20.4 SPI Master Mode Clock Frequency. The CKP and CKE bits determine on which edge of the clock, data transmission occurs. Both data to be transmitted and data that is received are respectively written into or read from the SPIxBUF register. The following describes the SPI module operation in Master mode: 1. 2. 3. 4. Once the module is set up for Master mode of operation and enabled, data to be transmitted is written to the SPIxBUF register. The SPITBF (SPIxSTAT<1>) bit is set. The contents of SPIxTXB are moved to the shift register, SPIxSR, and the SPITBF bit is cleared by the module. A series of 8/16 clock pulses shifts out 8/16 bits of transmit data from the SPIxSR to the SDOx pin and simultaneously shifts in the data at the SDIx pin into the SPIxSR. When the transfer is complete, the following events will occur: The interrupt flag bit, SPIxIF, is set. SPI interrupts can be enabled by setting the interrupt enable bit SPIxIE. The SPIxIF flag is not cleared automatically by the hardware. Also, when the ongoing transmit and receive operation is completed, the contents of the SPIxSR are moved to the SPIxRXB register. The SPIRBF (SPIxSTAT<0>) bit is set by the module, indicating that the receive buffer is full. Once the SPIxBUF register is read by the user code, the hardware clears the SPIRBF bit. If the SPIRBF bit is set (receive buffer is full) when the SPI module needs to transfer data from SPIxSR to SPIxRXB, the module will set the SPIROV (SPIxSTAT<6>) bit, indicating an overflow condition. Data to be transmitted can be written to SPIxBUF by the user software at any time as long as the SPITBF (SPIxSTAT<1>) bit is clear. The write can occur while SPIxSR is shifting out the previously written data, allowing continuous transmission. Note: The SPIxSR register cannot be written into directly by the user. All writes to the SPIxSR register are performed through the SPIxBUF register.
5.
6.
DS70067C-page 20-8
SDOx (CKE = 0)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
SDOx (CKE = 1)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
SDIx (SMP = 0) Input Sample (SMP = 0) SDIx (SMP = 1) Input Sample (SMP = 1)
bit7
bit0 Two modes available for SMP control bit (see Note 4)
bit7
bit0
SPIxIF 1 instruction cycle latency to set SPIxIF flag bit SPIxSR moved into SPIxRXB SPIRBF (SPIxSTAT<0>) User reads SPIxBUF
20
Serial Peripheral Interface (SPI)
Note 1: Four SPI Clock modes shown to demonstrate CKP (SPIxCON<6>) and CKE (SPIxCON<8>) bit functionality only. Only one of the four modes can be chosen for operation. 2: SDI and input sample shown for two different values of the SMP (SPIxCON<9>) bit, for demonstration purposes only. Only one of the two configurations of the SMP bit can be chosen during operation. 3: If there are no pending transmissions, SPIxTXB is transferred to SPIxSR as soon as the user writes to SPIxBUF. 4: Operation for 8-bit mode shown. The 16-bit mode is similar.
DS70067C-page 20-9
3. 4. 5. 6. 7.
In Slave mode, data is transmitted and received as the external clock pulses appear on the SCKx pin. The CKP (SPIxCON<6>) and CKE (SPIxCON<8>) bits determine on which edge of the clock data transmission occurs. Both data to be transmitted and data that is received are respectively written into or read from the SPIxBUF register. The rest of the operation of the module is identical to that in the Master mode. A few additional features provided in the Slave mode are: Slave Select Synchronization: The SSx pin allows a Synchronous Slave mode. If the SSEN (SPIxCON<7>) bit is set, transmission and reception is enabled in Slave mode only if the SSx pin is driven to a low state. The port output or other peripheral outputs must not be driven in order to allow the SSx pin to function as an input. If the SSEN bit is set and the SSx pin is driven high, the SDOx pin is no longer driven and will tri-state even if the module is in the middle of a transmission. An aborted transmission will be retried the next time the SSx pin is driven low using the data held in the SPIxTXB register. If the SSEN bit is not set, the SSx pin does not affect the module operation in Slave mode. SPITBF Status Flag Operation: The function of the SPITBF (SPIxSTAT<1>) bit is different in the Slave mode of operation. The following describes the function of the SPITBF for various settings of the Slave mode of operation: 1. If SSEN (SPIxCON<7>) is cleared, the SPITBF is set when the SPIxBUF is loaded by the user code. It is cleared when the module transfers SPIxTXB to SPIxSR. This is similar to the SPITBF bit function in Master mode. If SSEN (SPIxCON<7>) is set, the SPITBF is set when the SPIxBUF is loaded by the user code. However, it is cleared only when the SPIx module completes data transmission. A transmission will be aborted when the SSx pin goes high and may be retried at a later time. Each data word is held in SPIxTXB until all bits are transmitted to the receiver. Note: To meet module timing requirements, the SSx pin must be enabled in Slave mode when CKE = 1. (Refer to Figure 20-6 for details.)
2.
DS70067C-page 20-10
SCKx Input (CKP = 0 CKE = 0) SCKx Input (CKP = 1 CKE = 0) SDOx Output SDIx Input (SMP = 0) Input Sample (SMP = 0) bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
bit7
bit0
SPIRBF
Note 1: Two SPI Clock modes shown only to demonstrate CKP (SPIxCON<6>) and CKE (SPIxCON<8>) bit functionality. Any combination of CKP and CKE bits can be chosen for module operation. 2: If there are no pending transmissions or a transmission in progress, SPIxBUF is transferred to SPIxSR as soon as the user writes to SPIxBUF. 3: Operation for 8-bit mode shown. The 16-bit mode is similar.
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-11
SSx
SCKx (CKP = 0 CKE = 0) SCKx (CKP = 1 CKE = 0) User writes SPIxBUF to to SPIxBUF SPIxSR
SDOx
bit7
bit3
bit7
bit0
SPIRBF User reads SPIxBUF Note 1: When the SSEN (SPIxCON<7>) bit is set to 1, the SSx pin must be driven low so as to enable transmission and reception in Slave mode. 2: Transmit data is held in SPIxTXB and SPITBF remains set until all bits are transmitted. 3: Operation for 8-bit mode shown. The 16-bit mode is similar.
DS70067C-page 20-12
SSx (see Note 1) SCK Input (CKP = 0 CKE = 1) SCK Input (CKP = 1 CKE = 1)
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
bit7
bit0
Write to SPIxBUF
SPISR to SPIRXB
SPITBF
SPIxRBF
Note 1: The SSx pin must be used for Slave mode operation when CKE = 1. 2: When the SSEN (SPIxCON<7>) bit is set to 1, the SSx pin must be driven low so as to enable transmission and reception in Slave mode. 3: Transmit data is held in SPIxTXB and SPITBF remains set until all bits are transmitted. 4: Operation for 8-bit mode shown. The 16-bit mode is similar.
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-13
20.3.4
20.3.5
These four modes determine whether or not the SPIx module generates the serial clock and the frame synchronization pulse.
DS70067C-page 20-14
PROCESSOR 2
SDOx
SDIx
SDIx
SDOx
SCKx
Serial Clock
SCKx
SSx
SSx
Note 1: In Framed SPI modes, the SSx pin is used to transmit/receive the frame synchronization pulse. 2: Framed SPI modes require the use of all four pins (i.e., using the SSx pin is not optional). 3: The SPIxTXB and SPIxRXB registers are memory mapped to the SPIxBUF register.
20.3.5.1
SCKx in Framed SPI Modes When FRMEN (SPIxCON<14>) = 1 and MSTEN (SPIxCON<5>) = 1, the SCKx pin becomes an output and the SPI clock at SCKx becomes a free running clock. When FRMEN = 1 and MSTEN = 0, the SCKx pin becomes an input. The source clock provided to the SCKx pin is assumed to be a free running clock. The polarity of the clock is selected by the CKP (SPIxCON<6>) bit. The CKE (SPIxCON<8>) bit is not used for the Framed SPI modes and should be programmed to 0 by the user software. When CKP = 0, the frame sync pulse output and the SDOx data output change on the rising edge of the clock pulses at the SCKx pin. Input data is sampled at the SDIx input pin on the falling edge of the serial clock. When CKP = 1, the frame sync pulse output and the SDOx data output change on the falling edge of the clock pulses at the SCKx pin. Input data is sampled at the SDIx input pin on the rising edge of the serial clock.
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-15
20.3.5.3
SPI Master Mode and Frame Master Mode This Framed SPI mode is enabled by setting the MSTEN (SPIxCON<5>) and FRMEN (SPIxCON<14>) bits to 1 and the SPIFSD (SPIxCON<13>) bit to 0. In this mode, the serial clock will be output continuously at the SCKx pin, regardless of whether the module is transmitting. When the SPIxBUF is written, the SSx pin will be driven high on the next transmit edge of the SCKx clock. The SSx pin will be high for one SCKx clock cycle. The module will start transmitting data on the next transmit edge of the SCKx, as shown in Figure 20-8. A connection diagram indicating signal directions for this Operating mode is shown in Figure 20-7. Figure 20-8:
SCKx (CKP = 1) SCKx (CKP = 0) SSx SDOx SDIx Bit 15 Bit 15 Bit 14 Bit 14 Bit 13 Bit 13 Bit 12 Bit 12
DS70067C-page 20-16
SCKx (CKP = 1) SCK (CKP = 0) FSYNC SDO SDI Bit 15 Bit 15 Bit 14 Bit 14 Bit 13 Bit 13 Bit 12 Bit 12
Write to SPIxBUF
dsPIC30F [SPI Master, Frame Slave] SDOx SDIx SCKx SSx Frame Sync. Pulse Serial Clock SDIx SDOx SCKx SSx
PROCESSOR 2
Note 1: In Framed SPI modes, the SSx pin is used to transmit/receive the frame synchronization pulse. 2: Framed SPI modes require the use of all four pins (i.e., Using the SSx pin is not optional).
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-17
Note 1: In Framed SPI modes, the SSx pin is used to transmit/receive the frame synchronization pulse. 2: Framed SPI modes require the use of all four pins (i.e., Using the SSx pin is not optional).
20.3.5.6
SPI Slave Mode and Frame Slave Mode This Framed SPI mode is enabled by setting the MSTEN (SPIxCON<5>) bit to 0, the FRMEN bit (SPIxCON<14>) to 1 and the SPIFSD (SPIxCON<13>) bit to 1. Therefore, both the SCKx and SSx pins will be inputs. The SSx pin will be sampled on the sample edge of the SPI clock. When SSx is sampled high, data will be transmitted on the next transmit edge of SCKx. A connection diagram indicating signal directions for this Operating mode is shown in Figure 20-12. Figure 20-12: SPI Slave, Frame Slave Connection Diagram
PROCESSOR 2
Note 1: In Framed SPI modes, the SSx pin is used to transmit/receive the frame synchronization pulse. 2: Framed SPI modes require the use of all four pins (i.e., Using the SSx pin is not optional).
DS70067C-page 20-18
Equation 20-1 can be used to calculate the SCKx clock frequency as a function of the primary and secondary prescaler settings. Equation 20-1: FCY FSCK = Primary Prescaler * Secondary Prescaler
Some sample SPI clock frequencies (in kHz) are shown in the table below: Table 20-1: FCY = 30 MHz Primary Prescaler Settings 1:1 4:1 16:1 64:1 FCY = 5 MHz Primary Prescaler Settings 1:1 4:1 16:1 64:1 Note: 5000 1250 313 78 2500 625 156 39 1250 313 78 20 833 208 52 13 625 156 39 10 Sample SCKx Frequencies Secondary Prescaler Settings 1:1 30000 7500 1875 469 2:1 15000 3750 938 234 4:1 7500 1875 469 117 6:1 5000 1250 313 78 8:1 3750 938 234 59
Note:
Not all clock rates are supported. For further information, refer to the SPI timing specifications in the specific device data sheet.
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-19
20.5.1
Sleep Mode
When the device enters Sleep mode, the system clock is disabled.
20.5.1.1
Master Mode Operation The following are a consequence of entering Sleep mode when the SPIx module is configured for master operation: The baud rate generator in the SPIx module stops and is reset. If the SPIx module enters Sleep mode in the middle of a transmission/reception, then the transmission/reception is aborted. Since there is no automatic way to prevent an entry into Sleep mode if a transmission or reception is pending, the user software must synchronize entry into Sleep with SPI module operation to avoid aborted transmissions. The transmitter and receiver will stop in Sleep. The transmitter or receiver does not continue with a partially completed transmission at wake-up.
20.5.1.2
Slave Mode Operation Since the clock pulses at SCKx are externally provided for Slave mode, the module will continue to function in Sleep mode. It will complete any transactions during the transition into Sleep. On completion of a transaction, the SPIRBF flag is set. Consequently, the SPIxIF bit will be set. If SPI interrupts are enabled (SPIxIE = 1), the device will wake from Sleep. If the SPI interrupt priority level is greater than the present CPU priority level, code execution will resume at the SPIx interrupt vector location. Otherwise, code execution will continue with the instruction following the PWRSAV instruction that previously invoked Sleep mode. The module is not reset on entering Sleep mode if it is operating as a slave device. Register contents are not affected when the SPIx module is going into or coming out of Sleep mode.
20.5.2
Idle Mode
When the device enters Idle mode, the system clock sources remain functional. The SPISIDL bit (SPIxSTAT<13>) selects whether the module will stop or continue functioning on Idle. If SPISIDL = 1, the SPI module will stop communication on entering Idle mode. It will operate in the same manner as it does in Sleep mode. If SPISID = 0 (default selection), the module will continue operation in Idle mode.
DS70067C-page 20-20
SPI1 module Clock Input or Output SPI2 module Clock Input or Output SPI1 module Data Receive pin SPI2 module Data Receive pin SPI1 module Data Transmit pin SPI2 module Data Transmit pin SPI1 module Slave Select Control pin 1) Used to enable transmit/receive in Slave mode, if SSEN (SPI1CON<7>) has been set to 1 2) Used as Frame Sync I/O Pulse when FRMEN and SPIFSD (SPI1CON<14:13>) are set to 11 or 10. I/O CMOS SPI2 module Slave Select Control pin SS2 1) Used to enable transmit/receive in Slave mode, if SSEN (SPI2CON<7>) has been set to 1 2) Used as Frame Sync I/O Pulse when FRMEN and SPIFSD (SPI2CON<14:13>) are set to 11 or 10. Legend: CMOS = CMOS compatible input or output, ST = Schmitt Trigger input with CMOS levels, I = Input, O = Output
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-21
20.6
Table 20-3:
Bit 13 SPISIDL SPIFSD Transmit and Receive Buffer Address shared by SPI1TXB and SPI1RXB registers DISSDO MODE16 SMP CKE SSEN CKP MSTEN SPRE2 SPRE1 SPRE0 PPRE1 PPRE0 SPIROV SPITBF 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
SFR Name
Addr.
Bit 15
Bit 14
SPI1STAT
0220
SPIEN
SPIRBF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
DS70067C-page 20-22
Bit 13 SPISIDL SPIFSD Transmit and Receive Buffer Address shared by SPI2TXB and SPI2RXB registers DISSDO MODE16 SMP CKE SSEN CKP MSTEN SPRE2 SPRE1 SPRE0 SPIROV 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 SPITBF SPIRBF 0000 0000 0000 0000 PPRE1 PPRE0 0000 0000 0000 0000 0000 0000 0000 0000 Bit 13 SI2CIF IC4IF SI2CIE IC4IE SPI2IP<2:0> U1TXIP<2:0> C1IP<2:0> IC3IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE T4IE U1RXIP<2:0> U2TXIP<2:0> NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF IC2IE OC4IE NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF LEV8F INT4EP OVATE OVBTE COVTE SWTRAP OVRFLOW INT3EP T1IF OC3IF T1IE OC3IE Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 ADDRERR STKERR INT2EP OC1IF IC8IF OC1IE IC8IE INT1EP IC1IF IC7IF IC1IE IC7IE SPI1IP<2:0> U2RXIP<2:0> Bit 0 INT0 INT1IF INT0IE INT1IE Reset State 0000 0000 0000 0000
SPI1CON
0222
FRMEN
SPI1BUF
0224
Table 20-4:
SFR Name
Addr.
Bit 15
Bit 14
SPI2STAT
0226
SPIEN
SPI2CON
0228
FRMEN
SPI2BUF
022A
Table 20-5:
SFR Name
Addr.
Bit 15
Bit 14
INTCON2 0082
ALTIVT
DISI
INT0EP 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0100 0100 0100 0100 0100 0100 0100
IFS0
0084
CNIF
MI2CIF
IFS1
0086
IC6IF
IC5IF
IEC0
008C
CNIE
MI2CIE
IEC1
008E
IC6IE
IC5IE
IPC2
0098
ADIP<2:0>
IPC6
00A0
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
20
Serial Peripheral Interface (SPI)
DS70067C-page 20-23
Revision B
This revision reflects editorial and technical content changes for the dsPIC30F Serial Peripheral Interface (SPI) module.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
DS70067C-page 20-24
21
Inter-Integrated Circuit (I2C)
DS70068D-page 21-1
The I 2C module contains independent I 2C master logic and I 2C slave logic, each generating interrupts based on their events. In multi-master systems, the software is simply partitioned into master controller and slave controller. When the I 2C master logic is active, the slave logic remains active also, detecting the state of the bus and potentially receiving messages from itself in a single master system or from other masters in a multi-master system. No messages are lost during multi-master bus arbitration. In a multi-master system, bus collision conflicts with other masters in the system are detected and the module provides a method to terminate then restart the message. The I 2C module contains a baud rate generator. The I 2C baud rate generator does not consume other timer resources in the device.
21.1.1
Module Features
Independent Master and Slave logic Multi-Master support. No messages lost in arbitration. Detects 7-bit and 10-bit device addresses Detects general call addresses as defined in the I 2C protocol Bus Repeater mode. Accept all messages as a slave regardless of the address. Automatic SCL clock stretching provides delays for the processor to respond to a slave data request. Supports 100 kHz and 400 kHz bus specifications. Figure 21-1 shows the I2C module block diagram.
DS70068D-page 21-2
21
Figure 21-1: I2C Block Diagram
I2CRCV Read SCL Shift Clock I2CRSR LSB SDA Match Detect Address_Match Write I2CADD Read Start and Stop bit Detect Write Start and Stop bit Generate Control Logic I2CSTAT
Read
Collision Detect
Write I2CCON
Acknowledge Generation Clock Stretching I2CTRN Shift Clock Reload Control I2CBRG BRG Down Counter TCY/2 LSB
Read
Write
Read
Write
Read
DS70068D-page 21-3
dsPIC30F VDD
XTAL
DS70068D-page 21-4
21
21.2.1 Bus Protocol
The following I2C bus protocol has been defined: Data transfer may be initiated only when the bus is not busy. During data transfer, the data line must remain stable whenever the SCL clock line is HIGH. Changes in the data line while the SCL clock line is HIGH will be interpreted as a Start or Stop condition. Accordingly, the following bus conditions have been defined (Figure 21-3). 21.2.1.1 Start Data Transfer (S) After a bus Idle state, a HIGH-to-LOW transition of the SDA line while the clock (SCL) is HIGH determines a Start condition. All data transfers must be preceded by a Start condition. 21.2.1.2 Stop Data Transfer (P) A LOW-to-HIGH transition of the SDA line while the clock (SCL) is HIGH determines a Stop condition. All data transfers must end with a Stop condition. 21.2.1.3 Repeated Start (R) After a WAIT state, a HIGH-to-LOW transition of the SDA line while the clock (SCL) is HIGH determines a Repeated Start condition. Repeated Starts allow a master to change bus direction without relinquishing control of the bus. 21.2.1.4 Data Valid (D) The state of the SDA line represents valid data when, after a Start condition, the SDA line is stable for the duration of the HIGH period of the clock signal. There is one bit of data per SCL clock. 21.2.1.5 Acknowledge (A) or Not-Acknowledge (N) All data byte transmissions must be Acknowledged (ACK) or Not Acknowledged (NACK) by the receiver. The receiver will pull the SDA line low for an ACK or release the SDA line for a NACK. The Acknowledge is a one-bit period, using one SCL clock. 21.2.1.6 WAIT/Data Invalid (Q) The data on the line must be changed during the LOW period of the clock signal. Devices may also stretch the clock low time, by asserting a low on SCL line, causing a WAIT on the bus. 21.2.1.7 Bus Idle (I) Both data and clock lines remain HIGH at those times after a Stop condition and before a Start condition. Figure 21-3:
(I) SCL
SDA
NACK ACK Start Condition Data or Address Valid Data Allowed to Change
ACK/NACK Valid
Stop Condition
DS70068D-page 21-5
S I T D A L R E T
Address Byte
RA / C WK
A C K
Address Byte
RA / C WK
Data Byte
N A C K
S T O P
I D L E
S1 01 0 AAA0 2 1 0
R 1 0 1 0 A A A1 2 1 0
NP
21.2.2.1
Start Message Each message is initiated with a Start condition and terminated with a Stop condition. The number of the data bytes transferred between the Start and Stop conditions is determined by the master device. As defined by the system protocol, the bytes of the message may have special meaning such as device address byte or data byte.
21.2.2.2
Address Slave In the figure, the first byte is the device address byte that must be the first part of any I 2C message. It contains a device address and a R/W bit. Refer to Section 26. Appendix for additional information on Address Byte formats. Note that R/W = 0 for this first address byte, indicating that the master will be a transmitter and the slave will be a receiver.
21.2.2.3
Slave Acknowledge The receiving device is obliged to generate an Acknowledge signal, ACK, after the reception of each byte. The master device must generate an extra SCL clock, which is associated with this Acknowledge bit.
21.2.2.4
Master Transmit The next 2 bytes, sent by the master to the slave, are data bytes containing the location of the requested EEPROM data byte. The slave must Acknowledge each of the data bytes.
21.2.2.5
Repeated Start At this point, the slave EEPROM has the address information necessary to return the requested data byte to the master. However, the R/W bit from the first device address byte specified master transmission and slave reception. The bus must be turned in the other direction for the slave to send data to the master. To do this function without ending the message, the master sends a Repeated Start. The Repeated Start is followed with a device address byte containing the same device address as before and with the R/W = 1 to indicate slave transmission and master reception.
DS70068D-page 21-6
21
21.2.2.6 Slave Reply Now the slave transmits the data byte driving the SDA line, while the master continues to originate clocks but releases its SDA drive. 21.2.2.7 Master Acknowledge During reads, a master must terminate data requests to the slave by NOT Acknowledging (generate a NACK) on the last byte of the message. 21.2.2.8 Stop Message The master sends Stop to terminate the message and return the bus to an Idle state.
21.3
DS70068D-page 21-7
DS70068D-page 21-8
21
Register 21-1: Upper Byte: R/W-0 I2CEN bit 15 I2CCON: I2C Control Register U-0 R/W-0 I2CSIDL R/W-1 HC SCLREL R/W-0 IPMIEN R/W-0 A10M R/W-0 DISSLW R/W-0 SMEN bit 8
R/W-0 STREN
R/W-0 ACKDT
R/W-0 HC ACKEN
R/W-0 HC RCEN
R/W-0 HC PEN
R/W-0 HC RSEN
I2CEN: I2C Enable bit 1 = Enables the I2C module and configures the SDA and SCL pins as serial port pins 0 = Disables I2C module. All I2C pins are controlled by port functions. Unimplemented: Read as 0 I2CSIDL: Stop in Idle Mode bit 1 = Discontinue module operation when device enters an Idle mode 0 = Continue module operation in Idle mode SCLREL: SCL Release Control bit (when operating as I2C Slave) 1 = Release SCL clock 0 = Hold SCL clock low (clock stretch) If STREN = 1: Bit is R/W (i.e., software may write 0 to initiate stretch and write 1 to release clock) Hardware clear at beginning of slave transmission. Hardware clear at end of slave reception. If STREN = 0: Bit is R/S (i.e., software may only write 1 to release clock) Hardware clear at beginning of slave transmission. IPMIEN: Intelligent Peripheral Management Interface (IPMI) Enable bit 1 = Enable IPMI Support mode. All addresses Acknowledged. 0 = IPMI mode not enabled A10M: 10-bit Slave Address bit 1 = I2CADD is a 10-bit slave address 0 = I2CADD is a 7-bit slave address DISSLW: Disable Slew Rate Control bit 1 = Slew rate control disabled 0 = Slew rate control enabled SMEN: SMBus Input Levels bit 1 = Enable I/O pin thresholds compliant with SMBus specification 0 = Disable SMBus input thresholds GCEN: General Call Enable bit (when operating as I2C slave) 1 = Enable interrupt when a general call address is received in the I2CRSR (module is enabled for reception) 0 = General call address disabled STREN: SCL Clock Stretch Enable bit (when operating as I2C slave) Used in conjunction with SCLREL bit. 1 = Enable software or receive clock stretching 0 = Disable software or receive clock stretching ACKDT: Acknowledge Data bit (When operating as I2C Master. Applicable during master receive.) Value that will be transmitted when the software initiates an Acknowledge sequence. 1 = Send NACK during acknowledge 0 = Send ACK during acknowledge
bit 14 bit 13
bit 12
bit 11
bit 10
bit 9
bit 8
bit 7
bit 6
bit 5
DS70068D-page 21-9
ACKEN: Acknowledge Sequence Enable bit (When operating as I2C master. Applicable during master receive.) 1 = Initiate Acknowledge sequence on SDA and SCL pins, and transmit ACKDT data bit Hardware clear at end of master Acknowledge sequence. 0 = Acknowledge sequence not in progress RCEN: Receive Enable bit (when operating as I2C master) 1 = Enables Receive mode for I2C Hardware clear at end eighth bit of master receive data byte. 0 = Receive sequence not in progress PEN: Stop Condition Enable bit (when operating as I2C master) 1 = Initiate Stop condition on SDA and SCL pins Hardware clear at end of master Stop sequence. 0 = Stop condition not in progress RSEN: Repeated Start Condition Enabled bit (when operating as I2C master) 1 = Initiate Repeated Start condition on SDA and SCL pins Hardware clear at end of master Repeated Start sequence. 0 = Repeated Start condition not in progress SEN: Start Condition Enabled bit (when operating as I2C master) 1 = Initiate Start condition on SDA and SCL pins Hardware clear at end of master Start sequence. 0 = Start condition not in progress
bit 3
bit 2
bit 1
bit 0
Legend: R = Readable W = Writable HC = Cleared by Hardware 1 = Bit is set at POR C = Clearable bit HS = Set by Hardware 0 = Bit cleared at POR U = Unimplemented bit, read as 0 S = Settable bit x = Bit is unknown at POR
DS70068D-page 21-10
21
Register 21-2: I2CSTAT: I2C Status Register U-0 U-0 U-0 R/C-0 HS BCL R-0 HS, HC GCSTAT R-0 HS, HC ADD10 bit 8
R/C-0 HS, HC P
R/C-0 HS, HC S
ACKSTAT: Acknowledge Status bit (When operating as I2C master. Applicable to master transmit operation.) 1 = NACK received from slave 0 = ACK received from slave Hardware set or clear at end of slave Acknowledge. TRSTAT: Transmit Status bit (When operating as I2C master. Applicable to master transmit operation.) 1 = Master transmit is in progress (8 bits + ACK) 0 = Master transmit is not in progress Hardware set at beginning of master transmission. Hardware clear at end of slave Acknowledge. BCL: Master Bus Collision Detect bit 1 = A bus collision has been detected during a master operation 0 = No collision Hardware set at detection of bus collision. GCSTAT: General Call Status bit 1 = General call address was received 0 = General call address was not received Hardware set when address matches general call address. Hardware clear at Stop detection. ADD10: 10-bit Address Status bit 1 = 10-bit address was matched 0 = 10-bit address was not matched Hardware set at match of 2nd byte of matched 10-bit address. Hardware clear at Stop detection. IWCOL: Write Collision Detect bit 1 = An attempt to write the I2CTRN register failed because the I2C module is busy 0 = No collision Hardware set at occurrence of write to I2CTRN while busy (cleared by software). I2COV: Receive Overflow Flag bit 1 = A byte was received while the I2CRCV register is still holding the previous byte 0 = No overflow Hardware set at attempt to transfer I2CRSR to I2CRCV (cleared by software). D_A: Data/Address bit (when operating as I2C slave) 1 = Indicates that the last byte received was data 0 = Indicates that the last byte received was device address Hardware clear at device address match. Hardware set by write to I2CTRN or by reception of slave byte.
bit 14
bit 9
bit 8
bit 7
bit 6
bit 5
DS70068D-page 21-11
P: Stop bit 1 = Indicates that a Stop bit has been detected last 0 = Stop bit was not detected last Hardware set or clear when Start, Repeated Start or Stop detected. S: Start bit 1 = Indicates that a Start (or Repeated Start) bit has been detected last 0 = Start bit was not detected last Hardware set or clear when Start, Repeated Start or Stop detected. R_W: Read/Write bit Information (when operating as I2C slave) 1 = Read - indicates data transfer is output from slave 0 = Write - indicates data transfer is input to slave Hardware set or clear after reception of I 2C device address byte. RBF: Receive Buffer Full Status bit 1 = Receive complete, I2CRCV is full 0 = Receive not complete, I2CRCV is empty Hardware set when I2CRCV written with received byte. Hardware clear when software reads I2CRCV. TBF: Transmit Buffer Full Status bit 1 = Transmit in progress, I2CTRN is full 0 = Transmit complete, I2CTRN is empty Hardware set when software writes I2CTRN. Hardware clear at completion of data transmission.
bit 3
bit 2
bit 1
bit 0
Legend: R = Readable HC = Cleared by Hardware 1 = Bit is set at POR W = Writable HS = Set by Hardware 0 = Bit cleared at POR C = Clearable bit U = Unimplemented bit, read as 0 x = Bit is unknown at POR
DS70068D-page 21-12
21
21.4 Enabling I 2C Operation
The module is enabled by setting the I2CEN (I2CCON<15>) bit. The I 2C module fully implements all master and slave functions. When the module is enabled, the master and slave functions are active simultaneously and will respond according to the software or the bus events. When initially enabled, the module will release SDA and SCL pins, putting the bus into the Idle state. The master functions will remain in the Idle state unless software sets a control bit to initiate a master event. The slave functions will begin to monitor the bus. If the slave logic detects a Start event and a valid address on the bus, the slave logic will begin a slave transaction.
21.4.1
Enabling I 2C I/O
Two pins are used for bus operation. These are the SCL pin, which is the clock, and the SDA pin, which is the data. When the module is enabled, assuming no other module with higher priority has control, the module will assume control of the SDA and SCL pins. The module software need not be concerned with the state of the port I/O of the pins, the module overrides the port state and direction. At initialization, the pins are tri-state (released).
21.4.2
I 2C Interrupts
The I 2C module generates two interrupts. One interrupt is assigned to master events and the other interrupt is assigned to slave events. These interrupts will set a corresponding interrupt flag bit and will interrupt the software process if the corresponding interrupt enable bit is set and the corresponding interrupt priority is high enough. The master interrupt is called MI2CIF and is activated on completion of a master message event. The following events generate the MI2CIF interrupt. Start condition Stop condition Data transfer byte transmitted/received Acknowledge transmit Repeated Start Detection of a bus collision event
The slave interrupt is called SI2CIF and is activated on detection of a message directed to the slave. Detection of a valid device address (including general call) Request to transmit data Reception of data
DS70068D-page 21-13
Table 21-1: Required System FSCL 100 kHz 100 kHz 100 kHz 400 kHz 400 kHz 400 kHz 1 MHz* 1 MHz
I2C Clock Rates FCY 30 MHz 20 MHz 1 MHz 10 MHz 5 MHz 1 MHz 11 MHz 1 MHz I2CBRG Decimal 272 181 8 15 7 1 1 0 I2CBRG HEX 0x110 0x0B5 0x008 0x00F 0x007 0x001 0x001 0x000 (invalid) Actual FSCL 100 kHz 100 kHz 101 kHz 400 kHz 400 kHz 345 kHz** 1 MHz* 1 MHz
*FCY = 11 MHz is the minimum input clock frequency to have FSCL = 1 MHz. ** This is closest value to 400 kHz for this value of FCY. Figure 21-6: Baud Rate Generator Block Diagram
I2CBRG<8:0>
SCL
Reload
Down Counter
2 TCY
DS70068D-page 21-14
21
21.5 Communicating as a Master in a Single Master Environment
Typical operation of the I 2C module in a system is using the I 2C to communicate with an I 2C peripheral, such as an I 2C serial memory. In an I 2C system, the master controls the sequence of all data communication on the bus. In this example, the dsPIC30F and its I 2C module have the role of the single master in the system. As the single master, it is responsible for generating the SCL clock and controlling the message protocol. In the I 2C module, the module controls individual portions of the I 2C message protocol, however, sequencing of the components of the protocol to construct a complete message is a software task. For example, a typical operation in a single master environment may be to read a byte from an I 2C serial EEPROM. This example message is depicted in Figure 21-7. To accomplish this message, the software will sequence through the following steps. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Figure 21-7: Assert a Start condition on SDA and SCL. Send the I 2C device address byte to the slave with a write indication. Wait for and verify an Acknowledge from the slave. Send the serial memory address high byte to the slave. Wait for and verify an Acknowledge from the slave. Send the serial memory address low byte to the slave. Wait for and verify an Acknowledge from the slave. Assert a Repeated Start condition on SDA and SCL. Send the device address byte to the slave with a read indication. Wait for and verify an Acknowledge from the slave. Enable master reception to receive serial memory data. Generate an ACK or NACK condition at the end of a received byte of data. Generate a Stop condition on SDA and SCL.
I D L E
S T A R T
Address Byte
RA / C WK
A C K
Address Byte
RA / C WK
Data Byte
N A C K
S T O P
I D L E
S10 1 0AAA0 2 1 0
R 1 0 1 0 A A A1 2 1 0
NP
The I 2C module supports Master mode communication with the inclusion of Start and Stop generators, data byte transmission, data byte reception, Acknowledge generator and a baud rate generator. Generally, the software will write to a control register to start a particular step, then wait for an interrupt or poll status to wait for completion. Subsequent sub-sections detail each of these operations
DS70068D-page 21-15
Figure 21-8:
SEN I2C Bus State (I) TBRG SCL (Master) SDA (Master) S P
MI2CIF Interrupt
(S) TBRG
(Q)
1 - Writing SEN = 1 initiates a master Start event. Baud generator starts. 2 - Baud generator times out. Master module drives SDA low. Baud generator restarts. 3 - Slave module detects Start, sets S = 1, P = 0. 4 - Baud generator times out. Master module drives SCL low, generates interrupt and clears SEN.
2 3
DS70068D-page 21-16
21
21.5.2 Sending Data to a Slave Device
Transmission of a data byte, a 7-bit device address byte or the second byte of a 10-bit address, is accomplished by simply writing the appropriate value to the I2CTRN register. Loading this register will start the following process: The software loads the I2CTRN with the data byte to transmit. Writing I2CTRN sets the buffer full flag bit, TBF (I2CSTAT<0>). The data byte is shifted out the SDA pin until all 8 bits are transmitted. Each bit of address/data will be shifted out onto the SDA pin after the falling edge of SCL. On the ninth SCL clock, the module shifts in the ACK bit from the slave device and writes its value into the ACKSTAT bit (I2CCON<15>). The module generates the MI2CIF interrupt at the end of the ninth SCL clock cycle. Note that the module does not generate or validate the data bytes. The contents and usage of the byte is dependant on the state of the message protocol maintained by the software. 21.5.2.1 Sending a 7-bit Address to the Slave Sending a 7-bit device address involves sending 1 byte to the slave. A 7-bit address byte must contain the 7 bits of I 2C device address and a R/W bit that defines if the message will be a write to the slave (master transmission and slave receiver) or a read from the slave (slave transmission and master receiver). 21.5.2.2 Sending a 10-bit Address to the Slave Sending a 10-bit device address involves sending 2 bytes to the slave. The first byte contains 5 bits of I 2C device address reserved for 10-bit Addressing modes and 2 bits of the 10-bit address. Because the next byte, which contains the remaining 8 bits of the 10-bit address must be received by the slave, the R/W bit in the first byte must be 0, indicating master transmission and slave reception. If the message data is also directed toward the slave, the master can continue sending the data. However, if the master expects a reply from the slave, a Repeated Start sequence with the R/W bit at 1 will change the R/W state of the message to a read of the slave. 21.5.2.3 Receiving Acknowledge from the Slave On the falling edge of the eighth SCL clock, the TBF bit is cleared and the master will de-assert the SDA pin allowing the slave to respond with an Acknowledge. The master will then generate a ninth SCL clock. This allows the slave device being addressed to respond with an ACK bit during the ninth bit time if an address match occurs, or if data was received properly. A slave sends an Acknowledge when it has recognized its device address (including a general call), or when the slave has properly received its data. The status of ACK is written into the Acknowledge status bit, ACKSTAT (I2CSTAT<15>), on the falling edge of the ninth SCL clock. After the ninth SCL clock, the module generates the MI2CIF interrupt and enters an Idle state until the next data byte is loaded into I2CTRN. 21.5.2.4 ACKSTAT Status Flag The ACKSTAT bit (I2CCON<15>) is cleared when the slave has sent an Acknowledge (ACK = 0), and is set when the slave does not Acknowledge (ACK = 1).
DS70068D-page 21-17
Figure 21-9:
I2CTRN I2C Bus State (Q) (D) (Q) (D) (Q) (A) (Q)
TBRG TBRG
SCL (Master) SCL (Slave) SDA (Master) SDA (Slave) TRSTAT TBF MI2CIF Interrupt ACKSTAT D7 D6 D5 D4 D3 D2 D1 D0
1 2
1 - Writing the I2CTRN register will start a master transmission event. TBF bit is set. 2 - Baud generator starts. The MSB of the I2CTRN drives SDA. SCL remains low. TRSTAT bit is set. 3 - Baud generator times out. SCL released. Baud generator restarts. 4 - Baud generator times out. SCL driven low. After SCL detected low, next bit of I2CTRN drives SDA. 5 - While SCL is low, the slave can also pull SCL low to initiate a WAIT (clock stretch). 6 - Master has already released SCL, and slave can release to end WAIT. Baud generator restarts. 7 - At falling edge of 8th SCL clock, master releases SDA. TBF bit is cleared. Slave drives ACK/NACK. 8 - At falling edge of 9th SCL clock, master generates interrupt. SCL remains low until next event. Slave releases SDA. TRSTAT bit is clear.
DS70068D-page 21-18
21
21.5.3 Receiving Data from a Slave Device
Setting the receive enable bit, RCEN (I2CCON<3>), enables the master to receive data from a slave device. Note: The lower 5 bits of I2CCON must be 0 before attempting to set the RCEN bit. This ensures the master logic is inactive.
The master logic begins to generate clocks and before each falling edge of the SCL, SDA line is sampled and data is shifted into the I2CRSR. After the falling edge of the eighth SCL clock: The RCEN bit is automatically cleared. The contents of the I2CRSR transfer into the I2CRCV. The RBF flag bit is set. The module generates the MI2CIF interrupt.
When the CPU reads the buffer, the RBF flag bit is automatically cleared. The software can process the data and then do an Acknowledge sequence. 21.5.3.1 RBF Status Flag When receiving data, the RBF bit is set when an device address or data byte is loaded into I2CRCV from I2CRSR. It is cleared when software reads the I2CRCV register. 21.5.3.2 I2COV Status Flag If another byte is received in the I2CRSR while the RBF bit remains set and the previous byte remains in the I2CRCV register, the I2COV bit is set and the data in the I2CRSR is lost. Leaving I2COV set does not inhibit further reception. If RBF is cleared by reading the I2CRCV, and the I2CRSR receives another byte, that byte will be transferred to the I2CRCV. 21.5.3.3 IWCOL Status Flag If the software writes the I2CTRN when a receive is already in progress (i.e., I2CRSR is still shifting in a data byte), then the IWCOL bit is set and the contents of the buffer are ignored. Note: Since queueing of events is not allowed, writing to the lower 5 bits of I2CCON is disabled until the data reception condition is complete.
DS70068D-page 21-19
(D) (Q)
TBRG
(Q) (D)
(Q)
SCL (Master) SCL (Slave) SDA (Master) SDA (Slave) I2CRCV RBF MI2CIF Interrupt D7 D6 D5 D4 D3 D2 D1 D0
1 - Typically, the slave can pull SCL low (clock stretch) to request a wait to prepare data response. The slave will drive MSB of data response on SDA when ready. 2 - Writing the RCEN bit will start a master reception event. The baud generator starts. SCL remains low. 3 - Baud generator times out. Master attempts to release SCL. 4 - When slave releases SCL, baud generator restarts. 5 - Baud generator times out. MSB of response shifted to I2CRSR. SCL driven low for next baud interval. 6 - At falling edge of 8th SCL clock, I2CRSR transferred to I2CRCV. Module clears RCEN bit. RBF bit is set. Master generates interrupt.
DS70068D-page 21-20
21
21.5.4 Acknowledge Generation
Setting the Acknowledge sequence enable bit, ACKEN (I2CCON<4>), enables generation of a master Acknowledge sequence. Note: The lower 5 bits of I2CCON must be 0 (master logic inactive) before attempting to set the ACKEN bit.
Figure 21-11 shows an ACK sequence and Figure 21-12 shows a NACK sequence. The Acknowledge data bit, ACKDT (I2CCON<5>), specifies ACK or NACK. After two baud periods: The ACKEN bit is automatically cleared. The module generates the MI2CIF interrupt. 21.5.4.1 IWCOL Status Flag If the software writes the I2CTRN when an Acknowledge sequence is in progress, then IWCOL is set and the contents of the buffer are ignored. Note: Because queueing of events is not allowed, writing to the lower 5 bits of I2CCON is disabled until the Acknowledge condition is complete.
Figure 21-11:
ACKDT = 0 ACKEN I2C Bus State (Q) (Q) TBRG SCL (Master) SDA (Master) MI2CIF Interrupt (A) TBRG (Q) 1 - Writing ACKDT = 0 specifies sending an ACK. Writing ACKEN = 1 initiates a master Acknowledge event. Baud generator starts. SCL remains low. 2 - When SCL detected low, module drives SDA low. 3 - Baud generator times out. Module releases SCL. Baud generator restarts. 4 - Baud generator times out. Module drives SCL low then releases SDA. Module clears ACKEN. Master generates interrupt. 1 2 3 4
ACKDT = 1 ACKEN I2C Bus State (Q) TBRG SCL (Master) SDA (Master) MI2CIF Interrupt (A) TBRG (I) 1 - Writing ACKDT = 1 specifies sending an NACK. Writing ACKEN = 1 initiates a master Acknowledge event. Baud generator starts. 2 - When SCL detected low, module releases SDA. 3 - Baud generator times out. Module releases SCL. Baud generator restarts. 4 - Baud generator times out. Module drives SCL low then releases SDA. Module clears ACKEN. Master generates interrupt. 1 2 3 4
DS70068D-page 21-21
When the PEN bit is set, the master generates the Stop sequence as shown in Figure 21-13. The slave detects the Stop condition, sets the P bit (I2CSTAT<4>) and clears the S bit (I2CSTAT<3>). The PEN bit is automatically cleared. The module generates the MI2CIF interrupt. 21.5.5.1 IWCOL Status Flag If the software writes the I2CTRN when a Stop sequence is in progress, then the IWCOL bit is set and the contents of the buffer are ignored. Note: Because queueing of events is not allowed, writing to the lower 5 bits of I2CCON is disabled until the Stop condition is complete.
PEN I2C Bus State (Q) (Q) TBRG SCL (Master) SDA (Master) S P MI2CIF Interrupt TBRG (P) TBRG (I)
1 - Writing PEN = 1 initiates a master Stop event. Baud generator starts. Module drives SDA low. 2 - Baud generator times out. Module releases SCL. Baud generator restarts. 3 - Baud generator times out. Module releases SDA. Baud generator restarts. 4 - Slave logic detects Stop. Module sets P = 1, S = 0. 5 - The baud generator times out. Module clears PEN. Master generates interrupt.
3 4
DS70068D-page 21-22
21
21.5.6 Generating Repeated Start Bus Event
Setting the Repeated Start sequence enable bit, RSEN (I2CCON<1>), enables generation of a master Repeated Start sequence (see Figure 21-14). Note: The lower 5 bits of I2CCON must be 0 (master logic inactive) before attempting to set the RSEN bit.
To generate a Repeated Start condition, software sets the RSEN bit (I2CCON<1>). The module asserts the SCL pin low. When the module samples the SCL pin low, the module releases the SDA pin for one baud rate generator count (TBRG). When the baud rate generator times out, if the module samples SDA high, the module de-asserts the SCL pin. When the module samples SCL pin high, the baud rate generator reloads and begins counting. SDA and SCL must be sampled high for one TBRG. This action is then followed by assertion of the SDA pin low for one TBRG while SCL is high. The following is the Repeated Start sequence: The slave detects the Start condition, sets the S bit (I2CSTAT<3>) and clears the P bit (I2CSTAT<4>). The RSEN bit is automatically cleared. The module generates the MI2CIF interrupt. 21.5.6.1 IWCOL Status Flag If the software writes the I2CTRN when a Repeated Start sequence is in progress, then IWCOL is set and the contents of the buffer are ignored. Note: Because queueing of events is not allowed, writing of the lower 5 bits of I2CCON is disabled until the Repeated Start condition is complete.
(S) TBRG
(Q)
1 - Writing RSEN = 1 initiates a master Repeated Start event. Baud generator starts. Module drives SCL low and releases SDA. 2 - Baud generator times out. Module releases SCL. Baud generator restarts. 3 - Baud generator times out. Module drives SDA low. Baud generator restarts. 4 - Slave logic detects Start. Module sets S = 1, P = 0. 5 - The baud generator times out. Module drives SCL low. Module clears RSEN. Master generates interrupt.
3 4
DS70068D-page 21-23
0 00000 0 Bus Idle or WAIT 1 00001 n/a Sending Start Event 2 00000 1 Master Transmitting 3 00010 n/a Sending Repeated Start Event 4 00100 n/a Sending Stop Event 5 01000 n/a Master Reception 6 10000 n/a Master Acknowledgement Note: Example state numbers for reference only. User software may assign as desired. The software will begin a message by issuing a Start command. The software will record the state number corresponding to Start. As each event completes and generates an interrupt, the interrupt handler may check the state number. So, for a Start state, the interrupt handler will confirm execution of the Start sequence and then start a master transmission event to send the I2C device address, changing the state number to correspond to master transmission. On the next interrupt, the interrupt handler will again check the state, determining that a master transmission just completed. The interrupt handler will confirm successful transmission of the data, then move on to the next event, depending on the contents of the message. In this manner, on each interrupt, the interrupt handler will progress through the message protocol until the complete message is sent. Figure 21-15 provides a more detailed examination of the same message sequence of Figure 21-7. Figure 21-16 shows some simple examples of messages using 7-bit addressing format. Figure 21-17 shows an example of a 10-bit address format message sending data to a slave. Figure 21-18 shows an example of a 10-bit address format message receiving data from a slave.
DS70068D-page 21-24
Figure 21-15: Master Message (Typical I2C Message: Read of Serial EEPROM)
SEN
RSEN
RCEN
ACKEN
SDA (Master) SCL (Slave) SDA (Slave) A A11 A10 A9 A8 0 0 0 0 A7A6A5A4 A3A2A1A0 1 0 1 0 A2 A1A0 R A A A
ACKDT
PEN
SCL (Master)
1 2 3 4 5 6 7 8 9
1 0 1 0 A2 A1A0 W
I2CTRN
TBF
I2CRCV
RBF
ACKSTAT
MI2CIF
2 - Writing the I2CTRN register starts a master transmission. The data is the serial EE device address byte, with R/W clear indicating a write.
6 - Writing the I2CTRN register starts a master transmission. The data is a resend of the serial EE device address byte, but with R/W bit set indicating a read. 7 - Setting the RCEN bit starts a master reception. On interrupt, the software reads the I2CRCV register, which clears the RBF flag. 8 - Setting the ACKEN bit starts an Acknowledge event. ACKDT = 1 to send NACK. 9 - Setting the PEN bit starts a master Stop event.
3 - Writing the I2CTRN register starts a master transmission. The data is the first byte of the EE data address.
4 - Writing the I2CTRN register starts a master transmission. The data is the second byte of the EE data address.
DS70068D-page 21-25
21
SEN
RSEN
DS70068D-page 21-26
1 2 3 4 5 6 7 8 9 D7D6D5D4D3D2D1D0 A6A5A4A3A2 A1A0 R 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 N A A A D7D6D5D4D3D2D1D0
RCEN
ACKEN
ACKDT
PEN
1 2 3 4 5 6 7 8 9
A6A5A4A3A2 A1A0 W
SDA (Slave)
I2CTRN
TBF
I2CRCV
RBF
ACKSTAT
MI2CIF
2 - Writing the I2CTRN register starts a master transmission. The data is the address byte with R/W bit clear.
6 - Writing the I2CTRN register starts a master transmission. The data is the address byte with R/W bit set. 7 - Setting the RCEN bit starts a master reception. 8 - Setting the ACKEN bit starts an Acknowledge event. ACKDT = 1 to send NACK. 9 - Setting the PEN bit starts a master Stop event.
3 - Writing the I2CTRN register starts a master transmission. The data is the message byte.
SEN
RSEN
RCEN
ACKEN
ACKDT
PEN
SCL (Master)
1 2 3 4 5 6 7 8 9
SDA (Master)
1 1 1 1 0 A9A8 W
SCL (Slave)
SDA (Slave)
I2CTRN
TBF
I2CRCV
RBF
ACKSTAT
MI2CIF
5 - Writing the I2CTRN register starts a master transmission. The data is the second byte of the message data. 6 - Writing the I2CTRN register starts a master transmission. The data is the third byte of the message data. 7 - Setting the PEN bit starts a master Stop event.
2 - Writing the I2CTRN register starts a master transmission. The data is the first byte of the address.
3 - Writing the I2CTRN register starts a master transmission. The data is the second byte of the address.
DS70068D-page 21-27
4 - Writing the I2CTRN register starts a master transmission. The data is the first byte of the message data.
21
SEN
RSEN
DS70068D-page 21-28
1 2 3 4 5 6 7 8 9 A7A6A5A4A3A2A1A0 1 1 1 1 0 A9A8 R A 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 N A D7D6D5D4D3D2D1D0 A A D7D6D5D4D3D2D1D0
RCEN
ACKEN
ACKDT
1 2 3 4 5 6 7 8 9
SDA (Master)
1 1 1 1 0 A9A8 W
I2CTRN
TBF
I2CRCV
RBF
ACKSTAT
MI2CIF
10
6 - Setting the RCEN bit starts a master reception. On interrupt, the software reads the I2CRCV register, which clears the RBF flag. 7 - Setting the ACKEN bit starts an Acknowledge event. ACKDT = 0 to send ACK. 8 - Setting the RCEN bit starts a master reception. 9 - Setting the ACKEN bit starts an Acknowledge event. ACKDT = 1 to send NACK. 10 - Setting the PEN bit starts a master Stop event.
2 - Writing the I2CTRN register starts a master transmission. The data is the first byte of the address with the R/W bit cleared.
3 - Writing the I2CTRN register starts a master transmission. The data is the second byte of the address.
5 - Writing the I2CTRN register starts a master transmission. The data is a resend of the first byte with the R/W bit set.
21
21.6 Communicating as a Master in a Multi-Master Environment
The I2C protocol allows for more than one master to be attached to a system bus. Remembering that a master can initiate message transactions and generate clocks for the bus, the protocol has methods to account for situations where more than one master is attempting to control the bus. Clock synchronization ensures that multiple nodes can synchronize their SCL clocks to result in one common clock on the SCL line. Bus arbitration ensures that if more than one node attempts a message transaction, one and only one node will be successful in completing the message. The other nodes will lose bus arbitration and be left with a bus collision.
21.6.1
Multi-Master Operation
The master module has no special settings to enable multi-master operation. The module performs clock synchronization and bus arbitration at all times. If the module is used in a single master environment, clock synchronization will only occur between the master and slaves and bus arbitration will not occur.
21.6.2
1 - The baud counter decrements twice per TCY. On rollover, the master SCL will transition. 2 - The slave has pulled SCL low to initiate a wait. 3 - At what would be the master baud counter rollover, detecting SCL low holds counter. 4 - Logic samples SCL once per TCY. Logic detects SCL high. 5 - The baud counter rollover occurs on next cycle. 6 - On next rollover, the master SCL will transition.
DS70068D-page 21-29
21.6.4
DS70068D-page 21-30
21
21.6.5 Bus Collision During a Start Condition
Before issuing a Start command, the software should verify an Idle state of the bus using the S and P status bits. Two masters may attempt to initiate a message at a similar point in time. Typically, the masters will synchronize clocks and continue arbitration into the message until one loses arbitration. However, certain conditions can cause a bus collision to occur during a Start. In this case, the master that loses arbitration during the Start bit generates a bus collision interrupt.
21.6.6
21.6.7
(D) TBRG
(Q) TBRG
(D)
(Q)
SCL (Master) SDA (Master) SCL (Bus) SDA (Bus) BCL TBF MI2CIF Interrupt
1 - Master transmits bit value of 1 in next SCL clock. Module releases SDA. 2 - Another master on bus transmits bit value of 0 in next SCL clock. Another master pulls SDA low. 3 - Baud generator times out. Module attempts to verify SDA high. Bus collision detected. Module releases SDA, SCL. Module sets BCL bit and clears TBF bit. Master generates interrupt.
21.6.8
DS70068D-page 21-31
RA / C WK
A C K
R E S T A AR CR K T
Address Byte
RA / C WK
N A C K
S T O P
S111 1 0AA0 9 8
AAA AA A A A 7 65 43 2 1 0
R 1 1 1 1 0 A A1 9 8
NP
After a Start condition, the slave module will receive and check the device address. The slave may specify either a 7-bit address or a 10-bit address. When a device address is matched, the module will generate an interrupt to notify the software that its device is selected. Based on the R/W bit sent by the master, the slave will either receive or transmit data. If the slave is to receive data, the slave module automatically generates the Acknowledge (ACK), loads the I2CRCV register with the received value currently in the I2CRSR register and notifies the software through an interrupt. If the slave is to transmit data, the software must load the I2CTRN register.
21.7.1
21.7.2
21.7.3
DS70068D-page 21-32
21
Table 21-3: 0x00 0x01-0x03 0x04-0x77 0x78-0x7b 0x7c-0x7f Slave Addresses Suppported by the I2C Module: General call address or start byte Reserved Valid 7-bit addresses Valid 10-bit addresses (lower 7 bits) Reserved
Refer to dsPIC30F Family Reference Manual (DS70046) for descriptions of register bit fields. 21.7.3.1 7-bit Address and Slave Write Following the Start condition, the module shifts 8 bits into the I2CRSR register (see Figure 21-22). The value of register I2CRSR<7:1> is compared to the value of the I2CADD<6:0> register. The device address is compared on the falling edge of the eighth clock (SCL). If the addresses match, the following events occur: 1. 2. 3. 4. An ACK is generated. The D_A and R_W bits are cleared. The module generates the SI2CIF interrupt on the falling edge of the ninth SCL clock. The module will wait for the master to send data.
I2C Bus State SCL (Master) SDA (Master) SDA (Slave) SI2CIF Interrupt R_W D_A ADD10 SCLREL
(S)
(D) (D)
(D) (A)
(Q)
1 - Detecting Start bit enables address detection. 2 - R/W = 0 bit indicates that slave receives data bytes. 3 - Address match of first byte clears D_A bit. Slave generates ACK. 4 - R_W bit cleared. Slave generates interrupt. 5 - Bus waiting. Slave ready to receive data.
A6
A5
A4
A3
A2
A1
A0 R/W =0
DS70068D-page 21-33
Since the slave module is expected to reply with data at this point, it is necessary to suspend the operation of the I 2C bus to allow the software to prepare a response. This is done automatically when the module clears the SCLREL bit. With SCLREL low, the slave module will pull down the SCL clock line, causing a wait on the I 2C bus. The slave module and the I 2C bus will remain in this state until the software writes the I2CTRN register with the response data and sets the SCLREL bit. Note: SCLREL will automatically clear after detection of a slave read address regardless of the state of the STREN bit. Figure 21-23: Slave Read 7-bit Address Detection Timing Diagram
I2C Bus State SCL (Master) SCL (Slave) SDA (Master) SDA (Slave) SI2CIF Interrupt R_W D_A ADD10 SCLREL
(S)
(D) (D)
(D) (A)
(Q)
1 - Detecting Start bit enables address detection. 2 - R/W = 1 bit indicates that slave sends data bytes.
A6
A5
A4
A3
A2
A1
A0 R/W
=1
3 - Address match of first byte clears D_A bit. Slave generates ACK. 4 - R_W bit set. Slave generates interrupt. SCLREL cleared. Slave pulls SCL low while SCLREL = 0. 5 - Bus waiting. Slave prepares to send data.
DS70068D-page 21-34
21
21.7.3.3 10-bit Address In 10-bit Address mode, the slave must receive two device address bytes (see Figure 21-24). The five Most Significant bits (MSbs) of the first address byte specify a 10-bit address. The R/W bit of the address must specify a write, causing the slave device to receive the second address byte. For a 10-bit address the first byte would equal 11110 A9 A8 0, where A9 and A8 are the two MSbs of the address. Following the Start condition, the module shifts 8 bits into the I2CRSR register. The value of register I2CRSR<2:1> is compared to the value of the I2CADD<9:8> register. The value of I2CRSR<7:3> is compared to 11110. The device address is compared on the falling edge of the eighth clock (SCL). If the addresses match, the following events occur: 1. 2. 3. An ACK is generated. The D_A and R_W bits are cleared. The module generates the SI2CIF interrupt on the falling edge of the ninth SCL clock.
The module does generate an interrupt after the reception of the first byte of a 10-bit address, however this interrupt is of little use. The module will continue to receive the second byte into I2CRSR. This time, I2CRSR<7:0> is compared to I2CADD<7:0>. If the addresses match, the following events occur: 1. 2. 3. 4. An ACK is generated. The ADD10 bit is set. The module generates the SI2CIF interrupt on the falling edge of the ninth SCL clock. The module will wait for the master to send data or initiate a Repeated Start condition. Note: Following a Repeated Start condition in 10-bit mode, the slave module only matches the first 7-bit address, 11110 A9 A8 0.
(S)
(D) (D)
(D) (A)
(D) (D)
(D) (A)
(Q)
A7
A6
A5
A4
A3
A2
A1
A0
DS70068D-page 21-35
When the interrupt is serviced, the cause for the interrupt can be checked by reading the contents of the GCSTAT bit to determine if the device address was device specific or a general call address. Note that general call addresses are 7-bit addresses. If A10M bit is set, configuring the slave module for 10-bit addresses and GCEN is set, the slave module continues to detect the 7-bit general call address. Figure 21-25: General Call Address Detection Timing Diagram (GCEN = 1)
I2C Bus State SCL (Master) SDA (Master) SDA (Slave) SI2CIF Interrupt R_W D_A CGSTAT I2CRCV RBF
(S)
(D) (D)
(D) (A)
(Q) 1 - Detecting Start bit enables address detection. 2 - All 0s and R/W = 0 bit indicates general call. 3 - Address match clears D_A bit and sets GCSTAT. Slave generates ACK. Address loaded into I2CRCV. 4 - R_W bit cleared. Slave generates interrupt. 5 - Bus waiting. Slave ready to receive data.
R/W =0
DS70068D-page 21-36
21
21.7.3.5 Receiving All Addresses (IPMI Operation) Some I 2C system protocols require a slave to act upon all messages on the bus. For example, the IPMI (Intelligent Peripheral Management Interface) bus uses I 2C nodes as message repeaters in a distributed network. To allow a node to repeat all messages, the slave module must accept all messages, regardless of the device address. Setting the IPMIEN bit (I2CCON<11>) enables this mode (see Figure 21-26). Regardless of the state of the I2CADD register and the A10M and GCEN bits, all addresses will be accepted. Figure 21-26: IPMI Address Detection Timing Diagram (IPMIEN = 1)
I2C Bus State SCL (Master) SDA (Master) SDA (Slave) SI2CIF Interrupt R_W D_A I2CRCV RBF
R/W
(S)
(D) (D)
(D) (A)
(Q)
1 - Detecting Start bit enables address detection. 2 - Regardless of contents of byte address is matched. Address match clears D_A bit. Slave generates ACK. Address loaded into I2CRCV. 3 - R_W bit set/clear. Slave generates interrupt. 4 - Bus waiting.
21.7.3.6
When an Address is Invalid If a 7-bit address does not match the contents of I2CADD<6:0>, the slave module will return to an Idle state and ignore all bus activity until after the Stop condition. If the first byte of a 10-bit address does not match the contents of I2CADD<9:8>, the slave module will return to an Idle state and ignore all bus activity until after the Stop condition. If the first byte of a 10-bit address matches the contents of I2CADD<9:8>, however, the second byte of the 10-bit address does not match I2CADD<7:0>, the slave module will return to an Idle state and ignore all bus activity until after the Stop condition.
21.7.4
DS70068D-page 21-37
Table 21-4 shows what happens when a data transfer byte is received, given the status of the RBF and I2COV bits. If the RBF bit is already set when the slave module attempts to transfer to the I2CRCV, the transfer does not occur but the interrupt is generated and the I2COV bit is set. If both the RBF and I2COV bits are set, the slave module acts similarly. The shaded cells show the condition where software did not properly clear the overflow condition. Reading the I2CRCV clears the RBF bit. The I2COV is cleared by writing to a 0 through software. Table 21-4: Data Transfer Received Byte Actions Transfer I2CRSR I2CRCV Generate ACK Generate SI2CIF Interrupt (Interrupt occurs if enabled) Set RBF Set I2COV No change Yes Yes No change
0 Yes Yes Yes Yes 0 No No Yes No change 1 No No Yes No change 1 Yes No Yes Yes Shaded cells show state where the software did not properly clear the overflow condition. WAIT States During Slave Receptions
When the slave module receives a data byte, the master can potentially begin sending the next byte immediately. This allows the software controlling the slave module 9 SCL clock periods to process the previously received byte. If this is not enough time, the slave software may want to generate a bus WAIT period. The STREN bit (I2CCON<6>) enables a bus WAIT to occur on slave receptions. When STREN = 1 at the falling edge of the 9th SCL clock of a received byte, the slave module clears the SCLREL bit. Clearing the SCLREL bit causes the slave module to pull the SCL line low, initiating a WAIT. The SCL clock of the master and slave will synchronize, as shown in Section 21.6.2 Master Clock Synchronization. When the software is ready to resume reception, the software sets SCLREL. This causes the slave module to release the SCL line and the master resumes clocking.
DS70068D-page 21-38
21
21.7.4.3 Example Messages of Slave Reception Receiving a slave message is a rather automatic process. The software handling the slave protocol uses the slave interrupt to synchronize to the events. When the slave detects the valid address, the associated interrupt will notify the software to expect a message. On receive data, as each data byte transfers to the I2CRCV register, an interrupt notifies the software to unload the buffer. Figure 21-27 shows a simple receive message. Being a 7-bit address message, only one interrupt occurs for the address bytes. Then, interrupts occur for each of four data bytes. At an interrupt, the software may monitor the RBF, D_A and R_W bits to determine the condition of the byte received. Figure 21-28 shows a similar message using a 10-bit address. In this case, two bytes are required for the address. Figure 21-29 shows a case where the software does not respond to the received byte and the buffer overruns. On reception of the second byte, the module will automatically NACK the master transmission. Generally, this causes the master to resend the previous byte. The I2COV bit indicates that the buffer has overrun. The I2CRCV buffer retains the contents of the first byte. On reception of the third byte, the buffer is still full and again the module will NACK the master. After this, the software finally reads the buffer. Reading the buffer will clear the RBF bit, however the I2COV bit remains set. The software must clear the I2COV bit. The next received byte will be moved to the I2CRCV buffer and the module will respond with a ACK. Figure 21-30 highlights clock stretching while receiving data. Note in the previous examples, STREN = 0 which disables clock stretching on receive messages. In this example, the software sets STREN to enable clock stretching. When STREN = 1, the module will automatically clock stretch after each received data byte, allowing the software more time to move the data from the buffer. Note that if RBF = 1 at the falling edge of the 9th clock, the module will automatically clear the SCLREL bit and pull the SCL bus line low. As shown with the second received data byte, if the software can read the buffer and clear the RBF before the falling edge of the 9th clock, the clock stretching will not occur. The software can also suspend the bus at any time. By clearing the SCLREL bit, the module will pull the SCL line low after it detects the bus SCL low. The SCL line will remain low, suspending transactions on the bus until the SCLREL bit is set.
DS70068D-page 21-39
Figure 21-27: Slave Message (Write Data to Slave: 7-bit Address; Address Matches; A10M = 0; GCEN = 0; IPMIEN = 0)
1 2 3 4 5 6 7 8 9
SDA (Master)
A6A5A4A3A2 A1A0 W
SCL (Slave) A A A A A
SDA (Slave)
I2CRCV
RBF
I2COV
R_W
D_A
STREN
SCLREL
SI2CIF
2 - Slave receives address byte. Address matches. Slave Acknowledges and generates interrupt. Address byte is moved to I2CRCV register and must be read by user software to prevent buffer overflow.
3 - Next received byte is message data. Byte moved to I2CRCV register, sets RBF. Slave generates interrupt. Slave Acknowledges reception.
DS70068D-page 21-40
21
Figure 21-28: Slave Message (Write Data to Slave: 10-bit Address; Address Matches; A10M=1; GCEN=0; IPMIEN=0)
1 2 3 4 5 6 7 8 9
SDA (Master)
1 1 1 1 0 A9A8 W
DS70068D-page 21-41
A A A A A SI2CIF cleared by user software.
SCL (Slave)
SDA (Slave)
I2CRCV
RBF
I2COV
R_W
D_A
STREN
SCLREL
SI2CIF
4 - Next received byte is message data. Byte moved to I2CRCV register, sets RBF. Slave Acknowledges and generates interrupt. 5 - Software reads I2CRCV register. RBF bit clears. 6 - Slave recognizes Stop event, S and P bits set/clear accordingly.
2 - Slave receives address byte. High order address matches. Slave Acknowledges and generates interrupt. Address byte not moved to I2CRCV register.
3 - Slave receives address byte. Low order address matches. Slave Acknowledges and generates interrupt. Address byte not moved to I2CRCV register.
Figure 21-29: Slave Message (Write Data to Slave: 7-bit Address; Buffer Overrun; A10M = 0; GCEN = 0; IPMIEN = 0)
1 2 3 4 5 6 7 8 9
SDA (Master)
A6A5A4A3A2 A1A0 W
DS70068D-page 21-42
A N N A A SI2CIF cleared by user software.
SCL (Slave)
SDA (Slave)
I2CRCV
RBF
I2COV
R_W
D_A
STREN
SCLREL
SI2CIF
1 - Slave receives address byte. Address matches. Slave generates interrupt. Address byte not moved to I2CRCV register.
4 - Next byte also received before I2CRCV read by software. I2CRCV register unchanged. Slave generates interrupt. Slave sends NACK for reception. 6 - Software reads I2CRCV register. RBF bit clears. 7 - Software clears I2COV bit.
2 - Next received byte is message data. Byte moved to I2CRCV register, sets RBF. Slave generates interrupt. Slave Acknowledges reception.
3 - Next byte received before I2CRCV read by software. I2CRCV register unchanged. I2COV overflow bit set. Slave generates interrupt. Slave sends NACK for reception.
Figure 21-30: Slave Message (Write Data to Slave: 7-bit Address; Clock Stretching Enabled; A10M = 0; GCEN = 0; IPMIEN = 0)
1 2 3 4 5 6 7 8 9
SDA (Master)
A6A5A4A3A2 A1A0 W
SCL (Slave) A A A A
SDA (Slave)
2005 Microchip Technology Inc. 2 3 4 5 6 3 5 7 8 9 3 5 6 - Software sets SCLREL bit to release clock. 7 - Slave does not clear SCLREL because RBF = 0 at this time. 8 - Software may clear SCLREL to cause a clock hold. Module must detect SCL low before asserting SCL low. 9 - Software may set SCLREL to release a clock hold.
I2CTRN
TBF
I2CRCV
RBF
I2COV
R_W
D_A
STREN
SCLREL
SI2CIF
3 - Next received byte is message data. Byte moved to I2CRCV register, sets RBF.
4 - Because RBF = 1 at 9th clock, automatic clock stretch begins. Slave clears SCLREL bit. Slave pulls SCL line low to stretch clock.
DS70068D-page 21-43
21
DS70068D-page 21-44
Figure 21-31: Slave Message (Read Data from Slave: 7-bit Address)
SCL (Master) 1 2 3 4 5 6 7 8 9 A N A 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
SDA (Master)
A6A5A4A3A2 A1A0 R
SDA (Slave)
2005 Microchip Technology Inc. 2 3 4 5 6 3 4 5 6 3 4 5 7 8 5 - After last bit, module clears TBF bit indicating buffer is available for next byte. 8 - Slave recognizes Stop event, S and P bits set/clear accordingly.
I2CTRN
TBF
I2CRCV
RBF
I2COV
R_W
D_A
STREN
SCLREL
SI2CIF
2 - Slave receives address byte. Address matches. Slave generates interrupt. Address byte not moved to I2CRCV register. R_W = 1 to indicate read from slave. SCLREL = 0 to suspend master clock.
6 - At end of 9th clock, if master sent ACK, module clears SCLREL to suspend clock. Slave generates interrupt. 7 - At end of 9th clock, if master sent NACK, no more data expected. Module does not suspend clock and will generate an interrupt.
3 - Software writes I2CTRN with response data. TBF = 1 indicates that buffer is full. Writing I2CTRN sets D_A, indicating data byte.
DS70068D-page 21-45
4 - Software sets SCLREL to release clock hold. Master resumes clocking and slave transmits data byte.
21
Figure 21-32: Slave Message (Read Data from Slave: 10-bit Address)
1 2 3 4 5 6 7 8 9
SDA (Master)
1 1 1 1 0 A9A8 W
DS70068D-page 21-46
A D7D6D5D4D3D2D1D0 A A D7D6D5D4D3D2D1D0
SCL (Slave)
SDA (Slave)
I2CTRN
TBF
I2CRCV
RBF
ADD10
R_W
D_A
STREN
SCLREL
SI2CIF
9 7 - Software sets SCLREL to release clock hold. Master resumes clocking and slave transmits data byte.
10
2 - Slave receives first address byte. Write indicated. Slave Acknowledges and generates interrupt.
3 - Slave receives address byte. Address matches. Slave Acknowledges and generates interrupt.
8 - At end of 9th clock, if master sent ACK, module clears SCLREL to suspend clock. Slave generates interrupt. 9 - At end of 9th clock, if master sent NACK, no more data expected. Module does not suspend clock or generate interrupt. 10 - Slave recognizes Stop event, S and P bits set/clear accordingly.
5 - Slave receives resend of first address byte. Read indicated. Slave suspends clock.
21
21.8 Connection Considerations for I2C Bus
By definition of the I2C bus being a wired AND bus connection, pull-up resistors on the bus are required, shown as RP in Figure 21-33. Series resistors, shown as RS are optional and used to improve ESD susceptibility. The values of resistors RP and RS depend on the following parameters: Supply voltage Bus capacitance Number of connected devices (input current + leakage current)
Because the device must be able to pull the bus low against RP, current drawn by RP must be greater than the I/O pin minimum sink current IOL of 3 mA at VOL(MAX) = 0.4V for the device output stage. For example, with a supply voltage of VDD = 5V +10%: RP(MIN) = (VDD(MAX) VOL(MAX)) / IOL = (5.5-0.4) / 3 mA = 1.7 k In a 400 kHz system, a minimum rise time specification of 300 nsec exists and in a 100 kHz system, the specification is 1000 nsec. Because RP must pull the bus up against the total capacitance CB with a maximum rise time of 300 nsec to 0.7 VDD, the maximum resistance for RP must be less than: RP(MAX) = -tR / CB * ln(1 (VIL(MAX) VDD(MAX)) = -300 nsec / (100pf * ln(1-0.7)) = 2.5 k The maximum value for RS is determined by the desired noise margin for the low level. RS cannot drop enough voltage to make the device VOL plus voltage across RS more than the maximum VIL. Rs(MAX) = (VIL(MAX) VOL(MIN)) / IOL(MAX) = (0.3 VDD-0.4) / 3 mA = 366 The SCL clock input must have a minimum high and low time for proper operation. The high and low times of the I2C specification as well as the requirements of the I2C module, are shown in the Electrical Specifications section in the specific device data sheet. Figure 21-33: Sample Device Configuration for I2C Bus
VDD + 10%
RP
RP
Device
RS
RS
Note:
I2C devices with input levels related to VDD must have one common supply line to which the pull-up resistor is also connected.
DS70068D-page 21-47
DS70068D-page 21-48
21
21.9 21.9.1 Module Operation During PWRSAV Instruction When the Device Enters Sleep Mode
When the device executes a PWRSAV 0 instruction, the device enters Sleep mode. When the device enters Sleep mode, the master and slave module abort any pending message activity and reset the state of the modules. Any transmission/reception that is in progress will not continue when the device wakes from Sleep. After the device returns to Operational mode, the master module will be in an Idle state waiting for a message command and the slave module will be waiting for a Start condition. During Sleep, the IWCOL, I2COV and BCL bits are cleared. Additionally, because the master functions are aborted, the SEN, RSEN, PEN, RCEN, ACKEN and TRSTAT bits are cleared. TBF and RBF are cleared and the buffers are available at wake-up. There is no automatic method to prevent Sleep entry if a transmission or reception is active or pending. The software must synchronize Sleep entry with I2C operation to avoid aborted messages. During Sleep, the slave module will not monitor the I2C bus. Thus, it is not possible to generate a wake-up event based on the I2C bus using the I2C module. Other interrupt inputs, such as the interrupt-on-change inputs can be used to detect message traffic on a I2C bus and cause a device wake-up.
21.9.2
21.10
Effects of a Reset
A Reset disables the I2C module and terminates any active or pending message activity. See the register definitions of I2CCON and I2CSTAT for the Reset conditions of those registers. Note: In this discussion, Idle refers to the CPU power saving state. The lower-case idle refers to the time when the I2C module is not transferring data on the bus.
DS70068D-page 21-49
Answer: The master and slave circuits are independent. The slave module will receive events from the bus sent by the master. Question 2: Im operating as a slave and I write data to the I2CTRN register, but the data did not transmit.
Answer: The slave enters an automatic wait when preparing to transmit. Ensure that you set the SCLREL bit to release the I2C clock. Question 3: How do I tell what state the master module is in?
Answer: Looking at the condition of SEN, RSEN, PEN, RCEN, ACKEN and TRSTAT bits will indicate the state of the master module. If all bits are 0, the module is Idle. Question 4: Operating as a slave, I receive a byte while STREN = 0. What should the software do if it cannot process the byte before the next one is received?
Answer: Because STREN was 0, the module did not generate an automatic WAIT on the received byte. However, the software may, at any time during the message, set STREN then clear SCLREL. This will cause a WAIT on the next opportunity to synchronize the SCL clock. Question 5: My I 2C system is a multi-master system. When I attempt to send a message, it is being corrupted.
Answer: In a multi-master system, other masters may cause bus collisions. In the Interrupt Service Routine for the master, check the BCL bit to ensure that the operation completed without a collision. If a collision is detected, the message must be resent from the beginning. Question 6: My I 2C system is a multi-master system. How can I tell when it is OK to begin a message?
Answer: Look at the S and P bits. If S = 0 and P = 0 the bus is Idle. If S = 0 and P = 1, the bus is Idle. Question 7: I tried to send a Start condition on the bus, then transmit a byte by writing to the I2CTRN register. The byte did not get transmitted. Why?
Answer: You must wait for each event on the I2C bus to complete before starting the next one. In this case, you should poll the SEN bit to determine when the Start event completed, or wait for the master I2C interrupt before data is written to I2CTRN.
DS70068D-page 21-50
21
21.12 Related Application Notes
This section lists application notes that are related to this section of the manual. These application notes may not be written specifically for the dsPIC30F Product Family, but the concepts are pertinent and could be used with modification and possible limitations. The current application notes related to the Inter-Integrated Circuit (I2C) module are: Title Use of the SSP Module in the I C Multi-Master Environment Using the PICmicro SSP for Slave I2C Communication Using the PICmicro MSSP Module for Master I2C Communications An I2C Network Protocol for Environmental Monitoring
2
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70068D-page 21-51
Revision B
This revision has been expanded to contain a full description of the dsPIC30F Inter-Integrated Circuit (I2C) module.
Revision C
This revision incorporates all known errata at the time of this document update.
DS70068D-page 21-52
22
Data Converter Interface (DCI)
DS70069C-page 22-1
22.2
In addition to these Control and Status registers, there are four Transmit registers, TXBUF0....TXBUF3, and four Receive registers, RXBUF0....RXBUF3.
DS70069C-page 22-2
Lower Byte: R/W-0 R/W-0 UNFM CSDOM bit 7 bit 15 DCIEN: DCI Module Enable bit 1 = Module is enabled 0 = Module is disabled Reserved: Read as 0
R/W-0 DJST
U-0
U-0
U-0
22
Data Converter Interface (DCI)
bit 14 bit 13
DCISIDL: DCI Stop in Idle Control bit 1 = Module will halt in CPU Idle mode 0 = Module will continue to operate in CPU Idle mode Reserved: Read as 0 DLOOP: Digital Loopback Mode Control bit 1 = Digital Loopback mode is enabled. CSDI and CSDO pins internally connected. 0 = Digital Loopback mode is disabled CSCKD: Sample Clock Direction Control bit 1 = CSCK pin is an input when DCI module is enabled 0 = CSCK pin is an output when DCI module is enabled CSCKE: Sample Clock Edge Control bit 1 = Data changes on serial clock falling edge, sampled on serial clock rising edge 0 = Data changes on serial clock rising edge, sampled on serial clock falling edge COFSD: Frame Synchronization Direction Control bit 1 = COFS pin is an input when DCI module is enabled 0 = COFS pin is an output when DCI module is enabled UNFM: Underflow Mode bit 1 = Transmit last value written to the Transmit registers on a transmit underflow 0 = Transmit 0s on a transmit underflow CSDOM: Serial Data Output Mode bit 1 = CSDO pin will be tri-stated during disabled transmit time slots 0 = CSDO pin drives 0s during disabled transmit time slots DJST: DCI Data Justification Control bit 1 = Data transmission/reception is begun during the same serial clock cycle as the frame synchronization pulse 0 = Data transmission/reception is begun one serial clock cycle after frame synchronization pulse Reserved: Read as 0 COFSM<1:0>: Frame Sync Mode bits 11 = 20-bit AC-Link mode 10 = 16-bit AC-Link mode 01 = I2S Frame Sync mode 00 = Multi-Channel Frame Sync mode Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 12 bit 11
bit 10
bit 9
bit 8
bit 7
bit 6
bit 5
DS70069C-page 22-3
Lower Byte: R/W-0 R/W-0 R/W-0 COFSG<2:0> bit 7 bit 15-12 Reserved: Read as 0
U-0
R/W-0
R/W-0 bit 0
bit 11-10 BLEN<1:0>: Buffer Length control bits 11 = Four data words will be buffered between interrupts 10 = Three data words will be buffered between interrupts 01 = Two data words will be buffered between interrupts 00 = One data word will be buffered between interrupts bit 9 bit 8-5 Reserved: Read as 0 COFSG<3:0>: Frame Sync Generator control bits 1111 = Data frame has 16 words || 0010 = Data frame has 3 words 0001 = Data frame has 2 words 0000 = Data frame has 1 word Reserved: Read as 0 WS<3:0>: DCI Data Word Size bits 1111 = Data word size is 16 bits || 0100 = Data word size is 5 bits 0011 = Data word size is 4 bits 0010 = Invalid Selection. Do not use. Unexpected results may occur. 0001 = Invalid Selection. Do not use. Unexpected results may occur. 0000 = Invalid Selection. Do not use. Unexpected results may occur. Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70069C-page 22-4
R/W-0
R/W-0
R/W-0
R/W-0 bit 0
22
Data Converter Interface (DCI)
DS70069C-page 22-5
U-0
U-0
U-0
R-0 ROV
R-0 RFUL
R-0 TUNF
bit 2
bit 1
bit 0
DS70069C-page 22-6
R/W-0 RSE5
R/W-0 RSE4
R/W-0 RSE3
R/W-0 RSE2
R/W-0 RSE1
22
Data Converter Interface (DCI)
RSE<15:0>: Receive Slot Enable bits 1 = CSDI data is received during the individual time slot n 0 = CSDI data is ignored during the individual time slot n Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
Register 22-6:
TSCON R/W-0 TSE13 R/W-0 TSE12 R/W-0 TSE11 R/W-0 TSE10 R/W-0 TSE9 R/W-0 TSE8 bit 8
R/W-0 TSE5
R/W-0 TSE4
R/W-0 TSE3
R/W-0 TSE2
R/W-0 TSE1
TSE<15:0>: Transmit Slot Enable Control bits 1 = Transmit buffer contents are sent during the individual time slot n 0 = CSDO pin is tri-stated or driven to logic 0 during the individual time slot, depending on the state of the CSDOM bit Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70069C-page 22-7
Figure 22-1:
Controller
External Controller is Master Note: Codec oscillator circuit generates SCK signal.
DS70069C-page 22-8
22
Data Converter Interface (DCI)
SCK FS SDI or SDO Time Slot 0 Time Slot 1 Time Slot 2 Time Slot 3
The timing for a typical data transfer with daisy-chained devices is shown in Figure 22-3. This example uses a 16 fs SCK frequency and transfers two 8-bit data words per frame. After the FS pulse is detected, the first device in the chain transfers the first 8-bit data word and generates the FSO signal at the end of the transfer. The FSO signal begins the transfer of the second data word from the second device in the chain. Figure 22-3: DAISY-CHAINED DATA TRANSFER EXAMPLE
Data Frame Period (1/fs)
DS70069C-page 22-9
22.4
DCI Operation
A simplified block diagram of the module is shown in Figure 22-4. The module consists of a Transmit/Receive Shift register that is connected to a small range of memory buffers via a buffer control unit. This arrangement allows the DCI to support various codec serial protocols. The DCI Shift register is 16-bits wide. Data is transmitted and received by the DCI MSbit first.
Figure 22-4:
COFSD WS<3:0> COFSG<3:0> COFSM<1:0> 16-bit Data Bus Frame Synchronization Generator COFS
0 CSDI
CSDO
DS70069C-page 22-10
22
Data Converter Interface (DCI)
22.4.2
Module Enable
The DCI module is enabled or disabled by setting/clearing the DCIEN control bit (DCICON1<15>). Clearing the DCIEN control bit has the effect of resetting the module. In particular, all counters associated with serial clock generation, frame sync, and the buffer control logic are reset (see Section 22.5.1.1 DCI Start-up and Data Buffering and Section 22.5.1.2 DCI Disable for additional information). When enabled, the DCI controls the data direction for the CSCK, CSDI, CSDO and COFS I/O pins associated with the module. The PORT, LAT, and TRIS register values for these I/O pins are overridden by the DCI module when the DCIEN bit is set. It is also possible to override the CSCK pin separately when the bit clock generator is enabled. This permits the bit clock generator to be operated without enabling the rest of the DCI module.
DS70069C-page 22-11
When the CSCK pin is controlled by the DCI module, the corresponding PORT, LAT and TRIS Control register values for the CSCK pin will be overridden and the data direction for the CSCK pin will be controlled by the CSCKD control bit (DCICON1<10>). If the serial clock for the DCI is to be provided by an external device, the BCG<11:0> bits should be set to 0 and the CSCKD bit set to 1. If the serial clock is to be generated by the DCI module, the BCG<11:0> control bits should be set to a non-zero value (see Equation 22-1) and the CSCKD control bit should be set to zero. The formula for the bit clock frequency is given in Equation 22-1. Equation 22-1: DCI Bit Clock Generator Value BCG<11:0> = fCY 2 fCSCK 1
The required bit clock frequency will be determined by the system sampling rate and frame size. Typical bit clock frequencies range from 16x to 512x the converter sample rate, depending on the data converter and the communication protocol that is used. Note: The BCG<11:0> bits have no effect on the operation of the DCI module when the CSCK signal is provided externally (CSCKD = 1).
22.4.4
22.4.5
22.4.6
DS70069C-page 22-12
Frame lengths up to 16 data words may be selected. The frame length in serial clock periods will vary up to a maximum of 256 depending on the word size that is selected. Note: The COFSG control bits will have no effect in AC-Link mode, since the frame length is set to 256 serial clock periods by the protocol.
22
Data Converter Interface (DCI)
22.4.8
22.4.8.1
Buffer Data Alignment Data values are always stored left-justified in the DCI registers, since audio PCM data is represented as a signed 2s complement fractional number. If the programmed DCI word size is less than 16 bits, the unused LSbs in the Receive registers are set to 0 by the module. Also, the unused LSbs in the Transmit register are ignored by the module.
22.4.8.2
Transmit and Receive Buffers The Transmit and Receive registers each have a set of buffers that are not accessible by the user. Effectively, each transmit and receive buffer location is double-buffered. The DCI transmits data from the transmit buffers and writes received data to the receive buffers. The buffers allow the user to read and write the RXBUF and TXBUF registers, while the DCI uses data from the buffers.
22.4.9
The DCI buffer control unit will also reset the buffer pointer to the first buffer location each time a frame boundary is reached. This action ensures alignment between the buffer locations and the enabled time slots in the data frame. The DCI buffer control unit always accesses the same relative location in the Transmit and Receive buffers. If the DCI is transmitting data from TXBUF3, for example, then any data received during that time slot will be written to RXBUF3.
DS70069C-page 22-13
Buffer Control
Receive Buffer
22.4.10
22.4.10.1 CSDO Mode Control During disabled transmit time slots, the CSDO pin can drive 0s or can be tri-stated, depending on the state of the CSDOM bit (DCICON1<6>). A given transmit time slot is disabled if its corresponding TSEx bit is cleared in the TSCON register. If the CSDOM bit is cleared (default), the CSDO pin will drive 0s onto the CSDO pin during disabled time slot periods. This mode is used when there are only two devices (1 master and 1 slave) attached to the serial bus. If the CSDOM bit is set, the CSDO pin will be tri-stated during unused time slot periods. This mode allows multiple dsPIC30F devices to share the same CSDO line in a multiplexed application. Each device on the CSDO line is configured so that it will only transmit data during specific time slots. No two devices should transmit data during the same time slot.
DS70069C-page 22-14
22.4.12
22
Data Converter Interface (DCI)
TXBUF3
RXBUF3
Note: User writes to TXBUF0 and TXBUF2. TXBUF1 and TXBUF3 not used by transmit logic.
22.4.13
DS70069C-page 22-15
22.4.15
22.4.16
22.4.17
22.4.18
22.4.19
DS70069C-page 22-16
22.5.1
How to Transmit and Receive Data Using the DCI Buffers, Status Bits and Interrupts
The DCI can buffer up to four data words between CPU interrupts depending on the setting of the BLEN control bits. The buffered data can be transmitted and received in a single data frame, or across multiple data frames, depending on the TSCON and RSCON register settings. For example, assume BLEN<1:0> = 00b ( buffer one data word per interrupt) and TSCON = RSCON = 0x0001. This particular configuration represents the most basic setup and would cause the DCI to transmit/receive one data word at the beginning of every data frame. The CPU would be interrupted after every data word transmitted/received since BLEN<1:0> = 00b. For a second configuration example, assume BLEN<1:0> = 11b (buffer four data words per interrupt) and TSCON = RSCON = 0x0001. This configuration would cause the DCI to transmit/receive one data word at the beginning of every data frame, but a CPU interrupt would be generated after four data words were transmitted/received. This configuration would be useful for block processing, where multiple data samples are processed at once. For a third configuration example, assume BLEN<1:0> = 11b (buffer four data words per interrupt) and TSCON = RSCON = 0x000F. This configuration would cause the DCI to transmit/receive four data words at the beginning of every data frame. A CPU interrupt would be generated every data frame in this case because the DCI was setup to buffer four data words in a data frame. This configuration represents a typical multi-channel buffering setup. The DCI can also be configured to buffer more than four data words per frame. For example, assume BLEN<1:0> = 11b (buffer four data words per interrupt) and TSCON = RSCON = 0x00FF. In this configuration, the DCI will transmit/receive 8 data words per data frame. An interrupt will be generated twice per data frame. To determine which portion of the data is in the Transmit/Receive registers at each interrupt, the user will need to check the SLOT status bits (DCISTAT <11:7>) in the Interrupt Service Routine to determine the current data frame position. The Transmit and Receive registers are double-buffered, so the DCI module can work on one set of Transmit and Receive data while the user software is manipulating the other set of data. Because of the double-buffers, it will take three interrupt periods to receive the data, process that data, and transmit the processed data. For each DCI interrupt, the CPU will process a data word that was received during a prior interrupt period and generate a data word that will be transmitted during the next interrupt period. The buffering and data processing time of the dsPIC device will insert a two-interrupt period delay into the processed data. This data delay is negligible, in most cases. The DCI status flags and CPU interrupt indicate that a buffer transfer has taken place and that it is time for the CPU to process more data. In a typical application, the following steps will occur each time the DCI data is processed: 1. The RXBUF registers are read by the user software. The RFUL status bit (DCISTAT<2>) will have been set by the module to indicate the Receive registers contain new data. The RFUL bit is cleared automatically after all the active Receive registers have been read. The user software will process the received data. The processed data is written to the TXBUF registers. The TMPTY status bit (DCISTAT<0>) will have been previously set to indicate that the Transmit registers are ready for more data to be written.
22
Data Converter Interface (DCI)
2. 3.
For applications that are configured to Transmit and Receive data (TSCON and RSCON are non-zero), the RFUL and TMPTY status bits can be polled in user software to determine when a DCI buffer transfer takes place. If the DCI is only used to transmit data (RSCON = 0), then the TMPTY bit can be polled to indicate a buffer transfer. If the DCI is configured to only receive data (TSCON = 0), then the RFUL bit can be polled to indicate a buffer transfer. The DCIIF status bit (IFS2<9>) is set each time a DCI buffer transfer takes place and generates a CPU interrupt, if enabled. The DCIIF status bit is generated by the logical ORing of the RFUL and TMPTY status bits.
DS70069C-page 22-17
2.
3.
4.
5. 6.
7. Figure 22-7:
CSCK Data COFS DCIEN TMPTY TXBUF RFUL RXBUF DCIIF
Word 1
Word 2
TX Word 1
TX Word 2
TX Word 3
DS70069C-page 22-18
22
Data Converter Interface (DCI)
WS = 0011b
COFSG = 0011b
CSCK Data COFS DCIEN SLOT RFUL Receive buffer contents transferred to RXBUF. 0011 0000 0001 0010 0011 0000 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0
DS70069C-page 22-19
22.5.3
TXBUF3
DS70069C-page 22-20
22
Data Converter Interface (DCI)
Data
MSB
LSB
22.5.4.1
Multi-Channel Setup Details The steps required to configure the DCI for a codec using the Multi-Channel mode are provided in this section. This Operating mode can be used for codecs with one or more data channels. The setup is similar regardless of the number of channels. For this setup example, a hypothetical codec will be considered. The single channel codec used for this setup example will use a 256 fs serial clock frequency with a 16-bit data word transmitted at the beginning of each frame. The steps required for setup and operation are described below. 1. 2. Determine the sample rate and data word size required by the codec. An 8 kHz sampling rate is assumed for this example. Determine the serial transfer clock frequency required by the codec. Most codecs require a serial clock signal that is some multiple of the sampling frequency. The example codec requires a frequency that is 256 fs, or 1.024 MHz. Therefore, a frame sync pulse must be generated every 256 serial clock cycles to start a data transfer. The DCI must be configured for the serial transfer clock. If the CSCK signal will be generated by the DCI, clear the CSCKD control bit (DCICON1<10>) and write a value to DCICON3 that will produce the correct clock frequency (See Section 22.4.3 Bit Clock Generator). If the CSCK signal is generated by the codec or other external source, set the CSCKD control bit and clear the DCICON3 register. Clear the COFSM<1:0> control bits (DCICON1<1:0>) to set the frame synchronization signal to Multi-Channel mode. If the DCI will generate the frame sync signal (master), then clear the COFSD control bit (DCICON1<8>). If the DCI will receive the frame sync signal (slave), then set the COFSD control bit. Clear the CSCKE control bit (DCICON1<9>) to sample incoming data on the falling edge of CSCK. This is the typical configuration for most codecs. Refer to the codec data sheet to ensure the correct sampling edge is used. Write the WS<3:0> control bits (DCICON2<3:0>) for the desired data word size. The example codec requires WS<3:0> = 1111b for a 16-bit data word size.
3.
4. 5.
6.
7.
DS70069C-page 22-21
9.
10.
11.
12. 13.
22.5.5
I2S Operation
The I2S Operating mode is used for codecs that require a frame sync signal that has a 50% duty cycle. The period of the I2S frame sync signal in serial clock cycles is determined by the word size of the codec that is connected to the DCI module. The start of a new word boundary is marked by a high-to-low or a low-to-high transition edge on the COFS pin as shown in Figure 22-11. I2S codecs are generally stereo or two-channel devices, with one data word transferred during the low time of the frame sync signal and the other data word transmitted during the high time. Figure 22-11: I2S Interface Frame Sync Timing
Frame Synch Edge Sampled First Data Bit Sampled
COFS
Note: A 5-bit transfer is shown here for illustration purposes. The I2S protocol does not specify word length, this will be system dependent.
The DCI module is configured for I2S mode by writing a value of 01h to the COFSM<1:0> control bits in the DCICON1 SFR. When operating in the I2S mode, the DCI module will generate frame synchronization signals with a 50% duty cycle. Each edge of the frame synchronization signal marks the boundary of a new data word transfer. Refer to the Appendix of this manual for more information about the I2S protocol. The user must also select the frame length and data word size using the COFSG and WS control bits in the DCICON2 SFR.
DS70069C-page 22-22
22
Data Converter Interface (DCI)
4. 5.
6. 7. 8.
9.
10.
11.
12. 13.
Set the Output mode for the CSDO pin using the CSDOM control bit (DCICON1<6>). If a single device is attached to the DCI, CSDOM can be cleared. You may need to set CSDOM if multiple devices are attached to the CSDO pin. Write the TSCON and RSCON registers to determine which data time slots in the frame are to be transmitted and received, respectively. For this codec, set TSCON = 0x0001 and RSCON = 0x0001 to enable transmission and reception during the first 16-bit time slot of the 32-bit data frame. Adjacent time slots can be enabled to buffer data words longer than 16 bits. Set the BLEN<1:0> control bits (DCICON2<11:10>) to buffer the desired amount of data words. For a two-channel I2S codec, BLEN<1:0> = 01b will generate an interrupt after transferring two data words. If interrupts are to be used, clear the DCIIF status bit (IFS2<9>) and set the DCIIE control bit (IEC2<9>). Begin operation as described in Section 22.5.1.1 DCI Start-up and Data Buffering. In the I2S Master mode, the COFS pin will be driven high after the module is enabled and begin transmitting the data loaded in TXBUF0.
DS70069C-page 22-23
SCK WS SDI
DS70069C-page 22-24
22
Data Converter Interface (DCI)
7 6
5 4 3
2 1
0 7 6
5 4 3
2 1
0 7 6
5 4 3
2 1
0 7 6
5 4 3
2 1
22.5.6
AC-Link Operation
This section describes how to use the DCI in the AC-Link modes. The AC-Link modes are used to communicate with AC-97 compliant codec devices.
22.5.6.1
AC-Link Data Frame The AC-Link data frame is 256 bits subdivided into one 16-bit control slot, followed by twelve 20-bit data slots. The AC-97 codec usually provides the serial transfer clock signal which is derived from a crystal oscillator as shown in Figure 22-14. The controller receives the serial clock and generates the frame sync signal. The default data frame rate is 48 kHz. The frame sync signal used for AC-Link systems is high for 16 CSCK periods at the beginning of the data frame and low for 240 CSCK periods. The data transfer begins one CSCK period after the rising edge of the frame sync signal as shown in Figure 22-16. Data is sampled by the receiving device on the falling edge of CSCK. The control and data time slots in the AC-Link have defined uses in the protocol as shown in Figure 22-15. Refer to the Appendix of this manual or the Intel AC 97 Codec Specification, Rev 2.2 for a complete definition of the AC-Link protocol.
DS70069C-page 22-25
I/O
SYNC
SDATA_OUT
Tag Frame
Command Address
Command Data
SDATA_IN
Tag Frame
Status Address
Status Data
CSCK S12 bit 2 S12 bit 1 S12 LSb Tag Tag Tag MSb bit 14 bit 13
Data
COFS
The DCI module has two Operating modes for the AC-Link protocol to accommodate the 20-bit data time slots. These Operating modes are selected by the COFSM<1:0> control bits (DCICON1<1:0>). The first AC-Link mode is called 16-bit AC-Link mode and is selected by setting COFSM<1:0> = 10b. The second AC-Link mode is called 20-bit AC-Link mode and is selected by setting COFSM<1:0> = 11b.
DS70069C-page 22-26
22
Data Converter Interface (DCI)
The DCI must be configured to accept the serial transfer clock from the AC 97 codec. Set the CSCKD control bit and clear the DCICON3 register. Next, set the COFSM<1:0> control bits (DCICON1<1:0>) to 10b or 11b to set the desired AC-Link Frame Synchronization mode. Clear the COFSD control bit (DCICON1<8>), so the DCI will output the frame sync signal. Clear the CSCKE control bit (DCICON1<9>) to sample incoming data on the falling edge of CSCK. Note: The word size selection bits (WS<3:0>) and the frame synchronization generator bits (COFSG<3:0>) have no effect for the 16- and 20-bit AC-Link modes, since the frame and word sizes are set by the protocol.
DS70069C-page 22-27
7.
8. 9.
22.6 22.6.1
22.6.2
Sleep Mode
The DCI will not operate while the device is in Sleep mode if the CSCK signal is derived from the device instruction clock, TCY. However, the DCI module has the ability to operate while in Sleep mode and wake the CPU when the CSCK signal is supplied by an external device (CSCKD = 1). The DCI interrupt enable bit, DCIIE, must be set to allow a wake-up event from Sleep mode. When the DCI interrupt flag, DCIIF is set, the device will wake from Sleep mode. If the DCI interrupt priority level is greater than the current CPU priority, program execution will resume from the DCI ISR. Otherwise, execution will resume with the instruction following the PWRSAV instruction that previously entered Sleep mode.
22.7
DS70069C-page 22-28
Table 22-1:
Bit 13 FLTAIP<2:0> TSE13 RSE13 Receive #0 Data Register Receive #1 Data Register Receive #2 Data Register Receive #3 Data Register Transmit #0 Data Register Transmit #1 Data Register Transmit #2 Data Register Transmit #3 Data Register RSE12 RSE11 RSE10 RSE9 RSE8 RSE7 RSE6 RSE5 RSE4 RSE3 RSE2 RSE1 TSE12 TSE11 TSE10 TSE9 TSE8 TSE7 TSE6 TSE5 TSE4 TSE3 TSE2 TSE1 SLOT<3:0> ROV RFUL TUNF TSE0 RSE0 BCG<11:0> TMPTY BLEN<1:0> COFSG<3:0> WS<3:0> DCISIDL DLOOP CSCKD CSCKE COFSD UNFM SDOM DJST COFSM<1:0> LVDIP<2:0> DCIIP<2:0> QEIIP<2:0> FLTBIE FLTAIE LVDIE DCIIE QEIIE PWMIE C2IE INT4IE INT3IE OC8IE OC7IE OC6IE OC5IE FLTBIF FLTAIF LVDIF DCIIF QEIIF PWMIF C2IF INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF 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
Name
Address
Bit 15
Bit 14
IFS2
0088
IEC2
0090
IPC10
00A8
DCICON1
240
DCIEN
DCICON2
242
DCICON3
244
DCISTAT
246
TSCON
248
TSE15
TSE14
RSCON
24C
RSE15
RSE14
RXBUF0
250
RXBUF1
252
RXBUF2
254
RXBUF3
256
TXBUF0
258
TXBUF1
25A
TXBUF2
25C
TXBUF3
25E
Note:
Grayed locations indicate reserved space in SFR map for future module expansion. Read reserved locations as 0s.
DS70069C-page 22-29
22
Answer: Yes. A long data word can be transmitted and received using multiple Transmit and Receive registers. See Section 22.5.3 Data Packing for Long Data Word Support for details.
DS70069C-page 22-30
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
22
Data Converter Interface (DCI)
DS70069C-page 22-31
Revision B
This revision incorporates additional technical content and changes for the dsPIC30F Data Converter Interface (DCI) module.
Revision C
This revision incorporates all known errata at the time of this document update.
DS70069C-page 22-32
23
CAN Module
DS70070C-page 23-1
CAN bus
MCP2551 Transceiver
MCP2551 Transceiver
MCP2551 Transceiver
MCP2551 Transceiver
23.2
DS70070C-page 23-2
bit 14 bit 13
bit 12
23
CAN Module
bit 11
bit 10-8
bit 7-5
bit 4
DS70070C-page 23-3
ICODE<2:0>: Interrupt Flag Code bits 111 = Wake-up interrupt 110 = RXB0 interrupt 101 = RXB1 interrupt 100 = TXB0 interrupt 011 = TXB1 interrupt 010 = TXB2 interrupt 001 = Error interrupt 000 = No interrupt Unimplemented: Read as 0 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
bit 0
DS70070C-page 23-4
bit 5
23
CAN Module
bit 4
bit 3
DS70070C-page 23-5
CiTXnSID: Transmit Buffer n Standard Identifier R/W-x R/W-x SID<10:6> R/W-x R/W-x U-0 U-0 U-0 bit 8
R/W-x
R/W-x SID<5:0>
R/W-x
R/W-x
R/W-x
R/W-x SRR
bit 0
Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
CiTXnEID: Transmit Buffer n Extended Identifier R/W-x R/W-x R/W-x U-0 U-0 U-0 U-0 bit 8 Lower Byte: R/W-x bit 7 R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x bit 0 EID<13:6>
EID<17:14>
bit 15-12 EID<17:14>: Extended Identifier bits 17-14 bit 11-8 bit 7-0 Unimplemented: Read as 0 EID<13:6>: Extended Identifier bits 13-6 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70070C-page 23-6
23
CAN Module
CiTXnBm: Transmit Buffer n Data Field Word m R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x bit 8 Lower Byte: R/W-x bit 7 R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x bit 0 CTXB<7:0>
CTXB<15:8>
bit 15-0
CTXB<15:0>: Data Field Buffer Word bits (2 bytes) Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = bit is cleared x = Bit is unknown
DS70070C-page 23-7
bit 2
bit 1
bit 0
DS70070C-page 23-8
bit 2-0
23
CAN Module
DS70070C-page 23-9
bit 0
Register 23-10: CiRXnEID: Receive Buffer n Extended Identifier Upper Byte: U-0 bit 15 Lower Byte: R/W-x bit 7 bit 15-12 Unimplemented: Read as 0 bit 11-0 EID<17:6>: Extended Identifier bits 17-6 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x bit 0 EID<13:6> U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x bit 8 EID<17:14>
DS70070C-page 23-10
Register 23-12: CiRXnDLC: Receive Buffer n Data Length Control Upper Byte: R/W-x bit 15 Lower Byte: U-0 bit 7 bit 15-10 EID<5:0>: Extended Identifier bits bit 9 RXRTR: Receive Remote Transmission Request bit
1 = Remote transfer request 0 = No remote transfer request
23
R/W-x RXRTR R/W-x RB1 bit 8
R/W-x
R/W-x EID<5:0>
R/W-x
R/W-x
R/W-x
CAN Module
U-0
U-0
R/W-x RB0
R/W-x
R/W-x
R/W-x
R/W-x bit 0
DLC<3:0>
This bit reflects the status of the RTR bit in the last received message.
RB1: Reserved bit 1 Reserved by CAN Spec and read as 0 RB0: Reserved bit 0 Reserved by CAN Spec and read as 0 DLC<3:0>: Data Length Code bits (Contents of Receive Buffer) Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown
DS70070C-page 23-11
Register 23-14: CiRXFnEIDH: Acceptance Filter n Extended Identifier High Upper Byte: U-0 bit 15 Lower Byte: R/W-x bit 7 bit 15-12 Unimplemented: Read as 0 bit 11-0 EID<17:6>: Extended Identifier bits 17-6 Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x bit 0 EID<13:6> U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x bit 8 EID<17:14>
DS70070C-page 23-12
23
CAN Module
DS70070C-page 23-13
Register 23-16: CiRXMnSID: Acceptance Filter Mask n Standard Identifier Upper Byte: U-0 bit 15 Lower Byte: R/W-x bit 7 bit 15-13 Unimplemented: Read as 0 bit 12-2 SID<10:0>: Standard Identifier Mask bits 1 = Include bit in the filter comparison 0 = Dont include bit in the filter comparison Unimplemented: Read as 0 MIDE: Identifier Mode Selection bit 1 = Match only message types (standard or extended address) as determined by EXIDE bit in filter 0 = Match either standard or extended address message if the filters match Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown R/W-x R/W-x SID<5:0> R/W-x R/W-x R/W-x U-0 R/W-x MIDE bit 0 U-0 U-0 R/W-x R/W-x R/W-x SID<10:6> bit 8 R/W-x R/W-x
bit 1 bit 0
Register 23-17: CiRXMnEIDH: Acceptance Filter Mask n Extended Identifier High Upper Byte: U-0 bit 15 Lower Byte: R/W-x bit 7 bit 15-12 Unimplemented: Read as 0 bit 11-0 EID<17:6>: Extended Identifier Mask bits 17-6 1 = Include bit in the filter comparison 0 = Dont include bit in the filter comparison Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set U = Unimplemented bit, read as 0 0 = Bit is cleared x = Bit is unknown R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x bit 0 EID<13:6> U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x bit 8 EID<17:14>
DS70070C-page 23-14
23
CAN Module
DS70070C-page 23-15
bit 5-0
DS70070C-page 23-16
23
CAN Module
bit 7
bit 6
bit 5-3
bit 2-0
DS70070C-page 23-17
DS70070C-page 23-18
bit 6
23
CAN Module
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
DS70070C-page 23-19
bit 14
bit 13
bit 12
bit 11
bit 10
bit 9
bit 8
bit 7
bit 6
bit 5
bit 4
bit 3
DS70070C-page 23-20
TX0IF: Transmit Buffer 0 Interrupt Flag bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred RX1IF: Receive Buffer 1 Interrupt Flag bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred RX0IF: Receive Buffer 0 Interrupt Flag bit 1 = Interrupt request has occurred 0 = Interrupt request has not occurred Legend: R = Readable bit -n = Value at POR W = Writable bit 1 = Bit is set C = Bit can be cleared 0 = Bit is cleared U = Unimplemented bit, read as 0 x = Bit is unknown
bit 1
bit 0
23
CAN Module
DS70070C-page 23-21
Table 23-1:
Bit 14 SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<5:0> EID<13:6> SID<5:0> EID<13:6> MIDE SID<5:0> EID<13:6> MIDE SID<5:0> EID<13:6> EXIDE SID<5:0> EID<13:6> EXIDE EID<13:6> EXIDE SID<5:0> EID<13:6> EXIDE SID<5:0> EID<13:6> EXIDE SID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EXIDE 13 12 11 10 9 8 7 6 5 4 3 2 1 0 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx Reset
File Name
ADR
15
C1RXF0SID
300
C1RXF0EIDH
302
DS70070C-page 23-22
C1RXF0EIDL
304
unused
306
C1RXF1SID
308
C1RXF1EIDH
30A
C1RXF1EIDL
30C
unused
30E
C1RXF2SID
310
C1RXF2EIDH
312
C1RXF2EIDL
314
unused
316
C1RXF3SID
318
C1RXF3EIDH
31A
C1RXF3EIDL
31C
unused
31E
C1RXF4SID
320
C1RXF4EIDH
322
C1RXF4EIDL
324
unused
326
C1RXF5SID
328
C1RXF5EIDH
32A
C1RXF5EIDL
32C
unused
32E
C1RXM0SID
330
C1RXM0EIDH
332
C1RXM0EIDL
334
unused
336
C1RXM1SID
338
C1RXM1EIDH
33A
C1RXM1EIDL
33C
unused
33E
Table 23-1:
Bit 14 SID<10:6> SID<5:0> EID<13:6> TX RB0 Transmit Buffer 0 Byte 0 Transmit Buffer 0 Byte 2 Transmit Buffer 0 Byte 4 Transmit Buffer 0 Byte 6 TX RTR TX RB1 TX RB0 SID<5:0> EID<13:6> DLC<3:0> Transmit Buffer 0 Byte 0 Transmit Buffer 0 Byte 2 Transmit Buffer 0 Byte 4 Transmit Buffer 0 Byte 6 TX RTR TX RB1 TX RB0 TX ABT TX LARB TX ERR SID<5:0> EID<13:6> DLC<3:0> Transmit Buffer 0 Byte 0 Transmit Buffer 0 Byte 2 Transmit Buffer 0 Byte 4 Transmit Buffer 0 Byte 6 TX ABT TX LARB TX ERR TX REQ TXPRI[1:0] TX REQ TXPRI[1:0] SRR TX IDE TX ABT TX LARB TX ERR TX REQ TXPRI[1:0] SRR TX IDE DLC<3:0> SRR EID<17:14> EID<5:0> Transmit Buffer 0 Byte 1 Transmit Buffer 0 Byte 3 Transmit Buffer 0 Byte 5 Transmit Buffer 0 Byte 7 SID<10:6> EID<17:14> EID<5:0> Transmit Buffer 0 Byte 1 Transmit Buffer 0 Byte 3 Transmit Buffer 0 Byte 5 Transmit Buffer 0 Byte 7 SID<10:6> EID<17:14> EID<5:0> Transmit Buffer 0 Byte 1 Transmit Buffer 0 Byte 3 Transmit Buffer 0 Byte 5 Transmit Buffer 0 Byte 7 TX RTR TX RB1 TX IDE 13 12 11 10 9 8 7 6 5 4 3 2 1 0
File Name
ADR
15
C1TX2SID
340
xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000
C1TX2EID
342
C1TX2DLC
342
C1TX2B1
346
CAN Module
C1TX2B2
348
C1TX2B3
34A
C1TX2B4
34C
C1TX2CON
34E
C1TX1SID
350
C1TX1EID
352
C1TX1DLC
352
C1TX1B1
356
C1TX1B2
358
C1TX1B3
35A
C1TX1B4
35C
C1TX1CON
35E
C1TX0SID
360
C1TX0EID
362
C1TX0DLC
362
C1TX0B1
366
C1TX0B2
368
C1TX0B3
36A
C1TX0B4
36C
DS70070C-page 23-23
C1TX0CON
36E
23
Table 23-1:
Bit 14 SID<10:6> EID<17:14> RX RTR Receive Buffer 1 Byte 0 Receive Buffer 1 Byte 2 Receive Buffer 1 Byte 4 Receive Buffer 1 Byte 6 RX FUL SID<5:0> EID<13:6> RX RB1 RX RB0 Receive Buffer 0 Byte 0 Receive Buffer 0 Byte 2 Receive Buffer 0 Byte 4 Receive Buffer 0 Byte 6 RX FUL RX ERR OPMODE[2:0] SJW[1:0]S SEG2 PHTS E WARN IVR IF IVR IE SAM WAK IF WAK IE ERR IF ERR IE SEG1PH[2:0] TXB2 IF TXB2 IE TXB1 IF TXB1 IE Receive Error Counter TXB0 IF TXB0 IE RX RTR R0 RXB0 DBEN ICODE[2:0] BRP[5:0] PRSEG[2:0] RXB1 IF RXB1 IE RXB0 IF RXB0 IE JTOFF FIL HIT 0 DLC[3:0] RX ERR RX RTR R0 FILHIT[2:0] RX RB1 RX RB0 DLC[3:0] EID<13:6> SID<5:0> SRR RX IDE EID<0:5> Receive Buffer 1 Byte 1 Receive Buffer 1 Byte 3 Receive Buffer 1 Byte 5 Receive Buffer 1 Byte 7 13 12 11 10 9 8 7 6 5 4 3 2 1 0 xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 Reset
File Name
ADR
15
C1RX1SID
370
DS70070C-page 23-24
EID<17:14> RX RTR EID<0:5> Receive Buffer 0 Byte 1 Receive Buffer 0 Byte 3 Receive Buffer 0 Byte 5 Receive Buffer 0 Byte 7 SID<10:6> SRR RX IDE xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 WAK FIL TXBO Transmit Error Counter TXBP RXBP TX WARN RX WARN RXB1 OVR SEG2PH[2:0] C SIDL ABAT CAN CKS REQOP[2:0] 0480 0000 0000 0000 0000 0000 xxxx
C1RX1EID
372
C1RX1DLC
374
C1RX1B1
376
C1RX1B2
378
C1RX1B3
37A
C1RX1B4
37C
C1RX1CON
37E
C1RX1SID
380
C1RX1EID
382
C1RX1DLC
384
C1RX0B1
386
C1RX0B2
388
C1RX0B3
38A
C1RX0B4
38C
C1RX0CON
38E
C1CTRL
390
C1CFG1
392
CAN CAP
C1CFG2
394
C1INTF
396
RXB0 OVR
C1INTE
398
C1EC
39A
Reserved
39C 3FE
Legend: x = Unknown
Table 23-2:
Bit 14 SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<10:6> EID<17:14> SID<5:0> EID<13:6> SID<5:0> EID<13:6> MIDE SID<5:0> EID<13:6> MIDE SID<5:0> EID<13:6> EXIDE SID<5:0> EID<13:6> EXIDE SID<5:0> EID<13:6> EXIDE EID<13:6> EXIDE SID<5:0> EID<13:6> EXIDE SID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> EID<5:0> 13 12 11 10 9 8 7 6 5 4 3 2 1 0 EXIDE
File Name
ADR
15
C2RXF0SID
3C0
xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx
C2RXF0EIDH
3C2
C2RXF0EIDL
3C4
unused
3C6
C2RXF1SID
3C8
CAN Module
C2RXF1EIDH
3CA
C2RXF1EIDL
3CC
unused
3CE
C2RXF2SID
3D0
C2RXF2EIDH
3D2
C2RXF2EIDL
3D4
unused
3D6
C2RXF3SIDH
3D8
C2RXF3EID
3DA
C2RXF3EIDL
3DC
unused
3DE
C2RXF4SID
3E0
C2RXF4EIDH
3E2
C2RXF4EIDL
3E4
unused
3E6
C2RXF5SID
3E8
C2RXF5EIDH
3EA
C2RXF5EIDL
3EC
unused
3EE
C2RXM0SID
3F0
C2RXM0EIDH
3F2
C2RXM0EIDL
3F4
unused
3F6
C2RXM1SID
3F8
C2RXM1EIDH
3FA
C2RXM1EIDL
3FC
DS70070C-page 23-25
unused
3FE
23
Table 23-2:
Bit 14 SID<10:6> SID<5:0> EID<13:6> TX RB0 Transmit Buffer 0 Byte 0 Transmit Buffer 0 Byte 2 Transmit Buffer 0 Byte 4 Transmit Buffer 0 Byte 6 TX RTR TX RB1 TX RB0 DLC<3:0> Transmit Buffer 0 Byte 0 Transmit Buffer 0 Byte 2 Transmit Buffer 0 Byte 4 Transmit Buffer 0 Byte 6 TX RTR TX RB1 TX RB0 TX ABT TX LARB TX ERR SID<5:0> EID<13:6> DLC<3:0> Transmit Buffer 0 Byte 0 Transmit Buffer 0 Byte 2 Transmit Buffer 0 Byte 4 Transmit Buffer 0 Byte 6 TX ABT TX LARB TX ERR TX REQ TXPRI[1:0] TX REQ TXPRI[1:0] SRR TX IDE SID<5:0> EID<13:6> TX ABT TX LARB TX ERR TX REQ TXPRI[1:0] SRR TX IDE DLC<3:0> SRR TX IDE EID<17:14> EID<5:0> Transmit Buffer 0 Byte 1 Transmit Buffer 0 Byte 3 Transmit Buffer 0 Byte 5 Transmit Buffer 0 Byte 7 SID<10:6> EID<17:14> EID<5:0> Transmit Buffer 0 Byte 1 Transmit Buffer 0 Byte 3 Transmit Buffer 0 Byte 5 Transmit Buffer 0 Byte 7 SID<10:6> EID<17:14> EID<5:0> Transmit Buffer 0 Byte 1 Transmit Buffer 0 Byte 3 Transmit Buffer 0 Byte 5 Transmit Buffer 0 Byte 7 TX RTR TX RB1 13 12 11 10 9 8 7 6 5 4 3 2 1 0 xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 xxxx xxxx xxxx xxxx xxxx xxxx xxxx 0000 Reset
File Name
ADR
15
C2TX2SID
400
DS70070C-page 23-26
C2TX2EID
402
C2TX2DLC
404
C2TX2B1
406
C2TX2B2
408
C2TX2B3
40A
C2TX2B4
40C
C2TX2CON
40E
C2TX1SID
410
C2TX1EID
412
C2TX1DLC
414
C2TX1B1
416
C2TX1B2
418
C2TX1B3
41A
C2TX1B4
41C
C2TX1CON
41E
C2TX0SID
420
C2TX0EID
422
C2TX0DLC
424
C2TX0B1
426
C2TX0B2
428
C2TX0B3
42A
C2TX0B4
42C
C2TX0CON
42E
Table 23-2:
Bit 14 SID<10:6> EID<17:14> RX RTR Receive Buffer 1 Byte 0 Receive Buffer 1 Byte 2 Receive Buffer 1 Byte 4 Receive Buffer 1 Byte 6 RX FUL SID<5:0> EID<13:6> RX RB1 RX RB0 Receive Buffer 0 Byte 0 Receive Buffer 0 Byte 2 Receive Buffer 0 Byte 4 Receive Buffer 0 Byte 6 RX FUL RX ERR OPMODE[2:0] SJW[1:0]S SEG2 PHTS E WARN IVR IF IVR IE SAM WAK IF WAK IE ERR IF ERR IE SEG1PH[2:0] TXB2 IF TXB2 IE TXB1 IF TXB1 IE Receive Error Counter TXB0 IF TXB0 IE RX RTR R0 RXB0 DBEN ICODE[2:0] BRP[5:0] PRSEG[2:0] RXB1 IF RXB1 IE RXB0 IF RXB0 IE JTOFF FIL HIT 0 DLC[3:0] RX ERR RX RTR R0 FILHIT[2:0] RX RB1 RX RB0 DLC[3:0] EID<13:6> SID<5:0> SRR EID<0:5> Receive Buffer 1 Byte 1 Receive Buffer 1 Byte 3 Receive Buffer 1 Byte 5 Receive Buffer 1 Byte 7 RX IDE 13 12 11 10 9 8 7 6 5 4 3 2 1 0
File Name
ADR
15
C2RX1SID
430
C2RX1EID
432
C2RX1DLC
434
C2RX1B1
436
CAN Module
C2RX1B2
438
C2RX1B3
43A
C2RX1B4
43C
C2RX1CON
43E
C2RX1SID
440
C2RX1EID
442
C2RX1DLC
444
C2RX0B1
446
C2RX0B2
448
C2RX0B3
44A
C2RX0B4
44C
C2RX0CON
44E
C2CTRL
450
C2CFG1
452
CAN CAP
C2CFG2
454
C2INTF
456
RXB0 OVR
C2INTE
458
C2EC
45A
Reserved
45C 4FE
DS70070C-page 23-27
Legend: x = Unknown
23
DS70070C-page 23-28
BUFFERS
Identifier
Identifier
R X B 1
Data Field
Data Field
23
CAN Module
RERRCNT TERRCNT ErrPas BusOff
PROTOCOL ENGINE
CRC Generator
CRC Check
Transmit Logic
CxTX
CxRX
Note: x = 1 or 2
DS70070C-page 23-29
Standard Data Frame A standard data frame is generated by a node when the node wishes to transmit data. The standard CAN data frame is shown in Figure 23-3. In common with all other frames, the frame begins with a Start-Of-Frame bit (SOF - dominant state) for hard synchronization of all nodes. The SOF is followed by the Arbitration field consisting of 12 bits, the 11-bit identifier (reflecting the contents and priority of the message) and the RTR bit (Remote Transmission Request bit). The RTR bit is used to distinguish a data frame (RTR - dominant) from a remote frame. The next field is the Control field, consisting of 6 bits. The first bit of this field is called the Identifier Extension (IDE) bit and is at dominant state to specify that the frame is a standard frame. The following bit is reserved by the CAN protocol, RB0, and defined as a dominant bit. The remaining 4 bits of the Control field are the Data Length Code (DLC) and specify the number of bytes of data contained in the message. The data being sent follows in the Data field which is of the length defined by the DLC above (0-8 bytes). The Cyclic Redundancy Check (CRC) field follows and is used to detect possible transmission errors. The CRC field consists of a 15-bit CRC sequence and a delimiter bit. The message is completed by the End-Of-Frame (EOF) field, which consists of seven recessive bits with no bit-stuffing. The final field is the Acknowledge field. During the ACK Slot bit the transmitting node sends out a recessive bit. Any node that has received an error free frame acknowledges the correct reception of the frame by sending back a dominant bit (regardless of whether the node is configured to accept that specific message or not). The recessive Acknowledge Delimiter completes the Acknowledge Slot and may not be overwritten by a dominant bit, except when an error frame occurs.
23.4.1.2
Extended Data Frame In the extended CAN data frame, shown in Figure 23-4, the Start-Of-Frame bit (SOF) is followed by the Arbitration Field consisting of 38 bits. The first 11 bits are the 11 Most Significant bits of the 29-bit identifier (Base-lD). These 11 bits are followed by the Substitute Remote Request bit (SRR), which is transmitted as recessive. The SRR is followed by the lDE bit which is recessive to denote that the frame is an extended CAN frame. It should be noted from this, that if arbitration remains unresolved after transmission of the first 11 bits of the identifier, and one of the nodes involved in arbitration is sending a standard CAN frame (11-bit identifier), then the standard CAN frame will win arbitration due to the assertion of a dominant lDE bit. Also, the SRR bit in an extended CAN frame must be recessive to allow the assertion of a dominant RTR bit by a node that is sending a standard CAN remote frame. The SRR and lDE bits are followed by the remaining 18 bits of the identifier (lD-Extension) and a dominant Remote Transmission Request bit.
DS70070C-page 23-30
23
CAN Module
DS70070C-page 23-31
Figure 23-3:
111111111111111111111 Data Frame (number of bits = 44 + 8 N) 12 Arbitration Field 11 ID3 ID0 RTR IDE RB0 DLC3 DLC0 15 CRC 1 6 Control Field 4 16 CRC Field 8 8 8 N ( N 8) Data Field 7 End-OfFrame Start-Of-Frame ID 10 CRC Del Acknowledgment ACK Del
1110
Reserved Bits
111111111111111111111
1110
Start-Of-Frame
DS70070C-page 23-32
bus Idle 0 Identifier Message Filtering Stored in Buffers Bit-Stuffing Stored in Transmit/Receive Buffers Data Length Code Inter-Frame Space 3 Any Frame INT 8 Suspend Transmit bus Idle 000 00000000 11111111 Data Frame or Remote Frame
Inter-Frame Space
Suspend Transmit
Figure 23-4:
Start-Of-Frame
ID3
DLC0
Start-Of-Frame ID10
11
100
000000000000000000000001
Identifier
Reserved bits
Message Filtering
111111111111111111111
1110
Start-Of-Frame
23
CAN Module
bus Idle
11
1110
11
DS70070C-page 23-33
Figure 23-5:
111111111111111111111
1110
Start-Of-Frame
Start-Of-Frame ID 10
100
DLC0
Reserved Bits
111111111111111111111
1110
Start-Of-Frame
DS70070C-page 23-34
Inter-Frame Space 3 8 Suspend Transmit bus Idle Data Frame or Remote Frame Remote Frame (number of bits = 44) 12 Arbitration Field 11 15 CRC 1 6 Control Field 4 16 CRC Field End-OfFrame 7 11111111 Inter-Frame Space 3 Any Frame INT 8 Suspend Transmit bus Idle Data Frame or Remote Frame
Figure 23-6:
Inter-Frame Space 8 Suspend Transmit bus Idle Data Frame or Remote Frame
Error Frame
111111111111111111111 Interrupted Data Frame 12 Arbitration Field 11 ID3 ID0 RTR IDE RB0 DLC3 DLC0 6 Control Field 4 8 8 Start-Of-Frame ID 10 8N ( N 8) Data Field
1110
111111111111111111111
1110
23
CAN Module
DS70070C-page 23-35
Modes are requested by setting the REQOP<2:0> bits (CiCTRL<10:8>). Entry into a mode is acknowledged by monitoring the OPMODE<2:0> bits (CiCTRL<7:5>). The module does not change the mode and the OPMODE bits until a change in mode is acceptable, generally during bus idle time which is defined as at least 11 consecutive recessive bits.
23.5.1
23.5.2
Disable Mode
In Disable mode, the module will not transmit or receive. The module has the ability to set the WAKIF bit due to bus activity, however any pending interrupts will remain and the error counters will retain their value. If the REQOP<2:0> bits (CiCTRL<10:8>) = 001, the module will enter the Module Disable mode. This mode is similar to disabling other peripheral modules by turning off the module enables. This causes the module internal clock to stop unless the module is active (i.e., receiving or transmitting a message). If the module is active, the module will wait for 11 recessive bits on the CAN bus, detect that condition as an idle bus, then accept the module disable command. When the OPMODE<2:0> bits (CiCTRL<7:5>) = 001, this indicates that the module successfully entered Module Disable mode (see Figure 23-7). The WAKIF interrupt is the only module interrupt that is still active in the Module Disable mode. If the WAKIE bit (CiINTE<6>) is set, the processor will receive an interrupt whenever the CAN bus detects a dominant state, as occurs with a Start-Of-Frame (SOF). The I/O pins will revert to normal I/O function when the module is in the Module Disable mode. Note: Typically, if the CAN module is allowed to transmit in a particular mode of operation and a transmission is requested immediately after the CAN module has been placed in that mode of operation, the module waits for 11 consecutive recessive bits on the bus before starting transmission. If the user switches to Disable Mode within this 11-bit period, then this transmission is aborted and the corresponding TXABT bit is set and TXREQ bit is cleared.
DS70070C-page 23-36
REQOP<2:0>
000
001
000
OPMODE<2:0>
000
001
000
CAN bus
WAKIF
WAKIE
1 - Processor writes REQOP<2:0> while module receiving/transmitting message. Module continues with CAN message. 2 - Module detects 11 recessive bits. Module acknowledges Disable mode and sets OPMODE<2:0> bits. Module disables. 3 - CAN bus message will set WAKIF bit. If WAKIE = 1, processor will vector to the interrupt address. CAN message ignored. 4 - Processor writes REQOP<2:0> during CAN bus activity. Module waits for 11 recessive bits before accepting activate. 5 - Module detects 11 recessive bits. Module acknowledges Normal mode and sets OPMODE<2:0> bits. Module activates.
23
CAN Module
23.5.3
Loopback Mode
If the Loopback mode is activated, the module will connect the internal transmit signal to the internal receive signal at the module boundary. The transmit and receive pins revert to their PORT I/O function. The transmitter will receive an acknowledge for its sent messages. Special hardware will generate an acknowledge for the transmitter.
23.5.4
DS70070C-page 23-37
23.5.6
DS70070C-page 23-38
23.6.1
Receive Buffers
The CAN bus module has 3 receive buffers. However, one of the receive buffers is always committed to monitoring the bus for incoming messages. This buffer is called the message assembly buffer, MAB. So there are 2 receive buffers visible, RXB0 and RXB1, that can essentially instantaneously receive a complete message from the protocol engine. The CPU can be operating on one while the other is available for reception or holding a previously received message. The MAB holds the destuffed bit stream from the bus line to allow parallel access to the whole data or remote frame for the acceptance match test and the parallel transfer of the frame to the receive buffers. The MAB will assemble all messages received. These messages will be transferred to the RXBn buffers only if the acceptance filter criterion are met. When a message is received, the RXnIF flag (CiINTF<0> or CiINRF<1>) will be set. This bit can only be set by the module when a message is received. The bit is cleared by the CPU when it has completed processing the message in the buffer. This bit provides a positive lockout to ensure that the CPU has finished with the message buffer. If the RXnIE bit (CiINTE<0> or CiINTE<1>) is set , an interrupt will be generated when a message is received. There are 2 programmable acceptance filter masks associated with the receive buffers, one for each buffer. When the message is received, the FILHIT bits (CiRX0CON<0> for Receive Buffer 0 and CiRX1CON<2:0> for Receive Buffer 1) indicate the acceptance criterion for the message. The number of the acceptance filter that enabled the reception will be indicated as well as a Status bit that indicates that the received message is a remote transfer request. Note: In the case of Receive Buffer 0, a limited number of Acceptance Filters can be used to enable a reception. A single bit, FILHIT0 (CiRX0CON<0>) determines which of the 2 filters, RXF0 or RXF1, enabled the message reception.
23
CAN Module
DS70070C-page 23-39
A c c e p t
R X B 0
Identifier
Identifier
R X B 1
Data Field
Data Field
DS70070C-page 23-40
No
No
Yes, meets criteria Yes, meets criteria Message for RXB1 for RXB0 Identifier meets a filter criteria ? No Go to Start The RXFUL bit determines if the receive register is empty and able to accept a new message. The DBEN bit determines if RXB0 can roll over into RXB1 if it is full.
23
CAN Module
Is RXFUL = 0 ? Yes
No
Is DBEN = 1 ? No
Yes
No
Is RXFUL = 0 ? Yes
Set RXFUL = 1 No
Move message into RXB1 Set FILHIT<0> according to which filter criteria was met Does ERRIE=1 ? Yes Go to Start Set FILHIT<2:0> according to which filter criteria was met
Set RXFUL = 1
Is RXnIE = 1 ? No
Yes
Generate Interrupt Set ICODE<3:0> according to which receive buffer the message was loaded into
Yes
Does RXnIE = 1 ? No
DS70070C-page 23-41
Mask Bit n
DS70070C-page 23-42
Note 1: Is only valid if the DBEN bit is set. The DBEN bit (CiRX0CON<2>) allows the FILHIT bits to distinguish a hit on filter RXF0 and RXF1 in either RXB0 or overrun into RXB1. 111 = Acceptance Filter 1 (RXF1) 110 = Acceptance Filter 0 (RXF0) 001 = Acceptance Filter 1 (RXF1) 000 = Acceptance Filter 0 (RXF0) If the DBEN bit is clear, there are 6 codes corresponding to the 6 filters. If the DBEN bit is set, there are 6 codes corresponding to the 6 filters plus 2 additional codes corresponding to RXF0 and RXF1 filters overrun to RXB1. If more than 1 acceptance filter matches, the FILHIT bits will encode the lowest binary value of the filters that matched. In other words, if filter 2 and filter 4 match, FILHIT will code the value for 2. This essentially prioritizes the acceptance filters with lower numbers having priority. Figure 23-10 shows a block diagram of the message acceptance filters. Figure 23-10: Message Acceptance Filter
Acceptance Filter Register RXMn0 Acceptance Mask Register
23
CAN Module
RXFn0
RXFn1
RXMn1
RxRqst
RXFnn
RXMnn
DS70070C-page 23-43
No message received Message for RXB1, RXB1 available Message for RXB1, RXB1 full Message for RXB0, RXB0 available Message for RXB0, RXB0 full, DBEN not enabled Message for RXB0, RXB0 full, DBEN enabled, RXB1 available Message for RXB0, RXB0 full, DBEN enabled, RXB1 full Message for RXB0 and RXB1, RXB0 available Message for RXB0 and RXB1, RXB0 full, DBEN not enabled No message received Message for RXB1, RXB1 available
DS70070C-page 23-44
23.6.5
Receive Errors
The CAN module will detect the following receive errors: Cyclic Redundancy Check (CRC) Error Bit Stuffing Error Invalid message receive error These receive errors do not generate an interrupt. However, the receive error counter is incremented by one in case one of these errors occur. The RXWAR bit (CiINTF<9>) indicates that the Receive Error Counter has reached the CPU warning limit of 96 and an interrupt is generated.
23.6.5.1
Cyclic Redundancy Check (CRC) Error With the Cyclic Redundancy Check, the transmitter calculates special check bits for the bit sequence from the start of a frame until the end of the data field. This CRC sequence is transmitted in the CRC Field. The receiving node also calculates the CRC sequence using the same formula and performs a comparison to the received sequence. If a mismatch is detected, a CRC error has occurred and an Error Frame is generated. The message is repeated. The receive error interrupt counter is incremented by one. An Interrupt will only be generated if the error counter passes a threshold value.
23
CAN Module
23.6.5.2
Bit Stuffing Error If, between the Start -Of-Frame and the CRC Delimiter, 6 consecutive bits with the same polarity are detected, the bit-stuffing rule has been violated. A bit-stuffing error occurs and an error frame is generated. The message is repeated. No interrupt will be generated upon this event.
23.6.5.3
Invalid Message Received Error If any type of error occurs during reception of a message, an error will be indicated by the IVRIF bit (CiINTF<7>). This bit can be used (optionally with an interrupt) for autobaud detection with the device in Listen Only mode. This error is not an indicator that any action needs to be taken, but it does indicate that an error has occurred on the CAN bus.
23.6.5.4
Rules for Modifying the Receive Error Counter The Receive Error Counter is modified according to the following rules: When the receiver detects an error, the Receive Error Counter is incremented by 1, except when the detected error was a bit error during the transmission of an active error flag. When the receiver detects a dominant bit as the first bit after sending an error flag, the Receive Error Counter will be incremented by 8. If a receiver detects a bit error while sending an active error flag, the Receive Error Counter is incremented by 8. Any node tolerates up to 7 consecutive dominant bits after sending an active error flag or passive error flag. After detecting the 14th consecutive dominant bit (in case of an Active error flag) or after detecting the 8th consecutive dominant bit following a passive error flag, and after each sequence of eight additional consecutive dominant bits, every transmitter increases its Transmission Error Counter and every receiver increases its Receive Error Counter by 8. After a successful reception of a message (reception without error up to the ACK slot and the successful sending of the ACK bit), the Receive Error Counter is decreased by one, if the Receive Error Counter was between 1 and 127. If the Receive Error Counter was 0, it will stay 0. If the Receive Error Counter was greater than 127, it will change to a value between 119 and 127.
DS70070C-page 23-45
DS70070C-page 23-46
EOF EOF EOF EOF EOF EOF EOF ACK DELIMITER ACK SIST BIT CRCDEL CRC0 CRC1 CRC2 CRC3 CRC4 CRC5 CRC6 CRC7 CRC8 CRC9 CRC10 CRC11 CRC12 CRC13 CRC14 DLC0 DLC1 STUFF DLC2 DLC3 RB0 IDE RTR ID0 ID1 ID2 ID3 ID4 ID5 ID6 ID7 ID8 ID9 ID10 SOF Receive Buffer Interrupt Flag
23
CAN Module
Data
DS70070C-page 23-47
DS70070C-page 23-48
23.7.1
23
CAN Module
23.7.2
DS70070C-page 23-49
23.7.3
23.7.4
Message Transmission
To initiate transmitting the message, the TXREQ bit (CiTXnCON<3>) must be set. The CAN bus module resolves any timing conflicts between setting of the TXREQ bit and the SOF time, ensuring that if the priority was changed, it is resolved correctly before SOF. When TXREQ is set the TXABT (CiTXnCON<6>), TXLARB (CiTXnCON<5>) and TXERR (CiTXnCON<4>) flag bits will be cleared by the module. Setting TXREQ bit does not actually start a message transmission, it flags a message buffer as enqueued for transmission. Transmission will start when the module detects an available bus for SOF. The module will then begin transmission on the message which has been determined to have the highest priority. If the transmission completes successfully on the first try, the TXREQ bit will clear and an interrupt will be generated if the TXnIE bit (CiINTE<2>, CiINTE<3>, CiINTE<4>) is set. If the message fails to transmit, other condition flags will be set and the TXREQ bit will remain set indicating that the message is still pending for transmission. If the message tried to transmit but encountered an error condition, the TXERR bit (CiTXnCON<4>) will be set. In this case, the error condition can also cause an interrupt. If the message tried to transmit but lost arbitration, the TXLARB bit (CiTXnCON<5>) will be set. In this case, no interrupt is available to signal the loss of arbitration.
DS70070C-page 23-50
CiTX
TXREQ TXnIF
23
CAN Module
TXABT
1 - Processor sets TXREQ while module receiving/transmitting message. Module continues with CAN message. 2 - Processor clears TXREQ while module looking for 11 recessive bits. Module aborts pending transmission, sets TXABT bit in 2 clocks. 3 - Another module takes the available transmit slot.
DS70070C-page 23-51
CAN bus
CiTX
ABAT
TXREQ TXnIF
TXABT
1 - Processor sets TXREQ while module receiving/transmitting message. Module continues with CAN message. 2 - Processor sets ABAT while module looking for 11 recessive bits. Module clears TXREQ bits. Module aborts pending transmission, sets TXABT bit. 3 - Another module takes the available transmit slot.
CiTX
TXREQ TXnIF
TXABT
1 - Processor sets TXREQ while module receiving/transmitting message. Module continues with CAN message. 2 - Module detects 11 recessive bits. Module begins transmission of queued message. 3 - Processor clears TXREQ requesting message abort. Abort cannot be acknowledged. 4 - At successful completion of transmission, TXREQ bit remains clear and TXnIF bit set. TXABT remains clear.
DS70070C-page 23-52
1 - Processor sets TXREQ while module inactive. TXLARB bit cleared. 2 - Module in inactive state. Module begins transmission of queued message. 3 - Message loses arbitration. Module releases bus and sets TXLARB bit. 4 - Module waits for 11 recessive bits before re-trying transmission of queued message. 5 - At successful completion of transmission, TXREQ bit cleared and TXnIF bit set.
23
CAN Module
DS70070C-page 23-53
START The message transmission sequence begins when the device determines that the TXREQ for any of the Transmit registers has been set. No Are any TXREQ bits = 1 ? Yes Clear: TXABT, TXLARB and TXERR Clearing the TXREQ bit while it is set, or setting the ABAT bit before the message has started transmission will abort the message.
No
No
No
Set TXERR = 1
Yes Set TXREQ = 0 Does TXLARB = 1? Yes Generate Interrupt Is TXnIE = 1? Yes Arbitration lost during transmission
No A message can also be aborted if a message error or lost arbitration condition occurred during transmission.
Set TXBUFE = 1 The TXnIE bit determines if an interrupt should be generated when a message is successfully transmitted.
Yes
END
DS70070C-page 23-54
23
CAN Module
23.7.7
Effects of a Reset
Upon any Reset the CAN module has to be initialized. All registers are set according to the reset values. The content of a transmitted message is lost. The initialization is discussed in Section 23.5.5 Configuration Mode.
DS70070C-page 23-55
1 - Processor sets TXREQ while module inactive. TXERR bit is cleared. 2 - Module in inactive state. Module begins transmission of queued message. 3 - Module detects error during transmission, releases bus and sets TXERR bit. 4 - Module waits for 11 recessive bits before re-trying transmission of queued message. 5 - At successful completion of transmission, TXREQ bit cleared and TXnIF bit set.
23.7.8.1
Acknowledge Error In the Acknowledge field of a message, the transmitter checks if the Acknowledge Slot (which it has sent out as a recessive bit) contains a dominant bit. If not, no other node has received the frame correctly. An acknowledge error has occurred and the message has to be repeated. No error frame is generated.
23.7.8.2
Form Error lf a transmitter detects a dominant bit in one of the four segments including End-Of-Frame, lnterframe Space, Acknowledge Delimiter or CRC Delimiter; then a form error has occurred and an error frame is generated. The message is repeated.
23.7.8.3
Bit Error A bit error occurs if a transmitter sends a dominant bit and detects a recessive bit. In the case where the transmitter sends a recessive bit and a dominant bit is detected during the Arbitration field and the Acknowledge Slot, no bit error is generated because normal arbitration is occurring.
DS70070C-page 23-56
23.7.9
Transmission Interrupts
There are several interrupts linked to the message transmission. The transmission interrupts can be broken up into two groups: Transmission interrupts Transmission error interrupts
23
CAN Module
23.7.9.1
Transmit Interrupt At least one of the three transmit buffers is empty (not scheduled) and can be loaded to schedule a message for transmission. Reading the TXnIF flags in the CiINTF register will indicate which transmit buffer is available and caused the interrupt.
DS70070C-page 23-57
23.8
Error Detection
The CAN protocol provides sophisticated error detection mechanisms. The following errors can be detected. These errors are either receive or transmit errors. Receive errors are: Cyclic Redundancy Check (CRC) Error (see Section 23.6.5.1 Cyclic Redundancy Check (CRC) Error) Bit Stuffing Bit Error (see Section 23.6.5.2 Bit Stuffing Error) lnvalid Message Received Error (see Section 23.6.5.3 Invalid Message Received Error) The transmit errors are: Acknowledge Error (see Section 23.7.8.1 Acknowledge Error) Form Error (see Section 23.7.8.2 Form Error) Bit Error (see Section 23.7.8.3 Bit Error)
23.8.1
Error States
Detected errors are made public to all other nodes via error frames. The transmission of the erroneous message is aborted and the frame is repeated as soon as possible. Furthermore, each CAN node is in one of the three error states error active, error passive or bus off according to the value of the internal error counters. The error active state is the usual state where the bus node can transmit messages and active error frames (made of dominant bits) without any restrictions. In the error passive state, messages and passive error frames (made of recessive bits) may be transmitted. The bus off state makes it temporarily impossible for the station to participate in the bus communication. During this state, messages can neither be received nor transmitted.
DS70070C-page 23-58
Reset
23
CAN Module
RERRCNT < 127 or TERRCNT < 127 Error Passive TERRCNT > 255 Bus Off
23.8.3
DS70070C-page 23-59
23.9.1
Bit Timing
As oscillators and transmission time may vary from node to node, the receiver must have some type of PLL synchronized to data transmission edges to synchronize and maintain the receiver clock. Since the data is NRZ coded, it is necessary to include bit-stuffing to ensure that an edge occurs at least every 6 bit times, to maintain the Digital Phase Lock Loop (DPLL) synchronization. Bus timing functions executed within the bit time frame, such as synchronization to the local oscillator, network transmission delay compensation, and sample point positioning, are defined by the programmable bit timing logic of the DPLL. All controllers on the CAN bus must have the same baud rate and bit length. However, different controllers are not required to have the same master oscillator clock. At different clock frequencies of the individual controllers, the baud rate has to be adjusted by adjusting the number of time quanta in each segment. The nominal bit time can be thought of as being divided into separate non-overlapping time segments. These segments are shown in Figure 23-20. Synchronization segment (Sync Seg) Propagation time segment (Prop Seg) Phase buffer segment 1 (Phase1 Seg) Phase buffer segment 2 (Phase2 Seg)
The time segments and also the nominal bit time are made up of integer units of time called time quanta or TQ. By definition, the nominal bit time has a minimum of 8 TQ and a maximum of 25 TQ. Also, by definition the minimum nominal bit time is 1 sec, corresponding to a maximum 1 MHz bit rate. Figure 23-20: CAN Bit Timing
Input Signal
Sync
Prop Segment
Phase Segment 2
Sync
TQ
DS70070C-page 23-60
Equation 23-1:
Where BRP is the binary value of BRP <5:0> FCAN is FCY or 4 FCY depending on CANCKS bit Example 23-1: Bit Rate Calculation Example
If 4FCY = 32 MHz, BRP<5:0> = 0x01 and CANCKS = 0, then: TQ = 2 (BRP + 1) TCY = 2 X 2 X (1/32X106) = 125ns 4
If Nominal Bit Time = 8 TQ then: 9 Nominal Bit Rate = 1 ( 8 125 10 ) Mbps Example 23-2: Baud Rate Prescaler Calculation Example
23
CAN Module
CAN Baud Rate = 125 kHz FCY = 5 MHz, CANCKS = 1 1. Select number of TQ clocks per bit time (e.g., K=16). 2. Calculate TQ from baud rate: 1 ( BaudRate ) 1 125 10 TQ = ------------------------------------- = --------------------------- = 500ns K 16 3. Calculate BRP<5:0>: TQ = 2 (BRP + 1) TCAN BRP = ( 2T Q T CY ) 1 2 ( 500 10 ) = ------------------------------ 1 6 1 ( 5 10 ) = 4 The frequencies of the oscillators in the different nodes must be coordinated in order to provide a system-wide specified time quantum. This means that all oscillators must have a TOSC that is a integral divisor of TQ.
9 3
DS70070C-page 23-61
23.9.4
Phase Segments
The phase segments are used to optimally locate the sampling of the received bit within the transmitted bit time. The sampling point is between Phase1 Segment and Phase2 Segment. These segments are lengthened or shortened by re-synchronization. The end of the Phase1 Segment determines the sampling point within a bit period. The segment is programmable from 1 TQ to 8 TQ. Phase2 Segment provides delay to the next transmitted data transition. The segment is programmable from 1 TQ to 8 TQ or it may be defined to be equal to the greater of Phase1 Segment or the Information Processing Time (3 TQs). The phase segment 1 is initialized by setting bits SEG1PH<2:0> (CiCFG2<5:3>), and phase segment 2 is initialized by setting SEG2PH<2:0> (CiCFG2<10:8>).
23.9.5
Sample Point
The sample point is the point of time at which the bus level is read and interpreted as the value of that respective bit. The location is at the end of phase segment 1. If the bit timing is slow and contains many TQ, it is possible to specify multiple sampling of the bus line at the sample point. The level determined by the CAN bus then corresponds to the result from the majority decision of three values. The majority samples are taken at the sample point and twice before with a distance of TQ/2. The CAN module allows to chose between sampling three times at the same point or once at the same point. This is done by setting or clearing the SAM bit (CiCFG2<6>).
23.9.6
Synchronization
To compensate for phase shifts between the oscillator frequencies of the different bus stations, each CAN controller must be able to synchronize to the relevant signal edge of the incoming signal. When an edge in the transmitted data is detected, the logic will compare the location of the edge to the expected time (Synchronous Segment). The circuit will then adjust the values of Phase1 Segment and Phase2 Segment. There are 2 mechanisms used to synchronize.
23.9.6.1
Hard Synchronization Hard Synchronization is only done whenever there is a recessive to dominant edge during bus Idle, indicating the start of a message. After hard synchronization, the bit time counters are restarted with Synchronous Segment. Hard synchronization forces the edge which has caused the hard synchronization to lie within the synchronization segment of the restarted bit time. Due to the rules of synchronization, if a hard synchronization is done, there will not be a re-synchronization within that bit time.
DS70070C-page 23-62
23
CAN Module
Sync
Propagation Segment
Phase Segment 1
sjw
Phase Segment 2
Sample Point TQ
Sync
Propagation Segment
Phase Segment 1
Phase Segment 2
sjw
Sample Point TQ
DS70070C-page 23-63
23.10
Interrupts
The module has several sources of interrupts. Each of these interrupts can be individually enabled or disabled. A CiINTF register contains interrupt flags. A CiINTE register controls the enabling of the 8 main interrupts. A special set of read only bits in the CiCTRL register (ICODE<2:0>) can be used in combination with a jump table for efficient handling of interrupts. All interrupts have one source, with the exception of the error interrupt. Any of the error interrupt sources can set the error interrupt flag. The source of the error interrupt can be determined by reading the CiINTF register. The interrupts can be broken up into two categories: receive and transmit interrupts. The receive related interrupts are: Receive interrupt Wake-up interrupt Receiver Overrun interrupt Receiver Warning interrupt Receiver Error Passive interrupt Transmit interrupt Transmitter Warning interrupt Transmitter Error Passive interrupt Bus Off interrupt
23.10.1
Interrupt Acknowledge
Interrupts are directly associated with one or more status flags in CiINTF register. Interrupts are pending as long as one of the corresponding flags is set. The flags in the registers must be reset within the interrupt handler in order to handshake the interrupt. A flag can not be cleared if the respective condition still prevails, with the exception being interrupts that are caused by a certain value being reached in one of the error counter registers.
DS70070C-page 23-64
23
CAN Module
Legend: ERR = ERRIF ERRIE TX0 = TX0IF TX0IE TX1 = TX1IF TX1IE TX2 = TX2IF TX2IE RX0 = RX0IF RX0IE RX1 = RX1IF RX1IE WAK = WAKIF WAKIE
23.11
CAN Capture
The CAN module will generate a signal that can be sent to a timer capture input whenever a valid frame has been accepted. This is useful for time-stamping and network synchronization. Because the CAN specification defines a frame to be valid if no errors occurred before the EOF field has been transmitted successfully, the timer signal will be generated right after the EOF. A pulse of one bit time is generated. Time-stamping is enabled by the TSTAMP control bit (CiCTRL<15>). The IC2 capture input is used for time-stamping. Note: If the CAN capture is enabled, the IC2 pin becomes unusable as a general input capture pin. In this mode, the IC2 channel derives its input signal from the C1RX or C2RX pin instead of the IC2 pin.
23.12
DS70070C-page 23-65
DS70070C-page 23-66
OPMODE<2:0>
000
001
000
CAN bus
Sleep WAKIF
23
CAN Module
1 - Processor requests and receives Module Disable mode. Wake-up interrupt enabled. 2 - Processor executes SLEEP (PWRSAV #0) instruction. 3 - SOF of message wakes up processor. Oscillator start time begins. CAN message lost. WAKIF bit set. 4 - Processor completes oscillator start time. Processor resumes program or interrupt, based on GIE bits. Processor requests Normal Operating mode. Module waits for 11 recessive bits before accepting CAN bus activity. CAN message lost. 5 - Module detects 11 recessive bits. Module will begin to receive messages and transmit any pending messages.
23.13.2
DS70070C-page 23-67
DS70070C-page 23-68
23.14.1
23
CAN Module
23.14.2
ISO Model
The lSO/OSl Reference Model is used to define the layers of protocol of a communication system as shown in Figure 23-24. At the highest end, the applications need to communicate between each other. At the lowest end, some physical medium is used to provide electrical signaling. The higher levels of the protocol are run by software. Within the CAN bus specification, there is no definition of the type of message, or the contents, or meaning of the messages transferred. These definitions are made in systems such as Volcano, the Volvo automotive CAN specification J1939, the U.S. heavy truck multiplex wiring specification; and Allen-Bradley DeviceNet and Honeywell SDS, industrial protocols. The CAN bus module definition encompasses two levels of the overall protocol: The Data Link Layer - The Logical Link Control (LLC) sub layer - The Medium Access Control (MAC) sub layer The Physical Layer - The Physical Signaling (PLS) sub layer
DS70070C-page 23-69
DS70070C-page 23-70
LLC (Logical Link Control) Acceptance Filtering Overload Notification Recovery Management MAC (Medium Access Control) Data Encapsulation/Decapsulation Frame Coding (stuffing, destuffing) Medium Access Management Error Detection Error Signalling Acknowledgment Serialization/Deserialization Physical Layer PLS (Physical Signalling) Bit Encoding/Decoding Bit Timing Synchronization
Fault Confinement
23
CAN Module
Connector
DS70070C-page 23-71
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70070C-page 23-72
Revision B
This revision incorporates additional technical content for the dsPIC30F CAN module.
Revision C
This revision incorporates all known errata at the time of this document update.
23
CAN Module
DS70070C-page 23-73
DS70070C-page 23-74
24
Device Configuration
DS70071D-page 24-1
24.2
The device Configuration registers can be programmed using Run-Time Self-Programming (RTSP), In-Circuit Serial Programming (ICSP), or by a device programmer. Note 1: Not all device Configuration bits shown in the subsequent Configuration register descriptions may be available on a specific device. Refer to the device data sheet for more information. 2: dsPIC30F devices in the General Purpose, Sensor and Motor Control families feature one of three versions of the Oscillator system Version 1, Version 2 and Version 3. For information on the Configuration bits of the FOSC device Configuration register available in each of these versions, please refer to Section 7. "Oscillator.
DS70071D-page 24-2
U bit 8
R/P
R/P bit 0
FWDTEN: Watchdog Enable Configuration bit 1 = Watchdog Enabled (LPRC oscillator cannot be disabled. Clearing the SWDTEN bit in the RCON register. Will have no effect.) 0 = Watchdog Disabled (LPRC oscillator can be disabled by clearing the SWDTEN bit in the RCON register.) Unimplemented: Read as 0 FWPSA<1:0>: Prescale Value Selection for Watchdog Timer Prescaler A bits 11 = 1:512 10 = 1:64 01 = 1:8 00 = 1:1 FWPSB<3:0>: Prescale Value Selection for Watchdog Timer Prescaler B bits 1111 = 1:16 1110 = 1:15 0001 = 1:2 0000 = 1:1 Legend: R = Readable bit P = Programmable bit U = Unimplemented bit
bit 3-0
24
Device Configuration
DS70071D-page 24-3
R/P PWMPIN
R/P HPOL
bit 23-16 Unimplemented: Read as 0 bit 15 MCLREN: MCLR Pin Function Enable bit 1 = Pin function is MCLR (default case) 0 = Pin is disabled PWMPIN: Motor Control PWM Module Pin Mode bit 1 = PWM module pins controlled by PORT register at device Reset (tri-stated) 0 = PWM module pins controlled by PWM module at device Reset (configured as output pins) HPOL: Motor Control PWM Module High Side Polarity bit 1 = PWM module high-side output pins have active-high output polarity 0 = PWM module high-side output pins have active-low output polarity LPOL: Motor Control PWM Module Low Side Polarity bit 1 = PWM module low-side output pins have active-high output polarity 0 = PWM module low-side output pins have active-low output polarity BOREN: PBOR Enable bit 1 = PBOR Enabled 0 = PBOR Disabled Unimplemented: Read as 0 BORV<1:0>: Brown-out Voltage Select bits 11 = 2.0V 10 = 2.7V 01 = 4.2V 00 = 4.5V Unimplemented: Read as 0 FPWRT<1:0>: Power-on Reset Timer Value Selection bits 11 = PWRT = 64 ms 10 = PWRT = 16 ms 01 = PWRT = 4 ms 00 = Power-up timer disabled Note: Legend: R = Readable bit P = Programmable bit U = Unimplemented bit PWMPIN, HPOL, and LPOL Configuration bits are only available on devices that feature a Motor Control PWM module.
bit 9
bit 8
bit 7
DS70071D-page 24-4
U bit 8
P GCP
P GWRP bit 0
Unimplemented: Read as 0 GCP: General Code Segment Code-Protect bit 1 = User program memory is not code-protected 0 = User program memory is code-protected GWRP: General Code Segment Write-Protect bit 1 = User program memory is not write-protected 0 = User program memory is write-protected Note: Legend: R = Readable bit P = Programmable bit U = Unimplemented bit The BCP and GWRP Configuration bits can only be programmed to a 0.
bit 0
24
Device Configuration
DS70071D-page 24-5
24.3.1
24.3.2
24.3.3
For more information on these Configuration bits, please refer to Section 15. "Motor Control PWM.
24.3.4
24.3.4.1
General Code Segment Configuration Bit Group The GCP and GWRP Configuration bits in the FGS Configuration register must be programmed/erased as a group. If one or both of the Configuration bits is programmed to a 0, a full chip erase must be performed to change the state of either bit. Note: If the code protection Configuration fuse group (FGS<GCP:GWRP>) bits have been programmed, an erase of the entire code-protected device is only possible at voltages, VDD >= 4.5 volts.
DS70071D-page 24-6
24.4.1
24.4.2
Unit ID Field
The Unit ID field is located at configuration memory space locations 0x800600 through 0x80063E. This field consists of 32 program memory locations and can be programmed at the Microchip factory with unique device information. This field cannot be written or erased by the user, but can be read using table read instructions. Please contact Microchip technical support or your local Microchip representative for further details.
24
Device Configuration
DS70071D-page 24-7
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
DS70071D-page 24-8
Revision B
This revision incorporates technical content changes for the dsPIC30F Device Configuration module.
Revision C
This revision incorporates all known errata at the time of this document update.
Revision D
Descriptions of three versions of the Oscillator Control module have been added. The definition of the FOSC Configuration register was moved to DS70054.
24
Device Configuration
DS70071D-page 24-9
DS70071D-page 24-10
25
Development Tool Support
DS70072C-page 25-1
25.1
25.2
25.2.1
The MPLAB Integrated Development Environment (IDE) is available at no cost. MPLAB IDE software is a desktop development environment with tool sets for developing and debugging a microcontroller design application. MPLAB IDE allows quick changes between different development and debugging activities. Designed for use with the Windows operating environment, it is a powerful, affordable, run-time development tool. It is also the common user interface for Microchip's development systems tools, including MPLAB Editor, MPLAB ASM30 Assembler, MPLAB SIM software simulator, MPLAB LIB30 Library, MPLAB LINK30 Linker, MPLAB ICE 4000 In-Circuit Emulators, PRO MATE II programmer and In-Circuit Debugger (ICD 2). The MPLAB IDE gives users the flexibility to edit, compile and emulate, all from a single user interface. Engineers can design and develop code for the dsPIC devices in the same design environment that they have used for PICmicro microcontrollers. The MPLAB IDE is a 32-bit Windows-based application. It provides many advanced features for the engineer in a modern, easy-to-use interface. MPLAB IDE integrates: Full featured, color coded text editor Easy-to-use project manager with visual display Source level debugging Enhanced source level debugging for C - (Structures, automatic variables, etc.) Customizable toolbar and key mapping Dynamic status bar that displays processor condition at a glance Context sensitive, interactive on-line help Integrated MPLAB SIM instruction simulator User interface for PRO MATE II and PICSTART Plus device programmers (sold separately) User interface for MPLAB ICE 4000 In-Circuit Emulator (sold separately) User interface for MPLAB ICD 2 In-Circuit Debugger (sold separately)
DS70072C-page 25-2
25.2.2
The Microchip Technology MPLAB C30 C compiler is a complete, easy-to-use language product. It allows dsPIC applications codes to be written in high level C language and then be fully converted into machine-object code for programming of the microcontroller. It simplifies development of code by removing code obstacles and allowing the designer to focus on program flow and not on program elements. Several options for compiling are available so the user can select those that will maximize the efficiency of the code characteristics. It is a fully ANSI compliant product with standard libraries for the dsPIC family of microcontrollers. It uses the many advanced features of the dsPIC devices to provide very efficient assembly code generation. MPLAB C30 also provides extensions that will allow for excellent support of the hardware, such as interrupts and peripherals. It is fully integrated with the MPLAB IDE for high level, source debugging. Some features include: 16-bit native data types Efficient use of register-based, 3-operand instructions Complex Addressing modes Efficient multi-bit shift operations Efficient signed/unsigned comparisons
MPLAB C30 comes complete with its own assembler, linker and librarian. These allow the user to write mixed mode C and assembly programs and link the resulting object files into a single executable file. The compiler is sold separately. The assembler, linker and librarian is available for free with MPLAB IDE.
25.2.3
The MPLAB SIM software simulator allows code development in a PC-hosted environment by simulating the dsPIC device on an instruction level. On any given instruction, the data areas are able to be examined or modified. The execution is able to be performed in Single Step, Execute Until Break or Trace mode.(1) The MPLAB SIM simulator fully supports symbolic debugging using the MPLAB C30 compiler and assembler. The software simulator offers the flexibility to develop and debug code outside of the laboratory environment, making it an excellent multi-project software development tool. Note 1: Some features, including peripheral support, have not been implemented at the time of this writing. Please check Microchips web site or your local Microchip sales office for the most current information.
25
Development Tool Support
DS70072C-page 25-3
The MPLAB ICE 4000 In-Circuit Emulator will provide the product development engineer with a complete hardware design tool for the dsPIC devices. Software control of the emulator will be provided by MPLAB IDE. The MPLAB ICE 4000 will be a full-featured emulator system with enhanced trace, trigger and data monitoring features. Interchangeable processor modules will allow the system to be easily reconfigured for emulation of different processors. The MPLAB ICE 4000 will support the extended, high-end PICmicro microcontrollers, the PIC18CXXX and PIC18FXXX devices, as well as the dsPIC Family of digital signal controllers. The modular architecture of the MPLAB ICE 4000 in-circuit emulator will allow expansion to support new devices. The MPLAB ICE 4000 in-circuit emulator system has been designed as a real-time emulation system, with advanced features that are generally found on more expensive development tools. Features will include: Full speed emulation, up to 50 MHz bus speed or 200 MHz external clock speed Low voltage emulation down to 1.8 volts Configured with 2 Mb program emulation memory; additional modular memory up to 16 Mb 64K x 136-bit wide Trace Memory Unlimited software breakpoints Complex break, trace and trigger logic Multi-level trigger up to 4 levels Filter trigger functions to trace specific event 16-bit Pass counter for triggering on sequential events 16-bit Delay counter 48-bit time-stamp Stopwatch feature Time between events Statistical performance analysis Code coverage analysis USB and parallel printer port PC connection
DS70072C-page 25-4
Microchip's In-Circuit Debugger, MPLAB ICD, will be a powerful, low cost, run-time development tool. This tool is based on the PICmicro and dsPIC Flash devices. The MPLAB ICD 2 will utilize the in-circuit debugging capability built into the various devices. This feature, along with Microchip's In-Circuit Serial Programming protocol (ICSP), will offer cost effective, in-circuit debugging from the graphical user interface of MPLAB IDE. This will enable a designer to develop and debug source code by watching variables, single-stepping and setting break points. Running at full speed enables testing hardware in real-time. Some of its features will include: Full speed operation to the range of the device Serial or USB PC connector Serial interface externally powered USB powered from PC interface Low noise power (VPP and VDD) for use with analog and other noise sensitive applications Operation down to 2.0V Can be used as an ICD or inexpensive serial programmer Modular application connector as MPLAB ICD Limited number of breakpoints Smart watch variable windows Some chip resources required (RAM, program memory and 2 pins)
25.2.6
The PRO MATE II universal device programmer will be a full-featured programmer capable of operating in Stand-alone mode, as well as PC-hosted mode. The PRO MATE II device programmer will have programmable VDD and VPP supplies, which will allow it to verify programmed memory at VDDMIN and VDDMAX for maximum reliability when programming requires this capability. It will have an LCD display for instructions and error messages and keys to enter commands. Interchangeable optional socket modules will support all package types. In Stand-alone mode, the PRO MATE II device programmer will be able to read, verify or program PICmicro and dsPIC30F devices. It will also be able to set code protection in this mode. PRO MATE II features will include: Runs under MPLAB IDE Field upgradable firmware DOS Command Line interface for production Host, Safe and Stand-alone operation Automatic downloading of object file SQTPSM serialization adds an unique serial number to each device programmed In-Circuit Serial Programming Kit (sold separately) Interchangeable socket modules supporting all package options (sold separately)
25
Development Tool Support
DS70072C-page 25-5
Microchip is partnering with key third party tool manufacturers for the development of quality hardware and software tools in support of the dsPIC30F Product Family. Microchip plans to offer this initial set of tools and libraries, which will enable customers to rapidly develop their dsPIC30F based application(s). Microchip will expand this current list to provide our customers with additional value added services, (i.e., repository of skilled/certified technical applications contacts, reference designs, hardware and software developers). Please refer to the Microchip web site (www.microchip.com) for the most current information about third party support for the dsPIC30F Device Family. The dsPIC30F software tools and libraries will include: Third Party C compilers Floating Point and Double Precision Math Library DSP Algorithm Library Digital Filter Design Software Utility Peripheral Driver Library CAN Library Real-Time Operating Systems (RTOS) OSEK Operating Systems TCP/IP Protocol Stacks V.22/V.22bis and V.32 ITU Specifications
The dsPIC30F hardware development board tools include: General Purpose Development Board Motor Control Development System Connectivity Development Board
25.3.1
In addition to the Microchip MPLAB C30 C Compiler, the dsPIC30F will be supported by ANSI C compilers developed by IAR, HI-TECH and Custom Computer Services (CCS). The compilers will allow dsPIC application code to be written in high level C language, and then be fully converted into machine object code for programming of the microcontroller. Each compiler tool will provide several options for compiling, so the user can select those that will maximize the efficiency of the generated code characteristics. The multiple C compiler solutions will have different price targets and features, enabling the customer to select the compiler best suited for their application requirements.
DS70072C-page 25-6
The Math Library will support several standard C functions, including, but not limited to: sin(), cos(), tan() asin(), acos(), atan(), log(), log10() sqrt(), power() ceil(), floor() fmod(), frexp()
The math function routines will be developed and optimized in dsPIC30F assembly language and will be callable from both assembly and C language. Floating point and double precision versions of each function shall be provided. The Microchip MPLAB C30 and IAR C compilers will be supported.
25.3.3
The DSP library will support multiple filtering, convolution, vector and matrix functions. Some of the functions will include, but will not be limited to: Cascaded Infinite Impulse Response (IIR) Filters Correlation Convolution Finite Impulse Response (FIR) Filters Windowing Functions FFTs LMS Filter Vector Addition and Subtraction Vector Dot Product Vector Power Matrix Addition and Subtraction Matrix Multiplication
25
Development Tool Support
DS70072C-page 25-7
Microchip will offer a digital filter design software tool which will enable the user to develop optimized assembly code for Low-pass, High-pass, Band-pass and Band-stop IIR and FIR filters, including 16-bit fractional data size filter coefficients from a graphical user interface. The application developer will enter the required filter frequency specifications and the software tool develops the filter code and coefficients. Ideal filter frequency response and time domain plots are generated for analysis. FIR filter lengths up to 513 taps and IIR filter lengths up to 10 cascaded sections will be supported. All IIR and FIR routines are generated in assembly language and will be callable from both assembly and C language. The Microchip MPLAB C30 C compiler will be supported.
25.3.5
Microchip will offer a peripheral driver library that will support the setup and control of dsPIC30F hardware peripherals, including, but not limited to: Analog-to-Digital Converter Motor Control PWM Quadrature Encoder Interface UART SPI Data Converter Interface I2C General Purpose Timers Input Capture Output Compare/Simple PWM
DS70072C-page 25-8
Microchip will offer a CAN driver library, which will support the dsPIC30F CAN peripheral. Some of the CAN functions which will be supported are: Initialize CAN Module Set CAN Operational Mode Set CAN Baud Rate Set CAN Masks Set CAN Filters Send CAN Message Receive CAN Message Abort CAN Sequence Get CAN TX Error Count Get CAN RX Error Count
25.3.7
Real-Time Operating System (RTOS) solutions for the dsPIC30F Product Family will be provided. These RTOS solutions will provide the necessary function calls and operating system routines to write efficient C and/or assembly code for multi-tasking applications. In addition, RTOS solutions will be provided that address those applications in which program and more importantly, data memory resources, are limited. Configurable and optimized kernels will be available to support various RTOS application requirements. The RTOS solutions will range from a fully-true, preemptive and multi-tasking scheduler to a cooperative type scheduler, both of which will be designed to optimally run on the dsPIC30F devices. Depending on the RTOS implementation, some of the function calls provided in the system kernel will be: Control Tasks Send And Receive Messages Handle Events Control Resources Control Semaphores Regulate Timing in a Variety of Ways Provide Memory Management Handle Interrupts and Swap Tasks
Most functions will be written in ANSI C, with the exception of time critical functions, which will be optimized in assembly, thereby reducing execution time for maximum code efficiency. The ANSI C and assembly routines will be supported by the Microchip MPLAB C30 C compiler. Electronic documentation will accompany the RTOS, enabling the user to efficiently understand and implement the RTOS in their application.
25
Development Tool Support
DS70072C-page 25-9
Operating Systems for the vehicle software standard of the dsPIC30F product family. The functionality Schnittstellen fr die Elektronik im Kraftfahrzeug interfaces for automotive electronics), is harmonized yielding OSEK/VDX.
Structured and modular RTOS software implementations based on standardized interfaces and protocols will be provided. Structured and modular implementations will provide for portability and extendability for distributed control units for vehicles. Various OSEK COM modules will be provided, such as: OSEK/COM Standard API OSEK/COM Communication API OSEK/COM Network API OSEK/COM Standard Protocols OSEK/COM Device Driver Interface
Microchip will also provide Internal and External CAN driver support. The physical layer will be integrated into the communication controllers hardware and will not be covered by the OSEK specifications. Most module functions will be developed in ANSI C, with the exception of time critical functions and peripheral utilization, which will be optimized in assembly, thereby reducing execution time for maximum code efficiency. The Microchip MPLAB C30 C compiler will be supported.
25.3.9
Microchip will offer various Transmission Control Protocol/Internet Protocol (TCP/IP) Stack Layer solutions for Internet connectivity solutions implemented on the dsPIC30F product family. Both reduced and full stack implementations will be provided, which will allow the user to select the optimum TCP/IP stack solution for their application. Application protocol layers, such as FTP, TFTP and SMTP, Transport and Internet layers, such as TCP, UDP, ICMP and IP, and Network Access layers, such as PPP, SLIP, ARP and DHCP, will be provided. Various configurations, such as a minimal UDP/IP stack will be available for limited connectivity requirements. Most stack protocol functions will be developed and optimized in Microchips MPLAB C30 C language. Assembly language coding may be developed for specific dsPIC30F hardware peripherals and Ethernet drivers to optimize code size and execution time. These assembly language specific routines will be assembly and C callable. Electronic documentation will accompany the TCP/IP protocol stack, enabling the user to efficiently understand and implement the protocol stack in their application.
DS70072C-page 25-10
Microchip will offer ITU compliant V.22/V.22bis (1200/2400 bps) and V.32 (non-trellis coding at 9600 bps) modem specifications to support a range of connected applications. Applications which will benefit from these modem specifications will be numerous and will fall into many applications, some of which are listed here: Internet enabled home security systems Internet connected power, gas and water meters Internet connected vending machines Smart Appliances Industrial monitoring POS Terminals Set Top Boxes Drop Boxes Fire Panels
Most ITU specification modules will be developed and optimized in Microchips MPLAB C30 C language. Assembly language coding may be developed for specific dsPIC30F hardware peripherals, along with key transmitter and receiver filtering routines to optimize code size and execution time. These assembly language specific routines will be assembly and C callable. Electronic documentation will accompany the modem library, enabling the user to efficiently understand and implement the library functions.
25.4
Microchip will initially provide three hardware development boards, which will provide the application developer with a tool in which to quickly prototype and validate key design requirements. Each board will feature key dsPIC30F peripherals and support Microchips MPLAB In-Circuit Debugger (ICD 2) tool for cost effective debugging and programming of the dsPIC30F device. The three initial boards to be provided are: General Purpose Development Board Motor Control Development System Connectivity Development Board
25
Development Tool Support
DS70072C-page 25-11
The dsPIC30F general purpose development board will provide the application designer with a low cost development tool in which to become familiar with the dsPIC30F 16-bit architecture, high performance peripherals and powerful instruction set. The development board will serve as an ideal prototyping tool in which to quickly develop and validate key design requirements. Some key features and attributes of the general purpose development board will be: Supports various dsPIC30F packages CAN communication channel RS-232 and RS-485 communication channels Codec interface with line in/out jacks In-Circuit Debugger interface MPLAB ICE 4000 emulation support Microchip temperature sensor Microchip Op Amp circuit, supporting user input signals Microchip Digital-to-Analog Converter 2x16 LCD General purpose prototyping area Various LEDS, switches and potentiometers
The general purpose development board will be shipped with a 9V power supply, RS-232 I/O cable, preprogrammed dsPIC30F device, example software and appropriate documentation to enable the user to exercise the development board demonstration programs.
DS70072C-page 25-12
The dsPIC30F motor control development system will initially provide the application developer with three main components for quick prototyping and validation of BLDC, PMAC and ACIM applications. The three main components will be: dsPIC30F Motor Control Main Board 3-phase Low Voltage Power Module 3-phase High Voltage Power Module The main control board will support the dsPIC30F6010 device, various peripheral interfaces, and a custom interface header system that will allow different motor power modules to be connected. The control board also will have connectors for mechanical position sensors, such as incremental rotary encoders and hall effect sensors, and a breadboard area for custom circuits. The main control board will receive its power from a standard plug-in transformer. The low voltage power module will be optimized for 3-phase motor applications that will require a DC bus voltage less than 60 volts and will deliver up to 400W power output. The 3-phase low voltage power module is intended to power BLDC and PMAC motors. The high voltage power module will be optimized for 3-phase motor applications that require DC bus voltages up to 400 volts and up to 1 kW power output. The high voltage module will have an active power factor correction circuit that will be controlled by the dsPIC30F device. This power module is intended for AC induction motor and power inverter applications. Both power modules will have automatic Fault protection and electrical isolation from the control interface. Both power module boards will provide preconditioned voltage and current signals to the main control board. All position feedback devices that will be isolated from the motor control circuitry, such as incremental encoders, hall-effect sensors or tachometer sensors, will be directly connected to the main control board. Both modules will be equipped with motor braking circuits.
25
Development Tool Support
DS70072C-page 25-13
The dsPIC30F connectivity development board will provide the application developer a basic platform for developing and evaluating various connectivity solutions, implementing TCP/IP protocol layers combined with V.22/V.22bis and V.32 (non-trellis coding) ITU specifications, across PSTN or Ethernet communication channels. Some key features and attributes of the connectivity development board will be: Supports the dsPIC30F6014 device Media Access Control (MAC) and PHY interface PSTN interface with DAA/AFE RS-232 and RS-485 communication channels In-Circuit Debugger interface MPLAB ICE 4000 emulation support Microchip temperature sensor Microchip Digital-to-Analog Converter 2x16 LCD General purpose prototyping area Various LEDs, switches and potentiometers
The connectivity development board will be shipped with a 9V power supply, RS-232 I/O cable and preprogrammed dsPIC30F devices with example connectivity software and appropriate documentation to enable the user to exercise the development board connectivity demo program.
DS70072C-page 25-14
Note:
Please visit the Microchip web site (www.microchip.com) for additional Application Notes and code examples for the dsPIC30F Family of devices.
25
Development Tool Support
DS70072C-page 25-15
Revision B
There were no technical content or editorial revisions to this section of the manual, however, this section was updated to reflect Revision B throughout the manual.
Revision C
There were no technical content revisions to this section of the manual, however, this section was updated to reflect Revision C throughout the manual.
DS70072C-page 25-16
26
Appendix
DS70074C-page 26-1
DS70074C-page 26-2
Appendix
The device that sends the data to the bus. The device that receives the data from the bus. The device which initiates the transfer, generates the clock and terminates the transfer. Slave The device addressed by a master. Multi-master More than one master device in a system. These masters can attempt to control the bus at the same time without corrupting the message. Arbitration Procedure that ensures that only one of the master devices will control the bus. This ensures that the transfer data does not get corrupted. Synchronization Procedure where the clock signals of two or more devices are synchronized.
DS70074C-page 26-3
Sent by Slave
S R/W ACK
Figure A-3:
ACK
S R/W ACK
DS70074C-page 26-4
Appendix
If the master is receiving the data (master-receiver), it generates an Acknowledge signal for each received byte of data, except for the last byte. To signal the end of data to the slave-transmitter, the master does not generate an acknowledge (not acknowledge). The slave then releases the SDA line so the master can generate the Stop condition. The master can also generate the Stop condition during the Acknowledge pulse for valid termination of data transfer. If the slave needs to delay the transmission of the next byte, holding the SCL line low will force the master into a wait state. Data transfer continues when the slave releases the SCL line. This allows the slave to move the received data or fetch the data it needs to transfer before allowing the clock to start. This wait state technique can also be implemented at the bit level, Figure A-5. Figure A-5: Data Transfer Wait State
SDA MSb Acknowledgment Byte Complete Signal from Receiver Interrupt with Receiver Acknowledgment Signal from Receiver
Clock Line Held Low while Interrupts are Serviced SCL S Start Condition 1 2 Address 7 8 R/W 9 ACK Wait State 1 2 Data 38 9 ACK P Stop Condition
DS70074C-page 26-5
A master transmitter addresses a slave receiver with a 7-bit address. The transfer direction is not changed.
For 10-bit address: S Slave Address R/W A1 (Code + A9:A8) (write) A master transmitter addresses a slave receiver with a 10-bit address. A = acknowledge (SDA low) A = not acknowledge (SDA high) S = Start Condition P = Stop Condition Slave Address (A7:A0) A2 Data A Data A/A P
Figure A-7:
Master-Receiver Sequence
For 7-bit address: S Slave Address '1' (read) R/W A Data A Data A P
For 10-bit address: S Slave Address (Code + A9:A8) (write) A master transmitter addresses a slave receiver with a 10-bit address. A = acknowledge (SDA low) A = not acknowledge (SDA high) S = Start Condition P = Stop Condition R/W A1 Slave Address (A7:A0) A2 Sr Slave Address (Code + A9:A8) (read) R/W A3 Data A Data A P
DS70074C-page 26-6
Appendix
(write)
Transfer direction of data and acknowledgment bits depends on R/W bits. Combined format: Sr Slave Address R/W A (Code + A9:A8) (write) Slave Address A Data A (A7:A0) Data A/A Sr Slave Address R/W A Data A (Code + A9:A8) (read) Data A P
Combined format - A master addresses a slave with a 10-bit address, then transmits data to this slave and reads data from this slave. A = acknowledge (SDA low) A = not acknowledge (SDA high) S = Start Condition P = Stop Condition
DS70074C-page 26-7
Masters that also incorporate the slave function, and have lost arbitration must immediately switch over to Slave-receiver mode. This is because the winning master-transmitter may be addressing it. Arbitration is not allowed between: A repeated Start condition A Stop condition and a data bit A repeated Start condition and a Stop condition Care needs to be taken to ensure that these conditions do not occur.
DS70074C-page 26-8
Appendix
CLK 2
SCL
DS70074C-page 26-9
SCL 90 SDA
91 92
93
Start Condition
Stop Condition
I2C Bus Start/Stop Bits Timing Specification Sym Characteristic 100 kHz mode 400 kHz mode 100 kHz mode 400 kHz mode 100 kHz mode 400 kHz mode 100 kHz mode 400 kHz mode Min 4700 600 4000 600 4700 600 4000 600 Typ Max Units ns ns ns ns Conditions Only relevant for repeated Start condition After this period the first clock pulse is generated
TSU:STA Start condition Setup time THD:STA Start condition Hold time TSU:STO Stop condition Setup time THD:STO Stop condition Hold time
Figure A-12:
103 SCL
100 101
102
90 91
106
107 92
DS70074C-page 26-10
Appendix
Cb is specified to be from 10 to 400 pF Cb is specified to be from 10 to 400 pF Only relevant for repeated Start condition After this period the first clock pulse is generated
103
TF
TSU:STA Start condition setup time THD:STA THD:DAT TSU:DAT TSU:STO TAA TBUF
100 kHz mode 400 kHz mode Start condition hold 100 kHz mode time 400 kHz mode Data input hold time 100 kHz mode 400 kHz mode Data input setup time 100 kHz mode 400 kHz mode Stop condition setup 100 kHz mode time 400 kHz mode Output valid from 100 kHz mode clock 400 kHz mode Bus free time 100 kHz mode 400 kHz mode
Note 2
Note 1 Time the bus must be free before a new transmission can start
D102 Cb Bus capacitive loading 400 pF Note 1: As a transmitter, the device must provide this internal minimum delay time to bridge the undefined region (min. 300 ns) of the falling edge of SCL to avoid unintended generation of Start or Stop conditions. 2: A Fast mode I2C-bus device can be used in a Standard mode I2C-bus system, but the requirement TSU;DAT 250 ns must then be met. This will automatically be the case if the device does not stretch the LOW period of the SCL signal. If such a device does stretch the LOW period of the SCL signal, it must output the next data bit to the SDA line, TR max.+TSU; DAT = 1000 + 250 = 1250 ns (according to the Standard mode I2C bus specification) before the SCL line is released.
DS70074C-page 26-11
DS70074C-page 26-12
Appendix
DS70074C-page 26-13
The MAC sub-layer represents the kernel of the CAN protocol. The MAC sub-layer defines the transfer protocol (i.e., controlling the Framing, Performing Arbitration, Error Checking, Error Signalling and Fault Confinement). It presents messages received from the LLC sub-layer and accepts messages to be transmitted to the LLC sub-layer. Within the MAC sub-layer, it is decided whether the bus is free for starting a new transmission or whether a reception is just starting. The MAC sub-layer is supervised by a management entity called Fault Confinement, which is a self-checking mechanism for distinguishing short disturbances from permanent failures. Also, some general features of the bit timing are regarded as part of the MAC sub-layer. The physical layer defines the actual transfer of the bits between the different nodes with respect to all electrical properties. The PLS sub-layer defines how signals are actually transmitted and therefore deals with the description of Bit Timing, Bit Encoding and Synchronization. The lower levels of the protocol are implemented in driver/receiver chips and the actual interface, such as twisted pair wiring or optical fiber etc. Within one network, the physical layer has to be the same for all nodes. The Driver/Receiver Characteristics of the Physical Layer are not defined so as to allow transmission medium and signal level implementations to be optimized for their application. The most common example is defined in the ISO11898 Road Vehicles Multiplex Wiring specification.
DS70074C-page 26-14
Appendix
DS70074C-page 26-15
DS70074C-page 26-16
Appendix
14.
15. 16.
17.
18.
19. 20.
DS70074C-page 26-17
DS70074C-page 26-18
Appendix
DS70074C-page 26-19
Start-Of-Frame ID 10
Start-Of-Frame
12 Arbitration Field
Stored in Buffers
ID3
0 0 0
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
DS70074C-page 26-20
Any Frame 3 INT 8 Suspend Transmit 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Inter-Frame Space bus Idle 1 1 1 0 0 Data Frame or Remote Frame Message Filtering 11 Identifier 6 Control Field 4 8 Stored in Transmit/Receive Buffers Data Frame (number of bits = 44 + 8N) Bit Stuffing 8N ( N 8) Data Field 8 0 0 0 0 0 0 0 0 15 CRC 16 CRC Field 1 7 End-OfFrame 1 1 1 1 1 1 1 1 Any Frame 3 INT 8 Suspend Transmit
Figure B-2:
Start-Of-Frame ID10
ID3
0 0 0
Bit Stuffing
Appendix
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
Figure B-3:
DS70074C-page 26-21
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 Inter-Frame Space bus Idle
26
Start-Of-Frame ID 10
Start-Of-Frame
1 0 0
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
DS70074C-page 26-22
Any Frame 3 INT 8 Suspend Transmit 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Inter-Frame Space bus Idle 1 1 1 0 0 Data Frame or Remote Frame Message Filtering 11 12 Arbitration Field Identifier Stored in Buffers 6 Control Field 4 Bit Stuffing Remote Frame (number of bits = 44) 15 CRC 16 CRC Field 1 7 End-OfFrame 1 1 1 1 1 1 1 1 Any Frame 3 INT 8 Suspend Transmit
Figure B-4:
Start-Of-Frame ID 10
12 Arbitration Field
ID3
0 0 0
Appendix
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
Figure B-5:
Error Frame
DS70074C-page 26-23
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 Inter-Frame Space bus Idle
26
DS70074C-page 26-24
Appendix
DS70074C-page 26-25
SCK I S Transmitter
2
WS SD
I2S Receiver
Receiver master
I2S Controller
Figure C-2:
SCK
SD
MSB
LSB
MSB
LSB
WS
Note:
A 5 bit transfer is shown here for illustration purposes. The I2S protocol does not specify word length this is system dependent.
C.2
AC 97 Protocol The Audio Codec 97 (AC 97) specification defines a standard architecture and digital interface protocol for audio codecs used in PC platforms. The digital interface protocol for an AC 97 compliant codec is called AC-Link and is the focus of this discussion. The specific requirements and features of the AC 97 controller device are not described here. This Appendix information is intended to supplement the AC 97 Component Specification document, which is published by Intel, Corp.
C.3
AC-Link Signal Descriptions All AC-Link signals are derived from the AC 97 master clock source. The recommended clock source is a 24.576 MHz crystal connected to the AC 97 codec to minimize clock jitter. The 24.576 MHz clock may also be provided by the AC 97 controller or by an external source. All AC-Link signal names are referenced to the AC 97 controller, not the AC 97 codec. The controller is the device that generates the SYNC signal to initiate data transfers. Each signal is described in subsequent sections.
DS70074C-page 26-26
Appendix
DS70074C-page 26-27
DS70074C-page 26-28
Appendix
AC 97 Controller
SDATA_OUT SDATA_IN
AC 97 Codec
/RESET
DS70074C-page 26-29
SYNC
SDATA_OUT
Tag Frame
Command Address
Command Data
SDATA_IN
Tag Frame
Status Address
Status Data
Figure C-5:
Slot 3 Slot 4 Slot 5 Slot 6 Slot 7 Slot 8 Slot 9 Slot 10 Slot 11 Slot 12
bits 11-2: On demand data request flags 0 = send data, 1 = do NOTsend data
DS70074C-page 26-30
Appendix
DS70074C-page 26-31
DS70074C-page 26-32
Index
C
CAN Buffer Reception and Overflow Truth Table .......... 23-44 Message Acceptance Filters ................................. 23-12 CAN Library ..................................................................... 25-9 Capture Buffer Operation................................................. 13-8 Clock Switching Aborting ................................................................... 7-36 Enable ..................................................................... 7-34 Entering Sleep Mode During ................................... 7-36 Operation................................................................. 7-34 Recommended Code Sequence ............................. 7-36 Tips.......................................................................... 7-36 CN Change Notification Pins ......................................... 11-7 Configuration and Operation ................................... 11-8 Control Registers..................................................... 11-7 Operation in Sleep and Idle Modes ......................... 11-8 Code Examples Clock Switching ....................................................... 7-37 Compare Mode Toggle Mode Pin State Setup........ 14-8 Compare Mode Toggle Setup and Interrupt Servicing.......................................................... 14-8 Configuration Register Write ................................... 5-15 Continuous Output Pulse Setup and Interrupt Servicing........................................................ 14-16 Initialization Code for 16-bit Asynchronous Counter Mode Using an External Clock Input ............. 12-11 Initialization Code for 16-bit Gated Time Accumulation Mode ............................................................. 12-13 Initialization Code for 16-bit Synchronous Counter Mode Using an External Clock Input ....................... 12-10 Initialization Code for 16-bit Timer Using System Clock................................................... 12-9 Initialization Code for 32-bit Gated Time Accumulation Mode ....................................... 12-20 Initialization Code for 32-bit Synchronous Counter Mode Using an External Clock Input ....................... 12-19 Initialization Code for 32-bit Timer Using Instruction Cycle as Input Clock...................................... 12-18 Prescaled Capture................................................... 13-7 PWM Mode Pulse Setup and Interrupt Servicing........................................................ 14-22 Reading from a 32-bit Timer.................................. 12-21 Single Output Pulse Setup and Interrupt Servicing........................................................ 14-12 Single Row Programming........................................ 5-14 8-bit Transmit/Receive (UART1) ........................... 19-20 9-bit Transmit/Receive (UART1), Address Detect Enabled ......................................................... 19-20 CODEC Interface Basics and Terminology ..................... 22-8 Complementary PWM Output Mode.............................. 15-26 Configuration Bit Descriptions ......................................... 24-6 BOR and POR ......................................................... 24-6 General Code Segment ........................................... 24-6 Motor Control PWM Module .................................... 24-6 Oscillator.................................................................. 24-6 Connection Considerations............................................ 17-47 Connectivity Development Board .................................. 25-14 Control Register Descriptions .......................................... 3-18
B
Barrel Shifter .................................................................... 2-26 Baud Rate Generator (BRG)...................................................... 19-8 Tables ...................................................................... 19-9 BF .......................................................................21-18, 21-19 Bit-Reversed Addressing ................................................. 3-14 and Modulo Addressing ........................................... 3-15 Code Example ......................................................... 3-18 Intro.......................................................................... 3-14 Modifier Value .......................................................... 3-16 Operation ................................................................. 3-15 Block Diagrams Dedicated Port Structure.......................................... 11-2 DSP Engine ............................................................. 2-19 dsPIC30F CPU Core.................................................. 2-3 External Power-on Reset Circuit (For Slow VDD Rise Time) ......................................................... 8-7 Input Capture ........................................................... 13-2 Input Change Notification......................................... 11-7 Low Voltage Detect (LVD) ......................................... 9-3 Oscillator System ....................................................... 7-4 Output Compare Module.......................................... 14-2 Reset System............................................................. 8-2 Shared Port Structure .............................................. 11-4 Type A Timer ........................................................... 12-3 Type B - Type C Timer Pair (32-bit Timer)............. 12-17 Type B Timer ........................................................... 12-4 Type C Timer ........................................................... 12-5 UART ....................................................................... 19-2 UART Receiver ...................................................... 19-16
DS70046E-page 1
Index
Control Registers .......................................... 12-6, 17-4, 18-4 Assignment of Interrupts .......................................... 6-14 Controlling Sample/Conversion Operation..................... 17-29 Controlling Sample/Conversion Operation (12-bit) ........ 18-19 Conversion Sequence Examples ................................... 17-31 Conversion Sequence Examples (12-bit).......................18-21 CPU Register Maps .......................................................... 2-38 Related Application Notes........................................ 2-40 Revision History ....................................................... 2-41 CPU Clocking Scheme....................................................... 7-5 CPU Priority Status ............................................................ 6-5 CPU Register Descriptions ..............................................2-11 Crystal Oscillators, Ceramic Resonators .........................7-22
E
Equations Calculating the PWM Period.................................. 14-19 Calculation for Maximum PWM Resolution ........... 14-20 Modulo End Address for Incrementing Buffer............ 3-9 Modulo Start Address for Decrementing Buffer ......... 3-9 WDT Time-out Period .............................................. 10-7 External Clock Input......................................................... 7-25 External Interrupt Support................................................ 6-10 External RC Oscillator ..................................................... 7-26 Operating Frequency ............................................... 7-27 Start-up .................................................................... 7-27 with I/O Enabled ...................................................... 7-27 External Reset (EXTR) ...................................................... 8-7
D
Data Accumulator Status Bits ................................................................ 2-23 Data Accumulator Adder/Subtractor ................................ 2-23 Data Accumulators........................................................... 2-20 Data Alignment................................................................... 3-7 Data EEPROM Programming .......................................... 5-15 Erasing One Row ..................................................... 5-19 Erasing One Word ................................................... 5-17 Reading Memory...................................................... 5-21 Row Algorithm.......................................................... 5-16 Single Word Algorithm ............................................. 5-16 Write One Row......................................................... 5-20 Writing One Word .................................................... 5-18 Data Memory Map ............................................................................ 3-3 Near ........................................................................... 3-4 Data Space Address Generator Units (AGUs)............................................. 3-5 X Address Generator Unit .......................................... 3-5 Y Address Generator Unit .......................................... 3-5 Data Space Write Saturation............................................ 2-24 DCI Buffer Control Unit ................................................. 22-13 Control Register Descriptions .................................. 22-2 Operation ............................................................... 22-10 Using the Module ................................................... 22-17 Dead Time Control ......................................................... 15-27 Determining Best Values for Crystals, Clock Mode, C1, C2, and Rs ........................................................ 7-24 Device Configuration Register Descriptions ............................................... 24-2 Device Identification Registers......................................... 24-7 Device ID (DEVID) ................................................... 24-7 Unit ID Field ............................................................. 24-7 Device Reset Times ......................................................... 8-11 Device Start-up Time Lines..............................................8-13 Device Wake-up on Sleep/Idle....................................... 13-10 Disable Interrupts Instruction ............................................. 6-8 Divide Support.................................................................. 2-27 DSP Algorithm Library...................................................... 25-7 DSP Engine...................................................................... 2-18 DSP Engine Mode Selection............................................ 2-26 DSP Engine Trap Events ................................................. 2-26 DSP Filter Design Software Utility.................................... 25-8 dsPIC Language Suite ..................................................... 25-3 dsPIC30F Hardware Development Boards .................... 25-11
F
Fail-Safe Clock Monitor (FSCM)...................................... 7-32 and Slow Oscillator Start-up .................................... 7-33 and WDT ................................................................. 7-33 Delay ....................................................................... 7-32 Flash and Data EEPROM Programming Control Registers ....................................................... 5-5 NVMADR ........................................................... 5-6 NVMCON........................................................... 5-5 NVMKEY ........................................................... 5-6 Flash Program Memory Erasing a Row ......................................................... 5-12 Loading Write Latches ............................................. 5-13 Programming Algorithm ........................................... 5-11 FSCM and Device Resets................................................... 8-12 Delay for Crystal and PLL Clock Sources................ 8-12
G
General Purpose Development Board........................... 25-12
H
Hard Traps......................................................................... 6-7 Address Error (Level 13)............................................ 6-8 Oscillator Failure (Level 14)....................................... 6-8 Priority and Conflicts.................................................. 6-7 Stack Error (Level 12)................................................ 6-6 How to Start Sampling (12-bit)....................................... 18-14 How to Start Sampling and Start Conversions (12-bit) .............................................. 18-14
I
I/O Multiplexing with Multiple Peripherals ........................ 11-4 I/O Pin Control ..............................12-22, 13-10, 14-23, 16-18 I/O Port Control Registers................................................ 11-3 I/O Ports Related Application Notes ..................................... 11-11 Revision History..................................................... 11-12 Idle Mode ......................................................................... 10-4 Time Delays on Wake-up from ................................ 10-5 Wake-up from on Interrupt....................................... 10-5 Wake-up from on Reset........................................... 10-5 Wake-up from on WDT Time-out............................. 10-5 Independent PWM Output Mode ................................... 15-30 Initialization .................................................................... 17-48 Initialization (12-bit)........................................................ 18-29
DS70046E-page 2
Index
L
LAT (I/O Latch) Registers ................................................ 11-3 Loop Constructs .............................................................. 2-30 DO ........................................................................... 2-32 REPEAT .................................................................. 2-30 Low Power 32 kHz Crystal Oscillator............................... 7-31 Low Power 32 kHz Crystal Oscillator Input.................... 12-15 LP Oscillator Continuous Operation.............................................. 7-31 Enable ..................................................................... 7-31 Intermittent Operation.............................................. 7-31 Operation with Timer1 ............................................. 7-31 LVD Control Bits ................................................................ 9-3 Current Consumption for Operation .......................... 9-5 Design Tips................................................................ 9-6 Initialization Steps...................................................... 9-5 Operation................................................................... 9-5 Operation During Sleep and Idle Mode ..................... 9-5 Related Application Notes ......................................... 9-7 Trip Point Selection ................................................... 9-3
M
Math Library..................................................................... 25-7 Microchip Hardware and Language Tools ....................... 25-2 Modes of Operation ......................................................... 14-4 Compare Mode Output Driven High ........................ 14-5 Compare Mode Output Driven Low ......................... 14-6 Compare Mode Toggle Output ................................ 14-7 Dual Compare Match............................................... 14-9 Dual Compare, Continuous Output Pulses............ 14-14 Dual Compare, Generating Continuous Output Pulses Special Cases (table) .................................... 14-17 Dual Compare, Single Output Pulse........................ 14-9 Special Cases (table) .................................... 14-13 Single Compare Match ............................................ 14-4 Modulo Addressing ............................................................ 3-7 Applicability.............................................................. 3-11 Calculation................................................................. 3-9 Initialization for Decrementing Buffer....................... 3-13 Initialization for Incrementing Modulo Buffer ........... 3-12 Start and End Address Selection............................... 3-8 W Address Register Selection................................... 3-9
DS70046E-page 3
Index
Modulo Start and End Address Selection XMODEND Register ..................................................3-8 XMODSRT Register................................................... 3-8 YMODEND Register ..................................................3-8 YMODSRT Register................................................... 3-8 Motor Control Development Board................................. 25-13 MPLAB ICD 2 In-Circuit Debugger................................... 25-5 MPLAB ICE 4000 In-Circuit Emulator .............................. 25-4 MPLAB SIM Software Simulator ...................................... 25-3 MPLAB 6.XX Integrated Development Environment Software ...................................................................25-2 Multi-Master Mode ......................................................... 21-29 Multiplier........................................................................... 2-20 Multiply Instructions.......................................................... 2-22 Loss of Lock During Normal Device Operation........ 7-30 POR and Long Oscillator Start-up Times ........................ 8-12 Port (I/O Port) Registers .................................................. 11-3 Power Saving Modes....................................................... 10-2 Power-on Reset (POR)...................................................... 8-5 Using ......................................................................... 8-7 Power-up Timer (PWRT) ................................................... 8-7 Prescaler Capture Events................................................ 13-6 Primary Oscillator ............................................................ 7-20 PRO MATE II Universal Device Programmer .................. 25-5 Program Memory Address Map ............................................................. 4-2 Counter ...................................................................... 4-4 Data Access From ..................................................... 4-4 Data Storage ............................................................. 4-7 High Word Access ..................................................... 4-7 Low Word Access ...................................................... 4-6 Program Space Visibility from Data Space................ 4-8 Related Application Notes ....................................... 4-12 Table Address Generation......................................... 4-6 Table Instruction Summary........................................ 4-5 Writes ............................................................. 4-10, 4-11 Programmable Digital Noise Filters ................................. 16-9 Programmable Oscillator Postscaler ............................... 7-33 Programmers Model .................................................. 2-3, 2-4 Register Description .................................................. 2-4 Protection Against Accidental Writes to OSCCON .......... 7-13 PSV Configuration ............................................................. 4-8 PSV Mapping with X and Y Data Spaces .................. 4-8 Timing ...................................................................... 4-10 Instruction Stalls .............................................. 4-10 Using PSV in a Repeat Loop........................... 4-10 Pulse Width Modulation Mode ....................................... 14-18 Duty Cycle ............................................................. 14-20 Period .................................................................... 14-19 With Fault Protection Input Pin .............................. 14-19 PWM Duty Cycle Comparison Units .............................. 15-20 PWM Fault Pins ............................................................. 15-34 PWM Output and Polarity Control.................................. 15-34 PWM Output Override ................................................... 15-31 PWM Special Event Trigger........................................... 15-38 PWM Time Base............................................................ 15-16 PWM Update Lockout .................................................... 15-37
N
Non-Maskable Traps.......................................................... 6-6 Address Error ............................................................. 6-6 Arithmetic Error .......................................................... 6-6 Oscillator Failure ........................................................ 6-6 Stack Error ................................................................. 6-6
O
Oscillator Configuration.............................................................. 7-6 Clock Switching Mode Configuration Bits ..........7-6 Design Tips .............................................................. 7-38 Related Application Notes........................................ 7-39 Resonator Start-up................................................... 7-22 Revision History ....................................................... 7-40 System Features Summary ....................................... 7-2 Oscillator Control Register (OSCCON) ............................ 7-13 Oscillator Mode Selection Guidelines .............................. 7-21 Oscillator Start-up From Sleep Mode............................... 7-23 Oscillator Start-up Timer (OST) ....................................... 7-31 Oscillator Switching Sequence......................................... 7-35 OSEK Operating Systems..............................................25-10 Other dsPIC30F CPU Control Registers.......................... 2-16 DISICNT...................................................................2-16 MODCON................................................................. 2-16 PSVPAG .................................................................. 2-16 TBLPAG ...................................................................2-16 XBREV .....................................................................2-16 XMODSRT, XMODEND........................................... 2-16 YMODSRT, YMODEND........................................... 2-16 Output Compare Associated Register Map ....................................... 14-24 Design Tips ............................................................ 14-26 Related Application Notes...................................... 14-27 Revision History ..................................................... 14-28 Output Compare Operating in Power Saving States......14-23 Output Compare Operation in Power Saving States Idle Mode ............................................................... 14-23 Sleep Mode ............................................................ 14-23 Output Compare Registers ..............................................14-3
Q
QEI Operation During Power Saving Modes ................. 16-19 Quadrature Decoder ...................................................... 16-10 Quadrature Encoder Interface Interrupts ....................... 16-17
R
R/W Bit.................................................................. 21-35, 26-4 Read-After-Write Dependency Rules .............................. 2-36 Reading A/D Result Buffer (12-bit) ................................ 18-27 Reading and Writing into 32-bit Timers ......................... 12-21 Reading and Writing 16-bit Timer Module Registers ............................................................... 12-15 Real-Time Operating System (RTOS) ............................. 25-9
P
Peripheral Driver Library ..................................................25-8 Peripheral Module Disable (PMD) Registers ................... 10-9 Peripheral Multiplexing..................................................... 11-4 Peripherals Using Timer Modules .................................. 12-22 Phase Locked Loop (PLL)................................................7-30 Frequency Range .................................................... 7-30 Lock Status .............................................................. 7-30 Loss of Lock During a Power-on Reset ................... 7-30 Loss of Lock During Clock Switching ....................... 7-30
DS70046E-page 4
Index
DS70046E-page 5
Index
SEVTCMP Special Event Compare .........................15-7 SR (CPU Status) ...................................................... 2-12 SR (Status in CPU) ..................................................6-15 TSCON .................................................................... 22-7 TxCON (Timer Control for Type A Time Base) ........12-6 TxCON (Timer Control for Type B Time Base) ........12-7 TxCON (Timer Control for Type C Time Base) ........12-8 UxBRG (UARTx Baud Rate) .................................... 19-7 UxMODE (UARTx Mode) ......................................... 19-3 UxRXREG (UARTx Receive) ................................... 19-6 UxSTA (UARTx Status and Control) ........................ 19-4 UxTXREG (UARTx Transmit - Write Only) .............. 19-6 XBREV (X Write AGU Bit-Reversal Addressing Control) ............................................................ 3-22 XMODEND (X AGU Modulo Addressing End) ......... 3-20 XMODSRT (X AGU Modulo Addressing Start) ........3-20 YMODEND (Y AGU Modulo Addressing End) ......... 3-21 YMODSRT (Y AGU Modulo Addressing Start) ........3-21 10-bit A/D Converter Special Function................... 17-56 12-bit A/D Converter Special Function................... 18-34 6-Output PWM Module .......................................... 15-41 8-Output PWM Module .......................................... 15-40 Reset Design Tips .............................................................. 8-17 Illegal Opcode ............................................................ 8-9 Trap Conflict............................................................... 8-9 Uninitialized W Register ............................................. 8-9 Reset Sequence................................................................. 6-2 Returning From Interrupt..................................................6-13 Round Logic .....................................................................2-25 Run-Time Self Programming (RTSP)............................... 5-10 FLASH Operations ................................................... 5-10 Operation ................................................................. 5-10 W14 Stack Frame Pointer........................................ 2-10 Special Conditions for Interrupt Latency.......................... 6-13 Special Features for Device Emulation.......................... 15-39 Special Function Register Reset States .......................... 8-16 Specifying How Conversion Results are Written Into Buffer ..................................................................... 17-30 Specifying How Conversion Results are Written into Buffer (12-bit)......................................................... 18-19 SSPOV .......................................................................... 21-19
T
Table Instruction Operation ............................................... 5-2 TCP/IP Protocol Stack ................................................... 25-10 Third Party C Compilers .................................................. 25-6 Third Party Hardware/Software Tools and Application Libraries ................................................................... 25-6 Time-base for Input Capture/Output Compare .............. 12-22 Timer as an External Interrupt Pin ................................. 12-22 Timer Interrupts ............................................................. 12-14 Timer Modes of Operation ............................................... 12-9 Synchronous Counter Using External Clock Input............................................................... 12-10 Timer Mode.............................................................. 12-9 Type A Timer Asynchronous Counter Mode Using External Clock Input ...................................... 12-11 32-bit Timer............................................................ 12-18 Timer Modules Associated Special Function Registers ................. 12-23 Timer Operation in Power Saving States....................... 12-21 Timer Operation Modes Gated Time Accumulation ..................................... 12-12 with Fast External Clock Source............................ 12-12 Timer Prescalers............................................................ 12-14 Timer Selection................................................................ 13-4 Timer Variants ................................................................. 12-3 Timers Design Tips............................................................ 12-24 Related Application Notes ..................................... 12-25 Revision History..................................................... 12-26 Timing Diagrams Brown-out Situations.................................................. 8-8 Clock Transition ....................................................... 7-35 Clock/Instruction Cycle .............................................. 7-5 Data Space Access .......................................... 2-35, 3-6 Dead Time ............................................................. 15-28 Device Reset Delay, Crystal + PLL Clock Source, PWRT Disabled ............................................... 8-13 Device Reset Delay, Crystal + PLL Clock Source, PWRT Enabled................................................ 8-14 Device Reset Delay, EC + PLL Clock, PWRT Enabled ........................................................... 8-15 Device Reset Delay, EC or RC Clock, PWRT Disabled........................................................... 8-16 Dual Compare Mode.............................................. 14-10 Dual Compare Mode (Continuous Output Pulse, PR2 = OCxRS) ................................... 14-14, 14-15 Dual Compare Mode (Single Output Pulse, OCxRS > PR2) .............................................. 14-10 Edge Detection Mode .............................................. 13-8 Gated Timer Mode Operation ................................ 12-13 Interrupt Timing During a Two-Cycle Instruction ..... 6-12 Interrupt Timing for Timer Period Match ................ 12-14 Interrupt Timing, Interrupt Occurs During 1st Cycle of a Two-Cycle Instruction ............................... 6-12 POR Module for Rising VDD ...................................... 8-6 Postscaler Update ................................................... 7-34 PWM Output ............................................... 14-18, 14-21
S
Saturation and Overflow Modes....................................... 2-24 Selecting A/D Conversion Clock .................................... 17-13 Selecting Analog Inputs for Sampling ............................ 17-14 Selecting Analog Inputs for Sampling (12-bit)................ 18-12 Selecting the A/D Conversion Clock (12-bit).................. 18-12 Selecting the Voltage Reference Source .......................17-13 Selecting the Voltage Reference Source (12-bit)........... 18-11 Setup for Continuous Output Pulse Generation............. 14-15 Shadow Registers .............................................................. 2-6 DO Loop.....................................................................2-7 PUSH.S and POP.S................................................... 2-7 Simple Capture Events .................................................... 13-4 Sleep and Idle Modes Operation.................................... 17-55 Sleep and Idle Modes Operation (12-bit) .......................18-33 Sleep Mode ...................................................................... 10-2 and FSCM Delay...................................................... 10-3 Clock Selection on Wake-up from............................ 10-2 Delay on Wake-up from ........................................... 10-3 Delay Times for Exit ................................................. 10-3 Wake-up from on Interrupt ....................................... 10-4 Wake-up from on Reset ........................................... 10-4 Wake-up from on Watchdog Time-out ..................... 10-4 Wake-up from with Crystal Oscillator or PLL ........... 10-3 Slow Oscillator Start-up.................................................... 10-3 Soft Traps........................................................................... 6-6 Arithmetic Error (Level 11) ......................................... 6-7 Software Reset Instruction (SWR) ..................................... 8-7 Software Stack Examples ................................................................... 2-9 Pointer........................................................................ 2-8 Pointer Overflow ...................................................... 2-10 Pointer Underflow .................................................... 2-10
DS70046E-page 6
Index
V
V.22/V.22bis and V.32 Specification.............................. 25-11
W
Wake-up from Sleep and Idle .......................................... 6-10 Watchdog Time-out Reset (WDTR)................................... 8-7 Watchdog Timer .............................................................. 10-6 Enabling and Disabling............................................ 10-6 Operation................................................................. 10-7 Operation in Sleep and Idle Modes ......................... 10-8 Period Selection ...................................................... 10-7 Prescalers................................................................ 10-7 Resetting ................................................................. 10-8 Software Controlled ................................................. 10-6 WCOL ...................................................... 21-18, 21-19, 21-21 WDT and Power Saving Modes Design Tips............................................................ 10-10 Related Application Notes ..................................... 10-11 Revision History..................................................... 10-12 Working Register Array...................................................... 2-6 W Register Memory Mapping .................................... 2-6 W Registers and Byte Mode Instructions .................. 2-6 W0 and File Register Instructions.............................. 2-6 Writing to Device Configuration Registers ....................... 5-14 Write Algorithm ........................................................ 5-14
U
UART ADDEN Control Bit................................................. 19-18 Alternate I/O Pins................................................... 19-10 Associated Registers ............................................. 19-22 Baud Rate Generator............................................... 19-8 Configuration.......................................................... 19-10 Control Registers ..................................................... 19-3 Design Tips ............................................................ 19-23 Disabling ................................................................ 19-10 Enabling ................................................................. 19-10 Other Features....................................................... 19-21 Auto Baud Support ........................................ 19-21 Loopback Mode ............................................. 19-21 Operation During CPU Sleep and Idle Modes .............................................. 19-21 Receiver................................................................. 19-14 Buffer (UxRXB) .............................................. 19-14 Error Handling................................................ 19-14 Interrupt ......................................................... 19-15 Setup for Reception ....................................... 19-17 Related Application Notes...................................... 19-24 Setup for 9-bit Transmit ......................................... 19-18 Transmitter............................................................. 19-11 Buffer (UxTXB) .............................................. 19-12 Interrupt ......................................................... 19-12 Setup ............................................................. 19-13 Transmission of Break Characters ................ 19-14 Using for 9-bit Communication............................... 19-18 UART Autobaud Support ................................................. 13-9 Uninitialized W Register Reset .......................................... 2-7 USART Initialization ............................................................ 19-20 Introduction .............................................................. 19-2 Receiving Break Characters .................................. 19-19 Revision History ..................................................... 19-25 Setup for 9-bit Reception Using Address Detect Mode .............................................................. 19-19 Using QEI as Alternate 16-bit Timer/Counter ................ 16-16 Using Table Read Instructions ........................................... 5-3 Byte Mode.................................................................. 5-3 Word Mode ................................................................ 5-3
Z
10-bit Address Mode...................................................... 21-35 12-Bit A/D ADCHS ........................................................... 17-4, 18-4 ADPCFG......................................................... 17-4, 18-4 12-bit A/D Operation During CPU Idle Mode............... 17-55, 18-33 Operation During CPU Sleep Mode ........... 17-55, 18-33 16-bit Up/Down Position Counter .................................. 16-12 32-bit Timer Configuration ............................................. 12-16
DS70046E-page 7
ASIA/PACIFIC
Australia - Sydney Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 China - Beijing Tel: 86-10-8528-2100 Fax: 86-10-8528-2104 China - Chengdu Tel: 86-28-8676-6200 Fax: 86-28-8676-6599 China - Fuzhou Tel: 86-591-8750-3506 Fax: 86-591-8750-3521 China - Hong Kong SAR Tel: 852-2401-1200 Fax: 852-2401-3431 China - Qingdao Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 China - Shanghai Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 China - Shenyang Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 China - Shenzhen Tel: 86-755-8203-2660 Fax: 86-755-8203-1760 China - Shunde Tel: 86-757-2839-5507 Fax: 86-757-2839-5571 China - Wuhan Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 China - Xian Tel: 86-29-8833-7250 Fax: 86-29-8833-7256
ASIA/PACIFIC
India - Bangalore Tel: 91-80-4182-8400 Fax: 91-80-4182-8422 India - New Delhi Tel: 91-11-5160-8631 Fax: 91-11-5160-8632 India - Pune Tel: 91-20-2566-1512 Fax: 91-20-2566-1513 Japan - Yokohama Tel: 81-45-471- 6166 Fax: 81-45-471-6122 Korea - Gumi Tel: 82-54-473-4301 Fax: 82-54-473-4302 Korea - Seoul Tel: 82-2-554-7200 Fax: 82-2-558-5932 or 82-2-558-5934 Malaysia - Penang Tel: 60-4-646-8870 Fax: 60-4-646-5086 Philippines - Manila Tel: 63-2-634-9065 Fax: 63-2-634-9069 Singapore Tel: 65-6334-8870 Fax: 65-6334-8850 Taiwan - Hsin Chu Tel: 886-3-572-9526 Fax: 886-3-572-6459 Taiwan - Kaohsiung Tel: 886-7-536-4818 Fax: 886-7-536-4803 Taiwan - Taipei Tel: 886-2-2500-6610 Fax: 886-2-2508-0102 Thailand - Bangkok Tel: 66-2-694-1351 Fax: 66-2-694-1350
EUROPE
Austria - Wels Tel: 43-7242-2244-399 Fax: 43-7242-2244-393 Denmark - Copenhagen Tel: 45-4450-2828 Fax: 45-4485-2829 France - Paris Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 Germany - Munich Tel: 49-89-627-144-0 Fax: 49-89-627-144-44 Italy - Milan Tel: 39-0331-742611 Fax: 39-0331-466781 Netherlands - Drunen Tel: 31-416-690399 Fax: 31-416-690340 Spain - Madrid Tel: 34-91-708-08-90 Fax: 34-91-708-08-91 UK - Wokingham Tel: 44-118-921-5869 Fax: 44-118-921-5820
02/16/06
DS70046E