ADuCM360/ADuCM361 Hardware User Guide UG-367 One Technology Way • P.O. Box 9106 • Norwood, MA 02062-9106, U.S.A. • Tel: 781.329.4700 • Fax: 781.461.3113 • www.analog.com Using the ADuCM360/ADuCM361 Low Power, Precision Analog Microcontroller with Dual Sigma-Delta ADCs, ARM Cortex-M3 SCOPE This user guide provides a detailed description of the ADuCM360/ADuCM361 functionality and features. DISCLAIMER Information furnished by Analog Devices, Inc., is believed to be accurate and reliable. However, no responsibility is assumed by Analog Devices for its use, nor any infringements of patents or other rights of third parties that may result from its use. Specifications subject to change without notice. No license is granted by implication or otherwise under any patent or patent rights of Analog Devices. Trademarks and registered trademarks are the property of their respective owners. DAC AVDD AGND ON-CHIP 1.8V ANALOG LDO 12-BIT DAC BUFFER POWER-ON RESET RESET ON-CHIP OSCILLATOR (1% TYPICAL) 16MHz XTALO VBIAS GENERATOR AIN0 AIN1 AIN2 AIN3 AIN4/IEXC AIN5/IEXC AMP BUF MOD2 GAIN VREF 24-BIT Σ-Δ ADC ARM CORTEX-M3 PROCESSOR Σ-Δ MODULATOR SINC3/4 FILTER 16MHz AIN6/IEXC AIN7/VBIAS0/IEXC/ EXTREF2IN+ ON-CHIP 1.8V DIGITAL LDO SINC2 FILTER MUX AIN8/EXTREF2IN– AIN9/DACBUFF+ AIN10 AIN11/VBIAS1 VREF AMP BUF MOD2 GAIN 24-BIT Σ-Δ ADC Σ-Δ MODULATOR SINC3/4 FILTER GPIO PORTS UART PORTS 2 × SPI PORTS I2C PORTS MEMORY 128kB FLASH 8kB SRAM TIMER0 TIMER1 WATCHDOG WAKE-UP TIMER PWM DMA AND INTERRUPT CONTROLLER SERIAL WIRE DEBUG, PROGRAMMING AND DEBUG SELECTABLE VREF SOURCES DAC, TEMP, IOVDD/4, AVDD/4 XTALI 19 GENERALPURPOSE I/O PORTS SWDIO SWCLK PRECISION REFERENCE ADuCM360 DVDD_REG IREF BUFFER CURRENT SOURCES AVDD_REG GND_SW VREF– VREF+ INT_REF Figure 1. ADuCM360 Block Diagram PLEASE SEE THE LAST PAGE FOR AN IMPORTANT WARNING AND LEGAL TERMS AND CONDITIONS. Rev. D | Page 1 of 176 IOVDD IOVDD 10464-001 BUFFER ADuCM360/ADuCM361 Hardware User Guide UG-367 TABLE OF CONTENTS Scope .................................................................................................. 1 System Exceptions and Peripheral Interrupts............................. 56 Disclaimer .......................................................................................... 1 Cortex-M3 and Fault Management ......................................... 56 Revision History ............................................................................... 4 External Interrupt Configuration ............................................ 59 Using the ADuCM360/ADuCM361 Hardware User Guide ....... 5 Interrupt Memory Mapped Registers ...................................... 59 Number Notations ........................................................................ 5 DMA Controller ............................................................................. 64 Register Access Conventions ...................................................... 5 DMA Features ............................................................................. 64 Acronyms and Abbreviations ..................................................... 5 DMA Overview .......................................................................... 64 Introduction to the ADuCM360/ADuCM361 ............................. 6 DMA Operation ......................................................................... 64 Main Features of ADuCM360/ADuCM361 ............................. 7 Error Management ..................................................................... 64 Memory Organization ................................................................. 9 Interrupts ..................................................................................... 64 Clocking Architecture .................................................................... 10 DMA Priority .............................................................................. 65 Clocking Architecture Features ................................................ 10 Channel Control Data Structure .............................................. 65 Clocking Architecture Block Diagram .................................... 10 Control Data Configuration ..................................................... 66 Clocking Architecture Overview.............................................. 11 DMA Transfer Types (CHNL_CFG[2:0]) ............................... 67 Clocking Architecture Operation............................................. 11 Address Calculation ................................................................... 69 Clocking Architecture Memory Mapped Registers ............... 11 DMA Memory Mapped Registers ............................................ 72 Power Management Unit ............................................................... 15 Flash Controller .............................................................................. 86 Power Management Unit Features ........................................... 15 Flash Controller Features .......................................................... 86 Power Management Unit Overview......................................... 15 Flash Controller Overview ........................................................ 86 Power Management Unit Operation ........................................ 15 Flash Memory Organization ..................................................... 86 Power Management Unit Memory Mapped Registers .......... 16 Writing to Flash/EE Memory ................................................... 87 Cortex-M3 Processor ..................................................................... 18 Erasing Flash/EE Memory ........................................................ 87 Cortex-M3 Processor Features ................................................. 18 Flash Controller Performance and Command Duration ..... 88 Cortex-M3 Processor Overview ............................................... 18 Flash Protection .......................................................................... 88 Cortex-M3 Processor Operation .............................................. 18 Flash Controller Failure Analysis Key ..................................... 89 Related Documents .................................................................... 19 Flash Integrity Signature Feature ............................................. 89 ADC Circuit .................................................................................... 20 Integrity of the Kernel................................................................ 89 ADC Circuit Features ................................................................ 20 Abort Using Interrupts .............................................................. 89 ADC Circuit Block Diagram..................................................... 20 Flash Controller Memory Mapped Registers ......................... 90 ADC Circuit Overview .............................................................. 20 Reset ................................................................................................. 99 ADC Circuit Operation ............................................................. 21 Reset Features ............................................................................. 99 Other ADC Support Circuits .................................................... 25 Reset Operation .......................................................................... 99 Other ADC Details..................................................................... 28 Reset Memory Mapped Registers .......................................... 100 ADC Circuit Memory Mapped Registers ............................... 35 Digital I/Os .................................................................................... 101 DAC .................................................................................................. 51 Digital I/Os Features ................................................................ 101 DAC Features .............................................................................. 51 Digital I/Os Block Diagram .................................................... 101 DAC Overview............................................................................ 51 Digital I/Os Overview.............................................................. 101 DAC Operation ........................................................................... 51 Digital I/Os Operation............................................................. 101 DAC DMA Operation................................................................ 53 Digital Port Multiplex .............................................................. 103 DAC Memory Mapped Registers ............................................. 54 GPIO Memory Mapped Registers.......................................... 104 Rev. D | Page 2 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide I2C Serial Interface ....................................................................... 107 General-Purpose Timers Overview .......................................147 I2C Features ............................................................................... 107 General-Purpose Timers Operation ......................................147 I2C Overview............................................................................. 107 General-Purpose Timers Memory Mapped Registers .........149 I C Operation............................................................................ 107 Wake-Up Timer .............................................................................153 I C Operating Modes ............................................................... 109 Wake-Up Timer Features .........................................................153 I C Memory Mapped Registers .............................................. 116 Wake-Up Timer Block Diagram .............................................153 Serial Peripheral Interfaces ......................................................... 125 Wake-Up Timer Overview ......................................................153 SPI Features ............................................................................... 125 Wake-Up Timer Operation .....................................................153 SPI Overview ............................................................................ 125 Wake-Up Timer Memory Mapped Registers ........................155 SPI Operation ........................................................................... 125 Watchdog Timer............................................................................160 SPI Transfer Initiation ............................................................. 126 Watchdog Timer Features ........................................................160 SPI Interrupts ............................................................................ 128 Watchdog Timer Block Diagram ............................................160 Wire-OR’ed Mode (WOM) ..................................................... 128 Watchdog Timer Overview .....................................................160 CSERR Condition .................................................................... 129 Watchdog Timer Operation ....................................................160 SPI1 DMA ................................................................................. 129 Watchdog Timer Memory Mapped Registers .......................161 SPI and Power-Down Modes ................................................. 133 PWM ...............................................................................................163 SPI Memory Mapped Registers .............................................. 133 PWM Features ...........................................................................163 UART Serial Interface .................................................................. 138 PWM Overview ........................................................................163 UART Features ......................................................................... 138 PWM Operation .......................................................................163 UART Overview ....................................................................... 138 PWM Interrupt Generation ....................................................167 UART Operation ...................................................................... 138 PWM Memory Mapped Registers ..........................................167 Programmed I/O Mode........................................................... 138 Power Supply Support Circuits ...................................................170 Enable/Disable Bit .................................................................... 139 Power Supply Support Circuits Features................................170 Interrupts................................................................................... 139 Hardware Design Considerations ...............................................171 Buffer Requirements ................................................................ 139 Pin Configuration and Function Descriptions .....................171 DMA Mode ............................................................................... 139 Typical System Configuration .................................................174 UART Memory Mapped Registers......................................... 141 Serial Wire Debug Interface ....................................................175 General-Purpose Timers ............................................................. 147 Related Links .................................................................................176 2 2 2 General-Purpose Timers Features ......................................... 147 General-Purpose Timers Block Diagram ............................. 147 Rev. D | Page 3 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 REVISION HISTORY 9/14—Rev. C to Rev. D Moved Memory Section ................................................................ 11 Changes to ADC Circuit Overview Section ............................... 20 Changes to Digital Filter Option Section .................................... 28 Changes to Table 16 ........................................................................ 29 Changes to Table 30 ........................................................................ 41 Changes to Table 48 ........................................................................ 49 Changes to Figure 18 ...................................................................... 52 Changes to Table 65 ........................................................................ 66 Changes to Table 66 ........................................................................ 68 Changes to Table 67 ........................................................................ 69 Changes to Flash Protection: User Read Protection Section .... 88 Changes to I2C Features Section ................................................. 107 Changes to Table 131.................................................................... 117 Changes to Table 140.................................................................... 120 Changes to Table 141.................................................................... 121 Changes to Pin 36 and Pin 36 Description, Table 208 ............. 172 5/14—Rev. B to Rev. C Change to Page 61 ...........................................................................61 7/13—Rev. A to Rev. B Changes to Figure 1 ........................................................................... 1 Moved Revision History Section ..................................................... 4 Added Figure 2, Renumbered Sequentially; Changes to Single 12-Bit Voltage Output DAC Section .........................................................7 Changes to Memory Section ......................................................................8 Changes to Figure 3 .........................................................................10 Change to Table 4 ............................................................................11 Changes to Clocking Architecture Control Register 0 Section and Table 5 ................................................................................................... 12 Changes to Power Management Unit Operation Section ..........13 Changes to ADC Circuit Overview Section and Figure 4 .........20 Changes to Analog Input Channel Configuration Section ........21 Removed Step Detection Circuit—Mode 1 Operation, DETCON[3] = 1 Section ................................................................24 Changed Step Detection Circuit—Mode 0 Operation, DETCON[3] = 0 Section to Step Detection Circuit Section; Changes to Figure 7 Caption ..........................................................26 Changes to Bias Voltage (VBIAS) Generator Circuit Section, Digital Filter Option Section, and Figure 10 ...............................28 Changes to Table 16 and Table 17; Added Simultaneous Sampling Section .............................................................................29 Changes to ADC Data Register Section and Figure 11 Caption .... 34 Changes to Bit 2, Table 22 .............................................................. 37 Changes to Offset Calibration Registers Section and Table 25 ....... 39 Changes to Bit 15 and Bit 14, Table 29 ......................................... 40 Changes to Table 42 and Table 43 ................................................. 47 Change to Bit 6, Table 48 ................................................................ 49 Changes to Figure 17....................................................................... 52 Change to DAC NPN Transistor Driver Mode, DACCON[8] = 1 Section............................................................................................ 53 Changes to Table 55 ........................................................................ 56 Changes to Flash Protection: User Read Protection Section .......... 88 Changes to Flash Controller System IRQ Abort Enable Register Section and Table 109 ..................................................................... 95 Changes to Flash Controller System IRQ Abort Enable Register Section and Table 110 ..................................................................... 97 Changes to Flash Controller System IRQ Abort Enable Register Section and Table 111 ..................................................................... 98 Changes to I/O Pull-Up Enable Section ..................................... 101 Changes to I2C Overview Section ............................................... 107 Changes to DMA Mode Section ..................................................139 Changes to Bit 15, Table 169 ........................................................149 Changes to Interrupts/Wake-up Signals Section ...................... 155 Changes to Wake-Up Timer Compare Register A Section .......... 159 Changes to Watchdog Timer Clear Interrupt Register Section .... 162 Changes to PWM Section and Table 200 ................................... 163 Changes to Figure 33 and Table 201 ........................................... 164 Changes to Table 202 ....................................................................165 Changes to H-Bridge Mode Section, and Table 203 ................. 166 Changes to PWM Trip Function Interrupt Section and PWM Output Pairs Interrupts Section ..................................................167 Changes to Table 205 ....................................................................168 Changes to Low Dropout Regulators Section............................ 170 Changes to Table 208 ....................................................................171 Changes to Figure 38.....................................................................174 Added Related Links Section .......................................................176 11/12—Rev. 0 to Rev. A Changes to Pin 35 and Pin 36 Description ................................ 169 10/12—Revision 0: Initial Version Rev. D | Page 4 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide USING THE ADuCM360/ADuCM361 HARDWARE USER GUIDE NUMBER NOTATIONS Table 1. Number Notations Notation Bit N V[X:Y] 0xNN 0bNN NN Description Bits are numbered in little endian format, that is, the least significant bit of a number is referred to as Bit 0. Bit field representation covering Bit X to Bit Y of a value or a field (V). Hexadecimal (Base 16) numbers are preceded by the prefix 0x. Binary (Base 2) numbers are preceded by the prefix 0b'. Decimal (Base 10) are represented using no additional prefixes or suffixes. REGISTER ACCESS CONVENTIONS Table 2. Register Access Conventions Access RW R W Description Memory location has read and write access. Memory location is read access only. A read always returns 0, unless otherwise specified. Memory location is write access only. ACRONYMS AND ABBREVIATIONS Table 3. Acronyms and Abbreviations Acronym/Abbreviation Σ-Δ ADC AF AFE ARM CD DMA DSB FSE JTAG LSB MMR MSB NMI NVIC PGA PMU POR PSM PWM RMS Rx SF SIL SPI Tx UART Description Sigma delta Analog-to-digital converter Averaging factor Analog front end Advanced RISC machine Clock divider Direct memory access Data synchronization barrier Full-scale error: gain error plus offset error Joint test action group Least significant byte/bit Memory mapped register Most significant byte/bit Nonmaskable interrupt Nested vectored interrupt controller Programmable gain amplifier Power management unit Power-on reset Power supply monitor Pulse-width modulator Root mean square Receive Sinc3/sinc4 filter Safety integrity level Serial peripheral interface Transmit Universal asynchronous transmitter Rev. D | Page 5 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 INTRODUCTION TO THE ADuCM360/ADuCM361 The ADuCM360 is a fully integrated, 4 kSPS, 24-bit data acquisition system incorporating dual, high performance, multichannel sigmadelta (Σ-Δ) analog-to-digital converters (ADCs), 32-bit ARM Cortex-M3® processor, and Flash/EE memory on a single chip. The part is designed for direct interfacing to external precision sensors in both wired and battery-powered applications. The ADuCM361 contains all the features of the ADuCM360 except ADC0. ADuCM361 only has one ADC, ADC1. The device contains an on-chip 32 kHz oscillator and an internal 16 MHz high frequency oscillator. This clock is routed through a programmable clock divider from which the processor clock operating frequency is generated. The maximum clock speed is 16 MHz and this is not limited by operating voltage or temperature. The microcontroller is a low power Cortex-M3 processor from ARM. It is a 32-bit RISC machine, offering up to 20 MIPS peak performance. The Cortex-M3 processor incorporates a flexible 11-channel DMA controller supporting the following: 2 SPI, UART, ADC and DAC. There are 128 kB of nonvolatile Flash/EE and 8 kB of SRAM integrated on chip. The analog subsystem consists of dual ADCs, each connected to a flexible input multiplexer. Both ADCs can operate in fully differential and single-ended modes. Other on-chip ADC features include dual programmable excitation current sources, diagnostic current sources, and a bias voltage generator of AVDD_REG/2 (900 mV) to set the common-mode voltage of an input channel. A low-side internal ground switch is provided to allow powering down of a bridge between conversions. The ADCs contain two parallel filters—a sinc3 or sinc4 in parallel with a sinc2. The sinc3 or sinc4 filter is for precision measurements. The sinc2 filter is for fast measurements and for detection of step changes in the input signal. The device also contains a low noise, low drift internal band gap reference or can be configured to accept up to two external reference sources in ratiometric measurement configurations. An option to buffer the external reference inputs is also provided on chip. A single-channel buffered voltage output DAC is also provided on chip. The ADuCM360/ADuCM361 also integrates a range of on-chip peripherals that can be configured under microcontroller software control as required in the application. These peripherals include UART, I2C, and dual SPI serial I/O communication controllers, 19-pin GPIO ports, two general-purpose timers, wake-up timer, and system watchdog timer. A 16-bit PWM with six output channels is also provided. The ADuCM360/ADuCM361 is specifically designed to operate in battery-powered applications where low power operation is critical. The microcontroller can be configured in a normal operating mode that consumes 290 μA/MHz (including flash/SRAM IDD), resulting in an overall system current consumption of 1 mA when all peripherals are active. The part can also be configured in a number of low power operating modes under direct program control, including hibernate mode (internal wake-up timer active), which consumes only 4 µA. In hibernate mode, peripherals such as external interrupts or the internal wake up timer can wake up the device. This allows the part to operate in an ultralow power operating mode and still respond to asynchronous external or periodic events. On-chip factory firmware supports in-circuit serial download via a serial wire interface (2-pin JTAG system) and UART while nonintrusive emulation is also supported via the serial wire interface. These features are incorporated into a low cost QuickStart™ development system supporting this precision analog microcontroller family. The part operates from an external 1.8 V to 3.6 V voltage supply and is specified over an industrial temperature range of −40°C to +125°C. Rev. D | Page 6 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide DAC AVDD AGND ON-CHIP 1.8V ANALOG LDO 12-BIT DAC BUFFER POWER-ON RESET RESET ON-CHIP OSCILLATOR (1% TYPICAL) 16MHz XTALO VBIAS GENERATOR XTALI ARM CORTEX-M3 PROCESSOR AIN0 AIN1 AIN2 AIN3 AIN4/IEXC AIN5/IEXC 16MHz AIN6/IEXC AIN7/VBIAS0/IEXC/ EXTREF2IN+ ON-CHIP 1.8V DIGITAL LDO SINC2 FILTER MUX AIN8/EXTREF2IN– AIN9/DACBUFF+ AIN10 AIN11/VBIAS1 VREF AMP BUF MOD2 GAIN 24-BIT Σ-Δ ADC Σ-Δ MODULATOR SINC3/4 FILTER GPIO PORTS UART PORTS 2 × SPI PORTS I2C PORTS MEMORY 128kB FLASH 8kB SRAM TIMER0 TIMER1 WATCHDOG WAKE-UP TIMER PWM DMA AND INTERRUPT CONTROLLER SERIAL WIRE DEBUG, PROGRAMMING AND DEBUG SELECTABLE VREF SOURCES DAC, TEMP, IOVDD/4, AVDD/4 19 GENERALPURPOSE I/O PORTS SWDIO SWCLK PRECISION REFERENCE ADuCM361 DVDD_REG IREF BUFFER CURRENT SOURCES AVDD_REG GND_SW VREF– VREF+ INT_REF IOVDD IOVDD 10464-100 BUFFER Figure 2. ADuCM361 Block Diagram MAIN FEATURES OF ADuCM360/ADuCM361 Analog I/O • • • • • • • • Ultrahigh precision, multichannel, dual 24-bit ADCs Single-ended and fully differential inputs Independently programmable ADC output rate (3.5 Hz to 3.906 kHz) Simultaneous 50 Hz/60 Hz rejection: • 50 SPS continuous conversion mode • 16.67 SPS single conversion mode Flexible input multiplexer for input channel selection to both ADCs ADC0 and ADC1 (24-bit) ADC channel • 6 differential or 11 single-ended input channels • 4 internal channels for monitoring DAC, temperature sensor, IOVDD, and AVDD (ADC1 only) • Programmable gain (1 to 128) • Selectable input range (see the ADuCM360/ADuCM361 data sheet for more details) • RMS noise (see ADuCM360/ADuCM361 data sheet for more details) Programmable sensor excitation current sources • 10 μA/50 μA/100 μA/150 μA/200 μA/250 μA/300 μA/400 μA/450 μA/500 μA/600 μA/750 μA/800 μA and 1 mA current source options On-chip precision voltage reference (see the ADuCM360/ADuCM361 data sheet for more details) Single 12-Bit Voltage Output DAC • • Voltage output DAC Can also be configured for an NPN-transistor driver mode and interpolation mode Rev. D | Page 7 of 176 ADuCM360/ADuCM361 Hardware User Guide Microcontroller • • • • ARM Cortex-M3 32-bit processor Serial wire download and debug Internal watch crystal for wake-up timer 16 MHz oscillator with 8-way programmable divider Power • • • • Operates directly from a 3.0 V battery Supply range: 1.8 V to 3.6 V Flexible operating modes for low power applications Power consumption: • Processor active mode: core consumes 290 µA/MHz • Active mode: 1 mA (all peripherals active) processor operating at 500 kHz • Power-down mode: 4 µA (WU timer active) On-Chip Peripherals • • • • • • • UART, I2C, and two SPI serial I/O communication controllers 19-pin GPIO port Two general-purpose timers Wake-up timer Watchdog timer 16-bit PWM controller Multichannel DMA and interrupt controller Packages and Temperature Range • 48-lead LFCSP (7 mm × 7 mm) package −40°C to +125°C Tools • • Low cost QuickStart development system Third-party compiler and emulator tool support Applications • • • Industrial automation and process control Intelligent, precision sensing systems 4 mA to 20 mA loop powered smart sensor systems Rev. D | Page 8 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide MEMORY ORGANIZATION The ADuCM360/ADuCM361 memory organization is described in this section. Three separate blocks of memory are accessible to the user: • • • 8 kB of SRAM from 0x20000000 to 0x20001FFF 128 kB of on-chip Flash/EE memory available to the user from 0x00000 to 0x1FFFF An additional 2 kB reserved for the kernel space from 0x20000 to 0x207FF These blocks are mapped according to the Cortex-M3 memory map as shown in Figure 3. All on-chip peripherals are accessed via memory mapped registers, situated in the bit band region. 0xFFFF FFFF VENDOR SPECIFIC 0xE010 0000 0xE00F FFFF PRIVATE PERIPHERAL BUS—EXTERNAL 0xE004 0000 0xE003 FFFF PRIVATE PERIPHERAL BUS—INTERNAL 0xE000 0000 0xE000 EE00 ADuCM360/ADuCM361 MMRs 0xE000 E000 0xDFFF FFFF EXTERNAL DEVICE 1GB (NOT AVAILABLE IN ADuCM360) 0xA000 0000 0x9FFF FFFF EXTERNAL RAM 1GB (NOT AVAILABLE IN ADuCM360) 0x6000 0000 0x5FFF FFFF PERIPHERAL 0.5GB 0x4004 FFFF ADuCM360/ADuCM361 MMRs 0x4000 0000 0x4000 0000 0x3FFF FFFF SRAM 0.5GB 0x2000 1FFF 0x2000 0000 ADuCM360/ADuCM361 8kB SRAM 0x2000 0000 0x1FFF FFFF CODE 0.5GB 0x0002 07FF ADuCM360/ADuCM361 KERNEL SPACE 0x0002 0000 0x0000 000 0x0000 0000 Figure 3. ADuCM360/ADuCM361 Cortex-M3 Memory Map Diagram Rev. D | Page 9 of 176 10464-002 0x0001 FFFF ADuCM360/ADuCM361 128kB FLASH/EE MEMORY ADuCM360/ADuCM361 Hardware User Guide UG-367 CLOCKING ARCHITECTURE CLOCKING ARCHITECTURE FEATURES The ADuCM360/ADuCM361 integrates two on-chip oscillators and circuitry for an external crystal: • • • • LFOSC is a 32 kHz low power internal oscillator, used in low power modes. HFOSC is a 16 MHz internal oscillator that is used in active mode. LFXTAL is a 32 kHz external crystal. Power saving clock mechanism; enable and disable per peripheral. CLOCKING ARCHITECTURE BLOCK DIAGRAM FCLK CORTEX HCLK FLASH/SRAM CLKSYSDIV[0] CLKCON0[2:0] CLKDIS[8] DMA HFOSC 16MHz OSC PCLK DIV2EN CLKDIS[7] CD DAC LFOSC CLKCON0[4:3] LFXTAL UCLK CLKDIS[5] CLKDIS[5] TIMER0 TIMER0CLK CLKDIS[6] CLKDIS[6] EXTCLK WATCHDOG TIMER PCLK PCLK UCLK WAKE-UP TIMER CLKDIS[0] CLKDIS[1] CLKDIS[1] PWMCD CLKDIS[4] CLKDIS[3] CLKDIS[2] CLKCON1[8:6] I2CCD CLOCK DIVIDER UART UARTCLK TIMER1CLK CLKDIS[2] PWM PWMCLK CLKCON1[11:9] UARTCD SPI1 SPI1CLK CLKCON1[14:12] TIMER0CLK SPI0 SPI0CLK CLKCON1[5:3] SPI1CD CLKDIS[4] CLKDIS[0] CLKCON1[2:0] SPI0CD CLKDIS[3] PCLK UCLK TIMER1 TIMER1CLK I2CCLK I2C ADC0 ACLK = 125kHz CLKDIS[9] Figure 4. ADuCM360 Clocking Architecture Block Diagram Note that the ADuCM361 Clocking Architecture Block Diagram is Identical Except ADC0 Is Removed Rev. D | Page 10 of 176 10464-003 ADC1 NOTES 1. ADuCM361 CLOCKING ARCHITECTURE BLOCK DIAGRAM IS IDENTICAL EXCEPT ADC0 IS REMOVED. UG-367 ADuCM360/ADuCM361 Hardware User Guide CLOCKING ARCHITECTURE OVERVIEW Three of the clock sources—LFOSC, HFOSC and LFXTAL—can be used as system clocks. An external clock on P1.0 can also be used for test purposes. Internally, the system clock is divided into five clocks: • • • • • FCLK for the cortex processor UCLK system clock HCLK for the flash, SRAM, DMA ACLK for the analog front end and ADC clock PCLK for the other peripherals Figure 4 shows all the clocks available and includes clock gates for power management. For more information about the clock gates, see the Power Management Unit section. CLOCKING ARCHITECTURE OPERATION At power-up, the processor executes from the 16 MHz internal oscillator divided down to 1 MHz. User code can select the clock source for the system clock and can divide the clock by a factor of 2CD, where CD is the clock divider bits (CLKCON0[2:0]). This allows slower code execution and reduced power consumption. Note that P1.0 must be configured first as a clock input before the clock source is switched in the clock control register. Memory • • • • 128 kB Flash/EE memory, 8 kB SRAM 10000 cycle Flash/EE endurance 10 year Flash/EE retention In-circuit download via serial wire and UART CLOCKING ARCHITECTURE MEMORY MAPPED REGISTERS Table 4. Clock Control Memory Mapped Registers Address Table Address 0x40002000 0x40002004 0x4000202C 0x40002410 0x40002444 Name CLKCON0 CLKCON1 CLKDIS XOSCCON CLKSYSDIV Description System Clocks Control Register 0 System Clocks Control Register 1 System clock to peripherals enable/disable Crystal oscillator control register System clock divide-by-2 control register Rev. D | Page 11 of 176 Access RW RW RW RW RW Default 0x0004 0x0000 0x01FF 0x0000 0x0001 ADuCM360/ADuCM361 Hardware User Guide Clocking Architecture Control Register 0 Address: 0x40002000, Reset: 0x0004, Name: CLKCON0 Table 5. CLKCON0 Register Bit Descriptions Bits 15:8 7:5 Name Reserved CLKOUT 4:3 CLKMUX 2:0 CD 1 Description Reserved Clock out multiplexer selection bits (use for test purposes only) 000: UCLK (default) 001: UCLK 010: PCLK 011: Reserved 100: Reserved 101: HFOSC 110: LFOSC 111: LFXTAL Clock in multiplexer selection bits 00: HFOSC (default) 01: LFXTAL 10: LFOSC 11: EXTCLK Clock divide bits 1 000: DIV1: UCLK/1 001: DIV2: UCLK/2 010: DIV4: UCLK/4 011: DIV8: UCLK/8 100: DIV16: UCLK/16 (default) 101: DIV32: UCLK/32 110: DIV64: UCLK/64 111: DIV128: UCLK/128 An additional divide-by-2 is required if CLKSYSDIV[0] is set to 1. Rev. D | Page 12 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide Clocking Architecture Control Register 1 Address: 0x40002004, Reset: 0x0000, Name: CLKCON1 1 Table 6. CLKCON1 Register Bit Descriptions Bits 15 14:12 Name Reserved PWMCD 11:9 UARTCD 8:6 I2CCD 5:3 SPI1CD 2:0 SPI0CD 1 2 Description Clock divide bits for PWM system clock 2 000: UCLK/1 = 16 MHz 001: UCLK/2 = 8 MHz 010: UCLK/4 = 4 MHz 011: UCLK/8 = 2 MHz 100: UCLK/16 = 1 MHz 101: UCLK/32 = 500 kHz 110: UCLK/64 = 250 kHz 111: UCLK/128 = 125 kHz Clock divide bits for UART system clock2 000: UCLK/1 = 16 MHz 001: UCLK/2 = 8 MHz 010: UCLK/4 = 4 MHz 011: UCLK/8 = 2 MHz 100: UCLK/16 = 1 MHz 101: UCLK/32 = 500 kHz 110: UCLK/64 = 250 kHz 111: UCLK/128 = 125 kHz Clock divide bits for I2C system clock2 000: UCLK/1 = 16 MHz 001: UCLK/2 = 8 MHz (minimum value to support 400 kHz I2C baud rate) 010: UCLK/4 = 4 MHz 011: UCLK/8 = 2 MHz (minimum value to support 100 kHz I2C baud rate) 100: UCLK/16 = 1 MHz 101: UCLK/32 = 500 kHz 110: UCLK/64 = 250 kHz 111: UCLK/128 = 125 kHz Clock divide bits for SPI1 system clock2 000: UCLK/1 = 16 MHz 001: UCLK/2 = 8 MHz 010: UCLK/4 = 4 MHz 011: UCLK/8 = 2 MHz 100: UCLK/16 = 1 MHz 101: UCLK/32 = 500 kHz 110: UCLK/64 = 250 kHz 111: UCLK/128 = 125 kHz Clock divide bits for SPI0 system clock2 000: UCLK/1 = 16 MHz 001: UCLK/2 = 8 MHz 010: UCLK/4 = 4 MHz 011: UCLK/8 = 2 MHz 100: UCLK/16 = 1 MHz 101: UCLK/32 = 500 kHz 110: UCLK/64 = 250 kHz 111: UCLK/128 = 125 kHz Peripheral clock must be greater than or equal to the FCLK. FCLK is set by CLKCON0[2:0]. Calculations are for UCLK = 16 MHz with CLKSYSDIV[0] set to 0. An additional divide-by-2 is required if CLKSYSDIV[0] is set to 1. Rev. D | Page 13 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Clocking Architecture Disable Register Address: 0x4000202C, Reset: 0x01FF, Name: CLKDIS Table 7. CLKDIS Register Bit Descriptions Bits 15:10 9 Name Reserved DISADCCLK 8 DISDMACLK 7 DISDACCLK 6 DIST1CLK 5 DIST0CLK 4 DISPWMCLK 3 DISUARTCLK 2 DISI2CCLK 1 DISSPI1CLK 0 DISSPI0CLK Description These bits are reserved and should be written 0. 0: Enable ADC system clock (default). 1: Disable ADC system clock. 0: Enable DMA system clock. 1: Disable DMA system clock. 0: Enable DAC system clock. 1: Disable DAC system clock. 0: Enable Timer1 system clock. 1: Disable Timer1 system clock. 0: Enable Timer0 system clock. 1: Disable Timer0 system clock. 0: Enable PWM system clock. 1: Disable PWM system clock. 0: Enable UART system clock. 1: Disable UART clock. 0: Enable I2C system clock. 1: Disable I2C system clock. 0: Enable SPI1 system clock. 1: Disable SPI1 system clock. 0: Enable SPI0 system clock. 1: Disable SPI0 system clock. External Crystal Oscillator Control Register Address: 0x40002410, Reset: 0x0000, Name: XOSCCON Table 8. XOSCCON Register Bit Descriptions Bits 7:3 2 Name Reserved DIV2 1 0 Reserved ENABLE Description These bits are reserved and should be written 0. Divide-by-2 enable bit. 0: Disable the clock divider. 1: Enable the clock divider. This bit is reserved and should be written 0. Crystal oscillator circuit enable. 0: Disable the oscillator circuitry. 1: Enable the oscillator circuitry. Clocking Architecture Divide Register Address: 0x40002444, Reset: 0x0001, Name: CLKSYSDIV Table 9. CLKSYSDIV Register Bit Descriptions Bits 7:1 0 Name Reserved DIV2EN Description These bits are reserved and should be written 0. Divide-by-2 enable bit. By default, this bit is 1, meaning that the system clock is 8 MHz. Enable this in low power systems. 0: Disable the clock divider; the system clock is 16 MHz. 1: Enable the clock divider; the system clock is 8 MHz (default). Rev. D | Page 14 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide POWER MANAGEMENT UNIT POWER MANAGEMENT UNIT FEATURES The power management unit (PMU) controls the different power modes of the ADuCM360/ADuCM361. Six power modes are available: • • • • • • Active MCUHALT PERHALT SYSHALT TOTALHALT Hibernate POWER MANAGEMENT UNIT OVERVIEW The PMU controls the power modes of the ADuCM360/ADuCM361. The Cortex-M3 sleep modes are linked to the PMU modes and are described in this section. The PMU is in the always on section. Each mode gives a power reduction benefit with a corresponding reduction in functionality. The most restrictive mode gives a power-down figure of ~4 µA, and the least restrictive mode gives a power-down figure that is dependent on the CD clock rate chosen by the user, ~290 µA/MHz. All current values are available in the ADuCM360/ADuCM361 data sheet. Table 10. Power Modes Summary Mode 0 Name Active Description Full active mode. 1 MCUHALT 2 PERHALT 3 SYSHALT 4 TOTALHALT 5 Hibernate Gate HCLK when Cortex-M3 is also in sleep modes. Gate PCLK when Cortex-M3 also is in sleep modes. Gate both HCLK, ACLK & PCLK when Cortex-M3 is in sleep modes. Gate FCLK when Cortex-M3 is in deep sleep mode. Turns all digital blocks off except always on blocks. 1 Estimated Current 1 CLKSYSDIV = 0 250 µA + 290 µA/MHz Estimated Current CLKSYSDIV = 1 145 µA + 145 µA/MHz 435 µA + 50 µA/MHz 355 µA + 50 µA/MHz 425 µA + 60 µA/MHz 345 µA + 60 µA/MHz 420 µA + 16 µA/MHz 345 µA + 16 µA/MHz ~4 µA ~4 µA 3 × FCLK to 5 × FCLK 3 × FCLK to 5 × FCLK 3 × FCLK to 5 × FCLK 30.8 µs ~4 µA ~4 µA 30.8 µs Wake-Up Time Estimated current = static current + dynamic current, where dynamic current is frequency. The values given are typical values at TA = 25°C. POWER MANAGEMENT UNIT OPERATION The debug tools can prevent the Cortex-M3 from fully entering its power saving modes by setting bits in the debug logic. Only a poweron-reset resets the debug logic. Therefore, the device should be power cycled after using serial wire debug with application code containing the WFI instruction. Power Mode: Active Mode, Mode 0 The system is fully active. Memories and all user enabled peripherals are clocked, and the Cortex-M3 processor is executing instructions. Note that the Cortex-M3 processor manages its internal clocks and can be in a partial clock gated state. This clock gating affects only the internal Cortex-M3 processing core. Automatic clock gating is used on all blocks and is transparent to the user. User code can use a WFI command to put the Cortex-M3 processor into sleep mode; it is independent of the power mode settings of the PMU. When the ADuCM360/ADuCM361 wake up from any of the low power mode, the devices return to Mode 0. Power Mode: MCUHALT Mode, Mode 1 The system gates HCLK at an early stage after the Cortex-M3 processor has entered sleep mode. The HCLK is the clock to the SRAM, flash, and DMA blocks. The gating of this clock stops all these peripherals. The Cortex-M3 processor FCLK is active, and the device wakes up using the NVIC. If ADC0, ADC1, or sinc2 DMA channels are enabled in the DMAENSET register, the clock remains active to the DMA block and the SRAM. Rev. D | Page 15 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Power Mode: PERHALT Mode, Mode 2 The system gates PCLK at an early stage after the Cortex-M3 processor has entered sleep mode. The PCLK is the clock to user peripherals. The gating of this clock stops all clocks to these peripherals. The Cortex-M3 processor FCLK is active and the device wakes up using the NVIC. If ADC0, ADC1, or sinc2 DMA channels are enabled in the DAMENSET register, the clock remains active to the DMA block and the SRAM. Power Mode: SYSHALT Mode, Mode 3 The system gates HCLK and PCLK at an early stage after the Cortex-M3 processor has entered sleep mode. The Cortex-M3 processor FCLK is active and the device wakes up using the NVIC. Power Mode: TOTALHALT Mode, Mode 4 The system gates FCLK, HCLK, and PCLK at an early stage after the Cortex-M3 processor has entered deep sleep mode. The FCLK is the free running clock of the Cortex-M3 processor. The gating of FCLK, HCLK, and PCLK clocks stops some of the NVIC functionality. The Cortex-M3 processor FCLK is, therefore, stopped and only the peripherals listed in Table 55 can wake up the Cortex-M3 processor. The low power LDO is turned on and the high power LDO is turned off automatically when entering Mode 4. Power Mode: Hibernate Mode, Mode 5 The system gates power to the digital core. All states are retained during this power gating, which appears to the user as a clock gating of FCLK, HCLK, and PCLK at an early stage after the Cortex-M3 processor has entered deep sleep mode; however, the leakage current is lower and the response time is different (that is, the device is slower to come up). The Cortex-M3 processor FCLK is, therefore, stopped and only the peripherals listed in Table 55 can wake up the Cortex-M3 processor. The low power LDO enabled in Power Mode 4 and Power Mode 5 is only capable of sourcing 100 µA typically. Therefore, users need to be careful that no high frequency clock signals (that is, signals greater than 1 MHz) are provided on digital inputs because such signals can cause internal circuits to consume power that exceeds this 100 µA limit. Because of this, Power Mode 4 and Power Mode 5 are not supported when an external clock is present on P1.0. These modes are supported, however, when digital pins are sourcing current as digital outputs because this current is sourced from the IOVDD supply and not the low power LDO. If Power Mode 1 to Power Mode 5 is entered when the processor is in an interrupt handler, the power-down mode can be exited only by a reset or a higher priority interrupt source. POWER MANAGEMENT UNIT MEMORY MAPPED REGISTERS The power modes are controlled by a single register based in the section that is always on at Address 0x40002400. Table 11. System Clocks Memory Mapped Register Address (Base Address: 0x40002400) Offset 0x0000 0x0004 Name PWRMOD PWRKEY Description Power modes register Key protection for PWRMOD Access RW RW Default 0x00 N/A Power Modes Control Register Address: 0x40002400, Reset: 0x0000, Name: PWRMOD Table 12. PWRMOD Register Bit Descriptions Bits 7:3 2:0 Name Reserved MOD Description Reserved. These bits should be written 0 by user code. Power modes control bits. Selects the power mode to enter. When read, these bits contain the last power mode value entered by user code. 000: Full active. 001: MCUHALT. 010: PERHALT. 011: SYSHALT. 100: TOTALHALT. 101: Hibernate. Other: Reserved. To place the cortex in deep sleep mode when the device is in Mode 4 or Mode 5, the Cortex-M3 processor system control register (Address 0xE000ED10) must be configured to 1 in Bit 2 (SCR[2]). Rev. D | Page 16 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Power Modes Key Register Address: 0x40002400, Reset: N/A, Name: PWRKEY Table 13. PWRKEY Register Bit Descriptions Bits 15:0 Name VALUE Description Power control key register. The PWRMOD register is key protected. Two writes to the key are necessary to change the value in the PWRMOD register: first write 0x4859, and then write 0xF27B. The PWRMOD register should then be written. A write to another register before writing to PWRMOD returns the protection to the lock state. Code Example to Enter Power Saving Modes SCB->SCR = 0x04; // sleepdeep mode pADI_PWRCTL->PWRKEY = 0x4859; // key1 pADI_PWRCTL->PWRKEY = 0xF27B; // key2 pADI_PWRCTL->PWRMOD = 0x4; asmwfi(); __asm void asmwfi() { nop nop nop WFI nop nop BX LR } Rev. D | Page 17 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 CORTEX-M3 PROCESSOR CORTEX-M3 PROCESSOR FEATURES High Performance • • • • 1.25 DMIPS/MHz. Many instructions, including multiply, are single cycle. Separate data and instruction buses allow simultaneous data and instruction accesses to be performed. Optimized for single-cycle flash usage. Low Power • • • Low standby current. Core implemented using advanced clock gating so that only the actively used logic consumes dynamic power. Power saving mode support (sleep and deep sleep modes). The design has separate clocks to allow unused parts of the processor to be stopped. Advanced Interrupt Handling • • • • • The nested vectored interrupt controller (NVIC) supports up to 240 interrupts. The ADuCM360/ADuCM361 supports 38 of these. The vectored interrupt feature greatly reduces interrupt latency because there is no need for software to determine which interrupt handler to serve. In addition, there is no need to have software to set up nested interrupt support. The Cortex-M3 processor automatically pushes registers onto the stack at the entry interrupt and pops them back at the exit interrupt. This reduces interrupt handling latency and allows interrupt handlers to be normal C functions. Dynamic priority control for each interrupt. Latency reduction using late arrival interrupt acceptance and tail-chain interrupt entry. Immediate execution of a nonmaskable interrupt request for safety-critical applications. System Features • • Support for bit-band operation and unaligned data access. Advanced fault handling features include various exception types and fault status registers. Debug Support • • • Serial wire debug interfaces (SW-DP). Flash patch and breakpoint (FPB) unit for implementing breakpoints. Limited to six active breakpoints. Data watchpoint and trigger (DWT) unit for implementing watchpoints, trigger resources, and system profiling. Limited to two active watchpoints. CORTEX-M3 PROCESSOR OVERVIEW The ADuCM360/ADuCM361contains an embedded ARM Cortex-M3 processor, Revision r2p0 (AT420). The ARM Cortex-M3 provides a high performance, low cost platform that meets the system requirements of minimal memory implementation, reduced pin count, and low power consumption while delivering outstanding computational performance and exceptional system response to interrupts. CORTEX-M3 PROCESSOR OPERATION Several Cortex-M3 components are flexible in their implementation. This section details the actual implementation of these components in the ADuCM360/ADuCM361. Serial Wire Debug (SW/JTAG-DP) The ADuCM360/ADuCM361 only supports the serial wire interface via the SWCLK and SWDIO pins. It does not support the 5-wire JTAG interface. ROM Table The ADuCM360/ADuCM361 implements the default ROM table. Rev. D | Page 18 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Nested Vectored Interrupt Controller Interrupts (NVIC) The Cortex-M3 processor includes a nested vectored interrupt controller (NVIC), which offers several features: • • • • Nested interrupt support Vectored interrupt support Dynamic priority changes support Interrupt masking In addition, the NVIC has a nonmaskable interrupt (NMI) input. The NVIC is implemented on the ADuCM360/ADuCM361, and more details are available in the System Exceptions and Peripheral Interrupts section. Wake-Up Interrupt Controller (WIC) The ADuCM360/ADuCM361 has a modified WIC, which provides the lowest possible power-down current. This feature is transparent to the user, and more details are available in the Power Management Unit section. Note that if the part enters a power saving mode when servicing an interrupt, it can be woken up only by a higher priority interrupt source. μDMA The ADuCM360/ADuCM361 implements the ARM μDMA. More details are available in the DMA Controller section. RELATED DOCUMENTS • • • • • • Cortex-M3 Revision r2p0 Technical Reference Manual (DDI0337) Cortex-M3 Errata Notice: Cortex-M3/Cortex-M3 with ETM (AT420/AT425) ARMv7-M Architecture Reference Manual (DDI0403) ARMv7-M Architecture Reference Manual Errata markup ARM Debug Interface v5 (IHI0031) PrimeCell µDMA Controller (PL230) Technical Reference Manual Revision r0p0 (DDI0417) Rev. D | Page 19 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 ADC CIRCUIT ADC CIRCUIT FEATURES ADuCM360: two Σ-Δ ADCs (ADC0 and ADC1) ADuCM361: one Σ-Δ ADC (ADC1) Six fully differential inputs Eleven single-ended inputs ADC CIRCUIT BLOCK DIAGRAM AVDD VREF– VREF+ INTERNAL 1.2V REFERENCE 0.01mA TO 1mA BUF IEXCCON[5:0] REF MUX EXT_REF2IN+ CONVERSION COUNTER STEP DETECT FILTER BUF EXT_REF2IN– ADC0 OVERRANGE ADC1 50µA O/C DET ADC2 ADC3 AMP BUF MOD2 GAIN Σ-∆ MODULATOR 4Hz TO 4kHz DIGITAL FILTER ADC4/IEXC ADC5/IEXC CHOP MUX ADC6/IEXC INTERFACE AND CONTROL 50µA O/C DET ADC7/IEXC/VBIAS0/ EXTREF2IN+ AMP BUF ADC8/EXTREFIN2– MOD2 GAIN Σ-∆ MODULATOR ADC9 TO CORTEX-M3 4Hz TO 4kHz DIGITAL FILTER OVERRANGE ADC10 STEP DETECT FILTER ADC11/VBIAS1 VBIAS AVDD_REG/2 TEMPERATURE SENSOR, AVDD/4, IOVDD/4 (MUXED TO ADC1 ONLY) INTEGRATOR ACCUMULATOR COMPARATORS GND_SW 10464-004 20kΩ AGND Figure 5. ADC Block Diagram ADC CIRCUIT OVERVIEW The ADuCM360 incorporates two independent multichannel Σ-Δ ADCs (ADC0 and ADC1). The ADuCM361 incorporates one multichannel Σ-Δ ADC (ADC1). Both ADCs are connected to a common input multiplexer of six fully differential inputs or 11 single-ended inputs. The device also contains a low noise, low drift internal band gap reference. The part accepts two external reference sources and provides the option of buffering these inputs. Other on-chip ADC features include dual programmable excitation current sources, diagnostic current sources, and a bias voltage generator of AVDD_REG/2 to set the common-mode voltage of an input channel. A low-side internal ground switch is provided that allows powering down an external sensor between conversions. Both ADCs share the same input multiplexer. Each ADC has a separate input buffer and a low noise programmable gain amplifier (PGA) that allows small amplitude signals to be connected directly to the Σ-Δ modulator of each ADC. The analog input pins can be configured as fully differential input pairs or as single-ended pairs. In single-ended mode, the channel selected by the ADCCN in the ADCxCON register acts as the negative input channel reference to the ADC. The same channel can be used as a negative input for all other single-ended positive Rev. D | Page 20 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide inputs. These can be connected to ground. ADC1 also supports four internal channels: AVDD/4, IOVDD/4, temperature sensor, and DAC. The ADCs operate independently of each other, and each has its own individual Cortex-M3 processor interrupt sources and configuration register set. For fast processing of the ADC inputs, it is possible to select a faster sinc2 filter to operate in parallel with the normal sinc3 or sinc4 filter on either ADC0 or ADC1. This filter outputs data every 2 ms and can be read continuously. Alternatively, the sinc2 filter can be used for fast detection of step changes on an ADC input channel. In addition, for higher precision at high sampling rates (488 Hz to 4 kHz), a sinc4 filter is provided. If an error occurs during an ADC conversion or calibration routine (for example, a missing reference), the ADCxDAT registers read full scale for the particular gain setting and ADCxSTA[4] is set to 1 for an overflow error. ADCxDAT reports negative full scale for an underflow error, and again ADCxSTA[4] is set to 1. On the ADuCM361, ADC0 is not available. On the ADuCM361, ADC1 is identical to ADC1 of the ADuCM360. ADC CIRCUIT OPERATION Analog Input Channel Configuration Both ADCs are connected to a common input multiplexer. The ADCCP (ADCxCON[9:5]) and ADCCN (ADCxCON[4:0]) bits of the ADC control registers are used to configure the input signals to each ADC as follows: • • • • ADC0CON[9:5]: These bits select the positive input channel to ADC0. The bits can select any of the following input channels as the source: AIN0/AIN1/AIN2/AIN3/AIN4/AIN5/AIN6/AIN7/AIN8/AIN9/AIN10/AIN11 or AGND. ADC0CON[4:0]: These bits select the negative input channel to ADC0. The bits can select any of the following input channels as the source: AIN0/AIN1/AIN2/AIN3/AIN4/AIN5/AIN6/AIN7/AIN8/AIN9/AIN10/AIN11 or AGND. ADC1CON[9:5]: These bits select the positive input channel to ADC1. The bits can select any of the following input channels as the source: AIN0/AIN1/AIN2/AIN3/AIN4/AIN5/AIN6/AIN7/AIN8/AIN9/AIN10/AIN11 or any of the internal channels (that is, DAC output, temperature sensor channel, AVDD ÷ 4, or IOVDD ÷ 4). ADC1CON[4:0]: These bits select the negative input channel to ADC1. The bits can select any of the following input channels as the source: AIN0/AIN1/AIN2/AIN3/AIN4/AIN5/AIN6/AIN7/AIN8/AIN9/AIN10/AIN11 or any of the internal channels (that is, DAC output, temperature sensor channel, AVDD, or IOVDD). The input channels can be buffered or unbuffered. In buffered mode, the selected input channel feeds into a high impedance input stage of the amplifier. This allows the ADC to tolerate significant source impedances and allows direct connection to resistive type sensors, such as RTDs and strain gauges. In unbuffered mode, this input buffer is bypassed and affords a wider input voltage range. The buffer is controlled by ADCxCON[17:14]. See the specifications in the ADuCM360/ADuCM361 data sheet for further details. The ADuCM360 supports a mode of operation in which the PGA on both ADCs can drive the ADC modulator directly regardless of the gain setting, allowing the input buffers to be bypassed and powered down. Because each positive and negative input buffer consumes typically 35μA, this represents an IDD saving of 140 μA if both ADCs are enabled. The ADuCM361 also supports such a mode of operation, but on ADC1 only. The time to a first valid (fully settled) result after an input channel switch is shown in Table 16, tSETTLING. Connecting the Same Input Channel to the Positive Input of Both ADCs (ADuCM360 Only) The ADuCM360 has two independent ADCs and a fully flexible input multiplexer. This allows the positive inputs to both ADCs to be connected to the same input channel. Most applications separate the input channels to each ADC. However, in some cases—for example, in industrial applications—it may be desirable to measure the same input on both ADCs to improve the safety integrity level (SIL) ratings. If the PGA is enabled (gain ≥ 2), the ADC output value when both ADCs are sampling the same input is different compared with when just one ADC is sampling this input. The reason for the difference is due to the change in input current when the analog input is connected to both PGAs compared with when it is connected to just one. When measuring an input channel with both ADCs, it is recommend that separate zero-scale and full-scale calibration values be used for this condition. These should be generated via the system calibration mode of the ADC. Rev. D | Page 21 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 PGA Gain Configuration Both ADCs incorporate an on-chip programmable gain amplifier (PGA). The PGA can be programmed through eight different settings, resulting in a range of 1 to 128. The gain is controlled by the ADC0MDE[7:4] and ADC1MDE[7:4] control registers. The PGA allows signals of very small amplitude to be gained up while still maintaining low noise performance. In unipolar mode (based on a 1.2 V ADC reference), the input range varies from 0 V to 1.2 V using a gain of 1 or from 0 mV to 7.8125 mV using a gain of 128. In bipolar mode, this changes to 0 V to ±1.2 V with a gain of 1 and to 0 mV to ±7.8125 mV with a gain of 128. When a gain of 1 is selected, the PGA is not enabled. The PGA is enabled only for gains of 2, 4, 8, 16, 32, 64, and 128. When the PGA is enabled, the PGA output voltage must not exceed 1 V. Therefore, when using a gain of 4, the maximum input voltage that can be applied is ±250 mV; when using a gain of 8, the maximum input voltage that can be applied is ±125 mV. For the full list of valid input voltage ranges for all ADCs, refer to the ADuCM360/ADuCM361 data sheet. To determine if the ADC input is about to exceed the 1 V PGA output threshold, the ADC comparator can be used. The following code example shows how to set the comparator threshold to 1 V. An interrupt is asserted if the threshold is exceeded. This code is valid for all ADC0 PGA gain settings from 2 to 128. Code Example void ADC0INIT(void) { pADI_ADC0->MSKI = 0x5; pADI_ADC0->PRO = 0x4; pADI_ADC0->TH = 0x6AA2; // Enable ADC0 /rdy IRQ + ADCxTHEX interrupt // Enable threshold detection // Set threshold to 1 V max PGA output // Add rest of ADC init code after this } In the interrupt handler, add the following: uiADCSTA = pADI_ADC0->STA; if ((uiADCSTA & 0x4) == 0x4) // read ADC status register // Check for ADC0TH exceeded condition { ucADC0ERR = 4; // 1 V threshold exceeded pADI_ADC0->MSKI &= 0xFB; // Disable threshold detection to clear this interrupt source pADI_ADC0->PRO = 0; // Disable threshold detection to clear this interrupt source } Optional—reenable in main loop: // Disable threshold detection to clear this interrupt source if (ucADC0ERR == 0x4) { ucADC0ERR = 0; pADI_ADC0->MSKI |= 0x4; pADI_ADC0->PRO = 4; } An optional extra gain of 2 can be added in the ADC modulator; that is, a gain of 2 can be added to the output of the PGA. The 1 V PGA output limitation remains, but this extra feature results in an additional 0.5 LSB rms bits of resolution. Rev. D | Page 22 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide VIN RANGE = AGND TO AVDD (BUFFER BYPASSED), AGND + 100mV TO AVDD – 100mV (BUFFER ENABLED) COMMON-MODE VOLTAGE (VCM) IS RAIL-TO-RAIL VCM = 0V – AVDD VIN BUF EXTERNAL VREF RANGE = 0V TO AVDD – 100mV ADC INPUT THRESHOLD MONITOR Σ-Δ MODULATOR SINC2/3/4 DIGITAL FILTER OVERRANGE INTERRUPT ADC RESULT GAIN = 1 – VALID INPUT VOLTAGE RANGE VIN RANGE = 1V/PGA GAIN COMMON-MODE VOLTAGE (VCM) IS RAIL-TO-RAIL VIN BUF PGA VOUT MAX ±1V BUF ADC INPUT THRESHOLD MONITOR Σ-Δ MODULATOR SINC2/3/4 DIGITAL FILTER OVERRANGE INTERRUPT ADC RESULT GAIN = 2 TO 128 – VALID INPUT VOLTAGE RANGE 10464-005 VCM = 0V – AVDD EXTERNAL VREF RANGE = 0V TO AVDD – 100mV Figure 6. ADC Inputs Table 14. Absolute Input Voltage and Common-Mode Voltage Ranges for All Gains Gain 1 2 4 8 16 16 + MOD2 32 32 + MOD2 64 64 + MOD2 128 1 2 Absolute Input Voltage Range 1 (Buffers Off) AGND to AVDD 0 V to 500 mV 0 V to 250 mV 0 V to 125 mV 0 V to 62.5 mV 0 V to 62.5 mV 0 V to 22.18 mV 0 V to 15.625 mV 0 V to 15.625 mV 0 V to 7.8125 mV 0 V to 7.8125 mV Absolute Input Voltage Range1 (Buffers On) AGND + 100 mV to AVDD − 100 mV 0 V to 500 mV 0 V to 250 mV 0 V to 125 mV 0 V to 62.5 mV 0 V to 62.5 mV 22.18 mV 0 V to 15.625 mV 0 V to 10.3125 mV 0 V to 7.8125 mV 0 V to 3.98 mV VCM Range (Input Buffers On) AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV AGND + 100 mV to AVDD − 100 mV VCM Range (Input Buffers Off) AGND to AVDD 2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 AGND to AVDD2 Absolute input voltage is the differential voltage range AIN+ to AIN−. If the ADC input buffers are bypassed, the common-mode voltage (VCM) is configurable rail-to-rail. However, within 200 mV of the supply rails, the input current increases. Bipolar/Unipolar Configuration The analog inputs to the ADuCM360/ADuCM361 can accept either unipolar or bipolar input voltage ranges. A bipolar voltage does not imply that the part can handle negative voltages with respect to ground. It simply means that the input range can vary above or below the common-mode voltage by the value of VREF as long as the absolute input voltage range is not exceeded. In unipolar mode, the analog input voltage range is reduced to the sum of the common-mode voltage and the positive input level; therefore, the positive input cannot go below the common-mode voltage. For example, if ADC0 is configured for differential mode using an external 1.0 V reference source and the ADC negative input is set to 1.5 V (common mode = 1.5 V), the resulting valid input voltage range is 0.5 V to 2.5 V in bipolar mode and 1.5 V to 2.5 V in unipoloar mode. Furthermore, in unipolar mode, if the input voltage is a negative value (AIN− > AIN+), the ADCxDAT is clamped to 0x00000000 and ADCxSTA[4] (error bit) is set to 1. Rev. D | Page 23 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Fully Differential and Single-Ended Inputs Both ADCs support two voltage input types. In fully differential mode, the user can select from any input pair to both ADCs. The external circuit determines the common-mode voltage; therefore, the external circuit must be configured to ensure that the differential signal does not exceed the minimum/maximum absolute input voltage for that input. Alternatively, the user can configure either AIN7 or AIN11 as a common-mode output pin (VBIAS mode) and then use the pin to bias the differential pair. In single-ended mode, the negative input is selected by the ADCxCON[4:0] control bits. If the negative input pin is connected to ground and the PGA gain setting is 1, the input buffer must be bypassed. Otherwise, the negative input must be biased above the minimum input voltage value. The PGA on both ADCs can drive the ADC modulator directly, regardless of the gain setting. Therefore, negative inputs can be connected directly to AGND. Typical ADC Modes of Operation The ADC can be configured to operate in one of three general modes of operation: conversion mode, calibration mode, or power-down mode. ADC Conversion Mode The ADC conversion mode can be used to initiate continuous conversions at a fixed rate or single conversions triggered by software. • • Single conversion: A single ADC conversion can be initiated in software by setting Bit 1 of the ADC0MDE/ADC1MDE registers. (ADCxMDE[2:0] = 010). After a single conversion is completed, the ADC returns to idle mode. Continuous conversion: Continuous conversion can be initiated in software by setting Bit 0 of the ADC0MDE/ADC1MDE registers. (ADCxMDE[2:0] = 001). Continuous conversion mode results in the ADCxDAT register being updated at the sampling rate selected by the ADCxFLT register. When a conversion has completed in either mode, the ADCxRDY bit (ADCxSTA[0]) is asserted, indicating that the ADC result is present in the ADC0DAT, ADC1DAT, or STEPDAT register and is available for reading. ADCxRDY and the output of the sinc2 filter can be configured to flag an interrupt to the ARM Cortex-M3 processor. If an error occurs in the conversion due to an underrange or overrange error in the input voltage of either ADC, the error is set in the appropriate ADCxSTA[4] register. The ADC comparator threshold bit (ADCxSTA[2]) should also be checked as part of the ADC interrupt handler to ensure that the 1 V PGA output limit has not been exceeded (see the PGA Gain Configuration section for more information). ADC Calibration Mode The ADC calibration mode removes ADC and system error where possible. It is recommended that a system zero-scale and system full-scale calibration be performed using the required system PGA gain setting. Before entering any calibration mode, the ADC being calibrated must first be in idle mode (ADCxMDE[2:0] = 011). In addition, the ADCxOF and ADCxGN registers can be written to only when the ADC is in idle mode. • • • • Internal zero-scale calibration. In this mode, an offset calibration is performed on any enabled ADC using an internally generated 0 V signal. The calibration is carried out at the user-programmed ADC settings; therefore, as with a normal single ADC conversion, it takes two to three ADC conversion cycles before a fully settled calibration result is ready. The calibration result is automatically written to the ADCxOF register of the respective ADC and ADCxSTA[5] is set to 1 to indicate the completion of the calibration command. After a reset of the part, the ADCxOF register is reloaded with the factory calibration value. Internal full-scale calibration (available only when gain = 1). In this mode, a gain calibration against an internal full-scale reference voltage is performed on all enabled ADCs. A gain calibration is a two-stage process and takes twice the time of an offset calibration. The calibration result is automatically written to the ADC gain register of the respective ADC, and ADCxSTA[5] is set to 1 to indicate the completion of the calibration command. The internal fullscale calibration works for gain = 1 only. After a reset of the part, the ADC gain register is reloaded with the factory calibration value. System zero-scale calibration. In this mode, a zero-scale calibration is performed on enabled ADC channels against an external zero-scale voltage driven at the ADC input pins. Usually, the selected channel is shorted externally. The calibration result is automatically written to the ADCxOF MMR of the respective ADC, and ADCxSTA[5] is set to 1 to indicate the completion of the calibration command. After a reset of the part, the ADCxOF register is reloaded with the factory calibration value. System full-scale calibration. In this mode, a full-scale calibration is performed using the enabled ADC channels against an external full-scale voltage driven at the ADC input pins. The ADC gain register is updated after a full-scale calibration sequence, and ADCxSTA[5] is set to 1 to indicate the completion of the calibration command. After a reset of the part, the ADC gain register is reloaded with the factory calibration value. Rev. D | Page 24 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Note that the ADC gain and ADCOF registers can be modified by the user only when the ADC is in idle mode (ADCxMDE[2:0] = 011). The following separate ADC gain registers are provided for the ADCs when the reference source is the internal reference, external reference, or AVDD supply: ADCxINTGN, ADCxEXTGN, and ADCxVDDGN. Only the ADCxINTGN is loaded with a factory calibration value. The ADCxEXTGN and ADCxVDDGN registers must be updated by the user after a reset sequence. ADC Power-Down Mode Particularly between single conversions, the ADC should be powered down to reduce overall system power consumption. In full power-down mode, the ADCs and the input amplifiers are fully powered off for maximum power reduction. In idle mode, the ADC is fully powered on but is held in reset. The part enters this mode after calibration or between single conversions. The current consumption is reduced relative to fully active mode. OTHER ADC SUPPORT CIRCUITS Voltage Reference Sources Four reference sources are supported by the ADuCM360/ADuCM361: internal reference, External Reference 1, External Reference 2, and AVDD. Internal Reference The internal reference is a precision 1.2 V band gap, low noise, low drift reference. See the ADuCM360/ADuCM361 data sheet for more information. External Reference 1 External Reference 1 is connected to the VREF+ and VREF− pins. An option to internally buffer the external reference is also provided. A separate buffer is provided for the positive and negative external reference inputs. If the negative input is ground, the negative input buffer should be bypassed. External Reference 2 External Reference 2 can be connected to the AIN7/VBIAS0/IEXC/EXTREF2IN+ and AIN8/EXTREF2IN− pins. External Reference 2 offers the option of buffering the positive input to EXTREF2IN+ (see the description of ADCxCFG[1:0] in Table 29 for more details). AVDD The AVDD of the part can be selected as a reference source. Reference Detection Circuit An internal circuit for detecting an error on the external reference pins is available. The detection circuit checks for open-circuit conditions on the VREF+ and VREF− pins. It also checks that the differential voltage between VREF+ and VREF− is greater than 400 mV. If an error condition is detected, the error flag in the DETSTA[3] register is set. If an external reference is selected, the on-chip reference voltage detection circuit flags an error if an open is detected on the VREF+ or VREF− pin or if the differential input reference voltage across VREF+/VREF− is below 400 mV. In normal operation, the sampling rate is configured via the ADCxFLT registers. No reference detection circuit is available for the EXTREF2IN± pins. Fast Response Output/Input Step Detection Circuit On both ADCs, the output of the Σ-Δ modulator is fed into a sinc3 or sinc4 digital filter. However, for faster response times, a sinc2 filter can be selected to operate in parallel with the sinc3 or sinc4 filter of both ADCs, but the sinc3 and sinc4 filters cannot operate simultaneously. This sinc2 filter has a configurable update rate with a fastest speed of 2 ms and with 14 effective bits resolution. The output of the sinc2 filter is fed to a separate result register, STEPDAT. The sinc2 filter can also be used in step detection mode for detecting step changes in the input signal. In this mode, the output of the sinc2 filter is compared with the two previous output values. If the difference between the latest value and the two previous values is greater than a predefined step threshold, a step detected flag is asserted in the DETSTA register and an interrupt is triggered. Alternatively, a step can be triggered by comparing the output of the sinc2 filter with the last output of the sinc3 or sinc4 filter. If the difference is greater than the configured threshold level, the step detected flag is asserted. Two possible interrupt sources are provided with the sinc2 filter: • • Using the DMA controller and the associated ADC DMA interrupt; when a preconfigured number of sinc2 samples has been stored to memory, this interrupt flag is set. A separate interrupt flag is provided for the step detection filter (DETSTA[1]). Rev. D | Page 25 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 The DETCON register configures the sinc2 filter and step detection circuit. Every output from the sinc2 filter can be read by polling DETSTA[0]. Step Detection Circuit As Figure 7 shows, the step detection filter uses 256 × ADC clocks for each sample period. The output at the end of each filter period is the average value of each of the 256 samples. The step detection hardware compares each output with the three previous outputs. If the difference between the current output and any of the previous outputs is greater than the selected threshold level, a step is detected. The oversampling rate of the sinc2 filter is configurable for 256/512/768/1024 × ADC clocks, resulting in sampling periods of 2 ms/4 ms/6 ms/ 8 ms, respectively, by setting DETCON[1:0]. 0,1,......255 0,1,......255 0,1,......255 0,1,......255 FILTER OUTPUT 1 FILTER OUTPUT 2 FILTER OUTPUT 3 FILTER OUTPUT 4 10464-006 TIME INTERVAL Figure 7. ADuCM360/ADuCM361 Step Detection Timing Diagram As Figure 8 shows, the difference between Level 1 and Level 2 is greater than the selected threshold level: • • • If Output 4 − Output 3 = Result < Threshold, then no step detected. If Output 4 − Output 2 = Result > Threshold, then step detected. If Output 4 − Output 1 = Result > Threshold, then step detected. 0,1,......255 0,1,......255 FILTER OUTPUT 1 0,1,......255 FILTER OUTPUT 2 0,1,......255 FILTER OUTPUT 3 FILTER OUTPUT 4 LEVEL 2 10464-007 STEP INPUT LEVEL 1 Figure 8. Step Detection Circuit The key features of the step detection circuit are as follows: • • • • • • • This step detection filter operates at a sampling rate of 500 Hz by default, resulting in a 2 ms output rate. This can be extended to 4 ms, 6 ms, or 8 ms by using the filter control register. The step threshold is programmable using a 10-bit register, STEPTH. The minimum threshold setting is 0.05% of full scale. The output resolution is 14 bits noise free. A separate step detection interrupt and STEPDAT register are provided for the output of this filter. The minimum delay between a step condition and the assertion of the step flag by the filter is 6 ms, assuming that the sampling period is 2 ms. This delay is calculated as 3 × sampling period. The slowest slew rate that the filter can handle is the sampling period for one output. For example, if the step detection range is selected as a 0.25% or greater step, the slew rate of the step must not be greater than 2 ms when the sampling rate is selected as 500 Hz. SINC2 Filter Data Output Register—STEPDAT The output of the sinc2 filter is provided by the STEPDAT register. The gain is automatically accounted for in the STEPDAT output value. 31 DATA AT GAIN = 1 27 14 SIGN DATA VREF = 1.2V ZERO ~7.8125mV 27 EXTENDED SIGN 20 7 DATA NOISE 4 0 ZERO 500Hz UPDATE RATE Figure 9. ADC Sinc2 Data Register 500 Hz Update Rate Rev. D | Page 26 of 176 10464-008 31 DATA AT GAIN = 128 0 11 NOISE UG-367 ADuCM360/ADuCM361 Hardware User Guide ADC Comparator and Accumulator Both ADCs have a digital comparator and accumulator for postprocessing ADC result values. Every ADC result can be compared with a preset threshold level (ADCxTH) as configured via ADCxPRO[3:2]. An interrupt is generated if the absolute (sign independent) value of the ADC result is greater than the preprogrammed comparator threshold level. An extended function of this comparator function allows user code to configure a threshold counter (ADCxTHV) to monitor the number of ADC results that has occurred above or below the preset threshold level. Again, an ADC interrupt is generated when the threshold counter reaches a preset value (ADCxRCR). A 32-bit accumulator (ADCxACC) function can be configured (ADCxPRO[5:4]), allowing the ADC to add (or subtract) multiple ADC sample results. User code can read the accumulated value directly (ADCxACC) without any further software processing. The accumulator also comes with a comparator option, allowing a separate interrupt to be generated if the accumulator value exceeds a user-defined threshold (ADCxACC > ADCxATH). Diagnostic Current Sources To detect a connection failure to an external sensor, the ADuCM360/ADuCM361 incorporates a 50 µA constant (burnout) current source on the selected analog input channels to both ADCs. These can be switched on or off via the ADCxCON[11:10] bits. Diagnostic current sources are accurate to ±10%. A B ADC0 (+) R1* AVDD A VIN = ADC0, ADC1 B ADC1 (–) *ASSUMES R1 = R2 = 2kΩ 10464-009 R2* Figure 10. Example Circuit Using Diagnostic Current Sources Table 15. Example Scenarios for Using Diagnostic Current Sources Diagnostic Test Description Convert AINx/AINy as normal with diagnostic currents disabled. ADCxCON[11:10] = 01 Enable a 50 μA diagnostic current source on AINx by setting ADCxCON[11:10] = 01. Convert AINx and AINy. Convert AINx in single-ended mode with diagnostic currents enabled. Register Setting ADCxCON[11:10] = 00 ADCxCON[11:10] = 11 Enable a 50 μA diagnostic current source on both AINx and AINy by setting ADCxCON[11:10] = 11. Convert AINx and AINy. Normal Result Fault Result ADC changes by ΔV = +50 μA × R1. For example, ~100 mV for R1 = 2 kΩ. Expected voltage on AINx. Short circuit between AINx and AINy. Short circuit between R1_a and R1_b. AINx open circuit or R1 open circuit. ADC reading changes by ΔV = 50 μA × (R1 − R2), that is, ~10 mV for 10% tolerance. R1 does not match R2. Rev. D | Page 27 of 176 Detected Measurement for Fault ADC reading ≈ 0 V, regardless of PGA setting. ADC reading = positive full scale, even on the lowest PGA setting. ADC reading > 10 mV of expected value. ADuCM360/ADuCM361 Hardware User Guide UG-367 Bias Voltage (VBIAS) Generator Circuit The ADuCM360/ADuCM361 provides a circuit for generating a bias voltage or common-mode voltage of AVDD_REG/2. The AVDD_REG/2 common-mode voltage can be connected to one of two analog pins, AIN7 or AIN11, using ADCxCFG[10:8]. Therefore, instead of connecting it internally to the output of the PGA, the user can connect this voltage externally. This functionality is particularly useful for thermocouple setups. If AIN7 is used as the VBIAS generator, it should be connected to the thermocouple side of any input filtering. AIN0 AIN1 AVDD_REG 10464-010 VBIAS Figure 11. Using VBIAS Voltage to Set Thermocouple Common-Mode Voltage Note that only one analog pin can be configured as a VBIAS output. ADCxCFG[10:8] are used to select the VBIAS output pin. The power-up time of the VBIAS output is dependent on the load capacitance placed on the pin. To reduce power-up times, a VBIAS boost mode is provided that allows the VBIAS generator circuit to output more current to the VBIAS pin, thus reducing the power-up time. ADCxCFG[13] increases the default output current by a factor of 30. When the boost bit is enabled, the VBIAS generator circuit consumes up to 150 μA of extra current. When charging an external 10 nF load capacitor, the power-up time is 30 ms with boost mode disabled and is 1 ms with boost mode enabled. OTHER ADC DETAILS Digital Filter Option The ADuCM360/ADuCM361 main ADC digital filter settings are controlled by the ADC0FLT and ADC1FLT registers. The decimation factor of the sinc3 or sinc4 filter is set using ADCxFLT[6:0]. See Table 16 and Table 17 for further details on the decimation factor values. The range of operation of the sinc3 or sinc4 filter (SF) word depends on whether the chop function is enabled. With chopping disabled, the minimum SF word allowed is 1 and the maximum SF word allowed is 127, resulting in an ADC throughput range of 3.5 Hz to 3.906 kHz. With chopping enabled, the top frequency is 1.262 kHz. For more information about how to calculate the ADC sampling frequency based on the value programmed in ADCxFLT[6:0], refer to the description of the ADCxFLT register in the ADC Circuit Memory Mapped Registers section. For sampling frequencies of 488 Hz or greater, the sinc4 filter option should be enabled by setting ADCxFLT[12] = 1. For sampling frequencies of less than 488 Hz, the sinc3 option should be enabled by clearing ADCxFLT[12] = 0. ADCxFLT[7] provides the option of adding an extra notch at 1.2 × frequency of the main notch. This feature is most commonly used for simultaneous 50 Hz/60 Hz rejection, where 50 Hz is the frequency of the main filter notch. A sinc2 filter option that can operate parallel to the sinc3 or sinc4 filter on ADC0 or ADC1 is also available. The sinc2 filter can be used as a step detection filter or for faster output measurements (but with lower resolution). To use the sinc2 as a faster filter for ADC0 or ADC1, set DETCON[7] = 1. Rev. D | Page 28 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Table 16. ADC Conversion Rates and Settling Times Sinc4 Enabled ADCxFLT[12] No (0) Chop Enabled ADCxFLT[15] No (0) Averaging Factor (AF) ADCxFLT[11:8] 0 Running Average ADCxFLT[14] No (0) No (0) No (0) 0 Yes (1) No (0) No (0) >0 No (0) No (0) >0 fADC Normal Mode 125,000 [SF 1] 16 3 f ADC 125,000 [SF 1] 16 4 f ADC No (0) 125,000 [SF 1] 16 [3 AF] 1 f ADC Yes (1) 125,000 [SF 1] 16 [3 AF] 2 f ADC 2 f ADC No (0) Yes (1) Any value Any value 125,000 [SF 1] 16 [3 AF] 3 Yes (1) No (0) 0 No (0) 125,000 [SF 1] 16 Yes (1) No (0) Yes (1) 1 2 Yes (1) 0 Yes (1) 0 tSETTLING1,2 125,000 [ SF 1] 16 Any value 4 f ADC 5 f ADC 125,000 ([ SF 1] 16 4) 3 2 f ADC An additional time of approximately 256 μs per ADC is required before the first ADC result is available. Any change to the configuration restarts the ADC and the settling time of the filter is required to get valid data. Table 17. Allowable Combinations of SF and AF AF SF 0:123 124 125 126 127 0 Yes Yes Yes Yes Yes 1:2 Yes Yes Yes Only if notch 2 on No 3:7 Yes Yes Yes No No 8:9 Yes Yes Only if notch 2 on No No 10:14 Yes Yes No No No 15 Yes Only if notch 2 on No No No ADC Chopping The ADCs on the ADuCM360/ADuCM361 implement a chopping scheme whereby the ADC repeatedly reverses its inputs. Therefore, the decimated digital output values from the sinc3 or sinc4 filter have a positive and negative offset term associated with them. This results in the ADC including a final summing stage that sums and averages each value from the filter with previous filter output values. This new value is then sent to the ADC data MMR. This chopping scheme results in excellent dc offset and offset drift specifications and is extremely beneficial in applications where drift and noise rejection are required. Noise/Resolution Table The noise resolution figures of both ADCs are available in the ADuCM360/ADuCM361 data sheet. Simultaneous Sampling The ADuCM360 has two identical ADCs. These can be configured for simultaneous sampling. The filter settings of ADC1 (in ADC1FLT) are then automatically applied to ADC0. To enable simultaneous sampling, follow these configuration steps: Configure ADC0MDE and ADC1MDE. Configure ADC1FLT. Configure ADC0CON and ADC1CON as required but, ensure Bit 19 in both cases = 0 Set ADCCFG[15] = 1. Both ADCs will then start converting at the same time and output data at the same rate. Rev. D | Page 29 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Internal Channels The ADuCM360/ADuCM361 has four internal channel options: Temperature sensor DAC monitor AVDD ÷ 4 IOVDD ÷ 4 Temperature Sensor Settings The ADuCM360/ADuCM361 provides a voltage output from an on-chip band gap reference that is proportional to the absolute temperature on ADC1. This voltage output can also be routed through the front end of the ADC1 multiplexer (effectively, an additional ADC channel input), facilitating an internal temperature sensor channel that measures die temperature. The internal temperature sensor is not designed for use as an absolute ambient temperature calculator. Its intended use is as an approximate indicator of the temperature of the ADuCM360/ADuCM361 die. An ADC temperature sensor conversion differs from a standard ADC voltage. The ADC performance specifications do not apply to the temperature sensor. The temperature sensor settings are as follows: Enable the temperature sensor on ADC1; set ADC1CON[9:0] = 0xBC211. PGA enabled. It is suggested to use gain = 2. ADCMDE = 0x11. To calculate the die temperature, use the following formula: T − TREF = (VADC − VTREF) × K where: T is the temperature result. TREF is 25°C. VADC is the average ADC result from two consecutive conversions. VTREF is 82.1 mV, which corresponds to TREF = 25°C as described in the ADuCM360/ADuCM361 data sheet. K is the gain of the ADC in temperature sensor mode as determined by characterization data, K = 4 °C/mV. This corresponds to 1/V TC as described in the ADuCM360/ADuCM361 data sheet. Using the default values from the ADuCM360/ADuCM361 data sheet without any calibration, the equation becomes T – 25°C = (VADC – 82.1) × 4 where: VADC is in millivolts. Check the latest version of the ADuCM360/ADuCM361 data sheet for the most up to date figures. For increased accuracy, perform a single-point calibration at a controlled temperature value. For the calculation shown without calibration, (TREF, VTREF) = (25°C, 82.1 mV). The idea of a single-point calibration is to use other known values (TREF, VTREF) to replace the common values (25°C, 82.1 mV) for every part. For some users, it is not possible to get such a known pair. DAC Monitor Settings The DAC monitor settings are as follows: Gain = 1 0x1 pADI_ADC1->MDE = 0x1 pADI_ADC1->CON = 0xBC18F, AIN+ = DAC, AIN− = AGND AVDD/4 Settings The AVDD/4 settings are as follows: Select DAC as AIN− and set the DAC output to 600 mV pADI_DAC->DACCON = 0x410 pADI_ADC1->DAT = 0x8000000 pADI_ADC1->CON = 0xBC1AC Rev. D | Page 30 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide pADI_ADC1->MDE = 0x1 AVDD supply = (ADC voltage + DAC) × 4 Note that the output must be measured relative to the DAC output and not to AGND for the channel to work properly. IOVDD/4 Settings The IOVDD/4 settings are as follows: Select DAC as AIN− and set the DAC output to 600 mV pADI_DAC->DACCON = 0x410 pADI_ADC1->DAT = 0x8000000 pADI_ADC1->CON = 0xBC1CC pADI_ADC1->MDE = 0x1 AVDD supply = (ADC voltage + DAC) × 4 Note that the output must be measured relative to the DAC output and not to AGND for the channel to work properly. ADC DMA Details A direct memory access function is available for the ADC0, ADC1, and sinc2 outputs. This function helps to reduce the processing overhead of handling multiple ADC conversion interrupts. Two separate DMA functions are provided for the ADCs: A DMA write from memory to the ADC control registers. Note that this function is available only for ADC0 and ADC1 and is not available for the sinc2 output. A DMA write from the ADC0DAT, ADC1DAT, or STEPDAT register directly into memory. See the Example Code: DMA Configuration for Moving ADC0 Results Directly to Memory section and the Example Code: DMA Configuration for Setting the ADC0 Control Registers Using DMA section for a list of steps and example code for setting up the DMA controller. Example Code: DMA Configuration for Moving ADC0 Results Directly to Memory pADI_ADC0->MDE = 0x00000003; registers by placing ADC in idle mode // Allow writing to the calibration pADI_ADC0->CON = 0x80001; channels, Internal reference // Enable ADC0, AIN0/AIN1 input pADI_ADC0-> ADCCFG = 0x00; ground switch // Enable input buffers, disable pADI_ADC0->FLT = 0x7d; // 50Hz sampling rate, chop off Dma_Init(); // Init DMA structures pADI_ADCDMA-> ADCDMACON = 0x0000003; results to memory // Enable ADC0 DMA channel for ADC ADC0DMAREAD(uxADC0Data, 32); // Setup DMA control registers NVIC_EnableIRQ(DMA_ADC0_IRQn); // Enable DMA ADC0 Interrupt pADI_DMA->DMAENSET = 0x200; controller // Select ADC0 channel in DMA pADI_ADC0->MDE = 0x21; // G = 4, continuous conversions void ADC0DMAREAD(unsigned long *pucRX_DMA, unsigned int iNumRX) { DmaDesc Desc; descriptors used here // Common configuration of all the Desc.ctrlCfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Rev. D | Page 31 of 176 ADuCM360/ADuCM361 Hardware User Guide Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_WORD; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_WORD; UG-367 // RX Primary Descriptor Desc.srcEndPtr = (unsigned int)&ADC0DAT; Desc.destEndPtr = (unsigned int)(pucRX_DMA + iNumRX - 0x1); // Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_NO; Desc.ctrlCfg.Bits.dst_inc = INC_WORD; *Dma_GetDescriptor(DMA_REQ_ADC0,FALSE) = Desc; } void Dma_Init(void) { // Clear all the DMA descriptors (individual blocks will update their descriptors memset(dmaChanDesc,0x0,sizeof(dmaChanDesc)); // Set up the DMA base pointer. pADI_DMA->DMAPDBPTR = (unsigned int) &dmaChanDesc; // Enable the µDMA (Write only reg) pADI_DMA->DMACFG = 0x1; } DmaDesc * Dma_GetDescriptor(unsigned int iChan,boolean bAlternate) { if (iChan < DMACHAN_NUM) { if (bAlternate) return &(dmaChanDesc[iChan + 12]); //DMA_ALT_OFFSET]); else return &(dmaChanDesc[iChan ]); } else return 0x0; } void DMA_ADC0_Int_Handler() { unsigned char n = 0; NVIC_DisableIRQ(DMA_ADC0_IRQn); // Clear Interupt source ucDMA_ADC0_COMPLETE = 1; } Example Code: DMA Configuration for Setting the ADC0 Control Registers Using DMA unsigned long uxADC0SETUP[] = {0x1, // ADC0MSKI 0x80001, // ADC0CON 0x0000, // ADC0OF Rev. D | Page 32 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide 0x5555, // ADC0INTGN 0x5555, // ADC0EXTGN 0x5555, // ADC0VDDGN 0x00, // ADCxCFG 0x3, // ADC0FLT 0x113}; // ADC0MDE - G = 4 Not sure what you are asking here (Just wanted to make sure that the placement was okay. Also can we add a space before and after the equal sign?) OK ucDMA_ADC0_COMPLETE = 0; set in IRQ handler // Flag to indicate DMA complete - pADI_ADC0->MDE; registers by placing ADC in idle mode // Allow writing to the calibration Dma_Init(); // Init DMA structures pADI_ADCDMA-> ADCDMACON = 0x0000002; for moving array contents in memory into ADC0 control registers // Enable ADC0 DMA channel ADC0DMAWRITE(uxADC0SETUP, 9); registers // Setup DMA control NVIC_EnableIRQ(DMA_ADC0_IRQn); // Enable DMA ADC0 Interrupt pADI_DMA->DMAENSET = 0x200; controller // Select ADC0 channel in DMA pADI_TM1->LD = 0x28; timer overflow required to trigger DMA write // On pre-release silicon, pADI_TM1->CON = 0x18; void ADC0DMAWRITE(unsigned long *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here Desc.ctrlCfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_WORD; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_WORD; // TX Primary Descriptor Desc.srcEndPtr = (unsigned long)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_WORD; Desc.ctrlCfg.Bits.dst_inc = INC_WORD; (unsigned long)&ADC0MDE; *Dma_GetDescriptor(DMA_REQ_ADC0,FALSE) = Desc; } For further details, see the DMA Controller section of this document. Rev. D | Page 33 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 ADC Data Register The ADCxDAT register output format allows the user to easily calculate the voltage measured by the ADC. In bipolar mode, the equation is as follows: (VREF)/228) × ADCxDAT (signed results) In unipolar mode, the equation is as follows: (VREF)/228) × ADCxDAT (unsigned results, positive values only) The gain value is automatically adjusted by the ADC hardware. Each ADC gives a 24-bit conversion result. The data is twos complement or unipolar, based on the ADCCODE bit (ADCxCON[18]). Reading the ADCxDAT MMR clears any RDY flags that are active. Although the ADC is nominally 24 bits, the noise places a limit of about 1.05 μV rms at a 3.53 Hz update and a gain of 1. This results in a useful signal range of ±1.2 V to 1.05 μV, which equates to approximately 2,285,000:1, or 21 bits. The result is placed in Bits[27:7] of ADCxDAT. At a gain of 128, the rms noise is given as 52 nV at a 3.53 Hz update rate. This results in a useful signal range of about 7.8125 mV to 42 nV, which equates to approximately 300,000:1, or 18.5 bits. The result is placed in Bits[20:3] of ADCxDAT. 28 27 6 27 26 5 DATA 26 25 4 DATA 25 24 3 EXTENDED SIGN DATA 24 23 3 EXTENDED SIGN 23 22 3 2 EXTENDED SIGN DATA AT GAIN = 32 DATA 31 3 2 DATA 31 0 NOISE 21 20 3 2 EXTENDED SIGN DATA AT GAIN = 128 0 NOISE 22 21 EXTENDED SIGN DATA AT GAIN = 64 0 1 DATA 31 0 2 NOISE 31 DATA AT GAIN = 16 ZERO NOISE 31 DATA AT GAIN = 8 0 2 ZERO EXTENDED SIGN DATA AT GAIN = 4 ZERO NOISE 31 0 3 ZERO EXTENDED SIGN ZERO NOISE 31 DATA AT GAIN = 2 0 3 DATA DATA 0 NOISE 10464-011 SIGN NOISE 31 DATA AT GAIN = 1 Figure 12. ADC Data Register 3.53 Hz Update Rate For a faster update rate, such as 50 Hz, the noise figure is worse by nearly two bits (see Figure 13). 28 27 6 DATA AT GAIN = 128 ZERO ~4nV ~7.8125mV VREF = 1.2V 31 0 3 DATA 27 21 20 EXTENDED SIGN 5 DATA Figure 13. ADC Data Register 50 Hz Update Rate Rev. D | Page 34 of 176 0 NOISE 10464-012 SIGN NOISE 31 DATA AT GAIN = 1 UG-367 ADuCM360/ADuCM361 Hardware User Guide There is still significant space at the bottom end if the noise performance improves or if additional filtering is applied. The ADC does not write new data into the ADCxDAT MMRs if the relevant RDY bits are set. However, this does not apply if the ADuCM360/ ADuCM361 is in power-down mode with DMA enabled, in which case ADCxDAT always contains the most recent ADC data. The following should be noted: • • • • The error bit, ADCxSTA[4], can be used for detecting gross (that is, >30%) ADC overflow or underflow conditions. See the PGA Gain Configuration section for details about the 1 V output voltage limit when the PGA is enabled. If RDY is low, there is no guarantee that the ADCxDAT MMRs will be stable if they are read. If the ADCxRCR counter is active, the data registers are not updated until RDY is set (that is, when the ADCxRCR counter reaches the programmed limit). This is not true if the processor is off, in which case the ADCxDAT MMR(s) contains the most recent ADC result(s) when the processor wakes up. Excitation Current Source The ADuCM360/ADuCM361 contains two matched software configurable current sources. These excitation currents are sourced from AVDD. They are individually configurable to give a current range of 10 μA to 1 mA. The current output value is configured via IEXCDAT. These current sources can be used to excite an external resistive bridge or RTD sensors. The IEXCCON MMR controls the excitation current sources. IEXCCON[2:0] configure the output pin for Excitation Current Source 0. Similarly, IEXCCON[5:3] configure the output pin for Excitation Current Source 1. It is also possible to configure both excitation current sources to output current to a single output pin, effectively doubling the output current by configuring both excitation current sources for the same pin. This allows up to 2 mA of output current on a single excitation pin. For example, setting IEXCCON = 0x64 and IEXCDAT = 0x3E results in a 2 mA output current on the AIN4 pin. The excitation current source design by default uses an internal reference resistor. When using the internal reference resistor, the typical output current drift performance is 200 ppm/°C. By using a low drift external 150 kΩ reference resistor and setting IEXCCON[6] = 0, the drift in the output current value can be reduced. ADC CIRCUIT MEMORY MAPPED REGISTERS Table 18. ADC0 Register Summary (ADuCM360 Only) Address 0x40030000 0x40030004 0x40030008 0x4003000C Name ADC0STA ADC0MSKI ADC0CON ADC0OF Description ADC status register Interrupt control register Main control register Offset calibration register Access R RW RW RW 0x40030010 ADC0INTGN Gain calibration register when using internal reference RW 0x40030014 ADC0EXTGN Gain calibration register when using external reference RW 0x40030018 0x4003001C ADC0VDDGN ADC0CFG RW RW 0x40030020 0x40030024 0x40030028 0x4003002C 0x40030030 0x40030034 ADC0FLT ADC0MDE ADC0RCR ADC0RCV ADC0TH ADC0THC RW RW RW R RW RW 0x007D 0x0003 001 0x0000 0x0000 0x01 0x40030038 0x4003003C 0x40030040 0x40030044 0x40030048 ADC0THV ADC0ACC ADC0ATH ADC0PRO ADC0DAT Gain calibration register when using AVDD as the ADC reference Control register for the VBIAS voltage generator, ground switch, and external reference buffer Filter configuration register Mode control register Number of ADC0 conversions before an ADC interrupt is generated Current number of ADC0 conversion results Sets the threshold Number of cumulative ADC0 conversion result readings above ADC0TH that must occur 8-bit threshold exceeded counter register 32-bit accumulator register Holds the threshold value for the accumulator comparator Configuration register for postprocessing of ADC0 results Conversion result register Default 0x00 0x00 0x3038C Set in production testing Set in production testing Set in production testing 0x5555 0x0000 R R RW RW R 0x00 0x00000000 0x00000000 0x00 0x00000000 Rev. D | Page 35 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Table 19. ADC1 Register Summary (ADuCM360 and ADuCM361) Address 0x40030080 0x40030084 0x40030088 0x4003008C Name ADC1STA ADC1MSKI ADC1CON ADC1OF Description ADC status register Interrupt control register Main control register Offset calibration register Access R RW RW RW 0x40030090 ADC1INTGN Gain calibration register when using internal reference RW 0x40030094 ADC1EXTGN Gain calibration register when using external reference RW 0x40030098 0x4003009C ADC1VDDGN ADC1CFG RW RW 0x400300A0 0x400300A4 0x400300A8 0x400300AC 0x400300B0 0x400300B4 ADC1FLT ADC1MDE ADC1RCR ADC1RCV ADC1TH ADC1THC RW RW RW R RW RW 0x007D 0x0003 0x0001 0x0000 0x0000 0x01 0x400300B8 0x400300BC 0x400300C0 0x400300C4 0x400300C8 ADC1THV ADC1ACC ADC1ATH ADC1PRO ADC1DAT Gain calibration register when using AVDD as the ADC reference Control register for the VBIAS voltage generator, ground switch, and external reference buffer Filter configuration register Mode control register Number of ADC1 conversions before an ADC interrupt is generated Current number of ADC1 conversion results Sets the threshold Number of cumulative ADC1 conversion result readings above ADC1TH that must occur 8-bit threshold exceeded counter register 32-bit accumulator register Holds the threshold value for the accumulator comparator Configuration register for postprocessing of ADC1 results Conversion result register Default 0x00 0x00 0x303FF Set in production testing Set in production testing Set in production testing 0x5555 0x0000 R R RW RW R 0x00 0x00000000 0x00000000 0x00 0x00000000 Access RW R RW R RW Default 0x0000 0x00 0x0000 0x00000000 0x0000 Table 20. ADCSTEP Register Summary Address 0x400300E0 0x400300E4 0x400300E8 0x400300EC 0x400300F8 Name DETCON DETSTA STEPTH STEPDAT ADCDMACON Description Control register for reference detection and the step detection filter Status register for detection Threshold for step detection filter Offers coarse data from the output of the step detection filter ADC DMA mode configuration register Table 21. Other ADC Register Summary Address 0x40008840 0x40008850 0x40008854 Name REFCTRL IEXCCON IEXCDAT Description Internal reference control register Controls the on-chip excitation current sources Sets the output current setting for both excitation current sources Rev. D | Page 36 of 176 Access RW RW RW Default 0x0000 0xC0 0x06 UG-367 ADuCM360/ADuCM361 Hardware User Guide ADC Registers ADC Status Registers Address: 0x40030000, Reset: 0x00, Name: ADC0STA (ADuCM360 Only) Address: 0x40030080, Reset: 0x00, Name: ADC1STA (ADuCM360 and ADuCM361) Table 22. Bit Descriptions for ADCxSTA Bits 7:6 5 Name Reserved ADCxCAL 4 ADCxERR 3 ADCxATHEX 2 ADCxTHEX 1 ADCxOVR 0 ADCxRDY Description ADC calibration status bit. Set to 1 when an ADC calibration is complete. Cleared to 0 after reading ADCxSTA. ADC conversion error status bit. Set to 1 when an underrange or overrange error occurs. Cleared to 0 after reading ADCxSTA. ADC accumulator comparator threshold status bit. Valid only if the ADC accumulator is enabled via the ADCxPRO register. Set to 1 when the ADC accumulator value in ADCxACC exceeds the threshold value programmed in the ADC comparator threshold register, ADCxATH. Cleared to 0 when the value in ADCxACC does not exceed the value in ADCxATH. ADC comparator threshold. Valid only if the ADC comparator is enabled via the ADCxPRO register. Set to 1 if the absolute value of the ADC conversion result exceeds the value written in the ADCxTH register. If the ADC threshold counter is used (ADCxRCR), this bit is set only when the specified number of ADC conversions equals the value in the ADCxTHV register. Otherwise, this bit is cleared. This bit is cleared by hardware when reconfiguring the ADC. See Code Example for more details DC overrange bit. Set to 1 if the overrange detection function is enabled via the ADCxPRO register. This bit is set by hardware if the ADC input is grossly (>30% approximate) overrange. This bit is updated every 500 µs. Cleared to 0 by software when ADCxPRO[1] is cleared or if the ADC gain is changed in ADCxMDE. Valid conversion result. Set to 1 by hardware as soon as a valid conversion result is written in the ADCDAT register if the ADC channel is enabled. If the ADC counter register is used (ADCxRCR), this bit is set only when the specified number of ADC conversions equals the value in the ADCxRCR register. Cleared to 0 after reading ADCDAT. Interrupt Control Register Address: 0x40030004, Reset: 0x00, Name: ADC0MSKI (ADuCM360 Only) Address: 0x40030084, Reset: 0x00, Name: ADC1MSKI (ADuCM360 and ADuCM361) Table 23. Bit Descriptions for ADCxMSKI Bits 7:4 3 Name Reserved ATHEX 2 THEX 1 OVR 0 RDY Description ADC accumulator comparator threshold status bit mask. 0: Disable the interrupt (default). 1: Enable an interrupt when the ADCxATHEX bit in the ADCxSTA register is set. ADC comparator threshold mask. 0: Disable the interrupt (default). 1: Enable an interrupt when the ADCxTHEX bit in the ADCxSTA register is set. ADC overrange bit mask. 0: Disable the interrupt (default). 1: Enable an interrupt when the ADCxOVR bit in the ADCxSTA register is set. Valid conversion result mask. 0: Disable the interrupt (default). 1: Enable an interrupt when the ADCxRDY bit in the ADCxSTA register is set. Rev. D | Page 37 of 176 ADuCM360/ADuCM361 Hardware User Guide Control Registers Address: 0x40030008, Reset: 0x3038C, Name: ADC0CON (ADuCM360 Only) Address: 0x40030088, Reset: 0x303FF, Name: ADC1CON (ADuCM360 and ADuCM361) Table 24. Bit Descriptions for ADCxCON Bits 31:20 19 Name Reserved ADCEN 18 ADCCODE 17 BUFPOWN 16 BUFPOWP 15 BUFBYPP 14 BUFBYPN 13:12 ADCREF 11:10 ADCDIAG 9:5 ADCCP 4:0 ADCCN Description Enable bit. 0: Power down the ADC, and clear the ADCxRDY bit. 1: Enable the ADC. ADC output coding. This bit also affects the coding of the accumulator (ADCxACC) and ADCxTH. 0: Twos complement ( bipolar); note that ADCDAT >> 1. 1: Unipolar. Negative buffer power. 0: Negative buffer enabled. 1: Negative buffer powered down. Positive buffer power. 0: Positive buffer enabled. 1: Positive buffer powered down. Positive buffer bypass. 0: Positive buffer not bypassed. 1: Positive buffer bypassed. Negative buffer bypass. 0: Negative buffer not bypassed. 1: Negative buffer bypassed. Reference selection. 00: INTREF-AGND. 01: EXTREF. The external buffer mode is set in the ADCxCFG register. 10: EXTREF2IN (valid only for ADC1). EXTREF2IN+ buffer controlled via ADCxCFG. 11: AVDD-AGND. Diagnostic current bits. 00: Current source off. 01: Enable current (50 μA) on selected positive input (for example, AIN0). 10: Enable current (50 μA) on selected negative input (for example, AIN1). 11: Enable current (50 μA) on selected input (for example, AIN0 and AIN1). Positive input channel selection. 00000: AIN0. 00001: AIN1. ... 01011: AIN11. 01111: AGND. 11100: All channels off (default). 01100: DAC output (valid only for ADC1). 01101: AVDD/4 (valid only for ADC1). 01110: IOVDD/4 (valid only for ADC1). 10000: Temperature sensor (valid only for ADC1). 11111: All channels off (default) (valid only for ADC1). Negative input channel selection. 00000: AIN0. 00001: AIN1. ... ... 01011: AIN11. 01111: AGND. 01100: DAC output. 11111: Reserved. 10001: Temperature sensor (valid only for ADC1). For all other internal channel measurements, select AGND. Rev. D | Page 38 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide Offset Calibration Registers The offset registers are signed, in twos complement form. A code of 0000 means subtract 0 offset. This does not change to unipolar if the ADCCODE bit in ADCxCON is set. The user can only write to the offset registers when the ADC is at idle. But a software delay of 6 µs is required between writing to ADCxMDE and writing to the offset or gain register. The valid range of the ADCxOF register is 0xA000 to 0x5FFF. Using values outside this range generates an under/over range error. The offset is compensated for before shifting the ADC results, depending on the gain setting. Therefore, the LSB weight of the ADCxOF register is independent from the gain settings (LSB weight = 2 × VREF/49150 = 48.8 µV) and the offset must be adjusted when changing gain settings. Address: 0x4003000C, Reset: Factory defined, Name: ADC0OF (ADuCM360 Only) Address: 0x4003008C, Reset: Factory defined, Name: ADC1OF (ADuCM360 and ADuCM361) Table 25. Bit Descriptions for ADCxOF Bits 15:0 Name VALUE Description ADC offset calibration coefficient. Valid range: 0xA000 to 0x5FFF. Gain Calibration Registers There are three types of gain registers: • • • One when the internal reference configuration is used One when the external reference configuration is used One when the AVDD reference configuration is used The corresponding ADCGN is applied according to the reference configuration. The gain register is an unsigned number, representing a scaling factor. The maximum value is 0xFFFF, and the nominal value is 0x5555. The gain calibration registers are written with factory calibrated values at power-on or reset. The register is overwritten if a gain calibration is initiated by the user via the ADCxMDE register. ADC internal full-scale calibration is only intended to work when gain = 1.User can write to gain registers only when the ADC is in idle or power-down mode or when ADCEN = 0 (ADCxCON[19]). However, a software delay is required between writing to ADCxMDE and writing to the offset or gain register. A delay of 6 µs is recommended. Factory calibration is performed for the internal reference only and is stored in ADCxINTGN. The user must populate ADCxEXTGN and ADCxVDDGN before using the part. Gain Calibration Registers When Using Internal Reference Register Address: 0x40030010, Default: Factory Defined, Name: ADC0INTGN (ADuCM360 Only) Address: 0x40030090, Default: Factory Defined, Name: ADC1INTGN (ADuCM360 and ADuCM361) Table 26. Bit Descriptions for ADCxINTGN Bits 15:0 Name VALUE Description ADC 16-bit gain calibration coefficient. Use when the internal reference is selected as the reference. Gain Calibration Register When Using External Reference Register Address: 0x40030014, Default: Factory Defined, Name: ADC0EXTGN (ADuCM360 Only) Address: 0x40030094, Default: Factory Defined, Name: ADC1EXTGN (ADuCM360 and ADuCM361) Table 27. Bit Descriptions for ADCxEXTGN Bits 15:0 Name VALUE Description ADC 16-bit gain calibration coefficient. Use when the external reference is selected as the reference. Rev. D | Page 39 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Gain Calibration Register When Using AVDD as the ADC Reference Register Address: 0x40030018, Reset: 0x5555, Name: ADC0VDDGN (ADuCM360 Only) Address: 0x40030098, Reset: 0x5555, Name: ADC1VDDGN (ADuCM360 and ADuCM361) Table 28. Bit Descriptions for ADCxVDDGN Bits 15:0 Name VALUE Description ADC 16-bit gain calibration coefficient. Use when AVDD is selected as the reference. Configuration Register Address: 0x4003001C, Reset: 0x0000, Name: ADC0CFG (ADuCM360 Only) Address: 0x4003009C, Reset: 0x0000, Name: ADC1CFG (ADuCM360 and ADuCM361) ADC0CFG and ADC1CFG are the same physical register, which is shared between both ADCs, but the register has a dual address for ADC DMA writes. Table 29. Bit Descriptions for ADCxCFG Bits 15 Name SIMU (valid for ADuCM360 only). 14 13 Reserved BOOST30 12:11 10:8 Reserved PINSEL 7 GNDSWON 6 GNDSWRESEN 5:2 1:0 Reserved EXTBUF Description 0: Enable simultaneous sampling. ADC1FLT settings are used for both ADCs (valid for ADuCM360 only). 1: Independent ADC sampling. (Valid for ADuCM360 only). Reserved for ADuCM361. Boost the VBIAS current source ability by 30 times. Note that this increases the current consumption. 0: Disable the boost current. 1: Enable the boost current. Enable the VBIAS generator, and send VBIAS to a selected AIN pin. 000: Disable. 001: Reserved. 010: Reserved. 011: Reserved. 100: Send to AIN7. 101: Reserved. 110: Send to AIN11. 111: Disable. GND_SW. 0: Analog ground switch is disconnected from the external pin. 1: Connect the external GND_SW pin to an internal analog ground reference point. This bit can be used to connect and disconnect external circuits and components to ground under program control and, thereby, minimize dc current consumption when the external circuit or component is not being used. 20 kΩ resistor in series with GND_SW. 0: Disable a 20 kΩ resistor in series with the ground switch. 1: Enable a 20 kΩ resistor in series with the ground switch. Enable external buffers. 00: Both external reference buffers are powered down and bypassed. 01: External buffers are enabled. The VREF+ and VREF− inputs are selected as buffer inputs. 10: External buffers are enabled. The VREF+ and EXTREF2IN+ inputs are selected as buffer inputs. 11: External buffer on VREF+ is enabled. External buffer on VREF− is powered down and bypassed. Rev. D | Page 40 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Filter Configuration Registers Address: 0x40030020, Reset: 0x007D, Name: ADC0FLT (ADuCM360 Only) Address: 0x400300A0, Reset: 0x007D, Name: ADC1FLT (ADuCM360 and ADuCM361) Table 30. Bit Descriptions for ADCxFLT Bits 15 Name CHOP 14 RAVG2 13 12 Reserved SINC4EN 11:8 AF 7 NOTCH2 6:0 SF Description Enables system chopping. Enabling system chopping results in very low offset errors and drift. 0: Disable system chopping. 1: Enable system chopping. Enables a running average-by-2. Enabling the average-by-2 function reduces the ADC noise. This feature is automatically active when chopping is enabled and is an optional feature when chopping is inactive. It does not reduce the output rate with chop-off, but does increase the settling-time by one conversion. 0: Disable running average-by-2 function. 1: Enable running average-by-2 function. Enable the sinc4 filter instead of the sinc3 filter. Note that when the output rate is less than 488 Hz, this bit must not be set. When the output rate is greater than or equal to 488 Hz, setting this bit enables the sinc4 filter. The sinc4 filter is recommended when the output rate is greater than 488 Hz; in such cases, the sinc3 filter is insufficient to filter out the quantization noise. 0: Disable sinc4 filter and enable sinc3 filter. 1: Enable sinc4 filter and disable sinc3 filter. Averaging factor, #Avgs = AF + 1, where AF implements a programmable first-order sinc postfilter. This additional averaging factor (AF) further reduces the ADC output rate. There are restrictions on the maximum allowable values of SF and AF (see Table 16 and Table 17). Sinc3/Sinc 4 modify. 0: Disable filter notch. 1: Set by user to modify the standard sinc3/sinc 4 frequency response to increase the filter stopband rejection by approximately 5 dB. This is achieved by inserting a second notch (NOTCH2) at fNOTCH2 = 1.2 × fNOTCH, where fNOTCH is the location of the first notch in the response. The second notch is generally at (6/5) × the main sinc notch to generate notches at both 50 Hz and 60 Hz. Sinc3/Sinc4 filter decimation factor. SF controls the oversampling rate/decimation factor of the sinc3/sinc4 filter. The default value for these bits is 0x7D. The conversion rate from the sinc3/sinc4 filter is given in Table 16, and the allowable combination of SF and AF are available in Table 17. Rev. D | Page 41 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 0 –10 –20 REJECTION (dB) –30 –40 –50 –60 –70 –80 0 10 20 30 40 50 60 70 80 90 ADC OUTPUT RATE (Hz) 10464-013 –90 –100 Figure 14. Digital Filter Frequency Response: Notch 2 Filter On 0 –10 –20 –40 –50 –60 –70 –80 –90 –100 0 10 20 30 40 50 60 70 80 90 ADC OUTPUT RATE (Hz) Figure 15. Digital Filter Frequency Response: Notch 2 Filter Off Rev. D | Page 42 of 176 10464-014 REJECTION (dB) –30 UG-367 ADuCM360/ADuCM361 Hardware User Guide Mode Control Register A write to ADCxMDE resets the corresponding ADC, including the RDY bits and other ADCxSTA flags. Depending on the clock used by the ADC, there may be a delay between when the register is written and when the setting takes effect for the ADC logic. Therefore, the more reliable method to reset the RDY bit is to read ADCxDAT. After each calibration, the ADC returns to idle mode, with the RDY and CAL bits in ADCxSTA set. The user can write to the offset and gain registers only when the ADC is in idle or power-down mode or when ADCEN = 0 (ADCxCON[19]). However, a software delay is required between writing to ADCMDE and writing to the offset or gain register. Address: 0x40030024, Reset: 0x0003, Name: ADC0MDE (ADuCM360 Only) Address: 0x400300A4, Reset: 0x0003, Name: ADC1MDE (ADuCM360 and ADuCM361) Table 31. Bit Descriptions for ADCxMDE Bits 15:8 7:4 Name Reserved ADCxPGA 3 ADCMOD2 2:0 ADCMD Description PGA gain select bit. 0000 PGA gain = 1. 0001 PGA gain = 2. 0010 PGA gain = 4. 0011 PGA gain = 8. 0100 PGA gain = 16. 0101 PGA gain = 32. 0110 PGA gain = 64. 0111 PGA gain = 128. 1000 to 1111 = reserved. Modulator gain of 2. This bit amplifies the output of the PGA by 2 for better resolution. 0: modulator gain of 2 is disabled. 1: modulator gain of 2 is enabled. ADC mode bits. Setting Function 000 ADC power-down mode. The ADC circuitry is powered off. This powers down the ADC and PGA. Be sure to allow a 7 µs software delay before powering down the processor. 001 Continuous convert mode. The enabled ADC(s) continuously produce conversions at FADC. RDY must be cleared to enable new data to be written into ADCxDAT. 010 Single convert mode. This performs a single-shot conversion on the enabled ADC(s). The ADC enters idle mode after RDY is set. 011 Idle mode. The ADC is powered up but held in reset. Entered after calibration. 100 Internal zero-scale calibration. Performed with an internally generated 0 V. The input of the ADC is a short to the negative pin of the selected channel. The result is written to the ADCxOF register of each enabled ADC. This can be used when chopping is off to calibrate the ADC offset. Note that the part must be in idle mode before entering any calibration mode. 101 Internal full-scale calibration. Performed with an internal/external VREF. Gain = 1. Refer to the ADC Calibration Mode section for more details. Note that the part must be in idle mode before entering any calibration mode. 110 System zero-scale calibration. Performed on the selected channel; the channel should be shorted externally. Note that the part must be in idle mode before entering any calibration mode. 111 System full-scale calibration. User to add correct FS voltage to input pins. After each calibration, the ADC returns to idle mode, with the RDY and CAL bits in ADCxSTA set. Note that the part must be in idle mode before entering any calibration mode. Rev. D | Page 43 of 176 ADuCM360/ADuCM361 Hardware User Guide FAST OVERRANGE UG-367 INTERRUPT (ADCxOVR) (READABLE) 16 ADC fADC ADCxACC ACCUMULATOR 32 >= CLEAR (READABLE) >= ADCxRCR (DEFAULT = 1) ADCxATH ADC VALUE ADCxRCV COUNTER fADC INTERRUPT (ADCxATHEX) INTERRUPT (ADCxRDY) >= fADC ADCxTH ADCxTHV UP/DOWN OPTION: UP/RESET >= INTERRUPT (ADCxTHEX) ADCxTHC 10464-015 fADC Figure 16. ADC Accumulator/Comparator/Counter Functional Diagram Note that the result counter does not directly cause an interrupt; instead, this counter masks ADCxRDY interrupts. Counter Registers: ADCxRCR and ADCxRCV Address: 0x40030028, Reset: 0x0001, Name: ADC0RCR (ADuCM360 Only) Address: 0x400300A8, Reset: 0x0001, Name: ADC1RCR (ADuCM360 and ADuCM361) ADCxRCR sets the number of conversions required before an ADC interrupt is generated. This feature is enabled in ADCxPRO. Table 32. Bit Descriptions for ADCxRCR Bits 15:0 Name VALUE Description ADC counter register. The ADCxRDY interrupt is only asserted after the number of ADC samples specified in this register are completed. By default, the value of this register is 1, meaning that an interrupt is generated for every sample. Only valid if ADCxPRO[0] is set to 1. Address: 0x4003002C, Reset: 0x0000, Name: ADC0RCV (ADuCM360 Only) Address: 0x400300AC, Reset: 0x0000, Name: ADC1RCV (ADuCM360 and ADuCM361) ADCxRCV holds the current number of ADC conversion results. The value of the counter is used to mask ADC interrupts, which results in lower frequency interrupts to the ADuCM360/ADuCM361. This value is also important where a number of samples must be accumulated in the ADCxACC. The number of samples accumulated must be read from this MMR to calculate the average result. Table 33. Bit Descriptions for ADCxRCV Bits 15:0 Name VALUE Description ADC counter value register. This read only register indicates the number of ADC conversions completed since the last interrupt. Postprocessing Register: ADCxTH, ADCxTHC, ADCxTHV, ADCxACC, ADCxACC, ADCxATH Address: 0x40030030, Reset: 0x0000, Name: ADC0TH (ADuCM360 Only) Address: 0x400300B0, Reset: 0x0000, Name: ADC1TH (ADuCM360 and ADuCM361) ADCxTH controls the comparator on the ADC output. The MMR holds the threshold value against which the absolute value of the ADC conversion result is compared. The comparison is performed at FADC, allowing the ADuCM360/ADuCM361 to be interrupted during a high input event, even if the ADC RDY interrupts are masked using the ADCxRC counters. For twos complement coding, the MSB of this register is ignored because an absolute value comparison is performed (ADCxTH[14:0]). Note that 0x8000 is mapped to 0x7FFF. For unipolar coding, a 16-bit comparison is performed (ADCxTH[15:0]). Rev. D | Page 44 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Table 34. Bit Descriptions for ADCxTH Bits 15:0 Name VALUE Description ADC comparator threshold value. In bipolar mode, Bits[14:0] are compared to ADCxDAT[27:13]. Bit 15 is the sign bit. In unipolar mode, Bits[15:0] are compared to ADCxDAT[27:12]. Bit 15 is the sign bit. Address: 0x40030034, Reset: 0x01, Name: ADC0THC (ADuCM360 Only) Address: 0x400300B4, Reset: 0x01, Name: ADC1THC (ADuCM360 and ADuCM361) ADCxTHC determines how many cumulative conversion result readings above the threshold value (ADCxTH) must occur before the ADC comparator threshold bit is set in ADCxSTA, with ADCxSTA[2] generating an interrupt. Values below the threshold decrement or reset the count to 0. Table 35. Bit Descriptions for ADC1THC Bits 7:0 Name VALUE Description ADC comparator count setting, which is only valid if ADCxPRO[3:2] = 10 or 11. An ADCxTH interrupt is asserted if the comparator threshold is exceeded for the number of ADC samples selected in this register. For example, if ADC0PRO[3:2] = 10 and ADC0THC = 30, the ADC0DAT register must be higher than the threshold stored in ADC0TH for 30 consecutive samples. Address: 0x40030038, Reset: 0x00, Name: ADC0THV (ADuCM360 Only) Address: 0x400300B8, Reset: 0x00, Name: ADC1THV (ADuCM360 and ADuCM361) ADC0THV increments every time the absolute value of an ADC conversion result |Result| ≥ ADCxTH. This register is decremented or reset to 0 every time the absolute value of an ADC conversion result |Result| < ADC0TH. The configuration of this function is enabled via the ADC comparator bits in the ADCxPRO[3:2] MMR. Table 36. Bit Descriptions for ADCxTHV Bits 7:0 Name VALUE Description ADC comparator count setting, which is only valid if ADCxPRO[3:2] = 10 or 11. This read only register returns the number of ADC0DAT values that have exceeded the threshold set in ADCxTH. The bits are reset to 0 when ADCxTHC is reset to 0. Address: 0x4003003C, Reset: 0x00000000, Name: ADC0ACC (ADuCM360 Only) Address: 0x400300BC, Reset: 0x00000000, Name: ADC1ACC (ADuCM360 and ADuCM361) ADCxACC returns the status of the accumulator. The ADCxACC register updates one or two ADC clocks earlier than ADCxDAT. There is no warning if the accumulator overflows. The ADCxRCV counter can be used to reset the ADCxACC register after 65,535 samples, which is the maximum number of samples possible without the risk of an overflow. The accumulator is a signed, twos complement/unipolar register. There is a mode available that clamps the result to a minimum value of 0; alternatively, the accumulator can be configured to add negative values. The accumulator is reset by disabling the accumulator in ADCxPRO or by reconfiguring the ADC. Note that the ADCxDAT value is shifted to the right by 12 bits for all gain settings. Table 37. Bit Descriptions for ADCxACC Bits 31:0 Name VALUE Description ADC accumulator. ADCxPRO[5:4] enables the accumulator mode. Address: 0x40030040, Reset: 0x00000000, Name: ADC0ATH (ADuCM360 Only) Address: 0x400300C0, Reset: 0x00000000, Name: ADC1ATH (ADuCM360 and ADuCM361) ADCxATH controls the accumulator comparator on the ADC output. The MMR holds the threshold value against which the absolute value of the accumulated ADC conversion result is compared. For twos complement coding, the MSB of this register is ignored because an absolute value comparison is performed (ADCxTH[14:0]). For unipolar coding, a 16-bit comparison is performed (ADCxTH[15:0]). Rev. D | Page 45 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Table 38. Bit Descriptions for ADCxATH Bits 31:0 Name VALUE Description ADC accumulator threshold value. The value in the ADCxACC register is compared with the value stored in this register. If ADCxACC > ADCxATH and ADCxPRO[5:4] = 11, the ADCxATH interrupt source is asserted. Postprocessing Control Registers Address: 0x40030044, Reset: 0x00, Name: ADC0PRO (ADuCM360 Only) Address: 0x400300C4, Reset: 0x00, Name: ADC1PRO (ADuCM360 and ADuCM361) A write to ADCxPRO does not reset the corresponding ADC. If the overrange or comparator interrupts are set, they are cleared by clearing interrupt mask, disabling the comparator (in the case of the accumulator this clears ACC), or reconfiguring the ADC. Table 39. Bit Descriptions for ADCxPRO Bits 7:6 5:4 Name Reserved ADCxACCEN 3:2 ADCxCMPEN 1 0 ADCxOREN ADCxRCEN Description ADC accumulator enable. Setting Function 00 Accumulator disabled. 01 Accumulator enabled. A negative ADC result decrements the accumulator with a lowest limit of 0. 10 Accumulator enabled. A negative ADC result decrements the accumulator with no lower limit. 11 Accumulator and comparator enabled. An interrupt is generated if the value in ADCxACC exceeds ADCxATH. To enable this interrupt, ADCxMSKI[3] must be set to 1. When this interrupt occurs, ADCxSTA[3] is set to 1, indicating that an ADC accumulator interrupt has occurred. ADC comparator enable. To enable the ADC comparator interrupt, ADCxMSKI[2] must be set to 1. When this interrupt occurs, ADCxSTA[2] is set to 1, indicating that an ADC comparator interrupt has occurred. Setting Function 00 Comparator disabled. 01 Comparator enabled. Interrupt if ADCxDAT > ADCxTH. 10 Comparator with counter enabled. Interrupt if ADCxDAT > ADCxTH for the number of samples specified in ADCxTHC. A sample result of ADCxDAT < ADCxTH resets the counter to 0. 11 Comparator with counter enabled. Interrupt if ADCxDAT > ADCxTH for the number of samples specified in ADCxTHC. A sample result of ADCxDAT < ADCxTH decrements the counter with a lowest limit of 0. ADC overrange enable. ADC result counter enable. Data Registers Address: 0x40030048, Reset: 0x00000000, Name: ADC0DAT (ADuCM360 Only) Table 40. Bit Descriptions for ADC0DAT Bits 31:0 Name VALUE Description ADC0 data output register. See the ADC Data Register section for more details. Address: 0x400300C8, Reset: 0x00000000 Name: ADC1DAT, (ADuCM360 and ADuCM361) Table 41. Bit Descriptions for ADC1DAT Bits 31:0 Name VALUE Description ADC1 data output register. See the ADC Data Register section for more details. Rev. D | Page 46 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Step Detection MMRs Step Detection Control Register Address: 0x400300E0, Reset: 0x0000, Name: DETCON Control register for reference detection and the step detection filter. Table 42. Bit Descriptions for DETCON Bits 15:9 8 Name Reserved REFDET 7 SINC2 6:3 2 Reserved ADCSEL 1:0 RATE Description Reserved. Always set to 0. Enable external reference detection circuit. 0: Disable external reference detection circuit. 1: Enable external reference detection circuit. Enable sinc2 filter. 0: Disable sinc2 filter. 1: Enable sinc2 filter. The latest sinc2 data is compared with three previous outputs. If the difference exceeds the predefined threshold, the flag (DETSTA[1]) is generated. Reserved. Always set to 0. Select ADC for the ADuCM360. This bit allows the user to choose the step detection filter that is enabled for ADC0 or ADC1. For the ADuCM361, this bit is reserved and must be set to 1. 0: The sinc2 filter is enabled for ADC0 (valid for ADuCM360 only). 1: The sinc2 filter is enabled for ADC1 (valid for ADuCM360 only). Control the time interval of the sinc2 filter. 00: The sinc2 filter outputs every 2 ms. 01: The sinc2 filter outputs every 4 ms. 10: The sinc2 filter outputs every 6 ms. 11: The sinc2 filter outputs every 8 ms. Step Detection Status Register Address: 0x400300E4, Reset: 0x00, Name: DETSTA Table 43. Bit Descriptions for DETSTA Bits 7:5 4 Name Reserved REFSTA 3 DATOF 2 STEPERR 1 STEPFLAG 0 STEPDATRDY Description Set to 1 to indicate an external reference lower than 0.4 V or an open circuit. Cleared to 0 by writing 1 to DETSTA[3]. Cleared by default. Data overflow status bit. Set to 1 to indicate STEPDAT has been written to again before previous value was read. Cleared to 0 when user reads STEPDAT on time. Set to 1 to indicate that the sinc2 filter conversion has been clamped to +FS/−FS due to such events as overrange or underrange. Cleared to 0. Set to 1 to indicate that a step change greater than the threshold has been detected. Cleared to 0 by reading STEPDAT. Set to 1 if a step change greater than threshold is detected; a coarse data in STEPDAT is then offered, which is the output of the step detection filter. STEPDATRDY indicates STEPDAT is available. STEPDAT is offered every 2 ms/4 ms/6 ms/8 ms and is configured by DETCON[1:0]. Rev. D | Page 47 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Step Detection Filter Register Address: 0x400300E8, Reset: 0x0000, Name: STEPTH Table 44. Bit Descriptions for STEPTH Bits 15:10 9:0 Name Reserved VALUE Description 10-bit threshold register for step detection filter; Threshold = (Value + 1)/2048 × VREF 0000000000 = (0 + 1)/2048 × VREF ≈ 0.05% × VREF 0000000001 = (1 + 1)/2048 × VREF ≈ 0.1% × VREF ... 0000000011 = (3 + 1)/2048 × VREF ≈ 0.2% × VREF ... 1111111111 = (1023 + 1)/2048 × VREF ≈ 50% × VREF Step Detection Data Register Address: 0x400300EC, Reset: 0x00000000, Name: STEPDAT Table 45. Bit Descriptions for STEPDAT Bits 31:0 Name VALUE Description 16-bit conversion result for ADC0 or ADC1, configured by DETCON[2]. ADC DMA Mode Configuration Register Address: 0x400300F8, Reset: 0x0000, Name: ADCDMACON When using the DMA controller to write to the ADC MMR registers, ensure that the write to the ADC0 registers is complete before enabling the write to the ADC1 registers. Enabling ADC0 and ADC1 value DMA reads at the same time is fully supported. Table 46. Bit Descriptions for ADCDMACON Bits 15:5 4 Name Reserved SINC2DMAEN 3 ADC1DMAEN 2 ADC1CTRL 1 ADC0DMAEN 0 ADC0CTRL Description DMA enable for sinc2 channel. 0: Disable sinc2 DMA accesses. 1: Enable sinc2 DMA accesses. DMA enable for ADC1 registers—ADC1CON, ADC1FLT, ADC1CP, ADC1CN, ADC1GN, and ADC1OF. For this bit to take effect, ADC1DMAEN must be set to 1. 0: The ADC1 registers are written from user memory with DMA. 1: ADC1DAT is read to user memory with DMA. DMA enable for ADC1 channel. 0: Disable ADC1 DMA accesses. 1: Enable ADC1 DMA accesses. DMA enable for ADC0 registers—ADC0CON, ADC0FLT, ADC0CP, ADC0CN, ADC0GN, and ADC0OF. For this bit to take effect, ADC0DMAEN must be set to 1. 0: The ADC0 registers are written from user memory with DMA (valid for ADuCM360 only). 1: ADC0DAT will be read to user memory with DMA (valid for ADuCM360 only). DMA enable for ADC0 channel. 0: Disable ADC0 DMA accesses (valid for ADuCM360 only). 1: Enable ADC0 DMA accesses (valid for ADuCM360 only). Rev. D | Page 48 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Internal Reference Control Register Address: 0x40008840, Reset: 0x0000, Name: REFCTRL Table 47. Bit Descriptions for REFCTRL Bits 15:1 0 Name Reserved REFPD Description Power-down reference. This bit must be cleared for the ADCs to work, regardless of if an external reference is selected. 0: Enable internal reference block. 1: Power down internal reference block. Excitation Current Sources Control Register Address: 0x40008850, Reset: 0xC0, Name: IEXCCON Table 48. Bit Descriptions for IEXCCON Bits 7 Name PD 6 REFSEL 5:3 IPSEL1 2:0 IPSEL0 Description IEXC power-down. 0: Enable excitation current source block. 1: Power down excitation current source block. IREF source. 0: Select external current reference resistor source on IREF pin. 1: Select internal current reference resistor source. Select IEXC1 output pin. Setting IEXCCON[5] to 1 enables Excitation Current Source 1. When IEXCCON[5] is cleared to 0, Excitation Current Source 1 is disabled. 000: Reserved. … 011: Reserved. 100: IEXC1 output on AIN4. 101: IEXC1 output on AIN5. 110: IEXC1 output on AIN6. 111: IEXC1 output on AIN7. Select IEXC0 output pin. Setting IEXCCON[2] to 1 enables Excitation Current Source 0. When IEXCCON[2] is cleared to 0, Excitation Current Source 0 is disabled. 000: Reserved. … 011: Reserved. 100: IEXC0 output on AIN4. 101: IEXC0 output on AIN5. 110: IEXC0 output on AIN6. 111: IEXC0 output on AIN7. Rev. D | Page 49 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Excitation Current Data Register Address: 0x40008854, Reset: 0x06, Name: IEXCDAT Table 49. Bit Descriptions for IEXCDAT Bits 7:6 5:1 0 Name Reserved IDAT IDAT0 Description Output current. These five bits set the output current on each pin. See Table 50 for further details. 10 μA enable. 0: Disable 10 μA output current. 1: Enable 10 μA output current. Table 50. Output Current Values Based on IEXCDAT[5:0] IEXCDAT[5:3] 000 001 010 011 100 101 110 111 IEXCDAT[2:1] = 11 0 µA 200 µA 400 µA 600 µA 800 µA 1000 µA 1000 µA 1000 µA IEXCDAT[2:1] = 10 0 µA 150 µA 300 µA 450 µA 600 µA 750 µA 750 µA 750 µA IEXCDAT[2:1] = 01 0 µA 100 µA 200 µA 300 µA 400 µA 500 µA 500 µA 500 µA Rev. D | Page 50 of 176 IEXCDAT[2:1] = 00 0 µA 50 µA 100 µA 150 µA 200 µA 250 µA 250 µA 250 µA IEXCDAT[0] = 1 Add 10 µA to values on left if this bit is set to 1. UG-367 ADuCM360/ADuCM361 Hardware User Guide DAC DAC FEATURES • • 12-bit voltage output DAC Two selectable ranges: • 0 V to VREF (internal band gap 1.2 V reference) • 0 V to AVDD_REG (1.8 V) DAC OVERVIEW The ADuCM360/ADuCM361 incorporates a voltage output DAC. In normal mode, the DAC resolution is 12-bits. In interpolation mode, the DAC resolution is 16 bits with 14 effective bits. The DAC has a rail-to-rail voltage output buffer capable of driving a 5 kΩ||100 pF load. The DAC can also be configured for an NPN-transistor driver mode. In this mode of operation, the DAC output buffer can be configured to control a 2-wire, 4 mA to 20 mA loop interface with minimal external components. When the DAC is in NPN transistor driver mode, DAC interpolation is not supported. The DAC has two selectable ranges: • • 0 V to VREF (internal band gap 1.2 V reference) 0 V to AVDD_REG (1.8 V) Note that CLKDIS[7] must be cleared to 0 to enable the system clock to the DAC block. This bit must be cleared to 0 to enable the DAC. DAC OPERATION The DAC is configurable through a control register and a data register. The on-chip DAC architecture consists of a resistor string DAC followed by an output buffer amplifier. The reference source for the DAC is user selectable in software: • • 0-to-VREF mode: The DAC output transfer function spans from 0 V to the internal 1.2 V reference, VREF. 0-to-AVDD_REG mode: The DAC output transfer function spans from 0 V to 1.8 V. The DAC can be configured in three user modes: normal mode, DAC interpolation mode, and NPN transistor driver mode. Normal DAC Mode, DACCON[3] = 0 In this mode of operation, the DAC is configured as a 12-bit voltage output DAC. By default, the DAC buffer is enabled, but the output buffer can be disabled. If the DAC output buffer is disabled, the DAC is capable of driving a capacitive load of only 10 pF. The DAC buffer is disabled by setting DACCON[6] (DACBUFBYPASS). The DAC output buffer amplifier features a true rail-to-rail output stage implementation. This means that when unloaded, each output is typically capable of swinging to within less than 5 mV of AGND and AVDD_REG. The linearity specification of the DAC when driving a 5 kΩ resistive load to ground is guaranteed through the full transfer function except for Code 0 to Code 100 and, in 0-to- AVDD_REG mode only, Code 3995 to Code 4095. Linearity degradation near ground and AVDD_REG is caused by saturation of the output amplifier, and a general representation of its effects (neglecting offset and gain error) is illustrated in Figure 17. The dotted line in Figure 17 indicates the ideal transfer function, and the solid line represents what the transfer function may look like with endpoint nonlinearities due to saturation of the output amplifier. Note that Figure 17 represents a transfer function in 0-toAVDD_REG mode only. In 0-to-VREF mode, the lower nonlinearity is similar. However, the upper portion of the transfer function follows the ideal line all the way to the end showing no signs of endpoint linearity errors. Rev. D | Page 51 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 AVDD_REG AVDD_REG – 100mV 0x00000000 0x0FFF0000 10464-016 100mV Figure 17. DAC Endpoint Nonlinearities Due to Amplifier Saturation The endpoint nonlinearities conceptually illustrated in Figure 17 worsen as a function of output loading. Most of the ADuCM360/ADuCM361 data sheet specifications in normal mode assume a 5 kΩ resistive load to ground at the DAC output. As the output is forced to source or sink more current, the nonlinear regions at the top or bottom, respectively, become larger. With larger current demands, this can significantly limit the output voltage swing. DAC Interpolation Mode, DACCON[3] = 1 In interpolation mode, a higher DAC output resolution of 16 bits, with approximately 14 effective bits, is achieved with a longer update rate than normal mode. The update rate is controlled by the interpolation clock rate and is set in DACCON[2]. In this mode, an external RC filter is required to create a constant voltage. Due to the external filter and slower update rate, the bandwidth of the DAC in this mode is lower. DAC NPN Transistor Driver Mode, DACCON[8] = 1 In DAC NPN transistor driver mode or 4 mA to 20 mA driver mode, the DAC output is used to control the base of an NPN transistor in a 2-wire, 4 mA to 20 mA loop network. The DAC output buffer acts as a normal op amp. This is shown in Figure 18. ADuCM360/ADuCM361 1.2V VREF INT_REF AIN8 LOOP+ R1 100kΩ AIN9/DACBUFF+ DAC DAC STRING VIN AGND R2 100kΩ RL 47Ω VR LOOP LOOP– 10464-017 AGND Figure 18. DAC NPN Mode: Typical Operation The 4 mA to 20 mA feedback circuit is controlled by the ADuCM360/ADuCM361 12-bit DAC output. The DAC output controls the voltage across the 47 Ω resistor marked as RLoop in the circuit. By controlling the voltage across this resistor, the feedback current to the 4 mA to 20 mA host can be accurately set. Note the top of RLoop connects to the ADuCM360/ADuCM361 ground. The bottom of RLoop connects to the Loop ground. Because of this, the ADuCM360/ADuCM361 DAC output buffer and regulator current, plus the current set by the DAC output flows across RLoop. Rev. D | Page 52 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide When DACCON[8] = 1, VREF is present on AIN8. The on-chip 1.2 V voltage reference is connected externally to R1. The voltage between R1 and R2 (VR12) is connected to the noninverting input of the DAC output buffer. VR12 sets the output voltage range of the op amp. If R1 = R2, this range is 0 mV to 600 mV. The voltage at the junction of R1 and R2 can be expressed as Vr12 = (VRLoop + Int_Vref) × R2/(R1 + R2) – VRLoop With the loop settled, Vin = Vr12. Because R1 = R2, we get Vin = (VRLoop + Int_Vref)/2 – VRLoop = Int_Vref/2 – VRLoop/2 or VRLoop = Int_Vref – 2Vin Full-scale current flows when Vin = 0 (DACDAT = 0), at which point VRLoop = Int_Vref/2. Therefore, full-scale current is Int_Vref/RLoop, or ~24 mA. When Vin = Int_Vref/2 (DAC = 600 mV), where Int_Vref is the 1.2 V internal reference voltage, no current flows across RLoop. DAC DMA OPERATION DMA Channel 8 is the DAC DMA channel. This is a useful feature if a user wants to configure the DAC as a waveform generator and does not want to interrupt the processor each time the DAC output voltage is updated. Timer 1 must be set up to trigger the DMA write to the DACDAT register. Example Code to Configure the DAC for DMA Operation void DACDMAINIT( void) { pADI_DAC->DACCON = 0x410; triggered // Enable DAC, 0-INT_VREF range, timer 1 Dma_Init(); // Init DMA structures DACDMAWRITE(uxDACDMA, 16); // Setup DMA control registers NVIC_EnableIRQ(DMA_DAC_IRQn); // Enable DMA DAC Interrupt pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x100; // Select DAC channel in DMA controller pADI_TM1->LD = 0x00000088; // the min clock number is 0x17; pADI_TM1->CON = 0x00000018; } void DACDMAWRITE(unsigned long *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here Desc.ctrlCfg.Bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_WORD; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_WORD; // TX Primary Descriptor Rev. D | Page 53 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Desc.srcEndPtr = (unsigned long)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = (unsigned long)&DACDAT; Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_WORD; Desc.ctrlCfg.Bits.dst_inc = INC_NO; *Dma_GetDescriptor(DMA_DAC_REQ_OUT,FALSE) = Desc; } void DMA_DAC_Out_Int_Handler() { NVIC_DisableIRQ(DMA_DAC_IRQn); // Clear Interrupt source } DAC MEMORY MAPPED REGISTERS Table 51. DAC Memory Mapped Registers Address (Base Address: 0x40020000) Offset 0x0000 0x0004 Name DACCON DACDAT Description Control register Data register Access RW R Default 0x0200 0x00000000 DAC Control Register Address: 0x40020000, Reset: 0x200, Name: DACCON Table 52. DACCON Register Bit Description Bit 15:11 10 Name Reserved DMAEN 9 PN 8 NPN 7 6 Reserved BUFBYP 5 CLK 4 CLR 3 MDE 2 RATE 1:0 RNG Description Reserved. 0: Normal DAC mode. 1: DAC DMA mode enabled. 0: Enable the DAC. 1: Power down DAC output (DAC output is tristate). (Default.) 0: Enable the DAC output buffer in normal mode. 1: Enable the DAC output buffer in NPN transistor driver mode. Reserved. 0: Buffer the DAC output. 1: Bypass the output buffer and send the DAC output directly to the output pin. 0: Update the DAC on the negative edge of UCLK. 1: Update the DAC on the negative edge of Timer1. This mode is ideally suited for waveform generation where the next value in the waveform is written to DACDAT at regular intervals of Timer1. Writing to this bit has an immediate effect on the DAC output. 0: Clear the DAC output and set DACDAT to 0. 1: Normal DAC operation. 0: Enable the DAC in normal 12-bit mode. 1: Enable the DAC in 16-bit interpolation mode. This bit is used with interpolation mode. 0: Configure the interpolation clock as UCLK/32. 1: Configure the interpolation clock as UCLK/16. DAC range. 00: 0 V to VREF (1.2 V) (internal reference source). 01: Reserved. 10: Reserved. 11: 0 V to AVDD_REG (1.8 V). Rev. D | Page 54 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide DAC DATA Register Address: 0x40020004, Reset: 0x00000000, Name: DACDAT Table 53. DACDAT Register Bit Description Bit 31:28 27:16 15:12 11:0 Name Reserved DAT12 DAT16 Reserved Description 12-bit data for DAC Extra four bits used in interpolation mode Rev. D | Page 55 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 SYSTEM EXCEPTIONS AND PERIPHERAL INTERRUPTS CORTEX-M3 AND FAULT MANAGEMENT The ADuCM360/ADuCM361 integrates a Cortex-M3 processor, which supports a number of system exceptions and interrupts generated by peripherals. Table 54 lists the Cortex-M3 processor system exceptions. Table 54. System Exceptions Number 1 2 Type Reset NMI Priority −3 (highest) −2 3 Hard fault −1 4 5 Memory management fault Bus fault Programmable Programmable 6 Usage fault Programmable 7 to 10 11 Reserved SVCall N/A Programmable 12 Debug monitor Programmable 13 14 Reserved PendSV N/A Programmable 15 SYSTICK Programmable Description Any reset. Nonmaskable interrupt connected to power supply monitor of ADuCM360/ADuCM361. All fault conditions if the corresponding fault handler is not enabled. Memory management fault; access to illegal locations. Prefetch fault, memory access fault, data abort, and other address/memory related faults. Same as undefined instruction executed or illegal state transition attempt. System service call with SVC instruction. Used for system function calls. Debug monitor (breakpoint, watchpoint, or external debug requests). Pendable request for system service. Used for queuing system calls until other tasks and interrupts are serviced. System tick timer. The peripheral interrupts are controlled by the NVIC and are listed in Table 55. All interrupt sources can wake the part up from Mode 1, Mode 2, or Mode 3. Only a limited number of interrupts can wake up the processor from the low power modes (Mode 4 and Mode 5), as shown in Table 55. When the device is woken up from Mode 4 or Mode 5, it returns to Mode 0. If the processor enters any power mode from Mode 1 to Mode 5 while the processor is in an interrupt handler, only an interrupt source with a higher priority than the current interrupt can wake the part up. Two steps are normally required to configure an interrupt • • Configuring a peripheral to generate an interrupt request to the NVIC. Configuring the NVIC for that peripheral request. Table 55. Interrupt Vector Table Position Number 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Vector Wake-up timer External Interrupt 0 External Interrupt 1 External Interrupt 2 External Interrupt 3 External Interrupt 4 External Interrupt 5 External Interrupt 6 External Interrupt 7 Watchdog timer Reserved Timer0 Timer1 ADC0 ADC1 Wake-Up Processor from Mode 1 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes N/A Yes Yes Yes Yes Rev. D | Page 56 of 176 Wake-Up Processor from Mode 2 or Mode 3 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes N/A No No No No Wake-Up Processor from Mode 4 or Mode 5 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes N/A No No No No UG-367 Position Number 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ADuCM360/ADuCM361 Hardware User Guide Vector sinc2 Flash controller UART SPI0 SPI1 I2C slave I2C master DMA error DMA SPI_1 Tx IRQ DMA SPI_1 Rx IRQ DMA UART Tx IRQ DMA UART Rx IRQ DMA I2C slave Tx DMA I2C slave Rx DMA I2C master Tx DMA I2C master Rx DMA DAC output DMA ADC0 DMA ADC1 DMA sinc2 output/step detected PWM_TRIP PWM0 interrupt PWM1 interrupt PWM2 interrupt Wake-Up Processor from Mode 1 Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Wake-Up Processor from Mode 2 or Mode 3 No No No No No No No No No No No No No No No No No No No No Wake-Up Processor from Mode 4 or Mode 5 No No No No No No No No No No No No No No No No No No No No Yes Yes Yes Yes No No No No No No No No Internally to the Cortex-M3 processor, the highest user-programmable priority (0) is treated as fourth priority—after a reset, an NMI, and a hard fault. Note that 0 is the default priority for all the programmable priorities. If the same priority level is assigned to two or more interrupts, their hardware priority (the lower the position number) determines the order in which the processor activates them. For example, if both SPI0 and SPI1 are Priority Level 1, then SPI0 has higher priority. To enable an interrupt for any peripheral listed from 0 to 31 in Table 55, set the appropriate bit in the ISER0 register—ISER0 is a 32-bit register and each bit corresponds to the first 32 entries of Table 55. For example, to enable ADC0 interrupt source in the NVIC, set ISER0[13] = 1. Similarly, to disable ADC0 interrupt, set ICER0[13] = 1. To enable an interrupt for any peripheral listed from 32 to 38 in Table 55, set the appropriate bit in the ISER1 register—ISER1 is a 32-bit register and ISER1 Bit 0 to Bit 6 correspond to the entries 32 to 38 of Table 55. For example, to enable the PWM0 interrupt source in the NVIC, set ISER1[4] = 1. Similarly, to disable the PWM0 interrupt, set ICER1[4] = 1. Table 56 lists the registers to enable and disable relevant interrupts and set the priority levels. Rev. D | Page 57 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Table 56. NVIC Registers Address 0xE000E004 Analog Devices Header File Name ICTR 0xE000E010 0xE000E014 0xE000E018 0xE000E01C 0xE000E100 STCSR STRVR STCVR STCR ISER0 0xE000E104 ISER1 0xE000E180 ICER0 0xE000E184 ICER1 0xE000E200 ISPR0 0xE000E204 ISPR1 0xE000E280 ICPR0 0xE000E284 ICPR1 0xE000E300 0xE000E304 0xE000E400 0xE000E404 0xE000E408 0xE000E40C 0xE000E410 0xE000E414 0xE000E418 0xE000E41C 0xE000E420 0xE000E424 0xE000ED00 0xE000ED04 0xE000ED08 0xE000ED0C 0xE000ED10 0xE000ED14 0xE000ED18 0xE000ED1C 0xE000ED20 0xE000ED24 0xE000ED28 0xE000ED2C 0xE000ED34 0xE000ED38 0xE000EF00 IABR0 IABR1 IPR0 IPR1 IPR2 IPR3 IPR4 IPR5 IPR6 IPR7 IPR8 IPR9 CPUID ICSR VTOR AIRCR SCR CCR SHPR1 SHPR2 SHPR3 SHCRS CFSR HFSR MMAR BFAR STIR Description Shows the number of interrupt lines that the NVIC supports. SYSTICK control and status register. SYSTICK reload value register. SYSTICK current value register. SYSTICK calibration value register. Set IRQ0 to IRQ31 enable. Each bit corresponds to Interrupt 0 to Interrupt 31 in Table 55. Set IRQ32 to IRQ38 enable. Each bit corresponds to interrupt 32 to Interrupt 38 in Table 55. Clear IRQ0 to IRQ31 by setting appropriate bit. Each bit corresponds to Interrupt 0 to Interrupt 31 in Table 55. Clear IRQ32 to IRQ38 by setting appropriate bit. Each bit corresponds to Interrupt 32 to Interrupt 38 in Table 55. Set IRQ0 to IRQ31 pending. Each bit corresponds to Interrupt 32 to Interrupt 38 in Table 55. Set IRQ32 to IRQ38 pending. Each bit corresponds to Interrupt 32 to Interrupt 38 in Table 55. Clear IRQ0 to IRQ31 pending. Each bit corresponds to Interrupt 32 to Interrupt 38 in Table 55. Clear IRQ32 to IRQ38 pending. Each bit corresponds to Interrupt 32 to Interrupt 38 in Table 55. IRQ0 to IRQ31 active bits. IRQ32 to IRQ38 active bits. IRQ0 to IRQ3 priority. IRQ4 to IRQ7 priority. IRQ8 to IRQ11 priority. IRQ12 to IRQ15 priority. IRQ16 to IRQ19 priority. IRQ20 to IRQ23 priority. IRQ24 to IRQ27 priority. IRQ28 to IRQ31 priority. IRQ32 to IRQ35 priority. IRQ36 to IRQ38 priority. CPUID base register. Interrupt control and status register. Vector table offset register. Application interrupt/reset control register. System control register. Configuration control register. System Handlers Register 1. System Handlers Register 2. System Handlers Register 3. System handler control and state. Configurable fault status. Hard fault status. MemManage fault address register. Bus fault address. Software trigger interrupt register. Rev. D | Page 58 of 176 Access R RW RW RW R RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW R RW RW RW RW RW RW RW RW RW RW RW RW RW W UG-367 ADuCM360/ADuCM361 Hardware User Guide EXTERNAL INTERRUPT CONFIGURATION Eight external interrupts are implemented. These eight external interrupts can be separately configured to detect any combination of the following type of events: • • Edge: rising edge, falling edge, or both rising and falling edges. An interrupt signal (pulse) is sent to the NVIC upon detecting a transition from low to high, high to low, or on either high to low or low to high. Level: high or low. An interrupt signal is generated and remains asserted in the NVIC until the conditions generating the interrupt deassert. The level needs to be maintained for a minimum of one core clock cycle to be detected. The external interrupt detection unit block is in the always on section and allows external interrupt to wake up the device when in hibernate mode. INTERRUPT MEMORY MAPPED REGISTERS The interrupt detection unit consists of MMRs contained in the always on section and are based at Address 0x40002400. Table 57. Interrupt Detection Unit Memory Mapped Registers Address (Base Address: 0x40002400) Offset 0x0020 0x0024 0x0030 0x0034 Name EI0CFG EI1CFG EICLR NMICLR Description External Interrupt Configuration Register 0 External Interrupt Configuration Register 1 External interrupt clear register Nonmaskable interrupt clear Rev. D | Page 59 of 176 Access RW RW RW RW Default 0x0000 0x0000 0x0000 0x0000 ADuCM360/ADuCM361 Hardware User Guide External Interrupt Configuration Register 0 Address: 0x40002420, Reset: 0x0000, Name: EI0CFG Table 58. EI0CFG Register Bit Descriptions Bits 15 Name IRQ3EN 14:12 IRQ3MDE 11 IRQ2EN 10:8 IRQ2MDE 7 IRQ1EN 6:4 IRQ1MDE 3 IRQ0EN 2:0 IRQ0MDE Description External Interrupt 3 enable bit 0: External Interrupt 3 disabled 1: External Interrupt 3 enabled External Interrupt 3 mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) External Interrupt 2 enable bit 0: External Interrupt 2 disabled 1: External Interrupt 2 enabled External Interrupt 2 mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) External Interrupt 1 enable bit 0: External Interrupt 1 disabled 1: External Interrupt 1 enabled External Interrupt 1 mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) External Interrupt 0 enable bit 0: External Interrupt 0 disabled 1: External Interrupt 0 enabled External Interrupt 0 mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) Rev. D | Page 60 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide External Interrupt Configuration Registers 1 Address: 0x40002424, Reset: 0x0000, Name: EI1CFG Table 59. EI1CFG Register Bit Descriptions Bits 15 Name IRQ7EN 14:12 IRQ7MDE 11 IRQ6EN 10:8 IRQ6MDE 7 IRQ5EN 6:4 IRQ5MDE 3 IRQ4EN 2:0 IRQ4MDE Description External Interrupt 7 enable bit 0: External Interrupt 7 disabled 1: External Interrupt 7 enabled External Interrupt 7 mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) External Interrupt 6 enable bit 0: External Interrupt 6 disabled 1: External Interrupt 6 enabled External Interrupt 6 Mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) External Interrupt 5 enable bit 0: External Interrupt 5 disabled 1: External Interrupt 5 enabled External Interrupt 5 mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) External Interrupt 4 enable bit 0: External Interrupt 4 disabled 1: External Interrupt 4 enabled External Interrupt 4 Mode registers 000: Rising edge 001: Falling edge 010: Rising and falling edges 011: High level 100: Low level 101: Falling edge (same as 001) 110: Rising and falling edges (same as 010) 111: High level (same as 011) Rev. D | Page 61 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 External Interrupt Clear Register Address: 0x40002430, Reset: 0x0000, Name: EICLR Table 60. EICLR Register Bit Descriptions Bits 15:8 7 Name Reserved IRQ7 6 IRQ6 5 IRQ5 4 IRQ4 3 IRQ3 2 IRQ2 1 IRQ1 0 IRQ0 Description Reserved. External Interrupt 7 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 6 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 5 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 4 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 3 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 2 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 1 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. External Interrupt 0 clear bit. 1: Clear an internal interrupt flag. Cleared automatically by hardware. Ensure that the register write has fully completed before returning from the interrupt handler. Use the DSB instruction, for example: void Ext_Int4_Handler () { EiClr(EXTINT4); __DSB(); } This ensures that outstanding memory operations complete before new instructions start executing. Rev. D | Page 62 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Nonmaskable Interrupt Clear Register Address: 0x40002434, Reset: 0x0000, Name: NMICLR Table 61. NMICLR Register Bit Descriptions Bits 15:1 0 Name Reserved CLEAR Description Reserved. NMI clear bit. Set by the user to clear the internal flag of the NMI. (The internal flag is not visible to the user.) After an external interrupt has been asserted by the IDU, an interrupt pulse to the Cortex-M3 is generated. Unless this external interrupt is cleared, subsequent interrupts on the same port are ignored by the IDU, and no further pulses are generated. Cleared automatically by hardware. Ensure that the register write has fully completed before returning from the interrupt handler. Use the DSB instruction, for example: void Ext_Int4_Handler () { EiClr(EXTINT4); __DSB(); } Rev. D | Page 63 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 DMA CONTROLLER DMA FEATURES • 12 dedicated DMA channels DMA OVERVIEW Direct memory access (DMA) is used to provide high speed data transfer between peripherals and memory. Data can be moved quickly by DMA without any processor actions. This keeps processor resources free for other operations. The DMA controller has 12 channels in total. The 12 channels used are dedicated to managing DMA requests from specific peripherals. Channels are assigned as shown in Table 62. Note that CLKDIS[8] must be cleared to 0 to enable the system clock to the DMA block, thus enabling any DMA operations. Table 62. DMA Channel Assignment Channel 0 1 2 3 4 5 6 7 8 9 10 11 Peripheral SPI1 Tx SPI1 Rx UART Tx UART Rx I2C slave Tx I2C slave Rx I2C master Tx I2C master Rx DAC DMA output ADC0 ADC1 SINC2 output/step detection The channels are connected to dedicated hardware DMA requests; a software trigger is also supported on each channel. This configuration is done by software. Each DMA channel has a programmable priority level default or high. Within a priority level, arbitration is done using a fixed priority that is determined by the DMA channel number. The DMA controller supports multiple DMA transfer data widths: independent source and destination transfer size (byte, half word, and word). Source/destination addresses must be aligned on the data size. The DMA transfer error interrupt is generated when a bus error condition occurs during a DMA transfer. The DMA controller supports peripheral-to-memory, memory-to-peripheral, and memory-to-memory transfers and access to flash or SRAM, as source and destination. DMA OPERATION The DMA controller performs direct memory transfer by sharing the system bus with the Cortex-M3 processor. The DMA request may stall the processor access to the system bus for some bus cycles when the processor and DMA are targeting the same destination (memory or peripheral). ERROR MANAGEMENT A DMA transfer error can be generated by reading from or writing to a reserved address space. When a DMA transfer error occurs during a DMA read or write access, the faulty channel is automatically disabled. If the DMA error interrupt is enabled in the NVIC, the error also generates an interrupt. INTERRUPTS An interrupt can be produced when a transfer is complete for each DMA channel. Separate interrupt enable bits are available in the NVIC for each of the DMA channels. The DMA controller fetches channel control data structures located in the SRAM memory to perform data transfers. When enabled to use DMA operation, the DMA-capable peripherals request the DMA controller for transfer. At the end of the programmed number of DMA transfers for a channel, the DMA controller generates an interrupt corresponding to that channel. This interrupt indicates the completion of the DMA transfer. Rev. D | Page 64 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA PRIORITY The priority of a channel is determined by its number and priority level. Each channel can have two priority levels: default or high. All channels at high priority level have higher priority than all channels at default priority level. At the same priority level, a channel with a lower channel number has higher priority than a channel with a higher channel number. The DMA channel priority levels can be changed by writing into the appropriate bit in the DMAPRISET register. CHANNEL CONTROL DATA STRUCTURE Every channel has two control data structures associated with it: primary data structure and an alternate data structure. For simple transfer modes, the DMA controller uses either the primary or the alternate data structure. For more complex data transfer modes such as pingpong or scatter-gather, the DMA controller uses both the primary and alternate data structures. Each control data structure (primary or alternate) occupies four 32-bit locations in the memory as shown in Table 63. The entire channel control data structure is shown in Table 64. Table 63. Channel Control Data Structure Offset 0x00 0x04 0x08 0x0C Name SRC_END_PTR DST_END_PTR CHNL_CFG Reserved Description Source end pointer Destination end pointer Control data configuration Reserved Before the controller can perform a DMA transfer, the data structure related to the DMA channel must be programmed at the designated location in system memory, SRAM. • • • The source end pointer memory location contains the end address of the source data. The destination end pointer memory location contains the end address of the destination data. The control data configuration memory location contains the channel configuration control data. The programming determines the source and destination data size, number of transfers, and the number of arbitrations. Table 64. Memory Map of Primary and Alternate DMA Structures Channel Channel 11 … Channel 1 Channel 0 Primary Structures Reserved; set to 0 Control Destination end pointer Source end pointer … Reserved; set to 0 Control Destination end pointer Source end pointer Reserved; set to 0 Control Destination end pointer Source end pointer 0x0BC 0x0B8 0x0B4 0x0B0 … 0x01C 0x018 0x014 0x010 0x00C 0x008 0x004 0x000 Alternate Structures Reserved; set to 0 Control Destination end pointer Source end pointer … Reserved; set to 0 Control Destination end pointer Source end pointer Reserved; set to 0 Control Destination end pointer Source end pointer 0x1BC 0x1B8 0x1B4 0x1B0 … 0x11C 0x118 0x114 0x110 0x10C 0x108 0x104 0x100 The user must define DMA structures in their source code as shown in the examples in the Example Code: Define DMA Structures section. After the structure has been defined, its start address must be assigned to the DMA base address pointer register, DMAPDBPTR. Each register for each DMA channel is then at the offset address, as specified in Table 64, plus the value in the DMAPDBPTR register. Example Code: Define DMA Structures memset(dmaChanDesc,0x0,sizeof(dmaChanDesc)); // Setup the DMA base address pointer register. pADI_DMA->DMAPDBPTR = (unsigned int) &dmaChanDesc; Rev. D | Page 65 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 CONTROL DATA CONFIGURATION For each DMA transfer, the CHNL_CFG memory location provides the control information for the DMA transfer to the controller. Table 65. Control Data Configuration Bits 31:30 Name DST_INC 29:28 DST_SIZE 27:26 SRC_INC 25:24 SRC_SIZE 23:18 17:14 Reserved R_POWER Description Destination address increment. The address increment depends on the source data width as follows: Source Data Width DST_INC Destination Address Increment Byte 00 Byte. 01 Half word. 10 Word. 11 No increment. Address remains set to the value that the DST_END_PTR memory location contains. Half Word 00 Reserved. 01 Half word. 10 Word. 11 No increment. Address remains set to the value that the DST_END_PTR memory location contains. Word 00 Reserved. 01 Reserved. 10 Word. 11 No increment. Address remains set to the value that the DST_END_PTR memory location contains. Size of the destination data. Must always be the same as SRC_SIZE. 00: byte. 01: half word. 10: word. 11: Reserved. Source address increment. The address increment depends on the source data width as follows: Source Data Width DST_INC Source Address Increment Byte 00 Byte. 01 Half word. 10 Word. 11 No increment. Address remains set to the value that the SRC_END_PTR memory location contains. Half Word 00 Reserved. 01 Half word. 10 Word. 11 No increment. Address remains set to the value that the SRC_END_PTR memory location contains. Word 00 Reserved. 01 Reserved. 10 Word. 11 No increment. Address remains set to the value that the SRC_END_PTR memory location contains. Size of the source data. Must always be the same as DST_SIZE. 00: byte. 01: half word. 10: word. 11: Reserved. Undefined. Write as 0. Set these bits to control how many DMA transfers can occur before the controller rearbitrates. Must be set to 0000 for all DMA transfers involving peripherals. Note that the operation of the DMA is indeterminate if a value other than 0000 is programmed in this location for DMA transfers involving peripherals. Rev. D | Page 66 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Bits 13:4 Name N_MINUS_1 3 2:0 Reserved CYCLE_CTRL Description The number of configured transfers minus 1 for that channel. The 10-bit value indicates the number of DMA transfers (not the total number of bytes) minus one. The possible values are 0x000: 1 DMA transfer. 0x001: 2 DMA transfers. 0x002: 3 DMA transfers. … 0x3FF: 1024 DMA transfers. Undefined. Write as 0. The transfer types of the DMA cycle. 000: Stop (invalid). 001: Basic. 010: Autorequest. 011: Ping-pong. 100: Memory scatter-gather primary. 101: Memory scatter-gather alternate. 110: Peripheral scatter-gather primary. 111: Peripheral scatter-gather alternate. During the DMA transfer process, but before arbitration, CHNL_CFG is written back to system memory with the N_MINUS_1 field changed to reflect the number of transfers yet to be completed. At the end when the whole DMA cycle is complete, the CYCLE_CTRL bits are made invalid to indicate the completion of the transfer. DMA TRANSFER TYPES (CHNL_CFG[2:0]) The DMA controller supports five types of DMA transfer. The various types are selected by programming the appropriate values into the CYCLE_CTRL bits (Bits[2:0]) in the CHNL_CFG location of the control data structure. Invalid (CHNL_CFG[2:0] = 000) This means no DMA transfer is enabled for the channel. After the controller completes a DMA cycle, it sets the cycle type to invalid to prevent it from repeating the same DMA cycle. Basic (CHNL_ CFG[2:0] = 001) In this mode, the controller can be configured to use either the primary or alternate data structure. The peripheral must present a request for every data transfer. After the channel is enabled, when the controller receives a request, it performs the following operations: 1. 2. 3. The controller performs a transfer. If the number of transfers remaining is 0, the flow continues at Step 3. The controller arbitrates a. If a higher priority channel is requesting service, then the controller services that channel. b. If the peripheral or software signals a request to the controller, then it continues at Step 1. At the end of the transfer, the controller generates the corresponding DMA channel interrupt in the NVIC. Autorequest (CHNL_CFG[2:0] = 010) When the controller operates in this mode, it is only necessary for the controller to receive a single request to enable it to complete the entire DMA cycle. This allows a large data transfer to occur without significantly increasing the latency for servicing higher priority requests or requiring multiple requests from the processor or peripheral. This mode is very useful for a memory-to-memory copy application. Autorequest is not suitable for peripheral use. In this mode, the controller can be configured to use either the primary or alternate data structure. After the channel is enabled, when the controller receives a request, it performs the following operations: 1. 2. 3. The controller performs min(2R_POWER, N) transfers for the channel, where R_POWER is Bits[17:14] of the control data configuration register and N is the number of transfers. If the number of transfers remaining is 0, the flow continues at Step 3. A request for the channel is automatically generated. The controller arbitrates. If the channel has the highest priority, the DMA cycle continues at Step 1. At the end of the transfer, the controller generates an interrupt for the corresponding DMA channel. Rev. D | Page 67 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Ping-Pong (CHNL_CFG[2:0] = 011) In ping-pong mode, the controller performs a DMA cycle using one of the data structures and then performs a DMA cycle using the other data structure. The controller continues to switch from primary to alternate to primary until it reads a data structure that is invalid, or until the host processor disables the channel. This mode is useful for transferring data from peripheral to memory using different buffers in the memory. In a typical application, the host must configure both primary and alternate data structures before starting the transfer. As the transfer progresses, the host can subsequently configure primary or alternate control data structures in the interrupt service routine when the corresponding transfer ends. The DMA controller interrupts the processor after the completion of transfers associated with each control data structure. The individual transfers using either the primary or alternate control data structure work exactly the same as a basic DMA transfer. Memory Scatter-Gather (CHNL_CFG[2:0] = 100 or 101) In memory scatter-gather mode, the controller must be configured to use both the primary and alternate data structures. The controller uses the primary data structure to program the control configuration for alternate data structure. The alternate data structure is used for actual data transfers, which are similar to an autorequest DMA transfer. The controller arbitrates after every primary transfer. The controller only needs one request to complete the entire transfer. This mode is used when performing multiple memory-to-memory copy tasks. The processor can configure all of the tasks simultaneously and does not need to intervene in between each task. The controller generates the corresponding DMA channel interrupt in the NVIC when the entire scatter-gather transaction completes using a basic cycle. In this mode, the controller receives an initial request and then performs four DMA transfers using the primary data structure to program the control structure of the alternate data structure. After this transfer completes, the controller starts a DMA cycle using the alternate data structure. After the cycle completes, the controller performs another four DMA transfers using the primary data structure. The controller continues to switch from primary to alternate to primary until the processor configures the alternate data structure for a basic cycle or the DMA reads an invalid data structure. Table 66 lists the fields of the CHNL_CFG memory location for the primary data structure, which must be programmed with constant values for the memory scatter-gather mode. Table 66. CHNL_CFG for Primary Data Structure in Memory Scatter-Gather Mode, CHNL_CFG[2:0] = 100 Bits 31:30 29:28 27:26 25:24 23:18 17:14 13: 4 3 2:0 Name DST_INC DST_SIZE SRC_INC SRC_SIZE Reserved R_POWER N_MINUS_1 Reserved CYCLE_CTRL Description 10: Configures the controller to use word increments for the address. 10: Configures the controller to use word transfers. 10: Configures the controller to use word increments for the address. 10: Configures the controller to use word transfers. Undefined. Write as 0. 0010: Indicates that the DMA controller is to perform four transfers. Configures the controller to perform N DMA transfers, where N is a multiple of 4. Undefined. Write as 0. 100: Configures the controller to perform a memory scatter-gather DMA cycle. Peripheral Scatter-Gather (CHNL_CFG[2:0] = 110 or 111) In peripheral scatter-gather mode, the controller must be configured to use both the primary and alternate data structure. The controller uses the primary data structure to program the control structure of the alternate data structure. The alternate data structure is used for actual data transfers, and each transfer takes place using the alternate data structure with a basic DMA transfer. The controller does not arbitrate after every primary transfer. This mode is used when there are multiple peripheral-to-memory DMA tasks to be performed. The Cortex-M3 can configure all of the tasks simultaneously and does not need to intervene in between each task. This is very similar to memory scatter-gather mode except for arbitration and request requirements. The controller generates the corresponding DMA channel interrupt in the NVIC when the entire scatter-gather transaction completes using a basic cycle. In peripheral scatter-gather mode, the controller receives an initial request from a peripheral and then performs four DMA transfers using the primary data structure to program the alternate control data structure. The controller then immediately starts a DMA cycle using the alternate data structure, without rearbitrating. After this cycle completes, the controller rearbitrates, and if it receives a request from the peripheral that has the highest priority, it performs another four DMA transfers using the primary data structure. It then immediately starts a DMA cycle using the alternate data structure without rearbitrating. The controller continues to switch from primary to alternate to primary until the processor configures the alternate data structure for a basic cycle or the DMA reads an invalid data structure. Rev. D | Page 68 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Table 67 lists the fields of the CHNL_CFG memory location for the primary data structure, which must be programmed with constant values for the peripheral scatter-gather mode. Table 67. CHNL_CFG For Primary Data Structure in Peripheral Scatter Gather Mode, CHNL_CFG[2:0] = 110 Bits 31:30 29:28 27:26 25:24 23:18 17:14 13:4 3 2:0 Name DST_INC DST_SIZE SRC_INC SRC_SIZE Reserved R_POWER N_MINUS_1 Reserved CYCLE_CTRL Description 10: Configures the controller to use word increments for the address. 10: Configures the controller to use word transfers. 10: Configures the controller to use word increments for the address. 10: Configures the controller to use word transfers. Undefined. Write as 0. 0010: Indicates that the DMA controller performed four transfers without rearbitration. Configures the controller to perform N DMA transfers, where N is a multiple of 4. Undefined. Write as 0. 110: Configures the controller to perform a memory scatter-gather DMA cycle. ADDRESS CALCULATION The DMA controller calculates the source read address based on the content of SRC_END_PTR, the source address increment setting in CHNL_CFG, and the current value of the N_MINUS_1 (CHNL_CFG[13:4]). Similarly, the destination write address is calculated based on the content of DST_END_PTR, the destination address increment setting in CHNL_CFG, and the current value of the N_MINUS_1 (CHNL_CFG[13:4]). Source Read Address = SRC_END_PTR − (N_MINUS_1 << (SRC_INC)) for SRC_INC = 0, 1, 2 Source Read Address = SRC_END_PTR for SRC_INC = 3 Destination Write Address = DST_END_PTR − (N_MINUS_1 << (DST_INC)) for DST_INC = 0, 1, 2 Destination Write Address = DST_END_PTR for DST_INC = 3 where N_MINUS_1 is the number of configured transfers minus 1 for that channel. Rev. D | Page 69 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Example Code to Configure Setup the DMA Controller typedef struct { unsigned int cycle_ctrl :3; unsigned int next_useburst :1; unsigned int n_minus_1 :10; unsigned int r_power :4; unsigned int src_prot_ctrl :3; unsigned int dst_prot_ctrl :3; unsigned int src_size :2; unsigned int src_inc :2; unsigned int dst_size :2; unsigned int dst_inc :2; } CtrlCfgBits; // Define the structure of a DMA descriptor. typedef struct dmaDesc { unsigned int srcEndPtr; unsigned int destEndPtr; union { unsigned int ctrlCfgVal; CtrlCfgBits Bits; } ctrlCfg ; unsigned int reserved4Bytes; } DmaDesc; DmaDesc * Dma_GetDescriptor(unsigned int iChan,boolean bAlternate) { if (iChan < DMACHAN_NUM) { if (bAlternate) return &(dmaChanDesc[iChan + 12]); //DMA_ALT_OFFSET]); else return &(dmaChanDesc[iChan ]); } else return 0x0; } void Dma_Init(void) { // Clear all the DMA descriptors (individual blocks will update their // descriptors memset(dmaChanDesc,0x0,sizeof(dmaChanDesc)); Rev. D | Page 70 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide // Setup the DMA base address pointer register. pADI_DMA->DMAPDBPTR = (unsigned int) &dmaChanDesc; // Enable the uDMA (WO reg) pADI_DMA->DMACFG = 0x1; } void DACDMAINIT( void) { pADI_DAC->DACCON = 0x410; triggered // Enable DAC, 0-INT_VREF range, timer 1 Dma_Init(); // Init DMA structures DACDMAWRITE(uxDACDMA, 16) // Setup DMA control registers NVIC_EnableIRQ(DMA_DAC_IRQn); // Enable DMA DAC Interrupt pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x100; // Select DAC channel in DMA controller pADI_TM1->LD = 0x00000088; overflow to trigger DAC write // the min clock number are 0x17 – Timer 1 pADI_TM1->CON = 0x00000018; } void DACDMAWRITE(unsigned long *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here desc.ctrlcfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_WORD; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_WORD; // TX Primary Descriptor Desc.srcEndPtr = (unsigned long)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = (unsigned long)&DACDAT; Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_WORD; Desc.ctrlCfg.Bits.dst_inc = INC_NO; *Dma_GetDescriptor(DMA_DAC_REQ_OUT,FALSE) = Desc; } Rev. D | Page 71 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 DMA MEMORY MAPPED REGISTERS Table 68. DMA Controller Memory Mapped Registers Address Table (Base Address: 0x40010000) Address 0x40010000 0x40010004 0x40010008 0x4001000C 0x40010014 0x40010020 0x40010024 0x40010028 0x4001002C 0x40010030 0x40010034 0x40010038 0x4001003C 0x4001004C 0x40010FD0 0x40010FE0 0x40010FE4 0x40010FE8 0x40010FEC 0x40010FF0 0x40010FF4 0x40010FF8 0x40010FFC Name DMASTA DMACFG DMAPDBPTR DMAADBPTR DMASWREQ DMARMSKSET DMARMSKCLR DMAENSET DMAENCLR DMAALTSET DMAALTCLR DMAPRISET DMAPRICLR DMAERRCLR DMAPERID4 DMAPERID0 DMAPERID1 DMAPERID2 DMAPERID3 DMAPCELLID0 DMAPCELLID1 DMAPCELLID2 DMAPCELLID3 Description Status register Configuration register Primary control data base address pointer register Alternate control data base address pointer register Software request register Request mask set register Request mask clear register Enable set register Enable clear register Primary-alternate set register Primary-alternate clear register Priority set register Priority clear register Bus error clear register DMA Peripheral ID 4 register DMA Peripheral ID 0 register DMA Peripheral ID 1 register DMA Peripheral ID 2 register DMA Peripheral ID 3 register DMA PrimeCell ID 0 register DMA PrimeCell ID 1 register DMA PrimeCell ID 2 register DMA PrimeCell ID 3 register Rev. D | Page 72 of 176 Access R RW RW R R RW R RW W RW W RW W RW R R R R R R R R R Default 0x000B0000 0x00000000 0x00000000 0x00000100 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000004 0x00000030 0x000000B2 0x0000000B 0x00000000 0x0000000D 0x000000F0 0x00000005 0x0000000B1 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA Status Register Address: 0x40010000, Reset: 0x000B0000, Name: DMASTA Table 69. DMASTA Register Bit Descriptions Bits 31:21 20:16 Name Reserved CHNLSMINUS1 15:8 7:4 Reserved STATE 3:1 0 Reserved ENABLE Description Reserved. Number of available DMA channels minus 1. For example, if there are 12 channels available, the register reads back 0xB for these bits. Reserved. Undefined. Current state of DMA controller state machine. Provides insight into the operation performed by the DMA at the time this register is read. 0000: IDLE: idle. 0001: RDCHNLDATA: reading channel controller data. 0010: RDSRCENDPTR: reading source data end pointer. 0011: RDDSTENDPTR: reading destination end pointer. 0100: RDSRCDATA: reading source data. 0101: WRDSTDATA: writing destination data. 0110: WAITDMAREQCLR: waiting for DMA request to clear. 0111: WRCHNLDATA: writing channel controller data. 1000: STALLED: stalled. 1001: DONE: done. 1010: SCATRGATHR: peripheral scatter-gather transition. 1011 to 1111: reserved. Reserved. Undefined. Enable status of the controller. 0: Controller is disabled. 1: Controller is enabled. DMA Configuration Register Address: 0x40010004, Reset: 0x00000000, Name: DMACFG Table 70. DMACFG Register Bit Descriptions Bits 31:1 0 Name Reserved ENABLE Description Reserved. Controller enable. 0: Controller is disabled. 1: Controller is enabled. DMA Primary Control Data Base Address Pointer Register Address: 0x40010008, Reset: 0x00000000, Name: DMAPDBPTR Table 71. DMAPDBPTR Register Bit Descriptions Bits 31:0 Name CTRLBASEPTR Description Pointer to the base address of the primary data structure. Note that 5 + log(2)M LSBs are reserved and must be written 0, where M is the number of channels. The DMAPDBPTR register must be programmed to point to the primary channel control base address pointer in the system memory. The amount of system memory that must be assigned to the DMA controller depends on the number of DMA channels used and whether the alternate channel control data structure is used. This register cannot be read when the DMA controller is in the reset state. Rev. D | Page 73 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 DMA Alternate Control Data Base Address Pointer Register Address: 0x4001000C, Reset: 0x00000100, Name: DMAADBPTR Table 72. DMAADBPTR Register Bit Descriptions Bits 31:0 Name ALTCBPTR Description Base address of the alternate data structure. The DMAADBPTR read only register returns the base address of the alternate channel control data structure. This register removes the necessity for application software to calculate the base address of the alternate data structure. This register cannot be read when the DMA controller is in the reset state. DMA Software Request Register Address: 0x40010014, Reset: 0x00000000, Name: DMASWREQ The DMA software request register is used for memory-to-memory DMA transfers when a DMA channel is not used by a peripheral. It is used to trigger the DMA transfer. Set the appropriate bit to generate a software DMA request on the corresponding DMA channel. These bits are automatically cleared by the hardware after the corresponding software request completes. Table 73. DMASWREQ Register Bit Descriptions Bits 31:12 11 Name Reserved SINC 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX 5 I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description Reserved. Reads back 0. 0: Does not create a DMA request for sinc output step detection. 1: Generates a DMA request for sinc output step detection. 0: Does not create a DMA request for ADC1. 1: Generates a DMA request for ADC1. 0: Does not create a DMA request for ADC0 (valid for ADuCM360 only). 1: Generates a DMA request for ADC0 (valid for ADuCM360 only). 0: Does not create a DMA request for DAC DMA output. 1: Generates a DMA request for DAC DMA output. 0: Does not create a DMA request for I2CMRX. 1: Generates a DMA request for I2CMRX. 0: Does not create a DMA request for I2CMTX. 1: Generates a DMA request for I2CMTX. 0: Does not create a DMA request for I2CSRX. 1: Generates a DMA request for I2CSRX. 0: Does not create a DMA request for I2CSTX. 1: Generates a DMA request for I2CSTX. 0: Does not create a DMA request for UARTRX. 1: Generates a DMA request for UARTRX. 0: Does not create a DMA request for UARTTX. 1: Generates a DMA request for UARTTX. 0: Does not create a DMA request for SPI1RX. 1: Generates a DMA request for SPI1RX. 0: Does not create a DMA request for SPI1TX. 1: Generates a DMA request for SPI1TX. Rev. D | Page 74 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA Request Mask Set Register Address: 0x40010020, Reset: 0x00000000, Name: DMARMSKSET This register disables DMA requests from peripherals. Each bit of the register represents the corresponding channel number in the DMA controller. Set the appropriate bit to mask the request from the corresponding DMA channel. Table 74. DMARMSKSET Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX 5 I2CSRX Description Reserved. Reads back 0. When read, 0: Requests are enabled for sinc2. 1: Requests are disabled for sinc2. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with I2CMRX from generating DMA requests. When read, 0: Requests are enabled for ADC1. 1: Requests are disabled for ADC1. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with ADC1from generating DMA requests. When read, 0: Requests are enabled for ADC0 (valid for ADuCM360 only). 1: Requests are disabled for ADC0 (valid for ADuCM360 only). When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests (valid for ADuCM360 only). 1: Disables peripheral associated with ADC0 from generating DMA requests (valid for ADuCM360 only). When read, 0: Requests are enabled for DAC. 1: Requests are disabled for DAC. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with DAC from generating DMA requests. When read, 0: Requests are enabled for I2CMRX. 1: Requests are disabled for I2CMRX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with I2CMRX from generating DMA requests. When read, 0: Requests are enabled for I2CMTX. 1: Requests are disabled for I2CMTX. When written, 1: Disables peripheral associated with I2CMTX from generating DMA requests. 0: No effect. Use the DMARMSKCLR register to enable DMA requests. When read, 0: Requests are enabled for I2CSRX. 1: Requests are disabled for I2CSRX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with I2CSRX from generating DMA requests. Rev. D | Page 75 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 4 Name I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX UG-367 Description When read, 0: Requests are enabled for I2CSTX. 1: Requests are disabled for I2CSTX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with I2CSTX from generating DMA requests. When read, 0: Requests are enabled for UARTRX. 1: Requests are disabled for UARTRX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with UARTRX from generating DMA requests. When read, 0: Requests are enabled for UARTTX. 1: Requests are disabled for UARTTX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with UARTTX from generating DMA requests. When read, 0: Requests are enabled for SPI1RX. 1: Requests are disabled for SPI1RX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with SPI1RX from generating DMA requests. When read, 0: Requests are enabled for SPI1TX. 1: Requests are disabled for SPI1TX. When written, 0: No effect. Use the DMARMSKCLR register to enable DMA requests. 1: Disables peripheral associated with SPI1TX from generating DMA requests. DMA Request Mask Clear Register Address: 0x40010024, Reset: 0x00000000, Name: DMARMSKCLR This register enables DMA requests from peripherals by clearing the mask set in the DMARMSKSET register. Each bit of the register represents the corresponding channel number in the DMA controller. Set the appropriate bit to clear the corresponding bits in the DMARMSKSET register. Table 75. DMARMSKCLR Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX Description Reserved. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with sinc2 to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with ADC1 to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests (valid for ADuCM360 only). 1: Enables peripheral associated with ADC0 to generate DMA requests (valid for ADuCM360 only). 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with DAC to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with I2CMRX to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with I2CMTX to generate DMA requests. Rev. D | Page 76 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Bits 5 Name I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with I2CSRX to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with I2CSTX to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with UARTRX to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with UARTTX to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with SPI1RX to generate DMA requests. 0: No effect. Use the DMARMSKSET register to disable DMA requests. 1: Enables peripheral associated with SPI1TX to generate DMA requests. DMA Enable Set Register Address: 0x40010028, Reset: 0x00000000, Name: DMAENSET Enable DMA channels. This register allows for the enabling of DMA channels. Reading the register returns the enable status of the channels. Each bit of the register represents the corresponding channel number in the DMA controller. Set the appropriate bit to enable the corresponding channel. Table 76. DMAENSET Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX 5 I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description Reserved 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables sinc2 DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables ADC1 DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel (valid for ADuCM360 only). 1: Enables ADC0 DMA channel (valid for ADuCM360 only). 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables DAC DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables I2CMRX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables I2CMTX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables I2CSRX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables I2CSTX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables UARTRX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables UARTTX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables SPI1RX DMA channel. 0: No effect. Use the DMAENCLR register to disable the channel. 1: Enables SPI1TX DMA channel. Rev. D | Page 77 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 DMA Enable Clear Register Address: 0x4001002C, Reset: 0x00000000, Name: DMAENCLR Disable DMA channels. This register allows for the disabling of DMA channels. Reading the register returns the enable status of the channels. Each bit of the register represents the corresponding channel number in the DMA controller. Note that the controller disables a channel automatically by setting the appropriate bit when it completes the DMA cycle. Set the appropriate bit to disable the corresponding channel. Table 77. DMAENCLR Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX 5 I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables sinc2 DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables ADC1DMA channel. 0: No effect. Use the DMAENSET register to enable the channel (valid for ADuCM360 only). 1: Disables ADC0DMA channel(valid for ADuCM360 only). 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables DAC DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables I2CMRX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables I2CMTX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables I2CSRX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables I2CSTX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables UARTRX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables UARTTX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables SPI1RX DMA channel. 0: No effect. Use the DMAENSET register to enable the channel. 1: Disables SPI1TX DMA channel. Rev. D | Page 78 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA Primary/Alternate Set Register Address: 0x40010030, Reset: 0x00000000, Name: DMAALTSET Control structure status/select alternate structure. Returns the channel control data structure status or selects the alternate data structure for the corresponding DMA channel. Note that the DMA controller sets/clears these bits automatically as necessary for ping-pong, memory scatter-gather, and peripheral scatter-gather transfers. Table 78. DMAALTSET Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX 5 I2CSRX Description When read, 0: DMA sinc2 is using the primary data structure. 1: DMA sinc2 is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set sinc2 to 0. 1: Selects the alternate data structure for sinc2. When read, 0: DMA ADC1 is using the primary data structure. 1: DMA ADC1 is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set ADC1 to 0. 1: Selects the alternate data structure for ADC1. When read, 0: DMA ADC0 is using the primary data structure (valid for ADuCM360 only). 1: DMA ADC0 is using the alternate data structure (valid for ADuCM360 only). When written, 0: No effect. Use the DMAALTCLR register to set ADC0 to 0 (valid for ADuCM360 only). 1: Selects the alternate data structure for ADC0 (valid for ADuCM360 only). When read, 0: DMA DAC is using the primary data structure. 1: DMA DAC is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set DAC to 0. 1: Selects the alternate data structure for DAC. When read, 0: DMA I2CMRX is using the primary data structure. 1: DMA I2CMRX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set I2CMRX to 0. 1: Selects the alternate data structure for I2CMRX. When read, 0: DMA I2CMTX is using the primary data structure. 1: DMA I2CMTX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set I2CMTX to 0. 1: Selects the alternate data structure for I2CMTX When read, 0: DMA I2CSRX is using the primary data structure. 1: DMA I2CSRX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set I2CSRX to 0. 1: Selects the alternate data structure for I2CSRX. Rev. D | Page 79 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 4 Name I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX UG-367 Description When read, 0: DMA I2CSTX is using the primary data structure. 1: DMA I2CSTX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set I2CSTX to 0. 1: Selects the alternate data structure for I2CSTX. When read, 0: DMA UARTRX is using the primary data structure. 1: DMA UARTRX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set UARTRX to 0. 1: Selects the alternate data structure for UARTRX. When read, 0: DMA UARTTX is using the primary data structure. 1: DMA UARTTX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set UARTTX to 0. 1: Selects the alternate data structure for UARTTX. When read, 0: DMA SPI1RX is using the primary data structure. 1: DMA SPI1RX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set SPI1RX to 0. 1: Selects the alternate data structure for SPI1RX. When read, 0: DMA SPI1TX is using the primary data structure. 1: DMA SPI1TX is using the alternate data structure. When written, 0: No effect. Use the DMAALTCLR register to set SPI1TX to 0. 1: Selects the alternate data structure for SPI1TX. DMA Primary/Alternate Clear Register Address: 0x40010034, Reset: 0x00000000, Name: DMAALTCLR Select primary data structure. Set the appropriate bit to select the primary data structure for the corresponding DMA channel. Note that the DMA controller sets/clears these bits automatically as necessary for ping-pong, memory scatter-gather, and peripheral scatter-gather transfers. Table 79. DMAALTCLR Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX Description 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for sinc2. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for ADC1. 0: No effect. Use the DMAALTSET register to select the alternate data structure (valid for ADuCM360 only). 1: Selects the primary data structure for ADC0 (valid for ADuCM360 only). 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for DAC. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for I2CMRX. Rev. D | Page 80 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Bits 6 Name I2CMTX 5 I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for I2CMTX. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for I2CSRX. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for I2CSTX. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for UARTRX. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for UARTTX. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for SPI1RX. 0: No effect. Use the DMAALTSET register to select the alternate data structure. 1: Selects the primary data structure for SPI1TX. DMA Priority Set Register Address: 0x40010038, Reset: 0x00000000, Name: DMAPRISET Configure channel for high priority. This register enables the user to configure a DMA channel to use the high priority level. Reading the register returns the status of the channel priority mask. Each bit of the register represents the corresponding channel number in the DMA controller. Returns the channel priority mask status or sets the channel priority to high. Table 80. DMAPRISET Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC Description When read, 0: DMA sinc2 is using the default priority level. 1: DMA sinc2 is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set sinc2 to the default priority level. 1: sinc2 uses the high priority level. When read, 0: DMA ADC1 is using the default priority level. 1: DMA ADC1 is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set ADC1 to the default priority level. 1: ADC1 uses the high priority level. When read, 0: DMA ADC0 is using the default priority level (valid for ADuCM360 only). 1: DMA ADC0 is using a high priority level (valid for ADuCM360 only). When written, 0: No effect. Use the DMAPRICLR register to set ADC0 to the default priority level (valid for ADuCM360 only). 1: ADC0 uses the high priority level (valid for ADuCM360 only). When read, 0: DMA DAC is using the default priority level. 1: DMA DAC is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set DAC to the default priority level. 1: DAC uses the high priority level. Rev. D | Page 81 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 7 Name I2CMRX 6 I2CMTX 5 I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description When read, 0: DMA I2CMRX is using the default priority level. 1: DMA I2CMRX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set I2CMRX to the default priority level. 1: I2CMRX uses the high priority level. When read, 0: DMA I2CMTX is using the default priority level. 1: DMA I2CMTX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set I2CMTX to the default priority level. 1: I2CMTX uses the high priority level. When read, 0: DMA I2CSRX is using the default priority level. 1: DMA I2CSRX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set I2CSRX to the default priority level. 1: I2CSRX uses the high priority level. When read, 0: DMA I2CSTX is using the default priority level. 1: DMA I2CSTX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set I2CSTX to the default priority level. 1: I2CSTX uses the high priority level. When read, 0: DMA UARTRX is using the default priority level. 1: DMA UARTRX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set UARTRX to the default priority level. 1: UARTRX uses the high priority level. When read, 0: DMA UARTTX is using the default priority level. 1: DMA UARTTX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set UARTTX to the default priority level. 1: UARTTX uses the high priority level. When read, 0: DMA SPI1RX is using the default priority level. 1: DMA SPI1RX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set SPI1RX to the default priority level. 1: SPI1RX uses the high priority level. When read, 0: DMA SPI1TX is using the default priority level. 1: DMA SPI1TX is using a high priority level. When written, 0: No effect. Use the DMAPRICLR register to set SPI1TX to the default priority level. 1: SPI1TX uses the high priority level. Rev. D | Page 82 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA Priority Clear Register Address: 0x4001003C, Reset: 0x00000000, Name: DMAPRICLR Configure channel for default priority level. The DMAPRICLR write only register enables the user to configure a DMA channel to use the default priority level. Each bit of the register represents the corresponding channel number in the DMA controller. Set the appropriate bit to select the default priority level for the specified DMA channel. Table 81. DMAPRICLR Register Bit Descriptions Bits 31:12 11 Name Reserved SINC2 10 ADC1 9 ADC0 8 DAC 7 I2CMRX 6 I2CMTX 5 I2CSRX 4 I2CSTX 3 UARTRX 2 UARTTX 1 SPI1RX 0 SPI1TX Description 0: No effect. Use the DMAPRISET register to set sinc2 to the high priority level. 1: sinc2 uses the default priority level. 0: No effect. Use the DMAPRISET register to set ADC1 to the high priority level. 1: ADC1 uses the default priority level. 0: No effect. Use the DMAPRISET register to set ADC0 to the high priority level (valid for ADuCM360 only). 1: ADC0 uses the default priority level (valid for ADuCM360 only). 0: No effect. Use the DMAPRISET register to set DAC to the high priority level. 1: DAC uses the default priority level. 0: No effect. Use the DMAPRISET register to set I2CMRX to the high priority level. 1: I2CMRX uses the default priority level. 0: No effect. Use the DMAPRISET register to set I2CMTX to the high priority level. 1: I2CMTX uses the default priority level. 0: No effect. Use the DMAPRISET register to set I2CSRX to the high priority level. 1: I2CSRX uses the default priority level. 0: No effect. Use the DMAPRISET register to set I2CSTX to the high priority level. 1: I2CSTX uses the default priority level. 0: No effect. Use the DMAPRISET register to set UARTRX to the high priority level. 1: UARTRX uses the default priority level. 0: No effect. Use the DMAPRISET register to set UARTTX to the high priority level. 1: UARTTX uses the default priority level. 0: No effect. Use the DMAPRISET register to set SPI1RX to the high priority level. 1: SPI1RX uses the default priority level. 0: No effect. Use the DMAPRISET register to set SPI1TX to the high priority level. 1: SPI1TX uses the default priority level. DMA Bus Error Clear Register Address: 0x4001004C, Reset: 0x00000000, Name: DMAERRCLR Table 82. DMAERRCLR Register Bit Descriptions Bits 31:1 0 Name Reserved ERROR Description Reserved. Bus error status. This register is used to read and clear the DMA bus error status. The error status is set if the controller encounters a bus error while performing a transfer. If a bus error occurs on a channel, that channel is automatically disabled by the controller. The other channels are unaffected. Write 1 to clear bits. When read, 0: No bus error occurred. 1: A bus error is pending. When written, 0: No effect. 1: Bit is cleared. Rev. D | Page 83 of 176 ADuCM360/ADuCM361 Hardware User Guide DMA Peripheral ID 4 Register Address: 0x40001FD0, Reset: 0x00000004, Name: DMAPERID4 Table 83. DMAPERID4 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PID4 Description Reserved. DMA Peripheral ID 4. Default value 0x04. DMA Peripheral ID 0 Register Address: 0x40001FE0, Reset: 0x00000030, Name: DMAPERID0 Table 84. DMAPERID0 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PID0 Description Reserved. DMA Peripheral ID 0. Default value is 0x30. DMA Peripheral ID 1 Register Address: 0x40001FE4, Reset: 0x000000B2, Name: DMAPERID1 Table 85. DMAPERID1 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PID1 Description Reserved. DMA Peripheral ID 1. Default value is 0xB2. DMA Peripheral ID 2 Register Address: 0x40001FE8, Reset: 0x0000000B, Name: DMAPERID2 Table 86. DMAPERID2 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PID2 Description Reserved. DMA Peripheral ID 2 Default value is 0x0B. DMA Peripheral ID 3 Register Address: 0x40001FEC, Reset: 0x00000000, Name: DMAPERID3 Table 87. DMAPERID3 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PID3 Description Reserved. DMA Peripheral ID 3. Default value is 0x00. Rev. D | Page 84 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA PrimeCell ID 0 Register Address: 0x40001FF0, Reset: 0x0000000D, Name: DMAPCELLID0 Table 88. DMAPCELLID0 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PCELLID0 Description Reserved. DMA PrimeCell Identification Register 0. Default value is 0x0D. DMA PrimeCell ID 1 Register Address: 0x40001FF4, Reset: 0x000000F0, Name: DMAPCELLID1 Table 89. DMAPCELLID1 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PCELLID1 Description Reserved. DMA PrimeCell Identification Register 1. Default value is 0xF0. DMA PrimeCell ID 2 Register Address: 0x40001FF8, Reset: 0x00000005, Name: DMAPCELLID2 Table 90. DMAPCELLID2 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PCELLID2 Description Reserved. DMA PrimeCell Identification Register 2. Default value is 0x05. DMA PrimeCell ID 3 Register Address: 0x40001FFC, Reset: 0x000000B1, Name: DMAPCELLID3 Table 91. DMAPCELLID3 Register Bit Descriptions Bits 31:14 13:0 Name Reserved PCELLID3 Description Reserved. DMA PrimeCell Identification Register 3. Default value is 0xB1. Rev. D | Page 85 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 FLASH CONTROLLER FLASH CONTROLLER FEATURES • • • 128 kB Flash/EE 2 kB information space Flash controller FLASH CONTROLLER OVERVIEW The ADuCM360/ADuCM361 includes 128 kB of Flash/EE memory, 2 kB of information space, and a flash controller. Read and write to flash are executed by direct access. Commands Supported • • • Mass erase and page erase. Generation of signatures for single or multiple pages. Command abort. Any access that the processor makes to the flash memory while a command is in progress is stalled until that command completes. Flash Protection • • Write protection for user space. Ability to lock serial wire interface for read protection. Flash Integrity • • Automatic signature check of kernel space on reset. User signature for application code. FLASH MEMORY ORGANIZATION The ADuCM360/ADuCM361 controller supports 128 kB of user flash and 2 kB of information space. The information space is memory mapped above user flash space, as shown in Figure 19. The main 128 kB space is organized into 32 × flash blocks. Each flash block contains eight flash pages, and each page is 512 bytes in size. The flash is protected in block segments, but it can be erased/written in page segments. 0x207FF INFORMATION SPACE 2kB (CONTAINS THE KERNEL) 0x20000 0x1FFFF 0x00000 10464-018 FLASH 128kB Figure 19. Information and User Space Memory Map on ADuCM360/ADuCM361 User Space The top 20 bytes of the flash are shown in Figure 20. If a user tries to read to or write from a portion of memory that is not available, a bus error is returned. RESERVED FOR SIGNATURE [31:0] ADDRESS: 0x1FFFC WRITE PROTECTION [31:0] ADDRESS: 0x1FFF8 USER FA KEY [63:32] ADDRESS: 0x1FFF4 Figure 20. Uppermost Page of User Memory Kernel Space The kernel space is reserved for test data and the serial downloader and is read protected. Rev. D | Page 86 of 176 10464-019 USER FA KEY [31:0] ADDRESS: 0x1FFF0 REST OF UPPERMOST PAGE IN USER SPACE 32 BITS UG-367 ADuCM360/ADuCM361 Hardware User Guide WRITING TO FLASH/EE MEMORY Flash is written directly—similarly to SRAM. To enable writes to the flash memory, user code must first set FEECON0[2] to 1. When the flash write sequence is complete, as indicated by FEESTA[3], user code should then clear FEECON0[2]. After these bits are configured and flash protection is disabled, user code can then write to the flash. When a flash erase or write operation is in progress, the Cortex-M3 processor is disconnected from the flash until the erase/write operation is completed. Note that only 32-bit writes are supported; 16-bit and 8-bit writes are not supported. Burst writes to flash are supported. Because only 0s are written to flash, masking can be used to write individual bits or bytes if necessary. A single location can only be written twice without an erase. If the addressed location is write protected, then the controller responds with a hard fault system exception error. If a write is followed immediately by a second write to the next location in flash and this is in the same row as the previous write, then the flash write time is faster because the controller does not need to change the row address. Note that only a store multiple assembly instruction takes advantage of this flash feature. Before performing a write to Flash/EE memory, the FEESTA register should be read and checked to ensure that no other commands or writes are being executed. Example Code to Write to Flash Memory void WriteToFlash(unsigned long *pArray, unsigned long ulFlashPage, unsigned int uiSize) { unsigned int uiPollFEESTA = 0; volatile unsigned long *ulStartAddress; unsigned int Size = 0; unsigned int n = 0; Size = uiSize; ulStartAddress = ( unsigned long pADI_FEE->FEECON0 |= 0x4; uiPollFEESTA = pADI_FEE->FEESTA; uiPollFEESTA = 0; for (n = 0; n < Size; n=n+4) { uiPollFEESTA = 0; *ulStartAddress = *pArray; while ((uiPollFEESTA & 0x8) == 0x0) { uiPollFEESTA = pADI_FEE->FEESTA; } ulStartAddress = ulStartAddress++; pArray++; } pADI_FEE->FEECON0 &= 0xFB; } *)ulFlashPage; // Enable a write to Flash memory // Read Status to ensure it is clear // Wait for Command to complete // disable a write to Flash memory ERASING FLASH/EE MEMORY User code can call two flash erase commands, • • Mass erase. This command erases the entire user flash memory. After entering the user protection key into the FEEKEY register, write the mass erase command to FEECMD. Page erase. This command erases the 512-byte flash page selected by FEEADR0L/FEEADR0H. After entering the user protection key into the FEEKEY register, load the FEEADR0L/FEEADR0H registers with the page address to be erased. Finally, write the page erase command to FEECMD. CMDDONE (FEESTA[2]) indicates that the page erase command is completed. During a page or mass erase sequence, the flash controller and flash block consume extra current for the duration of the flash erase sequence. Example Code to Mass Erase Flash Memory pADI_FEE->FEEKEY = 0xF456; // Enter Flash User Protection key pADI_FEE->FEEKEY = 0xF123; pADI_FEE->FEECMD = 0x3; // Load Mass Erase value Rev. D | Page 87 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 FLASH CONTROLLER PERFORMANCE AND COMMAND DURATION The flash controller performance and command duration are as follows. These flash timings are not dependent on the clock dividers. • • • • • • Direct single write access (32-bit location): 46 µs Mass erase: 21 ms Page erase: 21 ms Direct write of a page (128 32-bit locations): 3.04 ms Mass verify for all of user space: 2.05 ms (128 kB and 16 MHz HCLK) Sign for all of user space: 2.05 ms (128 kB and 16 MHz HCLK) FLASH PROTECTION There are three types of protection implemented: • • • Key protection Read protection Write protection Flash Protection: Key Protection Some of the flash controller registers are key protected to avoid accidental writes to these registers. The user key is 0xF123F456. It is entered via the 16-bit Key Register 0xF456 first, followed by 0xF123. This key must be entered to run certain user commands, to write to certain locations in flash, or to enable write access to the setup register. Once entered, the key remains asserted unless a command is written to the FEECMD register. When the command completes, the key clears automatically. If this key is entered to enable write access to the setup register or to enable writes to certain locations in flash, it needs to be cleared by user code afterwards. To clear it, write any 16-bit value to the key register. Flash Protection: User Read Protection User space read protection is provided by disabling serial wire access to ensure that the flash contents cannot be read via the debug or download interfaces. A user can disable serial wire access by writing 0 to DBG (FEECON1[0]). Note that the FEEKEY register must be loaded prior to writing to FEECON1. Serial wire access is disabled while the kernel is running; otherwise, serial wire access can prevent the kernel from running to completion. When the kernel has completed, it enables serial wire access by writing 1 to DBG in the flash FEECON1 register. Flash Protection: User Write Protection User write protection is provided to prevent accidental writes to pages in user space and to protect blocks of user code when downloading extra code to flash. If a write or erase of a protected location is detected, the ADuCM360/ADuCM361 flash controller generates an exception. The write protection is stored at the top of the user space. The top four bytes are reserved for a signature, and the next four bytes are for write protection. The write protection is uploaded by the flash controller into local registers after a reset. After uploading, the 32 write protection bits can be read via memory mapped Register FEEPRO[31:0]. To write to the write protection bits, a user must first write 0xF456, followed by 0xF123 to the key register. After the write protection has been written, it cannot be rewritten without a full erase of user space. After a mass erase, the device must be reset to deassert the uploaded copy of the write protection bits. The following is the sequence to program the Write Protection FEEPRO[31:0] bits: 1. 2. 3. 4. Write 0xF456 followed by 0xF123 to the key register. Write the needed write protection directly to flash. Write 0 to enable protection. The write protection address is 0x1FFF8 for 128 kB of flash. Verify that the write completed successfully by polling the status register, FEESTA[3], or by enabling a write complete interrupt. Reset the device and the write protection field is uploaded from the kernel space and activated by the flash controller. If the write protection in flash has not been programmed, that is, 0xFFFFFFFF is uploaded from flash on power-up, then the FEEPRO register can be written to directly from user code. This allows a user to verify the write protection before committing it to flash. If the write protection in flash has been programmed, the MSB of the write protection must be programmed to 0 to prevent erasing the write protection block. For write protection, memory is split into 32 blocks of eight pages each, or 32 blocks of 4 kB (with one page being 512 bytes). If an attempt is made to write to the write protection word in flash without setting the FEEKEY first, a bus error is generated (hard fault system exception error). Rev. D | Page 88 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide FLASH CONTROLLER FAILURE ANALYSIS KEY It may be necessary to perform failure analysis on parts that are returned by a user even though read protection is enabled. A method has been provided—a user failure analysis allow key—to allow failure analysis of protected memory. This key is a 64-bit key that is stored at the top of the user space in flash, as shown in Figure 20. It is used to gain access to user code if the serial wire interface has been locked. It is the user’s responsibility to program this key to a value. The key must be given to Analog Devices to enable access to user code. FLASH INTEGRITY SIGNATURE FEATURE The signature is used to check the integrity of the flash device. Software can call a signature check command occasionally or whenever a new block of code is about to be executed. The signature is a 24-bit CRC with the polynomial x24 + x23 + x6 + x5 + x + 1. The sign command can be used to generate a signature and check the signature of a block of code, where a block can be a single page or multiple pages. A 24-bit LFSR is used to generate the signature. The hardware assumes that the signature for a block is stored in the upper four bytes of the most significant page of a block; therefore, these four bytes are not included when generating the signature. Use the following procedure to generate a signature: 1. 2. 3. Write the start address of the block to the FEEADR0L/FEEADR0L H register. Write the end address of the block to the FEEADR1L/ FEEADR1LH register. Write the sign command to the command register (FEECMD = 10). When the command has completed, the signature is available in the sign register. The signature is compared with the data stored in the upper four bytes of the uppermost page of the block. If the data does not match the signature, a fail status is returned in the status register (FEESTA[5:4] = 10). While the signature is being computed, all other accesses to flash are stalled. For a 128 kB block, that is 32k reads. Note that the FEEADR0L/FEEADR0H and FEEADR1L/FEEADR1H addresses are byte addresses, but only pages need to be identified; that is, the lower nine bits are ignored by the hardware. Note that the user must run the CRC polynomial in user code first to generate the CRC value and must write this to the upper four bytes of the uppermost page of a block. When this operation is complete, any call of the signature feature compares this 4-byte value to the result of the signature check function. INTEGRITY OF THE KERNEL The hardware automatically checks the integrity of the kernel after reset. In the event of a failure, FEESTA[6] is set and user code cannot run. This bit can only be read via a serial wire read if the serial wire interface is enabled. ABORT USING INTERRUPTS Commands (erase, sign, or mass verify) and writes can be aborted on receipt of an interrupt as listed in Table 55. Aborts are also possible by writing an abort command to the FEECMD register. However, if flash is being programmed and the routine controlling the programming is in flash, it is not possible to use the abort command to abort the cycle because instructions cannot be read. Therefore, the ability to abort a cycle on the assertion of any system interrupt is provided. The FEEAENx register is used to enable aborts on receipt of an interrupt. When a command or write is aborted via a system interrupt, FEESTA[5:4] indicates an abort (FEESTA[5:4] =11). It is not possible to abort a flash write or erase cycle without waiting for the high voltage in the flash core to discharge first; that is, a write cycle must finish with a waiting time of 6.6 µs for the high voltage to discharge. An erase cycle must finish with a waiting time of 6.6 µs. A mass erase cycle must finish with a waiting time of 121 µs. Depending on the state that a write cycle is in when the abort asserts, the write cycle may or may not complete. If the write or erase cycle did not complete successfully, a fail status of aborted can be read in the status register. If an immediate response to an interrupt is required during an erase or program cycle, then the interrupt service routine and the interrupt vector table must be moved to SRAM for the duration of the cycle. If the DMA engine is set up to write a block of data to flash, then an interrupt can be set up to abort the current write; however, the DMA engine starts the next write immediately. The interrupt causing the abort stays asserted so that there is a number of aborted write cycles in this case before the processor gains access to flash. When an abort is triggered by an interrupt, all commands are repeatedly aborted until the appropriate FEEAENx bit is cleared or the interrupt source is cleared. Rev. D | Page 89 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 FLASH CONTROLLER MEMORY MAPPED REGISTERS Table 92. Flash Controller Memory Mapped Registers Address Table (Base Address: 0x40002800) Offset 0x0000 0x0004 0x0008 0x0010 0x0014 0x0018 0x001C 0x0020 0x0028 0x002C 0x0030 0x0034 0x0038 0x0048 0x004C 0x0078 0x007C 0x0080 Name FEESTA FEECON0 FEECMD FEEADR0L FEEADR0H FEEADR1L FEEADR1H FEEKEY FEEPROL FEEPROH FEESIGL FEESIGH FEECON1 FEEADRAL FEEADRAH FEEAEN0 FEEAEN1 FEEAEN2 Description Status register. Command control register. Command register. Lower page address register. Upper page address register. Lower page address register. Upper page address register. The key register. Lower 16 bits of the write protection register. Upper 16 bits of the write protection register. Lower 16 bits of the signature. Upper 16 bits of the signature. User setup register. Lower 16 bits of the write abort address register. Upper 16 bits of the write abort address register. Interrupt abort enable register. Interrupt 15 to Interrupt 0. Interrupt abort enable register. Interrupt 31 to Interrupt 16. Interrupt abort enable register. Interrupt 38 to Interrupt 32. Rev. D | Page 90 of 176 Access R RW RW RW RW RW RW W RW RW R R RW R R RW RW RW Default 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0xFFFF 0xFFFF Modified by the kernel Modified by the kernel Modified by the kernel 0x0800 0x0002 0x0000 0x0000 0x0000 UG-367 ADuCM360/ADuCM361 Hardware User Guide Flash Memory Status Register Address: 40002800, Reset: 0x0000, Name: FEESTA Table 93. FEESTA Register Bit Descriptions Bits 15:7 6 Name Reserved SIGNERR 5:4 CMDRES 3 WRDONE 2 CMDDONE 1 WRBUSY 0 CMDBUSY Description Return 0 when read. Kernel space signature check on reset error. Set to 1 when the signature check fails. After reset, the flash controller automatically checks the information space signature. If the signature check fails, this bit is asserted. The user can check if this bit is set via serial wire only. User code does not execute if this bit is set. These two bits indicate the status of a command on completion or the status of a write. If multiple commands are executed or there are multiple writes without a read of the status register, then the first error encountered is stored. These bits clear to 00 when read. Setting Status Function 00 SUCCESS Indicates a successful completion of a command or a write. 01 PROTECTED Indicates an attempted erase of a protected location. 10 VERIFYERR Indicates a read verify error. After an erase, the controller reads the corresponding word(s) to verify that the transaction completed successfully. If data read is not all F’s, this is the resulting status. If the sign command is executed and the resulting signature does not match the data in the upper four bytes of the upper page in a block, this is the resulting status. 11 ABORT Indicates that a command or a write was aborted by an abort command or that a system interrupt has caused an abort. Write complete. If there are multiple writes (or a burst write), this status bit asserts after the first long word written and stays asserted until read. If there is a burst write to flash, this bit asserts after every long word written (assuming the bit is cleared by a read after every long word written). Set to 1 when a write completes. Cleared to 0 when read. Command complete. If there are multiple commands, this status bit asserts after the first command completes and stays asserted until read. Set to 1 when a command completes. Cleared to 0 when read. Write busy. Set to 1 when the flash block is executing a write. Command busy. Set to 1 when the flash block is executing any command entered via the command register. Flash Memory Control Register Address: 0x40002804, Reset: 0x0000, Name: FEECON0 Table 94. FEECON0 Register Bit Descriptions Bits 15:3 2 Name Reserved WREN 1 IENERR 0 IENCMD Description Return 0 when read. Write enable. A flash write when this bit is set to 0 results in a hard fault system exception error, and the write does not take place. 0: Disable writing to the flash. 1: Enable writing to the flash. Error interrupt enable. An interrupt is generated when a command or flash write completes with an error status. 0: Disable. 1: Enable. Command complete interrupt enable. An interrupt is generated when a command or flash write completes. 0: Disable. 1: Enable. Rev. D | Page 91 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Flash Memory Command Register Address: 0x40002808, Reset: 0x0000, Name: FEECMD Table 95. FEECMD Register Bit Descriptions Bits 15:4 3:0 Name Reserved CMD Description Return 0 when read. Commands. The following commands are supported by the flash block. For repeated page erase commands, the key must be entered before each command. If a command is entered without entering the key first, no action is taken and CMDDONE does not assert. Any core access to the flash is stalled until the command completes. Table 96. Flash Controller Commands (FEECMD[3:0]) FEECMD[3:0] 0000 0001 Name IDLE ERASEPAGE 0010 SIGN 0011 MASSERASE 0100 ABORT Description No command executed. Write the address of the page to be erased to FEEADR0L/H and then write this code to the FEECMD register, and the flash erases the page. When the erase has completed, the flash reads every location in the page to verify that all words in the page are erased. If there is a read verify error, this is indicated in FEESTA. To erase multiple pages, wait until a previous page erase has completed. Check the status, and then issue a command to start the next page erase. Before entering this command, 0xF456 followed by 0xF123 must be written to the key register. Use this command to generate a signature for a block of data. The signature is generated on a page-by-page basis. To generate a signature, the address of the first page of the block is entered in FEEADR0L/FEEADR0H. The address of the last page is written to FEEADR1L/FEEADR1H. Then write this code to the FEECMD register. When the command has completed, the signature is available for reading in FEESIGL/FEESIGH. The last four bytes of the last page in a block are reserved for storing the signature. Before entering this command, 0xF456 followed 0xF123 must be written to the key register. Erase all of user space. To enable this operation, 0xF456 followed by 0xF123 must first be written to FEEKEY (this is to prevent accidental erases). When the mass erase has completed, the controller reads every location to verify that all locations are 0xFFFFFFFF. If there is a read verify error, this is indicated by FEESTA[5:4] = 0x2. If this command is issued, any command currently in progress is stopped. The status indicates command completed with an error status as indicated by FEESTA[5:4] = 0x3. Note that this is the only command that can be issued while another command is already in progress. This command can also be used to stop a write that is in progress. If a write is aborted, the address of the location being written can be read via the FEEADRAL/FEEADRAH register. While the flash controller is writing one long word, another long word write may be in the pipeline from the Cortex-M3 or DMA engine (depending on how the software implements writes). Therefore, both writes may need to be aborted. If a write or erase is aborted, then the flash timing is violated and it is not possible to determine whether the write or erase completed successfully. To enable this operation, 0xF456 followed by 0xF123 must first be written to FEEKEY (this is to prevent accidental aborts). Rev. D | Page 92 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Flash Controller Page Address 0 Registers For an erase command, FEEADR0x indicates the page address to be erased. For a sign command, FEEADR0x indicates the start page for calculating the signature. Lower Page Address Register Address: 0x40002810, Reset: 0x0000, Name: FEEADR0L Table 97. FEEADR0L Register Bit Descriptions Bits 15:9 8:0 Name VALUE Reserved Description Bits[15:9] of the address of a page in flash. Used by the erase and sign commands. Nine reserved bits for byte addresses. The lower nine bits of a byte address are ignored because erase and sign commands use page address. Returns 0x0 if read. Upper Page Address Register Address: 0x40002814, Reset: 0x0000, Name: FEEADR0H FEEADR0H is two bits wide to allow access to the information space on the ADuCM360/ADuCM361. Table 98. FEEADR0H Register Bit Descriptions Bits 15:1 0 Name Reserved VALUE Description Set to 0. Bit 16 of the page address. Flash Controller Page Address 1 Registers For a sign command, FEEADR1x indicates the end page for calculating the signature. Lower Page Address Register Address: 0x40002818, Reset: 0x0000, Name: FEEADR1L Table 99. FEEADR1L Register Bit Descriptions Bits 15:9 8:0 Name VALUE Reserved Description Bits[15:9] of the address of a page in flash. Used to identify the last page used by the sign command. Nine reserved bits for byte addresses. The lower nine bits of a byte address are ignored because the sign command uses page address. Returns 0x0 if read. Upper Page Address Register Address: 0x4000281C, Reset: 0x0000, Name: FEEADR1H Table 100. FEEADR1H Register Bit Descriptions Bits 15:1 0 Name Reserved VALUE Description Set to 0. Bit 16 of the page address. Flash Controller Key Register Address: 0x40002820, Reset: 0x0000, Name: FEEKEY Table 101. FEEKEY Register Bit Descriptions Bits 15:0 Name VALUE Description Enter 0xF456 followed by 0xF123. Returns 0x0 if read. Rev. D | Page 93 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Flash Controller Write Protection Registers Lower 16 Bits Address: 0x40002828, Reset: 0xFFFF, Name: FEEPROL Table 102. FEEPROL Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of the write protection. This register is read only if the write protection in flash has been programmed. 0: Protect a section of flash. 1: Leave a flash block unprotected. Upper 16 Bits Address: 0x4000282C, Reset: 0xFFFF, Name: FEEPROH Table 103. FEEPROH Register Bit Descriptions Bits 15:0 Name VALUE Description Upper 16 bits of the write protection. This register is read only if the write protection in flash has been programmed. 0: Protect a section of flash. 1: Leave a flash block unprotected. Flash Controller Signature Registers Lower 16 Bits Address: 0x40002830, Reset: Modified by the kernel, Name: FEESIGL Table 104. FEESIGL Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of the signature. Signature[15:0]. Upper 16 Bits Address: 0x40002834, Reset: Modified by the kernel, Name: FEESIGH Table 105. FEESIGH Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved. Upper eight bits of the signature. Signature[23:16]. User Setup Register Address: 0x40002838, Reset: Modified by the kernel, Name: FEECON1 FEECON1 register is key protected. The key must be entered in FEEKEY. After writing to FEECON1, a 16-bit value must be written again to FEEKEY, to reassert the key protection. Table 106. FEECON1 Register Bit Descriptions Bits 15:1 0 Name Reserved DBG Description Returns 0 when read. Serial wire debug enable. The kernel set this bit to 1 when it has finished executing, thus enabling debug access to a user. 0: Disable access via the serial wire debug interface. 1: Enable access via the serial wire debug interface. Rev. D | Page 94 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Flash Controller Write Abort Address Registers Lower 16 Bits Address: 0x40002848, Reset: 0x0800, Name: FEEADRAL Table 107. FEEADRAL Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of the FEEADRA register. If a write is aborted, these bits contain the address of the location written when the write was aborted. Flash Controller Write Abort Address Registers Upper 16 Bits Address: 0x4000284C, Reset: 0x0002, Name: FEEADRAH Table 108. FEEADRAH Register Bit Descriptions Bits 15:0 Name VALUE Description Upper 16 bits of the FEEADRA register. Flash Controller System IRQ Abort Enable Register Address: 0x40002878, Reset: 0x0000, Name: FEEAEN0 To allow a system interrupt to abort a write or a command (erase, sign, or mass verify), write a 1 to the appropriate bit in this register. For example, if external IRQ2 is required to abort a flash command, set FEEAEN0 = 0x8. FEEAEN0 applies to Interrupt Vector Number 0 to Interrupt Vector Number 15 in Table 55. Table 109. FEEAEN0 Register Bit Descriptions Bits 15 Bit Name SINC2 14 ADC1 13 ADC0 (ADuCM360) Reserved (ADuCM361) 12 T1 11 T0 10 9 Reserved T3 8 EXTINT7 7 EXTINT6 6 EXTINT5 Description SINC2 interrupt abort enable bit. 0: DIS. SINC2 interrupt abort disabled. 1: EN. SINC2 interrupt abort enabled. ADC1 interrupt abort enable bit. 0: DIS. ADC1 interrupt abort disabled. 1: EN. ADC1 interrupt abort enabled. ADC0 interrupt abort enable bit. 0: DIS. ADC0 interrupt abort disabled. 1: EN. ADC0 interrupt abort enabled. Timer1 (general purpose timer 1) interrupt abort enable bit. 0: DIS. Timer1 interrupt abort disabled. 1: EN. Timer1 interrupt abort enabled. Timer0 (general purpose timer 0) interrupt abort enable bit. 0: DIS. Timer0 interrupt abort disabled. 1: EN. Timer0 interrupt abort enabled. Timer3 (watchdog timer) interrupt abort enable bit. 0: DIS. Timer3 interrupt abort disabled. 1: EN. Timer3 interrupt abort enabled. External interrupt 7 abort enable bit. 0: DIS. External interrupt 7 abort disabled. 1: EN. External interrupt 7 abort enabled. External interrupt 6 abort enable bit. 0: DIS. External interrupt 6 abort disabled. 1: EN. External interrupt 6 abort enabled. External interrupt 5 abort enable bit. 0: DIS. External interrupt 5 abort disabled. 1: EN. External interrupt 5 abort enabled. Rev. D | Page 95 of 176 Reset 0x0 Access RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW ADuCM360/ADuCM361 Hardware User Guide Bits 5 Bit Name EXTINT4 4 EXTINT3 3 EXTINT2 2 EXTINT1 1 EXTINT0 0 T2 Description External interrupt 4 abort enable bit. 0: DIS. External interrupt 4 abort disabled. 1: EN. External interrupt 4 abort enabled. External interrupt 3 abort enable bit. 0: DIS. External interrupt 3 abort disabled. 1: EN. External interrupt 3 abort enabled. External interrupt 2 abort enable bit. 0: DIS. External interrupt 2 abort disabled. 1: EN. External interrupt 2 abort enabled. External interrupt 1 abort enable bit. 0: DIS. External interrupt 1 abort disabled. 1: EN. External interrupt 1 abort enabled. External interrupt 0 abort enable bit. 0: DIS. External interrupt 0 abort disabled. 1: EN. External interrupt 0 abort enabled. Timer 2 (wake up timer) interrupt abort enable bit. 0: DIS. Timer 2 interrupt abort disabled. 1: EN. Timer 2 interrupt abort enabled Rev. D | Page 96 of 176 UG-367 Reset 0x0 Access RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW UG-367 ADuCM360/ADuCM361 Hardware User Guide Flash Controller System IRQ Abort Enable Register Address: 0x4000287C, Reset: 0x0000, Name: FEEAEN1 To allow a system interrupt to abort a write or a command (erase, sign, or mass verify), write a 1 to the appropriate bit in this register. The appropriate bit is determined by the interrupt required to abort the flash command. FEEAEN1 applies to Interrupt Vector Number 16 to Interrupt Vector Number 31 in Table 55. Table 110. FEEAEN1 Register Bit Descriptions Bits 15 Bit Name DMADAC 14 DMAI2CMRX 13 DMAI2CMTX 12 DMAI2CSRX 11 DMAI2CSTX 10 DMAUARTRX 9 DMAUARTTX 8 DMASPI1RX 7 DMASPI1TX 6 DMAERROR 5 I2CM 4 I2CS 3 SPI1 2 SPI0 1 UART Description DAC output DMA interrupt abort enable bit. 0: DIS. DAC DMA interrupt abort disabled. 1: EN. DAC DMA interrupt abort enabled. I2C master Rx DMA interrupt abort enable bit. 0: DIS. I2C master Rx DMA interrupt abort disabled. 1: EN. I2C master Rx DMA interrupt abort enabled. I2C master Tx DMA interrupt abort enable bit. 0: DIS. I2C master Tx DMA interrupt abort disabled. 1: EN. I2C master Tx DMA interrupt abort enabled. I2C slave Rx DMA interrupt abort enable bit. 0: DIS. I2C slave Rx DMA interrupt abort disabled. 1: EN. I2C slave Rx DMA interrupt abort enabled. I2C slave Tx DMA interrupt abort enable bit. 0: DIS. I2C slave Tx DMA interrupt abort disabled. 1: EN. I2C slave Tx DMA interrupt abort enabled. UARTRx DMA interrupt abort enable bit. 0: DIS. UARTRx DMA interrupt abort disabled. 1: EN. UARTRx DMA interrupt abort enabled. UARTTx DMA interrupt abort enable bit. 0: DIS. UARTTx DMA interrupt abort disabled. 1: EN. UARTTx DMA interrupt abort enabled. SPI1RXx DMA interrupt abort enable bit. 0: DIS. SPI1Rx DMA interrupt abort disabled. 1: EN. SPI1Rx DMA interrupt abort enabled. SPI1Tx DMA interrupt abort enable bit. 0: DIS. SPI1Tx DMA interrupt abort disabled. 1: EN. SPI1Tx DMA interrupt abort enabled. DMA error interrupt abort enable bit. 0: DIS. DMA error interrupt abort disabled. 1: EN. DMA error interrupt abort enabled. I2C master interrupt abort enable bit. 0: DIS. I2C slave interrupt abort disabled. 1: EN. I2C master interrupt abort enabled. I2C slave interrupt abort enable bit. 0: DIS. I2C slave interrupt abort disabled. 1: EN. I2C slave interrupt abort enabled. SPI1 interrupt abort enable bit. 0: DIS. SPI1 interrupt abort disabled. 1: EN. SPI1 interrupt abort enabled. SPI0 interrupt abort enable bit. 0: DIS. SPI0 interrupt abort disabled. 1: EN. SPI0 interrupt abort enabled. UART interrupt abort enable bit. 0: DIS. UART interrupt abort disabled. 1: EN. UART interrupt abort enabled. Rev. D | Page 97 of 176 Reset 0x0 Access RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW ADuCM360/ADuCM361 Hardware User Guide Bits 0 Bit Name FEE Description Flash controller interrupt abort enable bit. 0: DIS. Flash controller interrupt abort disabled. 1: EN. Flash controller interrupt abort enabled. UG-367 Reset Access Flash Controller System IRQ Abort Enable Register Address: 0x40002880, Reset: 0x0000, Name: FEEAEN2 To allow a system interrupt to abort a write or a command (erase, sign, or mass verify), write a 1 to the appropriate bit in this register. The appropriate bit is determined by the interrupt required to abort the flash command. FEEAEN2 applies to Interrupt Vector Number 32 to Interrupt Vector Number 38 in Table 55. Table 111. FEEAEN2 Register Bit Descriptions Bits [15:7] 6 Bit Name RESERVED PWM2 5 PWM1 4 PWM0 3 PWMTRIP 2 DMASINC2 1 DMAADC1 0 DMAADC0(ADuCM360) Reserved (ADuCM361). Description Reserved. PWM2 interrupt abort enable bit. 0: DIS. PWM2 interrupt abort disabled. 1: EN. PWM2 interrupt abort enabled. PWM1 interrupt abort enable bit. 0: DIS. PWM1 interrupt abort disabled. 1: EN. PWM1 interrupt abort enabled. PWM0 interrupt abort enable bit. 0: DIS. PWM0 interrupt abort disabled. 1: EN. PWM0 interrupt abort enabled. PWMTRIP interrupt abort enable bit. 0: DIS. PWMTRIP interrupt abort disabled. 1: EN. PWMTRIP interrupt abort enabled. SINC2 DMA interrupt abort enable bit. 0: DIS. SINC2 DMA interrupt abort disabled. 1: EN. SINC2 DMA interrupt abort enabled. ADC1 DMA interrupt abort enable bit. 0: DIS. ADC1 DMA interrupt abort disabled. 1: EN. ADC1 DMA interrupt abort enabled. ADC0 DMA interrupt abort enable bit. 0: DIS. ADC0 DMA interrupt abort disabled. 1: EN. ADC0 DMA interrupt abort enabled. Rev. D | Page 98 of 176 Reset 0x00 0x0 Access R RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW 0x0 RW UG-367 ADuCM360/ADuCM361 Hardware User Guide RESET RESET FEATURES There are four kinds of resets: • • • • External reset Power-on reset Watchdog timeout Software system reset RESET OPERATION The software system reset is provided as part of the Cortex-M3 processor. To generate a software system reset, the application interrupt/ reset control register must be written to 0x05FA0004. This register is part of the NVIC register and is located at Address 0xE000ED0C. The RSTSTA register stores the cause for the reset until it is cleared by writing the RSTCLR register. RSTSTA and RSTCLR can be used during a reset exception service routine to identify the source of the reset. Note that the watchdog timer is enabled by default after a reset. The default timeout period is approximately 32 sec. User code should disable the watchdog timer at the start of user code when debugging or if the watchdog timer is not required. pADI_WDT->T3CON = 0x00 ; // Disable watchdog timer Table 112. Device Reset Implications Reset SWRST WDRST External Reset Pin POR 1 2 Reset External Pins to Default State Yes 1 Yes1 Yes1 Yes1 Execute Kernel Yes Yes Yes Yes Impact Reset All MMRs Except RSTSTA Yes Yes Yes Yes Reset All Peripherals Yes Yes Yes Yes P0.7 returns to its default state, that is, POR output. It is low only in the case of a POR event; in all other cases, it remains high. RAM is not valid in the case of a reset following a UART download. Rev. D | Page 99 of 176 Valid SRAM Yes/No 2 Yes/No2 Yes/No2 No RSTSTA After Reset Event RSTSTA[3] = 1 RSTSTA[2] = 1 RSTSTA[1] = 1 RSTSTA[0] = 1 ADuCM360/ADuCM361 Hardware User Guide UG-367 RESET MEMORY MAPPED REGISTERS Table 113. Reset Memory Mapped Register Addresses (Base Address: 0x40002400) Offset 0x0040 Name RSTSTA Description Status register, read only. Access R 0x0040 RSTCLR Clear status register, write only. W Reset Status/Status Clear Registers Address: 0x40002440, Reset: 0x01, Depends on the Type of Reset/N/A, Name: RSTSTA/RSTCLR Table 114. RSTSTA/RSTCLR Register Bit Descriptions Bits 7:4 3 Name Reserved SWRST 2 WDRST 1 EXTRST 0 POR Description Reserved. Software reset. 0: Cleared by setting the corresponding bit in RSTCLR. 1: Set automatically to 1 when the Cortex-M3 system reset is generated. Watchdog timeout. 0: Cleared by setting the corresponding bit in RSTCLR. 1: Set automatically to 1 when a watchdog timeout occurs. External reset. 0: Cleared by setting the corresponding bit in RSTCLR. 1: Set automatically to 1 when an external reset occurs. Power-on reset. 0: Cleared by setting the corresponding bit in RSTCLR. 1: Set automatically when a power-on reset occurs. Rev. D | Page 100 of 176 Default 0x01, depends on the type of reset N/A UG-367 ADuCM360/ADuCM361 Hardware User Guide DIGITAL I/Os DIGITAL I/Os FEATURES The ADuCM360/ADuCM361 features a number of general-purpose bidirectional input/output (GPIO) pins. Most of the GPIO pins have multiple functions, configurable by user code. At power up, all but three of these pins are configured as GPIOs; one pin reflects the state of the POR, and the last two digital pins are configured for serial wire interface. These three pins can be configured by user code to be used as GPIOs (Mode 01). DIGITAL I/Os BLOCK DIAGRAM OUTPUT DRIVE ENABLE GPxOEN IOVDD OUTPUT DATA GPxOUT IOVDD GPxOCE 10464-020 GPxIN GPxPUL Figure 21. GPIO Structure DIGITAL I/Os OVERVIEW The GPIOs are grouped into three ports: Port 0 contains eight GPIOs, Port 1 contains eight GPIOs, and Port 2 contains three GPIOs. Each GPIO can be configured as input, output, or fully open circuit and has an internal pull-up programmable resistor with a drive capability of 1 mA. All I/O pins are functional over the full supply range (IOVDD = 1.8 V to 3.6 V (maximum)), and the logic input voltages are specified as percentages of the supply as follows: VINL = 0.2 × IOVDD max VINH = 0.7 × IOVDD min The absolute maximum input voltage is IOVDD + 0.3 V, and the typical leakage current of the GPIOs configured as input or open circuit is 50 nA per GPIO. When the ADuCM360/ADuCM361 enters a power saving mode, the GPIO pins retain their states. Note that a driving peripheral cannot drive the pin. That is, if the UART is driving the pin upon entry to deep sleep, it is isolated from the pin and power is gated. Its state and control are restored upon wake up. DIGITAL I/Os OPERATION I/O Pull-Up Enable All GPIO pins have an internal pull-up resistor with a drive capability of 1 mA. Using the GPxPUL register, it is possible to enable/disable pull-up registers on the pins when they are configured as inputs. The pull-ups are automatically disabled when the GPIO pin is set as an output or open circuit is enabled. The pull-up is implemented as a MOS device; therefore, the pull-up resistor value varies with the voltage on the pin. For low power operation, ensure the digital I/O’s are not floating when configured as inputs. Ensure pull-up resistors are enabled to ensure a defined logic state. Rev. D | Page 101 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 30 PULL-UP RESISTOR (kΩ) 25 20 15 10 0 0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 VOLTAGE AT PIN (V) 10464-021 5 Figure 22. GPIO Pull-Up Resistor Value I/O Data In When configured as an input (by default), the GPIO input levels are available in GPxIN. Open-Circuit Enable This disables the input paths if the pin is set as an output. To disable the input and not drive the pin, set the open circuit and drive Logic 1. External interrupts are not available when open circuit is enabled. I/O Data Out When the GPIOs are configured as outputs, the values in GPxOUT are reflected on the GPIOs. Bit Set Bit set mode is used to set one or more GPIO data out without affecting others within a port. Only the GPIO corresponding with the write data bit equal to 1 is set; the remaining GPIO are unaffected. Bit Clear Bit clear mode is used to clear one or more GPIO data out without affecting others within a port. Only the GPIO corresponding with write data bit equal to 1 is cleared; the remaining GPIOs are unaffected. Bit Toggle Bit toggle mode is used to toggle one or more GPIO data outputs without affecting others within a port. Only the GPIO corresponding to write data bit equal to 1 is toggled; the remaining GPIOx are unaffected. I/O Data Output Enable The data output path is enabled; the values in GPxOUT are reflected on the GPIOs. Table 115. GPIO States GPxOCE 0 0 1 1 1 1 GPxOEN 0 1 0 1 1 GPxOUT 1 X X X 0 1 GPIO Input States/Interrupts Always available Always available Always available Not available Not available X = don’t care. Rev. D | Page 102 of 176 GPIO Output States Not available. Configured as input. Output level depends on OUT (drive Logic 0 or Logic 1). Not available. Configured as input. Drive 0 out (open drain). Output floating (open drain). UG-367 ADuCM360/ADuCM361 Hardware User Guide DIGITAL PORT MULTIPLEX This block provides control over the GPIO functionality of specified pins because some of the pins have a choice to work as GPIO or to have other specific functions. Table 116. GPIO Multiplex Table Configuration Modes GPIO 00 01 10 11 P0.0 GPIO SPI1 MISO (GP0CON |= 0x1) P0.1 GPIO SPI1 SCLK (GP0CON |= 0x4) SCL (GP0CON |= 0x8) UART RxD (GP0CON |= 0xC) P0.2 GPIO SPI1 MOSI (GP0CON |= 0x10) SDA (GP0CON |= 0x20) UART TxD (GP0CON |= 0x30) P0.3 GPIO/IRQ0 SPI1 CS (GP0CON |= 0x40) P0.4 GPIO UART RTS (GP0CON |= 0x100) P0.5 GPIO/IRQ1 UART CTS (GP0CON |= 0x400) P0.6 GPIO/IRQ2 UART RXD (GP0CON |= 0x1000) P0.7 POR GPIO (GP0CON |= 0x4000) UART TXD (GP0CON |= 0x8000) P1.0 GPIO/IRQ3 PWM SYNC (GP1CON |= 0x1) EXT CLK IN (EXTCLK) (GP1CON |= 0x2) P1.1 GPIO/IRQ4 PWM TRIP (GP1CON |= 0x4) UART DTR (GP1CON |= 0xC) P1.2 GPIO PWM0 (GP1CON |= 0x10) UART RI (GP1CON |= 0x30) P1.3 GPIO PWM1 (GP1CON |= 0x40) UART DSR (GP1CON |= 0xC0) P1.4 GPIO PWM2 (GP1CON |= 0x100) SPI0 MISO (GP1CON |= 0x200) P1.5 GPIO/IRQ5 PWM3 (GP1CON |= 0x400) SPI0 SCLK (GP1CON |= 0x800) P1.6 GPIO/IRQ6 PWM4 (GP1CON |= 0x1000) SPI0 MOSI (GP1CON |= 0x2000) P1.7 GPIO/IRQ7 PWM5 (GP1CON |= 0x4000) SPI0 CS (GP1CON |= 0x8000) P2.0 GPIO SCL (GP2CON |= 0x1) UART CLKIN (GP2CON |= 0x3) P2.1 GPIO SDA (GP2CON |= 0x4) UART DCD (GP2CON |= 0xC) P2.2 GPIO P2.3 SWCLK (default) 1 P2.4 SWD (default) 2 GP0—GP0CON Controls These Bits ECLK OUT (GP0CON |= 0x200) GP1—GP1CON Controls These Bits GP2—GP2CON Controls These Bits P2.5 P2.6 P2.7 1 2 P2.3 defaults as serial wire interface pin. P2.4 defaults as serial wire interface pin. Rev. D | Page 103 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 GPIO MEMORY MAPPED REGISTERS Table 117. GPIO Interface Memory Address Table Base (Address: 0x40006000) Offset 0x0000 0x0004 0x0008 0x000C 0x0014 0x0018 0x001C 0x0020 0x0024 0x0030 0x0034 0x0038 0x003C 0x0044 0x0048 0x004C 0x0050 0x0054 0x0060 0x0064 0x0068 0x006C 0x0074 0x0078 0x007C 0x0080 0x0084 1 Name GP0CON GP0OEN GP0PUL GP0OCE GP0IN 1 GP0OUT GP0SET GP0CLR GP0 TGL GP1CON GP1OEN GP1PUL GP1OCE GP1IN1 GP1OUT GP1SET GP1CLR GP1TGL GP2CON GP2OEN GP2PUL GP2OCE GP2IN1 GP2OUT GP2SET GP2CLR GP2TGL Description GPIO Port 0 configuration GPIO Port 0 output enable GPIO Port 0 output pull-up enable GPIO Port 0 open-circuit enable GPIO Port 0 data input GPIO Port 0 data out GPIO Port 0 data out set GPIO Port 0 data out clear GPIO Port 0 data out toggle GPIO Port 1 configuration GPIO Port 1 output enable GPIO Port 1 output pull-up enable GPIO Port 1 open-circuit enable GPIO Port 1 data input GPIO Port 1 data out GPIO Port 1 data out set GPIO Port 1 data out clear GPIO Port 1 pin toggle GPIO Port 2 configuration GPIO Port 2 output enable GPIO Port 2 output pull-up enable GPIO Port 2 open-circuit enable GPIO Port 2 data input GPIO Port 2 data out GPIO Port 2 data out set GPIO Port 2 data out clear GPIO Port 2 pin toggle Contents of the GPxIN register depend on the digital level on the corresponding pins. Rev. D | Page 104 of 176 Access RW RW RW RW R RW W W W RW RW RW RW R RW W W W RW RW RW RW R RW W W W Default 0x0000 0x00 0xFF 0x00 N/A 0x00 0x00 0x00 0x00 0x0000 0x00 0xFF 0x00 N/A 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x00 N/A 0x00 0x00 0x00 0x00 UG-367 ADuCM360/ADuCM361 Hardware User Guide GPIO Configurations Register Table 118. GPxCON Register Bit Descriptions (GP0CON Address: 0x40006000, GP1CON Address: 0x40006030, GP2CON Address: 0x40006060) Bits 15:14 13:12 11:10 9:8 7:6 5:4 3:2 1:0 Name CON7 CON6 CON5 CON4 CON3 CON2 CON1 CON0 Description Configuration bits for Px.7 as per Table 116. Configuration bits for Px.6 as per Table 116. Configuration bits for Px.5 as per Table 116. Configuration bits for Px.4 as per Table 116. Configuration bits for Px.3 as per Table 116. Configuration bits for Px.2 as per Table 116. Configuration bits for Px.1 as per Table 116. Configuration bits for Px.0 as per Table 116. GPIO Output Enable Register Table 119. GPxOEN Register Bit Descriptions (GP0OEN Address: 0x40006004, GP1OEN Address: 0x40006034, GP2OEN Address: 0x40006064) Bits 7:0 Name OEN[7:0] Description Output enable. 0: Disables the output on corresponding GPIO on Port X. 1: Enables the output on corresponding GPIO on Port X. GPIO Pull-Up Register Table 120. GPxPUL Register Bit Descriptions (GP0PUL Address: 0x40006008, GP1PUL Address: 0x40006038, GP2PUL Address: 0x40006068) Bits 7:0 Name PUL[7:0] Description Output enable. 0: Disables the internal pull-up on corresponding GPIO on Port X. 1: Enables the internal pull-up on corresponding GPIO on Port X. GPIO Open-Circuit Enable Register Table 121. GPxOCE Register Bit Descriptions (GP0OCE Address: 0x4000600C, GP1OCE Address: 0x4000603C, GP2OCE Address: 0x4000606C) Bits 7:0 Name OCE[7:0] Description Output enable. Sets the GPIO pads on Port X to open-circuit mode. GPIO Data Input Register Table 122. GPxIN Register Bit Descriptions (GP0IN Address: 0x40006014, GP1IN Address: 0x40006044, GP2IN Address: 0x40006074) Bits 7:0 Name IN[7:0] Description Reflects the level on the GPIO pins except when in configured in open circuit. GPIO Data Out Register Table 123. GPxOUT Register Bit Descriptions (GP0OUT Address: 0x40006018, GP1OUT Address: 0x40006048, GP2OUT Address: 0x40006078) Bits 7:0 Name OUT[7:0] Description Data out register. Reads back the value on GPIO outputs. For example, writing GP0OUT = 0x12 drives 1 on P0.1 and P0.4, and the remaining GPIO are low, assuming these pins are configured as outputs. 0: Cleared by user to drive the corresponding GPIO low. 1: Set by user code to drive the corresponding GPIO high. Rev. D | Page 105 of 176 ADuCM360/ADuCM361 Hardware User Guide GPIO Bit Set Register Table 124. GPxSET Register Bit Descriptions (GP0SET Address: 0x4000601C, GP1SET Address: 0x4000604C, GP2SET Address: 0x4000607) Bits 7:0 Name SET[7:0] Description Data out register. 0: No action. 1: Set by user code to drive the corresponding GPIO high. GPIO Bit Clear Register Table 125. GPxCLR Register Bit Descriptions (GP0CLR Address: 0x40006020, GP1CLR Address: 0x40006050, GP2CLR Address: 0x40006080) Bits 7:0 Name CLR[7:0] Description Data out register. 0: Cleared by user code; has no effect. 1: Set by user code to drive the corresponding GPIO low. GPIO Toggle Pin Register Table 126. GPxTGL Register Bit Descriptions (GP0TGL Address: 0x40006024, GP1TGL Address: 0x40006054, GP2TGL Address: 0x40006084) Bits 7:0 Name TGL[7:0] Description Toggle pin. 0: Cleared by user code; has no effect. 1: Set by user code to invert the corresponding GPIO. Rev. D | Page 106 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide I2C SERIAL INTERFACE I2C FEATURES Master or slave mode with 2-byte transmit and receive FIFOs Supports 7-bit and 10-bit addressing modes Four 7-bit device addresses or one 10-bit address and two 7-bit addresses in the slave Repeated starts in master and slave modes Clock stretching can be enabled by other devices on the bus without causing any issues with the ADuCM360/ADuCM361; however, the ADuCM360/ADuCM361 cannot enable clock stretching Master arbitration Continuous read mode for the master or up to 512 bytes fixed read Internal and external loopback Support for DMA in master and slave modes Software control on the slave of NACK signal I2C refers to a communications protocol originally developed by Philips Semiconductors (now NXP semiconductors). I2C OVERVIEW The I2C data transfer uses a serial clock pin (SCL) and a serial data pin (SDA). The pins are configured in a wired-AND’ed format that allows arbitration in a multimaster system. Both SCL and SDA are bidirectional and must be connected to a positive supply voltage using a pull-up resistor. The transfer sequence of an I2C system consists of a master device initiating a transfer by generating a start condition while the bus is idle. The master transmits the slave device address and the direction of the data transfer during the initial address transfer. If the master does not lose arbitration and the slave acknowledges the initial address transfer, the data transfer is initiated. This continues until the master issues a stop condition and the bus becomes idle. Figure 23 shows a typical I2C transfer. A master device can be configured to generate the serial clock. The frequency is programmed by the user in the serial clock divisor register, I2CDIV. The master channel can be set to operate in fast mode (400 kHz) or standard mode (100 kHz). MSB LSB SLAVE ADDRESS SCL MSB LSB R/W DATA 3 TO 6 1 2 2 TO 7 7 8 START BIT 9 ACK BIT 1 8 9 ACK BIT STOP BIT 10464-022 SDA Figure 23. Typical I2C Transfer Sequence 2 2 The I C bus peripheral address in the I C bus system is programmed by the user. This ID can be modified any time a transfer is not in progress. The user can set up to four slave addresses that are recognized by the peripheral. The peripheral is implemented with a 2-byte FIFO for each transmit and receive shift register. The IRQ and status bits in the control registers are available to signal to the processor core when the FIFOs need to be serviced. I2C OPERATION I2C Startup The following steps are required to set the I2C peripheral running: 1. 2. 3. 4. Configure I2C clock in CLKDIS and CLKCON1 registers. Configure digital pins for I2C operation (P0.1/P0.2, P2.0/P2.1). Configure I2C registers as required for slave or master operation. Enable the I2C slave or master interrupt source as required. Note that the user should disable the internal pull-up resistors on the I2C pins via the GP0PUL register when using I2C. Rev. D | Page 107 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Table 127. GPIO Multiplex GPIO P0.1, P2.0 P0.2, P2.1 Configuration Mode (10) SCL SDA Addressing Modes 7-Bit Addressing The I2CID0, I2CID1, I2CID2, and I2CID3 registers contain the slave device IDs. The device compares the four I2CIDx registers to the address byte. To be correctly addressed, the seven MSBs of either ID register must be identical to that of the seven MSBs of the first received address byte. The LSB of the ID registers (the transfer direction bit) is ignored in the process of address recognition. The master addresses a device using the I2CADR0 register. 10-Bit Addressing This feature is enabled by setting I2CSCON[1] for master and slave mode. The 10-bit address of the slave is stored in I2CID0 and I2CID1, where I2CID0 contains the first byte of the address, and the R/W bit and the upper five bits must be programmed to 11110 as shown in Figure 24. I2CID1 contains the remaining eight bits of the 10-bit address. I2CID2 and I2CID3 can still be programmed with 7-bit addresses. The master communicates to a 10-bit address slave using the I2CADR0/1 registers. The format is described in Figure 24. I2CADR1 AND I2CID1 7 6 5 4 3 2 1 1 1 1 1 0 2 MSB 0 7 6 5 R/W 4 3 2 1 0 10464-023 I2CADR0 AND I2CID0 8 LSB Figure 24. 10-Bit Address Format A repeated start condition occurs when a second start condition is sent to a slave without a stop condition being sent in between. This allows the master to reverse the direction of the transfer by changing the R/W bit without having to give up control of the bus. An example of a transfer sequence is shown in Figure 25. This is generally used where the first data sent to the part sets up the register address to be read from. LSB SLAVE ADDRESS SCL 1 START BIT 2 3 TO 6 MSB LSB R/W 7 8 SLAVE ADDRESS DATA 9 ACK BIT 1 2 TO 7 LSB MSB 8 1 9 ACK BIT 2 3 TO 6 START BIT MSB LSB R/W 7 8 DATA 9 1 2 TO 7 8 ACK BIT 9 ACK STOP BIT BIT Figure 25. I2C Repeated Start Sequence On the slave side, an interrupt is generated (if enabled in the I2CSCON register) when a repeated start and a slave address are received. This can be differentiated from receiving a start and slave address by using the status bits START and REPSTART in the I2CSSTA MMR. On the master side, the master generates a repeated start if the I2CADR0 register is written while the master is still busy with a transaction. After the state machine has started to transmit the device address, it is safe to write to the I2CADR0 register. For example, if a transaction involving a write, repeated start, and then read/write is required, write to the I2CADR0 register either after the state machine starts to transmit the device address or after the first TXREQ interrupt is received. When the transmit FIFO empties, a repeated start is generated. Similarly, if a transaction involving a read, repeated start, and then read/write is required, write to the first master address byte register, I2CADR1, either after the state machine starts to transmit the device address or after the first RXREQ interrupt is received. When the requested receive count is reached, a repeated start is generated. Rev. D | Page 108 of 176 10464-024 MSB SDA UG-367 ADuCM360/ADuCM361 Hardware User Guide I2C Clock Control The I2C peripheral is clocked by a gated 16 MHz system clock (UCLK). The CLKCON1[8:6] bits allow the I2C block to be clocked with a slower clock by allowing the 16 MHz clock to be divided—this helps to reduce power. Note that the minimum I2C clock required for a 100 kHz I2C master clock is 2 MHz. The minimum I2C clock required for a 400 kHz I2C master clock is 8 MHz. The I2C master in the system generates the serial clock for a transfer. The master channel can be configured to operate in fast mode (400 kHz) or standard mode (100 kHz). The bit rate is defined in the I2CDIV MMR as follows: fSCL = fI2CCLK/(LOW + HIGH + 3) where: fI2CCLK = fUCLK/(CLKSYSDIV × I2CCD). fUCLK is the system clock, 16 MHz. CLKSYSDIV is 1 or 2, depending on the CLKSYSDIV[0] bit setting. I2CCD is the clock divide value and is set by the CLKCON1[8:6]. HIGH is the high period of the clock, I2CDIV [15:8] = (REQD_HIGH_TIME/UCLK_PERIOD) – 2. LOW is the low period of the clock, I2CDIV [7:0] = (REQD_LOW_TIME/UCLK_PERIOD) − 1. For 100 kHz SCL operation, with a low time of 5000 ns and a high time of 5000 ns, and a UCLK frequency of 16 MHz, HIGH = (5000 ns/(1/16000000)) − 2 = 78 = 0x4E LOW = (5000 ns/(1/16000000)) − 1 = 79 = 0x4F fSCL = 16000000/(79 + 78 + 3) = 100 kHz For 400 kHz SCL operation, with a low time of 1250 ns and a high time of 1250 ns, and a UCLK frequency of 16 MHz, HIGH = (1250 ns/(1/16000000)) − 2 = 18 = 0x12 LOW = (1250 ns/(1/16000000)) − 1 = 19 = 0x13 fSCL = 16000000/(18 + 19 + 3) = 400 kHz I C OPERATING MODES 2 Master Transfer Initiation If the master enable bit (I2CMON[0], MASEN) is set, a master transfer sequence is initiated by writing a value to the I2CADRx register. If there is valid data in the I2CMTX register, it is the first byte transferred in the sequence after the address byte during a write sequence. Slave Transfer Initiation If the slave enable bit (I2CSCON[0], SLVEN) is set, a slave transfer sequence is monitored for the device address in Register I2CID0, Register I2CID1, Register I2CID2, or Register I2CID3. If the device address is recognized, the part participates in the slave transfer sequence. Note that a slave operation always starts with the assertion of one of three interrupt sources—read request (RXREQ), write request (TXREQ), or general call (GCINT) interrupt—and the software should always look for a stop interrupt to ensure that the transaction has completed correctly and to deassert the stop interrupt status bit. Rx/Tx Data FIFOs The transmit data path consists of a master and slave Tx FIFO, each two bytes deep, I2CMTX and I2CSTX, and a transmit shifter. The transmit status bits in I2CMSTA[1:0] and I2CSSTA[0] denote whether there is valid data in the Tx FIFO. Data from the Tx FIFO is loaded into the Tx shifter when a serial byte begins transmission. If the Tx FIFO is not full during an active transfer sequence, the transmit request bit (TXREQ) in I2CMSTA or I2CSSTA asserts. In the slave, if there is no valid data to transmit when the Tx shifter is loaded, the transmit underrun status bit (TXUR) asserts (I2CMSTA[12], ISCSSTA[1]). The master generates a stop condition if there is no data in the transmit FIFO and the master is writing data. The receive data path consists of a master and slave Rx FIFO, each two bytes deep, I2CMRX and I2CSRX. The receive request interrupt bit (RXREQ) in I2CMSTA or I2CSSTA indicates whether there is valid data in the Rx FIFO. Data is loaded into the Rx FIFO after each byte is received. If valid data in the Rx FIFO is overwritten by the Rx shifter, the receive overflow status bit (RXOF) is asserted (I2CMSTA[9] or I2CSSTA[4]). Rev. D | Page 109 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Master NACK When receiving data, the master responds with a NACK if its FIFO is full and an attempt is made to write another byte to the FIFO. This last byte received is not written to the FIFO and is lost. No Acknowledge from the Slave If the slave does not want to acknowledge a read access, then simply not writing data into the slave transmit FIFO results in a NACK. If the slave does not want to acknowledge a master write, assert the NACK bit in the slave control register, I2CSCCON[7]. Normally, the slave will ACK all bytes that are written into the receive FIFO. If the receive FIFO fills up, the slave cannot write further bytes to it, and it will not acknowledge the byte that was not written to the FIFO. The master should then stop the transaction. The slave does not acknowledge a matching device address if the read/write bit is set and the transmit FIFO is empty. Therefore, there is very little time for the microcontroller to respond to a slave transmit request and the assertion of ACK. It is recommended that EARLYTXR, I2CSCON[5] be asserted for this reason. General Call An I2C general call is for addressing every device on the I2C bus. A general call address is 0x00 or 0x01. The first byte, address byte is followed by a command byte. If the address byte is 0x00, then Byte 2, the command byte, can be one of the following: • • 0x6: the I2C interface (master and slave) is reset. The general call interrupt status asserts, and the general call ID bits, GCID (I2CSSTA[9:8]), are 0x1. User code should take corrective action to reset the entire system or simply reenable the I2C interface. 0x4: the general call interrupt status bit is asserted, and the general call ID bits (GCID) are 0x2. If the address byte is 0x01, a hardware general call is issued. • Byte 2 in this case is the hardware master address. The general call interrupt status bit is set on any general call after the second byte is received, and user code should take corrective action to reprogram the device address. If GCEN is asserted, the slave always acknowledges the first byte of a general call. It acknowledges the second byte of a general call if the second byte is 0x04 or 0x06 or if the second byte is a hardware general call and HGCEN (I2CSCON[3]) is asserted. The I2CALT register contains the alternate device ID for a hardware general call sequence. If the hardware general call enable bit, HGCEN, GCEN, and SLVEN are all set, the device recognizes a hardware general call. When a general call sequence is issued and the second byte of the sequence is identical to ALT, the hardware call sequence is recognized for the device. I2C Reset Mode The slave state machine is reset when SLVEN is written to 0. The master state machine is reset when MASEN is written to 0. I2C Test Modes The device can be placed in an internal loopback mode by setting the LOOPBACK bit (I2CMCON[2]). There are four FIFOs (master Tx and Rx, and slave Tx and Rx), so, in effect, the I2C peripheral can be set up to talk to itself. External loopback can be performed if the master is set up to address the slave’s address. I2C Low Power Mode If the master and slave are both disabled (MASEN = SLVEN = 0), the I2C section is off. To fully power down the I2C block, the clock to the I2C section of the chip should be disabled by setting CLKCON1[8:6] = 111 and CLKDIS[2] = 1. DMA Requests Four DMA channels are required to service the I2C master and slave. DMA enable bits are provided in the slave control register and in the master control register. The following is example code showing how to configure the DMA controller for the four different configurations. Rev. D | Page 110 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Example Code: I2C Slave Write DMA Cycles void I2CSLAVETXDMAINIT(void) { pADI_GP0->GPCON = 0x28; // Configure P0.[1:2] as I2C pins pADI_CLKCTL-> CLKCON1&= 0xFF0F; // Enable clock to I2C block pADI_I2C->I2CSCON = I2CSCON_SLVEN // Enable Slave mode + I2CSCON_EARLYTXR source // Enable early Tx request interrupt + I2CSCON_IENSTOP + I2CSCON_IENTX interrupts + I2CSCON_IENRX // Enable stop and Rx interrupts + I2CSCON_IENREPST // Enable Tx and repeated Start + 0x4000; // Enable Tx DMA pADI_I2C->I2CID0 = 0xA2; // Set Slave ID0 register pADI_I2C->I2CID1 = 0xA4; // Set Slave ID1 register pADI_I2C->I2CID2 = 0xA6; // Set Slave ID2 register pADI_I2C->I2CID3 = 0xA0; // Set Slave ID3 register pADI_I2C->I2CFSTA = 0x100; // Flush Slave Tx FIFO pADI_I2C->I2CFSTA &= ~0x100; // Enable I2C Slave, Dma_Init(); function // See ADC DMA example for this I2CSLAVEDMAWRITE(uxI2CTXData, 16); pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x10; // Enable I2C_TX_DMA Channel NVIC_EnableIRQ(DMA_I2CS_TX_IRQn); M360 // I2C Tx DMA interrupt sources - } void I2CSLAVEDMAWRITE(unsigned char *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here Desc.ctrlcfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x1; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; //cyclectrl_basic; // Desc.srcEndPtr TX Primary Descriptor = (unsigned int)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = (unsigned int)&I2CSTX; Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_BYTE; Rev. D | Page 111 of 176 ADuCM360/ADuCM361 Hardware User Guide Desc.ctrlCfg.Bits.dst_inc UG-367 = INC_NO; *Dma_GetDescriptor(DMA_REQ_I2C0_SLV_TX,FALSE) = Desc; } // Slave DMA Tx IRQ handler void DMA_I2C0_STX_Int_Handler() { NVIC_DisableIRQ(DMA_I2CS_TX_IRQn); // Clear Interupt source } Example Code: I2C Slave Read DMA Cycles void I2CSLAVERXDMAINIT(void) { pADI_GP0->GPCON = 0x28; // Configure P0.[1:2] as I2C pins pADI_CLKCTL-> CLKCON1&= 0xFF0F; // Enable clock to I2C block pADI_I2C->I2CSCON = I2CSCON_SLV // Enable Slave mode + I2CSCON_EARLYTXR source // Enable early Tx request interrupt + I2CSCON_IENSTOP + I2CSCON_IENTX interrupts + I2CSCON_IENRX // Enable stop and Rx interrupts + I2CSCON_IENREPST // Enable Tx and repeated Start + 0x2000; // Enable Rx DMA pADI_I2C->I2CID0 = 0xA2; // Set Slave ID0 register pADI_I2C->I2CID1 = 0xA4; // Set Slave ID1 register pADI_I2C->I2CID2 = 0xA6; // Set Slave ID2 register pADI_I2C->I2CID3 = 0xA0; // Set Slave ID3 register // Enable I2C Slave, Dma_Init(); I2CSLAVEDMAREAD(uxI2CRXData, 16); pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x20; // Enable I2C_RX_DMA Channel NVIC_EnableIRQ(DMA_I2CS_RX_IRQn); M360 // I2C Rx DMA interrupt sources - } void I2CSLAVEDMAREAD(unsigned char *pucRX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here desc.ctrlcfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; desc.ctrlcfg.bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; Rev. D | Page 112 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide // RX Primary Descriptor Desc.srcEndPtr = (unsigned int)&I2CSRX; Desc.destEndPtr = (unsigned int)(pucRX_DMA + iNumRX - 0x1); // Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_NO; Desc.ctrlCfg.Bits.dst_inc = INC_BYTE; *Dma_GetDescriptor(DMA_REQ_I2C0_SLV_RX,FALSE) = Desc; } // I2C DMA Rx IRQ handler void DMA_I2C0_SRX_Int_Handler() { NVIC_DisableIRQ(DMA_I2CS_RX_IRQn); // Clear Interupt source } Example Code: I2C Master Write DMA Cycles void I2CMASTERTXDMAINIT(void) { pADI_GP0->GPCON = 0x28; pins // Configure P0.[1:2] as I2C pADI_CLKCTL-> CLKCON1&= 0xFF0F; // Enable clock to I2C block // Enable I2C master, IRQ on byte Received // Enable IRQ on Transmit complete, Arbitration lost, NACK received, Complete transaction (Stop detected) // Decrement Tx FIFO status on byte full transmitted. pADI_I2C->I2CMCON = I2CMCON_MASEN + I2CMCON_IENRX + I2CMCON_IENTX + I2CMCON_IENALOST + I2CMCON_IENNACK + I2CMCON_IENCMP + 0x800; // Enable Rx DMA pADI_I2C->I2CFSTA = 0x200; // Flush Master Tx FIFO pADI_I2C->I2CFSTA &= ~0x200; // Enable I2C Master, Dma_Init(); I2CMASTERDMAWRITE(uxI2CTXData, 16); pADI_DMA->DMACFG = 0x1; controller // Enable DMA mode in DMA pADI_DMA->DMAENSET = 0x40; // Enable I2C_TX_DMA Channel NVIC_EnableIRQ(DMA_I2CM_TX_IRQn); sources- M360 // I2C Tx DMA interrupt pADI_I2C->I2CADR0 = 0xA0; } void I2CMASTERDMAWRITE(unsigned char *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here Rev. D | Page 113 of 176 ADuCM360/ADuCM361 Hardware User Guide Desc.ctrlCfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x1; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; UG-367 //cyclectrl_basic; // TX Primary Descriptor Desc.srcEndPtr = (unsigned int)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; (unsigned int)&I2CMTX; Desc.ctrlCfg.Bits.src_inc = INC_BYTE; Desc.ctrlCfg.Bits.dst_inc = INC_NO; *Dma_GetDescriptor(DMA_REQ_I2C0_MST_TX,FALSE) = Desc; } // Master DMA Tx IRQ handler void DMA_I2C0_MTX_Int_Handler() { NVIC_DisableIRQ(DMA_I2CM_TX_IRQn); // Clear Interupt source } Example Code: I2C Master Read DMA Cycles void I2CMASTERRXDMAINIT(unsigned char ucNumBytes) { pADI_GP0->GPCON = 0x28; // Configure P0.[1:2] as I2C pins pADI_CLKCTL-> CLKCON1&= 0xFF0F; // Enable clock to I2C block // Enable I2C master, IRQ on byte Received // Enable IRQ on Transmit complete, Arbitration lost, NACK received, Complete transaction (Stop detected) // Decrement Tx FIFO status on byte full transmitted. pADI_I2C->I2CMCON = I2CMCON_MASEN + I2CMCON_IENRX + I2CMCON_IENTX + I2CMCON_IENALOST + I2CMCON_IENNACK + I2CMCON_IENCMP + 0x400; // Enable Rx DMA pADI_I2C->I2CMRXCNT = ucNumBytes; Dma_Init(); I2CMASTERDMAREAD(uxI2CRXData, ucNumBytes); pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x80; // Enable I2C_RX_DMA Channel NVIC_EnableIRQ(DMA_I2CM_RX_IRQn); // I2C Rx DMA interrupt sources-M360 pADI_I2C->I2CADR0 = 0xA1; } void I2CMASTERDMAREAD(unsigned char *pucRX_DMA, unsigned int iNumRX) Rev. D | Page 114 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide { DmaDesc Desc; // Common configuration of all the descriptors used here desc.ctrlcfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; // Desc.srcEndPtr RX Primary Descriptor = (unsigned int)&I2CMRX; Desc.destEndPtr = (unsigned int)(pucRX_DMA + iNumRX - 0x1); Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_NO; Desc.ctrlCfg.Bits.dst_inc = INC_BYTE; *Dma_GetDescriptor(DMA_REQ_I2C0_MST_RX,FALSE) = Desc; } // I2C DMA Rx IRQ handler void DMA_I2C0_MRX_Int_Handler() { NVIC_DisableIRQ(DMA_I2CM_RX_IRQn); // Clear Interupt source } Rev. D | Page 115 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 I2C MEMORY MAPPED REGISTERS The I2C interface MMRs are based at Address 0x40003000. Table 128. I2C Interface Memory Address Table Master Registers (Base Address: 0x40003000) Offset 0x0000 0x0004 0x0008 0x000C 0x0010 0x0014 0x0018 0x001C 0x0024 Name I2CMCON I2CMSTA I2CMRX I2CMTX I2CMRXCNT I2CMCRXCNT I2CADR0 I2CADR1 I2CDIV Description Master control register. Read/write register. Master status, error, and IRQ register. Master receive data register. Master transmit data register. Master receive data count register. Master current receive data count register. First master address byte register. Second master address byte register (10-bit addresses only). Serial clock period divisor register. Access RW R R W RW R RW RW RW Default 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x1F1F Access RW R R W RW RW RW RW RW Default 0x0000 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 Access RW Default 0x0000 I2C Register Map Slave Registers Table 129. I2C Interface Memory Address Table Slave Registers (Base Address: 0x40003000) Offset 0x0028 0x002C 0x0030 0x0034 0x0038 0x003C 0x0040 0x0044 0x0048 Name I2CSCON I2CSSTA I2CSRX I2CSTX I2CALT I2CID0 I2CID1 I2CID2 I2CID3 Description Slave control register. Slave status, error, and IRQ register. Slave receive data register. Slave transmit data register. Hardware general call ID register. First slave address device ID. Second slave address device ID. Third slave address device ID. Fourth slave address device ID. I2C Register Map Shared Registers Table 130. I2C Interface Memory Address Table Shared Registers (Base Address: 0x40003000) Offset 0x004C Name I2CFSTA Description Master and slave Rx and Tx FIFO status register. Rev. D | Page 116 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide I2C Master Control Register Address: 0x40003000, Reset: 0x0000, Name: I2CMCON Table 131. I2CMCON Register Bit Descriptions Bits 15:12 11 Name Reserved TXDMA 10 RXDMA 9 8 Reserved IENCMP 7 IENNACK 6 IENALOST 5 IENTX 4 IENRX 3 2 Reserved LOOPBACK 1 COMPETE 0 MASEN Description Reserved bits. Enable master Tx DMA request. 0: Disable Tx DMA mode. 1: Enable I2C master Tx DMA requests. Enable master Rx DMA request. 0: Disable Rx DMA mode. 1: Enable I2C master Rx DMA requests. Always clear to 0. Transactions completed (or stop detected) interrupt enable. 0: Disable. 1: Enable a transaction completed interrupt. If this bit is asserted, an interrupt is generated when a stop is detected. NACK received interrupt enable. 0: Disable. 1: Enable. Arbitration lost interrupt enable. 0: Disable. 1: Enable. Transmit request interrupt enable. 0: Disable. 1: Enable. Receive request interrupt enable. 0: Disable. 1: Enable. Reserved. A value of 0 should be written to this bit. Internal loopback enable. SCL and SDA out of the device are multiplexed onto their corresponding inputs. Note that it is also possible for the master to loopback a transfer to the slave as long as the device address corresponds, that is, external loopback. 0: Disable. 1: Enable. Start back off disable. 0: Disable. 1: Enables the device to compete for ownership even if another device is currently driving a start condition. Master enable. The master should be disabled when not in use because this gates the clock to the master and saves power. This bit should not be cleared until a transaction has completed (see the TCOMP bit in the master status register (Table 132)). Note that writable register bits are not reset by this bit. 0: Disable master and the master state machine is held in reset. 1: Enable master. Rev. D | Page 117 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 I2C Master Status Register Address: 0x40003004, Reset: 0x0000, Name: I2CMSTA Table 132. I2CMSTA Register Bit Descriptions Bits 15:13 12 Name Reserved TXUR 11 MSTOP 10 LINEBUSY 9 RXOF 8 TCOMP 7 NACKDATA 6 BUSY 5 ALOST 4 NACKADDR 3 RXREQ 2 TXREQ 1:0 TXFSTA Description Reserved bits. Returns 0 when read. Transmit FIFO underrun. Set to 1 when the I2C master ends the transaction due to a Tx FIFO empty condition. This bit is only set when IENTX (I2CMCON[10]) is set. Cleared to 0 on a read of the I2CMSTA register. Stop driven by I2C master. Set to 1 when the I2C master drives a stop condition on the I2C bus, which indicates a transaction completion, Tx underrun, Rx overflow, or a NACK by the slave. It is different from TCOMP because it is not set when the stop condition occurs due to any other master on the I2C bus. This bit does not generate an interrupt. See the TCOMP description for available interrupts related to the stop condition. Cleared to 0 on a read of the I2CMSTA register. Line is busy. Set to 1 when a start is detected on the I2C bus. Cleared to 0 when a stop is detected on the I2C bus. Receive FIFO overflow. Set to 1 when a byte is written to the receive FIFO if the FIFO is already full. Cleared to 0 on a read of the I2CMSTA register. Transaction complete (or stop detected). (Can drive an interrupt.) This bit only asserts if the master is enabled (MASEN = 1). This bit should be used to determine when it is safe to disable the master. It can also be used to wait for another master’s transaction to complete on the I2C bus when this master loses arbitration. Set to 1 when a stop condition is detected on the I2C bus. If IENCMP is 1 (I2CMCON [8]), an interrupt is generated when this bit asserts. Cleared to 0 on a read of the I2CMSTA register. NACK received in response to data write. (Can drive an interrupt.) Set to 1 when a NACK is received in response to a data write transfer. If IENNACK is 1 (I2CMCON [7]), an interrupt is generated when this bit asserts. Cleared to 0 on a read of the I2CMSTA register. Master busy. Set to 1 when the master state machine is servicing a transaction. Cleared to 0 if the state machine is idle or another device has control of the I2C bus. Arbitration lost. (Can drive an interrupt.) Set to 1 if the master loses arbitration. If IENALOST is 1 (I2CMCON [6]), an interrupt is generated when this bit asserts. Cleared to 0 on a read of the I2CMSTA register. NACK received in response to an address. (Can drive an interrupt.) Set to 1 if a NACK is received in response to an address. If IENNACK is 1 (I2CMCON [7]), an interrupt is generated when this bit asserts. Cleared to 0 on a read of the I2CMSTA register. Receive request. (Can drive an interrupt.) Set to 1 when there is data in the receive FIFO. If IENRX is 1 (I2CMCON [4]), an interrupt is generated when this bit asserts. Cleared to 0 on a read of the I2CMRX register. Transmit request. (Can drive an interrupt.) Set to 1 when the direction bit is 0 and the transmit FIFO is either empty or not full. If IENTX is 1 (I2CMCON [5]), an interrupt is generated when this bit asserts. Cleared to 0 on a write to the I2CMTX register. Transmit FIFO status. 00: EMPTY: FIFO empty. 01: Reserved. 10: ONEBYTE: one byte in FIFO. 11: FULL: FIFO full. Rev. D | Page 118 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide I2C Master Receive Register Address: 0x40003008, Reset: 0x0000, Name: I2CMRX Table 133. I2CMRX Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bits. Returns 0 when read. Receive register. Read only. Set to 0 by default. This register allows access to the receive data FIFO. The FIFO can hold two bytes. I2C Master Transmit Register Address: 0x4000300C, Reset: 0x0000, Name: I2CMTX I2CMTX is a write only register. If read, the resulting values are undefined. Table 134. I2CMTX Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bits. Returns 0 when read. Transmit register. Set to 0 by default. Writing to this register loads a byte to the Tx FIFO. The FIFO can hold two bytes. I2C Master Receive Data Count Register Address: 0x400030010, Reset: 0x0000, Name: I2CMRXCNT Table 135. I2CMRXCNT Register Bit Descriptions Bits 15:9 8 Name Reserved EXTEND 7:0 COUNT Description Reserved bits. Returns 0 when read. Extended read: Use this bit if greater than 256 bytes are required on a read. 0: Disable extended read. 1: Enable extended read. For example, to receive 412 bytes, write 0x100 (EXTEND = 1) to this register (I2CMRXCNT). Wait for the first byte to be received, and then check the I2CMCRXCNT register for every byte received thereafter. When I2CMCRXCNT returns to 0, 256 bytes have been received. Next, write 0x09C (412 − 256 = 156 decimal (equal to 0x9C), with the EXTEND bit set to 0) to this register (I2CMRXCNT). Receive count. Program the number of bytes required minus one to this register. If just one byte is required, write 0 to this register. If greater than 256 bytes are required, use EXTEND. I2C Master Current Receive Count Register Address: 0x40003014, Reset: 0x0000, Name: I2CMCRXCNT Table 136. I2CMCRXCNT Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bits. Returns 0 when read. Current receive count. This register gives the total number of bytes received so far. If 256 bytes are requested, this register reads 0 when the transaction has completed. Rev. D | Page 119 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 I2C Master First Address Byte Register Address: 0x40003018, Reset: 0x0000, Name: I2CADR0 Table 137. I2CADR0 Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bits. Returns 0 when read. Address byte. If a 7-bit address is required, I2CADR0[7:1] is programmed with the address and I2CADR0[0] is programmed with the direction (read or write). If a 10-bit address is required, I2CADR0[7:3] is programmed with 11110, I2CADR0[2:1] is programmed with the two MSBs of the address, and I2CADR0[0] is programmed with the direction (read or write). I2C Master Second Address Byte Register Address: 0x4000301C, Reset: 0x0000, Name: I2CADR1 Table 138. I2CADR1 Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bits. Returns 0 when read. Address byte. This register is only required when addressing a slave with 10-bit addressing. I2CADR1[7:0] is programmed with the lower eight bits of the address. I2C Serial Clock Period Divider Register Address: 0x40003024, Reset: 0x1F1F, Name: I2CDIV Table 139. I2CDIV Register Bit Descriptions Bits 15:8 Name HIGH 7:0 LOW Description Serial clock high time. This register controls the clock high time. See the I2C Clock Control section for more details. Serial clock low time. This register controls the clock low time. See the I2C Clock Control section for more details. I2C Slave Control Register Address: 0x40003028, Reset: 0x0000, Name: I2CSCON Table 140. I2CSCON Register Bit Descriptions Bits 15 14 Name Reserved TXDMA 13 RXDMA 12 IENREPST 11 10 Reserved IENTX 9 IENRX Description Reserved bit. Enable slave Tx DMA request. 0: Disable DMA mode. 1: Enable I2C slave DMA requests. Enable slave Rx DMA request. 0: Disable DMA mode. 1: Enable I2C slave DMA requests. Repeated start interrupt enable. 0: Disable an interrupt when the REPSTART status bit asserts. 1: Generate an interrupt when the REPSTART status bit asserts. Reserved. Transmit request interrupt enable. 0: Disable transmit request interrupt. 1: Enable transmit request interrupt. Receive request interrupt enable. 0: Disable receive request interrupt. 1: Enable receive request interrupt. Rev. D | Page 120 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Bits 8 Name IENSTOP 7 NACK 6 5 Reserved EARLYTXR 4 GCSBCLR 3 HGCEN 2 GCEN 1 ADR10EN 0 SLVEN Description Stop condition detected interrupt enable. 0: Disable stop condition detect interrupt. 1: Enable stop condition detect interrupt. NACK next communication. 0: By default. 1: Allow the next communication to be NACK’ed. This can be used, for example, if during a 24xx I2C serial EEPROM style access, an attempt was made to write to a read only or nonexistent location in system memory. That is the indirect address in a 24xx I2C serial EEPROM style write pointed to an unwritable memory location. Reserved. A value of 0 should be written to this bit. Early transmit request mode. 0: Enable a transmit request just after the negative edge of the direction bit (R/W) SCL clock pulse. 1: Enable a transmit request just after the positive edge of the direction bit (R/W) SCL clock pulse. General call status bit clear. The general call status and general call ID bits can only be reset by a write to this bit or a full reset. General call ID = I2CSSTA[9:8]. 0: Disable general call status clear. 1: Clear the general call status and general call ID bits. Hardware general call enable. 0: Disable hardware general call. 1: When this bit and the general call enable bit are set after the device receives a general call, Address 0x00 and a data byte check the contents of the I2CALT against the receive shift register. If the contents match, the device has received a hardware general call. This is used if a device needs urgent attention from a master device without knowing which master it needs to turn to. This is a broadcast message to all master devices in the bus. The device that requires attention embeds its own address into the message. The LSB of the I2CALT register should always be written to a 1. General call enable. 0: Disable the I2C slave to ACK an I2C general call, Address 0x00 (write). 1: Enable the I2C slave to ACK an I2C general call, Address 0x00 (write). Enable 10-bit addressing. One 10-bit address is supported by the slave and is stored in I2CID0 and I2CID1, where I2CID0 contains the first byte of the address and the upper five bits must be programmed to 11110. I2CID2 and I2CID3 can be programmed with 7-bit addresses at the same time. 0: If this bit is clear, the slave can support four slave addresses, programmed in Register I2CID0 to Register I2CID3. 1: Enable 10-bit addressing. Slave enable. Note that writable register bits are not reset. 0: Disable the slave, and all slave state machine flops are held in reset. 1: Enable slave. I2C Slave Status Register Address: 0x4000302C, Reset: 0x0001, Name: I2CSSTA Table 141. I2CSSTA Register Bit Descriptions Bits 15 14 Name Reserved START 13 REPSTART Description Reserved bit. Returns 0 when read. Start and matching address. Set to 1 if a start is detected on SCL/SDA and one of the following is true: the device address is matched, a general call (GC = 0000_0000) code is received while GC is enabled, a high speed (HS = 0000_1XXX) code is received. Cleared to 0 on receipt of either a stop or start condition. Repeated start and matching address. (Can drive an interrupt.) Set to 1 if START (I2CSSTA[14]) is already asserted and then a repeated start is detected. Cleared to 0 when read or on receipt of a stop condition. A read of the I2CxSSTA register also clears this bit. Rev. D | Page 121 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 12:11 Name IDMAT 10 STOP 9:8 GCID 7 GCINT 6 BUSY 5 NACK 4 RXOF 3 RXREQ 2 TXREQ 1 TXUR 0 TXFSEREQ UG-367 Description Device ID matched. Set to 00 when received address matched ID Register 0. Set to 01 when received address matched ID Register 1. Set to 10 when received address matched ID Register 2. Set to 11 when received address matched ID Register 3. Stop after start and matching address. (Can drive an interrupt.) Set to 1 if the slave device received a stop condition after a previous start condition and a matching address. If IENSTOP (I2CSCON[8]) is set, the slave interrupt request is asserted when this bit is set. Cleared to 0 by a read of the status register. General call ID. These status bits are not cleared by a general call reset. These bits are cleared to 0 by writing 1 to GCSBCLR (I2CSCON[4]). 00: No general call. 01: General call reset and program address. 10: General call program address. 11: General call matching alternative ID. General call interrupt. (Always drives an interrupt.) If the interrupt was a general call reset, all registers are at their default values. If the interrupt was a hardware general call, the Rx FIFO holds the second byte of the general call, and this can be compared with the I2CALT register. Set to 1 if the slave device receives a general call of any type. Cleared to 0 by writing 1 to GCSBCLR (I2CSCON[4]). Slave busy. Set to 1 if the slave device receives an I2C start condition. Cleared to 0 by hardware on any of the following conditions: the address does not match an ID register, the slave device receives an I2C stop condition, or if a repeated start address doesn’t match. NACK generated by the slave. Used to indicate that the slave responded to its device address with a NACK. Set to 1 under any of the following conditions: if there was no data to transmit and the sequence was a slave read, the device address is NACK’ed; if the NACK bit was set in the slave control register and the device was addressed. Cleared to 0 on a read of the I2CSSTA register. Receive FIFO overflow. Set to 1 when a byte is written to the receive FIFO if the FIFO is already full. Cleared to 0 on a read of the I2CSSTA register. Receive request. (Can drive an interrupt.) Set on the falling edge of the SCL clock pulse that clocks in the last data bit of a byte. Set to 1 when the receive FIFO is not empty. Cleared to 0 when the receive FIFO is read or flushed. Transmit request. (Can drive an interrupt.) If EARLYTXR = 0, this bit is set when the direction bit for a transfer is received high. Thereafter, as long as the transmit FIFO is not full, this bit remains asserted. Initially, it is asserted on the negative edge of the SCL pulse that clocks in the direction bit (if the device address also matched). If EARLYTXR = 1, this bit is set when the direction bit for a transfer is received high. Thereafter, as long as the transmit FIFO is not full, this bit remains asserted. Initially, it is asserted after the positive edge of the SCL pulse that clocks in the direction bit (if the device address also matched). Cleared to 0 on a read of the I2CSSTA register. Transmit FIFO underrun. Set to 1 if a master requests data from the device and the Tx FIFO is empty for the rising edge of SCL. Cleared to 0 on a write of the I2CSTX register. Tx FIFO status. Not valid if EARLYTXR = 1. Set to 1 whenever the slave Tx FIFO is empty (default). Cleared to 0 when the slave Tx FIFO is not empty. Rev. D | Page 122 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide I2C Slave Receive Data Register Address: 0x40003030, Reset: 0x0000, Name: I2CSRX Table 142. I2CSRX Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bit. Returns 0 when read. Receive register. I2C Slave Transmit Data Register Address: 0x40003034, Reset: 0x0000, Name: I2CSTX I2CSTX is a write only register. If this register is read, the resulting values are undefined. Table 143. I2CSTX Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bit. Returns 0 when read. Transmit register. I2C Slave Alt Register Address: 0x40003038, Reset: 0x0000, Name: I2CALT Table 144. I2CALT Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description Reserved bit. Returns 0 when read. This register is used in conjunction with HGCEN (I2CSCON[3]) to match a master generating a hardware general call. It is used in the case where a master device cannot be programmed with a slave’s address and, instead, the slave must recognize the master’s address. I2C Slave ID Registers Table 145. I2CIDx Register Bit Descriptions (I2CID0 Address: 0x4000303C, I2CID1 Address: 0x40003040, I2CID2 Address: 0x40003044, I2CID3 Address: 0x40003048) Bits 15:8 7:0 Name Reserved VALUE Description Reserved bit. Returns 0 when read. There are four of these registers: I2CID0 to I2CID3. I2CID[7:1] is programmed with the device ID. I2CID[0] is don’t care. See I2CSCON[1] in Table 140 for a description of how these registers are programmed with a 10-bit address. I2C FIFO Status Register Address: 0x4000304C, Reset: 0x0000, Name: I2CFSTA Table 146. I2CFSTA Register Bit Descriptions Bits 15:10 9 Name Reserved MFLUSH 8 SFLUSH 7:6 MRXFSTA Description Reserved bit. Returns 0 when read. 0: Normal operation. 1: Flush the master transmit FIFO. The master transmit FIFO must be flushed if arbitration is lost or a slave responds with a NACK. 0: Normal operation 1: Flush the slave transmit FIFO. Master receive FIFO status. The status is a count of the number of bytes in a FIFO. 00: FIFO empty. 01: one byte in the FIFO. 10: two bytes in the FIFO. 11: Reserved. Rev. D | Page 123 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 5:4 Name MTXFSTA 3:2 SRXFSTA 1:0 STXFSTA Description Master transmit FIFO status. The status is a count of the number of bytes in a FIFO. 00: FIFO empty. 01: one byte in the FIFO. 10: two bytes in the FIFO. 11: Reserved. Slave receive FIFO status. The status is a count of the number of bytes in a FIFO. 00: FIFO empty. 01: one byte in the FIFO. 10: two bytes in the FIFO. 11: Reserved. Slave transmit FIFO status. The status is a count of the number of bytes in a FIFO. 00: FIFO empty. 01: one byte in the FIFO. 10: two bytes in the FIFO. 11: Reserved. Rev. D | Page 124 of 176 UG-367 UG-367 ADuCM360/ADuCM361 Hardware User Guide SERIAL PERIPHERAL INTERFACES SPI FEATURES Two complete hardware serial peripheral interfaces with the following standard SPI features: • • • • • • • • • • • Serial clock phase mode and serial clock polarity mode LSB first transfer option Loopback mode Master or slave mode Transfer and interrupt mode Continuous transfer mode Tx/Rx FIFO Interrupt mode, interrupt after one, two, three, or four bytes Rx overflow mode and Tx underrun mode Open-circuit data output mode Full-duplex communications supported (simultaneous transmit/receive) SPI OVERVIEW The ADuCM360/ADuCM361 integrates two complete hardware serial peripheral interfaces (SPI). SPI is an industry standard, synchronous serial interface that allows eight bits of data to be synchronously transmitted and simultaneously received, that is, full duplex. The two SPIs implemented on the ADuCM360/ADuCM361 can operate to a maximum bit rate of 8 Mbps in both master and slave mode. SPI1 has an additional DMA feature. It has two DMA channels that interface with a µDMA controller of the ARM Cortex-M3 processor. One DMA channel is used for transmit and the other for receive. Note that SPI0 does not support DMA. SPI OPERATION The SPI port can be configured for master or slave operation and consists of four pins: MISO, MOSI, SCLK, and CS. Note that the GPIOs used for SPI communication must be configured in SPI mode before enabling the SPI peripheral and that the internal pull-up resistors on the SPI pins should be disabled via the GPxPUL registers when using the SPI. MISO (Master In, Slave Out) Pin The MISO pin is configured as an input line in master mode and an output line in slave mode. The MISO line on the master (data in) should be connected to the MISO line in the slave device (data out). The data is transferred as byte-wide (8-bit) serial data, MSB first. MOSI (Master Out, Slave In) Pin The MOSI pin is configured as an output line in master mode and an input line in slave mode. The MOSI line on the master (data out) should be connected to the MOSI line in the slave device (data in). The data is transferred as byte-wide (8-bit) serial data, MSB first. SCLK (Serial Clock I/O) Pin The master serial clock (SCLK) synchronizes the data being transmitted and received through the MOSI SCLK period. Therefore, a byte is transmitted/received after eight SCLK periods. The SCLK pin is configured as an output in master mode and as an input in slave mode. In master mode, the polarity and phase of the clock are controlled by the SPIxCON register, and the bit rate is defined in the SPIxDIV register as follows: f SERIALCLOCK = UCLK / DIV 2 × (1 + SPIxDIV ) Where UCLK/DIV is the 16 MHz system clock divided by the factor set in CLKCON1 and CLKSYSDIV registers. It is possible to divide the clocks to SPI0 and SPI1 separately: • • CLKCON1[2:0] and CLKDIS[0] control UCLK/DIV to SPI0. CLKCON1[5:3] and CLKDIS[1] control UCLK/DIV to SPI1. By reducing the clock rate to the SPI blocks, it is possible to reduce the power consumption of the SPI block. The maximum data rate is 8 Mbps. Rev. D | Page 125 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 In slave mode, the SPIxCON register must be configured with the phase and polarity of the expected input clock. The slave accepts data from an external master up to 8 Mbps. In both master and slave mode, data is transmitted on one edge of the SCLK signal and sampled on the other. Therefore, it is important that the polarity and phase be configured the same for the master and slave devices. Chip Select (CS Input) Pin In SPI slave mode, a transfer is initiated by the assertion of CS, which is an active low input signal. The SPI port then transmits and receives 8-bit data until the transfer is concluded by deassertion of CS. In slave mode, CS is always an input. In SPI master mode, the CS is an active low output signal. It asserts itself automatically at the beginning of a transfer and deasserts itself upon completion. SPI TRANSFER INITIATION In master mode, the transfer and interrupt mode bit, SPIxCON[6] determines the manner in which an SPI serial transfer is initiated. If the mode bit is set, a serial transfer is initiated after a write to the Tx FIFO. If the mode bit is cleared, a serial transfer is initiated after a read of the Rx FIFO; the read must be done while the SPI interface is idle. A read done during an active transfer does not initiate another transfer. For any setting of SPIxCON[1] and SPIxCON[6], the SPI simultaneously receives and transmits data. Therefore, during data transmission, the SPI is also receiving data and filling up the Rx FIFO. If the data is not read from the Rx FIFO, the overflow interrupt occurs when the FIFO starts to overflow. If the user does not want to read the Rx data or receive overflow interrupts, SPIxCON[12] can be set and the receive data is not saved to the Rx FIFO. Similarly, when the user wants to only receive data and does not want to write data to the Tx FIFO, SPIxCON[13] can be set to avoid receiving underrun interrupts from the Tx FIFO. Tx Initiated Transfer For transfers initiated by a write to the Tx FIFO, the SPI starts transmitting as soon as the first byte is written to the FIFO, irrespective of the configuration in SPIxCON[15:14]. The first byte is immediately read from the FIFO, written to the Tx shift register, and the transfer commences. If the continuous transfer enable bit, SPIxCON[11], is set, the transfer continues until no valid data is available in the Tx FIFO. There is no stall period between transfers where CS is deasserted; CS is asserted and remains asserted for the duration of the transfer until the Tx FIFO is empty. Determining when the transfer stops does not depend on SPIxCON[15:14]; the transfer stops when there is no valid data left in the FIFO. Conversely, the transfer continues while there is valid data in the FIFO. If the continuous transfer enable bit, SPIxCON[11], is cleared, each transfer consists of a single 8-bit serial transfer. If valid data exists in the Tx FIFO, a new transfer is initiated after a stall period where CS is deasserted. Rx Initiated Transfer Transfers initiated by a read of the Rx FIFO depend on the number of bytes to be received in the FIFO. If SPIxCON[15:14] = 11 and a read to the Rx FIFO occurs, the SPI initiates a 4-byte transfer. If continuous mode is set, the four bytes occur continuously with no deassertion of CS between bytes. If continuous mode is not set, the four bytes occur with stall periods between transfers where the CS is deasserted. A read of the Rx FIFO while the SPI is receiving data does not initiate another transfer after the present transfer is complete. In slave mode, a transfer is initiated by the assertion of CS. Note that only CS is active in slave mode. The device as a slave transmits and receives 8-bit data until the transfer is concluded by the deassertion of CS. The SPI transfer protocol diagrams (see Figure 26 and Figure 27) illustrate the data transfer protocol for the SPI and the effects of CPHA and CPOL bits in the control register on that protocol. Rev. D | Page 126 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide CLOCK CYCLE NUMBER 1 2 3 4 5 6 7 8 SPI CLOCK (CPOL = 0) SPI CLOCK (CPOL = 1) MOSI (FROM MASTER) XX MISO (FROM SLAVE) XX MSB 6 5 4 3 2 1 MSB 6 5 4 3 2 1 LSB XX LSB XX t3 t2 t1 10464-025 CS Figure 26. SPI Transfer Protocol CPHA = 0 CLOCK CYCLE NUMBER 1 2 3 4 5 6 7 8 SPI CLOCK (CPOL = 0) SPI CLOCK (CPOL = 1) MOSI (FROM MASTER) XX MISO (FROM SLAVE) XX MSB 6 5 4 3 2 1 LSB MSB 6 5 4 3 2 1 LSB XX XX t1 t2 t3 10464-026 CS Figure 27. SPI Transfer Protocol CPHA = 1 SPI Data Underrun and Overflow If the Tx underrun mode bit, ZEN (SPIxCON[7]), is cleared, the last byte from the previous transmission is shifted out when a transfer is initiated with no valid data in the FIFO. If ZEN is set, 0s are transmitted when a transfer is initiated with no valid data in the FIFO. If the Rx overflow overwrite enable bit, RXOF(SPIxCON[8]), is set, the valid data in the Rx FIFO is overwritten by the new serial byte received if there is no space left in the FIFO. If RXOF is cleared, the new serial byte received is discarded if there is no space left in the FIFO. When valid data is being overwritten in the Rx FIFO, the oldest byte is overwritten first, followed by the next oldest byte, and so on. Full Duplex Operation Simultaneous read/writes are supported on the SPI. When implementing full duplex transfers in master mode, use the following procedure: 1. 2. 3. 4. Initiate a transfer sequence via a transmit on the MOSI pin. Set SPIxCON[6] = 1. If interrupts are enabled, interrupts are triggered when a transmit interrupt occurs but not when a byte is received. If you are using interrupts, the SPI Tx interrupt indicated by SPIxSTA[5] or the Tx FIFO underrun interrupt (SPIxSTA[4]) is asserted approximately 3 × SPICLK to 4 × SPICLK periods into the transfer of the first byte. Reload a byte into the Tx FIFO, if necessary, by writing to SPIxTX. The first byte received via the MISO pin does not update the Rx FIFO status bits (SPIxSTA[10:8]) until 12 × SPICLK periods after CS has gone low. Therefore, two transmit interrupts may occur before the first receive byte is ready to be handled. After the last transmit interrupt has occurred, it may be necessary to read two more bytes. It is recommended that SPIxSTA[10:8] are polled outside of the SPI interrupt handler after the last transmit interrupt is handled. Rev. D | Page 127 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 SPI INTERRUPTS There is one interrupt line per SPI and four sources of interrupts. SPIxSTA[0] reflects the state of the interrupt line, and SPIxSTA[7:4] reflects the state of the four sources. The SPI generates either TIRQ or RIRQ. Both interrupts cannot be enabled at the same time. The appropriate interrupt is enabled using the TIM bit, SPIxCON[6]. If TIM = 1, TIRQ is enabled. If TIM = 0, RIRQ is enabled. Also note that the SPI0 and SPI1 interrupt source must be enabled in the NVIC Register ISER0 (ISER0[18] = SPI0, ISER0[19] = SPI1). Tx Interrupt If TIM is set, the Tx FIFO status causes the interrupt. SPIxCON[15:14] control when the interrupt occurs, as shown in Table 147. Table 147. SPIxCON[15:14] IRQ Mode Bits SPIxCON[15:14] 00 01 10 11 Interrupt Condition An interrupt is generated after each byte that is transmitted. The interrupt occurs when the byte is read from the FIFO and written to the shift register. An interrupt is generated after every two bytes that are transmitted. An interrupt occurs after every third byte that is transmitted. An interrupt occurs after every fourth byte that is transmitted. The interrupts are generated depending on the number of bytes transmitted and not on the number of bytes in the FIFO. This is unlike the Rx interrupt, which depends on the number of bytes in the Rx FIFO and not the number of bytes received. The transmit interrupt is cleared by a read to the status register. The status of this interrupt can be read by reading SPIxSTA[5]. The interrupt is disabled if SPIxCON[13] is left high. A write to the control register, SPIxCON, resets the transmitted byte counter back to 0. For example, in a case where SPIxCON[15:14] is set to 11 and SPIxCON is written to after three bytes have been transmitted, the Tx interrupt does not occur until another four bytes have been transmitted. Rx Interrupt If SPIxCON[6] is cleared, the Rx FIFO status causes the interrupt. SPIxCON[15:14] control when the interrupt occurs. The interrupt is cleared by a read of SPIxSTA. The status of this interrupt can be read by reading SPIxSTA[6]. Interrupts are only generated when data is written to the FIFO. For example, if SPIxCON[15:14] are set to 0x00, an interrupt is generated after the first byte is received. When the status register is read, the interrupt is deactivated. If the byte is not read from the FIFO, the interrupt is not regenerated. Another interrupt is not generated until another byte is received into the FIFO. The interrupt depends on the number of valid bytes in FIFO and not the number of bytes received. For example, when SPIxCON[15:14] are set to 0x01, an interrupt is generated after a byte is received if there are two or more bytes in the FIFO. The interrupt is not generated after every two bytes received. The interrupt is disabled if SPIxCON[12] is left high. Underrun/Overflow Interrupts SPIxSTA[7] and SPIxSTA[4] generate SPI interrupts. When a transfer starts with no data in the Tx FIFO, SPIxSTA[4] is set to indicate an underrun condition. This causes an interrupt. The interrupt (and status bit) are cleared on a read of the status register. This interrupt occurs irrespective of SPIxCON[15:14]. This interrupt is disabled if SPIxCON[13] is set. When data is received and the Rx FIFO is already full, SPIxSTA[7] is set to 1, indicating an overflow condition. This causes an interrupt. The interrupt (and status bit) are cleared on a read of the status register. This interrupt occurs irrespective of SPIxCON[15:14]. This interrupt is disabled if SPIxCON[12] is set. All interrupts are cleared either by a read of the status register or if SPIxCON[0] is deasserted. The Rx and Tx interrupts are also cleared if the relevant flush bits are asserted. Otherwise, the interrupts stay active even if the SPI is reconfigured. WIRE-OR’ED MODE (WOM) To prevent contention when the SPI is used in a multimaster or multislave system, the data output pins, MOSI and MISO, can be configured to behave as open-circuit drivers. An external pull-up resistor is required when this feature is selected. The WOM bit (SPIxCON[4]) controls the pad enable outputs for the data lines. Rev. D | Page 128 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide CSERR CONDITION The CSERR bit (SPIxSTA[12]) indicates if an erroneous deassertion of the CS signal has been detected before the completion of all the eight SCLK cycles. This bit generates an interrupt and is available in all modes of operation: slave, master, and during DMA transfers. If an interrupt occurs, generated by the CSERR bit (SPIxSTA[12]), then the SPI ENABLE bit (SPIxCON[0]) should be disabled and restarted to enable a clean recovery. This ensures that subsequent transfers are error free. The BCRST bit (SPIxDIV[7]) should be set at all times in both slave and master mode except when a midbyte stall in SPI communication is required. In this case, the CSERR flag is set but can be ignored. TRANSMIT DATA 8 BITS 5 BITS 3 BITS DATA 0 DATA 1 DATA 1 8 BITS DATA 2 SPIxDIV[7] BCRST = 0 IGNORE CSERR (SPIxSTA[12] ) 10464-027 CS Figure 28. SPI Communication: Midbyte Stall Note the SPI should only be reenabled when the CS signal is high. SPI1 DMA DMA operation is provided on the SPI1 channel only. Two DMA channels are dedicated to transmit and receive. The SPI1 DMA channels should be configured in the µDMA controller of the ARM Cortex-M3 processor. It is possible to enable a DMA request on one or two channels at the same time by setting the DMA request bits for receive or transmit in the SPI1DMA register. If only the DMA transmit request (SPI1DMA[1]) is enabled, the Rx FIFO overflows during a SPI transfer, unless the received data is read by user code, and an overflow interrupt is generated. To avoid generating overflow interrupts, the Rx FIFO flush bit should be set, or the SPI interrupt should be disabled in the NVIC. If only the DMA receive request (SPI1DMA[2]) is enabled, the Tx FIFO is underrun. To avoid an underrun interrupt, the SPI interrupt should be disabled. The SPI Tx (SPI1STA[5]) and SPI Rx (SPI1STA[6]) interrupts are not generated when using DMA. The SPI TXUR (SPI1STA[4]) and RXOF (SPI1STA[7]) interrupts are generated when using DMA. SPI1CON[15:14] are not used in transmit mode and should be set to 0x00 in receive mode. The ENABLE bit (SPI1DMA[0]) controls the start of a DMA transfer. DMA requests are only generated when ENABLE = 1. At the end of a DMA transfer, that is, when receiving a DMA SPI transfer interrupt, this bit needs to be cleared to prevent extra DMA requests to the µDMA controller. The data still present in the Tx FIFO is transmitted if in Tx mode. DMA Master Transmit Configuration The DMA SPI Tx channel should be configured. The NVIC should be configured to enable DMA Tx master interrupt (ISER0[23]). The SPI block should be configured as follow: pADI_SPI1->SPIDIV = SPI_serial_freq; where Fserial clock //Configures serial clock frequency = fuclk/(2*(1+SPIDIV)) pADI_SPI1->SPIDCON = 0x1043; mode, Rx FIFO flush enabled. //Enable SPI in master mode and transmit pADI_SPI1->SPIDMA = 0x3; //Enable DMA mode, enable Tx DMA request When all data present in the DMA buffer are transmitted, the DMA generates an interrupt. User code should disable the DMA request. Data is still in the Tx FIFO because the DMA request is generated each time there is free space in the Tx FIFO to always keep the FIFO full. User code can check how many bytes are still present in the FIFO in the FIFO status register. Rev. D | Page 129 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Example Code: Initialize SPI1 DMA Transmit Sequence void SPIDMAINIT(unsigned char ucMasterHSlaveL, unsigned int uiBaudrate) { pADI_GP0->GPCON = 0x55; // Configure P0.[3:0] as SPI pins // Slave only implemented if ( ucMasterHSlaveL == 0) { pADI_SPI1->SPICON = 0xB85; } else pADI_SPI1->SPICON = 0xBC7; pADI_SPI1->SPIDMA = 0x7; // Enable DMA + SPI Rx/Tx DMA pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller Dma_Init(); pADI_SPI1->SPICON |=0x3000; // Flush Rx/Tx FIFOs pADI_SPI1->SPICON &=0xCFFF; // Flush Rx/Tx FIFOs SPIDMAWRITE(uxSPITXData, 16); pADI_DMA->DMAENSET = 0x103; NVIC_EnableIRQ(DMA_SPI1_RX_IRQn); NVIC_EnableIRQ(DMA_SPI1_TX_IRQn); // Enable DMA SPI1_RX/SPI1Tx Interrupt } void SPIDMAWRITE(unsigned char *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here Desc.ctrlCfg.Bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; desc.ctrlcfg.bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; // Desc.srcEndPtr TX Primary Descriptor = (unsigned int)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = (unsigned int)&SPI1TX; Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_BYTE; Desc.ctrlCfg.Bits.dst_inc = INC_NO; *Dma_GetDescriptor(DMA_REQ_SPI1_TX,FALSE) = Desc; pADI_SPI1->SPITX = *pucTX_DMA; } Rev. D | Page 130 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide DMA Master Receive Configuration The SPI1CNT register is available in DMA receive master mode only. It sets the number of receive bytes required by the SPI master, or the number of clocks that the master needs to generate. When the required number of bytes is received, no more transfers are initiated. To initiate a DMA master receive transfer, a dummy read should be completed by user code. This dummy read should be added to the SPI1CNT number. The counter counting the bytes as they are received is reset either when SPI is disabled in SPI1CON[0] or if the SPI1CNT register is modified by user code. Performing SPI1 DMA Master Receive The DMA SPI Rx channel should be configured. The NVIC should be configured to enable DMA Rx master interrupt (ISER0[24]). The SPI block should be configured as follow: pADI_SPI1->SPIDIV = SPI_serial_freq; Fserial clock // Configures serial clock frequency where = fuclk / (2*(1+SPIDIV)) pADI_SPI1->SPICON = 0x2003; mode, 1 byte transfer. // Enable SPI in master mode and receive pADI_SPI1->SPIDMA = 0x5; // Enable DMA mode, enable Rx DMA request pADI_SPI1->SPICNT = XXX; // Number of bytes to transferred + 1 A =; // Dummy read The DMA transfer stops when the number of bytes has been transferred. Note that the DMA buffer must be of the same size as SPI1CNT to generate a DMA interrupt when the transfer is complete. Rev. D | Page 131 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Example Code: Initialize SPI1 DMA Receive Sequence void SPIDMAINIT(unsigned char ucMasterHSlaveL, unsigned int uiBaudrate) { pADI_GP0->GPCON = 0x55; // Configure P0.[3:0] as SPI pins // Slave only implemented if ( ucMasterHSlaveL == 0) { = 0xB85; } else pADI_SPI1->SPICON = 0xBC7; = 0x7; // Enable DMA + SPI Rx/Tx DMA pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller Dma_Init(); pADI_SPI1->SPICON |=0x3000; // Flush Rx/Tx FIFOs &=0xCFFF; // Flush Rx/Tx FIFOs SPIDMAREAD (uxSPIRXData, 16); pADI_DMA->DMAENSET = 0x103; // Enable DMA SPI1_RX/SPI1Tx Interrupt NVIC_EnableIRQ(DMA_SPI1_RX_IRQn); NVIC_EnableIRQ(DMA_SPI1_TX_IRQn); } void SPIDMAREAD(unsigned char *pucRX_DMA, unsigned int iNumRX) { DmaDesc Desc; // Common configuration of all the descriptors used here desc.ctrlcfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; // RX Primary Descriptor Desc.srcEndPtr = (unsigned int)&SPI1RX; Desc.destEndPtr = (unsigned int)(pucRX_DMA + iNumRX - 0x1); Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_NO; Desc.ctrlCfg.Bits.dst_inc = INC_BYTE; *Dma_GetDescriptor(DMA_REQ_SPI1_RX,FALSE) = Desc; } Rev. D | Page 132 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide SPI AND POWER-DOWN MODES In master mode, before entering power-down mode it is recommended to disable the SPI block in SPIxCON[0]. In slave mode, in either mode of operation, interrupt driven or DMA, the CS line level should be checked via the GPIO registers to ensure that the SPI is not communicating and that the SPI block is disabled while the CS line is high. At power-up, the SPI block can be reenabled. SPI MEMORY MAPPED REGISTERS The SPI0 interface consists of MMRs based at Address 0x40004000. The SPI1 interface consists of MMRs based at Address 0x40004400. Table 148. SPI Peripheral Memory Address Table (SPI0 Base Address 0x40004000, SPI1 Base Address 0x40004400) Offset 0x0000 0x0004 0x0008 0x000C 0x0010 0x0014 0x0018 1 Name 1 SPIxSTA SPIxRX SPIxTX SPIxDIV SPIxCON SPI1DMA SPIxCNT Description Status register 8-bit receive register 8-bit transmit register 16-bit bit rate selection register 16-bit configuration register DMA enable register (DMA provided on channel SPI1 only) 8-bit received byte count register Access R R W RW RW RW R Default 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 Where x is 0 or 1 for SPI0 or SPI1. SPI Status Registers Address: 0x40004000, Reset: 0x0000, Name: SPI0STA Address: 0x40004400, Reset: 0x0000, Name: SPI1STA Table 149. SPIxSTA Register Bit Descriptions Bits 15:13 12 Name Reserved CSERR 11 RXS 10:8 RXFSTA 7 RXOF 6 RX Description Reserved bits. Detected an abrupt CS deassertion. Set to 1 when the CS line is deasserted abruptly, even before the full byte of data was transmitted completely. This bit causes an interrupt. If the CSERR bit is set, it is recommended to clear the ENABLE bit in the SPIxCON register to ensure a clean recovery. Cleared to 0 when the SPISTA register is read. SPI Rx FIFO excess bytes present. Indicates when there are more bytes in the Rx FIFO than the Rx interrupt indicated. It depends on SPIxCON[15:14]. Cleared to 0 when the number of bytes in the FIFO is equal or less than the number in SPIxCON[15:14]. This bit is not cleared when the SPISTA register is read. This bit is not dependent on SPIxCON[6] and does not cause an interrupt. SPIxCON[15:14] RXS 00 RXS is set if there are two or more bytes in the Rx FIFO. 01 RXS is set if there are three or more bytes in the Rx FIFO. 10 RXS is set if there are four or more bytes in the Rx FIFO. 11 RXS is not set. SPI Rx FIFO status bits. 000: EMPTY: Set to 000 when Rx FIFO is empty. 001: ONEBYTE: Set to 001 when there is one valid byte in the FIFO. 010: TWOBYTES: Set to 010 when there are two valid bytes in the FIFO. 011: THREEBYTES: Set to 011 when there are three valid bytes in the FIFO. 100: FOURBYTES: Set to 100 when there are four valid bytes in the FIFO. SPI Rx FIFO overflow status bit (interrupt). Set to 1 if the Rx FIFO is already full when new data is loaded to the FIFO. This bit generates an interrupt except when RFLUSH is set in SPIxCON. Cleared to 0 when the SPIxSTA register is read. SPI Rx IRQ status bit. Not available in DMA mode. Set to 1 when a receive interrupt occurs. This bit is set when TIM in SPIxCON is cleared and the required number of bytes has been received. Cleared to 0 when the SPISTA register is read. Rev. D | Page 133 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 5 Name TX 4 TXUR 3:1 TXFSTA 0 IRQ UG-367 Description SPI Tx IRQ status bit. Not available in DMA mode. Set to 1 when a transmit interrupt occurs. This bit is set when TIM in SPIxCON is set and the required number of bytes has been transmitted. Cleared to 0 when the SPIxSTA register is read. SPI Tx FIFO underrun (interrupt). Set to 1 when a transmit is initiated without any valid data in the Tx FIFO. This bit generates an interrupt except when TFLUSH is set in SPIxCON. Cleared to 0 when the SPIxSTA register is read. Indicated how many valid bytes are in the SPI Tx FIFO. 000: EMPTY: Set to 000 when Tx FIFO is empty. 001: ONEBYTE: Set to 001 when there is one valid byte in the FIFO. 010: TWOBYTES: Set to 010 when there are two valid bytes in the FIFO. 011: THREEBYTES: Set to 011 when there are three valid bytes in the FIFO. 100: FOURBYTES: Set to 100 when there are four valid bytes in the FIFO. SPI interrupt status bit. Set to 1 when an SPI-based interrupt occurs. Cleared to 0 after reading SPIxSTA. SPI Receive Registers Address: 0x40004004, Reset: 0x0000, Name: SPI0RX Address: 0x40004404, Reset: 0x0000, Name: SPI1RX Table 150. SPIxRX Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description These bits are reserved and should be written 0 by user code. 8-bit receive register. A read of the Rx FIFO returns the next byte to be read from the FIFO. A read of the FIFO when it is empty returns 0s. SPI Transmit Registers Address: 0x40004008, Reset: 0x0000, Name: SPI0TX Address: 0x40004408, Reset: 0x0000, Name: SPI1TX Table 151. SPIxTX Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description These bits are reserved and should be written 0 by user code. 8-bit transmit register. A write to the Tx FIFO address space writes data to the next available location in the Tx FIFO. If the FIFO is full, the oldest byte of data in the FIFO is overwritten. A read from this address location return 0s. SPI Clock Divider Registers Address: 0x4000400C, Reset: 0x0000, Name: SPI0DIV Address: 0x4000440C, Reset: 0x0000, Name: SPI1DIV Table 152. SPIxDIV Register Bit Descriptions Bits 15:7 7 Name Reserved BCRST 6 Reserved Description These bits are reserved and should be written 0 by user code. Reset mode for CSERR. This bit is used to configure the expected behavior of the SPI Interface logic after an abrupt deassertion of CS. 0: SPI interface logic continues from where it stopped. The SPI can receive the remaining bits when CS is asserted, and user code must ignore the CSERR interrupt. 1: SPI interface logic is reset after a CSERR condition, and the user code is expected to clear the SPI ENABLE bit in SPIxCON. Reserved. Rev. D | Page 134 of 176 UG-367 Bits 5:0 ADuCM360/ADuCM361 Hardware User Guide Name DIV Description Factor used to divide UCLK to generate the serial clock: fSERIAL CLOCK = fUCLK/DIV/(2 × (1 + SPIDIV)). The maximum frequency for the serial clock is ½ UCLK/DIV. These bits are only used for master mode. In slave mode, there is no need to set the serial clock frequency. The SPI receives the clock from the master. For SPI0, UCLK/DIV is set by CLKCON1[2:0] and CLKDIS[0]. For SPI1, UCLK/DIV is set by CLKCON1[5:3] and CLKDIS[1]. Note that when setting the SPI serial clock, the FCLK frequency must be taken into account. The FCLK frequency can be no less than half the SPI serial clock frequency. For example, if the SPI clock divide register is set to 0x0000 (SCLK frequency = ½ UCLK/DIV frequency), the maximum that the CD bits in CLKCON0 can be set to is two (FCLK frequency = ¼ UCLK/DIV frequency). SPI Control Registers Address: 0x40004010, Reset: 0x0000, Name: SPI0CON Address: 0x40004410, Reset: 0x0000, Name: SPI1CON Table 153. SPIxCON Register Bit Descriptions Bits 15:14 Name MOD 13 TFLUSH 12 RFLUSH 11 CON 10 LOOPBACK 9 OEN 8 RXOF Description SPI IRQ mode bits. If TIM is set, these bits are configured when the Tx/Rx interrupts occur in a transfer. If SPI1 DMA mode is used, these bits must be 00. MOD Function 00 TX1RX1: Tx interrupt occurs when one byte has been transferred; Rx interrupt occurs when one or more bytes have been received into the FIFO. 01 TX2RX2: Tx interrupt occurs when two bytes have been transferred; Rx interrupt occurs when two or more bytes have been received into the FIFO. 10 TX3RX3: Tx interrupt occurs when three bytes have been transferred; Rx interrupt occurs when three or more bytes have been received into the FIFO. 11 TX4RX4: Tx interrupt occurs when four bytes have been transferred; Rx interrupt occurs when the Rx FIFO is full, or when four bytes are present. SPI Tx FIFO flush enable bit. 0: Disable Tx FIFO flushing. 1: Flush the Tx FIFO. This bit does not clear itself and should be toggled if a single flush is required. If this bit is left high, then either the last transmitted value or 0x00 is transmitted, depending on the ZEN bit (SPIxCON[7]). Any writes to the Tx FIFO are ignored while this bit is set. SPI Rx FIFO flush enable bit. If this bit is set, all incoming data is ignored and no interrupts are generated. If this bit is cleared and TIM = 0, a read of the Rx FIFO initiates a transfer. 0: Disable Rx FIFO flushing. 1: Flush the Rx FIFO. This bit does not clear itself and should be toggled if a single flush is required. Continuous transfer enable. 0: Disable continuous transfer. Each transfer consists of a single 8-bit serial transfer. If valid data exists in the SPITX register, a new transfer is initiated after a stall period of one serial clock cycle. The CS line is deactivated for this one serial clock cycle. 1: Enable continuous transfer. In master mode, the transfer continues until no valid data is available in the Tx register. CS is asserted and remains asserted for the duration of each 8-bit serial transfer until Tx is empty. Loopback enable bit. 0: Normal mode. 1: Connect MISO to MOSI; therefore, data transmitted from the Tx register is looped back to the Rx register. The MASEN bit (SPIxCON [1]) must be set for loopback mode to work properly. Slave MISO output enable bit. 0: Disable the output driver on the MISO pin. The MISO pin is open-circuit when this bit is clear. 1: MISO to operate as normal. SPI Rx overflow overwrite enable. 0: The new serial byte received is discarded. 1: The valid data in the Rx register is overwritten by the new serial byte received. Rev. D | Page 135 of 176 ADuCM360/ADuCM361 Hardware User Guide Bits 7 Name ZEN 6 TIM 5 LSB 4 WOM 3 CPOL 2 CPHA 1 MASEN 0 ENABLE UG-367 Description SPI transmit 0s when Tx FIFO is empty. 0: Transmit the last transmitted value when there is no valid data in the Tx FIFO. 1: Transmit 0x00 when there is no valid data in the Tx FIFO. SPI transfer and interrupt mode. 0: RXRD: Initiate transfer with a read of the SPI Rx register. The read must be done while the SPI interface is idle mode to initiate a transfer when TIM = 0. Interrupt only occurs when Rx is full. 1: TXWR: Initiate transfer with a write to the SPI Tx register. Interrupt only occurs when Tx is empty. LSB first transfer enable bit. 0: MSB is transmitted first. 1: LSB is transmitted first. SPI wired OR mode enable bit. 0: Normal output levels. 1: Open-circuit data output enable. In master mode, When a 0 is being transmitted on the MOSI pin, the output driver is enabled. When a 1 is being transmitted on the MOSI pin, the output driver is disabled and an external pullup resister is required to pull the pin high. The typical resistor value is 1 kΩ. In slave mode, When a 0 is being transmitted on the MISO pin, the output driver is enabled. When a 1 is being transmitted on the MISO pin, the output driver is disabled and an external pullup resister is required to pull the pin high. The typical resistor value is 1 kΩ. Serial clock polarity mode bit. 0: Serial clock idles low. 1: Serial clock idles high. Serial clock phase mode bit. 0: Serial clock pulses at the middle of the first data bit transfer. 1: Serial clock pulses at the start of the first data bit. Master mode enable bit 0: Enable slave mode. 1: Enable master mode. SPI enable bit. 0: Disable the SPI. Clearing this bit also resets all the FIFO related logic and the output bit shift counter to enable a clean start. 1: Enable the SPI. Note that • • • • When changing the configuration, care must be taken not to change it during a data transfer to avoid corrupting the data. It is recommended to change configuration when the module is disabled (disable the SPI, ENABLE = 0) and then to reconfigure and reenable the SPI (ENABLE = 1). When reconfiguring from slave mode to master mode, or vice versa, both FIFOs must be empty. When using DMA, MOD (SPIxCON[15:14]) settings become irrelevant. Although the interrupt generation logic is independent of MOD (SPIxCON[15:14]), the master transfer initiation logic still depends on MOD. However, the DMA service happens only in a byte-by-byte basis and not in bursts. Therefore, only the value of MOD = 0 should be used in the case of DMA. Rev. D | Page 136 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide SPI1 DMA Enable Registers (SPI1 Only) Address: 0x40004414, Reset: 0x0000, Name: SPI1DMA Table 154. SPI1DMA Register Bit Descriptions Bits 15:3 2 Name Reserved IENRXDMA 1 IENTXDMA 0 ENABLE Description These bits are reserved and should be written 0 by user code. 0: Cleared by default. 1: Enable receive DMA request. 0: Cleared by default. 1: Enable transmit DMA request. 0: Cleared by user code at the end of DMA transfer. 1: Start a DMA transfer This bit needs to be cleared to prevent extra DMA request to the µDMA controller. Note that • • • • DMA requests are not generated when DMA ENABLE = 0 (SPI1DMA[0]). At the end of a DMA transfer, this bit must be reset to prevent extra DMA requests to the µDMA controller. When ENABLE (SPI1DMA[0]) = 1, Tx (SPI1STA[5]) and Rx (SPI1STA[6]) interrupts are automatically disabled. However, the TXUR (SPI1STA[4]) and RXOF (SPI1STA[7]) interrupts are still available to indicate a Tx FIFO underrun and a Rx FIFO overflow, respectively. When using SPI1 DMA mode, SPI1CON[15:14] must be cleared to 0x00. SPI Received Byte Count Registers Address: 0x40004018, Reset: 0x0000, Name: SPI0CNT Address: 0x40004418, Reset: 0x0000, Name: SPI1CNT Table 155. SPIxCNT Register Bit Descriptions Bits 15:8 7:0 Name Reserved VALUE Description These bits are reserved and should be written 0 by user code. Number of Rx bytes required in master mode. Disabled in Tx mode. When the required number of bytes is received, no more transfers are initiated. The counter counting the bytes received is reset if the SPI is disabled or if SPIxCON[0] or SPI1CNT is updated. Rev. D | Page 137 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 UART SERIAL INTERFACE UART FEATURES • • Industry standard, 16450 UART peripheral Support for DMA UART OVERVIEW The UART peripheral is a full-duplex universal asynchronous receiver/transmitter (UART), compatible with the industry standard, 16450. The UART is responsible for converting data between serial and parallel formats. The serial communication follows an asynchronous protocol, supporting various word length, stop bits, and parity generation options. This UART also contains modem control and interrupt handling hardware. The UART features a fractional divider that facilitates high accuracy baud rate generation. Interrupts can be generated from a number of unique events, such as full/empty data buffer, transfer error detection, and break detection. UART OPERATION Serial Communications An asynchronous serial communication protocol is followed with these options: • • • • • Five to eight data bits One, two, or 1½ stop bits None, even, or odd parity Baud rate = UCLK/DIV ÷ (2 × 16 × COMDIV) ÷ (M + N ÷ 2048), where COMDIV = 1 to 65536, M = 1 to 3, and N = 0 to 2047 Where UCLK/DIV is the divided 16 MHz clock as configured via CLKCON1 and CLSYSDIV All data-words require a start bit and at least one stop bit. This creates a range from seven bits to 12 bits for each word. Transmit operation is initiated by writing to the transmit holding register (COMTX). After a synchronization delay, the data is moved to the internal transmit shift register (TSR), where it is shifted out at a baud (bit) rate equal to UCLK ÷ (2 × 16 × COMDIV) ÷ (M + N ÷ 2048) with start, stop, and parity bits appended as required. All data-words begin with a low going start bit. The transfer of COMTX to the TSR causes the transmit register empty status flag to be set. Receive operation uses the same data format as the transmit configuration except for the number of stop bits, which is always one. After detection of the start bit, the received word is shifted in the internal receive shift register (RSR). After the appropriate number of bits (including stop bits) is received, the data and any status is updated, and the RSR is transferred to the receive buffer register (COMRX). The receive buffer register full status flag is updated upon the transfer of the received word to this buffer and the appropriate synchronization delay. A sampling clock equal to 16 times the baud rate is used to sample the data as close to the midpoint of the bit as possible. A receive filter is also present that removes spurious pulses of less than two times the sampling clock period. Note that data is transmitted and received least significant bit first. This is often not the assumed case by the user. However, it is standard for the protocol. For power saving purposes, it is possible to reduce the clock to the UART block via the CLKCON1 register (CLKCON1[11:9] and CLKDIS[3]). By default, the clock to the UART is disabled (CLKDIS[3] = 1). PROGRAMMED I/O MODE In this mode, the software is responsible for moving data to and from the UART. This is typically accomplished by interrupt service routines that respond to the transmit and receive interrupts by either reading or writing data as appropriate. This mode puts certain constraints on the software itself in that the software must respond within a certain time to prevent overflow errors from occurring in the receive channel. Polling the status flag is processor intensive and not typically used unless the system can tolerate the overhead. Interrupts can be disabled using the COMIEN register. Writing the COMTX when it is not empty or reading the COMRX when it is not full produces incorrect results and should not be done. In the former case, the COMTX is overwritten by the new word, and the previous word is never transmitted. In the latter case, the previously received word is read again. Both of these errors must be avoided in software by correctly using either interrupts or the status register polling. These errors are not detected in hardware. Rev. D | Page 138 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide ENABLE/DISABLE BIT Before the ADuCM360/ADuCM361 enters power-down mode, it is recommended to disable the serial interfaces. A bit is provided in the UART control register to disable the UART serial peripheral. This bit disables the clock to the peripheral. When setting this bit, care must be taken in software that no data is being transmitted or received. If set during communication, the data transfer does not complete; the receive or transmit register contains only part of the data. It is also recommended to set CLKCON1[11:9] = 111 to minimize power consumption in power-down mode. INTERRUPTS The UART peripheral has one interrupt output to the interrupt controller for both Rx and Tx interrupts. The COMIIR register must be read by software to determine the cause of the interrupt. Note that in DMA mode the break and modem status interrupts are not available. In I/O mode, when receiving, the interrupt is generated for the following cases: • • • • • • • COMRX full Receive overflow error Receive parity error Receive framing error Break interrupt (UART RxD held low) Modem status interrupt (changes to CTS) COMTX empty BUFFER REQUIREMENTS This UART is double buffered (holding register and shift register). DMA MODE In this mode, user code does not move data to and from the UART. DMA request signals going to the external DMA block indicate that the UART is ready to transmit or receive data. These DMA request signals can be disabled in the COMIEN register. In DMA mode, modem functionality is not available. Example Code to Set Up UART Receive DMA Channel void UARTRXDMAINIT(void) { pADI_UART->COMCON = 0; pADI_UART->COMIEN = 0x20; // Enable DMA Tx transfers pADI_UART->COMLCR = COMLCR_WLS_8BITS + COMLCR_STOP; // 8-data bits + 1 Stop bit. pADI_UART->COMDIV = 0x11; // Set UART Baud rate pADI_UART->COMDIV = 0x11; // COMDIV = 17 pADI_UART->COMFBR = COMFBR_ENABLE_EN + 0x1883; // DIVM = 3, DIVN = 131. |= 0x9000; // Configure P0.7/P0.6 for UART Dma_Init(); UARTDMAREAD(uxUARTRXData, 4); pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x8; // Enable UART_RX_DMA Channel // UART Rx DMA interrupt sources M360 } void UARTDMAREAD(unsigned char *pucRX_DMA, unsigned int iNumRX) Rev. D | Page 139 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 { DmaDesc Desc; // Common configuration of all the descriptors used here Desc.ctrlCfg.bits.cycle_ctrl = cyclectrl_basic; desc.ctrlcfg.bits.next_useburst = 0x0; desc.ctrlcfg.bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; // RX Primary Descriptor Desc.srcEndPtr = (unsigned int)&COMRX; Desc.destEndPtr = (unsigned int)(pucRX_DMA + iNumRX - 0x1); Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_NO; Desc.ctrlCfg.Bits.dst_inc = INC_BYTE; *Dma_GetDescriptor(DMA_REQ_UART_RX,FALSE) = Desc; } // UART DMA Rx IRQ handler void DMA_UART_RX_Int_Handler() { NVIC_DisableIRQ(DMA_UART_RX_IRQn); // Clear Interrupt source } Example Code to Set Up UART Transmit DMA Channel void UARTTXDMAINIT(void) { pADI_UART->COMCON = 0; pADI_UART->COMIEN = 0x10; // Enable DMA Tx transfers pADI_UART->COMLCR = COMLCR_WLS_8BITS + COMLCR_STOP; // 8-data bits + 1 Stop bit. pADI_UART->COMDIV = 0x11; // Set UART Baud rate pADI_UART->COMFBR = COMFBR_ENABLE_EN + 0x1883; // DIVM = 3, DIVN = 131. pADI_GP0->GPCON |= 0x3C; // Configure P0.1/P0.2 for UART Dma_Init(); UARTDMAWRITE(uxUARTTXData, 16); pADI_DMA->DMACFG = 0x1; // Enable DMA mode in DMA controller pADI_DMA->DMAENSET = 0x4; // Enable UART_TX_DMA Channel NVIC_EnableIRQ(DMA_UART_TX_IRQn); M360 // UART Tx DMA interrupt sources - } void UARTDMAWRITE(unsigned char *pucTX_DMA, unsigned int iNumRX) { DmaDesc Desc; Rev. D | Page 140 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide // Common configuration of all the descriptors used here Desc.ctrlCfg.Bits.cycle_ctrl = CYCLECTRL_BASIC; Desc.ctrlCfg.Bits.next_useburst = 0x1; Desc.ctrlCfg.Bits.r_power = 0; Desc.ctrlCfg.Bits.src_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.dst_prot_ctrl = 0x0; Desc.ctrlCfg.Bits.src_size = SRCSIZE_BYTE; Desc.ctrlCfg.Bits.dst_size = DSTSIZE_BYTE; //CYCLECTRL_BASIC; // Desc.srcEndPtr TX Primary Descriptor = (unsigned int)(pucTX_DMA + iNumRX - 0x1); Desc.destEndPtr = (unsigned int)&COMTX; Desc.ctrlCfg.Bits.n_minus_1 = iNumRX - 0x1; Desc.ctrlCfg.Bits.src_inc = INC_BYTE; Desc.ctrlCfg.Bits.dst_inc = INC_NO; *Dma_GetDescriptor(DMA_REQ_UART_TX,FALSE) = Desc; } // UART DMA Tx IRQ handler void DMA_UART_TX_Int_Handler() { NVIC_DisableIRQ(DMA_UART_TX_IRQn); // Clear Interrupt source } UART MEMORY MAPPED REGISTERS The UART interface consists of MMRs based at Address 0x40005000. Table 156. UART Interface Memory Address Table (Base Address: 0x40005000) Offset 0x0000 0x0000 0x0004 0x0008 0x000C 0x0010 0x0014 0x0018 0x0024 0x0028 0x0030 Name COMTX COMRX COMIEN COMIIR COMLCR COMMCR COMLSR COMMSR COMFBR COMDIV COMCON Description Transmit holding register Receive buffer register Interrupt enable register Interrupt identification register Line control register Modem control register Line status register Modem status register Fractional baud rate register Baud rate divider register UART control register Rev. D | Page 141 of 176 Access W R RW R RW RW R R RW RW RW Default 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 ADuCM360/ADuCM361 Hardware User Guide UG-367 UART Transmit and Receive Registers Address: 0x40005000, Reset: 0x0000, Name: COMRX/COMTX COMRX and COMTX share the same address while they are implemented as different registers. If these registers are written to, the user accesses the transmit holding register (COMTX). If these registers are read from, the user accesses the receive buffer register (COMRX). COMRX This is an 8-bit register from which the user can read received data. If the ERBFI bit is set in the COMIEN register, an interrupt is generated when this register is fully loaded with the received data via serial input port. Note that when the user sets the ERBFI bit while COMRX is already full, an interrupt is generated immediately. COMTX This is an 8-bit register to which the user can write the data to be sent. If the ETBEI bit is set in the COMIEN register, an interrupt is generated when COMTX is empty. Note that if the user sets ETBEI while COMTX is already empty, an interrupt is generated immediately. Table 157. COMRX/COMTX Register Bit Descriptions Bits 7:0 Name VALUE Description Receive buffer register/transmit holding register. UART Interrupt Enable Register Address: 0x40005004, Reset: 0x0000, Name: COMIEN COMIEN is the interrupt enable register that is used to configure which interrupt source generates the interrupt. Only the lowest four bits in this register enable interrupts. Bit 4 and Bit 5 enable UART DMA signals. The UART DMA channel and interrupt must be configured in the DMA block. Table 158. COMIEN Register Bit Descriptions Bits 7:6 5 Name Reserved EDMAR 4 EDMAT 3 EDSSI 2 ELSI 1 ETBEI 0 ERBFI Description Reserved. DMA requests in transmit mode. 0: Disable. 1: Enable. DMA requests in receive mode. 0: Disable. 1: Enable. Modem status interrupt. (This interrupt is generated when any bit of COMMSR[3:0] is set.) 0: Disable. 1: Enable. Rx status interrupt. (This interrupt is generated when any bit of COMLSR[4:1] is set.) 0: Disable. 1: Enable. Transmit buffer empty interrupt. 0: Disable. 1: Enable. Receive buffer full interrupt. 0: Disable. 1: Enable. Rev. D | Page 142 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide UART Interrupt Identification Register Address: 0x40005008, Reset: 0x0000, Name: COMIIR Table 159. COMIIR Register Bit Descriptions Bits 7:3 2:1 Name Reserved STA 0 NINT Description Reserved. Status bits. Status bits are used to encode the interrupt status when NIRQ is low. See Table 160 for more details. Interrupt flag. 0: Indicates any of the following: receive buffer full, transmit buffer empty, line status, or modem status interrupt occurred. 1: There is no interrupt (default). Table 160. Interrupt Identification Table Bits[2:1], STA 00 11 10 01 00 Bit 0, NIRQ 1 0 0 0 0 Priority N/A 1 2 3 4 Definition No interrupt Receive line status interrupt Receive buffer full interrupt Transmit buffer empty interrupt Modem status interrupt Clearing Operation N/A Read COMLSR register Read COMRX register Write data to COMTX or read COMIIR Read COMMSR register UART Line Control Register Address: 0x4000500C, Reset: 0x0000, Name: COMLCR Table 161. COMLCR Register Bit Descriptions Bits 7 6 Name Reserved BRK 5 SP 4 EPS 3 PEN 2 STOP 1:0 WLS Description Reserved. Set Break. 1: Force TxD to 0. 0: Operate in normal mode. Stick parity. 0: Parity is not forced based on EPS and PEN values. 1: To force parity to defined values based on EPS and PEN values as follows: EPS PEN Function When SP = 1 1 1 Parity forced to 1. 0 1 Parity forced to 0. X 0 No parity transmitted. Even parity select bit. 0: Odd parity. 1: Even parity. Parity enable bit. 0: No parity transmission or checking. 1: transmit and check the parity bit. Stop bit. 0: Generate one stop bit in the transmitted data. 1: Transmit 1.5 stop bits if the word length is 5 bits, or 2 stop bits if the word length is 6, 7, or 8 bits. The receiver checks the first stop bit only, regardless of the number of stop bits selected. Word length select bits. 00: 5 bits. 01: 6 bits. 10: 7 bits. 11: 8 bits. Rev. D | Page 143 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 UART Modem Control Register Address: 0x40005010, Reset: 0x0000, Name: COMMCR Table 162. COMMCR Register Bit Descriptions Bits 7:5 4 Name Reserved LOOPBACK 3 2 1 OUT1 OUT2 RTS 0 DTR Description Reserved. Loop back. 0: Normal mode. 1: Enable loopback mode. In loopback mode, the UART TXD is forced high. The modem signals are also directly connected to the status inputs (RTS to CTS). Reserved. Reserved. Request to send. 0: Force the RTS output to 1. 1: Force the RTS output to 0. Data terminal ready. 0: Force the DTR output to 1. 1: Force the DTR output to 0. UART Line Status Register Address: 0x40005014, Reset: 0x0000, Name: COMLSR Table 163. COMLSR Register Bit Descriptions Bits 7 6 Name Reserved TEMT 5 THRE 4 BI 3 FE 2 PE 1 OE 0 DR Description Reserved. COMTX and shift register empty status bit. 1: If COMTX and the shift register are empty, this bit indicates that the data has been transmitted; that is, it is no longer present in the shift register (default). Cleared to 0 when writing to COMTX. COMTX empty status bit. 1: If COMTX is empty, COMTX can be written as soon as this bit is set; the previous data may not have been transmitted yet and can still be present in the shift register (default). Cleared to 0 when writing to COMTX. Break indicator. 1: When UART RXD is held low for more than the maximum word length. Cleared to 0 automatically. Framing error. 1: When the stop bit is invalid. Cleared to 0 automatically. Parity error. 1: When a parity error occurs. Cleared to 0 automatically. Overrun error. 1: Automatically if data is overwritten before being read. Cleared to 0 automatically. Data ready. 1: Automatically when COMRX is full. Cleared to 0 by reading COMRX. Rev. D | Page 144 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide UART Modem Status Register Address: 0x40005018, Reset: 0x0000, Name: COMMSR Table 164. COMMSR Register Bit Descriptions Bits 7 Name DCD 6 RI 5 DSR 4 CTS 3 DDCD 2 TERI 1 DDSR 0 DCTS Description Data carrier detect. Set to 1 if DCD is currently logic low. Cleared to 0 if DCD is currently logic high. Ring indicator. Set to 1 if RI is currently logic low. Cleared to 0 if RI is currently logic high. Data set ready. Set to 1 if DSR is currently logic low. Cleared to 0 if DSR is currently logic high. Clear to send. Set to 1 if CTS is currently logic low. Cleared to 0 if CTS is currently logic high. Delta DCD. Set to 1 if DCD changed state since COMMSR was last read. Cleared to 0 if DCD did not change state since COMMSR was last read. Cleared by reading COMMSR. Trailing edge RI. Set to 1 if NRI changed from 0 to 1 since COMMSR was last read. Cleared by reading COMMSR. Delta DSR. Set to 1 if DSR changed state since COMMSR was last read. Cleared by reading COMMSR. Delta CTS. Set to 1 if CTS changed state since COMMSR was last read. Cleared by reading COMMSR. UART Fractional Baud Rate Divider Register Address: 0x40005024, Reset: 0x0000, Name: COMFBR Table 165. COMFBR Register Bit Descriptions Bits 15 Name ENABLE Description Fractional baud rate generator enable bit for more accurate baud rate generation. The generating of a fractional baud rate can be described by the following formula, where UCLK/DIV is the divided 16 MHz clock as configured via CLKCON1 and CLKSYSDIV. CLKDIS[3] should be set to 0 to enable the clock. The final baud rate of UART operation is shown in Figure 29. UCLK / DIV 2 × ( M + N / 2048) Baud Rate = 16 × COMDIV 14:13 12:11 10:0 Reserved DIVM DIVN 1: Enabled. 0: Disabled. Reserved. Fractional baud rate M divide bits (1 to 3). This bit should not be 0. Fractional baud rate N divide bits (0 to 2047). Rev. D | Page 145 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Table 166. Baud Rate Examples—UCLK/DIV = 16 MHz for All Examples Baud Rates 9600 19,200 38,400 57,600 115,200 230,400 460,800 COMDIV 17 8 4 8 2 2 1 DIVM 3 3 3 1 2 1 1 DIVN 131 523 523 174 348 174 174 Actual 9599.25 19,199.04 38,398.08 57,605.76 115,211.5 230,423 460,846.1 % Error −0.0078% −0.0050% −0.0050% +0.0100% +0.0100% +0.0100% +0.0100% UART Divider Register Address: 0x40005028, Reset: 0x0000, Name: COMDIV The baud rate divider register is a 16-bit register used to generate the baud rate for UART data transfer. The baud rate without fractional divider is a divided down version of the master clock, as shown in Figure 29. Baud Rate = UCLK/DIV ÷ (2 × 16 × COMDIV) ÷ (M + N ÷ 2048) where UCLK/DIV is the divided 16 MHz clock as configured via CLKCON1[11:9] and CLKDIS[3]. COMFBR[15] UCLK ÷2 UART 10464-028 ÷16DIV ÷ (M + N ÷ 2048) Figure 29. Baud Rate Generation Table 167. COMDIV Register Bit Descriptions Bits 15:0 Name VALUE Description Set the baud rate. The COMDIV register should not be 0. UART Control Register Address: 0x40005030, Reset: 0x0000, Name: COMCON Table 168. COMCON Register Bit Descriptions Bits 8:1 0 Name Reserved DISABLE Description Reserved. UART disable bit. It is recommended to disable the UART before entering power-down mode. 0: Enable the UART. 1: Disable the UART. This resets the state machine and internal counters, but the contents of the MMRs remain unchanged. Rev. D | Page 146 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide GENERAL-PURPOSE TIMERS GENERAL-PURPOSE TIMERS FEATURES • • • • Two identical, general-purpose, 16-bit count-up/count-down timers • Timer0 and Timer1 Clocked from four different clock sources (can be scaled down using a prescalar of 1, 16, 256, or 32,768) • 16 MHz system clock or 8 MHz system clock if CLKSYSDIV = 1 (UCLK) • Peripheral clock (PCLK) • 32 kHz internal oscillator (LFOSC) • 32 kHz external crystal (LFXTAL) Two modes • Free running • Periodic Capture events feature • Capability to capture 15 different events on each timer GENERAL-PURPOSE TIMERS BLOCK DIAGRAM 16-BIT LOAD CLOCK SOURCES UCLK PRESCALER 1, 16, 256 OR 32,768 PCLK LFOSC 16-BIT UP/DOWN COUNTER TIMER INTERRUPT LFXTAL EVENT SELECT CAPTURE 10464-029 TIMER VALUE Figure 30. General-Purpose Timers Block Diagram GENERAL-PURPOSE TIMERS OVERVIEW Timer0 and Timer1 are two identical general-purpose, 16-bit count-up/count-down timers. They can be clocked from four different clock sources: UCLK, PCLK, 32 kHz internal oscillator (LFOSC), and 32 kHz external crystal (LFXTAL). This clock source can be scaled down using a prescalar of 1, 16, 256, or 32,768. The timers can be either free running or periodic. • • In free running mode, the counter decrements from full scale to zero scale or increments from zero scale to full scale and then restarts. In periodic mode, the counter decrements or increments from the value in the load register (TxLD MMR) until zero scale or full scale is reached and then restarts at the value stored in the load register. The value of a counter can be read at any time by accessing its value register (TxVAL). This register is synchronous to UCLK. Therefore, when a timer is clocked from a clock other than UCLK, TxVAL reflects the latest timer value. The TxCON register selects the timer mode, configures the clock source, selects count-up/count-down, starts the counter, and controls the event capture function. An interrupt signal is generated each time the value of the counter reaches 0 when counting down, or each time the counter value reaches the maximum value when counting up. An IRQ can be cleared by writing 1 to the time clear interrupt register of that particular timer (TxCLRI). In addition, Timer0 and Timer1 have a capture register (TxCAP) that is triggered by a selected IRQ source initial assertion. When triggered, the current timer value is copied to TxCAP, and the timer continues to run. This feature can be used to determine the assertion of an event with increased accuracy. Each timer can capture 16 different events, listed in Table 169. GENERAL-PURPOSE TIMERS OPERATION Free Running Mode In free running mode, the timer is started by setting the enable bit (TxCON[4]) to 1 and the MOD bit (TxCON[3]) to 0. The timer increments from zero scale/full scale to full scale/zero scale if counting up/down. Full scale is 216 – 1 or 0xFFFF in binary format. On Rev. D | Page 147 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 reaching full scale (or zero scale), a timeout interrupt occurs and TxSTA[0] is set. To clear it, user code must write 1 to TxCLRI[0]. If TxCON[7] is set, the timer keeps counting and reloads when the TxCLRI register is written. Periodic Mode In periodic mode, the initial TxLD value should be loaded before starting the timer by setting the enable bit (TxCON[4]) to 1. The timer value either increments from the value in TxLD to full scale or decrements from the value in TxLD to zero scale, depending on the TxCON[2] settings (count up/down). Upon reaching full scale or zero scale, the timer generates an interrupt. The TxLD is reloaded into TxVAL, and the timer continues counting up or down. The timer should be disabled prior to changing the TxCON or TxLD register. If the TxLD register is changed while the timer is being loaded, undefined results can occur. By default, the counter is reloaded automatically when generating the interrupt signal. If TxCON[7] is set to 1, the counter is also reloaded when user code writes TxCLRI. This allows user changes to the TxLD to take effect immediately and not on the next timeout. The timer interval is calculated as follows: If the timer is set to count down, then Interval = (TxLD × Prescaler)/Source Clock For example, if TxLD = 0x100, prescaler = 4, and clock source = UCLK, the interval is 64 μs (where UCLK = 16 MHz). If the timer is set to count up, then Interval = ((Full Scale − TxLD) × Prescaler)/Source Clock Asynchronous Clock Source Timers are started by setting the enable bit (TxCON[4]) to 1 in the control register of the corresponding timer. However, when the timer clock source is LFXTAL or LFOSC, some precautions must be taken: • • The control register (TxCON) should not be written if TxSTA[6] is set. Therefore, TxSTA should be read prior to configuring the control register (TxCON). When TxSTA[6] is cleared, the register can be modified. This ensures that synchronizing the timer control between the processor and timer clock domains is complete. After clearing the interrupt in TxCLRI, it must be ensured that the register write has fully completed before returning from the interrupt handler. Use the data synchronization barrier (DSB) instruction if necessary and check that TxSTA[7] = 0. __asm void asmDSB() { nop DSB BX LR } • The value of a counter can be read at any time by accessing its value register (TxVAL). In an asynchronous configuration, TxVAL should always be read twice. If the two readings are different, it should be read a third time to get the correct value. At any time, TxVAL contains a valid value to be read, synchronized to PCLK. TxSTA should be read prior to writing to any timer registers following the set or clear of the enable bit. When TxSTA[7] is cleared, registers can be modified. This ensures that the timer has completed synchronization between the processor and timer clock domains. The typical synchronization time is two timer clock periods. At any time, TxVAL contains a valid value to be read, synchronized to the PCLK clock. The TxCON register enables the counter, selects the mode, selects the prescale value, and controls the event capture function. Note that CLKDIS[6] must be cleared to 0 to enable the system clock to Timer1. This bit must be cleared to 0 to enable Timer 1. Similarly, CLKDIS[5] must be cleared to 0 to enable the system clock to Timer0. This bit must be cleared to 0 to enable Timer0. Capture Event Function There are 30 interrupt events that can be captured by the general-purpose timers. These events are divided into two groups of 16 inputs for each of the timers, as shown in Table 169. Any one of the 16 events associated with a general-purpose timer can cause a capture of the 16-bit TxVAL register into the 16-bit TxCAP register. TxCON has a 4-bit field selecting which of the 16 events to capture. When the selected interrupt event occurs, the TxVAL register is copied into the TxCAP register. TxSTA[1] is set, indicating that a capture event is pending. The bit is cleared by writing 1 to TxCLRI[1]. The TxCAP register also holds its value and cannot be overwritten until a 1 is written to TxCLRI[1]. Rev. D | Page 148 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Table 169. Timer Capture Event Event Select Bits (TxCON[11:8]) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Timer0 Capture Source Wake-up timer External Interrupt 0 External Interrupt 1 External Interrupt 2 External Interrupt 3 External Interrupt 4 External Interrupt 5 External Interrupt 6 External Interrupt 7 Watchdog timer Timer1 ADC0 (ADuCM360)/reserved (ADuCM361) ADC1 Step detection DMA done—any of the DMA channels Flash controller Timer1 Capture Source UART Timer0 SPI0 SPI1 I2C slave I2C master DMA error DMA done, any of the DMA channels External Interrupt 1 External Interrupt 2 External Interrupt 3 PWMTRIP PWM0 PWM1 PWM2 Reserved. GENERAL-PURPOSE TIMERS MEMORY MAPPED REGISTERS General-Purpose Timer0 Register Map Table 170. General-Purpose Timer0 Memory Mapped Registers Address Table (Timer0 Base Address: 0x40000000) Offset 0x0000 0x0004 0x0008 0x000C 0x0010 0x001C Name T0LD T0VAL T0CON T0CLRI T0CAP T0STA Description 16-bit load value 16-bit timer value, read only Control register Clear interrupt register Capture register Status register Access RW R RW RW R R Default 0x0000 0x0000 0x000A 0x0000 0x0000 0x0000 General-Purpose Timer1 Register Map Table 171. General-Purpose Timer1 Memory Mapped Registers Address Table (Timer1 Base Address: 0x40000400) Offset 0x0000 0x0004 0x0008 0x000C 0x0010 0x001C Name T1LD T1VAL T1CON T1CLRI T1CAP T1STA Description 16-bit load value 16-bit timer value, read only Control register Clear interrupt register Capture register Status register Rev. D | Page 149 of 176 Access RW R RW RW R R Default 0x0000 0x0000 0x000A 0x0000 0x0000 0x0000 ADuCM360/ADuCM361 Hardware User Guide UG-367 General-Purpose Timers Load Registers Address: 0x40000000, Reset: 0x0000, Name: T0LD Address: 0x40000400, Reset: 0x0000, Name: T1LD Table 172. T0LD and T1LD Register Bit Descriptions Bits 15:0 Name VALUE Description Load value, 0 by default. General-Purpose Timers Value Registers Address: 0x40000004, Reset: 0x0000, Name: T0VAL Address: 0x40000404, Reset: 0x0000, Name: T1VAL Table 173. T0VAL and T1VAL Register Bit Descriptions Bits 15:0 Name VALUE Description Current counter value, read only. General-Purpose Timers Control Registers Address: 0x40000008, Reset: 0x000A, Name: T0CON Address: 0x40000408, Reset: 0x000A, Name: T1CON The TxCON registers should not be written if the corresponding TxSTA[6] or TxSTA[7] is set. Note that the timer clock must be four times slower than FCLK (the system clock); therefore, care must be taken when selecting the prescaler at different CD values. Table 174. T0CON and T1CON Register Bit Descriptions Bits 15:13 12 Name Reserved EVENTEN 11:8 7 EVENT RLD 6:5 CLK 4 ENABLE 3 MOD 2 UP 1:0 PRE Description Reserved. These bits should be written 0. Event select bit. 0: Disable time capture of an event. 1: Enable time capture of an event. Event select range (0 to 15). The events are described in Table 169. Reload control bit for periodic mode. 0: Reload only on a timeout. 1: Change the load value on a write to TxCLRI. Clock select. 00: UCLK. 01: PCLK. 10: LFOSC (32 kHz internal oscillator). 11: LFXTAL (external crystal, 32 kHz). Timer enable bit. The timer starts counting from its initial value (0 if count-up mode or 0xFFFF if count-down mode). Clearing this bit resets the timer, including the TxVAL register. 0: Disable the timer. 1: Enable the timer. Timer mode. 0: Operate in free running mode. 1: Operate in periodic mode. Count up. 0: Timer to count down. 1: Timer to count up. Prescaler. If the selected clock source is UCLK, the selected prescaler is further divided by a factor of 4. 00: DIV1: source clock/1. 01: DIV16: source clock/16. 10: DIV256: source clock/256. 11: DIV32768: source clock/32,768. Rev. D | Page 150 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide General-Purpose Timers Clear Interrupt Registers Address: 0x4000000C, Reset: 0x0000, Name: T0CLRI Address: 0x4000040C, Reset: 0x0000, Name: T1CLRI Table 175. T0CLRI and T1CLRI Register Bit Descriptions Bits 15:2 1 Name Reserved CAP 0 TMOUT Description Reserved. These bits should be written 0. Clear captured event interrupt. 1: Clear a capture event interrupt. This bit always reads 0. Clear timeout interrupt. 1: Clear a timeout interrupt. This bit always reads 0. Ensure that the register write has fully completed before returning from the interrupt handler. Use the data synchronization barrier (DSB) instruction if necessary. The following is a code example showing how to implement the DSB ARM Cortex-M3 instruction in a C program. __asm void asmDSB() { nop DSB BX LR } void GP_Tmr0_Int_Handler() { T0CLRI = 0x1; asmDSB(); } General-Purpose Timers Capture Registers Address: 0x40000010, Reset: 0x0000, Name: T0CAP Address: 0x40000410, Reset: 0x0000, Name: T1CAP Table 176. T0CAP and T1CAP Register Bit Descriptions Bits 15:0 Name VALUE Description 16-bit captured value. Read only. TxCAP holds its value until TxCLRI[1] is set by user code. If the same event occurs again, TxCAP is not overwritten. Rev. D | Page 151 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 General-Purpose Timers Status Registers Address: 0x4000001C, Reset: 0x0000, Name: T0STA Address: 0x4000041C, Reset: 0x0000, Name: T1STA Table 177. T0STA and T1STA Register Bit Descriptions Bits 15:8 7 Name Reserved PDOK 6 BUSY 5:2 1 Reserved CAP 0 TMOUT Description Reserved. These bits should be written 0. T0CLRI/T1CLRI synchronization. Set to 1 automatically when the T0CLRI/T1CLRI value is being updated in the timer clock domain, indicating that the timer’s configuration is not yet valid. Cleared to 0 when the interrupt is cleared in the timer’s clock domain. Timer busy. Set to 1 to indicate that the timer is not ready to receive commands to TxCON. Previous change of the TxCON value has not been synchronized in the timer clock domain. Cleared to 0 to indicate that the timer is ready to receive commands to TxCON. The previous change of TxCON has been synchronized in the timer clock domain. Reserved. These bits should be written 0. Capture event pending. Set to 1 to indicate a capture event is pending. Cleared to 0 by writing 1 to TxCLRI[1]. Timeout event occurred. Set to 1 to indicate a timeout event has occurred. For count-up mode, this is when the counter reaches full scale. For count-down mode, this is when the counter reaches 0. Cleared to 0 by writing 1 to TxCLRI[0]. Rev. D | Page 152 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide WAKE-UP TIMER WAKE-UP TIMER FEATURES • • • 32-bit counter (count down or count up) Four clock sources with programmable prescaler (1, 16, 256, or 32,768) • Peripheral clock (PCLK) • 32 kHz external crystal (LFXTAL) • 32 kHz internal oscillator (LFOSC) • External clock applied on P1.0 (EXTCLK) Four compare points, one automatic increment WAKE-UP TIMER BLOCK DIAGRAM 32-BIT COMPARE A 32-BIT COMPARE B 32-BIT COMPARE C 32-BIT COMPARE D 12-BIT INTERVAL A CLOCK SOURCES PCLK LFXTAL PRESCALER 1, 16, 256 OR 32,768 TIMER 2 INTERRUPT 32-BIT UP/DOWN COUNTER MCU WAKE-UP EXTCLK TIMER 2 VALUE 10464-030 LFOSC Figure 31. Wake-Up Timer Block Diagram WAKE-UP TIMER OVERVIEW The wake-up timer (Timer2) block consists of a 32-bit counter clocked from one of four different sources: system clock (PCLK), external crystal (LFXTAL), internal oscillator (LFOSC), or an external clock applied on P1.0 (EXTCLK).The selected clock source can be scaled down using a prescaler of 1, 16, 256, or 32,768. The wake-up timer continues to run independent of the clock source used when the PCLK clock is disabled. The timer can be used in free running or periodic mode. In free running mode, the timer counts from 0x00000000 to 0xFFFFFFFF and then restarts at 0x00000000. In periodic mode, the timer counts from 0x00000000 to T2WUFD (T2WUFD0 and T2WUFD1). In addition, the wake-up timer has four specific time fields to compare with the wake-up counter: T2WUFA, T2WUFB, T2WUFC, and T2WUFD. All four wake-up compare points can generate interrupts or wake-up signals. When in free running mode, T2WUFA, T2WUFB, T2WUFC, andT2WUFD must be reconfigured in software to generate a periodic interrupt. WAKE-UP TIMER OPERATION The wake-up timer comparator registers must be configured before starting the timer. The timer is started by writing the control enable bit ( T2CON[7]). The timer increments until the value reaches full scale in free running mode or when T2WUFD matches the wake-up value, T2VAL. The wake-up timer is a 32-bit timer. Its current value is stored in two 16-bit registers: T2VAL1 stores the upper 16 bits, and T2VAL0 stores the lower 16 bits. When T2VAL0 is read, T2VAL1 is frozen at its current value until it is subsequently read. The control bit FREEZE (T2CON[3]) must be set to freeze the T2VAL register between the lower and upper reads. Clock Selection Clock selection is made by setting T2CON[10:9]. If LFXTAL is selected (T2CON[10:9] = 01), it must be ensured that the clock circuit is on (XOSCCON[0] = 1). If PCLK is selected (T2CON[10:9] = 00), configuring T2CON[1:0] = 00 results in a prescaler of 4. Synchronization to the LFOSC and LFXTAL clock domain is done automatically by hardware, and precautions concerning asynchronous clocks as described in Timer0, Timer1, and Timer3 do not apply. Rev. D | Page 153 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Compare Field Registers Hardware Updated Field T2INC is a 12-bit interval register that is used to update the compare value in T2WUFAx by hardware. When a new value is written in T2INC, Bits[16:5] of the internal 32-bit compare register (T2WUFAx) are loaded with the new T2INC value. If the new compare value is less than the T2WUFD value in periodic mode or less than 0xFFFFFFFF in free running mode, this 32-bit compare register is automatically incremented with the contents of T2INC (shifted by five) each time the wake-up counter reaches the value in this compare register. If the new compare value is greater than these limits, it is recalculated as follows: In free running mode, the new T2WUFA = old T2WUFA + (32 × T2INC) − 0xFFFFFFFF. In periodic mode, the new T2WUFA = old T2WUFA + (32 × T2INC) − T2WUFD. The maximum programmable interval is just above 4 sec. T2INC is compared with Bits[16:5] of the timer value. Because it is shifted left by five bits, its value must be multiplied by 32 to obtain the compare value. With the default value of 0xC8 (where for calculation purposes 0xC8 = 200 in decimal), a prescaler = 1, and 32 kHz clock selected, Interval = ((200 × 32) + 1) × 1/32,768 = 195.3155 ms To modify the interval value, the timer must be stopped so that the interval register can be loaded in the compare register if T2CON[11] = 0. To modify the interval value, set STOPINC (T2CON[11] = 1) while the timer is running. The new T2INC value takes effect after the next Wake-Up Field A interrupt. If the user is writing to this register while the timer is enabled, the STOPINC bit should be set before writing to it, and then STOPINC should be cleared after the update. Software Updated Field T2WUFB, T2WUFC, and T2WUFD are 32-bit values programmed by the user in the T2WUFx0 and T2WUFx1 registers (x = B, C, or D). T2WUFD contains the load value when the wake-up timer is configured in periodic mode. The T2WUFBx and T2WUFCx registers can be written to at any time, but the corresponding interrupt enable—T2IEN[1] or T2IEN[2]— must be disabled. After the register is updated, the interrupt can be reenabled. In periodic mode, the T2WUFDx registers can be written to only when the timer is disabled. In free running mode, the T2WUFDx registers can be written to while the timer is running. Before doing so, the corresponding interrupt enable (T2IEN[3]) must be disabled. After the register is updated, the interrupt can be reenabled. In free running mode, T2WUFB, T2WUFC, and T2WUFD can be written to at any time, but the corresponding interrupt enable in the T2IEN register must be disabled. After the register is updated, the interrupt can be reenabled. In periodic mode, this is only applicable to T2WUFB and T2WUFC. FREE RUNNING: 0xFFFFFFFF PERIODIC:T2WUFD = T2VAL T2WUFD TIMER VALUE T2INC T2INC T2INC T2INC T2INC T2WUFC T2WUFB INTERUPTS (T2INC, T2WUFB, T2WUFC and T2WUFD VALUES ARE SET BY USER) T2WUFA T2WUFA T2WUFA T2WUFA T2WUFA Figure 32. Wake-Up Timer Fields Action Rev. D | Page 154 of 176 T2WUFA 10464-031 0x00000000 UG-367 ADuCM360/ADuCM361 Hardware User Guide Interrupts/Wake-Up Signals An interrupt is generated when the counter value corresponds to any of the compare points or full scale in free running mode. The timer continues counting or is reset to 0. The wake-up timer generates five maskable interrupts. They are enabled in the T2IEN register. Interrupts can be cleared by setting the corresponding bit in the T2CLRI register. Note that it takes two 32 kHz clock cycles for the interrupt clear to take effect when a 32 kHz clock is used. Ensure that the register write has fully completed before returning from the interrupt handler. Use the data synchronization barrier (DSB) instruction if necessary. The following is a code example showing how to implement the DSB ARM Cortex-M3 instruction in a C program. void WakeUp_Int_Handler() { WutClrInt(iSource); __DSB(); } During that time, the part should not be placed in any of the power-down modes. IRQCRY (T2STA[6]) indicates when the device can be placed in power-down mode. The timer is stopped and reset when clearing the timer enable bit in the T2CON register (T2CON[7]). WAKE-UP TIMER MEMORY MAPPED REGISTERS Table 178. Wake-Up Timer Memory Mapped Registers Address Table (Base Address: 0x40002500) Offset 0x0000 0x0004 0x0008 0x000C 0x0010 0x0014 0x0018 0x001C 0x0020 0x0024 0x0028 0x002C 0x0030 0x003C 0x0040 Name T2VAL0 T2VAL1 T2CON T2INC T2WUFB0 T2WUFB1 T2WUFC0 T2WUFC1 T2WUFD0 T2WUFD1 T2IEN T2STA T2CLRI T2WUFA0 T2WUFA1 Description Current count value LSB Current count value MSB Control register 12-bit interval register for Wake-Up Field A Wake-Up Field B LSB Wake-Up Field B MSB Wake-Up Field C LSB Wake-Up Field C MSB Wake-Up Field D LSB Wake-Up Field D MSB Interrupt enable Status Clear interrupts Wake-Up Field A LSB Wake-Up Field A MSB Rev. D | Page 155 of 176 Access R R RW RW RW RW RW RW RW RW RW R W RW RW Default 0x0000 0x0000 0x0040 0x00C8 0x1FFF 0x0000 0x2FFF 0x0000 0x3FFF 0x0000 0x0000 0x0000 N/A 0x1900 0x0000 ADuCM360/ADuCM361 Hardware User Guide UG-367 Wake-Up Timer Count Value Registers Address: 0x40002500, Reset: 0x0000, Name: T2VAL0 Address: 0x40002504, Reset: 0x0000, Name: T2VAL1 Table 179. T2VAL0 Register Bit Descriptions (T2VAL0 Address: 0x40002500) Bits 15:0 Name VALUE Description Lower 16 bits of current wake-up timer value Table 180. T2VAL1 Register Bit Descriptions (T2VAL1 Address: 0x40002504) Bits 15:0 Name VALUE Description Upper 16 bits of current wake-up timer value Wake-Up Timer Control Register Address: 0x40002508, Reset: 0x0040, Name: T2CON Table 181. T2CON Register Bit Descriptions Bits 15:12 11 Name Reserved STOPINC 10:9 CLK 8 WUEN 7 ENABLE 6 MOD 5:4 3 Reserved FREEZE 2 1:0 Reserved PRE Description Unused bit locations. This bit allows the user to update the interval register safely. 0: Allows the Wake-Up Field A to be updated. 1: Stops Wake-Up Field A from being updated with the interval register value. Clock select: used to select clock source for timer. 00: PCLK (default). 01: LFXTAL: 32 kHz external crystal. 10: LFOSC: 32 kHz internal oscillator. 11: EXTCLK: External clock, from P1.0. Wake-up enable bits for time field values. This bit must be set to 1. 0: Disable asynchronous wake-up timer. Interrupt conditions do not wake up the part from sleep mode. 1: Enable asynchronous wake-up timer even when the processor clock is off. When one of the time values equals the T2WUFA, the wake-up output signal is generated. Timer enable bit. This bit must be 0 (low) when changing any of the control information or timer field values. 0: Disable the timer (default). 1: Enable the timer. Timer free run enable. 0: PERIODIC: Operate in periodic mode; that is, counts up to the value in T2WUFD. 1: FREERUN: Operate in free running mode (default); that is, counts from 0 to FFFF FFFF and then restarts at 0. Reserved. Freeze enable bit. 0: Disable the freeze enable bit (default). 1: Enable the freeze of the high 16 bits after the lower bits have been read from T2VAL0. This ensures that the software reads an atomic shot of the timer. The entire T2VAL register unfreezes after the high bits (T2VAL1) have been read. Reserved. Clock prescaler select. If clock prescaler select = 00 (T2CON[1:0] = 00) and the selected clock source is PCLK (T2CON[10:9] = 00), this setting results in a prescaler of 4. 00: DIV1: source clock/1 (default). 01: DIV16: source clock/16. 10: DIV256: source clock/256. 11: DIV32768: source clock/32,768. Note that the timer clock needs to be four times slower than PCLK (the system clock); therefore, care needs to be taken when selecting the prescaler at different CD values. Rev. D | Page 156 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Wake-Up Timer Interval Register: Interval Register Address: 0x4000250C, Reset: 0x00C8, Name: T2INC Table 182. T2INC Register Bit Descriptions Bits 15:12 11:0 Name Reserved VALUE Description Reserved Wake-up interval Wake-Up Timer Wake-Up Field Register B Address: 0x40002510, Reset: 0x1FFF, Name: T2WUFB0 Address: 0x40002514, Reset: 0x0000, Name: T2WUFB1 The T2WUFBx registers can be written to at any time, but the corresponding interrupt enable (T2IEN[1]) must be disabled. After the register is updated, the interrupt can be reenabled. Table 183. T2WUFB0 Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of Wake-Up Field B Table 184. T2WUFB1 Register Bit Descriptions Bits 15:0 Name VALUE Description Upper 16 bits of Wake-Up Field B Wake-Up Timer Wake-Up Field Register C Address: 0x40002518, Reset: 0x2FFF, Name: T2WUFC0 Address: 0x4000251C, Reset: 0x0000, Name: T2WUFC1 T2WUFCx registers can be written to at any time, but the corresponding interrupt enable (T2IEN[2]) must be disabled. After the register is updated, the interrupt can be reenabled. Table 185. T2WUFC0 Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of Wake-Up Field C Table 186. T2WUFC1 Register Bit Descriptions Bits 15:0 Name VALUE Description Upper 16 bits of Wake-Up Field C Wake-Up Timer Wake-Up Field Register D Address: 0x40002520, Reset: 0x3FFF, Name: T2WUFD0 Address: 0x40002524, Reset: 0x0000, Name: T2WUFD1 In periodic mode, T2WUFDx registers can be written to only when the timer is disabled. In free running mode, T2WUFDx registers can be written to while the timer is running. Before doing so, the corresponding interrupt enable (T2IEN[3]) must be disabled. After the register is updated, the interrupt can be reenabled. Table 187. T2WUFD0 Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of Wake-Up Field D Table 188. T2WUFD1 Register Bit Descriptions Bits 15:0 Name VALUE Description Upper 16 bits of Wake-Up Field D Rev. D | Page 157 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Wake-Up Timer Interrupt Enable Register Address: 0x40002528, Reset: 0x0000, Name: T2IEN Table 189. T2IEN Register Bit Descriptions Bits 15:5 4 Name Reserved ROLL 3 WUFD 2 WUFC 1 WUFB 0 WUFA Description Unused bit locations. Interrupt enable bit when the counter rolls over. Only occurs in free running mode. 0: Disable the rollover interrupt (default). 1: Generate an interrupt when Timer2 rolls over. T2WUFD interrupt enable. 0: Disable T2WUFD interrupt (default). 1: Generate an interrupt when T2VAL reaches T2WUFD. T2WUFC interrupt enable. 0: Disable T2WUFC interrupt (default). 1: Generate an interrupt when T2VAL reaches T2WUFC. T2WUFB interrupt enable. 0: Disable T2WUFB interrupt (default). 1: Generate an interrupt when T2VAL reaches T2WUFB. T2WUFA interrupt enable. 0: Disable T2WUFA interrupt (default). 1: Generate an interrupt when T2VAL reaches T2WUFA. Wake-Up Timer Status Register Address: 0x4000252C, Reset: 0x0000, Name: T2STA Table 190. T2STA Register Bit Descriptions Bits 15:9 8 Name Reserved PDOK 7 FREEZE 6 IRQCRY 5 4 Reserved ROLL 3 WUFD 2 WUFC 1 WUFB 0 WUFA Description Unused bit locations. Indicates when a change in the enable bit is synchronized to the 32 kHz clock domain. Set to 1 when the enable bit in the control register (T2CON[7]) is set or cleared. Cleared to 0 when the change in the enable bit has been synchronized to the 32 kHz clock domain. Status of T2VAL freeze. Set to 1 when the T2VAL0 is read, indicating T2VAL is frozen. Cleared to 0 when T2VAL1 is read, indicating T2VAL is unfrozen. Status of wake-up signal to power-down control. Set to 1when any of the interrupts is still set in the external crystal clock domain. Cleared to 0 automatically when the interrupts are cleared. Unused bit locations. Interrupt status bit for instances when the counter rolls over. Only occurs in free running mode. Set to 1when enabled in the interrupt enable register and the T2VALS counter register is equal to all 1s. Cleared to 0. T2WUFD interrupt flag. Set to 1 to indicate that a comparator interrupt has occurred if the corresponding bit is enabled in the interrupt enable register. Cleared to 0 after a write to the corresponding bit in T2CLRI. T2WUFC interrupt flag. Set to 1 to indicate that a comparator interrupt has occurred if the corresponding bit is enabled in the interrupt enable register. Cleared to 0 after a write to the corresponding bit in T2CLRI. T2WUFB interrupt flag. Set to 1 to indicate that a comparator interrupt has occurred if the corresponding bit is enabled in the interrupt enable register. Cleared to 0 after a write to the corresponding bit in T2CLRI. T2WUFA interrupt flag. Set to 1 to indicate that a comparator interrupt has occurred if the corresponding bit is enabled in the interrupt enable register. Cleared to 0 after a write to the corresponding bit in T2CLRI. Rev. D | Page 158 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Wake-Up Timer Clear Interrupt Register Address: 0x40002530, Reset: N/A, Name: T2CLRI Table 191. T2CLRI Register Bit Descriptions Bits 15:5 4 Name Reserved ROLL 3 WUFD 2 WUFC 1 WUFB 0 WUFA Description Unused bit locations. Interrupt clear bit for when counter rolls over. Only occurs in free running mode. 0: Cleared automatically after synchronization. 1: Clear a ROLL interrupt flag. T2WUFD interrupt flag. 0: Cleared automatically after synchronization. 1: Clear a T2WUFD interrupt flag. T2WUFC interrupt flag. 0: Cleared automatically after synchronization. 1: Clear a T2WUFC interrupt flag. T2WUFB interrupt flag. 0: Cleared automatically after synchronization. 1: Clear a T2WUFB interrupt flag. T2WUFA interrupt flag. 0: Cleared automatically after synchronization. 1: Clear a T2WUFA interrupt flag. Ensure that the register write has fully completed before returning from the interrupt handler. Use the data synchronization barrier (DSB) instruction if necessary. See the Interrupts/Wake-Up Signals section for a DSB code example. Wake-Up Timer Compare Register A Address: 0x4000253C, Reset: 0x1900, Name: T2WUFA0 Address: 0x40002540, Reset: 0x0000, Name: T2WUFA1 T2WUFAx registers can be written to while the timer is enabled. T2WUFA0 must be written to first and when T2WUFA1 is written to both registers values are changed. If a small value is required the a write of 0x0000 to T2WUFA1is sufficient for T2WUFA0 to get updated. T2WUFAx can be written to whether or not the STOPINC (T2CON[11]) bit is set. If set to 1, the STOPINC (T2CON[11])bit stops T2WUFAx from being incremented by hardware. T2WUFAx is an asynchronous register in the 32 kHz clock domain. Therefore, it should be read twice to confirm that the correct value has been read. Table 192. T2WUFA0 Register Bit Descriptions Bits 15:0 Name VALUE Description Lower 16 bits of Compare Register A Table 193. T2WUFA1 Register Bit Descriptions Bits 15:0 Name VALUE Description Upper 16 bits of Compare Register A Rev. D | Page 159 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 WATCHDOG TIMER WATCHDOG TIMER FEATURES • • 16-bit count-down timer, which can be used to recover from an invalid software state. Clocked by the 32 kHz internal oscillator (LFOSC) with a programmable prescaler (1, 16, 256, or 4096). WATCHDOG TIMER BLOCK DIAGRAM 16-BIT LOAD PRESCALER 1, 16, 256 OR 4096 WATCHDOG TIMER RESET 1616-BIT BIT UP/DOWN COUNTER DOWN COUNTER WATCHDOG TIMER INTERRUPT TIMER 3 VALUE 10464-032 LFOSC Figure 33. Watchdog Timer Block Diagram WATCHDOG TIMER OVERVIEW The watchdog timer (Timer3) is used to recover from an invalid software state. When enabled, it requires periodic servicing to prevent it from forcing a reset of the device. For debug purposes, the timer can be configured to generate an interrupt instead of a reset. The watchdog timer is clocked by the internal 32.768 kHz oscillator, LFOSC. It is clocked at all times except during a reset. The watchdog timer is a 16-bit count-down timer with a programmable prescaler. The prescaler is selectable and can divide LFOSC by a factor of 1, 16, 256, or 4096. WATCHDOG TIMER OPERATION Enabling the Timer The watchdog timer is enabled by default after a reset. User code should disable the watchdog timer at the start of user code when debugging or if the watchdog timer is not required. T3CON = 0x00; // Disable watchdog timer Enabling the watchdog timer (set T3CON[5] = 1) also write protects T3CON and T3LD. This means that after kernel execution, user code can disable the timer and then reconfigure it with T3CON[5] = 1 only once. Then T3CON and T3LD are write protected. T3STA[5] indicates if the timer configuration has been locked. Only a reset clears T3CON[5], unlocking T3CON and T3LD, and allows reconfiguration of the timer. If T3CON is not modified, user code can change T3LD at any time. If T3CON[5] is cleared to 0, the timer is disabled. Settings can be modified, and the timer can be reenabled. Programmable Timeout If the watchdog timer is set to free running (T3CON[6] = 0), the watchdog timer value decrements from 0x1000 to 0, wraps around to 0x1000, and continues to decrement. To achieve a timeout value greater or less than 0x1000 (~32 sec with default prescale T3CON[3:2] = 10, prescale = 256), periodic mode should be used (T3CON[6] = 1) and T3LD and T3CON[3:2] (prescale) should be written with the values corresponding to the desired timeout period. The maximum timeout is ~8192 sec (T3LD = 0xFFFF, T3CON[3:2] = 11, prescale = 4096). Reset/Interrupt or Refreshing the Timer The default timeout period is approximately 32 sec. A watchdog timer timeout can generate a reset or an interrupt when the watchdog timer decrements to 0. The T3CON[1] bit is added to allow selection of an interrupt or a reset. This can be used for debug. The interrupt can be cleared by writing 0xCCCC to the T3CLRI write only register. The interrupt or reset can be prevented by writing T3CLRI with 0xCCCC before the expiration period. A write to T3CLRI causes the watchdog timer to reload with the T3LD (or 0x1000 if in free running mode) immediately to begin a new timeout period and restart counting. If any value other than 0xCCCC is written, an interrupt or reset is generated (as selected by T3CON[1]). Asynchronous Clock Source The watchdog timer is clocked by the internal 32.768 kHz oscillator, LFOSC. Three bits are provided in the T3STA register to ensure the correct synchronization of the timer clock and processor clock domains. After a write to T3CON, T3LD, or T3CLRI, user code should wait until the corresponding status bit is cleared. The T3VAL register always contains the timer value synchronized to the core clock domain. Rev. D | Page 160 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide WATCHDOG TIMER MEMORY MAPPED REGISTERS Table 194. Watchdog Timer Memory Mapped Registers Address Table (Base Address: 0x40002580) Offset 0x0000 0x0004 0x0008 0x000C 0x0018 Name T3LD T3VAL T3CON T3CLRI T3STA Description Load value. Current count value, read only. Control register. Clear interrupt. Status register. Access RW R RW W R Default 0x1000 0x1000 0x00E9 N/A 0x0000 Watchdog Timer Load Register Address: 0x40002580, Reset: 0x1000, Name: T3LD Table 195. T3LD Register Bit Descriptions Bits 15:0 Name VALUE Description Load value. Watchdog Timer Current Value Register Address: 0x40002584, Reset: 0x1000, Name: T3VAL Table 196. T3VAL Register Bit Descriptions Bits 15:0 Name VALUE Description Current count value. Read only register. Watchdog Timer Control Register Address: 0x40002588, Reset: 0x00E9, Name: T3CON Table 197. T3CON Register Bit Descriptions Bits 15:7 6 Name Reserved MOD 5 ENABLE 4 3:2 Reserved PRE 1 IRQ 0 PD Description Reserved. These bits should be written 0. Timer mode. 0: FREERUN: Operate in free running mode. Note that in free running, it wraps around at 0x1000. 1: PERIODIC: Operate in periodic mode (default). Timer enable. 0: Disable the timer. Can only be done once. 1: Enable the timer (default). Reserved Prescaler. 00: DIV1: source clock/1. 01: DIV16: source clock/16. 10: DIV256: source clock/256 (default). 11: DIV4096: source clock/4096. Timer interrupt. 0: Generate a reset on a timeout (default). 1: Generate an interrupt when the timer times out. This feature is provided for debug purposes and is only available in active mode. Power-down clear. 0: Continue the count upon exit from power-down modes. 1: Reset, reload, and restart the timer count upon exit from power-down modes (default). Rev. D | Page 161 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 Watchdog Timer Clear Interrupt Register Address: 0x4000258C, Reset: N/A, Name: T3CLRI Table 198. T3CLRI Register Bit Descriptions Bits 15:0 Name VALUE Description Clear watchdog. User writes 0xCCCC to reset/reload/restart T3 or clear interrupt. A write of any other value causes a watchdog reset/interrupt. Write only, reads 0. Ensure that the register write has fully completed before returning from the interrupt handler. Use the data synchronization barrier (DSB) instruction if necessary. The following is a code example showing how to implement the DSB ARM Cortex-M3 instruction in a C program. void WDog_Tmr_Int_Handler() { WdtClrInt(); // clear watchdog timer interrupt __DSB(); } Watchdog Timer Status Register Address: 0x40002598, Reset: 0x0000, Name: T3STA Table 199. T3STA Register Bit Descriptions Bits 15:5 4 Name Reserved LOCK 3 CON 2 LD 1 CLRI 0 IRQ Description Reserved. Lock status bit. Set to 1 automatically in hardware when user code sets T3CON[5]. Cleared to 0 after any reset and until user code sets T3CON[5]. T3CON write sync in progress. Set to 1 with the timer not ready to receive commands to T3CON. The previous change of the T3CON value has not been synchronized in the timer clock domain. Cleared to 0 when the timer is ready to receive commands to T3CON. The previous change of the T3CON value has been synchronized in the timer clock domain. T3LD write sync in progress. Set to 1 when the previous change of the T3LD value has not been synchronized in the timer clock domain. Cleared to 0 when the previous change of T3LD has been synchronized in the timer clock domain. T3CLRI write sync in progress. Set to 1 automatically when the T3CLRI value is being updated in the timer clock domain, indicating that the timer’s configuration is not yet valid. Cleared to 0 when the interrupt is cleared in the timer clock domain. WD_IRQ. Set to 1 when a T3 interrupt is pending. Cleared to 0 when a T3 interrupt is not pending. Rev. D | Page 162 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide PWM PWM FEATURES • 3 pairs of PWM outputs individually controlled • H-Bridge mode supported on 2 pairs PWM OVERVIEW The ADuCM360/ADuCM361 integrates a 6-channel PWM interface. The six outputs are grouped as three pairs (0 to 2). Pair 0 and Pair 1 can be configured in standard mode or to drive an H-bridge. Pair 2 and Pair 3 can be configured in standard mode only. The PWM pairs and modes are summarized in Table 200. Table 200. PWM Channel Grouping Pair 0 1 2 Port Name PWM0 PWM1 PWM2 PWM3 PWM4 PWM5 Description High-side PWM output Low-side PWM output High-side PWM output Low-side PWM output High-side PWM output Low-side PWM output PWM Mode Available H-Bridge and standard H-Bridge and standard H-Bridge and standard H-Bridge and standard Standard Standard On power-up, the PWM outputs default to H-bridge mode for pair 0 and pair 1. In all modes, users have control over the period of each pair of outputs and over the duty cycle of each individual output. In the event of external fault conditions, a falling edge on the PWMTRIP pin provides an instantaneous shutdown of the PWM controller. All PWM outputs are placed in the off state, that is, in low state for the low side and high state for the high side, and a PWMTRIP interrupt can be generated. PWM OPERATION The PWM clock is selectable via PWMCON0 with one of the following values: UCLK divided by 2, 4, 8, 16, 32, 64, 128, or 256. In all modes, the PWMxCOMx MMRs controls the point at which the PWM output changes state. An example is shown in Figure 34. Each pair has an associated counter. The length of the PWM period is defined by PWMxLEN. The PWM waveforms are set by the count value of the 16-bit timer and the compare register contents. The low-side waveform, PWM1, goes high when the timer count reaches PWM0LEN, and it goes low when the timer count reaches the value held in PWM0COM2 or when the high-side waveform PWM0 goes low. The high-side waveform, PWM0, goes high when the timer count reaches the value held in PWM0COM0, and it goes low when the timer count reaches the value held in PWM0COM1. Rev. D | Page 163 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 PAIR 0 TIMER 0xFFFF PWM0LEN PWM0COM0 PWM0COM1 PWM0COM2 0x0000 PWM0COM2 PWM0COM1 PWM0COM0 PWM0LEN PAIR 0 OUTPUTS PWM0 HIGH SIDE 10464-033 PWM1 LOW SIDE Figure 34. Waveform of PWM Channel Pair in Standard Mode Note that the high-side PWM output for each channel must have a high duration period greater than or equal to the high period duration of the low-side output. For example, the high period for PWM0 must be equal to or greater than the high period of PWM1. Table 201 lists equations for the period and duration for both the outputs of a PWM channel. Table 201. PWM Equations PWM Low Side (PWM1) Period tUCLK/DIV × (PWM0LEN + 1) × NPRESCALE Duration High Duration If (PWM0COM2 < PWM0COM1), then tUCLK/DIV × (PWM0LEN − PWM0COM2) × NPRESCALE Else High Side (PWM0) tUCLK/DIV × (PWM0LEN + 1) × NPRESCALE tUCLK/DIV × (PWM0LEN − PWM0COM1) × NPRESCALE Low Duration tUCLK/DIV × (PWM0COM0 − PWM0COM1) × NPRESCALE Note that: tUCLK/DIV is the PWM clock frequency selected by CLKCON1[14:12] and CLKSYSDIV[0]. NPRESCALE = prescalar value as determined by PWMCON0[8:6]. Rev. D | Page 164 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide Standard Mode In standard mode, each pair is individually controlled by a selection of registers, as shown in Table 202. Table 202. Compare Register Descriptions in Standard Mode (Base Address: 0x40001000) Pair 0 Name PWM0COM0 PWM0COM1 PWM0COM2 PWM0LEN PWM1COM0 PWM1COM1 PWM1COM2 PWM1LEN PWM2COM0 PWM2COM1 PWM2COM2 PWM2LEN 1 2 Description PWM0 output goes high when the PWM timer reaches the count value stored in this register. PWM0 output goes low when the PWM timer reaches the count value stored in this register. PWM1 output goes low when the PWM timer reaches the count value stored in this register. PWM1 output goes high when the PWM timer reaches the count value stored in this register. PWM2 output goes high when the PWM timer reaches the count value stored in this register. PWM2 output goes low when the PWM timer reaches the count value stored in this register. PWM3 output goes low when the PWM timer reaches the count value stored in this register. PWM3 output goes high when the PWM timer reaches the count value stored in this register. PWM4 output goes high when the PWM timer reaches the count value stored in this register. PWM4 output goes low when the PWM timer reaches the count value stored in this register. PWM5 output goes low when the PWM timer reaches the count value stored in this register. PWM5 output goes high when the PWM timer reaches the count value stored in this register. The following code configures the duty cycle of the PWM0/PWM1 outputs to PWM0 high for 30% of the period and to PWM1 high for 20% of the period: pADI_CLKCTL-> CLKCON0 = 0; pADI_CLKCTL-> CLKCON1= 0; pADI_PWM->PWM0LEN = 0x50; // Set PWM period to 21.9uS (456 kHz) ucValid = PWM0_1DutyCycle(30,20); // Pass values between 0-99 for duty cycle of PWM0/1 - PWM 1 must have a duty cycle <=PWM0 unsigned char PWM0_1DutyCycle( int iPWM0High, int iPWM1High) { if ((iPWM1High >=100) ||(iPWM0High >=100) ) return 1; if // Error (iPWM0High >= iPWM1High) { pADI_PWM->PWM0COM0 = PWM0LEN; pADI_PWM->PWM0COM1 = ( int)((PWM0LEN * (iPWM0High)/100)); pADI_PWM->PWM0COM2 = ( int)((PWM0LEN * iPWM1High)/100); return 0; } else { return 1; // PWM0 High period must be > PWM1 High period } } Rev. D | Page 165 of 176 UG-367 10464-034 ADuCM360/ADuCM361 Hardware User Guide Figure 35. PWM Output on PWM0 and PWM1 Pins Generated by Above Code; PWM0 is Channel 2 H-Bridge Mode In H-bridge mode, the period and duty cycle of the 4 outputs are controlled using the Pair 0 registers: PWM0COM0, PWM0COM1, PWM0COM2, and PWM0LEN. In addition, the state of the output is controlled by PWMCON0 Bit 9, Bit 5, Bit 4, and Bit 2 as summarized in Table 203. An example of H-bridge configuration is shown in Figure 36. Note that only PWM0 to PWM3 participate in H-bridge mode; other outputs (PWM4 and PWM5) do not and continue to generate standard mode output. P CHANNEL PWM0 G S PWM2 D + M– PWM3 10464-135 PWM1 N CHANNEL Figure 36. Example H-Bridge Configuration Table 203. PWM Output in H-Bridge Mode PWM Outputs1 ENA PWMCON0[9] 0 PWM Control Bits POINV HOFF PWMCON0[5] PWMCON0[4] X 0 DIR PWMCON0[2] X X X 1 X 1 0 0 0 1 0 0 1 1 1 1 1 PWM2 1 (Disable) PWM3 1 (Enable) State of Motor Brake 1 (Disable) 0 (Disable) Free run HS LS 0 (Enable) 0 (Disable) HS 1 (Disable) 1 (Enable) 1 (Enable) LS HS Move controlled by LS on PWM3 Move controlled by LS on PWM1 Move controlled by LS on PWM0 Move controlled by LS on PWM2 1 PWM0 1 (Disable) 1 (Disable) 0 (Enable) HS PWM1 1 (Enable) 0 (Disable) 0 (Disable) LS 0 0 LS 0 1 1 (Disable) HS = high side, LS = low side, HS = inverse of high side, LS = inverse of low side, as programmed in PWM0 registers. Rev. D | Page 166 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide PWM INTERRUPT GENERATION PWM Trip Function Interrupt When the PWM trip function is enabled (TRIPEN, PWMCON1[6]) and the PWM trip input signal goes low (falling edge), the PWM peripheral disables itself (PWMCON0[0] = 0). It also generates the PWM trip interrupt. The interrupt is cleared by setting PWMCLRI[4]. When using the PWM trip interrupt, the PWM interrupt should be cleared before exiting the ISR. This prevents the generation of multiple interrupts. PWM Output Pairs Interrupts In standard mode, each PWM pair has a dedicated interrupt: IRQPWM0, IRQPWM1, IRQPWM2. When the interrupt generation is enabled (PWMCON0[10]) and the counter value for Pair 0 changes from PWM0LEN to 0, it also generates the IRQPWM0 interrupt. The interrupt is cleared by setting PWMCLRI[0]. When the interrupt generation is enabled (PWMCON0[10]) and the counter value for Pair 1 changes from PWM1LEN to 0, it also generates the IRQPWM1 interrupt. The interrupt is cleared by setting PWMCLRI[1]. When the interrupt generation is enabled (PWMCON0[10]) and the counter value for Pair 2 changes from PWM2LEN to 0, it also generates the IRQPWM2 interrupt. The interrupt is cleared by setting PWMCLRI[2]. In H-bridge mode, Pair 0 and Pair 1 are used in the bridge configuration and generate 1 interrupt only, IRQPWM0. While Pair 0 and Pair 1 are in H-bridge mode, Pair 2 can be used in standard mode and it generates the IRQPWM2 interrupt. PWM MEMORY MAPPED REGISTERS Table 204. PWM Memory Mapped Registers Address Table (Base Address: 0x40001000) Offset 0x000 0x004 0x008 0x010 0x014 0x018 0x01C 0x020 0x024 0x028 0x02C 0x030 0x034 0x038 0x03C 1 Name PWMCON0 PWMCON1 PWMCLRI PWM0COM0 PWM0COM1 PWM0COM2 PWM0LEN PWM1COM0 PWM1COM1 PWM1COM2 PWM1LEN PWM2COM0 PWM2COM1 PWM2COM2 PWM2LEN Description PWM Control Register 0 Trip control register PWM interrupt clear Compare Register 0 for PWM0 and PWM1 Compare Register 1 for PWM0 and PWM1 Compare Register 2 for PWM0 and PWM1 Period value register for PWM0 and PWM1 Compare Register 0 for PWM2 and PWM3 Compare Register 1 for PWM2 and PWM3 Compare Register 2 for PWM2 and PWM3 Period value register for PWM2 and PWM3 Compare Register 0 for PWM4 and PWM5 Compare Register 1 for PWM4 and PWM5 Compare Register 2 for PWM4 and PWM5 Period value register for PWM4 and PWM5 RW8 is eight bits, read or write. Rev. D | Page 167 of 176 Access RW RW8 1 W RW RW RW RW RW RW RW RW RW RW RW RW Default 0x0012 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 ADuCM360/ADuCM361 Hardware User Guide UG-367 PWM Control Register 0 Address: 0x40001000, Reset: 0x0020, Name: PWMCON0 Table 205. PWMCON0 Register Bit Descriptions Bit Position 15 Name SYNC 14 13 Reserved PWM5INV 12 PWM3INV 11 PWM1INV 10 PWMIEN 9 ENA 8:6 PRE 5 POINV 4 HOFF 3 LCOMP 2 DIR 1 MOD 0 ENABLE Description PWM synchronization. 0: Ignore transitions on the PWMSYNC pin. 1: All PWM counters are reset on the next clock edge after the detection of a falling edge on the PWNSYNC pin. Pair 2 low-side polarity (PWM5). Available in standard mode only. 0: PWM5 is normal. 1: Invert PWM5. Pair 1 low-side polarity (PWM3). Available in standard mode only. 0: PWM3 is normal. 1: Invert PWM3. Pair 0 low-side polarity (PWM1). Available in standard mode only. 0: PWM1 is normal. 1: Invert PWM1. 0: Disables the PWM interrupts. 1: Enables PWM interrupts. If HOFF = 0 and HMODE = 1. Available in H-bridge mode only. 0: Disable PWM outputs. 1: Enable PWM outputs. PWM clock prescaler. Sets UCLK divider. 000: UCLK/2. 001: UCLK/4. 010: UCLK/8. 011: UCLK/16. 100: UCLK/32. 101: UCLK/64. 110: UCLK/128. 111: UCLK/256. PWM polarity. Available in H-bridge mode only. 0: PWM outputs as normal. 1: Invert all PWM outputs. High-side off. Available in H-bridge mode only. 0: PWM outputs as normal. 1: Forces PWM0 and PWM2 outputs high and PWM1 and PWM3 low (default). Load compare registers. Available in H-bridge and standard modes. 0: Use the values previously stored in the internal compare registers. 1: Load the internal compare registers with the values in PWMxCOMx on the next transition of the PWM timer from 0x00 to 0x01 (PWM timer overflow). Direction control. Available in H-bridge mode only. 0: Enable PWM2 and PWM3 as the output signals while PWM0 and PWM1 are held low. 1: Enables PWM0 and PWM1 as the output signals while PWM2 and PWM3 are held low. PWM mode of operation. 0: PWMs in standard mode. 1: Enables H-bridge mode and Bits[5:2] of PWMCON0 (default). PWM output enable. 0: Disables all PWM outputs. 1: Enables all PWM outputs. Note that • • Except for LCOMP, all other bits of PWMCON0 register can be changed only when ENABLE is low. When LCOMP is written with Value 1, it stays at that value until the new value is loaded in the compare registers for all the channels. Rev. D | Page 168 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide PWM1 Control Register Address: 0x40001004, Reset: 0x0020, Name: PWMCON1 Table 206. PWMCON1 Register Bit Descriptions Bits 15:7 6 Name Reserved TRIPEN 5:0 Reserved Description Reserved. Reads 0. 0: Disable PWM trip functionality. 1: Enable PWM trip functionality. Reserved. PWMCLRI Register Address: 0x40001008, Reset: 0x0020, Name: PWMCLRI Table 207. PWMCLRI Register Bit Descriptions Bits 15:5 4 Name Reserved TRIP 3 2 Reserved PWM2 1 PWM1 0 PWM0 Description Reserved. These bits always read 0. 1: Clear the latched TRIPIRQPWM interrupt. This bit always reads 0. This bit always reads 0. 1: Clear the latched IRQPWM2 interrupt. This bit always reads 0. 1: Clear the latched IRQPWM1 interrupt. This bit always reads 0. 1: Clear the latched IRQPWM0 interrupt. This bit always reads 0. Rev. D | Page 169 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 POWER SUPPLY SUPPORT CIRCUITS POWER SUPPLY SUPPORT CIRCUITS FEATURES Low Dropout Regulators The ADuCM360/ADuCM361 integrates an on-chip regulator (AVDD_REG-based LDO) that is driven directly from the AVDD supply to generate a 1.8 V internal supply. This regulated supply is then used as the supply voltage for the ARM Cortex-M3 and peripherals, including the precision analog circuits on chip. The LDO has its own output pin, AVDD_REG. It needs an external capacitor of 0.47 μF for stability. Turning on and off the LDO is done automatically when selecting the operation mode of the device. It is not possible to overdrive the LDO. Pin 7, DVDD_REG must be connected to DGND via a 470 nF capacitor. Pin 18, AVDD_REG, must be connected to AGND via a 470 nF capacitor. Pin 7 , DVDD_REG, and Pin 18, AVDD_REG, must also be connected together. See Figure 39. Power-On Reset The power-on reset (POR) function is also integrated to ensure safe operation of the processor. The POR circuit is designed to guarantee full functional operation of the Flash/EE memory-based processor during power-on and power-down cycles. As shown in Figure 37, when the supply voltage on AVDD reaches a minimum operating voltage of 1.6 V and the LDO output is 1.65 V, a POR signal keeps the processor in reset for 50 ms. The output of the POR is available on P0.6. VRTH VRTH – VHYST AVDD_REG (1.8V) AVDD (3.3V) POR tPOR tPOR tPOR 10464-035 50ms RESET Figure 37. Typical Power-On Cycle Rev. D | Page 170 of 176 UG-367 ADuCM360/ADuCM361 Hardware User Guide HARDWARE DESIGN CONSIDERATIONS 48 47 46 45 44 43 42 41 40 39 38 37 SWDIO SWCLK P2.0/SCL/UARTCLK P1.7/IRQ7/PWM5/CS0 P1.6/IRQ6/PWM4/MOSI0 P1.5/IRQ5/PWM3/SCLK0 P1.4/PWM2/MISO0 P1.3/PWM1/DSR P1.2/PWM0/RI P1.1/IRQ4/PWMTRIP/DTR P1.0/IRQ3/PWMSYNC/EXTCLK IOVDD PIN CONFIGURATION AND FUNCTION DESCRIPTIONS ADuCM360/ ADuCM361 TOP VIEW (Not to Scale) 36 35 34 33 32 31 30 29 28 27 26 25 P0.7/POR/SOUT P0.6/IRQ2/SIN P0.5/CTS/IRQ1 P0.4/RTS/ECLKO P0.3/IRQ0/CS1 P0.2/MOSI1/SDA/SOUT P0.1/SCLK1/SCL/SIN P0.0/MISO1 AIN11/VBIAS1 AIN10 AIN9/DACBUFF+ AIN8/EXTREF2IN– NOTES 1. THE LFCSP HAS AN EXPOSED PAD THAT MUST BE SOLDERED TO A METAL PLATE ON THE PCB FOR MECHANICAL REASONS AND TO DGND. 10464-136 GND_SW VREF+ VREF– AGND AVDD AVDD_REG DAC INT_REF IREF AIN5/IEXC AIN6/IEXC AIN7/VBIAS0/IEXC/EXTREF2IN+ 13 14 15 16 17 18 19 20 21 22 23 24 RESET 1 P2.1/SDA/UARTDCD 2 P2.2/BM 3 XTALO 4 XTALI 5 IOVDD 6 DVDD_REG 7 AIN0 8 AIN1 9 AIN2 10 AIN3 11 AIN4/IEXC 12 Figure 38. Pin Configuration Table 208. Pin Function Descriptions Pin No. 1 2 3 Mnemonic RESET P2.1/SDA/UARTDCD P2.2/BM 4 5 6 7 XTALO XTALI IOVDD DVDD_REG 8 AIN0 9 AIN1 10 AIN2 11 AIN3 12 AIN4/IEXC 13 GND_SW Description Reset Pin, Active Low Input. An internal pull-up is provided. General-Purpose Input/Output P2.1/I2C Serial Data Pin/UART Data Carrier Detect Pin. General-Purpose Input/Output P2.2/Boot Mode Input Select Pin. When this pin is held low during any reset sequence and for a short time after, the part enters UART download mode. External Crystal Oscillator Output Pin. Optional 32.768 kHz source for real-time clock. External Crystal Oscillator Input Pin. Optional 32.768 kHz source for real-time clock. Digital System Supply Pin. This pin must be connected to DGND via a 0.1 µF capacitor. This pin must be connected to DGND via a 470 nF capacitor and to Pin 18, AVDD_REG, as shown in Figure 39. ADC Analog Input 0. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode. ADC Analog Input 1. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode. ADC Analog Input 2. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode. ADC Analog Input 3. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode. ADC Analog Input 4/Excitation Current Source. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN4). This pin can also be configured as the output pin for Excitation Current Source 0 or Excitation Current Source 1 (IEXC). Sensor Power Switch to Analog Ground Reference. Rev. D | Page 171 of 176 ADuCM360/ADuCM361 Hardware User Guide Pin No. 14 Mnemonic VREF+ 15 VREF− 16 17 18 AGND AVDD AVDD_REG 19 20 21 DAC INT_REF IREF 22 AIN5/IEXC 23 AIN6/IEXC 24 AIN7/VBIAS0/IEXC/EXTREF2IN+ 25 AIN8/EXTREF2IN− 26 AIN9/DACBUFF+ 27 AIN10 28 AIN11/VBIAS1 29 30 P0.0/MISO1 P0.1/SCLK1/SCL/SIN 31 P0.2/MOSI1/SDA/SOUT 32 33 P0.3/IRQ0/CS1 P0.4/RTS/ECLKO 34 35 P0.5/CTS/IRQ1 P0.6/IRQ2/SIN 36 P0.7/POR/SOUT 37 38 IOVDD P1.0/IRQ3/PWMSYNC/EXTCLK 39 P1.1/IRQ4/PWMTRIP/DTR 40 41 42 P1.2/PWM0/RI P1.3/PWM1/DSR P1.4/PWM2/MISO0 UG-367 Description External Reference Positive Input. An external reference can be applied between the VREF+ and VREF− pins. External Reference Negative Input. An external reference can be applied between the VREF+ and VREF− pins. Analog System Ground Reference Pin. Analog System Supply Pin. This pin must be connected to AGND via a 0.1 μF capacitor. Internal Analog Regulator Supply Output. This pin must be connected to AGND via a 470 nF capacitor and to Pin 7, DVDD_REG, as shown in Figure 39. DAC Voltage Output. Internal Reference. This pin must be connected to ground via a 470 nF decoupling capacitor. Optional Reference Current Resistor Connection for the Excitation Current Sources. The reference current used for the excitation current sources is set by a low drift (5 ppm/°C) external resistor connected to this pin. ADC Analog Input 5/Excitation Current Source. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN5). This pin can also be configured as the output pin for Excitation Current Source 0 or Excitation Current Source 1 (IEXC). ADC Analog Input 6/Excitation Current Source. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN6). This pin can also be configured as the output pin for Excitation Current Source 0 or Excitation Current Source 1 (IEXC). ADC Analog Input 7/Bias Voltage Output/Excitation Current Source/External Reference 2 Positive Input. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN7). This pin can also be configured as an analog output pin to generate a bias voltage, VBIAS0 of AVDD_REG/2 (VBIAS0); as the output pin for Excitation Current Source 0 or Excitation Current Source 1 (IEXC); or as the positive input for External Reference 2 (EXTREF2IN+). ADC Analog Input 8/External Reference 2 Negative Input. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN8). This pin can also be configured as the negative input for External Reference 2 (EXTREF2IN−). When DACCON[8] = 1, VREF is present on AIN8. ADC Analog Input 9/Noninverting Input to the DAC Output Buffer. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN9). This pin can also be configured as the noninverting input to the DAC output buffer when the DAC is configured for NPN mode (DACBUFF+). ADC Analog Input 10. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode. ADC Analog Input 11/Bias Voltage Output. This pin can be configured as a positive or negative input to either ADC in differential or single-ended mode (AIN11). This pin can also be configured as an analog output pin to generate a bias voltage, VBIAS1 of AVDD_REG/2 (VBIAS1). General-Purpose Input/Output P0.0/SPI1 Master Input, Slave Output Pin. General-Purpose Input/Output P0.1/SPI1 Serial Clock Pin/I2C Serial Clock Pin/UART Serial Input (Data Input for the UART Downloader). General-Purpose Input/Output P0.2/SPI1 Master Output, Slave Input Pin/I2C Serial Data Pin/ UART Serial Output (Data Output for the UART Downloader). General-Purpose Input/Output P0.3/External Interrupt Request 0/SPI1 Chip Select Pin (Active Low). General-Purpose Input/Output P0.4/UART Request-to-Send Signal/External Clock Output Pin for Test Purposes. General-Purpose Input/Output P0.5/UART Clear-to-Send Signal/External Interrupt Request 1. General-Purpose Input/Output P0.6/External Interrupt Request 2/UART Serial Input. Not used by UART downloader. General-Purpose Input/Output P0.7/Power-On Reset Pin (Active Low)/UART Serial Output. Not used by UART downloader. Digital System Supply Pin. This pin must be connected to DGND via a 0.1 μF capacitor. General-Purpose Input/Output P1.0/External Interrupt Request 3/PWM External Synchronization Input/External Clock Input Pin. General-Purpose Input/Output P1.1/External Interrupt Request 4/PWM External Trip Input/ UART Data Terminal Ready Pin. General-Purpose Input/Output P1.2/PWM0 Output/UART Ring Indicator Pin. General-Purpose Input/Output P1.3/PWM1 Output/UART Data Set Ready Pin. General-Purpose Input/Output P1.4/PWM2 Output/SPI0 Master Input, Slave Output Pin. Rev. D | Page 172 of 176 UG-367 Pin No. 43 Mnemonic P1.5/IRQ5/PWM3/SCLK0 44 P1.6/IRQ6/PWM4/MOSI0 45 P1.7/IRQ7/PWM5/CS0 46 47 48 P2.0/SCL/UARTCLK SWCLK SWDIO EP ADuCM360/ADuCM361 Hardware User Guide Description General-Purpose Input/Output P1.5/External Interrupt Request 5/PWM3 Output/SPI0 Serial Clock Pin. General-Purpose Input/Output P1.6/External Interrupt Request 6/PWM4 Output/SPI0 Master Output, Slave Input Pin. General-Purpose Input/Output P1.7/External Interrupt Request 7/PWM5 Output/SPI0 Chip Select Pin (Active Low). General-Purpose Input/Output P2.0/I2C Serial Clock Pin/Input Clock Pin for UART Block Only. Serial Wire Debug Clock Input Pin. Serial Wire Debug Data Input/Output Pin. Exposed Pad. The LFCSP has an exposed pad that must be soldered to a metal plate on the PCB for mechanical reasons and to DGND. Rev. D | Page 173 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 TYPICAL SYSTEM CONFIGURATION 46 45 44 43 SWCLK P2.0/SCL/ UARTCLK P1.7/IRQ7/ PWM5/CS0 P1.6/IRQ6/ PWM4/MOSI0 P1.5/IRQ5/ PWM3/SCLK0 RESET 41 42 P1.3/PWM1/ DSR SWCLK 47 P1.4/PWM2/ MISO0 SWDIO 48 SWDIO Figure 39 shows a typical ADuCM360/ADuCM361 configuration. This figure illustrates some of the hardware considerations. The bottom of the LFCSP package has an exposed pad that must be soldered to a metal plate on the PCB for mechanical reasons and to DGND. The metal plate of the PCB can be connected to ground. The 0.47 µF capacitor on the AVDD_REG and DVDD_REG pins should be placed as close to the pins as possible. In noisy environments, an additional 1 nF capacitor can be added to IOVDD and AVDD. 1 RESET P1.2/PWM0/RI 40 2 P2.1/SDA/UARTDCD 12pF P1.1/IRQ4/PWMTRIP/DTR 39 3 P2.2/BM 4 XTALO IOVDD 37 5 XTALI DVDD DGND 0.1µF P0.7/POR/SOUT 36 6 IOVDD 12pF DVDD P1.0/IRQ3/PWMSYNC/EXTCLK 38 P0.6/IRQ2/SIN 35 7 DVDD_REG DGND P0.5/CTS/IRQ1 34 0.1µF 8 AIN0 DGND 0.47µF P0.4/RTS/ECLKO 33 ADuCM360/ADuCM361 9 AIN1 P0.3/IRQ0/CS1 32 10 AIN2 P0.2/MOSI1/SDA/SOUT 31 11 AIN3 P0.1/SCLK1/SCL/SIN 30 12 AIN4/IEXC P0.0/MISO1 29 13 GND_SW AIN11/VBIAS1 28 14 VREF+ AIN10 27 15 VREF– AIN9/DACBUFF+ 26 AIN8/EXTREF2IN– 25 AVDD AVDD_REG DAC INT_REF IREF AIN5/IEXC AIN6/IEXC AIN7/VBIAS0/ IEXC/ EXTREF2IN+ 16 AGND 17 18 19 20 21 22 23 24 AVDD 0.47µF 150kΩ ADP1720ARMZ-3.3 DVDD 0.1µF RESET RESET GND DGND SWIO SWDIO TX SWCLK SWCLK RX 5V USB IN 1µF DGND AVDD 1.6Ω OUT 560Ω EN 4.7µF 0.1µF 4.7µF 0.1µF GND AGND DGND DGND Figure 39. Typical System Configuration Rev. D | Page 174 of 176 AGND AGND 10464-137 INTERFACE BOARD CONNECTOR 0.47µF UG-367 ADuCM360/ADuCM361 Hardware User Guide SERIAL WIRE DEBUG INTERFACE VCC 1 2 VCC (OPTIONAL) NYU 3 4 GND NYU 5 6 GND SWDIO 7 8 GND SWCLK 9 10 GND NYU 11 12 GND SWO 13 14 GND RESET 15 16 GND NYU 17 18 GND NYU 19 20 GND 10464-038 Serial wire debug (SWD) provides a debug port for pin limited packages. SWD replaces the 5-pin JTAG port with a clock (SWDCLK) and a single bidirectional data pin (SWDIO), providing all the normal JTAG debug and test functionality. SWDIO and SWCLK are overlaid on the TMS and TCK pins on the ARM 20-pin JTAG interface. Figure 40. SWD 20-Pin Connector Pinout Table 209. SWD Connections Signal SWDIO SWO SWCLK VCC GND RESET Connect to Data I/O pin. Use a 100 kΩ pull-up resistor to VCC. No connect. Clock pin. Use a 100 kΩ pull-up resistor to VCC. Positive supply voltage—power supply for JTAG interface drivers. Digital ground. No connect. Rev. D | Page 175 of 176 ADuCM360/ADuCM361 Hardware User Guide UG-367 RELATED LINKS Resource ADuCM360 ADuCM361 ADuCM360/ADuCM361 Data sheet Description Product Page, ADuCM360 Product Page, ADuCM361 ADuCM360/ADuCM361 data sheet I2C refers to a communications protocol originally developed by Philips Semiconductors (now NXP semiconductors). ESD Caution ESD (electrostatic discharge) sensitive device. Charged devices and circuit boards can discharge without detection. Although this product features patented or proprietary protection circuitry, damage may occur on devices subjected to high energy ESD. Therefore, proper ESD precautions should be taken to avoid performance degradation or loss of functionality. Legal Terms and Conditions By using the evaluation board discussed herein (together with any tools, components documentation or support materials, the “Evaluation Board”), you are agreeing to be bound by the terms and conditions set forth below (“Agreement”) unless you have purchased the Evaluation Board, in which case the Analog Devices Standard Terms and Conditions of Sale shall govern. Do not use the Evaluation Board until you have read and agreed to the Agreement. Your use of the Evaluation Board shall signify your acceptance of the Agreement. This Agreement is made by and between you (“Customer”) and Analog Devices, Inc. (“ADI”), with its principal place of business at One Technology Way, Norwood, MA 02062, USA. Subject to the terms and conditions of the Agreement, ADI hereby grants to Customer a free, limited, personal, temporary, non-exclusive, non-sublicensable, non-transferable license to use the Evaluation Board FOR EVALUATION PURPOSES ONLY. Customer understands and agrees that the Evaluation Board is provided for the sole and exclusive purpose referenced above, and agrees not to use the Evaluation Board for any other purpose. Furthermore, the license granted is expressly made subject to the following additional limitations: Customer shall not (i) rent, lease, display, sell, transfer, assign, sublicense, or distribute the Evaluation Board; and (ii) permit any Third Party to access the Evaluation Board. As used herein, the term “Third Party” includes any entity other than ADI, Customer, their employees, affiliates and in-house consultants. The Evaluation Board is NOT sold to Customer; all rights not expressly granted herein, including ownership of the Evaluation Board, are reserved by ADI. CONFIDENTIALITY. This Agreement and the Evaluation Board shall all be considered the confidential and proprietary information of ADI. Customer may not disclose or transfer any portion of the Evaluation Board to any other party for any reason. Upon discontinuation of use of the Evaluation Board or termination of this Agreement, Customer agrees to promptly return the Evaluation Board to ADI. ADDITIONAL RESTRICTIONS. Customer may not disassemble, decompile or reverse engineer chips on the Evaluation Board. Customer shall inform ADI of any occurred damages or any modifications or alterations it makes to the Evaluation Board, including but not limited to soldering or any other activity that affects the material content of the Evaluation Board. Modifications to the Evaluation Board must comply with applicable law, including but not limited to the RoHS Directive. TERMINATION. ADI may terminate this Agreement at any time upon giving written notice to Customer. Customer agrees to return to ADI the Evaluation Board at that time. LIMITATION OF LIABILITY. THE EVALUATION BOARD PROVIDED HEREUNDER IS PROVIDED “AS IS” AND ADI MAKES NO WARRANTIES OR REPRESENTATIONS OF ANY KIND WITH RESPECT TO IT. ADI SPECIFICALLY DISCLAIMS ANY REPRESENTATIONS, ENDORSEMENTS, GUARANTEES, OR WARRANTIES, EXPRESS OR IMPLIED, RELATED TO THE EVALUATION BOARD INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, TITLE, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT WILL ADI AND ITS LICENSORS BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES RESULTING FROM CUSTOMER’S POSSESSION OR USE OF THE EVALUATION BOARD, INCLUDING BUT NOT LIMITED TO LOST PROFITS, DELAY COSTS, LABOR COSTS OR LOSS OF GOODWILL. ADI’S TOTAL LIABILITY FROM ANY AND ALL CAUSES SHALL BE LIMITED TO THE AMOUNT OF ONE HUNDRED US DOLLARS ($100.00). EXPORT. Customer agrees that it will not directly or indirectly export the Evaluation Board to another country, and that it will comply with all applicable United States federal laws and regulations relating to exports. GOVERNING LAW. This Agreement shall be governed by and construed in accordance with the substantive laws of the Commonwealth of Massachusetts (excluding conflict of law rules). Any legal action regarding this Agreement will be heard in the state or federal courts having jurisdiction in Suffolk County, Massachusetts, and Customer hereby submits to the personal jurisdiction and venue of such courts. The United Nations Convention on Contracts for the International Sale of Goods shall not apply to this Agreement and is expressly disclaimed. ©2012–2014 Analog Devices, Inc. All rights reserved. Trademarks and registered trademarks are the property of their respective owners. UG10464-0-9/14(D) Rev. D | Page 176 of 176