📄 iomacro.h
字号:
/**************************************************************
** - iomacro.h -
**
** This file defines the Special Function Register Macros
** for Atmel AT90S.
**
** Used with iccAVR and aAVR.
**
** Copyright IAR Systems 1999 - 2005. All rights reserved.
**
** File version: $Revision: 1.25 $
**
**************************************************************/
#ifdef __IAR_SYSTEMS_ICC__
#ifndef _SYSTEM_BUILD
#pragma system_include
#endif
#endif
#ifndef __IOMACRO_H
#define __IOMACRO_H
#define TID_GUARD(proc) ((__TID__ & 0x7FF0) != ((90 << 8) | ((proc) << 4)))
#if !(__IAR_SYSTEMS_ICC__) && !defined(__IAR_SYSTEMS_ASM__)
#error This file should only be compiled with iccavr,icca90 or aavr.
#endif /* !(__IAR_SYSTEMS_ICC__) && !defined __IAR_SYSTEMS_ASM__ */
/* The assembler uses a special set of macros... */
#ifdef __IAR_SYSTEMS_ASM__
/* Byte sized SFRs */
#define SFR_B_BITS(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
sfrb _NAME = _ADDR
#define DATA_SFR_B_BITS(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
sfrb _NAME = _ADDR
#define SFR_B_BITS_EXT(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
sfrb _NAME = _ADDR
#define SFR_B_BITS_EXT_IO(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
sfrb _NAME = _ADDR
#define SFR_B2_BITS(_NAME1,_NAME2,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H)\
ASMSFRB2 _NAME1, _NAME2, _ADDR
#define SFR_B_BITS_N(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2)\
sfrb _NAME = _ADDR
#define DATA_SFR_B_BITS_N(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2)\
sfrb _NAME = _ADDR
#define SFR_B_BITS_N_EXTRA(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2,_STRUCT)\
sfrb _NAME = _ADDR
#define SFR_B_BITS_EXT_N(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2)\
sfrb _NAME = _ADDR
#define SFR_B_BITS_EXT_IO_N(_NAME,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2)\
sfrb _NAME = _ADDR
#define SFR_B2_BITS_N(_NAME1,_NAME2,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2)\
ASMSFRB2 _NAME1, _NAME2, _ADDR
#define DATA_SFR_B2_BITS_N(_NAME1,_NAME2,_ADDR,_A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2)\
ASMSFRB2 _NAME1, _NAME2, _ADDR
ASMSFRB2 MACRO
sfrb \1 = \3
sfrb \2 = \3
ENDM
/* Word sized SFRs, needs to be expanded into an assembler macro first. */
#define SFR_W_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P)\
ASMSFRW _NAME, _ADDR
#define SFR_W_BITS_BYTENAME(_NAME, _NAMEL,_NAMEH, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_I,_J,_K,_L,_M,_N,_O,_P)\
ASMSFRWBN _NAME, _ADDR, _NAMEL, _NAMEH
#define DATA_SFR_W_BITS_BYTENAME(_NAME, _NAMEL,_NAMEH, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_I,_J,_K,_L,_M,_N,_O,_P)\
ASMSFRWBN _NAME, _ADDR, _NAMEL, _NAMEH
#define DATA_SFR_W_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P)\
ASMSFRW _NAME, _ADDR
#define SFR_W_BITS_EXT_IO(_ADDR, _NAME, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P)\
ASMSFRW _NAME, _ADDR
#define SFR_W_BITS_EXT_IO_BYTENAME(_ADDR, _NAME, _NAMEL,_NAMEH, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P)\
ASMSFRWBN _NAME, _ADDR, _NAMEL, _NAMEH
#define SFR_W_BITS_N(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2, \
_I2,_J2,_K2,_L2,_M2,_N2,_O2,_P2)\
ASMSFRW _NAME, _ADDR
#define DATA_SFR_W_BITS_N(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I,_J,_K,_L,_M,_N,_O,_P, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2, \
_I2,_J2,_K2,_L2,_M2,_N2,_O2,_P2)\
ASMSFRW _NAME, _ADDR
#define SFR_W_BITS_N_BYTENAME(_NAME, _NAMEL,_NAMEH, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I, \
_J,_K,_L,_M,_N,_O,_P, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2, \
_I2,_J2,_K2,_L2,_M2,_N2,_O2,_P2)\
ASMSFRWBN _NAME, _ADDR, _NAMEL, _NAMEH
#define DATA_SFR_W_BITS_N_BYTENAME(_NAME, _NAMEL,_NAMEH, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, _I, \
_J,_K,_L,_M,_N,_O,_P, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2, \
_I2,_J2,_K2,_L2,_M2,_N2,_O2,_P2)\
ASMSFRWBN _NAME, _ADDR, _NAMEL, _NAMEH
ASMSFRW MACRO
sfrw \1 = \2
sfrb \1L = (\2+0)
sfrb \1H = (\2+1)
ENDM
ASMSFRWBN MACRO
sfrw \1 = \2
sfrb \3 = (\2+0)
sfrb \4 = (\2+1)
ENDM
#define SFR_L_BITS(_NAME, _ADDR, \
_B0, _B1, _B2, _B3, _B4, _B5, _B6, _B7, \
_B8, _B9, _B10, _B11, _B12, _B13, _B14, _B15, \
_B16, _B17, _B18, _B19, _B20, _B21, _B22, _B23, \
_B24, _B25, _B26, _B27, _B28, _B29, _B30, _B31) \
ASMSFRL _NAME, _ADDR
#define DATA_SFR_L_BITS(_NAME, _ADDR, \
_B0, _B1, _B2, _B3, _B4, _B5, _B6, _B7, \
_B8, _B9, _B10, _B11, _B12, _B13, _B14, _B15, \
_B16, _B17, _B18, _B19, _B20, _B21, _B22, _B23, \
_B24, _B25, _B26, _B27, _B28, _B29, _B30, _B31) \
ASMSFRL _NAME, _ADDR
#define SFR_L_BITS_N(_NAME, _ADDR, \
_N0, _N1, _N2, _N3, _N4, _N5, _N6, _N7, \
_N8, _N9, _N10, _N11, _N12, _N13, _N14, _N15, \
_N16, _N17, _N18, _N19, _N20, _N21, _N22, _N23, \
_N24, _N25, _N26, _N27, _N28, _N29, _N30, _N31) \
ASMSFRL _NAME, _ADDR
#define DATA_SFR_L_BITS_N(_NAME, _ADDR, \
_N0, _N1, _N2, _N3, _N4, _N5, _N6, _N7, \
_N8, _N9, _N10, _N11, _N12, _N13, _N14, _N15, \
_N16, _N17, _N18, _N19, _N20, _N21, _N22, _N23, \
_N24, _N25, _N26, _N27, _N28, _N29, _N30, _N31) \
ASMSFRL _NAME, _ADDR
#define SFR_L_BITS_BYTENAME(_NAME,_NAME0,_NAME1,_NAME2,_NAME3,_ADDR,_STRUCT) \
ASMSFRLBN _NAME, _ADDR, _NAME0, _NAME1, _NAME2, _NAME3
#define DATA_SFR_L_BITS_BYTENAME(_NAME,_NAME0,_NAME1,_NAME2,_NAME3,_ADDR,_STRUCT) \
ASMSFRLBN _NAME, _ADDR, _NAME0, _NAME1, _NAME2, _NAME3
#define SFR_L_BITS_EXT_IO(_NAME, _ADDR, \
_B0, _B1, _B2, _B3, _B4, _B5, _B6, _B7, \
_B8, _B9, _B10, _B11, _B12, _B13, _B14, _B15, \
_B16, _B17, _B18, _B19, _B20, _B21, _B22, _B23, \
_B24, _B25, _B26, _B27, _B28, _B29, _B30, _B31) \
ASMSFRL _NAME, _ADDR
#define SFR_L_BITS_N_EXT_IO(_NAME, _ADDR, \
_N0, _N1, _N2, _N3, _N4, _N5, _N6, _N7, \
_N8, _N9, _N10, _N11, _N12, _N13, _N14, _N15, \
_N16, _N17, _N18, _N19, _N20, _N21, _N22, _N23, \
_N24, _N25, _N26, _N27, _N28, _N29, _N30, _N31) \
ASMSFRL _NAME, _ADDR
ASMSFRL MACRO
sfrb \10 = (\2+0)
sfrb \11 = (\2+1)
sfrb \12 = (\2+2)
sfrb \13 = (\2+3)
ENDM
ASMSFRLBN MACRO
sfrb \3 = (\2+0)
sfrb \4 = (\2+1)
sfrb \5 = (\2+2)
sfrb \6 = (\2+3)
ENDM
#endif /* __IAR_SYSTEMS_ASM__ */
#ifdef __ICCAVR__
#define __BYTEBITS(_NAME,_A,_B,_C,_D,_E,_F,_G,_H) \
unsigned char _NAME ## _ ## _A:1, \
_NAME ## _ ## _B:1, \
_NAME ## _ ## _C:1, \
_NAME ## _ ## _D:1, \
_NAME ## _ ## _E:1, \
_NAME ## _ ## _F:1, \
_NAME ## _ ## _G:1, \
_NAME ## _ ## _H:1;
#define SFR_B_BITS(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
__io union { \
unsigned char _NAME; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
} @ _ADDR;
#define SFR_B_BITS_N(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
__io union { \
unsigned char _NAME; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
}; \
} @ _ADDR;
#define SFR_B_BITS_N_EXTRA(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2,_STRUCT) \
__io union { \
unsigned char _NAME; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
}; \
_STRUCT \
} @ _ADDR;
#define SFR_B2_BITS(_NAME1, _NAME2, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
__io union { \
unsigned char _NAME1; /* The sfrb as 1 byte */ \
unsigned char _NAME2; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME1, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME2, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
} @ _ADDR;
#define DATA_SFR_B2_BITS_N(_NAME1, _NAME2, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
__no_init_volatile union { \
unsigned char _NAME1; /* The sfrb as 1 byte */ \
unsigned char _NAME2; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME1, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME2, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME1, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME2, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
}; \
} @ _ADDR;
#define SFR_B2_BITS_N(_NAME1, _NAME2, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
_A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
__io union { \
unsigned char _NAME1; /* The sfrb as 1 byte */ \
unsigned char _NAME2; /* The sfrb as 1 byte */ \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME1, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME2, _A,_B,_C,_D,_E,_F,_G,_H) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME1, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
}; \
struct { /* The sfrb as 8 bits */ \
__BYTEBITS(_NAME2, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
}; \
} @ _ADDR;
#define SFR_B_BITS_EXT(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -