Forum: Mikrocontroller und Digitale Elektronik Wieviele clock cycles sind ein Befehl beim MSP430?


von Peter Mairhofer (Gast)


Lesenswert?

Hi,

Ich hab einen MSP430 den ich auf 1 MHz konfiguriert habe (zwischen LFXIN 
und LFXOUT haengt ein normaler 32.768kHz quartz):
1
CSCTL0_H = 0xA5; 
2
CSCTL1 = 0;

In meinem Hauptprogramm hab ich:
1
P2OUT |= 0x80; 
2
P2OUT &= ~0x80;
3
P2OUT |= 0x80;
4
P2OUT &= ~0x80;
5
P2OUT |= 0x80;

Jede dieser Zeilen resultiert in genau einem OP Code in Assembler. Mit 
einem Oszilloskop messe ich P2.7 und sehe die Bits.
Der Abstand von der steigenden Flanke des ersten HIGH zur fallenden 
Flanke des zweiten HIGH ist in etwa 17.5us (hab kein gutes Oszilloskop, 
deswegen ist die Messgenauigkeit nicht so hoch ... eher Daumen x Pie). 
Das sollten 3 OP Codes sein.

1/(17.5u/3) = 171.43 kHz ... mal 6 waere in etwa die Taktrate von 1 MHz.


- Kann es sein dass der MSP430 fuer jeden OP code 6 Clock Zyklen 
benoetigt?
- Benoetigt jeder OP code gleich viel Zyklen?

Vielen Dank!
Peter

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Angehängte Dateien:

Lesenswert?

Ich habe dir mal ein beispielhaftes Block Diagramm irgendeines MSP430 
angehaengt.

Wenn du nun auf die IOs (rechts oben im Bild) zugreifen willst, dann 
geht das nicht direkt ueber die CPU sondern ueber ein Bussystem welches 
mit den IOs verbunden ist. Auch wenn jetzt die CPU nur einen Taktzyklus 
fuer den Schreibzugriff auf den Bus, muss der Schreibzugriff noch im IO 
Peripherie Block umgesetzt werden (und je nach Bussystem wird noch 
rueckgemeldet ob der Zugriff erfolgreich war).

Das sind dann die zusaetzlichen Verzoegerungen die du mit dem Oszi 
misst.

von Egon D. (Gast)


Lesenswert?

Peter Mairhofer schrieb:

> - Kann es sein dass der MSP430 fuer jeden OP code
>   6 Clock Zyklen benoetigt?

Nein.


> - Benoetigt jeder OP code gleich viel Zyklen?

Nein.
Je nach Befehl und Operanden braucht ein Opcode zwischen
einem und sechs Taktzyklen.
Der Zeitbedarf richtet sich primär nach der Befehlslänge
(ein Befehlswort, ggf. mehrere Adressen bzw. Direkt-
operanden) und der Adressierungsart. Einfache Register-
Register-Operationen kommen mit einem Befehlswort und
einem Taktzustand aus; komplexe Speicher-Speicher-Transfers
mit absoluten Adressen und Offset brauchen fünf oder
sechs Takte (bin nicht ganz sicher).

von Peter Mairhofer (Gast)


Lesenswert?

Hi Tobias,

Oh, das macht Sinn, danke!
Laesst sich das irgendwie quantifizieren?
Denn ich moechte das Timing halbwegs genau fuer ein 
Kommunikationsprotokoll zuammenkriegen.

Am MSP430 gibt es ja MCLK, ACLK, SMCLK, MODCLK und VLOCLK. Soweit ich 
verstehe habe ich MCLK auf 1 MHz gesetzt.

Haengt die Clock mit der die Daten tatsaechlich auf die I/O pins kommen 
mit einem dieser Clocks zusammen? Sind diese synchronisiert, sodass sich 
ein einigermassen passables deterministisches Timing implementieren 
liesse?

Unabhaengig davon: Was ist eigentlich der richtige Weg fuer I/O? Gibt es 
einen besseren Weg fuer Output? Und fuer Input, wie stelle ich sicher 
dass ich in der Mitte eines Bit lese?

LG
Peter

von Bernhard S. (b_spitzer)


Lesenswert?

Peter Mairhofer schrieb:
> Laesst sich das irgendwie quantifizieren?
> Denn ich moechte das Timing halbwegs genau fuer ein
> Kommunikationsprotokoll zuammenkriegen.

Steht im Instruction-Set Summary:
https://www.ti.com/sc/docs/products/micro/msp430/userguid/as_5.pdf

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Angehängte Dateien:

Lesenswert?

Peter Mairhofer schrieb:
> Denn ich moechte das Timing halbwegs genau fuer ein
> Kommunikationsprotokoll zuammenkriegen.

Hmmm, dafuer sind die GPIOs einfach nur wirklich gemacht, zumindest 
nicht wenn dein Ubertragungstakt nicht deutlich kleiner ist als die 
Peripherie Clock im MSP430.

Peter Mairhofer schrieb:
> Am MSP430 gibt es ja MCLK, ACLK, SMCLK, MODCLK und VLOCLK. Soweit ich
> verstehe habe ich MCLK auf 1 MHz gesetzt.
>
> Haengt die Clock mit der die Daten tatsaechlich auf die I/O pins kommen
> mit einem dieser Clocks zusammen? Sind diese synchronisiert, sodass sich
> ein einigermassen passables deterministisches Timing implementieren
> liesse?

Die MCLK ist hier denke ich die relevante, wobei diese noch 
runtergeteilt werden kann fuer den Bus Zugriff. Aber ja, das sollt 
eigentlich deterministisch sein, da keine Clock Domaene gekreuzt werden 
muss.

Peter Mairhofer schrieb:
> Unabhaengig davon: Was ist eigentlich der richtige Weg fuer I/O? Gibt es
> einen besseren Weg fuer Output? Und fuer Input, wie stelle ich sicher
> dass ich in der Mitte eines Bit lese?

Wenn du ueber GPIOs gehst, dann kannst du diese pollen sofern deine 
Uebertragung langsam genug ist.

Idealerweise nimmst du einen Uebertragungsstandard welche schon hart im 
Chip zur Verfuegung steht, z.B. SPI.

Hast du ein paar Eckdaten wie deine Uebertragung aussehen soll?

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Peter Mairhofer schrieb:
> Denn ich moechte das Timing halbwegs genau fuer ein
> Kommunikationsprotokoll zuammenkriegen.

Üblich nimmt man für sowas einen Timer, damit man zyklusgenau ist und 
kein Jitter durch Interrupts stört.
Beim AVR haben die Timer dazu Compare Mode (zyklusgenaues Setzen eines 
Pins) und Capture Mode (zyklusgenaues Einlesen einer Flanke). Der MSP 
sollte ähnliches haben.
Die Bitzeiten müssen lang genug sein, damit man Zeit hat, den 
Comparewert für die nächste Flanke zu setzen, bzw. den Capturewert 
auszuwerten.

von fertig (Gast)


Lesenswert?

Peter Mairhofer schrieb:
> ich moechte das Timing halbwegs genau fuer ein
> Kommunikationsprotokoll zuammenkriegen

Dann nimm Timer und ISR.

Peter D. schrieb:
> AVR haben die Timer dazu Compare Mode

Boahh, jetzt schmeiss ich meine ARMs alle weg.

Peter Mairhofer schrieb:
> den ich auf 1 MHz konfiguriert habe (zwischen LFXIN
> und LFXOUT haengt ein normaler 32.768kHz quartz

Ich tanke Autogas und fahre 150km/h. ;-)

Der MSP hat mehrere Taktquellen. Dir Frage ist: Wie hast du das 
konfiguriert?
http://micah.waldste.in/blog/wp-content/uploads/2011/03/39-msp430-clock_system.png

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.