在處理器中有協處理器來輔助處理器完成部分功能的,主要是協助作用。
協處理器:
協處理器用于執行特定的處理任務,如:數學協處理器可以控制數字處理,以減輕處理器的負擔。ARM可支持多達16個協處理器,其中CP15是最重要的一個。
在ARM9、ARM11、cortexa8等核中,CP15的功能都是一樣的。
在ARM11核的文檔看到圖1-1:
The section gives an overall view of the system control coprocessor. For detail of the registers
in the system control coprocessor, see System control processor registers on page 3-13.
The purpose of the system control coprocessor, CP15, is to control and provide status
information for the functions implemented in the ARM1176JZF-S processor. The main
functions of the system control coprocessor are:
? overall system control and configuration
? cache configuration and management
? Tightly-Coupled Memory (TCM) configuration and management
? Memory Management Unit (MMU) configuration and management
? DMA control
? system performance monitoring.
The system control coprocessor does not exist in a distinct physical block of logic.
圖1-1
從上面知道:
系統控制協處理器的功能是:
系統整體控制和配置
緩存配置和管理
緊耦合的內存(CTM)的配置和管理
內存管理單元(MMU)的配置和管理。
DMA控制
系統性能控制。
確切的說,ARM11核中有16組協處理器,不是16個,每一組里面有很多寄存器,下面來看ARM11核的c0組里的Main ID寄存器。
System control processor registers
This section gives details of all the registers in the system control coprocessor. The section
presents a summary of the registers and detailed descriptions in register order of CRn,
Opcode_1, CRm, Opcode_2.
You can access CP15 registers with MRC and MCR instructions:
MCR{cond} P15, MRC{cond} P15, Register allocation Table 3-2 on page 3-14 lists the allocation and reset values of the registers of the system control coprocessor where: ? CRn is the register number within CP15 ? Op1 is the Opcode_1 value for the register ? CRm is the operational register ? Op2 is the Opcode_2 value for the register. ? Type applies to the Secure, S, or the Non-secure, NS, world and is: — B, registers banked in Secure and Non-secure worlds. If the registers are not banked then they are common to both worlds or only accessible in one world. — NA, no access — RO, read-only access — RO, read-only access in privileged modes only — R/W, read/write access — R/W, read/write access in privileged modes only — WO, write-only access — WO, write-only access in privileged modes only — X, access depends on another register or external signal. Main ID寄存器的參數: 從上面c0組的Main ID寄存器,有32位,這32位被分成了5個地址段。例如[15:4]地址段是表明這是ARM11的處理器。此處的值是0xB76 前面的知識看到了,控制CP15協處理器,主要是設置對應的寄存器來實現控制的。接著就是來介紹如何訪問協處理器的寄存器的,并且實現設置。 主要是通過兩個命令來實現的mcr和mrc:r表示register普通寄存器,c表示coprocessor協處理器。 mcr命令中m表示move,c表示coprocessor,r表示register。所以mcr的意思就是把普通寄存器register的內容移到協處理器c里面。 mcr命令中m表示move,c表示coprocessor,r表示register。所以mrc的意思就是把協處理器c里面的內容移到普通寄存器register里面。 指令的格式: You can access CP15 registers with MRC and MCR instructions: MCR{cond} P15, MRC{cond} P15, 上面是CP15的訪問格式,CP14-CP0同理。 各個參數的值,上面的表格已經給出了: 上圖看到在c0組的Main ID寄存器,在設置mrc,把Main ID寄存器的內容讀到r1寄存器: 從上圖知道: CRn=c0:c0組的 Op1=0 CRm=c0 Op2=0 Rd=r1:就是要把Main ID讀到r0寄存器。 這樣就設置好了。接下來實驗訪問Main ID: 讀取Main ID指令: MRC P15,0,r1,c0,c0,0 運行結果: 讀出來的值是0x410fb766,這跟我們的核手冊的說明里的值是一致的,下圖。說明讀取成功: 上圖中[31:24]=0x41,[23:20]=0x0,[19:16]=0xF,[15:4]=0xB76,最后四位[3:0]是修訂位,是在0x0到0x7之間,這里是6,也是對的。所以讀出正確。 上面就是對CP15里的Main ID的讀取操作。 接下來是往Control寄存器里寫數據: 往c1組的Control寄存器寫入r1寄存器的值: MCR P15,0,r1,c1,c0,0 上面運行了,就把r1的值寫進去了。
上一篇:14.Bootloader設計思路
下一篇:12.ARM偽指令操作
推薦閱讀最新更新時間:2025-06-07 23:47




