電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>淺談ARM協(xié)處理器CP15

淺談ARM協(xié)處理器CP15

2017-10-17 | rar | 0.4 MB | 次下載 | 1積分

資料介紹

 ARM存儲系統(tǒng)有非常靈活的體系結構,可以適應不同的嵌入式應用系統(tǒng)的需要。ARM存儲器系統(tǒng)可以使用簡單的平板式地址映射機制(就像一些簡單的單片機一樣,地址空間的分配方式是固定的,系統(tǒng)中各部分都使用物理地址),也可以使用其他技術提供功能更為強大的存儲系統(tǒng)。比如:
  · 系統(tǒng)可能提供多種類型的存儲器件,如FLASH、ROM、SRAM等;
  · Caches技術;
  · 寫緩存技術(write buffers);
  · 虛擬內存和I/O地址映射技術。
  大多數(shù)的系統(tǒng)通過下面的方法之一實現(xiàn)對復雜存儲系統(tǒng)的管理。
  · 使能Cache,縮小處理器和存儲系統(tǒng)速度差別,從而提高系統(tǒng)的整體性能。
  · 使用內存映射技術實現(xiàn)虛擬空間到物理空間的映射。這種映射機制對嵌入式系統(tǒng)非常重要。通常嵌入式系統(tǒng)程序存放在ROM/FLASH中,這樣系統(tǒng)斷電后程序能夠得到保存。但是通常ROM/FLASH與SDRAM相比,速度慢很多,而且基于ARM的嵌入式系統(tǒng)中通常把異常中斷向量表放在RAM中。利用內存映射機制可以滿足這種需要。在系統(tǒng)加電時,將ROM/FLASH映射為地址0,這樣可以進行一些初始化處理;當這些初始化處理完成后將SDRAM映射為地址0,并把系統(tǒng)程序加載到SDRAM中運行,這樣很好地滿足嵌入式系統(tǒng)的需要。
  · 引入存儲保護機制,增強系統(tǒng)的安全性。
  · 引入一些機制保證將I/O操作映射成內存操作后,各種I/O操作能夠得到正確的結果。在簡單存儲系統(tǒng)中,不存在這樣問題。而當系統(tǒng)引入了Cache和write buffer后,就需要一些特別的措施。
  在ARM系統(tǒng)中,要實現(xiàn)對存儲系統(tǒng)的管理通常是使用協(xié)處理器CP15,它通常也被稱為系統(tǒng)控制協(xié)處理器(System Control Coprocessor)。
  ARM的存儲器系統(tǒng)是由多級構成的,每級都有特定的容量和速度。
  圖15.1顯示了存儲器的層次結構。
 ?、?寄存器。處理器寄存器組可看作是存儲器層次的頂層。這些寄存器被集成在處理器內核中,在系統(tǒng)中提供最快的存儲器訪問。典型的ARM處理器有多個32位寄存器,其訪問時間為ns量級。
  淺談ARM協(xié)處理器CP15
  圖15.1 存儲器的層次結構
 ?、?緊耦合存儲器TCM。為彌補Cache訪問的不確定性增加的存儲器。TCM是一種快速SDRAM,它緊挨內核,并且保證取指和數(shù)據(jù)操作的時鐘周期數(shù),這一點對一些要求確定行為的實時算法是很重要的。TCM位于存儲器地址映射中,可作為快速存儲器來訪問。
  ③ 片上Cache存儲器的容量在8KB~32KB之間,訪問時間大約為10ns。
 ?、?高性能的ARM結構中,可能存在第二級片外Cache,容量為幾百KB,訪問時間為幾十ns。
 ?、?DRAM。主存儲器可能是幾MB到幾十MB的動態(tài)存儲器,訪問時間大約為100ns。
 ?、?后援存儲器,通常是硬盤,可能從幾百MB到幾個GB,訪問時間為幾十ms。
  注意TCM和SRAM在技術上相同,但在結構排列上不同;TCM在片上,而SRAM在板上。
  15.1 協(xié)處理器CP15
  ARM處理器支持16個協(xié)處理器。在程序執(zhí)行過程中,每個協(xié)處理器忽略屬于ARM處理器和其他協(xié)處理器的指令。當一個協(xié)處理器硬件不能執(zhí)行屬于它的協(xié)處理器指令時,將產(chǎn)生一個未定義指令異常中斷,在該異常中斷處理程序中,可以通過軟件模擬該硬件操作。比如,如果系統(tǒng)不包含向量浮點運算器,則可以選擇浮點運算軟件模擬包來支持向量浮點運算。
  CP15,即通常所說的系統(tǒng)控制協(xié)處理器(System Control Coprocesssor)。它負責完成大部分的存儲系統(tǒng)管理。除了CP15外,在具體的各種存儲管理機制中可能還會用到其他的一些技術,如在MMU中除CP15外,還使用了頁表技術等。
  在一些沒有標準存儲管理的系統(tǒng)中,CP15是不存在的。在這種情況下,針對協(xié)處理器CP15的操作指令將被視為未定義指令,指令的執(zhí)行結果不可預知。
  CP15包含16個32位寄存器,其編號為0~15。實際上對于某些編號的寄存器可能對應多個物理寄存器,在指令中指定特定的標志位來區(qū)分這些物理寄存器。這種機制有些類似于ARM中的寄存器,當處于不同的處理器模式時,某些相同編號的寄存器對應于不同的物理寄存器。
  CP15中的寄存器可能是只讀的,也可能是只寫的,還有一些是可讀可寫的。在對協(xié)處理器寄存器進行操作時,需要注意以下幾個問題。
  · 寄存器的訪問類型(只讀/只寫/可讀可寫)。
  · 不同的訪問引發(fā)的不同功能。
  · 相同編號的寄存器是否對應不同的物理寄存器。
  · 寄存器的具體作用。
  15.1.1 CP15寄存器訪問指令
  通常對協(xié)處理器CP15的訪問使用以下兩種指令。
  MCR:將ARM寄存器的值寫入CP15寄存器中;
  MRC:將CP15寄存器的值寫入ARM寄存器中。
  注意通過協(xié)處理器訪問指令CDP、LDC和STC指令對協(xié)處理器CP15進行訪問將產(chǎn)生不可預知的結果。
  其中,CDP為協(xié)處理器數(shù)據(jù)操作指令,這個指令初始化一些與協(xié)處理器相關的操作;
  LDC為一個或多個字的協(xié)處理器數(shù)據(jù)讀取指令,此指令從存儲器讀取數(shù)據(jù)到指定的協(xié)處理器中;
  STC為一個或多個32位字的協(xié)處理器數(shù)據(jù)寫入指令,此指令初始化一個協(xié)處理器的寫操作,從給定的協(xié)處理器把數(shù)據(jù)傳送到存儲器中。
  指令MCR和MRC指令訪問CP15寄存器使用通用語法。
  語法格式為:
  MCR{《cond》} p15,《opcode1=0》,《Rd》,《CRn》,《CRm》{,《opcode2》}
  MRC{《cond》} p15,《opcode1=0》,《Rd》,《CRn》,《CRm》{,《opcode2》}
  其中:
  《cond》為指令的執(zhí)行條件。當《cond》條件域為空時,指令無條件執(zhí)行;
  《opcode1》在標準的MRC指令中,為協(xié)處理器的《opcode1》,即操作數(shù)1。對于CP15來說,此操作數(shù)恒為0,即0b000。當針對CP15的MRC指令中《opcode1》不為0時,指令的操作結果不可預知;
  《Rd》為ARM寄存器,在ARM和協(xié)處理器交換數(shù)據(jù)時使用。在MRC指令中作為目的寄存器,在MCR中作為源寄存器。
  注意r15不能作為ARM寄存器出現(xiàn)在MRC或MCR指令中,如果r15作為《Rd》出現(xiàn)在這里,那么指令的執(zhí)行結果不可預知。
  《CRn》是CP15協(xié)處理器指令中用到的主要寄存器。在MRC指令中為源寄存器,在MCR中為目的寄存器。CP15協(xié)處理器的寄存器c0、c1、…、c15均可出現(xiàn)在這里。
  《CRm》是附加的協(xié)處理器寄存器,用于區(qū)分同一個編號的不同物理寄存器和訪問類型。當指令中不需要提供附加信息時,將《CRm》指定為C0,否則指令的操作結果不可預知。
  《opcode2》提供附加信息,用于區(qū)分同一個編號的不同物理寄存器,當指令中沒有指定附加信息時,省略《opcode2》或者將其指定為0,否則指令的操作結果不可預知。
  MCR和MRC指令只能操作在特權模式下,如果處理器運行在用戶模式,指令的執(zhí)行結果不可預知。
  注意在用戶模式下,如果要訪問系統(tǒng)控制協(xié)處理器,通常的做法是由操作系統(tǒng)提供SWI軟中斷調用來完成系統(tǒng)模式的切換。由于不同型號的ARM處理器對此管理差別很大,所以建議用戶在應用時將SWI作為一個獨立的模塊來管理并向上提供通用接口,以屏蔽不同型號處理器之間的差異。
  例15.1給出了一個典型的利用SWI進行模式切換的例子。
  【例15.1】
  典型的在SWI中進行模式切換的例子。利用此例,調用SWI 0來完成系統(tǒng)模式切換。
  EHT_SWI
  LDR sp,=EHT_Exception_Stack ;更新SWI堆棧指針
  ADD sp,sp,#EXCEPTION_SIZE ;得到棧頂指針
  STMDB sp!,{r0-r2,lr} ;保存程序中用到的寄存器
  MRS r0,SPSR ;得到SPSR
  STMDB sp!,{r0} ;保持SPSR
  LDR r0,[lr,#-4] ;計算SWI指令地址
  BIC r0,r0,#0xFF000000 ;提取中斷向量號
  CMP r0,#MAX_SWI ;檢測中斷向量范圍
  LDRLS pc,[pc,r0,LSL #2] ;如果在范圍內,跳轉到軟中斷向量表
  B EHT_SWI_Exit ;為定義的SWI指令出口
  EHT_Jump_Table
  DCD EHT_SU_Switch
  DCD EHT_Disable_Interrupts
 ??;*********************************************************************************
 ?。挥脩艨稍诖颂砑痈嗟淖远x軟中斷,在此SWI0作為系統(tǒng)保留的軟中斷,調用例程EHT_SU_Switch,來進行模式切換
 ??;*********************************************************************************
  EHT_SU_Switch
  MMU_DISABLE ;轉換前禁用MMU
  LDMIA sp!,{r0} ;從堆棧中取出SPSR
  BIC r0,r0,#MODE_MASK ;清除模式位
  ORR r0,r0,#SYS_MODE ;設置程序狀態(tài)字的supper模式位
  STMDB sp!,{r0} ;從新將SPSR放入堆棧
  B EHT_SWI_Exit
  EHT_Disable_Interrupts
  LDMIA sp!,{r0} ;從堆棧中讀出SPSR
  ORR r0,r0,#LOCKOUT ;禁止中斷
  STMDB sp!,{r0} ;存儲SPSR到中斷
  ; B EHT_SWI_Exit
  EHT_SWI_Exit
  LDMIA sp!,{r0} ;從堆棧中讀出SPSR
  MSR SPSR_cf,r0 ;將SPSR放入SPSR_cf
  LDMIA sp!,{r0-r2,pc}^ ;寄存器出棧并返回
  END
  15.1.2 CP15中的寄存器
  表15.1給出了CP15主要寄存器的功能和作用。
  表15.1 CP15寄存器
  寄存器編號基 本 作 用特 殊 用 途
  0ID編號(只讀)ID和Cache類型
  1控制位各種控制位
  2存儲器保護和控制MMU:地址轉換表基地址
  PU:Cache屬性設置
  3內存保護和控制MMU:域訪問控制
  PU:寫緩存控制
  4內存保護和控制保留
  5內存保護和控制MMU:錯誤狀態(tài)
  PU:訪問權限控制
  6內存保護和控制MMU:錯誤狀態(tài)
  PU:保護區(qū)域控制
  7Cache和寫緩存Cache和寫緩存控制
  8內存保護和控制MMU:TLB控制
  PU:保留
  9Cache和寫緩存Cache鎖定
  續(xù)表
  寄存器編號基 本 作 用特 殊 用 途
  10內存保護和控制MMU:TLB鎖定
  PU:保留
  11保留保留
  12保留保留
  13進程ID進程ID
  14保留保留
  15芯片生產(chǎn)廠商定義芯片生產(chǎn)廠商定義
  15.1.3 寄存器c0
  寄存器c0包含的是ARM本身或芯片生產(chǎn)廠商的一些標識信息。當使用MRC指令讀c0寄存器時,根據(jù)第二個操作碼opcode2的不同,讀出的標識符也是不同的。操作碼與標識符的對應關系如表15.2所示。寄存器c0是只讀寄存器,當用MCR指令對其進行寫操作時,指令的執(zhí)行結果不可預知。
  表15.2 操作碼和標識符的對應關系
  操作碼opcode2對應的標識符寄存器
  0b000主標識符寄存器
  0b001Cache類型寄存器
  其他保留
  在操作碼opcode2的取值中,主標識符(opcode2=0)是強制定義的,其他標識符由芯片的生產(chǎn)廠商定義。如果操作碼opcode2指定的值未定義,指令將返回主標識符。其他標識符的值應與主標識符的值不同,可以由軟件編程來實現(xiàn),同時讀取主標識符和其他標識符,并將兩者的值進行比較。如果兩個標識符值相同,說明未定義該標識符;如果兩個標識符值不同,說明定義了該標識符,并且得到該標識符的值。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發(fā)板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費