图中是LPC1114用户手册系统控制模块(SYSCON)中的部分寄存器,请看红色框内,地址相差0x4。为什么会相差4?很多初学者问我这个问题,高手就请绕过吧。
计算机、单片机都是以字节为单位进行存储的。这里的4就是4个字节的意思。上面列举的LPC1114是ARM Cortex-M0内核,STM32是ARM Cortex-M3内核,这两ARM单片机都是32位的。1个字节是8位,4个字节就是32位。32位单片机的寄存器基本上是32位的,8位单片机的寄存器基本上也是8位的。
打开你曾经用过的reg51.h文件,看看普通51单片机的寄存器地址映射,一共不到100个寄存器,几下就写完了。但是ARM单片机内部的模块非常多,寄存器也非常多,寄存器地址映射文件如果像51那样写,也可以,但是还有一种更有利于程序阅读和书写的而方法,就是利用结构体,所以当你打开ARM单片机的寄存器映射文件后(例如lpc11xx.h、stm32f10x_map.h),你会看到,他们的地址全部采用结构体的形式,一个同类模块的所有寄存器被放在了同一个结构体内部。在以后写程序的时候,不论是书写还是阅读,都有很大的作用。例如下面一条语句:
LPC_SYSCON-》PRESETCTRL=0x1;
从语句中就可以看出,这是在对SYSCON模块中的PRESETCRTL寄存器进行配置。