* This aperture is the TM3260 internal view of the TM3260 registers. Each TM only
sees its own registers here i.e., Viper2 aperture 14 0000 maps to TM1 10 0000.
Viper2 aperture 16 0000 maps to TM2 10 0000.
** Each TriMedia sees the lower 64 K of the MMIO aperture as cache i.e., Viper2
aperture of 13 0000 maps for TM1 00 0000. Viper2 aperture of 15 0000 maps to TM2
00 0000
*** The tunnel configuration sets its aperture size from 4 K to 514 K if the tunnel is not
in use.
This variable determines a priority threshold that incoming interrupt
requests must exceed to trigger interrupt requests towards
processor and power management controller.
Legal PRIORITY_LIMITER values are 0... F; other values are
reserved and lead to undefined behavior.
PRIORITY_LIMITER = 0:
Incoming interrupt requests with priority >0 can trigger interrupt
requests towards processor.
PRIORITY_LIMITER = n:
Only interrupt requests at a priority level above n can trigger
interrupt requests towards processor.
...
PRIORITY_LIMITER = F:
No incoming interrupt requests can trigger interrupt requests
towards processor.
High order bits not required for PRIORITY_LIMITER encoding are
read-only 0.
21:16TargetsR1Number of interrupt targets supported (minus one)
15:8Priority LimitRFNumber of priority levels supported (minus one)
7:0Request Input numberR50Number of interrupt request inputs (hex)
…Continued
This variable reflects the state of the intreq[i] line (if needed,
converted to active high) OR’ed by the state of the local soft-ware
interrupt request variable at the time the register is read. Note that
the pending variables are also reflected by the INT_REQUEST_*
registers individually present for each interrupt request input.
PENDING = 0: no interrupt request
PENDING = 1: interrupt request is pending
This variable reflects the state of the intreq[i] line (if needed,
converted to active high) OR’ed by the state of the local soft-ware
interrupt request variable at the time the register is read. Note that
the pending variables are also reflected by the INT_REQUEST_*
registers individually present for each interrupt request input.
This variable reflects the state of the intreq[i] line (if needed,
converted to active high) OR’ed by the state of the local soft-ware
interrupt request variable at the time the register is read. Note that
the pending variables are also reflected by the INT_REQUEST_*
registers individually present for each interrupt request input.
Inter-Processor Communication (IPC) MIPS Register, Target 0
31pendingR0Pending interrupt request:
30SET_SWINTW0Set software interrupt request
29CLR_SWINTW0Clear software interrupt request:
28WE_PRIORITY_LEVELWxWrite Enable PRIORITY_LEVEL
27WE_TARGETWxWrite Enable TARGET
26WE_ENABLEWxWrite Enable ENABLE
25WE_ACTIVE_LOWWxWrite Enable ACTIVE_LOW
24:18ReservedR0
…Continued
This variable reflects the state of the intreq line (if needed,
converted to active high) OR’ed by the state of the local soft-ware
interrupt request variable at the time the register is read. Note that
the PENDING variable is also visible from the INT_PENDING_*
registers.
SET_SW_INT = 0 (write): no effect on the state of the local software
interrupt request variable
SET_SWINT = 1 (write): set the state of the local software interrupt
request variable to ‘1’
SET_SWINT is always reads as 0
CLR_SWINT = 0 (write): no effect on the state of the local software
interrupt request variable
CLR_SWINT = 1 (write): clear the state of the local software
interrupt request variable to ‘0’
CLR_SWINT is always read as 0
WE_PRIORITY_LEVEL = 0 (write): no change of
PRIORITY_LEVEL variable state
WE_PRIORITY_LEVEL = 1 (write): PRIORITY_LEVEL variable
state may be changed.
WE_PRIORITY_LEVEL is always read as 0.
This bit is self-clearing.
WE_TARGET = 0 (write): no change of TARGET variable state
WE_TARGET = 1 (write): TARGET variable state may be changed.
WE_TARGET is always read as 0.
This bit is self-clearing.
WE_ENABLE = 0 (write): no change of ENABLE variable state
WE_ENABLE = 1 (write): ENABLE variable state may be changed.
WE_ENABLE is always read as 0.
This bit is self-clearing.
WE_ACTIVE_LOW = 0 (write): no change of ACTIVE_LOW
variable state
WE_ACTIVE_LOW = 1 (write): ACTIVE_LOW variable state may be
changed.
WE_ACTIVE_LOW is always read as 0.
This bit is self-clearing.
IPC TM32-1register, Target 1. This register is identical to the int_request_1 register (Offset 0x03 E404).
Offset 0x03 E40Cint_request_reg_3
IPC TM32-2 register, Target 1. This register is identical to the int_request_1 register (Offset 0x03 E404).
Offset 0x03 E410int_request_reg_4
Reserved
Offset 0x03 E414int_request_reg_5
Universal Serial Bus Interrupt register. This register is identical to the int_request_1 register (Offset 0x03 E404).
…Continued
This variable selects the polarity of the interrupt request input signal.
See also WE_ACTIVE_LOW.
ACTIVE_LOW = 1: the intreq signal is interpreted as active low.
ACTIVE_LOW = 0: the intreq signal is interpreted as active high.
This variable controls whether an interrupt request is enabled for
further processing by the interrupt controller. See also
WE_ENABLE.
ENABLE = 0: the interrupt request is discarded. It cannot cause a
processor or power management interrupt request.
ENABLE = 1: the interrupt request may cause a processor or power
management interrupt request when further conditions for this
become true.
This variable defines the interrupt target of an interrupt request.
Legal values are 0... 1; other values are reserved and lead to
undefined behavior. See also WE_TARGET.
TARGET = 0: the interrupt request will lead to a processor interrupt
request 0 (cpuint0).
TARGET = 1: the interrupt request will lead to a processor interrupt
request 1 (cpuint1).
High order bits are not required for TARGET encoding as they are
read-only 0.
This variable determines the priority level of the interrupt request.
Legal values are 0... F; other values are reserved and lead to
undefined behavior. See also WE_PRIORITY_LEVEL.
PRIORITY_LEVEL = 0: the interrupt request has priority level 0
(masked); it is ignored.
PRIORITY_LEVEL = 1: the interrupt request has priority level 1
(lowest).
...
PRIORITY_LEVEL = F: the interrupt request has priority level F
(highest).
High order bits not required for PRIORITY_LEVEL encoding;
are read-only 0.
31:11table_addrR/W0Table start address: indicates the lower address boundary of a 2048
10:3IndexR0Index: indicates the intreq line number of the interrupt request to be
2:0ReservedR0
…Continued
This variable determines a priority threshold that incoming interrupt
requests must exceed to trigger interrupt requests towards
processor. Legal PRIORITY_LIMITER values are 0... 7; other
values are reserved and lead to undefined behavior.
PRIORITY_LIMITER = 0:
Incoming interrupt requests with priority >0 can trigger interrupt
requests towards processor.
PRIORITY_LIMITER = n:
Only interrupt requests at a priority level above n can trigger
interrupt requests towards processor.
PRIORITY_LIMITER = 7:
No incoming interrupt requests can trigger interrupt requests
towards processor.
High order bits not required for PRIORITY_LIMITER encoding are
read-only 0.
This variable determines a priority threshold that incoming interrupt
requests must exceed to trigger interrupt requests towards
processor.
Legal PRIORITY_LIMITER values are 0... 7; other values are
reserved and lead to undefined behavior.
PRIORITY_LIMITER = 0:
Incoming interrupt requests with priority >0 can trigger interrupt
requests towards processor.
PRIORITY_LIMITER = n:
Only interrupt requests at a priority level above n can trigger
interrupt requests towards processor.
PRIORITY_LIMITER = 7:
No incoming interrupt requests can trigger interrupt requests
towards processor.
High order bits not required for PRIORITY_LIMITER encoding are
read-only 0.
byte aligned interrupt vector table in memory.
served by the processor:
INDEX = 0: No interrupt request to be served
INDEX = 1: Serve interrupt request at input intreq1
INDEX = 2: Serve interrupt request at input intreq2
...
INDEX = 8: Serve interrupt request at input intreq8
31:11table_addrR/W0Table start address: indicates the lower address boundary of a 2048
10:3IndexR0Index: indicates the intreq line number of the interrupt request to be
2:0ReservedR0
Interrupt Pending Registers
Offset 0x03 F200int_pending_1_8
31:9ReservedR0
8:1pending[i]R0Pending interrupt request:
0ReservedR0
Interrupt Features Register
Offset 0x03 F300int_features
31:220R-
21:16TargetsR1Number of interrupt targets supported (minus one)
15:8Priority LimitR7Number of priority levels supported (minus one)
7:0Number of request
inputs
Interrupt Message Registers
Offset 0x03 F404Message Register_1
31pendingR0Pending interrupt request:
30SET_SWINTW0Set software interrupt request
R8Number of interrupt request inputs
…Continued
byte aligned interrupt vector table in memory.
served by the processor:
INDEX = 0: No interrupt request to be served
INDEX = 1: Serve interrupt request at input intreq1
INDEX = 2: Serve interrupt request at input intreq2
...
INDEX = 8: Serve interrupt request at input intreq8
This variable reflects the state of the intreq[i] line (if needed,
converted to active high) OR’ed by the state of the local soft-ware
interrupt request variable at the time the register is read. Note that
the pending variables are also reflected by the INT_REQUEST_*
registers individually present for each interrupt request input.
This variable reflects the state of the intreq line (if needed,
converted to active high) OR’ed by the state of the local soft-ware
interrupt request variable at the time the register is read. Note that
the PENDING variable is also visible from the INT_PENDING_*
registers.
SET_SW_INT = 0 (write): no effect on the state of the local software
interrupt request variable
SET_SWINT = 1 (write): set the state of the local software interrupt
request variable to ‘1’
SET_SWINT is always reads as 0.
CLR_SWINT = 0 (write): no effect on the state of the local software
interrupt request variable
CLR_SWINT = 1 (write): clear the state of the local software
interrupt request variable to ‘0’.
CLR_SWINT is always read as 0.
WE_PRIORITY_LEVEL = 0 (write): no change of
PRIORITY_LEVEL variable state
WE_PRIORITY_LEVEL = 1 (write): PRIORITY_LEVEL variable
state may be changed
WE_PRIORITY_LEVEL is always read as 0.
This bit is self-clearing.
WE_TARGET = 0 (write): no change of TARGET variable state
WE_TARGET = 1 (write): TARGET variable state may be changed
WE_TARGET is always read as 0.
This bit is self-clearing.
WE_ENABLE = 0 (write):
no change of ENABLE variable state
WE_ENABLE = 1 (write): ENABLE variable state may be changed.
WE_ENABLE is always read as 0.
This bit is self-clearing.
This variable controls whether an interrupt request is enabled for
further processing by the interrupt controller. See also
WE_ENABLE.
ENABLE = 0: the interrupt request is discarded. It cannot cause a
processor or power management interrupt request.
ENABLE = 1: the interrupt request may cause a processor or power
management interrupt request when further conditions for this
become true.
This variable defines the interrupt target of an interrupt request.
Legal values are 0... 1; other values are reserved and lead to
undefined behavior. See also WE_TARGET.
TARGET = 0: the interrupt request will lead to a processor interrupt
request 0 (cpuint0).
TARGET = 1: the interrupt request will lead to a processor interrupt
request 1 (cpuint1).
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
Offset 0x03 F40CMessage Register_3
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
Offset 0x03 F410Message Register_4
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
Offset 0x03 F414Message Register_5
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
Offset 0x03 F418Message Register_6
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
Offset 0x03 F41CMessage Register_7
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
Offset 0x03 F420Message Register_8
This register signals an IPC message. This register is identical to Message Register_1 (Offset 0x03 F404).
…Continued
This variable determines the priority level of the interrupt request.
Legal values are 0... 7; other values are reserved and lead to
undefined behavior. See also WE_PRIORITY_LEVEL.
PRIORITY_LEVEL = 0: the interrupt request has priority level 0
(masked); it is ignored.
PRIORITY_LEVEL = 1: the interrupt request has priority level 1
(lowest).
...
PRIORITY_LEVEL = 7: the interrupt request has priority level 7
(highest).
High order bits not required for PRIORITY_LEVEL encoding are
read-only 0.
Table 5: PCI-XIO Registers (Rev 0.9.6)
BitSymbolAccess Val ueDescription
PCI Control Registers
This register must be initialized before any PCI cycles will be entertained. The boot loader is expected to load the values at
boot time. Write once by boot loader, otherwise read only. Because this register is “written once” the bit fields are designated
“R/W1.” An unlock is available to update this register if necessary. A write of “CA” to bits [7:0] of the unlock_setup register
will allow one additional write to the setup register before locking again
Offset 0x04 0010PCI Setup
31ReservedR0
30dis_reqgntR/W10Disable use of REQ/GNT when using internal arbiter. These pins
may be released for other uses when using an internal arbiter and
no external PCI masters are used in the system.
29dis_reqgnt_aR/W10Disable use of REQ_A/GNT_A when using internal arbiter. These
pins are not used when using an external harborer.
28dis_reqgnt_bR/W10Disable use of REQ_B/GNT_B when using internal arbiter. These
24en_taR/W10Terminate restricted access attempt with target abort (otherwise,
ignore writes, return 0 on read).
23en_pci2mmiR/W11Enable memory hwy interface.
22en_xioR/W11Enable XIO functionality.
21base18_prefetchableR/W10PCI base address 18 is a prefetchable memory aperture.
20:18base18_sizR/W1011The size of aperture located by PCI cfg base18 is:
011 = 16 MB
100 = 32 MB
101 = 64 MB
110 = 128 MB
This aperture is used as the XIO aperture in the PNX8550.
Note: If expanding to 128 MB, the default setting of base18 address
will overlap with the default base14 address. To avoid an address
conflict, the base18 address or the base14 address should be
relocated before setting the base18_siz.
17en_base18R/W11Enable 3rd aperture, PCI base address 18. The PNX8550 will
always use this aperture.
16base14_prefetchableR/W10PCI Base address 14 is a non-prefetchable memory aperture.
15ReservedR0
14:12base14_sizR/W1000The size of aperture located by PCI cfg base 14 is 000 = 2 MB.
This aperture is used as the MMIO aperture in the PNX8550.
11en_base14R/W11Enable 2nd aperture, PCI base address 14. The PNX8550 will
always use this aperture.
10base10_prefetchableR/W11PCI Base address 10 is a prefetchable memory aperture.
9:7base10_sizR/W1100The size of aperture located by PCI cfg base 10 is:
011 = 16 MB
100 = 32 MB
101 = 64 MB
110 = 128 MB
This aperture is used as the DRAM aperture in the PNX8550.
0en_retry_timerR/W1Enables timer for 16 tic rule enforcer. This bit does not affect access
Offset 0x04 0018PCI_Base1_lo
31:21pci_base1_loR/W0For internal address decoding: low bar of first aperture for external
20:0ReservedR0
Offset 0x04 001CPCI_Base1_hi
31:21pci_base1_hiR/W0For internal address decoding: high bar of first aperture for external
20:0ReservedR0
Offset 0x04 0020PCI_Base2_lo
31:21pci_base2_loR/W0For internal address decoding: low bar of second aperture for
20:0ReservedR0
…Continued
1 = Disable byte swapping in big endian mode from PCI to DCS.
to the XIO aperture.
PCI access. This register affects the decode and routing of the bus
controllers. It should not be relied on as stable for 10 clocks after
writing. It is recommended that the PCI_Base1_lo be initialized
before the PCI_Base1_hi to avoid a potentially large segment of
address space being temporarily allocated to PCI space.
PCI access (up to but not including). This register affects the
decode and routing of the bus controllers. It should not be relied on
as stable for 10 clocks after writing. It is recommended the
PCI_Base1_lo be initialized before the PCI_Base1_hi to avoid a
potentially large segment of address space being temporarily
allocated to PCI space.
external PCI access. This register affects the decode and routing of
the bus controllers. It should not be relied on as stable for 10 clocks
after writing. It is recommended the PCI_Base2_lo be initialized
before the PCI_Base2_hi to avoid a potentially large segment of
address space being temporarily allocated to PCI space. The
PCI_Base2 aperture may be declared as a internal view of PCI IO
space or as PCI memory space. See pci_io register for more
information.
31:0gppm_addrR/W0This register will be written with the address for the single data
Offset 0x04 0030General Purpose PCI Master (GPPM) Write Data
31:0gppm_wdataR/W0This register will be written with the data for the single data phase
Offset 0x04 0034General Purpose PCI Master (GPPM) Read Data
31:0gppm_rdataR0This register will hold data from the selected target after completion
Offset 0x04 0038General Purpose PCI Master (GPPM) Control
31:11ReservedR0
10gppm_doneR01 = cycle has completed. This bit can also be viewed in the
9init_pci_cycleR/W01 = initiate a PCI single data phase transaction on the PCI bus with
8ReservedR0
7:4gppm_cmdR/W0Command to be used with PCI cycle. Acceptable commands to use
3:0gppm_benR/W0Byte enables to be used with PCI cycle
Offset 0x04 003CUnlock Register
31:16ReservedR0
…Continued
external PCI access (up to but not including). This register affects
the decode and routing of the bus controllers. It should not be relied
on as stable for 10 clocks after writing. It is recommended the
PCI_Base2_lo be initialized before the PCI_Base2_hi to avoid a
potentially large segment of address space being temporarily
allocated to PCI space. The PCI_Base2 aperture may be declared
as a internal view of PCI IO space or as PCI memory space. See
pci_io register for more information.
piece of data exclusively for an external PCI master. The timer is
initiated when the PCI can not complete the requested read in 16
clock cycles and issues a retry.
phase cycle to be issued on the PCI bus. It will accept only 32-bit
writes. When issuing type 0 configuration transactions, the device
number (bits [15:11]) is expanded to bits [31:11] on the PCI bus as
defined in the PCI 2.2 spec.
cycle to be issued on the PCI bus. This register will accept any size
write.
of the read.
gppm_status register. Write to register 0x40FC8 to clear.
address “gppm_addr” and data “gppm_data.”
in the command field include IO read, IO write, memory Read,
memory Write, configuration read and interrupt acknowledge. If
configuration management is enabled, configuration write may be
used.
7:0cache line sizeR/W*0PCI configuration cache line size.
Offset 0x04 0050Base Address 10 Image
31:21Base Address 10R/W*0PCI configuration Base address for DRAM.
20:4ReservedR0
3PrefetchableRcfg**Value is determined at boot time by pci_setup register.
2:0TypeR0Indicates type 0 memory space (locatable anywhere in 32-bit
Offset 0x04 0054Base Address 14 Image
31:4Base Address 14R/W*1BE0000 PCI configuration Base address for MMIO.
…Continued
“subsystem_vendor” registers. A writer to the subsystem_id/
subsystemvendor” register will lock the register again.
“max_latency”, “min_gnt” and “pci_setup” registers. A write to the
“pci_setup” register to lock registers again.
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
Refer to configuration register 4 for details on which bits are
implemented and controllable.
*Write-once/Read-only
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
This register affects the decode and routing of the bus controllers. It
should not be relied on as stable for 10 clocks after writing.
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
address space).
This register affects the decode and routing of the bus controllers. It
should not be relied on as stable for 10 clocks after writing.
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
3PrefetchableRcfg**Value is determined at boot time by pci_setup register.
2:0TypeR0Indicates type 0 memory space (locatable anywhere in 32-bit
address space).
Offset 0x04 0058Base Address 18 Image
31:4Base Address 18R/W*1C00000 PCI configuration Base address for XIO.
This register affects the decode and routing of the bus controllers. It
should not be relied on as stable for 10 clocks after writing.
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
3PrefetchableRcfg**Value is determined at boot time by pci_setup register.
2:0TypeR0Indicates PCI “type 0” memory space (locatable anywhere in 32-bit
address space).
Offset 0x04 006CSubsystem ID/Subsystem Vendor ID Write Port
This register must be initialized before any PCI cycles will be entertained. The boot loader is expected to load the values at
boot time. This register is a Write-once/Read-only register (R/W1).
31:16subsystem IDR/W10This is the write port for the Subsystem ID (PCI config 2C).
15:0subsystem vendor IDR/W10This is the write port for the Subsystem Vendor ID (PCI config 2C).
Offset 0x04 0074Image of Configuration Reg 34
31:8ReservedR0
7:0CAP_PTRR40Capabilities Pointer
Offset 0x04 007CImage of Configuration Reg 3C
31:24max_latR/W10x18Max Latency
23:16min_gntR/W10x09Minimum Grant
15:8interrupt pinR0x01Interrupt pin information
7:0Interrupt LineR/W*0x00This register conveys interrupt line routing information.
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
Offset 0x04 0080Image of Configuration Reg 40
31:27ReservedR00000
26d2_supportRcfg*1 = Device supports D2 power management state.
*Value is determined by pci_setup register.
25d1_supportRcfg*1 = Device supports D1 power management state.
*Value is determined by pci_setup register.
24:19ReservedR0
18:16versionR010Indicates compliance with version 1.1 of PM.
15:8Next Item PointerR00There are no other extended capabilities.
7:0Cap_IDR01Indicates this is power management data structure.
Offset 0x04 0084Image of Configuration Reg 44
31:1ReservedR0
1:0pwr_stateR/W*0Power State
*This register is read/write if configuration management is enabled
(pci_setup[1]). If not enabled, it is read only.
15:8dma_thresholdR/W0x1BThreshold for when DMA DTL requests more read data when initial
7:3ReservedR0
2:0dma_fetchR/W010Encoded DMA DTL read block size
…Continued
for PCI IO transactions.
transactions. The address will be unchanged or modified with an
alternate upper addresses selected above.
0: PCI_Base2 will forward PCI2 DTL transactions to PCI bus as
memory transactions with unchanged address.
request) for when PCI slave DTL requests more read data when
responding to memory read command. This must be set to a value
less than the smallest of slv_memrd_fetch, Cache Line Size or
read_block_siz.
31:0dma_eaddrR/W1C00_0000This is the external starting address for the DMA engine. It is used
for DMA transfers over PCI and XIO. Bit 0 and 1 are not used
because all DMA transfers are word aligned.
Offset 0x04 0804DMA Internal Address
This register will accept only word writes.
31:0dma_iaddrR/W0010_0000This is the internal read source/ write destination address in
SDRAM.
Offset 0x04 0808DMA Transfer Size
This register will accept any size writes.
31:16ReservedR/W0
15:0dma_lengthR/W800This is the length of the DMA transfer (number of 4-byte words).
Offset 0x04 080CDMA Controls
This register will accept any size writes.
31:11ReservedR0
10single_data_phaseR/W01 = Limit DMA to single data phase transactions.
This overrides “max_burst_size.”
0 = Use max_burst_size to determine burst size.
9snd2xioR/W00 = DMA will target PCI.
1 = DMA will target XIO.
8fix_addrR/W00 = DMA will use linear address.
1 = DMA will use a fixed address.
7:5max_burst_sizeR/W0PCI transaction will be split into multiple transactions. Max size:
000 = 8 data phase
001 = 16 data phase
010 = 32 data phase
011 = 64 data phase
100 = 128 data phase
101 = 256 data phase
110 = 512 data phase
111 = No restriction in transfer length
4init_dmaR/W0Initiate DMA transaction. This bit is cleared by the DMA engine
when it begins its operation.
3:0cmd_typeR/W0Command to be used for DMA. This field is restricted to memory
type or IO type commands as defined in the PCI 2.2 spec. A
command filter checks compliance with alignment and length when
using memory write and invalidate and memory read multiple. Any
non-compliant request will result in a memory read line or memory
write command being substituted for the requested operation. This
filter ensures proper command usage when restarting after being
retried by an external target.
NOR: WN time low
NAND: WEN profile, [15:14] low time; [17:16] high time
IDE: DIOR and DIOW low time
13:9sel2_waitR/W068360: DS time low if using fixed timing.
NOR: OEN time low if not using ACK.
NAND: Delay between address and data phase if not using ACK,
delay until monitoring ACK.
IDE: Not used.
8:5sel2_offsetR/W0Address offset form start address of XIO aperture, in 8M
increments. This field must be naturally aligned with the size of the
profile.
4:3sel2_typeR/WSel2 is configured as:
00 = 68360 type device
01 = NOR Flash
10 = NAND-Flash
11 = IDE
2:1sel2_sizR/W0Amount of address space allocated to Sel2:
00 = 8M
01 = 16M
10 = 32M
11 = 64 M
0en_sel2R/W0Enable sel2 profile.
Offset 0x04 0820GPXIO_address
31:0gpxio_addrR/W0General Purpose XIO cycle address. This register sets the address
for an indirect read or write to/from XIO address space. Only 4 byte
writes are allowed in this register. The values programmed for bits 0
and 1 are not used by the XIO module. Refer to gpxio_ben.
Offset 0x04 0824GPXIO_write_data
31:0gpxio_wdataR/W0General Purpose XIO cycle data. This register is programmed with
data for a write cycle.
Offset 0x04 0828GPXIO_read_data
31:0gpxio_rdataR0General Purpose XIO cycle data. This register contains the data of a
read cycle after completion.
Offset 0x04 082CGPXIO_ctrl
This register controls the type of access to XIO and provides status.
31:10ReservedR0
9gpxio_cyc_pendingR01 = GPXIO transaction on XIO is pending.
0 = GPXIO has completed or not yet started.
8gpxio_doneR0General Purpose XIO cycle complete. This bit is cleared by writing 1
to bit 6 or 7. It will also be cleared by writing to the GPXIO interrupt
clear register.
7clr_gpxio_doneW01 = Clear “gpxio_done.”
6gpxio_initR/W01 = Initiate a transaction on XIO. The type of transaction will match
the profile of the selected aperture. This bit gets cleared if the cycle
has been initiated. This bit clears bit 8 if set.
When set, this bit clears the OCH, DONE, DMA_ABORT,
DMA_ERR and BGT bits in the MSR. It is automatically reset by
hardware. Note that the BGT bit in the MSR register does not
generate interrupts.
0RUSW0Reset UART Status register (RUS).
When set, this bit clears all bits in the USR. It is automatically reset
by hardware.
31:16DMA_WR_INT_THRESR/Wh0000During a DMA transfer in reception mode:
15:10Reserved
9DSDTR/W0Do not Stop DMA transfer:
8DMA_SWITCH_RECEP R/W0When set, the Smartcard interface will automatically switch to
7RSTINR/W0Card reset signal from the controller. The output pin RSTIN is a
6DISTBE/RBFR/W0If the bit DISTBE/RBF (disable TBE/RBF interrupt) is set, character
5STARTR/W0If the controller sets START to 1, the card is activated (see
4DMAER/W0If bit DMAE (DMA enable) is set (=1), DMA mode is enabled. When
3SANR/W0Synchronous/Asynchronous is set by software if a synchronous
2AUTOCONVR/W0If the bit AUTOCONV
…Continued
• if the number of received characters is equal to
DMA_WR_INT_THRES, the DMA_WR_LEVEL_INT bit in the
Mixed Status Register (MSR) will be set.
• If DMA_WR_INT_THRES is set to h’0000,
DMA_WR_LEVEL_INT will not be set in the MSR and no
interrupt will be generated. The DMA_WR_LEVEL_INT value
can be changed during the DMA transfer.
• If DMA_WR_INT_THRES is higher or equal to the DMA Length
Write (DLW) parameter, DMA_WR_LEVEL_INT in the (MSR) will
not be set.
When this bit is set to ‘1’, in DMA reception mode, protocol T = 0. If
a parity error is detected, the DMA transfer will be stopped.
Note: In DMA transmission mode, protocol T = 0. If a parity error is
detected, the DMA transfer is stopped regardless of the value of
DSDT.
reception mode at the end of a successful DMA transfer
(transmission mode).
copy of this bit.
reception or transmission will not generate an interrupt.
description of activation sequence in the TDA 8004 product
specification document).
If the controller resets START to 0, the card is deactivated (see
description of deactivation sequence in the TDA 8004 product
specification document). The output CMDVCC = NOT (START)
reset, interrupt mode is active.’
The bit DMAE is automatically reset (= 0) by hardware in the
following conditions:
• DMA transfer successfully finished (bit DONE set in MSR).
• A parity error occurred during the DMA mode in T= 0 protocol (bit
PE is set in USR).
• A change occurred on input pad OFF (bit OCH is set in MSR).
card is expected. The UART is bypassed and only the bit 0 in URR
and UTR is connected to I/O. In this case, CLK_CARD output is
controlled by the bit SC in the CCR register.
is set, software sets the CONV bit in the
UCR1 register. If it is reset, the convention is automatically detected
on the first received character while the Start Session (SS) bit is set.
This register is used for setting parameters of the UART.
31:16DMA_RD_INT_THRESR/Wh0000During a DMA transfer in transmission mode:
15:8Reserved
7RIUR/W0The Reset ISO UART (RIU
6FIPR/W0If Force Inverse Parity (FIP) is set to high, then the UART will NACK
5FCR/W0Flow Control (FC) is set if the flow control is used (not described in
4PROTR/W0Protocol (PROT) determines the protocol type when in
…Continued
described below.
prescaler value is 31. One ETU will last the number of card clock
cycles equal to PRESCALER x PDR.
start when the UART is in transmission mode. This register must be
programmed before setting the DMAE bit in the UCR2. The DMA
transfer must start at a double word-aligned boundary.
during ATR. In transmission mode, the UART will wait this number
of ETUs before transmitting the character stored in the UTR.
In T=1 protocol, GTR=FF means operation at 11 ETUs.
In protocol T=0, GTR=FF means operation at 12 ETUs.
• If the number of characters sent is equal to
DMA_RD_INT_THRES, the DMA_RD_LEVEL_INT bit in the
Mixed Status Register (MSR) will be set.
• If DMA_RD_INT_THRES is set to h’0000, the
DMA_RD_LEVEL_INT bit will not be set in the MSR and no
interrupt will be generated. The DMA_RD_LEVEL_INT bit value
can be changed during the DMA transfer.
• If DMA_RD_INT_THRES is higher or equal to the DMA Length
Read (DLR) parameter, the DMA_RD_LEVEL_INT bit in the
MSR will not be set.
) bit must be set to 1 before any action
on the UART. When reset =0, this bit resets all UART registers to
their initial values except the following registers: MSR, CRE,
SCIF_INT_STATUS, SCIF_INT_CLEAR, SCIF_INT_SET,
SCIF_INT_ENABLE, SCIF_POWERDOWN and
SCIF_MODULE_ID.
a correct received character and will transmit characters with the
wrong parity bit.
this specification).
asynchronous transmission.
If PROT = 1 protocol is T = 1.
If PROT = 0 protocol is T = 0.
3T/RR/W0Transmit/Receive (T/R) is set by software for transmission mode. A
change from 0 to 1 will set the TBE bit in the USR. The T/R bit is
automatically reset by hardware if Last Character to Transmit (LCT)
has been used after transmitting the last character.
Note: Software must wait at least 12 ETUs after the last start bit
before changing from reception mode (T/R = 0) to transmission
mode
(T/R = 1).
2LCTR/W0Last Character to Transmit (LCT) is set by software after writing in
the UART Transmit Register (UTR). It allows an automatic change
over to the reception mode, and is reset by hardware at the end of a
successful transmission. The TBE/RBF bit in the UART Status
register and MSR will not be set when changing from transmission
to reception.
1SSR/W0Start Session (SS) is set before ATR for automatic convention
detection and early answer detection. This bit must be reset by
software after reception of a correct initial character.
0CONVR/W0Convention (CONV) is set to High if the convention is direct, to Low
in case of inverse convention. The CONV bit is either automatically
written by hardware according to the convention detected during
ATR, or by software if the bit AUTOCONV
Offset 0x04 301CDMA Length Register (DLR)
31:16DLW15 - DLW0R/W0Determines the number of characters (bytes) to be transferred in
memory (65535 bytes max) when in reception mode. This register
must be programmed before setting the DMAE bit in the UCR2.
15:12ReservedR/W0Must be written with ‘0’.
11:0DLR11 - DLR0R/W0Determines the number of characters (bytes) to send (4095 bytes
max) to the smartcard when in transmission mode. This register
must be programmed before setting the DMAE bit in the UCR2.
Counter3 stops counting, no matter what the previous mode was.
When MODE31, MODE30 = 01: AUTORELOAD
Counter3 starts counting the value stored in the associated register
on the first start bit after this mode has been programmed, and
automatically restarts counting this value when it has reached the
terminal count. An interrupt is generated at every terminal count.
When MODE31, MODE30 = 10: SOFTWARE TRIGGERED
The counter starts counting the value stored in the associated
registers when this configuration has been written, and stops and
generates an interrupt when it has reached its terminal count. At the
end of count, the couple (MODE31, MODE30) is reset to (0,0) by
hardware.
When MODE31, MODE30 = 11: TRIGGERED WHEN START BIT
IS ON I/O
In this mode, the counter will automatically start counting the value
stored in the associated registers when a start bit occurs on I/0
(reception or transmission). An interrupt is only generated if the
counter reaches the terminal count, then the Counter3 is stopped.
At the end of the count, the couple (MODE31, MODE30) is reset to
(0,0) by hardware.
Counter3 stops counting, no matter what the previous mode was.
When MODE21, MODE20 = 01: AUTORELOAD
Counter3 starts counting the value stored in the associated register
on the first start bit after this mode has been programmed, and
automatically restarts counting this value when it has reached the
terminal count. An interrupt is generated at every terminal count.
When MODE21, MODE20 = 10: SOFTWARE TRIGGERED
The counter starts counting the value stored in the associated
registers when this configuration has been written, and stops and
generates an interrupt when it has reached its terminal count. At the
end of count, the couple (MODE21, MODE20) is reset to (0,0) by
hardware.
When MODE21, MODE20 = 11: TRIGGERED WHEN START BIT
IS ON I/O
In this mode, the counter will automatically start counting the value
stored in the associated registers when a start bit occurs on I/0
(reception or transmission). An interrupt is only generated if the
counter reaches the terminal count, then the Counter3 is stopped.
At the end of the count, the couple (MODE21, MODE20) is reset to
(0,0) by hardware.
1:08/16, 16/24R/W0When (8/16,16/24)=00 then TOR3, TOR2 and TOR1 are linked as a
Offset 0x04 3024Timeout Register 1 (TOR1)
31:8Reserved
7:0TOL7: TOL0W0An 8-bit ETU counter that can be linked to TOR2 and TOR3
Offset 0x04 3028Timeout Register 2 (TOR2)
31:8Reserved
7:0TOL15:TOL8W0An 8-bit ETU counter that can be linked to:
Offset 0x04 302CTimeout Register 3 (TOR3)
31:8Reserved
7:0TOL23:TOL16W0An 8-bit ETU counter that can be linked to:
Offset 0x04 3030Mixed Status Register (MSR)
31:11Reserved
…Continued
Counter3 stops counting, no matter what the previous mode was.
When MODE11, MODE10 = 01: AUTORELOAD
Counter3 starts counting the value stored in the associated register
on the first start bit after this mode has been programmed, and
automatically restarts counting this value when it has reached the
terminal count. An interrupt is generated at every terminal count.
When MODE11, MODE10 = 10: SOFTWARE TRIGGERED
The counter starts counting the value stored in the associated
registers when this configuration has been written, and stops and
generates an interrupt when it has reached its terminal count. At the
end of count, the couple (MODE11, MODE10) is reset to (0,0) by
hardware.
When MODE11, MODE10 = 11: TRIGGERED WHEN START BIT IS
ON I/O
In this mode, the counter will automatically start counting the value
stored in the associated registers when a start bit occurs on I/0
(reception or transmission). An interrupt is only generated if the
counter reaches the terminal count, then the Counter3 is stopped.
At the end of the count, the couple (MODE11, MODE10) is reset to
(0,0) by hardware.
24-bit ETU counter.
When (8/16,16/24)=01 then TOR3 and TOR2 are linked as a 16-bit
ETU counter, and TOR1 is an independent 8-bit ETU counter.
When (8/16,16/24)=1X, TOR3, TOR2 and TOR1 are 3 independent
8-bit ETU counters.
registers to form a 24-bit ETU counter. (See the 0x04 3020 Timeout
Configuration Register (TOC) description.)
• TOR1 and TOR3 registers to form a 24-bit ETU counter
• TOR3 only to form a 16-bit ETU counter. (See the 0x04 3020
10FIFO_LEVEL_INTR0FIFO_LEVEL_INT is set to ‘1’ when the number of characters
present in the FIFO reaches the FIFO_THRES parameter in the
FIFO Configuration Register (FCR).
The bit is reset when the RMS or RS_FIFO_LEVEL_INT bit is set in
the Reset register.
9DMA_WR_LEVEL_INTR0DMA_WR_LEVEL_INT is set to ‘1’ when during a DMA transfer,
reception mode, the number of received characters reaches the
DMA_WR_INT_THRES parameter in UART Configuration Register
2 (UCR2).
The bit is reset when RMS or RS_DMA_WR_LEVEL_INT bit is set
in the Reset register.
8DMA_RD_LEVEL_INTR0DMA_RD_LEVEL_INT is set to ‘1’ when during a DMA transfer, in
transmission mode, the number of transmitted characters reaches
the DMA_RD_INT_THRES parameter in the UART Configuration
Register 1 (UCR1).
The bit is reset when RMS or RS_DMA_RD_LEVEL_INT bit is set in
the Reset register.
7DONER0DONE is set when DMA transfer ends successfully. When this bit is
set, INT goes high. The bit is reset when RMS or RS_DONE bit is
set in the Reset register.
6FER1FIFO Empty (FE) is set when the reception FIFO is empty. It is reset
when at least one character has been loaded in the FIFO.
5BGTR0BGT is linked with a counter with a value of 22 ETUs that is
triggered at every start bit on I/O. If the count is finished before the
next start bit, the BGT bit is set. This helps to verify that the card
does not answer until 22 ETUs after the last transmitted character,
or does not transmit a character until 22 ETUs after the last received
character. This bit is reset by setting the RMS bit in the Reset
register. It should be reset by the software when initiating a
transaction (before the ATR phase).
4BOFR0The BOF bit is a copy of the pin OFF.
3OCHR0The OCH bit is set when a change occurs on pin OFF. When this bit
is set, INT goes high. The bit is reset when RMS or RS_OCH bit is
set in the Reset register.
2DMA_ERRR0This bit is always reads a zero.
1DMA_ABORTR0DMA_ABORT is set when an anomaly occurs during a DMA
transfer. These anomalies include DMA_ERROR, OCH, and when
the Parity Error counter reaches its terminal count (except if the
DSDT bit is set in reception mode in the UCR2). When
DMA_ABORT is set, the DMAE bit in the UCR2 is reset (DMA
transfer stopped). Bit is reset when the RMS or RS_DMAABORT bit
is set in the Reset register.
0TBE/RBFR0Transmit Buffer Empty/ Receive Buffer Full (TBE/RBF) is set when:
• Changing from reception mode to transmission mode
• A character has been transmitted by the UART.
• The reception FIFO is full.
TBE/RBF is reset when a character has been written in UTR, or
when the RUR bit in the Command Register (CRE) is set High, or
when changing from transmission mode to reception mode.
11:8FIFO_THRESW0000Set the trigger level for FIFO level interrupt (FIFO_LEVEL_INT).
7Reserved
6:4PEC2:PEC0W000PEC2, PEC1 and PEC0 determine the number of accepted parity
3:0FL3:FL0W0000FL3, FL2, FL1 and FL0 determine the depth of the FIFO.
In protocol T=0, if a correct character is received before the programmed error number is reached, then the error counter is
reset. If the programmed number of allowed parity errors is reached, then the PE bit within the UART Status register is set
as long as the RUS bit in the Reset register has not been set.
In protocol T= 1, the error counter has no action. (PE is set at the first wrong received character).
When DMA is enabled, (DMAE bit is set in UCR2), the bits FL3:FL0 must be reset.
Offset 0x04 3034UART Transmit Register (UTR)
31:8Reserved
7:0UT7:UT0W0When the controller wants to transmit a character to the card, it
Offset 0x04 3034UART Receive Register (URR)
31:8Reserved
…Continued
0000 means that the trigger level is not active.
(FIFO_LEVEL_INT will not be set in the Mixed Status register.
0001 means that the trigger level is 1.
....
1111 means the trigger level is 15 (decimal).
Note: If the FIFO_THRES is higher or equal to the FIFO depth, the
FIFO_LEVEL_INT bit will not be set in the Mixed Status register.
errors before setting the Parity Error (PE) bit (within UART Status
Register and setting INT high in protocol T=0).
000 means that only 1 parity error will be accepted.
111 means 8 will be accepted.
0000 means the FIFO depth is 1.
....
1111 means the FIFO depth is 16.
writes the data in this register. The data transmission proceeds as
follows:
• Starts at the end of this writing if the previous character has been
transmitted and if the extra guard time has expired.
• Starts at the end of the extra guard time if this one has not
expired.
• Does not start if the transmission of the previous character is not
completed.
In synchronous mode the data UT0 is written on the IO line of the
card when UTR has been written and remains unchanged.
7:0UR7:UR0R0When the controller wants to read a data from the card, it reads it
Offset 0x04 3038UART Status Register (USR)
This register is used by the controller to monitor the activity of the ISO UART and the timeout counters.
31:8Reserved
7:5TO3:TO1R0TO1 is set when counter1 has reached its terminal count.
4EAR0Early Answer (EA) is high if the first start bit on I/O during ATR has
3PER0Parity Error (See PEC2:PEC0 bit field in 0x04 3030 FIFO Control
2OVRR0Overrun (OVR) is high if the UART has received a new character
1FERR0Framing Error (FER) is high when I/O was not in a high impedance
0TBE/RBFR0Transmission Buffer Empty (TBE) is high when the UART is in
In T= 0 protocol, Parity Error (PE) is high if the UART has detected a number of received characters with parity error equal
to the number written in PEC2, PEC1 and PEC0, or if a transmitted character has not been acknowledged by the card.
In T = 0 protocol, a character received with a parity error is not stored in the FIFO.
In T = 1 protocol, a character with parity error is stored in the FIFO and the parity error counter is not operating.
If any of the status bits FER, OVR, PE, EA, TO1, TO2 and TO3 is set, then INT is high. The bit causing the interrupt is reset
when the RUS bit is set in the Reset register. If TBE/RBF is set, and if the mask bit DISTBE/RBF within the UCR2 is not set,
then INT is also high. TBE/RBF is reset when data has been written in the UART Transmit register, or when the RUR bit is
set in the Command register, or when changing from transmission mode to reception mode.
…Continued
from this register in direct convention. When needed, this register
may be tied to the FIFO whose length n is programmable between 1
and 8 (see FL2:FL0 bit in the FIFO Control register).
Reading this register does not affect the state of the UART, which
means the TBE/RBF bit present in the USR and MSR registers is
not affected and the FIFO pointers are not updated. To update the
state of the UART, the controller must set the RUR bit in the
Command register. In synchronous mode, the UR0 bit is directly
linked to the IO line of the card.
TO2 is set when counter2 has reached its terminal count.
TO3 is set when counter3 has reached its terminal count.
been detected between 200 and 384 CLK card pulses. (All activities
on I/O line during the first 200 CLK card pulses with RST low or high
are not taken into account.)
Register (FCR).)
while the URR was full. In this case, at least one character has been
lost.
state at 10.25 ETUs after a start bit.
transmission mode and when the controller may write the next
character to transmit in the UTR. It is reset when the controller has
written data in the transmit register, or when the T/R bit within the
UCR1 has been reset either automatically or by software.
Reception Buffer Full (RBF) is high when the FIFO is full. The
controller may set the RUR bit in the Command register, which
clears the RBF bit after it has read the URR register. TBE and RBF
share the same bit within the USR. (In transmission mode, the
relevant one is TBE; in reception mode, the relevant one is RBF.)
start (32-bit register) when the UART is in reception mode. This
register must be programmed before setting the DMAE bit in the
UCR2. The DMA transfer must start at a double word-aligned
boundary.
reception mode, the dma_flush signal is asserted automatically if no
character has been received 100us after the last received character.
hardware.
this bit in order to update:
• the FIFO pointers
• the TBE/RBF bit in the USR and MSR registers (when in
reception mode).
See bit descriptions in 0x04 3030 Mixed Status Register (MSR).
7SFDR/W0When set to ‘1’, 1 ETU = 624 clock card cycles.
6RPBR/W0Remove Parity Bit. When this bit is set to ‘1’:
5SHLR/W0When the CST bit (see below) is set to 1, the clock card signal
4CSTR/W1In case of an asynchronous card, the Clock Stop (CST) bit defines
3SCR/W0In case of a synchronous card (SAN bit in UCR2 is set to 1), the
…Continued
automatically reset by hardware.
automatically reset by hardware.
reset by hardware.
reset by hardware.
automatically reset by hardware.
reset by hardware.
automatically reset by hardware.
When set, this bit clears the OCH, DONE, DMA_ABORT,
DMA_ERR and BGT bits in the MSR. It is automatically reset by
hardware. Note that the BGT bit in the MSR register does not
generate interrupts.
When set, this bit clears all bits in the USR. It is automatically reset
by hardware.
• In transmission mode: the parity bit is removed (allowing a 10
ETU data frame).
• In reception mode: there is no parity error check.
(output CLOCK_CARD) is stopped low if SHL=0, and stopped high
if SHL=1.
whether the clock card (output pin CLK_CARD) is stopped or not.
31:16DMA_WR_INT_THRES R/Wh0000During a DMA transfer in reception mode:
• if the number of received characters is equal to
DMA_WR_INT_THRES, the DMA_WR_LEVEL_INT bit in the
Mixed Status Register (MSR) will be set.
• If DMA_WR_INT_THRES is set to h’0000,
DMA_WR_LEVEL_INT will not be set in the MSR and no
interrupt will be generated. The DMA_WR_LEVEL_INT value
can be changed during the DMA transfer.
• If DMA_WR_INT_THRES is higher or equal to the DMA Length
Write (DLW) parameter, DMA_WR_LEVEL_INT in the (MSR) will
not be set.
15:10Reserved
9DSDTR/W0Do not Stop DMA transfer:
When this bit is set to ‘1’, in DMA reception mode, protocol T = 0. If
a parity error is detected, the DMA transfer will be stopped.
Note: In DMA transmission mode, protocol T = 0. If a parity error is
detected, the DMA transfer is stopped regardless of the value of
DSDT.
8DMA_SWITCH_RECEP R/W0When set, the Smartcard interface will automatically switch to
reception mode at the end of a successful DMA transfer
(transmission mode).
7RSTINR/W0Card reset signal from the controller. The output pin RSTIN is a
copy of this bit.
6DISTBE/RBFR/W0If the bit DISTBE/RBF (disable TBE/RBF interrupt) is set, character
reception or transmission will not generate an interrupt.
5STARTR/W0If the controller sets START to 1, the card is activated (see
description of activation sequence in the TDA 8004 product
specification document).
If the controller resets START to 0, the card is deactivated (see
description of deactivation sequence in the TDA 8004 product
specification document). The output CMDVCC = NOT (START)
4DMAER/W0If bit DMAE (DMA enable) is set (=1), DMA mode is enabled. When
reset, interrupt mode is active.’
The bit DMAE is automatically reset (= 0) by hardware in the
following conditions:
• DMA transfer successfully finished (bit DONE set in MSR).
• A parity error occurred during the DMA mode in T= 0 protocol (bit
PE is set in USR).
• A change occurred on input pad OFF (bit OCH is set in MSR).
3SANR/W0Synchronous/Asynchronous is set by software if a synchronous
card is expected. The UART is bypassed and only the bit 0 in URR
and UTR is connected to I/O. In this case, CLK_CARD output is
controlled by the bit SC in the CCR register.
2AUTOCONVR/W0If the bit AUTOCONV
UCR1 register. If it is reset, the convention is automatically detected
on the first received character while the Start Session (SS) bit is set.
1CKUR/W0When the bit CKU is set, one ETU will last one half of the formula
described below.
0PSCR/W0If PSC is set high, the prescaler value is 32. If PSC is set low, the
prescaler value is 31. One ETU will last the number of card clock
cycles equal to PRESCALER x PDR.
Offset 0x04 4010DMA Read Address Register (DRA)
31:0DRA31 - DRA0R/W0Points to the memory address where the transfer is supposed to
start when the UART is in transmission mode. This register must be
programmed before setting the DMAE bit in the UCR2. The DMA
transfer must start at a double word-aligned boundary.
Offset 0x04 4014Guard Time Register (GTR)
31:8Reserved
7:0GT7:GT0R/W0Used to store the number of guard ETUs returned by the card
during ATR. In transmission mode, the UART will wait this number
of ETUs before transmitting the character stored in the UTR.
In T=1 protocol, GTR=FF means operation at 11 ETUs.
In protocol T=0, GTR=FF means operation at 12 ETUs.
This register is used for setting parameters of the UART.
31:16DMA_RD_INT_THRESR/Wh0000During a DMA transfer in transmission mode:
• If the number of characters sent is equal to
DMA_RD_INT_THRES, the DMA_RD_LEVEL_INT bit in the
Mixed Status Register (MSR) will be set.
• If DMA_RD_INT_THRES is set to h’0000, the
DMA_RD_LEVEL_INT bit will not be set in the MSR and no
interrupt will be generated. The DMA_RD_LEVEL_INT bit value
can be changed during the DMA transfer.
• If DMA_RD_INT_THRES is higher or equal to the DMA Length
Read (DLR) parameter, the DMA_RD_LEVEL_INT bit in the
MSR will not be set.
on the UART. When reset =0, this bit resets all UART registers to
their initial values except the following registers: MSR, CRE,
SCIF_INT_STATUS, SCIF_INT_CLEAR, SCIF_INT_SET,
SCIF_INT_ENABLE, SCIF_POWERDOWN and
SCIF_MODULE_ID.
a correct received character and will transmit characters with the
wrong parity bit.
this specification).
asynchronous transmission.
If PROT = 1 protocol is T = 1.
If PROT = 0 protocol is T = 0.
change from 0 to 1 will set the TBE bit in the USR. The T/R bit is
automatically reset by hardware if Last Character to Transmit (LCT)
has been used after transmitting the last character.
Note: Software must wait at least 12 ETUs after the last start bit
before changing from reception mode (T/R = 0) to transmission
mode
(T/R = 1).
the UART Transmit Register (UTR). It allows an automatic change
over to the reception mode, and is reset by hardware at the end of a
successful transmission. The TBE/RBF bit in the UART Status
register and MSR will not be set when changing from transmission
to reception.
detection and early answer detection. This bit must be reset by
software after reception of a correct initial character.
in case of inverse convention. The CONV bit is either automatically
written by hardware according to the convention detected during
ATR, or by software if the bit AUTOCONV
memory (65535 bytes max) when in reception mode. This register
must be programmed before setting the DMAE bit in the UCR2.
max) to the smartcard when in transmission mode. This register
must be programmed before setting the DMAE bit in the UCR2.
Counter3 stops counting, no matter what the previous mode was.
When MODE31, MODE30 = 01: AUTORELOAD
Counter3 starts counting the value stored in the associated register
on the first start bit after this mode has been programmed, and
automatically restarts counting this value when it has reached the
terminal count. An interrupt is generated at every terminal count.
When MODE31, MODE30 = 10: SOFTWARE TRIGGERED
The counter starts counting the value stored in the associated
registers when this configuration has been written, and stops and
generates an interrupt when it has reached its terminal count. At the
end of count, the couple (MODE31, MODE30) is reset to (0,0) by
hardware.
When MODE31, MODE30 = 11: TRIGGERED WHEN START BIT
IS ON I/O
In this mode, the counter will automatically start counting the value
stored in the associated registers when a start bit occurs on I/0
(reception or transmission). An interrupt is only generated if the
counter reaches the terminal count, then the Counter3 is stopped.
At the end of the count, the couple (MODE31, MODE30) is reset to
(0,0) by hardware.
Counter3 stops counting, no matter what the previous mode was.
When MODE21, MODE20 = 01: AUTORELOAD
Counter3 starts counting the value stored in the associated register
on the first start bit after this mode has been programmed, and
automatically restarts counting this value when it has reached the
terminal count. An interrupt is generated at every terminal count.
When MODE21, MODE20 = 10: SOFTWARE TRIGGERED
The counter starts counting the value stored in the associated
registers when this configuration has been written, and stops and
generates an interrupt when it has reached its terminal count. At the
end of count, the couple (MODE21, MODE20) is reset to (0,0) by
hardware.
When MODE21, MODE20 = 11: TRIGGERED WHEN START BIT
IS ON I/O
In this mode, the counter will automatically start counting the value
stored in the associated registers when a start bit occurs on I/0
(reception or transmission). An interrupt is only generated if the
counter reaches the terminal count, then the Counter3 is stopped.
At the end of the count, the couple (MODE21, MODE20) is reset to
(0,0) by hardware.
1:08/16, 16/24R/W0When (8/16,16/24)=00 then TOR3, TOR2 and TOR1 are linked as a
Offset 0x04 4024Timeout Register 1 (TOR1)
31:8Reserved
7:0TOL7: TOL0W0An 8-bit ETU counter that can be linked to TOR2 and TOR3
Offset 0x04 4028Timeout Register 2 (TOR2)
31:8Reserved
7:0TOL15:TOL8W0An 8-bit ETU counter that can be linked to:
Offset 0x04 402CTimeout Register 3 (TOR3)
31:8Reserved
7:0TOL23:TOL16W0An 8-bit ETU counter that can be linked to:
Offset 0x04 4030Mixed Status Register (MSR)
31:11Reserved0
…Continued
Counter3 stops counting, no matter what the previous mode was.
When MODE11, MODE10 = 01: AUTORELOAD
Counter3 starts counting the value stored in the associated register
on the first start bit after this mode has been programmed, and
automatically restarts counting this value when it has reached the
terminal count. An interrupt is generated at every terminal count.
When MODE11, MODE10 = 10: SOFTWARE TRIGGERED
The counter starts counting the value stored in the associated
registers when this configuration has been written, and stops and
generates an interrupt when it has reached its terminal count. At the
end of count, the couple (MODE11, MODE10) is reset to (0,0) by
hardware.
When MODE11, MODE10 = 11: TRIGGERED WHEN START BIT IS
ON I/O
In this mode, the counter will automatically start counting the value
stored in the associated registers when a start bit occurs on I/0
(reception or transmission). An interrupt is only generated if the
counter reaches the terminal count, then the Counter3 is stopped.
At the end of the count, the couple (MODE11, MODE10) is reset to
(0,0) by hardware.
24-bit ETU counter.
When (8/16,16/24)=01 then TOR3 and TOR2 are linked as a 16-bit
ETU counter, and TOR1 is an independent 8-bit ETU counter.
When (8/16,16/24)=1X, TOR3, TOR2 and TOR1 are 3 independent
8-bit ETU counters.
registers to form a 24-bit ETU counter. (See the 0x04 3020 Timeout
Configuration Register (TOC) description.)
• TOR1 and TOR3 registers to form a 24-bit ETU counter
• TOR3 only to form a 16-bit ETU counter. (See the 0x04 3020
10FIFO_LEVEL_INTR0FIFO_LEVEL_INT is set to ‘1’ when the number of characters
present in the FIFO reaches the FIFO_THRES parameter in the
FIFO Configuration Register (FCR).
The bit is reset when the RMS or RS_FIFO_LEVEL_INT bit is set in
the Reset register.
9DMA_WR_LEVEL_INTR0DMA_WR_LEVEL_INT is set to ‘1’ when during a DMA transfer,
reception mode, the number of received characters reaches the
DMA_WR_INT_THRES parameter in UART Configuration Register
2 (UCR2).
The bit is reset when RMS or RS_DMA_WR_LEVEL_INT bit is set
in the Reset register.
8DMA_RD_LEVEL_INTR0DMA_RD_LEVEL_INT is set to ‘1’ when during a DMA transfer, in
transmission mode, the number of transmitted characters reaches
the DMA_RD_INT_THRES parameter in the UART Configuration
Register 1 (UCR1).
The bit is reset when RMS or RS_DMA_RD_LEVEL_INT bit is set in
the Reset register.
7DONER0DONE is set when DMA transfer ends successfully. When this bit is
set, INT goes high. The bit is reset when RMS or RS_DONE bit is
set in the Reset register.
6FER1FIFO Empty (FE) is set when the reception FIFO is empty. It is reset
when at least one character has been loaded in the FIFO.
5BGTR0BGT is linked with a counter with a value of 22 ETUs that is
triggered at every start bit on I/O. If the count is finished before the
next start bit, the BGT bit is set. This helps to verify that the card
does not answer until 22 ETUs after the last transmitted character,
or does not transmit a character until 22 ETUs after the last received
character. This bit is reset by setting the RMS bit in the Reset
register. It should be reset by the software when initiating a
transaction (before the ATR phase).
4BOFR0The BOF bit is a copy of the pin OFF.
3OCHR0The OCH bit is set when a change occurs on pin OFF. When this bit
is set, INT goes high. The bit is reset when RMS or RS_OCH bit is
set in the Reset register.
2DMA_ERRR0This bit is always reads a zero.
1DMA_ABORTR0DMA_ABORT is set when an anomaly occurs during a DMA
transfer. These anomalies include DMA_ERROR, OCH, and when
the Parity Error counter reaches its terminal count (except if the
DSDT bit is set in reception mode in the UCR2). When
DMA_ABORT is set, the DMAE bit in the UCR2 is reset (DMA
transfer stopped). The bit is reset when RMS or RS_DMAABORT
bit is set in the Reset register.
0TBE/RBFR0Transmit Buffer Empty/ Receive Buffer Full (TBE/RBF) is set when:
• Changing from reception mode to transmission mode
• A character has been transmitted by the UART.
• The reception FIFO is full.
TBE/RBF is reset when a character has been written in UTR, or
when the RUR bit in the Command Register (CRE) is set High, or
when changing from transmission mode to reception mode.
11:8FIFO_THRESW0000Set the trigger level for FIFO level interrupt (FIFO_LEVEL_INT).
7Reserved
6:4PEC2:PEC0W000PEC2, PEC1 and PEC0 determine the number of accepted parity
3:0FL3:FL0W0000FL3, FL2, FL1 and FL0 determine the depth of the FIFO.
In protocol T=0, if a correct character is received before the programmed error number is reached, then the error counter is
reset. If the programmed number of allowed parity errors is reached, then the PE bit within the UART Status register is set
as long as the RUS bit in the Reset register has not been set.
In protocol T= 1, the error counter has no action. (PE is set at the first wrong received character).
When DMA is enabled, (DMAE bit is set in UCR2), the bits FL3:FL0 must be reset.
Offset 0x04 4034UART Transmit Register (UTR)
31:8Reserved
7:0UT7:UT0W0When the controller wants to transmit a character to the card, it
Offset 0x04 4034UART Receive Register (URR)
31:8Reserved
…Continued
0000 means that the trigger level is not active.
(FIFO_LEVEL_INT will not be set in the Mixed Status register.
0001 means that the trigger level is 1.
....
1111 means the trigger level is 15 (decimal).
Note: If the FIFO_THRES is higher or equal to the FIFO depth, the
FIFO_LEVEL_INT bit will not be set in the Mixed Status register.
errors before setting the Parity Error (PE) bit (within UART Status
Register and setting INT high in protocol T=0).
000 means that only 1 parity error will be accepted.
111 means 8 will be accepted.
0000 means the FIFO depth is 1.
....
1111 means the FIFO depth is 16.
writes the data in this register. The data transmission proceeds as
follows:
• Starts at the end of this writing if the previous character has been
transmitted and if the extra guard time has expired.
• Starts at the end of the extra guard time if this one has not
expired.
• Does not start if the transmission of the previous character is not
completed.
In synchronous mode the data UT0 is written on the IO line of the
card when UTR has been written and remains unchanged.
7:0UR7:UR0R0When the controller wants to read a data from the card, it reads it
Offset 0x04 4038UART Status Register (USR)
This register is used by the controller to monitor the activity of the ISO UART and the timeout counters.
31:8Reserved
7:5TO3:TO1R0TO1 is set when counter1 has reached its terminal count.
4EAR0Early Answer (EA) is high if the first start bit on I/O during ATR has
3PER0Parity Error (See PEC2:PEC0 bit field in 0x04 3030 FIFO Control
2OVRR0Overrun (OVR) is high if the UART has received a new character
1FERR0Framing Error (FER) is high when I/O was not in a high impedance
0TBE/RBFR0Transmission Buffer Empty (TBE) is high when the UART is in
In T= 0 protocol, Parity Error (PE) is high if the UART has detected a number of received characters with parity error equal
to the number written in PEC2, PEC1 and PEC0, or if a transmitted character has not been acknowledged by the card.
In T = 0 protocol, a character received with a parity error is not stored in the FIFO.
In T = 1 protocol, a character with parity error is stored in the FIFO and the parity error counter is not operating.
If any of the status bits FER, OVR, PE, EA, TO1, TO2 and TO3 is set, then INT is high. The bit causing the interrupt is reset
when the RUS bit is set in the Reset register. If TBE/RBF is set, and if the mask bit DISTBE/RBF within the UCR2 is not set,
then INT is also high. TBE/RBF is reset when data has been written in the UART Transmit register, or when the RUR bit is
set in the Command register, or when changing from transmission mode to reception mode.
…Continued
from this register in direct convention. When needed, this register
may be tied to the FIFO whose length n is programmable between 1
and 8 (see FL2:FL0 bit in the FIFO Control register).
Reading this register does not affect the state of the UART, which
means the TBE/RBF bit present in the USR and MSR registers is
not affected and the FIFO pointers are not updated. To update the
state of the UART, the controller must set the RUR bit in the
Command register. In synchronous mode, the UR0 bit is directly
linked to the IO line of the card.
TO2 is set when counter2 has reached its terminal count.
TO3 is set when counter3 has reached its terminal count.
been detected between 200 and 384 CLK card pulses. (All activities
on I/O line during the first 200 CLK card pulses with RST low or high
are not taken into account.)
Register (FCR).)
while the URR was full. In this case, at least one character has been
lost.
state at 10.25 ETUs after a start bit.
transmission mode and when the controller may write the next
character to transmit in the UTR. It is reset when the controller has
written data in the transmit register, or when the T/R bit within the
UCR1 has been reset either automatically or by software.
Reception Buffer Full (RBF) is high when the FIFO is full. The
controller may set the RUR bit in the Command register, which
clears the RBF bit after it has read the URR register. TBE and RBF
share the same bit within the USR. (In transmission mode, the
relevant one is TBE; in reception mode, the relevant one is RBF.)
start (32-bit register) when the UART is in reception mode. This
register must be programmed before setting the DMAE bit in the
UCR2. The DMA transfer must start at a double word-aligned
boundary.
reception mode, the dma_flush signal is asserted automatically if no
character has been received 100us after the last received character.
hardware.
this bit in order to update:
• the FIFO pointers
• the TBE/RBF bit in the USR and MSR registers (when in
reception mode).
See bit descriptions in 0x04 3030 Mixed Status Register (MSR).
31PWDNR/WWhen set, access to smartcard interface registers is forbidden,
30:1Reserved0
Offset 0x04 4FFCSCIF_MODULE_ID
31:0Module IDR0x01060
000
…Continued
except for SCIF_MODULE_ID and SCIF_POWERDOWN.
Smartcard Interface Identity code.
Table 10: HP I2C 1 Registers (Rev 2.5)
BitSymbolAccess Val ueDescription
2
C Registers
HP I
Offset 0x04 5000I2CCON
31:8ReservedR/W0000-
0080
7ReservedR/W0000-
0080
6EN_I2CR/W0000-
0080
5STAR/W0000-
0080
4SETSTOR/W0000-
0080
3ReservedR/W0000-
0080
2AAR/W0000-
0080
1ReservedR/W0000-
0080
Read = 0, write has no effect.
Read = 1; write has no effect.
1 = module is enabled.
0 = module acts as a non-addressed slave.
1 = generates a START or repeated START condition depending on
the status of the module.
1 = generates a STOP condition while in Master mode and acts as if
a STOP condition was received in Slave mode.
This is a write-only bit. Read always gives 0.
Read = 0; write has no effect.
1 = returns an acknowledgement during the acknowledge clock
pulse if other conditions are met.
Writes to this register will generate a bus error.
31:8ReservedR0000-
7:0Status CodeR0000-
Offset 0x04 5008I2CDAT
31:8ReservedRRead = 0, write has no effect.
7:0SD7-SD0R/W0000-
Offset 0x04 500CI2CSLA
31:8ReservedRead = 0, write has no effect.
7:1SLA7-SLA1R/W0Own slave address
0GCR/W01 = will watch for the general call.
Offset 0x04 5010HSBIR
31:5ReservedRead = 0, write has no effect.
4:0HSB4-HSB0R/W0High Speed mode bit rate
Offset 0x04 5014FSBIR
31:8ReservedRead = 0, write has no effect.
7F/SR/W0Fast and Standard mode bit rate
6:0FSB6-FSB0R/W0F/S Speed mode bit rate
Note: In Fast mode, the software has to take care of the fact that the registers are programmed to have the SCL between
100 kHz and 400 kHz. Similarly, standard mode is only allowed when the SCL is below 100 kHz.
Offset 0x04 5018INTROG
Writes to this register will generate a bus error.
31:8ReservedRead = 0, write has no effect.
7INTRO_MSTR01 = module is in Master mode.
6INTRO_TRXR01 = module is in Transmitter mode.
5INTRO_HSR01 = module is in HS mode.
4INTRO_STOR0Reflects the state of the STO flag in the I2C_CON register.
3INTRO_SIR0Reflects the state of the SI flag.
…Continued
0080
00F8
00F8
0000
Read = 0; write has no effect.
Read = 0, write has no effect.
Bits 2:0 are always 0.
Data transmitted/received in
The I2C bus speed is determined by the Master. However this
register must also be set in SLV mode.
1 = fast mode
0 = standard mode
2
The I
C bus speed is determined by the Master. However this
31:0ReservedError if write. Read will return DEADABBA.
DMA Control Registers
Offset 0x04 5020DMA_ADDR
31:0DMAAD31-DMAAD0R/W0Start Address for the DMA. This gives the byte address, so the
Offset 0x04 5024DMA_LENGTH
31:16ReservedRead = 0, write has no effect.
15:0DMAL15-DMAL0R/W0Length of the DMA data transfer {in number of bytes}
Offset 0x04 5028DMA_COUNTER
Writes to this register will generate a bus error.
31:16ReservedRead = 0, write has no effect.
15:0DMAC15-DMAC0R0Length of the data remaining to be transferred through DMA
This is a read-only byte counter.
When the DMA_LENGTH register is loaded by the processor, DMA_COUNTER is internally loaded with the same value
DMA_LENGTH. After that, the DMA_COUNTER decrements for every data byte which is transferred. Write to the
DMA_COUNTER is prevented to ensure it gets loaded only when the DMA_LENGTH register is loaded.
In Transmitter Mode:
• This counter gives the number of bytes remaining to be transmitted. If this counter has 5, it means that five bytes are
remaining to be transmitted. In transmitter mode DMA_COUNTER decrements for the given i2c_dma_mt/i2c_dma_st
interrupt at the moment when both the data byte received from the DMA adapter has been written to I2C_DAT and the
interrupt has been cleared by the DMA interface.
In Receiver Mode:
• This counter gives the number of bytes that are remaining to be received. If this counter has 5, it means that five bytes
are remaining to be received. In receiver mode, the DMA_COUNTER decrements for the given i2c_dma_mr/i2c_dma_sr
interrupt at the moment the data byte has been read from I2C_DAT and transmitted to the DMA adapter. After that, the
2
I
C interrupt is cleared by the DMA interface if the DMA_COUNTER is not equal to zero.
Offset 0x04 502CDMA_CONTROL
31:4ReservedRead = 0, write has no effect.
3Dma_ST_conR/W0Enables DMA to handle i2c_dma_st.
2Dma_SR_conR/W0Enables DMA to handle i2c_dma_sr.
1Dma_MR_conR/W0Enables DMA to handle i2c_dma_mr.
…Continued
2
C bus is busy.
I2C bus is free.
0 =
0 = module is not addressed as Slave.
LSBs [1:0] need not be zero.
The address given out is 32 bits and can address a byte. However if
the DMA adapter supports only word addresses, the DMA_ADDR
register should be loaded with a value that is divisible by four.
The DMA_LENGTH register will reflect the total data length i.e., if
the data length is 511, this register will have 511 (0x0000001FF).
Data transfer does not change the content of this register.
The DMA_LENGTH should be loaded with a value greater than
0x00000000 if DMA is enabled to handle i2c_dma_xx interrupt.
This register is used to enable DMA to handle different i2c_dma_xx interrupts generated by HS I
configured for a Master Transmitter interrupt, it will not respond to i2c_dma_mt from HS I
passed to the CPU as pic_intr if the EN0 bit in the INT_ENABLE register is set to 1. At any given time, only one bit in the
DMA_CONTROL register should be set. This is required as there is only one DMA to serve all the i2c_dma_xx interrupts.
Offset 0x04 5030DMA_STATUS
Writes to this register will generate a bus error.
31:2ReservedRead = 0, write has no effect.
1DMA_COUNT_ZERO R0Status is set if the DMA_COUNTER has decremented to zero.
0ReservedRead = 0, write has no effect.
Note: While a DMA transaction is going on, software should ensure that no write commands are issued. A write to any
register during a DMA transaction will lead to undefined behavior. Violating this rule by accessing the registers may result in
a system bus hangup. Also, during a DMA transaction, a read command can only be issued to the INT_STATUS and
DMA_STATUS registers. A read from any other register will generate invalid data, “DEADABBA.”
Interrupt Registers
Offset 0x04 5FE0INT_STATUS
Writes to this register will generate a bus error.
31:24STA31-STA24RF8Status code
23:1ReservedRead = 0; write has no effect.
0STA0R 0
Offset 0x04 5FE4INT_ENABLE
31:1ReservedRead = 0; write has no effect.
0ENOR/W0
Offset 0x04 5FE8INT_CLEAR
31:1ReservedRead = 0; write has no effect.
0CLROW0
Offset 0x04 5FECINT_SET
31:1ReservedRead = 0; write has no effect.
0SETOW0
Other Registers
Offset 0x04 5FF4POWER DOWN
31Power DownR/W01 = module is in powerdown mode.
30:0ReservedRead = 0; write has no effect.
I2C Interrupt Status
I2C Interrupt Enable
1 = Interrupt mode
0 = Polling mode
I2C Interrupt Clear
1 = Clears the I
0 = No effect.
Reading this register returns a zero.
2
C interrupt
I2C Interrupt Set
1 = Sets the I2C interrupt
0 = No effect.
This register is used to set interrupts through software
(for diagnostic purposes.) Reading this register returns a zero.
This register is present in the DMA interface. The HP I2C DMA module is powered down as described:
• The CPU waits for the device to acknowledge that it has successfully completed all pending transactions.
• The CPU then writes 1 to the MSB of the powerdown register.
• During powerdown, no register read/write is possible. A register write will result in an error and a register read will yield
“DEADABBA.”
- The powerdown register itself is an exception to this rule. It is 100% operational during powerdown mode, which allows
the CPU to stop the module clock in a controlled manner.
• The powerdown bit does not gate any clock inside the HP I
• Wakeup of a device also has to be done by the CPU in the reverse manner i.e., start module clock, disable powerdown
bit, and set up the device.
• An Interrupt from HS I
interrupts should be enabled i.e., EN_I2C bit must be 1 and hsi2c_clk should be present.
Offset 0x04 5FFCMODULE_ID
Writes to this register will generate a bus error.
31:16Module_IDRN/A0x3203 is equal to the IP code.
15:12MAJ_REVRN/A2
11:8MIN_REVRN/AF
7:0APERTURERN/A0: This corresponds to a register area of 4 kB.
2
C will be passed on to the PIC even if clk is stopped during powerdown mode. But if this occurs,
Writes to this register will generate a bus error.
31:8ReservedR0000-
00F8
7:0Status CodeR0000-
00F8
Offset 0x04 6008I2CDAT
31:8ReservedRRead = 0, write has no effect.
7:0SD7-SD0R/W0000-
0000
Offset 0x04 600CI2CSLA
31:8ReservedRead = 0, write has no effect.
7:1SLA7-SLA1R/W0Own slave address
0GCR/W01 = will watch for the general call.
Offset 0x04 6010HSBIR
31:5ReservedRead = 0, write has no effect.
4:0HSB4-HSB0R/W0High Speed mode bit rate
Offset 0x04 6014FSBIR
31:8ReservedRead = 0, write has no effect.
Read = 0, write has no effect.
Read = 1; write has no effect.
1 = module is enabled.
0 = module acts as a non-addressed slave.
1 = generates a START or repeated START condition depending on
the status of the module.
1 = generates a STOP condition while in Master mode and acts as if
a STOP condition was received in Slave mode.
This is a write-only bit. Read always gives 0.
Read = 0; write has no effect.
1 = returns an acknowledgement during the acknowledge clock
pulse if other conditions are met.
Read = 0; write has no effect.
Read = 0; write has no effect.
Read = 0, write has no effect.
Bits 2:0 are always 0.
Data transmitted/received in
2
The I
C bus speed is determined by the Master. However this
Note: In Fast mode, the software has to take care of the fact that the registers are programmed to have the SCL between
100 kHz and 400 kHz. Similarly, standard mode is only allowed when the SCL is below 100 kHz.
Offset 0x04 6018INTROG
Writes to this register will generate a bus error.
31:8ReservedRead = 0, write has no effect.
7INTRO_MSTR01 = module is in Master mode.
6INTRO_TRXR01 = module is in Transmitter mode.
5INTRO_HSR01 = module is in HS mode.
4INTRO_STOR0Reflects the state of the STO flag in the I2C_CON register.
3INTRO_SIR0Reflects the state of the SI flag.
2INTRO_BBR01 =
1INTRO_SELR01 = module is addressed as Slave.
0INTRO_ACKR0Reflects the state of the ACK flag.
Offset 0x04 601CReserved
31:0ReservedError if write. Read will return DEADABBA.
DMA Control Registers
Offset 0x04 6020DMA_ADDR
31:0DMAAD31-DMAAD0R/W0Start Address for the DMA. This gives the byte address, so the
Offset 0x04 6024DMA_LENGTH
31:16ReservedRead = 0, write has no effect.
15:0DMAL15-DMAL0R/W0Length of the DMA data transfer {in number of bytes}
Offset 0x04 6028DMA_COUNTER
Writes to this register will generate a bus error.
31:16ReservedRead = 0, write has no effect.
…Continued
1 = fast mode
0 = standard mode
2
The I
C bus speed is determined by the Master. However this
register must also be set in SLV mode.
0 = module is in Slave mode.
0 = module is in Receiver mode.
0 = module is in F/S mode.
I2C bus is busy.
I2C bus is free.
0 =
0 = module is not addressed as Slave.
LSBs [1:0] need not be zero.
The address given out is 32 bits and can address a byte. However if
the DMA adapter supports only word addresses, the DMA_ADDR
register should be loaded with a value that is divisible by four.
The DMA_LENGTH register will reflect the total data length i.e., if
the data length is 511, this register will have 511 (0x0000001FF).
Data transfer does not change the content of this register.
The DMA_LENGTH should be loaded with a value greater than
0x00000000 if DMA is enabled to handle i2c_dma_xx interrupt.
15:0DMAC15-DMAC0R0Length of the data remaining to be transferred through DMA
This is a read-only byte counter.
When the DMA_LENGTH register is loaded by the processor, DMA_COUNTER is internally loaded with the same value
DMA_LENGTH. After that, the DMA_COUNTER decrements for every data byte which is transferred. Write to the
DMA_COUNTER is prevented to ensure it gets loaded only when the DMA_LENGTH register is loaded.
In Transmitter Mode:
• This counter gives the number of bytes remaining to be transmitted. If this counter has 5, it means that five bytes are
remaining to be transmitted. In transmitter mode DMA_COUNTER decrements for the given i2c_dma_mt/i2c_dma_st
interrupt at the moment when both the data byte received from the DMA adapter has been written to I2C_DAT and the
interrupt has been cleared by the DMA interface.
In Receiver Mode:
• This counter gives the number of bytes that are remaining to be received. If this counter has 5, it means that five bytes
are remaining to be received. In receiver mode, the DMA_COUNTER decrements for the given i2c_dma_mr/i2c_dma_sr
interrupt at the moment the data byte has been read from I2C_DAT and transmitted to the DMA adapter. After that, the
2
C interrupt is cleared by the DMA interface if the DMA_COUNTER is not equal to zero.
I
Offset 0x04 602CDMA_CONTROL
31:4ReservedRead = 0, write has no effect.
3Dma_ST_conR/W0Enables DMA to handle i2c_dma_st.
2Dma_SR_conR/W0Enables DMA to handle i2c_dma_sr.
1Dma_MR_conR/W0Enables DMA to handle i2c_dma_mr.
0Dma_MT_conR/W0Enables DMA to handle i2c_dma_mt.
This register is used to enable DMA to handle different i2c_dma_xx interrupts generated by HS I
configured for a Master Transmitter interrupt, it will not respond to i2c_dma_mt from HS I2C core and that interrupt will be
passed to the CPU as pic_intr if the EN0 bit in the INT_ENABLE register is set to 1. At any given time, only one bit in the
DMA_CONTROL register should be set. This is required as there is only one DMA to serve all the i2c_dma_xx interrupts.
Offset 0x04 6030DMA_STATUS
Writes to this register will generate a bus error.
31:2ReservedRead = 0, write has no effect.
1DMA_COUNT_ZERO R0Status is set if the DMA_COUNTER has decremented to zero.
0ReservedRead = 0, write has no effect.
Note: While a DMA transaction is going on, software should ensure that no write commands are issued. A write to any
register during a DMA transaction will lead to undefined behavior. Violating this rule by accessing the registers may result in
a system bus hangup. Also, during a DMA transaction, a read command can only be issued to the INT_STATUS and
DMA_STATUS registers. A read from any other register will generate invalid data, “DEADABBA.”
Interrupt Registers
Offset 0x04 6FE0INT_STATUS
Writes to this register will generate a bus error.
This register is present in the DMA interface. The HP I2C DMA module is powered down as described:
• The CPU waits for the device to acknowledge that it has successfully completed all pending transactions.
• The CPU then writes 1 to the MSB of the powerdown register.
• During powerdown, no register read/write is possible. A write will result in an error and a read will yield “DEADABBA.”
- The powerdown register itself is an exception to this rule. It is 100% operational during powerdown mode, which allows
the CPU to stop the module clock in a controlled manner.
• The powerdown bit does not gate any clock inside the HP I
• Wakeup of a device also has to be done by the CPU in the reverse manner i.e., start module clock, disable powerdown
bit, and set up the device.
• An Interrupt from HS I
interrupts should be enabled i.e., EN_I2C bit must be 1 and hsi2c_clk should be present.
Offset 0x04 6FFCMODULE_ID
Writes to this register will generate a bus error.
31:16Module_IDRN/A0x3203 is equal to the IP code.
15:12MAJ_REVRN/A2
11:8MIN_REVRN/AF
7:0APERTURERN/A0: This corresponds to a register area of 4 kB.
2
C will be passed on to the PIC even if clk is stopped during powerdown mode. But if this occurs,
…Continued
2
C Interrupt Enable
1 = Interrupt mode
0 = Polling mode
I2C Interrupt Clear
1 = Clears the I
0 = No effect.
Reading this register returns a zero.
2
C interrupt
I2C Interrupt Set
1 = Sets the I
0 = No effect.
This register is used to set interrupts through software
(for diagnostic purposes.) Reading this register returns a zero.