<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,ARM架構基礎知識小結

從單片機轉ARM,ARM架構基礎知識小結

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

  從單片機轉到,主要需要學(xué)習的架構,相比單片機多了一些外設和總線(xiàn)。在僅僅是裸奔的情況下,如果熟悉了ARM架構,那么我認為使用任何ARM架構的和用單片機將沒(méi)有區別。ARM架構之所以更復雜,當然是為了跑更快以及更好地支持片上系統,所以在某種程度上來(lái)說(shuō)對片上系統不是很了解的話(huà)那對于A(yíng)RM架構的理解也不會(huì )那么深。

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

  通用寄存器

  R13通常被用作棧指針,進(jìn)入異常模式時(shí),可以將需要使用的寄存器保存在R13所指的棧中;當退出異常吹程序時(shí),將保存在R13所指的棧中的寄存器值彈出。

  R14又被稱(chēng)為連接寄存器(LinkRegister,LR),即PC的返回值。

  R15又被記作PC。ARM指令是字對齊的,PC的值的第0位和第1位總為0。也就是說(shuō)是32位對齊。

1.jpg

  就Cortex-M3來(lái)說(shuō),擁有R0-R15的寄存器組。其中R13作為堆棧指針SP。SP有兩個(gè),分別為R13(MSP)和R13(PSP)即主堆棧指針(MSP)和進(jìn)程堆棧指針(PSP),但在同一時(shí)刻只能有一個(gè)可以看到,這也就是所謂的“banked”寄存器。這些寄存器都是32位的。

  ARM的各個(gè)模式

  ARM有以下7種模式:

  用戶(hù)模式(User,usr) 正常程序執行的模式

  快速中斷模式(FIQ,fiq) 用于高速數據傳輸和通道處理

  外部中斷模式(IRQ,irq) 用于通常的中斷處理

  特權模式(Supervisor,svc) 供操作系統使用的一種保護模式

  數據訪(fǎng)問(wèn)中止模式(Abort,abt) 用于虛擬存儲及存儲保護

  未定義指令中止模式(Undefined,und) 用于支持通過(guò)軟件方針硬件的協(xié)處理器

  系統模式(System,sys) 用于運行特權級的操作系統任務(wù)

  其中除了用戶(hù)模式之外都稱(chēng)之為特權模式(privileged modes),而在privileged modes中除了系統模式其它都稱(chēng)為異常模式,即exception mode。起初關(guān)于異常這個(gè)詞我的理解有些偏差,我認為異常模式就是這個(gè)系統出錯了,而實(shí)際上不是。exception mode的意思是例外,意思是“這模式什么時(shí)候會(huì )發(fā)生不好說(shuō)……”,比如說(shuō)來(lái)了個(gè)外部中斷也會(huì )進(jìn)入異常模式,但是此時(shí)系統是運行完好的。

  其中SVC用于在系統剛啟動(dòng)的啟動(dòng)文件BOOT程序中,跳轉到kernel之前必須為SVC,SVC具有最高權限,可以對任何寄存器進(jìn)行操作。在裸機程序中我們有時(shí)候會(huì )一直處于SVC模式下。

  關(guān)于什么時(shí)候會(huì )進(jìn)入用戶(hù)模式或者系統模式,以下是我的猜測,比如進(jìn)入linux kernel之后會(huì )設置成sys模式,比如任務(wù)調度等等都會(huì )在sys模式中,而執行用戶(hù)編寫(xiě)的應用程序時(shí),系統是處于usr模式中。以上猜測需要在linux中找出證據驗證。

  其中FIQ,IRQ為中斷模式,有中斷發(fā)生時(shí)會(huì )進(jìn)入FIQ模式或者IRQ模式,至于到底是進(jìn)入哪個(gè)模式是由開(kāi)發(fā)者設定的。理論上FIQ模式的響應速度比IRQ模式要快。

  其中abt模式通常發(fā)生于在訪(fǎng)問(wèn)地址沒(méi)有對齊時(shí)的情況,此時(shí)會(huì )跳轉到abt所屬的中斷向量地址中去。und模式應該是取到指令之后發(fā)現指令不能用,,此時(shí)會(huì )跳轉到abt所屬的中斷向量地址中去。以上兩種模式應該是開(kāi)發(fā)過(guò)程中出現BUG才會(huì )進(jìn)入的,也是一種調試手段,在版本發(fā)行之前應該消除這些錯誤(我猜= =)。

  啟動(dòng)文件

  這一部分只要了解一下協(xié)處理器CP15的相關(guān)作用以及ARM或者THUMB匯編再看一下網(wǎng)上的例程以及解釋?xiě)摬浑y理解。

  在啟動(dòng)文件中我們可以做任何事情,但是通常我們可以做這些:改變程序大小端排序,關(guān)閉看門(mén)狗,屏蔽中斷,設置各個(gè)時(shí)鐘,設置從SLEEP或者IDLE啟動(dòng)時(shí)的程序,初始化SDRAM,設置各模式指向的堆棧,設置好中斷向量表,判斷是從NOR還是NAND FLASH啟動(dòng),將文件拷到SDRAM中,運行Main。

  以上也說(shuō)明了為什么需要一個(gè)匯編寫(xiě)的啟動(dòng)文件,設置各個(gè)模式下的SP指針以及初始化中斷向量的跳轉(ARM的中斷較多設置也較靈活)也只有匯編干比較合適了。甚至在SOC(片上系統)中每個(gè)任務(wù)都有自己的堆棧,所以改變堆棧指針的那一部分程序也是放在匯編里做的??傊私鈫?dòng)文件是一個(gè)非常好的切入點(diǎn)。

  MMU相關(guān)地址基本概念

  關(guān)于MMU,因為多種存儲設備的物理地址不同以及不連貫性,將其地址安放在合理的連續虛擬地址上是很必要的,所以MMU出現了。MMU即將不同的地址放在合適的虛擬地址中,以便調度。比如要跑LINUX必須要有MMU的支持才行。

  ARM920T中有三種類(lèi)型的地址:

  虛擬地址(VA),變換后的虛擬地址(MVA),物理地址(PA)。

  以下是一個(gè)當一個(gè)指令被請求時(shí)地址所做操作的例子:

  1、 指令VA(IVA)被ARM920T發(fā)出

  2、 它被ProcID(當前進(jìn)程所在的進(jìn)程空間塊的編號)轉換成指令MVA(IMVA),指令CACHE(ICACHE)和MMU看到的就是IMVA。

  3、 如果在IMMU上的保護模塊確認IMVA不會(huì )被中斷,并且IMVA標簽也在ICACHE中,指令數據會(huì )讀出并返回到ARM920T內核中。

  4、 如果IMVA tag并不在ICACHE中,那么IMMU會(huì )產(chǎn)生出一個(gè)指令PA(IPA)。地址會(huì )給AMBA總線(xiàn)接口以獲取外部數據。

