intvects.c

00001 /*
00002  * $Id: intvects.c,v 1.17 2004/02/26 07:22:15 troth Exp $
00003  *
00004  ****************************************************************************
00005  *
00006  * simulavr - A simulator for the Atmel AVR family of microcontrollers.
00007  * Copyright (C) 2001, 2002, 2003, 2004  Theodore A. Roth
00008  *
00009  * This program is free software; you can redistribute it and/or modify
00010  * it under the terms of the GNU General Public License as published by
00011  * the Free Software Foundation; either version 2 of the License, or
00012  * (at your option) any later version.
00013  *
00014  * This program is distributed in the hope that it will be useful,
00015  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00016  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017  * GNU General Public License for more details.
00018  *
00019  * You should have received a copy of the GNU General Public License
00020  * along with this program; if not, write to the Free Software
00021  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022  *
00023  ****************************************************************************
00024  */
00025 
00026 #include <config.h>
00027 
00028 #include <stdio.h>
00029 #include <stdlib.h>
00030 
00031 #include "intvects.h"
00032 
00033 /****************************************************************************\
00034  *
00035  * Interrupt Vector Tables:
00036  *
00037  *   Since each device could have a different set of available interrupts, the
00038  *   following tables map all interrupts to the addr to jump to when the
00039  *   interrupt happens. If the device doesn't support an interrupt, the table
00040  *   will contain a NULL entry. Only one table will be installed into the core
00041  *   for a given device.
00042  *
00043  \****************************************************************************/
00044 
00045 /* *INDENT-OFF* */
00046 
00047 /*
00048  * Vector Table for devices:
00049  *   at90s1200
00050  */
00051 static IntVectTable vtab_at90s1200 = {
00052     .RESET          = { "IRQ_RESET",
00053                         0x00, 0x00, NO_BIT, NO_BIT },
00054     .INT0           = { "IRQ_INT0",
00055                         0x01, 0x00, { 0x5b, 1<<6 }, NO_BIT },
00056     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00057                         0x02, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00058     .ANA_COMP       = { "IRQ_ANA_COMP",
00059                         0x03, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } }
00060 };
00061 
00062 /*
00063  * Vector Table for devices:
00064  *   at90s2313
00065  */
00066 static IntVectTable vtab_at90s2313 = {
00067     .RESET          = { "IRQ_RESET",
00068                         0x00, 0x00, NO_BIT, NO_BIT },
00069     .INT0           = { "IRQ_INT0",
00070                         0x01, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00071     .INT1           = { "IRQ_INT1",
00072                         0x02, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00073     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00074                         0x03, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00075     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00076                         0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00077     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00078                         0x05, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00079     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00080                         0x06, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00081     .UART_RX        = { "IRQ_UART_RX",
00082                         0x07, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00083     .UART_UDRE      = { "IRQ_UART_UDRE",
00084                         0x08, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00085     .UART_TX        = { "IRQ_UART_TX",
00086                         0x09, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00087     .ANA_COMP       = { "IRQ_ANA_COMP",
00088                         0x0a, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } }
00089 };
00090 
00091 /*
00092  * Vector Table for devices:
00093  *   at90s4414, at90s8515
00094  */
00095 static IntVectTable vtab_at90s4414 = {
00096     .RESET          = { "IRQ_RESET",
00097                         0x00, 0x00, NO_BIT, NO_BIT },
00098     .INT0           = { "IRQ_INT0",
00099                         0x01, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00100     .INT1           = { "IRQ_INT1",
00101                         0x02, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00102     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00103                         0x03, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00104     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00105                         0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00106     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00107                         0x05, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00108     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00109                         0x06, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00110     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00111                         0x07, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00112     .SPI_STC        = { "IRQ_SPI_STC",
00113                         0x08, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00114     .UART_RX        = { "IRQ_UART_RX",
00115                         0x09, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00116     .UART_UDRE      = { "IRQ_UART_UDRE",
00117                         0x0a, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00118     .UART_TX        = { "IRQ_UART_TX",
00119                         0x0b, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00120     .ANA_COMP       = { "IRQ_ANA_COMP",
00121                         0x0c, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } }
00122 };
00123 
00124 /*
00125  * Vector Table for devices:
00126  *   atmega8
00127  */
00128 
00129 static IntVectTable vtab_atmega8 = {
00130     .RESET          = { "IRQ_RESET",
00131                         0x00, 0x00, NO_BIT, NO_BIT },
00132     .INT0           = { "IRQ_INT0",
00133                         0x01, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00134     .INT1           = { "IRQ_INT1",
00135                         0x02, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00136     .TIMER2_COMP    = { "IRQ_TIMER2_COMP",
00137                         0x03, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00138     .TIMER2_OVF     = { "IRQ_TIMER2_OVF",
00139                         0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00140     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00141                         0x05, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00142     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00143                         0x06, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
00144     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00145                         0x07, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00146     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00147                         0x08, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
00148     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00149                         0x09, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
00150     .SPI_STC        = { "IRQ_SPI_STC",
00151                         0x0a, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00152     .UART_RX        = { "IRQ_UART_RX",
00153                         0x0b, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00154     .UART_UDRE      = { "IRQ_UART_UDRE",
00155                         0x0c, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00156     .UART_TX        = { "IRQ_UART_TX",
00157                         0x0d, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00158     .ADC            = { "IRQ_ADC",
00159                         0x0e, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
00160     .EE_READY       = { "IRQ_EE_READY",
00161                         0x0f, 0x00, { 0x3c, 1<<3 }, NO_BIT },
00162     .ANA_COMP       = { "IRQ_ANA_COMP",
00163                         0x10, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
00164     .TWI            = { "IRQ_TWI",
00165                         0x11, 0x00, { 0x56, 1<<0 }, { 0x56, 1<<7 } },
00166     .SPM_READY      = { "IRQ_SPM_READY",
00167                         0x12, 0x00, { 0x57, 1<<7 }, NO_BIT }
00168 };
00169 
00170 
00171 
00172 /*
00173  * Vector Table for devices:
00174  *   atmega16
00175  */
00176 
00177 static IntVectTable vtab_atmega16 = {
00178     .RESET          = { "IRQ_RESET",
00179                         0x00, 0x00, NO_BIT, NO_BIT },
00180     .INT0           = { "IRQ_INT0",
00181                         0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00182     .INT1           = { "IRQ_INT1",
00183                         0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00184     .TIMER2_COMP    = { "IRQ_TIMER2_COMP",
00185                         0x06, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00186     .TIMER2_OVF     = { "IRQ_TIMER2_OVF",
00187                         0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00188     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00189                         0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00190     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00191                         0x0c, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
00192     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00193                         0x0e, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00194     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00195                         0x10, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
00196     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00197                         0x12, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
00198     .SPI_STC        = { "IRQ_SPI_STC",
00199                         0x14, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00200     .UART_RX        = { "IRQ_UART_RX",
00201                         0x16, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00202     .UART_UDRE      = { "IRQ_UART_UDRE",
00203                         0x18, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00204     .UART_TX        = { "IRQ_UART_TX",
00205                         0x1a, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00206     .ADC            = { "IRQ_ADC",
00207                         0x1c, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
00208     .EE_READY       = { "IRQ_EE_READY",
00209                         0x1e, 0x00, { 0x3c, 1<<3 }, NO_BIT },
00210     .ANA_COMP       = { "IRQ_ANA_COMP",
00211                         0x20, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
00212     .TWI            = { "IRQ_TWI",
00213                         0x22, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<7 } },
00214     .INT2           = { "IRQ_INT2",
00215                         0x24, 0x00, { 0x5b, 1<<5 }, { 0x5a, 1<<5 } },
00216     .TIMER0_COMP    = { "IRQ_TIMER0_COMP",
00217                         0x26, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00218     .SPM_READY      = { "IRQ_SPM_READY",
00219                         0x28, 0x00, { 0x57, 1<<7 }, NO_BIT }
00220 };
00221 
00222 
00223 /*
00224  * Vector Table for devices:
00225  *   atmega103
00226  */
00227 
00228 static IntVectTable vtab_atmega103 = {
00229     .RESET          = { "IRQ_RESET",
00230                         0x00, 0x00, NO_BIT, NO_BIT },
00231     .INT0           = { "IRQ_INT0",
00232                         0x02, 0x00, { 0x59, 1<<0 }, NO_BIT },
00233     .INT1           = { "IRQ_INT1",
00234                         0x04, 0x00, { 0x59, 1<<1 }, NO_BIT },
00235     .INT2           = { "IRQ_INT2",
00236                         0x06, 0x00, { 0x59, 1<<2 }, NO_BIT },
00237     .INT3           = { "IRQ_INT3",
00238                         0x08, 0x00, { 0x59, 1<<3 }, NO_BIT },
00239     .INT4           = { "IRQ_INT4",
00240                         0x0a, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
00241     .INT5           = { "IRQ_INT5",
00242                         0x0c, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00243     .INT6           = { "IRQ_INT6",
00244                         0x0e, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00245     .INT7           = { "IRQ_INT7",
00246                         0x10, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00247     .TIMER2_COMP    = { "IRQ_TIMER2_COMP",
00248                         0x12, 0x00, { 0x57, 1<<7 }, { 0x56, 1<<7 } },
00249     .TIMER2_OVF     = { "IRQ_TIMER2_OVF",
00250                         0x14, 0x00, { 0x57, 1<<6 }, { 0x56, 1<<6 } },
00251     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00252                         0x16, 0x00, { 0x57, 1<<5 }, { 0x56, 1<<5 } },
00253     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00254                         0x18, 0x00, { 0x57, 1<<4 }, { 0x56, 1<<4 } },
00255     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00256                         0x1a, 0x00, { 0x57, 1<<3 }, { 0x56, 1<<3 } },
00257     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00258                         0x1c, 0x00, { 0x57, 1<<2 }, { 0x56, 1<<2 } },
00259     .TIMER0_COMP    = { "IRQ_TIMER0_COMP",
00260                         0x1e, 0x00, { 0x57, 1<<1 }, { 0x56, 1<<1 } },
00261     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00262                         0x20, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<0 } },
00263     .SPI_STC        = { "IRQ_SPI_STC",
00264                         0x22, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00265     .UART_RX        = { "IRQ_UART_RX",
00266                         0x24, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00267     .UART_UDRE      = { "IRQ_UART_UDRE",
00268                         0x26, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00269     .UART_TX        = { "IRQ_UART_TX",
00270                         0x28, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00271     .ADC            = { "IRQ_ADC",
00272                         0x2a, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
00273     .ANA_COMP       = { "IRQ_ANA_COMP",
00274                         0x2e, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
00275     .EE_READY       = { "IRQ_EE_READY",
00276                         0x2c, 0x00, { 0x3c, 1<<3 }, NO_BIT }
00277 };
00278 
00279 /*
00280  * Vector Table for devices:
00281  *   atmega128
00282  */
00283 
00284 /* Note that the mega128 has BOOTRST and IVSEL fuses which can be used to
00285    change the interrupt vectors. If used, the new vectors are just the
00286    following plus some Boot Reset Address. This could be implemented just as
00287    we vector to handler. */
00288 
00289 /* Note that the vectors address for mega128 are two insn's. This is needed
00290    since they can use jmp (32-bit) insn at the vector address. */
00291 
00292 static IntVectTable vtab_atmega128 = {
00293     .RESET          = { "IRQ_RESET",
00294                         0x00, 0x00, NO_BIT, NO_BIT },
00295     .INT0           = { "IRQ_INT0",
00296                         0x02, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00297     .INT1           = { "IRQ_INT1",
00298                         0x04, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00299     .INT2           = { "IRQ_INT2",
00300                         0x06, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00301     .INT3           = { "IRQ_INT3",
00302                         0x08, 0x00, { 0x59, 1<<4 }, { 0x58, 1<<4 } },
00303     .INT4           = { "IRQ_INT4",
00304                         0x0a, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00305     .INT5           = { "IRQ_INT5",
00306                         0x0c, 0x00, { 0x59, 1<<2 }, { 0x58, 1<<2 } },
00307     .INT6           = { "IRQ_INT6",
00308                         0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00309     .INT7           = { "IRQ_INT7",
00310                         0x10, 0x00, { 0x59, 1<<0 }, { 0x58, 1<<0 } },
00311     .TIMER2_COMP    = { "IRQ_TIMER2_COMP",
00312                         0x12, 0x00, { 0x57, 1<<7 }, { 0x56, 1<<7 } },
00313     .TIMER2_OVF     = { "IRQ_TIMER2_OVF",
00314                         0x14, 0x00, { 0x57, 1<<6 }, { 0x56, 1<<6 } },
00315     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00316                         0x16, 0x00, { 0x57, 1<<5 }, { 0x56, 1<<5 } },
00317     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00318                         0x18, 0x00, { 0x57, 1<<4 }, { 0x56, 1<<4 } },
00319     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00320                         0x1a, 0x00, { 0x57, 1<<3 }, { 0x56, 1<<3 } },
00321     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00322                         0x1c, 0x00, { 0x57, 1<<2 }, { 0x56, 1<<2 } },
00323     .TIMER0_COMP    = { "IRQ_TIMER0_COMP",
00324                         0x1e, 0x00, { 0x57, 1<<1 }, { 0x56, 1<<1 } },
00325     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00326                         0x20, 0x00, { 0x57, 1<<0 }, { 0x56, 1<<0 } },
00327     .SPI_STC        = { "IRQ_SPI_STC",
00328                         0x22, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00329     .USART0_RX      = { "IRQ_USART0_RX",
00330                         0x24, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00331     .USART0_UDRE    = { "IRQ_USART0_UDRE",
00332                         0x26, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00333     .USART0_TX      = { "IRQ_USART0_TX",
00334                         0x28, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00335     .ADC            = { "IRQ_ADC",
00336                         0x2a, 0x00, { 0x26, 1<<3 }, { 0x26, 1<<4 } },
00337     .EE_READY       = { "IRQ_EE_READY",
00338                         0x2c, 0x00, { 0x3c, 1<<3 }, NO_BIT },
00339     .ANA_COMP       = { "IRQ_ANA_COMP",
00340                         0x2e, 0x00, { 0x28, 1<<3 }, { 0x28, 1<<4 } },
00341     .TIMER1_COMPC   = { "IRQ_TIMER1_COMPC",
00342                         0x30, 0x00, { 0x7d, 1<<0 }, { 0x7c, 1<<0 } },
00343     .TIMER3_CAPT    = { "IRQ_TIMER3_CAPT",
00344                         0x32, 0x00, { 0x7d, 1<<5 }, { 0x7c, 1<<5 } },
00345     .TIMER3_COMPA   = { "IRQ_TIMER3_COMPA",
00346                         0x34, 0x00, { 0x7d, 1<<4 }, { 0x7c, 1<<4 } },
00347     .TIMER3_COMPB   = { "IRQ_TIMER3_COMPB",
00348                         0x36, 0x00, { 0x7d, 1<<3 }, { 0x7c, 1<<3 } },
00349     .TIMER3_COMPC   = { "IRQ_TIMER3_COMPC",
00350                         0x38, 0x00, { 0x7d, 1<<1 }, { 0x7c, 1<<1 } },
00351     .TIMER3_OVF     = { "IRQ_TIMER3_OVF",
00352                         0x3a, 0x00, { 0x7d, 1<<2 }, { 0x7c, 1<<2 } },
00353     .USART1_RX      = { "IRQ_USART1_RX",
00354                         0x3c, 0x00, { 0x9a, 1<<7 }, { 0x9b, 1<<7 } },
00355     .USART1_UDRE    = { "IRQ_USART1_UDRE",
00356                         0x3e, 0x00, { 0x9a, 1<<5 }, { 0x9b, 1<<5 } },
00357     .USART1_TX      = { "IRQ_USART1_TX",
00358                         0x40, 0x00, { 0x9a, 1<<6 }, { 0x9b, 1<<6 } },
00359     .TWI            = { "IRQ_TWI",
00360                         0x42, 0x00, { 0x74, 1<<0 }, { 0x74, 1<<7 } },
00361     .SPM_READY      = { "IRQ_SPM_READY",
00362                         0x44, 0x00, { 0x68, 1<<7 }, NO_BIT }
00363 };
00364 
00365 /* supports 355, 353, 351
00366    NOTE: The vector addresses are not sequential. */
00367 static IntVectTable vtab_at43usb355 = {
00368     .RESET          = { "IRQ_RESET",
00369                         0x00, 0x00, NO_BIT, NO_BIT },
00370     .INT0           = { "IRQ_INT0",
00371                         0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00372     .INT1           = { "IRQ_INT1",
00373                         0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00374     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00375                         0x06, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00376     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00377                         0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00378     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00379                         0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00380     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00381                         0x0c, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00382     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00383                         0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00384     .SPI_STC        = { "IRQ_SPI_STC",
00385                         0x10, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00386     .ADC            = { "IRQ_ADC",
00387                         0x16, 0x00, { 0x27, 1<<3 }, { 0x27, 1<<4 } },
00388     .USB_HW         = { "IRQ_USB_HW",
00389                         0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
00390 };
00391 
00392 /* supports 320 */
00393 static IntVectTable vtab_at43usb320 = {
00394     .RESET          = { "IRQ_RESET",
00395                         0x00, 0x00, NO_BIT, NO_BIT },
00396     .INT0           = { "IRQ_INT0",
00397                         0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00398     .INT1           = { "IRQ_INT1",
00399                         0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00400     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00401                         0x06, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00402     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00403                         0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00404     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00405                         0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00406     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00407                         0x0c, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00408     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00409                         0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00410     .SPI_STC        = { "IRQ_SPI_STC",
00411                         0x10, 0x00, { 0x2d, 1<<7 }, NO_BIT },
00412     .UART_RX        = { "IRQ_UART_RX",
00413                         0x12, 0x00, { 0x2a, 1<<7 }, { 0x2b, 1<<7 } },
00414     .UART_UDRE      = { "IRQ_UART_UDRE",
00415                         0x14, 0x00, { 0x2a, 1<<5 }, { 0x2b, 1<<5 } },
00416     .UART_TX        = { "IRQ_UART_TX",
00417                         0x16, 0x00, { 0x2a, 1<<6 }, { 0x2b, 1<<6 } },
00418     .USB_HW         = { "IRQ_USB",
00419                         0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
00420 };
00421 
00422 /* supports 325
00423    NOTE: The vector addresses are not sequential. */
00424 static IntVectTable vtab_at43usb325 = {
00425     .RESET          = { "IRQ_RESET",
00426                         0x00, 0x00, NO_BIT, NO_BIT },
00427     .INT0           = { "IRQ_INT0",
00428                         0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00429     .INT1           = { "IRQ_INT1",
00430                         0x04, 0x00, { 0x5b, 1<<7 }, { 0x5a, 1<<7 } },
00431     .TIMER1_CAPT    = { "IRQ_TIMER1_CAPT",
00432                         0x06, 0x00, { 0x59, 1<<3 }, { 0x58, 1<<3 } },
00433     .TIMER1_COMPA   = { "IRQ_TIMER1_COMPA",
00434                         0x08, 0x00, { 0x59, 1<<6 }, { 0x58, 1<<6 } },
00435     .TIMER1_COMPB   = { "IRQ_TIMER1_COMPB",
00436                         0x0a, 0x00, { 0x59, 1<<5 }, { 0x58, 1<<5 } },
00437     .TIMER1_OVF     = { "IRQ_TIMER1_OVF",
00438                         0x0c, 0x00, { 0x59, 1<<7 }, { 0x58, 1<<7 } },
00439     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00440                         0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00441     .USB_HW         = { "IRQ_USB_HW",
00442                         0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
00443 };
00444 
00445 /* supports 326
00446    NOTE: The vector addresses are not sequential. */
00447 static IntVectTable vtab_at43usb326 = {
00448     .RESET          = { "IRQ_RESET",
00449                         0x00, 0x00, NO_BIT, NO_BIT },
00450     .INT0           = { "IRQ_INT0",
00451                         0x02, 0x00, { 0x5b, 1<<6 }, { 0x5a, 1<<6 } },
00452     .TIMER0_OVF     = { "IRQ_TIMER0_OVF",
00453                         0x0e, 0x00, { 0x59, 1<<1 }, { 0x58, 1<<1 } },
00454     .USB_HW         = { "IRQ_USB_HW",
00455                         0x18, 0x00, NO_BIT, NO_BIT } /* TODO */
00456 };
00457 
00458 /* *INDENT-ON* */
00459 
00460 /*
00461  * Vector Table Lookup List.
00462  *
00463  * Maps a _vector_table_name to a device vector table.
00464  */
00465 IntVectTable *global_vtable_list[] = {
00466     &vtab_at90s1200,
00467     &vtab_at90s2313,
00468     &vtab_at90s4414,
00469     &vtab_atmega8,
00470     &vtab_atmega16,
00471     &vtab_atmega103,
00472     &vtab_atmega128,
00473     &vtab_at43usb355,
00474     &vtab_at43usb320,
00475     &vtab_at43usb325,
00476     &vtab_at43usb326,
00477     NULL
00478 };

Automatically generated by Doxygen 1.5.2 on 13 Feb 2008.