intvects.c
1 /*
2  * $Id: intvects.c,v 1.18 2008/01/06 21:34:16 joerg_wunsch Exp $
3  *
4  ****************************************************************************
5  *
6  * simulavr - A simulator for the Atmel AVR family of microcontrollers.
7  * Copyright (C) 2001, 2002, 2003, 2004 Theodore A. Roth
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  *
23  ****************************************************************************
24  */
25 
26 #include <config.h>
27 
28 #include <stdio.h>
29 #include <stdlib.h>
30 
31 #include "intvects.h"
32 
33 /****************************************************************************\
34  *
35  * Interrupt Vector Tables:
36  *
37  * Since each device could have a different set of available interrupts, the
38  * following tables map all interrupts to the addr to jump to when the
39  * interrupt happens. If the device doesn't support an interrupt, the table
40  * will contain a NULL entry. Only one table will be installed into the core
41  * for a given device.
42  *
43  \****************************************************************************/
44 
45 /* *INDENT-OFF* */
46 
47 /*
48  * Vector Table for devices:
49  * at90s1200
50  */
51 static IntVectTable vtab_at90s1200 = {
52  .RESET = { "IRQ_RESET",
53  0x00, 0x00, NO_BIT, NO_BIT },
54  .INT0 = { "IRQ_INT0",
55  0x01, 0x00, { 0x5b, 1<<6 }, NO_BIT },
56  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
57  0x02, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
58  .ANA_COMP = { "IRQ_ANA_COMP",
59  0x03, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } }
60 };
61 
62 /*
63  * Vector Table for devices:
64  * at90s2313
65  */
66 static IntVectTable vtab_at90s2313 = {
67  .RESET = { "IRQ_RESET",
68  0x00, 0x00, NO_BIT, NO_BIT },
69  .INT0 = { "IRQ_INT0",
70  0x01, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
71  .INT1 = { "IRQ_INT1",
72  0x02, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
73  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
74  0x03, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
75  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
76  0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
77  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
78  0x05, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
79  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
80  0x06, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
81  .UART_RX = { "IRQ_UART_RX",
82  0x07, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
83  .UART_UDRE = { "IRQ_UART_UDRE",
84  0x08, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
85  .UART_TX = { "IRQ_UART_TX",
86  0x09, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
87  .ANA_COMP = { "IRQ_ANA_COMP",
88  0x0a, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } }
89 };
90 
91 /*
92  * Vector Table for devices:
93  * at90s4414, at90s8515
94  */
95 static IntVectTable vtab_at90s4414 = {
96  .RESET = { "IRQ_RESET",
97  0x00, 0x00, NO_BIT, NO_BIT },
98  .INT0 = { "IRQ_INT0",
99  0x01, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
100  .INT1 = { "IRQ_INT1",
101  0x02, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
102  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
103  0x03, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
104  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
105  0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
106  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
107  0x05, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
108  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
109  0x06, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
110  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
111  0x07, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
112  .SPI_STC = { "IRQ_SPI_STC",
113  0x08, 0x00, { 0x2d, 1<<7 }, NO_BIT },
114  .UART_RX = { "IRQ_UART_RX",
115  0x09, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
116  .UART_UDRE = { "IRQ_UART_UDRE",
117  0x0a, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
118  .UART_TX = { "IRQ_UART_TX",
119  0x0b, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
120  .ANA_COMP = { "IRQ_ANA_COMP",
121  0x0c, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } }
122 };
123 
124 /*
125  * Vector Table for devices:
126  * atmega8
127  */
128 
129 static IntVectTable vtab_atmega8 = {
130  .RESET = { "IRQ_RESET",
131  0x00, 0x00, NO_BIT, NO_BIT },
132  .INT0 = { "IRQ_INT0",
133  0x01, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
134  .INT1 = { "IRQ_INT1",
135  0x02, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
136  .TIMER2_COMP = { "IRQ_TIMER2_COMP",
137  0x03, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
138  .TIMER2_OVF = { "IRQ_TIMER2_OVF",
139  0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
140  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
141  0x05, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
142  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
143  0x06, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
144  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
145  0x07, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
146  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
147  0x08, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
148  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
149  0x09, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
150  .SPI_STC = { "IRQ_SPI_STC",
151  0x0a, 0x00, { 0x2d, 1<<7 }, NO_BIT },
152  .UART_RX = { "IRQ_UART_RX",
153  0x0b, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
154  .UART_UDRE = { "IRQ_UART_UDRE",
155  0x0c, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
156  .UART_TX = { "IRQ_UART_TX",
157  0x0d, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
158  .ADC = { "IRQ_ADC",
159  0x0e, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
160  .EE_READY = { "IRQ_EE_READY",
161  0x0f, 0x00, { 0x3c, 1<<3 }, NO_BIT },
162  .ANA_COMP = { "IRQ_ANA_COMP",
163  0x10, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
164  .TWI = { "IRQ_TWI",
165  0x11, 0x00, { 0x56, 1<<0 }, { 0x56, 1<<7 } },
166  .SPM_READY = { "IRQ_SPM_READY",
167  0x12, 0x00, { 0x57, 1<<7 }, NO_BIT }
168 };
169 
170 
171 
172 /*
173  * Vector Table for devices:
174  * atmega16
175  */
176 
177 static IntVectTable vtab_atmega16 = {
178  .RESET = { "IRQ_RESET",
179  0x00, 0x00, NO_BIT, NO_BIT },
180  .INT0 = { "IRQ_INT0",
181  0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
182  .INT1 = { "IRQ_INT1",
183  0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
184  .TIMER2_COMP = { "IRQ_TIMER2_COMP",
185  0x06, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
186  .TIMER2_OVF = { "IRQ_TIMER2_OVF",
187  0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
188  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
189  0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
190  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
191  0x0c, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
192  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
193  0x0e, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
194  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
195  0x10, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
196  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
197  0x12, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
198  .SPI_STC = { "IRQ_SPI_STC",
199  0x14, 0x00, { 0x2d, 1<<7 }, NO_BIT },
200  .UART_RX = { "IRQ_UART_RX",
201  0x16, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
202  .UART_UDRE = { "IRQ_UART_UDRE",
203  0x18, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
204  .UART_TX = { "IRQ_UART_TX",
205  0x1a, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
206  .ADC = { "IRQ_ADC",
207  0x1c, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
208  .EE_READY = { "IRQ_EE_READY",
209  0x1e, 0x00, { 0x3c, 1<<3 }, NO_BIT },
210  .ANA_COMP = { "IRQ_ANA_COMP",
211  0x20, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
212  .TWI = { "IRQ_TWI",
213  0x22, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<7 } },
214  .INT2 = { "IRQ_INT2",
215  0x24, 0x00, { 0x5b, 1<<5 }, { 0x5a, 1<<5 } },
216  .TIMER0_COMP = { "IRQ_TIMER0_COMP",
217  0x26, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
218  .SPM_READY = { "IRQ_SPM_READY",
219  0x28, 0x00, { 0x57, 1<<7 }, NO_BIT }
220 };
221 
222 /*
223  * Vector Table for devices:
224  * atmega32
225  */
226 
227 static IntVectTable vtab_atmega32 = {
228  .RESET = { "IRQ_RESET",
229  0x00, 0x00, NO_BIT, NO_BIT },
230  .INT0 = { "IRQ_INT0",
231  0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
232  .INT1 = { "IRQ_INT1",
233  0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
234  .TIMER2_COMP = { "IRQ_TIMER2_COMP",
235  0x06, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
236  .TIMER2_OVF = { "IRQ_TIMER2_OVF",
237  0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
238  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
239  0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
240  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
241  0x0c, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
242  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
243  0x0e, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
244  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
245  0x10, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
246  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
247  0x12, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
248  .SPI_STC = { "IRQ_SPI_STC",
249  0x14, 0x00, { 0x2d, 1<<7 }, NO_BIT },
250  .UART_RX = { "IRQ_UART_RX",
251  0x16, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
252  .UART_UDRE = { "IRQ_UART_UDRE",
253  0x18, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
254  .UART_TX = { "IRQ_UART_TX",
255  0x1a, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
256  .ADC = { "IRQ_ADC",
257  0x1c, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
258  .EE_READY = { "IRQ_EE_READY",
259  0x1e, 0x00, { 0x3c, 1<<3 }, NO_BIT },
260  .ANA_COMP = { "IRQ_ANA_COMP",
261  0x20, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
262  .TWI = { "IRQ_TWI",
263  0x22, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<7 } },
264  .INT2 = { "IRQ_INT2",
265  0x24, 0x00, { 0x5b, 1<<5 }, { 0x5a, 1<<5 } },
266  .TIMER0_COMP = { "IRQ_TIMER0_COMP",
267  0x26, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
268  .SPM_READY = { "IRQ_SPM_READY",
269  0x28, 0x00, { 0x57, 1<<7 }, NO_BIT }
270 };
271 
272 
273 /*
274  * Vector Table for devices:
275  * atmega103
276  */
277 
278 static IntVectTable vtab_atmega103 = {
279  .RESET = { "IRQ_RESET",
280  0x00, 0x00, NO_BIT, NO_BIT },
281  .INT0 = { "IRQ_INT0",
282  0x02, 0x00, { 0x59, 1<<0 }, NO_BIT },
283  .INT1 = { "IRQ_INT1",
284  0x04, 0x00, { 0x59, 1<<1 }, NO_BIT },
285  .INT2 = { "IRQ_INT2",
286  0x06, 0x00, { 0x59, 1<<2 }, NO_BIT },
287  .INT3 = { "IRQ_INT3",
288  0x08, 0x00, { 0x59, 1<<3 }, NO_BIT },
289  .INT4 = { "IRQ_INT4",
290  0x0a, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
291  .INT5 = { "IRQ_INT5",
292  0x0c, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
293  .INT6 = { "IRQ_INT6",
294  0x0e, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
295  .INT7 = { "IRQ_INT7",
296  0x10, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
297  .TIMER2_COMP = { "IRQ_TIMER2_COMP",
298  0x12, 0x00, { 0x57, 1<<7 }, { 0x56, 1<<7 } },
299  .TIMER2_OVF = { "IRQ_TIMER2_OVF",
300  0x14, 0x00, { 0x57, 1<<6 }, { 0x56, 1<<6 } },
301  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
302  0x16, 0x00, { 0x57, 1<<5 }, { 0x56, 1<<5 } },
303  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
304  0x18, 0x00, { 0x57, 1<<4 }, { 0x56, 1<<4 } },
305  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
306  0x1a, 0x00, { 0x57, 1<<3 }, { 0x56, 1<<3 } },
307  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
308  0x1c, 0x00, { 0x57, 1<<2 }, { 0x56, 1<<2 } },
309  .TIMER0_COMP = { "IRQ_TIMER0_COMP",
310  0x1e, 0x00, { 0x57, 1<<1 }, { 0x56, 1<<1 } },
311  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
312  0x20, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<0 } },
313  .SPI_STC = { "IRQ_SPI_STC",
314  0x22, 0x00, { 0x2d, 1<<7 }, NO_BIT },
315  .UART_RX = { "IRQ_UART_RX",
316  0x24, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
317  .UART_UDRE = { "IRQ_UART_UDRE",
318  0x26, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
319  .UART_TX = { "IRQ_UART_TX",
320  0x28, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
321  .ADC = { "IRQ_ADC",
322  0x2a, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
323  .ANA_COMP = { "IRQ_ANA_COMP",
324  0x2e, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
325  .EE_READY = { "IRQ_EE_READY",
326  0x2c, 0x00, { 0x3c, 1<<3 }, NO_BIT }
327 };
328 
329 /*
330  * Vector Table for devices:
331  * atmega128
332  */
333 
334 /* Note that the mega128 has BOOTRST and IVSEL fuses which can be used to
335  change the interrupt vectors. If used, the new vectors are just the
336  following plus some Boot Reset Address. This could be implemented just as
337  we vector to handler. */
338 
339 /* Note that the vectors address for mega128 are two insn's. This is needed
340  since they can use jmp (32-bit) insn at the vector address. */
341 
342 static IntVectTable vtab_atmega128 = {
343  .RESET = { "IRQ_RESET",
344  0x00, 0x00, NO_BIT, NO_BIT },
345  .INT0 = { "IRQ_INT0",
346  0x02, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
347  .INT1 = { "IRQ_INT1",
348  0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
349  .INT2 = { "IRQ_INT2",
350  0x06, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
351  .INT3 = { "IRQ_INT3",
352  0x08, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
353  .INT4 = { "IRQ_INT4",
354  0x0a, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
355  .INT5 = { "IRQ_INT5",
356  0x0c, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
357  .INT6 = { "IRQ_INT6",
358  0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
359  .INT7 = { "IRQ_INT7",
360  0x10, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
361  .TIMER2_COMP = { "IRQ_TIMER2_COMP",
362  0x12, 0x00, { 0x57, 1<<7 }, { 0x56, 1<<7 } },
363  .TIMER2_OVF = { "IRQ_TIMER2_OVF",
364  0x14, 0x00, { 0x57, 1<<6 }, { 0x56, 1<<6 } },
365  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
366  0x16, 0x00, { 0x57, 1<<5 }, { 0x56, 1<<5 } },
367  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
368  0x18, 0x00, { 0x57, 1<<4 }, { 0x56, 1<<4 } },
369  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
370  0x1a, 0x00, { 0x57, 1<<3 }, { 0x56, 1<<3 } },
371  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
372  0x1c, 0x00, { 0x57, 1<<2 }, { 0x56, 1<<2 } },
373  .TIMER0_COMP = { "IRQ_TIMER0_COMP",
374  0x1e, 0x00, { 0x57, 1<<1 }, { 0x56, 1<<1 } },
375  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
376  0x20, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<0 } },
377  .SPI_STC = { "IRQ_SPI_STC",
378  0x22, 0x00, { 0x2d, 1<<7 }, NO_BIT },
379  .USART0_RX = { "IRQ_USART0_RX",
380  0x24, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
381  .USART0_UDRE = { "IRQ_USART0_UDRE",
382  0x26, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
383  .USART0_TX = { "IRQ_USART0_TX",
384  0x28, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
385  .ADC = { "IRQ_ADC",
386  0x2a, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
387  .EE_READY = { "IRQ_EE_READY",
388  0x2c, 0x00, { 0x3c, 1<<3 }, NO_BIT },
389  .ANA_COMP = { "IRQ_ANA_COMP",
390  0x2e, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
391  .TIMER1_COMPC = { "IRQ_TIMER1_COMPC",
392  0x30, 0x00, { 0x7d, 1<<0 }, { 0x7c, 1<<0 } },
393  .TIMER3_CAPT = { "IRQ_TIMER3_CAPT",
394  0x32, 0x00, { 0x7d, 1<<5 }, { 0x7c, 1<<5 } },
395  .TIMER3_COMPA = { "IRQ_TIMER3_COMPA",
396  0x34, 0x00, { 0x7d, 1<<4 }, { 0x7c, 1<<4 } },
397  .TIMER3_COMPB = { "IRQ_TIMER3_COMPB",
398  0x36, 0x00, { 0x7d, 1<<3 }, { 0x7c, 1<<3 } },
399  .TIMER3_COMPC = { "IRQ_TIMER3_COMPC",
400  0x38, 0x00, { 0x7d, 1<<1 }, { 0x7c, 1<<1 } },
401  .TIMER3_OVF = { "IRQ_TIMER3_OVF",
402  0x3a, 0x00, { 0x7d, 1<<2 }, { 0x7c, 1<<2 } },
403  .USART1_RX = { "IRQ_USART1_RX",
404  0x3c, 0x00, { 0x9a, 1<<7 }, { 0x9b, 1<<7 } },
405  .USART1_UDRE = { "IRQ_USART1_UDRE",
406  0x3e, 0x00, { 0x9a, 1<<5 }, { 0x9b, 1<<5 } },
407  .USART1_TX = { "IRQ_USART1_TX",
408  0x40, 0x00, { 0x9a, 1<<6 }, { 0x9b, 1<<6 } },
409  .TWI = { "IRQ_TWI",
410  0x42, 0x00, { 0x74, 1<<0 }, { 0x74, 1<<7 } },
411  .SPM_READY = { "IRQ_SPM_READY",
412  0x44, 0x00, { 0x68, 1<<7 }, NO_BIT }
413 };
414 
415 /* supports 355, 353, 351
416  NOTE: The vector addresses are not sequential. */
417 static IntVectTable vtab_at43usb355 = {
418  .RESET = { "IRQ_RESET",
419  0x00, 0x00, NO_BIT, NO_BIT },
420  .INT0 = { "IRQ_INT0",
421  0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
422  .INT1 = { "IRQ_INT1",
423  0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
424  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
425  0x06, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
426  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
427  0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
428  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
429  0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
430  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
431  0x0c, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
432  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
433  0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
434  .SPI_STC = { "IRQ_SPI_STC",
435  0x10, 0x00, { 0x2d, 1<<7 }, NO_BIT },
436  .ADC = { "IRQ_ADC",
437  0x16, 0x00, { 0x27, 1<<3 }, { 0x27, 1<<4 } },
438  .USB_HW = { "IRQ_USB_HW",
439  0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
440 };
441 
442 /* supports 320 */
443 static IntVectTable vtab_at43usb320 = {
444  .RESET = { "IRQ_RESET",
445  0x00, 0x00, NO_BIT, NO_BIT },
446  .INT0 = { "IRQ_INT0",
447  0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
448  .INT1 = { "IRQ_INT1",
449  0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
450  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
451  0x06, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
452  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
453  0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
454  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
455  0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
456  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
457  0x0c, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
458  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
459  0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
460  .SPI_STC = { "IRQ_SPI_STC",
461  0x10, 0x00, { 0x2d, 1<<7 }, NO_BIT },
462  .UART_RX = { "IRQ_UART_RX",
463  0x12, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
464  .UART_UDRE = { "IRQ_UART_UDRE",
465  0x14, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
466  .UART_TX = { "IRQ_UART_TX",
467  0x16, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
468  .USB_HW = { "IRQ_USB",
469  0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
470 };
471 
472 /* supports 325
473  NOTE: The vector addresses are not sequential. */
474 static IntVectTable vtab_at43usb325 = {
475  .RESET = { "IRQ_RESET",
476  0x00, 0x00, NO_BIT, NO_BIT },
477  .INT0 = { "IRQ_INT0",
478  0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
479  .INT1 = { "IRQ_INT1",
480  0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
481  .TIMER1_CAPT = { "IRQ_TIMER1_CAPT",
482  0x06, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
483  .TIMER1_COMPA = { "IRQ_TIMER1_COMPA",
484  0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
485  .TIMER1_COMPB = { "IRQ_TIMER1_COMPB",
486  0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
487  .TIMER1_OVF = { "IRQ_TIMER1_OVF",
488  0x0c, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
489  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
490  0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
491  .USB_HW = { "IRQ_USB_HW",
492  0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
493 };
494 
495 /* supports 326
496  NOTE: The vector addresses are not sequential. */
497 static IntVectTable vtab_at43usb326 = {
498  .RESET = { "IRQ_RESET",
499  0x00, 0x00, NO_BIT, NO_BIT },
500  .INT0 = { "IRQ_INT0",
501  0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
502  .TIMER0_OVF = { "IRQ_TIMER0_OVF",
503  0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
504  .USB_HW = { "IRQ_USB_HW",
505  0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
506 };
507 
508 /* *INDENT-ON* */
509 
510 /*
511  * Vector Table Lookup List.
512  *
513  * Maps a _vector_table_name to a device vector table.
514  */
515 IntVectTable *global_vtable_list[] = {
516  &vtab_at90s1200,
517  &vtab_at90s2313,
518  &vtab_at90s4414,
519  &vtab_atmega8,
520  &vtab_atmega16,
521  &vtab_atmega32,
522  &vtab_atmega103,
523  &vtab_atmega128,
524  &vtab_at43usb355,
525  &vtab_at43usb320,
526  &vtab_at43usb325,
527  &vtab_at43usb326,
528  NULL
529 };

Automatically generated by Doxygen 1.8.2 on Fri Aug 1 2014.