annotate packages/hal/powerpc/arch/current/tests/intr0.c @ 40:a3cc6665b684 ecos-sw-1999-10-01

Merge from eCos master repository on 1999-10-01-07:47:04-BST
author jlarmour
date Fri, 01 Oct 1999 13:25:47 +0000
parents 5af43b635655
children c38311975d4f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 //=================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // intr0.c
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // Interrupt test 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //=================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
8 //####COPYRIGHTBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
9 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
10 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
11 // The contents of this file are subject to the Cygnus eCos Public License
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
12 // Version 1.0 (the "License"); you may not use this file except in
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
13 // compliance with the License. You may obtain a copy of the License at
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
14 // http://sourceware.cygnus.com/ecos
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
15 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
16 // Software distributed under the License is distributed on an "AS IS"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
18 // License for the specific language governing rights and limitations under
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
19 // the License.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
20 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
22 // September 30, 1998.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
23 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
24 // The Initial Developer of the Original Code is Cygnus. Portions created
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
26 // -------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
27 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
28 //####COPYRIGHTEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
29 //=================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
30 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
31 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
32 // Author(s): jskov
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
33 // Contributors: jskov
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
34 // Date: 1998-12-01
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
35 // Description: Simple test of MPC860 interrupt handling when the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
36 // kernel has not been configured. Uses timer interrupts.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
37 // Options:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
38 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
39
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
40 //#define DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
41 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
42 extern diag_printf( char *format, ... );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
43 #endif
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
44
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 #include <cyg/hal/ppc_regs.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 #include <cyg/hal/hal_intr.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 #include <cyg/infra/testcase.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 #if defined(CYG_HAL_POWERPC_MPC860)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 #undef CHECK(b)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57 #define CHECK(b) CYG_TEST_CHECK(b,#b)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
58
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59 // Can't rely on Cyg_Interrupt class being defined.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 #define Cyg_InterruptHANDLED 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 // This is the period between interrupts, measured in decrementer ticks.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 // Period must be longer than the time required for setting up all the
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64 // interrupt handlers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
65 #define PIT_PERIOD 5000
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
66
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 20
diff changeset
67 #ifdef CYG_HAL_POWERPC_MBX
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 20
diff changeset
68 #define TB_PERIOD (PIT_PERIOD*384) // PTA period is 15.36 uS
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 20
diff changeset
69 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
70 #define TB_PERIOD (PIT_PERIOD*32) // assuming 512/16 divisors
32
5af43b635655 Merge from eCos master repository on 1999-08-18-15:20:01-BST
jlarmour
parents: 20
diff changeset
71 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
72
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 #define ID_RTC_SEC 12345
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74 #define ID_RTC_ALR 23451
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
75 #define ID_PIT 34512
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
76 #define ID_TBA 45123
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
77 #define ID_TBB 51234
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
78
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
79 volatile cyg_uint32 count = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
80
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
81 // Time/PERIOD 0 1 2 3 4 5 6 7 8 9 10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
82 // Interrupt PIT TBA PIT PIT TBB PIT PIT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
83 // pit_count 0 0 0 1 1 2 2 3 3 4 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
84 // count 0 0 1 3 4 4 5 40 41 42
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
85
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
86 static cyg_uint32 count_verify_table[] = {1, 4, 5, 41, 42};
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
87 static int pit_count = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
88
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
89 // These are useful for debugging:
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
90 static cyg_uint32 count_actual_table[] = { -1, -1, -1, -1, -1};
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
91 static cyg_uint32 tbr_actual_table[] = { -1, -1, -1, -1, -1};
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
92
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
93 // Periodic timer ISR. Should be executing 5 times.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
94 static cyg_uint32 isr_pit(CYG_ADDRWORD vector, CYG_ADDRWORD data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
95 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
96 cyg_uint32 verify_value;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
97
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
98 CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
99
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
100 CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_PIT == vector, "Wrong vector!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 CYG_ASSERT (ID_PIT == data, "Wrong data!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_PIT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 count++;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
107 count_actual_table[pit_count] = count;
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
108 {
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
109 cyg_uint32 tbl;
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
110 CYGARC_MFTB (TBL_R, tbl);
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
111 tbr_actual_table[pit_count] = tbl;
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
112 }
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
113
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
114 verify_value = count_verify_table[pit_count++];
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
115
40
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
116 #ifdef DEBUG_PRINTFS
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
117 diag_printf( "ISR_PIT executed %d of 5\n", pit_count );
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
118 #endif
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
119
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 CYG_ASSERT (count == verify_value, "Count wrong!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 // End of test when count is 42. Mask interrupts and print PASS text.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123 if (42 <= count || 5 == pit_count) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
124 HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_PIT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
125 HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
126 HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
127
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
128 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
129 diag_printf( "INFO: Actual counts: %d %d %d %d %d\n",
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
130 count_actual_table[0],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
131 count_actual_table[1],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
132 count_actual_table[2],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
133 count_actual_table[3],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
134 count_actual_table[4] );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
135 diag_printf( "INFO: Actuals tbrs: %d %d %d %d %d\n",
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
136 tbr_actual_table[0],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
137 tbr_actual_table[1],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
138 tbr_actual_table[2],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
139 tbr_actual_table[3],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
140 tbr_actual_table[4] );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
141 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 if (42 == count && 5 == pit_count)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 CYG_TEST_PASS_FINISH("Intr 0 OK");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 CYG_TEST_FAIL_FINISH("Intr 0 Failed.");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 return Cyg_InterruptHANDLED;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
150
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151 // TimeBase A ISR. Should be executing once.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 static cyg_uint32 isr_tba(CYG_ADDRWORD vector, CYG_ADDRWORD data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154 CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156 CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_TB_A == vector, "Wrong vector!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 CYG_ASSERT (ID_TBA == data, "Wrong data!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
158
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
159 HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
160
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
161 count = count * 3;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162
40
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
163 #ifdef DEBUG_PRINTFS
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
164 diag_printf( "ISR_TBA executed\n" );
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
165 #endif
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
166
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 return Cyg_InterruptHANDLED;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
169
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
170 // TimeBase B ISR. Should be executing once.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171 static cyg_uint32 isr_tbb(CYG_ADDRWORD vector, CYG_ADDRWORD data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173 CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_TB_B == vector, "Wrong vector!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176 CYG_ASSERT (ID_TBB == data, "Wrong data!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180 count = count * 8;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181
40
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
182 #ifdef DEBUG_PRINTFS
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
183 diag_printf( "ISR_TBB executed\n" );
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
184 #endif
a3cc6665b684 Merge from eCos master repository on 1999-10-01-07:47:04-BST
jlarmour
parents: 32
diff changeset
185
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
186 return Cyg_InterruptHANDLED;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
187 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
188
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 void intr0_main( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 #if 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 // The A.3 revision of the CPU I'm using at the moment generates a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195 // machine check exception when writing to IMM_RTCSC. Smells a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 // bit like the "SIU4. Spurious External Bus Transaction Following
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 // PLPRCR Write." CPU errata. Have to find out for sure. Run real
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 // time clock interrupts on level 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200 // Still to do.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 // Run periodic timer interrupt on level 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206 cyg_uint16 piscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 // Attach pit arbiter.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_LVL1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 &hal_arbitration_isr_pit, ID_PIT, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_LVL1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 // Attach pit isr.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_PIT, &isr_pit,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 ID_PIT, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_PIT, 1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_PIT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
220 // Set period.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 HAL_WRITE_UINT32 (CYGARC_REG_IMM_PITC,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 (2*PIT_PERIOD) << CYGARC_REG_IMM_PITC_COUNT_SHIFT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
224 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
225 diag_printf( "PIT set to %d\n", 2*PIT_PERIOD );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
226 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 // Enable.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 piscr |= CYGARC_REG_IMM_PISCR_PTE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 // Run timebase interrupts on level 2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 cyg_uint32 tbl;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 // Attach tb arbiter.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_LVL2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 &hal_arbitration_isr_tb, ID_TBA, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_LVL2);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 // Attach tb isrs.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_TB_A, &isr_tba,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 ID_TBA, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_TB_B, &isr_tbb,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 ID_TBB, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_TB_A, 2);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
249 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
250 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 // Set reference A & B registers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 CYGARC_MFTB (TBL_R, tbl);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 tbl += TB_PERIOD*3;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 HAL_WRITE_UINT32 (CYGARC_REG_IMM_TBREF0, tbl);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 tbl += TB_PERIOD*4;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 HAL_WRITE_UINT32 (CYGARC_REG_IMM_TBREF1, tbl);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
259 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
260 diag_printf( "TB initial %d, !1 %d !2 %d\n",
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
261 tbl - 7*TB_PERIOD,
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
262 tbl - 4*TB_PERIOD,
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
263 tbl - 0*TB_PERIOD );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
264 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 // Enable.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 tbscr |= (CYGARC_REG_IMM_TBSCR_REFA | CYGARC_REG_IMM_TBSCR_REFB |
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 CYGARC_REG_IMM_TBSCR_TBE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 tbscr |= CYGARC_REG_IMM_TBSCR_REFAE | CYGARC_REG_IMM_TBSCR_REFBE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 HAL_ENABLE_INTERRUPTS();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 for (;;);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 intr0_main();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 #else // ifdef CYG_HAL_POWERPC_MPC860
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 CYG_TEST_PASS_FINISH("N/A: Not a MPC860");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
294 #endif // ifdef CYG_HAL_POWERPC_MPC860
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
295
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 // EOF intr0.c