mikrocontroller.net

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


Autor: Lukas S. (chersos)
Datum:

Bewertung
0 lesenswert
nicht 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.
MOV R5, &0x1234
MOV R8, &0x1234
MOV R5, &0x1234
MOV R8, &0x1234
...

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
Autor: Falk B. (falk)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Torsten C. (torsten_c) Benutzerseite
Datum:

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

Autor: Lukas S. (chersos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super, vielen Dank für die Hinweise.

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zitronen F. (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allenfalls gibt es auch einen Simulator dazu...

Autor: Jonas B. (jibi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lukas S. (chersos)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: J. W. (dilbert)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.