Rainbow Electronics AT91CAP9S250A User Manual

Page 857

Advertising
background image

857

6264A–CAP–21-May-07

AT91CAP9S500A/AT91CAP9S250A

A simple algorithm can be used by the application to send packets regardless of the number of
banks associated to the endpoint.

Algorithm Description for Each Packet:

• The application waits for TX_PK_RDY flag to be cleared in the UDPHS_EPTSTAx register

before it can perform a write access to the DPR.

• The application writes one USB packet of data in the DPR through the

64

KB endpoint logical

memory window.

• The application sets TX_PK_RDY flag in the UDPHS_EPTSETSTAx register.

The application is notified that it is possible to write a new packet to the DPR by the
TX_PK_RDY interrupt. This interrupt can be enabled or masked by setting the TX_PK_RDY bit
in the UDPHS_EPTCTLENB/UDPHS_EPTCTLDIS register.

Algorithm Description to Fill Several Packets:

Using the previous algorithm, the application is interrupted for each packet. It is possible to
reduce the application overhead by writing linearly several banks at the same time. The
AUTO_VALID bit in the UDPHS_EPTCTLx must be set by writing the AUTO_VALID bit in the
UDPHS_EPTCTLENBx register.

The auto-valid-bank mechanism allows the transfer of data (IN and OUT) without the interven-
tion of the CPU. This means that bank validation (set TX_PK_RDY or clear the RX_BK_RDY bit)
is done by hardware.

• The application checks the BUSY_BANK_STA field in the UDPHS_EPTSTAx register. The

application must wait that at least one bank is free.

• The application writes a number of bytes inferior to the number of free DPR banks for the

endpoint. Each time the application writes the last byte of a bank, the TX_PK_RDY signal is
automatically set by the UDPHS.

• If the last packet is incomplete (i.e., the last byte of the bank has not been written) the

application must set the TX_PK_RDY bit in the UDPHS_EPTSETSTAx register.

The application is notified that all banks are free, so that it is possible to write another burst of
packets by the BUSY_BANK interrupt. This interrupt can be enabled or masked by setting the
BUSY_BANK flag in the UDPHS_EPTCTLENB and UDPHS_EPTCTLDIS registers.

This algorithm must not be used for isochronous transfer. In this case, the ping-pong mechanism
does not operate.

A Z e r o L e n g t h P a c k e t c a n b e s e n t b y s e t t i n g j u s t t h e T X _ P K T R D Y f l a g i n t h e
UDPHS_EPTSETSTAx register.

44.4.8.6

Bulk IN or Interrupt IN: Sending a Buffer Using DMA (Device to Host)

The UDPHS integrates a DMA host controller. This DMA controller can be used to transfer a
buffer from the memory to the DPR or from the DPR to the processor memory under the UDPHS
control. The DMA can be used for all transfer types except control transfer.

Example DMA configuration:

1.

Program UDPHS_DMAADDRESS x with the address of the buffer that should be
transfered.

2.

Enable the interrupt of the DMA in UDPHS_IEN

3.

Program UDPHS_ DMACONTROLx:

Advertising