📄 usb.c
字号:
//! endpoint 3 so USBIntStatusControl() or USBIntStatusEndpoint() should be
//! used instead.
//!
//! \return Returns the status of the sources for the USB controller's
//! interrupt.
//
//*****************************************************************************
#ifndef DEPRECATED
unsigned long
USBIntStatus(unsigned long ulBase)
{
unsigned long ulStatus;
//
// Check the arguments.
//
ASSERT(ulBase == USB0_BASE);
//
// Get the transmit interrupt status.
//
ulStatus = (HWREGB(ulBase + USB_O_TXIS));
//
// Get the receive interrupt status, these bits go into the second byte of
// the returned value.
//
ulStatus |= (HWREGB(ulBase + USB_O_RXIS) << USB_INT_RX_SHIFT);
//
// Get the general interrupt status, these bits go into the upper 8 bits
// of the returned value.
//
ulStatus |= (HWREGB(ulBase + USB_O_IS) << USB_INT_STATUS_SHIFT);
//
// Add the power fault status.
//
if(HWREG(ulBase + USB_O_EPCISC) & USB_EPCISC_PF)
{
//
// Indicate a power fault was detected.
//
ulStatus |= USB_INT_POWER_FAULT;
//
// Clear the power fault interrupt.
//
HWREGB(ulBase + USB_O_EPCISC) |= USB_EPCISC_PF;
}
if(HWREG(USB0_BASE + USB_O_IDVISC) & USB_IDVRIS_ID)
{
//
// Indicate a id detection was detected.
//
ulStatus |= USB_INT_MODE_DETECT;
//
// Clear the id detection interrupt.
//
HWREG(USB0_BASE + USB_O_IDVISC) |= USB_IDVRIS_ID;
}
//
// Return the combined interrupt status.
//
return(ulStatus);
}
#endif
//*****************************************************************************
//
//! Disables the sources for USB interrupts.
//!
//! \param ulBase specifies the USB module base address.
//! \param ulFlags specifies which interrupts to disable.
//!
//! This function will disable the USB controller from generating the
//! interrupts indicated by the \e ulFlags parameter. There are three groups
//! of interrupt sources, IN Endpoints, OUT Endpoints, and general status
//! changes, specified by \b USB_INT_HOST_IN, \b USB_INT_HOST_OUT,
//! \b USB_INT_DEV_IN, \b USB_INT_DEV_OUT, and \b USB_INT_STATUS. If
//! \b USB_INT_ALL is specified then all interrupts will be disabled.
//!
//! \note WARNING: This API cannot be used on endpoint numbers greater than
//! endpoint 3 so USBIntDisableControl() or USBIntDisableEndpoint() should be
//! used instead.
//!
//! \return None.
//
//*****************************************************************************
#ifndef DEPRECATED
void
USBIntDisable(unsigned long ulBase, unsigned long ulFlags)
{
//
// Check the arguments.
//
ASSERT(ulBase == USB0_BASE);
ASSERT((ulFlags & ~(USB_INT_ALL)) == 0);
//
// If any transmit interrupts were disabled then write the transmit
// interrupt settings out to the hardware.
//
if(ulFlags & (USB_INT_HOST_OUT | USB_INT_DEV_IN | USB_INT_EP0))
{
HWREGH(ulBase + USB_O_TXIE) &=
~(ulFlags & (USB_INT_HOST_OUT | USB_INT_DEV_IN | USB_INT_EP0));
}
//
// If any receive interrupts were disabled then write the receive interrupt
// settings out to the hardware.
//
if(ulFlags & (USB_INT_HOST_IN | USB_INT_DEV_OUT))
{
HWREGH(ulBase + USB_O_RXIE) &=
~((ulFlags & (USB_INT_HOST_IN | USB_INT_DEV_OUT)) >>
USB_INT_RX_SHIFT);
}
//
// If any general interrupts were disabled then write the general interrupt
// settings out to the hardware.
//
if(ulFlags & USB_INT_STATUS)
{
HWREGB(ulBase + USB_O_IE) &=
~((ulFlags & USB_INT_STATUS) >> USB_INT_STATUS_SHIFT);
}
//
// Disable the power fault interrupt.
//
if(ulFlags & USB_INT_POWER_FAULT)
{
HWREG(ulBase + USB_O_EPCIM) = 0;
}
//
// Disable the ID pin detect interrupt.
//
if(ulFlags & USB_INT_MODE_DETECT)
{
HWREG(USB0_BASE + USB_O_IDVIM) = 0;
}
}
#endif
//*****************************************************************************
//
//! Enables the sources for USB interrupts.
//!
//! \param ulBase specifies the USB module base address.
//! \param ulFlags specifies which interrupts to enable.
//!
//! This function will enable the USB controller's ability to generate the
//! interrupts indicated by the \e ulFlags parameter. There are three
//! groups of interrupt sources, IN Endpoints, OUT Endpoints, and
//! general status changes, specified by \b USB_INT_HOST_IN,
//! \b USB_INT_HOST_OUT, \b USB_INT_DEV_IN, \b USB_INT_DEV_OUT, and
//! \b USB_STATUS. If \b USB_INT_ALL is specified then all interrupts will be
//! enabled.
//!
//! \note A call must be made to enable the interrupt in the main interrupt
//! controller to receive interrupts. The USBIntRegister() API performs this
//! controller level interrupt enable. However if static interrupt handlers
//! are used then then a call to IntEnable() must be made in order to allow any
//! USB interrupts to occur.
//!
//! \note WARNING: This API cannot be used on endpoint numbers greater than
//! endpoint 3 so USBIntEnableControl() or USBIntEnableEndpoint() should be
//! used instead.
//!
//! \return None.
//
//*****************************************************************************
#ifndef DEPRECATED
void
USBIntEnable(unsigned long ulBase, unsigned long ulFlags)
{
//
// Check the arguments.
//
ASSERT(ulBase == USB0_BASE);
ASSERT((ulFlags & (~USB_INT_ALL)) == 0);
//
// If any transmit interrupts were enabled then write the transmit
// interrupt settings out to the hardware.
//
if(ulFlags & (USB_INT_HOST_OUT | USB_INT_DEV_IN | USB_INT_EP0))
{
HWREGH(ulBase + USB_O_TXIE) |=
ulFlags & (USB_INT_HOST_OUT | USB_INT_DEV_IN | USB_INT_EP0);
}
//
// If any receive interrupts were enabled then write the receive interrupt
// settings out to the hardware.
//
if(ulFlags & (USB_INT_HOST_IN | USB_INT_DEV_OUT))
{
HWREGH(ulBase + USB_O_RXIE) |=
((ulFlags & (USB_INT_HOST_IN | USB_INT_DEV_OUT)) >>
USB_INT_RX_SHIFT);
}
//
// If any general interrupts were enabled then write the general interrupt
// settings out to the hardware.
//
if(ulFlags & USB_INT_STATUS)
{
HWREGB(ulBase + USB_O_IE) |=
(ulFlags & USB_INT_STATUS) >> USB_INT_STATUS_SHIFT;
}
//
// Enable the power fault interrupt.
//
if(ulFlags & USB_INT_POWER_FAULT)
{
HWREG(ulBase + USB_O_EPCIM) = USB_EPCIM_PF;
}
//
// Enable the ID pin detect interrupt.
//
if(ulFlags & USB_INT_MODE_DETECT)
{
HWREG(USB0_BASE + USB_O_IDVIM) = USB_IDVIM_ID;
}
}
#endif
//*****************************************************************************
//
//! Disable control interrupts on a given USB controller.
//!
//! \param ulBase specifies the USB module base address.
//! \param ulFlags specifies which control interrupts to disable.
//!
//! This function will disable the control interrupts for the USB controller
//! specified by the \e ulBase parameter. The \e ulFlags parameter specifies
//! which control interrupts to disable. The flags passed in the \e ulFlags
//! parameters should be the definitions that start with \b USB_INTCTRL_* and
//! not any other \b USB_INT flags.
//!
//! \return None.
//
//*****************************************************************************
void
USBIntDisableControl(unsigned long ulBase, unsigned long ulFlags)
{
//
// Check the arguments.
//
ASSERT(ulBase == USB0_BASE);
ASSERT((ulFlags & ~(USB_INTCTRL_ALL)) == 0);
//
// If any general interrupts were disabled then write the general interrupt
// settings out to the hardware.
//
if(ulFlags & USB_INTCTRL_STATUS)
{
HWREGB(ulBase + USB_O_IE) &= ~(ulFlags & USB_INTCTRL_STATUS);
}
//
// Disable the power fault interrupt.
//
if(ulFlags & USB_INTCTRL_POWER_FAULT)
{
HWREG(ulBase + USB_O_EPCIM) = 0;
}
//
// Disable the ID pin detect interrupt.
//
if(ulFlags & USB_INTCTRL_MODE_DETECT)
{
HWREG(USB0_BASE + USB_O_IDVIM) = 0;
}
}
//*****************************************************************************
//
//! Enable control interrupts on a given USB controller.
//!
//! \param ulBase specifies the USB module base address.
//! \param ulFlags specifies which control interrupts to enable.
//!
//! This function will enable the control interrupts for the USB controller
//! specified by the \e ulBase parameter. The \e ulFlags parameter specifies
//! which control interrupts to enable. The flags passed in the \e ulFlags
//! parameters should be the definitions that start with \b USB_INTCTRL_* and
//! not any other \b USB_INT flags.
//!
//! \return None.
//
//*****************************************************************************
void
USBIntEnableControl(unsigned long ulBase, unsigned long ulFlags)
{
//
// Check the arguments.
//
ASSERT(ulBase == USB0_BASE);
ASSERT((ulFlags & (~USB_INTCTRL_ALL)) == 0);
//
// If any general interrupts were enabled then write the general interrupt
// settings out to the hardware.
//
if(ulFlags & USB_INTCTRL_STATUS)
{
HWREGB(ulBase + USB_O_IE) |= ulFlags;
}
//
// Enable the power fault interrupt.
//
if(ulFlags & USB_INTCTRL_POWER_FAULT)
{
HWREG(ulBase + USB_O_EPCIM) = USB_EPCIM_PF;
}
//
// Enable the ID pin detect interrupt.
//
if(ulFlags & USB_INTCTRL_MODE_DETECT)
{
HWREG(USB0_BASE + USB_O_IDVIM) = USB_IDVIM_ID;
}
}
//*****************************************************************************
//
//! Returns the control interrupt status on a given USB controller.
//!
//! \param ulBase specifies the USB module base address.
//!
//! This function will read control interrupt status for a USB controller.
//! This call will return the current status for control interrupts only, the
//! endpoint interrupt status is retrieved by calling USBIntStatusEndpoint().
//! The bit values returned should be compared against the \b USB_INTCTRL_*
//! values.
//!
//! The following are the meanings of all \b USB_INCTRL_ flags and the modes
//! for which they are valid. These values apply to any calls to
//! USBIntStatusControl(), USBIntEnableControl(), and USBIntDisableConrol().
//! Some of these flags are only valid in the following modes as indicated in
//! the parenthesis: Host, Device, and OTG.
//!
//! - \b USB_INTCTRL_ALL - A full mask of all control interrupt sources.
//! - \b USB_INTCTRL_VBUS_ERR - A VBUS error has occurred (Host Only).
//! - \b USB_INTCTRL_SESSION - Session Start Detected on A-side of cable
//! (OTG Only).
//! - \b USB_INTCTRL_SESSION_END - Session End Detected (Device Only)
//! - \b USB_INTCTRL_DISCONNECT - Device Disconnect Detected (Host Only)
//! - \b USB_INTCTRL_CONNECT - Device Connect Detected (Host Only)
//! - \b USB_INTCTRL_SOF - Start of Frame Detected.
//! - \b USB_INTCTRL_BABBLE - USB controller detected a device signalling past
//! the end of a frame. (Host Only)
//! - \b USB_INTCTRL_RESET - Reset signalling detected by device. (Device Only)
//! - \b USB_INTCTRL_RESUME - Resume signalling detected.
//! - \b USB_INTCTRL_SUSPEND - Suspend signalling detected by device (Device
//! Only)
//! - \b USB_INTCTRL_MODE_DETECT - OTG cable mode detection has completed
//! (OTG Only)
//! - \b USB_INTCTRL_POWER_FAULT - Power Fault detected. (Host Only)
//!
//! \note This call will clear the source of all of the control status
//! interrupts.
//!
//! \return Returns the status of the control interrupts for a USB controller.
//
//*****************************************************************************
unsigned long
USBIntStatusControl(unsigned long ulBase)
{
unsigned long ulStatus;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -