forked from Imagelibrary/rtems
2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* irq/bsp_irq_init.c: Removed file. * Makefile.am, preinstall.am: Reflect change above. Added generic interrupt support modules. * include/bsp.h: Define BSP_FEATURE_IRQ_EXTENSION. * startup/bspstart.c, irq/bsp_irq_asm.S, clock/clockdrv.c, network/network.c: Interrupt support changes.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||||
|
|
||||||
|
* irq/bsp_irq_init.c: Removed file.
|
||||||
|
* Makefile.am, preinstall.am: Reflect change above. Added generic
|
||||||
|
interrupt support modules.
|
||||||
|
* include/bsp.h: Define BSP_FEATURE_IRQ_EXTENSION.
|
||||||
|
* startup/bspstart.c, irq/bsp_irq_asm.S, clock/clockdrv.c,
|
||||||
|
network/network.c: Interrupt support changes.
|
||||||
|
|
||||||
2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
2010-04-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||||
|
|
||||||
* make/custom/edb7312.cfg: Use VFP floating point model.
|
* make/custom/edb7312.cfg: Use VFP floating point model.
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ dist_project_lib_DATA = bsp_specs
|
|||||||
include_HEADERS = include/bsp.h
|
include_HEADERS = include/bsp.h
|
||||||
include_HEADERS += ../../shared/include/tm27.h
|
include_HEADERS += ../../shared/include/tm27.h
|
||||||
|
|
||||||
|
include_bsp_HEADERS =
|
||||||
|
|
||||||
nodist_include_HEADERS = include/bspopts.h
|
nodist_include_HEADERS = include/bspopts.h
|
||||||
nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
|
nodist_include_bsp_HEADERS = ../../shared/include/bootcard.h
|
||||||
DISTCLEANFILES = include/bspopts.h
|
DISTCLEANFILES = include/bspopts.h
|
||||||
@@ -47,11 +49,17 @@ libbsp_a_SOURCES += timer/timer.c
|
|||||||
# abort
|
# abort
|
||||||
libbsp_a_SOURCES += ../shared/abort/abort.c
|
libbsp_a_SOURCES += ../shared/abort/abort.c
|
||||||
|
|
||||||
include_HEADERS += irq/irq.h
|
|
||||||
# irq
|
# irq
|
||||||
libbsp_a_SOURCES += irq/irq.c irq/bsp_irq_init.c \
|
include_bsp_HEADERS += ../../shared/include/irq-generic.h \
|
||||||
../../arm/shared/irq/irq_init.c irq/bsp_irq_asm.S \
|
../../shared/include/irq-info.h \
|
||||||
irq/irq.h
|
irq/irq.h
|
||||||
|
libbsp_a_SOURCES += ../../shared/src/irq-generic.c \
|
||||||
|
../../shared/src/irq-legacy.c \
|
||||||
|
../../shared/src/irq-info.c \
|
||||||
|
../../shared/src/irq-shell.c \
|
||||||
|
../../shared/src/irq-server.c \
|
||||||
|
irq/irq.c \
|
||||||
|
irq/bsp_irq_asm.S
|
||||||
|
|
||||||
if HAS_NETWORKING
|
if HAS_NETWORKING
|
||||||
network_CPPFLAGS = -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
|
network_CPPFLAGS = -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
#include <ep7312.h>
|
#include <ep7312.h>
|
||||||
#include <bsp.h>
|
#include <bsp.h>
|
||||||
#include <irq.h>
|
#include <bsp/irq.h>
|
||||||
|
|
||||||
#if ON_SKYEYE==1
|
#if ON_SKYEYE==1
|
||||||
#define CLOCK_DRIVER_USE_FAST_IDLE
|
#define CLOCK_DRIVER_USE_FAST_IDLE
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ extern "C" {
|
|||||||
#include <rtems/console.h>
|
#include <rtems/console.h>
|
||||||
#include <rtems/clockdrv.h>
|
#include <rtems/clockdrv.h>
|
||||||
|
|
||||||
|
#define BSP_FEATURE_IRQ_EXTENSION
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define the interrupt mechanism for Time Test 27
|
* Define the interrupt mechanism for Time Test 27
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#define __asm__
|
#define __asm__
|
||||||
#include "irq.h"
|
#include "irq.h"
|
||||||
|
|
||||||
#define VECTOR_TABLE 0x40
|
.extern edb7312_interrupt_dispatch
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function to obtain, execute an IT handler and acknowledge the IT
|
* Function to obtain, execute an IT handler and acknowledge the IT
|
||||||
@@ -45,7 +45,7 @@ check_dai:
|
|||||||
and r6, r4, r5 /* only look at interrupts which are enabled */
|
and r6, r4, r5 /* only look at interrupts which are enabled */
|
||||||
tst r6, #0x0001
|
tst r6, #0x0001
|
||||||
beq check_extfiq
|
beq check_extfiq
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 21)) /* load the vector number */
|
mov r0, #BSP_DAIINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -57,7 +57,7 @@ check_extfiq:
|
|||||||
and r6, r4, r5 /* only look at interrupts which are enabled */
|
and r6, r4, r5 /* only look at interrupts which are enabled */
|
||||||
tst r6, #0x0001
|
tst r6, #0x0001
|
||||||
beq check_bl
|
beq check_bl
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 0)) /* load the vector number */
|
mov r0, #BSP_EXTFIQ
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_bl:
|
check_bl:
|
||||||
@@ -69,7 +69,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0002
|
tst r6, #0x0002
|
||||||
beq check_we
|
beq check_we
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 1)) /* load the vector number */
|
mov r0, #BSP_BLINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_we:
|
check_we:
|
||||||
@@ -81,7 +81,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0004
|
tst r6, #0x0004
|
||||||
beq check_mc
|
beq check_mc
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 2)) /* load the vector number */
|
mov r0, #BSP_WEINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_mc:
|
check_mc:
|
||||||
@@ -93,7 +93,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0008
|
tst r6, #0x0008
|
||||||
beq check_cs
|
beq check_cs
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 3)) /* load the vector number */
|
mov r0, #BSP_MCINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_cs:
|
check_cs:
|
||||||
@@ -105,7 +105,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0010
|
tst r6, #0x0010
|
||||||
beq check_e1
|
beq check_e1
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 4)) /* load the vector number */
|
mov r0, #BSP_CSINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_e1:
|
check_e1:
|
||||||
@@ -117,7 +117,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0020
|
tst r6, #0x0020
|
||||||
beq check_e2
|
beq check_e2
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 5)) /* load the vector number */
|
mov r0, #BSP_EINT1
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_e2:
|
check_e2:
|
||||||
@@ -129,7 +129,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0040
|
tst r6, #0x0040
|
||||||
beq check_e3
|
beq check_e3
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 6)) /* load the vector number */
|
mov r0, #BSP_EINT2
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_e3:
|
check_e3:
|
||||||
@@ -141,7 +141,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0080
|
tst r6, #0x0080
|
||||||
beq check_tc1
|
beq check_tc1
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 7)) /* load the vector number */
|
mov r0, #BSP_EINT3
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_tc1:
|
check_tc1:
|
||||||
@@ -153,7 +153,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0100
|
tst r6, #0x0100
|
||||||
beq check_tc2
|
beq check_tc2
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 8)) /* load the vector number */
|
mov r0, #BSP_TC1OI
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_tc2:
|
check_tc2:
|
||||||
@@ -165,7 +165,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0200
|
tst r6, #0x0200
|
||||||
beq check_rtc
|
beq check_rtc
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 9)) /* load the vector number */
|
mov r0, #BSP_TC2OI
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_rtc:
|
check_rtc:
|
||||||
@@ -177,7 +177,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0400
|
tst r6, #0x0400
|
||||||
beq check_tick
|
beq check_tick
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 10)) /* load the vector number */
|
mov r0, #BSP_RTCMI
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_tick:
|
check_tick:
|
||||||
@@ -189,7 +189,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0800
|
tst r6, #0x0800
|
||||||
beq check_utx1
|
beq check_utx1
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 11)) /* load the vector number */
|
mov r0, #BSP_TINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_utx1:
|
check_utx1:
|
||||||
@@ -201,7 +201,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x1000
|
tst r6, #0x1000
|
||||||
beq check_urx1
|
beq check_urx1
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 12)) /* load the vector number */
|
mov r0, #BSP_UTXINT1
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_urx1:
|
check_urx1:
|
||||||
@@ -213,7 +213,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x2000
|
tst r6, #0x2000
|
||||||
beq check_ums
|
beq check_ums
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 13)) /* load the vector number */
|
mov r0, #BSP_URXINT1
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_ums:
|
check_ums:
|
||||||
@@ -225,7 +225,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x4000
|
tst r6, #0x4000
|
||||||
beq check_sse
|
beq check_sse
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 14)) /* load the vector number */
|
mov r0, #BSP_UMSINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_sse:
|
check_sse:
|
||||||
@@ -237,7 +237,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x8000
|
tst r6, #0x8000
|
||||||
beq check_kbd
|
beq check_kbd
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 15)) /* load the vector number */
|
mov r0, #BSP_SSEOTI
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -249,7 +249,7 @@ check_kbd:
|
|||||||
and r6, r4, r5 /* only look at interrupts which are enabled */
|
and r6, r4, r5 /* only look at interrupts which are enabled */
|
||||||
tst r6, #0x0001
|
tst r6, #0x0001
|
||||||
beq check_ss2rx
|
beq check_ss2rx
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 16)) /* load the vector number */
|
mov r0, #BSP_KBDINT
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_ss2rx:
|
check_ss2rx:
|
||||||
@@ -261,7 +261,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0002
|
tst r6, #0x0002
|
||||||
beq check_ss2tx
|
beq check_ss2tx
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 17)) /* load the vector number */
|
mov r0, #BSP_SS2RX
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_ss2tx:
|
check_ss2tx:
|
||||||
@@ -273,7 +273,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x0004
|
tst r6, #0x0004
|
||||||
beq check_utx2
|
beq check_utx2
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 18)) /* load the vector number */
|
mov r0, #BSP_SS2TX
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_utx2:
|
check_utx2:
|
||||||
@@ -285,7 +285,7 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x1000
|
tst r6, #0x1000
|
||||||
beq check_urx2
|
beq check_urx2
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 19)) /* load the vector number */
|
mov r0, #BSP_UTXINT2
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
check_urx2:
|
check_urx2:
|
||||||
@@ -297,15 +297,13 @@ MUST REMEMBER TO UNCOMMENT IF THIS HANDLER MOVES
|
|||||||
#endif
|
#endif
|
||||||
tst r6, #0x2000
|
tst r6, #0x2000
|
||||||
beq IRQ_NoInterrupt
|
beq IRQ_NoInterrupt
|
||||||
ldr r0, =(VECTOR_TABLE + (4 * 20)) /* load the vector number */
|
mov r0, #BSP_URXINT2
|
||||||
b get_handler
|
b get_handler
|
||||||
|
|
||||||
get_handler:
|
get_handler:
|
||||||
|
|
||||||
ldmia sp!,{r4, r5, r6}
|
ldmia sp!,{r4, r5, r6}
|
||||||
|
|
||||||
ldr r0, [r0] /* extract the IT handler @ */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* re-enable interrupts at processor level as the current
|
* re-enable interrupts at processor level as the current
|
||||||
* interrupt source is now masked via VEGA logic
|
* interrupt source is now masked via VEGA logic
|
||||||
@@ -316,12 +314,8 @@ get_handler:
|
|||||||
msr cpsr, r1
|
msr cpsr, r1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
stmdb sp!,{lr}
|
stmdb sp!,{lr}
|
||||||
ldr lr, =IRQ_return /* prepare the return from handler */
|
bl edb7312_interrupt_dispatch
|
||||||
|
|
||||||
mov pc, r0 /* EXECUTE INT HANDLER */
|
|
||||||
|
|
||||||
IRQ_return:
|
|
||||||
ldmia sp!,{lr}
|
ldmia sp!,{lr}
|
||||||
|
|
||||||
IRQ_NoInterrupt:
|
IRQ_NoInterrupt:
|
||||||
|
|||||||
@@ -1,123 +0,0 @@
|
|||||||
/*
|
|
||||||
* Cirrus EP7312 Intererrupt handler
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
|
|
||||||
*
|
|
||||||
* The license and distribution terms for this file may be
|
|
||||||
* found in the file LICENSE in this distribution or at
|
|
||||||
*
|
|
||||||
* http://www.rtems.com/license/LICENSE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*/
|
|
||||||
#include <irq.h>
|
|
||||||
#include <bsp.h>
|
|
||||||
#include <ep7312.h>
|
|
||||||
|
|
||||||
void BSP_rtems_irq_mngt_init(void)
|
|
||||||
{
|
|
||||||
long int_stat;
|
|
||||||
long *vectorTable;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
vectorTable = (long *) VECTOR_TABLE;
|
|
||||||
|
|
||||||
/* Initialize the vector table contents with default handler */
|
|
||||||
for (i=0; i<BSP_MAX_INT; i++) {
|
|
||||||
*(vectorTable + i) = (long)(default_int_handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* mask all interrupts */
|
|
||||||
*EP7312_INTMR1 = 0x0;
|
|
||||||
*EP7312_INTMR2 = 0x0;
|
|
||||||
*EP7312_INTMR3 = 0x0;
|
|
||||||
|
|
||||||
/* clear all pending interrupt status' */
|
|
||||||
int_stat = *EP7312_INTSR1;
|
|
||||||
if(int_stat & EP7312_INTR1_EXTFIQ)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_BLINT)
|
|
||||||
{
|
|
||||||
*EP7312_BLEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_WEINT)
|
|
||||||
{
|
|
||||||
*EP7312_TEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_MCINT)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_CSINT)
|
|
||||||
{
|
|
||||||
*EP7312_COEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_EINT1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_EINT2)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_EINT3)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_TC1OI)
|
|
||||||
{
|
|
||||||
*EP7312_TC1EOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_TC2OI)
|
|
||||||
{
|
|
||||||
*EP7312_TC2EOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_RTCMI)
|
|
||||||
{
|
|
||||||
*EP7312_RTCEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_TINT)
|
|
||||||
{
|
|
||||||
*EP7312_TEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_URXINT1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_UTXINT1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_UMSINT)
|
|
||||||
{
|
|
||||||
*EP7312_UMSEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR1_SSEOTI)
|
|
||||||
{
|
|
||||||
*EP7312_SYNCIO;
|
|
||||||
}
|
|
||||||
int_stat = *EP7312_INTSR1;
|
|
||||||
|
|
||||||
int_stat = *EP7312_INTSR2;
|
|
||||||
if(int_stat & EP7312_INTR2_KBDINT)
|
|
||||||
{
|
|
||||||
*EP7312_KBDEOI = 0xFFFFFFFF;
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR2_SS2RX)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR2_SS2TX)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR2_URXINT2)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
if(int_stat & EP7312_INTR2_UTXINT2)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
int_stat = *EP7312_INTSR2;
|
|
||||||
|
|
||||||
int_stat = *EP7312_INTSR3;
|
|
||||||
if(int_stat & EP7312_INTR2_DAIINT)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
int_stat = *EP7312_INTSR3;
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Cirrus EP7312 Intererrupt handler
|
* Cirrus EP7312 Intererrupt handler
|
||||||
*
|
*
|
||||||
|
* Copyright (c) 2010 embedded brains GmbH.
|
||||||
|
*
|
||||||
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
|
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
|
||||||
*
|
*
|
||||||
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
|
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
|
||||||
@@ -13,141 +15,171 @@
|
|||||||
*
|
*
|
||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bsp.h>
|
#include <bsp.h>
|
||||||
#include <irq.h>
|
#include <bsp/irq.h>
|
||||||
#include <rtems/score/thread.h>
|
#include <bsp/irq-generic.h>
|
||||||
#include <rtems/score/apiext.h>
|
|
||||||
#include <ep7312.h>
|
#include <ep7312.h>
|
||||||
|
|
||||||
/*
|
void edb7312_interrupt_dispatch(rtems_vector_number vector)
|
||||||
* This function check that the value given for the irq line
|
|
||||||
* is valid.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int isValidInterrupt(int irq)
|
|
||||||
{
|
{
|
||||||
if ( (irq < 0) || (irq > BSP_MAX_INT))
|
bsp_interrupt_handler_dispatch(vector);
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
|
||||||
* -------------------- RTEMS Single Irq Handler Mngt Routines ----------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
|
|
||||||
{
|
{
|
||||||
rtems_irq_hdl *HdlTable;
|
if(vector >= BSP_EXTFIQ && vector <= BSP_SSEOTI)
|
||||||
rtems_interrupt_level level;
|
|
||||||
|
|
||||||
if (!isValidInterrupt(irq->name)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Check if default handler is actually connected. If not issue an error.
|
|
||||||
*/
|
|
||||||
HdlTable = (rtems_irq_hdl *) VECTOR_TABLE;
|
|
||||||
if (*(HdlTable + irq->name) != default_int_handler) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
rtems_interrupt_disable(level);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* store the new handler
|
|
||||||
*/
|
|
||||||
*(HdlTable + irq->name) = irq->hdl;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* unmask interrupt
|
|
||||||
*/
|
|
||||||
if(irq->name >= BSP_EXTFIQ && irq->name <= BSP_SSEOTI)
|
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR1 and INTSR1 */
|
/* interrupt managed by INTMR1 and INTSR1 */
|
||||||
*EP7312_INTMR1 |= (1 << irq->name);
|
*EP7312_INTMR1 |= (1 << vector);
|
||||||
}
|
}
|
||||||
else if(irq->name >= BSP_KBDINT && irq->name <= BSP_SS2TX)
|
else if(vector >= BSP_KBDINT && vector <= BSP_SS2TX)
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR2 and INTSR2 */
|
/* interrupt managed by INTMR2 and INTSR2 */
|
||||||
*EP7312_INTMR2 |= (1 << (irq->name - 16));
|
*EP7312_INTMR2 |= (1 << (vector - 16));
|
||||||
}
|
}
|
||||||
else if(irq->name >= BSP_UTXINT2 && irq->name <= BSP_URXINT2)
|
else if(vector >= BSP_UTXINT2 && vector <= BSP_URXINT2)
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR2 and INTSR2 */
|
/* interrupt managed by INTMR2 and INTSR2 */
|
||||||
*EP7312_INTMR2 |= (1 << (irq->name - 7));
|
*EP7312_INTMR2 |= (1 << (vector - 7));
|
||||||
}
|
}
|
||||||
else if(irq->name == BSP_DAIINT)
|
else if(vector == BSP_DAIINT)
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR3 and INTSR3 */
|
/* interrupt managed by INTMR3 and INTSR3 */
|
||||||
*EP7312_INTMR3 |= (1 << (irq->name - 21));
|
*EP7312_INTMR3 |= (1 << (vector - 21));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return RTEMS_SUCCESSFUL;
|
||||||
* Enable interrupt on device
|
|
||||||
*/
|
|
||||||
if(irq->on)
|
|
||||||
{
|
|
||||||
irq->on(irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
rtems_interrupt_enable(level);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
|
rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
|
||||||
{
|
{
|
||||||
rtems_irq_hdl *HdlTable;
|
if(vector >= BSP_EXTFIQ && vector <= BSP_SSEOTI)
|
||||||
rtems_interrupt_level level;
|
|
||||||
|
|
||||||
if (!isValidInterrupt(irq->name)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Check if the handler is actually connected. If not issue an error.
|
|
||||||
*/
|
|
||||||
HdlTable = (rtems_irq_hdl *) VECTOR_TABLE;
|
|
||||||
if (*(HdlTable + irq->name) != irq->hdl) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
rtems_interrupt_disable(level);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* mask interrupt
|
|
||||||
*/
|
|
||||||
if(irq->name >= BSP_EXTFIQ && irq->name <= BSP_SSEOTI)
|
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR1 and INTSR1 */
|
/* interrupt managed by INTMR1 and INTSR1 */
|
||||||
*EP7312_INTMR1 &= ~(1 << irq->name);
|
*EP7312_INTMR1 &= ~(1 << vector);
|
||||||
}
|
}
|
||||||
else if(irq->name >= BSP_KBDINT && irq->name <= BSP_SS2TX)
|
else if(vector >= BSP_KBDINT && vector <= BSP_SS2TX)
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR2 and INTSR2 */
|
/* interrupt managed by INTMR2 and INTSR2 */
|
||||||
*EP7312_INTMR2 &= ~(1 << (irq->name - 16));
|
*EP7312_INTMR2 &= ~(1 << (vector - 16));
|
||||||
}
|
}
|
||||||
else if(irq->name >= BSP_UTXINT2 && irq->name <= BSP_URXINT2)
|
else if(vector >= BSP_UTXINT2 && vector <= BSP_URXINT2)
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR2 and INTSR2 */
|
/* interrupt managed by INTMR2 and INTSR2 */
|
||||||
*EP7312_INTMR2 &= ~(1 << (irq->name - 7));
|
*EP7312_INTMR2 &= ~(1 << (vector - 7));
|
||||||
}
|
}
|
||||||
else if(irq->name == BSP_DAIINT)
|
else if(vector == BSP_DAIINT)
|
||||||
{
|
{
|
||||||
/* interrupt managed by INTMR3 and INTSR3 */
|
/* interrupt managed by INTMR3 and INTSR3 */
|
||||||
*EP7312_INTMR3 &= ~(1 << (irq->name - 21));
|
*EP7312_INTMR3 &= ~(1 << (vector - 21));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return RTEMS_SUCCESSFUL;
|
||||||
* Disable interrupt on device
|
}
|
||||||
*/
|
|
||||||
if(irq->off)
|
rtems_status_code bsp_interrupt_facility_initialize(void)
|
||||||
irq->off(irq);
|
{
|
||||||
|
uint32_t int_stat = 0;
|
||||||
/*
|
|
||||||
* restore the default irq value
|
/* mask all interrupts */
|
||||||
*/
|
*EP7312_INTMR1 = 0x0;
|
||||||
*(HdlTable + irq->name) = default_int_handler;
|
*EP7312_INTMR2 = 0x0;
|
||||||
|
*EP7312_INTMR3 = 0x0;
|
||||||
rtems_interrupt_enable(level);
|
|
||||||
|
/* clear all pending interrupt status' */
|
||||||
return 1;
|
int_stat = *EP7312_INTSR1;
|
||||||
|
if(int_stat & EP7312_INTR1_EXTFIQ)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_BLINT)
|
||||||
|
{
|
||||||
|
*EP7312_BLEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_WEINT)
|
||||||
|
{
|
||||||
|
*EP7312_TEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_MCINT)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_CSINT)
|
||||||
|
{
|
||||||
|
*EP7312_COEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_EINT1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_EINT2)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_EINT3)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_TC1OI)
|
||||||
|
{
|
||||||
|
*EP7312_TC1EOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_TC2OI)
|
||||||
|
{
|
||||||
|
*EP7312_TC2EOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_RTCMI)
|
||||||
|
{
|
||||||
|
*EP7312_RTCEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_TINT)
|
||||||
|
{
|
||||||
|
*EP7312_TEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_URXINT1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_UTXINT1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_UMSINT)
|
||||||
|
{
|
||||||
|
*EP7312_UMSEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR1_SSEOTI)
|
||||||
|
{
|
||||||
|
*EP7312_SYNCIO;
|
||||||
|
}
|
||||||
|
int_stat = *EP7312_INTSR1;
|
||||||
|
|
||||||
|
int_stat = *EP7312_INTSR2;
|
||||||
|
if(int_stat & EP7312_INTR2_KBDINT)
|
||||||
|
{
|
||||||
|
*EP7312_KBDEOI = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR2_SS2RX)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR2_SS2TX)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR2_URXINT2)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if(int_stat & EP7312_INTR2_UTXINT2)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
int_stat = *EP7312_INTSR2;
|
||||||
|
|
||||||
|
int_stat = *EP7312_INTSR3;
|
||||||
|
if(int_stat & EP7312_INTR2_DAIINT)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
int_stat = *EP7312_INTSR3;
|
||||||
|
|
||||||
|
_CPU_ISR_install_vector(ARM_EXCEPTION_IRQ, arm_exc_interrupt, NULL);
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bsp_interrupt_handler_default(rtems_vector_number vector)
|
||||||
|
{
|
||||||
|
printk("spurious interrupt: %u\n", vector);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
* Cirrus EP7312 Intererrupt handler
|
* Cirrus EP7312 Intererrupt handler
|
||||||
*
|
*
|
||||||
|
* Copyright (c) 2010 embedded brains GmbH.
|
||||||
|
*
|
||||||
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
|
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
|
||||||
*
|
*
|
||||||
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
|
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
|
||||||
@@ -17,29 +19,14 @@
|
|||||||
#ifndef __IRQ_H__
|
#ifndef __IRQ_H__
|
||||||
#define __IRQ_H__
|
#define __IRQ_H__
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* define that can be useful (the values are just examples) */
|
|
||||||
#define VECTOR_TABLE 0x40
|
|
||||||
|
|
||||||
#ifndef __asm__
|
#ifndef __asm__
|
||||||
|
|
||||||
/*
|
|
||||||
* Include some preprocessor value also used by assember code
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <rtems/irq.h>
|
|
||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
|
#include <rtems/irq.h>
|
||||||
|
#include <rtems/irq-extension.h>
|
||||||
|
|
||||||
extern void default_int_handler(rtems_irq_hdl_param unused);
|
#endif /* __asm__ */
|
||||||
/*-------------------------------------------------------------------------+
|
|
||||||
| Constants
|
|
||||||
+--------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* enum of the possible interrupt sources */
|
|
||||||
typedef unsigned int rtems_irq_number;
|
|
||||||
/* int interrupt status/mask register 1 */
|
/* int interrupt status/mask register 1 */
|
||||||
#define BSP_EXTFIQ 0
|
#define BSP_EXTFIQ 0
|
||||||
#define BSP_BLINT 1
|
#define BSP_BLINT 1
|
||||||
@@ -67,23 +54,8 @@ typedef unsigned int rtems_irq_number;
|
|||||||
#define BSP_DAIINT 21
|
#define BSP_DAIINT 21
|
||||||
#define BSP_MAX_INT 22
|
#define BSP_MAX_INT 22
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------+
|
#define BSP_INTERRUPT_VECTOR_MIN 0
|
||||||
| Function Prototypes.
|
|
||||||
+--------------------------------------------------------------------------*/
|
|
||||||
/*
|
|
||||||
* ------------------- RTEMS Single Irq Handler Mngt Routines ----------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
#define BSP_INTERRUPT_VECTOR_MAX (BSP_MAX_INT - 1)
|
||||||
* function to initialize the interrupt for a specific BSP
|
|
||||||
*/
|
|
||||||
void BSP_rtems_irq_mngt_init();
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __asm__ */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __IRQ_H__ */
|
#endif /* __IRQ_H__ */
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
#include <sys/mbuf.h>
|
#include <sys/mbuf.h>
|
||||||
#include <irq.h>
|
#include <bsp/irq.h>
|
||||||
#include <libchip/cs8900.h>
|
#include <libchip/cs8900.h>
|
||||||
|
|
||||||
#define CS8900_BASE 0x20000300
|
#define CS8900_BASE 0x20000300
|
||||||
|
|||||||
@@ -73,7 +73,15 @@ $(PROJECT_INCLUDE)/uart.h: ../../arm/shared/comm/uart.h $(PROJECT_INCLUDE)/$(dir
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/uart.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/uart.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/uart.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/uart.h
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/irq.h: irq/irq.h $(PROJECT_INCLUDE)/$(dirstamp)
|
$(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/irq.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/irq.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/bsp/irq-info.h: ../../shared/include/irq-info.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-info.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-info.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/bsp/irq.h: irq/irq.h $(PROJECT_INCLUDE)/bsp/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq.h
|
||||||
|
|
||||||
|
|||||||
@@ -11,13 +11,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bsp.h>
|
#include <bsp.h>
|
||||||
|
#include <bsp/irq-generic.h>
|
||||||
#include <ep7312.h>
|
#include <ep7312.h>
|
||||||
#include <uart.h>
|
#include <uart.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function prototypes
|
* Function prototypes
|
||||||
*/
|
*/
|
||||||
extern void rtems_irq_mngt_init(void);
|
|
||||||
extern void rtems_exception_init_mngt(void);
|
extern void rtems_exception_init_mngt(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -45,7 +45,9 @@ void bsp_start_default( void )
|
|||||||
/*
|
/*
|
||||||
* Init rtems interrupt management
|
* Init rtems interrupt management
|
||||||
*/
|
*/
|
||||||
rtems_irq_mngt_init();
|
if (bsp_interrupt_initialize() != RTEMS_SUCCESSFUL) {
|
||||||
|
_CPU_Fatal_halt(0xe);
|
||||||
|
}
|
||||||
} /* bsp_start */
|
} /* bsp_start */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user