CC1110Fx / CC1111Fx
When a data packet has been written to an IN
FIFO, the USBCSIL.INPKT_RDY bit must be
set to 1. If double buffering is enabled, the
USBCSIL.INPKT_RDY bit will be cleared
immediately after it has been written and
another data packet can be loaded. This will
not generate an IN endpoint interrupt, since an
interrupt is only generated when a packet has
been sent. When double buffering is used
firmware should check the status of the
USBCSIL.PKT_PRESENT bit before writing to
the IN FIFO. If this bit is 0, two data packets
can be written. Double buffered isochronous
endpoints should only need to load two
packets the first time the IN FIFO is loaded.
After that, one packet is loaded for every USB
frame. To send a zero length data packet,
USBCSIL.INPKT_RDY should be set to 1
without loading a data packet into the IN FIFO.
13.16.6.4 Endpoint 1 – 5 Interrupts
The following events may generate an IN EPx
interrupt request (x indicates the endpoint
number):
• A data packet that was loaded into the
IN FIFO has been sent to the USB host
(USBCSIL.INPKT_RDYshould be set to
1 when a new packet is ready to be
transferred. This bit will be cleared by
HW when the data packet has been
sent)
• A
STALL
has
been
sent
Only
(USBCSIL.SENT_STALL=1).
Bulk/Interrupt endpoints can be stalled
• The IN FIFO is flushed due to the
USBCSIH.FLUSH_PACKET bit being set
to 1
Any
of
these
events
will
cause
A data packet can be read from the OUT FIFO
when the USBCSOL.OUTPKT_RDY bit is 1. An
interrupt will be generated when this occurs, if
enabled. The size of the data packet is kept in
the USBCNTH:USBCNTL registers. Note that
USBIIF.INEPxIF to be asserted regardless
of the status of the IN EPx interrupt mask bit
USBIIE.INEPxIE. If the IN EPx interrupt
mask bit is set to 1, the CPU interrupt flag
IRCON2.USBIF will also be asserted. An
interrupt request is only generated if
IEN2.USBIEand USBIIE.INEPxIEare both
set to 1. The x in the register names refer to
the endpoint number 1 - 5)
this
value
is
only
valid
when
USBCSOL.OUTPKT_RDY=1. When the data
packet has been read from the OUT FIFO, the
USBCSOL.OUTPKT_RDYbit must be cleared. If
double buffering is enabled there may be two
data packets in the FIFO. If another data
The following events may generate an OUT
EPx interrupt request:
packet
is
ready
when
the
USBCSOL.OUTPKT_RDY bit is cleared the
USBCSOL.OUTPKT_RDY bit will be asserted
immediately and an interrupt will be generated
(if enabled) to signal that a new data packet
• A data packet has been received
(USBCSOL.OUTPKT_RDY=1)
• A
STALL
has
been
sent
Only
(USBCSIL.SENT_STALL=1).
has
been
received.
The
Bulk/Interrupt endpoints can be stalled
USBCSOL.FIFO_FULL bit will be set when
there are two data packets in the OUT FIFO.
Any
of
these
events
to
will
be
cause
asserted
USBOIF.OUTEPxIF
The AutoClear feature is supported for OUT
regardless of the status of the OUT EPx
interrupt mask bit USBOIE.OUTEPxIE. If the
OUT EPx interrupt mask bit is set to 1, the
CPU interrupt flag IRCON2.USBIFwill also be
asserted. An interrupt request is only
endpoints.
When
enabled,
the
USBCSOL.OUTPKT_RDY
bit is
cleared
automatically when USBMAXObytes have been
read from the OUT FIFO. The AutoClear
feature
is
enabled
by
setting
generated
if
IEN2.USBIE
and
USBCSOH.AUTOCLEAR=1.
The
AutoClear
USBOIE.OUTEPxIEare both set to 1.
feature can be used to reduce the time the
data packet occupies the OUT FIFO buffer and
is typically used for bulk endpoints.
13.16.6.5 Bulk/Interrupt IN Endpoint
Interrupt IN transfers occur at regular intervals
while bulk IN transfers utilize available
bandwidth not allocated to isochronous,
interrupt, or control transfers.
A complementary AutoSet feature is supported
for IN endpoints. When enabled, the
USBCSIL.INPKT_RDY bit is set automatically
when USBMAXIbytes have been written to the
IN FIFO. The AutoSet feature is enabled by
setting USBCSIH.AUTOSET=1. The AutoSet
feature can reduce the overall time it takes to
send a data packet and is typically used for
bulk endpoints.
Interrupt IN endpoints may set the
USBCSIH.FORCE_DATA_TOGbit. When this bit
is set the data toggle bit is continuously
toggled regardless of whether an ACK was
received or not. This feature is typically used
SWRS033E
Page 174 of 239