Embedded Xinu Operating System
An ongoing research project and educational operating system.
|
#include <usb_dwc_regs.h>
Data Fields | |
uint32_t | val |
struct { | |
uint32_t port_address: 7 | |
uint32_t hub_address: 7 | |
uint32_t transaction_position: 2 | |
uint32_t complete_split: 1 | |
uint32_t reserved: 14 | |
uint32_t split_enable: 1 | |
}; | |
Channel Split Control Register -
This register is used to set up Split Transactions for communicating with low or full-speed devices attached to a high-speed hub. When doing so, set split_enable to 1 and the other fields as documented. Otherwise, software must clear this register before starting the transfer.
Like the Channel Characteristics register, this register only needs to be programmed one time if the channel is enabled multiple times to send all the packets of a single transfer.
uint32_t dwc_regs::dwc_host_channel::dwc_host_channel_split_control::complete_split |
0: Do a Start Split transaction 1: Do a Complete Split transaction.
When split transactions are enabled, this must be programmed by software before enabling the channel. Note that you must begin with a Start Split transaction and alternate this bit for each transaction until the transfer is complete.
uint32_t dwc_regs::dwc_host_channel::dwc_host_channel_split_control::hub_address |
USB device address of the high-speed hub that acts as the Transaction Translator for this low or full-speed device. This is not necessarily the hub the device is physically connected to, since that could be a full-speed or low-speed hub. Instead, software must walk up the USB device tree (towards the root hub) until a high-speed hub is found and use its device address here.
uint32_t dwc_regs::dwc_host_channel::dwc_host_channel_split_control::port_address |
0-based index of the port on the high-speed hub on which the low or full-speed device is attached.
uint32_t dwc_regs::dwc_host_channel::dwc_host_channel_split_control::split_enable |
Set to 1 to enable Split Transactions.
uint32_t dwc_regs::dwc_host_channel::dwc_host_channel_split_control::transaction_position |
TODO: what exactly does this do?