aboutsummaryrefslogtreecommitdiffstats
path: root/usbdrv/usbportability.h
diff options
context:
space:
mode:
authorChristian Starkjohann <cs+github@obdev.at>2008-06-17 18:13:38 +0000
committerChristian Starkjohann <cs+github@obdev.at>2008-06-17 18:13:38 +0000
commit4f0353ba8355196550a842576f8f5af47392f4a7 (patch)
tree5d46facbfe2854530177ef357db0c41460444647 /usbdrv/usbportability.h
parentdfb2c5fd5e27c6b82466a01ebc59a3ee00d125dc (diff)
downloadv-usb-4f0353ba8355196550a842576f8f5af47392f4a7.tar.gz
v-usb-4f0353ba8355196550a842576f8f5af47392f4a7.tar.bz2
v-usb-4f0353ba8355196550a842576f8f5af47392f4a7.zip
- removed iarcompat.h in favor of usbportability.h which is intended to take
care of ports to other compilers such as CodeVision as well.
Diffstat (limited to 'usbdrv/usbportability.h')
-rw-r--r--usbdrv/usbportability.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/usbdrv/usbportability.h b/usbdrv/usbportability.h
new file mode 100644
index 0000000..e2db604
--- /dev/null
+++ b/usbdrv/usbportability.h
@@ -0,0 +1,106 @@
+/* Name: usbportability.h
+ * Project: AVR USB driver
+ * Author: Christian Starkjohann
+ * Creation Date: 2008-06-17
+ * Tabsize: 4
+ * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt) or proprietary (CommercialLicense.txt)
+ * This Revision: $Id$
+ */
+
+/*
+General Description:
+This header is intended to contain all (or at least most of) the compiler
+and library dependent stuff. The C code is written for avr-gcc and avr-libc.
+The API of other development environments is converted to gcc's and avr-libc's
+API by means of defines.
+
+This header also contains all system includes since they depend on the
+development environment.
+
+Thanks to Oleg Semyonov for his help with the IAR tools port!
+*/
+
+#ifndef __usbportability_h_INCLUDED__
+#define __usbportability_h_INCLUDED__
+
+/* We check explicitly for IAR and CodeVision. Default is avr-gcc/avr-libc. */
+
+#if defined __IAR_SYSTEMS_ICC__ || defined __IAR_SYSTEMS_ASM__ /* check for IAR */
+
+#ifndef ENABLE_BIT_DEFINITIONS
+# define ENABLE_BIT_DEFINITIONS 1 /* Enable bit definitions */
+#endif
+
+/* Include IAR headers */
+#include <ioavr.h>
+#ifndef __IAR_SYSTEMS_ASM__
+# include <inavr.h>
+#endif
+
+#define __attribute__(arg) /* not supported on IAR */
+
+#ifdef __IAR_SYSTEMS_ASM__
+# define __ASSEMBLER__ /* IAR does not define standard macro for asm */
+#endif
+
+#ifdef __HAS_ELPM__
+# define PROGMEM __farflash
+#else
+# define PROGMEM __flash
+#endif
+
+#define PRG_RDB(addr) (*(PROGMEM char *)(addr))
+
+/* The following definitions are not needed by the driver, but may be of some
+ * help if you port a gcc based project to IAR.
+ */
+#define cli() __disable_interrupt()
+#define sei() __enable_interrupt()
+#define wdt_reset() __watchdog_reset()
+#define _BV(x) (1 << (x))
+
+/* Depending on the device you use, you may get problems with the way usbdrv.h
+ * handles the differences between devices. Since IAR does not use #defines
+ * for MCU registers, we can't check for the existence of a particular
+ * register with an #ifdef. If the autodetection mechanism fails, include
+ * definitions for the required USB_INTR_* macros in your usbconfig.h. See
+ * usbconfig-prototype.h and usbdrv.h for details.
+ */
+
+#elif __CODEVISIONAVR__ /* check for CodeVision AVR */
+
+#define F_CPU _MCU_CLOCK_FREQUENCY_
+
+#include <io.h>
+#include <delay.h>
+
+#define __attribute__(arg) /* not supported on IAR */
+
+#define PROGMEM __flash
+#define PRG_RDB(addr) (*(PROGMEM char *)(addr))
+
+#ifndef __ASSEMBLER__
+static inline void cli(void)
+{
+ #asm("cli");
+}
+static inline void sei(void)
+{
+ #asm("sei");
+}
+#endif
+#define _delay_ms(t) delay_ms(t)
+#define _BV(x) (1 << (x))
+
+#else /* default development environment is avr-gcc/avr-libc */
+
+#include <avr/io.h>
+#ifdef __ASSEMBLER__
+# define _VECTOR(N) __vector_ ## N /* io.h does not define this for asm */
+#else
+# include <avr/pgmspace.h>
+#endif
+
+#endif /* development environment */
+#endif /* __usbportability_h_INCLUDED__ */