
- •Preface
- •About this document
- •Further reading
- •Feedback
- •Introduction
- •1.1 About the ARM PrimeCell SSPMS (PL021)
- •1.2 AMBA compatibility
- •Functional Overview
- •2.1 ARM PrimeCell SSPMS (PL021) overview
- •2.2 PrimeCell SSPMS functional description
- •2.3 PrimeCell SSPMS operation
- •Programmer’s Model
- •3.1 About the programmer’s model
- •3.2 Summary of PrimeCell SSPMS registers
- •3.3 Register descriptions
- •3.4 Interrupts
- •Programmer’s Model for Test
- •4.1 PrimeCell SSPMS test harness overview
- •4.2 Scan testing
- •4.3 Test registers
- •A.1 AMBA APB signals
- •A.2 On-chip signals
- •A.3 Signals to pads

Chapter 3
Programmer’s Model
This chapter describes the ARM PrimeCell Synchronous Serial Port Master and Slave (PL021) registers and provides details needed when programming the microcontroller. It contains the following sections:
•About the programmer’s model on page 3-2
•Summary of PrimeCell SSPMS registers on page 3-3
•Register descriptions on page 3-4
•Interrupts on page 3-10.
ARM DDI 0171B |
3-1 |

Programmer’s Model
3.1About the programmer’s model
The base address of the PrimeCell SSPMS is not fixed, and may be different for any particular system implementation. The offset of any particular register from the base address, however, is fixed.
The following locations are reserved, and must not be used during normal operation:
•locations at offsets 0x18–0x3C and 0x94–0xFF are reserved for possible future extensions
•locations at offsets + 0x40 through +0x90 are reserved for test purposes.
3-2 |
Copyright © ARM Limited 1999. All rights reserved. |
ARM DDI 0171B |

Programmer’s Model
3.2Summary of PrimeCell SSPMS registers
The PrimeCell SSPMS registers are shown in Table 3-1.
Table 3-1 PrimeCell SSPMS register summary
Address |
Type |
Width |
Reset |
Name |
Description |
|
value |
||||||
|
|
|
|
|
||
|
|
|
|
|
|
|
SSP Base + 0x00 |
Read/write |
16 |
0x00 |
SSPCR0 |
Control register 0. |
|
|
|
|
|
|
|
|
SSP Base + 0x04 |
Read/write |
5 |
0x00 |
SSPCR1 |
Control register 1. |
|
|
|
|
|
|
|
|
SSP Base + 0x08 |
Read/write |
16 |
0x-- |
SSPDR |
Receive FIFO (read)/ |
|
|
|
|
|
|
Transmit FIFO data register (write). |
|
|
|
|
|
|
|
|
SSP Base + 0x0C |
Read |
5 |
0x00 |
SSPSR |
Status register. |
|
|
|
|
|
|
|
|
SSP Base + 0x10 |
Read/write |
8 |
0x00 |
SSPCPSR |
Clock prescale register. |
|
|
|
|
|
|
|
|
SSP Base + 0x14 |
Read/write |
3/0 |
0x00 |
SSPIIR/ |
Interrupt identification register (read) |
|
|
|
|
|
SSPICR |
Interrupt clear register (write). |
|
|
|
|
|
|
|
|
SSP Base + 0x18–0x3C |
- |
- |
- |
- |
Reserved. |
|
|
|
|
|
|
|
|
SSP Base + 0x40–90 |
- |
- |
- |
- |
Reserved (for test purposes). |
|
|
|
|
|
|
|
|
SSP Base + 0x94–FF |
- |
- |
- |
- |
Reserved. |
|
|
|
|
|
|
|
ARM DDI 0171B |
Copyright © ARM Limited 1999. All rights reserved. |
3-3 |

