09.12.2012 Views

RM0090: Reference manual - STMicroelectronics

RM0090: Reference manual - STMicroelectronics

RM0090: Reference manual - STMicroelectronics

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) <strong>RM0090</strong><br />

register to determine the enumeration speed and perform the steps listed in Endpoint<br />

initialization on enumeration completion on page 1128.<br />

At this point, the device is ready to accept SOF packets and perform control transfers on<br />

control endpoint 0.<br />

30.17.4 Host programming model<br />

Channel initialization<br />

The application must initialize one or more channels before it can communicate with<br />

connected devices. To initialize and enable a channel, the application must perform the<br />

following steps:<br />

1. Program the OTG_FS_GINTMSK register to unmask the following:<br />

2. Channel interrupt<br />

– Non-periodic transmit FIFO empty for OUT transactions (applicable when<br />

operating in pipelined transaction-level with the packet count field programmed<br />

with more than one).<br />

– Non-periodic transmit FIFO half-empty for OUT transactions (applicable when<br />

operating in pipelined transaction-level with the packet count field programmed<br />

with more than one).<br />

3. Program the OTG_FS_HAINTMSK register to unmask the selected channels’<br />

interrupts.<br />

4. Program the OTG_FS_HCINTMSK register to unmask the transaction-related<br />

interrupts of interest given in the host channel interrupt register.<br />

5. Program the selected channel’s OTG_FS_HCTSIZx register with the total transfer size,<br />

in bytes, and the expected number of packets, including short packets. The application<br />

must program the PID field with the initial data PID (to be used on the first OUT<br />

transaction or to be expected from the first IN transaction).<br />

6. Program the OTG_FS_HCCHARx register of the selected channel with the device’s<br />

endpoint characteristics, such as type, speed, direction, and so forth. (The channel can<br />

be enabled by setting the channel enable bit to 1 only when the application is ready to<br />

transmit or receive any packet).<br />

Halting a channel<br />

The application can disable any channel by programming the OTG_FS_HCCHARx register<br />

with the CHDIS and CHENA bits set to 1. This enables the OTG_FS host to flush the posted<br />

requests (if any) and generates a channel halted interrupt. The application must wait for the<br />

CHH interrupt in OTG_FS_HCINTx before reallocating the channel for other transactions.<br />

The OTG_FS host does not interrupt the transaction that has already been started on the<br />

USB.<br />

Before disabling a channel, the application must ensure that there is at least one free space<br />

available in the non-periodic request queue (when disabling a non-periodic channel) or the<br />

periodic request queue (when disabling a periodic channel). The application can simply<br />

flush the posted requests when the Request queue is full (before disabling the channel), by<br />

programming the OTG_FS_HCCHARx register with the CHDIS bit set to 1, and the CHENA<br />

bit cleared to 0.<br />

The application is expected to disable a channel on any of the following conditions:<br />

1111/1416 Doc ID 018909 Rev 3

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

Saved successfully!

Ooh no, something went wrong!