summaryrefslogtreecommitdiff
path: root/board/altera/dk1s10/vectors.S
blob: 226f65bb536fc3efea12303dcfb8b769a38a7b61 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 * (C) Copyright 2003, Psyent Corporation <www.psyent.com>
 * Scott McNutt <smcnutt@psyent.com>
 * Stephan Linz <linz@li-pro.net>
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#include <config.h>


/*************************************************************************
 * Exception Vector Table
 *
 * This could have gone in the cpu soure tree, but the whole point of
 * Nios is customization -- and polluting the cpu source tree with
 * board-specific ifdef's really defeats the purpose, no? With this in
 * the board-specific tree, each board has the freedom to organize
 * vectors/traps, etc anyway it wants. The init code copies this table
 * to the proper location.
 *
 * Each board can do what it likes here. But there are four "standard"
 * handlers availble:
 *
 *	_cwp_lolimit	-Handles register window underflows.
 *	_cwp_hilimit	-Handles register window overflows.
 *	_timebase_int	-Increments the timebase.
 *	_def_xhandler	-Default exception handler.
 *
 * _timebase_int handles a Nios Timer interrupt and increments the
 * timestamp used for the get_timer(), reset_timer(), etc. routines. It
 * expects the timer to be configured like the standard-32 low priority
 * timer.
 *
 * _def_xhandler dispatches exceptions/traps via the external_interrupt()
 * routine. This lets you use the irq_install_handler() and handle your
 * interrupts/traps with code written in C.
 ************************************************************************/

	.data
	.global _vectors
	.align	4
_vectors:

#if	defined(CONFIG_SYS_NIOS_CPU_OCI_BASE)
	/* OCI does the reset job */
	.long	_def_xhandler@h		/* Vector 0  - NMI / Reset */
#else
	/* there is no OCI, so we have to do a direct reset jump here */
	.long	CONFIG_SYS_NIOS_CPU_RST_VECT	/* Vector 0  - Reset to GERMS */
#endif
	.long	_cwp_lolimit@h		/* Vector 1  - underflow */
	.long	_cwp_hilimit@h		/* Vector 2  - overflow	*/

	.long	_def_xhandler@h		/* Vector 3 - GNUPro debug */
	.long	_def_xhandler@h		/* Vector 4 - GNUPro debug */
	.long	_def_xhandler@h		/* Vector 5 - GNUPro debug */
	.long	_def_xhandler@h		/* Vector 6 - future reserved */
	.long	_def_xhandler@h		/* Vector 7 - future reserved */
	.long	_def_xhandler@h		/* Vector 8 - future reserved */
	.long	_def_xhandler@h		/* Vector 9 - future reserved */
	.long	_def_xhandler@h		/* Vector 10 - future reserved */
	.long	_def_xhandler@h		/* Vector 11 - future reserved */
	.long	_def_xhandler@h		/* Vector 12 - future reserved */
	.long	_def_xhandler@h		/* Vector 13 - future reserved */
	.long	_def_xhandler@h		/* Vector 14 - future reserved */
	.long	_def_xhandler@h		/* Vector 15 - future reserved */
#if	(CONFIG_SYS_NIOS_TMRIRQ == 16)
	.long	_timebase_int@h		/* Vector 16 - lopri timer*/
#else
	.long	_def_xhandler@h		/* Vector 16 */
#endif
	.long	_def_xhandler@h		/* Vector 17 */
	.long	_def_xhandler@h		/* Vector 18 */
	.long	_def_xhandler@h		/* Vector 19 */
	.long	_def_xhandler@h		/* Vector 20 */
	.long	_def_xhandler@h		/* Vector 21 */
	.long	_def_xhandler@h		/* Vector 22 */
	.long	_def_xhandler@h		/* Vector 23 */
	.long	_def_xhandler@h		/* Vector 24 */
	.long	_def_xhandler@h		/* Vector 25 */
	.long	_def_xhandler@h		/* Vector 26 */
	.long	_def_xhandler@h		/* Vector 27 */
	.long	_def_xhandler@h		/* Vector 28 */
	.long	_def_xhandler@h		/* Vector 29 */
	.long	_def_xhandler@h		/* Vector 30 */
	.long	_def_xhandler@h		/* Vector 31 */
	.long	_def_xhandler@h		/* Vector 32 */
	.long	_def_xhandler@h		/* Vector 33 */
	.long	_def_xhandler@h		/* Vector 34 */
	.long	_def_xhandler@h		/* Vector 35 */
	.long	_def_xhandler@h		/* Vector 36 */
	.long	_def_xhandler@h		/* Vector 37 */
	.long	_def_xhandler@h		/* Vector 38 */
	.long	_def_xhandler@h		/* Vector 39 */
	.long	_def_xhandler@h		/* Vector 40 */
	.long	_def_xhandler@h		/* Vector 41 */
	.long	_def_xhandler@h		/* Vector 42 */
	.long	_def_xhandler@h		/* Vector 43 */
	.long	_def_xhandler@h		/* Vector 44 */
	.long	_def_xhandler@h		/* Vector 45 */
	.long	_def_xhandler@h		/* Vector 46 */
	.long	_def_xhandler@h		/* Vector 47 */
	.long	_def_xhandler@h		/* Vector 48 */
	.long	_def_xhandler@h		/* Vector 49 */
#if	(CONFIG_SYS_NIOS_TMRIRQ == 50)
	.long	_timebase_int@h		/* Vector 50 - lopri timer*/
#else
	.long	_def_xhandler@h		/* Vector 50 */
#endif
	.long	_def_xhandler@h		/* Vector 51 */
	.long	_def_xhandler@h		/* Vector 52 */
	.long	_def_xhandler@h		/* Vector 53 */
	.long	_def_xhandler@h		/* Vector 54 */
	.long	_def_xhandler@h		/* Vector 55 */
	.long	_def_xhandler@h		/* Vector 56 */
	.long	_def_xhandler@h		/* Vector 57 */
	.long	_def_xhandler@h		/* Vector 58 */
	.long	_def_xhandler@h		/* Vector 59 */
	.long	_def_xhandler@h		/* Vector 60 */
	.long	_def_xhandler@h		/* Vector 61 */
	.long	_def_xhandler@h		/* Vector 62 */
	.long	_def_xhandler@h		/* Vector 63 */