Title: Standard für TI 2
Course: A. Technische Informatik II

Standardkategorie für Fragen, die im Kontext 'TI 2' freigegeben sind.

Feedback shared by this category's questions, if right: Die Antwort ist richtig.
Feedback shared by this category's questions, if partly right: Die Antwort ist teilweise richtig.
Feedback shared by this category's questions, if wrong: Die Antwort ist falsch.

Q: Was versteht man unter einem IO-Port bei unserem Mikrocontroller
- Eine hafenartige Zählerschaltung mit insgesamt maximal 11 Zuständen
- Ein Anschluss am Mikrocontroller für Ausgabe (z.B. an eine Leuchtdiode LED) oder Eingabe (z.B von einem Taster oder einem Schalter
- Die Taktversorgung des Mikrocontrollers (32 MHz)
- Bei Mehrkernprozessoren die Verbindung der Kerne untereinander
A: Ein Anschluss am Mikrocontroller für Ausgabe (z.B. an eine Leuchtdiode LED) oder Eingabe (z.B von einem Taster oder einem Schalter

Q: Über welche IO-Ports verfügt unser Mikrocontroller?
- GPIOA: PA0 .. PA15
- GPIOB: PB0..PB15
- GPIOE: PE0..PE15
- GPIOC: PC0..PC15
A: GPIOA: PA0 .. PA15; GPIOB: PB0..PB15; GPIOC: PC0..PC15

Q: Geben Sie an Port PC0 eine 1 in Assembler aus (LED ein).
- mov R0,#1 ldr R1,=GPIOC strb R0,[R1,ODR]
- mov R0,#0b00000001 ldr R1,=GPIOC strb R0,[R1,ODR]
- mov R0,#0x01 ldr R1,=GPIOC strb R0,[R1,ODR]
- mov R0,#1 ldr R1,=GPIOC strb R1,[R0,ODR]
- mov R0,#1 ldr R1,#GPIOC strb R0,[R1,ODR]
A: mov R0,#1 ldr R1,=GPIOC strb R0,[R1,ODR]; mov R0,#0b00000001 ldr R1,=GPIOC strb R0,[R1,ODR]; mov R0,#0x01 ldr R1,=GPIOC strb R0,[R1,ODR]

Q: Setzen Sie Port PC5 in Assembler auf 0.
- mov R0,#0 ldr R1,=GPIOC strb R0,[R1,ODR]
- mov R0,#0b00000000 ldr R1,=GPIOC strb R0,[R1,ODR]
- mov R0,#0 ldr R1,=GPIOC strb R1,[R0,ODR]
- mov R0,#0x00 ldr R1,=GPIOC strb R0,[R1,ODR]
A: mov R0,#0 ldr R1,=GPIOC strb R0,[R1,ODR]; mov R0,#0b00000000 ldr R1,=GPIOC strb R0,[R1,ODR]; mov R0,#0x00 ldr R1,=GPIOC strb R0,[R1,ODR]

Q: Erzeugen Sie im Assemblerprogramm eine Wartezeit von 500ms (0,5s).
- mov R0,#500 bl wait_ms
- mov R0,#0.5 bl wait_ms
- bl wait_ms mov R0,#500
- mov R1,#500 bl wait_ms
A: mov R0,#500 bl wait_ms

Q: Welche Grundstruktur hat jedes Mikrocontrollerprogramm in Assembler?
- 1 | main:
- 2. | //Instruktionen zur Initialisierung, die nur einmal abgearbeitet werden
- 3. | schleife:
- 4. | //Instruktionen die endlos wiederholt werden
- 5. | b schleife

Q: Schreiben Sie den Code um Tastendruck an PA10 zu warten. Solange die Taste nicht gedrückt ist, soll GPIOC.ODR hochgezählt werden
- 1. | ldr R1,=GPIOA
- 2. | ldr R2,=GPIOC
- 3. | mov R0,#0
- 4. | schleife:
- 5. | ldr R3,[R1,IDR]
- 6. | tst R3,Bit10
- 7. | beq schleife
- 8, | add R0,#1
- 9. | strb R0,[R2,ODR]
- 10. | b schleife

Q: Schreiben Sie ein Programm, das Tastendruck auf PA6 zählt und ausgibt
- 1. | main:
- 2. | mov R1,#0 und ldr R1,=GPIOA
- 3. | schleife:
- 4. | warteAufGedrueckt:
- 5. | ldr R3,[R1,IDR] und tst R3,Bit10 und beq warteAufGedrueckt
- 6. addieren | add R0,#1
- 7. | gerueckt:
- 8. | ldr R3,[R1,IDR] und tst R3,Bit10 und bne gedrueckt
- 9. Ausgabe | ldr R2,=GPIOC
- 10. | strb R0,[R2,ODR]
- 11. | b schleife

Q: Wie viele Bits bilden ein Register im STM32?
A: 32

Q: Wozu dient ein Register im Mikrocontroller?
- Als Variable für Zahlen
- Zur Datenverarbeitung z.B. Addition
- Zum Registrieren von Ereignissen
- Als Programmspeicher
A: Als Variable für Zahlen; Zur Datenverarbeitung z.B. Addition

Q: Wozu dient Register R0 oft?
- Als Speicher für Befehle
- Als Parameter bei Unterprogrammen z.B. LCD_i2c_cursorpos
- Als Output Data Rerister
- Als Stackpointer
A: Als Parameter bei Unterprogrammen z.B. LCD_i2c_cursorpos

Q: An welchen Port sind bei uns die Leuchtdioden angeschlossen?
- GPIOA
- GPIOB
- GPIOC
- GPIOD
A: GPIOC

Q: Wie kann ein Zahlenwert in R1 auf die Leuchtdioden ausgegeben werden?
- strb R1,GPIOC
- ldr R2,=GPIOC strb R1,[R2,IDR]
- ldr R2,=GPIOC strb R2,[R1,ODR]
- ldr R2,=GPIOC strb R1,[R2,ODR]
A: ldr R2,=GPIOC strb R1,[R2,ODR]

Q: Warum muss bei der Tastenabfrage immer noch darauf gewartet werden, dass die Taste auch wieder losgelassen wird?
- Damit das Programm symmetrisch aufgebaut werden kann
- Ist tatsächlich in der Praxis nicht erforderlich
- Sonst würden die Instrukttionen, die bei Tastendruck ausgeführt werden sollen, nicht nur einmal pro Tastendruck ausgeführt, sondern so lange wiederholt, bis die Taste wieder losgelassen wird.
- Warten auf losgelassen ist automatisch immer mit implementiert.
A: Sonst würden die Instrukttionen, die bei Tastendruck ausgeführt werden sollen, nicht nur einmal pro Tastendruck ausgeführt, sondern so lange wiederholt, bis die Taste wieder losgelassen wird.

Q: Schreiben Sie ein Unterprogramm, das 1s wartet.
- 1. | warte1s:
- 2. Zahlenwert 1 in R0 | mov R0,#1
- 3. | ldr R1,=32000000/5
- 4. | w1:
- 5. | subs R1,R0
- 6. | bne w1
- 7. | bx lr //return

Q: Mit welcher Taktfrequenz in MHz arbeitet unser Mikorcontroller?
A: 32

Q: Welche größte Wartezeit in Sekunden hat folgendes Programm:
mov R0,#1
ldr R1,#0xFFFFFFFF
w1:
   subs R1,R0  //1 Takt zu 31,25ns
   bne w1         //4 Takte zu je 31,25ns
A: 671.088 (± 1)

Q: Welchen Effekt hat die Instruktion:

bne w1
- Falls eine vorrausgegengene Operation <>0 als Ergebnis hatte wird zur Sprungmarke w1 verzweigt, sonst wird das Programm mit der auf bne folgenden Operation fortgesetzt.
- Falls eine vorrausgegengene Operation 0 als Ergebnis hatte wird zur Sprungmarke w1 verzweigt, sonst wird das Programm mit der auf bne folgenden Operation fortgesetzt.
- Falls eine vorrausgegengene Operation 0 als Ergebnis hatte, wird das Programm mit der auf bne folgenden Operation fortgesetzt sonst wird zur Sprungmarke w1 vzweierg.
- Das Bit w1 wird auf 1 (<>0 not equal Zero) gesetzt.
A: Falls eine vorrausgegengene Operation 0 als Ergebnis hatte wird zur Sprungmarke w1 verzweigt, sonst wird das Programm mit der auf bne folgenden Operation fortgesetzt.

Q: Welche Wirkung hat die Instruktion subs R0,R1?
- R0:=R0-R1
- R1:=R0-R1
- R1:=R1-R0
- R0:=R1-R0
A: R0:=R0-R1

Q: Berechnen Sie den Inhalt von Register R0 als Dezimalzahl nach folgendem Programm:

ldr R0,=0x12345678
ldr R1,=305678
subs R0,R1
A: 305114218

Q: Wie kann der Inhalt von Register R2 auf GPIOC ausgegeben werden?
- str R2,GPIOC
- mov GPIOC,R2
- ldr R1,=GPIOC strb R2,[R1,ODR]
- ldr R1,=GPIOC strb R1,[R2,ODR]
- ldr R1,=GPIOC strb R2,[R1,IDR]
A: ldr R1,=GPIOC strb R2,[R1,ODR]

Q: Die Schalter an GPIOB sollen parallel nach R3 eingelesen werden.
- ldr R1,=GPIOB ldrb R1,[R3,IDR]
- ldr R1,=GPIOB ldrb R3,[R1,IDR]
- ldr R1,=GPIOB ldrb R3,[R1,ODR]
- mov R1,=GPIOB ldrb R3,[R1,IDR]
A: ldr R1,=GPIOB ldrb R3,[R1,IDR]

Q: Die Zahl 100 soll an GPIOC ausgegeben werden.
- ldr R1,=GPIOC mov R2,#100 strb R2,[R1,ODR]
- ldr R1,=GPIOC mov R2,#0x100 strb R2,[R1,ODR]
- ldr R1,=GPIOC mov R2,#0b100 strb R2,[R1,ODR]
- ldr R1,=GPIOC mov R2,#100 strb R1,[R2,ODR]
A: ldr R1,=GPIOC mov R2,#100 strb R2,[R1,ODR]

Q: Welche Befehle kennen Sie?
- R0:=R1+R2 | add R0,R1,R2
- R0:= R1+R2, PSR wird beeinflusst | adds R0,R1,R2
- R0:=R0+R1 | add R0,R1
- R0:=R0+5 | add R0,#5
- R0:=R1-R2 | sub R0,R1,R2
- R0:=R1-R2, PSR wird beeinflusst | subs R0,R1,R2
- R0:=R0-5 | sub R0,#5
- R4:=R5 * R6 | mul R4,R5,R6
- R5:=R7:R6 | udiv R5,R7,R6

Q: Wann wird das Zerobit Z im PSR 0?
- Wenn das Ergebnis einer subs oder adds Instruktion 0 ist
- Wenn das Ergebnis einer sub oder add Instruktion 0 ist
- Wenn ein Operant einer Rechnung 0 ist
- Wenn das Ergebnis einer subs oder adds Instruktion ungleich 0 ist
A: Wenn das Ergebnis einer subs oder adds Instruktion 0 ist

Q: wann wird das N (negativ) Bit im PSR 1?
- Bei negativen Operanten
- Wenn das Ergebnis einer sub oder addsOperation negativ ist
- Wenn das Ergebnis einer subs oder adds Operation negativ ist
- Wenn das Ergebnis einer subs oder adds Operation positiv ist
A: Wenn das Ergebnis einer subs oder adds Operation negativ ist

Q: Wann wird das Carrybit bei der Instruktion adds R0,R1,R2 eins?
- R1=0xFFFFFFF0, R2=0x20
- R1=0xFFFFF0, R2=0x20
- R1=4294967384, R2=23
- R1=0b11111111111111111111111111111100, R2=5
A: R1=0xFFFFFFF0, R2=0x20; R1=4294967384, R2=23; R1=0b11111111111111111111111111111100, R2=5

Q: Wann wird das Carrybit bei der Instruktion subs R0,R1,R2 eins?
- R1=34, R2=32
- R1=0x34, R2=32
- R1=32, R2=65
- R1=0b10000, R2=12
A: R1=34, R2=32; R1=0x34, R2=32; R1=0b10000, R2=12

Q: Legen Sie eine Codetabelle mit den Werten 15, 0b11000011, 0x23, 10 an.
- codetabelle: .byte 15,0b11000011,0x23,10
- codetabelle: .table 15,0b11000011,0x23,10
- codetabelle: .code 15,0b11000011,0x23,10
- codetabelle: .data 15,0b11000011,0x23,10
A: codetabelle: .byte 15,0b11000011,0x23,10

Q: Der Wert mit dem Index 5 soll aus der Codetabelle tabelle nach R0 übertragen werden.
- ldr R1,=tabelle ldrb R0,[R1,5]
- ldr R1,=tabelle mov R2,#5 ldrb R0,[R1,R2]
- ldr R1,=tabelle mov R2,#5 ldrb R1,[R0,R2]
- ldr R1,=tabelle mov R2,#5 ldrb R2,[R1,R0]
A: ldr R1,=tabelle ldrb R0,[R1,5]; ldr R1,=tabelle mov R2,#5 ldrb R0,[R1,R2]

Q: Wie erfolgt der Unterprogrammaufruf in Assembler?
- b Unterprogramm
- Unterprogramm();
- jmp Unterprogramm
- bl Unterprogramm
A: bl Unterprogramm

Q: Wozu dient die Anweisung

schleife:

im Assemblerprogramm
- Es handelt schich um einen Kommentar
- Sie markiert eine Programmstelle, an der das Programm z. B. mit der Anweisung b schleife fortgesetzt werden kann
- Es handelt sich um eine Assemblerdirektive
- Es handelt sich um einen Programmierfehler
A: Sie markiert eine Programmstelle, an der das Programm z. B. mit der Anweisung b schleife fortgesetzt werden kann

Q: Wie kann erreicht werden, dass das Programm an der Sprungnmarke schleife: fortgesetzt wird?
- b schleife
- bl schleife
- bx schleife
- goto schleife
A: b schleife

Q: Bewegen Sie die Zahl 17 in Register R5
- mov R5,#0x11
- mov R5,#17
- mov R5,#0b10001
- mov #17,R5
A: mov R5,#0x11; mov R5,#17; mov R5,#0b10001

Q: Aus welchen beiden Teilen besteht jedes Asssemblerprogramm?
- Initialisierung
- Unterprogramm
- Endlosschleife
- Interruptprogramm
A: Initialisierung; Endlosschleife

Q: Welche Aussagen zur Initialisierung sind richtig?
- Sie enthält die Anweisungen, die nach dem Programmstart nur einmal ausgeführt werden müssen
- Sie bestimmt das andauernde Verhalten des Mikrocontrollers
- In ihr werden Voreinstellungen vorgenommen
- Sie stellt den Anfangszustand des Mikrocontrollers her
A: Sie enthält die Anweisungen, die nach dem Programmstart nur einmal ausgeführt werden müssen; In ihr werden Voreinstellungen vorgenommen; Sie stellt den Anfangszustand des Mikrocontrollers her

Q: Welche Aussagen zur Endlosschleife sind richtig?
- Sie enthält die Anweisungen die nur einmal ausgeführt werden
- Sie enthält die Anweisungen die ständig wiederholt werden
- Sie bestimmt das andauernde Verhalten des Mikrocontrollers
- Sie ist nicht unbedingt erforderlich
A: Sie enthält die Anweisungen die ständig wiederholt werden; Sie bestimmt das andauernde Verhalten des Mikrocontrollers

Q: Womit fängt jedes Mikrocontrollerprogramm an?
- Mit 0
- Mit einer Datentransportanweisung
- Mit einer Rechenoperation
- Sprungmarke main:
A: Sprungmarke main:

Q: Kommentieren Sie folgende Anweisung:

mov R0,#15
- mov R0,#15 //Die Zahl 15 wird in Register R0 geladen
- mov R0,#15 /Die Zahl 15 wird in Register R0 geladen/
- mov R0,#15 /*Die Zahl 15 wird in Register R0 geladen*/
- //mov R0,#15 Die Zahl 15 wird in Register R0 geladen
A: mov R0,#15 //Die Zahl 15 wird in Register R0 geladen; mov R0,#15 /*Die Zahl 15 wird in Register R0 geladen*/

Q: Die folgende Anweisung soll, z.B. für Testzwecke, nicht mehr ausgeführt werden, aber noch im Programmtext bleiben

strb R0,[R1,ODR]
- ( strb R0,[R1,ODR] )
- // strb R0,[R1,ODR]
- { strb R0,[R1,ODR] }
- /*strb R0,[R1,ODR]
A: // strb R0,[R1,ODR]

Q: Welche Bedeutung hat folgender Code:

/*
mov R1,=GPIOC
mov R0,#0xAA
strb R0,[R1,ODR]
*/
- Die Programmzeilen sind auskommentiert, werden also nicht ausgeführt
- Die Programmzeilen werden endlos ausgeführt (Endlosschleife)
- Die Programmzeilen gehören zur Initialisierung und werden nur einmal ausgeführt
- Die Zahl 0xAA wird auf GPIOC.ODR ausgegeben
A: Die Programmzeilen sind auskommentiert, werden also nicht ausgeführt

Q: Beschriften Sie die Elemente des Programmablaufplans
- Anweisung | Answeisung
- Beginn, Ende | Beginn, Ende
- Kommentar | Kommentar
- Fortsetzungsmarke | Fortsetzungsmarke
- Verzweigung | Verzweigung
- Unterprogrammaufruf | Unterprogrammaufruf

Q: Stellen Sie folgenden Text in Form eines Programmablaufplans dar

- Adresse von GPIOC in R1 laden
- Adresse von GPIOB in R2 laden
- Wiederhole endlos
  - GPIOB.IDR in R0 einlesen
  - Wenn R0=0 dann
    - R0:=R0+5
  - R0 auf GPIOC.ODR ausgeben
- main: | main:
- R1:=GPIOC | R1:=GPIOC
- Zone 3 | R2:=GPIOB
- Zone 4 | R0:=GPIOB.IDR
- Zone 5 | R0=0
- Zone 6 | R0:=R0+5
- Zone 7 | GPIOC.ODR:=R0

Q: Wie werden Daten im Codespeicher gespeichert?
- Mit D-Fipflop
- Mit elektronischen Schaltern, die 0 oder 1 sein können
- Magnetisch wie auf einer Festplatte
- Optisch wie auf einer CD
A: Mit elektronischen Schaltern, die 0 oder 1 sein können

Q: Welche Zahlenwerter enthält ein "leeres" Register?
- Keine
- Zufällige Werte
- 0
A: Zufällige Werte

Q: Welche Speicherelemente werden in den Registern verwendet?
- Magnetische Elemente
- Optische Elemente
- Schalter
- D-Flipflop
A: D-Flipflop

Q: Wie viele Bit hat ein Byte?
A: 8

Q: Wie viele Bit hat ein Register in unserem Mikrocontroller?
A: 32

Q: Über wie viele Adressleitungen verfügt der Adressbus unseres 32Bit Prozessors? 
A: 32

Q: In einem Register ist folgender binäre Zahlenwert gespeichert: 0b10101100

Welcher Dezimalzahl entspricht das?
A: 172

Q: Wie wird die Zahl 100 in Assembler oder C als Binärzahl geschrieben?
- 0b1100100
- 1100100
- b1100100
- 11001000
A: 0b1100100

Welche Aussagen sind richtig?

Q: Wann ist ein Sensor High-Aktiv?
- Wenn er bei Betätigung (Aktivierung) eine 0 liefert
- Wenn er bei Betätigung (Aktivierung) eine 1 liefert
- Wenn er durch das Programm gesteuert wird
- Wenn er über einen Hochspannungsausgang verfügt
A: Wenn er bei Betätigung (Aktivierung) eine 1 liefert

Q: Ordnen Sie richtig zu.
- Sensor Richtung am Mikrocontroller | Input
- Aktor Richtung am Mikrocontroller | Output
- Sensor EA-Register | IDR
- Aktor EA-Register | ODR
- Typischer Assemblerbefehl bei Sensoren | ldr R0, [R1, IDR]
- Typischer Assemblerbefehl bei Aktoren | strb R0, [R1, ODR]

Q: Welches sind Aktoren?
- Motor
- Lampe
- Taster
- Lichtschranke
- Elektromagnet
- Thermometer
- Magnetventil
A: Motor; Lampe; Elektromagnet; Magnetventil

Q: Welches sind typische Sensoren?
- Schrittmotor
- Schalter
- Endschalter
- Näherungsschalter
- LED Anzeige
- Ventilator
A: Schalter; Endschalter; Näherungsschalter

Q: Wenn der Taster an PA10 gedrückt (=1) ist, soll zur Sprungmarke M1 verzweigt werden.
- ldr R0, =GPIOA ldr R0, [R1, IDR] tst R0, Bit10 bne M1
- ldr R1, =GPIOA ldr R1, [R0, IDR] tst R0, Bit10 bne M1
- ldr R1, =GPIOA ldr R0, [R1, IDR] tst R0, Bit10 beq M1
- ldr R1, =GPIOA ldr R0, [R1, IDR] tst R0, Bit10 bne M1
A: ldr R1, =GPIOA ldr R0, [R1, IDR] tst R0, Bit10 bne M1

Q: Ordnen Sie richtig zu.
- tst R0,Bit2 | Prüfe Bit 2 von R0
- Verzweige wenn 0 | beq
- bne | verzweige wenn nicht 0
- mov R0,#17 | Speichere Zahl in R0
- Speichere Basisardresse von GPIOC in R1 | ldr R1,=GPIOC
- Setze Bit 1 in GPIOC aus 1 | ldr R2,=GPIOC dann mov R0,Bit1 dann strb R0,[R2,BSR]
- BSR | Bit setze Register
- Output Data Register | ODR
- ldr R2,=GPIOC dann mov R0,Bit1 dann strb R0,[R2,BRR] | setze Bit 1 von GPIOC auf 0
- Bit Rücksetz Register | BRR
- verzweige | b
- add R0,#1 | R0:=R0+1

Q: Ordnen Sie richtig zu.
- Körbchen | Register
- Register | 32 D-Flipflop
- Codespeicher | ROM
- EA-Port | GPIOC
- GPIOB | EA-Port
- ALU | Rechenwerk
- 32MHz | Prozessortakt
- IDR | Input Data Register
- Sensor | Taste
- Aktor | LED
- sub R0,R1,R2 | R0:=R1-R2
- strb R0,[R1,ODR] | Byte-Ausgabe auf Port

Q: Schreiben Sie ein Programm das Tastendruck auf PA10 zählt
- 1. | ldr R1,=GPIOA
- 2. | w1: ldr R0,[R1,IDR]
- 3. | tst R0,Bit10 dann beq w1
- 4. | add R2,#1
- 5. | w2: ldr R0,[R1,IDR]
- 6. | tst R0,Bit10 dann bne w2

Q: Wie wird ein Unterprogramm aufgerufen?
- b unterprogrammname
- bl unterprogrammname
- beq unterprogrammname
- bx lr
A: bl unterprogrammname

Q: Wie endet ein Unterprogramm
- bx lr (Branch extended Linkregister)
- Return
- b schleife
- . end
A: bx lr

Q: Ordnen Sie die Befehle zu
- bx lr | Return vom Unterprogramm
- b schleife | Fortsetzen bei Sprungmarke schleife
- bl warte1s | Unterprogramm warte1s wird aufgerufen
- schleife: | Eine Sprungmarke
- add R0, R1, R2 | R0=R1+R2
- tst R0, Bit5 | Prüft Bit5 von R0
- beq istNull | Springt zur Sprung istNull wenn das Ergebnis einer vorhergehenden Operation 0 ist

Q: Definieren Sie Unterprogramm
- Unterprogramme unterteilen das Hauptprogramm in die Kategorien Eingabe, Ausgabe und Verarbeitung
- Ein Programm das im Hintergrund abläuft
- Ein Programm mit niedriger Priorität
- Ein Programmteil, der von verschiedenen Stellen z. B. des Hauptprogramms aufgerufen werden kann. Nach dem das Unterprogramm ausgeführt wurde, wird das Hauptprogramm automatisch an der Stelle fortgesetzt, an der das Unterprogramm aufgerufen wurde.
A: Ein Programmteil, der von verschiedenen Stellen z. B. des Hauptprogramms aufgerufen werden kann. Nach dem das Unterprogramm ausgeführt wurde, wird das Hauptprogramm automatisch an der Stelle fortgesetzt, an der das Unterprogramm aufgerufen wurde.

Q: Schreiben Sie ein Unterprogramm addiere, das R1 und R2 zusammenhält und das Ergebnis in R0 speichert.
- addiere: add R0, R1, R2 bx lr
- addiere: add R0, R1, R2 b lr
- add R0, R1, R2 bx lr addiere:
- addiere: add R0, R1, R0 b return
A: addiere: add R0, R1, R2 bx lr

Q: Wählen Sie die richtigen Anordnungen des Unterprogramm.
- Unterprogramm: ... bx lr main: ... b schleife
- main: Unterprogramm: ... bx lr ... b schleife
- main: ... b schleife Unterprogramm: ... bx lr
A: Unterprogramm: ... bx lr main: ... b schleife; main: ... b schleife Unterprogramm: ... bx lr

Q: Speichern Sie R1 auf dem Stack
- push {R1}
- pop {R1}
- str R1, [stack]
- mov stack, R1
A: push {R1}

Q: Welches ist das Linkregister
- R15
- R14
- R13
- R12
- R11
A: R14

Q: Welches Register ist der Stackpointer?
- R15
- R14
- R13
- R12
- R11
A: R13

Q: Holen Sie R3 vom Stack
- pop R3
- push R3
- pop {R3}
- push {R3}
A: pop {R3}

Q: Wo befindet sich der Stack?
- Im EA-Speicher
- Im ROM
- Im Codespeicher
- Im RAM
A: Im RAM

Q: Welchen Zweck hat das Linkregister?
- Es speichert die Rückdprungadresse bei Unterprogrammen
- Zwischenspeicher für den Stackpointer
- Es enthält die oberste Adresse des Stacks
- Es enthält die Codeadresse des Unterprogramms
A: Es speichert die Rückdprungadresse bei Unterprogrammen

Q: Wozu dient der Stack?
- Zwischenspeicher für Register
- Zwischenspeicher für das Linkregister
- Als Speicher für lokale Variablen
- Zur Speicherung von Unterprogrammen
A: Zwischenspeicher für Register; Zwischenspeicher für das Linkregister; Als Speicher für lokale Variablen

Q: Welchen Inhalt hat der Stackpointer?
- Er dient als Zwischenspeicher für Register
- Er speichert die erste genutzte Speicheradresse des Stacks
- Er speichert die letzte genutzte Speicheradresse des Stacks
- Er enthält die aktuelle Programmadresse
A: Er speichert die letzte genutzte Speicheradresse des Stacks

Q: Warum müssen Peripheriekomponenenten wie Timer oder GPIO mit Takt versorgt werden?
- Um den Takt auf einem Ausgang aus zu geben
- Damit die Peripheriekomponente betriebsbereit wird
- Um die Rechenleistung zu steigern ("Turbo boost")
- Damit die Persistenz des IO gewahrt bleibt
A: Damit die Peripheriekomponente betriebsbereit wird

Q: Welchen Grund gibt es, die Taktversorgung von Peripheriekomponeneten zu deaktivieren?
- Nicht mit Takt versorgte Peripheriecomponeneten reagieren schneller auf externe Ereignisse (steigende und fallende Flanken)
- Die Taktung dient lediglich dazu Ausgänge anzutreiben
- Darurch wird der Stromverbrauch der Peripheriecomponenete erheblich gesenkt
- Ungetaktete Peripherieeinheiten haben eine höhere Interruptpriorität als getaktete
A: Darurch wird der Stromverbrauch der Peripheriecomponenete erheblich gesenkt

Welche Anschlüsse werden als Ausgänge konfiguriert

Q: Welche Funktionen können bei IO-Ports konfiguriert werden?
- Digitalausgang
- Video
- Digitaleingang
- Analogeingang
- Alternate
A: Digitalausgang; Digitaleingang; Analogeingang; Alternate

Q: Ein Taster verbindet einen Digitaleingang mit "1". Welchen Pull konfigurieren Sie?
- Pullup
- Pulldown
- kein Pull
- Pullup und Pulldown gleichzeitig
A: Pulldown

Q: Wozu wird ein Pulldown konfiguriert?
- Um den Stromverbrauch zu senken (engl.: "Pull down")
- Um die Geschwindigkeit des Eingangs zu erhöhen
- Damit ein offener Eingang als "1" erkannt wird
- Damit ein offener Eingang als "0" erkannt wird
A: Damit ein offener Eingang als "0" erkannt wird

Q: Welche Vorzüge hat die Verwendung von Interrupts?
- Das Hauptprogramm wird schneller, weil es keine Portpins mehr abfragen muss
- Der Mikrocontroller kann schneller auf Ereignisse reagieren
- Die Endlosschleife wird kürzer
- Die Taktrate des Prozessors steigt
A: Das Hauptprogramm wird schneller, weil es keine Portpins mehr abfragen muss; Der Mikrocontroller kann schneller auf Ereignisse reagieren; Die Endlosschleife wird kürzer

Q: Was versteht man unter einer ISR?
- Instance Show Room
- Internal Savety Rules
- Internet Secure Routing
- Interrupt Service Routine
A: Interrupt Service Routine

Q: Erläutern Sie den Ablauf eines Interrupts
- 1. | Ein Ereignis tritt ein
- 2. | Das Hauptprogramm wird unterbrochen
- 3. | Der Prozessor verzweigt in die ISR
- 4. | Die ISR wird ausgeführt
- 5. | Der Prozessor kehrt ins Hauptprogramm zurück
- 6. | Das Hauptprogramm wird an der Stelle fortgesetzt, an der es unterbrochen wurde

Q: Wie verfährt der Prozessor mit den General Purpose Registern R0 .. R3 bei einem Interrupt?
- Alle Register werden mit 0 initialisiert
- Die Registerinhalte können verloren gehen
- Die Register werden in einem spezeillen Bereich des RAMs, dem sogenannten Stack gesichert
- Die Register werden inkrementiert, so weiß das Hauptprogramm automatisch, dass ein Interrupt aufgetreten ist.
A: Die Register werden in einem spezeillen Bereich des RAMs, dem sogenannten Stack gesichert

Q: Wie kann ein externer Interrupt ausgelöst werden?
- Durch eine steigende Flanke am Portpin
- Durch einen Highpegel am Portpin
- Durch eine Low-Pegel am Portpin
- Durch eine fallende Flanke am Portpin
A: Durch eine steigende Flanke am Portpin; Durch eine fallende Flanke am Portpin

Q: Welche Voreinstellung eine Portpins ist für einen externen Interrupt erforderlich?
- Input
- Output
- Alternate
- analog
A: Input

Q: Welche Einstellung kann im Interrupt Mask Register (IMR)
- Freigabe
- fallende Flanke
- steigende Flanke
- Alternate
A: Freigabe

Q: Welche Einstellungen können an den Registern RTSR und FTSR vorgenommen werden?
- Freigabe
- Auswahl des Portpins für den Interrupt
- Steigende oder fallend Flanke am Portpin löst einen Interrupt aus (oder beides)
- Ausführungsgeschwindigkeit der ISR
A: Steigende oder fallend Flanke am Portpin löst einen Interrupt aus (oder beides)

Q: Welche Informationen stehen in der Vektortabelle?
- Laufwerksverzeichnis
- Einsprungadressen (+1) der Interrupt Service Routinen
- Sprungbefehle zu den ISRs
- Codierungstabelle für Vektoren (2- und 3-dimensional)
A: Einsprungadressen (+1) der Interrupt Service Routinen

Q: Welche Einstellungen sind für einen externen Interrupt erforderlich?
- Freigabe im Nested Vector Interrupt Controller (NVIC)
- Freigabe
- Auswahl der Flanke
- Auswahl der Interruptquelle (des Portpins)
A: Freigabe im Nested Vector Interrupt Controller (NVIC); Freigabe; Auswahl der Flanke; Auswahl der Interruptquelle (des Portpins)

Q: Welche Aufgaben hat der Nested Vector Interrupt Controller (NVIC)?
- Starten der ISR
- Festlegen der Interruptflanke
- Festlegen der Interruptprioritäten
- Steuerung der Ausführungsreihenfolge der ISRs, wenn ein Interrupt einen anderen unterbricht
- Register sichern
- Rücksprungadresse speichern
A: Starten der ISR; Festlegen der Interruptprioritäten; Steuerung der Ausführungsreihenfolge der ISRs, wenn ein Interrupt einen anderen unterbricht; Register sichern; Rücksprungadresse speichern

Q: Bitte ausfüllen für Systemtakt 32 MHz
Presacaler | [...] | 31 | 31 | 31999 |  | [...] | 31999 | 31 | 31999 | 63999
Autoreloadregister | 499 | [...] | 599 | [...] |  | 1999 | [...] | [...] | 14999 | 63999
Intervall | 0,5s | 100µs | [...] | 1s |  | 2ms | 10s | 5ms | [...] | [...]
A: 31999; 31; 99; 999; 9999; 4999; 600µs; 15s; 128s

Q: Wozu dient ein Hardwaretimer?
- Zur Bestimmung der Prozessortaktfrequenz
- Um ein präzises Zeitintervall zu erzeugen
- Um Programmierzeiten zu erfassen (Time Division Multiplier)
- Zur Analogwertverarbeitung
A: Um ein präzises Zeitintervall zu erzeugen

Q: Welche auswirkungen hat es, wenn der Zählwert den Autoreloadwert erreicht?
- Das Update Interrupt Flag wird auf 1 gesetzt und der Zähler zählt weiter bis 65535
- Das Update Interrupt Flag wird auf 1 gesetzt und der Zähler zählt auf 0 zurück
- Das Update Interrupt Flag wird auf 0 gesetzt und der Zähler beginnt wieder bei 0 zu zählen
- Das Update Interrupt Flag wird auf 1 gesetzt und der Zähler beginnt wieder bei 0 zu zählen
A: Das Update Interrupt Flag wird auf 1 gesetzt und der Zähler beginnt wieder bei 0 zu zählen

Q: Welche Intialisierung muss beim Timer zuerst vorgenommen werden?
- Aktivierung der Taktversorgung
- Zähler auf 0 setzen
- Update Interrupt Flag auf 0 setzen
- Prescaler einstellen
- Autoreloadwert im Autoreloadregister eintragen
A: Aktivierung der Taktversorgung

Q: Welche Auswirkungen hat es, wenn die Taktversorgung des Timers nicht aktiviert wurde?
- Der Timer läuft normal, ist aber für das Programm nicht sichtbar
- Der Timer ist nicht aktiviert, es können jedoch Einstellungen vorgenommen werden. Der Zähler startet sobald die Taktversorgung aktiviert wird.
- Der Timer ist nicht aktiviert, es können keine Einstellungen vorgenommen werden. Der Zähler läuft nicht.
- Ter Timer läuft mit einer undefinierten Taktrate
A: Der Timer ist nicht aktiviert, es können keine Einstellungen vorgenommen werden. Der Zähler läuft nicht.

Q: Der Timer wird gestartet indem man [...]
Also offered: Das UIF-Bit im SR auf 0 setzt; Die Taktversorgung des Timers aktiviert; Den Autoreloadwert einträgt; Den Counter auf 0 setzt
A: Das CEN-Bit im CR1 auf 1 setzt

Q: Geben Sie typische Prescalerwerte bei einer Taktfrequenz von 32MHz an.
- 1µs | 31
- 1ms | 31999
- 2ms | 63999

Q: 0,5s
- 31
- 499
A: 31 / 499

Q: Wozu dient der Prescaler?
- Um den Zähltakt T einzustellen
- Um den Systemtakt für den Counter herunter zu teilen
- Um den Prozessor zu übertakten
- Als maximaler Zählwert des Counters
A: Um den Zähltakt T einzustellen; Um den Systemtakt für den Counter herunter zu teilen

Q: Wie arbeitet der Counter (Zähler)?
- Bei jedem Taktimpuls aus dem Prescaler zählt der Counter um ARR%10 hoch. Sobald der Zählwert den Autoreloadwert erreicht, beginnt er wieder bei 0
- Bei jedem Taktimpuls aus dem Prescaler zählt der Counter um den Prescalerwert hoch. Sobald der Zählwert den Autoreloadwert erreicht, beginnt er wieder bei 0
- Bei jedem Taktimpuls aus dem Prescaler zählt der Counter um 1 herunter. Sobald der Zählwert 0 erreicht, beginnt er wieder beim Autoreloadwert
- Bei jedem Taktimpuls aus dem Prescaler zählt der Counter um 1 hoch. Sobald der Zählwert den Autoreloadwert erreicht, beginnt er wieder bei 0
A: Bei jedem Taktimpuls aus dem Prescaler zählt der Counter um 1 hoch. Sobald der Zählwert den Autoreloadwert erreicht, beginnt er wieder bei 0

Q: Zu welchem Zweck kann der Timer Interrupts auslösen?
- Zum Übertakten des Prozessors
- Der Timer kann zyklische Interrupts, mit programmierbarem Zeitintervall, auslösen. Für z. B. Blinklichter, usw.
- Als Time-Division-Multiplier (TDM)
- Zur Einsparung von Energie
A: Der Timer kann zyklische Interrupts, mit programmierbarem Zeitintervall, auslösen. Für z. B. Blinklichter, usw.

Q: Wie wird der Timerinterrupt freigegeben?
- UIE im DIER auf 1 setzen
- UIF im SR auf 0 setzen
- UIE im DIER auf 0 setzen
- UIF im SR auf 1 setzen
A: UIE im DIER auf 1 setzen

Q: Welche Aktion ist in der ISR erforderlich?
- UIE auf 0 zurücksetzen
- UIE auf 1 setzen
- UIF auf 1 setzen
- UIF auf 0 zurücksetzen
A: UIF auf 0 zurücksetzen