Programmer’s Model
3.3Register descriptions
The following registers are described in this section:
•SSPCR0: [16] (+ 0x00)
•SSPCR1: [7] (+ 0x04) on page 3-5
•SSPDR: [16] (+ 0x08) on page 3-7
•SSPSR: [5] (+ 0x0c) on page 3-7
•SSPCPSR: [8] (+ 0x10) on page 3-8
•SSPIIR/SSPICR: [3/0] (+ 0x14) on page 3-9.
For each of the following register descriptions, the format of the title is:
Register name: [bit width] (Offset from Base).
3.3.1SSPCR0: [16] (+ 0x00)
SSPCR0 is control register 0 and contains five bit fields that control various functions within the PrimeCell SSPMS. Table 3-2 shows the bit assignments for the SSPCR0.
|
|
|
Table 3-2 SSPCR0 register |
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
15:8 |
SCR |
Read/write |
Serial clock rate. The value SCR is used to generate the |
|
|
|
transmit and receive bit rate of the PrimeCell SSPMS. |
|
|
|
The bit rate is: |
|
|
|
FSSPC LK |
|
|
|
------------------------------------------------------------ |
|
|
|
CPSDVSR × (1 + SCR) |
|
|
|
where CPSDVSR is an even value from 2 to 254, |
|
|
|
programmed via SSPCPSR register and SCR is a value |
|
|
|
from 0 to 255. |
|
|
|
|
7 |
SPH |
Read/write |
SCLKOUT phase (applicable to Motorola SPI frame |
|
|
|
format only). See Motorola SPI frame format on |
|
|
|
page 2-12. |
|
|
|
|
6 |
SPO |
Read/write |
SCLKOUT polarity (applicable to Motorola SPI frame |
|
|
|
format only). See Motorola SPI frame format on |
|
|
|
page 2-12. |
|
|
|
|
5:4 |
FRF |
Read/write |
Frame format: |
|
|
|
00 Motorola SPI frame format |
|
|
|
01 TI synchronous serial frame format |
10 National Microwire frame format
11 Reserved, undefined operation
3-4 |
Copyright © ARM Limited 1999. All rights reserved. |
ARM DDI 0171B |

Programmer’s Model
|
|
|
Table 3-2 SSPCR0 register (continued) |
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
3:0 |
DSS |
Read/write |
Data Size Select: |
|
|
|
0000 Reserved, undefined operation |
|
|
|
0001 Reserved, undefined operation |
|
|
|
0010 Reserved, undefined operation |
|
|
|
0011 4-bit data |
|
|
|
0100 5-bit data |
|
|
|
0101 6-bit data |
|
|
|
0110 7-bit data |
|
|
|
0111 8-bit data |
|
|
|
1000 9-bit data |
|
|
|
1001 10-bit data |
|
|
|
1010 11-bit data |
|
|
|
1011 12-bit data |
|
|
|
1100 13-bit data |
|
|
|
1101 14-bit data |
|
|
|
1110 15-bit data |
|
|
|
1111 16-bit data. |
|
|
|
|
3.3.2SSPCR1: [7] (+ 0x04)
SSPCR1 is the control register 1 and contains five different bit fields, which control various functions within the PrimeCell SSPMS. Table 3-3 shows the bit assignments for the SSPCR1.
|
|
|
Table 3-3 SSPCR1 register |
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
15:7 |
- |
- |
Reserved, read unpredictable, should be written as 0. |
|
|
|
|
6 |
SOD |
Read/write |
Slave-mode output disable. This bit is relevant only in |
|
|
|
the slave mode (MS=1). In multiple-slave systems, it |
is possible for an SSPMS master to broadcast a message to all slaves in the system while ensuring that only one slave drives data onto its serial output line. In such systems the RXD lines from multiple slaves could be tied together. To operate in such systems, the SOD may be set if the SSP slave is not supposed to drive the SSPTXD line.
0 = SSP may drive the SSPTXD output in slave mode. 1 = SSP must not drive the SSPTXD output in slave mode.
ARM DDI 0171B |
Copyright © ARM Limited 1999. All rights reserved. |
3-5 |

