微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC11XX.h头文件解析

LPC11XX.h头文件解析

时间:11-13 来源:互联网 点击:

__IO uint32_t WDTCLKSEL; /*!< Offset: 0x0D0 (R/W) WDT clock source select Register */
__IO uint32_t WDTCLKUEN; /*!< Offset: 0x0D4 (R/W) WDT clock source update enable Register */
__IO uint32_t WDTCLKdiv; /*!< Offset: 0x0D8 (R/W) WDT clock divider Register */
uint32_t RESERVED9[1];

__IO uint32_t CLKOUTCLKSEL; /*!< Offset: 0x0E0 (R/W) CLKOUT clock source select Register */
__IO uint32_t CLKOUTUEN; /*!< Offset: 0x0E4 (R/W) CLKOUT clock source update enable Register */
__IO uint32_t CLKOUTdiv; /*!< Offset: 0x0E8 (R/W) CLKOUT clock divider Register */
uint32_t RESERVED10[5];

__I uint32_t PIOPORCAP0; /*!< Offset: 0x100 (R/ ) POR captured PIO status 0 Register */
__I uint32_t PIOPORCAP1; /*!< Offset: 0x104 (R/ ) POR captured PIO status 1 Register */
uint32_t RESERVED11[11];
uint32_t RESERVED12[7];
__IO uint32_t BODCTRL; /*!< Offset: 0x150 (R/W) BOD control Register */
__IO uint32_t SYSTCKCAL; /*!< Offset: 0x154 (R/W) System tick counter calibration Register */
uint32_t RESERVED13[1];
uint32_t RESERVED14[5];
uint32_t RESERVED15[2];
uint32_t RESERVED16[34];

__IO uint32_t STARTAPRP0; /*!< Offset: 0x200 (R/W) Start logic edge control Register 0 */
__IO uint32_t STARTERP0; /*!< Offset: 0x204 (R/W) Start logic signal enable Register 0 */
__O uint32_t STARTRSRP0CLR; /*!< Offset: 0x208 ( /W) Start logic reset Register 0 */
__I uint32_t STARTSRP0; /*!< Offset: 0x20C (R/ ) Start logic status Register 0 */
__IO uint32_t STARTAPRP1; /*!< Offset: 0x210 (R/W) Start logic edge control Register 1 (LPC11UXX only) */
__IO uint32_t STARTERP1; /*!< Offset: 0x214 (R/W) Start logic signal enable Register 1 (LPC11UXX only) */
__O uint32_t STARTRSRP1CLR; /*!< Offset: 0x218 ( /W) Start logic reset Register 1 (LPC11UXX only) */
__I uint32_t STARTSRP1; /*!< Offset: 0x21C (R/ ) Start logic status Register 1 (LPC11UXX only) */
uint32_t RESERVED17[4];

__IO uint32_t PDSLEEPCFG; /*!< Offset: 0x230 (R/W) Power-down states in Deep-sleep mode Register */
__IO uint32_t PDAWAKECFG; /*!< Offset: 0x234 (R/W) Power-down states after wake-up from Deep-sleep mode Register*/
__IO uint32_t PDRUNCFG; /*!< Offset: 0x238 (R/W) Power-down configuration Register*/
uint32_t RESERVED18[110];
__I uint32_t DEVICE_ID; /*!< Offset: 0x3F4 (R/ ) Device ID Register */
} LPC_SYSCON_TypeDef;

从中可以看出,大部分语句都加上了“__IO”的前缀,这是由于这部分寄存器单元访问的特殊性决定的。“uint32_t”则反映了定义的变量会占用4个字节的地址空间,因为在前面的宏定义中已经知道,uint32_t就是“unsignedint”型。同时要特别注意一点,在这个结构体中定义的各个变量的顺序不能改变,也就是说各个变量在结构体中的位置是固定的。这是因为在结构体内定义的各个变量之间存在着严格的地址偏移量关系,这点从每一句后面的注解中也可以很清楚地看到。例如第一个变量定义的是“SYSMEMREMAP”,由于它被定义为“unsignedint”型的,所以占用4个字节的地址空间;而下一个定义的变量“PRESETCTRL”的地址,则是前面的变量“SYSMEMREMAP”地址再向后偏移4个字节。同理,第三个定义的变量“SYSPLLCTRL”的地址是第二个变量“SYSMEMREMAP”地址再向后偏移4个字节(因为第二个变量仍定义为“unsignedint”型),或者是第一个变量“SYSMEMREMAP”地址向后偏移8个字节。所以,如果不按照顺序来定义,其对应的地址将会出错。比如,如果把第二个变量“SYSMEMREMAP”删除,由于地址偏移量不变,则原来的第三个变量“SYSPLLCTRL”的地址将会被对应到原来第二个变量的地址(相对第一个变量偏移4字节而不是8字节),这将导致出错!这是因为在CPU中各个寄存器之间的地址是固定不变的,这一点目前可能会有些难理解,在后面讨论了结构体的指针以后就会明白的。

下面先来看一下,刚才定义在结构体“SYSCON”中的各成员变量,是如何与LPC1114内

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top