ARM單片機(jī)寄存器地址為什么相差4
上圖是LPC1114用戶手冊(cè)系統(tǒng)控制模塊(SYSCON)中的部分寄存器,請(qǐng)看紅色框內(nèi),地址相差0x4。
上圖是STM32內(nèi)部RCC寄存器的部分寄存器,請(qǐng)看紅色框內(nèi),地址相差0x4。
為什么會(huì)相差4?很多初學(xué)者問我這個(gè)問題,高手就請(qǐng)繞過吧。
計(jì)算機(jī)、單片機(jī)都是以字節(jié)為單位進(jìn)行存儲(chǔ)的。這里的4就是4個(gè)字節(jié)的意思。上面列舉的LPC1114是ARM Cortex-M0內(nèi)核,STM32是ARM Cortex-M3內(nèi)核,這兩ARM單片機(jī)都是32位的。1個(gè)字節(jié)是8位,4個(gè)字節(jié)就是32位。32位單片機(jī)的寄存器基本上是32位的,8位單片機(jī)的寄存器基本上也是8位的。
打開你曾經(jīng)用過的reg51.h文件,看看普通51單片機(jī)的寄存器地址映射,一共不到100個(gè)寄存器,幾下就寫完了。但是ARM單片機(jī)內(nèi)部的模塊非常多,寄存器也非常多,寄存器地址映射文件如果像51那樣寫,也可以,但是還有一種更有利于程序閱讀和書寫的而方法,就是利用結(jié)構(gòu)體,所以當(dāng)你打開ARM單片機(jī)的寄存器映射文件后(例如lpc11xx.h、stm32f10x_map.h),你會(huì)看到,他們的地址全部采用結(jié)構(gòu)體的形式,一個(gè)同類模塊的所有寄存器被放在了同一個(gè)結(jié)構(gòu)體內(nèi)部。在以后寫程序的時(shí)候,不論是書寫還是閱讀,都有很大的作用。例如下面一條語(yǔ)句:
LPC_SYSCON->PRESETCTRL=0x1;
從語(yǔ)句中就可以看出,這是在對(duì)SYSCON模塊中的PRESETCRTL寄存器進(jìn)行配置。