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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.