01_AVRCPU內核_第1頁
01_AVRCPU內核_第2頁
01_AVRCPU內核_第3頁
01_AVRCPU內核_第4頁
01_AVRCPU內核_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、AVRCPU內核介紹這部分討論AVR內核的總體結構。CPU內核的主要作用是保證程序的正確執行。因此, CPU必 須能夠進行以下操作:訪問內存、執行計算、控制外圍設備、處理中斷。結構概述Instrijctior RegisterFigure 3. Block Diagram of the AVR MCU ArchitectureFlashProgram MemoryProg ramCm n 但 1rati Bus 8-bitStatusand ControlIrstructionDecoderControl Lines32 xB General Purpose RegistrersWaichdo

2、g TimerAnalogComparatorI/O ModulelI/O Module nataSRAMI/O LinesI/O Module 2為了最大化性能和并行處理能力,AVR使用了哈佛結構一一程序和數據擁有獨立的存儲器和總線。程序存儲器中的指令以單級流水線方式執行,執行指令的同時,從程序存儲器中預取下一條指令, 使得指令能在單個時鐘周期內被執行。程序存儲器采用在系統可重復編程的Flash存儲器。快速訪問寄存器組(RegisterFile)包含32個8位通用寄存器,它們具有單周期訪問時間。這就實現了單周期的ALU運行。在典型白一次ALU操作中,以下工作將在一個時鐘周期內完成:從寄存器組

3、取兩個操作數、執行計算、計算結果存回寄存器組。32個寄存器中的6個寄存器可構成3個16位間接尋址寄存器指針 以用作數據空間的尋址,提高 了地址計算的效率。其中1個地址指針也可用于Flash程序存儲器中查表的地址指針。這些附加功能寄存器是16位的X、Y、Z寄存器,稍后將對它們進行描述。ALU支持寄存器之間或 寄存器與常量之間的算術邏輯運算,也支持 單寄存器操作。算 術運算之后,狀態寄存器(SREG)將發生更新以反應與計算結果有關的信息。程序流由“條件”和“非條件”跳轉(jump)、調用(call)指令提供,能夠直接訪問整個地址空 問。大多數AVR指令具有16位字格式。每一個程序存儲器地址下包含一

4、個16位或32位的指令。Flash程序存儲器空間劃分為兩個部分:Boot程序部分、應用程序部分。這兩個部分均有專用的 鎖定位提供“寫”和“讀/寫”保護。用于向Flash存儲器的應用程序部分進行寫入的 SPM指令必須 駐留于Boot程序部分。中斷和子程序調用期間,返回地址程序計數器(PC)存儲于堆棧。堆棧實際上分配于通用數據SRAM中,因此堆棧的大小僅受限于 SRAM的大小和使用。所有的用戶程序必須在復位(reset)例 程中初始化SP (堆棧指針)(在執行任何子程序和中斷之前)。在I/O空間中,SP是可以進行讀/寫訪 問的。在AVR架構中,對SRAM的訪問有5種不同的尋址模式。AVR架構中的內

5、存空間均是線性和規則的內存映射。靈活的中斷模塊在I/O空間具有自己的控制寄存器。止匕外,在狀態寄存器中還設置了全局中斷使 能位。所有的中斷在中斷向量表中具有獨立的中斷向量(中斷處理程序入口)。中斷優先級與中斷向量的位置有關,中斷向量的地址越低,優先級越高。I/O內存空間包含64個地址用于CPU的外圍功能,比如控制寄存器、SPI、其他的I/O功能。I/O 內存可直接訪問,或作為緊跟寄存器組的數據空間地址($20-$5F)訪問。ALU高性能AVRALU和所有的32個通用寄存器聯合工作。單時鐘周期內,執行一次能用寄存器之間 的算術運算或寄存器與立即數之間的算術運算。ALU的操作分為三個主要的類別:算

6、術、邏輯、位功能。有些結構的實現中會提供乘法器,能夠支持有符號、無符號及小數格式的乘法。詳見 “ - - -J,instructionsei:早下。狀態寄存器(SREG)關于最近執行的算術運算指令結果的信息會體現在狀態寄存器中。這些信息可用于改變程序流以執行條件操作。注意,狀態寄存器會在所有的ALU操作之后進行更新。在大多數情況下,這樣可以免除使用專用比較指令的必要,有利于產生更快和緊湊的編碼。當進入中斷的時候,狀態寄存器不會自動保存;當從中斷返回時,狀態寄存器也不會自動恢復。因此,這些工作必須由軟件進行。AVR狀態寄存器SREG的定義如下所示:Bit765A3210I SR EG1 11HS

