01_AVRCPU內(nèi)核_第1頁
01_AVRCPU內(nèi)核_第2頁
01_AVRCPU內(nèi)核_第3頁
01_AVRCPU內(nèi)核_第4頁
01_AVRCPU內(nèi)核_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、AVRCPU內(nèi)核介紹這部分討論AVR內(nèi)核的總體結(jié)構(gòu)。CPU內(nèi)核的主要作用是保證程序的正確執(zhí)行。因此, CPU必 須能夠進行以下操作:訪問內(nèi)存、執(zhí)行計算、控制外圍設(shè)備、處理中斷。結(jié)構(gòu)概述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使用了哈佛結(jié)構(gòu)一一程序和數(shù)據(jù)擁有獨立的存儲器和總線。程序存儲器中的指令以單級流水線方式執(zhí)行,執(zhí)行指令的同時,從程序存儲器中預(yù)取下一條指令, 使得指令能在單個時鐘周期內(nèi)被執(zhí)行。程序存儲器采用在系統(tǒng)可重復(fù)編程的Flash存儲器。快速訪問寄存器組(RegisterFile)包含32個8位通用寄存器,它們具有單周期訪問時間。這就實現(xiàn)了單周期的ALU運行。在典型白一次ALU操作中,以下工作將在一個時鐘周期內(nèi)完成:從寄存器組

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

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

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

6、術(shù)、邏輯、位功能。有些結(jié)構(gòu)的實現(xiàn)中會提供乘法器,能夠支持有符號、無符號及小數(shù)格式的乘法。詳見 “ - - -J,instructionsei:早下。狀態(tài)寄存器(SREG)關(guān)于最近執(zhí)行的算術(shù)運算指令結(jié)果的信息會體現(xiàn)在狀態(tài)寄存器中。這些信息可用于改變程序流以執(zhí)行條件操作。注意,狀態(tài)寄存器會在所有的ALU操作之后進行更新。在大多數(shù)情況下,這樣可以免除使用專用比較指令的必要,有利于產(chǎn)生更快和緊湊的編碼。當(dāng)進入中斷的時候,狀態(tài)寄存器不會自動保存;當(dāng)從中斷返回時,狀態(tài)寄存器也不會自動恢復(fù)。因此,這些工作必須由軟件進行。AVR狀態(tài)寄存器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,將禁用所有中斷,而不管各自的中斷使能設(shè)置如何。當(dāng)一個中斷發(fā)生后,I位由硬件清0 (硬件不允許中斷嵌套,即 MCU向應(yīng)一個中斷后將禁用全局中斷,不再響應(yīng)其他中斷直到該中斷例程結(jié)束);RETI指令將置1全局中斷使能位以繼續(xù)響應(yīng)隨后可能發(fā)生的中斷。止匕外,可使用 SEI 和CLI指令進行I位的軟件置1和清

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

9、S = N VS是N (負數(shù)標志)和V (補碼溢出標志)的異或值。? Bit 3 V: -Two ' s Complement Overflow Flag補碼溢出標志用于支持補碼算術(shù)。? Bit 2 N:-Negative Flag指示算術(shù)或邏輯運算的結(jié)果為負。? Bit 1 Z: -Zero Flag指示算術(shù)或邏輯運算的結(jié)果為00? Bit 0 C:-Carry Flag指示算術(shù)或邏輯運算的進位。通用寄存器組寄存器組針對AVR的增強RISC指令集進行了優(yōu)化。為了獲得所需的靈活性和性能,寄存器組支持以下輸入/輸出方案。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個通用寄存器的結(jié)構(gòu)。70Wdr.$00General Purpose Working RegistersROR1數(shù)據(jù)空間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所示,每個寄存器都分配了我一個數(shù)據(jù)內(nèi)存空間地址,直接將他們映射到用戶數(shù)據(jù)空間的前32個位置。盡管寄存器組沒有在實體上作為 SRAM的一部分,這樣的內(nèi)存組織在寄存器訪問上面 提供了強大白靈活性,X、Y和Z指針寄存器可被設(shè)置用來索引

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

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

14、彈出時,堆棧指針加 1;因從子程序返回(RET)或從中 斷返回(RETI)而使得數(shù)據(jù)彈出堆棧時,堆棧指針加 2。堆棧指針是I/O空間里的兩個8位寄存器。實際使用的位個數(shù)取決于實現(xiàn)。 注意,在AVR架構(gòu)的些實現(xiàn)中,因為數(shù)據(jù)空間很小,因此只需要 SPL就足夠了,而SPH寄存器則不會出現(xiàn)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口指令執(zhí)行時序這部分介紹指令執(zhí)行的訪問時序。AVR的CPU由CPU時鐘clkCPU驅(qū)動,該時鐘由選中的時鐘源 產(chǎn)生。沒有使用內(nèi)部時鐘分頻圖6描述了哈佛架構(gòu)和快速寄存器訪問所使能的并行指令獲取和執(zhí)行。這是獲得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展示了寄存器組的內(nèi)部時序概念。在單時鐘周期內(nèi),執(zhí)行了使用兩個寄存器操作數(shù)的ALU操作,并將結(jié)果存回目的寄存器。Figure 7, Single Cycle ALU OperationTiT2T3T4iiiiiidkcpu -

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

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

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

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

21、被立即禁止。在 CLI指令后,不會執(zhí)行任何中斷,即使它和 CLI指令同時發(fā)生。下面的例子展示了如何在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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論