Anzahl benötigter Takte für eine Assembler-Befehlsfolge im MSP430

OP #4716703
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
#4716738
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.
#4717870
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.
OP #4717924
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.
#4718038
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren