USB_Init() no longer calls sei() to enable global interrupts - this must now be done in the user application once all init code has run.
This commit is contained in:
		
							parent
							
								
									85aaaf84ce
								
							
						
					
					
						commit
						59c4871f80
					
				
					 135 changed files with 181 additions and 61 deletions
				
			
		| 
						 | 
				
			
			@ -69,6 +69,9 @@ int main(void)
 | 
			
		|||
	/* Setup hardware required for the bootloader */
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
 | 
			
		||||
	/* Enable global interrupts so that the USB stack can function */
 | 
			
		||||
	sei();
 | 
			
		||||
 | 
			
		||||
	while (RunBootloader)
 | 
			
		||||
	{
 | 
			
		||||
		CDC_Task();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,6 +42,7 @@
 | 
			
		|||
		#include <avr/boot.h>
 | 
			
		||||
		#include <avr/eeprom.h>
 | 
			
		||||
		#include <avr/power.h>
 | 
			
		||||
		#include <avr/interrupt.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,6 +101,9 @@ int main(void)
 | 
			
		|||
{
 | 
			
		||||
	/* Configure hardware required by the bootloader */
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
	/* Enable global interrupts so that the USB stack can function */
 | 
			
		||||
	sei();
 | 
			
		||||
 | 
			
		||||
	/* Run the USB management task while the bootloader is supposed to be running */
 | 
			
		||||
	while (RunBootloader || WaitForExit)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@
 | 
			
		|||
		#include <avr/pgmspace.h>
 | 
			
		||||
		#include <avr/eeprom.h>
 | 
			
		||||
		#include <avr/power.h>
 | 
			
		||||
		#include <avr/interrupt.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
	
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,8 +42,6 @@
 | 
			
		|||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -63,48 +61,22 @@ void SetupHardware(void)
 | 
			
		|||
	clock_prescale_set(clock_div_1);
 | 
			
		||||
	
 | 
			
		||||
	/* Hardware Initialization */
 | 
			
		||||
	LEDs_Init();
 | 
			
		||||
	USB_Init();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */
 | 
			
		||||
void EVENT_USB_Device_Connect(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Indicate USB enumerating */
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via
 | 
			
		||||
 *  the status LEDs, disables the sample update and PWM output timers and stops the USB and MIDI management tasks.
 | 
			
		||||
 */
 | 
			
		||||
void EVENT_USB_Device_Disconnect(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Indicate USB not ready */
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration
 | 
			
		||||
 *  of the USB device after enumeration - the device endpoints are configured and the MIDI management task started.
 | 
			
		||||
 */
 | 
			
		||||
void EVENT_USB_Device_ConfigurationChanged(void)
 | 
			
		||||
{
 | 
			
		||||
	/* Indicate USB connected and ready */
 | 
			
		||||
	LEDs_SetAllLEDs(LEDMASK_USB_READY);
 | 
			
		||||
 | 
			
		||||
	/* Setup MIDI stream endpoints */
 | 
			
		||||
	if (!(Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPNUM, EP_TYPE_BULK,
 | 
			
		||||
		                             ENDPOINT_DIR_OUT, MIDI_STREAM_EPSIZE,
 | 
			
		||||
	                                 ENDPOINT_BANK_SINGLE)))
 | 
			
		||||
	{
 | 
			
		||||
		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 | 
			
		||||
	}	
 | 
			
		||||
	Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPNUM, EP_TYPE_BULK,
 | 
			
		||||
	                           ENDPOINT_DIR_OUT, MIDI_STREAM_EPSIZE,
 | 
			
		||||
	                           ENDPOINT_BANK_SINGLE);
 | 
			
		||||
	
 | 
			
		||||
	if (!(Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPNUM, EP_TYPE_BULK,
 | 
			
		||||
		                             ENDPOINT_DIR_IN, MIDI_STREAM_EPSIZE,
 | 
			
		||||
	                                 ENDPOINT_BANK_SINGLE)))
 | 
			
		||||
	{
 | 
			
		||||
		LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
 | 
			
		||||
	}
 | 
			
		||||
	Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPNUM, EP_TYPE_BULK,
 | 
			
		||||
	                           ENDPOINT_DIR_IN, MIDI_STREAM_EPSIZE,
 | 
			
		||||
	                           ENDPOINT_BANK_SINGLE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Task to handle the generation of MIDI note change events in response to presses of the board joystick, and send them
 | 
			
		||||
| 
						 | 
				
			
			@ -122,9 +94,7 @@ void MIDI_Task(void)
 | 
			
		|||
	if (Endpoint_IsOUTReceived())
 | 
			
		||||
	{
 | 
			
		||||
		USB_MIDI_EventPacket_t InPacket;
 | 
			
		||||
		Endpoint_Read_Stream_LE(&InPacket, sizeof(InPacket));
 | 
			
		||||
			
 | 
			
		||||
		LEDs_SetAllLEDs(InPacket.Data2 > 64 ? LEDS_LED1 : LEDS_LED2);	
 | 
			
		||||
		Endpoint_Read_Stream_LE(&InPacket, sizeof(InPacket));			
 | 
			
		||||
		Endpoint_ClearOUT();
 | 
			
		||||
 | 
			
		||||
		uint8_t Channel = InPacket.Data1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,12 +41,12 @@
 | 
			
		|||
		#include <avr/wdt.h>
 | 
			
		||||
		#include <avr/boot.h>
 | 
			
		||||
		#include <avr/power.h>
 | 
			
		||||
		#include <avr/interrupt.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
				
 | 
			
		||||
		#include <LUFA/Version.h>
 | 
			
		||||
		#include <LUFA/Drivers/Board/LEDs.h>
 | 
			
		||||
		#include <LUFA/Drivers/USB/USB.h>
 | 
			
		||||
 | 
			
		||||
   /* Macros: */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,6 +49,9 @@ int main(void)
 | 
			
		|||
	/* Setup hardware required for the bootloader */
 | 
			
		||||
	SetupHardware();
 | 
			
		||||
	
 | 
			
		||||
	/* Enable global interrupts so that the USB stack can function */
 | 
			
		||||
	sei();
 | 
			
		||||
 | 
			
		||||
	while (RunBootloader)
 | 
			
		||||
	  USB_USBTask();
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,7 @@
 | 
			
		|||
		#include <avr/wdt.h>
 | 
			
		||||
		#include <avr/boot.h>
 | 
			
		||||
		#include <avr/power.h>
 | 
			
		||||
		#include <avr/interrupt.h>
 | 
			
		||||
		#include <stdbool.h>
 | 
			
		||||
 | 
			
		||||
		#include "Descriptors.h"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue