From 1c62f7ee2dcc11defc0f8862e9b833606676a04d Mon Sep 17 00:00:00 2001 From: Deval Shah Date: Fri, 22 Jul 2016 13:57:11 +0530 Subject: Added USB interrupt handler. And defined some macros regarding USB. --- c/src/lib/libbsp/arm/raspberrypi/include/irq.h | 1 + c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h | 9 +++++++++ c/src/lib/libbsp/arm/raspberrypi/irq/irq.c | 15 +++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/irq.h b/c/src/lib/libbsp/arm/raspberrypi/include/irq.h index 8436c2dfc6..85225efc95 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/irq.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/irq.h @@ -36,6 +36,7 @@ #define BCM2835_INTC_TOTAL_IRQ 64 + 8 +#define BCM2835_IRQ_ID_USB 9 #define BCM2835_IRQ_ID_AUX 29 #define BCM2835_IRQ_ID_SPI_SLAVE 43 #define BCM2835_IRQ_ID_PWA0 45 diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h index 60645b9baa..911b86be22 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h +++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h @@ -336,6 +336,15 @@ /** @} */ +/** +* @name USB Registers +* +* @{ +*/ + +#define BCM2835_USB_BASE (RPI_PERIPHERAL_BASE + 0x980000) /* DTC_OTG USB controller */ + +/** @} */ /** @} */ diff --git a/c/src/lib/libbsp/arm/raspberrypi/irq/irq.c b/c/src/lib/libbsp/arm/raspberrypi/irq/irq.c index 7b3b2be3cb..f792c57ffc 100644 --- a/c/src/lib/libbsp/arm/raspberrypi/irq/irq.c +++ b/c/src/lib/libbsp/arm/raspberrypi/irq/irq.c @@ -91,6 +91,11 @@ void bsp_interrupt_dispatch(void) { vector = BCM2835_IRQ_ID_SPI; } + /* USB */ + else if ( BCM2835_REG(BCM2835_IRQ_PENDING1) & BCM2835_BIT(9) ) + { + vector = BCM2835_IRQ_ID_USB; + } if ( vector < 255 ) { @@ -144,6 +149,11 @@ rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) { BCM2835_REG(BCM2835_IRQ_ENABLE2) = BCM2835_BIT(22); } + /* USB */ + else if ( vector == BCM2835_IRQ_ID_USB ) + { + BCM2835_REG(BCM2835_IRQ_ENABLE1) = BCM2835_BIT(9); + } rtems_interrupt_enable(level); @@ -194,6 +204,11 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) { BCM2835_REG(BCM2835_IRQ_DISABLE2) = BCM2835_BIT(22); } + /* USB */ + else if ( vector == BCM2835_IRQ_ID_USB ) + { + BCM2835_REG(BCM2835_IRQ_DISABLE1) = BCM2835_BIT(9); + } rtems_interrupt_enable(level); -- cgit v1.2.3