Add option to the USB XMEGAs to set the USB bus interrupt priority level.

pull/1469/head
Dean Camera 14 years ago
parent f07e766755
commit a36012fc4b

@ -72,6 +72,13 @@ void USB_Init(
NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc; NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc;
USB.CAL1 = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, USBCAL1)); USB.CAL1 = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, USBCAL1));
if ((USB_Options & USB_OPT_BUSEVENT_PRIHIGH) == USB_OPT_BUSEVENT_PRIHIGH)
USB.INTCTRLA = (3 << USB_INTLVL_gp);
else if ((USB_Options & USB_OPT_BUSEVENT_PRIMED) == USB_OPT_BUSEVENT_PRIMED)
USB.INTCTRLA = (2 << USB_INTLVL_gp);
else
USB.INTCTRLA = (1 << USB_INTLVL_gp);
SetGlobalInterruptMask(CurrentGlobalInt); SetGlobalInterruptMask(CurrentGlobalInt);
USB_ResetInterface(); USB_ResetInterface();
@ -98,10 +105,6 @@ void USB_ResetInterface(void)
USB_INT_DisableAllInterrupts(); USB_INT_DisableAllInterrupts();
USB_INT_ClearAllInterrupts(); USB_INT_ClearAllInterrupts();
// TODO: Config define for priority
USB.INTCTRLA = (2 << USB_INTLVL_gp);
PMIC.CTRL |= (1 << PMIC_MEDLVLEX_bp);
USB_Controller_Reset(); USB_Controller_Reset();
USB_Init_Device(); USB_Init_Device();
} }

@ -84,7 +84,25 @@
#endif #endif
/* Public Interface - May be used in end-application: */ /* Public Interface - May be used in end-application: */
/* Macros: */ /* Macros: */
/** \name USB Controller Option Masks */
//@{
/** Sets the USB bus interrupt priority level to be low priority. The USB bus interrupt is used for Start of Frame events, bus suspend
* and resume events, bus reset events and other events related to the management of the USB bus.
*/
#define USB_OPT_BUSEVENT_PRILOW ((0 << 1) | (0 << 1))
/** Sets the USB bus interrupt priority level to be medium priority. The USB bus interrupt is used for Start of Frame events, bus suspend
* and resume events, bus reset events and other events related to the management of the USB bus.
*/
#define USB_OPT_BUSEVENT_PRIMED ((0 << 1) | (1 << 1))
/** Sets the USB bus interrupt priority level to be high priority. The USB bus interrupt is used for Start of Frame events, bus suspend
* and resume events, bus reset events and other events related to the management of the USB bus.
*/
#define USB_OPT_BUSEVENT_PRIHIGH ((1 << 1) | (0 << 1))
//@}
/** \name Endpoint/Pipe Type Masks */ /** \name Endpoint/Pipe Type Masks */
//@{ //@{
/** Mask for a CONTROL type endpoint or pipe. /** Mask for a CONTROL type endpoint or pipe.

Loading…
Cancel
Save