目錄
- 一、 按行為特性分類
- 二、 按功能角色分類(更宏觀的角度)
- 總結與注意事項
在32位單片機(尤其是基于ARM Cortex-M系列內核的)中,寄存器的種類可以按照其“行為模式”和“功能”來進行分類。
以下是32位單片機(以ARM Cortex-M為例)中常見的寄存器種類。
一、 按行為特性分類
這正是嵌入式編程中最關鍵的概念,決定了軟件如何與硬件交互。
-
狀態寄存器 (Status Register) - SR
- 行為:硬件置位,軟件清零。
- 描述:用于反映外設或內核的當前狀態。軟件通常只能讀取其值,或通過向特定位寫
1
來清除(復位)該標志位,寫0
無效。這是最常見的類型。 - 示例:
- USART狀態寄存器 (USART_SR) 中的
TXE
(發送寄存器空)、RXNE
(接收寄存器非空)、ORE
(溢出錯誤) 等標志。 - 定時器狀態寄存器 (TIMx_SR) 中的
UIF
(更新中斷標志)、CC1IF
(捕獲/比較1中斷標志)。 - GPIO輸入數據寄存器 (IDR):可視為一種狀態寄存器,反映引腳當前電平,軟件只能讀。
- USART狀態寄存器 (USART_SR) 中的
-
控制寄存器 (Control Register) - CR
- 行為:軟件讀寫。
- 描述:用于配置外設或內核的工作模式、使能功能等。軟件可以隨時讀寫,硬件通常只讀取其配置并據此工作,一般不會修改它的值(除非極特殊情況,如休眠時硬件自動清除某些使能位)。
- 示例:
- USART控制寄存器1 (USART_CR1) 中的
UE
(USART使能)、TE
(發送使能)、RE
(接收使能)。 - 定時器控制寄存器1 (TIMx_CR1) 中的
CEN
(計數器使能)。
- USART控制寄存器1 (USART_CR1) 中的
-
數據寄存器 (Data Register) - DR
- 行為:軟件寫入/硬件讀出 或 硬件寫入/軟件讀出。
- 描述:作為數據交換的緩沖區。
- 示例:
- USART數據寄存器 (USART_DR):軟件向它寫數據,USART外設會自動讀取并發送;USART接收到的數據也會自動放入該寄存器,軟件讀取它。
- ADC數據寄存器 (ADC_DR):硬件(ADC模塊)完成轉換后,將結果數據寫入該寄存器,軟件再從中讀取。
-
動作觸發器 (Action Trigger) / 命令寄存器 (Command Register)
- 行為:軟件置位,硬件自動復位。
- 描述:您對這個的描述非常到位!軟件向某位寫
1
會觸發一個特定的硬件動作(如開始轉換、清除某種狀態),一旦硬件識別到這個命令并開始執行,該位會自動清零。這可以避免軟件需要先寫1再寫0來清除的麻煩。 - 示例:
- ADC控制寄存器 (ADC_CR2) 中的
SWSTART
位 (軟件啟動常規轉換):寫1啟動轉換,轉換開始后硬件自動將其清零。 - Flash控制寄存器 (FLASH_CR) 中的
STRT
位 (開始擦除):寫1開始擦除,操作開始后硬件清零。
- ADC控制寄存器 (ADC_CR2) 中的
二、 按功能角色分類(更宏觀的角度)
在芯片手冊中,寄存器通常按所屬外設模塊和功能來組織。
-
內核寄存器 (Core Registers)
- 存在于CPU內核中,由ARM架構定義。
- 通用寄存器 (R0-R12):用于數據處理。
- 棧指針寄存器 (SP/R13):指向當前棧頂。
- 鏈接寄存器 (LR/R14):存儲函數返回地址。
- 程序計數器 (PC/R15):指向下一條要執行的指令。
- 程序狀態寄存器 (xPSR):包含ALU標志(N, Z, C, V)、中斷狀態等。
- 中斷/異常屏蔽寄存器 (PRIMASK, FAULTMASK, BASEPRI):控制中斷的使能。
- 控制寄存器 (CONTROL):控制處理器模式(線程/Handler)和棧指針選擇(MSP/PSP)。
-
外設寄存器 (Peripheral Registers)
- 掛載在系統總線上,用于控制所有片內外設。
- 控制寄存器 (CRx):配置工作模式,如定時器的計數模式、PWM模式。
- 數據寄存器 (DRx):輸入輸出數據,如GPIO輸出、ADC結果、SPI/I2C數據。
- 狀態寄存器 (SR):查看外設狀態,如數據是否就緒、是否發生錯誤。
- 中斷寄存器
- 中斷使能寄存器 (IER / IMR):軟件設置,控制允許哪些中斷源產生請求。
- 中斷標志寄存器 (IFR / ISR / SR中的標志位):硬件置位,當中斷事件發生時置位。軟件通過寫1或特定值來清除。
- 中斷優先級寄存器 (IPR):軟件設置,配置每個中斷源的優先級。
- DMA寄存器:配置DMA傳輸的源地址、目標地址、數據量等。
-
系統控制寄存器 (System Control Registers)
- 控制芯片的整體行為。
- 時鐘控制寄存器 (RCC):軟件設置,配置系統時鐘源、PLL、各外設時鐘的使能等。這是單片機初始化的核心。
- 電源控制寄存器 (PWR):軟件設置,控制睡眠、停機、待機等低功耗模式。
- 系統配置控制器 (SYSCFG):軟件設置,配置引腳重映射、中斷線分配等。
總結與注意事項
寄存器類型 | 主要操作者 | 常見行為 | 示例 |
---|---|---|---|
狀態寄存器 (SR) | 硬件 | 硬件置位,軟件清零 | USART_SR, TIMx_SR |
控制寄存器 (CR) | 軟件 | 軟件讀寫,硬件只讀 | USART_CR1, TIMx_CR1 |
數據寄存器 (DR) | 軟件/硬件 | 數據雙向流通 | USART_DR, ADC_DR |
命令寄存器 | 軟件觸發 | 軟件寫1,硬件執行后自動清零 | ADC_CR2.SWSTART |
中斷使能寄存器 | 軟件 | 軟件讀寫 | USART_CR1.RXNEIE |
中斷標志寄存器 | 硬件 | 硬件置位,軟件清零 | EXTI->PR, USART_SR.RXNE |
重要提示:
- “寫1清零” (Write-1-to-clear):在清除狀態或中斷標志時,絕大多數寄存器采用這種機制。這是為了安全,避免軟件誤操作覆蓋其他位。
- “讀-修改-寫” (Read-Modify-Write):在修改控制寄存器某一位而不影響其他位時,必須采用此操作。即先讀取整個寄存器,用邏輯運算(
&
和|
)修改目標位,再寫回整個寄存器。現代的芯片庫函數(如HAL/LL庫)已經幫我們處理了這些細節。
理解這些寄存器的行為差異,是編寫穩定、高效嵌入式程序的基礎。