1
0

Removed all user pipe/endpoint interrupt APIs, added internal library support for interrupt driven control endpoints when in device mode by defining INTERRUPT_CONTROL_ENDPOINT token and passing it to the compiler via the -D switch.

This commit is contained in:
Dean Camera
2009-05-14 10:07:08 +00:00
parent 0d5baf9bb3
commit 32f0f605ef
22 changed files with 48 additions and 342 deletions

View File

@@ -85,19 +85,6 @@ int main(void)
Scheduler_Start();
}
/** Event handler for the USB_Reset event. This fires when the USB interface is reset by the USB host, before the
* enumeration process begins, and enables the control endpoint interrupt so that control requests can be handled
* asynchronously when they arrive rather than when the control endpoint is polled manually.
*/
EVENT_HANDLER(USB_Reset)
{
/* Select the control endpoint */
Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP);
/* Enable the endpoint SETUP interrupt ISR for the control endpoint */
USB_INT_Enable(ENDPOINT_INT_SETUP);
}
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */
EVENT_HANDLER(USB_Connect)
{
@@ -376,21 +363,3 @@ STREAM_CALLBACK(AbortOnMassStoreReset)
/* Continue with the current stream operation */
return STREAMCALLBACK_Continue;
}
/** ISR for the general Pipe/Endpoint interrupt vector. This ISR fires when a control request has been issued to the control endpoint,
* so that the request can be processed. As several elements of the Mass Storage implementation require asynchronous control requests
* (such as endpoint stall clearing and Mass Storage Reset requests during data transfers) this is done via interrupts rather than
* polling so that they can be processed regardless of the rest of the application's state.
*/
ISR(ENDPOINT_PIPE_vect, ISR_BLOCK)
{
/* Check if the control endpoint has received a request */
if (Endpoint_HasEndpointInterrupted(ENDPOINT_CONTROLEP))
{
/* Process the control request */
USB_USBTask();
/* Handshake the endpoint setup interrupt - must be after the call to USB_USBTask() */
USB_INT_Clear(ENDPOINT_INT_SETUP);
}
}

View File

@@ -134,9 +134,6 @@
STREAM_CALLBACK(AbortOnMassStoreReset);
/* Event Handlers: */
/** Indicates that this module will catch the USB_Reset event when thrown by the library. */
HANDLES_EVENT(USB_Reset);
/** Indicates that this module will catch the USB_Connect event when thrown by the library. */
HANDLES_EVENT(USB_Connect);

View File

@@ -58,6 +58,11 @@
* 255), with each LUN being allocated an equal portion of the available
* Dataflash memory.
*
* The USB control endpoint is managed entirely by the library using endpoint
* interrupts, as the INTERRUPT_CONTROL_ENDPOINT option is enabled. This allows for
* the host to reset the Mass Storage device state during long transfers without
* the need for complicated polling logic.
*
* \section SSec_Options Project Options
*
* The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.

View File

@@ -189,6 +189,7 @@ CDEFS = -DF_CPU=$(F_CPU)UL -DF_CLOCK=$(F_CLOCK)UL -DBOARD=BOARD_$(BOARD)
CDEFS += -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY
CDEFS += -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DUSE_SINGLE_DEVICE_CONFIGURATION
CDEFS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
CDEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Place -D or -U options here for ASM sources