AP32303 - XMC1000/XMC4000 - Universal Serial Interface Channel(USIC)

XMC 1000, XMC 4000
32-bit Microcontroller Series for Industrial Applications
Un iversal Serial In terface Channel (U SIC )
AP32303
Application Note
About this document
Scope and purpose
This application note gives an overview of the Infineon Universal Serial Interface Channel (USIC) module.
The document then describes the various features in more detail and provides some pratical examples.
Intended audience
This document is intended for engineers who are familiar with the XMC Microcontrollers series.
Applicable Products

XMC1000 and XMC4000 Microcontrollers Family
References
Infineon: Example code: http://www.infineon.com/XMC4000 Tab: Documents
Infineon: Example code: http://www.infineon.com/XMC1000 Tab: Documents
Infineon: XMC Lib, http://www.infineon.com/DAVE
Infineon: DAVE™, http://www.infineon.com/DAVE
Infineon: XMC Reference Manual, http://www.infineon.com/XMC4000 Tab: Documents
Infineon: XMC Reference Manual, http://www.infineon.com/XMC1000 Tab: Documents
Infineon: XMC Data Sheet, http://www.infineon.com/XMC4000 Tab: Documents
Infineon: XMC Data Sheet, http://www.infineon.com/XMC1000 Tab: Documents
V1.0
1
2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Table of Contents
Table of Contents
1
1.1
1.2
1.2.1
1.3
1.4
1.4.1
1.4.2
1.4.3
1.4.4
1.5
1.5.1
1.5.2
1.5.3
1.5.4
1.6
1.6.1
1.6.2
1.7
Universal Serial Interface Channel Overview ...................................................................4
USIC Structure ..................................................................................................................................... 4
Input stages ......................................................................................................................................... 4
Typical application use cases ....................................................................................................... 5
Output signals ..................................................................................................................................... 6
Baud Rate Generator ........................................................................................................................... 8
Clock Input DX1 (Optional) ........................................................................................................... 9
Fractional Divider .......................................................................................................................... 9
Protocol Related Counter ........................................................................................................... 11
Protocol Pre-Processor ............................................................................................................... 12
Data Shifting and Handling ............................................................................................................... 14
Transmit and Receive Buffering ................................................................................................. 14
Data Shift Control: Transmission/Receive Process (SCTR) ....................................................... 15
Transmit Shift Control information (for Tx Process) ................................................................. 17
Transmit Data Validation Information (for Tx Process) ............................................................. 19
Channel Events and Interrupt Generation Unit ............................................................................... 19
Data Transfer Events Related to Transmission/ Reception ....................................................... 19
Protocol-Specific Interrupts ....................................................................................................... 20
FIFO Data Buffer and Interrupts Events ............................................................................................ 23
2
2.1
2.2
2.3
2.3.1
2.3.2
2.3.3
2.3.4
2.4
2.4.1
2.4.2
2.4.3
2.5
2.6
2.7
2.7.1
2.7.2
2.7.3
Synchronous Serial Channel (SSC = SPI) ........................................................................ 25
Input stages, Output Signals and the Protocol Pre-Process ........................................................... 25
Baud rate Generation ........................................................................................................................ 26
Data Shifting and Handling ............................................................................................................... 27
Data Transmission and Reception ............................................................................................. 27
SPI Frame Delay Control ............................................................................................................. 28
Shift Clock (SCLK) and CS ........................................................................................................... 29
Parity Mode ................................................................................................................................. 30
SPI Software configuration ............................................................................................................... 31
SPI Full-Duplex Communication (Example 1) ............................................................................ 31
Software in Loopback mode (Example 2) .................................................................................. 33
SPI for Half- Duplex Communication ......................................................................................... 33
Delay Compensation ......................................................................................................................... 35
Multiple MSLS Output Signals........................................................................................................... 40
XMC Lib Implementation: Full-Duplex mode ................................................................................... 41
Configuration .............................................................................................................................. 41
Initialization ................................................................................................................................ 42
Function implementation ........................................................................................................... 43
3
3.1
3.2
3.3
3.3.1
3.3.2
3.3.3
Asynchronous Serial Channel (ASC = UART) ................................................................... 44
Frame Format .................................................................................................................................... 45
Baud Rate Generation ....................................................................................................................... 46
XMC Lib Implementation: Full-Duplex mode .................................................................................. 46
Configuration .............................................................................................................................. 46
Initialization ................................................................................................................................ 47
Function implementation ........................................................................................................... 47
Application Note
2
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Table of Contents
3.4
3.4.1
3.4.2
3.4.3
3.5
3.5.1
3.5.2
3.5.3
3.6
3.6.1
3.6.2
XMC Lib Implementation: Loopback mode ...................................................................................... 48
Configuration .............................................................................................................................. 48
Initialization ................................................................................................................................ 48
Function implementation ........................................................................................................... 48
XMC Lib Implementation: Half-Duplex mode ................................................................................... 49
Configuration .............................................................................................................................. 49
Initialization ................................................................................................................................ 49
Function implementation ........................................................................................................... 49
XMC Lib Implementation: Loopback mode with FIFO ..................................................................... 50
Configuration .............................................................................................................................. 50
Function implementation ........................................................................................................... 50
4
4.1
4.2
4.3
4.4
4.4.1
4.4.2
4.4.3
Inter-IC Bus Protocol (I2C) ........................................................................................... 52
Frame Format .................................................................................................................................... 52
Symbol Timing .................................................................................................................................. 53
Data Flow Handling ........................................................................................................................... 54
XMC Lib Implementation: Master to Slave mode ............................................................................. 56
Configuration .............................................................................................................................. 56
Initialization ................................................................................................................................ 56
Function implementation ........................................................................................................... 57
5
Revision History .......................................................................................................... 59
Application Note
3
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
1
Universal Serial Interface Channel Overview
The Infineon Universal Serial Interface Channel (USIC) is a flexible interface module that covers several serial
communication protocols.
1.1
USIC Structure
Each USIC module has 2 channels and each channel has the same structure, consisting of:

Input stages (data/clock/control input stage): DX0...DX5

Output signals (data/clock/control signals): DOUT0...DOUT3, SCLKOUT, SEL[0..7], MCLKOUT

Baud rate generator

Data shift unit for data shifting and handling

Channel events and interrupt generation unit

FIFO structure for data transmission and reception
1.2
Input stages
Each channel contains the following stages:

4 data input stages (DX0, DX3, DX4 and DX5)

1 clock input stage (DX1)

1 control input stage (DX2)
Figure 1
Input Conditioning for DX0 and DX[5:3] (Data Input Stage)
Application Note
4
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Figure 2
Input Conditioning for DX[2:1]
Notes:

In contrast to the data input stage DX0, DX3...DX5, there are no hardware pins (HWINn) on the clock input
(DX1) and the control input stage (DX2).

HWINn is only available on the 4 data input stages.

DX3, DX4 and DX5 support multiple data input/output SPI applications, such as the the dual and quadSPI.

CCR.HPCEN enables the hardware port control for quick data exchange. It also allows the USIC pins to
directly drive complex control and communications patterns without further software interaction with
the ports. CCR.HPCEN is not installed on the clock (DX1) and the control (DX2) input stage.

The number of input signals used depends on the selected protocol and application mode. For example,
UART only uses DX0 (as RX) line, while DX1 can be optionally used for collision detection.
1.2.1
Typical application use cases
Loopback mode
In UART protocol loopback mode (only DX0 is used):
− DX0CR.DSEL= DX0G and DX0CR.INSW=0
In SPI protocol loopback mode (master mode):

XMC1000 family
− The data line loopback mode: DX0CR.DSEL= DX0G and DX3CR.DSEL= DX3G
− The clock line loopback mode: DX1CR.DSEL= DX1G and DX4CR.DSEL= DX4G
Application Note
5
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
− The CS line loopback mode: DX2CR.DSEL= DX2G and DX5CR.DSEL= DX5G

XCM4000 family
− The data line loopback mode: DX0CR.DSEL= DX0G
− The clock line loopback mode: DX1CR.DSEL= DX1G
− The CS line loopback mode: DX2CR.DSEL= DX2G
Note: There is no loopback mode for the I2C protocol
Protocol Pre-processor (PPP) or Input signal direct modes
Selects the input data direct mode (DXxCR.INSW=1b) or the output of the protocol Pre-Processor (PPP)
(DXxCR.INSW=0 b)

UART mode: DX0CR.INSW=0b (PPP is used)

SPI master mode: DX0CR.INSW=1b (data input), DX1 and DX2 are not used

SPI slave mode: DX0CR.INSW=1b (data input), DX1CR.INSW=1b (clock input), DX2CR.INSW=1b (CS input)

I2C master/slave mode: DX0CR.INSW=0b, DX1CR.INSW=0b (both input stages use the PPP)

I2S master mode: like SPI mode

I2S slave mode: like SPI mode
If the input signal is used (INSW=1b), then:

The edge can be defined as a trigger signal (via DXxCR.CM)

A digital filter can be used (via DXxCR.DFEN)

Data synchronization can be enabled (via DXxCR.DSEN)
Invert the input signal (via bit DPOL)
In applications, a ‘low’ active Chip Select (CS) line is normally used as the input signal for the slave
SPIdevice. This means, its polarity must be inverted.
1.3
Output signals
For each protocol up to 14 output signals are available:

Data output: DOUT0…DOUT3

Clock output: SCLKOUT, MCLKOUT

Control output: SELO[7..0]
Application Note
6
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Figure 3
Output Stage
Application Note
7
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
The number of outputs actually used depends on the selected protocol.

UART mode: DOUT0 data output

SPI master mode: DOUT0…DOUT3, SCLKOUT, SEL[7:0], clkout optional

SPI slave mode: DOUT0…DOUT3

I2C master/slave mode: DOUT0, SCLKOUT

I2S master mode: DOUT0, SCLKOUT, SELO[7:0]

I2S slave mode: DOUT0
Note: Data Output line DOUT1…DOUT3 is implemented in the XMC family of products to support multiple
data input/output SPI applications, such as dual and quad-SPI
Output stage configuration options
The polarity of the MCLKOUT can be configured via BRG.MCLKCFG

MCLKOUT has a fixed phase relation to the SCLKOUT. It is usually used in I2S communication as the
master base clock in order to get a communication network with synchronized connections.
The polarity of the output signals can be inverted:
Data output:

To generate a data signal for IrDA mode its polarity can be inverted via SCTR.DOCFG
Clock output:

The polarity of the shift clock output signal SCLKOUT can be configured and a delay of one period of fPDIV
(half SCLK period) can be created (BRG.SCLKOUT). Usually 4 different SPI shift clock output signals
(SCLKOUT) are generated.
Control output:

The polarity of the control signal SELOx. The putput pin CS for the SPI device normally has an active ‘low’
level. In this instance the polarity of the SELO signal has been inverted by setting pin SELINV in the
register PCR.
1.4
Baud Rate Generator
Baud rate generation is divided into following parts:
Clock Input DX1 (optional):

Usually in slave mode for baud rate generation, based on the external signal
Fractional divider:

Generates baud rate based on system clock fPB

Protocol-related counters:
− Time mode: contains PDIV divider and provides SCLK in SPI and generates fCTQIN
− Capture mode: counter for time interval measurement. For example, baud rate detection in LIN slave
mode (BRG.TMEN=1)
Application Note
8
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview

Protocol Pre-Processor (PPP):
− Generate time quanta counter for one bit in UART/I2C (standard setting: fCTQIN = fFD with CTQSEL = 00B)
− Delay time configuration in SPI mode (standard setting fCTQIN = fSCLK with CTQSEL = 10B)
− The system word length in I2S mode (standard setting fCTQIN = fSCLK with CTQSEL = 10B)
Figure 4
Baud Rate Generator
1.4.1
Clock Input DX1 (Optional)
The DX1 input stage is used for baud generation based on an external signal. It is normally used for slave
mode.
An external input signal at the DX1 input stage can be optionally filtered and synchronized with fPB (fSYS).

If BRG.CLKSEL=10b, signal MCLK toggles with fPIN
− The trigger signal DX1T determines fDX1
− Both rising/falling edges of the input signal can be used for baud rate generation. The active edge is
selected by bit field DX1CR.CM

If BRG.CLKSEL=11b,fPIN is derived from the rising edges of DX1S
− The rising edges of the input signal can be used for baud rate generation
− The external signal is synchronized
− The rising edge of DX1S is used for the synchronization
1.4.2
Fractional Divider
If the fractional divider is used, then it holds fPIN=fPB for baud rate generation based on fPB.
There are two operations modes:
Application Note
9
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview

Normal divider mode:
− In this mode (FDR.DM=01b) it behaves like a reload counter (addition of +1) that generates an output
clock on the trasition from 3FFH to 000H
− The bitfield RESULT represents the counter value, and STEP defines the reload value

Fractional divider mode:
− An output clock pulse at fPD is generated dependent on the result of the addition FDR.RESULT +
FDR.STEP. If the addition leads to an overflow over 3FFH a pulse is generated at fPD
Comparison of modes
The fractional divider mode provides the average output clock frequency with a higher accuracy than in
normal divider mode, but fFD can have a maximum period jitter of one fPB(=fSYS) period.
The preference is to use normal divider for a higher baud rate.
Figure 5
Fractional Divider
Application Note
10
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
1.4.3
Protocol Related Counter
Protocol-related counter can be used in divider or capture mode. The counter contains a PDIV divider and
generates fCTQIN
Divider mode
PDIV divider:

this provides, for example, the shift clock SCLK, and MCLK in SPI (signal MCLK and SCLK have 50% duty
cycle)

fCTQIN generator is used for:
− UART/I2C baud rate generation
− Delay time configuration in SPI
The following figure illustrates divider mode being used to generate baud rate.
Figure 6
Protocol-Related Counter in Divider Mode
Software configuration for baud rate generation based on fSYS

fFD=f(fSYS) via bits field DM and STEP in register FDR

fPIN=fFD via bits CLKSEL=00B in register BRG

fPPP=fPIN or fMCLK via bit PPPEN in register BRG

fPDIV =f(fPPP) via bits field PDIV in register BRG

select fCTQIN via bits field CTQSEL in register BRG
− CTQSEL=00B -> fCTRQ=fPDIV
− CTQSEL=01B -> fCTRQ=fPPP
− CTQSEL=10B -> fCTRQ=fSCLK
− CTQSEL=11B -> fCTRQ=fMCLK
Application Note
11
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
SCLKOUT can take the transmit shift clock from the input stage DX1.
Selection is made through BRG.SCLKOSEL.
The slave has to setup the SCLKOUT pin function to output the shift clock by setting bit BRG.SCLKOSEL to 1,
while the master has to set the DX1 pin function to receive the shift clock from the slave and enable the
delay compensation with DX1CR.DCEN = 1 and DX1CR.INSW = 0.
Capture mode
The protocol-related counter is used for internal time measurement (BRF.TMEN=1). For example, to
measure the baud rate in slave mode before starting data transfers (the time between two edges of DX0T
and DX1), for example, baud rate detection in LIN slave mode.
Figure 7
Protocol-Related Counter in Capture Mode
1.4.4
Protocol Pre-Processor
The protocol Pre-Processor (PPP) is used to generate time intervals for protocol-specific purposes. It has a
time quanta counter and is used for bit timing control. For example:
− PCTQ: pre-divider for time quanta counter (division of fCTQIN by 1,2,3 or 4)
− DCTQ: denominator for time quanta counter
Usually it generates:

Time quanta counter for one bit in UART / I2C (normal setting: fCTQIN = fPDIV with CTQSEL = 00B)

Delay time configuration in SPI mode (normally fCTQIN = fSCLK with CTQSEL = 10B)

System word length in I2S mode (normally fCTQIN = fSCLK with CTQSEL = 10B)
Application Note
12
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Figure 8
Time Quanta Counter
The PPP supports UART, SPI, I2C and I2S communication protocols:
UART

Maximum frequency is fSYS/4 (maximum module capability: DCTQ>=3)

Number of data bits: 1 to 63

PTCQ: the length of a time quantum (division of fCTQIN by 1, 2 , 3 or 4)

DCTQ: the number of time quanta per bit time. A standard setting is DCTQ+1=16 (sample point SP=8 or 9,
SP< DCTQ, recommended: DTCQ >= 4)
SPI

Module capability: maximum fSYS/2

Application target baudrate: ~60MBaud for both transmission and reception (please refer to the
appropriate data sheet for further details)

Number of data bits: 1 to 63, >63 bits using explicit stop condition

PCTQ: define the length of a time quantum for delay Tld and Ttd

DCTQ: the number of time quanta for the delay generation for Tld and Tid

Tld = Ttd = (PCTQ+1)x(DCTQ+1)/fCTQIN
I2C

7bit and 10bit addressing mode

PCTQ: the length of a time quantum (division of fCTQIN by 1, 2 , 3 or 4)

DCTQ: the number of time quanta per bit time

100kBaud (PCR.STIM=0B): fSYS>=2MHz, 1 symbol timing=10 tq (DCTQ=9)

400kBaud (PCR.STIM=1B): fSYS>=10MHz, 1 symbol timing=25 tq (DCTQ=24)
I2S

Module capability: maximum fSYS/2

Application target baudrate: ~60MBaud for transmission (please refer to the appropriate data sheet for
further details)
Application Note
13
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Note: The module capability is considered only as transmission. The real baud rates that can be achieved in
an application depend on the operating frequency of the device and the timing parameters (for
example the setup and the edge falling/rising time). If the filter structure is selected in the input stage of
USIC, it has an additional delay. Refer to the appropriate data sheet for further details.
1.5
Data Shifting and Handling
Data shift and handling is based on:

Tx/Rx buffer structure

The data shift mode control (single/dual/quad data shift mode, data/frame length, passive level, and so
on) for Tx/Rx process

The transmit control and status information (start/end of frame control, TCI info, dynamic control, ..)

Transmit handling (data valid control, transfer trigger logic, transfer gating logic, data transfer
functionality like single-shot mode, for example valid data is sent only one time)
1.5.1
Transmit and Receive Buffering
Transmit
TBUF is the internal shift register. It cannot be directly accessed by software. Data words can be written into
one of the transmit buffer input locations TBUFx (x = 00…31).
TBUFx has a total of 32 consecutive addresses, which implement the 5-bit wide TCI information (see section
1.5.4) and can be used for control mode. If transmit FIFO is enabled, then data words can be written into Inx
(x = 00…31).
Receive
For the receive process in the data shift unit, a double receive buffer structure (RBUF0, RBUF1) is
implemented in USIC. This supports the reception of data streams longer than 16-bit words. USIC handles
the reception sequence of both internal receive buffers. To read data out, always use register RBUF except
when receive FIFO is used. In that use, use register OUTR instead.
Note:
1. To enable Tx/Rx FIFO bits TBCTR/RBCTR.SIZE (buffer size) must be set to >0
2. During the initialization phase, the start entry of a FIFO buffer has to be defined by writing the number of
the first FIFO buffer entry in the FIFO buffer to the corresponding bit field DPTR in register RBCTR/TBCTR,
with the related bitfields RBCTR.SIZE=0 and TBCT.SIZE=0
3. DO NOT initialize bitfield DPTR by SIZE!=0 (when using FIFO)
Application Note
14
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Figure 9
Data Shift Unit
1.5.2
Data Shift Control: Transmission/Receive Process (SCTR)
The default setting SCTR.DSM=00B means that TSR is used for the transmission path, and RSR00 (for RBUF0)
and RSR10 (for RBUF1) are used for the receive path for all data bits.
Figure 10
Data Shift Control: Tx/Rx Process Control/Status Information
In the XMC family the data shift unit has 4 internal transmit shift registers (TSR0…TSR3) for operating the
transmit data path and 6 internal receive shift registers (RSR0[1…3] for RBUF0, RSR1[1…3] for RBUB1) for
operating the receive data path.
Application Note
15
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
The transmit shift data can be selected (SCTR.DSM) to be shifted out one, two or four bits at time through
the corresponding number of output lines. This option allows the USIC to support protocols such as the dual
and quad-SPI. Selection is made through the TDSM bitfield in the shift control register. This configuration is
also available in the receive process.
Frame Length (FLE) and Word Length (WLE)
Frame Length is the length of a frame. A frame is data that is transmitted between network points as a unit
complete with addressing and necessary protocol control information.
Word Length is the number of bits, digits, characters, or bytes in one word.
For each protocol, FLE and WLE is as follows:
UART:

FLE=0…62 (63 is not allowed), parity bit can be enabled via bitfield CCR.PM
SPI:

FLE=0…63 (FLE=63 for frames with more than 63 data bits, see section 2.3.1), parity bit can be enabled
via bitfield CCR.PM
I2C:

For 7-bit addressing: WLE=7, unlimited data flow (SCTRH.FLE=3FFH)
I2S:

Frame length <= system word length
Shift control signal (TRM)
For each protocol, TRM is as follows:
UART:

TRM=01B, the shift control signal is active if it is at 1-level
SPI:

TRM=01B, the shift control signal is active if it is at 1-level
I2C:

TRM=11B, active without referring to the actual signal level
I2S:

TRM=11B, active without referring to the actual signal level
Data Output Configuration (DOCFG)
For each protocol, DOCFG is as follows:
UART:

DOCFG=00B (DOCFG=01B for IrDA signal, the DOUT value is then inverted)
SPI:

DOCFG=00B, the DOUT value not inverted
I2C:

DOCFG=00B, the DOUT value not inverted
Application Note
16
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
I2S:

DOCFG=00B
Passive Data Level (PDL)
For each protocol, PDL is as follows:
UART:

PDL=1B,the passive data level=1
SPI:

PDL=1B, the passive data level=1
I2C:

PDL=0B, the passive data level=0
I2S:

PDL=1B, the passive data level=1
Shift Direction control (SDIR)
For each protocol, SDIR is as follows:
UART:

