什麼是暫存器

2022-05-14 13:04:45 字數 1352 閱讀 3016

我們看到的 stm32 晶元已經是已經封裝好的成品,主要由核心和片上外設組成。若與

電腦模擬,核心與外設就如同電腦上的 cpu 與主機板、記憶體、顯示卡、硬碟的關係。

stm32f429 採用的是 cortex-m4 核心,核心即 cpu,由 arm 公司設計。 arm 公司

並不生產晶元,而是**其晶元技術授權。晶元生產廠商(soc)如 st、 ti、 freescale,負

責在核心之外設計部件並生產整個晶元,這些核心之外的部件被稱為核外外設或片上外設。

如 gpio、 usart(串列埠)、 i2c、 spi 等都叫做片上外設。 

儲存器本身不具有位址資訊,它的位址是由晶元廠商或使用者分配,給儲存器分配位址

的過程就稱為儲存器對映。 如果給儲存器再分配乙個位址就叫儲存器重映

射。 片上外設區分為四條匯流排,根據外設速度的不同,不同匯流排掛載著不同的外設, apb

掛載低速外設, ahb 掛載高速外設。相應匯流排的最低位址我們稱為該匯流排的基位址,匯流排

基位址也是掛載在該匯流排上的首個外設的位址。其中 apb1 匯流排的位址最低,片上外設從

這裡開始,也叫外設基位址。

我們知道,儲存器本身沒有位址,給儲存器分配位址的過程叫儲存器對映,那什麼叫

暫存器對映?暫存器到底是什麼?

在儲存器 block2 這塊區域,設計的是片上外設,它們以四個位元組為乙個單元,共

32bit,每乙個單元對應不同的功能,當我們控制這些單元時就可以驅動外設工作。我們可

以找到每個單元的起始位址,然後通過 c 語言指標的操作方式來訪問這些單元,如果每次

都是通過這種位址的方式來訪問,不僅不好記憶還容易出錯,這時我們可以根據每個單元

功能的不同,以功能為名給這個記憶體單元取乙個別名,這個別名就是我們經常說的暫存器,

這個給已經分配好位址的有特定功能的記憶體單元取別名的過程就叫暫存器對映。

《 stm32f4xx 參考手冊》 很有參考價值,我們可以在上面找到對應暫存器的配置方式的偏移量。

用自己的話總結就是:晶元廠商在設計晶元的時候,硬體確定了一片記憶體區域,有位址編號,我們通過這個位址,配置不同的值可以得到不同的功能,但是記憶記憶體位址顯然不現實,所以我們人為地為各個記憶體區域取了乙個別名,這個別名叫暫存器,只要你願意,你可以取和st官方不同的名字,但是最好不要這樣。通過別名,也就是暫存器,我們通常說的配置暫存器,其實就是在對應位址上寫入不同的值達到不同的效果。在這個取別名的過程中,需要用到指標和結構體的知識,對位址進行訪問需要指標操作,而位址偏移我們可以用結構體,因為結構體中的記憶體是連續分配的,這正好用在這種位址偏移中。

但是,要注意,偏移並不是隨便來的,很多人沒有注意這個問題,這在之後的c語言隨筆中將會提出,現在需要記住的是,mdk5.20,預設偏移是4個位元組,這個預設偏移是有很大講究的!!!

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

STM32(二 什麼是暫存器

stm32晶元架構簡圖 stm32f10xx系統框圖 儲存器本身不具有位址資訊,它的位址是由晶元廠商或使用者分配,給儲存器分配位址分配位址的過程就稱為儲存器對映。分配位址後,會使用指標去操作記憶體位址。有特定功能的記憶體單元,通常我們會給這個特殊的記憶體單元取乙個名字,這個給已經分配好位址的有特定功...