Aufgabe Vorschlag C - Aufgabe 2 (2.2, 2.3, 2.5) · Abitur Hessen Technische Informatik LK 2021

Thema: Assemblerprogrammierung und Mikrocontrolleraufbau · Aus der Prüfung LK (2021)

Aufgabenstellung

Das Boundary-Scan-Testsystem besteht neben der Software auch aus einer Testhardware, die von einem Mikrocontroller gesteuert wird. Der Mikrocontroller ist dafür zuständig, die Testdaten von der Software zu empfangen, die Testsignale für die IC-Anschlüsse TCK, TDI und TMS zu erzeugen und die über den IC-Anschluss TDO empfangene Testantwort zurück an die Software zu senden.

TCK gibt den Takt an, mit dem die Daten in die Boundary-Scan-ICs geschoben werden. TMS legt den Testmodus fest und TDI sind die Testdaten. Bevor die Testdaten in TDI eingeschoben werden, muss der Test mit der Bitfolge „0100“ an TMS initialisiert werden. Für den anschließenden Testvorgang muss TMS immer „0“ sein. Nach Einschieben aller Testdaten wird der Test mit der Bitfolge „11“ (zwei „1“en) an TMS beendet.

Während die Testdaten bitweise in TDI eingeschoben werden, werden die Testantworten ebenfalls bitweise aus TDO herausgeschoben und können von der Testhardware gelesen werden. Ein Beispiel für das Einschieben der Daten findet sich in der folgenden Grafik.

Zur Initialisierung des Tests gibt es das Unterprogramm initTest. Zur Durchführung des Tests gibt es das Unterprogramm schiebeDaten, das immer dann automatisch aufgerufen wird, wenn ein Datenbyte (8 Bit an Testdaten) von der Software empfangen wurde. Außerdem gibt es das Unterprogramm sendeAntwort, das immer, wenn 8 Bit an Testantwort eingelesen wurden, diese an die Software sendet.

Zur Erzeugung des Taktsignals steht außerdem das Unterprogramm wait zur Verfügung, das eine halbe Taktperiode lang wartet.

2.2

Zur Durchführung des Tests werden vier Anschlüsse am Mikrocontroller benötigt. Außerdem wird ein Register zum Empfangen der Testdaten von der Software benötigt sowie ein Register, in das die Testantwort gespeichert wird, um sie an die Software zurückzumelden.

Geben Sie die Portpins und Register des von Ihnen im Unterricht verwendeten Mikrocontrollers in Bezug auf deren Zweck für die Testdurchführung an.

2.3

Implementieren Sie das Unterprogramm initTest in dem von Ihnen im Unterricht verwendeten Assembler.

2.5

Implementieren Sie das Unterprogramm schiebeDaten unter Verwendung der zuvor benannten Anschlüsse und Register in dem von Ihnen im Unterricht verwendeten Assembler.

Hinweis: In der Assemblerprogrammiersprache steht der Befehl lsr Rd zur Verfügung...

Aufgabenstellung: Aufgabe Vorschlag C - Aufgabe 2 (2.2, 2.3, 2.5) · Abitur Hessen Technische Informatik LK 2021

Lösung

Nach den offiziellen Korrekturhinweisen

2.2 Geben Sie die Portpins und Register des von Ihnen im Unterricht verwendeten Mikrocontrollers in Bezug auf deren Zweck für die Testdurchführung an.

Lösung: z. B.: Port C0 → TCK Port C1 → TMS Port C2 → TDI Port C3 → TDO Register für Testdatenempfang: R16 Register für Testantwort: R17 (Hinweis: Auch andere Portpin-Belegungen sind möglich.)

2.3 Implementieren Sie das Unterprogramm initTest in dem von Ihnen im Unterricht verwendeten Assembler.

Lösung: ``` initTest: cbi PORTC,0 ; TCK=0 cbi PORTC,1 ; TMS=0 cbi PORTC,2 ; TDI=0 rcall wait ; halben Takt warten sbi PORTC,0 ; TCK=1 (TMS und TDI nicht ändern) rcall wait ; halben Takt warten cbi PORTC,0 ; TCK=0 sbi PORTC,1 ; TMS=1 (TDI nicht ändern) rcall wait ; halben Takt warten sbi PORTC,0 ; TCK=1 rcall wait ; halben Takt warten cbi PORTC,0 ; TCK=0 cbi PORTC,1 ; TMS=0 rcall wait ; halben Takt warten sbi PORTC,0 ; TCK=1 rcall wait ; halben Takt warten cbi PORTC,0 ; TCK=0 rcall wait sbi PORTC,0 ; TCK=1 rcall wait ret ; Rücksprung zum Hauptprogramm ```

2.5 Implementieren Sie das Unterprogramm schiebeDaten unter Verwendung der zuvor benannten Anschlüsse und Register in dem von Ihnen im Unterricht verwendeten Assembler.

Lösung: ``` schiebeDaten: ldi R18,8 loop: cbi PORTC,0 ; TCK=0 cbi PORTC,1 ; TMS=0 lsr R16 ; Testdaten nach rechts schieben (Bit0 ins Carry) brcs setzen ; wenn Carry==1 dann nach setzen cbi PORTC,2 ; sonst (Carry==0) TDI=0 rjmp weiter setzen: sbi PORTC,2 ; TDI=1 weiter1: rcall wait ; halben Takt warten sbi PORTC,0 ; TCK=1 (TMS und TDI nicht verändern) sbis PINC,3 ; wenn TDO==1 nächsten Befehl überspringen rjmp tdo0 ; sonst (TDO==0) Sprung zu tdo0 ori R17,0b10000000 ; Bit 7 in Testantwort auf 1 rjmp weiter2 tdo0: andi R17,0b01111111; Bit 7 in Testantwort auf 0 weiter2: lsr R17 ; R17 nach rechts schieben rcall wait ; halben Takt warten dec R18 ; R18 runterzählen brne loop ; wenn noch nicht bei 0 Sprung zu loop rcall sendeAntwort ; Testantwort senden ret ; zurück zum Hauptprogramm ```

Die ausführliche Erklärung Schritt für Schritt (mit KI) gibt es mit Premium. Premium

Löse sie direkt hier: automatische Korrektur, Hinweise und Lösung Schritt für Schritt.

‹ Aufgabe Vorschlag B - Aufgabe 2 (2.1, 2.3, 2.4) · LK 2021

Mehr Aufgaben zu Assemblerprogrammierung und Mikrocontrolleraufbau