SDIR=0B,the LSB first
SPI:

SDIR=1B/0B, the MSB/LSB first
I2C:

SDIR=1B,the MSB first
I2S:

SDIR=1B,the MSB first
1.5.3
Transmit Shift Control information (for Tx Process)
The control bit in the TCSR register fefines data control in the transmission process. For example, if SOF is
set, then the content of TBUF is transferred as the first Word of a new frame.
The 5-bit TCI value derived from the address of TBUFx or INx (x=0...31) can be used as an additional control
parameter in data transfers:

CSx control mode: TCSR.SELMD = 1. See section 2.6

Word length control mode: TCSR.WLEMD = 1
Table 1
Word length control: TCSR.WLEMD = 1
Write to TBUFx/INx
TCI[4]-[3…0]
TCSR.EOF – SCTR.WLE
TBUF31/IN31
1-1111b
1-1111b
EOF=1, 16 bit WORD
TBUF15/IN15
0-1111b
0-1111b
EOF=0, 16 bit WORD
TBUF23/IN23
1-0111b
1-0111b
EOF=1, 8 bit WORD
Application Note
17
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Write to TBUFx/INx
TCI[4]-[3…0]
TCSR.EOF – SCTR.WLE
TBUF07/IN07
0-0111b
0-0111b
EOF=0, 8 bit WORD
…..
…..
…..
…..

Frame length control mode: TCSR. FLEMD = 1
Table 2
Frame length control: TCSR. FLEMD = 1
Write to TBUFx/INx
TCI[4…0]
SCTR.FLE
TBUF31/IN31
11111b
31
Frame length=32 bits
TBUF15/IN15
01111b
15
Frame length=16 bits
TBUF07/IN07
00111b
7
Frame length=8 bits
…..
…..
…..
…..

Word access control mode: TCSR.WAMD = 1
Table 3
Word access control mode: TCSR.WAMD = 1 (I2S)
Write to TBUFx/INx
TCI[4]
SCTR.WA
TBUF00/IN00…BUF15/IN15 1b
1
Right channel
TBUF16/IN16…BUF31/IN31 0b
0
Left channel

Hardware port control mode: TCSR.HPCMD = 1
Table 4
Hardware Portcontrol mode: TCSR.HPCMD = 1
Write to TBUFx/INx
TCI[2]-TCI[1:0]
TSCR.HPDIR-SCTR.DSM
TBUF07/IN07
1-11b
1-11b
output, 4x data lines
(DOUT0/1/2/3)
TBUF06/IN06
1-10b
1-10b
output, 2x data lines
(DOUT0/1)
TBUF04/IN04
1-00b
1-00b
output, 1x data line
(DOUT0)
TBUF03/IN03
0-11b
0-11b
input, 4x data lines
(DIN0/3/4/5)
TBUF02/IN02
0-10b
0-10b
input, 2x data lines
(DIN0/3)
TBUF00/IN00
0-00b
0-00b
input, 1x data line (DIN0)
Note: To enable hardware port control, the selected hardware pin of DX0/DOUT0, DX3/DOUT1, DX4/DOUT2
and DX5/DOUT3must be switched on via CCR.HPCEN.
Application Note
18
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
1.5.4
Transmit Data Validation Information (for Tx Process)
If TBUF data is set to the single short mode (TDSSM=1B), the data in TBUF is considered as invalid after it has
been loaded into the shift register. TDEN must be set to 01B to allow data to be sent out from TBUF if TDV=1.
Bit TDV is hardware controlled. It is automatically set when data is moved to TBUF, by writing to one of the
transmit buffers.
This is the TVSR.TVD behavior for each protocol:
UART and I2C:

TCSR.TVD is cleared in single short mode with the transmit buffer interrupt event (bit TBIF in register
PSR)
SPI and I2S:

TCSR.TVD is cleared in single short mode with the receive start interrupt event (bit RSIF in register PSR)
Figure 11
Transmit Data Validation
1.6
Channel Events and Interrupt Generation Unit
Each USIC channel module provides 6 service request outputs, SRx (x=0 to 5), which can be shared between
its 2 channels.
1.6.1
Data Transfer Events Related to Transmission/ Reception
The interrupts listed in the following table are independent of the selected protocol.
The following sequences should be executed for initialization:

Register CCR defines the general interrupt generation

Register PSR contains indication flags

Write a 1 to the corresponding bit position in register PSCR to clear its status bit in PSR
Application Note
19
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview

The bitfields of register INPR define which SRx is activated if the corresponding event occurs, for each
USIC module a total of 6 interrupt service request output are defined

The interrupt priority level and enable/disable are controlled by Nested Vectored Interrupt Control
(NVIC) unit in XMC. See RM for more details about CMSIS functions to access ARM Cortex-M4 NVIC
Table 5
Transmit / Receive interrupts
Flag
Indication
PSR.TBIF
Transmit buffer event
CCR.TBIEN / INPR.TBINP
UART/I2C: TCSR.TDV is
cleared with this event
PSR.RSIF
Receive start event
CCR.RSIEN / INPR.TBINP
SRx for RSIF interrupt is
shared with TBIF
PSR.TSIF
Transmit shift interrupt
CCR.TSIEN / INPR.TSINP
SPI/I2S: TCSR.TDV is
cleared with this event
PSR.RIF
Standard receive event
CCR.RIEN / INPR.RINP
PSR.AIF
Alternative receive event
CCR.AIEN / INPR.AINP
PSR.DLIF
Data lost event
CCR.DLIEN / INPR.PINP
SRx for DLIF interrupt is
shared with ProtocolSpecific Interrupt
PSR.BRGIF
Baud Rate generator
Indication
CCR.BRGIEN / INPR.PINP
SRx for BRGIF interrupt is
shared with ProtocolSpecific Interrupt
1.6.2
Enable / SRx selected by Remark
Protocol-Specific Interrupts
Register PCR defines protocol-specific interrupts:

Register bit field INPR.PINP defines which SRx is activated if the corresponding event occurs

Register PSR contains indication flags

Write a 1 to the corresponding bit position in register PSCR to clear its status bit in PSR

