unsigned bit6:1;\r
unsigned bit7:1;\r
} _io_reg;\r
+#define REGISTER_BIT(rg,bt) ((volatile _io_reg*)_SFR_MEM_ADDR(rg))->bit##bt\r
\r
#define FLASH_DECLARE(x) const x __attribute__((progmem))\r
#define NO_INIT_DECLARE(x) x __attribute__((section (".noinit")))\r
#define INLINE_FUNC_DECLARE(x) inline x __attribute__((always_inline))\r
#define PGM_READ_BYTE(x) pgm_read_byte(x)\r
#define NOP() asm volatile("nop");\r
-#define REGISTER_BIT(rg,bt) ((volatile _io_reg*)_SFR_MEM_ADDR(rg))->bit##bt\r
#define REGISTER_VAR(V,GNU,IAR) register volatile V asm(GNU)\r
#define NO_RETURN_FUNC(fn) fn __attribute__((noreturn)); \\r
fn\r
\r
// Below #include requires ICC v7.16+\r
#include <iccioavr.h>\r
-typedef struct {\r
- unsigned bit0:1;\r
- unsigned bit1:1;\r
- unsigned bit2:1;\r
- unsigned bit3:1;\r
- unsigned bit4:1;\r
- unsigned bit5:1;\r
- unsigned bit6:1;\r
- unsigned bit7:1;\r
-} _io_reg;\r
\r
#define NOP() asm("nop");\r
// ImageCraft does not support inline functions\r
#define inline\r
#define INLINE_FUNC_DECLARE(x) x\r
-#define REGISTER_BIT(rg,bt) ((volatile _io_reg*)&rg)->bit##bt\r
#define NO_RETURN_FUNC(fn) fn\r
#define MAIN_FUNC() void main(void)\r
#define MAIN_FUNC_LAST()\r
\r
// CodeVision Compiler\r
#elif defined(__CODEVISIONAVR__)\r
+\r
+#if __CODEVISIONAVR__ >= 2\r
#include <io.h>\r
+#else\r
+#include <tiny2313.h>\r
+#endif\r
\r
-typedef struct {\r
- unsigned bit0:1;\r
- unsigned bit1:1;\r
- unsigned bit2:1;\r
- unsigned bit3:1;\r
- unsigned bit4:1;\r
- unsigned bit5:1;\r
- unsigned bit6:1;\r
- unsigned bit7:1;\r
-} _io_reg;\r
+#if defined(_CHIP_ATTINY2313_) || defined(_CHIP_ATTINY2313V_)\r
+ #if !defined(WDTCSR)\r
+ #define WDTCSR WDTCR\r
+ #endif\r
+// Below are bit position definitions for the ATtiny2313\r
+ #define UCSZ0 1\r
+ #define UCSZ1 2\r
+ #define TXEN 3\r
+ #define RXEN 4\r
+ #define RXC 7\r
+ #define RXCIE 7\r
+ #define PD1 1\r
+ #define PD2 2\r
+ #define PD3 3\r
+ #define PD4 4\r
+ #define PD5 5\r
+ #define PD6 6\r
+ #define PB7 7\r
+ #define CS02 2\r
+ #define WGM01 1\r
+ #define OCIE0A 0\r
+ #define WDP0 0\r
+ #define WDP1 1\r
+ #define WDP2 2\r
+ #define WDE 3\r
+ #define WDCE 4\r
+ #define WDP3 5\r
+ #define WDRF 3\r
+ #define SM0 4\r
+ #define SM1 6\r
+ #define SE 5\r
+ #define sleep_enable() MCUCR |= (1<<SE)\r
+ #define sleep_disable() MCUCR &= ~(1<<SE)\r
+ #define USART_RX_vect USART_RXC\r
+#endif\r
\r
#define FLASH_DECLARE(x) flash x\r
#define ASM(a) asm(a)\r
#define NOP() asm("nop");\r
#define inline\r
#define INLINE_FUNC_DECLARE(x) x\r
-#define REGISTER_BIT(rg,bt) ((volatile _io_reg*)&rg)->bit##bt\r
#define NEAR_VAR(x) x\r
#define NO_RETURN_FUNC(fn) fn\r
-#define MAIN_FUNC(fn) fn\r
#define MAIN_FUNC() void main(void)\r
#define MAIN_FUNC_LAST()\r
+#define PGM_READ_BYTE(x) (*(x))\r
\r
-// 2007/11/29 - ImageCraft states they will support _Pragma() like IAR\r
-// in a "few months". At that point, REGISTER_VAR and NO_INIT_DECLARE can\r
-// be supported. REGISTER_VAR will need to be expanded with 4th variable to\r
-// hold register number for ImageCraft.\r
-// noinit for ImageCraft requires #pragma data:noinit\r
-//#define NO_INIT_DECLARE(x) _Pragma(data:noinit); x; _Pragma(data:data);\r
#define NO_INIT_DECLARE(x) x\r
-//#define REGISTER_VAR(V,GNUR,IAR,ICC) _Pragma(global_register V ## : ## ICC)\r
-#define REGISTER_VAR(V,GNUR,IAR) V\r
+#define REGISTER_VAR(V,GNUR,IAR) register V\r
\r
-#define cli() asm("cli")\r
-#define sei() asm("sei")\r
-#define wdt_reset() asm("wdr")\r
+#define ISR(vec) interrupt [ ## vec ## ] void vec ## _handler(void)\r
\r
#else\r
#error Unsupported compiler\r