2.jpg

  那么VA是如何被PID轉換為MVA的呢?

  這有關(guān)于CP15中的13,FCSE PID register

  R13是fast context switch extension(FCSE 快速上下文切換擴展)processidentifier(PID 進(jìn)程標識符)寄存器,此寄存器復位時(shí)為0。

  讀R13會(huì )得到FCSE PID的值,寫(xiě)R13會(huì )更新FCSE PID的值到[31:25]中,位[24:0]應該是零。

  如何使用FCSE PID:

  920T內核發(fā)出的地址都是0-32MB的范圍,4GB的逆序空間被分成了1238個(gè)進(jìn)程空間塊,每個(gè)進(jìn)程空間塊大小為32MB。每個(gè)進(jìn)程空間塊中可以包含一個(gè)進(jìn)程。系統128個(gè)進(jìn)程空間塊的編號0-127,編號為I的進(jìn)程空間塊中的進(jìn)程實(shí)際使用的虛擬地址空間為(I*0x02000000)到(I*0x02000000+0x01FFFFFF)。

  所以VA通常高7位都為0時(shí) MVA = VA | (PID << 25)

  當VA高7位不為0時(shí) MVA = VA,這種VA是本進(jìn)程用于訪(fǎng)問(wèn)別的進(jìn)程中的數據和指令的虛擬地址,注意這時(shí)被訪(fǎng)問(wèn)的進(jìn)程標識符不能為0。

  注意:當FCSE_PID為0時(shí),即當前復位,則當前920T和CACHES及MMU之間是平面映射的關(guān)系(很巧妙:))。

  TLB是什么

  TLB即translate look-aside buffer,快表就是存儲幾個(gè)常用的頁(yè)表,以提高系統運行的速度。在更新頁(yè)表之前要使其無(wú)效,其操作的寄存器為R8,R8為只寫(xiě)寄存器,如果讀它則會(huì )造成不可估計的后果。

3.jpg

  AP賦值表:

4.jpg

  而DOMAIN的賦值則是在C3中的,32bit共有16個(gè)域,每個(gè)域分兩個(gè)bit,這兩個(gè)bit控制當前域的權限。而以上四個(gè)bit是為了選擇0-15個(gè)域的其中一個(gè)。

  關(guān)于C、B賦值:

5.jpg

  以上有關(guān)于兩種寫(xiě)緩存,寫(xiě)通以及寫(xiě)回。寫(xiě)回法是指CPU在執行寫(xiě)操作時(shí),被寫(xiě)的數據只寫(xiě)入cache,不寫(xiě)入主存,僅當需要替換時(shí),才把已經(jīng)修改的cache塊寫(xiě)回到主存中。寫(xiě)通法是指CPU在執行寫(xiě)操作時(shí),必須把數據同時(shí)寫(xiě)入cache和主存。

  時(shí)鐘以及總線(xiàn)概念

  FCLK, HCLK, andPCLK

  FCLK is used byARM920T.

  HCLK is used forAHB bus, which is used by the ARM920T, the memory controller, the interruptcontroller, the LCD controller, the DMA and USB host block.

  PCLK is used forAPB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMCinterface,ADC, UART, GPIO, RTC and SPI.

  What is AHB/APB?

  InternalAdvanced Microcontroller Bus Architecture(AMBA)是一種總線(xiàn)標準,以下兩項都符合此標準。

  AHB(AdvancedHigh performance Bus),主要用于系統高性能、高時(shí)速速率模塊間通信。

  APB(AdvancedPeripheral Bus),主要用于慢速片上外設與ARM核的通訊。

  AHB私有外設總線(xiàn),只用于CM3內部的AHB外設,它們是:NVIC,FPB, DWT和ITM。

  APB私有外設總線(xiàn),既用于CM3內部的APB設備,也用于外部設備(這里的“外部”是對內核而言)。CM3允許器件制造商再添加一些片上APB外設到APB私有總線(xiàn)上,它們通過(guò)APB接口來(lái)訪(fǎng)問(wèn)。

  四種耗電模式:

  NORMAL,SLOW,IDLE,SLEEP

  先配置主PLL MPLL給CPU用。在上電復位的時(shí)候PLL是不穩定的,所以在PLLCON在被軟件配置之前Fin直接是跳過(guò)MPll給FCLK,所以不配置PLLCON也是可以正常工作。即使工作在正常狀態(tài)下,也可以對MPLLCON進(jìn)行配置,配置之后等待PLL Lock-time過(guò)后內部各模塊的CLK才可以被正常供應。



關(guān)鍵詞: ARM 芯片

評論


相關(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>