The interrupt priority level and enable/disable are controlled by the Nested Vectored Interrupt Control
(NVIC) unit in XMC. See RM for more details about CMSIS functions to access ARM Cortex-M4 NVIC
Application Note
20
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Table 6
Protocol-specific interrupts
Flag
Indication
Enable / SRx selected by Remark
PSR.TFF
Transmitter frame
finished
PCR.FFIEN
PSR.RFF
Receiver frame finished
PSR.COL
Collision detection
PCR.CDEN
Can be used in HalfDuplex mode
PSR.SBD
Synchronization break
detection
PCR.SBIEN
Used in LIN
PSR.RNS
Receiver noise detection
PCR.RNIEN
Independent of 1-bit or 3bits sample mode (via
PCR.SMD)
PSR.FER0
Format error 0
PCR.FEIEN
PSR.FER1
Format error 1
In ‘the two stop bits
mode’ and a ‘0’ has been
latched at 2nd stop bit
PSR.MSLSEV
Start and/or stop of MSLS PCR.MSLSEN
(CS output)
In master mode
PSR.MSLS: MSLS current
status (polarity of SELOx
via PCR.SELINV
PSR.DX2TEV
Rising and/or failing edge PCR.DX2TIEN
of DX2 (SELIN input)
In slave mode PSR.DX2S:
Dx2S current status
(polarity of DX2 via
DX2CR.DPOL
RBUFSR.PAR
Parity error
PCR.PARIEN
PSR.SCR
Start condition received
PCR.SCRIEN
PSR.PCR
Stop condition received
PCR.PCRIEN
PSR.RSCR
Repeated start condition
PCR.RSCRIEN
PSR.SRR
Slave read requested
PCR.SRRIEN
Only in master read –
slave transmit mode
(slave device)
PSR.ARL
Master arbitration lost
PCR.ARLIEN
For each bit during data
and address transmission
PSR.ACK
Acknowledge received
PCR.ACKIEN
Only in master device,
after address has been
acknowledged or data
has been received
PSR.NACK
Non-acknowledge
received
PCR.NACKIEN
Only in master device
with wrong address
PSR.ERR
Start/Stop condition in
PCR.ERRIEN
UART
SPI
I2C
Application Note
21
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Flag
Indication
wrong position
Enable / SRx selected by Remark
PSR.TDF
TDF error
PCR.ERRIEN
Figure 12
Wrong /undefined TDF
Channel Events and Interrupt Flags
Application Note
22
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
1.7
FIFO Data Buffer and Interrupts Events
The interrupts listed here are independent of the selected protocol. The following sequences should be
executed for initialization:

Bitfields xxINP of registers TBCTR and RBCTR define which SRx is activated if the corresponding event
occurs

Register TRBSR contains indication flags

Write a 1 to the corresponding bit position in register TRBSCR to clear its status bit in TRBSR

The interrupt priority level and enable/disable are controlled by Nested Vectored Interrupt Control
(NVIC) unit in XMC. See RM for more details about CMSIS functions to access ARM Cortex-M4 NVIC
Table 7
FIFO Data buffer interrupts
Flag
Indication
TRBSR.STBI
Standard TxFIFO event
TRBSR.STBT
Standard TxFIFO event
trigger
Enable / SRx selected by Cleared by
TBCTR.STBIEN /
TBCTR.STBINP
TRBSCR.CSTBI
by HW
(activated via
TBCTR.STBTEN=1)
TRBSR.TBERI
TxFIFO error event
TBCTR.TBERIEN /
TBCTR.ATBINP
TBCTR.TBERIEN
TRBSR.SRBI
Standard RxFIFO event
RBCTR.SRBIEN /
RBCTR.SRBINP
TRBSCR.CSRBI
TRBSR.SRBT
Standard RxFIFO event
trigger
by HW
(activated via
RBCTR.SRBTEN=1)
TRBSR.ARBI
Alternative RxFIFO event
RBCTR.ARBIEN /
RBCTR.ARBINP
TRBSCR.CARBI
TRBSR.RBERI
RxFIFO error event
RBCTR.RBERIEN /
RBCTR.ARBINP
TRBSCR.CRBERI
Tx FIFO Buffer initialization bitfields

TBCTR.SIZE = 1, 2, 3, 4, 5 selects FIFO size of 2, 4, 8, 16, 32

TBCTRL.LIMIT = target FIFO filling level

TBCTR.LOF = 0 (STBI interrupt occurs when FIFO level is lower than LIMIT, which means TxFIFO should be
filled again)

TBCTR.DPTR = pointer to the first FIFO number
Note: Flag TRBSR.STBI is only set when the transmit buffer fill level falls below the programmed limit
(TBCTR.LOF=0).
Application Note
23
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Universal Serial Interface Channel Overview
Rx FIFO Buffer initialization bitfield

RBCTR.SIZE= 1, 2, 3, 4, 5 selects FIFO size of 2, 4, 8, 16, 32.

RBCTRL.LIMIT = target FIFO filling level

RBCTR.LOF = 1 (SRBI interrupt occurs when FIFO level gets bigger than LIMIT, means RxFIFO should be
read out)

RBCTR.DPTR = pointer to the first FIFO number

RBCTR.RNM (optional)
Note: Flag TRBSR.SRBI is only set when the receive buffer fill level exceeds the programmed limit
(TBCTR.LOF=1).
Application Note
24
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2
Synchronous Serial Channel (SSC = SPI)
Figure 13
SPI Signal Connection in Full Duplex-Mode
This figure shows the standard SPI protocol, consisting of one input and one output data line. The XMC
family of products also supports two (dual-SPI) or four (quad-SPI) input/output data lines.
The SPI mode is selected when CCR.MODE = 0001B.
2.1
Input stages, Output Signals and the Protocol Pre-Process
Master mode
At DX1 the PPP uses the baud rate generator output SCLK directly as input for the data shift unit and gives
the signal SCLKOUT on the shift clock output pin.
At DX2 the PPP provides the output MSLS (Master SLave Signal) with the SPI specific delay, and uses it as
input for the data shift unit.
In SPI master mode, setting DX1 or DX2 is optionally used for delay compensation. The data input DX0/3/4/5
leads to the data shift unit and they are linked directly from the pins DINx. The PPP is not used and
DX0CR.INSW must be set to ‘1’.
Note: In a given application, the output pin SELO[7:0] is usually used as the Chip Select line (CS) for the SPI
device, and it normally has an active ’low’ level. In this case the polarity of the SELO signal has been
inverted by setting pin SELINV in the register PCR.
Application Note
25
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Slave mode
In SPI slave mode the PPP is not used in the input stages.
DX0/3/4/5, DX1, DX2 signals are linked directly from the pins DINx, SCLKIN and SELIN (set bit DXxCR.INSW to
‘1’).
Note: If a ’low’ active Chip Select line (CS) is used as input signal for the slave SPI device, its polarity must be
inverted (via DX2CR.DPOL).
In USIC SPI operation mode a re-synchronization is automatically performed by the CS signal.
In slave mode the DX2 signal is also used as a reset signal for its internal data shift unit. For example, after an
error during SPI communication it is possible to reset the state machine by generating an active DX2, single
input signal. Both master and slave use the USIC module, and the SPI master is switched off after 10 bits
rather than 16 bits have been transmitted, re-sending the Word again.

If the CS line is used (the 4-line SPI mode) then the slave device does not need special action to reset the
SPI channel. With the new CS edge sent by the master, the content of the internal shift register of the
slave is automatically reset and a new data word can be completely received by the slave. Only if the
FIFO is used do we need to flush the FIFO via register TRBSCR (bit FLUSHTB/ FLUSHRB)

Some applications use the 3-line SPI mode (CS is not used). If the USIC module is used as SPI slave then
we need to simulate a CS input signal (a falling edge for input DX2) to reset the internal data shift unit or
to reset the USIC module completely via PRSETx/PRCLRx
U1C0_DX2CR |= 0x0100;
U1C0_DX2CR &= (~(0x01000));

// set bit DPOL
// clear bit DPOL
The data shift unit’s internal SCLK signal has an active ’high’ level so, if no SELIN (non-CS) is used, the
DX2 stage has to deliver a (permanent) 1-level to the data shift unit. This is achieved by programming
bitfield DX2CR.DSEL = 111B.
Note: In a multiplex CSx system, if a slave device is not selected (DX2 stage delivers a 0 to the data shift unit) a
shift clock pulse is received. In this case the shift clock pulses are ignored, the incoming data is not
received, and the DOUT0/3/4/5 outputs the passive level (SCTR.PDL)
2.2
Baud rate Generation
The baud rate of the SPI is defined by the frequency of the SCLK signal (one period of fSCLK represents one
data bit) and is only required in the master mode.
SPI baud rate generation is based on fPB (fsys) via BRG.CLKSEL=00B.
In a standard SPI application, the phase relation between MCLK and SCLK is not relevant, so the 2:1 divider
can be switched OFF (PPPEN=0).
Baud rate calculation (fractional divider mode):
If the phase relation is requested (using MCLK as the clock reference for external devices for example), then
the 2:1 divider must be switched ON (PPPEN=1).
Application Note
26
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2.3
Data Shifting and Handling
2.3.1
Data Transmission and Reception
Frame length (FLE):
The number of bits per frame
Word length (WLE):
For each data word control
USIC SPI Master Mode
In SPI master mode, the CSx (its internal signal is MSLS) is generated automatically by the PPP.
(PCR.MSLSEN must be set to ‘1’). This signal indicates the start and the end of a data transfer.
There are two ways to control the end of the frame:
Data frame length FLE < 63:

The frame is considered as finished and the remaining data bits in the last data word are not transferred
if the programmed number of bits per fame is reached within a data word
Data frame length FLE = 63:

The frame is considered as finished and the remaining data bits in the last data word are not transferred
if a de-activation of MSLS is detected within a data word
In master mode, frame transmission/reception can be started when the data in the transmit buffer TBUF is
valid (TCSR.TDV is set).
The internal signal MSLS is set together with the corresponding event flag (PSR.MSLS) and enters the first
leading delay state.
After the delay (Tld) generated by PPP has elapsed, the internal shift clock SCLK is issued, and the data is
shifted out at the rising edge of SCLK.
For every processed data bit when the falling edge of the shift clock SCLK is reached, the level of the input
signal is latched.

If FLE < 63 then a CS signal is generated automatically by the first data bit and deactivated at the end of
the last bit including delay Tld

If FLE = 63 then the user should give the start/end information of a data frame to create the desired
length of the CS signal. Bit TCSR.SOF/EOF is for this software-based control method
USIC SPI Slave Mode
In the case that the SELIN input signal (CSx) is used in slave mode, the data frame start/end detection is
based on the edge detection of input DX2 in both transmission and reception process. Data frame length
(SCTR.FLE) should be set to its maximum value (FLE=63).
In the case that the SELIN input signal is not used in slave mode, the data frame length must be
programmed to the known value (FLE<63).
Application Note
27
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Figure 14
Standard SPI Frame format with SCLKCFG=00B
2.3.2
SPI Frame Delay Control
SPI frame delay is generated automatically by the PPP in the SPI master mode based on fCTQIN.
Tld (leading delay):

Starts when data is valid for transmission. The first shift clock edge of SCLKis generated after the leading
delay. The data shift unit always uses the rising edge for data shifting and the latch edge for data
receiving
Ttd (trailing delay):

Starts at the end of the last SCLK cycle of a data frame. At the end point of the trailing delay the MSLS
becomes inactive. It corresponds to the slave hold-time requirements
Tnf (next-frame delay):

After the next-frame delay has elapsed, the frame is considered as finished
Tiw (inter-word delay):

Can be optionally enabled/disabled by PCR.TIWEN. It is used if a data frame consists of more than one
data word
In a standard SPI application, such as the setup and hold time, the Tld and Ttd are mainly used to ensure
stability on the input/output lines.
Normally fCTQIN = fSCLK via CTQSEL=10B.
Application Note
28
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Delay time calculation:
Note: Delay Tiw can be disabled via bit PCR.TIWEN
2.3.3
Shift Clock (SCLK) and CS
In master mode, the shift clock is generated by the internal baud rate generator.
In slave mode, the signal SCLKIN is received from an external master.
CS generation
If the SPI module is in master mode, the slave select signal (the internal signal MSLS) is generated
automatically by PPP.
SPI interfaces have 4 different configurations regarding the shift and latch edge for data transmission and
reception process.
Figure 15
Shift Clock in SPI Communication
Application Note
29
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
USIC SPI master mode support

case 1 (SCLKCFG = 00B): No delay, no polarity inversion (SCLKOUT equals SCLK)

case 2 (SCLKCFG = 01B): No delay, polarity inversion

case 3 (SCLKCFG = 10B): SCLKOUT is delayed by 1/2 shift clock period, no polarity inversion

case 4 (SCLKCFG = 11B): is delayed by 1/2 shift clock period, polarity inversion
USIC SPI slave mode support (XMC4500)

case 1: no delay, no polarity inversion (SCLKOUT equals SCLK)

case 2: no delay, polarity inversion (SCLKOUT equals inverted SCLK): set DX1CR.DPOL to 1
Note: In slave mode bitfield SCLKCFG is ignored
In slave mode the shift clock signal is handled by the input stage DX1 (signal SCLKIN is received from an
external master), so the DX1 stage has to be connected to an input pin.
For case 1, the input signal on DX1 pin can be directly forwarded to the internal data shift unit.
For case 2, the DX1 stage must invert (set DX1CR.DPOL to 1) the received signal to adapt to the SCLKIN
polarity. This is because the internal data shift unit always takes data transmission on the rising edge and
data reception on the falling edge.
Note: In the XMC4400 and XMC1000 product families, the bit PCR.SLPHSEL is implemented to handle the shift
clock of the data shift unit to support case_3 and case_4 in SPI slave mode
2.3.4
Parity Mode
The XMC products support parity generation for transmission and parity check for reception on frame base
in master and slave mode. For consistency reasons, all communication partners must be programmed to
the same parity mode.

CCR.PM: define the type of parity. In SPI parity mode the clock extends by one cycle after the last data
word of the data frameindependent of SDIR setting (MSB or LSB).

RBUFSR.PAR: the monitored parity bit value.

PSR.PARERR: the result of the parity check

PCR.PARIEN: Parity Error Interrupt Enable
Note: For dual and quad SPI protocols, the parity bit is transmitted and received only on DOUT0 and DX0
respectively, in the extended clock cycle
Note: Parity bit generation or detection is not supported for a frame length > 64 data bits; i.e. setting FLE=0x3F
Application Note
30
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2.4
SPI Software configuration
2.4.1
SPI Full-Duplex Communication (Example 1)
A full-duplex system allows communication in both directions at the same time. Synchronous data transfer
is characterized by a simultaneous transfer of a shift clock signal together with transmit and receive data
signals.
Note: In the XM1000 family, only one USIC module is available. The FIFO and interrupt SRx are shared
The following table outlines the input stages:
Table 8
Input Stages (Example 1 for XMC4400)
INSW
DPOL
DSEL(DXxA…G)
Used as
DX0,2,3,4,5
1 (PPP not used)
0 (not inverted)
P0.4=data input
(DX0CR.DX0A)
Data input
DX1
Not used
DX2
Not used
Master Mode
Slave Mode
DX0,2,3,4,5
1 (PPP not used)
0 (not inverted)
P2.2=data input
(DX0CR.DX0A)
Data input
DX1
1 (PPP not used)
0
P2.4=clock input
(DX1CR.DX1A)
SCLKIN
DX2
1 (PPP not used)
1 (see Note)
P2.3=CS input
(DX2CR.DX2A)
CS input
Note: In an application, the output pin SELO[7:0] is usually used as the Chip Select line (CS) for the SPI device
and it normally has an active ’low’ level. In this case the polarity of the SELO signal has been inverted by
set pin SELINV in the register PCR
The following table outlines the output signals:
Table 9
Output signals (Example 1 for XMC4400)
Master Mode
DOUTx (x=0,1,2,3)
P0.5=DOUT0
Data output
DOUT0single data (DOUT1…3: not used)
SCLKOUT
P0.11=clock output,
Clock output
Generated by the baud rate generator based on
fsys.
4 possible settings (via BRG.SCLKCFG)
SELOx (x=0…7)
P0.6=CS output (SELO0)
CS output
Set bit PCRL.MSLSEN to enable MSLS
Application Note
31
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Master Mode
Set bit PCR.SELCTR to use CS direct select mode
Set bit field PCR.SELO to active the
corresponding SELOx output line
Set bit PCR.SELIN to invert MSLS for an active
‘low’ CS output signal
Slave mode
DOUTx (x=0,1,2,3)
P2.5=DOUT0
Data output
DOUT0single data (DOUT1…3: not used)
SCLKOUT
Not used
SELO[7:0]
Not used
Note: 1. MSLS is an internal signal, which is active ‘high’. To generate the MSLS the bit PCR.MSLSEN must be
set.
2. Direct Select Mode: a SELOx output becomes active while the internal signal MSLS is active and bit x
in bit field SELO is 1. Several external slave devices can be addressed in parallel if more than one bit in
bit field SELO is set.
3. The output pin SELO [7:0] is usually used as the CS for SPI device and it normally has an active ’low’
level.

Data shift control (SCTR): TRM=01B, PDL=1, SDIR=1(MSB first), FLE=WLE=15

Data transmission control (TCSR): no trigger, no gating, single shot mode

Parity (CCR.PM): not used

Protocol-related information (PCR): SELO=1(P0.6=U1C0_CS0), FEM=1, SELINV=1, SELCTR=1, MSLSEN=1

Interrupts point (INPR) and enable control (CCR): INPR.AINP/RINP=SR2; CCR.AIEN/RIEN=1

Interrupt: enable AIR/RI interrupt via CMSIS functions: NVIC_SetPriority(..); NVIC_EnableIRQ(..)
Input/output pins configuration:

Output: PORTx->IOCRx.PC (alternate output function)
Table 10
Input/Output pins (Example 1 for XMC4400)
Input/output pins
Function
pin
Port Driver (IOCRxPC)
Data out
U1C0_DOUT
P0.5
ALT2 (push pull)
Clock output
U1CO_SCLKOUT
P0.11
ALT2 (push pull)
CS output
U1CO_SEL0
P0.6
ALT2 (push pull)
Data input
U1C0_DX0A
P0.4
input
Data out
U0C1_DX0A
P2.2
input
Clock input
U0C1_DX1A
P2.4
input
CS input
U0C1_DX2A
P2.3
input
Data output
U0C1_DOUT
P2.5
ALT2 (push pull)
Master mode
Slave mode
Application Note
32
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2.4.2
Software in Loopback mode (Example 2)
Note: This is only applicable in master mode
We use the same initialization routine as that in Example 1, until DX0CR.DSEL which must be set to “G”
(110B).
Note: In loop-back mode the data output pins are not required to be switched on, but if they are then the
signal can be monitored on an oscilloscope.
2.4.3
SPI for Half- Duplex Communication
In half-duplex mode only one data line is shared between the communication partners and it is used for
both transmission and reception of data (MRST and MTSR are connected together).
The user software must ensure that only one transmitter is active at a time.
There are two ways to avoid collisions on the data exchange line:

Only the transmitting channel may enable its transmit pin driver (enable/disable push/pull drivers)

Devices use open-drain outputs to allow the wired-AND connection in a multi-transmitter
communication
The SPI data transfer is synchronized by a simultaneous transfer of a shift clock signal together with the
transmission and reception of the data signal. Therefore, the dummy data of the register TBUF in an inactive
partner should be set to all 1’s.
2.4.3.1
Standard SPI Half-Duplex System (Example 3)
In the following figure, the master mode uses an internal connection with the output pin DOUT. The slave
mode uses an external connection between DOUT and DIN pins. Internal connection means DX0x points to
DOUT. For example, XMC1100, P1.0 => U0C0_DX0C => U0C0_DOUT.
Application Note
33
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Figure 16
Signal Connection for SPI Standard Half-Duplex System
Note: Not all the data output DOUTx pins contain an internal connection. For example, P1.5 (as U0C0_DOUT0)
has an internal connection to DX0 (U0C0_DX0A), but P1.7 (U0C0_DOUT) has no such connection in
XMC4000 family
Initialization routine
This example uses the same initialization routine as for Example 1, but with the changes indicated in the
following table:
Table 11
Standard SPI Half-Duplex system initialization (Example 3 for XMC4000)
Input/output pins
Master mode
Function
pin
Port Driver (IOCRxPC)
Internal connection is used
Data out
U1C0_DOUT
P0.5
ALT2 (push pull)
Clock output
U1CO_SCLKOUT
P0.11
ALT2 (push pull)
CS output
U1CO_SEL0
P0.6
ALT2 (push pull)
P0.4 P0.5 (see
note)
input
Data input
Slave mode
U1C0_DX0A U1C0_DX0B (see
note)
External connection is used
Data out
U0C1_DX0A
P2.2
input
Clock input
U0C1_DX1A
P2.4
input
CS input
U0C1_DX2A
P2.3
input
Data output
U0C1_DOUT
P2.5
ALT2 (push pull)
Note: Instead of P0.4, we use P0.5 as data input U1C0_DX0 (the internal connection mode is used)
Application Note
34
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2.4.3.2
Hardware-controlled SPI Half-Duplex Sytem
Hardware-port pin control is implemented for the XMC family of products. One, two or four port pins can be
selected with the hardware port control to support SPI protocols with multiple bi-directional data lines,
such as dual and quad- SPI. This selection, and the enable/disable of the hardware port control, is made
through CCR.HPCEN.
USIC is usually used as master mode. For data transmission direction hardware pins must be switched as
input or output. The direction of all selected pins is controlled through a single bit, SCTR.HPCDIR.
SCTR.HPCDIR is automatically shadowed with the start of each data word to prevent the pin changing
direction in the middle of a data word transfer.
In the XMC family, several peripherals have hardware controlled pins. Because multiple peripheral I/Os are
mapped on some pins, the register Pn_HWSEL is used to select which peripheral has control over the pin.
In XMC4000 products, all USIC hardware-controlled pins use the HW0 control path (Pn_HWSEL.HWx=01B).
In XMC1000 products, all USIC hardware-controlled pins use the HW1 control path (Pn_HWSEL.HWx=10B).
Note: In the XMC4500 144 pin package, each channel (2 channels per module) has hardware-control pins, but
in XMC1100 only U0C0 can use this feature and U0C1 does not have any hardware-control pins.
2.5
Delay Compensation
For the SPI protocol, USIC works with fsys/2 (40Mbaud/fsys=80MHz). This maximum baud rate is based on
module capability. In the application environment it is limited by several factors, including driver delays,
signal propagation times, synchronization and filter delay, and so on. In the data receive process, the
minimum required setup time must also be considered.
Application Note
35
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Figure 17
SPI Master Mode with Delay Compensation
Figure 18
SPI Complete Closed-loop Delay Compensation
Application Note
36
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
The closed-loop delay is a system-inherent factor. The delay time between the generation of the shift clock
signal and the evaluation of the receive data by the master SPI module is given by the sum = Tout_master + 2 x
Tprop + Tin_slave + Tout_slave + Tin_master + module reaction times, where:

Tout_master/Tout_slave
− Delay time through the output driver stage to the pin (default setting A1+/A2 pin: falling/rising
time<16ns. Please refer to the appropriate data sheet)

Tprop
− Delay time on the wires

Tin_slave/Tin_master:
− Delay time through the input pin to the module input stage

Module reaction times
− Delay time due to digital filter, synchronization, setup/hold time (Please refer to the appropriate data
sheet)
Application Note
37
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Figure 19
SPI Signals delay Timing Waveform
Using the default standard setting, as data is received in the master SPI process, the clock signal (signal 1 in
this example figure) generated from the baud rate generator in the master device, is used to latch a data
signal (signal 5). For a higher baud rate, this may lead to incorrect data being latched. A higher baud rate can
be reached by using a delay compensation feature.
In XMC there are two compensation methods: delay compensation and complete closed-loop delay
compensation.
Application Note
38
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Delay compensation in master mode
This method uses the input clock signal at the DX1 pin for data latching, instead of the SCLKOUT generated
by the baud rate generator (signal 6 and 5 in Figure 19).
With this method, the clock output driver delay in master mode is compensated. This means the delay
between the evaluated clock signal and Rx data by master is reduced by Tin_master + Tout_master.
Example 4 demonstrates the initialization routine using delay compensation in master mode.
An external or an internal connection can be used:

External connection
− P0.8 U0C0_SCLKOUT, P1.1  U0C0_DX1A
USIC0_CHo  DX1CR |= (0<<0);
USIC0_CHo  DX1CR |= (1<<4);
// DX1CR.DSEL=A
// DX1CR. INSW=1
− P1.1 (U0C0_DX1A) has to be connected with P0.8 (U0C0_SCLKOUT) externally

Internal connection
− P0.8  U1C0_SCLKOUT, P0.8  U1C0_DX1B
USIC0_CHo  DX1CR |= (1<<0);
USIC0_CHo  DX1CR |= (1<<4);
// DX1CR.DSEL=B
// DX1CR. INSW=1
Note: 1. The internal connection can only be used for a bi-directional clock pin and it does not lead to
additional pins for the SPI communication.
2. Bit DCEN is implemented in XMC to allow the Rx shift clock to be controlled independently from the Rx
shift clock. When DCEN=1, the Tx shift clock is taken from the baud rate generator directly.
Complete closed-loop compensation
Note: This is implemented in the XMC4400 and XMC1000 product families, but not in the XMC4500 family.
The principle behind this method is to feedback the clock signal to the master mode, so that the master can
use this clock signal to latch data from the slave. Because the clock signal is through the complete closedloop signal path, the delay between the clock used in the master and data (from the slave) signal is therefore
fully compensated.
This method can only be realized when both master and slave use the USIC module. In slave mode the
CLKOUT pin should be enabled by setting BRG.SCLKOSEL to 1.
Application Note
39
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Table 12
Example 4 for XMC4000
U0C0 in master
Data out
DOUT0
P1.5
ALT2 (A1+)
Clock output
SCLKOUT
P0.8
ALT2 (A2)
CS output
SELO0
P0.7
ALT2 (A2)
Data input
DIN (DX0)
P1.4
DX0B, input (A1+)
Clock input
SCLKIN (DX1)
P1.1
DX1A, input (A1+)
Data input
DIN (DX0)
P2.2
DX0A, input (A2)
Clock input
SCLKIN (DX1)
P2.4
DX1A, input (A2)
CS input
CS input (DX2)
P2.3
DX2A, input (A2)
Data ouput
DOUT0
P2.5
ALT2 (A2)
external connection for
delay compensation in
master mode
U0C0 in slave
2.6
Multiple MSLS Output Signals
The SPI module supports up to 8 different SELOx output signals for master mode operation in one USIC
module. USIC provides two configuration modes to select the MSLS signal:

Direct control mode
− Write PCR.SELO[7:0] as individual values for each SELOx line

Automatic update mode
− Enabled by TCSR.SELMD=1
− PCR.SELO[4:0] is updated with TCI[4:0] and PCR.SELO[7:5] is always ’0’
Each USIC module has the transmit buffer input locations TBUFx (x=00-31), addressed by using 32
consecutive addresses.
If TCSR.SELMD = 1, data written to one of these locations appears in a common TBUF register, and the 5-bit
TCI [4:0] coding is updated accordingly.
The relationship between TBUFx, TCI[x] and MSELx is listed in following table.
Table 13
Write to TBUFx
TCI [4:0]
PCRH:SELO [7:0]
SELOx signals
TBUF01
00001B
0000,0001B
SELO0 active
TBUF02
00010B
0000,0010B
SELO1 active
TBUF04
00100B
0000,0001B
SELO2 active
TBUF08
01000B
0000,0100B
SELO3 active
TBUF16
10000B
0001,0000B
SELO4 active
TBUF03
00011B
0000,0011B
SELO0/1 active
TBUF07
00111B
0000,0111B
SELO0 /1/2 active
TBUF00
00000B
0000,0001B
No SELOx
Application Note
40
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2.7
XMC Lib Implementation: Full-Duplex mode
This example is for the XMC4400 and demonstrates how to use the USIC for an SPI communication in fullduplex mode.
Channel 1 of the USIC slice 0, channel 0 of the USIC slice 1 and the PORTs 0.4, 0.5, 0.6, 0.11, 2.2, 2.3, 2.4, 2.5
are used.
2.7.1
Configuration
The SPI bus specifies four logic signals:

SCLK Serial Clock (output from master)

MOSI Master Output-Slave Input (output from master)

MISO Master Input-Slave Output (output from slave)

SS stands for Slave Select (active low, output from master)
In this example, 2 channels of USIC are used: USIC1CH0 and USIC0CH1.
The configuration of the SPI protocol needs the baudrate for both for Master and Slave to be set with the
same value. In addition, the bus modes are configured: SPI Master for the Master and SPI Slave for the Slave.
Master needs a configuration for the polarity of the Slave, which can be the same for both (active high) or
inverted (active low).
At the end it is possibile to choose the eventual bit for the parity mode.
XMC_USIC_CH_t *spi_master_ch = XMC_SPI1_CH0;
XMC_USIC_CH_t *spi_slave_ch = XMC_SPI0_CH1;
XMC_SPI_CH_CONFIG_t spi_config_masterMode;
XMC_SPI_CH_CONFIG_t spi_config_slaveMode;
spi_config_masterMode.baudrate = 100000;
spi_config_masterMode.bus_mode = XMC_SPI_CH_BUS_MODE_MASTER;
spi_config_masterMode.selo_inversion = XMC_SPI_CH_SLAVE_SEL_SAME_AS_MSLS;
spi_config_masterMode.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE;
spi_config_slaveMode.bus_mode = XMC_SPI_CH_BUS_MODE_SLAVE;
spi_config_slaveMode.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE;
Application Note
41
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
Table 14
Input/Output pins SPI FULL-Duplex mode
Input/output pins
Function
pin
Port Driver (IOCRxPC)
Data out
U1C0_DOUT
P0.5
ALT2 (push pull)
Clock output
U1CO_SCLKOUT
P0.11
ALT2 (push pull)
CS output
U1CO_SEL0
P0.6
ALT2 (push pull)
Data input
U1C0_DX0A
P0.4
input
Data out
U0C1_DX0A
P2.2
input
Clock input
U0C1_DX1A
P2.4
input
CS input
U0C1_DX2A
P2.3
input
Data output
U0C1_DOUT
P2.5
ALT2 (push pull)
Master mode
Slave mode
2.7.2
Initialization
The initialization of the USIC channel for an SPI communication requires a specific sequence of commands.
First, the init function is called in order to initialize the selected SPI channel with the config structure.
After this, the USIC channel is started in SPI mode.
Finally, the data source for the SPI input stage is selected.
For the master:
XMC_SPI_CH_Init(spi_master_ch, &spi_config_masterMode);
XMC_SPI_CH_Start(spi_master_ch);
XMC_SPI_CH_SetInputSource(spi_master_ch,XMC_SPI_CH_INPUT_DIN0,
USIC1_C0_DX0_P0_4);
For the slave:
XMC_SPI_CH_Init(spi_slave_ch, &spi_config_slaveMode);
XMC_SPI_CH_Start(spi_slave_ch);
XMC_SPI_CH_SetInputSource(spi_slave_ch, XMC_SPI_CH_INPUT_DIN0,
USIC0_C1_DX0_P2_2);
XMC_SPI_CH_SetInputSource(spi_slave_ch, XMC_SPI_CH_INPUT_SLAVE_SCLKIN,
USIC0_C1_DX1_P2_4);
XMC_SPI_CH_SetInputSource(spi_slave_ch, XMC_SPI_CH_INPUT_SLAVE_SELIN,
USIC0_C1_DX2_P2_3);
For the communication, it is useful to set the length of the data.
XMC_SPI_CH_SetWordLength(spi_master_ch, 16);
XMC_SPI_CH_SetWordLength(spi_slave_ch, 16);
Application Note
42
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Synchronous Serial Channel (SSC = SPI)
2.7.3
Function implementation
The first operation for a successful transmission is to enable the selected slave. This is done by setting the
SEL0 bits.
XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_0);
After this, it is possible to transmit data from master, adding a check to verify a flag. This flag is waiting till
the byte in the master side has been shifted. It is best to clear the flag and disable the slave after the
transmission.
XMC_SPI_CH_Transmit(spi_master_ch, transmit_data,XMC_SPI_CH_MODE_STANDARD);
while((XMC_SPI_CH_GetStatusFlag(spi_master_ch) &
XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) ==0U)
{
/* wait for ACK */
}
XMC_SPI_CH_ClearStatusFlag(spi_master_ch,XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SH
IFT_INDICATION);
XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
It is possible to check the correctness of the transmission by checking the flag of the slave channel and
storing the received data into a variable.
while((XMC_SPI_CH_GetStatusFlag(spi_slave_ch)
&(XMC_SPI_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_SPI_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) ==0U)
{
/* wait for ACK */
}
received_data = XMC_SPI_CH_GetReceivedData(spi_slave_ch);
Application Note
43
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
3
Asynchronous Serial Channel (ASC = UART)
Figure 20
UART Signals Connection for Full-Duplex Communication
An UART connection is characterized by the use of a single connection line between a transmitter and a
receiver. The receiver input RXD signal is handled by the input stage DX0. For full-duplex communication, an
independent communication line is needed for each transfer direction. Figure 20 shows an example with a
point-to-point full-duplex connection between two communication partners UART A and UART B.
For half-duplex or multi-transmitter communication, a single communication line is shared between the
communication partners. Figure 21 shows an example with a point-to-point half-duplex connection
between UART A and UART B. In this case, the user has to take care that only one transmitter is active at a
time. In order to support transmitter collision detection, the input stage DX1 can be used to monitor the
level of the transmit line and to check if the line is in the idle state or if a collision occurred.
There are two possibilities to connect the receiver input DIN0 to the transmitter output DOUT0.
Communication partner UART A uses an internal connection with only the transmit pin TXD that delivers its
input value as RXD to the DX0 input stage for reception and to DX1 to check for transmitter collisions.
Communication partner UART B uses an external connection between the two pins TXD and RXD.
Application Note
44
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
Figure 21
UART Signals Connection for Half-Duplex Communication
3.1
Frame Format
A standard UART frame consists of:

An idle time with the signal level 1

One start of frame bit (SOF) with the signal level 0

A data field containing a programmable number of data bits (1-63)

A parity bit (P), programmable for either even or odd parity. It is optionally possible to handle frames
without a parity bit

One or two stop bits with the signal level 1
Figure 22
Standard UART Frame Format
The protocol specific bits (SOF, P, STOP) are automatically handled by the UART protocol state machine and
do not appear in the data flow via the receive and transmit buffers.
Application Note
45
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
3.2
Baud Rate Generation
The baud rate fASC in UART mode depends on the number of time quanta per bit time and their timing. The
baud rate setting should only be changed while the transmitter and the receiver are idle. The bits in register
BRG define the baud rate setting:
BRG.CTQSEL:

defines the input frequency fCTQIN for the time quanta generation
BRG.PCTQ:

defines the length of a time quantum (division of fCTQIN by 1, 2, 3, or 4)
BRG.DCTQ:

defines the number of time quanta per bit time
The standard setting is given by CTQSEL = 00B (fCTQIN = fPDIV) and PPPEN = 0 (fPPP = fPIN). Under these
conditions, the baud rate is given by:
In order to generate slower frequencies, two additional divide-by-2 stages can be selected by CTQSEL = 10B
(fCTQIN = fSCLK) and PPPEN = 1 (fPPP = fMCLK), leading to:
3.3
XMC Lib Implementation: Full-Duplex mode
This example demonstrates how to use the USIC for an UART communication in a full-duplex mode.
The communication is established between the XMC4500 and a PC and it sends a “ Hello World” message.
The example is made for the XMC4500, the USIC channel, PORT 1.4 and PORT 1.5.
It also requires a terminal tool, like MTTTY, PuTTY or HTerm.
3.3.1
Configuration
UART channel configuration:
The UART protocol needs only two data lines (Tx and Rx). For a proper configuration, the parameters to set
are baudrate, oversampling, frame length, number of data bits, stop bits and parity mode bit.
Application Note
46
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
In this example:

The baudrate for the USIC peripheral is selected equal to 57600 baud and the chosen channel is
XMC_UART0_CH0.

The number of bits is the number of bits for the data field. The minimum value allowed is 1, the
maximum is 16. For this example, the value is 8.

The frame length indicates the number of bits in a frame. The minimum value allowed is 1, the maximum
is 63. For this example, the value is 8.

The oversampling refers to the number of samples for a symbol (DCTQ Denominator Counter for Time
Quanta). The minimum value allowed is 1, the maximum is 32. For this example, the value is 16.

In addition, Stop bits are set to the default and standard value of 1.

Finally, the parity mode is set to none because it is not used.
XMC_USIC_CH_t
*uart = XMC_UART0_CH0;
XMC_UART_CH_CONFIG_t uart_config = {
.baudrate = 57600U,
.oversampling = 16U,
.data_bits = 8U,
.frame_length = 8U,
.stop_bits = 1U,
.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE
} ;
Table 15
Input/Output pins for UART Full-Duplex mode
Input/Output pins
Function
pin
Port Driver (IOCRxPC)
Data out
USIC0_CH0.DOUT0
P1.5
ALT 2 (push pull)
Data in
USIC0_CH0.DX0B
P1.4
input
3.3.2
Initialization
The initialization sequence is important. Make sure that the input source is selected before starting the USIC
peripheral. In order to avoid spikes, the GPIO ports should be initialized after the start of the USIC channel.
XMC_UART_CH_Init(uart, &uart_config);
XMC_UART_CH_SetInputSource(uart, XMC_UART_CH_INPUT_RXD ,USIC0_C0_DX0_P1_4);
XMC_UART_CH_Start(uart);
3.3.3
Function implementation
The USIC peripheral set with UART protocol is ready to transmit. For simpler code, it is best to store the
message in a variable and use a for-loop.
uint8_t message[] = "Hello World!\n";
for (uint8_t index = 0; index < sizeof(message) - 1; index++)
Application Note
47
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
{
XMC_UART_CH_Transmit(XMC_UART0_CH0, message[index]);
}
The final stage is to see the output of the transmission in a terminal tool. The terminal tool needs to use the
virtual COM port that is connected to the MCU and the baudrate must be set according to the value in the
code (57600).
3.4
XMC Lib Implementation: Loopback mode
This example demonstrated the loopback feature of the UART. This function permits to evaluate the USIC
channel directly on-chip without any connections to port pins.
The example is made for the XMC4500. The USIC channel and the input is DX0G which is used only for the
loopback feature.
3.4.1
Configuration
UART Channel configuration:
The UART configuration is the same as the previous example.
XMC_USIC_CH_t
*uart = XMC_UART0_CH0;
XMC_UART_CH_CONFIG_t uart_config = {
.baudrate = 57600U,
.oversampling = 16U,
.data_bits = 8U,
.frame_length = 8U,
.stop_bits = 1U,
.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE
} ;
3.4.2
Initialization
In this example, the configuration of Tx pin for an alternate function is not required. The initialization
sequence is the same as in the previous example, but the Input Source is different.
XMC_UART_CH_Init(uart, &uart_config);
XMC_UART_CH_SetInputSource(uart, XMC_USIC_CH_INPUT_DX0,USIC0_C0_DX0_DOUT0);
XMC_UART_CH_Start(uart);
3.4.3
Function implementation
In this example, the code polls for the end of the transmission by checking the flags provided by UART. When
one of these flags is 0, it means the transmission is correct. The last step is to get the result of the
transmission from the UART.
uint16_t
TxData, RxData;
TxData=0xAA;
XMC_UART_CH_Transmit(uart, TxData);
Application Note
48
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
while((XMC_UART_CH_GetStatusFlag(uart)
&(XMC_UART_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_UART_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) == 0){}
RxData= XMC_UART_CH_GetReceivedData(uart);
3.5
XMC Lib Implementation: Half-Duplex mode
The UART protocol permits communication with only a single data signal line for transmit and receive.
This method is useful because the potential for collisions is totally avoided. Only one UART device at a time
enables its transmit pin (with push-pull configuration).
In the USIC peripheral, it is possible to have an external as well as internal connection.
3.5.1
Configuration
UART Channel configuration:
The UART configuration is the same as the previous example.
XMC_USIC_CH_t
*uart = XMC_UART0_CH0;
XMC_UART_CH_CONFIG_t uart_config = {
.baudrate = 57600U,
.oversampling = 16U,
.data_bits = 8U,
.frame_length = 8U,
.stop_bits = 1U,
.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE
} ;
3.5.2
Initialization
In this example, the configuration is using the internal connection of the pin so that the pin is used as DOUT
and DIN.
Table 16
Input/Output pins for UART Half-Duplex mode
Input/Output pins
Function
pin
Port Driver (IOCRxPC)
Data out
USIC0_CH0.DOUT0
P1.5
ALT 2 (push pull)
Data in
USIC0_CH0.DX0A
P1.5
input
XMC_UART_CH_Init(uart, &uart_config);
XMC_UART_CH_SetInputSource(uart, XMC_USIC_CH_INPUT_DX0,USIC0_C0_DX0_P1_5);
XMC_UART_CH_Start(uart);
3.5.3
Function implementation
The function implementation for this example is the same as the previous example.
Application Note
49
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
uint16_t
TxData, RxData;
TxData=0xAA;
XMC_UART_CH_Transmit(uart, TxData);
while((XMC_UART_CH_GetStatusFlag(uart)
&(XMC_UART_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_UART_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) == 0){}
RxData= XMC_UART_CH_GetReceivedData(uart);
3.6
XMC Lib Implementation: Loopback mode with FIFO
This example shows the possibility to use the optional functionality of the FIFO RAM. For correct usage, FIFO
RAM must be initialized separately before being used.
3.6.1
Configuration
UART Channel configuration:
The UART configuration is the same as the previous example.
XMC_USIC_CH_t
*uart = XMC_UART0_CH0;
XMC_UART_CH_CONFIG_t uart_config = {
.baudrate = 57600U,
.oversampling = 16U,
.data_bits = 8U,
.frame_length = 8U,
.stop_bits = 1U,
.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE
} ;
The configuration of the FIFO requires a parameter of the FIFO size expressed in number of Words.
Additionally, the value of the limit and the first FIFO number (start point) are required.
In this example the FIFO of the TX channel is configured with 8 entries for TxFIFO from point 0, with a limit of
1. The RX channel is configured with 8 entries for RxFIFO from point 16, with a limit of 7. This means that
SRBI is set if all 8*DATA items have been received. This SRBI (Standard Receive Buffer) bit indicates that a
standard receive buffer eventhas been detected.
XMC_USIC_CH_TXFIFO_Configure(uart, 0, XMC_USIC_CH_FIFO_SIZE_8WORDS, 1);
XMC_USIC_CH_RXFIFO_Configure(uart, 16, XMC_USIC_CH_FIFO_SIZE_8WORDS, 7);
3.6.2
Function implementation
This example uses two APIs dedicated for the FIFO. One is dedicated to insert data FIFO during the
Transmission phase, the other is used to get data in the Reception phase.
uint16_t uwaTxData[8], uwaRxData[8], i;
for (i=0; i<8; i++)
Application Note
50
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Asynchronous Serial Channel (ASC = UART)
{
uwaTxData[i] = (0x55 + i);
XMC_USIC_CH_TXFIFO_PutData(uart, uwaTxData[i]);
}
while((XMC_USIC_CH_RXFIFO_GetEvent(uart) & USIC_CH_TRBSR_SRBI_Msk) == 0){}
for (i=0; i<8; i++)
{
uwaRxData[i] = XMC_USIC_CH_RXFIFO_GetData(uart);
if (uwaTxData[i] != uwaRxData[i]) while (1);
}
Application Note
51
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
4
Inter-IC Bus Protocol (I2C)
Figure 23
I2C Signal Connections
An I2C connection is characterized by two wires (SDA and SCL). The output drivers for these signals must
have open-drain characteristics to allow the wired-AND connection of all SDA lines together and all SCL lines
together to form the I2C bus system. Due to this structure, a high level driven by an output stage does not
necessarily lead immediately to a high level at the corresponding input. Each SDA or SCL connection has to
be input and output at the same time, because the input function always monitors the level of the signal,
also while sending.

Shift data SDA: input handled by DX0 stage, output signal DOUT0

Shift clock SCL: input handled by DX1 stage, output signal SCLKOUT
4.1
Frame Format
Data is transferred by the 2-line I2C bus (SDA, SCL) using a protocol that ensures reliable and efficient
transfers. The sender of a data byte receives and checks the value of the following acknowledge field. The
I2C being a wired-AND bus system, a 0 of at least one device leads to a 0 on the bus, which is received by all
devices.
Application Note
52
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
A data word consists of 8 data bit symbols for the data value, followed by another data bit symbol for the
acknowledge bit. The data word can be interpreted as address information (after a start symbol) or as
transferred data (after the address).
In order to be able to receive an acknowledge signal, the sender of the data bits has to release the SDA line
by sending a 1 as the acknowledge value. Depending on the internal state of the receiver, the acknowledge
bit is either sent active or passive.
Figure 24
I2C Frame Example
4.2
Symbol Timing
The symbol timing of the I2C is determined by the master stimulating the shift clock line SCL.

100 kBaud standard mode (PCR.STIM = 0):
− The symbol timing is based on 10 time quanta tq per symbol. A minimum module clock frequency
fPERIPH = 2 MHz is required

400 kBaud fast mode (PCR.STIM = 1):
− The symbol timing is based on 25 time quanta tq per symbol. A minimum module clock frequency
fPERIPH = 10 MHz is required
The baud rate setting should only be changed while the transmitter and the receiver are idle or CCR.MODE =
0.
The bits in register BRG define the length of a time quantum tq that is given by one period of fPCTQ.
BRG.CTQSEL:

defines the input frequency fCTQIN for the time quanta generation
BRG.PCTQ:

defines the length of a time quantum (division of fCTQIN by 1, 2, 3, or 4)
Application Note
53
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
BRG.DCTQ:

defines the number of time quanta per symbol (number of tq = DCTQ + 1)
The standard setting is given by CTQSEL = 00B (fCTQIN = fPDIV) and PPPEN = 0 (fPPP = fIN). Under these
conditions, the frequency fPCTQ is given by:
4.3
Data Flow Handling
The handling of the data flow and the sequence of the symbols in an I2C frame is controlled by the I2C
transmitter part of the USIC communication channel.
The I2C bus protocol is byte-oriented, whereas a USIC data buffer word can contain up to 16 data bits. In
addition to the data byte to be transmitted (located at TBUF[7:0]), bit field TDF (transmit data format) to
control the I2C sequence is located at the bit positions TBUF[10:8].
Alternatively, polling of the ACK and NACK bits in PSR register can be performed, and the next data byte is
transmitted only after an ACK is received.
Table 17
Master Transmit Data Formats
TDF Code
Description
000B
Send data byte as master
This format is used to transmit a data byte from the master to a slave. The transmitter sends
its data byte (TBUF[7:0]), receives and checks the acknowledge bit sent by the slave.
010B
Receive data byte and send acknowledge
This format is used by the master to read a data byte from a slave. The master acknowledges
the transfer with a 0-level to continue the transfer. The content of TBUF[7:0] is ignored.
011B
Receive data byte and send not-acknowledge
This format is used by the master to read a data byte from a slave. The master does not
acknowledge the transfer with a 1-level to finish the transfer. The content of TBUF[7:0] is
ignored.
100B
Send start condition
If TBUF contains this entry while the bus is idle, a start condition is generated. The content of
TBUF[7:0] is taken as first address byte for the transmission (bits TBUF[7:1] are the address,
the LSB is the read/write control).
101B
Send repeated start condition
If TBUF contains this entry and SCL = 0 and a byte transfer is not in progress, a repeated start
condition is sent out if the device is the current master. The current master is defined as the
device that has set the start condition (and also won the master arbitration) for the current
message. The content of TBUF[7:0] is taken as first address byte for the transmission (bits
TBUF[7:1] are the address, the LSB is the read/write control).
110B
Send stop condition
If the current master has finished its last byte transfer (including acknowledge), it sends a
stop condition if this format is in TBUF. The content of TBUF[7:0] is ignored.
Application Note
54
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
TDF Code
Description
111B
Reserved
This code must not be programmed. No additional action except releasing the TBUF entry
and setting the error bit in PSR (that can lead to a protocol interrupt).
Table 18
Slave Transmit Data Format
TDF Code
Description
001B
Send data byte as slave
This format is used to transmit a data byte from a slave to the master. The transmitter sends
its data byte (TBUF[7:0]) plus the acknowledge bit as a 1.
Figure 25
I2C Master Transmission
Application Note
55
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
4.4
XMC Lib Implementation: Master to Slave mode
This example demonstrates how to use the USIC for an I2C communication in a full-duplex mode.
The I2C protocol is used to implement a counter using the onboard LEDs. The LEDs display the binary
numbers from 1 to 15 continuosly.
The communication of data is established between the USIC module as a Master to the slave IO Expander
(PCA9502) of the COM_ETH_V1 board.
The example is made for the XMC4500 and uses channel 0 of the USIC slice 1, PORT 2.14 and PORT 5.8.
4.4.1
Configuration
The first step is to configure USIC channel with the I2C protocol.After this operation, the configuration of the
baudrate used for the communication is mandatory.
The I2C protocol needs the SDA and SCL pins to be configured:

SDA (Serial Data) contains the data for the communication

SCL ( Serial Clock) is mandatory for I2C because it is a synchronous communication protocol
XMC_USIC_CH_t
*i2c = XMC_I2C1_CH0;
XMC_I2C_CH_CONFIG_t
{
.baudrate = 100000U,
};
i2c_cfg =
Table 19
Input/output pins for I2C Master to Slave mode
Input/Output pins
Function
pin
Port Driver (IOCRxPC)
SDA
USIC1_CH0.DOUT0
P2.14
ALT 2 (open drain)
SCL
USIC1_CH0.SCLKOUT
P5.8
ALT 2 (open drain)
4.4.2
Initialization
The I2C is initialized with three operations:

First, set the baudrate

Second, select the inputs from the multiplexer of USIC input stage for both pins

Third, switch the USIC channel to the I2C protocol
XMC_I2C_CH_Init(i2c, &i2c_cfg);
XMC_I2C_CH_SetInputSource(i2c, XMC_I2C_CH_INPUT_SDA , USIC1_C0_DX0_P2_14);
XMC_I2C_CH_SetInputSource(i2c, XMC_I2C_CH_INPUT_SCL , USIC1_C0_DX1_P5_8);
Application Note
56
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
XMC_I2C_CH_Start(i2c);
4.4.3
Function implementation
The first step of the implementation is to start the Master of the I2C communication. The start command is
forwarded to the slave address. In this example, the address of the slave is the IO Expander (PCA9502) of the
COM_ETH_V1 board address.
The code waits until the ACK is recognized and then clears the ACK flag:
#define COM_PCA9502_ADDRESS (0x98)
XMC_I2C_CH_MasterStart(i2c, COM_PCA9502_ADDRESS, XMC_I2C_CH_CMD_WRITE);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
Now the I2C is tested with a transmission from Master to the Slave containing information about the slave
plus some dummy data. This is done in order to be sure that the channel is ready.
Again, it is best to wait until ACK is recognized before proceeding to clear the ACK flag:
typedef enum PCA9502_REGADDR {
IO_DIR
= 0xA << 3,
IO_STATE = 0xB << 3,
IO_INTE
= 0xC << 3,
IO_CTRL
= 0xE << 3
} PCA9502_REGADDR_t;
XMC_I2C_CH_MasterTransmit(i2c, IO_DIR);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
XMC_I2C_CH_MasterTransmit(i2c, 0xffU);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
Now that the I2C is tested, the LEDs and counter can be setup:
uint8_t counter = 0;
uint8_t io_state1 = 0;
uint8_t received_data;
while(counter < 0xFF)
Application Note
57
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Inter-IC Bus Protocol (I2C)
{
io_state1 = ~counter;
counter++;
XMC_I2C_CH_MasterRepeatedStart(i2c, COM_PCA9502_ADDRESS,
XMC_I2C_CH_CMD_WRITE);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
XMC_I2C_CH_MasterTransmit(i2c, IO_STATE);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
XMC_I2C_CH_MasterTransmit(i2c, io_state1);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
XMC_I2C_CH_MasterRepeatedStart(i2c, COM_PCA9502_ADDRESS,
XMC_I2C_CH_CMD_READ);
while((XMC_I2C_CH_GetStatusFlag(i2c) & XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED)
== 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_ACK_RECEIVED);
XMC_I2C_CH_MasterReceiveNack(i2c);
while((XMC_I2C_CH_GetStatusFlag(i2c) &
(XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION)) == 0U){}
XMC_I2C_CH_ClearStatusFlag(i2c, XMC_I2C_CH_STATUS_FLAG_RECEIVE_INDICATION |
XMC_I2C_CH_STATUS_FLAG_ALTERNATIVE_RECEIVE_INDICATION);
The last step is to receive the data from the buffer of Rx channel.
received_data = XMC_I2C_CH_GetReceivedData(i2c);
At the end it is mandatory to stop the I2C Master channel:
XMC_I2C_CH_MasterStop(i2c);
Application Note
58
V1.0, 2015-07
Universal Serial Interface Channel (USIC)
AP3230332303
Revision History
5
Revision History
Current Version is V1.0, 2015-07
Page or Reference
Description of change
V1.0, 2015-07
Initial Version
Application Note
59
V1.0, 2015-07
Trademarks of Infineon Technologies AG
AURIX™, C166™, CanPAK™, CIPOS™, CIPURSE™, CoolGaN™, CoolMOS™, CoolSET™, CoolSiC™, CORECONTROL™, CROSSAVE™, DAVE™, DI-POL™, DrBLADE™,
EasyPIM™, EconoBRIDGE™, EconoDUAL™, EconoPACK™, EconoPIM™, EiceDRIVER™, eupec™, FCOS™, HITFET™, HybridPACK™, ISOFACE™, IsoPACK™, iWafer™, MIPAQ™, ModSTACK™, my-d™, NovalithIC™, OmniTune™, OPTIGA™, OptiMOS™, ORIGA™, POWERCODE™, PRIMARION™, PrimePACK™,
PrimeSTACK™, PROFET™, PRO-SIL™, RASIC™, REAL3™, ReverSave™, SatRIC™, SIEGET™, SIPMOS™, SmartLEWIS™, SOLID FLASH™, SPOC™, TEMPFET™,
thinQ!™, TRENCHSTOP™, TriCore™.
Other Trademarks
Advance Design System™ (ADS) of Agilent Technologies, AMBA™, ARM™, MULTI-ICE™, KEIL™, PRIMECELL™, REALVIEW™, THUMB™, µVision™ of ARM
Limited, UK. ANSI™ of American National Standards Institute. AUTOSAR™ of AUTOSAR development partnership. Bluetooth™ of Bluetooth SIG Inc. CATiq™ of DECT Forum. COLOSSUS™, FirstGPS™ of Trimble Navigation Ltd. EMV™ of EMVCo, LLC (Visa Holdings Inc.). EPCOS™ of Epcos AG. FLEXGO™ of
Microsoft Corporation. HYPERTERMINAL™ of Hilgraeve Incorporated. MCS™ of Intel Corp. IEC™ of Commission Electrotechnique Internationale. IrDA™ of
Infrared Data Association Corporation. ISO™ of INTERNATIONAL ORGANIZATION FOR STANDARDIZATION. MATLAB™ of MathWorks, Inc. MAXIM™ of Maxim
Integrated Products, Inc. MICROTEC™, NUCLEUS™ of Mentor Graphics Corporation. MIPI™ of MIPI Alliance, Inc. MIPS™ of MIPS Technologies, Inc., USA.
muRata™ of MURATA MANUFACTURING CO., MICROWAVE OFFICE™ (MWO) of Applied Wave Research Inc., OmniVision™ of OmniVision Technologies, Inc.
Openwave™ of Openwave Systems Inc. RED HAT™ of Red Hat, Inc. RFMD™ of RF Micro Devices, Inc. SIRIUS™ of Sirius Satellite Radio Inc. SOLARIS™ of Sun
Microsystems, Inc. SPANSION™ of Spansion LLC Ltd. Symbian™ of Symbian Software Limited. TAIYO YUDEN™ of Taiyo Yuden Co. TEAKLITE™ of CEVA, Inc.
TEKTRONIX™ of Tektronix Inc. TOKO™ of TOKO KABUSHIKI KAISHA TA. UNIX™ of X/Open Company Limited. VERILOG™, PALLADIUM™ of Cadence Design
Systems, Inc. VLYNQ™ of Texas Instruments Incorporated. VXWORKS™, WIND RIVER™ of WIND RIVER SYSTEMS, INC. ZETEX™ of Diodes Zetex Limited.
Last Trademarks Update 2014-07-17
www.infineon.com
Edition 2015-07
Published by
Infineon Technologies AG
81726 Munich, Germany
© 2015 Infineon Technologies AG.
All Rights Reserved.
Do you have a question about any
aspect of this document?
Email: [email protected]
Document reference
AP32303
Legal Disclaimer
THE INFORMATION GIVEN IN THIS APPLICATION
NOTE (INCLUDING BUT NOT LIMITED TO
CONTENTS OF REFERENCED WEBSITES) IS GIVEN
AS A HINT FOR THE IMPLEMENTATION OF THE
INFINEON TECHNOLOGIES COMPONENT ONLY
AND SHALL NOT BE REGARDED AS ANY
DESCRIPTION OR WARRANTY OF A CERTAIN
FUNCTIONALITY, CONDITION OR QUALITY OF THE
INFINEON TECHNOLOGIES COMPONENT. THE
RECIPIENT OF THIS APPLICATION NOTE MUST
VERIFY ANY FUNCTION DESCRIBED HEREIN IN THE
REAL APPLICATION. INFINEON TECHNOLOGIES
HEREBY DISCLAIMS ANY AND ALL WARRANTIES
AND LIABILITIES OF ANY KIND (INCLUDING
WITHOUT LIMITATION WARRANTIES OF NONINFRINGEMENT OF INTELLECTUAL PROPERTY
RIGHTS OF ANY THIRD PARTY) WITH RESPECT TO
ANY AND ALL INFORMATION GIVEN IN THIS
APPLICATION NOTE.
Information
For further information on technology, delivery terms
and conditions and prices, please contact the nearest
Infineon Technologies Office (www.infineon.com).
Warnings
Due to technical requirements, components may
contain dangerous substances. For information on
the types in question, please contact the nearest
Infineon Technologies Office. Infineon Technologies
components may be used in life-support devices or
systems only with the express written approval of
Infineon Technologies, if a failure of such components
can reasonably be expected to cause the failure of
that life-support device or system or to affect the
safety or effectiveness of that device or system. Life
support devices or systems are intended to be
implanted in the human body or to support and/or
maintain and sustain and/or protect human life. If
they fail, it is reasonable to assume that the health of
the user or other persons may be endangered.