* device/include/mcs51/compiler.h: new, added header file to enable
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 9 Jun 2006 23:16:10 +0000 (23:16 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 9 Jun 2006 23:16:10 +0000 (23:16 +0000)
  creating common sfr definition header files for different compilers

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4210 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
device/include/mcs51/compiler.h [new file with mode: 0644]

index d4565648e2aea7be14884331b34c20167e7cad6d..c92c3a1a8d79c6f1a63b7adf3c490b9e6e9fc655 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-06-10 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * device/include/mcs51/compiler.h: new, added header file to enable
+         creating common sfr definition header files for different compilers
+
 2006-06-05 Raphael Neider <rneider AT web.de>
 
        * src/pic16/{pcode.h,genarith.c}:
diff --git a/device/include/mcs51/compiler.h b/device/include/mcs51/compiler.h
new file mode 100644 (file)
index 0000000..3886d7a
--- /dev/null
@@ -0,0 +1,156 @@
+/** \file compiler.h\r
+  * \author Maarten Brock\r
+  *\r
+  * This library is free software; you can redistribute it and/or\r
+  * modify it under the terms of the GNU Lesser General Public\r
+  * License as published by the Free Software Foundation; either\r
+  * version 2.1 of the License, or (at your option) any later version.\r
+  *\r
+  * This library is distributed in the hope that it will be useful,\r
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+  * Lesser General Public License for more details.\r
+  *\r
+  * You should have received a copy of the GNU Lesser General Public\r
+  * License along with this library; if not, write to the Free Software\r
+  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
+  *\r
+  * In other words, you are welcome to use, share and improve this program.\r
+  * You are forbidden to forbid anyone else to use, share and improve\r
+  * what you give them. Help stamp out software-hoarding!\r
+  *\r
+  * Header file to overcome 8051 compiler differences for specifying\r
+  * special function registers. The following compilers are supported:\r
+  * SDCC, Keil, Raisonance, IAR, Hi-Tech, Tasking, Crossware, Wickenhäuser.\r
+  * Unfortunately not for use with Dunfield.\r
+  *\r
+  * SBIT and SFR define special bit and special function registers at the given\r
+  * address. SFR16 and SFR32 define sfr combinations at adjacent addresses in\r
+  * little-endian format. SFR16E and SFR32E define sfr combinations without\r
+  * prerequisite byte order or adjacency. None of these multi-byte sfr\r
+  * combinations will guarantee the order in which they are accessed when read\r
+  * or written.\r
+  * This file is to be included in every microcontroller specific header file.\r
+  * Example:\r
+  *\r
+  * // my_mcu.h: sfr definitions for my mcu\r
+  * #include <compiler.h>\r
+  *\r
+  * SBIT  (P0_1, 0x80, 1);      // Port 0 pin 1\r
+  *\r
+  * SFR   (P0, 0x80);           // Port 0\r
+  *\r
+  * SFR16 (TMR2, 0xCC);         // Timer 2, lsb at 0xCC, msb at 0xCD\r
+  *\r
+  * SFR16E(TMR0, 0x8C8A);       // Timer 0, lsb at 0x8A, msb at 0x8C\r
+  *\r
+  * SFR32 (MAC0ACC, 0x93);      // SiLabs C8051F120 32 bits MAC0 Accumulator, lsb at 0x93, msb at 0x96\r
+  *\r
+  * SFR32E(SUMR, 0xE5E4E3E2);   // TI MSC1210 SUMR 32 bits Summation register, lsb at 0xE2, msb at 0xE5\r
+ */\r
+\r
+#ifndef COMPILER_H\r
+#define COMPILER_H\r
+\r
+/** SDCC - Small Device C Compiler\r
+  * http://sdcc.sf.net\r
+ */\r
+#if defined SDCC\r
+# define SBIT(name, addr, bit)  __sbit  __at(addr+bit)             name\r
+# define SFR(name, addr)        __sfr   __at(addr)                 name\r
+# define SFR16(name, addr)      __sfr16 __at(((addr+1)<<8) | addr) name\r
+# define SFR16E(name, fulladdr) __sfr16 __at(fulladdr)             name\r
+# define SFR32(name, addr)      __sfr32 __at(((addr+3)<<24) | ((addr+2)<<16) | ((addr+1)<<8) | addr) name\r
+# define SFR32E(name, fulladdr) __sfr32 __at(fulladdr)             name\r
+\r
+/** Keil C51\r
+  * http://www.keil.com\r
+ */\r
+#elif defined __CX51__\r
+# define SBIT(name, addr, bit)  sbit  name = addr^bit\r
+# define SFR(name, addr)        sfr   name = addr\r
+# define SFR16(name, addr)      sfr16 name = addr\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  /* not supported */\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** Raisonance\r
+  * http://www.raisonance.com\r
+ */\r
+#elif defined __RC51__\r
+# define SBIT(name, addr, bit)  at (addr+bit) sbit         name\r
+# define SFR(name, addr)        sfr at addr                name\r
+# define SFR16(name, addr)      sfr16 at addr              name\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  /* not supported */\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** IAR 8051\r
+  * http://www.iar.com\r
+ */\r
+#elif defined __ICC8051__\r
+# define SBIT(name, addr, bit)  __bit __no_init volatile bool name @ (addr+bit)\r
+# define SFR(name, addr)        __sfr __no_init volatile unsigned char name @ addr\r
+# define SFR16(name, addr)      __sfr __no_init volatile unsigned int  name @ addr\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  __sfr __no_init volatile unsigned long name @ addr\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** Tasking / Altium\r
+  * http://www.altium.com/tasking\r
+ */\r
+#elif defined _CC51\r
+# define SBIT(name, addr, bit)  _sfrbit  name _at(addr+bit)\r
+# define SFR(name, addr)        _sfrbyte name _at(addr)\r
+# define SFR16(name, addr)      /* not supported */\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  /* not supported */\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** Hi-Tech 8051\r
+  * http://www.htsoft.com\r
+ */\r
+#elif defined HI_TECH_C\r
+# define SBIT(name, addr, bit)  volatile bit           name @ (addr+bit)\r
+# define SFR(name, addr)        volatile unsigned char name @ addr\r
+# define SFR16(name, addr)      /* not supported */\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  /* not supported */\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** Crossware\r
+  * http://www.crossware.com\r
+ */\r
+#elif defined _XC51_VER\r
+# define SBIT(name, addr, bit)  _sfrbit  name = (addr+bit)\r
+# define SFR(name, addr)        _sfr     name = addr\r
+# define SFR16(name, addr)      _sfrword name = addr\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  /* not supported */\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** Wickenhäuser\r
+  * http://www.wickenhaeuser.de\r
+ */\r
+#elif defined __UC__\r
+# define SBIT(name, addr, bit)  unsigned char bit  name @ (addr+bit)\r
+# define SFR(name, addr)        near unsigned char name @ addr\r
+# define SFR16(name, addr)      /* not supported */\r
+# define SFR16E(name, fulladdr) /* not supported */\r
+# define SFR32(name, fulladdr)  /* not supported */\r
+# define SFR32E(name, fulladdr) /* not supported */\r
+\r
+/** default\r
+  * unknown compiler\r
+ */\r
+#elif\r
+# define SBIT(name, addr, bit)  volatile bool\r
+# define SFR(name, addr)        volatile unsigned char\r
+# define SFR16(name, addr)      volatile short\r
+# define SFR16E(name, fulladdr) volatile short\r
+# define SFR32(name, fulladdr)  volatile int\r
+# define SFR32E(name, fulladdr) volatile int\r
+\r
+#endif\r
+\r
+#endif //COMPILER_H\r