Čeština / English
Login

SVN Repository / Prohlížení

Aktuální adresář: FITkit / trunk / mcu / libfitkit /

isr_compat.h

   1  /*
   2   * Copyright (c) 2005 Steve Underwood
   3   * All rights reserved.
   4   *
   5   * Redistribution and use in source and binary forms, with or without
   6   * modification, are permitted provided that the following conditions
   7   * are met:
   8   * 1. Redistributions of source code must retain the above copyright
   9   *    notice, this list of conditions and the following disclaimer.
  10   * 2. Redistributions in binary form must reproduce the above copyright
  11   *    notice, this list of conditions and the following disclaimer in the
  12   *    documentation and/or other materials provided with the distribution.
  13   *
  14   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS `AS IS'' AND
  15   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  18   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  20   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24   * SUCH DAMAGE.
  25   *
  26   * $Id: isr_compat.h,v 1.3 2005/12/08 17:29:52 coppice Exp $
  27   */
  28  
  29  #ifndef _ISR_COMPAT_H_
  30  #define _ISR_COMPAT_H_
  31  
  32  /* Cross compiler interrupt service routine compatibility definitions */
  33  /* This code currently allows for:
  34          MSPGCC - the GNU tools for the MSP430
  35          Quadravox AQ430
  36          IAR Version 1 (old syntax)
  37          IAR Versions 2 and 3 (new syntax)
  38          Rowley Crossworks
  39          Code Composer Essentials
  40  
  41     These macros allow us to define interrupt routines for all
  42     compilers with a common syntax:
  43  
  44      ISR(<interrupt>, <routine name>)
  45      {
  46      }
  47  
  48     e.g.
  49  
  50      ISR(ADC12, adc_service_routine)
  51      {
  52          ADC12CTL0 &= ~ENC;
  53          ADC12CTL0 |= ENC;
  54      }
  55  */
  56  
  57  /* A tricky #define to stringify _Pragma parameters */
  58  #define __PRAGMA__(x) _Pragma(#x)
  59  
  60  #if defined(__GNUC__)  &&  defined(__MSP430__)
  61      /* This is the MSPGCC compiler */
  62  #define ISR(a,b) interrupt(a ## _VECTOR) b(void)
  63  #elif defined(__AQCOMPILER__)
  64      /* This is the Quadravox compiler */
  65  #define ISR(a,b) void _INTERRUPT[a ## _VECTOR] b(void)
  66  #elif defined(__IAR_SYSTEMS_ICC__)  &&  (((__TID__ >> 8) & 0x7f) == 43)  &&  (__VER__ < 200)
  67      /* This is V1.xx of the IAR compiler. */
  68  #define ISR(a,b) interrupt[a ## _VECTOR] void b(void)
  69  #elif defined(__IAR_SYSTEMS_ICC__)  &&  (((__TID__ >> 8) & 0x7f) == 43)  &&  (__VER__ < 400)
  70      /* This is V2.xx or V3.xx of the IAR compiler. */
  71  #define ISR(a,b) \
  72  __PRAGMA__(vector=a ##_VECTOR) \
  73  __interrupt void b(void)
  74  #elif defined(__CROSSWORKS_MSP430)
  75      /* This is the Rowley Crossworks compiler */
  76  #define ISR(a,b) void b __interrupt[a ## _VECTOR](void)
  77  #elif defined(__TI_COMPILER_VERSION__)
  78      /* This is the Code Composer Essentials compiler. */
  79  #define ISR(a,b) __interrupt void b(void); \
  80  a ## _ISR(b) \
  81  __interrupt void b(void)
  82  #else
  83      #error Compiler not recognised.
  84  #endif
  85  
  86  #endif
  87  
Zobrazeno: 731746x Naposledy: 29.11.2022 05:21:20