7、 | VN2 CRti?dA/Vr ileR/WRAVR/WR/WR/0R/WR/WR/WInitial Value0Q000C00? Bit 7 I: Global Interrupt Enable必須置1全局中斷使能位以使能中斷。各自的中斷使能控制由各自的控制寄存器提供。如果全局中斷使能位清0,將禁用所有中斷,而不管各自的中斷使能設置如何。當一個中斷發生后,I位由硬件清0 (硬件不允許中斷嵌套,即 MCU向應一個中斷后將禁用全局中斷,不再響應其他中斷直到該中斷例程結束);RETI指令將置1全局中斷使能位以繼續響應隨后可能發生的中斷。止匕外,可使用 SEI 和CLI指令進行I位的軟件置1和清

8、00? Bit 6 T: -Bit Copy Storage助記符操作數描述操作標記耗費時鐘周期BSTRr, b寄存器到T的位存儲T-Rr(b)T1BLDRd, bT到寄存器的位裝載Rd(b)-TNone1位復制指令BLD (BitLoad)和BST (BitStore)使用T位作為操作“位”的源和目的。使用 BST 指令可將寄存器組中某個寄存器的特定位復制進T中;使用BLD指令可將T中的位復制進寄存器組中某個寄存器的特定位。? Bit 5 H:-Half Carry Flag半進位標志H用于指示一些算術運算中的半進位。半進位在BCD算術運算中很有用。? Bit 4 S:-Sign Bit,

9、S = N VS是N (負數標志)和V (補碼溢出標志)的異或值。? Bit 3 V: -Two ' s Complement Overflow Flag補碼溢出標志用于支持補碼算術。? Bit 2 N:-Negative Flag指示算術或邏輯運算的結果為負。? Bit 1 Z: -Zero Flag指示算術或邏輯運算的結果為00? Bit 0 C:-Carry Flag指示算術或邏輯運算的進位。通用寄存器組寄存器組針對AVR的增強RISC指令集進行了優化。為了獲得所需的靈活性和性能,寄存器組支持以下輸入/輸出方案。One 8-bit output operand and one 8

10、-bit result input Two 8-bit output operands and one 8-bit result input Two 8-bit output operands and one 16-bit result inputOne 16-bit output operand and one 16-bit result input圖4展示了 CPU中的32個通用寄存器的結構。70Wdr.$00General Purpose Working RegistersROR1數據空間JUNR2-$0D$0E50F $10 $11$1AX|-register LowByte$1BX-

11、register HighByte$1CY-register LowByte$1DY-register HighByte$1EZ-register LowByte$1FZ-register HighByteR13R14R15R16R17,«R26R27R28R29R30R31大部分面向寄存器組的指令都能夠直接訪問所有的寄存器,而且大部分指令是單周期指令。如圖4所示,每個寄存器都分配了我一個數據內存空間地址,直接將他們映射到用戶數據空間的前32個位置。盡管寄存器組沒有在實體上作為 SRAM的一部分,這樣的內存組織在寄存器訪問上面 提供了強大白靈活性,X、Y和Z指針寄存器可被設置用來索引

12、組中的任何寄存器。X、Y、Z寄存器R26至R31的寄存器除了通常的用途外,還有附加功能。這些寄存器可作為16位地址指針,提供對數據空間(DataSpace的間接訪問。這三個間接地址寄存器 X、Y和Z的定義如下圖所示:15!,0X - register 1D 口15YHYL口Y - register R29|$l口)R2S 但IC15ZHZLQZ - register R31 |$1FR閱 01C)在不同的尋址模式下,這些地址寄存器的功能有:固定偏移量、自動增量、自動減量。堆棧指針堆棧主要用于存放臨時數據,比如存放局部變量、中斷和子程序調用后的返回地址。堆棧指針寄 存器(16位寄存器,SPH?口

13、 SPL對應的數據空間地址為$005和$005D)始終指向棧頂。注意,AVR 的堆棧設計成從高地址往低地址生長。這就意味著PUSH指令會減小堆棧指針。如果軟件在子程序調 用或中斷之后從堆棧中讀取 PC的值,需要屏蔽掉未用的13到15位(PC寬為13位,用于尋址8k的 Flash ) o堆棧指針指向SRAM數據堆棧,子程序和中斷的棧分配于此。數據 SRAM中的堆棧空間必須由 程序預先定義,即在執行任何子程序或使能任彳中斷之前。堆棧指針必須指向地址高于$60的區域。使用PUSH指令將數據壓入堆棧時,堆棧指針減1;因為子程序調用或中斷而將返回地址壓入堆棧時, 堆棧指針減2。使用POP指令將數據從堆棧

14、彈出時,堆棧指針加 1;因從子程序返回(RET)或從中 斷返回(RETI)而使得數據彈出堆棧時,堆棧指針加 2。堆棧指針是I/O空間里的兩個8位寄存器。實際使用的位個數取決于實現。 注意,在AVR架構的些實現中,因為數據空間很小,因此只需要 SPL就足夠了,而SPH寄存器則不會出現Bit151413121110gB| SP13SP14SP13 |'PS ISP11SP1。ISP&SPS ISPHI MSP&5P51SP4 1SP3spn1SP1 SPO ISPL7e54321DRead/WriteR/WR/WRAVRM'R/WRMR/WR/WRAMR/WRAA/

