Forum: Mikrocontroller und Digitale Elektronik Anzahl benötigter Takte für eine Assembler-Befehlsfolge im MSP430


von Lukas S. (chersos)


Lesenswert?

Hallo,

für eine Ansteuerung mittels PWM möchte ich aus zeitkritischen Gründen 
Inline-Assembler verwenden. Dabei muss genau alle 4 Takte das 
Ausgangssignal neu gesetzt werden.

Ich möchte nun nacheinander über die MOV-Instruktion die entsprechenden 
Ausgabebits an die Zieladresse schreiben.
1
MOV R5, &0x1234
2
MOV R8, &0x1234
3
MOV R5, &0x1234
4
MOV R8, &0x1234
5
...

Laut Dokumentation ( http://www.ti.com/lit/ug/slau049f/slau049f.pdf 
(Seite 101) ) benötigt die MOV-Instruktion mit absoluter Zieladresse 4 
Takte.

Meine Fragen:
Wird in dem Codebeispiel immer nach 4 Takten der Inhalt von 0x1234 neu 
gesetzt?
Muss ich mir Gedanken um die Parallelisierbarkeit bei der Abarbeitung 
der Instruktionen machen?
Bzw. woher bekomme ich die Informationen darüber, wie schnell die 
Befehlsfolge abgearbeitet wird?

Viele Grüße
Lukas

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@Lukas S. (chersos)

>Laut Dokumentation ( http://www.ti.com/lit/ug/slau049f/slau049f.pdf
>(Seite 101) ) benötigt die MOV-Instruktion mit absoluter Zieladresse 4
>Takte.

Kann sein.

>Wird in dem Codebeispiel immer nach 4 Takten der Inhalt von 0x1234 neu
>gesetzt?

Ja.

>Muss ich mir Gedanken um die Parallelisierbarkeit bei der Abarbeitung
>der Instruktionen machen?

Nein, denn dein MSP430 hat vielleicht eine kleine Pipeline, kann aber 
keine Befehle in Echtzeit parallelisieren bzw. zeitlich umsortieren oder 
dynamisch komprimieren, wie fds größere CPUs können.

>Bzw. woher bekomme ich die Informationen darüber, wie schnell die
>Befehlsfolge abgearbeitet wird?

Aus dem CPU-Takt.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Falls Du Deiner Rechnung nicht traust,
toggel einen Pin und
messe die Impuls-Länge.

von Lukas S. (chersos)


Lesenswert?

Super, vielen Dank für die Hinweise.

von Jim M. (turboj)


Lesenswert?

Lukas S. schrieb:
> für eine Ansteuerung mittels PWM möchte ich aus zeitkritischen Gründen
> Inline-Assembler verwenden. Dabei muss genau alle 4 Takte das
> Ausgangssignal neu gesetzt werden.
>
> Ich möchte nun nacheinander über die MOV-Instruktion die entsprechenden
> Ausgabebits an die Zieladresse schreiben.

Wieso nimmt man da nicht einen Timer für? Genau für sowas sind die doch 
gemacht.

von Pandur S. (jetztnicht)


Lesenswert?

Allenfalls gibt es auch einen Simulator dazu...

von Jonas B. (jibi)


Lesenswert?

>Wieso nimmt man da nicht einen Timer für?

Hm...Könnte bisschen knapp werden, Register sichern, ISR anspringen, MOV 
ausführen, Register zurücksichern. Das in 4 Takten...`?

Gruß J

von Lukas S. (chersos)


Lesenswert?

Jim Meba schrieb:
>Wieso nimmt man da nicht einen Timer für? Genau für sowas sind die doch
>gemacht.

Es handelt sich hierbei um die Ansteuerung mehrerer WS2812B.
( http://www.led-genial.de/mediafiles//Sonstiges/WS2812B.pdf )

Die Dauer für das Ausgeben einer 1 oder 0 am Pin liegt bei 400 ns bzw. 
800 ns.
Mein Controller hat nur eine Taktfrequenz von 8 MHz.
Je nach Bitfolge, die ich codieren möchte, wechselt die Dauer der 
anliegenden 0 oder 1 nach wenigen Takten. Es handelt sich auch nicht um 
wiederholende Muster.

Ich bin mir nicht sicher, wie das mit dem Timer gemeint ist.
Für eine Umsetzung mittels Interrupts sind vermutlich die Abstände 
zwischen dem Wechseln des Ausgangssignals zu kurz.

Oh Doch schrieb:
>Allenfalls gibt es auch einen Simulator dazu...

Ich verwende eigentlich nur mspdebug.
Da werden leider keine Informationen bezüglich Takte pro Instruktion 
gegeben.

von Falk B. (falk)


Lesenswert?

@ Lukas S. (chersos)

>Es handelt sich hierbei um die Ansteuerung mehrerer WS2812B.
>( http://www.led-genial.de/mediafiles//Sonstiges/WS2812B.pdf )

>Die Dauer für das Ausgeben einer 1 oder 0 am Pin liegt bei 400 ns bzw.
>800 ns.

Da bist du nicht der Erste. Das kann man u.a. mit dem SPI machen, indem 
damit das passende Pulsmuster generiert. Da kann die CPU relativ 
entspannt die Daten nachladen, das geht sogar in C ohne Handstände ;-)

>Ich bin mir nicht sicher, wie das mit dem Timer gemeint ist.

Ist hier auch Unsinn, das geht nicht sinnvoll.

>Für eine Umsetzung mittels Interrupts sind vermutlich die Abstände
>zwischen dem Wechseln des Ausgangssignals zu kurz.

Ja.

von Clemens L. (c_l)


Lesenswert?

Lukas S. schrieb:
> Ich bin mir nicht sicher, wie das mit dem Timer gemeint ist.

Output mode Set/Reset; ist für PWM gedacht.

> Je nach Bitfolge, die ich codieren möchte, wechselt die Dauer der
> anliegenden 0 oder 1 nach wenigen Takten. Es handelt sich auch nicht um
> wiederholende Muster.

DMA könnte helfen, wenn dein unbekannter Chip es hat.

von J. W. (dilbert)


Lesenswert?

Lukas S. schrieb:
> Ich verwende eigentlich nur mspdebug.
> Da werden leider keine Informationen bezüglich Takte pro Instruktion
> gegeben.
Mit naken_util kann man in der Kommandozeile simulieren. Dabei wird auch 
die Anzahl der Zyklen angezeigt.
https://www.mikekohn.net/micro/naken_asm.php

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.