Atmel AVR

Atmel AVR系列是一種基於改進的哈佛結構、8位元～32位元精簡指令集（Reduced Instruction Set Computing，RISC）的微控制器，由Atmel公司於1996年研發。AVR系列是首次採用快閃記憶體（Flash Memory）作為資料儲存媒介的單晶片微控制器之一，同時代的其它微控制器多採用一次寫入可程式化ROM、EPROM或是EEPROM。
目前AVR處理器發展了六個系列，分別是：tinyAVR，ATtiny系列；megaAVR，ATmega系列；XMEGA，ATxmega系列；Application-specific AVR，面向特殊應用的AVR系列，增加LCD控制器、USB控制器、PWM等特性；FPSLIC，FPGA上的AVR核；AVR32，32位元AVR系列，包含SIMD和DSP以及音影片處理特性，與ARM架構形成競爭。

發展簡史

AVR架構最早由兩名挪威理工學院（Norwegian Institute of Technology，NTH）的學生Alf-Egil Bogen和Vegard Wollan共同構思出來。
原始的AVR微控制單元由當地Trondheim的一所特殊應用積體電路（ASIC）工作室Nordic VLSI（現為北歐半導體）負責開發。當時它被稱作μRISC（Micro RISC），還可使用Nordic VLSI的矽晶圓等基礎材料來製作其晶片。當這些技術被Nordic VLSI賣給Atmel後，其內部架構被當時任職於Atmel挪威子公司的Bogen以及Wollan進一步發展。架構設計者們和來自IAR系統公司的編譯器編寫者們緊密合作，來確保指令集提供更高效率的高階程式語言編譯。
而在命名上，Atmel解釋『AVR』這個名稱不是某幾個單詞的縮寫，也不代表任何特別的事物。AVR的創造者們也沒有給出明確的關於『AVR』之表意的答案。然而，一般認為，『AVR』表示Alf (Egil Bogen) and Vegard (Wollan)'s RISC processor。而本文裏用的『AVR』一般指8位元RISC的Atmel AVR微控制器的產品線。
首個AVR微控制器的產品線是AT90S8515，擁有和英特爾8051微控制器相同的40針雙列直插封裝（DIP），包括外部多路位址和資料匯流排。但RESET線和英特爾8051相反，8051的是高電平有效RESET，而AVR是低電平有效RESET，但除此以外，其它針腳是完全一致的。

裝置概覽

AVR是一個修改過的哈佛架構電腦，程式和資料分別儲存在各自的擁有不同定址空間的物理記憶體系統上，但有能力使用特殊的指令可從程式儲存器內讀取資料項。

儲存器架構

快閃記憶體、電子抹除式可複寫唯讀記憶體（EEPROM）、以及靜態隨機存取記憶體（SRAM）都內建於一顆晶片上，在大部分應用中盡可能無需外部記憶體。一些裝置擁有並列的外部匯流排選擇以允許加入額外的資料記憶體或記憶體對映裝置。幾乎所有的裝置（除最小規模TinyAVR晶片以外）擁有串列匯流排，可以用來連接更大的串列EEPROM或快閃記憶體。

程式記憶體

程式指令被儲存於非揮發性的快閃記憶體上。儘管微控制器只有8位元，但每指令可以存取1至2個16位元的位元組。
程式記憶體的容量大小常用於裝置命名（如ATmega64x產品線擁有64KB的快閃記憶體，ATmega32x產品線擁有32KB的快閃記憶體）
不支援擴充程式記憶體，所有由AVR核心執行的程式碼皆需要儲存於內部的記憶體。然而AT94 FPSLIC AVR/FPGA晶片沒有這種限制。

內部資料記憶體

資料定址空間由暫存器檔案、輸出/輸入暫存器、和SRAM組成。

內部暫存器

AVR擁有32個的暫存器，分別為( R0 到 R31 )並被歸類為8位元RISC裝置。
在大部分AVR架構上，工作暫存器被對映為首位的32個記憶體位址（0000₁₆–001F₁₆）接著是64個輸出/輸入（I/O）暫存器（0020₁₆–005F₁₆）。
實際上SRAM是在這些暫存器分段（定址為0060₁₆）後開啟。（注意輸出/輸入暫存器空間在一些擴展裝置上或許更大，使得載入記憶體對映I/O暫存器將佔用一部分SRAM的定址空間）
雖然有這些分開的定址解決方案和最佳化的暫存器檔案和I/O暫存器存取操作碼，但它們全部都可以被加以處理和操作，就像它們都在SRAM上。
在XMEGA系列上，工作暫存器檔案並沒有對映到資料定址空間上；正因為如此，不能將XMEGA的工作暫存器像是在SRAM上那樣對待。作為替代，I/O暫存器被對映到資料定址空間內非常靠前的位置上。另外，資料定址空間中用作I/O暫存器的總數上大幅增加，容量達到4096位元組（0000₁₆–0FFF₁₆）。然而，正如前代產品一樣，快速I/O操作指令只可到達首先的64個I/O暫存器位置（首位的32個位置是給位元運算指令使用的）。往後的I/O暫存器，XMEGA系列預留了一個4096位元寬度位址空間範圍，可被選作將內建EEPROM對映至資料定址空間上（1000₁₆–1FFF₁₆）。實際可用的SRAM位於這些被佔用的定址空間以後，從2000₁₆開始。

EEPROM

幾乎所有的AVR微控制器都擁有內建的EEPROM，用來提供半永久的資料儲存。和快閃記憶體一樣，EEPROM可在斷電以後維持其記憶體儲的資料。
在大部分的AVR架構中，內部EEPROM記憶體並沒有對映到微控制單元的可定址記憶體空間上。它只可和外掛的外圍裝置一樣使用特別的指針暫存器和讀/寫指令來存取，這使得EEPROM的存取速度要比其它內建的隨機存取記憶體（RAM）要慢不少。
然而，某些SecureAVR（AT90SC）家族系列的裝置使用了一種特殊的EEPROM根據相關組態設定對映至資料或程式記憶體。XMEGA家族系列也允許EEPROM對映至西遼定址空間上。
因EEPROM的擦寫次數不是無限的——Atmel的技術細明規格表上標明是100,000次擦寫週期——一個設計精良的EEPROM擦寫常程式應比較EEPROM位址上的內容和請求寫入的內容並在需要進行改變的位置處才真正執行寫入操作。
注意，在很多情況下擦除和寫入是分開執行的，以位元組為單位進行，這有助於延長其使用壽命，因位元僅需全被設定為『1』（擦除）或選擇性地置『0』（寫入）。

程式執行

Atmel的AVR核心擁有二階單級管線設計。這意味著處理器可以在執行現在的指令同時將下一個指令讀取。絕大部分的指令執行僅需一到兩個時鐘週期，使AVR核心在眾多8位元微控制器中是最快的。
AVR核心被設計為能夠高效運行經編譯的C語言程式，還內建了數個指針指令與之相適配。

MCU速度

AVR系列可以很好地支援0～20MHz的時脈，某些裝置更達到32MHz。更低功耗的作業一般需要一個較低的時脈。所有最近的AVR裝置（Tiny、Mega、以及Xmega，但90年代的產品除外）有內建石英振盪器、可以不需要外接時鐘或共鳴器電路。一些AVR裝置還有一個系統時鐘預定標器，提升系統時鐘至1024。這個預定標器可以被軟體執行時重新組態，允許對時脈進行最佳化作業。
因所有在暫存器R0至R31位元址的運算作業僅需一個時脈，AVR可以擁有每兆赫（MHz）最高每秒一百萬指令（MIPS），換言之一顆8MHz的AVR處理器擁有8MIPS的效能。從記憶體載入和儲存資料需要兩個時脈，分支也需要兩個時脈。在一些較新的『3位元組PC』上，像是ATmega2560的裝置，分支操作會比之前的裝置慢上一個時脈。

開發

AVR由於開發工具可輕易免費或低價獲得，包括一些合適價格的開發板裝置和免費的開發軟體，而擁有龐大的開發群體。AVR也以眾多不同的名義販售，但它們都使用相同的基本核心，只是周邊裝置和記憶體的搭配不一樣。每個系列的不同晶片之間的相容性相當好，儘管輸出輸入控制器的搭配會有所不同。
更多可參見#外部連結一節中與AVR開發的相關站點。

編程介面

有多種方法可將程式載入至AVR晶片上。不同AVR家族系列的程式寫入方法都各有不同。

高電壓平行

高電壓平行編程（High voltage parallel programming，HVPP）是作為『最後手段』來使用，亦可能是以壞熔絲設定修復AVR晶片的唯一方法。

啟動載入程式（Bootloader）

大部分的AVR型號可以保留一個啟動載入程式區域，有256位元組至4KB的大小，可儲存多次編程的程式碼。在復位後，首先執行bootloader，然後終止一些使用者運行的程式，當需要重新變成或跳轉至主程式時。在任何介面可用時，程式碼便可以進行重新編程，像PXE（預啟動執行環境）一樣，透過乙太網適配器能讀取加密處理的二進制資料。Atmel有關於許多匯流排介面的應用程式註釋及原始碼。

ROM

AT90SC系列的AVR晶片可以使用原廠掩模ROM而不使用快閃記憶體來作為程式記憶體。 因為在大批次生產基於AVR的特定功能控制器時，比起在開發階段使用價格較高的快閃記憶體，在生產階段使用掩模ROM可以有效提高成本效益。

aWire

aWire是一種新的單線除錯介面，可用於新版UC3L AVR32裝置上。