summaryrefslogtreecommitdiff
path: root/src/portable
diff options
context:
space:
mode:
Diffstat (limited to 'src/portable')
-rw-r--r--src/portable/microchip/samd21/dcd_samd21.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/portable/microchip/samd21/dcd_samd21.c b/src/portable/microchip/samd21/dcd_samd21.c
index 231abc7d0..9848f445c 100644
--- a/src/portable/microchip/samd21/dcd_samd21.c
+++ b/src/portable/microchip/samd21/dcd_samd21.c
@@ -30,6 +30,7 @@
#include "device/dcd.h"
#include "sam.h"
+#include "osal/osal.h"
/*------------------------------------------------------------------*/
/* MACRO TYPEDEF CONSTANT ENUM
@@ -37,6 +38,14 @@
static TU_ATTR_ALIGNED(4) UsbDeviceDescBank sram_registers[8][2];
static TU_ATTR_ALIGNED(4) uint8_t _setup_packet[8];
+
+//---------------------
+// Forward declarations
+//---------------------
+void maybe_transfer_complete(void);
+void USB_IRQHandler(void);
+//=====================
+
// Setup the control endpoint 0.
static void bus_reset(void)
{
@@ -291,11 +300,13 @@ void maybe_transfer_complete(void) {
}
}
-void USB_Handler(void)
+void USB_IRQHandler(void) // Renamed
{
- uint32_t int_status = USB->DEVICE.INTFLAG.reg & USB->DEVICE.INTENSET.reg;
+ uint32_t int_status;
+ osal_enter_interrupt();
+ int_status = USB->DEVICE.INTFLAG.reg & USB->DEVICE.INTENSET.reg;
USB->DEVICE.INTFLAG.reg = int_status; // clear interrupt
-
+ //printf("USB_IRQ %x\r\n", int_status);
/*------------- Interrupt Processing -------------*/
if ( int_status & USB_DEVICE_INTFLAG_SOF )
{
@@ -338,6 +349,7 @@ void USB_Handler(void)
// Handle complete transfer
maybe_transfer_complete();
+ osal_leave_interrupt();
}
#endif