USBC low-level driver for OTG features.
Macros | |
#define | Is_otg_clock_frozen() USBC_TST_BITS(USBCON,FRZCLK) |
#define | Is_otg_clock_usable() USBC_TST_BITS(USBSTA,CLKUSABLE) |
Check USB interface clock usable. More... | |
#define | Is_otg_suspend() USBC_TST_BITS(USBSTA,SUSPEND) |
Check transceiver state. More... | |
#define | Is_otg_transceiver_off() (Is_otg_suspend()) |
#define | Is_otg_transceiver_on() (!Is_otg_suspend()) |
#define | otg_freeze_clock() USBC_SET_BITS(USBCON,FRZCLK) |
#define | otg_get_fsm_drd_state() USBC_RD_BITFIELD(USBFSM,DRDSTATE) |
Get the dual-role device state of the internal USB finite state machine. More... | |
#define | otg_register_desc_tab(addr) (Wr_bitfield(USBC->USBC_UDESC, USBC_UDESC_UDESCA_Msk, addr)) |
#define | otg_unfreeze_clock() USBC_CLR_BITS(USBCON,FRZCLK) |
Functions | |
void | otg_dual_disable (void) |
Uninitialize the dual role This function is implemented in usbc_host.c file. More... | |
bool | otg_dual_enable (void) |
Initialize the dual role This function is implemented in usbc_host.c file. More... | |
USBC IP properties | |
#define | otg_get_ip_name() (((uint64_t)USBC->USBC_UNAME1<<32)|(uint64_t)USBC->USBC_UNAME2) |
Get IP name part 1 or 2. More... | |
#define | otg_data_memory_barrier() do { barrier(); } while (0) |
#define | otg_get_ip_version() USBC_RD_BITFIELD(UVERS,VERSION) |
Get IP version. More... | |
#define | otg_get_max_nbr_endpoints() USBC_RD_BITFIELD(UFEATURES, EPTNBRMAX) |
Get maximal number of pipes/endpoints. More... | |
#define | otg_get_max_nbr_pipes() USBC_RD_BITFIELD(UFEATURES, EPTNBRMAX) |
USBC OTG ID pin management | |
The ID pin come from the USB OTG connector (A and B receptable) and allows to select the USB mode host or device. The ID pin can be managed through GPIO or EIC pin. This feature is optional, and it is enabled if USB_ID_PIN or USB_ID_EIC is defined in board.h and CONF_BOARD_USB_ID_DETECT defined in conf_board.h. | |
#define | OTG_ID_DETECT (defined(CONF_BOARD_USB_ID_DETECT)) |
#define | OTG_ID_IO (defined(USB_ID_PIN) && OTG_ID_DETECT) |
#define | OTG_ID_EIC (defined(USB_ID_EIC) && OTG_ID_DETECT) |
#define | pad_id_init() eic_pad_init(USB_ID_EIC_LINE, otg_id_handler, USB_ID_EIC_IRQn, USB_ID_EIC, UHD_USB_INT_LEVEL); |
#define | pad_id_interrupt_disable() eic_line_disable_interrupt(EIC, USB_ID_EIC_LINE) |
#define | pad_ack_id_interrupt() |
#define | Is_pad_id_device() ioport_get_pin_level(USB_ID_EIC) |
USBC Vbus management | |
The VBus line can be monitored through a GPIO pin and a basic resitor voltage divider. This feature is optional, and it is enabled if USB_VBUS_PIN or USB_VBUS_EIC is defined in board.h and CONF_BOARD_USB_VBUS_DETECT defined in conf_board.h. | |
#define | OTG_VBUS_DETECT (defined(CONF_BOARD_USB_VBUS_DETECT)) |
#define | OTG_VBUS_IO (defined(USB_VBUS_PIN) && OTG_VBUS_DETECT) |
#define | OTG_VBUS_EIC (defined(USB_VBUS_EIC) && OTG_VBUS_DETECT) |
#define | pad_vbus_init(level) eic_pad_init(USB_VBUS_EIC_LINE, uhd_vbus_handler, USB_VBUS_EIC_IRQn, USB_VBUS_EIC, level); |
#define | pad_vbus_interrupt_disable() eic_line_disable_interrupt(EIC, USB_VBUS_EIC_LINE) |
#define | pad_ack_vbus_interrupt() |
#define | Is_pad_vbus_high() ioport_get_pin_level(USB_VBUS_EIC) |
#define | uhd_vbus_is_on() USBC_REG_SET(USBSTA,VBUSRQ) |
Notify USBC that the VBUS on the usb line is powered. More... | |
#define | uhd_vbus_is_off() USBC_REG_CLR(USBSTA,VBUSRQ) |
Notify USBC that the VBUS on the usb line is not powered. More... | |
USBC OTG main management | |
#define | otg_enable() USBC_SET_BITS(USBCON,USBE) |
#define | otg_disable() USBC_CLR_BITS(USBCON,USBE) |
USBC mode management | |
The USBC mode device or host must be selected manualy by user | |
#define | otg_enable_device_mode() USBC_SET_BITS(USBCON,UIMOD) |
#define | Is_otg_device_mode_enabled() USBC_TST_BITS(USBCON,UIMOD) |
#define | otg_enable_host_mode() USBC_CLR_BITS(USBCON,UIMOD) |
#define | Is_otg_host_mode_enabled() (!Is_otg_device_mode_enabled()) |
#define Is_otg_clock_frozen | ( | ) | USBC_TST_BITS(USBCON,FRZCLK) |
#define Is_otg_clock_usable | ( | ) | USBC_TST_BITS(USBSTA,CLKUSABLE) |
Check USB interface clock usable.
Referenced by uhd_disable(), uhd_interrupt(), and uhd_resume().
#define Is_otg_device_mode_enabled | ( | ) | USBC_TST_BITS(USBCON,UIMOD) |
Referenced by ISR().
#define Is_otg_host_mode_enabled | ( | ) | (!Is_otg_device_mode_enabled()) |
#define Is_otg_suspend | ( | ) | USBC_TST_BITS(USBSTA,SUSPEND) |
Check transceiver state.
#define Is_otg_transceiver_off | ( | ) | (Is_otg_suspend()) |
#define Is_otg_transceiver_on | ( | ) | (!Is_otg_suspend()) |
#define Is_pad_id_device | ( | ) | ioport_get_pin_level(USB_ID_EIC) |
Referenced by otg_dual_enable(), and uhd_enable().
#define Is_pad_vbus_high | ( | ) | ioport_get_pin_level(USB_VBUS_EIC) |
Referenced by uhd_enable().
#define otg_disable | ( | ) | USBC_CLR_BITS(USBCON,USBE) |
Referenced by otg_dual_disable().
#define otg_enable | ( | ) | USBC_SET_BITS(USBCON,USBE) |
Referenced by uhd_enable().
#define otg_enable_device_mode | ( | ) | USBC_SET_BITS(USBCON,UIMOD) |
Referenced by otg_dual_enable().
#define otg_enable_host_mode | ( | ) | USBC_CLR_BITS(USBCON,UIMOD) |
Referenced by otg_dual_enable(), and uhd_enable().
#define otg_freeze_clock | ( | ) | USBC_SET_BITS(USBCON,FRZCLK) |
Referenced by uhd_disable(), uhd_enable(), uhd_interrupt(), and uhd_sof_interrupt().
#define otg_get_fsm_drd_state | ( | ) | USBC_RD_BITFIELD(USBFSM,DRDSTATE) |
Get the dual-role device state of the internal USB finite state machine.
Referenced by uhd_sof_interrupt().
#define otg_get_ip_name | ( | ) | (((uint64_t)USBC->USBC_UNAME1<<32)|(uint64_t)USBC->USBC_UNAME2) |
Get IP name part 1 or 2.
#define otg_get_ip_version | ( | ) | USBC_RD_BITFIELD(UVERS,VERSION) |
Get IP version.
#define otg_get_max_nbr_endpoints | ( | ) | USBC_RD_BITFIELD(UFEATURES, EPTNBRMAX) |
Get maximal number of pipes/endpoints.
#define otg_get_max_nbr_pipes | ( | ) | USBC_RD_BITFIELD(UFEATURES, EPTNBRMAX) |
#define OTG_ID_DETECT (defined(CONF_BOARD_USB_ID_DETECT)) |
#define OTG_ID_EIC (defined(USB_ID_EIC) && OTG_ID_DETECT) |
#define OTG_ID_IO (defined(USB_ID_PIN) && OTG_ID_DETECT) |
#define otg_register_desc_tab | ( | addr | ) | (Wr_bitfield(USBC->USBC_UDESC, USBC_UDESC_UDESCA_Msk, addr)) |
Referenced by uhd_enable().
#define otg_unfreeze_clock | ( | ) | USBC_CLR_BITS(USBCON,FRZCLK) |
Referenced by otg_dual_disable(), uhd_disable(), uhd_enable(), uhd_interrupt(), and uhd_resume().
#define OTG_VBUS_DETECT (defined(CONF_BOARD_USB_VBUS_DETECT)) |
#define OTG_VBUS_EIC (defined(USB_VBUS_EIC) && OTG_VBUS_DETECT) |
#define OTG_VBUS_IO (defined(USB_VBUS_PIN) && OTG_VBUS_DETECT) |
#define pad_ack_id_interrupt | ( | ) |
#define pad_ack_vbus_interrupt | ( | ) |
#define pad_id_init | ( | ) | eic_pad_init(USB_ID_EIC_LINE, otg_id_handler, USB_ID_EIC_IRQn, USB_ID_EIC, UHD_USB_INT_LEVEL); |
Referenced by otg_dual_enable().
#define pad_id_interrupt_disable | ( | ) | eic_line_disable_interrupt(EIC, USB_ID_EIC_LINE) |
Referenced by otg_dual_disable().
#define pad_vbus_init | ( | level | ) | eic_pad_init(USB_VBUS_EIC_LINE, uhd_vbus_handler, USB_VBUS_EIC_IRQn, USB_VBUS_EIC, level); |
Referenced by uhd_enable().
#define pad_vbus_interrupt_disable | ( | ) | eic_line_disable_interrupt(EIC, USB_VBUS_EIC_LINE) |
Referenced by uhd_disable().
#define uhd_vbus_is_off | ( | ) | USBC_REG_CLR(USBSTA,VBUSRQ) |
Notify USBC that the VBUS on the usb line is not powered.
#define uhd_vbus_is_on | ( | ) | USBC_REG_SET(USBSTA,VBUSRQ) |
Notify USBC that the VBUS on the usb line is powered.
Referenced by uhd_enable().
void otg_dual_disable | ( | void | ) |
Uninitialize the dual role This function is implemented in usbc_host.c file.
References eic_disable(), otg_disable, otg_initialized, otg_unfreeze_clock, pad_id_interrupt_disable, sysclk_disable_usb(), uhd_sleep_mode(), UHD_STATE_OFF, and usbc_async_wake_up_disable().
Referenced by uhd_disable().
bool otg_dual_enable | ( | void | ) |
Initialize the dual role This function is implemented in usbc_host.c file.
true
if the ID pin management has been started, otherwise false
. References eic_enable(), Is_pad_id_device, otg_enable_device_mode, otg_enable_host_mode, otg_initialized, pad_id_init, sysclk_enable_usb(), udc_start, UHC_MODE_CHANGE, uhc_start(), uhd_sleep_mode(), UHD_STATE_OFF, UHD_STATE_WAIT_ID_HOST, UHD_USB_INT_LEVEL, and usbc_async_wake_up_enable().
Referenced by uhd_enable().