Add option to the USB XMEGAs to set the USB bus interrupt priority level.
This commit is contained in:
		
							parent
							
								
									f07e766755
								
							
						
					
					
						commit
						a36012fc4b
					
				
					 2 changed files with 26 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -72,6 +72,13 @@ void USB_Init(
 | 
			
		|||
	NVM.CMD  = NVM_CMD_READ_CALIB_ROW_gc;
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	USB_ResetInterface();	
 | 
			
		||||
| 
						 | 
				
			
			@ -98,10 +105,6 @@ void USB_ResetInterface(void)
 | 
			
		|||
	USB_INT_DisableAllInterrupts();
 | 
			
		||||
	USB_INT_ClearAllInterrupts();
 | 
			
		||||
 | 
			
		||||
	// TODO: Config define for priority
 | 
			
		||||
	USB.INTCTRLA = (2 << USB_INTLVL_gp);
 | 
			
		||||
	PMIC.CTRL   |= (1 << PMIC_MEDLVLEX_bp);
 | 
			
		||||
 | 
			
		||||
	USB_Controller_Reset();
 | 
			
		||||
	USB_Init_Device();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -84,7 +84,25 @@
 | 
			
		|||
		#endif
 | 
			
		||||
 | 
			
		||||
	/* 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 */
 | 
			
		||||
			//@{
 | 
			
		||||
			/** Mask for a CONTROL type endpoint or pipe.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue