210 likes | 324 Views
Tutorium Tech II. Daniel Betz Wintersemester 2011/12. Includes Prozessor-Hardware Eigener, mehrfach verwendeter, Code, z.B. Makros Main-Methode Hardware initialisieren Endlosschleife mit eigentlichem Programm. Typischer Aufbau Embedded-Programm.
E N D
Tutorium Tech II Daniel Betz Wintersemester 2011/12
Includes • Prozessor-Hardware • Eigener, mehrfach verwendeter, Code, z.B. Makros • Main-Methode • Hardware initialisieren • Endlosschleife mit eigentlichem Programm Typischer Aufbau Embedded-Programm Daniel Betz • daniel.betz@daniel-betz.com
#define T3CON (*((volatile unsignedshort*) 0xFF42)) Dereferenzierung, um „normale“ Variable zusimulieren vorzeichenloserShort-Pointer Speicheradresse Variable kann sich „von alleine“ ändern Zugriff auf Register bzw. Adressen Daniel Betz • daniel.betz@daniel-betz.com
Setzen eines Bits durch OR • Maske mit 0 bis auf Zielbit(s) • Rücksetzen eines Bits durch AND • Maske mit 1 bis auf Zielbit(s) • Bit-Operationen in C • | – OR • &– AND • ~– NOT • Beispiele: • Set: T3CON |= T3R; • Set: T3CON = T3CON | T3R; • Reset: T3CON &= ~T3R; • Reset: T3CON = T3CON & ~T3R; Bit-Maskierung Daniel Betz • daniel.betz@daniel-betz.com
In C möglich durch „union“-Typ • Mehrere Variablen unterschiedlicher Typen an einem Ort im Speicher • Beispiel: typedefunionbitreg {unsignedint reg;struct {unsignedintb0 : 1; …unsignedint b15 : 1; } bits;} bitreg_t; • Zugriff: ((volatile bitreg_t *) 0xFF42)->bits.b0 Einzelbit-Zugriff Daniel Betz • daniel.betz@daniel-betz.com
bit • sbit • sfr • Wird im offiziellen Header verwendet • Ermöglicht Spezialsyntax für Bit-Zugriff mit ^ • Adressierung von Bit 10:sfr MSW = 0xFFDE;sbit MSW_MC = MSW^10; C166-spezifische Datentypen Daniel Betz • daniel.betz@daniel-betz.com
Auswahl bei Variablendeklaration möglich • unsignedintbdatamyvar; • bdata: Bit-Adressierbar, ^-Syntax möglich • idata: schneller Speicher • sdata: Systemspeicher • near: maximal 16k große Objekte, 16-Bit-Adressen • far: wie near, 24-Bit-Adressen • huge: wie far, maximal 64k-Objekte • xhuge: wie far, maximal 16M-Objekte C166-Speicherbereiche Daniel Betz • daniel.betz@daniel-betz.com
Unterbrechen den normalen Programmfluss um besondere Ereignisse zu bearbeiten • Beispiel: Ungültiger Speicherzugriff • Können auch durch Software ausgelöst werden Interrupts Daniel Betz • daniel.betz@daniel-betz.com
ILVL T3IR T3IE GLVL • T3IR: Interrupt RequestDas Interrupt soll ausgelöst werden • T3IE: Interrupt EnableSteuert, ob das Interrupt ausgelöst werden kann • ILVL: PrioritätLegt die Priorität fest. „Wichtigere“ Interrupts können andere Interrupts unterbrechen • GLVL: GruppenprioritätWenn zwei Interrupts gleicher Priorität anstehen, entscheidet die Gruppenpriorität, welches ausgeführt wird • Wichtig: Die Gruppenpriorität entscheidet nicht über Unterbrechung anderer Interrupts. Beispiel Interrupt Control Register Daniel Betz • daniel.betz@daniel-betz.com
Aufgaben VHDL Daniel Betz • daniel.betz@daniel-betz.com
Erläutern Sie den Unterschied des Verhaltens der beiden folgenden Wait-Befehlen • waituntilx='1' ory='1'; • waiton x, y untilx='1' ory='1'; VHDL-WissenSS10 Daniel Betz • daniel.betz@daniel-betz.com
Aufgabe: VHDL-Strukturmodell • Skizze • Modell • Gegeben: Folgende Bausteine • entitynand3 isport(a, b, c : IN std_logic;y :OUTstd_logic);end; • entityoder4 isport(a, b, c, d : IN std_logic;y :OUTstd_logic);end; • entityxor2 isport(a, b : IN std_logic;y :OUTstd_logic);end; XOR VHDL-StrukturmodellSS10 Daniel Betz • daniel.betz@daniel-betz.com
Aufgaben Assembler Daniel Betz • daniel.betz@daniel-betz.com
Gegeben ist folgender ASM-Code für den C166:Zeig DW2Bit32 DW0x5566, 0xaaffFeld DB100, 0x45, 75, 103, 55MOV R3,Zeig ;?1MOVR2,#Bit32 + 2 ;?2MOVRL0,[R3 + #Feld] ;?3ADD R3,#FeldMOV R1,[R2+]MOVRH0,[R3+] ;?4 • Welche Adressierungsarten werden an den markierten Stellen benutzt? • Angenommen, die Adresse von Zeig sei 0x100. Was steht nach Programmende in R0 bis R3? In Hex! Adressen und AusführungSS10 Daniel Betz • daniel.betz@daniel-betz.com
Der C166 führt folgendes Programm aus:MOV R1,#0xBAFFADD R1,#0xCAFF • Welchen Wert haben die Flags (C, V, N, Z) nach der Ausführung und warum? Flags nach AdditionSS10 Daniel Betz • daniel.betz@daniel-betz.com
Folgende Interrupt-Quellen sind mit ICR-Eintrag gegeben • Timer 3 (3): 0x5C • Timer 5 (5): 0x51 • Serial 1 Receive(R): 0x54 • Serial 1 Transmit (T): 0x43 • AD Overrun Error (A): 0x55 • Das Hauptprogramm ist mit H abgekürzt • Aufgaben: • Bedeutung der ICR-Einträge angeben • Matrix ausfüllen InterruptsSS06 Daniel Betz • daniel.betz@daniel-betz.com
Gegeben ist folgendes ASM-FragmentMOV T3CON,#5MOV T3IC,#0x57MOV T3,#6941BSET T3R • Was bedeutet der T3CON-Wert? • Nach welcher Zeit wird der Interrupt ausgelöst? • Bei Auslösen des T3-Interrupts wird gerade ein anderer Interrupt mit ICR-Eintrag 0x54 bearbeitet. Was passiert? T3-RegisterSS07 Daniel Betz • daniel.betz@daniel-betz.com
Aufgaben C Daniel Betz • daniel.betz@daniel-betz.com
Gegeben: Timer 3 ist in Betrieb • Gefragt: C-Code, ohne Bitbefehle, der folgendes macht • Timer stoppen • Vorteiler auf 64 setzen (011) • Timer starten • Natürlich dürfen nur die betroffenen Bits geändert werden Bit-MaskierungWS07/08 Daniel Betz • daniel.betz@daniel-betz.com
Für ein Spielzeug-Polizeiauto sollen abwechselnd 440 Hz und 585 Hz je ¼ Sekunde ausgegeben werden • Verwendet wird ein C166 mit 20 MHz • Die ¼ Sekunde wird durch Active Waiting erzeugt • Aufgaben • Methode „Delay“ schreiben – für ¼ Sekunde sind etwa 2 Millionen Schleifendurchläufe nötig • Geeigneten Vorteiler finden und Reload-Werte für beide Frequenzen berechnen • Methode „T3_Init“ schreiben, die auch den ersten Ton ausgibt – Werte dokumentieren! • Hauptprogramm schreiben Timer& aktives WartenWS09/10 Daniel Betz • daniel.betz@daniel-betz.com
Danke für die Aufmerksamkeit Bis nächste Woche! Daniel Betz • daniel.betz@daniel-betz.com