|
【玩转ADuCM360】ADuCM360头文件定义特点
[复制链接]
ADuCM360头文件,在IAR安装目录下的 .\\inc\AnalogDevices里,
里面的定义,占用内容最多的是寄存器的位定义,如:
/* ADCCON[ADCEN] - Enable Bit */
#define ADCCON_ADCEN_MSK (0x1 << 19 )
#define ADCCON_ADCEN (0x1 << 19 )
#define ADCCON_ADCEN_DIS (0x0 << 19 ) /* DIS */
#define ADCCON_ADCEN_EN (0x1 << 19 ) /* EN */
它是对某一寄存器的某一位进行定义,以方便程序中使用。
还有定义寄存器的结构体,如:
typedef struct { /*!< pCLKCTL Structure */
__IO uint16_t CLKCON0; /*!< System clocking architecture control register */
__I uint16_t RESERVED0;
__IO uint16_t CLKCON1; /*!< System Clocks Control Register 1 */
__I uint16_t RESERVED1[19];
__IO uint16_t CLKDIS; /*!< System Clocks Control Register 1 */
__I uint16_t RESERVED2[497];
__IO uint8_t XOSCCON; /*!< Crystal Oscillator control */
__I uint8_t RESERVED3[51];
__IO uint16_t CLKSYSDIV; /*!< Sys Clock div2 Register */
} CLKCTL_TypeDef;
在对寄存器的操作时,可以更符合C语言特点。
文件中,还提供了传统的对寄存器的直接操作时的定义,如:
#define CLKCON0 (*(volatile unsigned short int *) 0x40002000)
#define CLKCON1 (*(volatile unsigned short int *) 0x40002004)
#define CLKDIS (*(volatile unsigned short int *) 0x4000202C)
#define XOSCCON (*(volatile unsigned char *) 0x40002410)
#define CLKSYSDIV (*(volatile unsigned short int *) 0x40002444)
对于这样的定义,可以直接使用寄存器,如:
CLKCON0 = 0x01;
文件中为了兼顾不用的使用习惯,又不产生冲突,就使用了关键字
__NO_MMR_STRUCTS__
来对不同定义作切换。
用户可以根据自己所好,以选择是还定义“__NO_MMR_STRUCTS__” 关键字。
|
|