15、R/WR/WRF'R/WRMJInitial Value0000000D000000o口指令執行時序這部分介紹指令執行的訪問時序。AVR的CPU由CPU時鐘clkCPU驅動,該時鐘由選中的時鐘源 產生。沒有使用內部時鐘分頻圖6描述了哈佛架構和快速寄存器訪問所使能的并行指令獲取和執行。這是獲得IMIPS/MHz的基本流水線概念。Figure 6, The Parallel Instruction (Fetches and Instruction Executions11 1T112T3l1ilii111T4dkCPUI,_n _/ v_-111st Instruction Fetch/i

16、 !1X1 /i11st Instruction Execute111-112nd Instruction Fetch2nd Instruction Executeii!_/1111 jj;Lzv3rd Instruction Fetch1113rd Instruction Execute 1111 J/4th Instruction Fetch ; 1111111II圖7展示了寄存器組的內部時序概念。在單時鐘周期內,執行了使用兩個寄存器操作數的ALU操作,并將結果存回目的寄存器。Figure 7, Single Cycle ALU OperationTiT2T3T4iiiiiidkcpu -

17、J''_I LLU i _iiiTotal Execirtion Time -KI11IlIIRegister Operands Fetch ()IIIALU Operation Execute (""3 ';'IIIResult Write Back <"";!復位和中斷處理AVR提供了數個不同的中斷源。這些中斷和獨立的復位(Reset)向量(硬件決定的特定中斷的入口地址)在程序內存空間(Flash)中均有各自獨立的程序向量。所有的中斷均分配有獨立的使能 位,欲便能中斷必須同時便能獨立的使能位和狀態寄存器中的全局使

18、能位。取決于程序計數器的值、 當鎖定位BLB02或BLB12被編程時,中斷可能會被自動禁用。該特色增強了軟件的安全性。詳見“內 存編程”章節。程序內存空間的最低地址處默認定義為復位和中斷向量。向量的完整列表見“中斷”章節。該列 表同時也定義了中斷的優先級別:地址越低,優先級別越高。RESET具有最高的優先級,下一個是INTO 外部中斷請求00通過設置GICR (通用中斷控制寄存器)中的IVSEL位,可以將中斷向量 移動到FlashBoot部分的開端,詳見“中斷”章節。通過編程 BOOTRST熔絲也可將復位向量移動至 FlashBoot部分的開端,詳見 “ BootLoaderSupport R

19、ead-While-WhteSelfProgramming” 章節。當中斷發生,全局中斷使能位(I位)將清0,所有的中斷將被禁用(硬件不支持中斷嵌套)0用 戶軟件可以向I位寫邏輯1以使能中斷嵌套(使用SEI指令)。而后,所有使能的中斷均可以中斷當 前正在進行的中斷例程(采用軟件方法實現了中斷嵌套)0當從中斷指令返回時(執行RETI), I位將 自動置1。總體上講有兩個類型的中斷。第一種類型的中斷由置1中斷標志的事件所觸發,對于這些中斷,程序計數器(PC)被引導至實際的中斷向量以執行中斷處理程序,同時硬件將清零相應的中斷 標志。中斷標志也可以采用向其標志位所在位置寫邏輯1的方法進行清零。如果當對

20、應的中斷使能位清零的時候發生了中斷條件,中斷標志將置1并保持直到中斷被使能或中斷標志被軟件清零(中斷掛起)。類似的,當全局中斷使能位清零的時候,如果發生了一個或多個中斷條件,相應的中斷標志將 置1并保持直到全局中斷使能位置1,而后再按優先級順序執行中斷。第二種中斷只要中斷條件滿足即觸發。這些中斷不需要中斷標志。如果中斷條件在中斷使能 前消失,則中斷不會被觸發。當AVR從某個中斷退出時,它將始終返回主程序并再執行一條指令后才能繼續響應掛起的中斷。注意,當進入中斷處理程序時,不會自動保存狀態寄存器;從中斷返回時,也不會自動恢復狀態 寄存器,這些工作需要由軟件完成。當使用CLI指令禁用中斷時,中斷將

21、被立即禁止。在 CLI指令后,不會執行任何中斷,即使它和 CLI指令同時發生。下面的例子展示了如何在EEPROM寫序列期間使用該方法禁用中斷。Assembly Code Examplein rlG t SRSG; store £REG vaI tiecli ; disable interrupts during tiired setiuenceAbt EECii, eemwe ; start kephom write sbi EEFj FFWEout SRBG ( rlG ; res tore SR2G value (I-bit)C Code Examplechar c£TiEG-C5REG - SREG; /*SREG value */* disable intern;pcs ourlng sequence */BECR |- (l«E£r4WE) ; /* start BEPRC1M write */E3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論