在基於ARM的嵌入式應用系統中,存儲系統通常是通過系統控制協處理器CP15完成的。ARM處理器使用協處理器15(CP15)的寄存器來控制cache、TCM和存儲器管理。CP15包含16個32位的寄存器,其編號為0~15。
CP15訪問CP15寄存器的指令
MCR ARM寄存器到協處理器寄存器的數據傳送
MRC 協處理器寄存器到ARM寄存器的數據傳送
MCR指令和MRC指令只能在處理器模式為系統模式時執行,在用戶模式下執行MCR指令和MRC指令將會觸發未定義指令的異常中斷。
MCR指令
MCR指令將ARM處理器的寄存器中的數據傳送到協處理器寄存器中。如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。
指令語法格式
MCR{<cond>} <p>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>} MCR{<cond>} p15,0,<Rd>,<CRn>,<CRm>{,<opcode_2>}
其中,<cond>為指令執行的條件碼。當<cond>忽略時指令為無條件執行。
<opcode_1>為協處理器將執行的操作的操作碼。對於CP15協處理器來說,< opcode_1>永遠為0b000,當< opcode_1>不為0b000時,該指令操作結果不可預知。
<Rd>作為源寄存器的ARM寄存器,其值將被傳送到協處理器寄存器中。
<CRn>作為目標寄存器的協處理器寄存器,其編號可能是C0,C1,…,C15。
<CRm>和<opcode_2>兩者組合決定對協處理器寄存器進行所需要的操作,如果沒有指定,則將為<CRm>為C0,opcode_2為0,否則可能導致不可預知的結果。
使用示例
下面的指令從ARM寄存器R4中中將數據傳送到協處理器CP15的寄存器C1中。其中R4為ARM寄存器,存放源操作數,C1、C0為協處理器寄存器,為目標寄存器,opcode_1為0,opcode_2為0。
MCR p15, 0, R4, C1, C0, 0
MRC指令
MRC指令將協處理器的寄存器中的數值傳送到ARM處理器的寄存器中、如果協處理器不能成功地執行該操作,將產生未定義的指令異常中斷。
指令語法格式
MRC{<cond>} <p>,<opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>} MRC{<cond>} p15,0,<Rd>,<CRn>,<CRm>{,<opcode_2>}
參數用法同MCR指令
CP15中的寄存器介紹
寄存器0數據格式
寄存器1數據格式
附圖1:
附圖2:
轉自:http://simengru.blog.163.com/blog/static/54386860201010301111898/