ARM寄存器的簡單分類:圖1-1:

圖1-1
ARM微處理器中共有37個32位寄存器,其中31個通用寄存器,6個狀態寄存器。但是這些寄存器不能被同時訪問,在七種模式中,可以訪問的寄存器種類不同。但是,通用寄存器R14——R0、程序計數器PC、一個狀態寄存器cpsr都是可以被訪問的。
具體的情況如下圖1-2所示:

圖1-2
寄存器分類:
1、不分組通用寄存器:
R0-R7是不分組寄存器。所謂不分組就是在七種模式下的任意一種模式都訪問同一個物理寄存器地址。就是不分組寄存器沒有特權模式,任意一種模式都可以使用未分組寄存器。
2.分組寄存器R8——R12:
FIQ模式分組寄存器R8——R12.
FIQ以外的分組寄存器R8-----R12
3.分組寄存器R13、R14:
寄存器R13通常用做堆棧指針SP。
寄存器R14用做子程序鏈接寄存器(Link Register LR),也稱為LR,指向函數的返回地址。
4.程序計數器:
寄存器R15被用做程序計數器,也稱為PC。其值等于當前執行的指令的地址+8(因為在取址和執行之間多了一個譯碼的階段)。PC總是指向正在運行的后兩條指令地址,即是當前執行指令的地址+8.
5.狀態寄存器:
圖1-3:

圖1-3
ARM所有工作模式下都可以訪問程序狀態寄存器CPSR。CPSR包含條件標志位、中斷控制位、當前處理器模式以及其他狀態和控制信息。CPSR在每種異常模式下都有一個對應的物理寄存器----程序狀態保存寄存器SPSR。當異常發生的時候,SPSR用于保存CPSR的值,以便異常返回后恢復異常發生時的工作狀態。
CPSR狀態寄存器的示意圖:圖1-4:

圖1-4
圖1-5:

圖1-5
ARM框架文檔

31個通用寄存器,6個狀態寄存器(一個cpsr,5個spsr)。


通用31個寄存器,被分為了三類:R0~R7,R8~R14,PC程序計數器(R15)。

R13常做堆棧指針的。

R14保存調用子函數的返回地址,和中斷的返回地址。

用于程序計數器,pc指針。
cpsr:

解釋:








關鍵字:ARM 寄存器 模式
引用地址:
8.ARM寄存器詳細解說
推薦閱讀最新更新時間:2025-06-07 23:47
淺析ARM協處理器CP15寄存器有關指令:MCR\MRC
背景: 在uboot中,start.s中涉及到了 CP15 的有關操作。查閱有關資料,進行學習。 mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #0x00002000 @ clear bits 13 (--V-) bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM) orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align orr r0, r0, #0x00000800 @ set bit 11 (Z---) BTB mcr p15, 0, r0, c1, c0, 0 在基于ARM的嵌入式系統中
[單片機]
ARM中斷模式(IRQ)和快速中斷模式(FIQ)區別比較
簡介:本文主要對ARM中斷模式(IRQ)和快速中斷模式(FIQ)區別進行了說明,希望對你的學習有所幫助。 概念 IRQ(Interrupt Request):指中斷模式。 FIQ(Fast Interrupt Request):指快速中斷模式。 IRQ與FIQ是ARM處理器的兩種不同編程模式(ARM有7種處理模式)。 詳述 1、對FIQ你必須進快處理中斷請求,并離開這個模式。 2、IRQ可以被FIQ所中斷,但FIQ不能被IRQ所中斷,在處理FIQ時必須要關閉中斷。 3、FIQ的優先級比IRQ高。 4、FIQ模式下,比IRQ模式多了幾個獨立的寄存器。 不要小看這幾個寄存器,ARM在編譯的時候,
[單片機]
GPIO寄存器的地址怎么尋找
由上圖知,GPIOC的地址就是在這個PERIPH_BASE地址的基礎上偏移得到得。 我們可以一步一步的計算一下GPIOC的地址是多少。 0x40000000 + 0x10000 + 0x1000 == 0x4001 1000 我們的計算結果和參考手冊上的一樣。注意:這些都是芯片上面真實的物理地址。如果需要運行操作系統,由于在操作系統中,程序的地址對應的是虛擬內存,在操作系統中對GPIO進行操作時,需要將這個真實的物理地址映射到虛擬地址上面去,這樣操作系統才能對GPIO進行操作。 這個是GPIO上的各個寄存器,它被裝在一個結構體里面。 由這張圖可知,這也就是為什么GPIO的寄存器僅通過偏移地址就可以能
[單片機]
STM32如何新建工程+寄存器點亮LED燈
STM32新建工程跟51差不多的,但是32會多點東西,比如加載芯片支持包啦,啟動文件啦。還有一個很重要的 你得有KEIL5 是吧哈哈 我這里就不寫如何安裝KEIL5了 網上挺多資源的,這里就主要寫一下如何新建工程點亮一個LED燈。 我這里用STM32F103C8T6 我這里用STM32F103C8T6 一: 如何新建工程 1:下載芯片支持包Keil.STM32Fxxxx.pack文件 1.進入KEIL5官網。 找到自己的型號 這樣就下載了 芯片支持包了。 2:打開KEIL5 加載Keil.STM32Fxxxx.pack文件 .打開KEIL5 把 下載的 Keil.STM32Fxxxx.pack文件
[單片機]
常用的串口相關寄存器介紹
常用的串口相關寄存器: USART_SR狀態寄存器: FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); COPY USART_DR數據寄存器: void USART_SendData(USART_TypeDef* USARTx, uint16_t Data); uint16_t USART_ReceiveData(USART_TypeDef* USARTx); COPY USART_ BRR波特率寄存器: void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef*
[單片機]
I2C寄存器控制
/* 設置寄存器啟動傳輸 */ /* 1. 配置為 master tx mode */ IICCON |= (1 7); /* TX mode, 在ACK周期釋放SDA */ IICSTAT = (1 4); /* 2. 把從設備地址寫入IICDS */ IICDS = msg- addr 1; /* 3. IICSTAT = 0xf0 , 數據即被發送出去, 將導致中斷產生 */ IICSTAT = 0xf0; /* 后續的傳輸由中斷驅動 */ /* 循環等待中斷處理完畢 */ 發送模式: IICDS = 第一個字節------ 發送完成---- 產
[單片機]
基于STM32從零寫操作系統系列---基于寄存器寫串口驅動
目的 嘗試基于寄存器層面,編寫串口的驅動。用這種方式編寫串口驅動,有點類似于使用匯編語言。面向的是每一個單獨的寄存器,通過讀、改、寫的手段,配置寄存器。但是這種方式能夠更接近硬件,用硬件的思維編程。 相對于《基于STM32從零寫操作系統系列---使用C語言》,這章重新調整了文件結構,讓項目文件更好管理和維護。主要使用了makefile的嵌套編譯方法來編譯多目錄下的代碼文件。 分析 1.Makefile嵌套編譯 首先簡單來看一下文件結構: 再看一下頂層Makefile,主要差異如下: 各子目錄下的Makefile比較簡單 其中需要注意的是: 在windows的cmd命令行中for命令用于查找
[單片機]