RTEMS  5.0.0
tm27.h
Go to the documentation of this file.
1 
7 /*
8  * COPYRIGHT (c) 2006.
9  * Aeroflex Gaisler AB.
10  *
11  * The license and distribution terms for this file may be
12  * found in the file LICENSE in this distribution or at
13  * http://www.rtems.org/license/LICENSE.
14  */
15 
16 #ifndef _RTEMS_TMTEST27
17 #error "This is an RTEMS internal file you must not include directly."
18 #endif
19 
20 #ifndef __tm27_h
21 #define __tm27_h
22 
23 /*
24  * Define the interrupt mechanism for Time Test 27
25  *
26  * NOTE: Since the interrupt code for the SPARC supports both synchronous
27  * and asynchronous trap handlers, support for testing with both
28  * is included.
29  */
30 
31 #define ERC32_BSP_USE_SYNCHRONOUS_TRAP 0
32 
33 /*
34  * The synchronous trap is an arbitrarily chosen software trap.
35  */
36 
37 #if (ERC32_BSP_USE_SYNCHRONOUS_TRAP == 1)
38 
39 #define TEST_VECTOR SPARC_SYNCHRONOUS_TRAP( 0x90 )
40 
41 #define MUST_WAIT_FOR_INTERRUPT 1
42 
43 #define Install_tm27_vector( handler ) \
44  set_vector( (handler), TEST_VECTOR, 1 );
45 
46 #define Cause_tm27_intr() \
47  __asm__ volatile( "ta 0x10; nop " );
48 
49 #define Clear_tm27_intr() /* empty */
50 
51 #define Lower_tm27_intr() /* empty */
52 
53 /*
54  * The asynchronous trap is an arbitrarily chosen ERC32 interrupt source.
55  */
56 
57 #else /* use a regular asynchronous trap */
58 
59 #define TEST_INTERRUPT_SOURCE ERC32_INTERRUPT_EXTERNAL_1
60 #define TEST_INTERRUPT_SOURCE2 (ERC32_INTERRUPT_EXTERNAL_1+1)
61 #define TEST_VECTOR ERC32_TRAP_TYPE( TEST_INTERRUPT_SOURCE )
62 #define TEST_VECTOR2 ERC32_TRAP_TYPE( TEST_INTERRUPT_SOURCE2 )
63 
64 #define MUST_WAIT_FOR_INTERRUPT 1
65 
66 #define Install_tm27_vector( handler ) \
67  set_vector( (handler), TEST_VECTOR, 1 ); \
68  set_vector( (handler), TEST_VECTOR2, 1 );
69 
70 #define Cause_tm27_intr() \
71  do { \
72  ERC32_Force_interrupt( TEST_INTERRUPT_SOURCE+(Interrupt_nest>>1) ); \
73  nop(); \
74  nop(); \
75  nop(); \
76  } while (0)
77 
78 #define Clear_tm27_intr() \
79  ERC32_Clear_interrupt( TEST_INTERRUPT_SOURCE )
80 
81 #define Lower_tm27_intr() /* empty */
82 
83 #endif
84 
85 #endif