Der AVR32-UC-Prozessorkern hat den gleichen Befehlssatz (Instruction Set Architecture, ISA) wie sein „großer Bruder“, der AVR32 AP. Dieser umfasst mehr als 220 Befehle entweder als kompakte 16-bit- oder als erweiterte 32-bit-Anweisungen. Die ISA des AVR32 ist so konzipiert, dass Datentransaktionen zwischen CPU und Speichern auf ein Minimum beschränkt bleiben. Dadurch werden sowohl der Energieverbrauch als auch die Anzahl der Taktzyklen reduziert. Der Compiler erzeugt durch automatische Auswahl zwischen 16- und 32-bit-Befehlen den schnellsten und effizientesten Code.
Der Code des AVR32 UC ist z.B. im Schnitt 5 % bis 20 % kompakter als ein für den ARM-Thumb-Befehlssatz compilierter Code. Wenn der Code für eine hohe Ausführungsgeschwindigkeit optimiert wird, ist er sogar 30 % bis 50 % kompakter.
In vielen Fällen, wie z.B. bei Netzwerk-Anwendungen, ist es bei der Handhabung von Datenpaketen wichtig, Bitfelder effizient aus einem Register extrahieren oder in ein Register einfügen zu können. Im Unterschied zu den meisten anderen Prozessorkernen umfasst die AVR32-ISA Befehle zum Einfügen benutzerspezifizierter Bitfelder und zur Null- oder Zeichenerweiterungs-Extraktion.
Alle diese Anweisungen können in einem einzigen Zyklus ausgeführt werden. Dies ist wesentlich schneller als in einer traditionellen Architektur, bei der zur Erreichung desselben Ergebnisses mehrere Schiebe- und Logikoperationen durchgeführt werden müssen.
MCUs müssen neben der Durchführung von Rechenoperationen auch Steuerungsaufgaben auf der Grundlage von Bitoperationen effizient ausführen. Üblicherweise beinhaltet die Änderung eines Bitwerts in einem 32-bit-Register die Abarbeitung mehrerer Anweisungen: Register lesen, entsprechenden Bitwert mit Hilfe logischer Operatoren wie ODER und UND ändern und dann den veränderten Wert in das Zielregister schreiben.
Der Befehlssatz des AVR32 UC umfasst Anweisungen zur Durchführung von Bitmanipulationen direkt im Speicher, die so genannten atomaren Lese-, Änderungs- und Schreibvorgänge. Es handelt sich dabei um das Setzen, Löschen und Verändern von Bits in beliebigen Speicherzellen durch die Anweisungen „memc“, „mems“ und „memt“.
Ausnahme- und Interrupt-Verarbeitung
Beim AVR32 UC haben verschiedene Ereignisquellen wie z.B. ein ungültiger Opcode und externe Interrupt-Anforderungen unterschiedliche Prioritäten. Dadurch ist nicht nur eine definierte Reihenfolge bei der Abarbeitung von Ausnahmen und Interrupts sichergestellt, sondern Ereignisse mit einer höheren Priorität können die Verarbeitung von Ereignissen mit einer niedrigeren Priorität unterbrechen.
Wenn ein Interrupt akzeptiert wird, werden automatisch acht Register im Stack gespeichert. Die Ausführung der Interrupt-Handler-Routine wird dann bei der effektiven Adresse fortgesetzt, die aus dem Autovektor-Offset berechnet wird. Bei der Wiederaufnahme der Verarbeitung aus dem Interrupt- Handler werden alle zuvor gespeicherten Registerinhalte wieder aus dem Stack gelesen, bevor die nächste Anweisung aus dem regulären Code ausgeführt wird.
Bei Erkennung eines Ereignisses erfolgt die Ausführung der ersten Anweisung aus dem Event-Handler innerhalb von 12 Taktzyklen (d.h. bei einer Taktfrequenz von 66 MHz innerhalb von 181 ns). Außerdem ist die CPU in der Lage, einzelne Befehle zu unterbrechen, wenn diese zur Ausführung mehrere Taktzyklen benötigen und Interrupt-Anforderungen länger als fünf Taktzyklen anstehen. Dadurch wird die Reaktionszeit auf Interrupt-Anforderungen in Summe auf maximal 16 Taktzyklen begrenzt.
Der AVR32 UC verwendet eine Standard-JTAG-Schnittstelle, um externen Systemen die Steuerung zu ermöglichen. Die JTAG-Schnittstelle wird sowohl zum Debugging als auch zum Programmieren des On-Chip-Flash-Speichers verwendet. Dabei wird sichergestellt, dass sie nicht verwendet werden kann, wenn ein Bauteil vor unberechtigtem Zugriff geschützt ist. Der AVR32 UC unterstützt sechs Anweisungs-Breakpoints, zwei Daten-Breakpoints und eine unbegrenzte Anzahl von Software-Anweisungs-Breakpoints. Die Anweisungs-Breakpoints ermöglichen dem Anwender eine Unterbrechung bei Ausführung einer bestimmten Befehlsadresse oder eines definierten Adressbereichs im Programmspeicher. Ein Daten-Breakpoint erzeugt eine Unterbrechung beim Zugriff auf eine bestimmte Datenadresse, einen Datenadressbereich und/oder wenn ein bestimmter Datenwert geschrieben oder gelesen wird. Statt eines Breakpoints lässt sich auch ein Watchpoint definieren, wodurch der Programmablauf nicht angehalten, sondern an das Trace-System übergeben wird.
Die Echtzeit-Trace-Funktion des AVR32-UC-Prozessorkerns wird durch den Nexus-Trace-Port ermöglicht, der einen Hochgeschwindigkeits-Datendurchsatz unterstützt. Hierdurch können die vom Chip-Trace-System ausgegebenen hohen Datenraten bewältigt werden. Alternativ verfügt der AVR32 UC außerdem über eine Minimal-Trace-Funktion, die auch als Nano-Trace bezeichnet wird. Mit NanoTrace werden Daten nicht an einen Trace-Port ausgegeben, sondern im Burstmodus in einen größenmäßig benutzerkonfigurierbaren internen Speicher geschrieben. Der Inhalt dieses Speichers wird dann über den Standard-JTAGPort ausgelesen.