Microchip® Advanced Software Framework

usbhs_otg.h File Reference

USB OTG Driver for USBHS.

Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries.

#include "compiler.h"
#include "conf_board.h"
#include "board.h"
#include "ioport.h"
#include "pio.h"
#include "pio_handler.h"

Macros

#define USB_INT_LEVEL   5
 USB interrupt level By default USB interrupt have low priority. More...
 
USBHS OTG ID pin management

The ID pin come from the USB OTG connector (A and B receptacle) and allows to select the USB mode host or device.

The ID pin can be managed through PIO pin. This feature is optional, and it is enabled if USB_ID_PIN is defined in board.h and CONF_BOARD_USB_ID_DETECT defined in conf_board.h.

#define OTG_ID_DETECT
 
#define OTG_ID_IO   (defined(USB_ID_PIN) && OTG_ID_DETECT)
 
#define otg_id_init(handler)
 
#define otg_id_interrupt_enable()   pio_enable_pin_interrupt(USB_ID_PIN)
 
#define otg_id_interrupt_disable()   pio_disable_pin_interrupt(USB_ID_PIN)
 
#define Is_otg_id_device()   ioport_get_pin_level(USB_ID_PIN)
 
#define Is_otg_id_host()   (!Is_otg_id_device())
 
#define otg_force_device_mode()   (Set_bits(USBHS->USBHS_CTRL, USBHS_CTRL_UIMOD))
 
#define Is_otg_device_mode_forced()   (Tst_bits(USBHS->USBHS_CTRL, USBHS_CTRL_UIMOD))
 Test if device mode is forced. More...
 
#define otg_force_host_mode()   (Clr_bits(USBHS->USBHS_CTRL, USBHS_CTRL_UIMOD))
 Disable external OTG_ID pin and force host mode. More...
 
#define Is_otg_host_mode_forced()   (!Tst_bits(USBHS->USBHS_CTRL, USBHS_CTRL_UIMOD))
 Test if host mode is forced. More...
 
USBHS OTG VBUS pin management

USBHS peripheral does not support VBUS management and it's monitored by a PIO pin.

This feature is optional, and it is enabled if USB_VBUS_PIN is defined in board.h and CONF_BOARD_USB_VBUS_DETECT defined in conf_board.h.

Note
ioport_init() must be invoked before using VBus pin functions since they use IOPORT API,
See Also
Common IOPORT API.
#define OTG_VBUS_DETECT
 
#define OTG_VBUS_IO   (defined(USB_VBUS_PIN) && OTG_VBUS_DETECT)
 
#define USB_VBUS_WKUP   0
 
#define otg_vbus_init(handler)
 
#define Is_otg_vbus_high()   ioport_get_pin_level(USB_VBUS_PIN)
 
#define Is_otg_vbus_low()   (!Is_otg_vbus_high())
 
#define otg_enable_vbus_interrupt()   pio_enable_pin_interrupt(USB_VBUS_PIN)
 
#define otg_disable_vbus_interrupt()   pio_disable_pin_interrupt(USB_VBUS_PIN)
 
USBHS OTG main management

These macros allows to enable/disable pad and USBHS hardware

#define otg_reset()
 Reset USB macro. More...
 
#define otg_enable()   (Set_bits(USBHS->USBHS_CTRL, USBHS_CTRL_USBE))
 Enable USB macro. More...
 
#define otg_disable()   (Clr_bits(USBHS->USBHS_CTRL, USBHS_CTRL_USBE))
 Disable USB macro. More...
 
#define Is_otg_enabled()   (Tst_bits(USBHS->USBHS_CTRL, USBHS_CTRL_USBE))
 
#define Is_otg_clock_usable()   (Tst_bits(USBHS->USBHS_SR, USBHS_SR_CLKUSABLE))
 Check Clock Usable. More...
 
#define otg_freeze_clock()   (Set_bits(USBHS->USBHS_CTRL, USBHS_CTRL_FRZCLK))
 Stop (freeze) internal USB clock. More...
 
#define otg_unfreeze_clock()   (Clr_bits(USBHS->USBHS_CTRL, USBHS_CTRL_FRZCLK))
 
#define Is_otg_clock_frozen()   (Tst_bits(USBHS->USBHS_CTRL, USBHS_CTRL_FRZCLK))
 
#define otg_enable_rderr_interrupt()   (Set_bits(USBHS->USBHS_CTRL, USBHS_CTRL_RDERRE))
 Enables RDERR interrupt. More...
 
#define otg_disable_rderr_interrupt()   (Clr_bits(USBHS->USBHS_CTRL, USBHS_CTRL_RDERRE))
 Disables RDERR interrupt. More...
 
#define Is_otg_rderr_interrupt_enabled()   (Tst_bits(USBHS->USBHS_CTRL, USBHS_CTRL_RDERRE))
 
#define otg_ack_rderr_interrupt()   (USBHS->USBHS_SCR = USBHS_SCR_RDERRIC)
 ACKs RDERR interrupt. More...
 
#define otg_raise_rderr_interrupt()   (USBHS->USBHS_SFR = USBHS_SFR_RDERRIS)
 Raises RDERR interrupt. More...
 
#define Is_otg_rderr_interrupt()   (Tst_bits(USBHS->USBHS_SR, USBHS_SR_RDERRI))
 Tests if a RDERR occurs. More...
 

Functions

void otg_dual_disable (void)
 Uninitialize the dual role This function is implemented in usbhs_host.c file. More...
 
bool otg_dual_enable (void)
 Initialize the dual role This function is implemented in usbhs_host.c file. More...
 
static __always_inline void otg_io_pin_init (uint32_t pin, uint32_t flags, IRQn_Type port_irqn, uint8_t irq_level, void(*handler)(uint32_t, uint32_t), uint32_t wkup)
 

static __always_inline void otg_io_pin_init ( uint32_t  pin,
uint32_t  flags,
IRQn_Type  port_irqn,
uint8_t  irq_level,
void(*)(uint32_t, uint32_t)  handler,
uint32_t  wkup 
)
static