Information
Universal Serial Bus Interface
MPC8308 PowerQUICC II Pro Processor Reference Manual, Rev. 1
Freescale Semiconductor 13-99
corresponds to the current microframe number. For example, if the current microframe is 0, then
cMicroFrameBit will equal 0b0000_0001.
The variable cMicroFrameBit is used to compare against the S-mask and C-mask fields to
determine whether the queue head is marked for a start- or complete-split transaction for the
current microframe.
Figure 13-56 illustrates how a complete interrupt split transaction is managed. There are two phases to
each split transaction. The first is a single start-split transaction, which occurs when the SplitXState is at
Do_Start and the single bit in cMicroFrameBit has a corresponding bit active in QH[S-mask]. The
transaction translator does not acknowledge the receipt of the periodic start-split, so the host controller
unconditionally transitions the state to Do_Complete. Due to the available jitter in the transaction
translator pipeline, there is more than one complete-split transaction scheduled by software for the
Do_Complete state. This translates simply to the fact that there are multiple bits set in the QH[C-mask]
field.
The host controller keeps the queue head in the Do_Complete state until the split transaction is complete
(see definition below), or an error condition triggers the three-strikes-rule (for example, after the host tries
the same transaction three times, and each encounters an error, the host controller stops retrying the bus
transaction and halts the endpoint, thus requiring system software to detect the condition and perform
system-dependent recovery).
Figure 13-56. Split Transaction State Machine for Interrupt
13.6.12.2.6 Periodic Interrupt—Do-Start-Split
This is the state software must initialize a full- or low-speed interrupt queue head StartXState bit. This state
is entered from the Do_Complete Split state only after the split transaction is complete. This occurs when
Do
Complete-
Split
Do
Start-
Split
MDATA
Halt
Queue
!(QH.S-Mask &
Active
Queue
State
* Issue Start-Split Transaction
* Tag QH with Frame Number According
(QH.C-Mask & cMicroFrameBit)
.and.
State
cMicroFrameBit)
to the Frame Tag Rules **(1,3)
* QH.C-prog-mask = zero(0x00)
(QH.S-Mask &
cMicroFrameBit)
.or.
NYET
(FRINDEX[7
–3] .eq. QH.FrameTag)
.and.
CheckPreviousBit(QH.C-prog-mask,
QH.C-Mask, cMicroFrameBit)
Data Loss
.or.
STALL
.or.
Babble
.or.
CERR ––> 0
Split
Transaction
Complete
* Issue Complete-Split Transaction
* Tag QH with Frame Number According
to the **Sframe Tag Rules
* C-prog-mask |= cMicroFrameBit
XactErr
Decrement Error Counter (CERR)
and Do Immediate Retry
of Complete-Split