Programmer’s Model
|
|
|
|
Table 3-3 SSPCR1 register (continued) |
|
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
|
|
5 |
MS |
Read/write |
Master/slave mode select. This bit can be modified |
|
|
|
|
only when the PrimeCell SSPMS is disabled (SSE=0). |
|
|
|
|
0 |
= Device configured as master (default). |
|
|
|
1 |
= Device configured as slave. |
|
|
|
|
|
4 |
SSE |
Read/write |
Synchronous serial port enable: |
|
|
|
|
0 |
= SSP operation disabled. |
|
|
|
1 |
= SSP operation enabled. |
|
|
|
|
|
3 |
LBM |
Read/write |
Loop back mode: |
|
|
|
|
0 |
= Normal serial port operation enabled. |
|
|
|
1 |
= Output of transmit serial shifter is connected to |
|
|
|
input of receive serial shifter internally. |
|
|
|
|
|
|
2 |
RORIE |
Read/write |
Receive FIFO overrun interrupt enable: |
|
|
|
|
0 |
= Overrun detection is disabled. Overrun condition |
|
|
|
does not generate the SSPRORINTR interrupt. |
|
|
|
|
Clearing this bit to zero also clears the |
|
|
|
|
SSPRORINTR interrupt if it is already asserted. |
|
|
|
|
1 |
= Overrun detection is enabled. Overrun condition |
|
|
|
generates the SSPRORINTR interrupt. |
|
|
|
|
|
|
1 |
TIE |
Read/write |
Transmit FIFO interrupt enable: |
|
|
|
|
0 = Transmit FIFO half-full or less condition does not |
|
|
|
|
generate the SSPTXINTR interrupt. |
|
|
|
|
1 |
= Transmit FIFO half-full or less condition |
|
|
|
generates the SSPTXINTR interrupt. |
|
|
|
|
|
|
0 |
RIE |
Read/write |
Receive FIFO interrupt enable: |
|
|
|
|
0 = Receive FIFO half-full or more condition does not |
|
|
|
|
generate the SSPRXINTR interrupt. |
|
|
|
|
1 |
= Receive FIFO half-full or more condition |
|
|
|
generates the SSPRXINTR interrupt. |
|
|
|
|
|
|
3-6 |
Copyright © ARM Limited 1999. All rights reserved. |
ARM DDI 0171B |

Programmer’s Model
3.3.3SSPDR: [16] (+ 0x08)
SSPDR is the data register and is 16-bits wide. When SSPDR is read, the entry in the receive FIFO (pointed to by the current FIFO read pointer) is accessed. As data values are removed by the PrimeCell SSPMS receive logic from the incoming data frame, they are placed into the entry in the receive FIFO (pointed to by the current FIFO write pointer).
When SSPDR is written to, the entry in the transmit FIFO (pointed to by the write pointer), is written to. Data values are removed from the transmit FIFO one value at a time by the transmit logic. It is loaded into the transmit serial shifter, then serially shifted out onto the SSPTXD pin at the programmed bit rate.
When a data size of less than 16 bits is selected, the user must right-justify data written to the transmit FIFO. The transmit logic ignores the unused bits. Received data less than 16 bits is automatically right-justified in the receive buffer.
When the PrimeCell SSPMS is programmed for National Microwire frame format, the default size for transmit data is eight bits (the most significant byte is ignored). The receive data size is controlled by the programmer. The transmit FIFO and the receive FIFO are not cleared even when SSE is set to zero. This allows the software to fill the transmit FIFO before enabling the PrimeCell SSPMS. Table 3-4 shows the bit assignments for the SSPDR.
Table 3-4 SSPDR register
Bits |
Name |
Type |
Function |
|
|
|
|
15:0 |
DATA |
Read/write |
Transmit/Receive FIFO: |
|
|
|
Read = Receive FIFO |
|
|
|
Write = Transmit FIFO. |
|
|
|
The user should right-justify data when the PrimeCell |
|
|
|
SSPMS is programmed for a data size that is less than 16 |
|
|
|
bits. Unused bits at the top are ignored by transmit logic. |
|
|
|
The receive logic automatically right-justifies. |
|
|
|
|
3.3.4SSPSR: [5] (+ 0x0c)
SSPSR is a read-only status register which contains bits that indicate the FIFO fill status and the SSP busy status. Table 3-5 shows the bit assignments for the SSPSR.
|
|
|
|
Table 3-5 SSPSR register |
|
|
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
|
|
15:5 |
- |
- |
Reserved, read unpredictable, should be written as 0. |
|
|
|
|
|
|
|
|
|
|
ARM DDI 0171B |
Copyright © ARM Limited 1999. All rights reserved. |
3-7 |

Programmer’s Model
|
|
|
|
Table 3-5 SSPSR register (continued) |
|
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
|
|
4 |
BSY |
Read |
SSP busy flag (read-only): |
|
|
|
|
0 |
= SSP is idle. |
|
|
|
1 |
= SSP is currently transmitting and/or receiving a frame or the |
|
|
|
transmit FIFO is not empty. |
|
|
|
|
|
|
3 |
RFF |
Read |
Receive FIFO full (read-only): |
|
|
|
|
0 |
= Receive FIFO is not full. |
|
|
|
1 |
= Receive FIFO is full. |
|
|
|
|
|
2 |
RNE |
Read |
Receive FIFO not empty (read-only): |
|
|
|
|
0 |
= Receive FIFO is empty. |
|
|
|
1 |
= Receive FIFO is not empty. |
|
|
|
|
|
1 |
TNF |
Read |
Transmit FIFO not full (read-only): |
|
|
|
|
0 |
= Transmit FIFO is full. |
|
|
|
1 |
= Transmit FIFO is not full. |
|
|
|
|
|
0 |
TFE |
Read |
Transmit FIFO empty (read-only): |
|
|
|
|
0 |
= Transmit FIFO is not empty. |
|
|
|
1 |
= Transmit FIFO is empty. |
|
|
|
|
|
3.3.5SSPCPSR: [8] (+ 0x10)
SSPCPSR is the clock prescale register and specifies the division factor by which the input SSPCLK should be internally divided before further use.
The value programmed into this register should be an even number between 2–254. The least significant bit of the programmed number is hard-coded to zero. If an odd number is written to this register, data read back from this register will have the least significant bit as zero. Table 3-6 shows the bit assignments for the SSPCPSR.
|
|
|
Table 3-6 SSPCPSR register |
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
15:8 |
- |
- |
Reserved, read unpredictable, should be written as 0. |
|
|
|
|
7:0 |
CPSDVSR |
Read/write |
Clock prescale divisor. Should be an even number |
|
|
|
from 2–254, depending on the frequency of SSPCLK. |
|
|
|
The least significant bit always returns zero on reads. |
|
|
|
|
3-8 |
Copyright © ARM Limited 1999. All rights reserved. |
ARM DDI 0171B |

Programmer’s Model
3.3.6SSPIIR/SSPICR: [3/0] (+ 0x14)
The interrupt status is read from the SSP interrupt identification register (SSPIIR). A write of any value to the SSP interrupt clear register (SSPICR) clears the SSP receive FIFO overrun interrupt. This interrupt clearing mechanism is in addition to the other mechanism mentioned in Table 3-3 on page 3-5. Therefore, clearing the RORIE bit in the SSPCR1 register will also clear the overrun condition if already asserted. All the bits are cleared to zero when reset. Table 3-7 shows the bit assignments for the SSPIIR/ SSPICR.
|
|
|
|
Table 3-7 SSPIIR/SSPICR register |
|
|
|
|
|
Bits |
Name |
Type |
Function |
|
|
|
|
|
|
15:0 |
- |
Write |
A write to this register clears the receive overrun interrupt, |
|
|
|
|
regardless of the data value written. |
|
|
|
|
|
|
15:3 |
- |
Read |
Reserved, read unpredictable. |
|
|
|
|
|
|
2 |
RORIS |
Read |
Read: SSP Receive FIFO overrun interrupt status |
|
|
|
|
0 |
= SSPRORINTR is not asserted. |
|
|
|
1 |
= SSPRORINTR is asserted. |
|
|
|
|
|
1 |
TIS |
Read |
Read: SSP receive FIFO service request interrupt status |
|
|
|
|
0 |
= SSPRXINTR is not asserted. |
|
|
|
1 |
= SSPRXINTR is asserted. |
|
|
|
|
|
0 |
RIS |
Read |
Read: SSP transmit FIFO service request interrupt status |
|
|
|
|
0 |
= SSPTXINTR is not asserted. |
|
|
|
1 |
= SSPTXINTR is asserted. |
|
|
|
|
|
ARM DDI 0171B |
Copyright © ARM Limited 1999. All rights reserved. |
3-9 |