mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430: Takt intern geteilt?!


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend!

Ich verzweifle gerade an folgendem Problem:

An meinem MSP430F2618 hängt ein externer Quarz mit 16 MHz an XT2. Den 
möchte ich jetzt als Masterclock verwenden. Ich initialisiere den mit 
diesem Code:
int main( void ) {
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  //Ports initialisieren
  P1DIR = 0xFF;       //P1 as output
  P1SEL = 0x00;       //GPIO
  P1OUT = 0x00;
  
  //volle Fahrt auf's Clockmodul
  init_XT2();
  //DCO abschalten
  _BIS_SR(SCG0);
  
  for(;;) {
    P1OUT ^= 0x01;      //toggle bit 1
  }
}



void init_XT2(void) {
  unsigned int i;
  BCSCTL3 |= XT2S_2;            //16MHz mode
  BCSCTL1 &= ~XT2OFF;           // XT2 = HF XTAL
  do {
    IFG1 &= ~OFIFG;             // Clear OSCFault flag
    BCSCTL3 &= ~XT2OF;          // clear xt2 osc. fault bit (maybe not neccessary but safe)
    for (i = 0xFF; i > 0; i--); // Time for flag to set
  }
  while ((IFG1 & OFIFG));       // OSCFault flag still set?                
  BCSCTL2 |= SELM1 + SELS;      // MCLK and SMCLK = XT2
}

Das klappt wunderbar, der Quarz schwingt an, Oszi und Frequenzzähler 
messen 16 MHz.

Nun wackel ich an P1.1 und messe da allerdings nur 1,33 MHz. Schaue ich 
mir die zuständigen Register an, ist aber alles richtig eingestellt. Der 
Takt wird laut den Prescaler-Bits nicht geteilt. Woher kommt denn jetzt 
der Teilerfaktor 12 (16:1,33 = 12)?!

Ich bin echt dankbar, wenn mir jemand eine Kerze ins Dunkel stellt!
Daniel

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du steuerst den Pin mit Software an. Sieh Dir doch mal an, welche 
Assemblerinstruktionen der Compiler aus dem Inhalt Deiner Schleife 
gemacht hat und sieh Dir an, wieviele Takte diese Instruktionen 
benötigen.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag: Ich schaue mir auch im Einzelschritt den 
Assembler-Code an. Da passiert auch nix anderes als ein XOR am Port und 
dann ein Jump zurück zum XOR. So viele Zyklen kann das doch nicht 
dauern...

Autor: Tobias Korrmann (kurzschluss81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konigurier pin 5.4 (Siehe Datenbaltt 
http://focus.ti.com/lit/ds/symlink/msp430f2618.pdf auf Seite 11) einfach 
mal als Spezialfunktion. Dort kommt dein MCLK als Tackt dann raus ohne 
Prescaler oder ähnliches da funkt auch deine Software nicht zwischen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Da passiert auch nix anderes als ein XOR am Port und
> dann ein Jump zurück zum XOR.
> So viele Zyklen kann das doch nicht dauern...

Sieh nach, schreibs auf. Sind ja nur 12 Taktzyklen.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Fresse, seid ihr schnell :-)

@Tobias: An P5.4 hab ich 16 MHz, wie erwartet.

@all:
Die Instruktionen sehen so aus:
xor.b #0x1,&P1OUT
jmp 0x3160

Jetzt geh ich ins Datenblatt uns sehe...
2 Cycles für jmp (Format-III Instruction) und
5 Cycles für's xor (Format-I (Double Operand) Instruction).
Macht zusammen 7 Cycles für's Toggeln.

Da komm ich aber doch trotzdem nicht hin, oder hab ich mir verzählt?

Autor: Nicolas S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zweimal Toggeln ist eine Periode.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, alles klar. Dann hab ich's schon.

Anfang mit Lowpegel, xor (5 Zyklen) auf High, Jump (2 Zyklen), xor auf 
Low (nochmal 5 Zyklen) macht 12 Zyklen und die Periode ist durch.

Danke für eure Hilfe!
Daniel

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.