<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > arm的協(xié)處理器有幾個(gè)?ARM協(xié)處理器詳解

arm的協(xié)處理器有幾個(gè)?ARM協(xié)處理器詳解

作者: 時(shí)間:2018-04-27 來(lái)源:網(wǎng)絡(luò ) 收藏

  這是運行于主機上的調試器向運行于內核上的應用程序傳輸消息的事件順序:

本文引用地址:http://dyxdggzs.com/article/201804/379160.htm

  1. 調試器輪詢(xún)通信數據控制寄存器的 R 位。 如果 R位已清除,則通信數據讀取寄存器已清空,可將數據寫(xiě)入此寄存器,以供目標應用程序讀取。

  2. 調試器通過(guò)掃描鏈 2 將數據掃描到通信數據讀取寄存器中。此操作會(huì )自動(dòng)設置通信數據控制寄存器中的 R 位。

  3. 目標應用程序輪詢(xún)通信數據控制寄存器中的 R 位。如果該位已經(jīng)設置,則通信數據讀取寄存器中已經(jīng)有數據,應用程序可使用 MRC 指令從14 讀取該數據。 同時(shí),讀取指令還會(huì )清除R 位。

  以下顯示的目標應用程序代碼演示了這一過(guò)程

  AREA InChannel, CODE,READONLY

  ENTRY

  MOV r1,#3 ; Number of words to read

  LDR r2, =indata ; Address to storedata read

  pollin

  MRC p14,0,r0,c0,c0 ; Read controlregister

  TST r0, #1

  BEQ pollin ; If R bit clear thenloop

  read

  MRC p14,0,r3,c1,c0 ; read word intor3

  STR r3,[r2],#4 ; Store to memoryand

  ; update pointer

  SUBS r1,r1,#1 ; Update counter

  BNE pollin ; Loop if more words toread

  MOV r0, #0x18 ;Angel_SWIreason_ReportException

  LDR r1, =0x20026 ;ADP_Stopped_ApplicationExit

  SVC 0x123456 ;  semihosting(formerly SWI)

  AREA Storage, DATA,READWRITE

  indata

  DCB “Duffmessage#”

  END

    

arm的協(xié)處理器有幾個(gè)?ARM協(xié)處理器詳解

  CP15系統控制

  CP15 —系統控制 (the system control coprocessor)他通過(guò)協(xié)處理器指令MCR和MRC提供具體的寄存器來(lái)配置和控制caches、MMU、保護系統、配置時(shí)鐘模式(在bootloader時(shí)鐘初始化用到)

  CP15的寄存器只能被MRC和MCR(Move to Coprocessor from  Register )指令訪(fǎng)問(wèn)

  MCR{cond} p15,,,,,

  MRC{cond} p15,,,,,

  其中L位用來(lái)區分MCR(L=1)和MRC(L=0)操作。 CP15包括15個(gè)具體的寄存器如下

  -R0:ID號寄存器

  -R0:緩存類(lèi)型寄存器

  -R1:控制寄存器

  -R2:轉換表基址寄存器(Translation Table Base --TTB)

  -R3:域訪(fǎng)問(wèn)控制寄存器(Domain access control )

  -R4:保留

  -R5:異常狀態(tài)寄存器(fault status -FSR)

  -R6:異常地址寄存器(fault address -FAR)

  -R7:緩存操作寄存器

  -R8:TLB操作寄存器

  -R9:緩存鎖定寄存器

  -R10:TLB 鎖定寄存器

  -R11-12&14:保留

  -R13:處理器ID

  -R15:測試配置寄存器 2-24

  要注意有2個(gè)R0,根據MCR操作數的不同傳送不同的值,這也一個(gè)只讀寄存器

  -R0:ID號寄存器 這是一個(gè)只讀寄存器,返回一個(gè)32位的設備ID號,具體功能參考各個(gè)系列型號的的CP15 Register 0說(shuō)明。

  MRC p15, 0, , c0, c0, {0, 3-7} ;returns ID

  以下為CP15的一些應用示例

  U32 ARM_CP15_DeviceIDRead(void)

  {

  U32 id;

  __asm { MRC P15, 0, id, c0, c0; }

  return id;

  }

  void ARM_CP15_SetPageTableBase(P_U32 TableAddress)

  {

  __asm { MCR P15, 0, TableAddress, c2, c0, 0; }

  }

  void ARM_CP15_SetDomainAccessControl(U32 flags)

  {

  __asm { MCR P15, 0, flags, c3, c0, 0; }

  }

  void ARM_CP15_ICacheFlush()

  {

  unsigned long dummy;

  __asm { MCR p15, 0, dummy, c7, c5, 0; }

  }

  void ARM_CP15_DCacheFlush()

  {

  unsigned long dummy;

  __asm { MCR p15, 0, dummy, c7, c6, 0; }

  }

  void ARM_CP15_CacheFlush()

  {

  unsigned long dummy;

  __asm { MCR p15, 0, dummy, c7, c7, 0; }

  }

  void ARM_CP15_TLBFlush(void)

  {

  unsigned long dummy;

  __asm { MCR P15, 0, dummy, c8, c7, 0; }

  }

  void ARM_CP15_ControlRegisterWrite(U32 flags)

  {

  __asm { MCR P15, 0, flags, c1, c0; }

  }

  void ARM_CP15_ControlRegisterOR(U32 flag)

  {

  __asm {

  mrc p15,0,r0,c1,c0,0

  mov r2,flag

  orr r0,r2,r0

  mcr p15,0,r0,c1,c0,0

  }

  }

  void ARM_CP15_ControlRegisterAND(U32 flag)

  {

  __asm {

  mrc p15,0,r0,c1,c0,0

  mov r2,flag

  and r0,r2,r0

  mcr p15,0,r0,c1,c0,0

  }

  }

  void ARM_MMU_Init(P_U32 TableAddress)

  {

  ARM_CP15_TLBFlush();

  ARM_CP15_CacheFlush();

  ARM_CP15_SetDomainAccessControl(0xFFFFFFFF);

  ARM_CP15_SetPageTableBase(TableAddress);

  }

  void Enable_MMU (void)

  {

  __asm {

  mrc p15,0,r0,c1,c0,0

  mov r2, #0x00000001

  orr r0,r2,r0

  mcr p15,0,r0,c1,c0,0

  }

  printf(“MMU enabledn”);

  }

  void Disable_MMU (void)

  {

  __asm {

  mrc p15,0,r0,c1,c0,0

  mov r2, #0xFFFFFFFE

  and r0,r2,r0

  mcr p15,0,r0,c1,c0,0

  }

  printf(“MMU disabledn”);

  }


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: ARM 協(xié)處理器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>