📄 io_macros.h
字号:
/**********************************************************
*
* Common macro declarations used for peripheral I/O
* declarations for ARM IAR C/C++ Compiler and Assembler.
*
* Copyright 1999-2005 IAR Systems. All rights reserved.
*
* $Revision: 1.9 $
*
**********************************************************/
#ifndef __IO_MACROS_H
#define __IO_MACROS_H
/***********************************************
* C specific macros
***********************************************/
#ifdef __IAR_SYSTEMS_ICC__
#ifndef _SYSTEM_BUILD
#pragma system_include
#endif
#pragma language=extended
/* SFR sizes */
#define __REG8 unsigned char
#define __REG16 unsigned short
#define __REG32 unsigned long
/***********************************************
* I/O reg attributes
***********************************************/
#define __READ_WRITE
#ifdef __cplusplus
#define __READ /* Not supported */
#else
#define __READ const
#endif
#define __WRITE /* Not supported */
/***********************************************
* I/O reg bits (default names)
***********************************************/
typedef struct
{
unsigned char no0:1;
unsigned char no1:1;
unsigned char no2:1;
unsigned char no3:1;
unsigned char no4:1;
unsigned char no5:1;
unsigned char no6:1;
unsigned char no7:1;
} __BITS8;
typedef struct
{
unsigned short no0:1;
unsigned short no1:1;
unsigned short no2:1;
unsigned short no3:1;
unsigned short no4:1;
unsigned short no5:1;
unsigned short no6:1;
unsigned short no7:1;
unsigned short no8:1;
unsigned short no9:1;
unsigned short no10:1;
unsigned short no11:1;
unsigned short no12:1;
unsigned short no13:1;
unsigned short no14:1;
unsigned short no15:1;
} __BITS16;
typedef struct
{
unsigned long no0:1;
unsigned long no1:1;
unsigned long no2:1;
unsigned long no3:1;
unsigned long no4:1;
unsigned long no5:1;
unsigned long no6:1;
unsigned long no7:1;
unsigned long no8:1;
unsigned long no9:1;
unsigned long no10:1;
unsigned long no11:1;
unsigned long no12:1;
unsigned long no13:1;
unsigned long no14:1;
unsigned long no15:1;
unsigned long no16:1;
unsigned long no17:1;
unsigned long no18:1;
unsigned long no19:1;
unsigned long no20:1;
unsigned long no21:1;
unsigned long no22:1;
unsigned long no23:1;
unsigned long no24:1;
unsigned long no25:1;
unsigned long no26:1;
unsigned long no27:1;
unsigned long no28:1;
unsigned long no29:1;
unsigned long no30:1;
unsigned long no31:1;
} __BITS32;
/***********************************************
* Define NAME as an I/O reg
* Access of 8/16/32 bit reg: NAME
***********************************************/
#define __IO_REG8(NAME, ADDRESS, ATTRIBUTE) \
volatile __no_init ATTRIBUTE unsigned char NAME @ ADDRESS
#define __IO_REG16(NAME, ADDRESS, ATTRIBUTE) \
volatile __no_init ATTRIBUTE unsigned short NAME @ ADDRESS
#define __IO_REG32(NAME, ADDRESS, ATTRIBUTE) \
volatile __no_init ATTRIBUTE unsigned long NAME @ ADDRESS
/***********************************************
* Define NAME as an I/O reg
* Access of 8/16/32 bit reg: NAME
* Access of bit(s): NAME_bit.noX (X=1-31)
***********************************************/
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)\
volatile __no_init ATTRIBUTE union \
{ \
unsigned char NAME; \
BIT_STRUCT NAME ## _bit; \
} @ ADDRESS
#define __IO_REG16_BIT(NAME, ADDRESS, ATTRIBUTE,BIT_STRUCT)\
volatile __no_init ATTRIBUTE union \
{ \
unsigned short NAME; \
BIT_STRUCT NAME ## _bit; \
} @ ADDRESS
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)\
volatile __no_init ATTRIBUTE union \
{ \
unsigned long NAME; \
BIT_STRUCT NAME ## _bit; \
} @ ADDRESS
#endif /* __IAR_SYSTEMS_ICC__ */
/***********************************************
* Assembler specific macros
***********************************************/
#ifdef __IAR_SYSTEMS_ASM__
/***********************************************
* I/O reg attributes (ignored)
***********************************************/
#define __READ_WRITE 0
#define __READ 0
#define __WRITE 0
/***********************************************
* Define NAME as an I/O reg
***********************************************/
#define __IO_REG8(NAME, ADDRESS, ATTRIBUTE) \
NAME DEFINE ADDRESS
#define __IO_REG16(NAME, ADDRESS, ATTRIBUTE) \
NAME DEFINE ADDRESS
#define __IO_REG32(NAME, ADDRESS, ATTRIBUTE) \
NAME DEFINE ADDRESS
/***********************************************
* Define NAME as an I/O reg
***********************************************/
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) \
NAME DEFINE ADDRESS
#define __IO_REG16_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) \
NAME DEFINE ADDRESS
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) \
NAME DEFINE ADDRESS
#endif /* __IAR_SYSTEMS_ASM__ */
#endif /* __IO_MACROS_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -