29.01.2015 Views

STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and ...

STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and ...

STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

USB on-the-go full-speed (OTG_FS)<br />

RM0008<br />

Figure 274. Normal interrupt OUT/IN transactions<br />

Application<br />

AHB<br />

Host<br />

USB<br />

Device<br />

1<br />

init_reg(ch_1)<br />

init_reg(ch_2)<br />

set_ch_en<br />

(ch_2)<br />

1<br />

2<br />

write_tx_fifo<br />

(ch_1)<br />

1<br />

MPS<br />

3<br />

ch_1<br />

4<br />

Periodic Request Queue<br />

Assume that this queue<br />

can hold 4 entries.<br />

2<br />

3<br />

ch_2<br />

OUT<br />

DATA0<br />

M PS<br />

Odd<br />

(micro)<br />

frame<br />

5<br />

6<br />

XFRC interrupt<br />

ACK<br />

init_reg(ch_1)<br />

4<br />

IN<br />

write_tx_fifo<br />

(ch_1)<br />

1<br />

MPS<br />

5<br />

DATA0<br />

RXFLVL interrupt<br />

read_rx_sts<br />

read_rx_fifo<br />

6<br />

1<br />

MPS<br />

ACK<br />

read_rx_sts<br />

init_reg(ch_2)<br />

set_ch_en<br />

(ch_2)<br />

7 8<br />

9<br />

RXFLVL interrupt<br />

XFRC interrupt<br />

ch_1<br />

ch_2<br />

init_reg(ch_1)<br />

XFRC interrupt<br />

OUT<br />

DATA1<br />

MPS<br />

Even<br />

(micro)<br />

frame<br />

write_tx_fifo<br />

(ch_1)<br />

1<br />

MPS<br />

ACK<br />

IN<br />

DATA1<br />

● Interrupt service routine for interrupt OUT/IN transactions<br />

a) Interrupt OUT<br />

Unmask (NAK/TXERR/STALL/XFRC/FRMOR)<br />

if (XFRC)<br />

{<br />

Reset Error Count<br />

Mask ACK<br />

De-allocate Channel<br />

}<br />

else<br />

if (STALL or FRMOR)<br />

{<br />

Mask ACK<br />

Unmask CHH<br />

ai15676<br />

802/995 Doc ID 13902 Rev 9

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!