寄存器這個詞相想必大家并不陌生吧!應該學過嵌入式的都知道吧!那你有沒有系統的總結過寄存器的知識呢!我給大家總結一些寄存器的知識!大家快來閱讀學習吧!
一、什麼是寄存器寄存器是CPU的組成部分,因為在CPU内,所以CPU對其讀寫速度是最快的,不需要IO傳輸。但同時也決定了此類寄存器數量非常有限,有限到幾乎每個存儲都有自己的名字,而且有些還有多個名字。下面是來自大佬的硬料:
如果把被儲存的東西比作能量:
1. 寄存器就是 ATP,可以随時拿來用,性能高,但數量有限;
2. 内存就是葡萄糖,性能一般,但是存量可以比較多;
3. 外存(比如硬盤)就是脂肪,容量可以非常大,性能很差,要先轉化為葡萄糖(存進内存),然後轉化為 ATP(放到寄存器)才能直接利用(存取)。
二、STM32芯片框架圖(對于這兩個圖的理解可以參考STM32參考手冊 驅動單元由ARM 粉色部分位外設由ST設計,主要學習APB1 APB2 兩個總線(兩個總線速度不同)中的外設)三、什麼是寄存器映射我們知道,存儲器本身沒有地址,給存儲器分配地址的過程叫存儲器映射,那什麼叫寄存器映射?寄存器到底是什麼?
在存儲器Block2 這塊區域,設計的是片上外設,它們以四個字節為一個單元,共32bit,每一個單元對應不同的功能,當我們控制這些單元時就可以驅動外設工作。
我們可以找到每個單元的起始地址,然後通過C 語言指針的操作方式來訪問這些單元,如果每次都是通過這種地址的方式來訪問,不僅不好記憶還容易出錯,這時我們可以根據每個單元功能的不同。
以功能為名給這個内存單元取一個别名,這個别名就是我們經常說的寄存器,這個給已經分配好地址的有特定功能的内存單元取别名的過程就叫寄存器映射。
比如,我們找到GPIOB 端口的輸出數據寄存器ODR 的地址是0x4001 0C0C(至于這個地址如何找到可以先跳過,後面我們會有詳細的講解),ODR 寄存器是32bit,低16bit有效,對應着16 個外部IO,寫0/1 對應的的IO 則輸出低/高電平。現在我們通過C 語言指針的操作方式,讓GPIOB 的16 個IO 都輸出高電平。
四、寄存器的功能
寄存器最起碼具備以下4種功能:
①清除數碼:将寄存器裡的原有數碼清除。
②接收數碼:在接收脈沖作用下,将外輸入數碼存入寄存器中。
③存儲數碼:在沒有新的寫入脈沖來之前,寄存器能保存原有數碼不變。
④輸出數碼:在輸出脈沖作用下,才通過電路輸出數碼。
僅具有以上功能的寄存器稱為數碼寄存器;有的寄存器還具有移位功能,稱為移位寄存器。
寄存器有串行和并行兩種數碼存取方式。将n位二進制數一次存入寄存器或從寄存器中讀出的方式稱為并行方式。将n位二進制數以每次1位,分成n次存入寄存器并從寄存器讀出,這種方式稱為串行方式。
并行方式隻需一個時鐘脈沖就可以完成數據操作,工作速度快,但需要n根輸入和輸出數據線。串行方式要使用幾個時鐘脈沖完成輸入或輸出操作,工作速度慢,但隻需要一根輸入或輸出數據線,傳輸線少,适用于遠距離傳輸。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!