什么是寄存器


1、什么是存儲器映射?

在圖5-4中,連接被控總線的是FLASH,RAM和片上外設,這些功能部件共同排列在一個 4GB 的地址空間內。我們在編程的時候,操作的也正是這些功能部件。

存儲器本身不具有地址信息,它的地址是由芯片廠商或用戶分配,給存儲器分配地址的過程就稱為存儲器映射。如果給存儲器再分配一個地址就叫存儲器重映射。

在這 4GB的地址空間中,ARM已經粗線條的平均分成了 8 個塊,每塊 512MB,每個塊也都規定了用途。每個塊的大小都有 512MB,顯然這是非常大的,芯片廠商在每個塊的范圍內設計各具特色的外設時並不一定都用得完,都是只用了其中的一部分而已。在這 8 個 Block 里面,有 3 個塊非常重要,也是我們最關心的三個塊。Boock0 用來設計成內部 FLASH,Block1用來設計成內部 RAM,Block2用來設計成片上的外設。

 

寄存器都是外設的寄存器,寄存器都存在block2里面!!!

GPIO掛接在AHB1上的。

2、寄存器映射

在存儲器 Block2 這塊區域,設計的是片上外設,它們以四個字節為一個單元,共32bit,每一個單元對應不同的功能,當我們控制這些單元時就可以驅動外設工作。我們可以找到每個單元的起始地址,然后通過 C語言指針的操作方式來訪問這些單元,如果每次都是通過這種地址的方式來訪問,不僅不好記憶還容易出錯,這時我們可以根據每個單元功能的不同,以功能為名給這個內存單元取一個別名,這個別名就是我們經常說的寄存器,這個給已經分配好地址的有特定功能的內存單元取別名的過程就叫寄存器映射。

3、 STM32的外設地址映射

1)、總線基地址

2)、外設基地址

4、外設寄存器

在 XX外設的地址范圍內,分布着的就是該外設的寄存器。GPIO有很多個寄存器,每一個都有特定的功能。每個寄存器為 32bit,占四個字節,在該外設的基地址上按照順序排列,寄存器的位置都以相對該外設基地址的偏移地址來描述。這里我們以 GPIOH端口為例,來說明 GPIO 都有哪些寄存器,具體見表格 5-7。

5、 C語言對寄存器的封裝

以上所有的關於存儲器映射的內容,最終都是為大家更好地理解如何用 C 語言控制讀寫外設寄存器做准備,此處是本章的重點內容。

1)封裝總線和外設基地址

在編程上為了方便理解和記憶,我們把總線基地址和外設基地址都以相應的宏定義起來,總線或者外設都以他們的名字作為宏名。

代碼 5-4 首先定義了 “片上外設”基地址 PERIPH_BASE,接着在 PERIPH_BASE 上
加入各個總線的地址偏移,得到 APB1、APB2 等總線的地址 APB1PERIPH_BASE、
APB2PERIPH_BASE,在其之上加入外設地址的偏移,得到 GPIOA、GPIOH的外設地址,
最后在外設地址上加入各寄存器的地址偏移,得到特定寄存器的地址。一旦有了具體地址,
就可以用指針操作讀寫了,具體見代碼 5-5。

6、封裝寄存器列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM