annotate packages/hal/powerpc/arch/current/tests/intr0.c @ 32:5af43b635655 ecos-sw-1999-08-18

Merge from eCos master repository on 1999-08-18-15:20:01-BST
author jlarmour
date Wed, 18 Aug 1999 15:33:44 +0000
parents 5f5102441818
children a3cc6665b684
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
116 CYG_ASSERT (count == verify_value, "Count wrong!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
117
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
118 // 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
119 if (42 <= count || 5 == pit_count) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
120 HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_PIT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
121 HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
122 HAL_INTERRUPT_MASK (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
123
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
124 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
125 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
126 count_actual_table[0],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
127 count_actual_table[1],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
128 count_actual_table[2],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
129 count_actual_table[3],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
130 count_actual_table[4] );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
131 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
132 tbr_actual_table[0],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
133 tbr_actual_table[1],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
134 tbr_actual_table[2],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
135 tbr_actual_table[3],
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
136 tbr_actual_table[4] );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
137 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138 if (42 == count && 5 == pit_count)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 CYG_TEST_PASS_FINISH("Intr 0 OK");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 CYG_TEST_FAIL_FINISH("Intr 0 Failed.");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 return Cyg_InterruptHANDLED;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 }
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 // TimeBase A ISR. Should be executing once.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 static cyg_uint32 isr_tba(CYG_ADDRWORD vector, CYG_ADDRWORD data)
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 CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
151
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
152 CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_TB_A == vector, "Wrong vector!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
153 CYG_ASSERT (ID_TBA == data, "Wrong data!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
154
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
155 HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
156
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
157 count = count * 3;
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 return Cyg_InterruptHANDLED;
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
162 // TimeBase B ISR. Should be executing once.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
163 static cyg_uint32 isr_tbb(CYG_ADDRWORD vector, CYG_ADDRWORD data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
164 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
165 CYG_UNUSED_PARAM(CYG_ADDRWORD, data);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
166
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
167 CYG_ASSERT (CYGNUM_HAL_INTERRUPT_SIU_TB_B == vector, "Wrong vector!");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
168 CYG_ASSERT (ID_TBB == data, "Wrong data!");
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 HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
171
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
172 count = count * 8;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
173
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
174 return Cyg_InterruptHANDLED;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
175 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
176
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
177 void intr0_main( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
178 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
179 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
180
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
181 #if 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
182 // 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
183 // machine check exception when writing to IMM_RTCSC. Smells a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
184 // bit like the "SIU4. Spurious External Bus Transaction Following
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
185 // 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
186 // time clock interrupts on level 0
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 // Still to do.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
189 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
190 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
191
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
192 // Run periodic timer interrupt on level 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
193 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
194 cyg_uint16 piscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
195
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
196 // Attach pit arbiter.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
197 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_LVL1,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
198 &hal_arbitration_isr_pit, ID_PIT, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
199 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_LVL1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
200
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
201 // Attach pit isr.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
202 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_PIT, &isr_pit,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
203 ID_PIT, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
204 HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_PIT, 1);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
205 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_PIT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
206
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 // Set period.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 HAL_WRITE_UINT32 (CYGARC_REG_IMM_PITC,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 (2*PIT_PERIOD) << CYGARC_REG_IMM_PITC_COUNT_SHIFT);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
212 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
213 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
214 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 // Enable.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 piscr |= CYGARC_REG_IMM_PISCR_PTE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr);
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
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
221 // Run timebase interrupts on level 2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 cyg_uint16 tbscr;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 cyg_uint32 tbl;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 // Attach tb arbiter.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_LVL2,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 &hal_arbitration_isr_tb, ID_TBA, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_LVL2);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
230
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 // Attach tb isrs.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_TB_A, &isr_tba,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 ID_TBA, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_TB_B, &isr_tbb,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 ID_TBB, 0);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_TB_A, 2);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_TB_A);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_TB_B);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 // Set reference A & B registers.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 CYGARC_MFTB (TBL_R, tbl);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 tbl += TB_PERIOD*3;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 HAL_WRITE_UINT32 (CYGARC_REG_IMM_TBREF0, tbl);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244 tbl += TB_PERIOD*4;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 HAL_WRITE_UINT32 (CYGARC_REG_IMM_TBREF1, tbl);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246
20
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
247 #ifdef DEBUG_PRINTFS
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
248 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
249 tbl - 7*TB_PERIOD,
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
250 tbl - 4*TB_PERIOD,
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
251 tbl - 0*TB_PERIOD );
5f5102441818 Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents: 2
diff changeset
252 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 // Enable.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254 HAL_READ_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 tbscr |= (CYGARC_REG_IMM_TBSCR_REFA | CYGARC_REG_IMM_TBSCR_REFB |
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 CYGARC_REG_IMM_TBSCR_TBE);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 tbscr |= CYGARC_REG_IMM_TBSCR_REFAE | CYGARC_REG_IMM_TBSCR_REFBE;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 HAL_WRITE_UINT16 (CYGARC_REG_IMM_TBSCR, tbscr);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262 HAL_ENABLE_INTERRUPTS();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 for (;;);
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 cyg_start( void )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 intr0_main();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 }
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 #else // ifdef CYG_HAL_POWERPC_MPC860
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275 externC void
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 cyg_start( void )
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 CYG_TEST_INIT();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
279 CYG_TEST_PASS_FINISH("N/A: Not a MPC860");
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 }
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 #endif // ifdef CYG_HAL_POWERPC_MPC860
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 // EOF intr0.c